tfv: enemy can fight back

This commit is contained in:
Vince Weaver 2021-01-19 00:32:10 -05:00
parent 9161646c39
commit 039bd80bc7
6 changed files with 144 additions and 65 deletions

View File

@ -8,8 +8,9 @@ short-term:
- if not enough magic points, grey out? somehow - if not enough magic points, grey out? somehow
the ones we can't cast the ones we can't cast
- adjust color of fight background based on ground color - adjust color of fight background based on ground color
- enemy can attack - randomize/generic enemy
- get limit timer working properly - get limit timer working properly
- handle dying properly (game over at bottom of screen)
+ load game support + load game support

View File

@ -20,6 +20,7 @@ do_battle:
sta MENU_STATE sta MENU_STATE
sta MENU_POSITION sta MENU_POSITION
sta ENEMY_DEAD sta ENEMY_DEAD
sta ENEMY_ATTACKING
; FIXME: set limit break ; FIXME: set limit break
lda #3 lda #3
@ -233,7 +234,7 @@ done_battle_handle_dead:
;======================================== ;========================================
; delay for framerate ; delay for framerate
lda #20 lda #50
jsr WAIT jsr WAIT
@ -241,6 +242,9 @@ done_battle_handle_dead:
;======================== ;========================
; handle enemy attacks ; handle enemy attacks
lda ENEMY_DEAD
bne battle_done_enemy_attack
lda ENEMY_COUNT lda ENEMY_COUNT
bne battle_no_enemy_attack bne battle_no_enemy_attack
battle_start_enemy_attack: battle_start_enemy_attack:
@ -248,22 +252,11 @@ battle_start_enemy_attack:
; attack and decrement HP ; attack and decrement HP
jsr enemy_attack jsr enemy_attack
; update limit count
; max out at 4
lda HERO_LIMIT
cmp #4
beq battle_no_inc_limit
inc HERO_LIMIT
battle_no_inc_limit:
; reset enemy time. FIXME: variable?
lda #50
sta ENEMY_COUNT
battle_no_enemy_attack: battle_no_enemy_attack:
dec ENEMY_COUNT
dec ENEMY_COUNT ; countdown until attack
battle_done_enemy_attack:
;=============================== ;===============================
; handle battle counter ; handle battle counter

View File

@ -37,17 +37,17 @@ draw_hero_victory:
;============================ ;============================
; draw hero down ; draw hero down
;============================ ;============================
; draws at HERO_X-2,24 ; draws at HERO_X-2,26
draw_hero_down: draw_hero_down:
; grsim_put_sprite(tfv_defeat,ax-2,24); ; grsim_put_sprite(tfv_defeat,ax-2,26);
lda HERO_X lda HERO_X
sec sec
sbc #2 sbc #2
sta XPOS sta XPOS
lda #24 lda #26
sta YPOS sta YPOS
lda #<tfv_defeat_sprite lda #<tfv_defeat_sprite

View File

@ -217,49 +217,107 @@ damage_enemy_done:
;=============================== ;===============================
enemy_attack: enemy_attack:
; int ax=enemy_x; lda #$10
; int damage=10; sta DAMAGE_VAL_LO
lda #$00
sta DAMAGE_VAL_HI
; enemy_attacking=1; lda #1
sta ENEMY_ATTACKING
; while(ax<30) { enemy_attack_loop:
; put attack name on ; put attack name on
; occasionally attack with that enemy's power? ; occasionally attack with that enemy's power?
; occasionally heal self? ; occasionally heal self?
; gr_copy_to_current(0xc00); ;======================
; copy over background
; draw first so behind enemy jsr gr_copy_to_current
; grsim_put_sprite(tfv_stand_left,tfv_x,20);
; grsim_put_sprite(tfv_led_sword,tfv_x-5,20);
; if (ax&1) { ; draw hero first so behind enemy
; grsim_put_sprite(enemies[enemy_type].sprite,ax,20);
; }
; else {
; grsim_put_sprite(enemies[enemy_type].sprite,ax,20);
; }
; draw_battle_bottom(enemy_type); jsr draw_hero_and_sword
; page_flip(); ; draw enemy
lda ENEMY_X
sta XPOS
lda #20
sta YPOS
jsr draw_enemy
; ax+=1; ;============
; draw bottom
; usleep(20000); jsr draw_battle_bottom
; }
; enemy_attacking=0;
; damage_tfv(damage); ;============
; gr_put_num(25,10,damage); ; page flip
; draw_battle_bottom(enemy_type);
; page_flip(); jsr page_flip
; usleep(250000);
; return damage; ;============
;} ; delay a bit
lda #50
jsr WAIT
inc ENEMY_X
lda ENEMY_X
cmp #30
bcc enemy_attack_loop
enemy_done_charging:
; damage the hero
jsr damage_hero
; update limit count
; max out at 5
lda HERO_LIMIT
cmp #5
beq battle_no_inc_limit
inc HERO_LIMIT
battle_no_inc_limit:
; print damage
lda #25
sta XPOS
lda #10
sta YPOS
jsr gr_put_num
; draw bottom
jsr draw_battle_bottom
; flip page
jsr page_flip
; wait 1s
ldx #100
jsr long_wait
done_enemy_attack:
; done attacking
lda #0
sta ENEMY_ATTACKING
; move back to left
lda #0
sta ENEMY_X
; reset enemy time. FIXME: variable?
lda #100
sta ENEMY_COUNT
rts rts

View File

@ -35,9 +35,18 @@ frame_no_oflo:
; print current enemy attack ; print current enemy attack
; only if attacking ; only if attacking
; if (enemy_attacking) { lda ENEMY_ATTACKING
; print_inverse(enemies[enemy_type].attack_name); beq done_print_enemy_attack
; }
jsr inverse_text
lda #<battle_enemy_attack_string
sta OUTL
lda #>battle_enemy_attack_string
sta OUTH
jsr move_and_print
jsr normal_text
done_print_enemy_attack:
;======================= ;=======================
; print hero name string ; print hero name string
@ -105,7 +114,7 @@ draw_battle_menu_none:
; make limit label flash if at limit break ; make limit label flash if at limit break
lda HERO_LIMIT lda HERO_LIMIT
cmp #4 cmp #5
bcc plain_limit bcc plain_limit
jsr flash_text jsr flash_text
plain_limit: plain_limit:
@ -174,17 +183,9 @@ draw_battle_menu_main:
; wrap location ; wrap location
lda HERO_LIMIT lda HERO_LIMIT
cmp #3
bcs limit3_wrap ; bge
limit4_wrap:
lda MENU_POSITION
cmp #4 cmp #4
bcc done_menu_wrap bcs limit4_wrap ; bge
lda #4 limit5_wrap:
sta MENU_POSITION
bne done_menu_wrap ; bra
limit3_wrap:
lda MENU_POSITION lda MENU_POSITION
cmp #5 cmp #5
bcc done_menu_wrap bcc done_menu_wrap
@ -192,6 +193,14 @@ limit3_wrap:
sta MENU_POSITION sta MENU_POSITION
bne done_menu_wrap ; bra bne done_menu_wrap ; bra
limit4_wrap:
lda MENU_POSITION
cmp #6
bcc done_menu_wrap
lda #6
sta MENU_POSITION
bne done_menu_wrap ; bra
done_menu_wrap: done_menu_wrap:
lda #<battle_menu_main lda #<battle_menu_main
@ -242,7 +251,7 @@ print_menu_escape:
lda HERO_LIMIT lda HERO_LIMIT
cmp #4 cmp #5
bcc done_battle_draw_menu_main ; only draw if limit >=4 bcc done_battle_draw_menu_main ; only draw if limit >=4
cpx #MENU_MAIN_LIMIT cpx #MENU_MAIN_LIMIT
@ -867,7 +876,24 @@ update_hero_hp:
sta OUTH sta OUTH
lda HERO_HP_HI lda HERO_HP_HI
beq update_hero_hp_bottom_byte bne update_hero_hp_top_byte
lda #' '|$80
ldy #0
sta (OUTL),Y
iny
sta (OUTL),Y
lda OUTL
clc
adc #2
sta OUTL
lda OUTH
adc #0
sta OUTH
jmp update_hero_hp_bottom_byte
update_hero_hp_top_byte:
jsr convert_bcd_to_string jsr convert_bcd_to_string
update_hero_hp_bottom_byte: update_hero_hp_bottom_byte:
lda HERO_HP_LO lda HERO_HP_LO

View File

@ -164,6 +164,7 @@ MAGIC_Y = $D2
FINGER_DIRECTION= $D3 FINGER_DIRECTION= $D3
ENEMY_DEAD = $D4 ENEMY_DEAD = $D4
MAGIC_COST = $D5 MAGIC_COST = $D5
ENEMY_ATTACKING = $D6
COLOR1 = $E0 COLOR1 = $E0
COLOR2 = $E1 COLOR2 = $E1