-- ----------------------------------------------------------------- -- Init -- ----------------------------------------------------------------- local function prog_init() initModels() sound_playMusic("music/rybky02.ogg") local pokus = getRestartCount() local luminous = { small, big, leftpes, rightpes, vypinac, dvere1, dvere2, dvere3, dvere4, poklop1, poklop2 } addHeadAnim(small, "images/fishes/small", "head_dark", "dark_00") addHeadAnim(small, "images/fishes/small", "head_dark", "dark_01") addHeadAnim(big, "images/fishes/big", "head_dark", "dark_00") addHeadAnim(big, "images/fishes/big", "head_dark", "dark_01") -- ------------------------------------------------------------- local function prog_init_room() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false room.oci = 0 room.bliknul = 0 room.last = random(2) room.rpesmala = 0 room.rpesvelka = 0 room.nerusit = 0 room.pesmluvi = 0 room.dark = false local darked = false return function() if room.dark then for key, model in pairs({small, big}) do if model:isAlive() then local action = model:getAction() if action == "turn" or action == "activate" or random(100) < 6 then model_useSpecialAnim(model.index, "head_dark", 1) else model_useSpecialAnim(model.index, "head_dark", 0) end end end if not darked then game_changeBg("images/"..codename.."/dark.png") for key, model in pairs(getModelsTable()) do if not isIn(model, luminous) then model:setEffect("invisible") end end darked = true end elseif darked then game_changeBg("images/"..codename.."/chodba-p2.png") for key, model in pairs(getModelsTable()) do model:setEffect("none") end darked = false end if no_dialog() and isReady(small) and isReady(big) then if room.dark and room.tma > 0 then room.tma = room.tma - 1 end if not room.dark then room.tma = random(100) + 50 end if room.bliknul == 1 then room.bliknul = room.bliknul + 1 addm(random(10) + 10, "ch-m-rozsvit"..random(3)) addv(random(15) + 2, "ch-v-pockej"..random(3)) elseif room.bliknul == 3 then room.bliknul = room.bliknul + 1 addm(random(10), "ch-m-blik"..random(2)) room.oci = room.bliknul + 2 elseif room.oci < room.bliknul and room.oci > 0 then if random(100) < 40 then room.oci = 0 addm(3, "ch-m-blik0") else room.oci = room.bliknul end elseif room.tma == 0 then room.tma = random(300) + 100 if random(100) < 80 then room.last = 1 - room.last end switch(room.last){ [0] = function() addv(0, "ch-v-halo"..random(3)) addm(random(20), "ch-m-tady"..random(3)) end, [1] = function() addm(0, "ch-m-bojim"..random(3)) addv(random(20), "ch-v-neboj"..random(3)) end, } elseif room.rpesvelka == 0 and big.Y >= 20 and random(100) < 2 then room.rpesvelka = 1 room.nerusit = 1 pom1 = random(4) addv(10, "ch-v-robopes") addm(random(5), "ch-m-ten") addv(random(10), "ch-v-zapada") addm(5 + random(10), "ch-m-odpoved"..pom1) if random(100) < 70 then addv(random(20) + 10, "ch-v-smysl") if random(100) < 80 then addm(random(10) + 5, "ch-m-vubec") end end room.cpsa = random(2) planDialogSet(random(20), "ch-r-nevsimej"..random(3), 10, room, "pesmluvi") planDialogSet(random(20), "ch-r-hracka", 10, room, "pesmluvi") planDialogSet(10 + random(20), "ch-r-ikdyz"..random(4), 10, room, "pesmluvi") planDialogSet(10 + random(20), "ch-r-anavic"..pom1, 10, room, "pesmluvi") planSet(room, "nerusit", 0) elseif room.rpesmala == 0 and small.Y >= 28 and (small.X <= 11 or small.X >= 20) and random(100) < 3 then if room.rpesvelka == 1 and random(3) < 2 then addv(2, "ch-v-pozor") else addm(2, "ch-m-doufam") end room.rpesmala = 1 end end end end -- ------------------------------------------------------------- local function prog_init_rightpes() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false rightpes.faze = 0 return function() if rightpes.faze == 2 then rightpes.faze = 0 else rightpes.faze = rightpes.faze + 1 end if room.dark then rightpes.afaze = rightpes.faze + 3 else rightpes.afaze = rightpes.faze if room.pesmluvi ~= 0 and room.cpsa == 1 and random(2) == 0 then rightpes.afaze = rightpes.afaze + 6 end end rightpes:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_leftpes() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false leftpes.faze = 0 return function() if leftpes.faze == 2 then leftpes.faze = 0 else leftpes.faze = leftpes.faze + 1 end if room.dark then leftpes.afaze = leftpes.faze + 3 else leftpes.afaze = leftpes.faze if room.pesmluvi ~= 0 and room.cpsa == 0 and random(2) == 0 then leftpes.afaze = leftpes.afaze + 6 end end leftpes:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_vypinac() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false vypinac.stav = 0 local afterLoad = true return function() if afterLoad then afterLoad = false return end switch(vypinac.stav){ [0] = function() if (vypinac.dir == dir_left or vypinac.dir == dir_right) and level_isNewRound() then vypinac.stav = vypinac.stav + 1 vypinac.afaze = 1 vypinac:talk("ch-x-click1") end end, [1] = function() vypinac.stav = vypinac.stav + 1 vypinac.afaze = 2 room.dark = true room.bliknul = room.bliknul + 1 if room.nerusit == 0 then game_killPlan() end end, [2] = function() if (vypinac.dir == dir_left or vypinac.dir == dir_right) and level_isNewRound() then vypinac.stav = 0 vypinac.afaze = 0 room.dark = false vypinac:talk("ch-x-click2") room.bliknul = room.bliknul + 1 if room.nerusit == 0 then game_killPlan() end end end, } vypinac:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_dvere1() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false dvere1.faze = 0 dvere1.pocit = 2 return function() if dvere1.pocit > 0 then dvere1.pocit = dvere1.pocit - 1 else dvere1.pocit = 5 dvere1.faze = 1 - dvere1.faze end if room.dark then dvere1.afaze = dvere1.faze + 2 else dvere1.afaze = dvere1.faze end dvere1:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_dvere2() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false dvere2.faze = 0 dvere2.pocit = 1 return function() if dvere2.pocit > 0 then dvere2.pocit = dvere2.pocit - 1 else dvere2.pocit = 1 dvere2.faze = 1 - dvere2.faze end if room.dark then dvere2.afaze = dvere2.faze + 2 else dvere2.afaze = dvere2.faze end dvere2:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_dvere3() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false dvere3.faze = 0 dvere3.pocit = 2 return function() if dvere3.pocit > 0 then dvere3.pocit = dvere3.pocit - 1 else dvere3.pocit = 4 dvere3.faze = 1 - dvere3.faze end if room.dark then dvere3.afaze = dvere3.faze + 2 else dvere3.afaze = dvere3.faze end dvere3:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_dvere4() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false dvere4.faze = 0 dvere4.pocit = 1 return function() if dvere4.pocit > 0 then dvere4.pocit = dvere4.pocit - 1 else dvere4.pocit = 2 dvere4.faze = 1 - dvere4.faze end if room.dark then dvere4.afaze = dvere4.faze + 2 else dvere4.afaze = dvere4.faze end dvere4:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_poklop2() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false poklop2.faze = 1 poklop2.pocit = 1 return function() if poklop2.pocit > 0 then poklop2.pocit = poklop2.pocit - 1 else poklop2.pocit = 3 poklop2.faze = 1 - poklop2.faze end if room.dark then poklop2.afaze = poklop2.faze + 2 else poklop2.afaze = poklop2.faze end poklop2:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_poklop1() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false poklop1.faze = 0 poklop1.pocit = 1 return function() if poklop1.pocit > 0 then poklop1.pocit = poklop1.pocit - 1 else poklop1.pocit = 3 poklop1.faze = 1 - poklop1.faze end if room.dark then poklop1.afaze = poklop1.faze + 2 else poklop1.afaze = poklop1.faze end poklop1:updateAnim() end end -- -------------------- local update_table = {} local subinit subinit = prog_init_room() if subinit then table.insert(update_table, subinit) end subinit = prog_init_rightpes() if subinit then table.insert(update_table, subinit) end subinit = prog_init_leftpes() if subinit then table.insert(update_table, subinit) end subinit = prog_init_vypinac() if subinit then table.insert(update_table, subinit) end subinit = prog_init_dvere1() if subinit then table.insert(update_table, subinit) end subinit = prog_init_dvere2() if subinit then table.insert(update_table, subinit) end subinit = prog_init_dvere3() if subinit then table.insert(update_table, subinit) end subinit = prog_init_dvere4() if subinit then table.insert(update_table, subinit) end subinit = prog_init_poklop2() if subinit then table.insert(update_table, subinit) end subinit = prog_init_poklop1() if subinit then table.insert(update_table, subinit) end return update_table end local update_table = prog_init() -- ----------------------------------------------------------------- -- Update -- ----------------------------------------------------------------- function prog_update() for key, subupdate in pairs(update_table) do subupdate() end end