From 27cb1b545900756f7ffdea59342e9ff6b1d731f2 Mon Sep 17 00:00:00 2001 From: Bonta <40473493+Bonta0@users.noreply.github.com> Date: Mon, 5 Jul 2021 20:30:18 +0200 Subject: [PATCH 1/2] Implement Fakeboots --- LTTP_RND_GeneralBugfixes.asm | 3 ++ boots.asm | 80 ++++++++++++++++++++++++++++++++---- hooks.asm | 48 ++++++++++++++++++++-- stats.asm | 14 +++---- tables.asm | 6 ++- 5 files changed, 129 insertions(+), 22 deletions(-) diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 9635e8f..af8cc20 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -501,6 +501,9 @@ Sprite_ShowMessageUnconditional: org $05EC96 Sprite_ZeldaLong: +org $0680FA +Player_ApplyRumbleToSprites: + org $0683E6 Utility_CheckIfHitBoxesOverlapLong: diff --git a/boots.asm b/boots.asm index 7589b3d..555fcb8 100644 --- a/boots.asm +++ b/boots.asm @@ -3,13 +3,75 @@ ;-------------------------------------------------------------------------------- !BOOTS_MODIFIER = "$7F50CE" ModifyBoots: - PHA - LDA !BOOTS_MODIFIER : CMP.b #$01 : BNE + - PLA : AND $7EF379 : ORA.b #$04 : RTL ; yes boots - + : CMP #$02 : BNE + - PLA : AND $7EF379 : AND.b #$FB : RTL ; no boots - + - PLA - AND $7EF379 ; regular boots + PHA + LDA !BOOTS_MODIFIER : CMP.b #$01 : BNE + + PLA : AND $7EF379 : ORA.b #$04 : RTL ; yes boots + + : CMP.b #$02 : BNE + + PLA : AND $7EF379 : AND.b #$FB : RTL ; no boots + + : LDA FakeBoots : CMP.b #$01 : BNE + + LDA $5B : BEQ ++ : LDA $59 : BNE + ; hover check + ++ : PLA : AND $7EF379 : ORA.b #$04 : RTL ; yes boots, not hovering + + + PLA + AND $7EF379 ; regular boots +RTL +;-------------------------------------------------------------------------------- +AddBonkTremors: + PHA + LDA $46 : BNE + ; Check for incapacitated Link + JSL.l IncrementBonkCounter + + + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BNE + ; Check for Boots + PLA : RTL + + + PLA + JSL.l AddDashTremor : JSL.l Player_ApplyRumbleToSprites ; things we wrote over +RTL +;-------------------------------------------------------------------------------- +BonkBreakableWall: + PHX : PHP + SEP #$30 ; set 8-bit accumulator and index registers + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BNE + ; Check for Boots + PLP : PLX : LDA.w #$0000 : RTL + + + PLP : PLX + LDA $0372 : AND.w #$00FF ; things we wrote over +RTL +;-------------------------------------------------------------------------------- +BonkRockPile: + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BNE + ; Check for Boots + LDA.b #$00 : RTL + + + LDA $02EF : AND.b #$70 ; things we wrote over +RTL +;-------------------------------------------------------------------------------- +GravestoneHook: + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BEQ .done ; Check for Boots + + + LDA $0372 : BEQ .done ; things we wrote over + JML.l moveGravestone + .done + JML.l GravestoneHook_continue +;-------------------------------------------------------------------------------- +JumpDownLedge: + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BNE + ; Check for Boots + ; Disarm Waterwalk + LDA $5B : CMP.b #$01 : BNE + + STZ $5B + + + LDA $1B : BNE .done : LDA.b #$02 : STA $EE ; things we wrote over + .done +RTL +;-------------------------------------------------------------------------------- +BonkRecoil: + LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + + LDA $7EF355 : BNE + ; Check for Boots + LDA.b #$16 : STA $29 : RTL + + + LDA.b #$24 : STA $29 ; things we wrote over RTL -;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index 6a48892..1ddd019 100755 --- a/hooks.asm +++ b/hooks.asm @@ -62,6 +62,51 @@ org $079C22 ; <- 39222 - Bank07.asm : 4494 (AND $7EF379 : BEQ .cantDoAction) JSL.l ModifyBoots ;-------------------------------------------------------------------------------- +;================================================================================ +; Enable/Disable Bonk Tremors +;-------------------------------------------------------------------------------- +org $079202 ; 39202 <- Bank07.asm : 2859 (JSL AddDashTremor : JSL Player_ApplyRumbleToSprites) +JSL.l AddBonkTremors : NOP #4 +;-------------------------------------------------------------------------------- + +;================================================================================ +; Bonk Breakable Walls +;-------------------------------------------------------------------------------- +org $01CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF) +JSL.l BonkBreakableWall : NOP #2 +;-------------------------------------------------------------------------------- + +;================================================================================ +; Bonk Rock Pile +;-------------------------------------------------------------------------------- +org $07C196 ; 3C196 <- Bank07.asm : 10310 (LDA $02EF : AND.b #$70) +JSL.l BonkRockPile : NOP +;-------------------------------------------------------------------------------- + +;================================================================================ +; Move Gravestone +;-------------------------------------------------------------------------------- +org $07C0FD ; 3C0FD <- Bank07.asm : 10197 (LDA $0372 : BNE .moveGravestone) +JML.l GravestoneHook : NOP +GravestoneHook_continue: +org $07C106 +moveGravestone: +;-------------------------------------------------------------------------------- + +;================================================================================ +; Jump Down Ledge +;-------------------------------------------------------------------------------- +org $078966 ; 38966 <- Bank07.asm : 1618 (LDA $1B : BNE .indoors : LDA.b #$02 : STA $EE) +JSL.l JumpDownLedge : NOP #4 +;-------------------------------------------------------------------------------- + +;================================================================================ +; Bonk Recoil +;-------------------------------------------------------------------------------- +org $07922C ; 3922C <- Bank07.asm : 2869 (LDA.b #$24 : STA $29) +JSL.l BonkRecoil +;-------------------------------------------------------------------------------- + ;================================================================================ ; Dungeon Exit Hook ;-------------------------------------------------------------------------------- @@ -486,9 +531,6 @@ JSL.l CheckGanonHammerDamage : NOP ;================================================================================ ; Stat Hooks ;-------------------------------------------------------------------------------- -org $079202 ; 39202 <- Bank07.asm : 2859 (JSL AddDashTremor) -JSL.l StatBonkCounter -;-------------------------------------------------------------------------------- org $02B797 ; <- 13797 - Bank02.asm : 8712 (LDA.b #$19 : STA $10) JSL.l StatsFinalPrep ;-------------------------------------------------------------------------------- diff --git a/stats.asm b/stats.asm index 4bd3699..a853fc1 100644 --- a/stats.asm +++ b/stats.asm @@ -144,16 +144,12 @@ !LOCK_STATS = "$7EF443" ;-------------------------------------------------------------------------------- !BONK_COUNTER = "$7EF420" -StatBonkCounter: - PHA - JSL Ancilla_CheckIfAlreadyExistsLong : BCS + - LDA !LOCK_STATS : BNE + - LDA !BONK_COUNTER : INC - CMP.b #100 : BEQ + ; decimal 100 - STA !BONK_COUNTER +IncrementBonkCounter: + LDA !LOCK_STATS : BNE + + LDA !BONK_COUNTER : INC + CMP.b #100 : BEQ + ; decimal 100 + STA !BONK_COUNTER + - PLA - JSL.l AddDashTremor ; thing we wrote over RTL ;-------------------------------------------------------------------------------- !SAVE_COUNTER = "$7EF42D" diff --git a/tables.asm b/tables.asm index b26436f..a376a84 100644 --- a/tables.asm +++ b/tables.asm @@ -388,7 +388,11 @@ org $30808D ; PC 0x18008D InstantPostAgaWorldState: db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -; 0x18008E - 0x18008F (unused) +org $30808E ; PC 0x18008E +FakeBoots: +db $00 ; #$00 = Off (default) - #$01 = On +;-------------------------------------------------------------------------------- +; 0x18008F (unused) ;-------------------------------------------------------------------------------- org $308090 ; PC 0x180090 - 0x180097 ProgressiveSwordLimit: From 3548a0bbf535163c50d6aa7479858e55b5d90169 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Thu, 24 Jun 2021 12:23:55 -0700 Subject: [PATCH 2/2] Implement always-allowed medallions --- roomloading.asm | 8 ++-- swordswap.asm | 120 ++++++++++++++++++++++++++++-------------------- tables.asm | 2 +- 3 files changed, 74 insertions(+), 56 deletions(-) diff --git a/roomloading.asm b/roomloading.asm index 29f584d..d545b29 100644 --- a/roomloading.asm +++ b/roomloading.asm @@ -71,15 +71,15 @@ macro DrawBombosPlatform(roomX, roomY, quadX, quadY) endMacro IcePalaceBombosSE: - LDA AllowSwordlessMedallionUse : BNE + : RTL : + + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : + %DrawBombosPlatform(14, 18, 1, 1) RTL IcePalaceBombosSW: - LDA AllowSwordlessMedallionUse : BNE + : RTL : + + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : + %DrawBombosPlatform(14, 18, 0, 1) RTL IcePalaceBombosNE: - LDA AllowSwordlessMedallionUse : BNE + : RTL : + + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : + %DrawBombosPlatform(14, 18, 1, 0) RTL @@ -165,4 +165,4 @@ RoomCallbackTable: db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 10x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 11x - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 12x \ No newline at end of file + db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 12x diff --git a/swordswap.asm b/swordswap.asm index bfea58f..7dbd635 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -6,11 +6,11 @@ ;GetFairySword: ; CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert single fighter sword to low id one ; CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert safe master sword to normal one -; CMP #$04 : !BLT + : JML.l PyramidFairy_BRANCH_IOTA : + ; for any sword, incl newer -; JSL ItemCheck_FairySword : BEQ + : JML.l PyramidFairy_BRANCH_IOTA : + ; skip if we already flagged getting this +; CMP #$04 : !BLT + : JML.l PyramidFairy_BRANCH_IOTA : + ; for any sword, incl newer +; JSL ItemCheck_FairySword : BEQ + : JML.l PyramidFairy_BRANCH_IOTA : + ; skip if we already flagged getting this ; JSL ItemSet_FairySword ; mark as got -; LDA FairySword : STA $0DC0, X ; whichever sword -; LDA.b #$05 : STA $0EB0, X ; something we overwrote, documentation unclear on purpose +; LDA FairySword : STA $0DC0, X ; whichever sword +; LDA.b #$05 : STA $0EB0, X ; something we overwrote, documentation unclear on purpose ; ;JML.l PyramidFairy_BRANCH_GAMMA ;================================================================================ @@ -146,16 +146,16 @@ GetSmithSword: REP #$20 : LDA $7EF360 : CMP #$000A : SEP #$20 : !BGE .buy .cant_afford REP #$10 - LDA.b #$7A - LDY.b #$01 - JSL.l Sprite_ShowMessageUnconditional + LDA.b #$7A + LDY.b #$01 + JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound SEP #$10 BRA .done .buy - LDA.l SmithItem : TAY - STZ $02E9 ; Item from NPC + LDA.l SmithItem : TAY + STZ $02E9 ; Item from NPC PHX : JSL Link_ReceiveItem : PLX REP #$20 : LDA $7EF360 : !SUB.w #$000A : STA $7EF360 : SEP #$20 ; Take 10 rupees @@ -165,50 +165,68 @@ GetSmithSword: JML.l Smithy_AlreadyGotSword ;================================================================================ CheckMedallionSword: - PHB : PHX : PHY - LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++ - LDA $1B : BEQ .outdoors - .indoors - REP #$20 ; set 16-bit accumulator - LDA $A0 ; load room ID - 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 - 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 - 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 - BRA .permit - ++ : .normal - SEP #$20 ; set 8-bit accumulator + LDA.l AllowSwordlessMedallionUse : BEQ .check_sword + CMP #$01 : BEQ .check_pad + LDA.b #$02 ; Pretend we have master sword + RTL + .check_sword + LDA $7EF359 + RTL + .check_pad + PHB : PHX : PHY + LDA $1B : BEQ .outdoors + .indoors + REP #$20 ; set 16-bit accumulator + LDA $A0 ; load room ID + CMP.w #$000E : BNE + ; freezor1 + LDA $22 : AND.w #$01FF ; check x-coord + CMP.w #368-8 : !BLT .normal + CMP.w #368+32-8 : !BGE .normal + LDA $20 : AND.w #$01FF ; check y-coord + CMP.w #400-22 : !BLT .normal + CMP.w #400+32-22 : !BGE .normal + JMP .permit + + : CMP.w #$007E : BNE + ; freezor2 + LDA $22 : AND.w #$01FF ; check x-coord + CMP.w #112-8 : !BLT .normal + CMP.w #112+32-8 : !BGE .normal + LDA $20 : AND.w #$01FF ; check y-coord + CMP.w #400-22 : !BLT .normal + CMP.w #400+32-22 : !BGE .normal + JMP .permit + + : CMP.w #$00DE : BNE + ; kholdstare + LDA $22 : AND.w #$01FF ; check x-coord + CMP.w #368-8 : !BLT .normal + CMP.w #368+32-8 : !BGE .normal + LDA $20 : AND.w #$01FF ; check y-coord + CMP.w #144-22 : !BLT .normal + CMP.w #144+32-22 : !BGE .normal + BRA .permit + + : .normal + SEP #$20 ; set 8-bit accumulator + BRA .done + .outdoors + LDA $8A : CMP.b #$70 : BNE + + LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done + LDA $7EF2F0 : AND.b #$20 : BNE .done + LDA.b #$08 : PHA : PLB ; set data bank to $08 + LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire BRA .done - .outdoors - LDA $8A : CMP.b #$70 : BNE ++ - LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE + - LDA $7EF2F0 : AND.b #$20 : BNE + - LDA.b #$08 : PHA : PLB ; set data bank to $08 - LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire - BRA + - ++ : CMP.b #$47 : BNE ++ - LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE + - LDA $7EF2C7 : AND.b #$20 : BNE + - LDA.b #$08 : PHA : PLB ; set data bank to $08 - LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock - ++ - .done - + - PLY : PLX : PLB - LDA $7EF359 -RTL + + : CMP.b #$47 : BNE + + LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done + LDA $7EF2C7 : AND.b #$20 : BNE .done + LDA.b #$08 : PHA : PLB ; set data bank to $08 + LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock + + + .done + PLY : PLX : PLB + LDA $7EF359 + RTL .permit - SEP #$20 ; set 8-bit accumulator - PLY : PLX : PLB - LDA.b #$02 ; Pretend we have master sword -RTL + SEP #$20 ; set 8-bit accumulator + PLY : PLX : PLB + LDA.b #$02 ; Pretend we have master sword + RTL .medallion_type db #$0F, #$10, #$11 ;================================================================================ diff --git a/tables.asm b/tables.asm index b26436f..cb45301 100644 --- a/tables.asm +++ b/tables.asm @@ -167,7 +167,7 @@ db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- org $308041 ; PC 0x180041 AllowSwordlessMedallionUse: -db #$00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always (Not Implemented) +db #$00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always ;-------------------------------------------------------------------------------- org $308042 ; PC 0x180042 PermitSQFromBosses: