fix bug with magic bubble ancillae slot alloc

This commit is contained in:
scawful
2024-07-07 17:28:10 -04:00
parent 2347cf8ef8
commit aabcc9d653

View File

@@ -575,24 +575,24 @@ Ancilla_CheckBasicSpriteCollision:
EOR.b $1A EOR.b $1A
AND.b #$03 AND.b #$03
ORA.w $0F00,Y ORA.w $0F00, Y
ORA.w $0EF0,Y ORA.w $0EF0, Y
BNE .skip BNE .skip
LDA.w $0DD0,Y : CMP.b #$09 : BCC .skip LDA.w $0DD0, Y : CMP.b #$09 : BCC .skip
LDA.w $0CAA,Y : AND.b #$02 : BNE .sprite_ignores_priority LDA.w $0CAA, Y : AND.b #$02 : BNE .sprite_ignores_priority
LDA.w $0280,X : BNE .skip LDA.w $0280, X : BNE .skip
.sprite_ignores_priority .sprite_ignores_priority
LDA.w $0C7C,X : CMP.w $0F20,Y : BNE .skip LDA.w AnciLayer, X : CMP.w $0F20, Y : BNE .skip
; ANCILLA 2C ; ANCILLA 2C
LDA.w $0C4A,X : CMP.b #$2C : BNE .not_somaria_block LDA.w AnciType, X : CMP.b #$2C : BNE .not_somaria_block
; SPRITE 1E ; SPRITE 1E
LDA.w $0E20,Y : CMP.b #$1E : BEQ .skip LDA.w $0E20, Y : CMP.b #$1E : BEQ .skip
; SPRITE 90 ; SPRITE 90
CMP.b #$90 : BEQ .skip CMP.b #$90 : BEQ .skip
@@ -628,33 +628,33 @@ Ancilla_CheckBasicSpriteCollision_Single:
BCC .fail BCC .fail
; SPRITE 92 ; SPRITE 92
LDA.w $0E20,Y : CMP.b #$92 : BNE .not_king_helma LDA.w $0E20, Y : CMP.b #$92 : BNE .not_king_helma
LDA.w $0DB0,Y : CMP.b #$03 : BCC .success LDA.w $0DB0, Y : CMP.b #$03 : BCC .success
.not_king_helma .not_king_helma
; SPRITE 80 ; SPRITE 80
LDA.w $0E20,Y : CMP.b #$80 : BNE .dont_reverse_fire_snake LDA.w $0E20, Y : CMP.b #$80 : BNE .dont_reverse_fire_snake
LDA.w $0F10,Y : BNE .dont_reverse_fire_snake LDA.w $0F10, Y : BNE .dont_reverse_fire_snake
LDA.b #$18 : STA.w $0F10,Y LDA.b #$18 : STA.w $0F10, Y
LDA.w $0DE0,Y : EOR.b #$01 : STA.w $0DE0,Y LDA.w $0DE0, Y : EOR.b #$01 : STA.w $0DE0, Y
.dont_reverse_fire_snake .dont_reverse_fire_snake
LDA.w $0BA0,Y : BNE .fail LDA.w $0BA0, Y : BNE .fail
LDA.w $0C04,X : SEC : SBC.b #$08 : STA.b $04 LDA.w AnciX, X : SEC : SBC.b #$08 : STA.b $04
LDA.w $0C18,X : SBC.b #$00 : STA.b $05 LDA.w AnciXH, X : SBC.b #$00 : STA.b $05
LDA.w $0BFA,X : SEC : SBC.b #$08 LDA.w AnciY, X : SEC : SBC.b #$08
PHP PHP
SEC : SBC.w $029E,X : STA.b $06 SEC : SBC.w AnciHeight, X : STA.b $06
LDA.w $0C0E,X : SBC.b #$00 LDA.w AnciYH, X : SBC.b #$00
PLP PLP
SBC.b #$00 SBC.b #$00
@@ -671,12 +671,12 @@ Ancilla_CheckBasicSpriteCollision_Single:
PLX PLX
PLY PLY
LDA.b $00 : EOR.b #$FF : STA.w $0F30,Y LDA.b $00 : EOR.b #$FF : STA.w $0F30, Y
LDA.b $01 : EOR.b #$FF : STA.w $0F40,Y LDA.b $01 : EOR.b #$FF : STA.w $0F40, Y
PHX PHX
LDA.w $0C4A,X LDA.w AnciType, X
TYX TYX
JSL Ancilla_CheckDamageToSprite JSL Ancilla_CheckDamageToSprite
@@ -699,14 +699,14 @@ Ancilla_CheckBasicSpriteCollision_Single:
Ancilla_SetupBasicHitBox: Ancilla_SetupBasicHitBox:
{ {
LDA.w $0C04,X : SEC : SBC.b #$08 : STA.b $00 LDA.w AnciX, X : SEC : SBC.b #$08 : STA.b $00
LDA.w $0C18,X : SBC.b #$00 : STA.b $08 LDA.w AnciXH, X : SBC.b #$00 : STA.b $08
LDA.w $0BFA,X : SEC : SBC.b #$08 LDA.w AnciY, X : SEC : SBC.b #$08
PHP PHP
SEC : SBC.w $029E,X : STA.b $01 SEC : SBC.w AnciHeight, X : STA.b $01
LDA.w $0C0E,X : SBC.b #$00 LDA.w AnciYH, X : SBC.b #$00
PLP PLP
SBC.b #$00 : STA.b $09 SBC.b #$00 : STA.b $09
@@ -733,18 +733,18 @@ Ancilla_Move_X:
Ancilla_Move_Y: Ancilla_Move_Y:
{ {
LDA.w $0C22,X LDA.w $0C22, X
ASL A ASL A
ASL A ASL A
ASL A ASL A
ASL A ASL A
CLC : ADC.w $0C36,X : STA.w $0C36,X CLC : ADC.w $0C36, X : STA.w $0C36, X
LDY.b #$00 LDY.b #$00
LDA.w $0C22,X LDA.w $0C22, X
PHP PHP
LSR A LSR A
@@ -759,10 +759,10 @@ Ancilla_Move_Y:
DEY DEY
.other_way .other_way
ADC.w $0BFA,X : STA.w $0BFA,X ADC.w AnciY, X : STA.w AnciY, X
TYA TYA
ADC.w $0C0E,X : STA.w $0C0E,X ADC.w AnciYH, X : STA.w AnciYH, X
RTS RTS
} }
@@ -771,18 +771,18 @@ Ancilla_Move_Y:
Ancilla_Move_Z: Ancilla_Move_Z:
{ {
LDA.w $0294,X LDA.w AnciZSpeed, X
ASL A ASL A
ASL A ASL A
ASL A ASL A
ASL A ASL A
CLC : ADC.w $02A8,X : STA.w $02A8,X CLC : ADC.w AnciHeightH, X : STA.w AnciHeightH, X
LDY.b #$00 LDY.b #$00
LDA.w $0294,X LDA.w AnciZSpeed, X
PHP PHP
LSR A LSR A
@@ -797,55 +797,51 @@ Ancilla_Move_Z:
DEY DEY
.other_way .other_way
ADC.w $029E,X : STA.w $029E,X ADC.w AnciHeight, X : STA.w AnciHeight, X
RTS RTS
} }
Ancilla_Killa: Ancilla_Killa:
PLA PLA
PLA PLA
STZ.w $0C4A,X STZ.w AnciType, X
RTS RTS
Ancilla_BoundsCheck: Ancilla_BoundsCheck:
{ {
LDY.w $0C7C,X LDY.w AnciLayer, X
LDA.w .data, Y : STA.b $04
LDY.w AnciOamBuf, X
LDA.w AnciX, X : SEC : SBC.b $E2 : CMP.b #$F4 : BCS Ancilla_Killa
STA.b $00
LDA.w .data,Y : STA.b $04 LDA.w AnciY, X : SEC : SBC.b $E8 : CMP.b #$F0 : BCS Ancilla_Killa
STA.b $01
RTS
LDY.w $0C86,X
LDA.w $0C04,X : SEC : SBC.b $E2 : CMP.b #$F4 : BCS Ancilla_Killa
STA.b $00
LDA.w $0BFA,X : SEC : SBC.b $E8 : CMP.b #$F0 : BCS Ancilla_Killa
STA.b $01
RTS
.data .data
db $20, $10 db $20, $10
} }
; =========================================================
print pc
AncillaAdd_MagicBubbleShot: AncillaAdd_MagicBubbleShot:
{ {
LDY.b #$00 LDY.b #$03
STA.b $00 STA.b $00
JSL Ancilla_CheckForAvailableSlot : BPL .free_slot JSL Ancilla_CheckForAvailableSlot : BPL .free_slot
LDA.b $00 : CMP.b #$01 : BEQ .no_refund_magic LDA.b $00 : CMP.b #$01 : BEQ .no_refund_magic
LDX.b #$00 LDX.b #$02
JSL Refund_Magic JSL Refund_Magic
.no_refund_magic .no_refund_magic
BRL .exit_a BRL .exit_a
.free_slot .free_slot
INY ; Increment ancilla slot, due to 0x1E
PHB PHB
PHK PHK
PLB PLB
@@ -858,49 +854,37 @@ AncillaAdd_MagicBubbleShot:
JSR Ancilla_SFX2_Near JSR Ancilla_SFX2_Near
PLY PLY
.no_sfx .no_sfx
LDA.b $00 : STA.w AnciType,Y LDA.b $00 : STA.w AnciType, Y
TAX TAX
; LDA.w AncillaObjectAllocation, X : STA.w AnciOAMNbr,Y ; LDA.w AncillaObjectAllocation, X : STA.w AnciOAMNbr, Y
LDA.b #$0C : STA.w AnciOAMNbr,Y LDA.b #$0C : STA.w AnciOAMNbr, Y
LDA.b #$03 : STA.w AnciTimerA,Y LDA.b #$03 : STA.w AnciTimerA, Y
LDA.b #$00 : STA.w AnciMiscB,Y : STA.w $0C5E,Y LDA.b #$00 : STA.w AnciMiscB, Y : STA.w AnciMiscC, Y
STA.w $0280,Y : STA.w $028A,Y STA.w $0280, Y : STA.w $028A, Y
LDA.b $2F : LSR A : STA.w AnciMiscD,Y LDA.b $2F : LSR A : STA.w AnciMiscD, Y
TAX TAX
PHY : PHX
PHY
PHX
TYX TYX
JSL Ancilla_CheckInitialTile_A JSL Ancilla_CheckInitialTile_A
PLX : PLY
PLX
PLY
BCS .disperse_on_spawn BCS .disperse_on_spawn
LDA.w $0022 : CLC : ADC.w .init_check_offset_x_low,X : STA.w $0C04,Y LDA.w $0022 : CLC : ADC.w .init_check_offset_x_low, X : STA.w AnciX, Y
LDA.w $0023 : ADC.w .init_check_offset_x_high, X : STA.w AnciXH, Y
LDA.w $0023 : ADC.w .init_check_offset_x_high,X : STA.w $0C18,Y LDA.w $0020 : CLC : ADC.w .init_check_offset_y_low, X : STA.w AnciY, Y
LDA.w $0021 : ADC.w .init_check_offset_y_high, X : STA.w AnciYH, Y
LDA.w $0020 : CLC : ADC.w .init_check_offset_y_low,X : STA.w $0BFA,Y
LDA.w $0021 : ADC.w .init_check_offset_y_high,X : STA.w $0C0E,Y
; ANCILLA 01 ; ANCILLA 01
LDA.w AnciType,Y : CMP.b #$01 : BEQ .is_somaria_bullet LDA.w AnciType, Y : CMP.b #$01 : BEQ .is_somaria_bullet
LDA.w .flame_speed_x, X : STA.w AnciYSpeed, Y
LDA.w .flame_speed_x,X : STA.w AnciYSpeed,Y LDA.w .flame_speed_y, X
LDA.w .flame_speed_y,X
BRA .speed_set
BRA .speed_set
.is_somaria_bullet .is_somaria_bullet
LDA.l $7EF359 LDA.l $7EF359
DEC A DEC A
@@ -911,21 +895,17 @@ AncillaAdd_MagicBubbleShot:
STA.b $0F STA.b $0F
TXA TXA : CLC : ADC.b $0F : TAX
CLC
ADC.b $0F
TAX
LDA.w SomariaBulletSpeedX,X : STA.w AnciYSpeed,Y LDA.w SomariaBulletSpeedX, X : STA.w AnciYSpeed, Y
LDA.w SomariaBulletSpeedY, X
LDA.w SomariaBulletSpeedY,X
.speed_set .speed_set
STA.w AnciXSpeed,Y STA.w AnciXSpeed, Y
LDA.w $00EE : STA.w AnciLayer,Y LDA.w $00EE : STA.w AnciLayer, Y
LDA.w $0476 : STA.w AnciMiscJ,Y LDA.w $0476 : STA.w AnciMiscJ, Y
PLX PLX
PLB PLB
@@ -935,21 +915,21 @@ AncillaAdd_MagicBubbleShot:
.disperse_on_spawn .disperse_on_spawn
; ANCILLA 01 ; ANCILLA 01
LDA.w AnciType,Y : CMP.b #$01 : BNE .not_bullet LDA.w AnciType, Y : CMP.b #$01 : BNE .not_bullet
LDA.b #$04 ; ANCILLA 04 LDA.b #$04 ; ANCILLA 04
STA.w AnciType,Y STA.w AnciType, Y
LDA.b #$07 : STA.w AnciTimerA,Y LDA.b #$07 : STA.w AnciTimerA, Y
LDA.b #$10 : STA.w AnciOAMNbr,Y LDA.b #$10 : STA.w AnciOAMNbr, Y
BRA .exit_b BRA .exit_b
.not_bullet .not_bullet
LDA.b #$01 : STA.w AnciMiscB,Y LDA.b #$01 : STA.w AnciMiscB, Y
LDA.b #$1F : STA.w AnciTimerA,Y LDA.b #$1F : STA.w AnciTimerA, Y
LDA.b #$08 : STA.w AnciOAMNbr,Y LDA.b #$08 : STA.w AnciOAMNbr, Y
; SFX2.2A ; SFX2.2A
LDA.b #$2A : JSR Ancilla_SFX2_Pan LDA.b #$2A : JSR Ancilla_SFX2_Pan
@@ -991,14 +971,14 @@ Ancilla0E_MagicBubbleLong:
Ancilla_MagicBubbleShot: Ancilla_MagicBubbleShot:
{ {
LDA.w AnciMiscB,X : BEQ MagicBubbleShot_Moving LDA.w AnciMiscB, X : BEQ MagicBubbleShot_Moving
JMP.w MagicBubbleShot_Halted JMP.w MagicBubbleShot_Halted
#MagicBubbleShot_Moving: #MagicBubbleShot_Moving:
LDA.b $11 : BNE .draw LDA.b $11 : BNE .draw
STZ.w $0385,X STZ.w $0385, X
JSR Ancilla_Move_X JSR Ancilla_Move_X
JSR Ancilla_Move_Y JSR Ancilla_Move_Y
@@ -1008,32 +988,32 @@ Ancilla_MagicBubbleShot:
; ------------------------------------------------------- ; -------------------------------------------------------
LDA.w AnciMiscD,X : ORA.b #$08 : STA.w AnciMiscD,X LDA.w AnciMiscD, X : ORA.b #$08 : STA.w AnciMiscD, X
JSL Ancilla_CheckTileCollision_long JSL Ancilla_CheckTileCollision_long
PHP PHP
LDA.w $03E4,X : STA.w $0385,X LDA.w $03E4, X : STA.w $0385, X
PLP PLP
BCS .collision BCS .collision
LDA.w AnciMiscD,X : ORA.b #$0C : STA.w AnciMiscD,X LDA.w AnciMiscD, X : ORA.b #$0C : STA.w AnciMiscD, X
LDA.w $028A,X : STA.b $74 LDA.w $028A, X : STA.b $74
JSL Ancilla_CheckTileCollision_long JSL Ancilla_CheckTileCollision_long
PHP PHP
LDA.b $74 : STA.w $028A,X LDA.b $74 : STA.w $028A, X
PLP PLP
BCC .no_collision BCC .no_collision
.collision .collision
INC.w AnciMiscB,X INC.w AnciMiscB, X
LDA.b #$1F : STA.w AnciTimerA,X LDA.b #$1F : STA.w AnciTimerA, X
LDA.b #$08 : STA.w $0C90,X LDA.b #$08 : STA.w AnciOAMNbr, X
LDA.b #$2A ; SFX2.2A LDA.b #$2A ; SFX2.2A
JSR Ancilla_SFX2_Pan JSR Ancilla_SFX2_Pan
@@ -1041,12 +1021,12 @@ Ancilla_MagicBubbleShot:
; --------------------------------------------------------- ; ---------------------------------------------------------
.no_collision .no_collision
INC.w $0C5E,X INC.w AnciMiscC, X
LDA.w AnciMiscD,X : AND.b #$F3 : STA.w AnciMiscD,X LDA.w AnciMiscD, X : AND.b #$F3 : STA.w AnciMiscD, X
LDA.w $0385,X : STA.w $0333 LDA.w $0385, X : STA.w $0333
AND.b #$F0 : CMP.b #$C0 : BEQ .torch AND.b #$F0 : CMP.b #$C0 : BEQ .torch
LDA.w $03E4,X : STA.w $0333 LDA.w $03E4, X : STA.w $0333
AND.b #$F0 : CMP.b #$C0 : BNE .draw AND.b #$F0 : CMP.b #$C0 : BNE .draw
.torch .torch
@@ -1068,12 +1048,12 @@ AncillaDraw_MagicBubbleShot:
{ {
JSR Ancilla_BoundsCheck JSR Ancilla_BoundsCheck
LDA.w $0280,X LDA.w $0280, X
BEQ .default_priority BEQ .default_priority
LDA.b #$30 LDA.b #$30
TSB.b $04 TSB.b $04
.default_priority .default_priority
LDA.w $0C5E, X : AND.b #$0C : STA.b $02 LDA.w AnciMiscC, X : AND.b #$0C : STA.b $02
PHX PHX
@@ -1088,7 +1068,6 @@ AncillaDraw_MagicBubbleShot:
TAX TAX
LDA.b $00 : CLC : ADC.w .offset_x, X : STA.b ($90), Y LDA.b $00 : CLC : ADC.w .offset_x, X : STA.b ($90), Y
LDA.b $01 : CLC : ADC.w .offset_y, X : INY : STA.b ($90), Y LDA.b $01 : CLC : ADC.w .offset_y, X : INY : STA.b ($90), Y
LDX.b $03 LDX.b $03
@@ -1104,7 +1083,7 @@ AncillaDraw_MagicBubbleShot:
LSR A LSR A
TAY TAY
LDA.b #$00 : STA.b ($92),Y LDA.b #$00 : STA.b ($92), Y
PLY PLY
INY INY
@@ -1146,16 +1125,16 @@ AncillaDraw_MagicBubbleShot:
MagicBubbleShot_Dissipate: MagicBubbleShot_Dissipate:
{ {
LDA.w $0C4A,X LDA.w AnciType, X
STZ.w $0C4A,X STZ.w AnciType, X
; ANCILLA 2F ; ANCILLA 2F
CMP.b #$2F : BEQ .no_burn CMP.b #$2F : BEQ .no_burn
; OW 40 ; OW 40
LDA.b $8A : CMP.b #$40 : BNE .no_burn LDA.b $8A : CMP.b #$40 : BNE .no_burn
; TILETYPE 43 ; TILETYPE 43
LDA.w $03E4,X : CMP.b #$43 : BNE .no_burn LDA.w $03E4, X : CMP.b #$43 : BNE .no_burn
; PHX ; PHX
; JSL FireRodShot_BecomeSkullWoodsFire ; JSL FireRodShot_BecomeSkullWoodsFire
; PLX ; PLX
@@ -1190,17 +1169,17 @@ MagicBubbleShot_Halted:
TAX TAX
LDA.b $00 LDA.b $00
STA.b ($90),Y STA.b ($90), Y
LDA.b $01 LDA.b $01
INY INY
STA.b ($90),Y STA.b ($90), Y
LDA.w .char-1,X LDA.w .char-1, X
INY INY
STA.b ($90),Y STA.b ($90), Y
LDA.b #$0A : ORA.b $04 : INY : STA.b ($90),Y LDA.b #$0A : ORA.b $04 : INY : STA.b ($90), Y
LDA.b #$02 : STA.b ($92) LDA.b #$02 : STA.b ($92)
@@ -1208,35 +1187,35 @@ MagicBubbleShot_Halted:
.dying .dying
TYA TYA
STA.b ($92),Y STA.b ($92), Y
INY INY
STA.b ($92),Y STA.b ($92), Y
DEY DEY
LDA.b $00 : STA.b ($90),Y LDA.b $00 : STA.b ($90), Y
CLC CLC
ADC.b #$08 ADC.b #$08
LDY.b #$04 : STA.b ($90),Y LDY.b #$04 : STA.b ($90), Y
LDA.b $01 : CLC : ADC.b #$FD LDA.b $01 : CLC : ADC.b #$FD
LDY.b #$01 : STA.b ($90),Y LDY.b #$01 : STA.b ($90), Y
LDY.b #$05 : STA.b ($90),Y LDY.b #$05 : STA.b ($90), Y
LDA.b #$A4 : LDY.b #$02 : STA.b ($90),Y LDA.b #$A4 : LDY.b #$02 : STA.b ($90), Y
INC A INC A
LDY.b #$06 LDY.b #$06
STA.b ($90),Y STA.b ($90), Y
; Palette ; Palette
LDA.b #$0A : ORA.b $04 : LDY.b #$03 : STA.b ($90),Y LDA.b #$0A : ORA.b $04 : LDY.b #$03 : STA.b ($90), Y
LDY.b #$07 LDY.b #$07
STA.b ($90),Y STA.b ($90), Y
RTS RTS