1,5 → 1,5 |
|
WND_COLOR equ 0x02aa00FF |
WND_COLOR equ 0x54000000 |
|
use32 |
org 0x0 |
13,7 → 13,7 |
dd 0x0 |
|
include 'lang.inc' |
include '..\..\macros.inc' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§ì áᥬ¡«¥à騪®¢! |
include '..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков! |
|
include 'ASCL.INC' |
include 'ASCGL.INC' |
23,11 → 23,11 |
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,37 → 108,23 |
int 0x40 |
|
cmp ah,1 |
jne noclose |
_close: |
or eax,-1 |
int 0x40 |
noclose: |
jmp still |
jne still |
mcall -1 |
|
; ********************************************* |
; *******
******* |
; ******* ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ******* |
; ********************************************* |
|
draw_window: |
startwd |
|
mov eax,0 |
xor eax, eax ; more optimized "mov eax, 0" |
mov ebx,50*65536+522 |
mov ecx,50*65536+536 |
mov edx,WND_COLOR |
mov esi,0x8050FFd0 |
mov edi,0x005080d0 |
mov edi, title |
int 0x40 |
|
label 8,6,'
¤«ï ®«¨¡à¨ <<<RU095@YANDEX.RU>>> z/x áâ५ïâì',cl_White+font_Big |
|
mov eax,8 |
mov ebx,(500)*65536+12 |
mov ecx,5*65536+12 |
mov edx,1 |
mov esi,0x000000 |
int 0x40 |
|
xor ecx,ecx |
call draw_subimage |
cmp [imgcount],1 |
161,22 → 147,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 |
184,7 → 170,7 |
cmp ah, 0 ; |
je back_block |
|
cmp ah, 12 ; § ªà áª ä® § «¬ §®¬ |
cmp ah, 12 ; закраска фона за алмазом |
je back_block |
|
cmp ah, 3 ; |
193,7 → 179,7 |
cmp ah, 16 ; |
je door_block |
|
cmp ah, 2 ; § ªà áª ä® § «¬ §®¬ |
cmp ah, 2 ; закраска фона за алмазом |
je cool_block |
|
jmp end_block |
214,7 → 200,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 |
222,7 → 208,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] |
235,7 → 221,7 |
jne end_block |
|
mov ebx, [Lab] |
mov byte [Dangeon + ebx], 0 ; ¡¥à¥â ¡ ©â ¨§ ¤ £¥® + ᬥ饨¥ |
mov byte [Dangeon + ebx], 0 ; берет байт из дангеон + смещение |
|
|
end_block: |
256,26 → 242,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 |
304,32 → 290,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 |
356,7 → 342,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] |
368,7 → 354,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] |
377,7 → 363,7 |
jmp end_water |
|
almaz3: |
mov ebp,16 ; ª ¤à |
mov ebp,16 ; кадр |
mov eax, dword [perem1] |
mov dword [X_anime], eax |
mov eax, dword [perem2] |
404,10 → 390,10 |
|
|
;******************************************* |
; 뢮¤¨¬ á«¥¤ãî騩 ª ¤à ¨§ ᯨ᪠ª à⨮ª |
; Выводим следующий кадр из списка картинок |
;******************************************* |
draw_subimage: |
;aframetoimg Image,32, 32,canvas,0x00ffffff ;
, ¯à®§à çë©
|
;aframetoimg Image,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ |
|
call labirint |
call lestniza |
415,7 → 401,7 |
call enemy_mov |
;------------------------------------------------------------------------------- |
mov ebx, [gold] |
cmp bx, 5 ;㢥«¨ç¥¨¥ ᪮à®á⨠¢à £®¢ ¥á«¨ ãªà « ¡®«¥¥ 9 |
cmp bx, 5 ;увеличение скорости врагов если украл более 9 |
jna lov_velo |
call enemy_mas |
call enemy_mov |
423,7 → 409,7 |
;------------------------------------------------------------------------------- |
;------------------------------------------------------------------------------- |
mov ebx, [gold] |
cmp bx, 9 ;㢥«¨ç¥¨¥ ᪮à®á⨠¢à £®¢ ¥á«¨ ãªà « ¡®«¥¥ 9 |
cmp bx, 9 ;увеличение скорости врагов если украл более 9 |
jna lov_velo2 |
call enemy_mas |
call enemy_mov |
454,26 → 440,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 |
482,9 → 468,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 |
498,7 → 484,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 : |
515,9 → 501,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: |
|
527,27 → 513,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 |
|
555,9 → 541,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] |
578,7 → 564,7 |
|
enemy_1: |
|
mov ebp,0 ; ª ¤à |
mov ebp,0 ; кадр |
mov eax, dword [X_enemy] |
mov dword [X_anime], eax |
mov eax, dword [Y_enemy] |
588,7 → 574,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] |
616,7 → 602,7 |
; ENEMY MOV |
;$$$$$$$$$$$$$$$$$$$$$$$$$$ |
enemy_mov: |
mov word [Lab2], 0 ; ¢á¥ ¤¥« âì ¢ WORD ®¤¨ í«¥¬¥â ¢ ¬ áᨢ¥ +2 á«¥¤ãî騩 ¢à £ á®®â¢â¥âá⢥® 6*2= + 12 |
mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12 |
|
cycle5: |
|
626,27 → 612,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 |
|
654,7 → 640,7 |
mov word ax, [Enemy + ebx] |
mov word [life_enemy], ax |
|
cmp ax, 499; ; § ¬®à®¦¥ë¥ ¢à £¨ |
cmp ax, 499; ; замороженные враги |
ja dalee_enemy_mov |
add ax, 1 |
|
663,7 → 649,7 |
jmp end_mov_enemy |
|
dalee_enemy_mov: |
; ¡«®ª ¯®¥¤ ¨ï £¥à®ï |
; блок поедания героя |
mov ax, [Xpl] |
add ax, 23 |
cmp ax, [X_enemy] |
682,7 → 668,7 |
delay 150 |
|
ne_em: |
;«®ª ¯®¯ ¤ ¨ï 1 ¯ã«¨ |
;Блок попадания 1 пули |
|
mov word bx, 0 |
mov word ax,[Bullet + ebx] |
714,7 → 700,7 |
no_bullet: |
|
|
;
|
;БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГОВ |
mov word ax, [mov_enemy] ; |
cmp ax, 1 ; left ; |
jne next_2 ; |
721,7 → 707,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: ; |
730,7 → 716,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: ; |
739,7 → 725,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: ; |
746,9 → 732,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] |
759,7 → 745,7 |
je next_end |
cmp word ax, 4 |
je next_end |
;ª®¥æ § ¯« ⪨ |
;конец заплатки |
|
n4_dalee: |
; |
766,21 → 752,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 ; |
|
794,10 → 780,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 |
|
805,7 → 791,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 |
|
820,10 → 806,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 |
|
831,15 → 817,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 ; |
|
854,16 → 840,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 ; |
874,9 → 860,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 ; |
;¡«®ª à áç¥â ¯®«®¦¥¨ï ¢à £ ¢ « ¡¨à¨â¥ |
;блок расчета положения врага в лабиринте |
|
|
|
883,21 → 869,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 |
908,7 → 894,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 ; |
|
|
915,7 → 901,7 |
|
duma1: |
cmp ax, 4 |
jne duma2 ; ¯à¢¥àª á¯à ¢ |
jne duma2 ; прверка справа |
mov bx,[lab_enemy] |
add bx,1 |
mov ax, [Dangeon + bx] |
926,7 → 912,7 |
|
duma2: |
cmp ax, 1 |
jne duma3 ; á«¥¢ |
jne duma3 ; слева |
mov bx,[lab_enemy] |
sbb bx,1 |
mov ax, [Dangeon + bx] |
937,7 → 923,7 |
|
duma3: |
cmp ax, 2 |
jne duma4 ; ᨧã |
jne duma4 ; снизу |
mov bx,[lab_enemy] |
add bx,16 |
mov ax, [Dangeon + bx] |
948,16 → 934,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 |
967,16 → 953,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: |
|
1001,18 → 987,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 |
1020,13 → 1006,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 |
1033,7 → 1019,7 |
mov dword [v_fire], 0 |
jmp end_hiro |
|
;áâà¥«ì¡ |
;стрельба |
jmp end_hiro |
|
next_anima: |
1046,7 → 1032,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] |
1055,7 → 1041,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] |
1062,7 → 1048,7 |
mov dword [Y_anime], eax |
call animashka |
pusha |
mcall 55, eax, , , Music_mov ; §¢ãª ¢ëáâ५ |
mcall 55, eax, , , Music_mov ; звук выстрела |
popa |
|
jmp end_hiro |
1077,7 → 1063,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] |
1085,12 → 1071,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] |
1102,16 → 1088,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 |
1129,7 → 1115,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] |
1138,7 → 1124,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] |
1150,7 → 1136,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] |
1171,9 → 1157,9 |
;**************** |
hiro_mov: |
|
;
|
;ПРЕГРАД |
|
; ¢ëç¨á«¥¨¥ á®á¥¤¨å ¡«®ª®¢ |
; вычисление соседних блоков |
mov ebx, [hiro_lab] |
sbb ebx,2 |
mov eax,[Dangeon + bx] ; up |
1184,14 → 1170,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 |
|
1198,18 → 1184,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 |
1217,19 → 1203,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 |
1237,8 → 1223,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: |
1250,8 → 1236,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 ; |
|
1260,16 → 1246,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] |
1280,7 → 1266,7 |
|
stop_d: |
mov ebx, [temp5] |
;§ ¯« ⪠2 à ¢® 1 ¥á«¨ ¡¥â® â® íâ® ª ª ª¨à¯¨ç, ¨ ç¥ £¥à®© ¯à®å®¤¨â ᪢®§ì ¡¥â® |
;заплатка 2 равно 1 если бетон то это как кирпич, иначе герой проходит сквозь бетон |
|
cmp ebx, 2 |
jne no_zaplat1 |
1305,8 → 1291,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 ; |
|
1323,8 → 1309,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 ; |
|
1346,21 → 1332,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 ; |
1372,7 → 1358,7 |
|
dalee_gra: |
add eax, [temp5] ; |
cmp eax, 0 ; ¯ ¤¥¨¥ ¢ ¯ãáâ®âã |
cmp eax, 0 ; падение в пустоту |
jne dalee_g ; |
mov eax, 2 ; |
mov [v_mov],eax ; |
1381,7 → 1367,7 |
|
dalee_g: |
cmp eax, 4 ; |
jne dalee_g2 ; ¯ ¤¥¨¥ ¢ ¢®¤ã |
jne dalee_g2 ; падение в воду |
mov eax, 2 ; |
mov [v_mov],eax ; |
mov eax, 0 ; |
1389,7 → 1375,7 |
|
dalee_g2: |
cmp eax, 12 ; |
jne end_grav ; ¯ ¤¥¨¥ «¬ § |
jne end_grav ; падение на алмаз |
mov eax, 2 ; |
mov [v_mov],eax ; |
mov eax, 0 ; |
1401,7 → 1387,7 |
|
|
|
;
|
; ПРИРОСТ КООРДИНАТ ГЕРОЯ |
mov eax,0 ; |
mov eax,[v_mov] ; |
cmp eax, 2 ; |
1445,12 → 1431,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 ; |
1460,7 → 1446,7 |
shr ebx, 5 ; |
add eax, ebx ; |
mov [hiro_lab], eax ; |
; ¢ëç¨á«ï¥¬ ¯®«®¦¥¨¥ £¥à®ï ¢ « ¡¨à¨â¥ |
; вычисляем положение героя в лабиринте |
ret |
;**************** |
; end Hiro mov |
1471,10 → 1457,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 |
1482,11 → 1468,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 |
|
1512,11 → 1498,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 |
1524,11 → 1510,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 |
|
1554,7 → 1540,7 |
|
end_bullet_mov: |
|
; ¢ëç¨á«ï¥¬ ¯®«®¦¥¨¥ BULLET ¢ « ¡¨à¨â¥ |
; вычисляем положение BULLET в лабиринте |
mov eax, 0 ; |
mov eax, [Y_bul] ; |
shr eax, 5 ; |
1564,7 → 1550,7 |
shr ebx, 5 ; |
add eax, ebx ; |
mov [lab_bullet], ax ; |
; ¢ëç¨á«ï¥¬ ¯®«®¦¥¨¥ BULLET ¢ « ¡¨à¨â¥ |
; вычисляем положение BULLET в лабиринте |
|
mov word bx,[lab_bullet] |
mov dx, [Dangeon + bx] |
1574,10 → 1560,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 + смещение |
|
|
|
1639,17 → 1625,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 |
1663,7 → 1649,7 |
;------------------------------------------------------------------------------- |
|
|
;------------------------ £à㧪 ã஢¥©--------------------------------------- |
;------------------------Загрузка уровней--------------------------------------- |
load_level: |
imgtoimg img_level,32,32,canvas |
setimg 6,20,canvas |
1686,7 → 1672,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 |
1703,10 → 1689,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] |
|
1730,10 → 1716,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 |
1746,12 → 1732,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 |
1759,9 → 1745,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 |
|
1784,7 → 1770,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 |
1791,13 → 1777,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 ; |
|
|
1816,14 → 1802,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 |
1848,8 → 1834,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 |
1858,9 → 1844,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 |
1867,10 → 1853,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 |
2061,7 → 2047,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 |
2113,6 → 2099,7 |
file 'door2.bmp' |
rb 1 |
|
title db 'Dungeon (z/x - shoot)',0 |
|
img_level: |
rb 448*448*3+8 |
2165,15 → 2152,15 |
|
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: |