Add Sprite_CountActiveById, limit keese in twinrova fight

This commit is contained in:
scawful
2025-01-19 13:16:52 -05:00
parent c7db1c1776
commit f8a264d1df
2 changed files with 92 additions and 102 deletions

View File

@@ -317,7 +317,23 @@ Sprite_CheckForPresence:
.done
PLX
RTL
}
; $00 - ID of the sprite to check
; $02 - Number of sprites found
Sprite_CountActiveById:
{
STZ $02
LDX.b #$10
.x_loop
DEX
LDA $0E20, X : CMP.b $00 : BEQ .increment
BRA .continue
.increment
INC $02
.continue
CPX.b #$00 : BNE .x_loop
RTL
}
; =========================================================

View File

@@ -159,7 +159,7 @@ Sprite_Twinrova_Main:
PLX
LDA.w SprAction, X
JSL UseImplicitRegIndexedLocalJumpTable
JSL JumpTableLocal
dw Twinrova_Init ; 0x00
dw Twinrova_MoveState ; 0x01
@@ -200,6 +200,9 @@ Sprite_Twinrova_Main:
.phase_1
LDA.b #$11 : STA.b $00
JSL Sprite_CountActiveById
LDA.b $02 : CMP.b #$03 : BCS +
%ProbCheck($3F, +)
%ProbCheck($0F, ++)
JSL Sprite_SpawnFireKeese
@@ -540,8 +543,8 @@ TargetPositions:
Twinrova_RestoreFloorTile:
{
LDA.w SprY, X : AND #$F8 : STA.b $00 : LDA.w SprYH, X : STA.b $01
LDA.w SprX, X : AND #$F8 : STA.b $02 : LDA.w SprXH, X : STA.b $03
LDA.w SprY, X : STA.b $00 : LDA.w SprYH, X : STA.b $01
LDA.w SprX, X : STA.b $02 : LDA.w SprXH, X : STA.b $03
LDA.b #$00
JSL Sprite_GetTileAttr
@@ -552,7 +555,6 @@ Twinrova_RestoreFloorTile:
LDA.w SprYH, Y : ADC.b #$00 : STA.l $7FF85A, X
JSR RestoreFloorTile
+
RTS
}
@@ -586,71 +588,44 @@ AddPitHazard:
Ganon_SpawnFallingTilesOverlord:
{
#_1D90D0: LDY.b #$07
LDY.b #$07
.next_slot
#_1D90D2: LDA.w $0B00,Y
#_1D90D5: BEQ .free_slot
#_1D90D7: DEY
#_1D90D8: BPL .next_slot
#_1D90DA: RTS
;----------------------------------------------------------
LDA.w $0B00, Y : BEQ .free_slot
DEY : BPL .next_slot
RTS
.free_slot
#_1D90DB: LDA.w SprMiscF,X
#_1D90DE: CMP.b #$04
#_1D90E0: BCS .dont_spawn
#_1D90E2: INC.w SprMiscF,X
#_1D90E5: PHX
#_1D90E6: TAX
#_1D90E7: LDA.w .overlord_type,X
#_1D90EA: STA.w $0B00,Y
#_1D90ED: LDA.w .position_x,X
#_1D90F0: STA.w $0B08,Y
#_1D90F3: LDA.b $23
#_1D90F5: STA.w $0B10,Y
#_1D90F8: LDA.w .position_y,X
#_1D90FB: STA.w $0B18,Y
#_1D90FE: LDA.b $21
#_1D9100: STA.w $0B20,Y
#_1D9103: LDA.b #$00
#_1D9105: STA.w $0B28,Y
#_1D9108: STA.w $0B30,Y
#_1D910B: PLX
LDA.w SprMiscF, X : CMP.b #$04 : BCS .dont_spawn
INC.w SprMiscF, X
PHX
TAX
LDA.w .overlord_type, X : STA.w $0B00, Y
LDA.w .position_x, X : STA.w $0B08, Y
LDA.b $23 : STA.w $0B10, Y
LDA.w .position_y, X : STA.w $0B18, Y
LDA.b $21 : STA.w $0B20, Y
LDA.b #$00 : STA.w $0B28, Y : STA.w $0B30, Y
PLX
.dont_spawn
#_1D910C: RTS
RTS
.overlord_type
#_1D90C4: db $0C ; OVERLORD 0C
#_1D90C5: db $0D ; OVERLORD 0D
#_1D90C6: db $0E ; OVERLORD 0E
#_1D90C7: db $0F ; OVERLORD 0F
db $0C ; OVERLORD 0C
db $0D ; OVERLORD 0D
db $0E ; OVERLORD 0E
db $0F ; OVERLORD 0F
.position_x
#_1D90C8: db $18
#_1D90C9: db $D8
#_1D90CA: db $D8
#_1D90CB: db $18
db $18
db $D8
db $D8
db $18
.position_y
#_1D90CC: db $20
#_1D90CD: db $20
#_1D90CE: db $D0
#_1D90CF: db $D0
db $20
db $20
db $D0
db $D0
}
; =========================================================
@@ -842,7 +817,6 @@ ReleaseFireballs:
.exit_a
RTS
.offset_x_low
db 12, -12, 0, 0