diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index eb97868..3c53e3f 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -147,7 +147,6 @@ incsrc scratchpad.asm incsrc map.asm incsrc msu.asm incsrc dialog.asm -incsrc events.asm incsrc entrances.asm incsrc accessability.asm incsrc heartbeep.asm @@ -194,6 +193,7 @@ incsrc compression.asm incsrc retro.asm incsrc dpadinvert.asm incsrc boots.asm +incsrc events.asm incsrc clock.asm incsrc fileselect.asm incsrc playername.asm diff --git a/asar b/asar new file mode 100755 index 0000000..57d6409 Binary files /dev/null and b/asar differ diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..b45d9bb --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +rm ../working.sfc +cp ../alttp.sfc ../working.sfc +./asar LTTP_RND_GeneralBugfixes.asm ../working.sfc diff --git a/dialog.asm b/dialog.asm index 987b03e..3216fe0 100644 --- a/dialog.asm +++ b/dialog.asm @@ -165,17 +165,21 @@ FreeDungeonItemNotice: %CopyDialog(Notice_Self) BRL .done + + LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; 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 - + : CMP.b #$80 : BNE + ; compass of... + + : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for dungeon compass + LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) BRL .dungeon - + : CMP.b #$90 : BNE + ; big key of... + + : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for dungeon big key + LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) BRA .dungeon - + : CMP.b #$A0 : BNE + ; small key of... + + : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; 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 : ++ %CopyDialog(Notice_SmallKeyOf) PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA diff --git a/events.asm b/events.asm index c5cfdc4..dbdafb7 100644 --- a/events.asm +++ b/events.asm @@ -61,7 +61,7 @@ OnUncleItemGet: BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + - + LDA UncleItem_Player : STA !MULTIWORLD_ITEM_PLAYER_ID PLA JSL Link_ReceiveItem @@ -135,6 +135,11 @@ OnNewFile: DEX : DEX BPL - + LDX #$000E : - + LDA $7EF37C, X : STA $7EF4E0, X + DEX : DEX + BPL - + SEP #$20 ; set 8-bit accumulator ;LDA #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in LDA.l PreopenCurtains : BEQ + @@ -151,6 +156,8 @@ 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 PLP : PLX RTL ;-------------------------------------------------------------------------------- diff --git a/framehook.asm b/framehook.asm index 6915ba6..ba9d5ec 100644 --- a/framehook.asm +++ b/framehook.asm @@ -75,28 +75,28 @@ NMIHookAction: JML.l NMIHookReturn ;-------------------------------------------------------------------------------- -;!NMI_AUX = "$7F5044" -;PostNMIHookAction: -; LDA !NMI_AUX+2 : BEQ + -; LDA $00 : PHA ; preserve DP ram -; LDA $01 : PHA -; LDA $02 : PHA -; -; LDA !NMI_AUX+2 : STA $02 ; set up jump pointer -; LDA !NMI_AUX+1 : STA $01 -; LDA !NMI_AUX+0 : STA $00 -; -; PHK : PER .return-1 ; push stack for RTL return -; JMP [$0000] -; -; .return -; LDA.b #$00 : STA !NMI_AUX+2 ; zero bank byte of NMI hook pointer -; -; PLA : STA $02 -; PLA : STA $01 -; PLA : STA $00 -; + -; -; LDA $13 : STA $2100 ; thing we wrote over, turn screen back on -;JML.l PostNMIHookReturn +!NMI_AUX = "$7F5044" +PostNMIHookAction: + LDA !NMI_AUX : BEQ + + LDA $00 : PHA ; preserve DP ram + LDA $01 : PHA + LDA $02 : PHA + + LDA !NMI_AUX+2 : STA $02 ; set up jump pointer + LDA !NMI_AUX+1 : STA $01 + LDA !NMI_AUX+0 : STA $00 + + PHK : PER .return-1 ; push stack for RTL return + JMP [$0000] + + .return + LDA.b #$00 : STA !NMI_AUX ; zero bank byte of NMI hook pointer + + PLA : STA $02 + PLA : STA $01 + PLA : STA $00 + + + + LDA $13 : STA $2100 ; thing we wrote over, turn screen back on +JML.l PostNMIHookReturn ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index 53d08f4..670ec22 100755 --- a/hooks.asm +++ b/hooks.asm @@ -30,9 +30,9 @@ JML.l NMIHookAction org $0080D0 ; <- D0 - Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) NMIHookReturn: ;-------------------------------------------------------------------------------- -;org $00821B ; <- 21B - Bank00.asm : 329 (LDA $13 : STA $2100) -;JML.l PostNMIHookAction : NOP -;PostNMIHookReturn: +org $00821B ; <- 21B - Bank00.asm : 329 (LDA $13 : STA $2100) +JML.l PostNMIHookAction : NOP +PostNMIHookReturn: ;-------------------------------------------------------------------------------- ;================================================================================ @@ -374,6 +374,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 diff --git a/itemdowngrade.asm b/itemdowngrade.asm index a6f45f4..aab1763 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -2,11 +2,10 @@ ; Item Downgrade Fix ;-------------------------------------------------------------------------------- ItemDowngradeFix: - JSR ItemDowngradeFixMain - JSL CountChestKeyLong + JSR ItemDowngradeFixMain + JSL CountChestKeyLong RTL - ItemDowngradeFixMain: JSL.l AddInventory BMI .dontWrite ; thing we wrote over part 1 diff --git a/msu.asm b/msu.asm index 0333c20..4af1caf 100644 --- a/msu.asm +++ b/msu.asm @@ -326,7 +326,7 @@ CheckMusicLoadRequest: .sfx_indoors LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST PLY : PLX : PLA : PLP - LDA.b #$05 : STA $012D + PHP : SEP #$20 : LDA.b #$05 : STA $012D : PLP JML Module_PreDungeon_setAmbientSfx ;-------------------------------------------------------------------------------- diff --git a/shopkeeper.asm b/shopkeeper.asm index 58470c8..cc546eb 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -194,7 +194,20 @@ SpritePrep_ShopKeeper: BRL - .stop - LDA #$01 : STA !NMI_AUX+2 : STA !NMI_AUX + ;LDA $A0 : CMP.b #$FF : BNE .normal + ;.dumb + ; LDA $2137 + ; LDA $213F + ; LDA $213D + ; CMP.b #60 + ; !BLT .dumb + ;.normal + ;LDA #$80 : STA $2100 + ;JSR Shopkeeper_UploadVRAMTiles + ;LDA #$0F : STA $2100 + LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA !NMI_AUX+2 + LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA !NMI_AUX+1 + LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA !NMI_AUX .done LDA.l !SHOP_TYPE : BIT.b #$20 : BEQ .notTakeAll ; Take-all @@ -233,11 +246,11 @@ dw $0000, $0000 dw $0080, $0000 dw $0100, $0000 ;-------------------------------------------------------------------------------- -QueueItemDMA: - LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA !NMI_AUX - LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA !NMI_AUX+1 - LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA !NMI_AUX+2 -RTS +;QueueItemDMA: +; LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA !NMI_AUX +; LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA !NMI_AUX+1 +; LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA !NMI_AUX+2 +;RTS ;-------------------------------------------------------------------------------- ; X - Tile Buffer Offset ; Y - Item ID diff --git a/stats.asm b/stats.asm index 72cd524..d4a8a6c 100644 --- a/stats.asm +++ b/stats.asm @@ -238,38 +238,42 @@ DecrementSmallKeys: RTL ;-------------------------------------------------------------------------------- CountChestKeyLong: ; called from ItemDowngradeFix in itemdowngrade.asm - JSR CountChestKey + JSR CountChestKey RTL ;-------------------------------------------------------------------------------- CountChestKey: ; called by neighbor functions - PHA : PHX - lda !MULTIWORLD_ITEM_PLAYER_ID : bne .end - 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 - .count - LDA $7EF4E0, X : INC : STA $7EF4E0, X + PHA : PHX + LDA !MULTIWORLD_ITEM_PLAYER_ID : bne .end + CPY #24 : BEQ + ; hera basement key + 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 + BNE + + INC ; combines HC and Sewer counts + + TAX + .count + LDA $7EF4E0, X : INC : STA $7EF4E0, X .end - PLX : PLA + PLX : PLA RTS ;-------------------------------------------------------------------------------- CountBonkItem: ; called from GetBonkItem in bookofmudora.asm - LDA $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte - CMP #115 : BNE + ; Desert Bonk Key - LDA.L BonkKey_Desert : BRA ++ - + : CMP #140 : BNE + ; GTower Bonk Key - LDA.L BonkKey_GTower : BRA ++ - + LDA.B #$24 ; default to small key - ++ - CMP #$24 : BNE + - PHY - TAY : JSR CountChestKey - PLY - + + LDA $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte + CMP #115 : BNE + ; Desert Bonk Key + LDA.L BonkKey_Desert : BRA ++ + + : CMP #140 : BNE + ; GTower Bonk Key + LDA.L BonkKey_GTower : BRA ++ + + LDA.B #$24 ; default to small key + ++ + CMP #$24 : BNE + + PHY + TAY : JSR CountChestKey + PLY + + RTL ;-------------------------------------------------------------------------------- IncrementAgahnim2Sword: