1
2-- -----------------------------------------------------------------
3-- Init
4-- -----------------------------------------------------------------
5local function prog_init()
6    initModels()
7    sound_playMusic("music/rybky01.ogg")
8    local pokus = getRestartCount()
9    local roompole = createArray(1)
10
11
12    -- -------------------------------------------------------------
13    local function prog_init_room()
14        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
15
16        room.uvod = 0
17        room.lebzna = 0
18        room.lastura = 0
19        room.jizdam = random(15) + 3
20        room.jizdav = random(50) + 10
21        if pokus > 1 then
22            if random(100) < 30 then
23                room.uvod = 1
24            end
25            if random(100) < 50 then
26                room.lastura = 1
27            end
28            if random(100) < 60 then
29                room.lebzna = 1
30            end
31            if random(100) < 20 then
32                room.jizdam = -1
33            end
34            if random(100) < 30 then
35                room.jizdav = -1
36            end
37        end
38        room.huhuh = 0
39
40        return function()
41            if isReady(small) and isReady(big) and no_dialog() then
42                if room.uvod == 0 then
43                    addv(random(20) + 50, "zd1-v-civil")
44                    switch(roompole[0]){
45                        [0] = function()
46                            addm(random(10), "zd1-m-dolu")
47                        end,
48                        [1] = function()
49                            addm(random(10), "zd1-m-tlac")
50                            roompole[0] = roompole[0] + 1
51                        end,
52                        [2] = function()
53                            if random(2) == 0 then
54                                addm(random(10), "zd1-m-tlac")
55                            else
56                                addm(random(10), "zd1-m-dolu")
57                            end
58                        end,
59                    }
60                    room.uvod = 1
61                end
62                if room.lastura == 0 and look_at(small, shelka) and math.abs(ydist(small, shelka)) < 3 and random(100) < 1 then
63                    if random(2) == 0 then
64                        addm(0, "zd1-m-last")
65                    else
66                        addm(0, "zd1-m-poved")
67                    end
68                    if random(2) == 0 then
69                        addv(random(10), "zd1-v-talis")
70                    else
71                        addv(random(3), "zd1-v-styd")
72                    end
73                    room.lastura = 1
74                elseif room.lebzna == 0 and look_at(big, llebka) and math.abs(ydist(big, llebka)) < 3 and random(100) < 1 then
75                    addv(20, "zd1-v-lebka")
76                    addm(random(8), "zd1-m-stejne")
77                    room.lebzna = 1
78                elseif small.jede == room.jizdam then
79                    addm(0, "zd1-m-cesta")
80                    room.jizdam = -1
81                elseif big.jede == room.jizdav then
82                    addv(0, "zd1-v-krecek")
83                    addm(3, "zd1-m-slap")
84                    room.jizdav = -1
85                elseif random(1000) < 8 then
86                    pom1 = room.huhuh
87                    if room.huhuh == 0 then
88                        room.huhuh = random(3) + 1
89                    else
90                        room.huhuh = random(4) + 1
91                    end
92                    if pom1 == room.huhuh then
93                        room.huhuh = 5
94                    end
95                    planDialogSet(5, "zd1-x-huhu"..room.huhuh, 101, dedek, "mluvi")
96                end
97            end
98        end
99    end
100
101    -- -------------------------------------------------------------
102    local function prog_init_vytah()
103        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
104
105        --NOTE: double rope
106        game_addDecor("rope", vytah.index, stroj.index, 43, 0, 58, 27)
107        game_addDecor("rope", vytah.index, stroj.index, 43 + 3, 0, 58 + 3, 27)
108
109        return function()
110            if vytah.dir == dir_up then
111                if roompole[0] == 0 then
112                    roompole[0] = 1
113                end
114            end
115        end
116    end
117
118    -- -------------------------------------------------------------
119    local function prog_init_stroj()
120        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
121
122        return function()
123            if stroj.X == vytah.X - 1 then
124                if stroj.dir == dir_no and vytah.dir == dir_down then
125                    pom1 = 2
126                elseif stroj.dir == dir_up and vytah.dir == dir_no then
127                    pom1 = 1
128                elseif stroj.dir == dir_no and vytah.dir == dir_up then
129                    pom1 = -1
130                elseif stroj.dir == dir_down and vytah.dir == dir_no then
131                    pom1 = -2
132                else
133                    pom1 = 0
134                end
135                stroj.afaze = stroj.afaze + pom1
136                if stroj.afaze > 5 then
137                    stroj.afaze = stroj.afaze - 6
138                elseif stroj.afaze < 0 then
139                    stroj.afaze = stroj.afaze + 6
140                end
141            end
142
143            stroj:updateAnim()
144        end
145    end
146
147    -- -------------------------------------------------------------
148    local function prog_init_hlavicka()
149        return function()
150            if hlavicka.afaze == 0 and random(100) < 2 or hlavicka.afaze ~= 0 and random(100) < 5 then
151                hlavicka.afaze = random(3)
152            end
153
154            hlavicka:updateAnim()
155        end
156    end
157
158    -- -------------------------------------------------------------
159    local function prog_init_dedek()
160        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
161
162        dedek.mluvi = 0
163
164        return function()
165            if dedek.mluvi ~= 0 then
166                dedek.afaze = random(2) + 1
167            else
168                dedek.afaze = 0
169            end
170
171            dedek:updateAnim()
172        end
173    end
174
175    -- -------------------------------------------------------------
176    local function prog_init_small()
177        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
178
179        small.jede = 0
180
181        return function()
182            if vytah.dir == dir_up and small.X >= vytah.X and small.X < vytah.X + 4 and small.Y > vytah.Y and small.Y < vytah.Y + 6 then
183                small.jede = small.jede + 1
184            end
185        end
186    end
187
188    -- -------------------------------------------------------------
189    local function prog_init_big()
190        local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
191
192        big.jede = 0
193
194        return function()
195            if vytah.dir == dir_up and big.X >= vytah.X and big.X < vytah.X + 3 and big.Y > vytah.Y and big.Y < vytah.Y + 5 then
196                big.jede = big.jede + 1
197            end
198        end
199    end
200
201    -- --------------------
202    local update_table = {}
203    local subinit
204    subinit = prog_init_room()
205    if subinit then
206        table.insert(update_table, subinit)
207    end
208    subinit = prog_init_vytah()
209    if subinit then
210        table.insert(update_table, subinit)
211    end
212    subinit = prog_init_stroj()
213    if subinit then
214        table.insert(update_table, subinit)
215    end
216    subinit = prog_init_hlavicka()
217    if subinit then
218        table.insert(update_table, subinit)
219    end
220    subinit = prog_init_dedek()
221    if subinit then
222        table.insert(update_table, subinit)
223    end
224    subinit = prog_init_small()
225    if subinit then
226        table.insert(update_table, subinit)
227    end
228    subinit = prog_init_big()
229    if subinit then
230        table.insert(update_table, subinit)
231    end
232    return update_table
233end
234local update_table = prog_init()
235
236
237-- -----------------------------------------------------------------
238-- Update
239-- -----------------------------------------------------------------
240function prog_update()
241    for key, subupdate in pairs(update_table) do
242        subupdate()
243    end
244end
245
246