From bacbf1c58a00f40a92636f70843c42e754fa0d1b Mon Sep 17 00:00:00 2001 From: Karkat Date: Sat, 10 Jun 2017 00:20:47 -0400 Subject: [PATCH] let's dev 6/10/17 fixed hobo music reset fixed (maybe) freeroaming dungeon item text loader cleaned up regular text loader removed silver arrow indicator from item menu added silver arrow indicator to hud for bowless silver state added framework for static boss RNG --- LTTP_RND_GeneralBugfixes.asm | 8 +-- bugfixes.asm | 10 +++ dialog.asm | 114 ++++++++++++++++++++++------------- hooks.asm | 14 +++-- itemtext.asm | 2 +- newitems.asm | 25 +++++--- rngfixes.asm | 75 +++++++++++++++++++++++ sandbox.asm | 67 ++++++++++++++++++++ tables.asm | 6 +- 9 files changed, 262 insertions(+), 59 deletions(-) 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 ;================================================================================