File: prog_pld.lua

package info (click to toggle)
fillets-ng-data 0.6.1-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 73,664 kB
  • ctags: 2,328
  • sloc: makefile: 46
file content (362 lines) | stat: -rw-r--r-- 15,727 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362

local npldiku=27;
local dxklec=5;
local dyklec=6;

local pldnic=0;
local pldjdu=1;
local pldjsem=2;
local pldodch=3;
local pldzust=4;
local pldzed=5;

-- -----------------------------------------------------------------
function initPldici(leader)
    leader.pldik = {}
    for i = 0, npldiku - 1 do
        leader.pldik[i] = {}
        leader.pldik[i].xs = 0
        leader.pldik[i].ys = 0
        leader.pldik[i].cinnost = 0
        leader.pldik[i].faze = 0
        leader.pldik[i].smer = 0
        leader.pldik[i].delit = 0
        leader.pldik[i].otec = 0
    end
    leader.klec = {}
    for i = 0, dxklec + 1 do
        leader.klec[i] = {}
    end


    for i = 0, npldiku - 1 do
        getModelsTable()[leader.index + i].afaze = 36
        getModelsTable()[leader.index + i]:updateAnim()
    end
    for x = 0, dxklec + 1 do
        for y = 0, dyklec + 1 do
            if x == 0 or x > dxklec or y == 0 or y > dyklec or x == 3 and y >= 4 then
                leader.klec[x][y] = pldzed
            else
                leader.klec[x][y] = pldnic
            end
        end
    end
    getModelsTable()[leader.index + 12].afaze = 0
    getModelsTable()[leader.index + 12]:updateAnim()
    leader.pocet = 1
    leader.pldik[0].xs = 3
    leader.pldik[0].ys = 1
    leader.pldik[0].cinnost = 0
    leader.pldik[0].faze = 0
    leader.pldik[0].delit = random(200) + 200
end

-- -----------------------------------------------------------------
function fazeplda(leader, x, y, anim)
    local p
    p = (x - 1) * dyklec + y
    if p > 15 then
        p = p - 3
    end
    if p > npldiku or p <= 0 then
        print("SCRIPT_WARNING out of array; p="..p.."; x="..x.."; y="..y.."; anim="..anim)
    else
        p = leader.index + p - 1
        getModelsTable()[p].afaze = anim
        getModelsTable()[p]:updateAnim()
    end
end
-- -----------------------------------------------------------------
function progPldici(leader)
    local nx
    local musibyt, kliddole, volnovedle
    local sm
    local pldik = leader.pldik
    local klec = leader.klec

    for i = 0, npldiku - 1 do
        getModelsTable()[leader.index + i].afaze = 36
        getModelsTable()[leader.index + i]:updateAnim()
    end
    for i = 0, leader.pocet - 1 do
        selected = pldik[i]
        if selected.delit > 0 then
            selected.delit = selected.delit - 1
        else
            selected.delit = 10 + random(10)
        end
        musibyt = klec[selected.xs][selected.ys] == pldzust
        kliddole = klec[selected.xs][selected.ys + 1] == pldjsem or klec[selected.xs][selected.ys + 1] == pldzed
        sm = random(2)
        switch(sm){
            [1] = function()
                nx = selected.xs - 1
            end,
            [0] = function()
                nx = selected.xs + 1
            end,
        }
        switch(selected.cinnost){
            [0] = function()
                if klec[selected.xs][selected.ys + 1] == 0 then
                    selected.cinnost = 1
                    selected.faze = 0
                    klec[selected.xs][selected.ys] = pldodch
                    klec[selected.xs][selected.ys + 1] = pldjdu
                    fazeplda(leader, selected.xs, selected.ys, 20)
                    fazeplda(leader, selected.xs, selected.ys + 1, 19)
                elseif kliddole and selected.delit == 0 and klec[nx][selected.ys] == 0 then
                    selected.delit = random(300) + 100
                    selected.cinnost = 2
                    selected.faze = 0
                    selected.smer = sm
                    klec[selected.xs][selected.ys] = pldjsem
                    if klec[selected.xs][selected.ys + 1] == pldjsem then
                        klec[selected.xs][selected.ys + 1] = pldzust
                    end
                    pldik[leader.pocet].xs = nx
                    pldik[leader.pocet].ys = selected.ys
                    pldik[leader.pocet].cinnost = 3
                    pldik[leader.pocet].faze = 0
                    pldik[leader.pocet].smer = sm
                    pldik[leader.pocet].delit = random(300) + 100
                    pldik[leader.pocet].otec = i
                    klec[nx][selected.ys] = pldjdu
                    fazeplda(leader, selected.xs, selected.ys, 4 - sm)
                    fazeplda(leader, nx, selected.ys, 36)
                    leader.pocet = leader.pocet + 1
                elseif random(100) < 4 and kliddole and not musibyt then
                    if klec[nx][selected.ys] == 0 and (klec[nx][selected.ys + 1] == 2 or klec[nx][selected.ys + 1] == 5) then
                        selected.cinnost = 4
                        selected.faze = 0
                        selected.smer = sm
                        klec[selected.xs][selected.ys] = pldodch
                        klec[nx][selected.ys] = pldjdu
                        fazeplda(leader, selected.xs, selected.ys, 4 - sm)
                    elseif klec[nx][selected.ys] == 0 and klec[nx][selected.ys + 1] == 0 then
                        selected.cinnost = 5
                        selected.faze = 0
                        selected.smer = sm
                        klec[selected.xs][selected.ys] = pldodch
                        klec[nx][selected.ys] = pldjdu
                        fazeplda(leader, selected.xs, selected.ys, 10 + sm * 18)
                    elseif (klec[nx][selected.ys] == pldjsem or klec[nx][selected.ys] == pldzed) and klec[selected.xs][selected.ys - 1] == 0 and klec[nx][selected.ys - 1] == 0 then
                        selected.cinnost = 6
                        selected.faze = 0
                        selected.smer = sm
                        if klec[nx][selected.ys] == pldjsem then
                            klec[nx][selected.ys] = pldzust
                        end
                        klec[selected.xs][selected.ys] = pldodch
                        klec[selected.xs][selected.ys - 1] = pldjdu
                        fazeplda(leader, selected.xs, selected.ys, 18)
                    else
                        fazeplda(leader, selected.xs, selected.ys, selected.faze)
                    end
                else
                    if random(100) < 10 then
                        selected.faze = random(5)
                    end
                    if random(100) < 2 then
                        fazeplda(leader, selected.xs, selected.ys, 5)
                    else
                        fazeplda(leader, selected.xs, selected.ys, selected.faze)
                    end
                end
            end,
            [1] = function()
                if selected.faze == 0 then
                    klec[selected.xs][selected.ys] = 0
                    selected.ys = selected.ys + 1
                    klec[selected.xs][selected.ys] = pldodch
                    fazeplda(leader, selected.xs, selected.ys, 2)
                    selected.faze = selected.faze + 1
                else
                    switch(klec[selected.xs][selected.ys + 1]){
                        [0] = function()
                            klec[selected.xs][selected.ys] = pldodch
                            klec[selected.xs][selected.ys + 1] = pldjdu
                            fazeplda(leader, selected.xs, selected.ys, 20)
                            fazeplda(leader, selected.xs, selected.ys + 1, 19)
                            selected.faze = selected.faze - 1
                        end,
                        [1] = function()
                            klec[selected.xs][selected.ys] = pldodch
                            fazeplda(leader, selected.xs, selected.ys, 2)
                            selected.cinnost = 0
                            selected.faze = 2
                        end,
                        [3] = function()
                            klec[selected.xs][selected.ys] = pldodch
                            fazeplda(leader, selected.xs, selected.ys, 2)
                            selected.cinnost = 0
                            selected.faze = 2
                        end,
                        default = function()
                            selected.cinnost = 0
                            selected.faze = 0
                            klec[selected.xs][selected.ys] = pldjsem
                            fazeplda(leader, selected.xs, selected.ys, 18)
                        end,
                    }
                end
            end,
            [3] = function()
                selected.faze = selected.faze + 1
                switch(selected.faze){
                    [4] = function()
                        fazeplda(leader, selected.xs, selected.ys, 14 + selected.smer * 18)
                        klec[selected.xs][selected.ys] = pldjsem
                    end,
                    [16] = function()
                        selected.cinnost = 0
                        selected.faze = 0
                        fazeplda(leader, selected.xs, selected.ys, 0)
                        pldik[selected.otec].cinnost = 0
                        fazeplda(leader, pldik[selected.otec].xs, pldik[selected.otec].ys, 4 - selected.smer)
                        if klec[pldik[selected.otec].xs][pldik[selected.otec].ys + 1] == 4 then
                            klec[pldik[selected.otec].xs][pldik[selected.otec].ys + 1] = 2
                        end
                    end,
                    [21] = function()
                        fazeplda(leader, selected.xs, selected.ys, 17 + selected.smer * 18)
                        if random(100) < 20 then
                            selected.faze = 15
                        else
                            selected.faze = selected.faze - 1
                        end
                    end,
                    default = function()
                        if 1 <= selected.faze and selected.faze <= 3 then
                            fazeplda(leader, selected.xs, selected.ys, 12 + selected.smer * 18)
                        elseif 5 <= selected.faze and selected.faze <= 6 then
                            fazeplda(leader, selected.xs, selected.ys, 14 + selected.smer * 18)
                        elseif 7 <= selected.faze and selected.faze <= 9 then
                            fazeplda(leader, selected.xs, selected.ys, 15 + selected.smer * 18)
                        elseif 10 <= selected.faze and selected.faze <= 15 then
                            fazeplda(leader, selected.xs, selected.ys, 16 + selected.smer * 18)
                            if random(100) < 10 then
                                selected.faze = 20
                            end
                        end
                    end,
                }
            end,
            [2] = function()
                if random(100) < 4 then
                    fazeplda(leader, selected.xs, selected.ys, 13 + selected.smer * 18)
                else
                    fazeplda(leader, selected.xs, selected.ys, 11 + selected.smer * 18)
                end
            end,
            [4] = function()
                selected.faze = selected.faze + 1
                switch(selected.smer){
                    [0] = function()
                        nx = selected.xs + 1
                    end,
                    [1] = function()
                        nx = selected.xs - 1
                    end,
                }
                switch(selected.faze){
                    [1] = function()
                        fazeplda(leader, selected.xs, selected.ys, 6 + selected.smer * 18)
                        fazeplda(leader, nx, selected.ys, 7 + selected.smer * 18)
                    end,
                    [2] = function()
                        fazeplda(leader, selected.xs, selected.ys, 8 + selected.smer * 18)
                        fazeplda(leader, nx, selected.ys, 9 + selected.smer * 18)
                    end,
                    [3] = function()
                        klec[selected.xs][selected.ys] = 0
                        selected.xs = nx
                        klec[selected.xs][selected.ys] = pldjsem
                        fazeplda(leader, selected.xs, selected.ys, 0)
                        selected.cinnost = 0
                        selected.faze = 0
                    end,
                }
            end,
            [5] = function()
                selected.faze = selected.faze + 1
                switch(selected.smer){
                    [0] = function()
                        nx = selected.xs + 1
                    end,
                    [1] = function()
                        nx = selected.xs - 1
                    end,
                }
                switch(selected.faze){
                    [1] = function()
                        fazeplda(leader, selected.xs, selected.ys, 10 + selected.smer * 18)
                    end,
                    [2] = function()
                        fazeplda(leader, selected.xs, selected.ys, 10 + selected.smer * 18)
                    end,
                    [3] = function()
                        fazeplda(leader, selected.xs, selected.ys, 21 + selected.smer)
                        fazeplda(leader, nx, selected.ys, 22 - selected.smer)
                    end,
                    [4] = function()
                        klec[selected.xs][selected.ys] = 0
                        selected.xs = nx
                        klec[selected.xs][selected.ys] = pldodch
                        fazeplda(leader, selected.xs, selected.ys, 2)
                        selected.cinnost = 1
                        selected.faze = 1
                    end,
                }
            end,
            [6] = function()
                selected.faze = selected.faze + 1
                switch(selected.smer){
                    [0] = function()
                        nx = selected.xs + 1
                    end,
                    [1] = function()
                        nx = selected.xs - 1
                    end,
                }
                switch(selected.faze){
                    [1] = function()
                        fazeplda(leader, selected.xs, selected.ys - 1, 20)
                        fazeplda(leader, selected.xs, selected.ys, 19)
                    end,
                    [2] = function()
                        klec[selected.xs][selected.ys] = 0
                        selected.ys = selected.ys - 1
                        klec[selected.xs][selected.ys] = pldodch
                        if klec[nx][selected.ys] == 0 then
                            fazeplda(leader, selected.xs, selected.ys, 21 + selected.smer)
                            fazeplda(leader, nx, selected.ys, 22 + selected.smer)
                            klec[nx][selected.ys] = pldjdu
                        else
                            selected.cinnost = 1
                            selected.faze = 1
                            fazeplda(leader, selected.xs, selected.ys, 2)
                            if klec[nx][selected.ys + 1] == 4 then
                                klec[nx][selected.ys + 1] = 2
                            end
                        end
                    end,
                    [3] = function()
                        klec[selected.xs][selected.ys] = 0
                        selected.xs = nx
                        klec[selected.xs][selected.ys] = pldjsem
                        fazeplda(leader, selected.xs, selected.ys, 18)
                        selected.cinnost = 0
                        selected.faze = 0
                        if klec[selected.xs][selected.ys + 1] == 4 then
                            klec[selected.xs][selected.ys + 1] = 2
                        end
                    end,
                }
            end,
        }
    end
end