Refactor Lanmola sprite functions for improved readability and maintainability

This commit is contained in:
scawful
2025-03-20 18:41:48 -04:00
parent 56c098a884
commit 706dcc0710
2 changed files with 477 additions and 565 deletions

View File

@@ -24,34 +24,22 @@ org $05A377 ; replace vanilla sprite_lanmola.asm
Lanmola_FinishInitialization:
{
PHB : PHK : PLB
LDA.l .starting_delay, X : STA.w SprTimerA, X
LDA.b #$FF : STA.w SprHeight, X
PHX
LDY.b #$3F
LDA $7EEA00, X : TAX ;.sprite_regions
LDA.b #$FF
.reset_extended_sprites
STA $7FFE00, X
INX
DEY : BPL .reset_extended_sprites
PLX
LDA.b #$07 : STA $7FF81E, X
JSL Sprite_Lanmola_Init_DataLONG
PLB
RTL
.starting_delay
@@ -63,7 +51,6 @@ Sprite_Lanmola:
;JSR Sprite2_CheckIfActivePermissive
LDA $0D80, X
JSL JumpTableLocal
dw Lanmola_Wait ;0x00
@@ -74,27 +61,19 @@ Sprite_Lanmola:
dw Lanmola_Death ;0x05
}
Lanmola_Wait: ;0x00
{
JSR Lanmola_Draw
LDA.w SprTimerA, X : BNE .delay ; ORA $0F00, X :
LDA.b #$7F : STA.w SprTimerA, X
INC $0D80, X
;Play rumbling sound
; Play rumbling sound
LDA.b #$35 : JSL Sound_SetSfx2PanLong
.delay
RTS
}
Lanmola_Mound: ;0x01
{
JSL Lanmola_MoveSegment
@@ -137,8 +116,6 @@ Lanmola_Mound: ;0x01
RTS
}
Lanmola_Fly: ;0x02
{
JSR Lanmola_Draw
@@ -218,7 +195,6 @@ Lanmola_Dive: ;0x03
LDA $0F80, X : CMP.b #$EC : BMI .alpha
SEC : SBC.b #$01 : STA $0F80, X
.alpha
; If we are under the ground go to the reset stage
@@ -230,7 +206,6 @@ Lanmola_Dive: ;0x03
JSR Lanmola_Mound_Lanmola_SetScatterSandPosition
.notUnderGroundYet
RTS
}
@@ -259,7 +234,6 @@ Lanmola_Reset: ;0x04
Lanmola_Death: ;0x05
{
JSR Lanmola_Draw
LDA.w SprTimerA, X : BNE .timerNotDone
STZ.w SprState, X
@@ -281,7 +255,6 @@ Lanmola_Death: ;0x05
DEX : BPL .next_sprite
TYX : LDA.b #$0F : STA $7EEAB8, X
LDA.b #$1A : STA $012F
.oneIsntDead
PLX
@@ -332,42 +305,30 @@ Lanmola_Death: ;0x05
LDA $7FF81E, X : BMI .beta
DEC A : STA $7FF81E, X
.beta
.spawn_failed
.return
RTS
}
Lanmola_Draw:
{
JSL Lanmola_MoveSegment
LDA $0B89, X : STA $03
LDA $7FF81E, X : BPL .beta
RTS
.beta
PHX
STA $0F
LDA.w SprYSpeed, X : ASL A : ROL A : AND.b #$01 : TAX
LDA $7EEA06, X : STA $0C ;.data2
LDA $7EEA04, X : TAY ;.data1
LDX $0F
.loopBody
PHX : STX $0D
LDA $02 : CLC : ADC $04 : TAX
LDA $02 : SEC : SBC.b #$08 : AND.b #$3F : STA $02
LDA $7FFC00, X : STA $0A
@@ -439,9 +400,7 @@ Lanmola_Draw:
PHY
LDA $7FFF00, X : TAX
LDY $0D
LDA $0F : CMP.b #$07 : BNE .dontDrawTail
CPY.b #$00 : BNE .dontDrawTail
LDA $7EEA18, X ;.chrTail
@@ -450,7 +409,6 @@ Lanmola_Draw:
.dontDrawTail
LDA.b #$C6
CPY $0F : BNE .notHead
LDA $7EEA08, X ;.chrHead
@@ -492,13 +450,9 @@ Lanmola_Draw:
Lanmola_DrawMound:
{
LDA.b #$04 : JSL OAM_AllocateFromRegionB
PHX
LDA.w SprTimerA, X : LSR #3 : TAX
LDA $7EEA54, X : TAX ;.frameMound
LDY.b #$00
REP #$20
@@ -512,11 +466,8 @@ Lanmola_DrawMound:
.notNegative
INY
CLC : ADC.w #$0040 : CMP.w #$0140 : BCS .out_of_boundsx
LDA $02 : STA ($90), Y
CLC : ADC.w #$0010 : CMP.w #$0100
BCC .on_screen_y
.out_of_boundsx
@@ -527,13 +478,9 @@ Lanmola_DrawMound:
LDA $7EEA48, X : INY : STA ($90), Y ;.chrMound
LDA $7EEA4E, X : INY : STA ($90), Y ;.propertiesMound
TYA : LSR #2 : TAY
LDA.b #$02 : ORA $37 : STA ($92), Y ;.sizesMound
PLX
RTS
}
@@ -543,53 +490,41 @@ org $1DCFCB
Sprite_Shrapnel:
{
; This sprite manifests as a boulder outdoors, and as shrapnel indoors.
LDA $1B : BEQ $5B ;Boulder_Main
LDA $1B : BEQ $5B ; Boulder_Main
; Check if we can draw.
LDA $0FC6 : CMP.b #$03 : BCS .invalid_gfx_loaded
JSL $06DBF8 ;Sprite_PrepAndDrawSingleSmallLong
JSL $06DBF8 ; Sprite_PrepAndDrawSingleSmallLong
.invalid_gfx_loaded
;JSR $E8A2 ;Sprite4_CheckIfActive
;JSR $E8A2 Sprite4_CheckIfActive
JSL CheckIfActive : BCC .active
RTS
.active
LDA $1A : ASL #2 : AND.b #$C0 : STA.w SprProps, X ; : ORA.b #$00
JSR $E948 ;Sprite4_MoveXyz
JSR $E948 ; Sprite4_MoveXyz
TXA : EOR $1A : AND.b #$03 : BNE .noTileCollision
REP #$20
LDA.w SprCachedX : SEC : SBC $22 : CLC : ADC.w #$0004
LDA.w SprCachedX
SEC : SBC $22
CLC : ADC.w #$0004
CMP.w #$0010 : BCS .player_not_close
LDA.w SprCachedY : SEC : SBC $20 : CLC : ADC.w #$FFFC
LDA.w SprCachedY
SEC : SBC $20
CLC : ADC.w #$FFFC
CMP.w #$000C : BCS .player_not_close
SEP #$20
JSL $06F41F ;Sprite_AttemptDamageToPlayerPlusRecoilLong
JSL $06F41F ; Sprite_AttemptDamageToPlayerPlusRecoilLong
.player_not_close
SEP #$20
;JSR $8094 : BEQ .noTileCollision ;Sprite4_CheckTileCollision
;STZ.w SprState, X
.noTileCollision
LDA.w SprTimerA, X : BNE .timerNotDone
STZ.w SprState, X
.timerNotDone
RTS
}

View File

@@ -12,35 +12,24 @@ pullpc
Ancilla_SpawnFallingPrize:
PHX
TAX
LDY.b #$04
LDA.b #$29 ; ANCILLA 29
JSL AncillaAdd_FallingPrize
PLX
RTL
; =========================================================
Lanmola_DrawDirtLONG:
{
PHB : PHK : PLB
JSR Lanmola_DrawDirt
PLB
RTL
}
; =========================================================
Lanmola_DrawDirt:
{
LDA.w SprTimerB, X : BNE .timerNotDone
RTS
.timerNotDone
; Determine weather the dirt should draw in front of or behind the body
@@ -57,11 +46,9 @@ Lanmola_DrawDirt:
LDY.b #$00
LDA.w SprTimerB, X : LSR #2 : AND.b #$03 : EOR.b #$03 : ASL A : STA $06
LDA $0DC0, X : XBA
LDA.w SprMiscC, X
REP #$20 : SEC : SBC $E2 : STA $00 : SEP #$20
STZ $37
BPL .notNegative3
INC $37
@@ -71,9 +58,7 @@ Lanmola_DrawDirt:
LDA.w SprMiscE, X : XBA
LDA $0E70, X
REP #$20 : SEC : SBC $E8 : STA $02 : SEP #$20
PHX
LDX.b #$01
.dirtLoop
@@ -132,11 +117,8 @@ Lanmola_DrawDirt:
Sprite_Lanmola_Init_DataLONG:
{
PHB : PHK : PLB
JSR Sprite_Lanmola_Init_Data
PLB
RTL
}
@@ -320,9 +302,7 @@ Lanmola_MoveSegment:
CMP #$09 : BEQ .notActive ;in medallion cut scene
CMP #$0A : BEQ .notActive ;in medallion cut scene
LDA $05 : INC A : AND.b #$3F : STA $0E80, X
.notActive
RTL
}
@@ -331,9 +311,7 @@ Lanmola_MoveSegment:
SetShrapnelTimer:
{
LDA.b #$40 : STA.w SprTimerA, Y
JSL GetRandomInt ; replaced code
RTL
}
@@ -355,4 +333,3 @@ CheckIfActive:
RTL
}
; =========================================================