Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8487 → Rev 8488

/programs/games/almaz/ALMAZ.ASM
1,5 → 1,5
 
WND_COLOR equ 0x54000000
; Author: RU095@YANDEX.RU
 
use32
org 0x0
13,21 → 13,21
dd 0x0
 
include 'lang.inc'
include '..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков!
include '..\..\macros.inc' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§­ì  áᥬ¡«¥à騪®¢!
 
include 'ASCL.INC'
include 'ASCGL.INC'
 
WND_COLOR equ 0x74000000
 
 
gif_hash_offset = gif_hash_area
COLOR_ORDER equ MENUETOS
 
DELAY equ 2 ; Задержка перед переходом к следующему кадру в мсек
DELAY equ 2 ; ‡ ¤¥à¦ª  ¯¥à¥¤ ¯¥à¥å®¤®¬ ª á«¥¤ãî饬㠪 ¤àã ¢ ¬á¥ª
 
START:
;****************
; Открываем фаил
; Žâªà뢠¥¬ ä ¨«
;****************
openfile:
; and [entered],0
63,24 → 63,24
jmp still
 
key:
; блока движения персонажа
; ¡«®ª  ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
mov eax,2
int 0x40
cmp ah, 179 ; право 4
cmp ah, 179 ; ¯à ¢® 4
je go_mov
cmp ah, 176 ; лево 1
cmp ah, 176 ; «¥¢® 1
je go_mov
cmp ah, 178 ; верх 3
cmp ah, 178 ; ¢¥àå 3
je go_mov
cmp ah, 177 ; низ 2
cmp ah, 177 ; ­¨§ 2
je go_mov
cmp ah, 120 ; низ 2
cmp ah, 120 ; ­¨§ 2
je go_fire
cmp ah, 122 ; низ 2
cmp ah, 122 ; ­¨§ 2
je go_fire
cmp ah, 239 ; низ 2
cmp ah, 239 ; ­¨§ 2
je go_fire_left
cmp ah, 231 ; низ 2
cmp ah, 231 ; ­¨§ 2
je go_fire
 
 
89,7 → 89,7
go_mov:
;mov ebx, [v_mov2]
mov [v_mov2], ah
sub word [v_mov2], 175 ; отнимаем от кода клавиши 175 и остается 1,2,3 или 4 соответственно направления движения персонажа
sub word [v_mov2], 175 ; ®â­¨¬ ¥¬ ®â ª®¤  ª« ¢¨è¨ 175 ¨ ®áâ ¥âáï 1,2,3 ¨«¨ 4 ᮮ⢥âá⢥­­® ­ ¯à ¢«¥­¨ï ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
jmp no_mov ; if not left, right, up, down, then go NO MOV
 
go_fire_left:
100,7 → 100,7
go_fire:
call fire
no_mov:
; конец блока движения персонажа
; ª®­¥æ ¡«®ª  ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
jmp still
 
button:
108,21 → 108,27
int 0x40
 
cmp ah, 1
jne still
mcall -1
jne noclose
_close:
or eax,-1
int 0x40
noclose:
jmp still
 
; *********************************************
; ******* ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА *******
; ******* Ž…„…‹…ˆ… ˆ Ž’ˆ‘Ž‚Š€ ŽŠ€ *******
; *********************************************
 
draw_window:
startwd
 
xor eax, eax ; more optimized "mov eax, 0"
mov ebx, 50*65536+522
mov ecx, 50*65536+536
mcall 48, 4
mov ecx, 50*65536+516
add ecx, eax
mov ebx, 50*65536+521
mov edx, WND_COLOR
mov edi, title
xor eax, eax
int 0x40
 
xor ecx,ecx
147,22 → 153,22
 
labirint:
 
; вывод блоков лабиринта
; ¢ë¢®¤ ¡«®ª®¢ « ¡¨à¨­â 
cycle:
 
mov eax, [Lab]
shl eax, 5 ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
shl eax, 5 ; ᤢ¨£ ॣ¨áâà  ¢ ¯à ¢® ­  5 ¯®§¨æ¨¨ ¢á¥ à ¢­® ç⮠㬭®¦¨«¨ ­  32
mov [perem1], eax
mov eax, [Lab]
shr eax, 4 ; сдвиг регистра в лево
shl eax, 5 ; сдвиг обратно (все равно что целочисленное делениена 256)
shr eax, 4 ; ᤢ¨£ ॣ¨áâà  ¢ «¥¢®
shl eax, 5 ; ᤢ¨£ ®¡à â­® (¢á¥ à ¢­® ç⮠楫®ç¨á«¥­­®¥ ¤¥«¥­¨¥­  256)
mov [perem2], eax
shl eax, 4 ; все равно что отнимаем от координат ненужный прирост -> У-256*X
shl eax, 4 ; ¢á¥ à ¢­® çâ® ®â­¨¬ ¥¬ ®â ª®®à¤¨­ â ­¥­ã¦­ë© ¯à¨à®áâ -> “-256*X
sbb dword [perem1], eax;
 
mov ebx, [Lab]
sbb ebx, 1
mov eax,[Dangeon + ebx] ; берет байт из дангеон + смещение
mov eax,[Dangeon + ebx] ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
 
cmp ah, 1 ;
je go_block
170,7 → 176,7
cmp ah, 0 ;
je back_block
 
cmp ah, 12 ; закраска фона за алмазом
cmp ah, 12 ; § ªà áª  ä®­  §   «¬ §®¬
je back_block
 
cmp ah, 3 ;
179,7 → 185,7
cmp ah, 16 ;
je door_block
 
cmp ah, 2 ; закраска фона за алмазом
cmp ah, 2 ; § ªà áª  ä®­  §   «¬ §®¬
je cool_block
 
jmp end_block
200,7 → 206,7
imgtoimg img_door1,dword [perem1],dword [perem2],canvas
 
mov eax, [gold]
cmp ax, 10 ; если собрано более 10 алмазов дверь открыта
cmp ax, 10 ; ¥á«¨ ᮡ࠭® ¡®«¥¥ 10  «¬ §®¢ ¤¢¥àì ®âªàëâ 
jna end_block
imgtoimg img_door2,dword [perem1],dword [perem2],canvas
jmp end_block
208,7 → 214,7
 
boom_block:
imgtoimg img_area,dword [perem1],dword [perem2],canvas
mov ebp,18 ; кадр
mov ebp,18 ; ª ¤à
mov eax, dword [perem1]
mov dword [X_anime], eax
mov eax, dword [perem2]
221,7 → 227,7
jne end_block
 
mov ebx, [Lab]
mov byte [Dangeon + ebx], 0 ; берет байт из дангеон + смещение
mov byte [Dangeon + ebx], 0 ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
 
 
end_block:
242,26 → 248,26
 
 
;*******************************************
; ЛЕСТНИЦА
; ‹…‘’ˆ–€
;*******************************************
lestniza:
; вывод блоков лабиринта
; ¢ë¢®¤ ¡«®ª®¢ « ¡¨à¨­â 
cycle2:
 
mov eax, [Lab]
shl eax, 5 ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
shl eax, 5 ; ᤢ¨£ ॣ¨áâà  ¢ ¯à ¢® ­  5 ¯®§¨æ¨¨ ¢á¥ à ¢­® ç⮠㬭®¦¨«¨ ­  32
mov [perem1], eax
mov eax, [Lab]
shr eax, 4 ; сдвиг регистра в лево
shl eax, 5 ; сдвиг обратно (все равно что целочисленное делениена 256)
shr eax, 4 ; ᤢ¨£ ॣ¨áâà  ¢ «¥¢®
shl eax, 5 ; ᤢ¨£ ®¡à â­® (¢á¥ à ¢­® ç⮠楫®ç¨á«¥­­®¥ ¤¥«¥­¨¥­  256)
mov [perem2], eax
shl eax, 4 ; все равно что отнимаем от координат ненужный прирост -> У-256*X
shl eax, 4 ; ¢á¥ à ¢­® çâ® ®â­¨¬ ¥¬ ®â ª®®à¤¨­ â ­¥­ã¦­ë© ¯à¨à®áâ -> “-256*X
sbb dword [perem1], eax;
 
 
mov ebx, [Lab]
sbb ebx, 1
mov eax,[Dangeon + ebx] ; берет байт из дангеон + смещение
mov eax,[Dangeon + ebx] ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
 
cmp ah, 8 ;
je go_lestniza
290,32 → 296,32
 
 
;*******************************************
; ВОДА и АЛМАЗЫ
; ‚Ž„€ ¨ €‹Œ€‡›
;*******************************************
water:
 
; вывод воды лабиринта
; ¢ë¢®¤ ¢®¤ë « ¡¨à¨­â 
cycle3:
 
mov eax, [Lab]
shl eax, 5 ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
shl eax, 5 ; ᤢ¨£ ॣ¨áâà  ¢ ¯à ¢® ­  5 ¯®§¨æ¨¨ ¢á¥ à ¢­® ç⮠㬭®¦¨«¨ ­  32
mov [perem1], eax
mov eax, [Lab]
shr eax, 4 ; сдвиг регистра в лево
shl eax, 5 ; сдвиг обратно (все равно что целочисленное делениена 256)
shr eax, 4 ; ᤢ¨£ ॣ¨áâà  ¢ «¥¢®
shl eax, 5 ; ᤢ¨£ ®¡à â­® (¢á¥ à ¢­® ç⮠楫®ç¨á«¥­­®¥ ¤¥«¥­¨¥­  256)
mov [perem2], eax
shl eax, 4 ; все равно что отнимаем от координат ненужный прирост -> У-256*X
shl eax, 4 ; ¢á¥ à ¢­® çâ® ®â­¨¬ ¥¬ ®â ª®®à¤¨­ â ­¥­ã¦­ë© ¯à¨à®áâ -> “-256*X
sbb dword [perem1], eax;
 
 
mov ebx, [Lab]
sbb ebx, 1
mov eax,[Dangeon + ebx] ; берет байт из дангеон + смещение
mov eax,[Dangeon + ebx] ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
 
cmp ah, 4 ;
je go_water
 
cmp ah, 12 ; рисование алмазов
cmp ah, 12 ; à¨á®¢ ­¨¥  «¬ §®¢
je go_almaz
 
jmp end_water
342,7 → 348,7
cmp eax, 10
ja almaz2
 
mov ebp,14 ; кадр
mov ebp,14 ; ª ¤à
mov eax, dword [perem1]
mov dword [X_anime], eax
mov eax, dword [perem2]
354,7 → 360,7
cmp eax, 20
ja almaz3
 
mov ebp,15 ; кадр
mov ebp,15 ; ª ¤à
mov eax, dword [perem1]
mov dword [X_anime], eax
mov eax, dword [perem2]
363,7 → 369,7
jmp end_water
 
almaz3:
mov ebp,16 ; кадр
mov ebp,16 ; ª ¤à
mov eax, dword [perem1]
mov dword [X_anime], eax
mov eax, dword [perem2]
390,10 → 396,10
 
 
;*******************************************
; Выводим следующий кадр из списка картинок
; ‚뢮¤¨¬ á«¥¤ãî騩 ª ¤à ¨§ ᯨ᪠ ª à⨭®ª
;*******************************************
draw_subimage:
;aframetoimg Image,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
;aframetoimg Image,32, 32,canvas,0x00ffffff ; …‚ˆ„ˆŒ›‰, ¯à®§à ç­ë© –‚…’ ˆ‹ˆ … ˆ‘“…Œ›‰
 
call labirint
call lestniza
401,7 → 407,7
call enemy_mov
;-------------------------------------------------------------------------------
mov ebx, [gold]
cmp bx, 5 ;увеличение скорости врагов если украл более 9
cmp bx, 5 ;㢥«¨ç¥­¨¥ ᪮à®á⨠¢à £®¢ ¥á«¨ ãªà « ¡®«¥¥ 9
jna lov_velo
call enemy_mas
call enemy_mov
409,7 → 415,7
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
mov ebx, [gold]
cmp bx, 9 ;увеличение скорости врагов если украл более 9
cmp bx, 9 ;㢥«¨ç¥­¨¥ ᪮à®á⨠¢à £®¢ ¥á«¨ ãªà « ¡®«¥¥ 9
jna lov_velo2
call enemy_mas
call enemy_mov
432,7 → 438,7
call proverka_gold
call potop
 
setimg 6,20,canvas
setimg 0,0,canvas
 
call timer
call tablo
440,26 → 446,26
 
;@@@@@@@@@@@@@@@@@@
animashka:
;!!!ВАЖНО перед вызовом процедуры должен быть установлен ebx[номер кадра] и x,y
;!!!‚€†Ž ¯¥à¥¤ ¢ë§®¢®¬ ¯à®æ¥¤ãàë ¤®«¦¥­ ¡ëâì ãáâ ­®¢«¥­ ebx[­®¬¥à ª ¤à ] ¨ x,y
 
mov edi,coords
mov esi, Image ; гиф анимашка в памяти
mov esi, Image ; £¨ä  ­¨¬ èª  ¢ ¯ ¬ïâ¨
;
; mov ebp, dword [edi+8] ;ecx здесь конкретный номер выводимого кадра
; inc ebp ; увеличение кадра
; cmp ebp,3 ; максимальное количество кадров !!!!!!!
; jna ok_fr ; если выводимы кадр меньше максимального количества кадров
;!!!!!!!!! mov ebp,2 ;обнуление кадра
; mov ebp, dword [edi+8] ;ecx §¤¥áì ª®­ªà¥â­ë© ­®¬¥à ¢ë¢®¤¨¬®£® ª ¤à 
; inc ebp ; 㢥«¨ç¥­¨¥ ª ¤à 
; cmp ebp,3 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ ª ¤à®¢ !!!!!!!
; jna ok_fr ; ¥á«¨ ¢ë¢®¤¨¬ë ª ¤à ¬¥­ìè¥ ¬ ªá¨¬ «ì­®£® ª®«¨ç¥á⢠ ª ¤à®¢
;!!!!!!!!! mov ebp,2 ;®¡­ã«¥­¨¥ ª ¤à 
 
ok_fr:
mov dword [edi+8], ebp ;номер выводимого кадра
mov dword [edi+8], ebp ;­®¬¥à ¢ë¢®¤¨¬®£® ª ¤à 
loo:
cmp ebp,0 ; если кадр нулевой то сразу на вывод ?
cmp ebp,0 ; ¥á«¨ ª ¤à ­ã«¥¢®© â® áࠧ㠭  ¢ë¢®¤ ?
je setpic
movzx eax,word [esi+4] ; если нет то увеличиваем х у ?
movzx eax,word [esi+4] ; ¥á«¨ ­¥â ⮠㢥«¨ç¨¢ ¥¬ å ã ?
movzx ebx,word [esi+6]
mul ebx ;dword [esi+4] умножает ebx на eax и результат в eax edx
mov ebx,3 ; количество кадров ???
mul ebx ;dword [esi+4] 㬭®¦ ¥â ebx ­  eax ¨ १ã«ìâ â ¢ eax edx
mov ebx,3 ; ª®«¨ç¥á⢮ ª ¤à®¢ ???
mul ebx
add eax,8
add esi,eax
468,9 → 474,9
setpic:
 
pushad
; aframetoimg esi,dword [edi], dword [edi+4],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
; aframetoimg esi,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
aframetoimg esi,dword [X_anime],dword [Y_anime],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
; aframetoimg esi,dword [edi], dword [edi+4],canvas,0x00ffffff ; …‚ˆ„ˆŒ›‰, ¯à®§à ç­ë© –‚…’ ˆ‹ˆ … ˆ‘“…Œ›‰
; aframetoimg esi,32, 32,canvas,0x00ffffff ; …‚ˆ„ˆŒ›‰, ¯à®§à ç­ë© –‚…’ ˆ‹ˆ … ˆ‘“…Œ›‰
aframetoimg esi,dword [X_anime],dword [Y_anime],canvas,0x00ffffff ; …‚ˆ„ˆŒ›‰, ¯à®§à ç­ë© –‚…’ ˆ‹ˆ … ˆ‘“…Œ›‰
;call enemy_mas
popad
ret
484,7 → 490,7
add eax, 1;
mov [timer1], eax
 
cmp eax, 64 ; таймер от 0 до 64
cmp eax, 64 ; â ©¬¥à ®â 0 ¤® 64
je nul_timer
jmp timer_dalee
nul_timer :
501,9 → 507,9
; ENEMY
;*******************************************
 
enemy_mas: ; вывод ENEmy ENEMYYYYYYYYYYYYYYY ENEMYYYYYYYYYYYYYY !!!
enemy_mas: ; ¢ë¢®¤ ENEmy ENEMYYYYYYYYYYYYYYY ENEMYYYYYYYYYYYYYY !!!
 
mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
mov word [Lab2], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨­ í«¥¬¥­â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥­­® 6*2= + 12
 
cycle4:
 
513,27 → 519,27
mov esi, 0
 
mov word bx, [Lab2]
mov word ax,[Enemy+bx] ; берет байт из Enemy + смещение
mov word ax,[Enemy+bx] ; ¡¥à¥â ¡ ©â ¨§ Enemy + ᬥ饭¨¥
 
cmp ax, 1 ; обычный враг номер 1
cmp ax, 1 ; ®¡ëç­ë© ¢à £ ­®¬¥à 1
je go_enemy
 
jmp end_enemy
go_enemy:
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + bx]
mov word [X_enemy], ax
 
add word bx, 2 ; Y кооридината данного врага
add word bx, 2 ; Y ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [Y_enemy], ax
 
add word bx, 2 ; положение в массиве данного врага
add word bx, 2 ; ¯®«®¦¥­¨¥ ¢ ¬ áᨢ¥ ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [lab_enemy], ax
 
add word bx, 2 ; направление движения данного врага
add word bx, 2 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [mov_enemy], ax
 
541,9 → 547,9
mov word ax, [Enemy + ebx]
mov word [life_enemy], ax
 
cmp ax, 499; ; замороженные враги
cmp ax, 499; ; § ¬®à®¦¥­­ë¥ ¢à £¨
ja enemy_dalee
mov ebp,2 ; кадр
mov ebp,2 ; ª ¤à
mov eax, dword [X_enemy]
mov dword [X_anime], eax
mov eax, dword [Y_enemy]
564,7 → 570,7
 
enemy_1:
 
mov ebp,0 ; кадр
mov ebp,0 ; ª ¤à
mov eax, dword [X_enemy]
mov dword [X_anime], eax
mov eax, dword [Y_enemy]
574,7 → 580,7
jmp enemy_bmp_end
 
enemy_2:
mov ebp,1 ; кадр
mov ebp,1 ; ª ¤à
mov eax, dword [X_enemy]
mov dword [X_anime], eax
mov eax, dword [Y_enemy]
602,7 → 608,7
; ENEMY MOV
;$$$$$$$$$$$$$$$$$$$$$$$$$$
enemy_mov:
mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
mov word [Lab2], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨­ í«¥¬¥­â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥­­® 6*2= + 12
 
cycle5:
 
612,27 → 618,27
mov esi, 0
 
mov word bx, [Lab2]
mov word ax,[Enemy+bx] ; берет байт из Enemy + смещение
mov word ax,[Enemy+bx] ; ¡¥à¥â ¡ ©â ¨§ Enemy + ᬥ饭¨¥
 
cmp ax, 1 ; обычный враг номер 1
cmp ax, 1 ; ®¡ëç­ë© ¢à £ ­®¬¥à 1
je go_mov_enemy
 
jmp end_mov_enemy
go_mov_enemy:
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + bx]
mov word [X_enemy], ax
 
add word bx, 2 ; Y кооридината данного врага
add word bx, 2 ; Y ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [Y_enemy], ax
 
add word bx, 2 ; положение в массиве данного врага
add word bx, 2 ; ¯®«®¦¥­¨¥ ¢ ¬ áᨢ¥ ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [lab_enemy], ax
 
add word bx, 2 ; направление движения данного врага
add word bx, 2 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word ax, [Enemy + ebx]
mov word [mov_enemy], ax
 
640,7 → 646,7
mov word ax, [Enemy + ebx]
mov word [life_enemy], ax
 
cmp ax, 499; ; замороженные враги
cmp ax, 499; ; § ¬®à®¦¥­­ë¥ ¢à £¨
ja dalee_enemy_mov
add ax, 1
 
649,7 → 655,7
jmp end_mov_enemy
 
dalee_enemy_mov:
; блок поедания героя
; ¡«®ª ¯®¥¤ ­¨ï £¥à®ï
mov ax, [Xpl]
add ax, 23
cmp ax, [X_enemy]
668,7 → 674,7
delay 150
 
ne_em:
;Блок попадания 1 пули
;«®ª ¯®¯ ¤ ­¨ï 1 ¯ã«¨
 
mov word bx, 0
mov word ax,[Bullet + ebx]
700,7 → 706,7
no_bullet:
 
 
;БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГОВ
;‹ŽŠ ˆŽ‘’€ „‚ˆ†…ˆŸ ‚€ƒŽ‚
mov word ax, [mov_enemy] ;
cmp ax, 1 ; left ;
jne next_2 ;
707,7 → 713,7
sbb word [X_enemy], 1 ;
mov word ax, [X_enemy] ;
mov word bx, [Lab2] ;
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;
next_2: ;
716,7 → 722,7
add word [Y_enemy], 1 ;
mov word ax, [Y_enemy] ;
mov word bx, [Lab2] ;
add word bx, 4 ; Y кооридината данного врага
add word bx, 4 ; Y ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;
next_3: ;
725,7 → 731,7
sbb word [Y_enemy], 1 ;
mov word ax, [Y_enemy] ;
mov word bx, [Lab2] ;
add word bx, 4 ; Y кооридината данного врага
add word bx, 4 ; Y ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;
next_4: ;
732,9 → 738,9
cmp ax, 4 ; right ;
jne next_end
 
;Гравитационная заплатка лечит трабл - когда враг двигается слева на право то пролетает один пустой блок
mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; X в позиции напротив блока
;ƒà ¢¨â æ¨®­­ ï § ¯« âª  «¥ç¨â âà ¡« - ª®£¤  ¢à £ ¤¢¨£ ¥âáï á«¥¢  ­  ¯à ¢® â® ¯à®«¥â ¥â ®¤¨­ ¯ãá⮩ ¡«®ª
mov word bx, [X_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp bx, 0 ;
jne n4_dalee ;
mov bx,[lab_enemy]
745,7 → 751,7
je next_end
cmp word ax, 4
je next_end
;конец заплатки
;ª®­¥æ § ¯« âª¨
 
n4_dalee:
;
752,21 → 758,21
add word [X_enemy], 1 ;
mov word ax, [X_enemy] ;
mov word bx, [Lab2] ;
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;
next_end:
;END БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГ
;END ‹ŽŠ ˆŽ‘’€ „‚ˆ†…ˆŸ ‚€ƒ
 
;
 
; Рандомный выбор на леснице
mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; X в позиции напротив блока
;  ­¤®¬­ë© ¢ë¡®à ­  «¥á­¨æ¥
mov word bx, [X_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp bx, 0 ;
jne end_les ;
mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; X в позиции напротив блока
mov word bx, [Y_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp bx, 0 ;
jne end_les ;
 
780,10 → 786,10
mov eax, [Ypl]
cmp eax, [Y_enemy]
jna bolee
mov word [mov_enemy],2 ; вниз
mov word [mov_enemy],2 ; ¢­¨§
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
jmp end_les
 
791,7 → 797,7
mov word [mov_enemy],3 ; up
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
jmp end_les
 
806,10 → 812,10
mov eax, [Xpl]
cmp eax, [X_enemy]
jna bolee2
mov word [mov_enemy],4 ; вниз
mov word [mov_enemy],4 ; ¢­¨§
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
jmp end_les
 
817,15 → 823,15
mov word [mov_enemy],1 ; up
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
 
end_les:
; end Рандомный выбор на леснице
; end  ­¤®¬­ë© ¢ë¡®à ­  «¥á­¨æ¥
 
;Гравитация
mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; X в позиции напротив блока
;ƒà ¢¨â æ¨ï
mov word bx, [X_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp bx, 0 ;
jne end_grava ;
 
840,16 → 846,16
je grava
jmp end_grava
grava:
mov word [mov_enemy], 2 ; padenie ВРАГА
mov word [mov_enemy], 2 ; padenie ‚€ƒ€
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
 
end_grava:
;конец гравитации
;ª®­¥æ £à ¢¨â æ¨¨
 
;блок расчета положения врага в лабиринте
;¡«®ª à áç¥â  ¯®«®¦¥­¨ï ¢à £  ¢ « ¡¨à¨­â¥
mov eax, 0 ;
mov eax, [Y_enemy] ;
shr eax, 5 ;
860,9 → 866,9
add eax, ebx ;
mov [lab_enemy], eax ;
mov word bx, [Lab2] ;
add word bx, 6 ; направление движения данного врага
add word bx, 6 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;блок расчета положения врага в лабиринте
;¡«®ª à áç¥â  ¯®«®¦¥­¨ï ¢à £  ¢ « ¡¨à¨­â¥
 
 
 
869,21 → 875,21
 
 
 
;БЛОК ЗПАПРЕТА ДВижения
mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
and bx, 31 ; Y в позиции напротив блока
;‹ŽŠ ‡€…’€ „‚¨¦¥­¨ï
mov word bx, [Y_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and bx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp bx, 0 ;
jne end_zapret ;
mov word ax, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
and ax, 31 ; X в позиции напротив блока
mov word ax, [X_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ax, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp ax, 0 ;
jne end_zapret ;
 
mov word ax, [mov_enemy] ; Это условие позволяет добежать до позиции напротив блока
mov word ax, [mov_enemy] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
 
cmp ax, 0
jne duma1
; Рандомный выбор движения
;  ­¤®¬­ë© ¢ë¡®à ¤¢¨¦¥­¨ï
mov eax, [timer1]
and eax, 3
cmp eax, 0
894,7 → 900,7
mov word [mov_enemy], ax ;
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
 
 
901,7 → 907,7
 
duma1:
cmp ax, 4
jne duma2 ; прверка справа
jne duma2 ; ¯à¢¥àª  á¯à ¢ 
mov bx,[lab_enemy]
add bx,1
mov ax, [Dangeon + bx]
912,7 → 918,7
 
duma2:
cmp ax, 1
jne duma3 ; слева
jne duma3 ; á«¥¢ 
mov bx,[lab_enemy]
sbb bx,1
mov ax, [Dangeon + bx]
923,7 → 929,7
 
duma3:
cmp ax, 2
jne duma4 ; снизу
jne duma4 ; á­¨§ã
mov bx,[lab_enemy]
add bx,16
mov ax, [Dangeon + bx]
934,16 → 940,16
 
duma4:
cmp ax, 3
jne duma_stop ; сверху
jne duma_stop ; ᢥàåã
 
mov bx,[lab_enemy] ; если кирпич над головой
mov bx,[lab_enemy] ; ¥á«¨ ª¨à¯¨ç ­ ¤ £®«®¢®©
sbb bx,16
mov ax, [Dangeon + bx]
and eax,3
cmp ax, 0 ; если кирпич над головой
cmp ax, 0 ; ¥á«¨ ª¨à¯¨ç ­ ¤ £®«®¢®©
jne duma_stop
 
mov bx,[lab_enemy] ; если враг не на леснице
mov bx,[lab_enemy] ; ¥á«¨ ¢à £ ­¥ ­  «¥á­¨æ¥
mov ax, [Dangeon + bx]
and eax,15
cmp ax, 8
953,16 → 959,16
 
duma_stop:
 
mov word [mov_enemy], 0 ; ОСТАНОВКА ВРАГА
mov word [mov_enemy], 0 ; Ž‘’€Ž‚Š€ ‚€ƒ€
mov word ax, [mov_enemy] ;
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения данного врага
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
 
duma_end:
 
end_zapret:
;конец запрета
;ª®­¥æ § ¯à¥â 
 
end_mov_enemy:
 
987,18 → 993,18
 
hiro:
 
mov ecx, [v_fire] ;стрельба
mov ecx, [v_fire] ;áâ५졠
cmp ecx, 0
je next_anima
cmp ecx, 1
je wprawo
mov ebp,12 ; кадр
mov ebp,12 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
mov dword [Y_anime], eax
call animashka
mov ecx, [timer1] ;стрельба
mov ecx, [timer1] ;áâ५졠
and ecx, 15
cmp ecx, 0
jne end_hiro
1006,13 → 1012,13
jmp end_hiro
 
wprawo:
mov ebp,11 ; кадр
mov ebp,11 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
mov dword [Y_anime], eax
call animashka
mov ecx, [timer1] ;стрельба
mov ecx, [timer1] ;áâ५졠
and ecx, 15
cmp ecx, 0
jne end_hiro
1019,7 → 1025,7
mov dword [v_fire], 0
jmp end_hiro
 
;стрельба
;áâ५졠
jmp end_hiro
 
next_anima:
1032,7 → 1038,7
cmp eax, 7 ;
ja next_l1
 
mov ebp,3 ; кадр
mov ebp,3 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1041,7 → 1047,7
jmp end_hiro
 
next_l1:
mov ebp,5 ; кадр
mov ebp,5 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1048,7 → 1054,7
mov dword [Y_anime], eax
call animashka
pusha
mcall 55, eax, , , Music_mov ; звук выстрела
mcall 55, eax, , , Music_mov ; §¢ãª ¢ëáâ५ 
popa
 
jmp end_hiro
1063,7 → 1069,7
cmp eax, 7 ;
ja next_d1
 
mov ebp,4 ; кадр
mov ebp,4 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1071,12 → 1077,12
call animashka
 
pusha
mcall 55, eax, , , Music_mov ; звук выстрела
mcall 55, eax, , , Music_mov ; §¢ãª ¢ëáâ५ 
popa
jmp end_hiro
 
next_d1:
mov ebp,6 ; кадр
mov ebp,6 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1088,16 → 1094,16
next_d:
cmp eax, 2
jne next_u
mov ebp,13 ; кадр
mov ebp,13 ; ª ¤à
mov eax, [temp2]
cmp eax, 8
jne padaem
mov ebp,10 ; кадр
mov ebp,10 ; ª ¤à
padaem:
mov eax, [temp5]
cmp eax, 8
jne padaem2
mov ebp,10 ; кадр
mov ebp,10 ; ª ¤à
padaem2:
mov eax, dword [Xpl]
mov dword [X_anime], eax
1115,7 → 1121,7
cmp eax, 7 ;
ja next_u1
 
mov ebp,10 ; кадр
mov ebp,10 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1124,7 → 1130,7
jmp end_hiro
 
next_u1:
mov ebp,9 ; кадр
mov ebp,9 ; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1136,7 → 1142,7
next_s:
cmp eax, 0
jne next_s
mov ebp,17; кадр
mov ebp,17; ª ¤à
mov eax, dword [Xpl]
mov dword [X_anime], eax
mov eax, dword [Ypl]
1157,9 → 1163,9
;****************
hiro_mov:
 
;ПРЕГРАД
;…ƒ€„
 
; вычисление соседних блоков
; ¢ëç¨á«¥­¨¥ á®á¥¤­¨å ¡«®ª®¢
mov ebx, [hiro_lab]
sbb ebx,2
mov eax,[Dangeon + bx] ; up
1170,14 → 1176,14
mov [temp2], ah ;
 
;-------------------------------------------------------------------------------
; Сбор алмазов
; ‘¡®à  «¬ §®¢
;-------------------------------------------------------------------------------
mov ecx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
and ecx, 31 ; Y в позиции напротив блока
mov ecx, [Ypl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ecx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
 
mov edx, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
and edx, 31 ; Y в позиции напротив блока
or edx,ecx ; Мы четко спозиционированы по Х и У
mov edx, [Xpl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and edx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
or edx,ecx ; Œë ç¥âª® ᯮ§¨æ¨®­¨à®¢ ­ë ¯® • ¨ “
cmp edx, 0
jne no_almaz
 
1184,18 → 1190,18
cmp ah, 12
jne no_almaz
xor cx, cx
add ebx,1 ; ЗАПЛАТКА !!! без нее почемуто обнуляет не алмазы а соседние блоки
add ebx,1 ; ‡€‹€’Š€ !!! ¡¥§ ­¥¥ ¯®ç¥¬ãâ® ®¡­ã«ï¥â ­¥  «¬ §ë   á®á¥¤­¨¥ ¡«®ª¨
mov [Dangeon + bx], ch
sbb ebx, 1 ; ЗАПЛАТКА !!!
sbb ebx, 1 ; ‡€‹€’Š€ !!!
mov ecx, [gold]
add ecx, 1
mov [gold], ecx
pusha
mcall 55, eax, , , Music_almaz ; звук Almaz
mcall 55, eax, , , Music_almaz ; §¢ãª Almaz
popa
no_almaz:
;-------------------------------------------------------------------------------
; Сбор алмазов
; ‘¡®à  «¬ §®¢
;-------------------------------------------------------------------------------
; down
add ebx,1 ; temp5
1203,19 → 1209,19
mov [temp3], ah
 
sbb ebx,17 ; !!!!!!!!!!!!
mov eax,[Dangeon + bx] ; при отсутствии библиотеки MACROS.INC ebx=17 , при ее присутствии ebx=16
mov eax,[Dangeon + bx] ; ¯à¨ ®âáãâá⢨¨ ¡¨¡«¨®â¥ª¨ MACROS.INC ebx=17 , ¯à¨ ¥¥ ¯à¨áãâá⢨¨ ebx=16
mov [temp4], ah
 
add ebx,32 ;
mov eax,[Dangeon + bx] ;
mov [temp5], ah
; вычисление соседних блоков
; ¢ëç¨á«¥­¨¥ á®á¥¤­¨å ¡«®ª®¢
 
 
 
 
 
;разрешение на движение
;à §à¥è¥­¨¥ ­  ¤¢¨¦¥­¨¥
mov eax,0 ;
mov eax,[v_mov2] ;
and eax,7
1223,8 → 1229,8
cmp eax, 2
je smena
 
mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; Y в позиции напротив блока
mov ebx, [Ypl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp ebx, 0 ;
jne end_tamgna ;
smena:
1236,8 → 1242,8
cmp eax, 0
je smena2
 
mov ebx, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; X в позиции напротив блока
mov ebx, [Xpl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp ebx, 0 ;
jne end_tamgna ;
 
1246,16 → 1252,16
and eax, 7
mov [v_mov], eax
end_tamgna:
;разрешение на движение
;à §à¥è¥­¨¥ ­  ¤¢¨¦¥­¨¥
 
 
;УПИРАНИЕ В ПРЕГРАДУ
;“ˆ€ˆ… ‚ …ƒ€„“
mov ebx, [Ypl] ;
and ebx, 31 ; Y в позиции напротив блока
and ebx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp ebx, 0 ;
jne end_stop ;
mov eax, [Xpl] ; без макроса этого блока не было он был внутри блока упираний
and eax, 31 ; X в позиции напротив блока
mov eax, [Xpl] ; ¡¥§ ¬ ªà®á  í⮣® ¡«®ª  ­¥ ¡ë«® ®­ ¡ë« ¢­ãâਠ¡«®ª  㯨࠭¨©
and eax, 31 ; X ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
cmp eax, 0 ;
jne end_stop ;
mov eax, [v_mov]
1266,7 → 1272,7
 
stop_d:
mov ebx, [temp5]
;заплатка 2 равно 1 если бетон то это как кирпич, иначе герой проходит сквозь бетон
;§ ¯« âª  2 à ¢­® 1 ¥á«¨ ¡¥â®­ â® íâ® ª ª ª¨à¯¨ç, ¨­ ç¥ £¥à®© ¯à®å®¤¨â ᪢®§ì ¡¥â®­
 
cmp ebx, 2
jne no_zaplat1
1291,8 → 1297,8
and ebx,3
and eax, ebx
 
; mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
; and ebx, 31 ; Y в позиции напротив блока
; mov ebx, [Ypl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
; and ebx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
; cmp ebx, 0 ;
; jne end_stop ;
 
1309,8 → 1315,8
mov ebx, [temp1]
and ebx,3
 
; mov eax, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
; and eax, 31 ; Y в позиции напротив блока
; mov eax, [Xpl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
; and eax, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
; cmp eax, 0 ;
; jne end_stop ;
 
1332,21 → 1338,21
mov [v_mov], ebx
 
end_stop:
;ПРЕГРАДЫ
;…ƒ€„›
 
 
;GRAVITACION
mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
and ebx, 31 ; Y в позиции напротив блока
mov ebx, [Ypl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and ebx, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
 
mov eax, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
and eax, 31 ; Y в позиции напротив блока
or eax,ebx ; Мы четко спозиционированы по Х и У
mov eax, [Xpl] ; â® ãá«®¢¨¥ ¯®§¢®«ï¥â ¤®¡¥¦ âì ¤® ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
and eax, 31 ; Y ¢ ¯®§¨æ¨¨ ­ ¯à®â¨¢ ¡«®ª 
or eax,ebx ; Œë ç¥âª® ᯮ§¨æ¨®­¨à®¢ ­ë ¯® • ¨ “
cmp eax, 0
jne end_grav
 
mov ebx, [temp2] ;
cmp ebx, 0 ; запрет на прыжки вверх
cmp ebx, 0 ; § ¯à¥â ­  ¯à릪¨ ¢¢¥àå
jne end_grav ;
mov ebx, [v_mov] ;
cmp ebx, 3 ;
1358,7 → 1364,7
 
dalee_gra:
add eax, [temp5] ;
cmp eax, 0 ; падение в пустоту
cmp eax, 0 ; ¯ ¤¥­¨¥ ¢ ¯ãáâ®âã
jne dalee_g ;
mov eax, 2 ;
mov [v_mov],eax ;
1367,7 → 1373,7
 
dalee_g:
cmp eax, 4 ;
jne dalee_g2 ; падение в воду
jne dalee_g2 ; ¯ ¤¥­¨¥ ¢ ¢®¤ã
mov eax, 2 ;
mov [v_mov],eax ;
mov eax, 0 ;
1375,7 → 1381,7
 
dalee_g2:
cmp eax, 12 ;
jne end_grav ; падение на алмаз
jne end_grav ; ¯ ¤¥­¨¥ ­   «¬ §
mov eax, 2 ;
mov [v_mov],eax ;
mov eax, 0 ;
1387,7 → 1393,7
 
 
 
; ПРИРОСТ КООРДИНАТ ГЕРОЯ
; ˆŽ‘’ ŠŽŽ„ˆ€’ ƒ…ŽŸ
mov eax,0 ;
mov eax,[v_mov] ;
cmp eax, 2 ;
1431,12 → 1437,12
mov ebx, [Xpl] ;
add ebx, 2 ;
mov [Xpl], ebx ;
jmp hiro_mov_end ;прирост
; ПРИРОСТ КООРДИНАТ ГЕРОЯ
jmp hiro_mov_end ;¯à¨à®áâ
; ˆŽ‘’ ŠŽŽ„ˆ€’ ƒ…ŽŸ
 
hiro_mov_end:
 
; вычисляем положение героя в лабиринте
; ¢ëç¨á«ï¥¬ ¯®«®¦¥­¨¥ £¥à®ï ¢ « ¡¨à¨­â¥
mov eax, 0 ;
mov dword eax, [Ypl] ;
shr eax, 5 ;
1446,7 → 1452,7
shr ebx, 5 ;
add eax, ebx ;
mov [hiro_lab], eax ;
; вычисляем положение героя в лабиринте
; ¢ëç¨á«ï¥¬ ¯®«®¦¥­¨¥ £¥à®ï ¢ « ¡¨à¨­â¥
ret
;****************
; end Hiro mov
1457,10 → 1463,10
; BULLET
;*******************************************
bullet_mas:
mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
mov word [Lab3], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨­ í«¥¬¥­â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥­­® 6*2= + 12
cycle7:
mov word bx, [Lab3]
mov word ax, [Bullet+bx] ; берет байт из Enemy + смещение
mov word ax, [Bullet+bx] ; ¡¥à¥â ¡ ©â ¨§ Enemy + ᬥ饭¨¥
 
cmp ax, 1 ; bullet ok
je go_bullet
1468,11 → 1474,11
jmp end_bullet
go_bullet:
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Bullet + bx]
mov word [X_bul], ax
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Bullet + bx]
mov word [Y_bul], ax
 
1498,11 → 1504,11
; BULLET MOV
;*******************************************
bullet_mov:
mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
mov word [Lab3], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨­ í«¥¬¥­â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥­­® 6*2= + 12
 
cycle8:
mov word bx, [Lab3]
mov word ax, [Bullet+bx] ; берет байт из Enemy + смещение
mov word ax, [Bullet+bx] ; ¡¥à¥â ¡ ©â ¨§ Enemy + ᬥ饭¨¥
 
cmp ax, 1 ; bullet ok
je go_bullet_mov
1510,11 → 1516,11
jmp end_bullet_mov
go_bullet_mov:
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Bullet + bx]
mov word [X_bul], ax
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word ax, [Bullet + bx]
mov word [Y_bul], ax
 
1540,7 → 1546,7
 
end_bullet_mov:
 
; вычисляем положение BULLET в лабиринте
; ¢ëç¨á«ï¥¬ ¯®«®¦¥­¨¥ BULLET ¢ « ¡¨à¨­â¥
mov eax, 0 ;
mov eax, [Y_bul] ;
shr eax, 5 ;
1550,7 → 1556,7
shr ebx, 5 ;
add eax, ebx ;
mov [lab_bullet], ax ;
; вычисляем положение BULLET в лабиринте
; ¢ëç¨á«ï¥¬ ¯®«®¦¥­¨¥ BULLET ¢ « ¡¨à¨­â¥
 
mov word bx,[lab_bullet]
mov dx, [Dangeon + bx]
1560,10 → 1566,10
 
cmp dx, 2
je beton
mov byte [Dangeon + bx], 3 ; РАЗРУШЕНИЕ КИРПИЧЕЙ
mov byte [Dangeon + bx], 3 ; €‡“˜…ˆ… Šˆˆ—…‰
beton:
mov bx, [Lab3]
mov byte [Bullet + ebx], 0 ; берет байт из Enemy + смещение
mov byte [Bullet + ebx], 0 ; ¡¥à¥â ¡ ©â ¨§ Enemy + ᬥ饭¨¥
 
 
 
1625,17 → 1631,17
cmp cx, 0
jne end_fire
pusha
mcall 55, eax, , , Music_bah ; звук выстрела
mcall 55, eax, , , Music_bah ; §¢ãª ¢ëáâ५ 
popa
 
mov byte [Bullet + ebx], 1
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov ax, [Xpl]
add ax, 8
mov word [Bullet + ebx],ax
 
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov ax, [Ypl]
add ax, 16
mov word [Bullet + ebx],ax
1649,10 → 1655,10
;-------------------------------------------------------------------------------
 
 
;------------------------Загрузка уровней---------------------------------------
;------------------------‡ £à㧪  ã஢­¥©---------------------------------------
load_level:
imgtoimg img_level,32,32,canvas
setimg 6,20,canvas
setimg 0,0,canvas
 
xor eax,eax
xor ebx,ebx
1672,7 → 1678,7
mov [gold], eax
mov dword [Xpl], 32
mov dword [Ypl], 448
mov dword [hiro_lab],0 ; проекция героя в лабиринт
mov dword [hiro_lab],0 ; ¯à®¥ªæ¨ï £¥à®ï ¢ « ¡¨à¨­â
mov dword [v_mov], 0
mov dword [v_mov2], 0
mov dword [v_fire], 0
1689,10 → 1695,10
xor ebx, ebx
mov ebx, [Lab]
add ebx, [delta_level]
mov ax,[Dangeon2 + ebx] ; берет байт из дангеон + смещение
mov ax,[Dangeon2 + ebx] ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
 
sbb ebx, [delta_level]
mov [Dangeon + ebx], ax ; берет байт из дангеон + смещение
mov [Dangeon + ebx], ax ; ¡¥à¥â ¡ ©â ¨§ ¤ ­£¥®­ + ᬥ饭¨¥
add word [Lab],1
mov eax, [Lab]
 
1716,10 → 1722,10
mov eax, [gold]
cmp ax, 10
jna net_deneg
mov eax, [temp2] ; добежать до двери
mov eax, [temp2] ; ¤®¡¥¦ âì ¤® ¤¢¥à¨
cmp ax, 16
jne net_deneg
mov ax, [numer_level] ; увеличение левела
mov ax, [numer_level] ; 㢥«¨ç¥­¨¥ «¥¢¥« 
 
add ax, 1
mov [numer_level], ax
1732,12 → 1738,12
ret
 
;-------------------------------------------------------------------------------
; УТОП
; “’Ž
potop:
mov eax, [temp2] ; добежать до двери
mov eax, [temp2] ; ¤®¡¥¦ âì ¤® ¤¢¥à¨
cmp ax, 4
jne jiwoy
mov dword [gold], 0 ; увеличение левела
mov dword [gold], 0 ; 㢥«¨ç¥­¨¥ «¥¢¥« 
 
call load_level
delay 100
1745,9 → 1751,9
ret
 
;************************************
;положение врагов на новом уровне
;¯®«®¦¥­¨¥ ¢à £®¢ ­  ­®¢®¬ ã஢­¥
enemy_plaz:
mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
mov word [Lab2], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨­ í«¥¬¥­â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥­­® 6*2= + 12
mov ax, [demon_kolvo]
mov [demon], ax
 
1770,7 → 1776,7
add eax, 1
shl eax,5
mov word bx, [Lab2] ;
add word bx, 2 ; X кооридината данного врага
add word bx, 2 ; X ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
;
random 12, eax
1777,13 → 1783,13
add eax, 1
shl eax,5
mov word bx, [Lab2] ;
add word bx, 4 ; Y кооридината данного врага
add word bx, 4 ; Y ª®®à¨¤¨­ â  ¤ ­­®£® ¢à £ 
mov word [Enemy + bx], ax ;
 
mov word bx, [Lab2] ;
add word bx, 8 ; направление движения
add word bx, 8 ; ­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï
mov word [Enemy + bx], 0 ;
add word bx, 2 ; жизнь
add word bx, 2 ; ¦¨§­ì
mov word [Enemy + bx], 500 ;
 
 
1802,14 → 1808,14
ret
 
 
I_END: ; конец программы
I_END: ; ª®­¥æ ¯à®£à ¬¬ë
 
 
 
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Xpl: dd 32 ; координаты героя
Xpl: dd 32 ; ª®®à¤¨­ âë £¥à®ï
Ypl: dd 448
hiro_lab: dd 0 ; проекция героя в лабиринт
hiro_lab: dd 0 ; ¯à®¥ªæ¨ï £¥à®ï ¢ « ¡¨à¨­â
numer_level: dd 0
delta_level: dd 0
delta_level_end: dd 256
1834,8 → 1840,8
lab_enemy: dw 0
life_enemy: dw 0
 
anime : dd 0 ; переменная для анимации героя и пр
anime2 : dd 0 ; переменная для анимации героя и пр
anime : dd 0 ; ¯¥à¥¬¥­­ ï ¤«ï  ­¨¬ æ¨¨ £¥à®ï ¨ ¯à
anime2 : dd 0 ; ¯¥à¥¬¥­­ ï ¤«ï  ­¨¬ æ¨¨ £¥à®ï ¨ ¯à
 
temp1: dd 0
temp2: dd 0
1844,9 → 1850,9
temp5: dd 0
 
 
v_mov: dd 0 ; направления движения персонажа
v_mov2: dd 0 ; направления движения персонажа
v_fire: dd 0 ; направления движения персонажа
v_mov: dd 0 ; ­ ¯à ¢«¥­¨ï ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
v_mov2: dd 0 ; ­ ¯à ¢«¥­¨ï ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
v_fire: dd 0 ; ­ ¯à ¢«¥­¨ï ¤¢¨¦¥­¨ï ¯¥àá®­ ¦ 
Lab: dd 0
Lab2: dw 0
Lab3: dw 0
1853,10 → 1859,10
perem1: dd 0
perem2: dd 0
 
timer1 dd 0 ; таймер используемый для анимации воды, врагов --- бегает от 0 до 10
timer1 dd 0 ; â ©¬¥à ¨á¯®«ì§ã¥¬ë© ¤«ï  ­¨¬ æ¨¨ ¢®¤ë, ¢à £®¢ --- ¡¥£ ¥â ®â 0 ¤® 10
 
;-------------------------------------------------------------------------------
;1 обычная стена, 2 непробиваемая, 4 вода, 8 лесница, 12 алмаз, 0 пустота 16 - exit
;1 ®¡ëç­ ï á⥭ , 2 ­¥¯à®¡¨¢ ¥¬ ï, 4 ¢®¤ , 8 «¥á­¨æ , 12  «¬ §, 0 ¯ãáâ®â  16 - exit
;-------------------------------------------------------------------------------
Dangeon:
db 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
2047,7 → 2053,7
;-------------------------------------------------------------------------------
 
 
Enemy: dw 1,448,128,0,0,500 ;враги класс,Х,У,положение в лабиринте,направление движения,жизнь
Enemy: dw 1,448,128,0,0,500 ;¢à £¨ ª« áá,•,“,¯®«®¦¥­¨¥ ¢ « ¡¨à¨­â¥,­ ¯à ¢«¥­¨¥ ¤¢¨¦¥­¨ï,¦¨§­ì
dw 0,32,32,0,0,0
dw 0,64,32,0,0,0
dw 0,416,32,0,0,0
2059,6 → 2065,12
 
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
if lang eq ru
title db 'Ž„‡…Œ…‹œ… ¤«ï Š®«¨¡à¨Ž‘ <RU095@YANDEX.RU> z/x áâ५ïâì',0
else
title db 'Dungeon for KolibriOS <RU095@YANDEX.RU> z/x - shoot',0
endf
 
bullet_bmp:
file 'bullet.bmp'
rb 1
2099,7 → 2111,6
file 'door2.bmp'
rb 1
 
title db 'Dungeon (z/x - shoot)',0
 
img_level:
rb 448*448*3+8
2152,15 → 2163,14
 
entered rd 1
 
imgcount rd 1 ; кол-во всего кадров в анимации
img_index rd 1 ; номер текущего кадра
imgcount rd 1 ; ª®«-¢® ¢á¥£® ª ¤à®¢ ¢  ­¨¬ æ¨¨
img_index rd 1 ; ­®¬¥à ⥪ã饣® ª ¤à 
 
;hashtable rd 4096 ; рабочая область для РеадГИФ процедуры
;hashtable rd 4096 ; à ¡®ç ï ®¡« áâì ¤«ï ¥ ¤ƒˆ” ¯à®æ¥¤ãàë
workarea:
file 'aniall.gif'
 
 
;temp rb 0x100000 ; место для ГИФ фаила
;temp rb 0x100000 ; ¬¥áâ® ¤«ï ƒˆ” ä ¨« 
rb 10
 
canvas: