Attack (aka Ataka): source of old game by chaykin.
git-svn-id: svn://kolibrios.org@8151 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
1 parent
2004300949
commit
227880f17b
10 files changed
+910
No files matched your search
@@ -0,0 +1,6 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
|
||||
--tup.rule("attack.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "attack")
|
||||
tup.rule("attack.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o", "attack")
|
||||
@@ -0,0 +1,904 @@
|
||||
; Initially written by CH@YKIN EVGENY, 2009
|
||||
; Then disassembled for fun by dunkaist, 2017
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
dd 1
|
||||
dd start
|
||||
dd I_END
|
||||
dd stacktop
|
||||
dd stacktop
|
||||
dd 0, 0
|
||||
|
||||
include 'proc32.inc'
|
||||
include 'struct.inc'
|
||||
include 'macros.inc'
|
||||
include 'encoding.inc'
|
||||
|
||||
CLIENT_WIDTH = 300
|
||||
CLIENT_HEIGHT = 200
|
||||
|
||||
HEALTH_INIT = 24
|
||||
HEALTH_BONUS = 3
|
||||
HEALTH_LEVEL_UP = 297
|
||||
|
||||
BULLET_DAMAGE = 12
|
||||
BULLETS_CNT = 4
|
||||
|
||||
NOTE_DAMAGE = 0x31
|
||||
NOTE_SAVE = 0x63
|
||||
NOTE_WIN_0 = 0x36
|
||||
NOTE_WIN_1 = 0x35
|
||||
NOTE_WIN_2 = 0x31
|
||||
NOTE_LOST_0 = 0x0d
|
||||
NOTE_LOST_1 = 0x09
|
||||
NOTE_LOST_2 = 0x20
|
||||
|
||||
BULLET_SIZE = 7
|
||||
SHIELD_SIZE = 20
|
||||
|
||||
DELAY_INIT = 10
|
||||
DELAY_NOTE = 10
|
||||
|
||||
DELAYS_PER_GAME_STEP = 10
|
||||
|
||||
NW = 1 ; north west
|
||||
SW = 2
|
||||
NE = 3
|
||||
SE = 4
|
||||
|
||||
macro draw_bullet off_on, x, y {
|
||||
mov eax, 7
|
||||
mov ebx, _pic_bullet_#off_on
|
||||
mov ecx, (BULLET_SIZE SHL 16) + BULLET_SIZE
|
||||
mov edx, x
|
||||
imul edx, edx, 0x10000
|
||||
add edx, y
|
||||
mcall
|
||||
}
|
||||
|
||||
macro draw_shield side, x, y {
|
||||
mov eax, 7
|
||||
mov ebx, pic_shield_#side
|
||||
mov ecx, (SHIELD_SIZE SHL 16) + SHIELD_SIZE
|
||||
mov edx, x
|
||||
imul edx, edx, 0x10000
|
||||
add edx, y
|
||||
mcall
|
||||
}
|
||||
|
||||
macro play_note note {
|
||||
mov eax, note
|
||||
mov dword [speaker.note], eax
|
||||
mov eax, 55
|
||||
mov ebx, eax
|
||||
mov esi, speaker
|
||||
mcall
|
||||
}
|
||||
|
||||
start:
|
||||
mcall 48, 3, sys_colors, sizeof.system_colors
|
||||
jmp menu
|
||||
menu:
|
||||
mcall 10
|
||||
cmp eax, 1
|
||||
jz .redraw
|
||||
cmp eax, 2
|
||||
jz .button
|
||||
cmp eax, 3
|
||||
jz .key
|
||||
jmp menu
|
||||
.redraw:
|
||||
jmp .draw
|
||||
.button:
|
||||
mcall 2
|
||||
cmp ah, '1'
|
||||
jz .init_game
|
||||
cmp ah, '2'
|
||||
jz .resume_game
|
||||
jmp menu
|
||||
.init_game:
|
||||
mov eax, 13
|
||||
mov ebx, 0
|
||||
imul ebx, ebx, 0x10000
|
||||
add ebx, CLIENT_WIDTH
|
||||
mov ecx, 0
|
||||
imul ecx, ecx, 0x10000
|
||||
add ecx, CLIENT_HEIGHT
|
||||
mov edx, 0
|
||||
mcall
|
||||
mov [game_started], 0
|
||||
mov [shield_position], SE
|
||||
mov [finish_draw], 1
|
||||
mov [next_bullet_side_prng], 3
|
||||
mov [next_bullet_side], SE
|
||||
mov [bullet_1_pos], 1
|
||||
mov [bullet_2_pos], 2
|
||||
mov [bullet_3_pos], 3
|
||||
mov [bullet_4_pos], 4
|
||||
mov eax, NW
|
||||
mov [bullet_1_side], eax
|
||||
mov eax, SW
|
||||
mov [bullet_2_side], eax
|
||||
mov eax, NE
|
||||
mov [bullet_3_side], eax
|
||||
mov eax, SE
|
||||
mov [bullet_4_side], eax
|
||||
mov eax, 1
|
||||
mov [bullet_pos], eax
|
||||
mov eax, NW
|
||||
mov [bullet_side], eax
|
||||
mov eax, 1
|
||||
mov [cur_bullet], eax
|
||||
mov eax, 1
|
||||
mov [delays_cnt], eax
|
||||
mov eax, HEALTH_INIT
|
||||
mov [health], eax
|
||||
mov eax, DELAY_INIT
|
||||
mov [delay], eax
|
||||
jmp redraw_window
|
||||
.resume_game:
|
||||
mov eax, 13
|
||||
mov ebx, 0
|
||||
imul ebx, ebx, 0x10000
|
||||
add ebx, CLIENT_WIDTH
|
||||
mov ecx, 0
|
||||
imul ecx, ecx, 0x10000
|
||||
add ecx, CLIENT_HEIGHT
|
||||
mov edx, 0
|
||||
mcall
|
||||
jmp redraw_window
|
||||
.key:
|
||||
mcall 17
|
||||
cmp ah, 0x01 ; close button
|
||||
jnz menu
|
||||
.exit:
|
||||
mcall -1
|
||||
.draw:
|
||||
mov eax, [finish_draw]
|
||||
cmp eax, 1
|
||||
jz .draw.start
|
||||
jmp .draw.finish
|
||||
.draw.finish:
|
||||
mcall 12, 2
|
||||
jmp .draw.start
|
||||
.draw.start:
|
||||
mov eax, 0
|
||||
mov [finish_draw], eax
|
||||
mcall 12, 1
|
||||
mcall 48, 4
|
||||
mov [skin_height], eax
|
||||
mcall 48, 4
|
||||
mov [skin_height], eax
|
||||
mov eax, 0
|
||||
mov ebx, (100 SHL 16) + CLIENT_WIDTH + 10
|
||||
mov ecx, 100
|
||||
imul ecx, ecx, 0x10000
|
||||
add ecx, CLIENT_HEIGHT + 4
|
||||
add ecx, [skin_height]
|
||||
mov edx, 0x33000000
|
||||
mov edi, window_title
|
||||
mcall
|
||||
mov eax, 13
|
||||
mov ebx, 0
|
||||
imul ebx, ebx, 0x10000
|
||||
add ebx, CLIENT_WIDTH + 1
|
||||
mov ecx, 0
|
||||
imul ecx, ecx, 0x10000
|
||||
add ecx, CLIENT_HEIGHT
|
||||
mov edx, 0
|
||||
mcall
|
||||
mcall 4, (140 SHL 16) + 60, 0x10bbbbbb, msg_ataka, msg_ataka.size
|
||||
mcall 4, (140 SHL 16) + 61, 0x10bbbbbb, msg_ataka, msg_ataka.size
|
||||
mcall 4, (141 SHL 16) + 61, 0x10bbbbbb, msg_ataka, msg_ataka.size
|
||||
mcall 4, (141 SHL 16) + 60, 0x10bbbbbb, msg_ataka, msg_ataka.size
|
||||
mcall 4, ( 55 SHL 16) + 190, 0x10444444, msg_copyright, msg_copyright.size
|
||||
mov eax, 4
|
||||
mov ebx, (34 SHL 16) + 160
|
||||
mov ecx, 0x888888
|
||||
mov edx, msg_control_by_numpad
|
||||
mov esi, 40
|
||||
.print_line:
|
||||
mcall
|
||||
add ebx, 10 ; one line down
|
||||
add edx, 40
|
||||
cmp byte [edx], 'x'
|
||||
jnz .print_line
|
||||
mcall 4, (110 SHL 16) + 95, 0x10999999, msg_new_game, msg_new_game.size
|
||||
mov eax, [game_started]
|
||||
cmp eax, 0
|
||||
jz menu
|
||||
mcall 4, (110 SHL 16) + 110, 0x10999999, msg_continue, msg_continue.size
|
||||
jmp menu
|
||||
|
||||
redraw_window:
|
||||
mov eax, [finish_draw]
|
||||
cmp eax, 1
|
||||
jz redraw_window.start
|
||||
mcall 12, 2
|
||||
jmp redraw_window.start
|
||||
redraw_window.start:
|
||||
mov eax, 0
|
||||
mov [finish_draw], eax
|
||||
mcall 12, 1
|
||||
mcall 48, 4
|
||||
mov [skin_height], eax
|
||||
mov eax, 0
|
||||
mov ebx, (100 SHL 16) + CLIENT_WIDTH + 10
|
||||
mov ecx, 100
|
||||
imul ecx, ecx, 0x10000
|
||||
add ecx, CLIENT_HEIGHT + 4
|
||||
add ecx, [skin_height]
|
||||
mov edx, 0x33000000
|
||||
mov edi, window_title
|
||||
mcall
|
||||
jmp draw_field
|
||||
|
||||
game_loop:
|
||||
mov [game_started], 1
|
||||
mov eax, [health]
|
||||
cmp eax, HEALTH_LEVEL_UP
|
||||
jg level_up
|
||||
cmp eax, 0
|
||||
jl lost
|
||||
jmp game_alive
|
||||
level_up:
|
||||
mov eax, HEALTH_INIT
|
||||
mov [health], eax
|
||||
mov eax, [delay]
|
||||
cmp eax, 10 ; delay for level_0
|
||||
jz level_up_1
|
||||
mov eax, [delay]
|
||||
cmp eax, 8 ; delay for level_1
|
||||
jz level_up_2
|
||||
mov eax, [delay]
|
||||
cmp eax, 7
|
||||
jz level_up_3
|
||||
mov eax, [delay]
|
||||
cmp eax, 6
|
||||
jz level_up_4
|
||||
mov eax, [delay]
|
||||
cmp eax, 5
|
||||
jz level_up_5
|
||||
mov eax, [delay]
|
||||
cmp eax, 4
|
||||
jz level_up_6
|
||||
mov eax, [delay]
|
||||
cmp eax, 3
|
||||
jz win
|
||||
jmp game_alive
|
||||
lost:
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_LOST_0
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_LOST_1
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_LOST_2
|
||||
|
||||
mov [game_started], 0
|
||||
mcall 4, (105 SHL 16) + 100, 0xff0000, msg_you_lost, msg_you_lost.size
|
||||
mcall 5, 100
|
||||
mov eax, SE
|
||||
mov [shield_position], eax
|
||||
mov eax, 1
|
||||
mov [finish_draw], eax
|
||||
mov eax, 3
|
||||
mov [next_bullet_side_prng], eax
|
||||
mov eax, SE
|
||||
mov [next_bullet_side], eax
|
||||
mov eax, 1
|
||||
mov [bullet_1_pos], eax
|
||||
mov eax, 2
|
||||
mov [bullet_2_pos], eax
|
||||
mov eax, 3
|
||||
mov [bullet_3_pos], eax
|
||||
mov eax, 4
|
||||
mov [bullet_4_pos], eax
|
||||
mov eax, NW
|
||||
mov [bullet_1_side], eax
|
||||
mov eax, SW
|
||||
mov [bullet_2_side], eax
|
||||
mov eax, NE
|
||||
mov [bullet_3_side], eax
|
||||
mov eax, SE
|
||||
mov [bullet_4_side], eax
|
||||
mov eax, 1
|
||||
mov [bullet_pos], eax
|
||||
mov eax, NW
|
||||
mov [bullet_side], eax
|
||||
mov eax, 1
|
||||
mov [cur_bullet], eax
|
||||
mov eax, 1
|
||||
mov [delays_cnt], eax
|
||||
mov eax, HEALTH_INIT
|
||||
mov [health], eax
|
||||
mov eax, DELAY_INIT
|
||||
mov [delay], eax
|
||||
jmp menu.draw
|
||||
|
||||
level_up_1:
|
||||
mov eax, 8
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
level_up_2:
|
||||
mov eax, 7
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
level_up_3:
|
||||
mov eax, 6
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
level_up_4:
|
||||
mov eax, 5
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
level_up_5:
|
||||
mov eax, 4
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
level_up_6:
|
||||
mov eax, 3
|
||||
mov [delay], eax
|
||||
jmp game_alive
|
||||
win:
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_WIN_0
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_WIN_1
|
||||
mcall 5, DELAY_NOTE
|
||||
play_note NOTE_WIN_2
|
||||
|
||||
mcall 5, DELAY_NOTE
|
||||
|
||||
mov [game_started], 0
|
||||
mov eax, DELAY_INIT
|
||||
mov [delay], eax
|
||||
mcall 4, (105 SHL 16) + 100, 0xff0000, msg_you_won, msg_you_won.size
|
||||
mcall 5, 200
|
||||
jmp menu.draw
|
||||
|
||||
game_alive:
|
||||
; draw max health bar
|
||||
mov eax, 13
|
||||
mov ebx, 0
|
||||
imul ebx, ebx, 0x10000
|
||||
add ebx, CLIENT_WIDTH + 1
|
||||
mov ecx, 0
|
||||
imul ecx, ecx, 0x10000
|
||||
inc ecx
|
||||
mov edx, 0xff0000
|
||||
mcall
|
||||
; draw left health bar
|
||||
mov eax, 13
|
||||
mov ebx, 0
|
||||
imul ebx, ebx, 0x10000
|
||||
add ebx, [health]
|
||||
mov ecx, 0
|
||||
imul ecx, ecx, 0x10000
|
||||
inc ecx
|
||||
mov edx, 0x0000ff
|
||||
mcall
|
||||
mov eax, [next_bullet_side_prng]
|
||||
inc eax
|
||||
mov [next_bullet_side_prng], eax
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 1
|
||||
jz ._1
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 2
|
||||
jz ._2
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 3
|
||||
jz ._3
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 4
|
||||
jz ._4
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 5
|
||||
jz ._5
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 6
|
||||
jz ._6
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 7
|
||||
jz ._7
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 8
|
||||
jz ._8
|
||||
mov eax, [next_bullet_side_prng]
|
||||
cmp eax, 9
|
||||
jg ._9
|
||||
mov eax, 3
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._1:
|
||||
mov eax, 1
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._2:
|
||||
mov eax, 4
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._3:
|
||||
mov eax, 3
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._4:
|
||||
mov eax, 4
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._5:
|
||||
mov eax, 1
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._6:
|
||||
mov eax, 2
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._7:
|
||||
mov eax, 1
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._8:
|
||||
mov eax, 2
|
||||
mov [next_bullet_side], eax
|
||||
jmp check_event
|
||||
._9:
|
||||
mov eax, 3
|
||||
mov [next_bullet_side], eax
|
||||
mov eax, 1
|
||||
mov [next_bullet_side_prng], eax
|
||||
jmp check_event
|
||||
|
||||
check_event:
|
||||
mcall 5, [delay]
|
||||
mcall 11
|
||||
cmp eax, 1
|
||||
jz redraw_window
|
||||
cmp eax, 2
|
||||
jz .button
|
||||
cmp eax, 3
|
||||
jz .key
|
||||
jmp draw_field
|
||||
.key:
|
||||
mov al, 17
|
||||
mcall
|
||||
cmp ah, 1
|
||||
jnz draw_field
|
||||
mcall -1
|
||||
|
||||
.button:
|
||||
mov al, 2
|
||||
mcall
|
||||
cmp ah, 0xb0 ; arrow left / numpad 4
|
||||
jz .move_shield_tl
|
||||
cmp ah, 0xb5 ; end / numpad 1
|
||||
jz .move_shield_bl
|
||||
cmp ah, 0xb3 ; arrow right / numpad 6
|
||||
jz .move_shield_tr
|
||||
cmp ah, 0xb7 ; page down / numpad 3
|
||||
jz .move_shield_br
|
||||
cmp ah, 0xb0 ; never happens, fixme
|
||||
jz menu.draw
|
||||
cmp ah, 'p' ; 'p' for pause
|
||||
jz menu.draw
|
||||
cmp ah, '4'
|
||||
jz .move_shield_tl
|
||||
cmp ah, '1'
|
||||
jz .move_shield_bl
|
||||
cmp ah, '6'
|
||||
jz .move_shield_tr
|
||||
cmp ah, '3'
|
||||
jz .move_shield_br
|
||||
jmp draw_field
|
||||
.move_shield_tl:
|
||||
mov eax, 1
|
||||
mov [shield_position], eax
|
||||
jmp draw_field
|
||||
.move_shield_bl:
|
||||
mov eax, 2
|
||||
mov [shield_position], eax
|
||||
jmp draw_field
|
||||
.move_shield_tr:
|
||||
mov eax, 3
|
||||
mov [shield_position], eax
|
||||
jmp draw_field
|
||||
.move_shield_br:
|
||||
mov eax, 4
|
||||
mov [shield_position], eax
|
||||
jmp draw_field
|
||||
draw_field:
|
||||
mcall 18, 14
|
||||
; mcall 65, pic_bg, (CLIENT_WIDTH SHL 16) + CLIENT_HEIGHT, 0, 8, paletter, 0
|
||||
mov eax, 65
|
||||
mov ebx, pic_bg
|
||||
mov ecx, (CLIENT_WIDTH SHL 16) + CLIENT_HEIGHT
|
||||
mov edx, 0
|
||||
mov esi, 8 ; indexed image
|
||||
mov edi, palette
|
||||
mov ebp, 0
|
||||
mcall
|
||||
mov eax, [shield_position]
|
||||
cmp eax, NW
|
||||
jz .shield_nw
|
||||
cmp eax, SW
|
||||
jz .shield_sw
|
||||
cmp eax, NE
|
||||
jz .shield_ne
|
||||
cmp eax, SE
|
||||
jz .shield_se
|
||||
.shield_nw:
|
||||
draw_shield nw, 90, 70
|
||||
jmp draw_bullets
|
||||
.shield_sw:
|
||||
draw_shield sw, 90, 105
|
||||
jmp draw_bullets
|
||||
.shield_ne:
|
||||
draw_shield ne, CLIENT_HEIGHT, 70
|
||||
jmp draw_bullets
|
||||
.shield_se:
|
||||
draw_shield se, CLIENT_HEIGHT, 105
|
||||
jmp draw_bullets
|
||||
|
||||
draw_bullets: ; off
|
||||
draw_bullet off, 90, 70
|
||||
draw_bullet off, 75, 58
|
||||
draw_bullet off, 59, 46
|
||||
draw_bullet off, 89, 117
|
||||
draw_bullet off, 74, 129
|
||||
draw_bullet off, 56, 144
|
||||
draw_bullet off, 211, 68
|
||||
draw_bullet off, 224, 57
|
||||
draw_bullet off, 236, 46
|
||||
draw_bullet off, 210, 119
|
||||
draw_bullet off, 223, 131
|
||||
draw_bullet off, 237, 143
|
||||
jmp draw_bullets_on
|
||||
|
||||
draw_bullets_on:
|
||||
mov eax, [cur_bullet]
|
||||
cmp eax, 1
|
||||
jz ._1
|
||||
cmp eax, 2
|
||||
jz ._2
|
||||
cmp eax, 3
|
||||
jz ._3
|
||||
cmp eax, 4
|
||||
jz ._4
|
||||
._1:
|
||||
mov eax, [bullet_1_pos]
|
||||
mov [bullet_pos], eax
|
||||
mov eax, [bullet_1_side]
|
||||
mov [bullet_side], eax
|
||||
jmp bullet_on_defined
|
||||
._2:
|
||||
mov eax, [bullet_2_pos]
|
||||
mov [bullet_pos], eax
|
||||
mov eax, [bullet_2_side]
|
||||
mov [bullet_side], eax
|
||||
jmp bullet_on_defined
|
||||
._3:
|
||||
mov eax, [bullet_3_pos]
|
||||
mov [bullet_pos], eax
|
||||
mov eax, [bullet_3_side]
|
||||
mov [bullet_side], eax
|
||||
jmp bullet_on_defined
|
||||
._4:
|
||||
mov eax, [bullet_4_pos]
|
||||
mov [bullet_pos], eax
|
||||
mov eax, [bullet_4_side]
|
||||
mov [bullet_side], eax
|
||||
jmp bullet_on_defined
|
||||
|
||||
bullet_on_defined:
|
||||
mov eax, [bullet_side]
|
||||
cmp eax, NW
|
||||
jz bullet_nw
|
||||
cmp eax, SW
|
||||
jz bullet_sw
|
||||
cmp eax, NE
|
||||
jz bullet_ne
|
||||
cmp eax, SE
|
||||
jz bullet_se
|
||||
bullet_nw:
|
||||
mov eax, [bullet_pos]
|
||||
cmp eax, 1
|
||||
jz bullet_nw_dist._1
|
||||
cmp eax, 2
|
||||
jz bullet_nw_dist._2
|
||||
cmp eax, 3
|
||||
jz bullet_nw_dist._3
|
||||
cmp eax, 4
|
||||
jz bullet_nw_dist._4
|
||||
cmp eax, 5
|
||||
jz bullet_nw_dist._5
|
||||
bullet_sw:
|
||||
mov eax, [bullet_pos]
|
||||
cmp eax, 1
|
||||
jz bullet_sw_dist._1
|
||||
cmp eax, 2
|
||||
jz bullet_sw_dist._2
|
||||
cmp eax, 3
|
||||
jz bullet_sw_dist._3
|
||||
cmp eax, 4
|
||||
jz bullet_sw_dist._4
|
||||
cmp eax, 5
|
||||
jz bullet_sw_dist._5
|
||||
bullet_ne:
|
||||
mov eax, [bullet_pos]
|
||||
cmp eax, 1
|
||||
jz bullet_ne_dist._1
|
||||
cmp eax, 2
|
||||
jz bullet_ne_dist._2
|
||||
cmp eax, 3
|
||||
jz bullet_ne_dist._3
|
||||
cmp eax, 4
|
||||
jz bullet_ne_dist._4
|
||||
cmp eax, 5
|
||||
jz bullet_ne_dist._5
|
||||
bullet_se:
|
||||
mov eax, [bullet_pos]
|
||||
cmp eax, 1
|
||||
jz bullet_se_dist._1
|
||||
cmp eax, 2
|
||||
jz bullet_se_dist._2
|
||||
cmp eax, 3
|
||||
jz bullet_se_dist._3
|
||||
cmp eax, 4
|
||||
jz bullet_se_dist._4
|
||||
cmp eax, 5
|
||||
jz bullet_se_dist._5
|
||||
|
||||
bullet_nw_dist:
|
||||
._1:
|
||||
draw_bullet on, 44, 33
|
||||
jmp bullet_on_drawn
|
||||
._2:
|
||||
draw_bullet on, 59, 46
|
||||
jmp bullet_on_drawn
|
||||
._3:
|
||||
draw_bullet on, 75, 58
|
||||
jmp bullet_on_drawn
|
||||
._4:
|
||||
draw_bullet on, 90, 70
|
||||
jmp bullet_on_drawn
|
||||
._5:
|
||||
jmp bullet_on_drawn
|
||||
|
||||
bullet_sw_dist:
|
||||
._1:
|
||||
draw_bullet on, 42, 156
|
||||
jmp bullet_on_drawn
|
||||
._2:
|
||||
draw_bullet on, 56, 144
|
||||
jmp bullet_on_drawn
|
||||
._3:
|
||||
draw_bullet on, 74, 129
|
||||
jmp bullet_on_drawn
|
||||
._4:
|
||||
draw_bullet on, 89, 117
|
||||
jmp bullet_on_drawn
|
||||
._5:
|
||||
jmp bullet_on_drawn
|
||||
|
||||
bullet_ne_dist:
|
||||
._1:
|
||||
draw_bullet on, 250, 34
|
||||
jmp bullet_on_drawn
|
||||
._2:
|
||||
draw_bullet on, 236, 46
|
||||
jmp bullet_on_drawn
|
||||
._3:
|
||||
draw_bullet on, 224, 57
|
||||
jmp bullet_on_drawn
|
||||
._4:
|
||||
draw_bullet on, 211, 68
|
||||
jmp bullet_on_drawn
|
||||
._5:
|
||||
jmp bullet_on_drawn
|
||||
|
||||
bullet_se_dist:
|
||||
._1:
|
||||
draw_bullet on, 251, 156
|
||||
jmp bullet_on_drawn
|
||||
._2:
|
||||
draw_bullet on, 237, 143
|
||||
jmp bullet_on_drawn
|
||||
._3:
|
||||
draw_bullet on, 223, 131
|
||||
jmp bullet_on_drawn
|
||||
._4:
|
||||
draw_bullet on, 210, 119
|
||||
jmp bullet_on_drawn
|
||||
._5:
|
||||
jmp bullet_on_drawn
|
||||
|
||||
bullet_on_drawn:
|
||||
mov eax, [cur_bullet]
|
||||
inc eax
|
||||
mov [cur_bullet], eax
|
||||
mov eax, [cur_bullet]
|
||||
cmp eax, BULLETS_CNT + 1
|
||||
jz all_bullets_drawn
|
||||
jmp draw_bullets_on
|
||||
all_bullets_drawn:
|
||||
mov eax, 1
|
||||
mov [cur_bullet], eax
|
||||
jmp check_for_game_step
|
||||
check_for_game_step:
|
||||
mov eax, [delays_cnt]
|
||||
cmp eax, DELAYS_PER_GAME_STEP
|
||||
jz game_step
|
||||
jmp no_game_step
|
||||
no_game_step:
|
||||
mov eax, [delays_cnt]
|
||||
inc eax
|
||||
mov [delays_cnt], eax
|
||||
jmp game_loop
|
||||
game_step:
|
||||
mov eax, 1
|
||||
mov [delays_cnt], eax
|
||||
mov eax, [bullet_1_pos]
|
||||
inc eax
|
||||
mov [bullet_1_pos], eax
|
||||
mov eax, [bullet_2_pos]
|
||||
inc eax
|
||||
mov [bullet_2_pos], eax
|
||||
mov eax, [bullet_3_pos]
|
||||
inc eax
|
||||
mov [bullet_3_pos], eax
|
||||
mov eax, [bullet_4_pos]
|
||||
inc eax
|
||||
mov [bullet_4_pos], eax
|
||||
mov eax, [bullet_1_pos]
|
||||
cmp eax, 6
|
||||
jz bullet_1_new
|
||||
mov eax, [bullet_2_pos]
|
||||
cmp eax, 6
|
||||
jz bullet_2_new
|
||||
mov eax, [bullet_3_pos]
|
||||
cmp eax, 6
|
||||
jz bullet_3_new
|
||||
mov eax, [bullet_4_pos]
|
||||
cmp eax, 6
|
||||
jz bullet_4_new
|
||||
jmp check_bullet_hit
|
||||
|
||||
bullet_1_new:
|
||||
play_note NOTE_SAVE
|
||||
mov eax, 1
|
||||
mov [bullet_1_pos], eax
|
||||
mov eax, [next_bullet_side]
|
||||
mov [bullet_1_side], eax
|
||||
jmp check_bullet_hit
|
||||
bullet_2_new:
|
||||
play_note NOTE_SAVE
|
||||
mov eax, 1
|
||||
mov [bullet_2_pos], eax
|
||||
mov eax, [next_bullet_side]
|
||||
mov [bullet_2_side], eax
|
||||
jmp check_bullet_hit
|
||||
bullet_3_new:
|
||||
play_note NOTE_SAVE
|
||||
mov eax, 1
|
||||
mov [bullet_3_pos], eax
|
||||
mov eax, [next_bullet_side]
|
||||
mov [bullet_3_side], eax
|
||||
jmp check_bullet_hit
|
||||
bullet_4_new:
|
||||
play_note NOTE_SAVE
|
||||
mov eax, 1
|
||||
mov [bullet_4_pos], eax
|
||||
mov eax, [next_bullet_side]
|
||||
mov [bullet_4_side], eax
|
||||
jmp check_bullet_hit
|
||||
|
||||
check_bullet_hit:
|
||||
mov eax, [bullet_1_pos]
|
||||
cmp eax, 5
|
||||
jz bullet_1_hit
|
||||
mov eax, [bullet_2_pos]
|
||||
cmp eax, 5
|
||||
jz bullet_2_hit
|
||||
mov eax, [bullet_3_pos]
|
||||
cmp eax, 5
|
||||
jz bullet_3_hit
|
||||
mov eax, [bullet_4_pos]
|
||||
cmp eax, 5
|
||||
jz bullet_4_hit
|
||||
jmp game_loop
|
||||
|
||||
bullet_1_hit:
|
||||
mov eax, [bullet_1_side]
|
||||
cmp eax, [shield_position]
|
||||
jz save
|
||||
jmp damage
|
||||
bullet_2_hit:
|
||||
mov eax, [bullet_2_side]
|
||||
cmp eax, [shield_position]
|
||||
jz save
|
||||
jmp damage
|
||||
bullet_3_hit:
|
||||
mov eax, [bullet_3_side]
|
||||
cmp eax, [shield_position]
|
||||
jz save
|
||||
jmp damage
|
||||
bullet_4_hit:
|
||||
mov eax, [bullet_4_side]
|
||||
cmp eax, [shield_position]
|
||||
jz save
|
||||
jmp damage
|
||||
|
||||
damage:
|
||||
mov eax, [health]
|
||||
sub eax, BULLET_DAMAGE
|
||||
mov [health], eax
|
||||
play_note NOTE_DAMAGE
|
||||
jmp game_loop
|
||||
save:
|
||||
mov eax, [health]
|
||||
add eax, HEALTH_BONUS
|
||||
mov [health], eax
|
||||
play_note NOTE_SAVE
|
||||
jmp game_loop
|
||||
|
||||
skin_height dd 0
|
||||
shield_position dd SE
|
||||
finish_draw dd 1 ; 0 -- finish, 1 -- start
|
||||
next_bullet_side_prng dd 3
|
||||
next_bullet_side dd SE
|
||||
bullet_1_pos dd 1
|
||||
bullet_2_pos dd 2
|
||||
bullet_3_pos dd 3
|
||||
bullet_4_pos dd 4
|
||||
bullet_1_side dd NW
|
||||
bullet_2_side dd SW
|
||||
bullet_3_side dd NE
|
||||
bullet_4_side dd SE
|
||||
bullet_pos dd 1 ; nearest to the gun
|
||||
bullet_side dd NW
|
||||
cur_bullet dd NW
|
||||
delays_cnt dd 1
|
||||
health dd HEALTH_INIT
|
||||
delay dd DELAY_INIT
|
||||
game_started dd 0
|
||||
speaker:
|
||||
.duration db 0x90
|
||||
.note db 0x30
|
||||
.end db 0x00
|
||||
pic_bg:
|
||||
file 'picture_bg.rgba'
|
||||
pic_shield_sw:
|
||||
file 'shield_sw.rgb'
|
||||
pic_shield_nw:
|
||||
file 'shield_nw.rgb'
|
||||
pic_shield_ne:
|
||||
file 'shield_ne.rgb'
|
||||
pic_shield_se:
|
||||
file 'shield_se.rgb'
|
||||
_pic_bullet_off:
|
||||
file 'bullet_off.rgb'
|
||||
_pic_bullet_on:
|
||||
file 'bullet_on.rgb'
|
||||
sz msg_copyright, '(c) 2009 CH@YKIN EVGENY'
|
||||
msg_new_game cp866 '1 новая игра'
|
||||
msg_new_game.size = $ - msg_new_game
|
||||
msg_continue cp866 '2 продолжить'
|
||||
msg_continue.size = $ - msg_continue
|
||||
msg_you_lost cp866 ' вы проиграли'
|
||||
msg_you_lost.size = $ - msg_you_lost
|
||||
msg_you_won cp866 'ПОБЕДА :)'
|
||||
msg_you_won.size = $ - msg_you_won
|
||||
msg_control_by_numpad cp866 'Управление клавишами NumLock клавиатуры'
|
||||
msg_control_by_numpad.size = $ - msg_control_by_numpad
|
||||
msg_controls cp866 ' 1, 4, 6, 3 и пауза Р(Eng). x'
|
||||
msg_controls.size = $ - msg_controls
|
||||
palette:
|
||||
file 'palette.rgba'
|
||||
|
||||
sz msg_ataka, 'ATAKA'
|
||||
window_title db 'ATAKA V 1.0',0
|
||||
I_END:
|
||||
sys_colors system_colors
|
||||
rb 0x80d
|
||||
stacktop:
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user