diff --git a/bookofmudora.asm b/bookofmudora.asm index 3030d34..e26c7fa 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -15,9 +15,7 @@ DrawLibraryItemGFX: RTL ;-------------------------------------------------------------------------------- SetLibraryItem: - PHA LDY $0E80, X ; Retrieve stored item type - PLA JSL.l ItemSet_Library ; contains thing we wrote over RTL ;-------------------------------------------------------------------------------- diff --git a/bugfixes.asm b/bugfixes.asm index 4b55a67..5e7a6be 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -32,7 +32,7 @@ RTL ;-------------------------------------------------------------------------------- ;0 = Become (Perma)bunny DecideIfBunny: - LDA $7EF357 : BEQ + : RTL : + + LDA $7EF357 : BNE .done LDA $7EF3CA : AND.b #$40 PHA : LDA.l InvertedMode : BNE .inverted .normal @@ -47,8 +47,8 @@ RTL DecideIfBunnyByScreenIndex: ; If indoors we don't have a screen index. Return non-bunny to make mirror-based ; superbunny work - LDA $1B : BEQ + : RTL : + - LDA $7EF357 : BEQ + : RTL : + + LDA $1B : BNE .done + LDA $7EF357 : BNE .done LDA $8A : AND.b #$40 : PHA LDA.l InvertedMode : BNE .inverted .normal @@ -114,12 +114,13 @@ RTS FixFrogSmith: LDA.l $7EF3CA : BNE .darkWorld LDA.l $7EF3CC : CMP.b #$07 : BNE .done - LDA.b #$08 : STA.l $7EF3CC ; make frog into smith in light world + LDA.b #$08 : ; make frog into smith in light world BRA .loadgfx .darkWorld LDA.l $7EF3CC : CMP.b #$08 : BNE .done - LDA.b #$07 : STA.l $7EF3CC ; make smith into frog in dark world + LDA.b #$07 ; make smith into frog in dark world .loadgfx + STA.l $7EF3CC JSL Tagalong_LoadGfx .done RTS @@ -137,12 +138,11 @@ RTL ; Fix crystal not spawning when using somaria vs boss TryToSpawnCrystalUntilSuccess: STX $02D8 ; what we overwrote - JSL AddAncillaLong : BCC .spawned ; a clear carry flag indicates success - .failed - RTL - .spawned + JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success +.spawned STZ $AE ; the "trying to spawn crystal" flag STZ $AF ; the "trying to spawn pendant" flag +.failed RTL ;-------------------------------------------------------------------------------- @@ -173,22 +173,22 @@ CMP.w #$030E : BEQ .new ; opening dungeon map CMP.w #$070E : BEQ .new ; opening overworld map .original - - lda [$00] - sta $7ec300, x - sta $7ec500, x - inc $00 : inc $00 - inx #2 - dey - bpl - + LDA [$00] + STA $7EC300, X + STA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY + BPL - RTL .new - - lda [$00] - sta $7ec500, x - inc $00 : inc $00 - inx #2 - dey - bpl - + LDA [$00] + STA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY + BPL - RTL ;-------------------------------------------------------------------------------- diff --git a/c2e3e.bin b/c2e3e.bin index 9675a12..5d75fdd 100644 Binary files a/c2e3e.bin and b/c2e3e.bin differ diff --git a/c2e3e.gfx b/c2e3e.gfx index 1298f28..811afe1 100644 Binary files a/c2e3e.gfx and b/c2e3e.gfx differ diff --git a/capacityupgrades.asm b/capacityupgrades.asm index 59e4693..cdd343f 100644 --- a/capacityupgrades.asm +++ b/capacityupgrades.asm @@ -6,7 +6,8 @@ ;-------------------------------------------------------------------------------- IncrementBombs: LDA !BOMB_UPGRADES ; get bomb upgrades - !ADD.l StartingMaxBombs : DEC + !ADD.l StartingMaxBombs : BEQ + ; Skip if we can't have bombs + DEC CMP !BOMB_CURRENT diff --git a/catfish.asm b/catfish.asm index 908a31f..4754600 100644 --- a/catfish.asm +++ b/catfish.asm @@ -4,8 +4,7 @@ !HEART_REDRAW = "$7F5000" LoadCatfishItemGFX: LDA.l $1DE185 ; location randomizer writes catfish item to - JSL.l PrepDynamicTile -RTL + JML PrepDynamicTile ;-------------------------------------------------------------------------------- DrawThrownItem: LDA $8A : CMP.b #$81 : BNE .catfish @@ -19,8 +18,7 @@ DrawThrownItem: LDA.l $1DE185 ; location randomizer writes catfish item to .draw - JSL.l DrawDynamicTile -RTL + JML DrawDynamicTile ;-------------------------------------------------------------------------------- MarkThrownItem: JSL Link_ReceiveItem ; thing we wrote over @@ -28,12 +26,9 @@ MarkThrownItem: LDA $8A : CMP.b #$81 : BNE .catfish .zora - JSL.l ItemSet_ZoraKing - BRA .done - + JML ItemSet_ZoraKing + .catfish - JSL.l ItemSet_Catfish - - .done -RTL + JML ItemSet_Catfish + ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/clock.asm b/clock.asm index 8fa0c3e..4e853d1 100644 --- a/clock.asm +++ b/clock.asm @@ -66,8 +66,7 @@ endmacro Clock_Test: JSL.l Clock_Init - JSL.l Clock_IsSupported -RTL + JML.l Clock_IsSupported ;-------------------------------------------------------------------------------- ; Clock_Init @@ -112,11 +111,10 @@ Clock_IsSupported: PHA : PHX LDX #$00; - - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ + ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRA .done : ++ ; if we've read 14 bytes with no success, unset carry and exit - INX - BRA - : + - SEC ; found a clock chip + LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .done ; check for clock chip ready signal + CPX.b #$0E : BCC ++ : CLC : BRA .done ; if we've read 14 bytes with no success, unset carry and exit + ++ INX + BRA - .done PLX : PLA RTL @@ -144,7 +142,7 @@ Clock_QuickStamp: LDX #$00; - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit + CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit INX BRA - SEC ; indicate success @@ -197,9 +195,9 @@ Multiply_A16Y8: CLC ADC $4216 LDY $4217 - BCC carry_bit + BCC .carry_bit INY - carry_bit: +.carry_bit: XBA REP #$20 ; set 16-bit accumulator RTL @@ -226,7 +224,7 @@ Clock_GetTime: LDX #$00; - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit + CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit INX BRA - SEC ; indicate success diff --git a/compasses.asm b/compasses.asm index 89ee265..5c1acb5 100644 --- a/compasses.asm +++ b/compasses.asm @@ -8,16 +8,17 @@ macro DrawConstantNumber(digit1,digit2) LDA.w #$2490+ : STA $7EC79A LDA.w #$2490+ : STA $7EC79C + SEP #$20 endmacro ;-------------------------------------------------------------------------------- DrawDungeonCompassCounts: LDX $1B : BNE + : RTL : + ; Skip if outdoors - LDX $040C : CPX.b #$FF : BNE + : RTL : + ; Skip if not in a dungeon + LDX $040C : CPX.b #$FF : BEQ .done ; Skip if not in a dungeon CMP.w #$0002 : BEQ ++ ; if CompassMode==2, we don't check for the compass LDA $7EF364 : AND.l .item_masks, X ; Load compass values to A, mask with dungeon item masks - BNE + : RTL : + ; skip if we don't have compass + BEQ .done ; skip if we don't have compass ++ JMP (CompassCountDungeonHandlers, X) : .return_spot @@ -48,79 +49,66 @@ CompassCountDungeonHandlers: ; pointers to functions that handle dungeon-specifi CompassCount_Escape: %DrawConstantNumber(0,8) - SEP #$20 LDA $7EF434 : LSR #4 JMP DrawDungeonCompassCounts_return_spot CompassCount_Eastern: %DrawConstantNumber(0,6) - SEP #$20 LDA $7EF436 : AND.b #$07 JMP DrawDungeonCompassCounts_return_spot CompassCount_Desert: %DrawConstantNumber(0,6) - SEP #$20 LDA $7EF435 : LSR #5 JMP DrawDungeonCompassCounts_return_spot CompassCount_Agah: %DrawConstantNumber(0,2) - SEP #$20 - LDA $7EF435 : AND.b #$02 + LDA $7EF435 : AND.b #$03 JMP DrawDungeonCompassCounts_return_spot CompassCount_Swamp: %DrawConstantNumber(1,0) - SEP #$20 LDA $7EF439 : AND.b #$0F JMP DrawDungeonCompassCounts_return_spot CompassCount_PoD: %DrawConstantNumber(1,4) - SEP #$20 LDA $7EF434 : AND.b #$0F JMP DrawDungeonCompassCounts_return_spot CompassCount_Mire: %DrawConstantNumber(0,8) - SEP #$20 LDA $7EF438 : AND.b #$0F JMP DrawDungeonCompassCounts_return_spot CompassCount_Skull: %DrawConstantNumber(0,8) - SEP #$20 LDA $7EF437 : LSR #4 JMP DrawDungeonCompassCounts_return_spot CompassCount_Ice: %DrawConstantNumber(0,8) - SEP #$20 LDA $7EF438 : LSR #4 JMP DrawDungeonCompassCounts_return_spot CompassCount_Hera: %DrawConstantNumber(0,6) - SEP #$20 LDA $7EF435 : AND.b #$1C : LSR #2 JMP DrawDungeonCompassCounts_return_spot CompassCount_Thieves: %DrawConstantNumber(0,8) - SEP #$20 LDA $7EF437 : AND.b #$0F JMP DrawDungeonCompassCounts_return_spot CompassCount_Trock: %DrawConstantNumber(1,2) - SEP #$20 LDA $7EF439 : LSR #4 JMP DrawDungeonCompassCounts_return_spot CompassCount_Gt: %DrawConstantNumber(2,7) - SEP #$20 LDA $7EF436 : LSR #3 JMP DrawDungeonCompassCounts_return_spot diff --git a/crypto.asm b/crypto.asm index e28580a..120344f 100644 --- a/crypto.asm +++ b/crypto.asm @@ -192,7 +192,7 @@ XXTEA_Decode: LDA.w !sum : !SUB.l CryptoDelta : STA.w !sum LDA.w !sum+2 : SBC.l CryptoDelta+2 : STA.w !sum+2 - DEC !rounds : BEQ + : BRL --- : + ; } while (--rounds); + DEC !rounds : BEQ + : JMP --- : + ; } while (--rounds); PLB : PLP RTL diff --git a/darkworldspawn.asm b/darkworldspawn.asm index e38e652..43a55ae 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -4,8 +4,7 @@ DarkWorldSaveFix: LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change JSL.l MasterSwordFollowerClear - JSL.l StatSaveCounter -RTL + JML.l StatSaveCounter ;-------------------------------------------------------------------------------- DoWorldFix: LDA InvertedMode : BEQ + @@ -14,12 +13,12 @@ DoWorldFix: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA $7EF353 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive - BRA .done - .noMirror + LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .aga1Alive - LDA #$00 : STA $7EF3CA ; set flag to light world - LDA $7EF3CC : CMP #$07 : BNE + : LDA.b #$08 : STA $7EF3CC : + ; convert frog to dwarf + LDA #$00 + .noMirror + STA $7EF3CA ; set flag to light world + LDA $7EF3CC : CMP #$07 : BNE .done : INC : STA $7EF3CC ; convert frog to dwarf .done RTL ;-------------------------------------------------------------------------------- @@ -29,8 +28,7 @@ SetDeathWorldChecked: + LDA $1B : BEQ .outdoors LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : BNE ++ - LDA $A1 : BNE ++ + LDA $A0 : ORA $A1 : BNE ++ LDA GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors @@ -42,7 +40,7 @@ JMP DoWorldFix_skip_mirror_check .pyramid LDA #$40 : STA $7EF3CA ; set flag to dark world - LDA $7EF3CC : CMP #$08 : BNE + : LDA.b #$07 : STA $7EF3CC : + ; convert dwarf to frog + LDA $7EF3CC : CMP #$08 : BNE .done : DEC : STA $7EF3CC : + ; convert dwarf to frog .done RTL ;================================================================================ @@ -50,15 +48,13 @@ DoWorldFix_Inverted: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA $7EF353 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive - BRA .done + LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .noMirror .aga1Alive LDA #$40 : STA $7EF3CA ; set flag to dark world LDA $7EF3CC - CMP #$07 : BEQ .clear ; clear frog - CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications - BRA .done + CMP #$07 : BNE .done ; clear frog + CMP #$08 : BNE .done ; clear dwarf - consider flute implications .clear LDA.b #$00 : STA $7EF3CC ; clear follower .done @@ -67,8 +63,7 @@ RTL SetDeathWorldChecked_Inverted: LDA $1B : BEQ .outdoors LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : BNE ++ - LDA $A1 : BNE ++ + LDA $A0 : ORA $A1 : BNE ++ LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors @@ -95,16 +90,15 @@ RTL ;-------------------------------------------------------------------------------- MasterSwordFollowerClear: LDA $7EF3CC - CMP #$0E : BEQ .clear ; clear master sword follower -RTL - .clear + CMP #$0E : BNE .exit ; clear master sword follower LDA.b #$00 : STA $7EF3CC ; clear follower -RTL +.exit + RTL ;-------------------------------------------------------------------------------- FixAgahnimFollowers: LDA.b #$00 : STA $7EF3CC ; clear follower - JSL PrepDungeonExit ; thing we wrote over -RTL + JML PrepDungeonExit ; thing we wrote over + ;-------------------------------------------------------------------------------- macro SetMinimum(base,filler,compare) LDA.l : !SUB.l : !BLT ?done @@ -112,7 +106,7 @@ macro SetMinimum(base,filler,compare) ?done: endmacro RefreshRainAmmo: - LDA $7EF3C5 : CMP.b #$01 : BEQ + : RTL : + ; check if we're in rain state + LDA $7EF3C5 : CMP.b #$01 : BNE .done ; check if we're in rain state .rain LDA $7EF3C8 + CMP.b #$03 : BNE + ; Uncle @@ -137,14 +131,14 @@ RTL !INFINITE_BOMBS = "$7F50C9" !INFINITE_MAGIC = "$7F50CA" SetEscapeAssist: - LDA $7EF3C5 : CMP.b #$01 : BNE .notrain ; check if we're in rain state + LDA $7EF3C5 : CMP.b #$01 : BNE .no_train ; check if we're in rain state .rain LDA.l EscapeAssist BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + BRA ++ - .notrain + .no_train ; choo choo LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : + @@ -153,8 +147,8 @@ RTL ;-------------------------------------------------------------------------------- SetSilverBowMode: LDA SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode - LDA $7EF340 : CMP.b #$3 : !BLT + - !SUB.b #$02 : STA $7EF340 + LDA $7EF340 : CMP.b #$3 : BCC + + SBC.b #$02 : STA $7EF340 + RTL ;================================================================================ diff --git a/dialog.asm b/dialog.asm index 3216fe0..5e1a835 100644 --- a/dialog.asm +++ b/dialog.asm @@ -82,14 +82,13 @@ macro LoadDialogAddress(address) PHB : PHK : PLB SEP #$20 ; set 8-bit accumulator REP #$10 ; set 16-bit index registers - LDA $00 : PHA - LDA $01 : PHA + PEI ($00) LDA $02 : PHA STZ $1CF0 : STZ $1CF1 ; reset decompression buffer LDA.b #$01 : STA $7F5035 ; set flag %CopyDialog(
) PLA : STA $02 - PLA : STA $01 + REP #$20 PLA : STA $00 PLB PLP @@ -132,61 +131,60 @@ FreeDungeonItemNotice: PHB : PHK : PLB SEP #$20 ; set 8-bit accumulator REP #$10 ; set 16-bit index registers - LDA $00 : PHA - LDA $01 : PHA + PEI ($00) LDA $02 : PHA ;-------------------------------- - LDA.l FreeItemText : BNE + : BRL .skip : + + LDA.l FreeItemText : BNE + : JMP .skip : + LDA #$00 : STA $7F5010 ; initialize scratch - LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for general small key + LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key LDA !ITEM_TEMPORARY : CMP.b #$24 : BNE + ; general small key %CopyDialog(Notice_SmallKeyOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for general compass + JMP .done + + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass LDA !ITEM_TEMPORARY : CMP.b #$25 : BNE + ; general compass %CopyDialog(Notice_CompassOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for general map + JMP .done + + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map LDA !ITEM_TEMPORARY : CMP.b #$33 : BNE + ; general map %CopyDialog(Notice_MapOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for general big key + JMP .done + + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key LDA !ITEM_TEMPORARY : CMP.b #$32 : BNE + ; general big key %CopyDialog(Notice_BigKeyOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done + JMP .done + - LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for dungeon map + LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map LDA !ITEM_TEMPORARY : AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... %CopyDialog(Notice_MapOf) - BRL .dungeon - + : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for dungeon compass + JMP .dungeon + + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) - BRL .dungeon - + : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for dungeon big key + JMP .dungeon + + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) BRA .dungeon - + : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for dungeon small key + + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... - LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : BRL .skip : ++ + LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : JMP .skip : ++ %CopyDialog(Notice_SmallKeyOf) PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA LDA #$01 : STA $7F5010 ; set up a flip for small keys BRA .dungeon + - BRL .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 !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER @@ -199,31 +197,31 @@ FreeDungeonItemNotice: + LDA $7F5011 CMP.b #$00 : BNE + ; ...light world - %CopyDialog(Notice_LightWorld) : BRL .done + %CopyDialog(Notice_LightWorld) : JMP .done + : CMP.b #$01 : BNE + ; ...dark world - %CopyDialog(Notice_DarkWorld) : BRL .done + %CopyDialog(Notice_DarkWorld) : JMP .done + : CMP.b #$02 : BNE + ; ...ganon's tower - %CopyDialog(Notice_GTower) : BRL .done + %CopyDialog(Notice_GTower) : JMP .done + : CMP.b #$03 : BNE + ; ...turtle rock - %CopyDialog(Notice_TRock) : BRL .done + %CopyDialog(Notice_TRock) : JMP .done + : CMP.b #$04 : BNE + ; ...thieves' town - %CopyDialog(Notice_Thieves) : BRL .done + %CopyDialog(Notice_Thieves) : JMP .done + : CMP.b #$05 : BNE + ; ...tower of hera - %CopyDialog(Notice_Hera) : BRL .done + %CopyDialog(Notice_Hera) : JMP .done + : CMP.b #$06 : BNE + ; ...ice palace - %CopyDialog(Notice_Ice) : BRL .done + %CopyDialog(Notice_Ice) : JMP .done + : CMP.b #$07 : BNE + ; ...skull woods - %CopyDialog(Notice_Skull) : BRL .done + %CopyDialog(Notice_Skull) : JMP .done + : CMP.b #$08 : BNE + ; ...misery mire - %CopyDialog(Notice_Mire) : BRL .done + %CopyDialog(Notice_Mire) : JMP .done + : CMP.b #$09 : BNE + ; ...dark palace - %CopyDialog(Notice_PoD) : BRL .done + %CopyDialog(Notice_PoD) : JMP .done + : CMP.b #$0A : BNE + ; ...swamp palace - %CopyDialog(Notice_Swamp) : BRL .done + %CopyDialog(Notice_Swamp) : JMP .done + : CMP.b #$0B : BNE + ; ...agahnim's tower - %CopyDialog(Notice_AgaTower) : BRL .done + %CopyDialog(Notice_AgaTower) : JMP .done + : CMP.b #$0C : BNE + ; ...desert palace - %CopyDialog(Notice_Desert) : BRL .done + %CopyDialog(Notice_Desert) : JMP .done + : CMP.b #$0D : BNE + ; ...eastern palace %CopyDialog(Notice_Eastern) : BRA .done + : CMP.b #$0E : BNE + ; ...hyrule castle @@ -235,27 +233,19 @@ FreeDungeonItemNotice: STZ $1CF0 : STZ $1CF1 ; reset decompression buffer LDA.b #$01 : STA $7F5035 ; set alternate dialog flag - LDA.b #$01 : STA $7F509F + STA $7F509F ;-------------------------------- - PLA : STA $02 - PLA : STA $01 - PLA : STA $00 - PLB - PLP - PLY : PLX : PLA - ;JSL.l Main_ShowTextMessage_Alt -RTL - .skip - ;-------------------------------- PLA : STA $02 - PLA : STA $01 + REP #$20 PLA : STA $00 PLB PLP PLY : PLX : PLA + ;JSL.l Main_ShowTextMessage_Alt ; .skip can be here so long as this line remains commented out RTL + ;-------------------------------------------------------------------------------- DialogResetSelectionIndex: JSL.l Attract_DecompressStoryGfx ; what we wrote over @@ -264,11 +254,9 @@ RTL ;-------------------------------------------------------------------------------- DialogItemReceive: BCS .noMessage ; if doubling the item value overflowed it must be a rando item - CPY #$98 : !BLT + ;if the item is $4C or greater it must be a rando item - .noMessage - LDA.w #$FFFF - BRA .done - + + LDA.w #$FFFF + CPY #$98 : BCS .done ;if the item is $4C or greater it must be a rando item + LDA.w Ancilla_ReceiveItem_item_messages, Y .done CMP.w #$FFFF @@ -289,12 +277,13 @@ RTL RTL ;-------------------------------------------------------------------------------- DialogGanon1: - JSL.l CheckGanonVulnerability : BCS + - REP #$20 : LDA.w #$018C : STA $1CF0 : SEP #$20 - BRA ++ - + - REP #$20 : LDA.w #$016D : STA $1CF0 : SEP #$20 - ++ + JSL.l CheckGanonVulnerability + REP #$20 + LDA.w #$018C + BCC + + LDA.w #$016D ++ STA $1CF0 + SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL ;-------------------------------------------------------------------------------- @@ -307,28 +296,30 @@ RTL ; s = silver arrow bow ; p = 2nd progressive bow DialogGanon2: - JSL.l CheckGanonVulnerability : BCS + - REP #$20 : LDA.w #$018D : STA $1CF0 : SEP #$20 - BRA ++ + JSL.l CheckGanonVulnerability + + REP #$20 + BCS + + LDA.w #$018D : BRA ++ + - LDA.l $7EF38E : AND #$80 : BNE + ; branch if bow - REP #$20 : LDA.w #$0192 : STA $1CF0 : SEP #$20 ; no bow - BRA ++ + LDA.l $7EF38E + + BIT.w #$0080 : BNE + ; branch if bow + LDA.w #$0192 : BRA ++ + - LDA.l $7EF38E : AND #$40 : BEQ + ; branch if no silvers - REP #$20 : LDA.w #$0195 : STA $1CF0 : SEP #$20 ;has silvers - BRA ++ + BIT.w #$0040 : BEQ + ; branch if no silvers + LDA.w #$0195 : BRA ++ + - LDA.l $7EF38E : AND #$20 : BNE + ; branch if p bow - REP #$20 : LDA.w #$0194 : STA $1CF0 : SEP #$20 ; bow, no-silvers, no-p-bow - BRA ++ + BIT.w #$0020 : BNE + ; branch if p bow + LDA.w #$0194 : BRA ++ + - LDA.l $7EF38E : AND #$80 : BEQ + ; branch if no bow - REP #$20 : LDA.w #$0193 : STA $1CF0 : SEP #$20 ; bow, no-silvers, p-bow - BRA ++ + BIT.w #$0080 : BEQ + ; branch if no bow + LDA.w #$0193 : BRA ++ + - REP #$20 : LDA.w #$016E : STA $1CF0 : SEP #$20 ; both bow and no bow. impossible. + LDA.w #$016E ++ + STA $1CF0 + SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL ;-------------------------------------------------------------------------------- @@ -336,21 +327,20 @@ DialogEtherTablet: PHA LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - - PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text -RTL + PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + BIT $F4 : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ LDA $7EF34B : BEQ .yesText : BRA .noText ++ - LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText + LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText ;++ .yesText PLA - LDA.b #$0c + LDA.b #$0C LDY.b #$01 - JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) -RTL + JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) + .noText PLA RTL @@ -359,8 +349,7 @@ DialogBombosTablet: PHA LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - - PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text -RTL + PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + BIT $F4 : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ @@ -372,8 +361,8 @@ RTL PLA LDA.b #$0D LDY.b #$01 - JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) -RTL + JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) + .noText PLA RTL @@ -382,19 +371,17 @@ DialogSahasrahla: LDA.l $7EF374 : AND #$04 : BEQ + ;Check if player has green pendant LDA.b #$2F LDY.b #$00 - JSL.l Sprite_ShowMessageUnconditional + JML Sprite_ShowMessageUnconditional + RTL ;-------------------------------------------------------------------------------- DialogBombShopGuy: - LDA.l $7EF37A : AND #$05 : CMP #$05 : BEQ + ;Check if player has crystals 5 & 6 - LDA.b #$15 - LDY.b #$01 - JSL.l Sprite_ShowMessageUnconditional - RTL + LDY.b #$15 + LDA.l $7EF37A : AND #$05 : CMP #$05 : BNE + ;Check if player has crystals 5 & 6 + INY ; from 15 to 16 + - LDA.b #$16 - LDY.b #$01 + TYA + LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional RTL ;-------------------------------------------------------------------------------- @@ -405,26 +392,25 @@ Sprite_ShowMessageMinimal_Alt: STZ $11 PHX : PHY - LDA.b $00 : PHA - LDA.b $01 : PHA + PEA ($00) LDA.b $02 : PHA LDA.b #$1C : STA.b $02 REP #$30 LDA.w $1CF0 : ASL : TAX - LDA.l $7f71c0, X + LDA.l $7F71C0, X STA.b $00 SEP #$30 LDY.b #$00 - LDA [$00], Y : CMP.b #$fe : BNE + - INY : LDA [$00], Y : CMP.b #$6e : BNE + + LDA [$00], Y : CMP.b #$FE : BNE + + INY : LDA [$00], Y : CMP.b #$6E : BNE + INY : LDA [$00], Y : : BNE + - INY : LDA [$00], Y : CMP.b #$fe : BNE + - INY : LDA [$00], Y : CMP.b #$6b : BNE + + INY : LDA [$00], Y : CMP.b #$FE : BNE + + INY : LDA [$00], Y : CMP.b #$6B : BNE + INY : LDA [$00], Y : CMP.b #$04 : BNE + STZ $1CE8 - BRL .end + JMP .end + STZ $0223 ; Otherwise set it so we are in text mode. diff --git a/dpadinvert.asm b/dpadinvert.asm index 130455f..e030526 100644 --- a/dpadinvert.asm +++ b/dpadinvert.asm @@ -6,7 +6,7 @@ ; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????] !INVERT_DPAD = "$7F50CB" InvertDPad: - LDA !INVERT_DPAD : BNE + : BRL .normal : + + LDA !INVERT_DPAD : BNE + : JMP .normal : + DEC : BEQ .dpadOnly DEC : BEQ .buttonsOnly DEC : BEQ .invertBoth diff --git a/dungeondrops.asm b/dungeondrops.asm index ac40e11..c33e1cc 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -3,7 +3,7 @@ ;-------------------------------------------------------------------------------- DropSafeDungeon: LDA $040C : CMP #$08 : BEQ + - LDA $01C6FC, X : JSL Sprite_SpawnFallingItem + LDA $01C6FC, X : JML Sprite_SpawnFallingItem + RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/enemy_adjustments.asm b/enemy_adjustments.asm index a0206f2..ec0411f 100644 --- a/enemy_adjustments.asm +++ b/enemy_adjustments.asm @@ -3,21 +3,14 @@ ; make sure bats always load LW stats ;-------------------------------------------------------------------------------- NewBatInit: - ;check if map id == 240 or 241 - LDA $A0 : CMP #$F0 : BNE + ;oldman cave1 - BRA .light_world - + - CMP #$F1 : BNE + ;oldman cave2 - BRA .light_world - + - CMP #$B0 : BNE + ;agahnim statue keese - BRA .light_world - + - CMP #$D0 : BNE + ;agahnim darkmaze - BRA .light_world - + - CPY #$00 : BEQ .light_world + ;check if map id == 240 or 241 + LDA $A0 : CMP #$F0 : BEQ .light_world ;oldman cave1 + CMP #$F1 : BEQ .light_world ;oldman cave2 + CMP #$B0 : BEQ .light_world ;agahnim statue keese + CMP #$D0 : BEQ .light_world ;agahnim darkmaze + + LDA.b #$85 : STA $0CD2, X LDA.b #$04 : STA $0E50, X RTL diff --git a/entrances.asm b/entrances.asm index 9ffd45b..a76ae17 100644 --- a/entrances.asm +++ b/entrances.asm @@ -4,9 +4,7 @@ ;-------------------------------------------------------------------------------- LockAgahnimDoors: LDA.l AgahnimDoorStyle : AND.w #$00FF - BNE + - ;#$0 = Never Locked - LDA.w #$0000 : RTL + BEQ .exit ; don't need to load 0, because we'd have it if we reached here + : CMP.w #$0001 : BNE + LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip JSR.w LockAgahnimDoorsCore : RTL @@ -37,7 +35,7 @@ LockAgahnimDoors: .unlock LDA.w #$0000 ; fallback to never locked - +.exit RTL ;-------------------------------------------------------------------------------- LockAgahnimDoorsCore: @@ -72,7 +70,7 @@ AllowStartFromSingleEntranceCave: LDA.l StartingAreaExitOffset, X BNE + - BRL .done + JMP .done + DEC @@ -204,14 +202,14 @@ RTL AnimatedEntranceFix: ;when an entrance animation tries to start PHA LDA.l InvertedMode : BEQ + ;If we are in inverted mode - LDA $8A : AND.b #$40 : BNE + ;and in the light world - PLA + PLA + BIT $8A : BVS ++ ; and in the light world STZ $04C6 ; skip it. LDA #$00 RTL + PLA - STA $02E4 ;what we wrote over +++ STA $02E4 ;what we wrote over STA $0FC1 ;what we wrote over STA $0710 ;what we wrote over RTL diff --git a/events.asm b/events.asm index 15912b7..7713938 100644 --- a/events.asm +++ b/events.asm @@ -11,8 +11,7 @@ OnPrepFileSelect: RTL + JSL.l LoadAlphabetTilemap - JSL.l LoadFullItemTiles -RTL + JML.l LoadFullItemTiles ;-------------------------------------------------------------------------------- OnDrawHud: JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter @@ -77,7 +76,12 @@ RTL ;-------------------------------------------------------------------------------- OnAga2Defeated: JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first - JSL.l IncrementAgahnim2Sword + JML.l IncrementAgahnim2Sword +;-------------------------------------------------------------------------------- +OnFileCreation: + TAX ; what we wrote over + LDA StartingEquipment+$4C : STA $700340+$4C ; copy starting equipment swaps to file select screen + LDA StartingEquipment+$4E : STA $700340+$4E RTL ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" @@ -85,7 +89,7 @@ OnFileLoad: REP #$10 ; set 16 bit index registers JSL.l EnableForceBlank ; what we wrote over - LDA.b #$07 : STA $210c ; Restore screen 3 to normal tile area + LDA.b #$07 : STA $210C ; Restore screen 3 to normal tile area LDA !FRESH_FILE_MARKER : BNE + JSL.l OnNewFile @@ -147,8 +151,16 @@ OnNewFile: + LDA StartingSword : STA $7EF359 ; set starting sword type - LDA !INVENTORY_SWAP : STA $70038C ; copy starting equipment swaps to file select screen - LDA !INVENTORY_SWAP_2 : STA $70038E + + ; reset some values on new file that are otherwise only reset on hard reset + STZ $03C4 ; ancilla slot index + STZ $047A ; EG + STZ $0B08 : STZ $0B09 ; arc variable + STZ $0CFB ; enemies killed (pull trees) + STZ $0CFC ; times taken damage (pull trees) + STZ $0FC7 : STZ $0FC8 : STZ $0FC9 : STZ $0FCA : STZ $0FCB : STZ $0FCC : STZ $0FCD ; prize packs + LDA #$00 : STA $7EC011 ; mosaic + JSL InitRNGPointerTable ; boss RNG PLP : PLX RTL ;-------------------------------------------------------------------------------- @@ -161,8 +173,8 @@ RTL ;-------------------------------------------------------------------------------- OnLinkDamaged: JSL.l FlipperKill - JSL.l OHKOTimer -RTL + JML.l OHKOTimer + ;-------------------------------------------------------------------------------- OnEnterWater: JSL.l RegisterWaterEntryScreen @@ -177,8 +189,8 @@ OnLinkDamagedFromPit: RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPitOutdoors: - JSL.l OHKOTimer ; make sure this is last -RTL + JML.l OHKOTimer ; make sure this is last + ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" OnOWTransition: @@ -201,16 +213,16 @@ OnLoadDuckMap: RTL + LDA.b #$00 : STA !DARK_DUCK_TEMP - JSL OverworldMap_DarkWorldTilemap -RTL + JML OverworldMap_DarkWorldTilemap + ;-------------------------------------------------------------------------------- PreItemGet: LDA.b #$01 : STA !ITEM_BUSY ; mark item as busy RTL ;-------------------------------------------------------------------------------- PostItemGet: - JSL.l MaybeWriteSRAMTrace -RTL + JML.l MaybeWriteSRAMTrace + ;-------------------------------------------------------------------------------- PostItemAnimation: LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished diff --git a/fairyfixes.asm b/fairyfixes.asm index c62ea3a..5364376 100644 --- a/fairyfixes.asm +++ b/fairyfixes.asm @@ -27,8 +27,7 @@ RTL FairyPond_Init: LDA.l Restrict_Ponds : BNE + LDA.b #$48 - JSL.l Sprite_ShowMessageFromPlayerContact - RTL + JML.l Sprite_ShowMessageFromPlayerContact + PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC + LDA $7EF35C : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++ @@ -56,8 +55,8 @@ RTL ;-------------------------------------------------------------------------------- HappinessPond_Check: LDA $A0 : CMP.b #$15 ;what we wrote over - PHP BNE .done + PHP LDA.b #$72 JSL Sprite_SpawnDynamically @@ -83,6 +82,6 @@ HappinessPond_Check: STZ $0DD0, X ; self terminate - .done PLP + .done RTL diff --git a/fileselect.asm b/fileselect.asm index 3d9f551..a494226 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -113,7 +113,7 @@ JMP DrawItem DrawPlayerFile: - LDA $1A : AND.w #$0001 : BEQ + : BRA .normal : + + LDA $1A : AND.w #$0001 : BNE .normal JSR DrawPlayerFileShared INC $0710 ; Suppress animated tile updates for this frame @@ -633,15 +633,15 @@ AltBufferTable: STA $1104 ;file 2 top row STA $1144 ;file 2 bottom row STA $1184 ;gap row top - STA $11c4 ;gap row bottom + STA $11C4 ;gap row bottom STA $1204 ;file 3 top row STA $1244 ;file 3 bottom row STA $1284 ;extra gap row top - STA $12c4 ;extra gap row bottom + STA $12C4 ;extra gap row bottom STA $1304 ;extra gap row top STA $1344 ;extra gap row bottom STA $1384 ;extra gap row top - STA $13c4 ;extra gap row bottom + STA $13C4 ;extra gap row bottom ; Set last packet marker LDA.w #$00FF : STA $1402 diff --git a/halfmagicbat.asm b/halfmagicbat.asm index deb4cb6..56ba087 100644 --- a/halfmagicbat.asm +++ b/halfmagicbat.asm @@ -7,8 +7,7 @@ GetMagicBatItem: CMP.b #$FF : BEQ .normalLogic TAY STZ $02E9 ; 0 = Receiving item from an NPC or message - JSL.l Link_ReceiveItem -RTL + JML.l Link_ReceiveItem .normalLogic LDA HalfMagic STA $7EF37B diff --git a/heartpieces.asm b/heartpieces.asm index 1009d8a..6a4c3fe 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -24,7 +24,7 @@ HeartPieceGet: JSL.l $0791B3 ; Player_HaltDashAttackLong JSL.l Link_ReceiveItem CLC ; return false - BRL .done ; finished + JMP .done ; finished .unfinished_heart SEC ; return true @@ -54,7 +54,7 @@ DrawHeartPieceGFX: PHA : PHY LDA !REDRAW : BEQ .skipInit ; skip init if already ready JSL.l HeartPieceSpritePrep - BRL .done ; don't draw on the init frame + JMP .done ; don't draw on the init frame .skipInit LDA $0E80, X ; Retrieve stored item type @@ -177,7 +177,7 @@ LoadHeartPieceRoomValue: LDA $1B : BEQ .outdoors ; check if we're indoors or outdoors .indoors JSL.l LoadIndoorValue - BRL .done + JMP .done .outdoors JSL.l LoadOutdoorValue .done @@ -225,30 +225,30 @@ LoadIndoorValue: LDA $A0 ; these are all decimal because i got them that way CMP.w #225 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Forest_Thieves, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #226 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Lumberjack_Tree, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #234 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Spectacle_Cave, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #283 : BNE + LDA $22 : XBA : AND.w #$0001 ; figure out where link is BNE ++ %GetPossiblyEncryptedItem(HeartPiece_Circle_Bushes, HeartPieceIndoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #294 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #295 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Smith_Pegs, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #135 : BNE + LDA StandingKey_Hera - BRL .done + JMP .done + LDA.w #$0017 ; default to a normal hp .done @@ -271,47 +271,47 @@ LoadOutdoorValue: CMP.w #$03 : BNE + LDA $22 : CMP.w #1890 : !BLT ++ %GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(EtherItem, SpriteItemValues) - BRL .done + JMP .done + CMP.w #$05 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Mountain_Warp, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$28 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$2A : BNE + %GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$30 : BNE + LDA $22 : CMP.w #512 : !BGE ++ %GetPossiblyEncryptedItem(HeartPiece_Desert, HeartPieceOutdoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(BombosItem, SpriteItemValues) - BRL .done + JMP .done + CMP.w #$35 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$3B : BNE + %GetPossiblyEncryptedItem(HeartPiece_Swamp, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$42 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$4A : BNE + %GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$5B : BNE + %GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$68 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$81 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues) - BRL .done + JMP .done + LDA.w #$0017 ; default to a normal hp .done @@ -338,34 +338,34 @@ LoadBossValue: LDA $A0 ; these are all decimal because i got them that way CMP.w #200 : BNE + %GetPossiblyEncryptedItem(HeartContainer_ArmosKnights, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #51 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Lanmolas, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #7 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Moldorm, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #90 : BNE + %GetPossiblyEncryptedItem(HeartContainer_HelmasaurKing, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #6 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Arrghus, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #41 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Mothula, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #172 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Blind, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #222 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Kholdstare, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #144 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Vitreous, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #164 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Trinexx, HeartContainerBossValues) - BRL .done + JMP .done + LDA.w #$003E ; default to a normal boss heart .done @@ -379,30 +379,19 @@ CheckIfBossRoom: ;-------------------------------------------------------------------------------- REP #$20 ; set 16-bit accumulator LDA $A0 ; these are all decimal because i got them that way - CMP.w #200 : BNE + - SEC : BRL .done - + CMP.w #51 : BNE + - SEC : BRL .done - + CMP.w #7 : BNE + - SEC : BRL .done - + CMP.w #90 : BNE + - SEC : BRL .done - + CMP.w #6 : BNE + - SEC : BRL .done - + CMP.w #41 : BNE + - SEC : BRL .done - + CMP.w #172 : BNE + - SEC : BRL .done - + CMP.w #222 : BNE + - SEC : BRL .done - + CMP.w #144 : BNE + - SEC : BRL .done - + CMP.w #164 : BNE + - SEC : BRL .done - + + CMP.w #200 : BEQ .done + CMP.w #51 : BEQ .done + CMP.w #7 : BEQ .done + CMP.w #90 : BEQ .done + CMP.w #6 : BEQ .done + CMP.w #41 : BEQ .done + CMP.w #172 : BEQ .done + CMP.w #222 : BEQ .done + CMP.w #144 : BEQ .done + CMP.w #164 : BEQ .done CLC .done - SEP #$20 ; set 8-bit accumulator ++ SEP #$20 ; set 8-bit accumulator RTL ;-------------------------------------------------------------------------------- ;#200 - Eastern Palace - Armos Knights diff --git a/hooks.asm b/hooks.asm index cbdc64a..f5d73f5 100755 --- a/hooks.asm +++ b/hooks.asm @@ -261,7 +261,9 @@ org $0CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE) NOP #4 ;-------------------------------------------------------------------------------- org $0CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX) -NOP #4 +JSL OnFileCreation +NOP +;Additionally, display inventory swap starting equipment on file select ;-------------------------------------------------------------------------------- org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) LDA.w #$0002 : NOP @@ -364,6 +366,32 @@ NOP #19 ;23 bytes removed with the JSL ;-------------------------------------------------------------------------------- org $04E7AE ; <- bank0E.asm : 4230 (LDA $7EF287 : AND.w #$0020) JSL.l TurtleRockPegSolved + +org $04E7B9 ; <- bank0E.asm : 4237 (LDX $04C8) +JMP.w TurtleRockTrollPegs +TurtleRockPegCheck: + +org $04E7C9 +TurtleRockPegSuccess: + +org $04E7F5 +TurtleRockPegFail: + +org $04E96F +PegProbability: +db $00 ; Probability out of 255. 0 = Vanilla behavior +TurtleRockTrollPegs: +SEP #$20 + LDX.w $04C8 : CPX.w #$FFFF : BEQ .vanilla + JSL.l GetRandomInt + LDA.l PegProbability : BEQ .vanilla : CMP.l $7E0FA1 +REP #$20 : !BGE .succeed +.fail +JMP.w TurtleRockPegFail +.succeed +JMP.w TurtleRockPegSuccess +.vanilla +REP #$20 : JMP.w TurtleRockPegCheck ;-------------------------------------------------------------------------------- org $1BBD05 ; <- bank1B.asm : 261 (TYA : STA $00) ; hook starts at the STA JML.l PreventEnterOnBonk @@ -1614,7 +1642,7 @@ JSL.l ShowDungeonItems : NOP #5 ;================================================================================ org $0DEA5F ; <- 6EA5F - equipment.asm:1679 - (SEP #$30) ;NOP #5 -;BRL .skipCrystalInit +;JMP .skipCrystalInit ;org $0DEAA4 ; <- 6EAA4 - equipment.asm:1706 - (LDA $7EF37A : AND.w #$0001) ;.skipCrystalInit ;================================================================================ @@ -2523,6 +2551,12 @@ CheckIfReading: RTS ;================================================================================ +org $0DB4CA : db $40, $40 ; fire bar statis +org $0DB4A9 : db $50, $50, $6E, $6E ; roller statis +org $0DB4B2 : db $40, $40, $40, $40 ; cannon statis +org $0DB4C3 : db $C0 ; anti fairy statis +org $0DB516 : db $40 ; chain chomp statis + ;-------------------------------------------------------------------------------- ; Keep Firebar Damage on Same Layer ;-------------------------------------------------------------------------------- diff --git a/icepalacegraphics.asm b/icepalacegraphics.asm index 8d2677f..22d5903 100644 --- a/icepalacegraphics.asm +++ b/icepalacegraphics.asm @@ -9,7 +9,7 @@ ShouldOverrideFileLoad: .no CLC : RTS .yes - SEC : RTS + RTS BgGraphicsLoading: ; Instructions overwritten diff --git a/init.asm b/init.asm index 8da91a0..47a5726 100644 --- a/init.asm +++ b/init.asm @@ -56,5 +56,6 @@ RTL Init_PostRAMClear: JSL MSUInit + JSL InitRNGPointerTable JML $00D463 ; The original target of the jump table that we hijacked \ No newline at end of file diff --git a/inventory.asm b/inventory.asm index e8e118e..aa27b73 100644 --- a/inventory.asm +++ b/inventory.asm @@ -60,7 +60,7 @@ RTL LDA !INVENTORY_SWAP : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both boomerangs LDA $7EF341 : EOR #$03 : STA $7EF341 ; swap blue & red boomerang LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + CMP #$01 : BNE + ; bow LDA !INVENTORY_SWAP_2 : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both bows PHX : LDX.b #$00 ; scan ancilla table for arrows @@ -77,7 +77,7 @@ RTL ++ LDA $7EF340 : !SUB #$01 : EOR #$02 : !ADD #$01 : STA $7EF340 ; swap bows LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + BRA + .errorJump BRA .errorJump2 @@ -85,7 +85,7 @@ RTL LDA !INVENTORY_SWAP : AND #$30 : CMP #$30 : BNE .errorJump ; make sure we have mushroom & magic powder LDA $7EF344 : EOR #$03 : STA $7EF344 ; swap mushroom & magic powder LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + BRA + .errorJump2 BRA .error @@ -124,7 +124,9 @@ RTL ;ProcessBottleMenu: ;-------------------------------------------------------------------------------- ProcessBottleMenu: - LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down +; LDA $F6 : AND #$30 : CMP.b #$30 : BEQ .double_shoulder_pressed +; LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down +; .double_shoulder_pressed LDA $7EF34F ; check bottle state BEQ .no_bottles ; skip if we have no bottles PHX @@ -137,9 +139,9 @@ ProcessBottleMenu: .no_bottles LDA #$00 ; pretend like the controller state was 0 from the overridden load RTL - .y_not_pressed - LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state -RTL +; .y_not_pressed +; LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state +;RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- @@ -203,61 +205,61 @@ AddInventory: PHA : PHX : PHP CPY.b #$0C : BNE + ; Blue Boomerang LDA !INVENTORY_SWAP : ORA #$80 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$2A : BNE + ; Red Boomerang LDA !INVENTORY_SWAP : ORA #$40 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$29 : BNE + ; Mushroom LDA !INVENTORY_SWAP : ORA #$28 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$0D : BNE + ; Magic Powder LDA !INVENTORY_SWAP : ORA #$10 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$13 : BNE + ; Shovel LDA !INVENTORY_SWAP : ORA #$04 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$14 : BNE + ; Flute (Inactive) LDA !INVENTORY_SWAP : ORA #$02 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$4A : BNE + ; Flute (Active) LDA !INVENTORY_SWAP : ORA #$01 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$0B : BNE + ; Bow LDA ArrowMode : BNE +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$3A : BNE + ; Bow & Arrows LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$3B : BNE + ; Bow & Silver Arrows LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 LDA ArrowMode : BNE +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows when not in rupee bow +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$43 : BNE + ; Single arrow LDA ArrowMode : BEQ +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows in quick-swap +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 + .incrementCounts - LDA !LOCK_STATS : BEQ + : BRL .done : + + LDA !LOCK_STATS : BEQ + : JMP .done : + ; don't count any of this stuff - CPY.b #$20 : BNE + : BRL .itemCounts : + ; Crystal - CPY.b #$26 : BNE + : BRL .itemCounts : + ; Heart Piece Completion Heart - CPY.b #$2E : BNE + : BRL .itemCounts : + ; Red Potion (Refill) - CPY.b #$2F : BNE + : BRL .itemCounts : + ; Green Potion (Refill) - CPY.b #$30 : BNE + : BRL .itemCounts : + ; Blue Potion (Refill) - CPY.b #$37 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$38 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$39 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$00 : BNE + : BRL .itemCounts : + ; Uncle Sword & Shield + CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal + CPY.b #$26 : BNE + : JMP .itemCounts : + ; Heart Piece Completion Heart + CPY.b #$2E : BNE + : JMP .itemCounts : + ; Red Potion (Refill) + CPY.b #$2F : BNE + : JMP .itemCounts : + ; Green Potion (Refill) + CPY.b #$30 : BNE + : JMP .itemCounts : + ; Blue Potion (Refill) + CPY.b #$37 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$38 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$39 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$00 : BNE + : JMP .itemCounts : + ; Uncle Sword & Shield CPY.b #$04 : !BLT .isSword ; Swords - Skip Shop/Fairy Check for Swords CPY.b #$49 : BEQ .isSword @@ -265,32 +267,32 @@ AddInventory: CPY.b #$5E : BEQ .isSword BRA + .isSword - BRL .dungeonCounts + JMP .dungeonCounts + - CPY.b #$3B : BNE + : BRL .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow + CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow LDA $1B : BEQ ++ ; skip shop check if outdoors LDA $02E9 : CMP.b #$01 : BEQ ++ ; skip shop check for chests PHP : REP #$20 ; set 16-bit accumulator LDA $048E - CMP.w #274 : BNE + : BRL .shop : + ; dark world death mountain shop, ornamental shield shop - CMP.w #271 : BNE + : BRL .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop - CMP.w #272 : BNE + : BRL .shop : + ; red shield shop - CMP.w #284 : BNE + : BRL .shop : + ; bomb shop - ;CMP.w #265 : BNE + : BRL .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted - ;CMP.w #271 : BNE + : BRL .shop : + ; lake hylia shop - CMP.w #287 : BNE + : BRL .shop : + ; kakariko shop - CMP.w #255 : BNE + : BRL .shop : + ; light world death mountain shop - CMP.w #276 : BNE + : BRL .shop : + ; waterfall fairy - CMP.w #277 : BNE + : BRL .shop : + ; upgrade fairy (shop) - CMP.w #278 : BNE + : BRL .shop : + ; pyramid fairy + CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop + CMP.w #271 : BNE + : JMP .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop + CMP.w #272 : BNE + : JMP .shop : + ; red shield shop + CMP.w #284 : BNE + : JMP .shop : + ; bomb shop + ;CMP.w #265 : BNE + : JMP .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted + ;CMP.w #271 : BNE + : JMP .shop : + ; lake hylia shop + CMP.w #287 : BNE + : JMP .shop : + ; kakariko shop + CMP.w #255 : BNE + : JMP .shop : + ; light world death mountain shop + CMP.w #276 : BNE + : JMP .shop : + ; waterfall fairy + CMP.w #277 : BNE + : JMP .shop : + ; upgrade fairy (shop) + CMP.w #278 : BNE + : JMP .shop : + ; pyramid fairy PLP : BRA ++ .shop - PLP : BRL .done + PLP : JMP .done ++ .dungeonCounts - LDA $1B : BNE + : BRL .fullItemCounts : + + LDA $1B : BNE + : JMP .fullItemCounts : + ; ==BEGIN INDOOR-ONLY SECTION ;REP #$20 ; Set 16-bit Accumulator @@ -307,54 +309,54 @@ AddInventory: BRA ++ + CMP.b #$02 : BNE + ; Hyrule Castle (Escape) ++ - CPY.b #$32 : BNE ++ : BRL .itemCounts : ++ ; Ball & Chain Guard's Big Key + CPY.b #$32 : BNE ++ : JMP .itemCounts : ++ ; Ball & Chain Guard's Big Key %TopHalf($7EF434) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$04 : BNE + ; Eastern Palace LDA $7EF436 : INC : AND #$07 : TAX LDA $7EF436 : AND #$F8 : STA $7EF436 TXA : ORA $7EF436 : STA $7EF436 - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$06 : BNE + ; Desert Palace LDA $7EF435 : !ADD #$20 : STA $7EF435 - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$08 : BNE + ; Agahnim's Tower LDA $7EF435 : INC : AND #$03 : TAX LDA $7EF435 : AND #$FC : STA $7EF435 TXA : ORA $7EF435 : STA $7EF435 - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$0A : BNE + ; Swamp Palace %BottomHalf($7EF439) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$0C : BNE + ; Palace of Darkness %BottomHalf($7EF434) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$0E : BNE + ; Misery Mire %BottomHalf($7EF438) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$10 : BNE + ; Skull Woods %TopHalf($7EF437) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$12 : BNE + ; Ice Palace %TopHalf($7EF438) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$14 : BNE + ; Tower of Hera LDA $7EF435 : !ADD #$04 : AND #$1C : TAX LDA $7EF435 : AND #$E3 : STA $7EF435 TXA : ORA $7EF435 : STA $7EF435 - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$16 : BNE + ; Thieves' Town %BottomHalf($7EF437) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$18 : BNE + ; Turtle Rock %TopHalf($7EF439) - BRL .fullItemCounts + JMP .fullItemCounts + CMP.b #$1A : BNE + ; Ganon's Tower LDA $7EF436 : !ADD #$08 : STA $7EF436 LDA $7EF366 : AND #$04 : BNE ++ JSR .incrementGTowerPreBigKey ++ - ;BRL .fullItemCounts + ;JMP .fullItemCounts + ; == END INDOOR-ONLY SECTION @@ -379,178 +381,178 @@ AddInventory: CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield JSR .incrementSword JSR .incrementShield - BRL .done + JMP .done + CPY.b #$01 : BNE + ; Master Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$02 : BNE + ; Tempered Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$03 : BNE + ; Golden Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$04 : BNE + ; Fighter's Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$05 : BNE + ; Red Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$06 : BNE + ; Mirror Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$07 : !BLT + ; Items $07 - $0D CPY.b #$0E : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$14 : BNE + ; Flute (Inactive) - LEAVE THIS ABOVE THE 0F-16 CONDITION - kkat JSR .stampFlute JSR .incrementY - BRL .done + JMP .done + CPY.b #$0F : !BLT + ; Items $0F - $16 CPY.b #$17 : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$17 : BNE + ; Heart Piece JSR .incrementHeartPiece - BRL .done + JMP .done + CPY.b #$18 : !BLT + ; Items $18 - $19 CPY.b #$1A : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$1A : BNE + ; Magic Mirror JSR .stampMirror JSR .incrementY - BRL .done + JMP .done + CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat JSR .incrementY - BRL .done + JMP .done + CPY.b #$1B : !BLT + ; Items $1B - $1F CPY.b #$20 : !BGE + JSR .incrementA - BRL .done + JMP .done + CPY.b #$20 : BNE + ; Crystal JSR .incrementCrystal - BRL .done + JMP .done + CPY.b #$21 : BNE + ; Bug Net JSR .incrementY - BRL .done + JMP .done + CPY.b #$22 : !BLT + ; Items $22 - $23 CPY.b #$24 : !BGE + JSR .incrementMail - BRL .done + JMP .done + CPY.b #$24 : BNE + ; Small Key JSR .incrementKey - BRL .done + JMP .done + CPY.b #$25 : BNE + ; Compass JSR .incrementCompass - BRL .done + JMP .done + CPY.b #$26 : BNE + ; Liar Heart (Container) ;JSR .incrementHeartContainer - BRL .done + JMP .done + CPY.b #$27 : BNE + ; 1 Bomb JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$28 : BNE + ; 3 Bombs JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$29 : BNE + ; Musoroom JSR .incrementY - BRL .done + JMP .done + CPY.b #$2A : !BLT + ; Items $2A - $2D CPY.b #$2E : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$31 : BNE + ; 10 Bombs JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$32 : BNE + ; Big Key JSR .incrementBigKey - BRL .done + JMP .done + CPY.b #$33 : BNE + ; Map JSR .incrementMap - BRL .done + JMP .done + CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants CPY.b #$3A : !BGE + JSR .incrementPendant - BRL .done + JMP .done + CPY.b #$3A : !BLT + ; Items $3A - $3B - Bow & Silver Arrows CPY.b #$3C : !BGE + JSR .incrementBow - BRL .done + JMP .done + CPY.b #$3C : BNE + ; Bottle w/Bee JSR .incrementY - BRL .done + JMP .done + CPY.b #$3D : BNE + ; Bottle w/Fairy JSR .incrementY - BRL .done + JMP .done + CPY.b #$3E : !BLT + ; Items $3E - $3F - Heart Containers CPY.b #$40 : !BGE + JSR .incrementHeartContainer - BRL .done + JMP .done + CPY.b #$48 : BNE + ; Bottle w/Gold Bee JSR .incrementY - BRL .done + JMP .done + CPY.b #$49 : BNE + ; Fighter's Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$4A : BNE + ; Flute (Active) JSR .stampFlute JSR .incrementY - BRL .done + JMP .done + CPY.b #$4B : BNE + ; Pegasus Boots JSR .stampBoots JSR .incrementA - BRL .done + JMP .done + CPY.b #$4C : BNE + ; Bomb Capacity Upgrade JSR .incrementCapacity JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$4D : !BLT + ; Items $4D - $4F - Capacity Upgrades CPY.b #$50 : !BGE + JSR .incrementCapacity - BRL .done + JMP .done + CPY.b #$50 : BNE + ; Master Sword (Safe) JSR .incrementSword - BRL .done + JMP .done + CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades CPY.b #$55 : !BGE + JSR .incrementCapacity - BRL .done + JMP .done + CPY.b #$58 : BNE + ; Upgrade-Only Sivler Arrows JSR .incrementBow - BRL .done + JMP .done + CPY.b #$5E : BNE + ; Progressive Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$5F : BNE + ; Progressive Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$60 : BNE + ; Progressive Armor JSR .incrementMail - BRL .done + JMP .done + CPY.b #$61 : BNE + ; Progressive Lifting Glove JSR .incrementA - BRL .done + JMP .done + CPY.b #$64 : !BLT + ; Items $64 & $65 - Progressive Bow CPY.b #$66 : !BGE + JSR .incrementBow - BRL .done + JMP .done + CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps CPY.b #$80 : !BGE + JSR .incrementMap - BRL .done + JMP .done + CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses CPY.b #$90 : !BGE + JSR .incrementCompass - BRL .done + JMP .done + CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys CPY.b #$A0 : !BGE + JSR .incrementBigKey - BRL .done + JMP .done + CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys CPY.b #$B0 : !BGE + JSR .incrementKey - BRL .done + JMP .done + .done PLP : PLX : PLA @@ -738,6 +740,7 @@ RTS Link_ReceiveItem_HUDRefresh: LDA $7EF343 : BNE + ; skip if we have bombs LDA $7EF375 : BEQ + ; skip if we are filling no bombs + LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs DEC : STA $7EF375 ; decrease bomb fill count LDA.b #$01 : STA $7EF343 ; increase actual bomb count + @@ -753,6 +756,7 @@ RTL HandleBombAbsorbtion: STA $7EF375 ; thing we wrote over LDA $0303 : BNE + ; skip if we already have some item selected + LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs LDA.b #$04 : STA $0202 ; set selected item to bombs LDA.b #$01 : STA $0303 ; set selected item to bombs JSL.l HUD_RebuildLong @@ -1113,10 +1117,10 @@ SpawnShovelItem: LDA $03FC : BEQ + JSL DiggingGameGuy_AttemptPrizeSpawn - BRL .skip + JMP .skip + - LDA $035B : AND.b #$01 : BNE + : BRL .skip : + ; corner dig fix + LDA $035B : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix PHY : PHP PHB : PHK : PLB diff --git a/inverted.asm b/inverted.asm index 1e05ee1..b60085d 100644 --- a/inverted.asm +++ b/inverted.asm @@ -4,7 +4,7 @@ ; after Ganon slams into it in bat form? Overworld_CreatePyramidHoleModified: LDA.l InvertedMode : BNE + - BRL .originalBehaviour + JMP .originalBehaviour + .invertedBehavior REP #$30 @@ -37,7 +37,7 @@ Overworld_CreatePyramidHoleModified: LDA.w #$FFFF : STA $1012, Y - BRL .ending + JMP .ending .originalBehaviour REP #$30 diff --git a/itemdowngrade.asm b/itemdowngrade.asm index aab1763..9d08af2 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -66,8 +66,8 @@ RTS INC : CMP !HIGHEST_SWORD_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade) LDA !HIGHEST_SWORD_LEVEL : DEC ; convert to item id TAY : PLA : LDA !HIGHEST_SWORD_LEVEL ; put sword id into the thing to write - BRL .done + JMP .done + PLA -BRL .done +JMP .done ;================================================================================ \ No newline at end of file diff --git a/msu.asm b/msu.asm index 4af1caf..3118f01 100644 --- a/msu.asm +++ b/msu.asm @@ -185,11 +185,11 @@ CheckMusicLoadRequest: LDA !REG_MUSIC_CONTROL_REQUEST : CMP #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE LDA NoBGM : BNE + LDA !REG_MSU_PACK_CURRENT : CMP #$FE : BNE ++ - + : BRL .mute + + : JMP .mute ++ LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BEQ + - - : BRL .unmute + - : JMP .unmute + LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE - LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE - @@ -277,7 +277,7 @@ CheckMusicLoadRequest: PLY : STY $00 : SEP #$10 : PLB TAX : LDA MusicShuffleTable-1,X STA !REG_MUSIC_CONTROL_REQUEST - BRL .check_fallback + JMP .check_fallback .unmute LDA.b !VAL_COMMAND_UNMUTE_SPC @@ -481,7 +481,7 @@ MSUMain: LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu SEP #$30 LDX !REG_MUSIC_CONTROL : BEQ + - BRL .command_ff + JMP .command_ff + LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade diff --git a/newhud.asm b/newhud.asm index e4aef54..f41ed75 100644 --- a/newhud.asm +++ b/newhud.asm @@ -63,7 +63,7 @@ SEP #$30 ;================================================================================ SEP #$20 - LDA.l GoalItemRequirement : BNE + : BRL .done : + ; Star Meter + LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter LDA.l !GOAL_COUNTER JSR HudHexToDec3Digit @@ -144,13 +144,13 @@ SEP #$30 AND #$FFF8 TAX ; end of crap - LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : BRL .green : + + LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : + SEP #$20 : LDA.b #$80 : STA $7EF36E : REP #$30 ; set magic to max LDX.w #$0080 ; load full magic meter graphics LDA $1A : AND.w #$000C : LSR #2 BEQ .red CMP.w #0001 : BEQ .yellow - CMP.w #0002 : BNE + : BRL .green : + + CMP.w #0002 : BNE + : JMP .green : + .blue LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746 LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786 diff --git a/newitems.asm b/newitems.asm index 3ccc496..cc8ded7 100755 --- a/newitems.asm +++ b/newitems.asm @@ -195,7 +195,7 @@ AddReceivedItemExpandedGetItem: ; ;JSL.l Main_ShowTextMessage_Alt ; LDA !GOAL_COUNTER : INC : STA !GOAL_COUNTER ; LDA.b #$01 : STA $7F50XX - ; BRL .done + ; JMP .done ;++ ;STA $FFFFFF LDA $02D8 ; check inventory @@ -205,7 +205,7 @@ AddReceivedItemExpandedGetItem: LDA.l SilverArrowsUseRestriction : BNE ++ LDA.b #03 : STA $7EF340 ; set bow to silver ++ - BRL .done + JMP .done + CMP.b #$3B : BNE + ; Silver Bow LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip @@ -217,56 +217,56 @@ AddReceivedItemExpandedGetItem: STA $7EF340 .noequip LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 ; mark silver bow on y-toggle - BRL .done + JMP .done + CMP.b #$4C : BNE + ; 50 bombs ;LDA.b #$07 : STA $7EF370 ; upgrade bombs LDA.b #50 : !SUB.l StartingMaxBombs : STA $7EF370 ; upgrade bombs LDA.b #50 : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$4D : BNE + ; 70 arrows ;LDA #$07 : STA $7EF371 ; upgrade arrows LDA.b #70 : !SUB.l StartingMaxArrows : STA $7EF371 ; upgrade arrows LDA.b #70 : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$4E : BNE + ; 1/2 magic LDA $7EF37B : CMP #$02 : !BGE ++ INC : STA $7EF37B ; upgrade magic ++ LDA.b #$80 : STA $7EF373 ; fill magic - BRL .done + JMP .done + CMP.b #$4F : BNE + ; 1/4 magic LDA.b #$02 : STA $7EF37B ; upgrade magic LDA.b #$80 : STA $7EF373 ; fill magic - BRL .done + JMP .done + CMP.b #$50 : BNE + ; Master Sword (Safe) LDA $7EF359 : CMP.b #$02 : !BGE + ; skip if we have a better sword LDA.b #$02 : STA $7EF359 ; set master sword - BRL .done + JMP .done + CMP.b #$51 : BNE + ; +5 Bombs LDA $7EF370 : !ADD.b #$05 : STA $7EF370 ; upgrade bombs +5 LDA.l Upgrade5BombsRefill : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$52 : BNE + ; +10 Bombs LDA $7EF370 : !ADD.b #$0A : STA $7EF370 ; upgrade bombs +10 LDA.l Upgrade10BombsRefill : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$53 : BNE + ; +5 Arrows LDA $7EF371 : !ADD.b #$05 : STA $7EF371 ; upgrade arrows +5 LDA.l Upgrade5ArrowsRefill : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$54 : BNE + ; +10 Arrows LDA $7EF371 : !ADD.b #$0A : STA $7EF371 ; upgrade arrows +10 LDA.l Upgrade10ArrowsRefill : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$55 : BNE + ; Programmable Object 1 %ProgrammableItemLogic(1) - BRL .done + JMP .done + CMP.b #$56 : BNE + ; Programmable Object 2 %ProgrammableItemLogic(2) - BRL .done + JMP .done + CMP.b #$57 : BNE + ; Programmable Object 3 %ProgrammableItemLogic(3) - BRL .done + JMP .done + CMP.b #$58 : BNE + ; Upgrade-Only Sivler Arrows LDA.l SilverArrowsUseRestriction : BNE +++ LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++ @@ -279,46 +279,46 @@ AddReceivedItemExpandedGetItem: ++ + CMP.b #$59 : BNE + ; 1 Rupoor REP #$20 : LDA $7EF360 : !SUB RupoorDeduction : STA $7EF360 : SEP #$20 ; Take 1 rupee - BRL .done + JMP .done + CMP.b #$5A : BNE + ; Null Item - BRL .done + JMP .done + CMP.b #$5B : BNE + ; Red Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l RedClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l RedClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5C : BNE + ; Blue Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l BlueClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l BlueClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5D : BNE + ; Green Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l GreenClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l GreenClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5E : BNE + ; Progressive Sword - BRL .done + JMP .done + CMP.b #$5F : BNE + ; Progressive Shield - BRL .done + JMP .done + CMP.b #$60 : BNE + ; Progressive Armor - BRL .done + JMP .done + CMP.b #$61 : BNE + ; Progressive Lifting Glove - BRL .done + JMP .done + CMP.b #$62 : BNE + ; RNG Pool Item (Single) - BRL .done + JMP .done + CMP.b #$63 : BNE + ; RNG Pool Item (Multi) - BRL .done + JMP .done + CMP.b #$64 : BNE + ; Progressive Bow - BRL .done + JMP .done + CMP.b #$65 : BNE + ; Progressive Bow - BRL .done + JMP .done + CMP.b #$6A : BNE + ; Goal Collectable (Single/Triforce) JSL.l ActivateGoal - BRL .done + JMP .done + CMP.b #$6B : BNE + ; Goal Collectable (Multi/Power Star) BRA .multi_collect + CMP.b #$6C : BNE + ; Goal Collectable (Multi/Power Star) Alternate Graphic @@ -329,52 +329,52 @@ AddReceivedItemExpandedGetItem: LDA TurnInGoalItems : BNE ++ JSL.l ActivateGoal ++ - BRL .done + JMP .done + CMP.b #$6D : BNE + ; Server Request F0 JSL.l ItemGetServiceRequest_F0 - BRL .done + JMP .done + CMP.b #$6E : BNE + ; Server Request F1 JSL.l ItemGetServiceRequest_F1 - BRL .done + JMP .done + CMP.b #$6F : BNE + ; Server Request F2 JSL.l ItemGetServiceRequest_F2 - BRL .done + JMP .done ;+ CMP.b #$FE : BNE + ; Server Request (Null Chest) ; JSL.l ItemGetServiceRequest - ; BRL .done + ; JMP .done + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF368 : STA $7EF368 ; Map 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF369 : STA $7EF369 ; Map 2 - BRL .done + JMP .done + CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF364 : STA $7EF364 ; Compass 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF365 : STA $7EF365 ; Compass 2 - BRL .done + JMP .done + CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF366 : STA $7EF366 ; Big Key 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF367 : STA $7EF367 ; Big Key 2 - BRL .done + JMP .done + CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key AND #$0F : TAX LDA $7EF37C, X : INC : STA $7EF37C, X ; Increment Key Count @@ -388,12 +388,12 @@ AddReceivedItemExpandedGetItem: LDA.l GenericKeys : BEQ + .generic LDA $7EF36F : INC : STA $7EF36F - BRL .done + JMP .done .normal TXA : ASL : CMP $040C : BNE ++ LDA $7EF36F : INC : STA $7EF36F ++ - BRL .done + JMP .done + .done PLX @@ -432,66 +432,66 @@ AddReceivedItemExpanded: CMP.b #$16 : BNE ++ ; Bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$2B : BNE ++ ; Red Potion w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$2C : BNE ++ ; Green Potion w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$2D : BNE ++ ; Blue Potion w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$3C : BNE ++ ; Bee w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$3D : BNE ++ ; Fairy w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$48 : BNE ++ ; Gold Bee w/bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$4E : BNE ++ ; Progressive Magic LDA $7EF37B : BEQ +++ LDA.b #$4F : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$5E : BNE ++ ; Progressive Sword LDA $7EF359 : CMP.l ProgressiveSwordLimit : !BLT + - LDA.l ProgressiveSwordReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveSwordReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$49 : STA $02D8 : BRL .done + LDA.b #$49 : STA $02D8 : JMP .done + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$50 : STA $02D8 : BRL .done + LDA.b #$50 : STA $02D8 : JMP .done + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : STA $02D8 : BRL .done + LDA.b #$02 : STA $02D8 : JMP .done + ; Everything Else - LDA.b #$03 : STA $02D8 : BRL .done + LDA.b #$03 : STA $02D8 : JMP .done ++ : CMP.b #$5F : BNE ++ ; Progressive Shield LDA !PROGRESSIVE_SHIELD : LSR #6 : CMP.l ProgressiveShieldLimit : !BLT + - LDA.l ProgressiveShieldReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveShieldReplacement : STA $02D8 : JMP .done + LDA !PROGRESSIVE_SHIELD : AND.b #$C0 : BNE + ; No Shield LDA.b #$04 : STA $02D8 - LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done + LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done + : CMP.b #$40 : BNE + ; Fighter Shield LDA.b #$05 : STA $02D8 - LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done + LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done + ; Everything Else LDA.b #$06 : STA $02D8 - LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done + LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done ++ : CMP.b #$60 : BNE ++ ; Progressive Armor LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT + - LDA.l ProgressiveArmorReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveArmorReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Armor - LDA.b #$22 : STA $02D8 : BRL .done + LDA.b #$22 : STA $02D8 : JMP .done + ; Everything Else - LDA.b #$23 : STA $02D8 : BRL .done + LDA.b #$23 : STA $02D8 : JMP .done ++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove LDA $7EF354 : BNE + ; No Lift LDA.b #$1B : STA $02D8 : BRA .done @@ -499,7 +499,7 @@ AddReceivedItemExpanded: LDA.b #$1C : STA $02D8 : BRA .done ++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow LDA $7EF340 : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveBowReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Bow LDA.b #$3A : STA $02D8 : BRA .done + ; Any Bow diff --git a/newitems2.asm b/newitems2.asm new file mode 100644 index 0000000..4bfaa77 --- /dev/null +++ b/newitems2.asm @@ -0,0 +1,825 @@ +;=============================================================================== +; Complete fucking revamp of how item get works +;=============================================================================== + +Ancilla_ReceiveItem_rupee_anim_tiles: + db $24, $25, $26 + +Ancilla_ReceiveItem_rupee_anim_timers: + db 9, 5, 5 + +Ancilla_ReceiveItem_oam_props: + db $05, $01, $04 + +Ancilla_ReceiveItem_hp_messages: + dw -1, $0155, $0156, $0157 + + + + + + +AddReceiveItem: + + + + + + + +.routine + fillword $0000 : fill $FF*2 + +.y_offsets + fillbyte $00 : fill $FF + +.x_offsets + fillbyte $00 : fill $FF + +.gfx_offsets + fillword $0000 : fill $FF*2 + +.wideness + fillbyte $00 : fill $FF + +.pal + fillbyte $00 : fill $FF + +.sram_addr + fillword $0000 : fill $FF*2 + +.sram_write + fillbyte $00 : fill $FF + +.message + fillbyte $00 : fill $FF + +.sound + fillbyte $00 : fill $FF + +; Pal defines: +!r = 1 ; red +!b = 2 ; blue +!g = 4 ; green +!e = 5 ; sword/shield + +!t = $00 ; not wide +!w = $80 ; wide + +; song storage +; top 2 bits = which address to write +; 00 $00 Song +; 01 $40 SFX1 +; 10 $80 SFX2 +; 11 $C0 SFX3 +; bottom 6 bits = data to write + +!sfxsong = $00<<6 +!sfx1 = $01<<6 +!sfx2 = $02<<6 +!sfx3 = $03<<6 + +!dodododo = $0F|!sfx3 +!badgesong = $13|!sfxsong +!hpsfx = $2D|!sfx3 +!hcsfx = $0D|!sfx3 + +!itemx = -1 +macro ritem(name, routine, y_off, x_off, gfx_off, oam_props, sram_addr, sram_write, message, sfx) + !itemx #= !itemx+1 + !get_ #= !itemx + + #g: + pushpc + ; routine points to either a general handler + ; or a specific routine for this item or class of items + org AddReceiveItem_routine+!itemx*2 : dw + + ; gfx dictates an offset into uncompressed 4bpp graphics data + org AddReceiveItem_gfx_offsets+!itemx*2 : dw + + + ;org AddReceiveItem_routine+!itemx*2 : dw + ;org AddReceiveItem_y_offsets+!itemx : db + ;org AddReceiveItem_x_offsets+!itemx : db + ;org AddReceiveItem_gfx_offsets+!itemx*2 : dw + ;org AddReceiveItem_wideness+!itemx : db + ;org AddReceiveItem_pal+!itemx : db

+ + ; SRAM address is an + org AddReceiveItem_sram_addr+!itemx*2 : dw + org AddReceiveItem_sram_write+!itemx : db + ;org AddReceiveItem_message+!itemx : db + ;org AddReceiveItem_sound+!itemx : db + pullpc +endmacro + +;=============================================================================== +; Vanilla Items +%ritem("fighter_sword", .directWrite,\ ; name, routine + -5, 4, $0420, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F359, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("master_sword", .directWrite,\ ; name, routine + -5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F359, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("tempered_sword", .directWrite,\ ; name, routine + -5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F359, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("butter_sword", .directWrite,\ ; name, routine + -5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F359, 4,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("fighter_shield", .fighterShield,\ ; name, routine + -5, 4, $11E0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F35A, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_shield", .directWrite,\ ; name, routine + -4, 0, $0140, !WIDE|!e,\ ; OAM y/x offset, GFX char offset, props + $F35A, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("mirror_shield", .directWrite,\ ; name, routine + -4, 0, $1480, !WIDE|!e,\ ; OAM y/x offset, GFX char offset, props + $F35A, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("fire_rod", .directWrite,\ ; name, routine + -5, 4, $0480, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F345, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $08 +%ritem("ice_rod", .directWrite,\ ; name, routine + -5, 4, $0480, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F346, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("hammer", .directWrite,\ ; name, routine + -4, 4, $04A0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F34B, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("hookshot", .directWrite,\ ; name, routine + -4, 4, $0460, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F342, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("bow", .directWrite,\ ; name, routine + -4, 4, $0400, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F340, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("boomerang", .directWrite,\ ; name, routine + -2, 5, $05E0, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F341, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("powder", .directWrite,\ ; name, routine + -4, 0, $04C0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F344, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("bee", .bottles,\ ; name, routine + -4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35C, 7,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("bombos", .directWrite,\ ; name, routine + -4, 4, $0C40, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F347, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $10 +%ritem("ether", .directWrite,\ ; name, routine + -4, 0, $0C00, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F348, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("quake", .directWrite,\ ; name, routine + -4, 0, $0C80, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F349, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("lamp", .directWrite,\ ; name, routine + -4, 0, $08C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F34A, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("shovel", .directWrite,\ ; name, routine + -4, 4, $09E0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F34C, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("flute", .directWrite,\ ; name, routine + -4, 0, $1440, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F34C, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("somaria", .directWrite,\ ; name, routine + -4, 4, $0440, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F350, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("bottle", .newBottle,\ ; name, routine + -4, 0, $0CC0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F35C, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("hp", .hp,\ ; name, routine + -4, 0, $1400, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F36B, 0,\ ; SRAM address, SRAM value + $FFFF,!hpsfx) ; Message, Sound + + + +; $18 +%ritem("byrna", .directWrite,\ ; name, routine + -4, 4, $0440, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F351, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("cape", .directWrite,\ ; name, routine + -4, 0, $0900, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F352, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("mirror", .directWrite,\ ; name, routine + -4, 0, $0840, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F353, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("glove", .directWrite,\ ; name, routine + -4, 0, $0540, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F354, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("mitts", .directWrite,\ ; name, routine + -4, 0, $0540, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F354, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("book", .directWrite,\ ; name, routine + -4, 0, $0580, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F34E, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("flippers", .flippers,\ ; name, routine + -4, 0, $0800, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F356, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("pearl", .directWrite,\ ; name, routine + -4, 0, $0980, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F357, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $20 +%ritem("crystal", .palaceItem,\ ; name, routine + -4, 0, $10A0, !WIDE|6,\ ; OAM y/x offset, GFX char offset, props + $F37A, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("net", .directWrite,\ ; name, routine + -4, 0, $1060, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F34D, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("blue_mail", .blueMail,\ ; name, routine + -4, 0, $0100, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35B, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_mail", .directWrite,\ ; name, routine + -5, 0, $0100, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F35B, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("key", .addKey,\ ; name, routine + -4, 4, $05C0, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F36F, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("compass", .palaceItem,\ ; name, routine + -4, 0, $0940, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F364, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("4hp", .4hp,\ ; name, routine + -4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F36C, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("bomb", .addBombs,\ ; name, routine + -4, 0, $0880, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F375, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $28 +%ritem("3_bombs", .addBombs,\ ; name, routine + -4, 0, $0040, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F375, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("mushroom", .mushroom,\ ; name, routine + -4, 0, $0D40, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F344, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_boomerang", .directWrite,\ ; name, routine + -2, 5, $05E0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F341, 2,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_cauldron", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F35C, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("green_cauldron", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F35C, 4,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("blue_cauldron", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35C, 5,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_cauldron2", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F36D, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("green_cauldron2", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F36E, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $30 +%ritem("blue_cauldron2", .bottles,\ ; name, routine + -4, 0, $0000, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F36E, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("10_bombs", .addBombs,\ ; name, routine + -4, 0, $0500, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F375, 10,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("big_key", .palaceItem,\ ; name, routine + -4, 0, $0DC0, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F366, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("map", .palaceItem,\ ; name, routine + -4, 0, $0D80, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F368, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("1_rupee", .addRupees,\ ; name, routine + -2, 4, $1000, !THIN|!g,\ ; OAM y/x offset, GFX char offset, props + $F360, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("5_rupees", .addRupees,\ ; name, routine + -2, 4, $1000, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F360, 5,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("20_rupees", .addRupees,\ ; name, routine + -2, 4, $1000, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F360, 20,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("green_pendant", .palaceItem,\ ; name, routine + -4, 0, $1880, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F374, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $38 +%ritem("blue_pendant", .palaceItem,\ ; name, routine + -4, 0, $1880, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F374, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("red_pendant", .palaceItem,\ ; name, routine + -4, 0, $1880, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F374, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("tossed_bow", .directWrite,\ ; name, routine + -4, 0, $1120, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F340, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("silvers", .directWrite,\ ; name, routine + -4, 0, $10E0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F340, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("good_bee", .bottles,\ ; name, routine + -4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35C, 7,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("fairy", .bottles,\ ; name, routine + -4, 0, $1160, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35C, 6,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("boss_hc", .hc,\ ; name, routine + -4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F36C, 0,\ ; SRAM address, SRAM value + $FFFF,!hcsfx) ; Message, Sound + + +%ritem("sanc_hc", .4hp,\ ; name, routine + -4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F36C, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $40 +%ritem("100_rupees", .addRupees,\ ; name, routine + -4, 0, $1520, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F360, 100,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("50_rupees", .addRupees,\ ; name, routine + -4, 0, $1560, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F360, 50,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("heart", .addHeart,\ ; name, routine + -2, 4, $14C0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props + $F372, 8,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("arrow", .addArrows,\ ; name, routine + -2, 4, $1500, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props + $F376, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("10_arrows", .addArrows,\ ; name, routine + -4, 0, $0080, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F376, 10,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("small_magic", .addMagic,\ ; name, routine + -2, 4, $14E0, !THIN|!g,\ ; OAM y/x offset, GFX char offset, props + $F373, 16,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("300_rupees", .add300Rupees,\ ; name, routine + -4, 0, $15A0, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F360, 0,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("20_rupees_green", .addRupees,\ ; name, routine + -4, 0, $1800, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props + $F360, 20,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + + +; $48 +%ritem("gold_bee", .bottles,\ ; name, routine + -4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F35C, 8,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("tossed_fighter_sword", .directWrite,\ ; name, routine + -5, 4, $0420, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props + $F359, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("active_flute", .directWrite,\ ; name, routine + -4, 0, $1440, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props + $F34C, 3,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("boots", .boots,\ ; name, routine + -4, 0, $1840, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props + $F355, 1,\ ; SRAM address, SRAM value + $FFFF,!dodododo) ; Message, Sound + + +%ritem("Bomb_50" +%ritem("Arrow_70" +%ritem("Half_Magic" +%ritem("Quarter_Magic" + +; $50 +%ritem("Safe_MS" +%ritem("Bomb_plus5" +%ritem("Bomb_plus10" +%ritem("Arrow_plus5" +%ritem("Arrow_plus10" +%ritem("PRGM_1" +%ritem("PRGM_2" +%ritem("PRGM_3" + +; $58 +%ritem("Upgrade_Silvers" +%ritem("Rupoor" +%ritem("NULL" +%ritem("Clock_red" +%ritem("Clock_blue" +%ritem("Clock_green" +%ritem("Prog_Sword" +%ritem("Prog_Shield" + +; $60 +%ritem("Prog_Mail" +%ritem("Prog_Glove" +%ritem("RNG_Single" +%ritem("RNG_Multi" +%ritem("Prog_Bow" +%ritem("Prog_Bow" +%ritem( +%ritem( + +; $68 +%ritem( +%ritem( +%ritem("Goal_Trifoce" +%ritem("Goal_Multi_Star" +%ritem("Goal_Multi_Triforce" +%ritem("Server_F0" +%ritem("Server_F1" +%ritem("Server_F2" + +; $70 +%ritem(" +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $78 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $80 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $88 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $90 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $98 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $A0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $A8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $B0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $B8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $C0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $C8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $D0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $D8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $E0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $E8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $F0 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( + +; $F8 +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem( +%ritem("Server_async" +%ritem("NULL_2" + + + + + +org $08C3AE +Ancilla_ReceiveItem: + + diff --git a/openmode.asm b/openmode.asm index 53ff4cb..4bf907c 100644 --- a/openmode.asm +++ b/openmode.asm @@ -12,11 +12,18 @@ RTL InitOpenMode: LDA.l OpenMode : BEQ + ; Skip if not open mode LDA $7EF3C5 : CMP #$02 : !BGE + ; Skip if already past escape - LDA.b #02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1) + LDA.b #$02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1) LDA $7EF3C6 : ORA #$14 : STA $7EF3C6 ; remove uncle LDA $7EF3C8 : CMP #$05 : BEQ ++ : LDA.b #$01 : ++ : STA $7EF3C8 ; set spawn points to house+sanc unless already house+sanc+mountain LDA $7EF29B : ORA.b #$20 : STA $7EF29B ; open castle gate - RTL + JSL MaybeSetPostAgaWorldState + + +RTL +;-------------------------------------------------------------------------------- +MaybeSetPostAgaWorldState: + LDA.l InstantPostAgaWorldState : BEQ + ; Skip if not enabled + LDA.b #$03 : STA $7EF3C5 ; Go to post-aga phase + LDA $7EF282 : ORA.b #$20 : STA $7EF282 ; make lumberjack tree accessible + RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/password.asm b/password.asm index 7ead174..595d1cd 100644 --- a/password.asm +++ b/password.asm @@ -167,7 +167,7 @@ ValidatePassword: LDX #$0F - LDA.l !PASSWORD_SRAM, X : BNE + - BRL .incorrect + JMP .incorrect + DEX : BPL - diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index be4eedb..8b67f11 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -56,7 +56,7 @@ RTL !MAP_OVERLAY = "$7EF414" ; [2] OverworldMap_CheckObject: PHX - ;CPX.b #$01 : BNE + : BRL ++ : + : BRL .fail + ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail LDA $7EF3CA : AND.b #$40 : BNE + ;LW Map LDA.l MapMode : BEQ +++ @@ -66,7 +66,7 @@ OverworldMap_CheckObject: LDA !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X PLX AND.l .lw_map_masks, X : BNE +++ - BRL .fail + JMP .fail +++ LDA.l .lw_offsets, X BPL +++ : CLC : BRA .done : +++ ; don't display master sword @@ -80,7 +80,7 @@ OverworldMap_CheckObject: LDA.l !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X PLX AND.l .dw_map_masks, X : BNE +++ - BRL .fail + JMP .fail +++ LDA.l .dw_offsets, X TAX : BRA ++ @@ -265,194 +265,262 @@ DrawMoonPearlInMenuLocation: RTL ;-------------------------------------------------------------------------------- DrawHUDDungeonItems: - LDA.l HUDDungeonItems : BNE + : RTL : + - + LDA.l HUDDungeonItems : BNE .continue + + RTL + +.dungeon_positions + dw 0 ; Hyrule Castle + dw 2 ; Agahnims Tower + dw 6 ; Eastern + dw 8 ; Desert + dw 10 ; Hera + dw 14 ; PoD + dw 16 ; Swamp + dw 18 ; Skull Woods + dw 20 ; Thieves Town + dw 22 ; Ice + dw 24 ; Mire + dw 26 ; Turtle Rock + dw 30 ; Ganon's Tower + +.small_key_x_offset + dw $7EF37D-$7EF37D ; Hyrule Castle + dw $7EF380-$7EF37D ; Agahnims Tower + dw $7EF37E-$7EF37D ; Eastern + dw $7EF37F-$7EF37D ; Desert + dw $7EF386-$7EF37D ; Hera + dw $7EF382-$7EF37D ; PoD + dw $7EF381-$7EF37D ; Swamp + dw $7EF384-$7EF37D ; Skull Woods + dw $7EF387-$7EF37D ; Thieves Town + dw $7EF385-$7EF37D ; Ice + dw $7EF383-$7EF37D ; Mire + dw $7EF388-$7EF37D ; Turtle Rock + dw $7EF389-$7EF37D ; Ganon's Tower + + +.dungeon_bitmasks + dw $4000 ; Hyrule Castle + dw $0800 ; Agahnims Tower + dw $2000 ; Eastern + dw $1000 ; Desert + dw $0020 ; Hera + dw $0200 ; PoD + dw $0400 ; Swamp + dw $0080 ; Skull Woods + dw $0010 ; Thieves Town + dw $0040 ; Ice + dw $0100 ; Mire + dw $0008 ; Turtle Rock + dw $0004 ; Ganon's Tower + +.boss_room_ids + dw $80*2 ; ; Hyrule Castle (BNC) + dw $20*2 ; ; Agahnim + dw $C8*2 ; ; Eastern + dw $33*2 ; ; Desert + dw $07*2 ; ; Hera + dw $5A*2 ; ; PoD + dw $06*2 ; ; Swamp + dw $29*2 ; ; Skull Woods + dw $AC*2 ; ; Thieves Town + dw $DE*2 ; ; Ice + dw $90*2 ; ; Mire + dw $A4*2 ; ; Turtle Rock + dw $0D*2 ; ; Ganon's Tower + +.continue PHP - REP #$30 ; set 16-bit accumulator & index registers - + + PHB + PHK + PLB + + REP #$30 + +;------------------------------------------------------------------------------- ; dungeon names - LDA.w #$2D50 : STA $1646 ; sewers - LDA.w #$2D54 : STA $1648 ; Agahnims Tower + LDA.w #$2D50 - LDA.w #$2D51 : STA $164C ; Eastern - LDA.w #$2D52 : STA $164E ; Desert - LDA.w #$2D53 : STA $1650 ; Hera + LDY.w #0 - LDA.w #$2D55 : STA $1654 ; PoD - LDA.w #$2D56 : STA $1656 ; Swamp - LDA.w #$2D57 : STA $1658 ; Skull Woods - LDA.w #$2D58 : STA $165A ; Thieves Town - LDA.w #$2D59 : STA $165C ; Ice - LDA.w #$2D5A : STA $165E ; Mire - LDA.w #$2D5B : STA $1660 ; Turtle Rock - - LDA.w #$2D5C : STA $1664 ; Ganon's Tower + +.next_dungeon_name + LDX.w .dungeon_positions,Y + STA.w $1646,X + + INC + + INY : INY + CPY.w #26 : BCC .next_dungeon_name ; write black - LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals - - - LDA #$24F5 : STA $1686, X : STA $16C6, X - INX #2 : CPX.w #$0020 : BCC - + LDX.w #$001E + LDA.w #$24F5 - LDA !HUD_FLAG : AND.w #$0020 : BEQ + : BRL +++ : + - LDA HUDDungeonItems : AND.w #$0001 : BNE + : BRL ++ : + +-- STA.w $1686,X + STA.w $16C6,X + STA.w $1706,X + + DEX : DEX : BPL -- + + + LDA.l !HUD_FLAG : AND.w #$0020 : BEQ + + + JMP .maps_and_compasses + ++ +;------------------------------------------------------------------------------- + + LDA HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys + +.draw_small_keys LDA.w #$2810 : STA $1684 ; small keys icon - SEP #$20 ; set 8-bit accumulator - ; Small Keys - LDA.b #$16 : !ADD $7EF37D : STA $1686 : LDA.b #$28 : ADC #$00 : sta.w $1686+1 ; Hyrule Castle - LDA.b #$16 : !ADD $7EF380 : STA $1688 : LDA.b #$28 : ADC #$00 : sta.w $1688+1 ; Agahnims Tower - LDA.b #$16 : !ADD $7EF37E : STA $168C : LDA.b #$28 : ADC #$00 : sta.w $168C+1 ; Eastern - LDA.b #$16 : !ADD $7EF37F : STA $168E : LDA.b #$28 : ADC #$00 : sta.w $168E+1 ; Desert - LDA.b #$16 : !ADD $7EF386 : STA $1690 : LDA.b #$28 : ADC #$00 : sta.w $1690+1 ; Hera + LDY.w #0 - LDA.b #$16 : !ADD $7EF382 : STA $1694 : LDA.b #$28 : ADC #$00 : sta.w $1694+1 ; PoD - LDA.b #$16 : !ADD $7EF381 : STA $1696 : LDA.b #$28 : ADC #$00 : sta.w $1696+1 ; Swamp - LDA.b #$16 : !ADD $7EF384 : STA $1698 : LDA.b #$28 : ADC #$00 : sta.w $1698+1 ; Skull Woods - LDA.b #$16 : !ADD $7EF387 : STA $169A : LDA.b #$28 : ADC #$00 : sta.w $169A+1 ; Thieves Town - LDA.b #$16 : !ADD $7EF385 : STA $169C : LDA.b #$28 : ADC #$00 : sta.w $169C+1 ; Ice - LDA.b #$16 : !ADD $7EF383 : STA $169E : LDA.b #$28 : ADC #$00 : sta.w $169E+1 ; Mire - LDA.b #$16 : !ADD $7EF388 : STA $16A0 : LDA.b #$28 : ADC #$00 : sta.w $16A0+1 ; Turtle Rock + ; Clear the carry only once + ; it will be cleared by looping condition afterwards + CLC - LDA.b #$16 : !ADD $7EF389 : STA $16A4 : LDA.b #$28 : ADC #$00 : sta.w $16A4+1 ; Ganon's Tower +.next_small_key + LDX.w .small_key_x_offset,Y + LDA.l $7EF37D,X + AND.w #$00FF - REP #$20 ; set 16-bit accumulator - ++ + LDX.w .dungeon_positions,Y + ADC.w #$2816 + STA.w $1686,X + + INY : INY + CPY.w #26 : BCC .next_small_key + +;------------------------------------------------------------------------------- + +.skip_small_keys ; Big Keys - LDA HUDDungeonItems : AND.w #$0002 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys + + LDA.w #$2811 : STA $16C4 ; big key icon - LDA $7EF367 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2826 : STA $16C6 - + - LDA $7EF367 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2826 : STA $16C8 - + - LDA $7EF367 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2826 : STA $16CC - + - LDA $7EF367 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2826 : STA $16CE - + - LDA $7EF366 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2826 : STA $16D0 - + - LDA $7EF367 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2826 : STA $16D4 - + - LDA $7EF367 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2826 : STA $16D6 - + - LDA $7EF366 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2826 : STA $16D8 - + - LDA $7EF366 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2826 : STA $16DA - + - LDA $7EF366 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2826 : STA $16DC - + - LDA $7EF367 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2826 : STA $16DE - + - LDA $7EF366 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2826 : STA $16E0 - + - LDA $7EF366 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2826 : STA $16E4 - + - ++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF366 + +.next_big_key + BIT.w .dungeon_bitmasks,X + BEQ ..skip_key + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $16C6,Y + + ; reload + LDA.l $7EF366 + +..skip_key + INX : INX + CPX.w #26 : BCC .next_big_key + +;------------------------------------------------------------------------------- + +.skip_big_keys + + LDA HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills + + LDA.w #$280F : STA $1704 ; skull icon + + LDY.w #0 + +.next_boss_kill + LDX.w .boss_room_ids,Y + LDA.l $7EF000,X + AND.w #$0400 + BEQ ..skip_boss_kill + + LDA.w #$2826 + LDX.w .dungeon_positions,Y + STA.w $1706,Y + +..skip_boss_kill + INY : INY + CPY.w #26 : BCC .next_boss_kill + +;------------------------------------------------------------------------------- + +.skip_boss_kills + JMP .exit + +;------------------------------------------------------------------------------- ; This should only display if select is pressed in hud - +++ - LDA !HUD_FLAG : AND.w #$0020 : BNE + : BRL +++ : + + .maps_and_compasses + ; Maps - LDA HUDDungeonItems : AND.w #$0004 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps LDA.w #$2821 : STA $1684 ; map icon - LDA $7EF369 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2826 : STA $1686 - + - LDA $7EF369 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2826 : STA $1688 - + - LDA $7EF369 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2826 : STA $168C - + - LDA $7EF369 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2826 : STA $168E - + - LDA $7EF368 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2826 : STA $1690 - + - LDA $7EF369 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2826 : STA $1694 - + - LDA $7EF369 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2826 : STA $1696 - + - LDA $7EF368 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2826 : STA $1698 - + - LDA $7EF368 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2826 : STA $169A - + - LDA $7EF368 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2826 : STA $169C - + - LDA $7EF369 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2826 : STA $169E - + - LDA $7EF368 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2826 : STA $16A0 - + - LDA $7EF368 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2826 : STA $16A4 - + - ++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF368 + +.next_map + BIT.w .dungeon_bitmasks,X + BEQ ..skip_map + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $1686,Y + + ; reload + LDA.l $7EF368 + +..skip_map + INX : INX + CPX.w #26 : BCC .next_map + +;------------------------------------------------------------------------------- + +.skip_maps ; Compasses - LDA HUDDungeonItems : AND.w #$0008 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses LDA.w #$2C20 : STA $16C4 ; compass icon - LDA $7EF365 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2C26 : STA $16C6 - + - LDA $7EF365 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2C26 : STA $16C8 - + - LDA $7EF365 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2C26 : STA $16CC - + - LDA $7EF365 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2C26 : STA $16CE - + - LDA $7EF364 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2C26 : STA $16D0 - + - LDA $7EF365 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2C26 : STA $16D4 - + - LDA $7EF365 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2C26 : STA $16D6 - + - LDA $7EF364 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2C26 : STA $16D8 - + - LDA $7EF364 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2C26 : STA $16DA - + - LDA $7EF364 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2C26 : STA $16DC - + - LDA $7EF365 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2C26 : STA $16DE - + - LDA $7EF364 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2C26 : STA $16E0 - + - LDA $7EF364 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2C26 : STA $16E4 - + - ++ : +++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF364 + +.next_compass + BIT.w .dungeon_bitmasks,X + BEQ ..skip_compass + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $16C6,Y + + ; reload + LDA.l $7EF364 + +..skip_compass + INX : INX + CPX.w #26 : BCC .next_compass + +;------------------------------------------------------------------------------- + +.skip_compasses + +.exit + PLB PLP RTL ;-------------------------------------------------------------------------------- @@ -462,58 +530,77 @@ DrawPendantCrystalDiagram: REP #$30 ; Set 16-bit accumulator & index registers LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals - - LDA.l .row0, X : STA $12EA, X - LDA.l .row1, X : STA $132A, X - LDA.l .row2, X : STA $136A, X - LDA.l .row3, X : STA $13AA, X - LDA.l .row4, X : STA $13EA, X - LDA.l .row5, X : STA $142A, X - LDA.l .row6, X : STA $146A, X - LDA.l .row7, X : STA $14AA, X - LDA.l .row8, X : STA $14EA, X + LDA.l .row0, X : STA $12EA, X + LDA.l .row1, X : STA $132A, X + LDA.l .row2, X : STA $136A, X + LDA.l .row3, X : STA $13AA, X + LDA.l .row4, X : STA $13EA, X + LDA.l .row5, X : STA $142A, X + LDA.l .row6, X : STA $146A, X + LDA.l .row7, X : STA $14AA, X + LDA.l .row8, X : STA $14EA, X INX #2 : CPX.w #$0014 : BCC - - ;pendants - LDA $7EF374 : AND.w #$0004 : BEQ + ; pendant of courage (green) - LDA.w #$3D2B : STA $1332 - LDA.w #$3D2C : STA $1334 - LDA.w #$3D2D : STA $1372 - LDA.w #$3D2E : STA $1374 - + LDA $7EF374 : AND.w #$0002 : BEQ + ; pendant of power (blue) - LDA.w #$2D2B : STA $13AE - LDA.w #$2D2C : STA $13B0 - LDA.w #$2D2D : STA $13EE - LDA.w #$2D2E : STA $13F0 - + LDA $7EF374 : AND.w #$0001 : BEQ + ; pendant of wisdom (red) - LDA.w #$252B : STA $13B6 - LDA.w #$252C : STA $13B8 - LDA.w #$252D : STA $13F6 - LDA.w #$252E : STA $13F8 + ; pendants + LDA $7EF374 + + LSR : BCC + ; pendant of wisdom (red) + LDX.w #$252B + STX.w $13B6 + INX : STX.w $13B8 + INX : STX.w $13F6 + INX : STX.w $13F8 + + + LSR : BCC + ; pendant of power (blue) + LDX.w #$2D2B + STX.w $13AE + INX : STX.w $13B0 + INX : STX.w $13EE + INX : STX.w $13F0 + + + LSR : BCC + ; pendant of courage (green) + LDX.w #$3D2B + STX.w $1332 + INX : STX.w $1334 + INX : STX.w $1372 + INX : STX.w $1374 + - - ;crystals - LDA $7EF37A : AND.w #$0002 : BEQ + ; crystal 1 - LDA.w #$2D44 : STA $14AC - LDA.w #$2D45 : STA $14AE - + LDA $7EF37A : AND.w #$0010 : BEQ + ; crystal 2 - LDA.w #$2D44 : STA $146E - LDA.w #$2D45 : STA $1470 - + LDA $7EF37A : AND.w #$0040 : BEQ + ; crystal 3 - LDA.w #$2D44 : STA $14B0 - LDA.w #$2D45 : STA $14B2 - + LDA $7EF37A : AND.w #$0020 : BEQ + ; crystal 4 - LDA.w #$2D44 : STA $1472 - LDA.w #$2D45 : STA $1474 - + LDA $7EF37A : AND.w #$0004 : BEQ + ; crystal 5 - LDA.w #$2544 : STA $14B4 - LDA.w #$2545 : STA $14B6 - + LDA $7EF37A : AND.w #$0001 : BEQ + ; crystal 6 - LDA.w #$2544 : STA $1476 - LDA.w #$2545 : STA $1478 - + LDA $7EF37A : AND.w #$0008 : BEQ + ; crystal 7 - LDA.w #$2D44 : STA $14B8 - LDA.w #$2D45 : STA $14BA + + + + ; crystals + LDA $7EF37A + LDX.w #$2D44 + LDY.w #$2D45 + + BIT.w #$0002 : BEQ + ; crystal 1 + STX.w $14AC + STY.w $14AE + + BIT.w #$0010 : BEQ + ; crystal 2 + STX.w $146E + STY.w $1470 + + BIT.w #$0040 : BEQ + ; crystal 3 + STX.w $14B0 + STY.w $14B2 + + BIT.w #$0020 : BEQ + ; crystal 4 + STX.w $1472 + STY.w $1474 + + BIT.w #$0008 : BEQ + ; crystal 7 + STX.w $14B8 + STY.w $14BA + + + LDX.w #$2544 + LDY.w #$2545 + + BIT.w #$0004 : BEQ + ; crystal 5 + STX.w $14B4 + STY.w $14B6 + + BIT.w #$0001 : BEQ + ; crystal 6 + STX.w $1476 + STY.w $1478 + + + PLB : PLP RTL ;================================================================================ diff --git a/quickswap.asm b/quickswap.asm index 2755be0..96f5d0d 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -32,6 +32,7 @@ QuickSwap: CPX.b #$01 : BEQ + ; bow CPX.b #$05 : BEQ + ; powder CPX.b #$0D : BEQ + ; flute + CPX.b #$10 : BEQ + ; bottle BRA .store + STX $0202 : JSL ProcessMenuButtons_y_pressed @@ -48,20 +49,20 @@ RTL RCode: LDA.w $0202 : TAX - - CPX.b #$0F : BNE + ; incrementing into bottle - LDX.b #$00 : BRA ++ - + CPX.b #$10 : BNE + ; incrementing bottle - LDA.l $7EF34F : TAX - -- : ++ - CPX.b #$04 : BEQ .noMoreBottles - INX - LDA.l $7EF35B,X : BEQ -- - TXA : STA.l $7EF34F - LDX #$10 - RTS - .noMoreBottles - LDX #$11 - BRA .nextItem +; CPX.b #$0F : BNE + ; incrementing into bottle +; LDX.b #$00 : BRA ++ +; + CPX.b #$10 : BNE + ; incrementing bottle +; LDA.l $7EF34F : TAX +; -- : ++ +; CPX.b #$04 : BEQ .noMoreBottles +; INX +; LDA.l $7EF35B,X : BEQ -- +; TXA : STA.l $7EF34F +; LDX #$10 +; RTS +; .noMoreBottles +; LDX #$11 +; BRA .nextItem + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + INX .nextItem @@ -71,19 +72,19 @@ RTS LCode: LDA.w $0202 : TAX - - CPX.b #$11 : BNE + ; decrementing into bottle - LDX.b #$05 : BRA ++ - + CPX.b #$10 : BNE + ; decrementing bottle - LDA.l $7EF34F : TAX - -- : ++ - CPX.b #$01 : BEQ .noMoreBottles - DEX - LDA.l $7EF35B,X : BEQ -- - TXA : STA.l $7EF34F - LDX.b #$10 - RTS - .noMoreBottles - LDX.b #$0F : BRA .nextItem +; CPX.b #$11 : BNE + ; decrementing into bottle +; LDX.b #$05 : BRA ++ +; + CPX.b #$10 : BNE + ; decrementing bottle +; LDA.l $7EF34F : TAX +; -- : ++ +; CPX.b #$01 : BEQ .noMoreBottles +; DEX +; LDA.l $7EF35B,X : BEQ -- +; TXA : STA.l $7EF34F +; LDX.b #$10 +; RTS +; .noMoreBottles +; LDX.b #$0F : BRA .nextItem + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + DEX .nextItem diff --git a/rngfixes.asm b/rngfixes.asm index ae1e797..cf2b7b9 100644 --- a/rngfixes.asm +++ b/rngfixes.asm @@ -107,9 +107,9 @@ RTL !RNG_POINTERS = "$7F5200" GetStaticRNG: PHX : PHP - REP #$20 ; set 16-bit accumulator and index registers - AND.w #$007F - ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX : ASL ; increment pointer and move value to X + REP #$30 ; set 16-bit accumulator and index registers + AND.w #$000F + ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX ; increment pointer and move value to X LDA Static_RNG, X ; load RNG value PLP : PLX RTL @@ -123,7 +123,7 @@ InitRNGPointerTable: LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 - CPX.w #$007F : !BLT - + CPX.w #$001F : !BLT - PLP : PLX RTL .rngDefaults diff --git a/save.asm b/save.asm index f1add73..1b41061 100644 --- a/save.asm +++ b/save.asm @@ -1,5 +1,13 @@ ;-------------------------------------------------------------------------------- Validate_SRAM: + REP #$30 ; vanilla behavior from $0CCD45, includes prize pack reset after save and quit + LDX #$00FE : - + STZ $0D00, X + STZ $0E00, X + STZ $0F00, X + DEX #2 + BPL - + SEP #$30 RTL ;-------------------------------------------------------------------------------- ClearExtendedSaveFile: diff --git a/shopkeeper.asm b/shopkeeper.asm index cc546eb..4132011 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -70,10 +70,10 @@ DrawPrice: LDY.b #$FF LDX #$00 ; clear bigram pointer - LDA $0C : CMP.w #1000 : !BLT + : BRL .len4 : + - CMP.w #100 : !BLT + : BRL .len3 : + - CMP.w #10 : !BLT + : BRL .len2 : + - CMP.w #1 : !BLT + : BRL .len1 : + + LDA $0C : CMP.w #1000 : !BLT + : JMP .len4 : + + CMP.w #100 : !BLT + : JMP .len3 : + + CMP.w #10 : !BLT + : JMP .len2 : + + CMP.w #1 : !BLT + : JMP .len1 : + .len4 %DrawDigit(#1000,#6) @@ -149,7 +149,7 @@ SpritePrep_ShopKeeper: .fail SEP #$20 ; set 8-bit accumulator LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition - BRL .done + JMP .done .success SEP #$20 ; set 8-bit accumulator @@ -157,10 +157,10 @@ SpritePrep_ShopKeeper: LDX.w #$0000 LDY.w #$0000 - - TYA : CMP !SHOP_CAPACITY : !BLT ++ : BRL .stop : ++ - LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : BRL .stop : ++ + TYA : CMP !SHOP_CAPACITY : !BLT ++ : JMP .stop : ++ + LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .stop : ++ - LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : BRL .next : ++ + LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : JMP .next : ++ LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l !SHOP_INVENTORY, X : PLX LDA.l ShopContentsTable+2, X : PHX : TYX : STA.l !SHOP_INVENTORY+1, X : PLX LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : PLX @@ -191,7 +191,7 @@ SpritePrep_ShopKeeper: .next INX #8 - BRL - + JMP - .stop ;LDA $A0 : CMP.b #$FF : BNE .normal @@ -289,7 +289,7 @@ Shopkeeper_UploadVRAMTiles: LDA #$7E : STA $4304 LDA !SHOP_TYPE : AND.b #$10 : BNE .special - BRL .normal + JMP .normal .special @@ -322,7 +322,7 @@ Shopkeeper_UploadVRAMTiles: LDA #$80 : STA $2116 ; set VRAM register destination address LDA #$5B : STA $2117 LDA #$01 : STA $420B ; begin DMA transfer - BRL .end + JMP .end .normal LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 @@ -456,9 +456,9 @@ endmacro Shopkeeper_DrawMerchant: LDA.l !SHOP_MERCHANT : AND.b #$07 BEQ Shopkeeper_DrawMerchant_Type0 - CMP.b #$01 : BNE + : BRL Shopkeeper_DrawMerchant_Type1 : + - CMP.b #$02 : BNE + : BRL Shopkeeper_DrawMerchant_Type2 : + - CMP.b #$03 : BNE + : BRL Shopkeeper_DrawMerchant_Type3 : + + CMP.b #$01 : BNE + : JMP Shopkeeper_DrawMerchant_Type1 : + + CMP.b #$02 : BNE + : JMP Shopkeeper_DrawMerchant_Type2 : + + CMP.b #$03 : BNE + : JMP Shopkeeper_DrawMerchant_Type3 : + CMP.b #$04 : BNE + : RTS : + ;-------------------------------------------------------------------------------- Shopkeeper_DrawMerchant_Type0: @@ -546,13 +546,13 @@ Shopkeeper_BuyItem: LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRL .done + JMP .done .full_bottles LDA.b #$6B LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRL .done + JMP .done .buy LDA !SHOP_TYPE : AND.b #$80 : BNE ++ ; don't charge if this is a take-any REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away @@ -707,7 +707,7 @@ RTS ;-------------------------------------------------------------------------------- Shopkeeper_DrawNextItem: - LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : + + LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : JMP .next : + PHY diff --git a/stats.asm b/stats.asm index 0afb25c..0b0f433 100644 --- a/stats.asm +++ b/stats.asm @@ -244,7 +244,8 @@ IncrementSmallKeysNoPrimary: LDA $1B : BEQ + ; skip room check if outdoors PHP : REP #$20 ; set 16-bit accumulator LDA $048E : CMP.w #$0087 : BNE ++ ; hera basement - PLP : PHY : LDY.b #24 : JSL.l FullInventoryExternal : PLY : BRA + + PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal + JSR CountChestKey : PLY : BRA + ++ PLP + @@ -264,12 +265,15 @@ RTL CountChestKey: ; called by neighbor functions PHA : PHX CPY #$24 : BEQ + ; small key for this dungeon - use $040C - CPY #$A0 : !BLT .end ; Ignore most items - CPY #$AE : !BGE .end ; Ignore reserved key and generic key - TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key - INC - ++ TAX : BRA .count ; use Key id instead of $040C (Keysanity) - + LDA $040C : LSR : TAX + CPY #$A0 : !BLT .end ; Ignore most items + CPY #$AE : !BGE .end ; Ignore reserved key and generic key + TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key + INC + ++ TAX : BRA .count ; use Key id instead of $040C (Keysanity) + + LDA $040C : LSR + BNE + + INC ; combines HC and Sewer counts + + TAX .count LDA $7EF4E0, X : INC : STA $7EF4E0, X .end diff --git a/stats/main.asm b/stats/main.asm index b78b459..1131840 100755 --- a/stats/main.asm +++ b/stats/main.asm @@ -226,7 +226,7 @@ RenderCreditsStatCounter: JSR FindLine BCS + - BRL .endStats + JMP .endStats + ; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA @@ -237,7 +237,7 @@ RenderCreditsStatCounter: AND #$0003 ; TT CMP.w #$0000 BEQ .normalStat - BRL .timeStat + JMP .timeStat .normalStat ; == Write Stripe header (VRAM address, i.e. tile coordinates) == @@ -491,7 +491,7 @@ RenderCreditsStatCounter: %StripeTile() %StripeEnd() - BRL .endStats + JMP .endStats RenderLineNumber: diff --git a/swordswap.asm b/swordswap.asm index 170ce66..bfea58f 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -166,7 +166,7 @@ GetSmithSword: ;================================================================================ CheckMedallionSword: PHB : PHX : PHY - LDA.l AllowSwordlessMedallionUse : BNE +++ : BRL + : +++ + LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++ LDA $1B : BEQ .outdoors .indoors REP #$20 ; set 16-bit accumulator @@ -174,11 +174,11 @@ CheckMedallionSword: CMP.w #$000E : BNE ++ : .freezor1 LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord - BRL .permit + JMP .permit ++ : CMP.w #$007E : BNE ++ : .freezor2 LDA $22 : AND.w #$01FF : CMP.w #112-8 : !BLT .normal : CMP.w #112+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord - BRL .permit + JMP .permit ++ : CMP.w #$00DE : BNE ++ : .kholdstare LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #144-22 : !BLT .normal : CMP.w #144+32-22 : !BGE .normal ; check y-coord diff --git a/tables.asm b/tables.asm index ff6a99e..6d4712b 100644 --- a/tables.asm +++ b/tables.asm @@ -184,7 +184,8 @@ db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- org $308045 ; PC 0x180045 HUDDungeonItems: -db #$00 ; display ----dcba a: Small Keys, b: Big Key, c: Map, d: Compass + ; display ---edcba a: Small Keys, b: Big Key, c: Map, d: Compass, e: Bosses +db #$00 ;-------------------------------------------------------------------------------- org $308046 ; PC 0x180046 Link's starting equipment LinkStartingRupees: @@ -380,7 +381,11 @@ org $30808C ; PC 0x18008C PreopenGanonsTower: db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -; 0x18008D - 0x18008F (unused) +org $30808D ; PC 0x18008D +InstantPostAgaWorldState: +db $00 ; #$00 = Off (default) - #$01 = On +;-------------------------------------------------------------------------------- +; 0x18008E - 0x18008F (unused) ;-------------------------------------------------------------------------------- org $308090 ; PC 0x180090 - 0x180097 ProgressiveSwordLimit: diff --git a/tablets.asm b/tablets.asm index 460cecf..3e12429 100644 --- a/tablets.asm +++ b/tablets.asm @@ -79,13 +79,13 @@ IsMedallion: CMP.w #$03 : BNE + ; Death Mountain LDA $22 : CMP.w #1890 : !BGE ++ SEC - BRL .done + JMP .done ++ BRA .false + CMP.w #$30 : BNE + ; Desert LDA $22 : CMP.w #512 : !BLT ++ SEC - BRL .done + JMP .done ++ + .false diff --git a/utilities.asm b/utilities.asm index 730918b..269760f 100644 --- a/utilities.asm +++ b/utilities.asm @@ -304,7 +304,7 @@ IsNarrowSprite: JSR.w CountBottles : CMP.l BottleLimit : !BLT + LDA.l BottleLimitReplacement JSL.l IsNarrowSprite - BRL .done + JMP .done + : BRA .continue .notBottle CMP.b #$5E : BNE ++ ; Progressive Sword @@ -627,16 +627,15 @@ RTL ; caller is responsible for setting 8-bit mode and preserving X and Y ;-------------------------------------------------------------------------------- CountBits: - PHB : PHK : PLB - TAX ; Save a copy of value - LSR #4 ; Shift down hi nybble, Leave <3> in C - TAY ; And save <7:4> in Y - TXA ; Recover value - AND.b #$07 ; Put out <2:0> in X - TAX ; And save in X - LDA NybbleBitCounts, Y; Fetch count for Y - ADC.l NybbleBitCounts, X; Add count for X & C - PLB + TAX ; Save a copy of value + LSR #4 ; Shift down hi nybble, Leave <3> in C + TAY ; And save <7:4> in Y + TXA ; Recover value + AND.b #$07 ; Put out <2:0> in X + TAX ; And save in X + LDA.l NybbleBitCounts, X ; Fetch count for <2:0> + TYX ; get <7:4> + ADC.l NybbleBitCounts, X ; Add count for Y & C RTL ; Look up table of bit counts in the values $00-$0F diff --git a/zelda.asm b/zelda.asm index f03a4ba..358d7e8 100644 --- a/zelda.asm +++ b/zelda.asm @@ -5,15 +5,14 @@ SpawnZelda: LDA.l $7EF3CC : CMP #$08 : BEQ + ; don't spawn if dwarf is present CMP #$07 : BEQ + ; don't spawn if frog is present CMP #$0C : BEQ + ; don't spawn if purple chest is present - CLC : RTL - + - SEC -RTL + CLC + + RTL ;-------------------------------------------------------------------------------- EndRainState: LDA $7EF3C5 : CMP.b #$02 : !BGE + ; skip if past escape already LDA.b #$00 : STA !INFINITE_ARROWS : STA !INFINITE_BOMBS : STA !INFINITE_MAGIC LDA.b #$02 : STA $7EF3C5 ; end rain state + JSL MaybeSetPostAgaWorldState + RTL ;-------------------------------------------------------------------------------- diff --git a/zoraking.asm b/zoraking.asm index 91d8437..9ac1a1c 100644 --- a/zoraking.asm +++ b/zoraking.asm @@ -3,8 +3,7 @@ ;-------------------------------------------------------------------------------- LoadZoraKingItemGFX: LDA.l $1DE1C3 ; location randomizer writes zora item to - JSL.l PrepDynamicTile -RTL + JML.l PrepDynamicTile ;-------------------------------------------------------------------------------- JumpToSplashItemTarget: LDA $0D90, X