diff --git a/doorrando/hudadditions.asm b/doorrando/hudadditions.asm index 80ed2cf..d5e8778 100644 --- a/doorrando/hudadditions.asm +++ b/doorrando/hudadditions.asm @@ -74,7 +74,7 @@ DRHUD_DrawKeyCounter: LDA.w MapField : AND.l DungeonMask, X : BEQ DRHUD_Finished TXA : LSR : TAX LDA.l GenericKeys : AND.w #$00FF : BNE .total_only - LDA.l DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained + LDA.w DungeonCollectedKeys, X : JSR ConvertToDisplay : STA.w HUDKeysObtained LDA.w #!SlashTile : STA.w HUDKeysSlash .total_only LDA.l ChestKeys, x : JSR ConvertToDisplay : STA.w HUDKeysTotal diff --git a/doorrando/normal.asm b/doorrando/normal.asm index d037ed7..b4359b6 100644 --- a/doorrando/normal.asm +++ b/doorrando/normal.asm @@ -433,7 +433,7 @@ HandleSpecialDoorLanding: { HandleIncomingDoorState: PHA LDA.l DRMode : BEQ .noDoor - PLA : PHA : AND.b #$FA : CMP.b #$80 : bne .noDoor + LDA.b 1,S : AND.b #$FA : CMP.b #$80 : bne .noDoor .setDoorState LDA.w TransitionDirection : AND.b #$02 : BNE + : INC diff --git a/doorrando/spiral.asm b/doorrando/spiral.asm index f2c3fe5..7a748f9 100644 --- a/doorrando/spiral.asm +++ b/doorrando/spiral.asm @@ -202,7 +202,7 @@ InroomStairsWarp: { lda.w InroomStairsX,y : sta.b LinkPosX lda.w InroomStairsY,y ldy.b Scrap07 : beq + - !ADD #$07 + !ADD.b #$07 + sta.b LinkPosY inc.b Scrap07 diff --git a/enemizer/hooks/moldorm_hooks.asm b/enemizer/hooks/moldorm_hooks.asm index ee98cec..44cf8f7 100644 --- a/enemizer/hooks/moldorm_hooks.asm +++ b/enemizer/hooks/moldorm_hooks.asm @@ -3,8 +3,8 @@ org $9DD88E { ; original: GiantMoldorm_Draw+5lines (sprite_giant_moldorm.asm) - ; lda.b $90 : add.w #$0008 : sta.b $90 - ; INC.b $92 : INC.b $92 + ; lda.b OAMPtr : add.w #$0008 : sta.b OAMPtr + ; INC.b OAMPtr+2 : INC.b OAMPtr+2 JSL Moldorm_UpdateOamPosition NOP #08 diff --git a/enemizer/moldorm.asm b/enemizer/moldorm.asm index 6334a65..bf6795f 100644 --- a/enemizer/moldorm.asm +++ b/enemizer/moldorm.asm @@ -4,8 +4,8 @@ Moldorm_UpdateOamPosition: LDA.l !MOLDORM_EYES_FLAG : TAX .more_eyes - LDA.b $90 : CLC : ADC.w #$0004 : STA.b $90 - LDA.b $92 : CLC : ADC.w #$0001 : STA.b $92 + LDA.b OAMPtr : CLC : ADC.w #$0004 : STA.b OAMPtr + LDA.b OAMPtr+2 : CLC : ADC.w #$0001 : STA.b OAMPtr+2 DEX : BPL .more_eyes ; X >= 0 PLX diff --git a/enemizer/special_action.asm b/enemizer/special_action.asm index e7866fa..ec61bc1 100644 --- a/enemizer/special_action.asm +++ b/enemizer/special_action.asm @@ -3,7 +3,7 @@ ;================================================================================ check_special_action: { - LDA.l BossSpecialAction : BEQ .no_special_action + LDA.w BossSpecialAction : BEQ .no_special_action LDA.b #$05 : STA.b GameSubMode STZ.w BossSpecialAction .no_special_action diff --git a/inventory.asm b/inventory.asm index 91aa12d..93113aa 100644 --- a/inventory.asm +++ b/inventory.asm @@ -353,7 +353,7 @@ IncrementBossSword: IncrementFinalSword: PHX REP #$20 - LDA.w RoomIndex : BNE .done + LDA.b RoomIndex : BNE .done SEP #$20 LDA.l SwordEquipment : CMP.b #$FF : BNE + BRA IncrementBossSword_none @@ -820,7 +820,7 @@ LDA.b #$0F : JML Ancilla_SFX3_Near ; what we wrote over ; A = item id being collected ItemGetOverworldAlternateSFX: -CMP.b #$4A : BNE + +CPY.b #$4A : BNE + JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2 RTL + ; normal itemget sfx diff --git a/inverted.asm b/inverted.asm index b667081..3c8a40e 100644 --- a/inverted.asm +++ b/inverted.asm @@ -201,35 +201,37 @@ MirrorBonk: ; Goal: use $20 and $22 to decide to force a bonk ; if we want to bonk branch to .forceBonk ; otherwise fall through to .normal - PHX : PHP - PHB : PHK : PLB - LDA.b OverworldIndex : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks - REP #$30 - LDX.w #$0000 - .loop - LDA.l .bonkRectanglesTable, X ;Load X1 - CMP.b LinkPosX : !BGE ++ - ;IF X > X1 - LDA.l .bonkRectanglesTable+2, X ; Load X2 - CMP.b LinkPosX : !BLT ++ - ;IF X < X2 - LDA.l .bonkRectanglesTable+4, X ;Load Y1 - CMP.b LinkPosY : !BGE ++ - ;IF Y > Y1 - LDA.l .bonkRectanglesTable+6, X ; Load Y2 - CMP.b LinkPosY : !BLT ++ - ;IF Y < Y2 - ;Bonk Here - PLB : PLP : PLX - BRA .forceBonk - ++ - TXA : !ADD.w #$0008 : CMP.w #.tableEnd-.bonkRectanglesTable : BEQ .endLoop - TAX - BRA .loop - .endbonkRectanglesTable + PHX : PHP + PHB : PHK : PLB + LDA.b OverworldIndex : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks + REP #$30 + LDX.w #$0000 + + .loop + LDA.l .bonkRectanglesTable, X ;Load X1 + CMP.b LinkPosX : !BGE ++ + ;IF X > X1 + LDA.l .bonkRectanglesTable+2, X ; Load X2 + CMP.b LinkPosX : !BLT ++ + ;IF X < X2 + LDA.l .bonkRectanglesTable+4, X ;Load Y1 + CMP.b LinkPosY : !BGE ++ + ;IF Y > Y1 + LDA.l .bonkRectanglesTable+6, X ; Load Y2 + CMP.b LinkPosY : !BLT ++ + ;IF Y < Y2 + ;Bonk Here + PLB : PLP : PLX + BRA .forceBonk + ++ + TXA : !ADD.w #$0008 : CMP.w #.tableEnd-.bonkRectanglesTable : BEQ .endLoop + TAX + BRA .loop + .endbonkRectanglesTable .endLoop PLB : PLP : PLX + .normal ;Not forcing a bonk, so the vanilla bonk detection run. LDA.b Scrap0C : ORA.b Scrap0E diff --git a/keydrop/dynamic_si_vram.asm b/keydrop/dynamic_si_vram.asm index fee9937..56758fd 100644 --- a/keydrop/dynamic_si_vram.asm +++ b/keydrop/dynamic_si_vram.asm @@ -1,6 +1,6 @@ ; Come in with ; A = item receipt ID -; X = slot +; X = sprite slot RequestStandingItemVRAMSlot: PHA @@ -83,21 +83,21 @@ DrawPotItem: .draw PHB : PHK : PLB - STA.b $08 + STA.b Scrap08 LDA.w SprItemGFX,X AND.w #$00FF ASL : ASL : ASL : ASL - ADC.b $08 - STA.b $08 + ADC.b Scrap08 + STA.b Scrap08 SEP #$20 - STZ.b $07 + STZ.b Scrap07 LDA.b #$00 : STA.l SpriteSkipEOR JSL Sprite_DrawMultiple_quantity_preset - LDA.b $90 : CLC : ADC.b #$08 : STA.b $90 - INC.b $92 - INC.b $92 + LDA.b OAMPtr : CLC : ADC.b #$08 : STA.b OAMPtr + INC.b OAMPtr+2 + INC.b OAMPtr+2 PLB PLA diff --git a/keydrop/standing_items.asm b/keydrop/standing_items.asm index 42fe8d1..cb6441a 100644 --- a/keydrop/standing_items.asm +++ b/keydrop/standing_items.asm @@ -327,8 +327,8 @@ ClearSpriteData: PHX LDA.b #$00 : LDX.b #$00 .loop - STA.l SprDropsItem, X : STA.l SprItemReceipt, X : STA.l SprItemIndex, X - STA.l SprItemMWPlayer, X : STA.l SprItemFlags, X + STA.w SprDropsItem, X : STA.w SprItemReceipt, X : STA.w SprItemIndex, X + STA.w SprItemMWPlayer, X : STA.w SprItemFlags, X INX : CPX.b #$10 : BCC .loop JSR SetupEnemyDropIndicator PLX @@ -393,23 +393,23 @@ LoadSpriteData: DEC.b Scrap03 ; standing items shouldn't consume a sprite slot LDX.b Scrap03 ; these were changed to $03, for moved sprites CMP.b #$F9 : BNE .not_multiworld - DEY : LDA.b [Scrap00], Y : STA.l SprItemMWPlayer, X - LDA.b #$02 : STA.l SprDropsItem, X : BRA .common + DEY : LDA.b [Scrap00], Y : STA.w SprItemMWPlayer, X + LDA.b #$02 : STA.w SprDropsItem, X : BRA .common .not_multiworld - LDA.b #$00 : STA.l SprItemMWPlayer, X - LDA.b #$01 : STA.l SprDropsItem, X + LDA.b #$00 : STA.w SprItemMWPlayer, X + LDA.b #$01 : STA.w SprDropsItem, X DEY .common - DEY : LDA.b [Scrap00], Y : STA.l SprItemReceipt, X + DEY : LDA.b [Scrap00], Y : STA.w SprItemReceipt, X STA.b Scrap0E - LDA.l SprItemMWPlayer, X : BNE + ; skip if multiworld + LDA.w SprItemMWPlayer, X : BNE + ; skip if multiworld PHX LDX.b #$00 ; see if the item should be replaced by an absorbable - CPX.b #$1A : BCS .done LDA.l MinorForcedDrops, X CMP.b Scrap0E : BEQ ++ INX #2 : BRA - - ++ PLX : LDA.l SprItemFlags, X : ORA.b #$80 : STA.l SprItemFlags, X : PHX + ++ PLX : LDA.w SprItemFlags, X : ORA.b #$80 : STA.w SprItemFlags, X : PHX .done PLX + INY : INY @@ -422,23 +422,23 @@ LoadSpriteData: ; Run when a sprite dies ... Sets Flag to #$02 and Index to sprite slot for RevealSpriteDrop: - LDA.l SprDropsItem, X : BNE CheckIfDropValid + LDA.w SprDropsItem, X : BNE CheckIfDropValid JMP DoNormalDrop CheckIfDropValid: JSR CheckIfDropsInThisLocation : BCC DoNormalDrop ;This section sets up the drop - LDA.b #$02 : STA.l SpawnedItemFlag + LDA.b #$02 : STA.w SpawnedItemFlag STX.w SpawnedItemIndex - LDA.l SprItemReceipt, X : STA.l SpawnedItemID - LDA.l SprItemMWPlayer, X : STA.l SpawnedItemMWPlayer + LDA.w SprItemReceipt, X : STA.w SpawnedItemID + LDA.w SprItemMWPlayer, X : STA.w SpawnedItemMWPlayer LDY.b #$01 ; trigger the small key routines LDA.w SpawnedItemID : STA.b Scrap00 : CMP.b #$32 : BNE + LDA.l StandingItemsOn : BNE + INY ; big key routine + PHX - LDA.l SpawnedItemMWPlayer : BNE .done ; abort check for absorbables it belong to someone else + LDA.w SpawnedItemMWPlayer : BNE .done ; abort check for absorbables it belong to someone else LDX.b #$00 ; see if the item should be replaced by an absorbable - CPX.b #$1A : BCS .done LDA.l MinorForcedDrops, X @@ -475,7 +475,7 @@ PikitOverride: CMP.b #$AA : BNE .no_pikit_drop LDY.w $0E90,X : BEQ .no_pikit_drop CPY.b #$04 : BEQ .normal_pikit - LDA.l SprDropsItem, X : BEQ .normal_pikit + LDA.w SprDropsItem, X : BEQ .normal_pikit JSR CheckIfDropsInThisLocation : BCC .normal_pikit .no_pikit_drop PLA : PLA : PEA.w Sprite_DoTheDeath_NotAPikitDrop-1 @@ -597,7 +597,7 @@ MarkSRAMForItem: LDA.w RoomItemsTaken : ORA.w KeyRoomFlagMasks, Y : RTL + PHX : PHY : REP #$30 LDA.b RoomIndex : ASL : TAY - LDA.l SpawnedItemIndex : ASL + LDA.w SpawnedItemIndex : ASL TAX : LDA.l BitFieldMasks, X : STA.b Scrap00 TYX LDA.w SpawnedItemFlag : CMP.w #$0001 : BEQ + @@ -616,20 +616,20 @@ SpriteKeyPrep: LDA.b RoomIndex : CMP.b #$87 : BNE .continue CPX.b #$0A : BNE .continue ; the hera basement key is always sprite 0x0A LDA.b LinkQuadrantH : ORA.b LinkQuadrantV : AND.b #$03 : CMP.b #$02 : BNE .continue - LDA.b #$00 : STA.w SpawnedItemFlag : STA.l SprItemFlags, X + LDA.b #$00 : STA.w SpawnedItemFlag : STA.w SprItemFlags, X LDA.b #$24 : STA.w $0E80, X BRA + .continue - LDA.w SpawnedItemIndex : STA.l SprItemIndex, X - LDA.w SpawnedItemMWPlayer : STA.l SprItemMWPlayer, X : STA.w !MULTIWORLD_SPRITEITEM_PLAYER_ID - LDA.w SpawnedItemFlag : STA.l SprItemFlags, X : BEQ + - LDA.l SpawnedItemID : STA.w $0E80, X + LDA.w SpawnedItemIndex : STA.w SprItemIndex, X + LDA.w SpawnedItemMWPlayer : STA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID + LDA.w SpawnedItemFlag : STA.w SprItemFlags, X : BEQ + + LDA.w SpawnedItemID : STA.w $0E80, X PHA : PHY : PHX JSL GetSpritePalette : PLX : STA.w SpriteOAMProp, X ; setup the palette PLY : PLA CMP.b #$24 : BNE ++ ; LDA.b RoomIndex : CMP.b #$80 : BNE + - LDA.l SpawnedItemFlag : BNE + + LDA.w SpawnedItemFlag : BNE + LDA.b #$24 ; it's the big key drop? ++ JSL RequestStandingItemVRAMSlot + PLA @@ -638,11 +638,11 @@ SpriteKeyPrep: SpriteKeyDrawGFX: JSL Sprite_DrawRippleIfInWater PHA - LDA.l SprItemMWPlayer, X : STA.w !MULTIWORLD_SPRITEITEM_PLAYER_ID + LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID LDA.w $0E80, X CMP.b #$24 : BNE + LDA.b RoomIndex : CMP.b #$80 : BNE ++ - LDA.l SpawnedItemFlag : BNE ++ + LDA.w SpawnedItemFlag : BNE ++ LDA.b #$24 : BRA + ++ PLA PHK : PEA.w .jslrtsreturn-1 @@ -659,38 +659,38 @@ SpriteKeyDrawGFX: KeyGet: LDA.l CurrentSmallKeys ; what we wrote over PHA - LDA.l StandingItemsOn : BNE + - PLA : RTL - + LDY.w $0E80, X - LDA.l SprItemIndex, X : STA.l SpawnedItemIndex - LDA.l SprItemFlags, X : STA.l SpawnedItemFlag - LDA.b RoomIndex : CMP.b #$87 : BNE + ;check for hera cage - LDA.l SpawnedItemFlag : BNE + ; if it came from a pot, it's fine - JSR ShouldKeyBeCountedForDungeon : BCC ++ - JSL CountChestKeyLong - ++ PLA : RTL - + STY.b Scrap00 - LDA.l SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID - STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID : BNE .receive - PHX - LDA.w DungeonID : CMP.b #$FF : BNE + - LDA.b Scrap00 : CMP.b #$AF : BNE .skip - LDA.l CurrentGenericKeys : INC : STA.l CurrentGenericKeys - LDA.b Scrap00 : BRA .countIt - + LSR : TAX - LDA.b Scrap00 : CMP.l KeyTable, X : BNE + - .countIt - LDA.l StandingItemCounterMask : AND SpawnedItemFlag : BEQ ++ - JSL AddInventory - ++ PLX : PLA : RTL - + CMP.b #$AF : beq .countIt ; universal key - CMP.b #$24 : beq .countIt ; small key for this dungeon - .skip PLX - .receive - JSL Player_HaltDashAttackLong - TYA : JSL AttemptItemSubstitution : JSL ResolveLootIDLong : TAY - JSL Link_ReceiveItem - PLA : DEC : RTL + LDA.l StandingItemsOn : BNE + + PLA : RTL + + LDY.w $0E80, X + LDA.w SprItemIndex, X : STA.w SpawnedItemIndex + LDA.w SprItemFlags, X : STA.w SpawnedItemFlag + LDA.b RoomIndex : CMP.b #$87 : BNE + ;check for hera cage + LDA.w SpawnedItemFlag : BNE + ; if it came from a pot, it's fine + JSR ShouldKeyBeCountedForDungeon : BCC ++ + JSL CountChestKeyLong + ++ PLA : RTL + + STY.b Scrap00 + LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID + STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID : BNE .receive + PHX + LDA.w DungeonID : CMP.b #$FF : BNE + + LDA.b Scrap00 : CMP.b #$AF : BNE .skip + LDA.l CurrentGenericKeys : INC : STA.l CurrentGenericKeys + LDA.b Scrap00 : BRA .countIt + + LSR : TAX + LDA.b Scrap00 : CMP.l KeyTable, X : BNE + + .countIt + LDA.l StandingItemCounterMask : AND SpawnedItemFlag : BEQ ++ + JSL AddInventory + ++ PLX : PLA : RTL + + CMP.b #$AF : beq .countIt ; universal key + CMP.b #$24 : beq .countIt ; small key for this dungeon + .skip PLX + .receive + JSL Player_HaltDashAttackLong + TYA : JSL AttemptItemSubstitution : JSL ResolveLootIDLong : TAY + JSL Link_ReceiveItem + PLA : DEC : RTL KeyTable: db $A0, $A0, $A2, $A3, $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC, $AD diff --git a/menu/hudalpha.asm b/menu/hudalpha.asm index 4d178ff..22fcfc8 100644 --- a/menu/hudalpha.asm +++ b/menu/hudalpha.asm @@ -1,7 +1,7 @@ OnMenuLoad: - LDA.b #UploadMenuOnlyIcons>>0 : STA.l NMIAux - LDA.b #UploadMenuOnlyIcons>>8 : STA.l NMIAux+1 - LDA.b #UploadMenuOnlyIcons>>16 : STA.l NMIAux+2 + LDA.b #UploadMenuOnlyIcons>>0 : STA.w NMIAux + LDA.b #UploadMenuOnlyIcons>>8 : STA.w NMIAux+1 + LDA.b #UploadMenuOnlyIcons>>16 : STA.w NMIAux+2 LDA.b #$0E : STA.b GameMode ; what we overwrote RTL diff --git a/msu.asm b/msu.asm index cbe0536..9f30049 100644 --- a/msu.asm +++ b/msu.asm @@ -235,7 +235,7 @@ CheckMusicLoadRequest: .dungeon LDA.w DungeonID : CMP.b #$1A : BNE + PHA : LDA.l DRMode : BEQ ++ - LDA.w BigKeyField : AND.b #$04 : BEQ ++ + LDA.l BigKeyField : AND.b #$04 : BEQ ++ ; if door rando and entering GT with BK PLA : LDA.b #59 : BRA .check_fallback-3 ++ PLA @@ -497,8 +497,8 @@ PHA : XBA : PHA ; dont save if we already saved recently REP #$20 LDA.w MSUResumeTrack : AND.w #$00FF : BEQ ++ - LDA.l NMIFrames : !SUB.l MSUResumeTime : PHA - LDA.l NMIFrames+2 : SBC.l MSUResumeTime+2 : BNE +++ + LDA.l NMIFrames : !SUB.w MSUResumeTime : PHA + LDA.l NMIFrames+2 : SBC.w MSUResumeTime+2 : BNE +++ PLA : CMP.l MSUResumeTimer : !BLT .too_early BRA ++ +++ @@ -663,8 +663,8 @@ MSUMain: PLX TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late REP #$20 - LDA.l NMIFrames : !SUB.l MSUResumeTime : PHA - LDA.l NMIFrames+2 : SBC.l MSUResumeTime+2 : BNE ++ + LDA.l NMIFrames : !SUB.w MSUResumeTime : PHA + LDA.l NMIFrames+2 : SBC.w MSUResumeTime+2 : BNE ++ PLA : CMP.l MSUResumeTimer : !BGE +++ SEP #$20 LDA.b #!FLAG_RESUME_FADEIN : BRA .done_resume @@ -677,7 +677,7 @@ MSUMain: STA.w MSUResumeControl LDA.b #$00 : STA.w MSUResumeTrack + - CPX.b #07 : BNE + ; Kakariko Village + CPX.b #$07 : BNE + ; Kakariko Village LDA.b GameMode : CMP.b #$07 : BNE + ; we're in link's house -> ignore LDA.b #$00 diff --git a/music.asm b/music.asm index 5a4f934..2b2b91a 100644 --- a/music.asm +++ b/music.asm @@ -289,7 +289,7 @@ LDA.l RoomDataWRAM[$07].high : AND.w #$00FF : BEQ + FallingMusicFadeOut: CMP.w #$0017 ; what we wrote over BNE .return - LDA.w $0130 : AND.w #$00FF : CMP.w #$0015 ; if boss music is playing, then fade out + LDA.w LastAPUCommand : AND.w #$00FF : CMP.w #$0015 ; if boss music is playing, then fade out .return RTL ;-------------------------------------------------------------------------------- diff --git a/newhud.asm b/newhud.asm index 1a636da..d53031d 100644 --- a/newhud.asm +++ b/newhud.asm @@ -103,7 +103,7 @@ NewHUD_DrawGoal: ;================================================================================ NewHUD_DrawKeys: - LDA.l CurrentSmallKeys + LDA.w CurrentSmallKeys CMP.b #$FF BNE .in_dungeon @@ -172,7 +172,7 @@ NewHUD_DrawPrizeIcon: REP #$30 BEQ .prize - LDA.l MapField + LDA.w MapField AND.l DungeonItemMasks,X BEQ .no_prize @@ -302,7 +302,7 @@ DrawCompassCounts: BIT.b #$02 : BNE .draw_compass_count TYX : LDA.l ExistsTransfer, X : TAX : LDA.l CompassExists, X : BEQ .draw_compass_count REP #$20 - LDX.w DungeonID : LDA.l CompassField : AND.l DungeonItemMasks,X : BEQ .early_exit + LDX.w DungeonID : LDA.w CompassField : AND.l DungeonItemMasks,X : BEQ .early_exit .draw_compass_count LDX.w DungeonID @@ -311,7 +311,7 @@ DrawCompassCounts: .not_sewers REP #$20 - LDA.l DungeonLocationsChecked, X + LDA.w DungeonLocationsChecked, X PHA LDA.w #!SlashTile : STA.w HUDTileMapBuffer+$98 ; always slash @@ -361,7 +361,7 @@ DrawMapCounts: ; no map needed if this bit is set BIT.b #$02 : BNE .draw_map_count REP #$20 - LDA.l MapField : AND.l DungeonItemMasks,X : BEQ .done + LDA.w MapField : AND.l DungeonItemMasks,X : BEQ .done .draw_map_count SEP #$20 @@ -369,7 +369,7 @@ DrawMapCounts: INX .not_sewers - LDA.l DungeonCollectedKeys, X + LDA.w DungeonCollectedKeys, X PHA LDA.l MapTotalsWRAM,X diff --git a/newitems.asm b/newitems.asm index 7d39bd1..56eeaa9 100644 --- a/newitems.asm +++ b/newitems.asm @@ -129,7 +129,7 @@ AddReceivedItemExpanded: STZ.w ItemReceiptID : STZ.w ItemReceiptID+1 : STZ.w ItemReceiptMethod PHY : LDY.b #$00 : JSL AddInventory : PLY PLX : PLA : RTL - + PLX : PLA + + PLX : PLA JSR ResolveReceipt PHB : PHK JML AddReceivedItem+2 @@ -151,7 +151,7 @@ RTL ItemBehavior: REP #$30 - AND.w #$00FF : ASL : TAX + AND.w #$00FF : ASL : TAX SEP #$20 JMP (ItemReceipts_behavior,X) diff --git a/password.asm b/password.asm index 0e099ff..719860b 100644 --- a/password.asm +++ b/password.asm @@ -240,8 +240,8 @@ PasswordToKey: RTS LoadPasswordStripeTemplate: - LDA.w DMAP0 : PHA : LDA.w BBAD0 : PHA : LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA : LDA.w A1B0 : PHA : LDA.w DAS0L : PHA ; preserve DMA parameters + LDA.w DMAP0 : PHA : LDA.w BBAD0 : PHA : LDA.w A1T0L : PHA ; preserve DMA parameters + LDA.w A1T0H : PHA : LDA.w A1B0 : PHA : LDA.w DAS0L : PHA ; preserve DMA parameters LDA.w DAS0H : PHA ; preserve DMA parameters LDA.b #$00 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode diff --git a/registers.asm b/registers.asm index b79bdcf..f13aa19 100644 --- a/registers.asm +++ b/registers.asm @@ -628,6 +628,7 @@ VTIMEH = $00420A ; f - DMA channel 5 (0: disabled | 1: enabled) ; g - DMA channel 6 (0: disabled | 1: enabled) ; h - DMA channel 7 (0: disabled | 1: enabled) +MDMAEN = $00420B DMAENABLE = $00420B ; H-BLANK DIRECT MEMORY ACCESS CHANNEL DESIGNATION @@ -641,6 +642,7 @@ DMAENABLE = $00420B ; f - HDMA channel 5 (0: disabled | 1: enabled) ; g - HDMA channel 6 (0: disabled | 1: enabled) ; h - HDMA channel 7 (0: disabled | 1: enabled) +HDMAEN = $00420C HDMAENABLE = $00420C ; ACCESS CYCLE DESIGNATION diff --git a/shopkeeper.asm b/shopkeeper.asm index 9acfe58..71e6adb 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -128,11 +128,11 @@ SpritePrep_ShopKeeper: LDA.l ShopContentsTable+2, X : PHX : TYX : STA.l ShopInventory+1, X : PLX LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l ShopInventory+2, X : PLX LDA.l ShopContentsTable+8, X : PHX : PHA : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID - LDA.b #0 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) - PLA : STA.l ShopInventoryPlayer, X : LDA.b #00 : STA.l ShopInventoryDisguise, X : PLX + LDA.b #$00 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) + PLA : STA.l ShopInventoryPlayer, X : LDA.b #$00 : STA.l ShopInventoryDisguise, X : PLX PHY PHX - LDA.b #0 : XBA : TYA : LSR #2 : !ADD.l ShopSRAMIndex : TAX + LDA.b #$00 : XBA : TYA : LSR #2 : !ADD.l ShopSRAMIndex : TAX LDA.l PurchaseCounts, X : TYX : STA.l ShopInventory+3, X : TAY PLX @@ -143,8 +143,8 @@ SpritePrep_ShopKeeper: LDA.l ShopContentsTable+6, X : PHX : TYX : STA.l ShopInventory+1, X : PLX LDA.l ShopContentsTable+7, X : PHX : TYX : STA.l ShopInventory+2, X : PLX LDA.b #$40 : PHX : TYX : STA.l ShopInventory+3, X : PLX - PHX : LDA.b #0 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) - LDA.b #0 : STA.l ShopInventoryPlayer, X : PLX + PHX : LDA.b #$00 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) + LDA.b #$00 : STA.l ShopInventoryPlayer, X : PLX BRA +++ + : PLY : LDA.b #$40 : PHX : TYX : STA.l ShopInventory+3, X : PLX : BRA +++ ++ @@ -156,7 +156,7 @@ SpritePrep_ShopKeeper: JSL AttemptItemSubstitution JSL ResolveLootIDLong CMP.b #$D0 : BNE + - PHX : LDA.b #0 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) + PHX : LDA.b #$00 : XBA : TYA : LSR #2 : TAX ; This will convert the value back to the slot number (in 8-bit accumulator mode) JSL GetRandomInt : AND.b #$3F BNE ++ : LDA.b #$49 : ++ : CMP.b #$26 : BNE ++ : LDA.b #$6A : ++ ; if 0 (fighter's sword + shield), set to just sword, if filled container (bugged palette), switch to triforce piece STA.l ShopInventoryDisguise, X : PLX @@ -425,80 +425,80 @@ Shopkeeper_SetupHitboxes: RTS Shopkeeper_BuyItem: - PHX : PHY - TYX + PHX : PHY + TYX - LDA.l ShopInventory, X - CMP.b #$0E : BEQ .refill ; Bee Refill - CMP.b #$2E : BEQ .refill ; Red Potion Refill - CMP.b #$2F : BEQ .refill ; Green Potion Refill - CMP.b #$30 : BEQ .refill ; Blue Potion Refill - BRA + - .refill - JSL Sprite_GetEmptyBottleIndex : BMI .full_bottles - LDA.b #$1 : STA.l ShopkeeperRefill ; If this is on, don't toggle bit to remove from shop - + + LDA.l ShopInventory, X + CMP.b #$0E : BEQ .refill ; Bee Refill + CMP.b #$2E : BEQ .refill ; Red Potion Refill + CMP.b #$2F : BEQ .refill ; Green Potion Refill + CMP.b #$30 : BEQ .refill ; Blue Potion Refill + BRA + + .refill + JSL Sprite_GetEmptyBottleIndex : BMI .full_bottles + LDA.b #$1 : STA.l ShopkeeperRefill ; If this is on, don't toggle bit to remove from shop + + - LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any - REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy + LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any + REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy - .cant_afford - LDA.b #$7A - LDY.b #$01 - JSL Sprite_ShowMessageUnconditional - LDA.b #$3C : STA.w SFX2 ; error sound - JMP .done - .full_bottles - LDA.b #$6B : LDY.b #$01 + .cant_afford + LDA.b #$7A + LDY.b #$01 JSL Sprite_ShowMessageUnconditional LDA.b #$3C : STA.w SFX2 ; error sound JMP .done - .buy - LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any - REP #$20 : LDA.l CurrentRupees : !SUB.l ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away - ++ + .full_bottles + LDA.b #$6B : LDY.b #$01 + JSL Sprite_ShowMessageUnconditional + LDA.b #$3C : STA.w SFX2 ; error sound + JMP .done + .buy + LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any + REP #$20 : LDA.l CurrentRupees : !SUB.l ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away + ++ + PHX + LDA.b #$00 : XBA : TXA : LSR #2 : TAX + LDA.l ShopInventoryPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID + TXA : !ADD.l ShopSRAMIndex : TAX + LDA.l PurchaseCounts, X : BNE +++ ;Is this the first time buying this slot? + LDA.l EnableShopItemCount, X : STA.l ShopEnableCount ; If so, store the permission to count the item here. + +++ + PLX + LDA.l ShopInventory, X + JSL AttemptItemSubstitution + JSL ResolveLootIDLong + TAY : JSL Link_ReceiveItem + LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X + LDA.b #$00 : STA.l ShopEnableCount + TXA : LSR #2 : TAX + LDA.l ShopType : BIT.b #$80 : BNE + + LDA.l ShopkeeperRefill : BNE +++ + LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState + +++ PHX + TXA : !ADD.l ShopSRAMIndex : TAX + LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++ + PLX + BRA ++ + + ; Take-any + BIT.b #$20 : BNE .takeAll + .takeAny + LDA.l ShopState : ORA.b #$07 : STA.l ShopState PHX - LDA.b #0 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID - TXA : !ADD.l ShopSRAMIndex : TAX - LDA.l PurchaseCounts, X : BNE +++ ;Is this the first time buying this slot? - LDA.l EnableShopItemCount, X : STA.l ShopEnableCount ; If so, store the permission to count the item here. - +++ - PLX - LDA.l ShopInventory, X - JSL AttemptItemSubstitution - JSL ResolveLootIDLong - TAY - JSL Link_ReceiveItem - LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X - LDA.b #0 : STA.l ShopEnableCount - TXA : LSR #2 : TAX - LDA.l ShopType : BIT.b #$80 : BNE + - LDA.l ShopkeeperRefill : BNE +++ - LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState - +++ PHX - TXA : !ADD.l ShopSRAMIndex : TAX - LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++ - PLX - BRA ++ - + ; Take-any - BIT.b #$20 : BNE .takeAll - .takeAny - LDA.l ShopState : ORA.b #$07 : STA.l ShopState - PHX - LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X - LDA.l EnableShopItemCount, X : STA.l ShopEnableCount - PLX - BRA ++ - .takeAll - LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState - PHX - LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X - LDA.l EnableShopItemCount, X : STA.l ShopEnableCount - PLX - ++ - .done - LDA.b #$00 : STA.l ShopkeeperRefill - PLY : PLX + LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X + LDA.l EnableShopItemCount, X : STA.l ShopEnableCount + PLX + BRA ++ + .takeAll + LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState + PHX + LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X + LDA.l EnableShopItemCount, X : STA.l ShopEnableCount + PLX + ++ + .done + LDA.b #$00 : STA.l ShopkeeperRefill + PLY : PLX RTS Shopkeeper_ItemMasks: db #$01, #$02, #$04, #$08 @@ -645,7 +645,7 @@ Shopkeeper_DrawNextItem: SEP #$20 ; set 8-bit accumulator PLY - PHX : LDA.b #0 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$0 : BNE ++ + PHX : LDA.b #$00 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$00 : BNE ++ CPX.b #$0C : BCC .not_powder LDA.l PowderFlag : BRA .resolve .not_powder LDA.l ShopInventory, X ; get item id @@ -671,10 +671,10 @@ Shopkeeper_DrawNextItem: STA.l SpriteOAM+4 - PHX : LDA.b #0 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$0 : BNE ++ + PHX : LDA.b #$00 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$00 : BNE ++ LDA.b Scrap0D ++ - PHX + PHX JSL GetSpritePalette_resolved PLX : CPX.b #$0C : BCC + ; if this is powder item ORA.b #$01 @@ -682,20 +682,20 @@ Shopkeeper_DrawNextItem: LDA.b #$00 : STA.l SpriteOAM+6 - PHX : LDA.b #0 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$0 : BNE ++ + PHX : LDA.b #$00 : XBA : TXA : LSR #2 : TAX : LDA.l ShopInventoryDisguise, X : PLX : CMP.b #$00 : BNE ++ LDA.b Scrap0D ++ - PHX - TAX - LDA.l SpriteProperties_standing_width,X : BEQ .narrow + PHX + TAX + LDA.l SpriteProperties_standing_width,X : BEQ .narrow .full - PLX + PLX LDA.b #$02 STA.l SpriteOAM+7 LDA.b #$01 BRA ++ .narrow - PLX + PLX LDA.b #$00 STA.l SpriteOAM+7 JSR PrepNarrowLower @@ -774,9 +774,9 @@ Shopkeeper_DrawNextPrice: PHX : PHA : LDA.l ShopScratch : TAX : PLA : JSL Sprite_DrawMultiple_quantity_preset : PLX LDA.b 1,s - ASL #2 : !ADD.l OAMPtr : STA.b OAMPtr ; increment oam pointer + ASL #2 : !ADD.b OAMPtr : STA.b OAMPtr ; increment oam pointer PLA - !ADD.l OAMPtr+2 : STA.b OAMPtr+2 + !ADD.b OAMPtr+2 : STA.b OAMPtr+2 .free PLP : PLY : PLX PLB diff --git a/stats.asm b/stats.asm index 4ac8df3..4a88e0d 100644 --- a/stats.asm +++ b/stats.asm @@ -98,7 +98,7 @@ IncrementSmallKeysNoPrimary: PHP : REP #$20 ; set 16-bit accumulator LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement LDA.b $A8 : AND.w #$0003 : CMP.w #$0002 : BNE ++ ; must be quadrant 2 - LDA.l SprDropsItem, X : AND.w #$00FF : BNE ++ ; must not be a standing item + LDA.w SprDropsItem, X : AND.w #$00FF : BNE ++ ; must not be a standing item PLP : PHY LDY.b #$24 JSL AddInventory @@ -320,9 +320,9 @@ IndoorTileTransitionCounter: JMP StatTransitionCounter ;-------------------------------------------------------------------------------- IndoorSubtileTransitionCounter: - LDA.b #$01 : STA.l RedrawFlag ; set redraw flag for items - STZ.w SomariaSwitchFlag ; stuff we wrote over - STZ.w SpriteRoomTag + LDA.b #$01 : STA.l RedrawFlag ; set redraw flag for items + STZ.w SomariaSwitchFlag ; stuff we wrote over + STZ.w SpriteRoomTag JMP StatTransitionCounter ;-------------------------------------------------------------------------------- StatsFinalPrep: diff --git a/swordswap.asm b/swordswap.asm index da1539d..a2c0c56 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -49,7 +49,7 @@ LoadModifiedArmorLevel: CMP.b #$03 : !BLT + : LDA.b #$02 : + STA.l ScratchBufferV PLA - !ADD.l ScratchBufferV + !ADD.w ScratchBufferV RTL ;================================================================================ ; MagicConsumption - Magic Inventory diff --git a/tables.asm b/tables.asm index cdab936..4e6b825 100644 --- a/tables.asm +++ b/tables.asm @@ -75,7 +75,6 @@ org $B08028 ; PC 0x180028 FairySword: db $03 ; #$03 = Golden Sword (default) -PedestalMusicCheck: ;org $88C435 ; <- 44435 - ancilla_receive_item.asm : 125 ;db $01 ; #$01 = Master Sword (default) org $8589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179 @@ -164,7 +163,7 @@ org $B08045 ; PC 0x180045 HUDDungeonItems: db $00 ;-------------------------------------------------------------------------------- -; 0x180046 (unused) +; 0x180046 - 0x180047 (unused) ;-------------------------------------------------------------------------------- org $B08048 ; PC 0x180048 MenuSpeed: diff --git a/tablets.asm b/tablets.asm index 05ca3da..50801a0 100644 --- a/tablets.asm +++ b/tablets.asm @@ -29,24 +29,24 @@ SetTabletItemFlag: RTS ;-------------------------------------------------------------------------------- SpawnTabletItem: - JSL HeartPieceGetPlayer : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID - JSL LoadOutdoorValue - JSL AttemptItemSubstitution - JSL ResolveLootIDLong - PHA - LDA.b #$EB : STA.l MiniGameTime - JSL Sprite_SpawnDynamically - PLA - STA.w SpriteID,Y - TYX - JSL PrepDynamicTile_loot_resolved + JSL HeartPieceGetPlayer : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID + JSL LoadOutdoorValue + JSL AttemptItemSubstitution + JSL ResolveLootIDLong + PHA + LDA.b #$EB : STA.l MiniGameTime + JSL Sprite_SpawnDynamically + PLA + STA.w SpriteID,Y + TYX + JSL PrepDynamicTile_loot_resolved - LDA.b LinkPosX : STA.w SpritePosXLow, Y - LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y - LDA.b LinkPosY : STA.w SpritePosYLow, Y - LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y - LDA.b #$00 : STA.w SpriteLayer, Y - LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high + LDA.b LinkPosX : STA.w SpritePosXLow, Y + LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y + LDA.b LinkPosY : STA.w SpritePosYLow, Y + LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y + LDA.b #$00 : STA.w SpriteLayer, Y + LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high RTL ;-------------------------------------------------------------------------------- MaybeUnlockTabletAnimation: @@ -98,9 +98,9 @@ CheckTabletItem: ; Zero flag set = Item not collected ; Zero flag clear = Item collected ;-------------------------------------------------------------------------------- - JSL IsMedallion : BCS .tablet - LDA.l OverworldEventDataWRAM, X : AND.b #$40 ; What we wrote over - RTL - .tablet - TDC + JSL IsMedallion : BCS .tablet + LDA.l OverworldEventDataWRAM, X : AND.b #$40 ; What we wrote over + RTL + .tablet + TDC RTL diff --git a/utilities.asm b/utilities.asm index 45563e2..827f199 100644 --- a/utilities.asm +++ b/utilities.asm @@ -51,15 +51,15 @@ RTL PrepDynamicTile: PHX : PHY : PHB LDA.l RemoteItems : BEQ .notRemote - LDA.l SpriteID, X : CMP.l !MULTIWORLD_SCOUTREPLY_LOCATION : BNE ++ + LDA.w SpriteID, X : CMP.l !MULTIWORLD_SCOUTREPLY_LOCATION : BNE ++ LDA.l !MULTIWORLD_SCOUTREPLY_PLAYER : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID LDA.l !MULTIWORLD_SCOUTREPLY_ITEM - STA.l SpriteID, X + STA.w SpriteID, X BRA .notRemote ++ STA.l !MULTIWORLD_SCOUT_LOCATION LDA.b #$00 : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID - LDA.b #$6B : STA.l SpriteID, X ; make it a power star, I guess + LDA.b #$6B : STA.w SpriteID, X ; make it a power star, I guess .notRemote JSR ResolveLootID - @@ -219,7 +219,7 @@ PrepDrawRemoteItemSprite: CMP.l !MULTIWORLD_SCOUTREPLY_LOCATION : BNE ++ LDA.l !MULTIWORLD_SCOUT_LOCATION : BEQ +++ LDA.l !MULTIWORLD_SCOUTREPLY_LOCATION - STA.l SpriteID, X + STA.w SpriteID, X JSL PrepDynamicTile LDA.b #$00 BRA ++ @@ -229,7 +229,7 @@ PrepDrawRemoteItemSprite: RTS ++ STA.l !MULTIWORLD_SCOUT_LOCATION - LDA.b #$00 : STA.b !MULTIWORLD_SPRITEITEM_PLAYER_ID + LDA.b #$00 : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID LDA.b #$6B RTS + @@ -502,8 +502,8 @@ AuxPaletteCheck: PHX SEP #$30 LDA.w ItemReceiptMethod : BNE .main_buffer ; Never use aux if we're actually receiving an item - LDA.w RoomIndex : CMP.b #$8C : BEQ .aux_buffer ; GT torch/Hope room - LDA.w RoomIndex : CMP.b #$87 : BEQ .aux_buffer ; Hera cage/basement + LDA.b RoomIndex : CMP.b #$8C : BEQ .aux_buffer ; GT torch/Hope room + CMP.b #$87 : BEQ .aux_buffer ; Hera cage/basement .main_buffer REP #$31 PLX diff --git a/vanillalabels.asm b/vanillalabels.asm index 1bb40ca..1611fef 100644 --- a/vanillalabels.asm +++ b/vanillalabels.asm @@ -190,6 +190,7 @@ MagicShopAssistant_SpawnPowder = $85F539 MagicShopAssistant_SpawnObject = $85F61D Sprite_BagOfPowder = $85F644 MagicShopAssistant_Main = $85F893 +Sprite_SpawnSecret_SetCoords = $8682A5 Chicken_SpawnAvengerChicken = $86A7DB Link_PerformRead = $87B4DB Link_PerformOpenChest_no_replacement = $87B59F