Subversion Repositories Kolibri OS

Rev

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: