mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-03-03 12:31:32 +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
|
||||
the ones we can't cast
|
||||
- adjust color of fight background based on ground color
|
||||
- enemy can attack
|
||||
- randomize/generic enemy
|
||||
- get limit timer working properly
|
||||
- handle dying properly (game over at bottom of screen)
|
||||
+ load game support
|
||||
|
||||
|
||||
|
@ -20,6 +20,7 @@ do_battle:
|
||||
sta MENU_STATE
|
||||
sta MENU_POSITION
|
||||
sta ENEMY_DEAD
|
||||
sta ENEMY_ATTACKING
|
||||
|
||||
; FIXME: set limit break
|
||||
lda #3
|
||||
@ -233,7 +234,7 @@ done_battle_handle_dead:
|
||||
;========================================
|
||||
; delay for framerate
|
||||
|
||||
lda #20
|
||||
lda #50
|
||||
jsr WAIT
|
||||
|
||||
|
||||
@ -241,6 +242,9 @@ done_battle_handle_dead:
|
||||
;========================
|
||||
; handle enemy attacks
|
||||
|
||||
lda ENEMY_DEAD
|
||||
bne battle_done_enemy_attack
|
||||
|
||||
lda ENEMY_COUNT
|
||||
bne battle_no_enemy_attack
|
||||
battle_start_enemy_attack:
|
||||
@ -248,22 +252,11 @@ battle_start_enemy_attack:
|
||||
; attack and decrement HP
|
||||
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:
|
||||
dec ENEMY_COUNT
|
||||
|
||||
dec ENEMY_COUNT ; countdown until attack
|
||||
|
||||
battle_done_enemy_attack:
|
||||
|
||||
;===============================
|
||||
; handle battle counter
|
||||
|
@ -37,17 +37,17 @@ draw_hero_victory:
|
||||
;============================
|
||||
; draw hero down
|
||||
;============================
|
||||
; draws at HERO_X-2,24
|
||||
; draws at HERO_X-2,26
|
||||
|
||||
draw_hero_down:
|
||||
|
||||
; grsim_put_sprite(tfv_defeat,ax-2,24);
|
||||
; grsim_put_sprite(tfv_defeat,ax-2,26);
|
||||
|
||||
lda HERO_X
|
||||
sec
|
||||
sbc #2
|
||||
sta XPOS
|
||||
lda #24
|
||||
lda #26
|
||||
sta YPOS
|
||||
|
||||
lda #<tfv_defeat_sprite
|
||||
|
@ -217,49 +217,107 @@ damage_enemy_done:
|
||||
;===============================
|
||||
enemy_attack:
|
||||
|
||||
; int ax=enemy_x;
|
||||
; int damage=10;
|
||||
lda #$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
|
||||
; occasionally attack with that enemy's power?
|
||||
; occasionally heal self?
|
||||
; put attack name on
|
||||
; occasionally attack with that enemy's power?
|
||||
; occasionally heal self?
|
||||
|
||||
; gr_copy_to_current(0xc00);
|
||||
;======================
|
||||
; copy over background
|
||||
|
||||
; draw first so behind enemy
|
||||
; grsim_put_sprite(tfv_stand_left,tfv_x,20);
|
||||
; grsim_put_sprite(tfv_led_sword,tfv_x-5,20);
|
||||
jsr gr_copy_to_current
|
||||
|
||||
; if (ax&1) {
|
||||
; grsim_put_sprite(enemies[enemy_type].sprite,ax,20);
|
||||
; }
|
||||
; else {
|
||||
; grsim_put_sprite(enemies[enemy_type].sprite,ax,20);
|
||||
; }
|
||||
; draw hero first so behind enemy
|
||||
|
||||
; 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);
|
||||
; }
|
||||
; enemy_attacking=0;
|
||||
jsr draw_battle_bottom
|
||||
|
||||
; damage_tfv(damage);
|
||||
; gr_put_num(25,10,damage);
|
||||
; draw_battle_bottom(enemy_type);
|
||||
;============
|
||||
; page flip
|
||||
|
||||
; page_flip();
|
||||
; usleep(250000);
|
||||
jsr page_flip
|
||||
|
||||
; 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
|
||||
|
||||
|
@ -35,9 +35,18 @@ frame_no_oflo:
|
||||
; print current enemy attack
|
||||
; only if attacking
|
||||
|
||||
; if (enemy_attacking) {
|
||||
; print_inverse(enemies[enemy_type].attack_name);
|
||||
; }
|
||||
lda ENEMY_ATTACKING
|
||||
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
|
||||
@ -105,7 +114,7 @@ draw_battle_menu_none:
|
||||
; make limit label flash if at limit break
|
||||
|
||||
lda HERO_LIMIT
|
||||
cmp #4
|
||||
cmp #5
|
||||
bcc plain_limit
|
||||
jsr flash_text
|
||||
plain_limit:
|
||||
@ -174,17 +183,9 @@ draw_battle_menu_main:
|
||||
|
||||
; wrap location
|
||||
lda HERO_LIMIT
|
||||
cmp #3
|
||||
bcs limit3_wrap ; bge
|
||||
limit4_wrap:
|
||||
lda MENU_POSITION
|
||||
cmp #4
|
||||
bcc done_menu_wrap
|
||||
lda #4
|
||||
sta MENU_POSITION
|
||||
bne done_menu_wrap ; bra
|
||||
|
||||
limit3_wrap:
|
||||
bcs limit4_wrap ; bge
|
||||
limit5_wrap:
|
||||
lda MENU_POSITION
|
||||
cmp #5
|
||||
bcc done_menu_wrap
|
||||
@ -192,6 +193,14 @@ limit3_wrap:
|
||||
sta MENU_POSITION
|
||||
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:
|
||||
|
||||
lda #<battle_menu_main
|
||||
@ -242,7 +251,7 @@ print_menu_escape:
|
||||
|
||||
|
||||
lda HERO_LIMIT
|
||||
cmp #4
|
||||
cmp #5
|
||||
bcc done_battle_draw_menu_main ; only draw if limit >=4
|
||||
|
||||
cpx #MENU_MAIN_LIMIT
|
||||
@ -867,7 +876,24 @@ update_hero_hp:
|
||||
sta OUTH
|
||||
|
||||
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
|
||||
update_hero_hp_bottom_byte:
|
||||
lda HERO_HP_LO
|
||||
|
@ -164,6 +164,7 @@ MAGIC_Y = $D2
|
||||
FINGER_DIRECTION= $D3
|
||||
ENEMY_DEAD = $D4
|
||||
MAGIC_COST = $D5
|
||||
ENEMY_ATTACKING = $D6
|
||||
|
||||
COLOR1 = $E0
|
||||
COLOR2 = $E1
|
||||
|
Loading…
x
Reference in New Issue
Block a user