Refactor Lanmola sprite functions for improved readability and maintainability
This commit is contained in:
@@ -24,34 +24,22 @@ org $05A377 ; replace vanilla sprite_lanmola.asm
|
|||||||
Lanmola_FinishInitialization:
|
Lanmola_FinishInitialization:
|
||||||
{
|
{
|
||||||
PHB : PHK : PLB
|
PHB : PHK : PLB
|
||||||
|
|
||||||
LDA.l .starting_delay, X : STA.w SprTimerA, X
|
LDA.l .starting_delay, X : STA.w SprTimerA, X
|
||||||
|
|
||||||
LDA.b #$FF : STA.w SprHeight, X
|
LDA.b #$FF : STA.w SprHeight, X
|
||||||
|
|
||||||
PHX
|
PHX
|
||||||
|
|
||||||
LDY.b #$3F
|
LDY.b #$3F
|
||||||
|
|
||||||
LDA $7EEA00, X : TAX ;.sprite_regions
|
LDA $7EEA00, X : TAX ;.sprite_regions
|
||||||
|
|
||||||
LDA.b #$FF
|
LDA.b #$FF
|
||||||
|
|
||||||
.reset_extended_sprites
|
.reset_extended_sprites
|
||||||
STA $7FFE00, X
|
STA $7FFE00, X
|
||||||
|
|
||||||
INX
|
INX
|
||||||
|
|
||||||
DEY : BPL .reset_extended_sprites
|
DEY : BPL .reset_extended_sprites
|
||||||
|
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
LDA.b #$07 : STA $7FF81E, X
|
LDA.b #$07 : STA $7FF81E, X
|
||||||
|
|
||||||
JSL Sprite_Lanmola_Init_DataLONG
|
JSL Sprite_Lanmola_Init_DataLONG
|
||||||
|
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.starting_delay
|
.starting_delay
|
||||||
@@ -63,7 +51,6 @@ Sprite_Lanmola:
|
|||||||
;JSR Sprite2_CheckIfActivePermissive
|
;JSR Sprite2_CheckIfActivePermissive
|
||||||
|
|
||||||
LDA $0D80, X
|
LDA $0D80, X
|
||||||
|
|
||||||
JSL JumpTableLocal
|
JSL JumpTableLocal
|
||||||
|
|
||||||
dw Lanmola_Wait ;0x00
|
dw Lanmola_Wait ;0x00
|
||||||
@@ -74,27 +61,19 @@ Sprite_Lanmola:
|
|||||||
dw Lanmola_Death ;0x05
|
dw Lanmola_Death ;0x05
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lanmola_Wait: ;0x00
|
Lanmola_Wait: ;0x00
|
||||||
{
|
{
|
||||||
JSR Lanmola_Draw
|
JSR Lanmola_Draw
|
||||||
|
|
||||||
LDA.w SprTimerA, X : BNE .delay ; ORA $0F00, X :
|
LDA.w SprTimerA, X : BNE .delay ; ORA $0F00, X :
|
||||||
LDA.b #$7F : STA.w SprTimerA, X
|
LDA.b #$7F : STA.w SprTimerA, X
|
||||||
|
|
||||||
INC $0D80, X
|
INC $0D80, X
|
||||||
|
|
||||||
; Play rumbling sound
|
; Play rumbling sound
|
||||||
LDA.b #$35 : JSL Sound_SetSfx2PanLong
|
LDA.b #$35 : JSL Sound_SetSfx2PanLong
|
||||||
|
|
||||||
.delay
|
.delay
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lanmola_Mound: ;0x01
|
Lanmola_Mound: ;0x01
|
||||||
{
|
{
|
||||||
JSL Lanmola_MoveSegment
|
JSL Lanmola_MoveSegment
|
||||||
@@ -137,8 +116,6 @@ Lanmola_Mound: ;0x01
|
|||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lanmola_Fly: ;0x02
|
Lanmola_Fly: ;0x02
|
||||||
{
|
{
|
||||||
JSR Lanmola_Draw
|
JSR Lanmola_Draw
|
||||||
@@ -218,7 +195,6 @@ Lanmola_Dive: ;0x03
|
|||||||
|
|
||||||
LDA $0F80, X : CMP.b #$EC : BMI .alpha
|
LDA $0F80, X : CMP.b #$EC : BMI .alpha
|
||||||
SEC : SBC.b #$01 : STA $0F80, X
|
SEC : SBC.b #$01 : STA $0F80, X
|
||||||
|
|
||||||
.alpha
|
.alpha
|
||||||
|
|
||||||
; If we are under the ground go to the reset stage
|
; If we are under the ground go to the reset stage
|
||||||
@@ -230,7 +206,6 @@ Lanmola_Dive: ;0x03
|
|||||||
JSR Lanmola_Mound_Lanmola_SetScatterSandPosition
|
JSR Lanmola_Mound_Lanmola_SetScatterSandPosition
|
||||||
|
|
||||||
.notUnderGroundYet
|
.notUnderGroundYet
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +234,6 @@ Lanmola_Reset: ;0x04
|
|||||||
Lanmola_Death: ;0x05
|
Lanmola_Death: ;0x05
|
||||||
{
|
{
|
||||||
JSR Lanmola_Draw
|
JSR Lanmola_Draw
|
||||||
|
|
||||||
LDA.w SprTimerA, X : BNE .timerNotDone
|
LDA.w SprTimerA, X : BNE .timerNotDone
|
||||||
STZ.w SprState, X
|
STZ.w SprState, X
|
||||||
|
|
||||||
@@ -281,7 +255,6 @@ Lanmola_Death: ;0x05
|
|||||||
DEX : BPL .next_sprite
|
DEX : BPL .next_sprite
|
||||||
TYX : LDA.b #$0F : STA $7EEAB8, X
|
TYX : LDA.b #$0F : STA $7EEAB8, X
|
||||||
LDA.b #$1A : STA $012F
|
LDA.b #$1A : STA $012F
|
||||||
|
|
||||||
.oneIsntDead
|
.oneIsntDead
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
@@ -332,42 +305,30 @@ Lanmola_Death: ;0x05
|
|||||||
|
|
||||||
LDA $7FF81E, X : BMI .beta
|
LDA $7FF81E, X : BMI .beta
|
||||||
DEC A : STA $7FF81E, X
|
DEC A : STA $7FF81E, X
|
||||||
|
|
||||||
.beta
|
.beta
|
||||||
.spawn_failed
|
.spawn_failed
|
||||||
.return
|
.return
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
Lanmola_Draw:
|
Lanmola_Draw:
|
||||||
{
|
{
|
||||||
JSL Lanmola_MoveSegment
|
JSL Lanmola_MoveSegment
|
||||||
|
|
||||||
LDA $0B89, X : STA $03
|
LDA $0B89, X : STA $03
|
||||||
|
|
||||||
LDA $7FF81E, X : BPL .beta
|
LDA $7FF81E, X : BPL .beta
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
.beta
|
.beta
|
||||||
|
|
||||||
PHX
|
PHX
|
||||||
|
|
||||||
STA $0F
|
STA $0F
|
||||||
|
|
||||||
LDA.w SprYSpeed, X : ASL A : ROL A : AND.b #$01 : TAX
|
LDA.w SprYSpeed, X : ASL A : ROL A : AND.b #$01 : TAX
|
||||||
|
|
||||||
LDA $7EEA06, X : STA $0C ;.data2
|
LDA $7EEA06, X : STA $0C ;.data2
|
||||||
|
|
||||||
LDA $7EEA04, X : TAY ;.data1
|
LDA $7EEA04, X : TAY ;.data1
|
||||||
|
|
||||||
LDX $0F
|
LDX $0F
|
||||||
|
|
||||||
.loopBody
|
.loopBody
|
||||||
PHX : STX $0D
|
PHX : STX $0D
|
||||||
|
|
||||||
LDA $02 : CLC : ADC $04 : TAX
|
LDA $02 : CLC : ADC $04 : TAX
|
||||||
|
|
||||||
LDA $02 : SEC : SBC.b #$08 : AND.b #$3F : STA $02
|
LDA $02 : SEC : SBC.b #$08 : AND.b #$3F : STA $02
|
||||||
|
|
||||||
LDA $7FFC00, X : STA $0A
|
LDA $7FFC00, X : STA $0A
|
||||||
@@ -439,9 +400,7 @@ Lanmola_Draw:
|
|||||||
PHY
|
PHY
|
||||||
|
|
||||||
LDA $7FFF00, X : TAX
|
LDA $7FFF00, X : TAX
|
||||||
|
|
||||||
LDY $0D
|
LDY $0D
|
||||||
|
|
||||||
LDA $0F : CMP.b #$07 : BNE .dontDrawTail
|
LDA $0F : CMP.b #$07 : BNE .dontDrawTail
|
||||||
CPY.b #$00 : BNE .dontDrawTail
|
CPY.b #$00 : BNE .dontDrawTail
|
||||||
LDA $7EEA18, X ;.chrTail
|
LDA $7EEA18, X ;.chrTail
|
||||||
@@ -450,7 +409,6 @@ Lanmola_Draw:
|
|||||||
.dontDrawTail
|
.dontDrawTail
|
||||||
|
|
||||||
LDA.b #$C6
|
LDA.b #$C6
|
||||||
|
|
||||||
CPY $0F : BNE .notHead
|
CPY $0F : BNE .notHead
|
||||||
LDA $7EEA08, X ;.chrHead
|
LDA $7EEA08, X ;.chrHead
|
||||||
|
|
||||||
@@ -492,13 +450,9 @@ Lanmola_Draw:
|
|||||||
Lanmola_DrawMound:
|
Lanmola_DrawMound:
|
||||||
{
|
{
|
||||||
LDA.b #$04 : JSL OAM_AllocateFromRegionB
|
LDA.b #$04 : JSL OAM_AllocateFromRegionB
|
||||||
|
|
||||||
PHX
|
PHX
|
||||||
|
|
||||||
LDA.w SprTimerA, X : LSR #3 : TAX
|
LDA.w SprTimerA, X : LSR #3 : TAX
|
||||||
|
|
||||||
LDA $7EEA54, X : TAX ;.frameMound
|
LDA $7EEA54, X : TAX ;.frameMound
|
||||||
|
|
||||||
LDY.b #$00
|
LDY.b #$00
|
||||||
|
|
||||||
REP #$20
|
REP #$20
|
||||||
@@ -512,11 +466,8 @@ Lanmola_DrawMound:
|
|||||||
.notNegative
|
.notNegative
|
||||||
|
|
||||||
INY
|
INY
|
||||||
|
|
||||||
CLC : ADC.w #$0040 : CMP.w #$0140 : BCS .out_of_boundsx
|
CLC : ADC.w #$0040 : CMP.w #$0140 : BCS .out_of_boundsx
|
||||||
|
|
||||||
LDA $02 : STA ($90), Y
|
LDA $02 : STA ($90), Y
|
||||||
|
|
||||||
CLC : ADC.w #$0010 : CMP.w #$0100
|
CLC : ADC.w #$0010 : CMP.w #$0100
|
||||||
BCC .on_screen_y
|
BCC .on_screen_y
|
||||||
.out_of_boundsx
|
.out_of_boundsx
|
||||||
@@ -527,13 +478,9 @@ Lanmola_DrawMound:
|
|||||||
|
|
||||||
LDA $7EEA48, X : INY : STA ($90), Y ;.chrMound
|
LDA $7EEA48, X : INY : STA ($90), Y ;.chrMound
|
||||||
LDA $7EEA4E, X : INY : STA ($90), Y ;.propertiesMound
|
LDA $7EEA4E, X : INY : STA ($90), Y ;.propertiesMound
|
||||||
|
|
||||||
TYA : LSR #2 : TAY
|
TYA : LSR #2 : TAY
|
||||||
|
|
||||||
LDA.b #$02 : ORA $37 : STA ($92), Y ;.sizesMound
|
LDA.b #$02 : ORA $37 : STA ($92), Y ;.sizesMound
|
||||||
|
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,48 +495,36 @@ Sprite_Shrapnel:
|
|||||||
; Check if we can draw.
|
; Check if we can draw.
|
||||||
LDA $0FC6 : CMP.b #$03 : BCS .invalid_gfx_loaded
|
LDA $0FC6 : CMP.b #$03 : BCS .invalid_gfx_loaded
|
||||||
JSL $06DBF8 ; Sprite_PrepAndDrawSingleSmallLong
|
JSL $06DBF8 ; Sprite_PrepAndDrawSingleSmallLong
|
||||||
|
|
||||||
.invalid_gfx_loaded
|
.invalid_gfx_loaded
|
||||||
|
|
||||||
;JSR $E8A2 ;Sprite4_CheckIfActive
|
;JSR $E8A2 Sprite4_CheckIfActive
|
||||||
JSL CheckIfActive : BCC .active
|
JSL CheckIfActive : BCC .active
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
.active
|
.active
|
||||||
|
|
||||||
LDA $1A : ASL #2 : AND.b #$C0 : STA.w SprProps, X ; : ORA.b #$00
|
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
|
TXA : EOR $1A : AND.b #$03 : BNE .noTileCollision
|
||||||
REP #$20
|
REP #$20
|
||||||
|
LDA.w SprCachedX
|
||||||
LDA.w SprCachedX : SEC : SBC $22 : CLC : ADC.w #$0004
|
SEC : SBC $22
|
||||||
|
CLC : ADC.w #$0004
|
||||||
CMP.w #$0010 : BCS .player_not_close
|
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
|
CMP.w #$000C : BCS .player_not_close
|
||||||
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
|
||||||
JSL $06F41F ; Sprite_AttemptDamageToPlayerPlusRecoilLong
|
JSL $06F41F ; Sprite_AttemptDamageToPlayerPlusRecoilLong
|
||||||
|
|
||||||
.player_not_close
|
.player_not_close
|
||||||
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
|
||||||
;JSR $8094 : BEQ .noTileCollision ;Sprite4_CheckTileCollision
|
;JSR $8094 : BEQ .noTileCollision ;Sprite4_CheckTileCollision
|
||||||
;STZ.w SprState, X
|
;STZ.w SprState, X
|
||||||
|
|
||||||
.noTileCollision
|
.noTileCollision
|
||||||
|
|
||||||
LDA.w SprTimerA, X : BNE .timerNotDone
|
LDA.w SprTimerA, X : BNE .timerNotDone
|
||||||
STZ.w SprState, X
|
STZ.w SprState, X
|
||||||
|
|
||||||
.timerNotDone
|
.timerNotDone
|
||||||
|
|
||||||
RTS
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,35 +12,24 @@ pullpc
|
|||||||
Ancilla_SpawnFallingPrize:
|
Ancilla_SpawnFallingPrize:
|
||||||
PHX
|
PHX
|
||||||
TAX
|
TAX
|
||||||
|
|
||||||
LDY.b #$04
|
LDY.b #$04
|
||||||
LDA.b #$29 ; ANCILLA 29
|
LDA.b #$29 ; ANCILLA 29
|
||||||
JSL AncillaAdd_FallingPrize
|
JSL AncillaAdd_FallingPrize
|
||||||
|
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
; =========================================================
|
|
||||||
|
|
||||||
Lanmola_DrawDirtLONG:
|
Lanmola_DrawDirtLONG:
|
||||||
{
|
{
|
||||||
PHB : PHK : PLB
|
PHB : PHK : PLB
|
||||||
|
|
||||||
JSR Lanmola_DrawDirt
|
JSR Lanmola_DrawDirt
|
||||||
|
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
; =========================================================
|
|
||||||
|
|
||||||
Lanmola_DrawDirt:
|
Lanmola_DrawDirt:
|
||||||
{
|
{
|
||||||
LDA.w SprTimerB, X : BNE .timerNotDone
|
LDA.w SprTimerB, X : BNE .timerNotDone
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
.timerNotDone
|
.timerNotDone
|
||||||
|
|
||||||
; Determine weather the dirt should draw in front of or behind the body
|
; Determine weather the dirt should draw in front of or behind the body
|
||||||
@@ -57,11 +46,9 @@ Lanmola_DrawDirt:
|
|||||||
LDY.b #$00
|
LDY.b #$00
|
||||||
|
|
||||||
LDA.w SprTimerB, X : LSR #2 : AND.b #$03 : EOR.b #$03 : ASL A : STA $06
|
LDA.w SprTimerB, X : LSR #2 : AND.b #$03 : EOR.b #$03 : ASL A : STA $06
|
||||||
|
|
||||||
LDA $0DC0, X : XBA
|
LDA $0DC0, X : XBA
|
||||||
LDA.w SprMiscC, X
|
LDA.w SprMiscC, X
|
||||||
REP #$20 : SEC : SBC $E2 : STA $00 : SEP #$20
|
REP #$20 : SEC : SBC $E2 : STA $00 : SEP #$20
|
||||||
|
|
||||||
STZ $37
|
STZ $37
|
||||||
BPL .notNegative3
|
BPL .notNegative3
|
||||||
INC $37
|
INC $37
|
||||||
@@ -71,9 +58,7 @@ Lanmola_DrawDirt:
|
|||||||
LDA.w SprMiscE, X : XBA
|
LDA.w SprMiscE, X : XBA
|
||||||
LDA $0E70, X
|
LDA $0E70, X
|
||||||
REP #$20 : SEC : SBC $E8 : STA $02 : SEP #$20
|
REP #$20 : SEC : SBC $E8 : STA $02 : SEP #$20
|
||||||
|
|
||||||
PHX
|
PHX
|
||||||
|
|
||||||
LDX.b #$01
|
LDX.b #$01
|
||||||
|
|
||||||
.dirtLoop
|
.dirtLoop
|
||||||
@@ -132,11 +117,8 @@ Lanmola_DrawDirt:
|
|||||||
Sprite_Lanmola_Init_DataLONG:
|
Sprite_Lanmola_Init_DataLONG:
|
||||||
{
|
{
|
||||||
PHB : PHK : PLB
|
PHB : PHK : PLB
|
||||||
|
|
||||||
JSR Sprite_Lanmola_Init_Data
|
JSR Sprite_Lanmola_Init_Data
|
||||||
|
|
||||||
PLB
|
PLB
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,9 +302,7 @@ Lanmola_MoveSegment:
|
|||||||
CMP #$09 : BEQ .notActive ;in medallion cut scene
|
CMP #$09 : BEQ .notActive ;in medallion cut scene
|
||||||
CMP #$0A : BEQ .notActive ;in medallion cut scene
|
CMP #$0A : BEQ .notActive ;in medallion cut scene
|
||||||
LDA $05 : INC A : AND.b #$3F : STA $0E80, X
|
LDA $05 : INC A : AND.b #$3F : STA $0E80, X
|
||||||
|
|
||||||
.notActive
|
.notActive
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,9 +311,7 @@ Lanmola_MoveSegment:
|
|||||||
SetShrapnelTimer:
|
SetShrapnelTimer:
|
||||||
{
|
{
|
||||||
LDA.b #$40 : STA.w SprTimerA, Y
|
LDA.b #$40 : STA.w SprTimerA, Y
|
||||||
|
|
||||||
JSL GetRandomInt ; replaced code
|
JSL GetRandomInt ; replaced code
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,4 +333,3 @@ CheckIfActive:
|
|||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
; =========================================================
|
|
||||||
|
|||||||
Reference in New Issue
Block a user