-- ----------------------------------------------------------------- local usedJokes = {} local usedJokesCapacity = 3 local peek = -1 local function wasUsedRecently(n) return isIn(n, usedJokes) end local function rememberUsed(n) peek = math.mod(peek + 1, usedJokesCapacity) usedJokes[peek] = n end -- ----------------------------------------------------------------- -- NOTE: uses 'small' and 'big' names for fishes local function selectJoke(n) if not isReady(small) or not isReady(big) then return end switch(n){ [0] = function() if level_getDepth() ~= 15 then if random(100) < 30 then addm(20, "ob-m-neverim") end if random(100) < 30 then addm(20, "ob-m-nedosataneme") end if random(100) < 30 then addm(20, "ob-m-naveky") end switch(random(4)){ [0] = function() addv(random(15) + 5, "ob-v-jit0") end, [1] = function() addv(random(15) + 5, "ob-v-jit1") end, [2] = function() addv(random(15) + 5, "ob-v-musi") end, [3] = function() addv(random(15) + 5, "ob-v-klid") end, } end end, [1] = function() switch(random(3)){ [0] = function() addv(20, "ob-v-neobvykle") addm(randint(5, 10), "ob-m-teorie") end, [1] = function() addv(20, "ob-v-mamto") addm(randint(10, 20), "ob-m-pokracuj") addv(5, "ob-v-napad") if random(100) < 40 then addm(6, "ob-m-zase") end end, [2] = function() addv(20, "ob-v-vyzkousej") addm(0, "ob-m-co") addv(randint(5, 15), "ob-v-alenic") if random(100) < 40 then addm(6, "ob-m-zase") end end, } end, [2] = function() switch(random(3)){ [0] = function() addv(10, "ob-v-nebavi") end, [1] = function() addv(10, "ob-v-hrej") end, [2] = function() addv(10, "ob-v-sami") end, } switch(random(3)){ [0] = function() addm(5, "ob-m-pst") end, [1] = function() addm(5, "ob-m-hlavu") end, [2] = function() addm(5, "ob-m-klid") end, } end, [3] = function() switch(random(4)){ [0] = function() addm(10, "ob-m-jesteneco") end, [1] = function() addm(10, "ob-m-nedeje") end, [2] = function() addm(10, "ob-m-proc") end, [3] = function() addm(10, "ob-m-ceka") end, } switch(random(3)){ [0] = function() addv(5, "ob-v-nerus") end, [1] = function() addv(5, "ob-v-nerus") end, [2] = function() addm(15, "ob-m-jetam") planBusy(big, true) addv(randint(5, 25), "ob-v-leskne") planBusy(big, false) end, } end, [4] = function() switch(random(5)){ [0] = function() addv(10, "ob-v-prestavka") end, [1] = function() planDialog(TALK_INDEX_BOTH, 10, "ob-o-nebavi") end, [2] = function() planBusy(big, true) planBusy(small, true) planDialog(TALK_INDEX_BOTH, 10, "ob-o-halo") addv(10, "ob-v-nelekl") addm(6, "ob-m-mysleli") planBusy(big, false) planBusy(small, false) end, [3] = function() planBusy(big, true) addv(10, "ob-v-nehybes") planBusy(big, false) addm(10, "ob-m-resit") addv(5, "ob-v-akvarium") end, [4] = function() --TODO: shake room -- addset(Room.TrepatRoom, 1) addv(5, "ob-v-halo") adddel(5) -- addset(Room.TrepatRoom, 0) end, } end, [5] = function() switch(random(6)){ [0] = function() planBusy(small, true) addm(5, "ob-m-tezky") planBusy(small, false) end, [1] = function() planBusy(big, true) addv(5, "ob-v-jidlo") planBusy(big, false) end, [2] = function() planBusy(small, true) addm(5, "ob-m-strach") planBusy(small, false) end, [3] = function() addm(10, "ob-m-jakdlouho") addv(5, "ob-v-zvykacka") room.zvykacka = true end, [4] = function() addv(5, "ob-v-ostani") addm(5, "ob-m-kdo") addv(5, "ob-v-kdoresi") addm(10, "ob-m-pravdepodobne") end, [5] = function() addm(10, "ob-m-ach") addv(5, "ob-v-copak") addm(15, "ob-m-lito") addv(5, "ob-v-colito") addm(5, "ob-m-vsechno") addv(5, "ob-v-covsechno") addm(1, "ob-m-uplnevse") end, } end, } end -- ----------------------------------------------------------------- -- TODO: remember delayForJoke after restart local lastDialog = 0 local delayForJoke = random(600) + 600 local boredRate = 0 local function boredUnits() for index, unit in pairs(getUnitTable()) do if not (unit:getAction() == "rest") then boredRate = 0 return false end end boredRate = boredRate + 1 return boredRate > delayForJoke end function stdBoreJokeLoad() lastDialog = game_getCycles() dialogLoad("script/share/bore_", "sound/share/borejokes/") end function stdBoreJoke() if boredUnits() and no_dialog() then boredRate = 0 delayForJoke = delayForJoke * randint(100, 150) / 100 n = random(6) while wasUsedRecently(n) do n = random(6) end rememberUsed(n) selectJoke(n) end end