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