mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-15 16:29:41 +00:00
tfv: enemy can fight back
This commit is contained in:
parent
9161646c39
commit
039bd80bc7
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user