-- ----------------------------------------------------------------- -- Init -- ----------------------------------------------------------------- local function prog_init() initModels() local pokus = getRestartCount() -- ------------------------------------------------------------- local function prog_init_room() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false room.druh = 1 end -- ------------------------------------------------------------- local function prog_init_krab1() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab1.ceka = 10 krab1.krok = 0 return function() krab1.muze = 0 krab2.muze = 0 krab3.muze = 0 krab4.muze = 0 if krab2.Y == krab1.Y and dist(krab1, krab2) == 1 then krab1.muze = 1 krab2.muze = 1 end if krab3.Y == krab1.Y and dist(krab1, krab3) == 1 then krab1.muze = 1 krab3.muze = 1 end if krab4.Y == krab1.Y and dist(krab1, krab4) == 1 then krab1.muze = 1 krab4.muze = 1 end if krab3.Y == krab2.Y and dist(krab2, krab3) == 1 then krab2.muze = 1 krab3.muze = 1 end if krab4.Y == krab2.Y and dist(krab2, krab4) == 1 then krab2.muze = 1 krab4.muze = 1 end if krab4.Y == krab3.Y and dist(krab3, krab4) == 1 then krab3.muze = 1 krab4.muze = 1 end if math.mod(game_getCycles(), 2) == 0 then if krab1.krok == 7 then krab1.krok = 0 else krab1.krok = krab1.krok + 1 end end if krab1.ceka > 0 then krab1.ceka = krab1.ceka - 1 end if krab1.dir ~= dir_no or not klavir:isTalking() then krab1.ceka = 20 end if krab1.muze == 1 and krab1.ceka == 0 and klavir:isTalking() then if room.druh == 0 then if isIn(krab1.krok, {1, 3, 5, 7}) then krab1.afaze = 7 elseif isIn(krab1.krok, {2, 4, 6, 0})then krab1.afaze = 9 end else switch(krab1.krok){ [0] = function() krab1.afaze = 6 end, [2] = function() krab1.afaze = 7 end, [4] = function() krab1.afaze = 8 end, [6] = function() krab1.afaze = 9 end, default = function() krab1.afaze = 0 end, } end elseif krab1.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then krab1.afaze = random(6) end krab1:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab2() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab2.ceka = 20 return function() if krab2.ceka > 0 then krab2.ceka = krab2.ceka - 1 end if krab2.dir ~= dir_no or not klavir:isTalking() then krab2.ceka = 20 end if krab2.muze == 1 and krab2.ceka == 0 and klavir:isTalking() then if room.druh == 0 then if isIn(krab1.krok, {1, 3, 5, 7}) then krab2.afaze = 7 elseif isIn(krab1.krok, {2, 4, 6, 0})then krab2.afaze = 9 end else switch(krab1.krok){ [0] = function() krab2.afaze = 6 end, [2] = function() krab2.afaze = 7 end, [4] = function() krab2.afaze = 8 end, [6] = function() krab2.afaze = 9 end, default = function() krab2.afaze = 0 end, } end elseif krab2.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then krab2.afaze = random(6) end krab2:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab3() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab3.ceka = 30 return function() if krab3.ceka > 0 then krab3.ceka = krab3.ceka - 1 end if krab3.dir ~= dir_no or not klavir:isTalking() then krab3.ceka = 20 end if krab3.muze == 1 and krab3.ceka == 0 and klavir:isTalking() then if room.druh == 0 then if isIn(krab1.krok, {1, 3, 5, 7}) then krab3.afaze = 7 elseif isIn(krab1.krok, {2, 4, 6, 0})then krab3.afaze = 9 end else switch(krab1.krok){ [0] = function() krab3.afaze = 6 end, [2] = function() krab3.afaze = 7 end, [4] = function() krab3.afaze = 8 end, [6] = function() krab3.afaze = 9 end, default = function() krab3.afaze = 0 end, } end elseif krab3.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then krab3.afaze = random(6) end krab3:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab4() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab4.ceka = 40 return function() if krab4.ceka > 0 then krab4.ceka = krab4.ceka - 1 end if krab4.dir ~= dir_no or not klavir:isTalking() then krab4.ceka = 20 end if krab4.muze == 1 and krab4.ceka == 0 and klavir:isTalking() then if room.druh == 0 then if isIn(krab1.krok, {1, 3, 5, 7}) then krab4.afaze = 7 elseif isIn(krab1.krok, {2, 4, 6, 0})then krab4.afaze = 9 end else switch(krab1.krok){ [0] = function() krab4.afaze = 6 end, [2] = function() krab4.afaze = 7 end, [4] = function() krab4.afaze = 8 end, [6] = function() krab4.afaze = 9 end, default = function() krab4.afaze = 0 end, } end elseif krab4.afaze > 5 or math.mod(game_getCycles(), 3) == 0 and random(100) < 40 then krab4.afaze = random(6) end krab4:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_klavir() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false klavir.ruce = 0 klavir.otocka = -random(100) - 100 klavir.vyruseni = 0 return function() if klavir.dir ~= dir_no then klavir:killSound() klavir.vyruseni = 20 + random(25) end if klavir.vyruseni > 0 then if no_dialog() then klavir.vyruseni = klavir.vyruseni - 1 if klavir.vyruseni == 0 then klavir:talk("kan-klavir-music", VOLUME_LOW, -1) end end if random(100) < 3 then klavir.afaze = 8 else klavir.afaze = 6 end else if not klavir:isTalking() then klavir:talk("kan-klavir-music", VOLUME_LOW, -1) end if klavir.otocka > 0 and klavir.mrknuti > 0 then if klavir.ruce == 0 then klavir.ruce = 2 elseif klavir.ruce == 2 then klavir.ruce = 0 else klavir.ruce = random(2) * 2 end klavir.afaze = 8 + math.floor(klavir.ruce / 2) klavir.mrknuti = klavir.mrknuti - 1 klavir.otocka = klavir.otocka - 1 else klavir.ruce = math.mod(klavir.ruce + random(3) + 1, 4) if klavir.otocka > 0 then klavir.afaze = 4 + klavir.ruce if random(100) < 7 then klavir.mrknuti = 1 + random(4) end klavir.otocka = klavir.otocka - 1 else klavir.afaze = klavir.ruce klavir.otocka = klavir.otocka + 1 if klavir.otocka == 0 then klavir.otocka = random(10) + 50 klavir.mrknuti = 0 end end end if klavir.otocka == 0 then klavir.otocka = -random(300) - 150 end end klavir:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sepie() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sepie.mrk = 0 sepie.nohy = 0 return function() pomb1 = sepie.dir == dir_down pomb2 = isWater(sepie.X, sepie.Y + 1) and isWater(sepie.X + 1, sepie.Y + 1) and not isWater(sepie.X + 2, sepie.Y + 3) if sepie.mrk > 0 then sepie.mrk = sepie.mrk - 1 elseif random(100) < 15 then sepie.mrk = random(3) + 2 end if pomb1 or not pomb2 then if odd(game_getCycles()) then sepie.nohy = math.mod(sepie.nohy + 2 + random(2) * 2, 3) end sepie.afaze = sepie.nohy if pomb1 then sepie.afaze = sepie.nohy + 3 elseif sepie.mrk > 0 then sepie.afaze = sepie.nohy + 6 else sepie.afaze = sepie.nohy end else if sepie.dir == dir_left or sepie.dir == dir_down then sepie.nohy = math.mod(sepie.nohy + 1, 2) else sepie.nohy = 0 end if sepie.mrk > 0 then sepie.afaze = 2 * sepie.nohy + 10 else sepie.afaze = 2 * sepie.nohy + 9 end end sepie:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_rejnok() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false rejnok.pozice = 0 rejnok.nespi = 0 return function() if math.mod(game_getCycles(), 2) == 0 or rejnok.nespi > 20 then if rejnok.pozice == 5 then rejnok.pozice = 0 else rejnok.pozice = rejnok.pozice + 1 end if rejnok.dir ~= dir_no then rejnok.nespi = random(60) + 20 end if rejnok.nespi > 0 then if random(100) < 13 then rejnok.afaze = rejnok.pozice else rejnok.afaze = rejnok.pozice + 6 end rejnok.nespi = rejnok.nespi - 1 else rejnok.afaze = rejnok.pozice end end rejnok:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sasanka() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sasanka.noha = 0 sasanka.kvet = 0 return function() if isWater(sasanka.X, sasanka.Y - 1) then local cycle = math.mod(game_getCycles(), 8) if isIn(cycle, {0, 1, 2, 3}) then sasanka.noha = 0 else sasanka.noha = 1 end if isIn(cycle, {0, 3, 4, 7}) then sasanka.kvet = 1 else sasanka.kvet = 0 end sasanka.afaze = sasanka.noha * 4 + sasanka.kvet + 1 else sasanka.afaze = 1 end sasanka:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_big() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false big.ptalnyni = 0 return function() if big.ptalnyni == 1 and klavir:isTalking() then big.ptalnyni = 0 elseif big.ptalnyni == 0 and not klavir:isTalking() and random(1000) < 15 then big.ptalnyni = 1 addv(3, "kan-v-proc") end end end -- -------------------- local update_table = {} local subinit subinit = prog_init_room() if subinit then table.insert(update_table, subinit) end subinit = prog_init_krab1() if subinit then table.insert(update_table, subinit) end subinit = prog_init_krab2() if subinit then table.insert(update_table, subinit) end subinit = prog_init_krab3() if subinit then table.insert(update_table, subinit) end subinit = prog_init_krab4() if subinit then table.insert(update_table, subinit) end subinit = prog_init_klavir() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sepie() if subinit then table.insert(update_table, subinit) end subinit = prog_init_rejnok() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sasanka() if subinit then table.insert(update_table, subinit) end subinit = prog_init_big() 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