local function isOneOf(models, x, y) for key, model in pairs(models) do if modelEquals(model, x, y) then return true end end return false end -- ----------------------------------------------------------------- -- Init -- ----------------------------------------------------------------- local function prog_init() initModels() local pokus = getRestartCount() local windflowers = {} table.insert(windflowers, sas1) table.insert(windflowers, sas2) table.insert(windflowers, sas3) table.insert(windflowers, sas4) table.insert(windflowers, sas5) table.insert(windflowers, sas6) -- ------------------------------------------------------------- local function prog_init_room() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false room.quvod = random(20) + 20 room.qhlaska = random(100) + 100 room.pouzito = {} room.vydrz = random(2) + 2 room.komentovaly = 0 room.kreseni = 0 return function() if isReady(small) and isReady(big) and no_dialog() and (balalajka.cinnost == 0 or balalajka.cinnost > 70) then if room.quvod > 0 then room.quvod = room.quvod - 1 end if balalajka.hrala > 0 then room.quvod = -1 end if room.qhlaska > 0 then room.qhlaska = room.qhlaska - 1 end if room.komentovaly < balalajka.hrala then --TODO: getRestartCount cannot be changed if pokus < 1000 then pokus = pokus + 1000 end room.komentovaly = balalajka.hrala if room.komentovaly <= room.vydrz then switch(random(4)){ [2] = function() addv(0, "kor-v-odvaz") end, [3] = function() addm(6, "kor-m-vsimlsis") addv(2, "kor-v-avidelas") addm(4, "kor-m-tovis") end, default = function() if random(2) == 1 then addv(6, "kor-v-juchacka") else addv(6, "kor-v-vali") end switch(random(3)){ [0] = function() addm(3, "kor-m-hraje") end, [1] = function() addm(3, "kor-m-nachob") end, } end, } else pom1 = random(6) for pom2 = 1, 2 do if pom2 == 1 and isIn(pom1, {0, 1, 4}) and random(3) == 0 or pom2 == 2 and pom1 == 5 then switch(random(2)){ [0] = function() addm(5, "kor-m-jinou") end, [1] = function() addm(5, "kor-m-neprehani") end, } elseif pom2 == 1 and pom1 <= 1 then addm(5, "kor-m-lezekrkem") end if pom2 == 1 and isIn(pom1, {2, 3, 5}) or pom2 == 2 and pom1 == 4 then switch(random(2)){ [0] = function() addv(5, "kor-v-lezekrkem") end, [1] = function() addv(5, "kor-v-kostice") end, } end end end elseif room.kreseni == 0 and big.X >= 30 and big.Y == 5 and elko.X == 30 then room.kreseni = room.kreseni + 1 addv(5, "kor-v-odsud") addm(8, "kor-m-budesmuset") elseif room.kreseni == 1 and isWater(10, 6) and isWater(23, 6) then room.kreseni = room.kreseni + 1 elseif room.kreseni == 2 and (isOneOf(windflowers, 10, 6) or isOneOf(windflowers, 23, 6)) then room.kreseni = room.kreseni + 1 addm(10, "kor-m-neniono") addm(20, "kor-m-tudiru") elseif room.qhlaska == 0 then room.qhlaska = random(600) + 200 pom1 = random(6) if not room.pouzito[pom1] then switch(pom1){ [0] = function() addm(10, "kor-m-dusi") end, [1] = function() addm(10, "kor-m-pocit") end, [2] = function() addm(10, "kor-m-bizarni") end, [3] = function() addv(10, "kor-v-bermudy") end, [4] = function() addv(10, "kor-v-inteligentni") end, [5] = function() addv(10, "kor-v-jedovate") end, } end room.pouzito[pom1] = true elseif room.quvod == 0 then --TODO: getRestartCount cannot be changed if 1 <= pokus and pokus <= 1000 then room.quvod = random(2) + 1 elseif 1001 <= pokus and pokus <= 2000 then room.quvod = 3 pokus = pokus + 1000 else room.quvod = random(4) end if room.quvod == 0 or room.quvod == 1 then addv(10, "kor-v-podivej") addm(2, "kor-m-vzdyt") addv(6, "kor-v-treba") elseif room.quvod == 2 or room.quvod == 3 then addm(10, "kor-m-podivej") addv(5, "kor-v-spitu") if random(100) < 40 then addm(2, "kor-m-avlada") end addv(10, "kor-v-nicje") if room.quvod == 3 then addm(5, "kor-m-pokud") end end room.quvod = -1 end end end end -- ------------------------------------------------------------- local function prog_init_krab1() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab1.krabfaze = 1 krab1.cekat = 0 return function() if room:isTalking() then switch(math.mod(game_getCycles(), 4)){ [0] = function() krab1.krabfaze = 7 end, [1] = function() krab1.krabfaze = 7 end, default = function() krab1.krabfaze = 9 end, } elseif krab1.krabfaze <= 2 then krab1.krabfaze = 1 else krab1.krabfaze = 2 end if krab1.krabfaze == 2 then krab1.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab1.cekat == 0 then krab1.afaze = 1 else krab1.afaze = 0 krab1.cekat = krab1.cekat - 1 end elseif not isWater(krab1.X, krab1.Y + 1) and not isWater(krab1.X + 1, krab1.Y + 1) then krab1.afaze = krab1.krabfaze elseif random(100) < 50 then krab1.afaze = random(4) + 2 end krab1:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_balalajka() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false balalajka.cinnost = 0 balalajka.hrala = 0 balalajka.tcatcat = random(15) + 10 return function() if balalajka.dir ~= dir_no and balalajka.cinnost == 0 then balalajka.cinnost = balalajka.cinnost + 1 end switch(balalajka.cinnost){ [0] = function() local cycle = math.mod(game_getCycles(), 18) switch(cycle){ [0] = function() if balalajka.tcatcat == 0 then balalajka:talk("kor-chob-tca", VOLUME_FULL) balalajka.tcatcat = random(15) + 10 else balalajka:talk("kor-chob-psi", VOLUME_FULL) balalajka.tcatcat = balalajka.tcatcat - 1 end end, [11] = function() balalajka:talk("kor-chob-chro", VOLUME_FULL) end, default = function() if 1 <= cycle and cycle <= 10 then balalajka.afaze = 0 else balalajka.afaze = 1 end end, } end, [1] = function() balalajka.hrala = balalajka.hrala + 1 game_killPlan() balalajka.afaze = 2 balalajka:killSound() end, [6] = function() balalajka.afaze = 3 end, [10] = function() balalajka.afaze = 4 end, [13] = function() balalajka.afaze = 3 end, [15] = function() balalajka.afaze = 4 end, [17] = function() balalajka.afaze = 5 end, [19] = function() room:talk("kor-room-music", VOLUME_LOW) end, [83] = function() balalajka.afaze = 5 end, [90] = function() balalajka.cinnost = 0 end, default = function() if isIn(balalajka.cinnost, {21, 23, 25, 27}) then balalajka.afaze = 6 elseif isIn(balalajka.cinnost, {22, 24, 26, 28}) then if random(100) < 10 then balalajka.afaze = 7 else balalajka.afaze = 8 end elseif isIn(balalajka.cinnost, {29, 31, 33, 35}) then balalajka.afaze = 9 elseif isIn(balalajka.cinnost, {30, 32, 34, 36}) then balalajka.afaze = 10 end end, } if balalajka.cinnost > 20 and balalajka.cinnost < 80 and not room:isTalking() then balalajka.cinnost = 80 elseif balalajka.cinnost == 36 then balalajka.cinnost = 21 elseif balalajka.cinnost > 0 then balalajka.cinnost = balalajka.cinnost + 1 end balalajka:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas1() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas1.sasfaze = -1 sas1.kvet = random(2) * 2 + 1 sas1.noha = random(2) return function() if room:isTalking() then local cycle = math.mod(game_getCycles(), 8) if isIn(cycle, {0, 1, 2, 3}) then pom1 = 0 else pom1 = 1 end if isIn(cycle, {0, 3, 4, 7}) then pom2 = 2 else pom2 = 1 end sas1.sasfaze = pom1 * 4 + pom2 else sas1.sasfaze = -1 end if isWater(sas1.X + 1, sas1.Y - 1) or modelEquals(room, sas1.X + 1, sas1.Y - 1) then if sas1.sasfaze >= 0 then sas1.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas1.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas1.noha = random(2) end sas1.afaze = sas1.noha * 4 + sas1.kvet end else sas1.afaze = 0 end sas1:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas2() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas2.kvet = random(2) * 2 + 1 sas2.noha = random(2) return function() if isWater(sas2.X + 1, sas2.Y - 1) or modelEquals(room, sas2.X + 1, sas2.Y - 1) then if sas1.sasfaze >= 0 then sas2.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas2.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas2.noha = random(2) end sas2.afaze = sas2.noha * 4 + sas2.kvet end else sas2.afaze = 0 end sas2:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas3() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas3.kvet = random(2) * 2 + 1 sas3.noha = random(2) return function() if isWater(sas3.X + 1, sas3.Y - 1) or modelEquals(room, sas3.X + 1, sas3.Y - 1) then if sas1.sasfaze >= 0 then sas3.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas3.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas3.noha = random(2) end sas3.afaze = sas3.noha * 4 + sas3.kvet end else sas3.afaze = 0 end sas3:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas4() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas4.kvet = random(2) * 2 + 1 sas4.noha = random(2) return function() if isWater(sas4.X + 1, sas4.Y - 1) or modelEquals(room, sas4.X + 1, sas4.Y - 1) then if sas1.sasfaze >= 0 then sas4.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas4.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas4.noha = random(2) end sas4.afaze = sas4.noha * 4 + sas4.kvet end else sas4.afaze = 0 end sas4:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas5() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas5.kvet = random(2) * 2 + 1 sas5.noha = random(2) return function() if isWater(sas5.X + 1, sas5.Y - 1) or modelEquals(room, sas5.X + 1, sas5.Y - 1) then if sas1.sasfaze >= 0 then sas5.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas5.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas5.noha = random(2) end sas5.afaze = sas5.noha * 4 + sas5.kvet end else sas5.afaze = 0 end sas5:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_sas6() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false sas6.kvet = random(2) * 2 + 1 sas6.noha = random(2) return function() if isWater(sas6.X + 1, sas6.Y - 1) or modelEquals(room, sas6.X + 1, sas6.Y - 1) then if sas1.sasfaze >= 0 then sas6.afaze = sas1.sasfaze else if math.mod(game_getCycles(), 3) == 0 and random(100) < 50 then sas6.kvet = random(2) * 2 + 1 end if math.mod(game_getCycles(), 4) == 0 and random(100) < 30 then sas6.noha = random(2) end sas6.afaze = sas6.noha * 4 + sas6.kvet end else sas6.afaze = 0 end sas6:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab2() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab2.cekat = 0 return function() if krab1.krabfaze == 2 then krab2.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab2.cekat == 0 then krab2.afaze = 1 else krab2.afaze = 0 krab2.cekat = krab2.cekat - 1 end elseif not isWater(krab2.X, krab2.Y + 1) and not isWater(krab2.X + 1, krab2.Y + 1) then krab2.afaze = krab1.krabfaze elseif random(100) < 50 then krab2.afaze = random(4) + 2 end krab2:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab3() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab3.cekat = 0 return function() if krab1.krabfaze == 2 then krab3.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab3.cekat == 0 then krab3.afaze = 1 else krab3.afaze = 0 krab3.cekat = krab3.cekat - 1 end elseif not isWater(krab3.X, krab3.Y + 1) and not isWater(krab3.X + 1, krab3.Y + 1) then krab3.afaze = krab1.krabfaze elseif random(100) < 50 then krab3.afaze = random(4) + 2 end krab3:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab4() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab4.cekat = 0 return function() if krab1.krabfaze == 2 then krab4.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab4.cekat == 0 then krab4.afaze = 1 else krab4.afaze = 0 krab4.cekat = krab4.cekat - 1 end elseif not isWater(krab4.X, krab4.Y + 1) and not isWater(krab4.X + 1, krab4.Y + 1) then krab4.afaze = krab1.krabfaze elseif random(100) < 50 then krab4.afaze = random(4) + 2 end krab4:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab5() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab5.cekat = 0 return function() if krab1.krabfaze == 2 then krab5.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab5.cekat == 0 then krab5.afaze = 1 else krab5.afaze = 0 krab5.cekat = krab5.cekat - 1 end elseif not isWater(krab5.X, krab5.Y + 1) and not isWater(krab5.X + 1, krab5.Y + 1) then krab5.afaze = krab1.krabfaze elseif random(100) < 50 then krab5.afaze = random(4) + 2 end krab5:updateAnim() end end -- ------------------------------------------------------------- local function prog_init_krab6() local pom1, pom2, pomb1, pomb2 = 0, 0, false, false krab6.cekat = 0 return function() if krab1.krabfaze == 2 then krab6.cekat = random(70) + 30 end if krab1.krabfaze <= 2 then if krab6.cekat == 0 then krab6.afaze = 1 else krab6.afaze = 0 krab6.cekat = krab6.cekat - 1 end elseif not isWater(krab6.X, krab6.Y + 1) and not isWater(krab6.X + 1, krab6.Y + 1) then krab6.afaze = krab1.krabfaze elseif random(100) < 50 then krab6.afaze = random(4) + 2 end krab6: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_right 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 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_balalajka() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas1() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas2() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas3() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas4() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas5() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sas6() 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_krab5() if subinit then table.insert(update_table, subinit) end subinit = prog_init_krab6() if subinit then table.insert(update_table, subinit) end subinit = prog_init_sepie() 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