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