Subversion Repositories Kolibri OS

Rev

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

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