From e749b6d6bce8b74ab02a0df4a6121b22f6929f50 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sun, 24 May 2026 19:09:33 -0500 Subject: [PATCH] Fix several foutonFindings: - Dark Palace -> Palace of Darkness - show dungeon name for multi keys - fix IP block drop lock - HUD improvements --- dialog.asm | 118 +++++++++++++---------- doorrando/spiral.asm | 19 +++- gk/loot_hud.asm | 17 ++++ itemtext.asm | 4 +- menu/door_connectors.3bpp | Bin 1536 -> 1536 bytes menu/door_connectors.3bppc | Bin 903 -> 903 bytes multiworld.asm | 5 + newitems.asm | 190 ++++++++++++++++++------------------- 8 files changed, 199 insertions(+), 154 deletions(-) diff --git a/dialog.asm b/dialog.asm index 719bd37..8625c85 100644 --- a/dialog.asm +++ b/dialog.asm @@ -61,73 +61,84 @@ LoadDialogAddressIndirect: RTL ;-------------------------------------------------------------------------------- FreeDungeonItemNotice: - STA.l ScratchBufferV + STA.l ScratchBufferV - PHA : PHX : PHY - PHP - PHB : PHK : PLB - SEP #$20 ; set 8-bit accumulator - REP #$10 ; set 16-bit index registers - PEI.b (Scrap00) - LDA.b Scrap02 : PHA - LDA.l ScratchBufferNV : PHA - LDA.l ScratchBufferNV+1 : PHA + PHA : PHX : PHY + PHP + PHB : PHK : PLB + SEP #$20 ; set 8-bit accumulator + REP #$10 ; set 16-bit index registers + PEI.b (Scrap00) + LDA.b Scrap02 : PHA + LDA.l ScratchBufferNV : PHA + LDA.l ScratchBufferNV+1 : PHA ;-------------------------------- - LDA.l FreeItemText : BNE + : JMP .skip : + + LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ + + LDA.b #$2F ; if not from our world, show all dungeon item and crystal notices ++ ORA.l FreeItemText : BNE + : JMP .skip : + + STA.b Scrap00 LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch - LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key + + LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for general small key LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key %CopyDialog(Notice_SmallKeyOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done - + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass + ++ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for general compass LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass %CopyDialog(Notice_CompassOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done - + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map + ++ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for general map LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map %CopyDialog(Notice_MapOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done - + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key + ++ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for general big key LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key %CopyDialog(Notice_BigKeyOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done - + - LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map + ++ LDA.b Scrap00 : AND.b #$04 : BEQ + ; show message for dungeon map LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... %CopyDialog(Notice_MapOf) JMP .dungeon - + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass + ++ LDA.b Scrap00 : AND.b #$02 : BEQ + ; show message for dungeon compass LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) JMP .dungeon - + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key + ++ LDA.b Scrap00 : AND.b #$08 : BEQ + ; show message for dungeon big key LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) JMP .dungeon - + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key + ++ LDA.b Scrap00 : AND.b #$01 : BEQ + ; show message for dungeon small key LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ %CopyDialog(Notice_SmallKeyOf) LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys BRA .dungeon - + : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal + ++ LDA.b Scrap00 : AND.b #$20 : BEQ + ; show message for crystal LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal # - CMP.b #$B7 : !BGE + + CMP.b #$B7 : !BGE + %CopyDialog(Notice_Crystal) JMP .crystal - + - JMP .skip ; it's not something we are going to give a notice for + ++ JMP .skip ; it's not something we are going to give a notice for .dungeon LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer @@ -139,23 +150,26 @@ FreeDungeonItemNotice: LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys + LDA.l ScratchBufferNV+1 - ASL : TAX - REP #$20 - LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers - CMP.w DungeonID : BNE + - BRA .self_notice - .hc_sewers - LDA.w DungeonID : CMP.w #$0003 : BCS + - .self_notice - SEP #$20 - LDA.l FreeItemText : AND.b #$40 : BEQ ++ - LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1 - JMP .skip - ++ - %CopyDialog(Notice_Self) - JMP .done - + - SEP #$20 + ASL : TAX + REP #$20 + + LDA.l !MULTIWORLD_ITEM_PLAYER_ID : AND.w #$00FF : BNE + + + LDA.l DungeonItemIDMap, X : CMP.w #$0003 : BCC .hc_sewers + CMP.w DungeonID : BNE + + BRA .self_notice + .hc_sewers + LDA.w DungeonID : CMP.w #$0003 : BCS + + .self_notice + SEP #$20 + LDA.l FreeItemText : AND.b #$40 : BEQ ++ + LDA.b #$00 : STA.l DialogOffsetPointer : STA.l DialogOffsetPointer+1 + JMP .skip + ++ + %CopyDialog(Notice_Self) + JMP .done + + + SEP #$20 LDA.l ScratchBufferNV+1 CMP.b #$00 : BNE + ; ...light world %CopyDialog(Notice_LightWorld) : JMP .done @@ -190,9 +204,9 @@ FreeDungeonItemNotice: + : CMP.b #$0F : BNE + ; ...sewers %CopyDialog(Notice_Sewers) + - JMP .done + JMP .done - .crystal + .crystal LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l ScratchBufferV AND.b #$0F ; looking at low bits only @@ -210,7 +224,7 @@ FreeDungeonItemNotice: %CopyDialog(Notice_Four) : JMP .done + : CMP.b #$06 : BNE + %CopyDialog(Notice_Three) : JMP .done - + + + .done @@ -220,14 +234,14 @@ FreeDungeonItemNotice: ;-------------------------------- .skip - PLA : STA.l ScratchBufferNV+1 - PLA : STA.l ScratchBufferNV - PLA : STA.b Scrap02 - REP #$20 - PLA : STA.b Scrap00 - PLB - PLP - PLY : PLX : PLA + PLA : STA.l ScratchBufferNV+1 + PLA : STA.l ScratchBufferNV + PLA : STA.b Scrap02 + REP #$20 + PLA : STA.b Scrap00 + PLB + PLP + PLY : PLX : PLA RTL ;-------------------------------------------------------------------------------- diff --git a/doorrando/spiral.asm b/doorrando/spiral.asm index 7a748f9..4b4c8cc 100644 --- a/doorrando/spiral.asm +++ b/doorrando/spiral.asm @@ -21,14 +21,19 @@ SpiralWarp: { lda.w $045e : cmp.b #$5e : beq .gtg ; abort if not spiral - intended room is in A! cmp.b #$5f : beq .gtg cmp.b #$26 : beq .inroom - .abort - SEP #$30 : stz.w $045e : lda.b PreviousRoom : and.b #$0f : rtl ; clear,run hijacked code and get out - .inroom +.abort + SEP #$30 + stz.w $045e + JSL UpdateLootHUD + lda.b PreviousRoom : and.b #$0f + rtl ; clear,run hijacked code and get out + +.inroom jsr InroomStairsWarp lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking rtl - .gtg +.gtg phb : phk : plb : phx : phy ; push stuff jsr LookupSpiralOffset rep #$30 : and.w #$00FF : asl #2 : tax @@ -81,6 +86,8 @@ SpiralWarp: { ldy.b #$01 : jsr SetCamera jsr StairCleanup + JSL UpdateLootHUD + ply : plx : plb ; pull the stuff we pushed lda.b PreviousRoom : and.b #$0f ; this is the code we are hijacking rtl @@ -261,6 +268,8 @@ InroomStairsWarp: { .skipCamera jsr StairCleanup + JSL UpdateLootHUD + ply : plx : plb ; pull the stuff we pushed rts } @@ -335,4 +344,4 @@ SpiralPriorityHack: { lda.b #$01 : rtl ; always skip the priority code - until I figure out how to fix it + lda.w $0462 : and.b #$04 ; what we wrote over rtl -} \ No newline at end of file +} diff --git a/gk/loot_hud.asm b/gk/loot_hud.asm index 9c4ecd2..25b4356 100644 --- a/gk/loot_hud.asm +++ b/gk/loot_hud.asm @@ -2,8 +2,25 @@ pushpc org $82C0C3 JSL TransitionLinkOutOfDoorEnding NOP + +org $87956F +JSL UpdateHUDAndLandLink + +org $829611 +JSL UpdateHUDAndUpdateQuadrants pullpc +UpdateHUDAndLandLink: + JSL UpdateLootHUD + LDA.b $51 + STA.b LinkPosY + RTL + +UpdateHUDAndUpdateQuadrants: + JSL UpdateLootHUD + JSL $82B803 + RTL + ClearLootHUD: LDA.b GameMode CMP.b #$07 diff --git a/itemtext.asm b/itemtext.asm index dfe9530..a4b65b0 100644 --- a/itemtext.asm +++ b/itemtext.asm @@ -46,7 +46,7 @@ dw $7F7F ; Ganons Tower Notice_GTower: -db $76 : dw "Ganons Tower" +db $76 : dw "Ganon's Tower" dw $7F7F ; Turtle Rock @@ -81,7 +81,7 @@ dw $7F7F ; Dark Palace Notice_PoD: -db $76 : dw "Dark Palace" +db $76 : dw "Palace of Darkness" dw $7F7F ; Swamp Palace diff --git a/menu/door_connectors.3bpp b/menu/door_connectors.3bpp index fc84b8ec72780e65a3fdca60b174e8d372b01b39..0bbf942db15b0f272680fba1188842dbf6621a41 100644 GIT binary patch delta 24 dcmZqRY2ewQ%fijZ&&B`({G6PdEm%%40su3>1Ni^| delta 24 dcmZqRY2ewQ%fijd&&mJ-{9Ig{Em%%40su3w1Ni^| diff --git a/menu/door_connectors.3bppc b/menu/door_connectors.3bppc index 22666d321eb11342be790e46a6b6258095ad1b02..26c0bd8fab11ca18f1e33210f74d220e6769afbe 100644 GIT binary patch delta 46 zcmZo?Z)e|7&&0{rYR$yR$*IaPxr1q^2w(la`UZx21_p6)Wo5^DhGuOR#>t_~MgR^Y B3l0DP delta 46 zcmZo?Z)e|7&&0{vYR$yJ)h5p}xr1q^h)Dgu`UZx21_p6)Wo1Vo&CkX^Ih5H502yEk A{{R30 diff --git a/multiworld.asm b/multiworld.asm index 985a0df..a186ef0 100644 --- a/multiworld.asm +++ b/multiworld.asm @@ -123,6 +123,11 @@ GetMultiworldItem: BRL .return + + LDA.b LinkPushDirection + BEQ + + BRL .return + + + LDA.l !MULTIWORLD_ITEM : BNE + BRL .return + diff --git a/newitems.asm b/newitems.asm index e7c44ab..697a845 100755 --- a/newitems.asm +++ b/newitems.asm @@ -155,8 +155,8 @@ AddReceivedItemExpandedGetItem: PHA : LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BEQ + PLA : BRA .done + PLA - JSR ItemBehavior - SEP #$30 + JSR ItemBehavior + SEP #$30 .done PLB : PLX LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over @@ -229,13 +229,13 @@ ItemBehavior: JSR .increment_sword RTS - .fighter_shield + .fighter_shield .red_shield .mirror_shield SEP #$10 LDA.l ProgressiveFlag : BEQ + - LDA.l HighestShield : INC : TAX - JSR .increment_shield + LDA.l HighestShield : INC : TAX + JSR .increment_shield + RTS .blue_mail @@ -269,7 +269,7 @@ ItemBehavior: .prog_shield SEP #$10 LDA.l HighestShield : INC : TAX - JSR .increment_shield + JSR .increment_shield REP #$10 RTS @@ -282,13 +282,13 @@ ItemBehavior: .bow BIT.b #$40 : BNE .silversbow - LDA.b #$01 : STA.l BowEquipment + LDA.b #$01 : STA.l BowEquipment RTS .silversbow LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE + - LDA.b #03 : STA.l BowEquipment ; set bow to silver + LDA.b #03 : STA.l BowEquipment ; set bow to silver + LDA.b #$01 : STA.l BowEquipment RTS @@ -331,16 +331,16 @@ ItemBehavior: .bow_and_arrows LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers LDA.l SilverArrowsUseRestriction : BNE .no_silvers - LDA.l CurrentArrows : BEQ + - LDA.b #04 : STA.l BowEquipment - BRA .store_bow - + - LDA.b #$03 + LDA.l CurrentArrows : BEQ + + LDA.b #04 : STA.l BowEquipment BRA .store_bow + + + LDA.b #$03 + BRA .store_bow .no_silvers LDA.l CurrentArrows : BEQ + - LDA.b #02 - BRA .store_bow + LDA.b #02 + BRA .store_bow + LDA.b #$01 .store_bow @@ -350,13 +350,13 @@ ItemBehavior: .silver_bow LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE .noequip - LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip - LDA.l CurrentArrows : BNE + ; check arrows - LDA.b #$03 : BRA ++ ; bow without arrow - + - LDA.b #$04 ; bow with arrow - ++ - STA.l BowEquipment + LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip + LDA.l CurrentArrows : BNE + ; check arrows + LDA.b #$03 : BRA ++ ; bow without arrow + + + LDA.b #$04 ; bow with arrow + ++ + STA.l BowEquipment .noequip RTS @@ -385,7 +385,7 @@ ItemBehavior: .master_sword_safe SEP #$10 LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword - LDA.b #$02 : STA.l SwordEquipment ; set master sword + LDA.b #$02 : STA.l SwordEquipment ; set master sword + LDX.b #$02 JSR .increment_sword @@ -426,20 +426,20 @@ ItemBehavior: .silver_arrows LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE ++ - LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++ - LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE + - !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow - + - ++ + LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++ + LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE + + !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow + + + ++ LDA.l ArrowMode : BEQ + - LDA.b #$01 : STA.l ArrowsFiller + LDA.b #$01 : STA.l ArrowsFiller + RTS .single_arrow LDA.l ArrowMode : BEQ + - LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address - LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode. + LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address + LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode. + RTS @@ -474,7 +474,7 @@ ItemBehavior: .triforce LDA.b OverworldIndex : CMP.b #$80 : BNE + LDA.b LinkPosX+1 : BNE + - JSL ActivateGoal + JSL ActivateGoal + RTS @@ -484,10 +484,10 @@ ItemBehavior: LDA.l GoalCounter : INC : STA.l GoalCounter CMP.w GoalItemRequirement : BCC + LDA.l TurnInGoalItems : AND.w #$00FF : BNE + - SEP #$20 ; set 8-bit accumulator - LDA.b OverworldIndex : CMP.b #$80 : BNE + - LDA.b LinkPosX+1 : BNE + - JSL ActivateGoal + SEP #$20 ; set 8-bit accumulator + LDA.b OverworldIndex : CMP.b #$80 : BNE + + LDA.b LinkPosX+1 : BNE + + JSL ActivateGoal + SEP #$20 ; set 8-bit accumulator RTS @@ -559,8 +559,8 @@ ItemBehavior: LSR AND.w #$000F : TAX ASL : CMP.w DungeonID : BEQ .same_dungeon - LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X - RTS + LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X + RTS .same_dungeon SEP #$20 LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X @@ -575,69 +575,69 @@ ItemBehavior: .hc_smallkey LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc - LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys - LDA.l SewerKeys : INC : STA.l SewerKeys - RTS + LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys + LDA.l SewerKeys : INC : STA.l SewerKeys + RTS .generic_smallkey LDA.l GenericKeys : BEQ .normal - LDA.l CurrentSmallKeys : INC - STA.l CurrentGenericKeys : STA.l CurrentSmallKeys - RTS + LDA.l CurrentSmallKeys : INC + STA.l CurrentGenericKeys : STA.l CurrentSmallKeys + RTS .normal LDA.w DungeonID : BMI + - LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - RTS + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys + RTS + RTS .increment_sword LDA.l HighestSword INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better sword - TXA : STA.l HighestSword + TXA : STA.l HighestSword + RTS .increment_shield LDA.l HighestShield INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better shield - TXA : STA.l HighestShield + TXA : STA.l HighestShield + RTS .increment_mail LDA.l HighestMail INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better mail - TXA : STA.l HighestMail + TXA : STA.l HighestMail + RTS .increment_bigkey SEP #$20 LDA.l StatsLocked : BNE + - LDA.l BigKeysBigChests - CLC : ADC.b #$10 - STA.l BigKeysBigChests + LDA.l BigKeysBigChests + CLC : ADC.b #$10 + STA.l BigKeysBigChests + RTS .increment_map SEP #$20 LDA.l StatsLocked : BNE + - LDA.l MapsCompasses - CLC : ADC.b #$10 - STA.l MapsCompasses - JSL MaybeFlagMapTotalPickup + LDA.l MapsCompasses + CLC : ADC.b #$10 + STA.l MapsCompasses + JSL MaybeFlagMapTotalPickup + RTS .increment_compass SEP #$20 LDA.l StatsLocked : BNE + - LDA.l MapsCompasses : INC : AND.b #$0F : TAX - LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses - TXA : ORA.l MapsCompasses : STA.l MapsCompasses - JSL MaybeFlagCompassTotalPickup + LDA.l MapsCompasses : INC : AND.b #$0F : TAX + LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses + TXA : ORA.l MapsCompasses : STA.l MapsCompasses + JSL MaybeFlagCompassTotalPickup + RTS @@ -647,7 +647,7 @@ ItemBehavior: SEC : SBC.b #$37 TAX LDA.w PendantMasks,X : AND.l PendantsField : BNE + - LDA.l PendantCounter : INC : STA.l PendantCounter + LDA.l PendantCounter : INC : STA.l PendantCounter + RTS @@ -663,15 +663,15 @@ ItemBehavior: LDA.w #$0000 SEC - - ROL - DEX + ROL + DEX BPL - SEP #$20 TAX AND.l CrystalsField : BNE + - TXA - ORA.l CrystalsField : STA.l CrystalsField - LDA.l CrystalCounter : INC : STA.l CrystalCounter + TXA + ORA.l CrystalsField : STA.l CrystalsField + LDA.l CrystalCounter : INC : STA.l CrystalCounter + .done RTS @@ -682,56 +682,56 @@ ItemBehavior: .bee_trap SEP #$30 LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee - LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y - LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 - LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y - LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 + LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y + LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + RTS .good_bee SEP #$30 LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee - LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y - LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 - LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y - LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link - JSL GoldBee_SpawnSelf_SetProperties + LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 + LDA.b LinkPosY : STA.w SpritePosYLow, Y : LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y + LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + JSL GoldBee_SpawnSelf_SetProperties + RTS .apples SEP #$30 LDA.b #$AC : JSL Sprite_SpawnDynamically : BMI + - LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y - LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 - LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y - LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels - LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link - LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire + LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 + LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y + LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels + LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire + RTS .fairy SEP #$30 LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI + - LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y - LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 - LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y - LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels - LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link - LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire + LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 + LDA.b LinkPosY : SEC : SBC.b #$10 : STA.w SpritePosYLow,Y + LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 16 pixels + LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + LDA.b #$FF : STA.w EnemyStunTimer,Y ; allows them to expire + RTS .chicken SEP #$30 LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI + - LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y - LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 - LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y - LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels - LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + LDA.b LinkPosX : CLC : ADC.b #$03 : AND.b #$F8 : STA.w SpritePosXLow,Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh,Y ; round X to nearest 8 + LDA.b LinkPosY : SEC : SBC.b #$08 : STA.w SpritePosYLow,Y + LDA.b LinkPosY+1 : SBC.b #$00 : STA.w SpritePosYHigh,Y ; move up 8 pixels + LDA.b LinkLayer : STA.w SpriteLayer,Y ; spawns on same layer as link + RTS @@ -804,7 +804,7 @@ ResolveLootID: CMP.l ProgressiveSwordLimit : BCC + LDA.l ProgressiveSwordReplacement JMP .get_item - ++ LDA.l SwordEquipment + ++ LDA.l SwordEquipment + TAX LDA.w .prog_sword_ids,X @@ -820,7 +820,7 @@ ResolveLootID: CMP.l ProgressiveShieldLimit : BCC + LDA.l ProgressiveShieldReplacement JMP .get_item - ++ LDA.l HighestShield + ++ LDA.l HighestShield + TAX LDA.w .shields_ids,X @@ -836,7 +836,7 @@ ResolveLootID: LDA.l ProgressiveArmorReplacement JMP .get_item + - ++ LDA.l ArmorEquipment + ++ LDA.l ArmorEquipment TAX LDA.w .armor_ids,X JMP .have_item