diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index f8b918f..86c3c33 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF db #$00 ; expand file to 2mb org $1FFFF8 ; timestamp rom -dl #$20170606 +dl #$20170610 ;================================================================================ @@ -189,15 +189,15 @@ GFX_HUD_Palette: incbin hudpalette.pal warnpc $348000 -org $320000 +org $328000 Extra_Text_Table: incsrc itemtext.asm incsrc externalhooks.asm ;================================================================================ -org $2F8000 ; PC 0x178000 +org $AF8000 ; PC 0x178000 Static_RNG: -warnpc $2F8400 +warnpc $AF8400 ;================================================================================ ;bank $3A reserved for downstream use (Plandomizer) ;bank $3B reserved for downstream use (Plandomizer) diff --git a/bugfixes.asm b/bugfixes.asm index a5e5319..8746c20 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -17,4 +17,14 @@ AllowSQ: LDA !ITEM_BUSY : EOR #$01 .done RTL +;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +;0 = Reset Music +;1 = Don't Reset Music +MSMusicReset: + LDA $8A : CMP.b #$80 : BNE + + LDA $23 + + +RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/dialog.asm b/dialog.asm index 67a16b6..d8da096 100644 --- a/dialog.asm +++ b/dialog.asm @@ -85,21 +85,7 @@ macro LoadDialogAddress(address) LDA $01 : PHA LDA $02 : PHA LDA.b #$01 : STA $7F5035 ; set flag - - LDA.b #
: STA $00 ; write pointer to direct page - LDA.b #
>>8 : STA $01 - LDA.b #
>>16 : STA $02 - - REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0 - ?loop: - LDA [$00], Y ; load the next character from the pointer - STA !DIALOG_BUFFER, X ; write to the buffer - INX : INY - CMP.b #$7F : BNE ?loop - REP #$20 ; set 16-bit accumulator - TXA : INC : STA !OFFSET_RETURN ; copy out X into - LDA.w #$0000 : STA !OFFSET_POINTER - SEP #$20 ; set 8-bit accumulator + %CopyDialog(
) PLA : STA $02 PLA : STA $01 PLA : STA $00 @@ -108,68 +94,114 @@ macro LoadDialogAddress(address) PLY : PLX : PLA endmacro ;-------------------------------------------------------------------------------- +macro CopyDialog(address) + LDA.b #
: STA $00 ; write pointer to direct page + LDA.b #
>>8 : STA $01 + LDA.b #
>>16 : STA $02 + + REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0 + ?loop: + LDA [$00], Y ; load the next character from the pointer + STA !DIALOG_BUFFER, X ; write to the buffer + INX : INY + CMP.b #$7F : BNE ?loop + REP #$20 ; set 16-bit accumulator + TXA : INC : STA !OFFSET_RETURN ; copy out X into + LDA.w #$0000 : STA !OFFSET_POINTER + SEP #$20 ; set 8-bit accumulator +endmacro +;-------------------------------------------------------------------------------- +!ITEM_TEMPORARY = "$7F5040" FreeDungeonItemNotice: - PHX : PHA + STA !ITEM_TEMPORARY + + PHA : PHX : PHY + PHP + PHB : PHK : PLB + SEP #$20 ; set 8-bit accumulator + REP #$10 ; set 16-bit index registers + LDA $00 : PHA + LDA $01 : PHA + LDA $02 : PHA + ;-------------------------------- + LDA.l FreeItemText : BNE + : BRL .skip : + - PLA : PHA + LDA !ITEM_TEMPORARY AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... - %LoadDialogAddress(Notice_MapOf) + %CopyDialog(Notice_MapOf) BRL .dungeon + : CMP.b #$80 : BNE + ; compass of... - %LoadDialogAddress(Notice_CompassOf) + %CopyDialog(Notice_CompassOf) BRL .dungeon + : CMP.b #$90 : BNE + ; big key of... - %LoadDialogAddress(Notice_BigKeyOf) + %CopyDialog(Notice_BigKeyOf) BRA .dungeon + : CMP.b #$A0 : BNE + ; small key of... - %LoadDialogAddress(Notice_SmallKeyOf) + %CopyDialog(Notice_SmallKeyOf) PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA + - + .dungeon LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER - PLA : PHA + LDA !ITEM_TEMPORARY AND.b #$0F ; looking at high bits only CMP.b #$00 : BNE + ; ...light world - %LoadDialogAddress(Notice_LightWorld) + %CopyDialog(Notice_LightWorld) : BRL .done + : CMP.b #$01 : BNE + ; ...dark world - %LoadDialogAddress(Notice_DarkWorld) + %CopyDialog(Notice_DarkWorld) : BRL .done + : CMP.b #$02 : BNE + ; ...ganon's tower - %LoadDialogAddress(Notice_GTower) + %CopyDialog(Notice_GTower) : BRL .done + : CMP.b #$03 : BNE + ; ...turtle rock - %LoadDialogAddress(Notice_TRock) + %CopyDialog(Notice_TRock) : BRL .done + : CMP.b #$04 : BNE + ; ...thieves' town - %LoadDialogAddress(Notice_Thieves) + %CopyDialog(Notice_Thieves) : BRL .done + : CMP.b #$05 : BNE + ; ...tower of hera - %LoadDialogAddress(Notice_Hera) + %CopyDialog(Notice_Hera) : BRL .done + : CMP.b #$06 : BNE + ; ...ice palace - %LoadDialogAddress(Notice_Ice) + %CopyDialog(Notice_Ice) : BRL .done + : CMP.b #$07 : BNE + ; ...skull woods - %LoadDialogAddress(Notice_Skull) + %CopyDialog(Notice_Skull) : BRL .done + : CMP.b #$08 : BNE + ; ...misery mire - %LoadDialogAddress(Notice_Mire) + %CopyDialog(Notice_Mire) : BRL .done + : CMP.b #$09 : BNE + ; ...dark palace - %LoadDialogAddress(Notice_PoD) + %CopyDialog(Notice_PoD) : BRL .done + : CMP.b #$0A : BNE + ; ...swamp palace - %LoadDialogAddress(Notice_Swamp) + %CopyDialog(Notice_Swamp) : BRL .done + : CMP.b #$0B : BNE + ; ...agahnim's tower - %LoadDialogAddress(Notice_AgaTower) + %CopyDialog(Notice_AgaTower) : BRL .done + : CMP.b #$0C : BNE + ; ...desert palace - %LoadDialogAddress(Notice_Desert) + %CopyDialog(Notice_Desert) : BRL .done + : CMP.b #$0D : BNE + ; ...eastern palace - %LoadDialogAddress(Notice_Eastern) + %CopyDialog(Notice_Eastern) : BRA .done + : CMP.b #$0E : BNE + ; ...hyrule castle - %LoadDialogAddress(Notice_Castle) + %CopyDialog(Notice_Castle) : BRA .done + : CMP.b #$0F : BNE + ; ...sewers - %LoadDialogAddress(Notice_Sewers) + %CopyDialog(Notice_Sewers) + + .done - ;LDA.b #$01 : STA $7F5035 ; set alternate dialog flag + LDA.b #$01 : STA $7F5035 ; set alternate dialog flag + + ;-------------------------------- + PLA : STA $02 + PLA : STA $01 + PLA : STA $00 + PLB + PLP + PLY : PLX : PLA JSL.l Sprite_ShowMessageMinimal +RTL + .skip - PLA : PLX + ;-------------------------------- + PLA : STA $02 + PLA : STA $01 + PLA : STA $00 + PLB + PLP + PLY : PLX : PLA RTL ;-------------------------------------------------------------------------------- DialogBlind: diff --git a/hooks.asm b/hooks.asm index dfa5ddc..63cbb94 100644 --- a/hooks.asm +++ b/hooks.asm @@ -311,7 +311,10 @@ org $1EE094 ; PC 0xF6094 - sprite_hylian_plaque.asm : 79 (JSL Sprite_ShowMessage JSL.l DialogPedestal ;-------------------------------------------------------------------------------- org $08C431 ; <- 44431 - ancilla_receive_item.asm : 125 (LDA $0C5E, X : CMP.b #$01 : BNE .notMasterSword2) -LDA $8A : CMP.b #$80 : NOP +JSL.l MSMusicReset : NOP +;LDA $8A : CMP.b #$80 : NOP +; $22 = $0000 - $00FF - MS Pedestal +; $22 = $0100 - $00FF - Hobo ;-------------------------------------------------------------------------------- ;================================================================================ @@ -790,9 +793,12 @@ LDX.w #HUD_TileMap org $0DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) MVN $207E ;-------------------------------------------------------------------------------- -org $0DE48E ; <- 6E48E - equipment.asm : 1233 (LDA.w #$11CE : STA $00) +;org $0DE48E ; <- 6E48E - equipment.asm : 1233 (LDA.w #$11CE : STA $00) - HOOK HERE TO DRAW ON THE ITEM SCREEN +;JSL.l DrawHUDSilverArrows +;NOP +;-------------------------------------------------------------------------------- +org $0DFB1F ; 6FB1F - headsup_display.asm : 681 (LDA $7EF340 : BEQ .hastNoBow) JSL.l DrawHUDSilverArrows -NOP ;-------------------------------------------------------------------------------- ;================================================================================ @@ -983,7 +989,7 @@ LDX.b #$F1 : STX $012C ;================================================================================ org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) JSL.l CheckHeraObject : BNE + : NOP -STX $012C +STX $012C ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS + ;================================================================================ org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA) diff --git a/itemtext.asm b/itemtext.asm index 5d2461e..d7539e4 100644 --- a/itemtext.asm +++ b/itemtext.asm @@ -44,7 +44,7 @@ Notice_GTower: ; Turtle Rock Notice_TRock: - db #76, $00, $BD, $00, $BE, $00, $BB, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BB, $00, $B8, $00, $AC, $00, $B4 + db $76, $00, $BD, $00, $BE, $00, $BB, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BB, $00, $B8, $00, $AC, $00, $B4 dw #$7F7F ; Thieves Town diff --git a/newitems.asm b/newitems.asm index 81f6092..3578ad9 100755 --- a/newitems.asm +++ b/newitems.asm @@ -644,15 +644,26 @@ Link_ReceiveItemAlternatesExpanded: PLB RTL ;-------------------------------------------------------------------------------- +;DrawHUDSilverArrows: +; LDA $7EF340 : AND.w #$00FF : BNE + +; LDA $7EF414 : AND.w #$0040 : BEQ + +; LDA.w #$2810 : STA $11C8 +; LDA.w #$2811 : STA $11CA +; LDA.w #$2820 : STA $1208 +; LDA.w #$2821 : STA $120A +; + +; LDA.w #$11CE : STA $00 ; thing we wrote over +;RTL +;-------------------------------------------------------------------------------- +;Return $7EF340 unless no bow and silvers, then return 3 DrawHUDSilverArrows: - LDA $7EF340 : AND.w #$00FF : BNE + - LDA $7EF414 : AND.w #$0040 : BEQ + - LDA.w #$2810 : STA $11C8 - LDA.w #$2811 : STA $11CA - LDA.w #$2820 : STA $1208 - LDA.w #$2821 : STA $120A + LDA $7EF340 : BNE + + LDA $7EF414 : AND.b #$40 : BEQ ++ + LDA.b #$03 + RTL + ++ + LDA $7EF340 + - LDA.w #$11CE : STA $00 ; thing we wrote over RTL ;-------------------------------------------------------------------------------- !RNG_ITEM = "$7EF450" diff --git a/rngfixes.asm b/rngfixes.asm index 0a73cb1..23804fc 100644 --- a/rngfixes.asm +++ b/rngfixes.asm @@ -34,4 +34,79 @@ RTL LDA.b #$00 ; give them money instead + RTL +;-------------------------------------------------------------------------------- +RNG_Lanmolas1: + LDA.b #$00 : BRA _rng_done +RNG_Moldorm1: + LDA.b #$01 : BRA _rng_done +RNG_Agahnim1: + LDA.b #$02 : BRA _rng_done +RNG_Helmasaur: + LDA.b #$03 : BRA _rng_done +RNG_Arrghus: + LDA.b #$04 : BRA _rng_done +RNG_Mothula: + LDA.b #$05 : BRA _rng_done +RNG_Kholdstare: + LDA.b #$06 : BRA _rng_done +RNG_Vitreous: + LDA.b #$07 : BRA _rng_done +RNG_Trinexx: + LDA.b #$08 : BRA _rng_done +RNG_Lanmolas2: + LDA.b #$09 : BRA _rng_done +RNG_Moldorm2: + LDA.b #$0A : BRA _rng_done +RNG_Agahnim2: + LDA.b #$0B : BRA _rng_done +RNG_Agahnim2Phantoms: + LDA.b #$0C : BRA _rng_done +RNG_Ganon: + LDA.b #$0D + _rng_done: + JSL.l GetStaticRNG +RTL +;-------------------------------------------------------------------------------- +; In: A = RNG Index +; Out: A = RNG Result +;-------------------------------------------------------------------------------- +!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 : STA !RNG_POINTERS, X : TAX : ASL ; increment pointer and move value to X + LDA Static_RNG, X ; load RNG value + PLP : PLX +RTL +;-------------------------------------------------------------------------------- +InitRNGPointerTable: + PHX : PHP + REP #$30 ; set 16-bit accumulator & index registers + LDX.w #$0000 + - + LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 + LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 + LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 + LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 + CPX.w #$007F : !BLT - + PLP : PLX +RTL +.rngDefaults +dw #$0000 ; 00 = Lanmolas 1 +dw #$0040 ; 01 = Moldorm 1 +dw #$0080 ; 02 = Agahnim 1 +dw #$00C0 ; 03 = Helmasaur +dw #$0100 ; 04 = Arrghus +dw #$0140 ; 05 = Mothula +dw #$0180 ; 06 = Kholdstare +dw #$01C0 ; 07 = Vitreous +dw #$0200 ; 08 = Trinexx +dw #$0240 ; 09 = Lanmolas 2 +dw #$0280 ; 10 = Moldorm 2 +dw #$02C0 ; 11 = Agahnim 2 +dw #$0300 ; 12 = Agahnim 2 Phantoms +dw #$0340 ; 13 = Ganon +dw #$0380 ; 14 = Unused +dw #$03C0 ; 15 = Unused ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/sandbox.asm b/sandbox.asm index 444a5ac..748fde6 100644 --- a/sandbox.asm +++ b/sandbox.asm @@ -1,3 +1,70 @@ +;-------------------------------------------------------------------------------- +;Dungeon Music +;org $02D592 ; PC 0x15592 +;11 - Pendant Dungeon +;16 - Crystal Dungeon +; +;org $02D592+$08 +;Music_Eastern: +;db $11 +; +;org $02D592+$09 +;Music_Desert: +;db $16, $16, $16, $16 +; +;org $02D592+$33 +;Music_Hera: +;db $16 +;org $02907A ; 0x1107A - Bank02.asm:3089 (#$11) +;Music_Hera2: +;db $16 +;org $028B8C ; 0x10B8C - Bank02.asm:2231 (#$11) +;Music_Hera3: +;db $16 +; +;org $02D592+$26 +;Music_Darkness: +;db $11 +; +;org $02D592+$25 +;Music_Swamp: +;db $16 +; +;org $02D592+$28 +;Music_Skull: +;db $11, $11, $11, $11 +; +;org $02D592+$76 +;Music_Skul_Drop: +;db $11, $11, $11, $11 +; +;org $02D592+$34 +;Music_Thieves: +;db $11 +; +;org $02D592+$2D +;Music_Ice: +;db $16 +; +;org $02D592+$27 +;Music_Mire: +;db $11 +; +;org $02D592+$35 +;Music_TRock: +;db $11 +;org $02D592+$15 +;Music_TRock2: +;db $11 +;org $02D592+$18 +;Music_TRock3: +;db $11, $11 +; +;org $02D592+$37 +;Music_GTower: +;db $11 +;-------------------------------------------------------------------------------- + ;org $06FA78 ; set all prize packs to bombs ;dd #$DDDDDDDD ;dd #$DDDDDDDD diff --git a/tables.asm b/tables.asm index a5c4cd1..386a0a8 100644 --- a/tables.asm +++ b/tables.asm @@ -75,7 +75,7 @@ PedestalMusicCheck: ;db #$01 ; #$01 = Master Sword (default) org $0589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179 PedestalSword: -db #$6A ; #$01 = Master Sword (default) +db #$01 ; #$01 = Master Sword (default) org $308029 ; PC 0x180029 SmithItemMode: @@ -1065,7 +1065,8 @@ dw #9999 ; Rupee Limit ; $7F503D - Stats Rupee Total ; $7F503E - Stats Item Total ; $7F503F - Bonk Repeat -; $7F5040 - $7F507E - Unused +; $7F5040 - Free Item Dialog Temporary +; $7F5041 - $7F507E - Unused ; $7F507E - Clock Status ; $7F507F - Always Zero ; $7F5080 - $7F5083 - Clock Hours @@ -1082,6 +1083,7 @@ dw #9999 ; Rupee Limit ; $7F5097 - Dialog Offset Pointer Return (High) ; $7F50D0 - $7F50FF - Block Cypher Parameters ; $7F5100 - $7F51FF - Block Cypher Buffer +; $7F5200 - $7F52FF - RNG Pointer Block ; ; $7F5700 - $7F57FF - Dialog Buffer ;================================================================================