Subversion Repositories Kolibri OS

Rev

Rev 8485 | Details | Compare with Previous | Last modification | View Log | RSS feed

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