Consolidated Bonk Drop to use shared codebase
This commit is contained in:
@@ -273,7 +273,7 @@ LoadIndoorValue:
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues)
|
||||
JMP .done
|
||||
+ CMP.w #288 : BNE +
|
||||
LDA.l OWBonkPrizeTable[42].loot
|
||||
LDA.l UWBonkPrizeData+3
|
||||
JMP .done
|
||||
+ CMP.w #294 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues)
|
||||
@@ -369,36 +369,36 @@ LoadOutdoorValue:
|
||||
LDA.l OWBonkPrizeTable[$0F].loot
|
||||
JMP .done
|
||||
+ CMP.w #$1B : BNE +
|
||||
LDA.l OWBonkPrizeTable[$11].loot
|
||||
LDA.l OWBonkPrizeTable[$10].loot
|
||||
JMP .done
|
||||
+ CMP.w #$1D : BNE +
|
||||
LDA.l OWBonkPrizeTable[$12].loot
|
||||
LDA.l OWBonkPrizeTable[$11].loot
|
||||
JMP .done
|
||||
+ CMP.w #$1E : BNE +
|
||||
LDA.l OWBonkPrizeTable[$13].loot
|
||||
LDA.l OWBonkPrizeTable[$12].loot
|
||||
JMP .done
|
||||
+ CMP.w #$28 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues)
|
||||
JMP .done
|
||||
+ CMP.w #$2A : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$14].loot
|
||||
LDA.l OWBonkPrizeTable[$13].loot
|
||||
JMP .done
|
||||
++ CMP.w #$0008 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$15].loot
|
||||
LDA.l OWBonkPrizeTable[$14].loot
|
||||
JMP .done
|
||||
++
|
||||
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
||||
JMP .done
|
||||
+ CMP.w #$2B : BNE +
|
||||
LDA.l OWBonkPrizeTable[$16].loot
|
||||
LDA.l OWBonkPrizeTable[$15].loot
|
||||
JMP .done
|
||||
+ CMP.w #$2E : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$17].loot
|
||||
LDA.l OWBonkPrizeTable[$16].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$18].loot
|
||||
LDA.l OWBonkPrizeTable[$17].loot
|
||||
JMP .done
|
||||
+ CMP.w #$30 : BNE +
|
||||
LDA $22 : CMP.w #512 : !BGE ++
|
||||
@@ -409,10 +409,10 @@ LoadOutdoorValue:
|
||||
JMP .done
|
||||
+ CMP.w #$32 : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$19].loot
|
||||
LDA.l OWBonkPrizeTable[$18].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$1A].loot
|
||||
LDA.l OWBonkPrizeTable[$19].loot
|
||||
JMP .done
|
||||
+ CMP.w #$35 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues)
|
||||
@@ -422,7 +422,7 @@ LoadOutdoorValue:
|
||||
JMP .done
|
||||
+ CMP.w #$42 : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$1B].loot
|
||||
LDA.l OWBonkPrizeTable[$1A].loot
|
||||
JMP .done
|
||||
++
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues)
|
||||
@@ -432,56 +432,56 @@ LoadOutdoorValue:
|
||||
JMP .done
|
||||
+ CMP.w #$51 : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$1C].loot
|
||||
LDA.l OWBonkPrizeTable[$1B].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$1D].loot
|
||||
LDA.l OWBonkPrizeTable[$1C].loot
|
||||
JMP .done
|
||||
+ CMP.w #$54 : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$1E].loot
|
||||
LDA.l OWBonkPrizeTable[$1D].loot
|
||||
JMP .done
|
||||
++ CMP.w #$0008 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$1F].loot
|
||||
LDA.l OWBonkPrizeTable[$1E].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$20].loot
|
||||
LDA.l OWBonkPrizeTable[$1F].loot
|
||||
JMP .done
|
||||
+ CMP.w #$55 : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$21].loot
|
||||
LDA.l OWBonkPrizeTable[$20].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$22].loot
|
||||
LDA.l OWBonkPrizeTable[$21].loot
|
||||
JMP .done
|
||||
+ CMP.w #$56 : BNE +
|
||||
LDA.l OWBonkPrizeTable[$23].loot
|
||||
LDA.l OWBonkPrizeTable[$22].loot
|
||||
JMP .done
|
||||
+ CMP.w #$5B : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$24].loot
|
||||
LDA.l OWBonkPrizeTable[$23].loot
|
||||
JMP .done
|
||||
++
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues)
|
||||
JMP .done
|
||||
+ CMP.w #$5E : BNE +
|
||||
LDA.l OWBonkPrizeTable[$25].loot
|
||||
LDA.l OWBonkPrizeTable[$24].loot
|
||||
JMP .done
|
||||
+ CMP.w #$68 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues)
|
||||
JMP .done
|
||||
+ CMP.w #$6E : BNE +
|
||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$26].loot
|
||||
LDA.l OWBonkPrizeTable[$25].loot
|
||||
JMP .done
|
||||
++ CMP.w #$0008 : BNE ++
|
||||
LDA.l OWBonkPrizeTable[$27].loot
|
||||
LDA.l OWBonkPrizeTable[$26].loot
|
||||
JMP .done
|
||||
++
|
||||
LDA.l OWBonkPrizeTable[$28].loot
|
||||
LDA.l OWBonkPrizeTable[$27].loot
|
||||
JMP .done
|
||||
+ CMP.w #$74 : BNE +
|
||||
LDA.l OWBonkPrizeTable[$29].loot
|
||||
LDA.l OWBonkPrizeTable[$28].loot
|
||||
JMP .done
|
||||
+ CMP.w #$81 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues)
|
||||
|
||||
264
owrando.asm
264
owrando.asm
@@ -161,10 +161,10 @@ jsl.l OWWorldCheck16 : nop
|
||||
org $02b16e ; AND #$3F : ORA 7EF3CA
|
||||
and #$7f : eor #$40 : nop #2
|
||||
|
||||
org $06AD4C
|
||||
jsl.l OWBonkDrops : nop #4
|
||||
org $06AD49
|
||||
jsl.l OWBonkDropsOverworld : nop
|
||||
org $1EDE6F
|
||||
jsl.l OWBonkGoodBeeDrop : bra +
|
||||
jsl.l OWBonkDropsUnderworld : bra +
|
||||
GoldBee_SpawnSelf_SetProperties:
|
||||
phb : lda.b #$1E : pha : plb ; switch to bank 1E
|
||||
jsr GoldBee_SpawnSelf+12
|
||||
@@ -408,7 +408,7 @@ LoadMapDarkOrMixed:
|
||||
dw $0400+$0210 ; bottom right
|
||||
}
|
||||
|
||||
OWBonkGoodBeeDrop:
|
||||
OWBonkDropsUnderworld:
|
||||
{
|
||||
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled
|
||||
.vanilla ; what we wrote over
|
||||
@@ -416,20 +416,63 @@ OWBonkGoodBeeDrop:
|
||||
LDA.l BottleContentsOne : ORA.l BottleContentsTwo
|
||||
ORA.l BottleContentsThree : ORA.l BottleContentsFour
|
||||
RTL
|
||||
|
||||
.shuffled
|
||||
LDA.w $0DD0,X : BNE +
|
||||
JMP .return+1
|
||||
BRA .return+1
|
||||
+ PHY : TXY
|
||||
LDA.l RoomDataWRAM[$0120].high : AND.b #$02 : PHA : BNE + ; check if collected
|
||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
||||
+
|
||||
LDA.l OWBonkPrizeTable[42].mw_player : BEQ + ; multiworld item
|
||||
LDA.l OWBonkPrizeTable[42].loot
|
||||
JMP .spawn_item
|
||||
+
|
||||
JSL OWBonkDrops
|
||||
|
||||
.determine_type ; S = Collected
|
||||
LDA.l OWBonkPrizeTable[42].loot ; A = item id
|
||||
.return
|
||||
PLY
|
||||
LDA #$08 ; makes original good bee not spawn
|
||||
RTL
|
||||
}
|
||||
|
||||
OWBonkDropsOverworld:
|
||||
{
|
||||
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled
|
||||
BRA .vanilla
|
||||
|
||||
.shuffled
|
||||
LDA.w $0DD0,Y : BNE +
|
||||
BRA .vanilla
|
||||
+ LDA.w $0E20,Y : CMP.b #$D9 : BEQ +
|
||||
BRA .vanilla+3
|
||||
+
|
||||
LDA.b #$00 : STA.w $0F20,Y ; restore proper layer
|
||||
JSL OWBonkDrops
|
||||
|
||||
.vanilla
|
||||
LDA.w $0E20,Y : CMP.b #$D8 ; what we wrote over
|
||||
RTL
|
||||
}
|
||||
|
||||
OWBonkDrops:
|
||||
{
|
||||
PHB : PHK : PLB
|
||||
LDA.b $1B : BEQ +
|
||||
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)+1)
|
||||
BRA .found_match
|
||||
+
|
||||
JSR OWBonkDropLookup : BCS .found_match
|
||||
JMP .return+2
|
||||
|
||||
.found_match
|
||||
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
||||
JSR OWBonkDropCollected : PHA : BCS .load_item_and_mw ; S = Collected, FlagBitmask, X (row + 2)
|
||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
||||
; JSLSpriteSFX_QueueSFX3WithPan
|
||||
|
||||
.load_item_and_mw
|
||||
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
||||
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
||||
; multiworld item
|
||||
DEX : PLA ; A = item id; X = row + 3
|
||||
JMP .spawn_item
|
||||
+ DEX : PLA ; A = item id; X = row + 3
|
||||
|
||||
.determine_type ; A = item id; X = row + 3; S = Collected, FlagBitmask, X (row + 2)
|
||||
CMP.b #$B0 : BNE +
|
||||
LDA.b #$79 : JMP .sprite_transform ; transform to bees
|
||||
+ CMP.b #$42 : BNE +
|
||||
@@ -461,140 +504,12 @@ OWBonkGoodBeeDrop:
|
||||
LDA.b #$AC : BRA .sprite_transform ; transform to apples
|
||||
+ CMP.b #$B2 : BNE +
|
||||
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
|
||||
+ CMP.b #$B3 : BNE .spawn_item
|
||||
INX : INX : LDA.l OWBonkPrizeTable[42].vert_offset
|
||||
CLC : ADC.b #$08 : PHA
|
||||
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
|
||||
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
|
||||
|
||||
.sprite_transform
|
||||
JSL.l OWBonkSpritePrep
|
||||
|
||||
.mark_collected ; S = Collected
|
||||
PLA : BNE +
|
||||
LDA.l RoomDataWRAM[$0120].high : ORA.b #$02 : STA.l RoomDataWRAM[$0120].high
|
||||
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
||||
SEP #$20
|
||||
+ BRA .return
|
||||
|
||||
; spawn itemget item
|
||||
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected
|
||||
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return
|
||||
+ PHA
|
||||
|
||||
LDA.b #$01 : STA !FORCE_HEART_SPAWN
|
||||
|
||||
LDA.b #$EB : STA.l $7FFE00
|
||||
JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite
|
||||
|
||||
LDA.b #$01 : STA.w !SPRITE_REDRAW,Y
|
||||
|
||||
PLA : STA.w $0E80,Y
|
||||
|
||||
; affects the rate the item moves in the Y/X direction
|
||||
LDA.b #$00 : STA.w $0D40,Y
|
||||
LDA.b #$0A : STA.w $0D50,Y
|
||||
|
||||
LDA.b #$1A : STA.w $0F80,Y ; amount of force (gives height to the arch)
|
||||
LDA.b #$FF : STA.w $0B58,Y ; stun timer
|
||||
LDA.b #$30 : STA.w $0F10,Y ; aux delay timer 4 ?? dunno what that means
|
||||
|
||||
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
|
||||
|
||||
; sets the tile type that is underneath the sprite, water
|
||||
TYX : LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this
|
||||
|
||||
; sets OW event bitmask flag, uses free RAM
|
||||
LDA.l OWBonkPrizeTable[42].flag : STA.w $0ED0,Y
|
||||
|
||||
; determines the initial spawn point of item
|
||||
LDA.w $0D00,Y : SEC : SBC.l OWBonkPrizeTable[42].vert_offset : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
||||
|
||||
.return
|
||||
PLY
|
||||
LDA #$08 ; makes original good bee not spawn
|
||||
RTL
|
||||
}
|
||||
|
||||
; Y = sprite slot index of bonk sprite
|
||||
OWBonkDrops:
|
||||
{
|
||||
CMP.b #$D8 : BEQ +
|
||||
RTL
|
||||
+ LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE +
|
||||
JSL.l Sprite_TransmuteToBomb : RTL
|
||||
+ LDA.w $0DD0,Y : BNE +
|
||||
RTL
|
||||
+
|
||||
|
||||
; loop thru rando bonk table to find match
|
||||
PHB : PHK : PLB
|
||||
LDA.b $8A
|
||||
LDX.b #(41*6) ; 41 bonk items, 6 bytes each
|
||||
- CMP.w OWBonkPrizeData,X : BNE +
|
||||
INX
|
||||
LDA.w $0D10,Y : LSR A : LSR A : LSR A : LSR A
|
||||
EOR.w $0D00,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
||||
BRA .found_match
|
||||
++ DEX : LDA.b $8A
|
||||
+ CPX.b #$00 : BNE +
|
||||
PLB : RTL
|
||||
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
||||
|
||||
.found_match
|
||||
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 1,S : PHA : BNE + ; S = Collected, FlagBitmask, X (row + 2)
|
||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
||||
+
|
||||
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
||||
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
||||
; multiworld item
|
||||
DEX : PLA ; X = row + 3
|
||||
JMP .spawn_item
|
||||
+ DEX : PLA ; X = row + 3
|
||||
|
||||
.determine_type ; A = item id ; S = Collected, FlagBitmask, X (row + 2)
|
||||
CMP.b #$B0 : BNE +
|
||||
LDA.b #$79 : JMP .sprite_transform ; transform to bees
|
||||
+ CMP.b #$42 : BNE +
|
||||
JSL.l Sprite_TransmuteToBomb ; transform a heart to bomb, vanilla behavior
|
||||
JMP .mark_collected
|
||||
+ CMP.b #$34 : BNE +
|
||||
LDA.b #$D9 : CLC : JMP .sprite_transform ; transform to single rupee
|
||||
+ CMP.b #$35 : BNE +
|
||||
LDA.b #$DA : CLC : JMP .sprite_transform ; transform to blue rupee
|
||||
+ CMP.b #$36 : BNE +
|
||||
LDA.b #$DB : CLC : BRA .sprite_transform ; transform to red rupee
|
||||
+ CMP.b #$27 : BNE +
|
||||
LDA.b #$DC : CLC : BRA .sprite_transform ; transform to 1 bomb
|
||||
+ CMP.b #$28 : BNE +
|
||||
LDA.b #$DD : CLC : BRA .sprite_transform ; transform to 4 bombs
|
||||
+ CMP.b #$31 : BNE +
|
||||
LDA.b #$DE : CLC : BRA .sprite_transform ; transform to 8 bombs
|
||||
+ CMP.b #$45 : BNE +
|
||||
LDA.b #$DF : CLC : BRA .sprite_transform ; transform to small magic
|
||||
+ CMP.b #$B4 : BNE +
|
||||
LDA.b #$E0 : CLC : BRA .sprite_transform ; transform to big magic
|
||||
+ CMP.b #$B5 : BNE +
|
||||
LDA.b #$79 : JSL.l OWBonkSpritePrep
|
||||
JSL.l GoldBee_SpawnSelf_SetProperties ; transform to good bee
|
||||
BRA .mark_collected
|
||||
+ CMP.b #$44 : BNE +
|
||||
LDA.b #$E2 : CLC : BRA .sprite_transform ; transform to 10 arrows
|
||||
+ CMP.b #$B1 : BNE +
|
||||
LDA.b #$AC : BRA .sprite_transform ; transform to apples
|
||||
+ CMP.b #$B2 : BNE +
|
||||
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
|
||||
+ CMP.b #$B3 : BNE .spawn_item
|
||||
INX : INX : LDA.w OWBonkPrizeData,X ; X = row + 5
|
||||
CLC : ADC.b #$08 : PHA
|
||||
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
|
||||
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
|
||||
LDA.b #$0B ; BRA .sprite_transform ; transform to chicken
|
||||
|
||||
.sprite_transform
|
||||
JSL.l OWBonkSpritePrep
|
||||
@@ -602,16 +517,22 @@ OWBonkDrops:
|
||||
.mark_collected ; S = Collected, FlagBitmask, X (row + 2)
|
||||
PLA : BNE + ; S = FlagBitmask, X (row + 2)
|
||||
TYX : JSL Sprite_IsOnscreen : BCC +
|
||||
LDA.b $1B : BEQ ++
|
||||
LDA.l RoomDataWRAM[$0120].high : ORA 1,S : STA.l RoomDataWRAM[$0120].high
|
||||
LDA.w $0400 : ORA 1,S : STA.w $0400
|
||||
BRA .increment_collection
|
||||
++
|
||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : ORA 1,S : STA.l OverworldEventDataWRAM,X
|
||||
|
||||
.increment_collection
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
||||
SEP #$20
|
||||
+ JMP .return
|
||||
+ BRA .return
|
||||
|
||||
; spawn itemget item
|
||||
.spawn_item ; A = item id ; Y = tree sprite slot ; S = Collected, FlagBitmask, X (row + 2)
|
||||
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : JMP .return ; S = FlagBitmask, X (row + 2)
|
||||
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected, FlagBitmask, X (row + 2)
|
||||
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return ; S = FlagBitmask, X (row + 2)
|
||||
+ PHA
|
||||
|
||||
LDA.b #$01 : STA !FORCE_HEART_SPAWN
|
||||
@@ -633,18 +554,57 @@ OWBonkDrops:
|
||||
|
||||
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
|
||||
|
||||
; sets OW event bitmask flag, uses free RAM
|
||||
LDA.b $1B : BEQ +
|
||||
; sets the tile type that is underneath the sprite, water
|
||||
TYX : LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this
|
||||
+
|
||||
|
||||
; sets bitmask flag, uses free RAM
|
||||
PLA : STA.w $0ED0,Y ; S = X (row + 2)
|
||||
|
||||
; determines the initial spawn point of item
|
||||
PLX : INX : INX : INX
|
||||
LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
||||
|
||||
PLB : RTL
|
||||
|
||||
BRA .return+2
|
||||
|
||||
.return
|
||||
PLA : PLA : PLB : RTL
|
||||
PLA : PLA : PLB
|
||||
RTL
|
||||
}
|
||||
|
||||
; Y = sprite slot; returns X = row + 1
|
||||
OWBonkDropLookup:
|
||||
{
|
||||
; loop thru rando bonk table to find match
|
||||
LDA.b $8A
|
||||
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)-sizeof(OWBonkPrizeTable)) ; 41 bonk items, 6 bytes each
|
||||
- CMP.w OWBonkPrizeData,X : BNE +
|
||||
INX
|
||||
LDA.w $0D10,Y : LSR A : LSR A : LSR A : LSR A
|
||||
EOR.w $0D00,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
||||
SEC : RTS
|
||||
++ DEX : LDA.b $8A
|
||||
+ CPX.b #$00 : BNE +
|
||||
CLC : RTS
|
||||
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
||||
}
|
||||
|
||||
; S = FlagBitmask ; returns SEC if collected
|
||||
OWBonkDropCollected:
|
||||
{
|
||||
; check if collected
|
||||
CLC
|
||||
LDA.b $1B : BEQ +
|
||||
LDA.l RoomDataWRAM[$0120].high : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||
SEC : RTS
|
||||
+
|
||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||
SEC : RTS
|
||||
|
||||
.return
|
||||
RTS
|
||||
}
|
||||
|
||||
; A = SpriteID, Y = Sprite Slot Index, X = free/overwritten
|
||||
@@ -1717,7 +1677,7 @@ db $18, $a8, $10, $b2, $00, $20
|
||||
db $18, $36, $08, $35, $00, $20
|
||||
db $1a, $8a, $10, $42, $00, $20
|
||||
db $1a, $1d, $08, $b2, $00, $20
|
||||
db $ff, $77, $04, $35, $00, $20 ; pre aga ONLY ; hijacked murahdahla bonk tree
|
||||
;db $1a, $77, $04, $35, $00, $20 ; pre aga ONLY ; hijacked murahdahla bonk tree
|
||||
db $1b, $46, $10, $b1, $00, $10
|
||||
db $1d, $6b, $10, $b1, $00, $20
|
||||
db $1e, $72, $10, $b2, $00, $20
|
||||
@@ -1728,6 +1688,7 @@ db $2e, $9c, $10, $b2, $00, $20
|
||||
db $2e, $b4, $08, $b0, $00, $20
|
||||
db $32, $29, $10, $42, $00, $20
|
||||
db $32, $9a, $08, $b2, $00, $20
|
||||
;db $34, $xx, $10, $xx, $00, $1c ; pre aga ONLY
|
||||
db $42, $66, $10, $b2, $00, $20
|
||||
db $51, $08, $10, $b2, $00, $04
|
||||
db $51, $09, $08, $b2, $00, $04
|
||||
@@ -1743,6 +1704,7 @@ db $6e, $8c, $10, $35, $00, $10
|
||||
db $6e, $90, $08, $b0, $00, $10
|
||||
db $6e, $a4, $04, $b1, $00, $10
|
||||
db $74, $4e, $10, $b1, $00, $1c
|
||||
UWBonkPrizeData:
|
||||
db $ff, $00, $02, $b5, $00, $08
|
||||
|
||||
; temporary fix - murahdahla replaces one of the bonk tree prizes
|
||||
|
||||
Reference in New Issue
Block a user