1
2-- -----------------------------------------------------------------
3-- Init
4-- -----------------------------------------------------------------
5local function prog_init()
6    initModels()
7    sound_playMusic("music/rybky01.ogg")
8    local pokus = getRestartCount()
9
10
11    -- -------------------------------------------------------------
12    local function prog_init_room()
13        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
14
15        room.okrikla = 0
16        room.maxdrzost = 20
17        room.kuk = 0
18        room.kobyla = 0
19        room.prekazka = 0
20        room.okriknuti = 2
21        room.vsichni = 0
22
23        return function()
24            if isReady(small) and isReady(big) and no_dialog() then
25                if valec.X == 7 and valec.Y == 9 and valec.dir == dir_no and room.prekazka == 0 then
26                    switch(random(2)){
27                        [0] = function()
28                            addv(0, "mik-v-sakra")
29                        end,
30                        [1] = function()
31                            addv(random(4), "mik-v-projet")
32                        end,
33                    }
34                    room.prekazka = 1
35                elseif room.okrikla ~= 1 and room.vsichni == 1 then
36                    switch(random(room.okriknuti)){
37                        [0] = function()
38                            addv(random(5), "mik-v-ticho0")
39                        end,
40                        [1] = function()
41                            addv(random(5), "mik-v-ticho1")
42                        end,
43                        [2] = function()
44                            addv(random(5), "mik-v-ticho2")
45                        end,
46                    }
47                    planSet(room, "okrikla", 1)
48                elseif room.okrikla == 1 then
49                    krab1:killSound()
50                    krab2:killSound()
51                    krab3:killSound()
52                    krab4:killSound()
53
54                    room.vsichni = 0
55                    dialog_table = {
56                        [0] = function()
57                            addm(20 + random(15), "mik-m-krab")
58                            if random(100) < 50 then
59                                addm(random(6), "mik-m-poust")
60                            end
61                        end,
62                        [1] = function()
63                            addm(10 + random(25), "mik-m-tusit")
64                        end,
65                        [2] = function()
66                            switch(random(2)){
67                                [0] = function()
68                                    addv(10 + random(15), "mik-v-proto")
69                                end,
70                                [1] = function()
71                                    addv(10 + random(15), "mik-v-tak")
72                                end,
73                            }
74                            if room.okriknuti == 3 then
75                                switch(random(6)){
76                                    [0] = function()
77                                        addm(6 + random(5), "mik-m-nezlob")
78                                    end,
79                                    [1] = function()
80                                        addm(10 + random(25), "mik-m-myslit")
81                                    end,
82                                    [2] = function()
83                                        addm(random(5), "mik-m-nezlob")
84                                        addm(5 + random(15), "mik-m-myslit")
85                                    end,
86                                }
87                            end
88                            room.okriknuti = 3
89                        end,
90                    }
91
92                    dialog_table[3] = dialog_table[2]
93                    dialog_table[4] = dialog_table[2]
94                    switch(random(7))(dialog_table)
95
96                    room.okrikla = 0
97                    krab1.drzej = 0
98                    krab2.drzej = 0
99                    krab3.drzej = 0
100                    krab4.drzej = 0
101                    adddel(random(20) + 30)
102                    planSet(krab1, "drzej", 1)
103                    planSet(krab2, "drzej", 1)
104                    planSet(krab3, "drzej", 1)
105                    planSet(krab4, "drzej", 1)
106                elseif look_at(small, rybusa) and rybusa.afaze > 0 and random(100) < 10 and room.kuk == 0 then
107                    addm(random(5), "mik-m-proc")
108                    addv(random(5), "mik-v-videt")
109                    room.kuk = 1
110                elseif look_at(small, kun) and room.kobyla == 0 and (small.Y == kun.Y or small.Y == kun.Y + 1) and xdist(small, kun) < 2 and kun.dir == dir_no and random(200) < 1 then
111                    addm(0, "mik-m-konik")
112                    room.kobyla = 1
113                end
114            end
115        end
116    end
117
118    -- -------------------------------------------------------------
119    local function prog_init_kun()
120        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
121
122        kun.pauza = random(10)
123
124        return function()
125            if kun.pauza > 0 then
126                kun.pauza = kun.pauza - 1
127            else
128                switch(kun.afaze){
129                    [0] = function()
130                        kun.afaze = random(2) + 2
131                        kun.pauza = 10 - kun.afaze + random((5 - kun.afaze) * 20)
132                    end,
133                    [1] = function()
134                        kun.afaze = random(4)
135                        kun.pauza = 10 + random(10)
136                    end,
137                    [2] = function()
138                        kun.pauza = random(150)
139                        if kun.pauza < 20 then
140                            kun.afaze = 3
141                        else
142                            kun.afaze = 1
143                        end
144                    end,
145                    [3] = function()
146                        kun.afaze = 0
147                        kun.pauza = random(20)
148                    end,
149                }
150            end
151
152            kun:updateAnim()
153        end
154    end
155
156    -- -------------------------------------------------------------
157    local function prog_init_rybusa()
158        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
159
160        rybusa.pauza = random(50)
161
162        return function()
163            if rybusa.pauza > 0 then
164                rybusa.pauza = rybusa.pauza - 1
165            else
166                switch(rybusa.afaze){
167                    [0] = function()
168                        rybusa.afaze = 1
169                        rybusa.pauza = 10 + random(20)
170                    end,
171                    [1] = function()
172                        rybusa.afaze = random(4)
173                        if rybusa.afaze == 0 then
174                            rybusa.pauza = 20 + random(100)
175                        else
176                            rybusa.pauza = 10 + random(5)
177                        end
178                    end,
179                    [2] = function()
180                        rybusa.afaze = 1 + random(2) * 2
181                        rybusa.pauza = 10 + random(5)
182                    end,
183                    [3] = function()
184                        rybusa.afaze = 1 + random(2)
185                        rybusa.pauza = 10 + random(5)
186                    end,
187                }
188            end
189
190            rybusa:updateAnim()
191        end
192    end
193
194    -- -------------------------------------------------------------
195    local function prog_init_sepie()
196        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
197
198        sepie.mrk = 0
199        sepie.pozice = 0
200
201        return function()
202            if random(7) < 4 then
203                sepie.pozice = random(3)
204            end
205            if random(10) < 4 then
206                sepie.mrk = random(2)
207            end
208            sepie.afaze = sepie.mrk * 3 + sepie.pozice
209
210            sepie:updateAnim()
211        end
212    end
213
214    -- -------------------------------------------------------------
215    local function prog_init_krab4()
216        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
217
218        krab4.drzej = 1
219        krab4.keca = 0
220
221        return function()
222            if krab4:isTalking() then
223                krab4.keca = 1
224            else
225                krab4.keca = 0
226            end
227            if krab4.keca == 0 and random(200) < krab4.drzej then
228                if krab1.keca == 1 and krab2.keca == 1 and krab3.keca == 1 then
229                    room.vsichni = 1
230                end
231                switch(random(4)){
232                    [0] = function()
233                        krab4:talk("mik-x-stebet0")
234                    end,
235                    [1] = function()
236                        krab4:talk("mik-x-stebet1")
237                    end,
238                    [2] = function()
239                        krab4:talk("mik-x-stebet2")
240                    end,
241                    [3] = function()
242                        krab4:talk("mik-x-stebet3")
243                    end,
244                }
245                krab4.drzej = krab4.drzej + 1
246                krab4.keca = 1
247            end
248            if krab4.keca == 1 then
249                krab4.afaze = random(2) * 2
250            else
251                krab4.afaze = 0
252            end
253            if random(100) < 5 then
254                krab4.afaze = krab4.afaze + 1
255            end
256            if room.okrikla == 1 then
257                krab4.drzej = 1
258            end
259
260            krab4:updateAnim()
261        end
262    end
263
264    -- -------------------------------------------------------------
265    local function prog_init_krab3()
266        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
267
268        krab3.drzej = 1
269        krab3.keca = 0
270
271        return function()
272            if krab3:isTalking() then
273                krab3.keca = 1
274            else
275                krab3.keca = 0
276            end
277            if krab3.keca == 0 and random(200) < krab3.drzej then
278                if krab1.keca == 1 and krab2.keca == 1 and krab4.keca == 1 then
279                    room.vsichni = 1
280                end
281                switch(random(4)){
282                    [0] = function()
283                        krab3:talk("mik-x-stebet0")
284                    end,
285                    [1] = function()
286                        krab3:talk("mik-x-stebet1")
287                    end,
288                    [2] = function()
289                        krab3:talk("mik-x-stebet2")
290                    end,
291                    [3] = function()
292                        krab3:talk("mik-x-stebet3")
293                    end,
294                }
295                krab3.drzej = krab3.drzej + 1
296                krab3.keca = 1
297            end
298            if krab3.keca == 1 then
299                krab3.afaze = random(2) * 2
300            else
301                krab3.afaze = 0
302            end
303            if random(100) < 5 then
304                krab3.afaze = krab3.afaze + 1
305            end
306            if room.okrikla == 1 then
307                krab3.drzej = 1
308            end
309
310            krab3:updateAnim()
311        end
312    end
313
314    -- -------------------------------------------------------------
315    local function prog_init_krab2()
316        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
317
318        krab2.drzej = 1
319        krab2.keca = 0
320
321        return function()
322            if krab2:isTalking() then
323                krab2.keca = 1
324            else
325                krab2.keca = 0
326            end
327            if krab2.keca == 0 and random(200) < krab2.drzej then
328                if krab1.keca == 1 and krab3.keca == 1 and krab4.keca == 1 then
329                    room.vsichni = 1
330                end
331                switch(random(4)){
332                    [0] = function()
333                        krab2:talk("mik-x-stebet0")
334                    end,
335                    [1] = function()
336                        krab2:talk("mik-x-stebet1")
337                    end,
338                    [2] = function()
339                        krab2:talk("mik-x-stebet2")
340                    end,
341                    [3] = function()
342                        krab2:talk("mik-x-stebet3")
343                    end,
344                }
345                krab2.drzej = krab2.drzej + 1
346                krab2.keca = 1
347            end
348            if krab2.keca == 1 then
349                krab2.afaze = random(2) * 2
350            else
351                krab2.afaze = 0
352            end
353            if random(100) < 5 then
354                krab2.afaze = krab2.afaze + 1
355            end
356            if room.okrikla == 1 then
357                krab2.drzej = 1
358            end
359
360            krab2:updateAnim()
361        end
362    end
363
364    -- -------------------------------------------------------------
365    local function prog_init_snek()
366        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
367
368        snek.pauza = 3
369
370        return function()
371            if snek.pauza > 0 then
372                snek.pauza = snek.pauza - 1
373            else
374                switch(snek.afaze){
375                    [0] = function()
376                        snek.afaze = random(2) * 2
377                    end,
378                    [1] = function()
379                        snek.afaze = random(4)
380                    end,
381                    [2] = function()
382                        snek.afaze = 1 + 2 * random(2)
383                    end,
384                    [3] = function()
385                        snek.afaze = random(3)
386                    end,
387                }
388                snek.pauza = random(20) + 5
389            end
390
391            snek:updateAnim()
392        end
393    end
394
395    -- -------------------------------------------------------------
396    local function prog_init_krab1()
397        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
398
399        krab1.drzej = 1
400        krab1.keca = 0
401
402        return function()
403            if krab1:isTalking() then
404                krab1.keca = 1
405            else
406                krab1.keca = 0
407            end
408            if krab1.keca == 0 and random(300) < krab1.drzej then
409                if krab2.keca == 1 and krab3.keca == 1 and krab4.keca == 1 then
410                    room.vsichni = 1
411                end
412                switch(random(4)){
413                    [0] = function()
414                        krab1:talk("mik-x-stebet0")
415                    end,
416                    [1] = function()
417                        krab1:talk("mik-x-stebet1")
418                    end,
419                    [2] = function()
420                        krab1:talk("mik-x-stebet2")
421                    end,
422                    [3] = function()
423                        krab1:talk("mik-x-stebet3")
424                    end,
425                }
426                krab1.drzej = krab1.drzej + 1
427                krab1.keca = 1
428            end
429            if krab1.keca == 1 then
430                krab1.afaze = random(2) * 2
431            else
432                krab1.afaze = 0
433            end
434            if random(100) < 5 then
435                krab1.afaze = krab1.afaze + 1
436            end
437            if room.okrikla == 1 then
438                krab1.drzej = 1
439            end
440
441            krab1:updateAnim()
442        end
443    end
444
445    -- --------------------
446    local update_table = {}
447    local subinit
448    subinit = prog_init_room()
449    if subinit then
450        table.insert(update_table, subinit)
451    end
452    subinit = prog_init_kun()
453    if subinit then
454        table.insert(update_table, subinit)
455    end
456    subinit = prog_init_rybusa()
457    if subinit then
458        table.insert(update_table, subinit)
459    end
460    subinit = prog_init_sepie()
461    if subinit then
462        table.insert(update_table, subinit)
463    end
464    subinit = prog_init_krab4()
465    if subinit then
466        table.insert(update_table, subinit)
467    end
468    subinit = prog_init_krab3()
469    if subinit then
470        table.insert(update_table, subinit)
471    end
472    subinit = prog_init_krab2()
473    if subinit then
474        table.insert(update_table, subinit)
475    end
476    subinit = prog_init_snek()
477    if subinit then
478        table.insert(update_table, subinit)
479    end
480    subinit = prog_init_krab1()
481    if subinit then
482        table.insert(update_table, subinit)
483    end
484    return update_table
485end
486local update_table = prog_init()
487
488
489-- -----------------------------------------------------------------
490-- Update
491-- -----------------------------------------------------------------
492function prog_update()
493    for key, subupdate in pairs(update_table) do
494        subupdate()
495    end
496end
497
498