Support for new items
Support for static enemy drops Bug fix for wrong sprites dead
This commit is contained in:
@@ -30,7 +30,7 @@ org $09C35A
|
||||
DEC.b $03
|
||||
|
||||
org $09C36E
|
||||
LDA.b $03
|
||||
JSL GetSpriteSlot16Bit ; depended on high bit being zero, which it isn't anymore
|
||||
|
||||
org $09C383
|
||||
LDX.b $03
|
||||
|
||||
@@ -4,3 +4,8 @@ LoadUnderworldSprites:
|
||||
LDA.w $048E
|
||||
RTL
|
||||
|
||||
GetSpriteSlot16Bit:
|
||||
LDA.b $03 : AND #$00FF
|
||||
ASL A
|
||||
TAY
|
||||
RTL
|
||||
@@ -318,10 +318,21 @@ RevealSpriteDrop:
|
||||
LDA.l SprItemReceipt, X : STA SpawnedItemID
|
||||
LDA.l SprItemMWPlayer, X : STA SpawnedItemMWPlayer
|
||||
LDY.b #$01 ; trigger the small key routines
|
||||
LDA SpawnedItemID : CMP #$32 : BNE +
|
||||
LDA.w SpawnedItemID : STA.b $00 : CMP #$32 : BNE +
|
||||
LDA.l StandingItemsOn : BNE +
|
||||
INY ; big key routine
|
||||
+ RTL ; unstun if stunned
|
||||
+
|
||||
PHX : LDX.b #$00
|
||||
- CPX.b #$1A : BCS .done
|
||||
LDA.l MinorForcedDrops, X
|
||||
CMP.b $00 : BNE +
|
||||
INX : LDA.l MinorForcedDrops, X : STA.b $00
|
||||
PLX : PLA : PLA : PEA.w $06F9D7-1 ; change call stack for PrepareEnemyDrop
|
||||
JSR IncrementCountForMinor
|
||||
LDA.b $00 : RTL
|
||||
+ INX #2 : BRA -
|
||||
.done PLX
|
||||
RTL ; unstun if stunned
|
||||
.normal
|
||||
LDY.w $0CBA, X : BEQ .no_forced_drop
|
||||
RTL
|
||||
@@ -341,6 +352,41 @@ RevealSpriteDrop2:
|
||||
PEA.w $06E3CE-1 ; change return address to .no_forced_drop of (Sprite_DoTheDeath)
|
||||
RTL
|
||||
|
||||
MinorForcedDrops:
|
||||
; Item ID -> Sprite ID
|
||||
db $27, $DC ; BOMB REFILL 1
|
||||
db $28, $DD ; BOMB REFILL 4
|
||||
db $31, $DE ; BOMB REFILL 8
|
||||
db $34, $D9 ; GREEN RUPEE ($34)
|
||||
db $35, $DA ; BLUE RUPEE ($35)
|
||||
db $36, $DB ; RED RUPEE ($36)
|
||||
db $42, $D8 ; HEART ($42)
|
||||
db $44, $E2 ; ARROW REFILL 10 ($44)
|
||||
db $45, $DF ; SMALL MAGIC DECANTER ($45)
|
||||
db $B2, $E3 ; FAERIE ($B2)
|
||||
db $B3, $0B ; CUCCO ($B3)
|
||||
db $B4, $E0 ; LARGE MAGIC DECANTER ($B4)
|
||||
db $B5, $E1 ; ARROW REFILL 5 (x??)
|
||||
|
||||
|
||||
IncrementCountForMinor:
|
||||
PHX : REP #$30
|
||||
LDA.w SpawnedItemIndex : ASL : TAX : LDA.l BitFieldMasks, X : STA $0A
|
||||
LDA.b $A0 : ASL : TAX
|
||||
LDA.l SpritePotData, X : BIT $0A : BNE .obtained
|
||||
ORA $0A : STA SpritePotData, X
|
||||
SEP #$30
|
||||
LDA $040C : CMP #$FF : BEQ +
|
||||
BNE ++
|
||||
INC #2 ; treat sewers as HC
|
||||
++ LSR : TAX : LDA DungeonLocationsChecked, X : INC : STA DungeonLocationsChecked, X
|
||||
; Could increment GT Tower Pre Big Key but we aren't showing that stat right now
|
||||
+ REP #$30
|
||||
LDA TotalItemCounter : INC : STA TotalItemCounter ; Increment Item Total
|
||||
.obtained
|
||||
SEP #$30 : PLX
|
||||
RTS
|
||||
|
||||
BitFieldMasks:
|
||||
dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100
|
||||
dw $0080, $0040, $0020, $0010, $0008, $0004, $0002, $0001
|
||||
@@ -348,6 +394,7 @@ dw $0080, $0040, $0020, $0010, $0008, $0004, $0002, $0001
|
||||
; Runs during Sprite_E4_SmallKey and duning Sprite_E5_BigKey spawns
|
||||
ShouldSpawnItem:
|
||||
LDA $048E : CMP.b #$87 : BNE + ; check for hera basement cage
|
||||
CPX #$0A : BNE + ; the hera basement key is always sprite 0x0A
|
||||
LDA $A8 : AND.b #$03 : CMP.b #$02 : BNE + ; we're not in that quadrant
|
||||
LDA.w $0403 : AND.w KeyRoomFlagMasks,Y : RTL
|
||||
+
|
||||
@@ -372,6 +419,7 @@ ShouldSpawnItem:
|
||||
|
||||
MarkSRAMForItem:
|
||||
LDA $048E : CMP.b #$87 : BNE + ; check for hera basement cage
|
||||
CPX #$0A : BNE + ; the hera basement key is always sprite 0x0A
|
||||
LDA $A8 : AND.b #$03 : CMP.b #$02 : BNE +
|
||||
LDA.w $0403 : ORA.w KeyRoomFlagMasks, Y : RTL
|
||||
+ PHX : PHY : REP #$30
|
||||
@@ -391,6 +439,7 @@ SpriteKeyPrep:
|
||||
LDA.w $0B9B : STA.w $0CBA, X ; what we wrote over
|
||||
PHA
|
||||
LDA $A0 : CMP #$87 : BNE .continue
|
||||
CPX #$0A : BNE .continue ; the hera basement key is always sprite 0x0A
|
||||
LDA $A9 : ORA $AA : AND #$03 : CMP #$02 : BNE .continue
|
||||
LDA #$00 : STA.w SpawnedItemFlag : STA SprItemFlags, X
|
||||
LDA #$24 : STA $0E80, X
|
||||
|
||||
96
newitems.asm
96
newitems.asm
@@ -40,6 +40,9 @@
|
||||
; #$90 - Big Keys
|
||||
; #$A0 - Small Keys
|
||||
; #$B0 - Bee Trap
|
||||
; #$B2 - Fairy
|
||||
; #$B3 - Chicken
|
||||
; #$B4 - Big Magic
|
||||
; #$FE - Server Request (Asychronous Chest)
|
||||
; #$FF - Null Chest
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -395,10 +398,13 @@ AddReceivedItemExpandedGetItem:
|
||||
++
|
||||
JMP .done
|
||||
+ CMP.b #$B0 : BNE + ; Bee Trap
|
||||
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee
|
||||
LDA $22 : STA $0D10, Y : LDA $23 : STA $0D30, Y ; from enemizer's Spawn_Bees
|
||||
LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI ++ ; DashBeeHive_SpawnBee
|
||||
LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y
|
||||
LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8
|
||||
LDA $20 : STA $0D00, Y : LDA $21 : STA $0D20, Y
|
||||
+
|
||||
LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link
|
||||
++ JMP .done
|
||||
+ JSR NewItemsChecks
|
||||
.done
|
||||
PLX
|
||||
LDA $02E9 : CMP.b #$01 ; thing we wrote over
|
||||
@@ -553,6 +559,7 @@ AddReceivedItemExpanded:
|
||||
;DATA AddReceivedItemExpanded
|
||||
{
|
||||
; This is a temporary measure for Fish to have consistent addresses
|
||||
warnpc $A08800
|
||||
org $A08800
|
||||
|
||||
.y_offsets
|
||||
@@ -590,7 +597,12 @@ org $A08800
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Big Key
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Small Key
|
||||
db -4 ; Bee Trap
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused
|
||||
db -4 ; Apples
|
||||
db -4 ; Fairy
|
||||
db -4 ; Chicken
|
||||
db -4 ; Big Magic
|
||||
db -4 ; 5 Arrows
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused
|
||||
db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused
|
||||
@@ -631,7 +643,12 @@ org $A08800
|
||||
;db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; *EVENT*
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key
|
||||
db 0 ; Bee Trap
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused
|
||||
db 0 ; Apples
|
||||
db 0 ; Fairy
|
||||
db 0 ; Chicken
|
||||
db 4 ; Big Magic
|
||||
db 0 ; 5 Arrows
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused
|
||||
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused
|
||||
@@ -677,7 +694,12 @@ org $A08800
|
||||
;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT*
|
||||
|
||||
db $47 ; Bee Trap
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $47 ; Apples
|
||||
db $47 ; Fairy
|
||||
db $47 ; Chicken
|
||||
db $3B ; Big Magic
|
||||
db $02 ; 5 Arrows
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
@@ -717,8 +739,12 @@ org $A08800
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Big Key
|
||||
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; Free Small Key
|
||||
db $02 ; Bee Trap
|
||||
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused
|
||||
db $02 ; Apples
|
||||
db $02 ; Fairy
|
||||
db $02 ; Chicken
|
||||
db $00 ; Big Magic
|
||||
db $02 ; 5 Arrows
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused
|
||||
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused
|
||||
@@ -759,7 +785,12 @@ org $A08800
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Big Key
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key
|
||||
db 1 ; Bee Trap
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused
|
||||
db 1 ; Apples
|
||||
db 1 ; Fairy
|
||||
db 1 ; Chicken
|
||||
db 4 ; Big Magic
|
||||
db 2 ; 5 Arrows
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused
|
||||
db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused
|
||||
@@ -801,7 +832,12 @@ org $A08800
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Big Key
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Small Key
|
||||
dw $F36A ; Bee Trap
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused
|
||||
dw $F36A ; Apples
|
||||
dw $F36A ; Fairy
|
||||
dw $F36A ; Chicken
|
||||
dw $F373 ; Big Magic
|
||||
dw $F376 ; 5 Arrows
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused
|
||||
dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused
|
||||
@@ -845,7 +881,12 @@ org $A08800
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Big Key
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Small Key
|
||||
db $FF ; Bee Trap
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused
|
||||
db $FF ; Apples
|
||||
db $FF ; Fairy
|
||||
db $FF ; Chicken
|
||||
db $80 ; Big Magic
|
||||
db $05 ; 5 Arrows
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused
|
||||
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused
|
||||
@@ -930,8 +971,12 @@ Link_ReceiveItemAlternatesExpanded:
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Compass
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Big Key
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Small Key
|
||||
db -1 ; Bee Trap
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused
|
||||
db -1 ; Apples
|
||||
db -1 ; Fairy
|
||||
db -1 ; Chicken
|
||||
db -1 ; Big Magic
|
||||
db -1 ; 5 Arrows
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused
|
||||
db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused
|
||||
@@ -1213,3 +1258,28 @@ MaybeFlagCompassTotalEntrance:
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
NewItemsChecks:
|
||||
CMP.b #$B2 : BNE + ; Fairy
|
||||
LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI .done
|
||||
LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y
|
||||
LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8
|
||||
LDA.b $20 : SEC : SBC.b #$10 : STA.w $0D00,Y
|
||||
LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 16 pixels
|
||||
LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link
|
||||
LDA.b #$FF : STA.w $0B58,Y ; allows them to expire
|
||||
BRA .done
|
||||
+ CMP.b #$B3 : BNE + ; Chicken
|
||||
LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI .done
|
||||
LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y
|
||||
LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8
|
||||
LDA.b $20 : SEC : SBC.b #$08 : STA.w $0D00,Y
|
||||
LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 8 pixels
|
||||
LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link
|
||||
BRA .done
|
||||
+ CMP.b #$B4 : BNE .done ; Big Magic
|
||||
LDA.b #$80 : STA MagicFiller ; fill magic
|
||||
.done
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
@@ -154,7 +154,12 @@ RTL
|
||||
db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key
|
||||
|
||||
db $2C ; Bee Trap
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $4A ; Apples
|
||||
db $4A ; Fairy
|
||||
db $4A ; Chicken
|
||||
db $3B ; Big Magic
|
||||
db $02 ; 5 Arrows
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused
|
||||
@@ -284,7 +289,12 @@ RTL
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Big Key
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Small Key
|
||||
db $04 ; Bee Trap
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
|
||||
db $08 ; Apples
|
||||
db $08 ; Fairy
|
||||
db $08 ; Chicken
|
||||
db $08 ; Big Magic
|
||||
db $04 ; 5 Arrows
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
|
||||
db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused
|
||||
@@ -375,7 +385,7 @@ RTL
|
||||
db $15, $18, $24, $2A, $34, $35, $36, $42
|
||||
db $43, $45, $59, $A0, $A1, $A2, $A3, $A4
|
||||
db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC
|
||||
db $AD, $AE, $AF, $FF, $FF, $FF, $FF, $FF
|
||||
db $AD, $AE, $AF, $B4, $FF, $FF, $FF, $FF
|
||||
}
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user