Cleanup Twinrova boss sprite

This commit is contained in:
scawful
2024-03-17 01:07:53 -04:00
parent 4fac78bbba
commit 2e22114d8a

View File

@@ -81,9 +81,7 @@ Sprite_Twinrova_Prep:
PHB : PHK : PLB
STZ $0D80, X
LDA.b #$40 : STA $0E50, X ; Health
LDA.b #$04 : STA $0CD2, X ; Bump damage type (4 hearts, green tunic)
%SetSpriteSpeedX(15)
@@ -92,12 +90,16 @@ Sprite_Twinrova_Prep:
LDA #$10 : STA $08
LDA #$10 : STA $09
; TODO: Setup the follower logic with a hook
; rather than dismissing the follower here.
LDA #$00 : STA $7EF3CC
PLB
RTL
}
; =========================================================
!AnimSpeed = 8
macro Twinrova_Front()
@@ -131,6 +133,8 @@ endmacro
; =========================================================
; Phase 0: Blind Maiden turns into Twinrova.
; Initially should be invisible, then
; transfer in Twinrova gfx and run dialogue.
;
; Phase 1: Twinrova is one entity, moving around the room
; and shooting fire and ice attacks at Link.
@@ -157,6 +161,7 @@ Sprite_Twinrova_Main:
dw Twinrova_KotakeMode ; 0x09
dw Twinrova_Dead ; 0x0A
; 0x00
Twinrova_Init:
{
; %Twinrova_Front()
@@ -165,6 +170,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x01
Twinrova_MoveState:
{
LDA $0E50, X : CMP.b #$20 : BCS .phase_1
@@ -210,6 +216,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x02 - TODO: Implement Twinrova_MoveForwards
Twinrova_MoveForwards:
{
%Twinrova_Front()
@@ -226,6 +233,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x03 - TODO: Implement Twinrova_MoveBackwards
Twinrova_MoveBackwards:
{
%Twinrova_Back()
@@ -242,6 +250,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x04
Twinrova_PrepareAttack:
{
%StartOnFrame(7)
@@ -293,6 +302,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x07
Twinrova_Hurt:
{
%StartOnFrame(10)
@@ -311,6 +321,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x08
Twinrova_KoumeMode:
{
%StartOnFrame(8)
@@ -330,6 +341,7 @@ Sprite_Twinrova_Main:
RTS
}
; 0x09
Twinrova_KotakeMode:
{
%StartOnFrame(9)
@@ -349,38 +361,33 @@ Sprite_Twinrova_Main:
RTS
}
; 0x0A
Twinrova_Dead:
{
%StartOnFrame(10)
%Twinrova_Hurt()
RTS
}
}
; =========================================================
Untitled_Garnish:
; Reused function from TrinexxBreath.
TrinexxBreath_AltEntry:
{
LDA $1A : AND.b #$03 : BNE .no_shake
JSL Sprite_IsToRightOfPlayer
LDA $0D50, X : CMP .x_speed_targets, Y : BEQ .no_shake
CLC : ADC.w $8000, Y : STA $0D50, X
.no_shake:
.no_shake
JSL Sprite_CheckTileCollision : BEQ .exit
JSL Sprite_BounceTowardPlayer
.exit
.exit
RTS
.x_speed_targets
.x_speed_targets
db 8, -16
}
@@ -388,117 +395,84 @@ Sprite_Twinrova_FireAttack:
{
JSL Sprite_CheckTileCollision : BNE .no_collision
JSL Sprite_Move
.no_collision
.no_collision
JSR Sprite_Twinrova_FireAttack_AddFireGarnish
JMP Untitled_Garnish
JMP TrinexxBreath_AltEntry
}
.AddFireGarnish
; $1DBDD6 - TrinexxFire_AddFireGarnish
AddFireGarnish:
{
INC $0E80, X : LDA $0E80, X : AND.b #$07 : BNE .return
LDA.b #$2A : JSL Sound_SetSfx2PanLong
LDA.b #$1D : PHX : TXY : TAX : STA $00
LDA.b #$1D
; *$EBDE8 ALTERNATE ENTRY POINT
PHX : TXY
TAX : STA $00
.next_slot
.next_slot
LDA $7FF800, X : BEQ .free_slot
DEX : BPL .next_slot
DEC $0FF8 : BPL .use_search_index
LDA $00 : STA $0FF8
.use_search_index
.use_search_index
LDX $0FF8
.free_slot
.free_slot
LDA.b #$10 : STA $7FF800, X : STA $0FB4
TYA : STA $7FF92C, X
LDA $0D10, Y : STA $7FF83C, X
LDA $0D30, Y : STA $7FF878, X
LDA $0D00, Y : CLC : ADC.b #$10 : STA $7FF81E, X
LDA $0D20, Y : ADC.b #$00 : STA $7FF85A, X
LDA SprX, Y : STA $7FF83C, X
LDA SprXH, Y : STA $7FF878, X
LDA SprY, Y : CLC : ADC.b #$10 : STA $7FF81E, X
LDA SprYH, Y : ADC.b #$00 : STA $7FF85A, X
LDA.b #$7F : STA $7FF90E, X
STX $00
PLX
.return
.return
RTS
}
; $1DBD65 - TrinexxBreath_ice_add_ice_garnish
AddIceGarnishV2:
{
INC $0E80, X : LDA $0E80, X : AND.b #$07 : BNE .return
LDA.b #$14 : JSL Sound_SetSfx3PanLong
LDA.b #$1D : PHX : TXY : TAX : STA $00
LDA.b #$1D
; *$EBDE8 ALTERNATE ENTRY POINT
PHX : TXY
TAX : STA $00
.next_slot
.next_slot
LDA $7FF800, X : BEQ .free_slot
DEX : BPL .next_slot
DEC $0FF8 : BPL .use_search_index
LDA.b #$00 : STA $0FF8
.use_search_index
.use_search_index
LDX $0FF8
.free_slot
.free_slot
LDA.b #$0C : STA $7FF800, X : STA $0FB4
TYA : STA $7FF92C, X
LDA $0D10, Y : STA $7FF83C, X
LDA $0D30, Y : STA $7FF878, X
LDA SprX, Y : STA $7FF83C, X
LDA SprXH, Y : STA $7FF878, X
LDA SprY, Y : CLC : ADC.b #$10 : STA $7FF81E, X
LDA SprYH, Y : ADC.b #$00 : STA $7FF85A, X
LDA $0D00, Y : CLC : ADC.b #$10 : STA $7FF81E, X
LDA $0D20, Y : ADC.b #$00 : STA $7FF85A, X
LDA.b #$7F : STA $7FF90E, X
STX $00
LDA.b #$7F : STA $7FF90E, X : STX $00
PLX
.return
.return
RTS
}
Sprite_Twinrova_IceAttack:
{
JSL Sprite_CheckTileCollision : BNE .no_collision
JSL Sprite_Move
.no_collision
JSR AddIceGarnishV2
JSR Untitled_Garnish
.return
RTS
JMP TrinexxBreath_AltEntry
}
; =========================================================
@@ -539,20 +513,15 @@ org $09B34F
Garnish_TrinexxIce:
{
; special animation 0x0C
LDA $7FF90E, X : LSR #2 : AND.b #$03 : TAY
LDA TrinexxIce_Pool_properties, Y : STA $04
JSR Garnish_PrepOamCoord
LDA $00 : STA ($90), Y
LDA $02 : INY : STA ($90), Y
LDA $7FF90E, X : LSR #5 : PHX : TAX
LDA TrinexxIce_Pool_chr, X : INY : STA ($90), Y
LDA.b #$35 : ORA $04 : PLX
JMP Garnish_SetOamPropsAndLargeSize
@@ -581,7 +550,7 @@ Sprite_Twinrova_Draw:
PHX
LDX .nbr_of_tiles, Y ;amount of tiles -1
LDY.b #$00
.nextTile
.nextTile
PHX ; Save current Tile Index?
@@ -603,7 +572,7 @@ Sprite_Twinrova_Draw:
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
STA $0E
.on_screen_y
.on_screen_y
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)
INY
@@ -632,75 +601,75 @@ Sprite_Twinrova_Draw:
; =========================================================
.start_index
db $00, $04, $08, $0C, $10, $14, $18, $1C, $22, $26, $2A, $2E
.nbr_of_tiles
db 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3
.x_offsets
dw -8, 8, 8, -8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -16, 0, 16, -16, 0, 16
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
.y_offsets
dw -8, -8, 8, 8
dw -7, -7, 9, 9
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -7, -7, 9, 9
dw -6, -6, 10, 10
dw -8, -8, -8, 8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -7, -7, 9, 9
.chr
db $00, $02, $22, $24
db $04, $06, $24, $26
db $08, $0A, $28, $2A
db $0C, $0E, $28, $2A
db $44, $46, $64, $66
db $48, $4A, $68, $6A
db $4C, $4E, $6C, $6E
db $88, $8A, $8C, $A8, $AA, $AC
db $80, $82, $A0, $A2
db $84, $86, $A4, $A6
db $40, $42, $60, $62
db $40, $42, $60, $62
.properties
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
.sizes
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02, $02, $00
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
.start_index
db $00, $04, $08, $0C, $10, $14, $18, $1C, $22, $26, $2A, $2E
.nbr_of_tiles
db 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3
.x_offsets
dw -8, 8, 8, -8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -16, 0, 16, -16, 0, 16
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
dw -8, 8, -8, 8
.y_offsets
dw -8, -8, 8, 8
dw -7, -7, 9, 9
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -7, -7, 9, 9
dw -6, -6, 10, 10
dw -8, -8, -8, 8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -8, -8, 8, 8
dw -7, -7, 9, 9
.chr
db $00, $02, $22, $24
db $04, $06, $24, $26
db $08, $0A, $28, $2A
db $0C, $0E, $28, $2A
db $44, $46, $64, $66
db $48, $4A, $68, $6A
db $4C, $4E, $6C, $6E
db $88, $8A, $8C, $A8, $AA, $AC
db $80, $82, $A0, $A2
db $84, $86, $A4, $A6
db $40, $42, $60, $62
db $40, $42, $60, $62
.properties
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
db $39, $39, $39, $39
.sizes
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02, $02, $00
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
db $02, $02, $02, $02
}
ApplyTwinrovaGraphics:
@@ -708,7 +677,7 @@ ApplyTwinrovaGraphics:
PHX
REP #$20 ; A = 16, XY = 8
LDX #$80 : STX $2100 ;turn the screen off (required)
LDX #$80 : STX $2100 ; turn the screen off (required)
LDX #$80 : STX $2115 ; Set the video port register every time we write it increase by 1
LDA #$5000 : STA $2116 ; Destination of the DMA $5800 in vram <- this need to be divided by 2