tfv: let you select target of attacks

This commit is contained in:
Vince Weaver 2021-01-17 20:11:21 -05:00
parent b249df66fa
commit 09ad61c229
4 changed files with 230 additions and 48 deletions

View File

@ -1,6 +1,24 @@
;===================
; Selection Pointers
;===================
finger_left_sprite:
.byte 6,4
.byte $AA,$AA,$AA,$AB,$BA,$AA
.byte $BB,$BB,$BB,$BB,$BB,$BB
.byte $AA,$AA,$BB,$BB,$BB,$BB
.byte $AA,$AA,$AB,$BB,$BB,$AB
finger_right_sprite:
.byte 6,4
.byte $AA,$BA,$AB,$AA,$AA,$AA
.byte $BB,$BB,$BB,$BB,$BB,$BB
.byte $BB,$BB,$BB,$BB,$AA,$AA
.byte $AB,$BB,$BB,$AB,$AA,$AA
;=========
; Enemies
;==========
;=========
killer_crab_sprite:
.byte $9,$6

View File

@ -12,7 +12,7 @@ magic_attack:
lda #$15
sta DAMAGE_VAL
lda MENU_POSITION
lda MAGIC_TYPE
cmp #MENU_MAGIC_HEAL
beq do_magic_heal
cmp #MENU_MAGIC_FIRE
@ -75,9 +75,6 @@ done_magic_setup:
cast_the_magic:
lda MENU_POSITION
sta MAGIC_TYPE
lda #10
sta ANIMATE_LOOP

View File

@ -55,7 +55,9 @@ draw_battle_bottom:
; set up jump table fakery
handle_special:
ldy MENU_STATE
lda MENU_STATE
and #$7f ; mask off Finger state
tay
lda battle_menu_jump_table_h,Y
pha
lda battle_menu_jump_table_l,Y
@ -393,6 +395,44 @@ print_menu_zap:
done_draw_battle_menu:
;==============================
; draw finger (when applicable)
lda MENU_STATE ; MENU finger is top bit
bpl done_draw_finger
lda FINGER_DIRECTION
bne draw_finger_left
draw_finger_right:
lda #20
sta XPOS
lda #20
sta YPOS
lda #<finger_right_sprite
sta INL
lda #>finger_right_sprite
sta INH
jsr put_sprite_crop
jmp done_draw_finger
draw_finger_left:
lda #12
sta XPOS
lda #20
sta YPOS
lda #<finger_left_sprite
sta INL
lda #>finger_left_sprite
sta INH
jsr put_sprite_crop
done_draw_finger:
;========================
; Draw inverse separator
@ -461,12 +501,96 @@ done_bar:
;=========================
;=========================
; battle menu keypress
;=========================
;=========================
; FIXME: help, toggle-sound?
battle_menu_keypress:
lda MENU_STATE
bpl battle_menu_nofinger_keypress
battle_menu_finger_keypress:
lda LAST_KEY
cmp #27
beq finger_escape
cmp #' '
beq finger_action
cmp #13
beq finger_action
cmp #'A'
beq finger_left
cmp #'D'
beq finger_right
; jmp to common routines for others?
rts
finger_escape:
lda MENU_STATE
and #$7f
sta MENU_STATE
rts
finger_left:
lda #1
sta FINGER_DIRECTION
rts
finger_right:
lda #0h
sta FINGER_DIRECTION
rts
finger_action:
lda MENU_SUBMENU
cmp #MENU_MAIN_ATTACK
beq finger_attack_action
cmp #MENU_MAIN_MAGIC
beq finger_magic_action
cmp #MENU_MAIN_LIMIT
beq finger_limit_action
cmp #MENU_MAIN_SUMMON
beq finger_summon_action
brk
finger_attack_action:
lda #0
sta MENU_STATE
; attack and decrement HP
jsr attack
jsr done_attack
rts
finger_magic_action:
lda #0
sta MENU_STATE
jsr magic_attack
jsr done_attack
rts
finger_limit_action:
lda #0
sta MENU_STATE
jsr limit_break
jsr done_attack
rts
finger_summon_action:
lda #0
sta MENU_STATE
jsr summon
jsr done_attack
rts
battle_menu_nofinger_keypress:
lda LAST_KEY
cmp #27
@ -568,7 +692,6 @@ keypress_action:
cmp #MENU_SUMMON
beq keypress_summon_action
;============================
; handle action on main menu
keypress_main_action:
@ -586,11 +709,16 @@ keypress_main_action:
cmp #MENU_MAIN_ESCAPE
beq keypress_main_escape
keypress_main_attack:
; attack and decrement HP
jsr attack
jsr done_attack
rts
; move to finger mode
; pointing left
; MENU_MAIN_ATTACK should be in A
sta MENU_SUBMENU
jmp keypress_activate_finger_left
keypress_main_skip:
jsr done_attack
@ -625,24 +753,53 @@ keypress_main_escape:
jsr done_attack
rts
keypress_magic_action:
jsr magic_attack
jsr done_attack
rts
keypress_summon_action:
lda #MENU_MAIN_SUMMON
sta MENU_SUBMENU
lda MENU_POSITION
sta MAGIC_TYPE
jmp keypress_activate_finger_left
keypress_limit_action:
jsr limit_break
jsr done_attack
rts
lda #MENU_MAIN_LIMIT
sta MENU_SUBMENU
lda MENU_POSITION
sta MAGIC_TYPE
jmp keypress_activate_finger_left
keypress_magic_action:
lda #MENU_MAIN_MAGIC
sta MENU_SUBMENU
lda MENU_POSITION
sta MAGIC_TYPE
cmp #MENU_MAGIC_HEAL
bne keypress_magic_action_noheal
jmp keypress_activate_finger_right
keypress_magic_action_noheal:
jmp keypress_activate_finger_left
keypress_activate_finger_right:
lda #0
beq keypress_activate_finger
keypress_activate_finger_left:
; move to finger mode
; pointing left
lda #1
keypress_activate_finger:
sta FINGER_DIRECTION
lda MENU_STATE
ora #MENU_FINGER
sta MENU_STATE
keypress_summon_action:
jsr summon
jsr done_attack
rts
;=============================
; done attack
;=============================
@ -721,26 +878,33 @@ battle_menu_limit:
.byte 24,21,"SLICE",0 ; 0
.byte 24,22,"DROP",0 ; 2
.byte 31,21,"ZAP",0 ; 1
;
; ATTACK SKIP
; MAGIC LIMIT
; SUMMON ESCAPE
;
; SUMMONS -> METROCAT VORTEXCN
; MAGIC -> HEAL FIRE
; ICE MALAISE
; BOLT
; LIMIT -> SLICE ZAP
; DROP
;
; Main Menu
; ATTACK SKIP
; MAGIC ESCAPE
; SUMMON LIMIT
; Magic Menu
; HEAL FIRE
; ICE MALAISE
; BOLT
; Summon Menu
; METROCAT
; VORTEXCN
; Limit Menu
; SLICE ZAP
; DROP
; State Machine
;
; time
; BOTTOM -------> MAIN_MENU ----->ATTACK
; BOTTOM -------> MAIN_MENU ----->ATTACK--------------->FINGER
; ------->SKIP
; ------->MAGIC_MENU
; ------->LIMIT_MENU
; ------->SUMMON_MENU
; ------->MAGIC->MAGIC_MENU---->FINGER
; ------->LIMIT->LIMIT_MENU---->FINGER
; ------->SUMMON->SUMMON_MENU-->FINGER
; ------->ESCAPE
;
;

View File

@ -117,20 +117,23 @@ ENEMY_TYPE = $B4 ; used in battle
ENEMY_HP = $B5 ; enemy hitpoints
ENEMY_X = $B6 ; enemy X position
ENEMY_COUNT = $B7 ; enemy countdown to attack
MENU_STATE = $B8 ; battle menu state
MENU_POSITION = $B8
MENU_STATE = $B9 ; battle menu state
MENU_NONE = 0
MENU_MAIN = 1
MENU_MAGIC = 2
MENU_SUMMON = 3
MENU_LIMIT = 4
MENU_POSITION = $B9
MENU_FINGER = $80
MENU_SUBMENU = $BA
MENU_MAIN_ATTACK = 0
MENU_MAIN_SKIP = 1
MENU_MAIN_MAGIC = 2
MENU_MAIN_ESCAPE = 3
MENU_MAIN_SUMMON = 4
MENU_MAIN_LIMIT = 5
MAGIC_TYPE = $BB ; same as below
MENU_TYPE = $BB ; same as above
MENU_SUMMON_METROCAT = 0
MENU_SUMMON_VORTEX = 1
@ -144,11 +147,11 @@ MENU_POSITION = $B9
MENU_LIMIT_ZAP = 1
MENU_LIMIT_DROP = 2
LAST_KEY = $BA
DAMAGE_VAL = $BB
MAGIC_X = $BC
MAGIC_Y = $BD
MAGIC_TYPE = $BE
LAST_KEY = $BC
DAMAGE_VAL = $BD
MAGIC_X = $BE
MAGIC_Y = $BF
FINGER_DIRECTION= $C0
COLOR1 = $E0
COLOR2 = $E1