Subversion Repositories Kolibri OS

Rev

Rev 6277 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8485 maxcodehac 1
 
2
3
 
4
  org	 0x0
5
  db	 'MENUET01'
6
  dd	 0x01
7
  dd	 START
8
  dd	 I_END
9
  dd	 0x300000
10
  dd	 0x27fff0
11
  dd	 0x0
12
  dd	 0x0
13
14
 
15
include '..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков!
16
17
 
18
include 'ASCGL.INC'
19
20
 
21
 
22
 
23
COLOR_ORDER equ MENUETOS
24
25
 
26
27
 
28
;****************
29
; Открываем фаил
30
;****************
31
openfile:
32
;    and  [entered],0
33
;    mov ecx,499*3*4 ;at start
34
    xor ecx,ecx
35
    mov ecx,1
36
37
 
38
    giftoani workarea,Image,ecx
39
    bmptoimg bullet_bmp, img_bullet
40
    bmptoimg level_bmp, img_level
41
    bmptoimg kirpich, img_area
42
    bmptoimg kirpich2, img_area2
43
    bmptoimg kirpich3, img_area3
44
    bmptoimg lest_bmp, img_lestniza
45
    bmptoimg water1_bmp, img_water1
46
    bmptoimg water2_bmp, img_water2
47
    bmptoimg door1_bmp, img_door1
48
    bmptoimg door2_bmp, img_door2
49
50
 
51
 
52
    call timer
53
    call draw_window
54
;    call load_level
55
;    delay 200
56
57
 
58
    timeevent DELAY,no_event, red, key, button
59
60
 
61
    call draw_subimage
62
    jmp  still
63
64
 
65
 ; блока движения персонажа
66
    mov  eax,2
67
    int  0x40
68
     cmp  ah, 179	   ; право  4
69
     je go_mov
70
     cmp  ah, 176	   ; лево  1
71
     je go_mov
72
     cmp  ah, 178	   ; верх  3
73
     je go_mov
74
     cmp  ah, 177	   ; низ  2
75
     je go_mov
76
     cmp  ah, 120	   ; низ  2
77
     je go_fire
78
     cmp  ah, 122	   ; низ  2
79
     je go_fire
80
     cmp  ah, 239	   ; низ  2
81
     je go_fire_left
82
     cmp  ah, 231	   ; низ  2
83
     je go_fire
84
85
 
86
 
87
88
 
89
       ;mov ebx, [v_mov2]
90
       mov [v_mov2], ah
91
       sub word [v_mov2], 175	; отнимаем от кода клавиши 175 и остается 1,2,3 или 4 соответственно направления движения персонажа
92
      jmp no_mov    ; if not left, right, up, down, then go NO MOV
93
94
 
95
       xor eax,eax
96
       mov ah, 122
97
       call fire
98
      jmp no_mov
99
    go_fire:
100
       call fire
101
    no_mov:
102
 ; конец блока движения персонажа
103
    jmp  still
104
105
 
106
    mov  eax, 17
107
    int  0x40
108
109
 
110
    jne still
111
    mcall -1
112
113
 
114
;   *******  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА *******
115
;   *********************************************
116
117
 
118
    startwd
119
120
 
121
    mov  ebx, 50*65536+522
122
    mov  ecx, 50*65536+536
123
    mov  edx, WND_COLOR
124
    mov  edi, title
125
    int  0x40
126
127
 
128
    call draw_subimage
129
    cmp  [imgcount],1
130
    je	 .enddraw
131
132
 
133
134
 
135
136
 
137
138
 
139
140
 
141
 
142
143
 
144
; LABIRINT
145
;*******************************************
146
147
 
148
149
 
150
   cycle:
151
152
 
153
    shl     eax, 5	    ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
154
    mov     [perem1], eax
155
    mov     eax, [Lab]
156
    shr     eax, 4	    ; сдвиг регистра в лево
157
    shl     eax, 5	    ; сдвиг обратно (все равно что целочисленное делениена 256)
158
    mov     [perem2], eax
159
    shl     eax, 4	    ; все равно что отнимаем от координат ненужный прирост -> У-256*X
160
    sbb  dword [perem1], eax;
161
162
 
163
  sbb	 ebx, 1
164
  mov	  eax,[Dangeon + ebx]	 ; берет байт из дангеон + смещение
165
166
 
167
  je go_block
168
169
 
170
  je back_block
171
172
 
173
  je back_block
174
175
 
176
  je boom_block
177
178
 
179
  je door_block
180
181
 
182
  je cool_block
183
184
 
185
  go_block:
186
    imgtoimg img_area,dword [perem1],dword [perem2],canvas
187
  jmp end_block
188
189
 
190
     imgtoimg img_area3,dword [perem1],dword [perem2],canvas
191
  jmp end_block
192
193
 
194
 
195
    imgtoimg img_area2,dword [perem1],dword [perem2],canvas
196
   jmp end_block
197
198
 
199
    imgtoimg img_door1,dword [perem1],dword [perem2],canvas
200
201
 
202
    cmp ax, 10	      ; если собрано более 10 алмазов дверь открыта
203
    jna end_block
204
    imgtoimg img_door2,dword [perem1],dword [perem2],canvas
205
   jmp end_block
206
207
 
208
 
209
    imgtoimg img_area,dword [perem1],dword [perem2],canvas
210
	   mov ebp,18 ; кадр
211
	   mov eax, dword [perem1]
212
	   mov dword [X_anime], eax
213
	   mov eax, dword [perem2]
214
	   mov dword [Y_anime], eax
215
	   call animashka
216
217
 
218
	     and ecx, 15
219
	     cmp ecx, 0
220
	     jne  end_block
221
222
 
223
		mov	byte [Dangeon + ebx], 0    ; берет байт из дангеон + смещение
224
225
 
226
 
227
228
 
229
    mov     eax, [Lab]
230
231
 
232
   je	   cycle_end		     ;   jump to cycle_end:
233
   jmp	   cycle		    ;
234
235
 
236
237
 
238
   mov	  [Lab],eax
239
240
 
241
242
 
243
 
244
; ЛЕСТНИЦА
245
;*******************************************
246
 lestniza:
247
   ; вывод блоков лабиринта
248
   cycle2:
249
250
 
251
    shl     eax, 5	    ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
252
    mov     [perem1], eax
253
    mov     eax, [Lab]
254
    shr     eax, 4	    ; сдвиг регистра в лево
255
    shl     eax, 5	    ; сдвиг обратно (все равно что целочисленное делениена 256)
256
    mov     [perem2], eax
257
    shl     eax, 4	    ; все равно что отнимаем от координат ненужный прирост -> У-256*X
258
    sbb  dword [perem1], eax;
259
260
 
261
 
262
  sbb	 ebx, 1
263
  mov	  eax,[Dangeon + ebx]	 ; берет байт из дангеон + смещение
264
265
 
266
  je go_lestniza
267
268
 
269
  go_lestniza:
270
271
 
272
  end_lestniza:
273
274
 
275
    mov     eax, [Lab]
276
277
 
278
   je	   cycle2_end		      ;   jump to cycle_end:
279
   jmp	   cycle2		     ;
280
281
 
282
283
 
284
   mov	  [Lab],eax
285
286
 
287
 
288
289
 
290
 
291
 
292
; ВОДА     и  АЛМАЗЫ
293
;*******************************************
294
 water:
295
296
 
297
   cycle3:
298
299
 
300
    shl     eax, 5	    ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
301
    mov     [perem1], eax
302
    mov     eax, [Lab]
303
    shr     eax, 4	    ; сдвиг регистра в лево
304
    shl     eax, 5	    ; сдвиг обратно (все равно что целочисленное делениена 256)
305
    mov     [perem2], eax
306
    shl     eax, 4	    ; все равно что отнимаем от координат ненужный прирост -> У-256*X
307
    sbb  dword [perem1], eax;
308
309
 
310
 
311
  sbb	 ebx, 1
312
  mov	  eax,[Dangeon + ebx]	 ; берет байт из дангеон + смещение
313
314
 
315
  je go_water
316
317
 
318
  je go_almaz
319
320
 
321
  go_water:
322
  mov	  eax,0    ;
323
  mov	  eax, [timer1];
324
  and  eax, 15
325
  cmp  eax, 7	;
326
  jb go_water2
327
328
 
329
  jmp end_water
330
331
 
332
    imgtoimg img_water2,dword [perem1],dword [perem2],canvas
333
334
 
335
  go_almaz:
336
337
 
338
  mov	  eax, [timer1];
339
  and  eax, 31
340
341
 
342
   ja almaz2
343
344
 
345
   mov eax, dword [perem1]
346
   mov dword [X_anime], eax
347
   mov eax, dword [perem2]
348
   mov dword [Y_anime], eax
349
   call animashka
350
   jmp end_water
351
352
 
353
   cmp eax, 20
354
   ja almaz3
355
356
 
357
   mov eax, dword [perem1]
358
   mov dword [X_anime], eax
359
   mov eax, dword [perem2]
360
   mov dword [Y_anime], eax
361
   call animashka
362
   jmp end_water
363
364
 
365
   mov ebp,16 ; кадр
366
   mov eax, dword [perem1]
367
   mov dword [X_anime], eax
368
   mov eax, dword [perem2]
369
   mov dword [Y_anime], eax
370
   call animashka
371
372
 
373
 
374
375
 
376
    mov     eax, [Lab]
377
378
 
379
   je	   cycle3_end		      ;   jump to cycle_end:
380
   jmp	   cycle3		     ;
381
382
 
383
384
 
385
   mov	  [Lab],eax
386
387
 
388
 
389
390
 
391
 
392
; Выводим следующий кадр из списка картинок
393
;*******************************************
394
draw_subimage:
395
  ;aframetoimg Image,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
396
397
 
398
  call lestniza
399
  call enemy_mas
400
  call enemy_mov
401
;-------------------------------------------------------------------------------
402
    mov ebx, [gold]
403
    cmp bx, 5		;увеличение скорости врагов если украл более 9
404
    jna lov_velo
405
     call enemy_mas
406
     call enemy_mov
407
    lov_velo:
408
;-------------------------------------------------------------------------------
409
;-------------------------------------------------------------------------------
410
    mov ebx, [gold]
411
    cmp bx, 9		;увеличение скорости врагов если украл более 9
412
    jna lov_velo2
413
     call enemy_mas
414
     call enemy_mov
415
    lov_velo2:
416
;-------------------------------------------------------------------------------
417
;  call enemy_mas
418
;  call enemy_mov
419
  call hiro
420
  call hiro_mov
421
  call water
422
423
 
424
  call bullet_mov
425
  call bullet_mov
426
  call bullet_mas
427
  call bullet_mov
428
  call bullet_mov
429
  call bullet_mov
430
  call bullet_mas
431
  call proverka_gold
432
  call potop
433
434
 
435
436
 
437
  call tablo
438
ret
439
440
 
441
animashka:
442
;!!!ВАЖНО перед вызовом процедуры должен быть установлен ebx[номер кадра] и x,y
443
444
 
445
  mov esi, Image ; гиф анимашка в памяти
446
;
447
;  mov ebp, dword [edi+8] ;ecx здесь конкретный номер выводимого кадра
448
;  inc ebp ; увеличение кадра
449
;  cmp ebp,3 ;  максимальное количество кадров !!!!!!!
450
;  jna ok_fr ; если выводимы кадр меньше максимального количества кадров
451
;!!!!!!!!!  mov ebp,2 ;обнуление кадра
452
453
 
454
  mov dword [edi+8], ebp ;номер выводимого кадра
455
loo:
456
  cmp ebp,0  ; если кадр нулевой то сразу на вывод ?
457
  je  setpic
458
  movzx eax,word [esi+4]   ; если нет то увеличиваем х у ?
459
  movzx ebx,word [esi+6]
460
  mul ebx ;dword [esi+4] умножает ebx на eax и результат в eax edx
461
  mov ebx,3 ; количество кадров ???
462
  mul ebx
463
  add eax,8
464
  add esi,eax
465
  dec ebp
466
  jmp loo
467
setpic:
468
469
 
470
; aframetoimg esi,dword [edi], dword [edi+4],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
471
;  aframetoimg esi,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
472
  aframetoimg esi,dword [X_anime],dword [Y_anime],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
473
  ;call enemy_mas
474
  popad
475
ret
476
;@@@@@@@@@@@@@@
477
478
 
479
 
480
 timer:
481
     mov     eax,0    ;
482
     mov     eax,[timer1]    ;
483
     add     eax, 1;
484
     mov     [timer1], eax
485
486
 
487
     je nul_timer
488
     jmp timer_dalee
489
     nul_timer :
490
     mov    [timer1], 0
491
     timer_dalee:
492
 ret
493
 ;-------------- TIMER --------------
494
495
 
496
 
497
 
498
 
499
 
500
; ENEMY
501
;*******************************************
502
503
 
504
505
 
506
507
 
508
509
 
510
  mov	 ecx, 0
511
  mov	 edx, 0
512
  mov	 esi, 0
513
514
 
515
  mov	 word ax,[Enemy+bx]    ; берет байт из Enemy + смещение
516
517
 
518
  je go_enemy
519
520
 
521
  go_enemy:
522
523
 
524
  mov	 word ax, [Enemy + bx]
525
  mov	 word [X_enemy], ax
526
527
 
528
  mov	 word ax, [Enemy + ebx]
529
  mov	 word [Y_enemy], ax
530
531
 
532
  mov	 word ax, [Enemy + ebx]
533
  mov	 word [lab_enemy], ax
534
535
 
536
  mov	 word ax, [Enemy + ebx]
537
  mov	 word [mov_enemy], ax
538
539
 
540
  mov	 word ax, [Enemy + ebx]
541
  mov	 word [life_enemy], ax
542
543
 
544
  ja enemy_dalee
545
   mov ebp,2 ; кадр
546
   mov eax, dword [X_enemy]
547
   mov dword [X_anime], eax
548
   mov eax, dword [Y_enemy]
549
   mov dword [Y_anime], eax
550
   call animashka
551
   jmp enemy_bmp_end
552
553
 
554
 
555
 
556
  xor	  eax,eax    ;
557
  mov	  eax, [X_enemy]    ;
558
  and  eax, 15
559
  cmp  ax, 7;
560
  ja enemy_1
561
562
 
563
564
 
565
566
 
567
   mov eax, dword [X_enemy]
568
   mov dword [X_anime], eax
569
   mov eax, dword [Y_enemy]
570
   mov dword [Y_anime], eax
571
   call animashka
572
573
 
574
575
 
576
   mov ebp,1 ; кадр
577
   mov eax, dword [X_enemy]
578
   mov dword [X_anime], eax
579
   mov eax, dword [Y_enemy]
580
   mov dword [Y_anime], eax
581
   call animashka
582
   enemy_bmp_end:
583
584
 
585
586
 
587
    mov     word ax, [Lab2]
588
589
 
590
   je	   cycle4_end		      ;   jump to cycle_end:
591
592
 
593
594
 
595
596
 
597
598
 
599
600
 
601
;   ENEMY MOV
602
;$$$$$$$$$$$$$$$$$$$$$$$$$$
603
enemy_mov:
604
  mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
605
606
 
607
608
 
609
  mov	 ecx, 0
610
  mov	 edx, 0
611
  mov	 esi, 0
612
613
 
614
  mov	 word ax,[Enemy+bx]    ; берет байт из Enemy + смещение
615
616
 
617
  je go_mov_enemy
618
619
 
620
  go_mov_enemy:
621
622
 
623
  mov	 word ax, [Enemy + bx]
624
  mov	 word [X_enemy], ax
625
626
 
627
  mov	 word ax, [Enemy + ebx]
628
  mov	 word [Y_enemy], ax
629
630
 
631
  mov	 word ax, [Enemy + ebx]
632
  mov	 word [lab_enemy], ax
633
634
 
635
  mov	 word ax, [Enemy + ebx]
636
  mov	 word [mov_enemy], ax
637
638
 
639
  mov	 word ax, [Enemy + ebx]
640
  mov	 word [life_enemy], ax
641
642
 
643
  ja  dalee_enemy_mov
644
  add ax, 1
645
646
 
647
648
 
649
650
 
651
     ; блок поедания героя
652
      mov  ax, [Xpl]
653
      add  ax, 23
654
      cmp ax, [X_enemy]
655
	jna ne_em
656
	 sbb ax, 45
657
	 cmp ax, [X_enemy]
658
	  ja ne_em
659
	    mov  ax, [Ypl]
660
	    add  ax, 23
661
	    cmp ax, [Y_enemy]
662
	     jna ne_em
663
	     sbb ax, 45
664
	     cmp ax, [Y_enemy]
665
	  ja ne_em
666
	  call load_level  ; DEAD HIRO
667
	  delay 150
668
669
 
670
     ;Блок попадания 1 пули
671
672
 
673
  mov	 word ax,[Bullet + ebx]
674
  cmp ax, 0
675
  je no_bullet
676
677
 
678
  mov	 word cx, [Bullet + ebx]
679
680
 
681
  mov	 word dx, [Bullet + ebx]
682
683
 
684
    jna no_bullet
685
      sbb dx, 32
686
      cmp dx, [Y_enemy]
687
      ja no_bullet
688
      cmp cx, [X_enemy]
689
       jna no_bullet
690
       sbb cx, 32
691
	cmp cx, [X_enemy]
692
	ja no_bullet
693
	mov    word bx, [Lab2]
694
	add    word bx, 10 ; enemy LIFE
695
	mov    word [Enemy + ebx],0
696
697
 
698
699
 
700
701
 
702
 
703
	mov word ax, [mov_enemy]		      ;
704
	cmp ax, 1	     ; left                   ;
705
	jne next_2				      ;
706
	  sbb	 word [X_enemy], 1		      ;
707
	  mov	 word ax, [X_enemy]		      ;
708
	  mov	 word bx, [Lab2]		      ;
709
	  add	 word bx, 2 ; X кооридината данного врага
710
	  mov	 word [Enemy + bx], ax		      ;
711
						      ;
712
	next_2: 				      ;
713
	cmp ax, 2	     ; down                   ;
714
	jne next_3				      ;
715
	  add	 word [Y_enemy], 1		      ;
716
	  mov	 word ax, [Y_enemy]		      ;
717
	  mov	 word bx, [Lab2]		      ;
718
	  add	 word bx, 4 ; Y кооридината данного врага
719
	  mov	 word [Enemy + bx], ax		      ;
720
						      ;
721
	next_3: 				      ;
722
	cmp ax, 3	     ; up                     ;
723
	jne next_4				      ;
724
	  sbb	 word [Y_enemy], 1		      ;
725
	  mov	 word ax, [Y_enemy]		      ;
726
	  mov	 word bx, [Lab2]		      ;
727
	  add	 word bx, 4 ; Y кооридината данного врага
728
	  mov	 word [Enemy + bx], ax		      ;
729
						      ;
730
	next_4: 				      ;
731
	cmp ax, 4	     ; right                  ;
732
	jne next_end
733
734
 
735
	      mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
736
	      and ebx, 31    ; X в позиции напротив блока
737
	      cmp bx, 0     ;
738
	      jne n4_dalee   ;
739
		mov    bx,[lab_enemy]
740
		add    bx,16
741
		mov    ax, [Dangeon + bx]
742
		and   eax,15
743
		 cmp word ax, 0
744
		 je next_end
745
		 cmp word ax, 4
746
		 je next_end
747
	      ;конец заплатки
748
749
 
750
	;
751
	  add	 word [X_enemy], 1		      ;
752
	  mov	 word ax, [X_enemy]		      ;
753
	  mov	 word bx, [Lab2]		      ;
754
	  add	 word bx, 2 ; X кооридината данного врага
755
	  mov	 word [Enemy + bx], ax		      ;
756
						      ;
757
	next_end:
758
	  ;END БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГ
759
760
 
761
762
 
763
	mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
764
	and ebx, 31    ; X в позиции напротив блока
765
	cmp bx, 0     ;
766
	jne end_les   ;
767
	   mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
768
	   and ebx, 31	  ; X в позиции напротив блока
769
	   cmp bx, 0	 ;
770
	   jne end_les	 ;
771
772
 
773
774
 
775
		 ja les2
776
		 jmp end_up_or_down
777
		les2:
778
779
 
780
		cmp eax, [Y_enemy]
781
		jna bolee
782
		mov    word [mov_enemy],2		    ; вниз
783
		mov    word ax, [mov_enemy]		    ;
784
		mov    word bx, [Lab2]			    ;
785
		add    word bx, 8  ; направление движения данного врага
786
		mov    word [Enemy + bx], ax		    ;
787
		jmp end_les
788
789
 
790
		mov    word [mov_enemy],3		    ; up
791
		mov    word ax, [mov_enemy]		    ;
792
		mov    word bx, [Lab2]			    ;
793
		add    word bx, 8  ; направление движения данного врага
794
		mov    word [Enemy + bx], ax		    ;
795
		jmp end_les
796
797
 
798
799
 
800
		 cmp eax, 150
801
		 ja les22
802
		 jmp end_les
803
		les22:
804
805
 
806
		cmp eax, [X_enemy]
807
		jna bolee2
808
		mov    word [mov_enemy],4		    ; вниз
809
		mov    word ax, [mov_enemy]		    ;
810
		mov    word bx, [Lab2]			    ;
811
		add    word bx, 8  ; направление движения данного врага
812
		mov    word [Enemy + bx], ax		    ;
813
		jmp end_les
814
815
 
816
		mov    word [mov_enemy],1		    ; up
817
		mov    word ax, [mov_enemy]		    ;
818
		mov    word bx, [Lab2]			    ;
819
		add    word bx, 8  ; направление движения данного врага
820
		mov    word [Enemy + bx], ax		    ;
821
822
 
823
     ;  end Рандомный выбор на леснице
824
825
 
826
	mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
827
	and ebx, 31    ; X в позиции напротив блока
828
	cmp bx, 0     ;
829
	jne end_grava	;
830
831
 
832
		add    bx,16
833
		mov    ax, [Dangeon + bx]
834
835
 
836
		 cmp word ax, 0
837
		 je grava
838
		 cmp word ax, 4
839
		 je grava
840
		 jmp end_grava
841
		grava:
842
		mov    word [mov_enemy], 2		    ; padenie ВРАГА
843
		mov    word ax, [mov_enemy]		    ;
844
		mov    word bx, [Lab2]			    ;
845
		add    word bx, 8  ; направление движения данного врага
846
		mov    word [Enemy + bx], ax		    ;
847
848
 
849
     ;конец гравитации
850
851
 
852
	    mov eax, 0				  ;
853
	    mov eax, [Y_enemy]			      ;
854
	    shr eax, 5				  ;
855
	    shl eax, 4				  ;
856
	    mov ebx, 0				  ;
857
	    mov ebx, [X_enemy]			      ;
858
	    shr ebx, 5				  ;
859
	    add eax, ebx			  ;
860
	    mov [lab_enemy], eax		   ;
861
		mov    word bx, [Lab2]			    ;
862
		add    word bx, 6  ; направление движения данного врага
863
		mov    word [Enemy + bx], ax		    ;
864
	  ;блок расчета положения врага в лабиринте
865
866
 
867
 
868
 
869
 
870
 
871
 
872
	mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
873
	and bx, 31    ; Y в позиции напротив блока
874
	cmp bx, 0     ;
875
	jne end_zapret	 ;
876
	   mov word ax, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
877
	   and ax, 31	 ; X в позиции напротив блока
878
	   cmp ax, 0	 ;
879
	   jne end_zapret   ;
880
881
 
882
883
 
884
	      jne duma1
885
		    ; Рандомный выбор движения
886
		 mov eax, [timer1]
887
		 and eax, 3
888
		 cmp eax, 0
889
		 jne dalee_duma1
890
		 add eax, 4
891
		 dalee_duma1:
892
893
 
894
		mov    word ax, [mov_enemy]		    ;
895
		mov    word bx, [Lab2]			    ;
896
		add    word bx, 8  ; направление движения данного врага
897
		mov    word [Enemy + bx], ax		    ;
898
899
 
900
 
901
 
902
	      cmp ax, 4
903
	      jne duma2  ; прверка справа
904
		mov    bx,[lab_enemy]
905
		add    bx,1
906
		mov    ax, [Dangeon + bx]
907
		and   eax,3
908
		 cmp ax, 0
909
		 jne duma_stop
910
		 jmp duma_end
911
912
 
913
	      cmp ax, 1
914
	      jne duma3  ; слева
915
		mov    bx,[lab_enemy]
916
		sbb    bx,1
917
		mov    ax, [Dangeon + bx]
918
		and   eax,3
919
		 cmp ax, 0
920
		 jne duma_stop
921
		 jmp duma_end
922
923
 
924
	      cmp ax, 2
925
	      jne duma4  ; снизу
926
		mov    bx,[lab_enemy]
927
		add    bx,16
928
		mov    ax, [Dangeon + bx]
929
		and   eax,3
930
		 cmp ax, 0
931
		 jne duma_stop
932
		 jmp duma_end
933
934
 
935
	      cmp ax, 3
936
	      jne duma_stop  ; сверху
937
938
 
939
		sbb    bx,16
940
		mov    ax, [Dangeon + bx]
941
		and   eax,3
942
		 cmp ax, 0		  ; если кирпич над головой
943
		 jne duma_stop
944
945
 
946
		mov    ax, [Dangeon + bx]
947
		and   eax,15
948
		cmp ax, 8
949
		 jne duma_stop
950
951
 
952
953
 
954
955
 
956
		mov    word ax, [mov_enemy]		    ;
957
		mov    word bx, [Lab2]			    ;
958
		add    word bx, 8  ; направление движения данного врага
959
		mov    word [Enemy + bx], ax		    ;
960
961
 
962
963
 
964
	 ;конец запрета
965
966
 
967
968
 
969
    mov     word ax, [Lab2]
970
971
 
972
   je	   cycle5_end		      ;   jump to cycle_end:
973
974
 
975
976
 
977
978
 
979
980
 
981
 
982
983
 
984
;   HIRO
985
;*****************************
986
987
 
988
989
 
990
  cmp ecx, 0
991
  je  next_anima
992
      cmp ecx, 1
993
	je wprawo
994
	 mov ebp,12 ; кадр
995
	 mov eax, dword [Xpl]
996
	 mov dword [X_anime], eax
997
	 mov eax, dword [Ypl]
998
	 mov dword [Y_anime], eax
999
	 call animashka
1000
	     mov ecx, [timer1]	 ;стрельба
1001
	     and ecx, 15
1002
	     cmp ecx, 0
1003
	     jne  end_hiro
1004
	      mov dword [v_fire], 0
1005
	  jmp end_hiro
1006
1007
 
1008
	 mov ebp,11 ; кадр
1009
	 mov eax, dword [Xpl]
1010
	 mov dword [X_anime], eax
1011
	 mov eax, dword [Ypl]
1012
	 mov dword [Y_anime], eax
1013
	 call animashka
1014
	     mov ecx, [timer1]	 ;стрельба
1015
	     and ecx, 15
1016
	     cmp ecx, 0
1017
	     jne  end_hiro
1018
	      mov dword [v_fire], 0
1019
	  jmp end_hiro
1020
1021
 
1022
   jmp end_hiro
1023
1024
 
1025
  mov eax, [v_mov]
1026
  cmp eax, 1
1027
  jne next_r
1028
  mov	  eax,0    ;
1029
  mov	  eax, [Xpl];
1030
  and  eax, 15
1031
  cmp  eax, 7	;
1032
  ja next_l1
1033
1034
 
1035
   mov eax, dword [Xpl]
1036
   mov dword [X_anime], eax
1037
   mov eax, dword [Ypl]
1038
   mov dword [Y_anime], eax
1039
   call animashka
1040
   jmp end_hiro
1041
1042
 
1043
   mov ebp,5 ; кадр
1044
   mov eax, dword [Xpl]
1045
   mov dword [X_anime], eax
1046
   mov eax, dword [Ypl]
1047
   mov dword [Y_anime], eax
1048
   call animashka
1049
       pusha
1050
       mcall 55, eax, , , Music_mov   ; звук выстрела
1051
       popa
1052
1053
 
1054
1055
 
1056
  cmp eax, 4
1057
  jne next_d
1058
1059
 
1060
  mov	  eax, [Xpl];
1061
  and  eax, 15
1062
  cmp  eax, 7	;
1063
  ja next_d1
1064
1065
 
1066
   mov eax, dword [Xpl]
1067
   mov dword [X_anime], eax
1068
   mov eax, dword [Ypl]
1069
   mov dword [Y_anime], eax
1070
   call animashka
1071
1072
 
1073
       mcall 55, eax, , , Music_mov   ; звук выстрела
1074
       popa
1075
   jmp end_hiro
1076
1077
 
1078
   mov ebp,6 ; кадр
1079
   mov eax, dword [Xpl]
1080
   mov dword [X_anime], eax
1081
   mov eax, dword [Ypl]
1082
   mov dword [Y_anime], eax
1083
   call animashka
1084
1085
 
1086
1087
 
1088
  cmp eax, 2
1089
  jne next_u
1090
   mov ebp,13 ; кадр
1091
    mov eax, [temp2]
1092
    cmp eax, 8
1093
    jne padaem
1094
   mov ebp,10 ; кадр
1095
    padaem:
1096
    mov eax, [temp5]
1097
    cmp eax, 8
1098
    jne padaem2
1099
   mov ebp,10 ; кадр
1100
    padaem2:
1101
   mov eax, dword [Xpl]
1102
   mov dword [X_anime], eax
1103
   mov eax, dword [Ypl]
1104
   mov dword [Y_anime], eax
1105
   call animashka
1106
   jmp end_hiro
1107
1108
 
1109
  cmp eax, 3
1110
  jne next_s
1111
  mov	  eax,0    ;
1112
  mov	  eax, [Ypl];
1113
  and  eax, 15
1114
  cmp  eax, 7	;
1115
  ja next_u1
1116
1117
 
1118
   mov eax, dword [Xpl]
1119
   mov dword [X_anime], eax
1120
   mov eax, dword [Ypl]
1121
   mov dword [Y_anime], eax
1122
   call animashka
1123
   jmp end_hiro
1124
1125
 
1126
   mov ebp,9 ; кадр
1127
   mov eax, dword [Xpl]
1128
   mov dword [X_anime], eax
1129
   mov eax, dword [Ypl]
1130
   mov dword [Y_anime], eax
1131
   call animashka
1132
1133
 
1134
1135
 
1136
  cmp eax, 0
1137
  jne next_s
1138
   mov ebp,17; кадр
1139
   mov eax, dword [Xpl]
1140
   mov dword [X_anime], eax
1141
   mov eax, dword [Ypl]
1142
   mov dword [Y_anime], eax
1143
   call animashka
1144
   jmp end_hiro
1145
1146
 
1147
1148
 
1149
;**************
1150
;  end HIRO
1151
;**************
1152
1153
 
1154
 
1155
;  Hiro MOV
1156
;****************
1157
hiro_mov:
1158
1159
 
1160
1161
 
1162
       mov    ebx, [hiro_lab]
1163
       sbb    ebx,2
1164
       mov    eax,[Dangeon + bx]    ;                 up
1165
       mov    [temp1], ah	    ;               temp4
1166
				    ;
1167
       add    ebx,1		    ;        left    hiro  right
1168
       mov    eax,[Dangeon + bx]    ;       temp1   temp2  temp3
1169
       mov    [temp2], ah	    ;
1170
1171
 
1172
;     Сбор алмазов
1173
;-------------------------------------------------------------------------------
1174
	mov ecx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
1175
	and ecx, 31    ; Y в позиции напротив блока
1176
1177
 
1178
	and edx, 31    ; Y в позиции напротив блока
1179
	or edx,ecx ; Мы четко спозиционированы по Х и У
1180
	cmp edx, 0
1181
	jne no_almaz
1182
1183
 
1184
	  jne no_almaz
1185
	  xor cx, cx
1186
	  add ebx,1  ; ЗАПЛАТКА !!!  без нее почемуто обнуляет не алмазы а соседние блоки
1187
	  mov  [Dangeon + bx], ch
1188
	  sbb ebx, 1  ; ЗАПЛАТКА !!!
1189
	  mov ecx, [gold]
1190
	  add ecx, 1
1191
	  mov [gold], ecx
1192
       pusha
1193
       mcall 55, eax, , , Music_almaz	; звук Almaz
1194
       popa
1195
	  no_almaz:
1196
;-------------------------------------------------------------------------------
1197
;     Сбор алмазов
1198
;-------------------------------------------------------------------------------
1199
				    ;                down
1200
       add    ebx,1		    ;               temp5
1201
       mov    eax,[Dangeon + bx]    ;
1202
       mov    [temp3], ah
1203
1204
 
1205
       mov    eax,[Dangeon + bx]    ; при отсутствии библиотеки  MACROS.INC   ebx=17 , при ее присутствии ebx=16
1206
       mov    [temp4], ah
1207
1208
 
1209
       mov    eax,[Dangeon + bx]    ;
1210
       mov    [temp5], ah
1211
       ; вычисление соседних блоков
1212
1213
 
1214
 
1215
 
1216
 
1217
 
1218
     mov     eax,0		;
1219
     mov     eax,[v_mov2]	;
1220
     and     eax,7
1221
     and     eax,2
1222
     cmp eax, 2
1223
     je smena
1224
1225
 
1226
	and ebx, 31    ; Y в позиции напротив блока
1227
	cmp ebx, 0     ;
1228
	jne end_tamgna	 ;
1229
	smena:
1230
1231
 
1232
	 mov	 eax,[v_mov2]	    ;
1233
	 and	 eax,7
1234
	 and	 eax,2
1235
	 cmp eax, 0
1236
	 je smena2
1237
1238
 
1239
	 and ebx, 31	; X в позиции напротив блока
1240
	 cmp ebx, 0	;
1241
	 jne end_tamgna   ;
1242
1243
 
1244
	  mov eax, [v_mov2]
1245
	  and eax, 7
1246
	  mov [v_mov], eax
1247
     end_tamgna:
1248
     ;разрешение на движение
1249
1250
 
1251
 
1252
	mov ebx, [Ypl] ;
1253
	and ebx, 31    ; Y в позиции напротив блока
1254
	cmp ebx, 0     ;
1255
	jne end_stop   ;
1256
	mov eax, [Xpl] ; без макроса этого блока не было он был внутри блока упираний
1257
	and eax, 31    ; X в позиции напротив блока
1258
	cmp eax, 0     ;
1259
	jne end_stop   ;
1260
     mov eax, [v_mov]
1261
1262
 
1263
       je stop_d
1264
       jmp stop_u
1265
1266
 
1267
	mov ebx, [temp5]
1268
	  ;заплатка 2 равно 1 если бетон то это как кирпич, иначе герой проходит сквозь бетон
1269
1270
 
1271
	  jne no_zaplat1
1272
1273
 
1274
1275
 
1276
1277
 
1278
	or eax, ebx
1279
1280
 
1281
	 je end_stop
1282
	  mov ebx, 0
1283
	  mov [v_mov], ebx
1284
1285
 
1286
       cmp  eax, 3
1287
       jne stop_l
1288
1289
 
1290
	and ebx,3
1291
	and eax, ebx
1292
1293
 
1294
    ;    and ebx, 31    ; Y в позиции напротив блока
1295
    ;    cmp ebx, 0     ;
1296
    ;    jne end_stop   ;
1297
1298
 
1299
 
1300
	 je end_stop
1301
	  mov ebx, 0
1302
	  mov [v_mov], ebx
1303
1304
 
1305
       cmp  eax, 1
1306
       jne stop_r
1307
1308
 
1309
	and ebx,3
1310
1311
 
1312
    ;    and eax, 31    ; Y в позиции напротив блока
1313
    ;    cmp eax, 0     ;
1314
    ;    jne end_stop   ;
1315
1316
 
1317
	 je end_stop
1318
	  mov ebx, 0
1319
	  mov [v_mov], ebx
1320
1321
 
1322
       cmp  eax, 4
1323
       jne end_stop
1324
1325
 
1326
	and ebx,3
1327
1328
 
1329
	 je end_stop
1330
	  mov ebx, 0
1331
	  mov [v_mov], ebx
1332
1333
 
1334
     ;ПРЕГРАДЫ
1335
1336
 
1337
 
1338
	mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
1339
	and ebx, 31    ; Y в позиции напротив блока
1340
1341
 
1342
	and eax, 31    ; Y в позиции напротив блока
1343
	or eax,ebx ; Мы четко спозиционированы по Х и У
1344
	cmp eax, 0
1345
	jne end_grav
1346
1347
 
1348
	  cmp ebx, 0	      ; запрет на прыжки вверх
1349
	  jne end_grav	      ;
1350
	    mov ebx, [v_mov]  ;
1351
	    cmp ebx, 3	      ;
1352
	    jne dalee_gra     ;
1353
	       mov ebx, 0     ;
1354
	 mov [v_mov],ebx      ;
1355
	 mov ebx, 0	      ;
1356
	 mov [v_mov2],ebx     ;
1357
1358
 
1359
	add eax, [temp5]       ;
1360
	cmp eax, 0	       ; падение в пустоту
1361
	 jne dalee_g	       ;
1362
	 mov eax, 2	       ;
1363
	 mov [v_mov],eax       ;
1364
	 mov eax, 0	       ;
1365
	 mov [v_mov2],eax      ;
1366
1367
 
1368
	cmp eax, 4	       ;
1369
	 jne dalee_g2	       ; падение в воду
1370
	 mov eax, 2	       ;
1371
	 mov [v_mov],eax       ;
1372
	 mov eax, 0	       ;
1373
	 mov [v_mov2],eax      ;
1374
1375
 
1376
	cmp eax, 12		;
1377
	 jne end_grav	       ; падение на алмаз
1378
	 mov eax, 2	       ;
1379
	 mov [v_mov],eax       ;
1380
	 mov eax, 0	       ;
1381
	 mov [v_mov2],eax      ;
1382
1383
 
1384
     ;end GRAVITACION
1385
1386
 
1387
 
1388
 
1389
 
1390
     mov     eax,0		;
1391
     mov     eax,[v_mov]	;
1392
     cmp     eax, 2		;
1393
     je h_down			;
1394
   jmp proverka2		;
1395
    jmp hiro_mov_end		;
1396
	h_down: 		;
1397
	 mov ebx, [Ypl] 	;
1398
	 add ebx, 2		;                             3
1399
	 mov [Ypl], ebx 	;                           1   4
1400
    jmp hiro_mov_end		;
1401
				;
1402
   proverka2:			;
1403
     cmp     eax, 3   ;         ;
1404
     je h_up			;    PRIROST X Y
1405
   jmp proverka3		;
1406
    jmp hiro_mov_end		;
1407
	h_up:			;
1408
	 mov ebx, [Ypl] 	;
1409
	 sbb ebx, 2		;
1410
	 mov [Ypl], ebx 	;
1411
    jmp hiro_mov_end		;
1412
				;
1413
   proverka3:			;
1414
     cmp     eax, 1   ;         ;
1415
     je h_left			;
1416
   jmp proverka4		;
1417
    jmp hiro_mov_end		;
1418
	h_left: 		;
1419
	 mov ebx, [Xpl] 	;
1420
	 sbb ebx, 2		;
1421
	 mov [Xpl], ebx 	;
1422
    jmp hiro_mov_end		;
1423
				;
1424
   proverka4:			;
1425
     cmp     eax, 4		;
1426
     je h_right 		;
1427
   jmp hiro_mov_end		;
1428
    jmp hiro_mov_end		;
1429
	h_right:		;
1430
	 mov ebx, [Xpl] 	;
1431
	 add ebx, 2		;
1432
	 mov [Xpl], ebx 	;
1433
    jmp hiro_mov_end	       ;прирост
1434
     ; ПРИРОСТ КООРДИНАТ ГЕРОЯ
1435
1436
 
1437
1438
 
1439
    mov eax, 0				  ;
1440
    mov dword eax, [Ypl]			;
1441
    shr eax, 5				  ;
1442
    shl eax, 4				  ;
1443
    mov ebx, 0				  ;
1444
    mov dword ebx, [Xpl]			;
1445
    shr ebx, 5				  ;
1446
    add eax, ebx			  ;
1447
    mov [hiro_lab], eax 		  ;
1448
    ; вычисляем положение героя в лабиринте
1449
ret
1450
;****************
1451
;  end Hiro mov
1452
;****************
1453
1454
 
1455
 
1456
; BULLET
1457
;*******************************************
1458
 bullet_mas:
1459
  mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
1460
 cycle7:
1461
  mov	 word bx, [Lab3]
1462
  mov	 word ax, [Bullet+bx]	 ; берет байт из Enemy + смещение
1463
1464
 
1465
  je go_bullet
1466
1467
 
1468
  go_bullet:
1469
1470
 
1471
  mov	 word ax, [Bullet + bx]
1472
  mov	 word [X_bul], ax
1473
1474
 
1475
  mov	 word ax, [Bullet + bx]
1476
  mov	 word [Y_bul], ax
1477
1478
 
1479
  end_bullet:
1480
1481
 
1482
    mov     word ax, [Lab3]
1483
1484
 
1485
   je	   cycle7_end		      ;   jump to cycle_end:
1486
1487
 
1488
1489
 
1490
1491
 
1492
 ret  ; end BULLET
1493
;-------------------------------------------------------------------------------
1494
1495
 
1496
 
1497
; BULLET MOV
1498
;*******************************************
1499
 bullet_mov:
1500
  mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
1501
1502
 
1503
  mov	 word bx, [Lab3]
1504
  mov	 word ax, [Bullet+bx]	 ; берет байт из Enemy + смещение
1505
1506
 
1507
  je go_bullet_mov
1508
1509
 
1510
  go_bullet_mov:
1511
1512
 
1513
  mov	 word ax, [Bullet + bx]
1514
  mov	 word [X_bul], ax
1515
1516
 
1517
  mov	 word ax, [Bullet + bx]
1518
  mov	 word [Y_bul], ax
1519
1520
 
1521
  mov	 word ax, [Bullet + bx]
1522
  mov	 word [mov_bullet], ax
1523
1524
 
1525
    jne bul_muv_left
1526
      mov word ax, [X_bul]
1527
      sbb ax, 2
1528
      mov word bx, [Lab3]
1529
      add word bx, 2
1530
      mov word [Bullet + bx], ax
1531
1532
 
1533
    bul_muv_left:
1534
      mov word ax, [X_bul]
1535
      add ax, 2
1536
      mov word bx, [Lab3]
1537
      add word bx, 2
1538
      mov word [Bullet + bx], ax
1539
1540
 
1541
1542
 
1543
    mov eax, 0				  ;
1544
    mov eax, [Y_bul]			  ;
1545
    shr eax, 5				  ;
1546
    shl eax, 4				  ;
1547
    mov ebx, 0				  ;
1548
    mov ebx, [X_bul]			  ;
1549
    shr ebx, 5				  ;
1550
    add eax, ebx			  ;
1551
    mov [lab_bullet], ax		   ;
1552
    ; вычисляем положение BULLET в лабиринте
1553
1554
 
1555
		mov    dx, [Dangeon + bx]
1556
		and   edx,3
1557
		 cmp dx, 0
1558
		 je letit_dalee
1559
1560
 
1561
		 je beton
1562
		   mov	  byte [Dangeon + bx], 3    ; РАЗРУШЕНИЕ КИРПИЧЕЙ
1563
		  beton:
1564
		   mov	  bx, [Lab3]
1565
		   mov	  byte [Bullet + ebx], 0    ; берет байт из Enemy + смещение
1566
1567
 
1568
 
1569
 
1570
 
1571
 
1572
    mov     eax, 0
1573
    mov     word ax, [Lab3]
1574
1575
 
1576
   je	   cycle8_end		      ;   jump to cycle_end:
1577
1578
 
1579
1580
 
1581
1582
 
1583
1584
 
1585
 
1586
;-------------------------------------------------------------------------------
1587
1588
 
1589
; TABLO  TABLO TABLO  TABLO TABLO TABLO
1590
;*****************************************
1591
 tablo:
1592
    ; WIWOD CIFR
1593
   ;; mov     eax, 13
1594
   ; mov     ebx, 140*65536 + 18
1595
   ; mov     ecx, 10*65536 + 8
1596
   ; mov     edx, 0x00ffffff
1597
   ; int     0x40
1598
   ; outcount [numer_level],140,10,0x224466,3*65536
1599
1600
 
1601
   ; mov     eax, 13
1602
   ; mov     ebx, 160*65536 + 18
1603
   ; mov     ecx, 10*65536 + 8
1604
   ; mov     edx, 0x00ffffff
1605
   ; int     0x40
1606
   ; outcount [delta_level],160,10,0x224466,3*65536
1607
1608
 
1609
   ; mov     eax, 13
1610
   ; mov     ebx, 180*65536 + 18
1611
   ; mov     ecx, 10*65536 + 8
1612
   ; mov     edx, 0x00ffffff
1613
   ; int     0x40
1614
   ; outcount [delta_level_end],180,10,0x224466,3*65536
1615
1616
 
1617
;-------------------------------------------------------------------------------
1618
fire:
1619
  sbb  ah, 121
1620
  mov  [v_fire], ah
1621
1622
 
1623
  mov  cx, [Bullet + ebx]
1624
  cmp cx, 0
1625
   jne end_fire
1626
       pusha
1627
       mcall 55, eax, , , Music_bah   ; звук выстрела
1628
       popa
1629
1630
 
1631
1632
 
1633
  mov	 ax, [Xpl]
1634
  add	 ax, 8
1635
  mov	 word [Bullet + ebx],ax
1636
1637
 
1638
  mov	 ax, [Ypl]
1639
  add	 ax, 16
1640
  mov	 word [Bullet + ebx],ax
1641
1642
 
1643
  mov  ax,[v_fire]
1644
  mov	 word [Bullet + ebx],ax
1645
1646
 
1647
ret
1648
;-------------------------------------------------------------------------------
1649
1650
 
1651
 
1652
load_level:
1653
    imgtoimg img_level,32,32,canvas
1654
  setimg 6,20,canvas
1655
1656
 
1657
    xor ebx,ebx
1658
    xor edx,edx
1659
    xor ecx,ecx
1660
    mov dword [Bullet], eax
1661
    mov dword [Bullet+2], eax
1662
    mov dword [Bullet+4], eax
1663
    mov dword [Bullet+6], eax
1664
    mov dword [Bullet+8], eax
1665
    mov dword [Bullet+10], eax
1666
    mov byte [Lab], 1
1667
    mov [lab_bullet], eax
1668
    mov [mov_bullet], eax
1669
    mov [X_bul], eax
1670
    mov [Y_bul], eax
1671
    mov [gold], eax
1672
    mov dword [Xpl], 32
1673
    mov dword [Ypl], 448
1674
    mov dword [hiro_lab],0 ; проекция героя в лабиринт
1675
    mov dword [v_mov], 0
1676
    mov dword [v_mov2], 0
1677
    mov dword [v_fire], 0
1678
1679
 
1680
    mov eax, [numer_level]
1681
    shl eax, 8
1682
    mov dword [delta_level], eax
1683
    add eax, 256
1684
    mov dword [delta_level_end], eax
1685
1686
 
1687
1688
 
1689
     mov    ebx, [Lab]
1690
     add ebx, [delta_level]
1691
     mov     ax,[Dangeon2 + ebx]    ; берет байт из дангеон + смещение
1692
1693
 
1694
     mov      [Dangeon + ebx], ax    ; берет байт из дангеон + смещение
1695
     add word [Lab],1
1696
     mov     eax, [Lab]
1697
1698
 
1699
 
1700
   je	   cycleL_end		      ;   jump to cycle_end:
1701
   jmp	   cycleL		     ;
1702
   cycleL_end:
1703
1704
 
1705
   mov	  [Lab],eax
1706
1707
 
1708
1709
 
1710
;-------------------------------------------------------------------------------
1711
1712
 
1713
;GOLD
1714
proverka_gold:
1715
mov eax, [gold]
1716
 cmp ax, 10
1717
  jna net_deneg
1718
   mov eax, [temp2] ; добежать до двери
1719
   cmp ax, 16
1720
    jne net_deneg
1721
       mov ax, [numer_level]  ; увеличение левела
1722
1723
 
1724
       mov [numer_level],  ax
1725
       mov [demon_kolvo], ax   ;
1726
1727
 
1728
     delay 100
1729
1730
 
1731
ret
1732
1733
 
1734
; УТОП
1735
potop:
1736
   mov eax, [temp2] ; добежать до двери
1737
   cmp ax, 4
1738
    jne jiwoy
1739
       mov dword [gold], 0  ; увеличение левела
1740
1741
 
1742
     delay 100
1743
   jiwoy:
1744
ret
1745
1746
 
1747
;положение врагов на новом уровне
1748
enemy_plaz:
1749
  mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
1750
  mov ax, [demon_kolvo]
1751
  mov [demon], ax
1752
1753
 
1754
  mov	 ebx, 0
1755
  mov	 ecx, 0
1756
  mov	 edx, 0
1757
  mov	 esi, 0
1758
1759
 
1760
	  cmp cx, 0
1761
	   je end_demon
1762
	  mov	 word bx, [Lab2]		      ;
1763
	  mov	 word [Enemy + bx], 1		     ;
1764
	  sbb cx, 1
1765
	  mov [demon], cx
1766
	  end_demon:
1767
1768
 
1769
	  add eax, 1
1770
	  shl eax,5
1771
	  mov	 word bx, [Lab2]		      ;
1772
	  add	 word bx, 2 ; X кооридината данного врага
1773
	  mov	 word [Enemy + bx], ax		      ;
1774
						      ;
1775
	  random 12, eax
1776
	  add eax, 1
1777
	  shl eax,5
1778
	  mov	 word bx, [Lab2]		      ;
1779
	  add	 word bx, 4 ; Y кооридината данного врага
1780
	  mov	 word [Enemy + bx], ax		      ;
1781
1782
 
1783
	  add	 word bx, 8 ; направление движения
1784
	  mov	 word [Enemy + bx], 0		     ;
1785
	  add	 word bx, 2 ; жизнь
1786
	  mov	 word [Enemy + bx], 500 	      ;
1787
1788
 
1789
 
1790
    mov     word ax, [Lab2]
1791
1792
 
1793
   je	   cycle55_end		       ;   jump to cycle_end:
1794
1795
 
1796
1797
 
1798
1799
 
1800
1801
 
1802
1803
 
1804
 
1805
1806
 
1807
 
1808
 
1809
  Xpl:	     dd 32  ; координаты героя
1810
  Ypl:	     dd 448
1811
  hiro_lab:  dd 0 ; проекция героя в лабиринт
1812
  numer_level: dd 0
1813
  delta_level: dd 0
1814
  delta_level_end: dd 256
1815
  demon: dd 0
1816
  demon_kolvo: dd 1
1817
1818
 
1819
1820
 
1821
  Y_enemy:    dd 0
1822
1823
 
1824
 
1825
  Y_bul:    dd 0
1826
1827
 
1828
  Y_anime:    dd 0
1829
1830
 
1831
  lab_bullet:	dw 0
1832
  mov_enemy:	dw 0
1833
  lab_enemy:	dw 0
1834
  life_enemy:	 dw 0
1835
1836
 
1837
  anime2 : dd 0 ; переменная для анимации героя и пр
1838
1839
 
1840
  temp2: dd 0
1841
  temp3: dd 0
1842
  temp4: dd 0
1843
  temp5: dd 0
1844
1845
 
1846
 
1847
  v_mov2:     dd 0  ; направления движения персонажа
1848
  v_fire:     dd 0  ; направления движения персонажа
1849
  Lab:	     dd 0
1850
  Lab2:      dw 0
1851
  Lab3:      dw 0
1852
  perem1:    dd 0
1853
  perem2:    dd 0
1854
1855
 
1856
1857
 
1858
;1 обычная стена, 2 непробиваемая, 4 вода, 8 лесница, 12 алмаз, 0 пустота    16 - exit
1859
;-------------------------------------------------------------------------------
1860
Dangeon:
1861
	  db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
1862
	  db  2,1,1,1,1,1,1,0,12,0,0,0,0,0,0,2
1863
	  db  2,0,12,12,0,0,0,8,1,8,1,1,1,0,0,2
1864
	  db  2,8,1,1,1,1,1,8,1,8,0,0,0,0,0,2
1865
	  db  2,8,0,0,0,0,0,8,1,8,2,4,4,2,0,2
1866
	  db  2,8,2,4,4,4,2,8,1,8,2,2,2,2,0,2
1867
	  db  2,0,2,2,2,2,2,8,1,8,0,0,0,0,0,2
1868
	  db  2,0,1,0,0,0,0,8,1,1,1,1,1,1,8,2
1869
	  db  2,0,1,1,8,1,1,1,0,0,0,0,0,0,8,2
1870
	  db  2,12,1,1,8,0,12,0,1,8,1,1,8,1,1,2
1871
	  db  2,0,0,0,8,8,1,8,0,8,0,0,0,0,0,2
1872
	  db  2,12,1,8,1,8,1,1,8,1,1,1,1,1,1,2
1873
	  db  2,0,1,8,12,12,0,0,0,0,0,0,0,0,0,2
1874
	  db  2,0,1,1,1,1,1,8,1,1,1,0,0,0,0,2
1875
	  db  2,0,0,0,12,0,0,8,0,0,0,16,0,12,12,2
1876
	  db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
1877
1878
 
1879
	  db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
1880
	  db  2,1,1,0,1,1,1,0,12,0,0,0,0,0,0,2
1881
	  db  2,0,12,12,0,0,0,8,1,8,1,1,1,0,0,2
1882
	  db  2,8,1,1,1,1,1,8,1,8,0,0,0,0,0,2
1883
	  db  2,8,0,0,0,0,0,8,1,8,2,4,4,2,0,2		      ;0
1884
	  db  2,8,2,4,4,4,2,8,1,8,2,2,2,2,0,2
1885
	  db  2,0,2,2,2,2,2,8,1,8,0,0,0,0,0,2
1886
	  db  2,0,1,0,0,0,0,8,1,1,1,1,1,1,8,2
1887
	  db  2,0,1,1,8,1,1,1,0,0,0,0,0,0,8,2
1888
	  db  2,12,1,1,8,0,12,0,1,8,1,1,8,1,1,2
1889
	  db  2,0,0,0,8,8,1,8,0,8,0,0,0,0,0,2
1890
	  db  2,12,1,8,1,8,1,1,8,1,1,1,1,1,1,2
1891
	  db  2,0,1,8,12,12,0,0,0,0,0,0,0,0,0,2
1892
	  db  2,0,1,1,1,1,1,8,1,1,1,0,0,0,0,2
1893
	  db  2,0,0,0,12,0,0,8,0,0,0,16,0,12,12,2
1894
	  db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
1895
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1896
	  db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
1897
	  db  2,0,0,0,0,0,0,0,0,0,0,16,0,0,0,2
1898
	  db  2,12,1,8,1,0,0,0,0,0,0,1,8,0,0,2
1899
	  db  2,0,1,8,1,0,0,0,0,0,0,1,0,8,0,2		      ;1
1900
	  db  2,12,1,8,1,1,0,0,0,0,1,1,0,8,0,2
1901
	  db  2,0,1,8,1,0,12,12,12,12,0,1,8,8,0,2
1902
	  db  2,12,1,8,1,0,1,1,1,1,0,1,8,0,0,2
1903
	  db  2,0,1,8,0,0,0,0,0,0,0,0,8,0,0,2
1904
	  db  2,0,1,1,1,1,8,1,8,1,1,1,1,1,8,2
1905
	  db  2,0,0,0,12,0,8,0,8,0,0,0,12,0,8,2
1906
	  db  2,0,1,1,1,1,1,0,1,8,1,1,8,1,1,2
1907
	  db  2,0,0,0,0,0,0,0,0,8,1,0,8,0,0,2
1908
	  db  2,0,1,1,1,1,1,8,1,1,1,1,1,1,8,2
1909
	  db  2,0,0,12,0,0,0,8,0,0,12,0,0,0,8,2
1910
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1911
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1912
	  db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
1913
	  db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
1914
	  db  2,0,0,0,0,0,0,0,0,12,0,12,0,0,0,2
1915
	  db  2,0,0,0,0,0,0,8,1,1,1,1,1,1,0,2		     ;2
1916
	  db  2,0,8,0,12,12,0,8,0,0,0,0,0,2,4,2
1917
	  db  2,0,8,1,1,1,1,0,0,0,0,0,0,2,2,2
1918
	  db  2,0,8,0,0,0,0,12,1,1,1,1,0,0,0,2
1919
	  db  2,0,8,1,0,1,0,12,0,0,0,0,0,0,0,2
1920
	  db  2,0,8,0,1,1,12,12,0,0,0,8,1,1,1,2
1921
	  db  2,0,8,0,12,0,0,12,0,0,0,8,0,12,0,2
1922
	  db  2,0,8,0,0,0,8,1,8,0,0,1,8,1,8,2
1923
	  db  2,0,8,0,0,8,1,1,1,8,0,0,8,0,8,2
1924
	  db  2,0,1,1,1,1,1,1,1,1,1,1,1,1,8,2
1925
	  db  2,0,0,0,0,0,0,0,16,0,0,0,0,0,8,2
1926
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1927
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1928
	  db  2,0,0,0,0,12,0,0,0,0,0,0,16,0,0,2
1929
	  db  2,0,8,1,1,1,1,1,1,1,1,1,1,1,0,2
1930
	  db  2,0,8,0,0,0,0,0,12,0,0,0,0,0,0,2
1931
	  db  2,0,8,0,0,0,0,1,8,1,0,0,0,0,0,2
1932
	  db  2,0,8,0,0,0,1,1,8,1,1,0,0,0,0,2
1933
	  db  2,0,8,0,12,1,1,1,8,1,1,1,12,0,0,2
1934
	  db  2,0,8,0,1,1,12,1,8,1,12,1,1,0,0,2
1935
	  db  2,0,0,1,1,1,1,1,8,1,1,1,1,0,0,2		       ;3
1936
	  db  2,0,1,0,0,0,0,0,8,1,0,0,0,1,0,2
1937
	  db  2,0,1,0,1,1,1,1,8,1,1,1,0,1,0,2
1938
	  db  2,0,1,1,12,1,12,1,8,1,1,1,0,1,0,2
1939
	  db  2,0,1,1,1,1,1,1,8,1,1,1,0,1,0,2
1940
	  db  2,0,1,1,12,1,12,1,8,1,1,1,12,1,0,2
1941
	  db  2,0,0,0,0,0,0,0,8,0,0,0,0,0,0,2
1942
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1943
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1944
	  db  2,0,12,0,0,0,0,0,0,0,0,0,16,0,0,2
1945
	  db  2,0,1,8,1,1,1,1,1,1,8,1,1,1,8,2
1946
	  db  2,0,0,8,0,0,0,0,0,0,8,0,0,0,8,2
1947
	  db  2,0,1,1,1,1,1,8,1,1,1,1,1,1,0,2
1948
	  db  2,0,0,12,0,0,12,8,0,0,12,0,0,0,0,2
1949
	  db  2,12,1,1,1,8,1,1,1,1,8,1,1,1,8,2
1950
	  db  2,0,0,0,0,8,0,0,0,0,8,0,0,0,8,2
1951
	  db  2,8,1,1,1,1,1,1,8,1,1,1,1,1,0,2			 ;4
1952
	  db  2,8,0,0,0,12,0,0,8,0,0,12,0,0,0,2
1953
	  db  2,0,1,8,1,1,1,1,1,1,1,1,8,1,0,2
1954
	  db  2,0,0,8,12,0,0,0,0,12,0,0,8,0,0,2
1955
	  db  2,8,1,1,1,1,1,1,8,1,1,1,1,1,8,2
1956
	  db  2,8,12,0,0,0,0,0,0,0,0,0,0,12,8,2
1957
	  db  2,8,2,4,4,4,4,4,4,4,4,4,4,2,8,2
1958
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1959
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1960
	  db  2,8,1,8,12,8,1,8,1,8,1,8,1,8,1,2
1961
	  db  2,8,2,8,1,8,1,8,1,8,1,8,12,8,12,2
1962
	  db  2,8,1,8,1,8,2,8,12,8,1,8,1,8,1,2
1963
	  db  2,8,12,8,0,8,0,8,0,8,0,8,0,8,0,2
1964
	  db  2,1,8,1,1,1,1,1,8,1,1,1,1,1,8,2
1965
	  db  2,0,8,0,0,0,0,0,8,0,0,12,0,0,8,2
1966
	  db  2,0,8,12,0,2,12,0,8,1,1,1,1,1,8,2
1967
	  db  2,0,1,1,8,1,1,1,8,0,0,0,0,0,8,2			;5
1968
	  db  2,0,1,0,8,0,0,0,8,0,0,12,0,0,8,2
1969
	  db  2,0,1,0,8,0,0,0,8,1,1,1,1,1,8,2
1970
	  db  2,0,1,12,8,0,0,2,8,0,0,0,0,0,8,2
1971
	  db  2,8,1,1,1,1,8,1,1,1,1,8,1,1,1,2
1972
	  db  2,8,0,0,0,0,8,2,0,0,2,8,0,0,0,2
1973
	  db  2,0,8,0,12,8,8,2,4,4,2,8,0,0,16,2
1974
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1975
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1976
	  db  2,0,8,0,8,0,8,0,8,0,0,8,0,8,16,2
1977
	  db  2,1,8,1,8,1,8,1,8,1,1,8,1,8,1,2
1978
	  db  2,0,8,0,8,0,8,0,8,8,0,8,0,8,0,2
1979
	  db  2,1,1,8,1,1,1,1,1,8,1,1,8,1,1,2
1980
	  db  2,0,0,8,8,0,12,8,0,8,8,12,8,8,0,2
1981
	  db  2,1,1,1,8,1,1,8,1,1,8,1,1,8,1,2
1982
	  db  2,0,8,0,8,0,12,8,0,0,8,0,12,8,0,2 		 ;6
1983
	  db  2,1,8,1,1,1,1,1,8,1,1,1,1,1,1,2
1984
	  db  2,0,8,0,12,8,0,0,8,12,0,8,0,0,0,2
1985
	  db  2,1,8,1,1,8,1,1,8,1,1,8,1,1,1,2
1986
	  db  2,0,0,8,0,8,8,0,8,8,0,8,8,0,0,2
1987
	  db  2,1,1,8,1,1,8,1,1,8,1,1,8,1,1,2
1988
	  db  2,0,0,8,12,0,8,0,12,8,0,12,8,12,12,2
1989
	  db  2,8,8,1,1,1,1,1,1,1,1,1,1,1,1,2
1990
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
1991
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
1992
	  db  2,0,12,0,12,0,12,12,0,12,0,12,0,0,0,2
1993
	  db  2,1,1,1,8,1,1,1,1,1,1,8,1,1,1,2
1994
	  db  2,0,0,0,8,0,0,12,0,0,0,8,0,0,0,2
1995
	  db  2,1,1,1,1,1,1,1,8,1,1,1,1,1,1,2
1996
	  db  2,0,0,0,12,0,0,0,8,12,0,0,0,0,0,2
1997
	  db  2,1,1,1,8,1,1,1,1,1,1,8,1,1,1,2
1998
	  db  2,0,0,0,8,0,0,0,0,0,0,8,0,0,0,2			 ; 7
1999
	  db  2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,2
2000
	  db  2,0,0,0,0,0,0,0,0,0,0,0,0,8,0,2
2001
	  db  2,1,1,1,1,1,1,8,1,1,1,1,1,8,1,2
2002
	  db  2,0,0,0,0,0,0,8,0,0,0,0,0,8,0,2
2003
	  db  2,1,1,8,1,8,1,1,8,1,8,1,1,1,1,2
2004
	  db  2,0,0,8,0,8,12,0,8,0,8,12,0,0,16,2
2005
	  db  2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,2
2006
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
2007
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2008
	  db  2,0,0,12,0,0,0,0,0,0,0,0,0,16,0,2
2009
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2010
	  db  2,0,8,0,8,0,12,0,0,8,0,8,0,0,0,2
2011
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2012
	  db  2,0,0,8,12,0,0,8,0,0,8,0,0,0,0,2
2013
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2014
	  db  2,0,0,0,0,0,0,0,0,8,0,0,0,12,0,2
2015
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2016
	  db  2,0,8,0,0,0,8,12,0,0,8,0,8,12,0,2
2017
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2018
	  db  2,0,0,8,0,0,0,0,12,8,0,12,8,0,0,2
2019
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2020
	  db  2,0,0,8,0,8,12,0,0,8,12,0,8,12,0,2
2021
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2022
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
2023
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2024
	  db  2,0,0,16,0,0,0,0,0,16,0,0,0,16,0,2
2025
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2026
	  db  2,8,8,8,8,8,12,8,8,8,8,8,8,8,8,2
2027
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2028
	  db  2,8,8,8,12,8,8,8,8,8,8,8,8,0,0,2
2029
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2030
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,12,0,2
2031
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2032
	  db  2,0,8,8,8,8,8,12,8,8,8,8,8,12,0,2
2033
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2034
	  db  2,8,0,8,8,8,8,8,12,8,0,12,8,8,0,2
2035
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2036
	  db  2,0,8,8,8,8,12,0,0,8,12,0,8,12,0,2
2037
	  db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
2038
	  db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
2039
2040
 
2041
 
2042
Bullet: dw 0,0,0,0,0,0
2043
	dw 0,0,0,0,0,0
2044
	dw 0,0,0,0,0,0
2045
	dw 0,0,0,0,0,0
2046
;-------------------------------------------------------------------------------
2047
2048
 
2049
 
2050
	dw  0,32,32,0,0,0
2051
	dw  0,64,32,0,0,0
2052
	dw  0,416,32,0,0,0
2053
	dw  0,256,256,0,0,0
2054
	dw  0,256,224,0,0,0
2055
	dw  0,320,192,0,0,0
2056
	dw  0,32,256,0,0,0
2057
	dw  0,448,448,0,0,0
2058
2059
 
2060
2061
 
2062
file 'bullet.bmp'
2063
rb 1
2064
2065
 
2066
file 'level2.bmp'
2067
rb 1
2068
2069
 
2070
file 'kirpich.bmp'
2071
rb 1
2072
2073
 
2074
file 'kirpich2.bmp'
2075
rb 1
2076
2077
 
2078
file 'oldkirpich.bmp'
2079
rb 1
2080
2081
 
2082
file 'lestnica.bmp'
2083
rb 1
2084
2085
 
2086
file 'water1.bmp'
2087
rb 1
2088
2089
 
2090
file 'water2.bmp'
2091
rb 1
2092
2093
 
2094
file 'door1.bmp'
2095
rb 1
2096
2097
 
2098
file 'door2.bmp'
2099
rb 1
2100
2101
 
2102
2103
 
2104
rb 448*448*3+8
2105
2106
 
2107
;rb 448*448*3+8
2108
2109
 
2110
rb 32*32*3+8
2111
2112
 
2113
rb 32*32*3+8
2114
2115
 
2116
rb 32*32*3+8
2117
2118
 
2119
rb 4*8*3+8
2120
2121
 
2122
rb 32*32*3+8
2123
2124
 
2125
rb 32*32*3+8
2126
2127
 
2128
rb 32*32*3+8
2129
2130
 
2131
rb 32*32*3+8
2132
2133
 
2134
rb 32*32*3+8
2135
2136
 
2137
rb 32*32*3+8
2138
2139
 
2140
rb 32*32*3+8
2141
2142
 
2143
 
2144
  db  0x0f, 0x09, 0
2145
2146
 
2147
  db  0x00, 0x00, 0
2148
2149
 
2150
  db  0x09, 0x03, 0
2151
2152
 
2153
2154
 
2155
img_index  rd 1      ; номер текущего кадра
2156
2157
 
2158
workarea:
2159
file 'aniall.gif'
2160
2161
 
2162
 
2163
rb 10
2164
2165
 
2166
xs dd 512
2167
ys dd 512
2168
   rb 512*512*3
2169
2170
 
2171
rd 4096+1
2172
2173
 
2174
rd 2
2175
2176
 
2177