;============================ ; draw hero victory ;============================ ; draws at HERO_X,HERO_Y draw_hero_victory: lda HERO_X sta XPOS lda HERO_Y sta YPOS lda #tfv_victory_sprite sta INH jsr put_sprite_crop lda HERO_X sec sbc #2 sta XPOS lda #14 sta YPOS lda #tfv_led_sword_sprite sta INH jmp put_sprite_crop ; tail call ;============================ ; draw hero down ;============================ ; draws at HERO_X-2,26 draw_hero_down: ; grsim_put_sprite(tfv_defeat,ax-2,26); lda HERO_X sec sbc #2 sta XPOS lda #26 sta YPOS lda #tfv_defeat_sprite sta INH jmp put_sprite_crop ; tail call ;============================ ; draw hero walk and sword ;============================ ; draws at HERO_X,HERO_Y draw_hero_walk_and_sword: lda HERO_X sta XPOS lda HERO_Y sta YPOS lda #tfv_walk_left_sprite sta INH jsr put_sprite_crop jmp draw_sword ;============================ ; draw hero and sword ;============================ ; draws at HERO_X,HERO_Y draw_hero_and_sword: jsr draw_hero jmp draw_sword ;========== ; draw hero ;========== ; draws at HERO_X,HERO_Y draw_hero: lda HERO_X sta XPOS lda HERO_Y sta YPOS lda #tfv_stand_left_sprite sta INH jmp put_sprite_crop ;=========== ; draw sword ;=========== ; draws at HERO_X,HERO_Y draw_sword: ; grsim_put_sprite(tfv_led_sword,ax-5,20); lda HERO_X sec sbc #5 sta XPOS lda HERO_Y sta YPOS lda #tfv_led_sword_sprite sta INH jmp put_sprite_crop ; tail call ;============================ ; draw battle hero and sword ;============================ ; bounces in readiness ; draws at HERO_X,HERO_Y draw_battle_hero_and_sword: lda HERO_X sta XPOS lda HERO_Y sta YPOS lda FRAMEL and #$8 beq hero_bounce1 hero_bounce2: lda #tfv_battle1_sprite sta INH jsr put_sprite_crop hero_sword2: ; grsim_put_sprite(tfv_led_sword,ax-5,20); lda HERO_X sec sbc #5 sta XPOS lda HERO_Y ; clc ; adc #2 sta YPOS lda #tfv_led_sword_sprite sta INH jmp put_sprite_crop ; tail call hero_bounce1: lda #tfv_battle2_sprite sta INH jsr put_sprite_crop hero_sword1: ; grsim_put_sprite(tfv_led_sword,ax-5,20); lda HERO_X sec sbc #5 sta XPOS lda HERO_Y clc adc #2 sta YPOS lda #tfv_led_sword2_sprite sta INH jmp put_sprite_crop ; tail call ;=================== ; heal hero ;=================== ; heal amount in DAMAGE_VAL_LO/DAMAGE_VAL_HI (yes, I know) heal_hero: sed clc lda HERO_HP_LO adc DAMAGE_VAL_LO sta HERO_HP_LO lda HERO_HP_HI adc DAMAGE_VAL_HI sta HERO_HP_HI cld ; see if new HP is too high lda HERO_HP_HI cmp HERO_LEVEL bcc health_is_good ; if hp_h < max_h then hp_total < max_total bne health_too_high ; if hp_h <> max_h, then hp_total > max_total lda HERO_HP_LO ; compare low bytes cmp #0 bcc health_is_good ; if hp_l < max_l then hp_total < max_total health_too_high: lda HERO_LEVEL sta HERO_HP_HI lda #0 sta HERO_HP_LO health_is_good: jsr update_hero_hp_menu rts ;======================== ; damage hero ;======================== ; value in DAMAGE_VAL_LO/HI damage_hero: lda DAMAGE_VAL_HI ; compare high bytes cmp HERO_HP_HI bcc damage_hero_do_sub ; if damage_hihp_hi then too hi lda DAMAGE_VAL_LO ; compare low bytes cmp HERO_HP_LO bcc damage_hero_do_sub ; if damage_lo