Rev 2020 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2079 | mario79 | 1 | ;************************************************************* |
2 | ;*GAME TANKS CRETED BY ANDREY IGNATYEV AKA ANDREW_PROGRAMMER * |
||
3 | ;*********************/8/2005********************************* |
||
4 | ; version: 1.15 |
||
5 | ; last update: 19/08/2011 |
||
6 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
7 | ; changes: 1) Checking for "rolled up" window |
||
8 | ; 2) Code optimization |
||
9 | ; 3) Clearing source |
||
10 | ;--------------------------------------------------------------------- |
||
11 | ;Lipatov Kirill aka Leency /07/2011 |
||
2018 | leency | 12 | ;dunkaist /07/2011 |
2079 | mario79 | 13 | ;v1.1 |
14 | ;---------------------------------------------------------- |
||
15 | use32 |
||
16 | org 0x0 |
||
17 | db 'MENUET01' |
||
18 | dd 0x1 |
||
19 | dd START |
||
20 | dd I_END |
||
21 | dd 0x4000+640*400*3+50*20*20*3+512+640+1+24*20*20*3+1 |
||
22 | dd 0x4000 |
||
23 | dd 0x0 |
||
24 | dd 0x0 |
||
25 | ;---------------------------------------------------------- |
||
31 | halyavin | 26 | include 'lang.inc' |
1933 | yogev_ezra | 27 | include '../../../macros.inc' |
2079 | mario79 | 28 | ;---------------------------------------------------------- |
31 | halyavin | 29 | START: |
2079 | mario79 | 30 | mcall 40,111b |
31 | halyavin | 31 | ;---------------------------------------------------------- |
32 | ;---------load all sprites from arrays to memory----------- |
||
33 | ;---------------------------------------------------------- |
||
2079 | mario79 | 34 | and [number_sprite],0 |
35 | xor eax,eax |
||
31 | halyavin | 36 | nextfile: |
2079 | mario79 | 37 | mov ebx,[spisok+4*eax] |
38 | mov ecx,50 |
||
39 | mov esi,ebx |
||
40 | add esi,2 |
||
41 | mov edi,0x4000+(640*400*3)+(50*20*20*3)+10 |
||
42 | rep movsb ;copy palitra to memory |
||
43 | mov esi,ebx |
||
44 | add esi,52 |
||
45 | xor ecx,ecx |
||
46 | mov cl,byte [ebx] |
||
47 | mov edi,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
48 | push eax |
||
49 | call unpakin |
||
50 | pop eax |
||
51 | mov ecx,20*20 |
||
52 | mov esi,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
53 | mov edi,[number_sprite] |
||
54 | imul edi,3*20*20 |
||
55 | add edi,0x4000+(640*400*3) |
||
56 | unp: |
||
57 | xor ebx,ebx |
||
58 | mov bl,byte[esi] |
||
59 | lea ebx,[ebx+ebx*2] |
||
60 | add ebx,0x4000+(640*400*3)+(50*20*20*3)+10 |
||
61 | mov edx,[ebx] |
||
62 | mov [edi],edx |
||
63 | add esi,1 |
||
64 | add edi,3 |
||
65 | dec ecx |
||
66 | jnz unp |
||
67 | inc [number_sprite] |
||
68 | inc eax |
||
69 | cmp [number_sprite],26 ;total number of pictures equal 26 |
||
70 | jne nextfile |
||
31 | halyavin | 71 | ;---------------------------------------------------------- |
72 | ;------rotate sprites of tanks to pi/2--------------------- |
||
73 | ;---------------------------------------------------------- |
||
2079 | mario79 | 74 | mov [sp_pos],0x4000+(640*400*3)+18*20*20*3 |
75 | and [num_blocks],0 |
||
31 | halyavin | 76 | next_block_rotate: |
2079 | mario79 | 77 | mov [number_sprite],0 |
31 | halyavin | 78 | next_sprite_rotate: |
2079 | mario79 | 79 | mov [x],19 |
80 | and [y],0 |
||
31 | halyavin | 81 | rotate_90: |
2079 | mario79 | 82 | mov ebx,[number_sprite] |
83 | mov esi,[y] |
||
84 | imul esi,60 |
||
85 | imul ebx,1200 |
||
86 | add esi,ebx ;esi=number_sprite*1200+y*60 |
||
87 | add esi,dword [sp_pos] |
||
88 | mov edi,0x4000+(640*400*3)+(50*20*20*3) |
||
89 | mov ecx,15 |
||
90 | rep movsd |
||
91 | mov edi,[number_sprite] |
||
92 | imul edi,1200 |
||
93 | add edi,dword [sp_pos] |
||
94 | add edi,8*20*20*3 |
||
95 | mov ebx,[x] |
||
96 | lea ebx,[ebx+2*ebx] |
||
97 | add edi,ebx |
||
98 | mov esi,0x4000+(640*400*3)+(50*20*20*3) |
||
99 | mov ecx,20*3 |
||
31 | halyavin | 100 | vertical: |
2079 | mario79 | 101 | xor eax,eax |
102 | mov al,byte[esi+2] |
||
103 | mov [edi+2],al |
||
104 | xor eax,eax |
||
105 | mov ax,word[esi] |
||
106 | mov [edi],ax |
||
107 | add edi,60 |
||
108 | add esi,3 |
||
109 | sub ecx,3 |
||
110 | jnz vertical |
||
111 | dec [x] |
||
112 | inc [y] |
||
113 | cmp [x],-1 |
||
114 | jne rotate_90 |
||
115 | inc [number_sprite] |
||
116 | cmp [number_sprite],9 |
||
117 | jne next_sprite_rotate |
||
118 | add [sp_pos],8*20*20*3 |
||
119 | inc [num_blocks] |
||
120 | cmp [num_blocks],3 |
||
121 | jne next_block_rotate |
||
31 | halyavin | 122 | ;--------------------------------------------------------- |
123 | restart_level: |
||
2079 | mario79 | 124 | call drawwin |
31 | halyavin | 125 | ;Start game(demo scen) |
2079 | mario79 | 126 | mov [y],18 |
31 | halyavin | 127 | @1: |
2079 | mario79 | 128 | mov [x],30 |
129 | @2: |
||
130 | mov esi,[x] |
||
131 | mov edi,[y] |
||
132 | imul esi,20*3 |
||
133 | imul edi,20*(640*3) |
||
134 | add edi,esi |
||
135 | add edi,0x4000 |
||
136 | mov esi,0x4000+(640*400*3)+1200 |
||
137 | mov [counter],20 |
||
138 | mov eax,esi |
||
139 | mov ebx,edi |
||
140 | @3: |
||
141 | mov esi,eax |
||
142 | mov edi,ebx |
||
143 | mov ecx,15 |
||
144 | rep movsd |
||
145 | add eax,20*3 |
||
146 | add ebx,640*3 |
||
147 | dec [counter] |
||
148 | jnz @3 |
||
149 | dec [x] |
||
150 | jnz @2 |
||
151 | dec [y] |
||
152 | jnz @1 |
||
31 | halyavin | 153 | ;draw script ******TANKS******* |
2079 | mario79 | 154 | mov eax,54 |
31 | halyavin | 155 | @11: |
2079 | mario79 | 156 | mov esi,5 |
157 | mov edi,80 |
||
158 | xor ebx,ebx |
||
159 | xor edx,edx |
||
160 | mov bl,byte[TANKS_script+2*eax] ;dx |
||
161 | mov dl,byte[TANKS_script+2*eax+1] ;dy |
||
162 | imul ebx,20 |
||
163 | imul edx,20 |
||
164 | add esi,ebx |
||
165 | add edi,edx |
||
166 | lea esi,[esi+2*esi] |
||
167 | lea edi,[edi+2*edi] |
||
168 | imul edi,640 |
||
169 | add edi,esi |
||
170 | add edi,0x4000 |
||
171 | mov esi,0x4000+(640*400*3) |
||
172 | mov ebx,esi |
||
173 | mov edx,edi |
||
174 | mov [counter],20 |
||
175 | @22: |
||
176 | mov esi,ebx |
||
177 | mov edi,edx |
||
178 | mov ecx,15 |
||
179 | rep movsd |
||
180 | add ebx,20*3 |
||
181 | add edx,640*3 |
||
182 | dec [counter] |
||
183 | jnz @22 |
||
184 | dec eax |
||
185 | cmp eax,-1 |
||
186 | jne @11 |
||
187 | mcall 7,0x4000,<640,400>,<0,20> |
||
188 | call menu |
||
31 | halyavin | 189 | ;---------------------------- |
190 | new_level: |
||
2079 | mario79 | 191 | call paint_area ;drawwin |
192 | mov [SpriteInfo+72+8],dword 100 ;Xo |
||
193 | mov [SpriteInfo+72+36],dword 100 ;Yo |
||
194 | mov edx,[number_level] |
||
195 | call load_level |
||
31 | halyavin | 196 | ;-------------------------- |
2079 | mario79 | 197 | and [strike_action],0 |
198 | and [bazas],0 |
||
199 | and [y],0 |
||
200 | mov eax,8 |
||
31 | halyavin | 201 | next_y: |
2079 | mario79 | 202 | and [x],0 |
203 | next_x: |
||
204 | mov esi,[y] |
||
205 | shl esi,5 |
||
206 | add esi,[x] |
||
207 | add esi,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
208 | xor ebx,ebx |
||
209 | mov bl,byte[esi] |
||
210 | cmp bl,7 |
||
211 | jne no_baza |
||
212 | mov ecx,[x] |
||
213 | mov edx,[y] |
||
214 | inc ecx |
||
215 | inc [bazas] |
||
216 | add eax,4 |
||
217 | imul ecx,20 |
||
218 | imul edx,20 |
||
219 | mov [SpriteInfo+9*eax+0],dword 3 |
||
220 | mov [SpriteInfo+9*eax+4],dword 1 |
||
221 | mov [SpriteInfo+9*eax+8],dword ecx |
||
222 | mov [SpriteInfo+9*eax+12],dword edx |
||
223 | mov [SpriteInfo+9*eax+16],dword 5 |
||
224 | mov [SpriteInfo+9*eax+28],dword -5 |
||
225 | mov edx,eax |
||
226 | shr edx,2 |
||
227 | mov [LifesTanks+edx],byte 3 ;three lifes |
||
228 | mov [PulyTanks+edx],byte 1 ;can draw animation of "puly" |
||
229 | no_baza: |
||
230 | inc [x] |
||
231 | cmp [x],32 |
||
232 | jne next_x |
||
233 | inc [y] |
||
234 | cmp [y],20 |
||
235 | jne next_y |
||
236 | mov [LifesPlayer],3*4 |
||
237 | and [score],0 |
||
31 | halyavin | 238 | ;---------------------------------------------------------- |
239 | ;--------------------main loop----------------------------- |
||
240 | ;---------------------------------------------------------- |
||
241 | maincycle: |
||
2079 | mario79 | 242 | ;save fon |
243 | mov eax,23*4 |
||
244 | SaveFonForSprites: |
||
245 | mov ebx,[SpriteInfo+9*eax+4] |
||
246 | test ebx,ebx ;if ebx<>0 then can save |
||
247 | jz NoSaveFon |
||
248 | mov esi,[SpriteInfo+9*eax+8] ;cordinat x |
||
249 | mov edi,[SpriteInfo+9*eax+12] ;cordinat y |
||
250 | mov edx,eax |
||
251 | shr edx,2 |
||
252 | call SaveFon |
||
253 | NoSaveFon: |
||
254 | sub eax,4 |
||
255 | cmp eax,-4 |
||
256 | jne SaveFonForSprites |
||
257 | ;put sprites |
||
258 | mov eax,23*4 |
||
259 | PutSprites: |
||
260 | mov ebx,[SpriteInfo+9*eax+4] |
||
261 | test ebx,ebx |
||
262 | jz NoPutSprite |
||
263 | and ebx,10000b |
||
264 | test ebx,ebx ;move to transparent shablon? |
||
265 | jnz NoPutSprite |
||
266 | mov esi,[SpriteInfo+9*eax+8] ;x |
||
267 | mov edi,[SpriteInfo+9*eax+12] ;y |
||
268 | mov edx,[SpriteInfo+9*eax+0] ;number sprite in sprites table |
||
269 | shl edx,2 |
||
270 | add edx,[SpriteInfo+9*eax+24] ;edx=4*NumSprites+phas |
||
271 | call PutSprite |
||
272 | NoPutSprite: |
||
273 | sub eax,4 |
||
274 | cmp eax,-4 |
||
275 | jne PutSprites |
||
276 | ;put image |
||
277 | call clock |
||
278 | mov ebx,[time] |
||
279 | sub ebx,[time_frame_old] |
||
280 | cmp ebx,5 |
||
281 | jl NoPutScreen |
||
282 | mov ebx,[time] |
||
283 | mov [time_frame_old],ebx |
||
284 | mcall 7,0x4000,<640,400>,<0,20> |
||
285 | NoPutScreen: |
||
286 | ;put fon |
||
287 | mov eax,23*4 |
||
288 | PutFonForSprites: |
||
289 | mov ebx,[SpriteInfo+9*eax+4] |
||
290 | test ebx,ebx |
||
291 | jz NoPutFon |
||
292 | mov esi,[SpriteInfo+9*eax+8] |
||
293 | mov edi,[SpriteInfo+9*eax+12] |
||
294 | mov edx,eax |
||
295 | shr edx,2 |
||
296 | call PutFon |
||
297 | NoPutFon: |
||
298 | sub eax,4 |
||
299 | cmp eax,-4 |
||
300 | jne PutFonForSprites |
||
301 | ;change phas(if need) |
||
302 | mov eax,23*4 |
||
303 | ChangePhasSprites: |
||
304 | push eax |
||
305 | call clock |
||
306 | pop eax |
||
307 | mov ebx,[SpriteInfo+9*eax+16] ;time of animation |
||
308 | mov ecx,[SpriteInfo+9*eax+20] ;time of last frame |
||
309 | mov edx,[time] |
||
310 | sub edx,ecx |
||
311 | cmp edx,ebx |
||
312 | jl no_change_phas |
||
313 | mov ebx,[time] |
||
314 | mov [SpriteInfo+9*eax+20],ebx ;save new time |
||
315 | ;------------------------------ |
||
316 | mov esi,[SpriteInfo+9*eax+8] |
||
317 | mov edi,[SpriteInfo+9*eax+12] |
||
318 | mov ecx,[SpriteInfo+9*eax+28] |
||
319 | mov edx,[SpriteInfo+9*eax+32] |
||
320 | add esi,ecx ;x=x+dx |
||
321 | add edi,edx ;y=y+dy |
||
322 | mov [SpriteInfo+9*eax+8],dword esi |
||
323 | mov [SpriteInfo+9*eax+12],dword edi |
||
324 | ;------------------------------- |
||
325 | mov edx,[SpriteInfo+9*eax+24] ;phas |
||
326 | add edx,1 |
||
327 | cmp edx,4 |
||
328 | jne no_limit_phas |
||
329 | xor edx,edx |
||
330 | mov [SpriteInfo+9*eax+24],dword edx |
||
331 | mov [SpriteInfo+9*eax+4],dword edx |
||
332 | jmp no_change_phas |
||
333 | no_limit_phas: |
||
334 | mov [SpriteInfo+9*eax+24],dword edx |
||
335 | no_change_phas: |
||
336 | sub eax,4 |
||
337 | cmp eax,-4 |
||
338 | jne ChangePhasSprites |
||
339 | ;------------------------------------------------- |
||
340 | ;----------------keys----------------------------- |
||
341 | ;------------------------------------------------- |
||
342 | call pause_cicle |
||
343 | mcall 23,3 |
||
344 | cmp eax,1 |
||
345 | je .redraw |
||
346 | cmp eax,2 |
||
347 | je .key |
||
348 | cmp eax,3 |
||
349 | je .button |
||
350 | jmp action |
||
2018 | leency | 351 | .button: |
2079 | mario79 | 352 | mcall -1 |
2018 | leency | 353 | .redraw: |
2079 | mario79 | 354 | call drawwin |
355 | jmp action |
||
2018 | leency | 356 | .key: |
2079 | mario79 | 357 | keypressed: |
358 | cmp eax,2 |
||
359 | jne action |
||
360 | and [_dx],0 |
||
361 | and [_dy],0 |
||
362 | mcall 2 |
||
363 | shr eax,8 |
||
364 | ;--------- |
||
365 | cmp eax,32 |
||
366 | jne key2 |
||
367 | cmp [strike_action],0 |
||
368 | jne action |
||
369 | mov [SpriteInfo+36+4],dword 1 ;can draw sprite "puly" |
||
370 | mov [strike_action],1 ;sprite is active |
||
371 | mov eax,[SpriteInfo+72+8] |
||
372 | mov ebx,[SpriteInfo+72+12] |
||
373 | mov ecx,[SpriteInfo+72+28] |
||
374 | mov edx,[SpriteInfo+72+32] |
||
375 | add eax,ecx |
||
376 | add ebx,edx |
||
377 | mov [SpriteInfo+36+8],dword eax |
||
378 | mov [SpriteInfo+36+12],dword ebx |
||
379 | jmp action |
||
380 | key2: |
||
381 | cmp eax,176 |
||
382 | jne key3 |
||
383 | mov [SpriteInfo+8*9+0],dword 8 |
||
384 | mov [SpriteInfo+8*9+4],dword 1 |
||
385 | mov [SpriteInfo+8*9+28],dword -5 |
||
386 | mov [SpriteInfo+8*9+32],dword 0 |
||
387 | mov [_dx],0 |
||
388 | mov [_dy],10 |
||
389 | cmp [strike_action],0 |
||
390 | jne action |
||
391 | mov [SpriteInfo+36+28],dword -5 |
||
392 | mov [SpriteInfo+36+32],dword 0 |
||
393 | jmp action |
||
394 | key3: |
||
395 | cmp eax,179 |
||
396 | jne key4 |
||
397 | mov [SpriteInfo+8*9+0],dword 4 |
||
398 | mov [SpriteInfo+8*9+4],dword 1 |
||
399 | mov [SpriteInfo+8*9+28],dword 5 |
||
400 | mov [SpriteInfo+8*9+32],dword 0 |
||
401 | mov [_dx],15 |
||
402 | mov [_dy],10 |
||
403 | cmp [strike_action],0 |
||
404 | jne action |
||
405 | mov [SpriteInfo+36+28],dword 5 |
||
406 | mov [SpriteInfo+36+32],dword 0 |
||
407 | jmp action |
||
408 | key4: |
||
409 | cmp eax,178 |
||
410 | jne key5 |
||
411 | mov [SpriteInfo+8*9+0],dword 2 |
||
412 | mov [SpriteInfo+8*9+4],dword 1 |
||
413 | mov [SpriteInfo+8*9+28],dword 0 |
||
414 | mov [SpriteInfo+8*9+32],dword -5 |
||
415 | mov [_dx],10 |
||
416 | mov [_dy],1 |
||
417 | cmp [strike_action],0 |
||
418 | jne action |
||
419 | mov [SpriteInfo+36+28],dword 0 |
||
420 | mov [SpriteInfo+36+32],dword -5 |
||
421 | jmp action |
||
422 | key5: |
||
423 | cmp eax,177 |
||
424 | jne key6 |
||
425 | mov [SpriteInfo+8*9+0],dword 6 |
||
426 | mov [SpriteInfo+8*9+4],dword 1 |
||
427 | mov [SpriteInfo+8*9+28],dword 0 |
||
428 | mov [SpriteInfo+8*9+32],dword 5 |
||
429 | mov [_dy],15 |
||
430 | mov [_dx],10 |
||
431 | cmp [strike_action],0 |
||
432 | jne action |
||
433 | mov [SpriteInfo+36+28],dword 0 |
||
434 | mov [SpriteInfo+36+32],dword 5 |
||
435 | jmp action |
||
436 | key6: |
||
437 | cmp eax,27 |
||
438 | jne action |
||
439 | mcall -1 |
||
31 | halyavin | 440 | action: |
2079 | mario79 | 441 | mov [SpriteInfo+72+4],dword 1 |
442 | mov [SpriteInfo+72+16],dword 5 ;usal speed of tank |
||
443 | mov esi,[SpriteInfo+8*9+8] ;cordinat x of sprite |
||
444 | mov edi,[SpriteInfo+8*9+12] ;cordinat y of sprite |
||
445 | mov ecx,[SpriteInfo+72+28] |
||
446 | mov edx,[SpriteInfo+72+32] |
||
447 | add ecx,[_dx] |
||
448 | add edx,[_dy] |
||
449 | add esi,ecx ;x=x+_dx+dx |
||
450 | add edi,edx ;y=y+_dy+dy |
||
451 | call map_x_y |
||
452 | cmp ecx,6 |
||
453 | jne no_woter |
||
454 | mov [SpriteInfo+72+16],dword 7 ;in water tank slow move |
||
455 | no_woter: |
||
456 | cmp ecx,4 |
||
457 | jne no_palma |
||
458 | mov [SpriteInfo+72+4],dword 10000b ;if bit 4 than transparent sprite |
||
459 | no_palma: |
||
460 | cmp ecx,8 |
||
461 | jne no_derevo |
||
462 | mov [SpriteInfo+72+4],dword 10000b |
||
463 | no_derevo: |
||
464 | test edx,edx |
||
465 | jnz ani |
||
466 | mov [SpriteInfo+8*9+28],dword 0 |
||
467 | mov [SpriteInfo+8*9+32],dword 0 |
||
468 | ;------------------------------------------------- |
||
469 | ani: |
||
470 | mov eax,[strike_action] |
||
471 | test eax,eax |
||
472 | jz no_anim_strike |
||
473 | mov esi,[SpriteInfo+36+8] |
||
474 | mov edi,[SpriteInfo+36+12] |
||
475 | mov ecx,[SpriteInfo+36+28] |
||
476 | mov edx,[SpriteInfo+36+32] |
||
477 | add esi,ecx |
||
478 | add edi,edx |
||
479 | call map_x_y |
||
480 | cmp cl,0 |
||
481 | jne no_stena |
||
482 | mov [ebx],byte 2 ;trava |
||
483 | jmp bum |
||
484 | no_stena: |
||
485 | cmp cl,1 |
||
486 | jne no_brony |
||
487 | jmp bum |
||
488 | no_brony: |
||
489 | cmp cl,7 |
||
490 | jne anim_action_puly |
||
491 | sub [bazas],1 |
||
492 | mov [ebx],byte 2 ;trava |
||
493 | bum: |
||
494 | mov esi,[SpriteInfo+36+8] |
||
495 | mov edi,[SpriteInfo+36+12] |
||
496 | mov [SpriteInfo+4],dword 1 |
||
497 | mov [SpriteInfo+8],dword esi |
||
498 | mov [SpriteInfo+12],dword edi |
||
499 | mov [SpriteInfo+36+4],dword 0 |
||
500 | mov [end_bum],1 |
||
501 | jmp no_anim_strike |
||
502 | anim_action_puly: |
||
503 | mov [SpriteInfo+36+4],dword 1 |
||
504 | no_anim_strike: |
||
505 | ;------------------------------------------------- |
||
506 | ;проверяем попала ли пуля в противников |
||
507 | mov esi,[SpriteInfo+4*9+8] |
||
508 | mov edi,[SpriteInfo+4*9+12] |
||
509 | mov [x],esi ;координата x пули |
||
510 | mov [y],edi ;координата y пули |
||
511 | mov eax,3*4 |
||
512 | bum_tank: |
||
513 | mov ebx,eax |
||
514 | shr ebx,2 |
||
515 | xor ecx,ecx |
||
516 | mov cl,byte [LifesTanks+ebx] |
||
517 | cmp ecx,0 |
||
518 | jz no_strike |
||
519 | mov esi,[SpriteInfo+9*eax+8] ;x |
||
520 | mov edi,[SpriteInfo+9*eax+12] ;y |
||
521 | sub esi,[x] |
||
522 | sub edi,[y] |
||
523 | cmp esi,5 |
||
524 | ja no_strike |
||
525 | cmp edi,5 |
||
526 | ja no_strike |
||
527 | add [score],5 |
||
528 | cmp [score],20 |
||
529 | jl no_bonus |
||
530 | add [LifesPlayer],4 |
||
531 | and [score],0 |
||
532 | no_bonus: |
||
533 | dec ecx;,1 |
||
534 | mov [LifesTanks+ebx],cl ;life=life-1 |
||
535 | mov esi,[x] |
||
536 | mov edi,[y] |
||
537 | mov [SpriteInfo+4],dword 1 |
||
538 | mov [SpriteInfo+8],dword esi |
||
539 | mov [SpriteInfo+12],dword edi |
||
540 | mov [SpriteInfo+36+4],dword 0 |
||
541 | mov [end_bum],1 |
||
542 | no_strike: |
||
543 | add eax,4 |
||
544 | cmp eax,10*4 |
||
545 | jne bum_tank |
||
546 | ;------------------------------------------------- |
||
547 | xor eax,eax |
||
548 | mov al,[end_bum] |
||
549 | test eax,eax |
||
550 | jz no_end_strike |
||
551 | mov eax,[SpriteInfo+24] |
||
552 | cmp eax,3 |
||
553 | jne no_end_strike |
||
554 | and [strike_action],0 |
||
555 | and [end_bum],0 |
||
556 | mov edx,[number_level] |
||
557 | mov ecx,15 |
||
558 | call load_level |
||
559 | no_end_strike: |
||
560 | ;---------------------------- |
||
561 | ;проверяем,попали ли противники в игрока |
||
562 | mov eax,3*4 |
||
563 | mov esi,[SpriteInfo+72+8] |
||
564 | mov edi,[SpriteInfo+72+12] |
||
565 | mov [x],esi |
||
566 | mov [y],edi |
||
567 | strike_to_player: |
||
568 | mov ebx,eax |
||
569 | add ebx,28 |
||
570 | mov esi,[SpriteInfo+9*ebx+8] |
||
571 | mov edi,[SpriteInfo+9*ebx+12] |
||
572 | sub esi,[x] |
||
573 | sub edi,[y] |
||
574 | cmp esi,5 |
||
575 | ja no_strike_to_player |
||
576 | cmp edi,5 |
||
577 | ja no_strike_to_player |
||
578 | mov esi,[x] |
||
579 | mov edi,[y] |
||
580 | mov [SpriteInfo+9*ebx+4],dword 0 |
||
581 | add ebx,28 |
||
582 | mov [SpriteInfo+9*ebx+4],dword 1 |
||
583 | mov [SpriteInfo+9*ebx+8],dword esi |
||
584 | mov [SpriteInfo+9*ebx+12],dword edi |
||
585 | sub [LifesPlayer],1 |
||
586 | cmp [LifesPlayer],0 |
||
587 | jne no_game_over |
||
588 | call end_game |
||
589 | jmp restart_level |
||
590 | no_game_over: |
||
591 | no_strike_to_player: |
||
592 | add eax,4 |
||
593 | cmp eax,10*4 |
||
594 | jne strike_to_player |
||
595 | ;---------------------------- |
||
596 | xor eax,eax |
||
597 | mov al,[bazas] |
||
598 | test eax,eax |
||
599 | jnz no_end_level |
||
600 | call you_won |
||
601 | inc [number_level] |
||
602 | cmp [number_level],25 |
||
603 | jne no_end_game |
||
604 | mov eax,-1 |
||
605 | mcall |
||
606 | no_end_game: |
||
607 | jmp new_level |
||
608 | no_end_level: |
||
609 | ;------------------------------------------------- |
||
610 | ;------------ logic of tanks---------------------- |
||
611 | ;------------------------------------------------- |
||
612 | mov eax,12 |
||
613 | next_bad_tank: |
||
614 | mov ebx,eax |
||
615 | shr ebx,2 |
||
616 | xor ecx,ecx |
||
617 | mov cl,byte[LifesTanks+ebx] |
||
618 | test ecx,ecx |
||
619 | jz no_action_bad_tank |
||
620 | mov ebx,[SpriteInfo+9*eax+4] |
||
621 | test ebx,ebx |
||
622 | jnz no_action_bad_tank |
||
623 | ;--------------------- |
||
624 | mov esi,[SpriteInfo+9*eax+8] |
||
625 | mov edi,[SpriteInfo+9*eax+12] |
||
626 | mov [x],esi |
||
627 | mov [y],edi |
||
628 | mov ecx,[SpriteInfo+9*eax+28] |
||
629 | mov edx,[SpriteInfo+9*eax+32] |
||
630 | ;смотрим что впереди танка-противника |
||
631 | cmp ecx,0 |
||
632 | ja more_null_x |
||
633 | lea ecx,[ecx+2*ecx] |
||
634 | jmp test_y |
||
635 | more_null_x: |
||
636 | shl ecx,2 |
||
637 | add ecx,15 |
||
638 | test_y: |
||
639 | cmp edx,0 |
||
640 | ja more_null_y |
||
641 | lea edx,[edx+2*edx] |
||
642 | jmp add_numbers |
||
643 | more_null_y: |
||
644 | shl edx,2 |
||
645 | add edx,15 |
||
646 | add_numbers: |
||
647 | ;-------------------- |
||
648 | add esi,ecx |
||
649 | add edi,edx |
||
650 | call map_x_y |
||
651 | cmp ecx,4 |
||
652 | jne no_palma_p |
||
653 | mov [SpriteInfo+9*eax+4],dword 10000b |
||
654 | no_palma_p: |
||
655 | cmp ecx,8 |
||
656 | jne no_derevo_p |
||
657 | mov [SpriteInfo+9*eax+4],dword 10000b |
||
658 | no_derevo_p: |
||
659 | ;если на пути танка препятствие,то надо изменить |
||
660 | ;направление движения |
||
661 | test edx,edx |
||
662 | jnz lab1 |
||
663 | ;проверяем - не попал ли танк в тупик(3 напрвления заняты) |
||
664 | and [tupik],0 |
||
665 | mov esi,[x] |
||
666 | mov edi,[y] |
||
667 | add esi,(20+15) |
||
668 | add edi,10 |
||
669 | call map_x_y |
||
670 | test edx,edx |
||
671 | jnz direct1 |
||
672 | inc [tupik] |
||
673 | direct1: |
||
674 | mov esi,[x] |
||
675 | mov edi,[y] |
||
676 | add esi,10 |
||
677 | add edi,(20+15) |
||
678 | call map_x_y |
||
679 | test edx,edx |
||
680 | jnz direct2 |
||
681 | inc [tupik] |
||
682 | direct2: |
||
683 | mov esi,[x] |
||
684 | mov edi,[y] |
||
685 | add esi,-15 |
||
686 | add edi,10 |
||
687 | call map_x_y |
||
688 | test edx,edx |
||
689 | jnz direct3 |
||
690 | inc [tupik] |
||
691 | direct3: |
||
692 | mov esi,[x] |
||
693 | mov edi,[y] |
||
694 | add esi,10 |
||
695 | add edi,-15 |
||
696 | call map_x_y |
||
697 | test edx,edx |
||
698 | jnz direct4 |
||
699 | inc [tupik] |
||
700 | direct4: |
||
701 | cmp [tupik],3 |
||
702 | je no_move0 |
||
703 | ;------------------ |
||
704 | ;strategy1 |
||
705 | mov esi,[x] |
||
706 | mov edi,[y] |
||
707 | add esi,(20+15) |
||
708 | add edi,10 |
||
709 | call map_x_y |
||
710 | test edx,edx |
||
711 | jnz no_strategy1 |
||
712 | mov esi,[x] |
||
713 | mov edi,[y] |
||
714 | add esi,10 |
||
715 | add edi,-15 |
||
716 | call map_x_y |
||
717 | jnz no_strategy1 |
||
718 | jmp no_move3 ;going to left |
||
719 | no_strategy1: |
||
720 | ;------------------ |
||
721 | mov esi,[x] |
||
722 | mov edi,[y] |
||
723 | add esi,-15 |
||
724 | add edi,10 |
||
725 | call map_x_y |
||
726 | test edx,edx |
||
727 | jnz no_strategy2 |
||
728 | mov esi,[x] |
||
729 | mov edi,[y] |
||
730 | add esi,10 |
||
731 | add edi,-15 |
||
732 | call map_x_y |
||
733 | test edx,edx |
||
734 | jnz no_strategy2 |
||
735 | jmp no_move2 |
||
736 | no_strategy2: |
||
737 | ;------------------ |
||
738 | mov esi,[x] |
||
739 | mov edi,[y] |
||
740 | add edi,(20+15) |
||
741 | add esi,10 |
||
742 | call map_x_y |
||
743 | test edx,edx |
||
744 | jnz no_strategy3 |
||
745 | mov esi,[x] |
||
746 | mov edi,[y] |
||
747 | add esi,-15 |
||
748 | add edi,10 |
||
749 | call map_x_y |
||
750 | test edx,edx |
||
751 | jnz no_strategy3 |
||
752 | jmp no_move1 |
||
753 | no_strategy3: |
||
754 | ;------------------------------------------------- |
||
755 | no_move0: |
||
756 | mov esi,[x] ; x |
||
757 | mov edi,[y] ; y |
||
758 | add edi,-15 ; (y-20) up |
||
759 | add esi,10 |
||
760 | call map_x_y |
||
761 | test edx,edx |
||
762 | jz no_move1 |
||
763 | ;вверху свободно - можно двигаться up |
||
764 | mov [SpriteInfo+9*eax+0],dword 3 |
||
765 | mov [SpriteInfo+9*eax+28],dword 0 |
||
766 | mov [SpriteInfo+9*eax+32],dword -5 |
||
767 | jmp lab1 |
||
768 | no_move1: |
||
769 | mov esi,[x] |
||
770 | mov edi,[y] |
||
771 | add esi,(20+15) ;x+20 |
||
772 | add edi,10 |
||
773 | call map_x_y |
||
774 | test edx,edx |
||
775 | jz no_move2 |
||
776 | ;right |
||
777 | mov [SpriteInfo+9*eax+0],dword 5 |
||
778 | mov [SpriteInfo+9*eax+28],dword 5 |
||
779 | mov [SpriteInfo+9*eax+32],dword 0 |
||
780 | jmp lab1 |
||
781 | no_move2: |
||
782 | mov esi,[x] |
||
783 | mov edi,[y] |
||
784 | add esi,10 ;x-20 |
||
785 | add edi,(20+15) |
||
786 | call map_x_y |
||
787 | test edx,edx |
||
788 | jz no_move3 |
||
789 | ;down |
||
790 | mov [SpriteInfo+9*eax+0],dword 7 |
||
791 | mov [SpriteInfo+9*eax+28],dword 0 |
||
792 | mov [SpriteInfo+9*eax+32],dword 5 |
||
793 | jmp lab1 |
||
794 | no_move3: |
||
795 | mov esi,[x] |
||
796 | mov edi,[y] |
||
797 | add edi,10 ;y+20 |
||
798 | add esi,-15 |
||
799 | call map_x_y |
||
800 | test edx,edx |
||
801 | jz no_move4 |
||
802 | ;внизу свободно-можно двигаться left |
||
803 | mov [SpriteInfo+9*eax+0],dword 9 |
||
804 | mov [SpriteInfo+9*eax+28],dword -5 |
||
805 | mov [SpriteInfo+9*eax+32],dword 0 |
||
806 | jmp lab1 |
||
807 | no_move4: |
||
808 | mov [SpriteInfo+9*eax+28],dword 0 |
||
809 | mov [SpriteInfo+9*eax+32],dword 0 |
||
810 | lab1: |
||
811 | mov edx,dword[SpriteInfo+9*eax+4] |
||
812 | test edx,edx |
||
813 | jnz no_action_bad_tank |
||
814 | mov [SpriteInfo+9*eax+4],dword 1 |
||
815 | no_action_bad_tank: |
||
816 | add eax,4 |
||
817 | cmp eax,10*4 |
||
818 | jne next_bad_tank |
||
819 | ;------------------------------------------------- |
||
820 | mov eax,12 |
||
821 | next_puly: |
||
822 | mov edx,eax |
||
823 | shr edx,2 |
||
824 | xor ecx,ecx |
||
825 | mov cl,byte[PulyTanks+edx] |
||
826 | test ecx,ecx ;can change course of puly? |
||
827 | jz no_change_course |
||
828 | xor ecx,ecx |
||
829 | mov cl,byte[LifesTanks+edx] |
||
830 | test ecx,ecx ;is tank not destroed? |
||
831 | jz no_draw_s |
||
832 | mov ecx,[SpriteInfo+9*eax+24] ;tank's phas of animation |
||
833 | test ecx,ecx ;phas=0? |
||
834 | jnz no_change_course |
||
835 | mov esi,[SpriteInfo+9*eax+8] |
||
836 | mov edi,[SpriteInfo+9*eax+12] |
||
837 | mov ecx,[SpriteInfo+9*eax+28] |
||
838 | mov edx,[SpriteInfo+9*eax+32] |
||
839 | mov ebx,eax |
||
840 | add ebx,28 |
||
841 | mov [SpriteInfo+9*ebx+0],dword 1 |
||
842 | mov [SpriteInfo+9*ebx+4],dword 1 |
||
843 | mov [SpriteInfo+9*ebx+28],dword ecx |
||
844 | mov [SpriteInfo+9*ebx+32],dword edx |
||
845 | mov [SpriteInfo+9*ebx+16],dword 3 |
||
846 | mov [SpriteInfo+9*ebx+8],dword esi |
||
847 | mov [SpriteInfo+9*ebx+12],dword edi |
||
848 | mov ebx,eax |
||
849 | shr ebx,2 |
||
850 | mov [PulyTanks+ebx],byte 0 |
||
851 | jmp no_draw_s |
||
852 | ;------------------- |
||
853 | no_change_course: |
||
854 | mov ebx,eax |
||
855 | add ebx,28 |
||
856 | mov ecx,[SpriteInfo+9*ebx+24] |
||
857 | test ecx,ecx |
||
858 | jnz no_draw_s |
||
859 | mov esi,[SpriteInfo+9*ebx+8] |
||
860 | mov edi,[SpriteInfo+9*ebx+12] |
||
861 | mov ecx,[SpriteInfo+9*ebx+28] |
||
862 | mov edx,[SpriteInfo+9*ebx+32] |
||
863 | call map_x_y |
||
864 | cmp ecx,1 |
||
865 | je bumm |
||
866 | cmp ecx,0 |
||
867 | je strike_to_wall |
||
868 | jmp no_bumm |
||
869 | strike_to_wall: |
||
870 | mov [ebx],byte 2 |
||
871 | bumm: |
||
872 | ;------------------- |
||
873 | mov ebx,eax |
||
874 | add ebx,28 |
||
875 | mov [SpriteInfo+9*ebx+28],dword 0 |
||
876 | mov [SpriteInfo+9*ebx+32],dword 0 |
||
877 | mov esi,[SpriteInfo+9*ebx+8] |
||
878 | mov edi,[SpriteInfo+9*ebx+12] |
||
879 | add ebx,28 |
||
880 | mov [SpriteInfo+9*ebx+4],dword 1 |
||
881 | mov [SpriteInfo+9*ebx+8],dword esi |
||
882 | mov [SpriteInfo+9*ebx+12],dword edi |
||
883 | mov [SpriteInfo+9*ebx+16],dword 3 |
||
884 | mov [SpriteInfo+9*ebx+28],dword 0 |
||
885 | mov [SpriteInfo+9*ebx+32],dword 0 |
||
886 | mov ebx,eax |
||
887 | shr ebx,2 |
||
888 | mov [PulyTanks+ebx],byte 1 |
||
889 | mov edx,[number_level] |
||
890 | mov ecx,15 |
||
891 | push eax |
||
892 | call load_level |
||
893 | pop eax |
||
894 | jnp no_draw_s |
||
895 | ;------------------- |
||
896 | no_bumm: |
||
897 | mov ebx,eax |
||
898 | add ebx,28 |
||
899 | mov [SpriteInfo+9*ebx+4],dword 1 ;can draw sprite of puly |
||
900 | no_draw_s: |
||
901 | add eax,4 |
||
902 | cmp eax,10*4 |
||
903 | jne next_puly |
||
904 | ;------------------------------------------------- |
||
905 | ;-------------end of tanks logic------------------ |
||
906 | ;------------------------------------------------- |
||
907 | xor edx,edx |
||
908 | mcall 13,<190,192>,<5,7> |
||
909 | mcall 4,<190,5>,0x1ded00,Level,5 |
||
910 | mcall ,<260,5>,0x3558ff,Lifes, |
||
911 | mcall ,<330,5>,0xf93500,Score, |
||
912 | mov ecx,[number_level] |
||
913 | ; inc ecx //leency |
||
914 | mcall 47,3*65536,,<225,5>,0x1ded00 |
||
915 | xor ecx,ecx |
||
916 | mov cl,[LifesPlayer] |
||
917 | shr ecx,2 |
||
918 | mcall ,,,<295,5>,0x3558ff |
||
919 | xor ecx,ecx |
||
920 | mov cl,byte[score] |
||
921 | mcall ,,<365,5>,0xf93500 |
||
922 | jmp maincycle |
||
31 | halyavin | 923 | ;---------------------------------------------------------- |
924 | ;-----------------end of main cycle------------------------ |
||
925 | ;---------------------------------------------------------- |
||
2079 | mario79 | 926 | pause_cicle: |
927 | pusha |
||
928 | .start: |
||
929 | mcall 9,procinfo,-1 |
||
930 | mov eax,[procinfo+70] ;status of window |
||
931 | test eax,100b |
||
932 | jne @f |
||
933 | popa |
||
934 | ret |
||
935 | @@: |
||
936 | mcall 10 |
||
937 | dec eax |
||
938 | jz .redraw |
||
939 | dec eax |
||
940 | jz .key |
||
941 | dec eax |
||
942 | jnz .start |
||
943 | .button: |
||
944 | mcall -1 |
||
945 | .key: |
||
946 | mcall 2 |
||
947 | jmp .start |
||
948 | .redraw: |
||
949 | call drawwin |
||
950 | jmp .start |
||
951 | ;--------------------------------------------------------- |
||
31 | halyavin | 952 | ;draw sprite in video memory |
953 | PutSprite: |
||
2079 | mario79 | 954 | push eax |
955 | mov ebx,esi |
||
956 | mov eax,edi |
||
957 | lea ebx,[ebx+2*ebx] |
||
958 | lea eax,[eax+2*eax] |
||
959 | imul eax,640 |
||
960 | add eax,0x4000 |
||
961 | add eax,ebx |
||
962 | mov [counter],20 |
||
963 | mov esi,edx |
||
964 | imul esi,1200 |
||
965 | add esi,0x4000+(640*400*3)+10*1200 |
||
966 | mov ebx,esi |
||
967 | mov edi,eax |
||
968 | draw: |
||
969 | mov esi,ebx |
||
970 | mov edi,eax |
||
971 | mov ecx,20 |
||
972 | ;-------------------- |
||
973 | rep_movsb: |
||
974 | xor edx,edx |
||
975 | mov edx,[esi] |
||
976 | and edx,0xffffff |
||
977 | test edx,edx ;0 is transparent color |
||
978 | jz transparent_color |
||
979 | mov [edi],dx |
||
980 | shr edx,16 |
||
981 | mov [edi+2],dl |
||
982 | transparent_color: |
||
983 | add esi,3 |
||
984 | add edi,3 |
||
985 | sub ecx,1 |
||
986 | jnz rep_movsb |
||
987 | ;-------------------- |
||
988 | add eax,640*3 |
||
989 | add ebx,20*3 |
||
990 | dec [counter] |
||
991 | jnz draw |
||
992 | pop eax |
||
993 | ret |
||
31 | halyavin | 994 | ;---------------------------------------------------------- |
995 | SaveFon: |
||
2079 | mario79 | 996 | push eax |
997 | lea esi,[esi+2*esi] |
||
998 | lea edi,[edi+2*edi] |
||
999 | imul edi,640 |
||
1000 | add esi,edi |
||
1001 | add esi,0x4000 |
||
1002 | mov edi,edx |
||
1003 | imul edi,1200 |
||
1004 | add edi,0x4000+(640*400*3)+(50*20*20*3)+512+641 |
||
1005 | mov [counter],20 |
||
1006 | mov eax,esi |
||
1007 | mov ebx,edi |
||
31 | halyavin | 1008 | save_to: |
2079 | mario79 | 1009 | mov esi,eax |
1010 | mov edi,ebx |
||
1011 | mov ecx,15 |
||
1012 | rep movsd |
||
1013 | add eax,640*3 |
||
1014 | add ebx,20*3 |
||
1015 | dec [counter] |
||
1016 | jnz save_to |
||
1017 | pop eax |
||
31 | halyavin | 1018 | ret |
1019 | ;---------------------------------------------------------- |
||
1020 | PutFon: |
||
2079 | mario79 | 1021 | push eax |
1022 | lea esi,[esi+2*esi] |
||
1023 | lea edi,[edi+2*edi] |
||
1024 | imul edi,640 |
||
1025 | add edi,esi |
||
1026 | add edi,0x4000 |
||
1027 | mov esi,edx |
||
1028 | imul esi,1200 |
||
1029 | add esi,0x4000+(640*400*3)+(50*20*20*3)+512+641 |
||
1030 | mov [counter],20 |
||
1031 | mov eax,esi |
||
1032 | mov ebx,edi |
||
1033 | put_to: |
||
1034 | mov esi,eax |
||
1035 | mov edi,ebx |
||
1036 | mov ecx,15 |
||
1037 | rep movsd |
||
1038 | add eax,20*3 |
||
1039 | add ebx,640*3 |
||
1040 | dec [counter] |
||
1041 | jnz put_to |
||
1042 | pop eax |
||
1043 | ret |
||
31 | halyavin | 1044 | ;---------------------------------------------------------- |
1045 | ;get time in 1/100 sec |
||
2079 | mario79 | 1046 | clock: |
1047 | mcall 26,9 |
||
1048 | mov [time],eax |
||
31 | halyavin | 1049 | ret |
1050 | ;---------------------------------------------------------- |
||
1051 | ;-----------------load level to memory--------------------- |
||
1052 | ;---------------------------------------------------------- |
||
1053 | load_level: |
||
2079 | mario79 | 1054 | cmp ecx,15 |
1055 | je no_load_level |
||
1056 | mov eax,edx |
||
1057 | mov ebx,[levels+4*eax] |
||
1058 | mov esi,ebx |
||
1059 | add esi,2 |
||
1060 | xor ecx,ecx |
||
1061 | xor eax,eax |
||
1062 | mov cl,byte[ebx] |
||
1063 | mov al,byte[ebx+1] |
||
1064 | add ecx,eax |
||
1065 | mov edi,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
1066 | call unpakin |
||
1067 | no_load_level: |
||
1068 | and [y],0 |
||
1069 | c_y: |
||
1070 | and [x],0 |
||
1071 | c_x: |
||
1072 | mov eax,[x] |
||
1073 | mov ebx,[y] |
||
1074 | shl ebx,5 |
||
1075 | add eax,ebx |
||
1076 | add eax,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
1077 | mov ecx,eax |
||
1078 | xor eax,eax |
||
1079 | mov al,byte [ecx] |
||
1080 | imul eax,1200 |
||
1081 | add eax,0x4000+(640*400*3) |
||
1082 | mov ebx,[x] |
||
1083 | imul ebx,20*3 |
||
1084 | mov ecx,[y] |
||
1085 | imul ecx,20*3*640 |
||
1086 | add ebx,ecx |
||
1087 | add ebx,0x4000 |
||
1088 | mov esi,eax |
||
1089 | mov edi,ebx |
||
1090 | ;---------------------------- |
||
1091 | mov edx,20 |
||
1092 | next_line: |
||
1093 | mov esi,eax |
||
1094 | mov edi,ebx |
||
1095 | mov ecx,15 |
||
1096 | rep movsd |
||
1097 | add eax,20*3 |
||
1098 | add ebx,(640*3) |
||
1099 | dec edx |
||
1100 | jnz next_line |
||
1101 | ;---------------------------- |
||
1102 | inc [x] |
||
1103 | cmp [x],32 |
||
1104 | jne c_x |
||
1105 | inc [y] |
||
1106 | cmp [y],20 |
||
1107 | jne c_y |
||
1108 | ret |
||
31 | halyavin | 1109 | ;---------------------------------------------------------- |
1110 | map_x_y: |
||
2079 | mario79 | 1111 | push eax |
1112 | mov ecx,20 |
||
1113 | mov eax,esi |
||
1114 | cdq |
||
1115 | idiv ecx |
||
1116 | mov esi,eax |
||
1117 | mov eax,edi |
||
1118 | cdq |
||
1119 | idiv ecx |
||
1120 | mov edi,eax |
||
1121 | ;------------------ |
||
1122 | mov ebx,edi |
||
1123 | shl ebx,5 |
||
1124 | add ebx,esi |
||
1125 | add ebx,0x4000+(640*400*3)+(50*20*20*3)+512 |
||
1126 | xor ecx,ecx |
||
1127 | mov cl,byte[ebx] |
||
1128 | cmp cl,0 |
||
1129 | je false_draw |
||
1130 | cmp cl,1 |
||
1131 | je false_draw |
||
1132 | cmp cl,3 |
||
1133 | je false_draw |
||
1134 | cmp cl,7 |
||
1135 | je false_draw |
||
1136 | mov edx,1 |
||
1137 | jmp lab2 |
||
1138 | false_draw: |
||
1139 | xor edx,edx |
||
1140 | lab2: |
||
1141 | pop eax |
||
1142 | ret |
||
31 | halyavin | 1143 | ;---------------------------------------------------------- |
1144 | you_won: |
||
2079 | mario79 | 1145 | mcall 13,<1,640>,<20,400>,0xc6e9 |
1146 | mcall 4,<255,190>,0xffffff,won1,29 |
||
1147 | mcall ,<255,200>,,won2, |
||
1148 | mcall ,<255,210>,,won3, |
||
1149 | mcall 5,400 |
||
1150 | ret |
||
31 | halyavin | 1151 | ;---------------------------------------------------------- |
1152 | end_game: |
||
2079 | mario79 | 1153 | xor edx,edx |
1154 | mcall 13,<0,640>,<20,400> |
||
1155 | mcall 4,<280,200>,0xffffff,game_over,9 |
||
1156 | mcall 5,350 |
||
31 | halyavin | 1157 | ret |
1158 | ;---------------------------------------------------------- |
||
1159 | drawwin: |
||
2009 | yogev_ezra | 1160 | mcall 12,1 |
2079 | mario79 | 1161 | ;рисуем окно задавая все необходимые цвета |
2009 | yogev_ezra | 1162 | mcall 0,100*65536+649,50*65536+446,(0x74000000+0xffffff),,name |
2079 | mario79 | 1163 | mcall 9,procinfo,-1 |
1164 | mov eax,[procinfo+70] ;status of window |
||
1165 | test eax,100b |
||
1166 | jne @f |
||
1167 | call paint_area |
||
1168 | @@: |
||
2009 | yogev_ezra | 1169 | mcall 12,2 |
31 | halyavin | 1170 | ret |
1171 | ;---------------------------------------------------------- |
||
2079 | mario79 | 1172 | paint_area: |
1173 | xor edx,edx |
||
1174 | mcall 13,0*65536+640,0*65536+20 |
||
1175 | ret |
||
1176 | ;---------------------------------------------------------- |
||
31 | halyavin | 1177 | menu: |
2079 | mario79 | 1178 | cycle_menu: |
1179 | mcall 13,<238,141>,<229,20>,0xed16 |
||
1180 | mcall 4,<255,235>,0xff0200,start_menu,11 |
||
1181 | mcall 47,3*65536,[number_level],<345,235>,0xff0200 |
||
1182 | mcall 4,<465,5>,0x888888,description,25 |
||
1183 | still: |
||
1184 | mcall 10 |
||
1185 | dec eax |
||
1186 | jz .redraw |
||
1187 | dec eax |
||
1188 | jz .key |
||
1189 | ; jmp .button |
||
2018 | leency | 1190 | ;.button: |
2079 | mario79 | 1191 | mcall -1 |
2018 | leency | 1192 | .redraw: |
2079 | mario79 | 1193 | pop eax |
1194 | jmp restart_level |
||
2018 | leency | 1195 | .key: |
2079 | mario79 | 1196 | mcall 2 |
1197 | shr eax,8 |
||
1198 | cmp eax,32 |
||
1199 | je start_game |
||
1200 | cmp eax,13 |
||
1201 | je start_game |
||
1202 | cmp eax,176 |
||
1203 | jne no_left |
||
1204 | dec [number_level] |
||
1205 | and [number_level],15 |
||
1206 | jmp cycle_menu |
||
1207 | no_left: |
||
1208 | cmp eax,179 |
||
1209 | jne no_right |
||
1210 | inc [number_level] |
||
1211 | and [number_level],15 |
||
1212 | jmp cycle_menu |
||
1213 | no_right: |
||
1214 | cmp eax,27 |
||
1215 | jne cycle_menu |
||
1216 | mov eax,-1 |
||
485 | heavyiron | 1217 | mcall |
31 | halyavin | 1218 | start_game: |
1219 | ret |
||
1220 | ;---------------------------------------------------------- |
||
1221 | ;--------------unpak pix engin----------------------------- |
||
1222 | ;---------------------------------------------------------- |
||
2079 | mario79 | 1223 | unpakin: |
1224 | NextLitlColor: |
||
1225 | xor edx,edx |
||
1226 | mov dl,byte[esi] |
||
1227 | xor eax,eax |
||
1228 | xor ebx,ebx |
||
1229 | mov al,dl |
||
1230 | mov bl,al |
||
1231 | shr al,4 |
||
1232 | and al,0xf |
||
1233 | mov [LitlCounter],al |
||
1234 | and bl,0xf |
||
1235 | mov [LitlColor],bl |
||
1236 | xor eax,eax |
||
1237 | ;---------------------- |
||
1238 | mov al,[LitlColor] |
||
1239 | beg: |
||
1240 | mov [edi],al |
||
1241 | add edi,1 |
||
1242 | add [LitlCounter],-1 |
||
1243 | cmp [LitlCounter],-1 |
||
1244 | jne beg |
||
1245 | inc esi |
||
1246 | dec ecx |
||
1247 | jnz NextLitlColor |
||
1248 | ret |
||
31 | halyavin | 1249 | ;---------------------------------------------------------- |
2079 | mario79 | 1250 | include 'data.inc' |
31 | halyavin | 1251 | ;---------------------------------------------------------- |
2079 | mario79 | 1252 | procinfo: |
1253 | rb 1024 |
||
31 | halyavin | 1254 | ;---------------------------------------------------------- |
2018 | leency | 1255 | I_END:465,5>345,235>255,235>229,20>238,141>280,200>20,400>0,640>255,210>255,200>255,190>20,400>1,640>365,5>295,5>225,5>330,5>260,5>190,5>5,7>190,192>0,20>640,400>>0,20>640,400> |