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/events.asm b/events.asm index 1ba18b0..7713938 100644 --- a/events.asm +++ b/events.asm @@ -78,6 +78,12 @@ OnAga2Defeated: JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first 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" OnFileLoad: REP #$10 ; set 16 bit index registers @@ -145,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 ;-------------------------------------------------------------------------------- diff --git a/hooks.asm b/hooks.asm index 6891ac9..91cf308 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 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 240dc78..aa27b73 100644 --- a/inventory.asm +++ b/inventory.asm @@ -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 ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- @@ -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 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/quickswap.asm b/quickswap.asm index da04ddb..d83fd4c 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -38,6 +38,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 @@ -54,20 +55,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 @@ -77,19 +78,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/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/tables.asm b/tables.asm index 81b26cc..6d4712b 100644 --- a/tables.asm +++ b/tables.asm @@ -381,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/zelda.asm b/zelda.asm index d80ae0a..358d7e8 100644 --- a/zelda.asm +++ b/zelda.asm @@ -12,6 +12,7 @@ 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 ;--------------------------------------------------------------------------------