tfv: can summon metrocat

This commit is contained in:
Vince Weaver 2021-01-13 15:17:15 -05:00
parent d6cdf30217
commit 1e45c5688a
7 changed files with 467 additions and 168 deletions

View File

@ -66,7 +66,8 @@ TFV_WORLD: tfv_world.o
tfv_world.o: tfv_world.s zp.inc \
tfv_overworld.s tfv_drawmap.s tfv_battle.s \
help_overworld.s rotate_intro.s \
graphics_map/tfv_backgrounds.inc tfv_sprites.inc number_sprites.inc
graphics_map/tfv_backgrounds.inc \
tfv_sprites.inc battle_sprites.inc number_sprites.inc
ca65 -o tfv_world.o tfv_world.s -l tfv_world.lst
graphics_map/tfv_backgrounds.inc:

View File

@ -1,3 +1,6 @@
get metrocat by running across him on world map
enemy glow pink before dying
proper slowdown/delay in attack
simple sound effects when selecting menu
maybe gradients on backgrounds

View File

@ -0,0 +1,192 @@
;=========
; Enemies
;==========
killer_crab_sprite:
.byte $9,$6
.byte $99,$AA,$99,$AA,$AA,$AA,$99,$AA,$99
.byte $A6,$6A,$A6,$AA,$AA,$AA,$A6,$6A,$A6
.byte $AA,$A6,$4A,$49,$44,$49,$4A,$A6,$AA
.byte $A6,$A4,$44,$44,$44,$44,$44,$A4,$A6
.byte $AA,$6A,$A4,$64,$A4,$64,$A4,$6A,$AA
.byte $44,$AA,$4A,$A4,$AA,$A4,$4A,$AA,$44
plain_fish_sprite:
.byte $9,$6
.byte $6A,$AA,$A9,$69,$6A,$6A,$AA,$AA,$AA
.byte $64,$6A,$66,$66,$66,$66,$66,$6A,$AA
.byte $64,$66,$66,$66,$46,$66,$64,$66,$AA
.byte $64,$66,$66,$44,$66,$66,$66,$66,$ee
.byte $64,$66,$66,$66,$64,$66,$66,$6e,$A5
.byte $64,$AA,$A6,$66,$66,$66,$A6,$AA,$AA
evil_tree_sprite:
.byte $9,$6
.byte $8A,$44,$88,$44,$44,$44,$88,$44,$8A
.byte $48,$84,$84,$44,$44,$44,$84,$84,$48
.byte $A4,$A4,$44,$98,$88,$98,$44,$A4,$A4
.byte $AA,$A8,$A8,$88,$88,$88,$A8,$A8,$AA
.byte $AA,$AA,$AA,$88,$89,$88,$AA,$AA,$AA
.byte $AA,$AA,$AA,$88,$88,$88,$AA,$AA,$AA
wood_elf_sprite:
.byte $9,$6
.byte $AA,$AA,$AA,$AA,$dd,$bd,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$dd,$bb,$Ab,$AA,$AA
.byte $AA,$AA,$AA,$AA,$dd,$4b,$44,$AA,$AA
.byte $AA,$AA,$dA,$dd,$4d,$44,$AA,$AA,$AA
.byte $AA,$4A,$4d,$4d,$44,$b4,$AA,$AA,$AA
.byte $A4,$A4,$AA,$AA,$AA,$bb,$3A,$AA,$AA
giant_bee_sprite:
.byte $9,$6
.byte $AA,$6A,$eA,$AA,$AA,$AA,$AA,$AA,$8A
.byte $AA,$86,$66,$6e,$eA,$dA,$8A,$55,$AA
.byte $dd,$88,$88,$d6,$86,$d6,$88,$85,$AA
.byte $dd,$88,$88,$dd,$88,$dd,$d8,$55,$A6
.byte $Ad,$88,$88,$dd,$88,$dd,$Ad,$AA,$AA
.byte $5A,$A5,$AA,$5A,$A5,$AA,$A5,$5A,$AA
procrastinon_sprite:
.byte $9,$6
.byte $AA,$AA,$AA,$5A,$85,$88,$8A,$AA,$AA
.byte $AA,$AA,$55,$88,$88,$88,$88,$dd,$AA
.byte $AA,$AA,$55,$88,$88,$88,$88,$dd,$AA
.byte $AA,$AA,$A5,$88,$88,$88,$d8,$Ad,$AA
.byte $AA,$AA,$AA,$AA,$A8,$Ad,$AA,$AA,$AA
.byte $AA,$AA,$AA,$5A,$5A,$5A,$5A,$AA,$AA
ice_fish_sprite:
.byte $9,$6
.byte $1A,$AA,$A1,$71,$7A,$7A,$AA,$AA,$AA
.byte $17,$7A,$77,$77,$77,$77,$77,$7A,$AA
.byte $17,$77,$77,$77,$f7,$77,$71,$77,$AA
.byte $17,$77,$77,$ff,$77,$77,$77,$77,$55
.byte $17,$77,$77,$77,$7f,$77,$77,$75,$A1
.byte $17,$AA,$A7,$77,$77,$77,$A7,$AA,$AA
evil_penguin_sprite:
.byte $9,$6
.byte $AA,$AA,$AA,$AA,$AA,$5A,$5A,$AA,$AA
.byte $AA,$AA,$AA,$AA,$5A,$55,$7c,$cA,$AA
.byte $AA,$AA,$AA,$5A,$55,$77,$AA,$AA,$AA
.byte $AA,$AA,$AA,$77,$55,$77,$AA,$AA,$AA
.byte $AA,$AA,$55,$55,$77,$A7,$AA,$AA,$AA
.byte $AA,$AA,$AA,$cc,$cA,$AA,$AA,$AA,$AA
;===========
; Boss
;===========
roboknee1_sprite:
.byte $9,$b
.byte $55,$55,$b5,$AA,$AA,$AA,$AA,$AA,$AA
.byte $55,$bb,$bb,$Ab,$AA,$5A,$d5,$A5,$5A
.byte $A5,$b5,$Ab,$AA,$AA,$55,$dA,$Ad,$55
.byte $88,$88,$88,$AA,$AA,$5A,$A5,$A5,$AA
.byte $88,$88,$88,$A8,$Ab,$A5,$AA,$AA,$AA
.byte $88,$88,$88,$8A,$bA,$AA,$AA,$AA,$AA
.byte $58,$78,$78,$AA,$AA,$AA,$AA,$AA,$AA
.byte $55,$e1,$e7,$AA,$AA,$AA,$AA,$AA,$AA
.byte $55,$7e,$4e,$AA,$AA,$AA,$AA,$AA,$AA
.byte $f5,$A7,$f7,$AA,$AA,$AA,$AA,$AA,$AA
.byte $88,$88,$88,$88,$AA,$AA,$AA,$AA,$AA
roboknee2_sprite:
.byte $9,$b
.byte $55,$55,$b5,$AA,$AA,$5A,$d5,$A5,$5A
.byte $55,$bb,$bb,$Ab,$AA,$55,$dA,$Ad,$55
.byte $A5,$b5,$Ab,$AA,$AA,$5A,$A5,$A5,$AA
.byte $88,$88,$88,$8A,$bA,$A5,$AA,$AA,$AA
.byte $88,$88,$88,$A8,$Ab,$AA,$AA,$AA,$AA
.byte $88,$88,$88,$AA,$AA,$AA,$AA,$AA,$AA
.byte $58,$78,$78,$AA,$AA,$AA,$AA,$AA,$AA
.byte $55,$e1,$17,$eA,$AA,$AA,$AA,$AA,$AA
.byte $55,$7e,$Ae,$7e,$2e,$AA,$AA,$AA,$AA
.byte $f5,$A7,$AA,$87,$87,$AA,$AA,$AA,$AA
.byte $88,$88,$AA,$A8,$A8,$AA,$AA,$AA,$AA
;===========
; Summons
;===========
metrocat_sprite:
.byte $b,$9
.byte $88,$8A,$AA,$AA,$AA,$5A,$AA,$AA,$AA,$8A,$88
.byte $88,$58,$55,$88,$55,$55,$55,$88,$55,$58,$88
.byte $58,$55,$55,$55,$88,$55,$88,$55,$55,$55,$58
.byte $58,$55,$55,$55,$55,$55,$55,$55,$55,$55,$58
.byte $88,$dd,$00,$dd,$55,$75,$55,$dd,$00,$dd,$88
.byte $85,$55,$55,$55,$55,$77,$55,$55,$55,$55,$85
.byte $88,$55,$85,$55,$b5,$b7,$b5,$55,$85,$55,$88
.byte $AA,$55,$55,$f5,$ff,$8b,$ff,$f5,$55,$55,$AA
.byte $AA,$AA,$A5,$57,$f8,$f7,$f8,$57,$A5,$AA,$AA
vortex_cannon_sprite:
.byte $5,$7
.byte $88,$98,$98,$8A,$AA
.byte $dd,$d8,$89,$99,$88
.byte $dd,$dd,$d8,$98,$88
.byte $dd,$55,$dd,$99,$88
.byte $dd,$55,$dd,$99,$88
.byte $Ad,$dd,$dd,$99,$88
.byte $AA,$Ad,$dd,$89,$88
vortex_sprite:
.byte $3,$3
.byte $1A,$A1,$1A
.byte $11,$AA,$11
.byte $A1,$1A,$A1
magic_health_sprite:
.byte $5,$6
.byte $AA,$AA,$AE,$AA,$AC
.byte $AA,$Ae,$AA,$Ac,$AA
.byte $Ae,$AA,$Ac,$AA,$Ae
.byte $AA,$Ac,$AA,$Ae,$AA
.byte $Ac,$AA,$Ae,$AA,$Ac
.byte $AA,$Ae,$AA,$Ac,$AA
magic_fire_sprite:
.byte $5,$6
.byte $AA,$AA,$fA,$AA,$AA
.byte $fA,$AA,$ff,$AA,$fA
.byte $Af,$fA,$ff,$fA,$Af
.byte $AA,$ff,$fe,$ff,$AA
.byte $ff,$AA,$ff,$AA,$ff
.byte $AA,$AA,$ff,$AA,$AA
magic_ice_sprite:
.byte $5,$6
.byte $AA,$Ad,$dA,$AA,$AA
.byte $AA,$dd,$dd,$dd,$dA
.byte $dA,$dd,$9d,$dd,$dd
.byte $dd,$dd,$99,$99,$dd
.byte $AA,$99,$99,$99,$dd
.byte $AA,$Ad,$99,$99,$Ad
magic_bolt_sprite:
.byte $5,$6
.byte $55,$55,$55,$55,$55
.byte $A5,$A5,$d5,$A5,$A5
.byte $AA,$AA,$Ad,$dA,$AA
.byte $AA,$dA,$Ad,$dA,$AA
.byte $dA,$Ad,$AA,$Ad,$dA
.byte $Ad,$AA,$AA,$AA,$Ad
magic_malaise_sprite:
.byte $5,$6
.byte $AA,$5A,$5A,$5A,$AA
.byte $55,$52,$55,$52,$55
.byte $55,$55,$52,$55,$55
.byte $A5,$22,$52,$22,$A5
.byte $AA,$A5,$A5,$A5,$AA
.byte $AA,$AA,$AA,$AA,$AA

View File

@ -114,8 +114,9 @@ battle_draw_hero_down:
lda #<tfv_defeat_sprite
sta INL
lda #>tfv_defeat_sprite
jmp battle_actual_draw_hero
sta INH
jsr put_sprite_crop
jmp battle_done_draw_hero
battle_draw_hero_running:
@ -135,46 +136,22 @@ battle_draw_running_stand:
lda #<tfv_stand_right_sprite
sta INL
lda #>tfv_stand_right_sprite
jmp battle_actual_draw_hero
sta INH
jsr put_sprite_crop
jmp battle_done_draw_hero
battle_draw_running_walk:
lda #<tfv_walk_right_sprite
sta INL
lda #>tfv_walk_right_sprite
jmp battle_actual_draw_hero
sta INH
jsr put_sprite_crop
jmp battle_done_draw_hero
battle_draw_normal_hero:
; grsim_put_sprite(tfv_stand_left,ax,20);
lda HERO_X
sta XPOS
lda #20
sta YPOS
lda #<tfv_stand_left_sprite
sta INL
lda #>tfv_stand_left_sprite
sta INH
jsr put_sprite_crop
battle_draw_normal_sword:
; grsim_put_sprite(tfv_led_sword,ax-5,20);
lda HERO_X
sec
sbc #5
sta XPOS
lda #20
sta YPOS
lda #<tfv_led_sword_sprite
sta INL
lda #>tfv_led_sword_sprite
battle_actual_draw_hero:
sta INH
jsr put_sprite_crop
jsr draw_hero_and_sword
battle_done_draw_hero:
@ -1797,115 +1774,206 @@ limit_break:
sta HERO_LIMIT
rts
;========================
; summon metrocat
;========================
summon_metrocat:
lda #$17
sta DAMAGE_VAL
lda #28
sta MAGIC_X
lda #2
sta MAGIC_Y
;===========================
; draw looming metrocat head
lda #30
sta ANIMATE_LOOP
looming_metrocat_loop:
jsr gr_copy_to_current
; draw hero
lda #34
sta HERO_X
jsr draw_hero_and_sword
; draw enemy
lda ENEMY_X
sta XPOS
lda #20
sta YPOS
jsr draw_enemy
; draw metrocat's head
lda MAGIC_X
sta XPOS
lda MAGIC_Y
sta YPOS
lda #<metrocat_sprite
sta INL
lda #>metrocat_sprite
sta INH
jsr put_sprite_crop
; draw battle bottom
jsr draw_battle_bottom
jsr page_flip
lda #75
jsr WAIT ; delay a bit
dec ANIMATE_LOOP
bne looming_metrocat_loop
move_metrocat_loop:
jsr gr_copy_to_current
jsr draw_hero_and_sword
; draw enemy
lda ENEMY_X
sta XPOS
lda #20
sta YPOS
jsr draw_enemy
; draw metrocat's head
lda MAGIC_X
sta XPOS
lda MAGIC_Y
sta YPOS
lda #<metrocat_sprite
sta INL
lda #>metrocat_sprite
sta INH
jsr put_sprite_crop
; draw battle bottom
jsr draw_battle_bottom
jsr page_flip
lda #50 ; delay
jsr WAIT
dec MAGIC_X
lda MAGIC_X
cmp #15
bcs metrocat_no_move_y
; have to keep even
and #1
bne metrocat_no_move_y
inc MAGIC_Y
inc MAGIC_Y
metrocat_no_move_y:
lda MAGIC_X
cmp #5 ; move until X=5
bcs move_metrocat_loop
lda #30
sta ANIMATE_LOOP
metrocat_damage_loop:
jsr gr_copy_to_current
jsr draw_hero_and_sword
; draw enemy
lda ENEMY_X
sta XPOS
lda #20
sta YPOS
jsr draw_enemy
; draw metrocat's head
lda MAGIC_X
sta XPOS
lda MAGIC_Y
sta YPOS
lda #<metrocat_sprite
sta INL
lda #>metrocat_sprite
sta INH
jsr put_sprite_crop
jsr draw_battle_bottom
jsr page_flip
lda #50
jsr WAIT
dec ANIMATE_LOOP
bne metrocat_damage_loop
jsr gr_copy_to_current
; draw enemy
lda ENEMY_X
sta XPOS
lda #20
sta YPOS
jsr draw_enemy
; draw hero
jsr draw_hero_and_sword
; draw bottom
jsr draw_battle_bottom
jsr damage_enemy
lda #2
sta XPOS
lda #10
sta YPOS
jsr gr_put_num
jsr page_flip
; long wait (2s?)
ldx #200
jsr long_wait
rts
;=========================
; Vortex Cannon
;=========================
summon_vortex_cannon:
.if 0
static void summon_metrocat(void) {
int tx=34,ty=20;
int damage=100;
int i;
int ax=28,ay=2;
i=0;
while(i<30) {
gr_copy_to_current(0xc00);
grsim_put_sprite(tfv_stand_left,tx,ty);
grsim_put_sprite(tfv_led_sword,tx-5,ty);
; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
grsim_put_sprite(metrocat,ax,ay);
draw_battle_bottom(enemy_type);
page_flip();
i++;
usleep(20000);
}
while(ax>15) {
gr_copy_to_current(0xc00);
grsim_put_sprite(tfv_stand_left,tx,ty);
grsim_put_sprite(tfv_led_sword,tx-5,ty);
; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
grsim_put_sprite(metrocat,ax,ay);
draw_battle_bottom(enemy_type);
page_flip();
ax-=1;
usleep(20000);
}
while(ax>5) {
gr_copy_to_current(0xc00);
grsim_put_sprite(tfv_stand_left,tx,ty);
grsim_put_sprite(tfv_led_sword,tx-5,ty);
; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
grsim_put_sprite(metrocat,ax,ay);
draw_battle_bottom(enemy_type);
page_flip();
ay+=1;
ax-=1;
usleep(20000);
}
i=0;
while(i<30) {
gr_copy_to_current(0xc00);
grsim_put_sprite(tfv_stand_left,tx,ty);
grsim_put_sprite(tfv_led_sword,tx-5,ty);
; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
grsim_put_sprite(metrocat,ax,ay);
draw_battle_bottom(enemy_type);
page_flip();
i++;
usleep(20000);
}
gr_copy_to_current(0xc00);
; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
grsim_put_sprite(tfv_stand_left,tx,ty);
grsim_put_sprite(tfv_led_sword,tx-5,ty);
draw_battle_bottom(enemy_type);
damage_enemy(damage);
gr_put_num(2,10,damage);
page_flip();
for(i=0;i<20;i++) {
usleep(100000);
}
}
static void summon_vortex_cannon(void) {
int tx=34,ty=20;
int damage=5;
@ -1982,17 +2050,21 @@ static void summon_vortex_cannon(void) {
for(i=0;i<20;i++) {
usleep(100000);
}
}
.endif
rts
;=========================
; summon
;=========================
summon:
lda MENU_POSITION
beq do_summon_metrocat
bne do_summon_vortex_cannon
; if (which==0) summon_metrocat();
; else summon_vortex_cannon();
do_summon_metrocat:
jmp summon_metrocat
do_summon_vortex_cannon:
jmp summon_vortex_cannon
rts
@ -2178,6 +2250,54 @@ battle_actual_draw_enemy:
jmp put_sprite_crop ; tail call
;============================
; draw hero and sword
;============================
; draws at HERO_X,#20
draw_hero_and_sword:
lda HERO_X
sta XPOS
lda #20
sta YPOS
lda #<tfv_stand_left_sprite
sta INL
lda #>tfv_stand_left_sprite
sta INH
jsr put_sprite_crop
; grsim_put_sprite(tfv_led_sword,ax-5,20);
lda HERO_X
sec
sbc #5
sta XPOS
lda #20
sta YPOS
lda #<tfv_led_sword_sprite
sta INL
lda #>tfv_led_sword_sprite
sta INH
jsr put_sprite_crop
rts
;=====================
; long(er) wait
; waits approximately 10ms * X
long_wait:
lda #64
jsr WAIT ; delay 1/2(26+27A+5A^2) us, 11,117
dex
bne long_wait
rts
.if 0

View File

@ -79,27 +79,6 @@ tfv_victory_sprite:
;=========
; Enemies
;==========
killer_crab_sprite:
.byte $9,$6
.byte $99,$AA,$99,$AA,$AA,$AA,$99,$AA,$99
.byte $A6,$6A,$A6,$AA,$AA,$AA,$A6,$6A,$A6
.byte $AA,$A6,$4A,$49,$44,$49,$4A,$A6,$AA
.byte $A6,$A4,$44,$44,$44,$44,$44,$A4,$A6
.byte $AA,$6A,$A4,$64,$A4,$64,$A4,$6A,$AA
.byte $44,$AA,$4A,$A4,$AA,$A4,$4A,$AA,$44
plain_fish_sprite:
.byte $9,$6
.byte $6A,$AA,$A9,$69,$6A,$6A,$AA,$AA,$AA
.byte $64,$6A,$66,$66,$66,$66,$66,$6A,$AA
.byte $64,$66,$66,$66,$46,$66,$64,$66,$AA
.byte $64,$66,$66,$44,$66,$66,$66,$66,$ee
.byte $64,$66,$66,$66,$64,$66,$66,$6e,$A5
.byte $64,$AA,$A6,$66,$66,$66,$A6,$AA,$AA
;=======================
; Background Features
@ -171,3 +150,4 @@ lightning:
.byte $00,$00,$dd,$00,$dd,$00
.byte $00,$dd,$00,$00,$dd,$00
.byte $dd,$00,$00,$0d,$00,$dd

View File

@ -60,5 +60,6 @@
;===============================================
.include "tfv_sprites.inc"
.include "battle_sprites.inc"
.include "number_sprites.inc"
.include "graphics_map/tfv_backgrounds.inc"

View File

@ -145,6 +145,8 @@ MENU_POSITION = $B8
LAST_KEY = $B9
DAMAGE_VAL = $BA
MAGIC_X = $BB
MAGIC_Y = $BC
COLOR1 = $E0
COLOR2 = $E1