From 703cf1518db363b9c93da5477bb364754afb2501 Mon Sep 17 00:00:00 2001 From: Kevin Cathcart Date: Sat, 21 Jul 2018 18:29:58 -0400 Subject: [PATCH] Many File Select screen improvements. Expand File Select screen drawable area Remove Copy File text from Select Screen Rename HASH to CODE (matches Z1R). Relocate in vram 2 bpp graphics used for file select screen Move names and hearts Extend naming screen to allow for 12 character names --- LTTP_RND_GeneralBugfixes.asm | 1 + events.asm | 10 +- fileselect.asm | 179 +++++++++++++++++++++++++---------- hashalphabet.asm | 18 ++-- hashalphabethooks.asm | 79 ++++++++++++---- hooks.asm | 69 +++++++++++++- playername.asm | 54 +++++++++++ 7 files changed, 322 insertions(+), 88 deletions(-) create mode 100644 playername.asm diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index a48e1fe..14dc242 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -165,6 +165,7 @@ incsrc retro.asm incsrc dpadinvert.asm incsrc boots.asm incsrc fileselect.asm +incsrc playername.asm incsrc decryption.asm warnpc $A58000 diff --git a/events.asm b/events.asm index ade774a..fe7e1bb 100644 --- a/events.asm +++ b/events.asm @@ -74,7 +74,11 @@ RTL ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" OnFileLoad: - SEP #$20 ; set 8 bit accumulator + REP #$10 ; set 16 bit index registers + JSL.l EnableForceBlank ; what we wrote over + + LDA.b #$07 : STA $210c ; Restore screen 3 to normal tile area + LDA !FRESH_FILE_MARKER : BNE + JSL.l OnNewFile LDA.b #$FF : STA !FRESH_FILE_MARKER @@ -95,9 +99,7 @@ OnFileLoad: LDA.l IsEncrypted : CMP.b #01 : BNE + JSL LoadStaticDecryptionKey + - - REP #$20 ; restore 16 bit accumulator - LDA.w #$0007 : STA $7EC00D : STA $7EC013 ; thing we wrote over - sets up some graphics timers + SEP #$10 ; restore 8 bit index registers RTL ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" diff --git a/fileselect.asm b/fileselect.asm index 4d2a553..3e48861 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -1,66 +1,145 @@ -;DrawPlayerFile: -; PHX : PHY -; -; ; draw bow -; LDA.w #$21DA : STA $1070 -; LDA.w #$21DB : STA $1072 -; LDA.w #$21EA : STA $10A2 -; LDA.w #$21EB : STA $10A4 -; -; ; draw bow -; LDA.w #$21DA : STA $1070 -; LDA.w #$21DB : STA $1072 -; LDA.w #$21EA : STA $10A2 -; LDA.w #$21EB : STA $10A4 -; -; PLY : PLX -; LDA.w #$0004 : STA $02 ; thing we wrote over -;RTL +!ExtendedPlayerName = "$700500" + +;FS prefix means file_select, since these defines and macros are specific to this screen + +!FS_COLOR_BROWN = "$0000" ;(only used for: Shovel, hammer, powder) +!FS_COLOR_RED = "$0400" +!FS_COLOR_YELLOW = "$0800" +!FS_COLOR_BLUE = "$0C00" +!FS_COLOR_GRAY = "$1000" ;(Used to gray out items) +!FS_COLOR_BOOTS = "$1400" +!FS_COLOR_GREEN = "$1800" +!FS_COLOR_BW = "$1C00" + +macro fs_draw8x8(screenrow,screencol) + STA.w *$20+*2+$1004 +endmacro +macro fs_draw16x8(screenrow,screencol) + %fs_draw8x8(,) + INC A + %fs_draw8x8(,+1) +endmacro +macro fs_draw8x16block(screenrow,screencol) + %fs_draw8x8(,) + !ADD #$0010 + %fs_draw8x8(+1,) +endmacro +macro fs_draw16x16block(screenrow,screencol) + %fs_draw16x8(,) + !ADD #$000F + %fs_draw16x8(+1,) +endmacro +macro fs_draw16x16strip(screenrow,screencol) + %fs_draw16x8(,) + INC A + %fs_draw16x8(+1,) +endmacro + + +DrawPlayerFile: + PHX : PHY : PHP + + SEP #$10 ; 8-bit index registers + + LDA !ExtendedPlayerName+$00 : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(6,3) + LDA !ExtendedPlayerName+$02 : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(6,5) + LDA !ExtendedPlayerName+$04 : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(6,7) + LDA !ExtendedPlayerName+$06 : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(6,9) + + LDA !ExtendedPlayerName+$08 : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(9,3) + LDA !ExtendedPlayerName+$0A : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(9,5) + LDA !ExtendedPlayerName+$0C : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(9,7) + LDA !ExtendedPlayerName+$0E : ORA.w #!FS_COLOR_BW + %fs_draw8x16block(9,9) + +; ;bow +; LDA !INVENTORY_SWAP_2 : ORA.w #$0040 : BEQ + +; LDX $700340 : BEQ ++ +; LDA.w #$0208|FS_COLOR_YELLOW ;Bow + silvers +; %fs_draw16x16strip(2,12) +; LDA.w #$020A|FS_COLOR_RED ;Bow + silvers (Arrow Tail) +; %fs_draw8x8(3,12) +; BRA .bow_end +; ++ +; LDA #$020B|FS_COLOR_RED ; Silver arrows +; BRA .draw_bow +; + +; LDA.w #$0204|FS_COLOR_GRAY ; No Bow +; LDX $700340 : BEQ .draw_bow +; LDA.w #$0204|FS_COLOR_YELLOW ; Bow +; .draw_bow +; %fs_draw16x16strip(?,?) +; .bow_end + +; ;hookshot +; LDA.w #$0214|FS_COLOR_GRAY +; LDX $700343 : BEQ + +; LDA.w #$0214|FS_COLOR_RED +; + +; %fs_draw16x16strip(2,16) + + PLP : PLY : PLX + LDA.w #$0004 : STA $02 ; thing we wrote over +RTL +;-------------------------------------------------------------------------------- AltBufferTable: - + LDA.b #$02 : STA $210c ; Have Screen 3 use same tile area as screens 1 + REP #$20 - LDX.w #500 ; 10 rows with 50 bytes (23 tiles * 2 + 4 byte header) + LDX.w #$0300 ; 12 rows with 64 bytes (30 tiles * 2 + 4 byte header) ;fill with the blank character LDA.w #$0188 - STA $1000, X DEX : DEX : BNE - - + ; set vram offsets - LDA.w #$2861 : STA $1002 ;file 1 top row - - LDA.w #$4861 : STA $1034 ;file 1 bottom row - - LDA.w #$6861 : STA $1066 ;gap row top - LDA.w #$8861 : STA $1098 ;gap row bottom - - LDA.w #$A861 : STA $10CA ;file 2 top row - LDA.w #$C861 : STA $10FC ;file 2 bottom row - - LDA.w #$E861 : STA $112E ;gap row top - LDA.w #$0862 : STA $1160 ;gap row bottom - - LDA.w #$2862 : STA $1192 ;file 3 top row - LDA.w #$4862 : STA $11c4 ;file 3 bottom row - + LDA.w #$2161 : STA $1002 ;file 1 top row + LDA.w #$4161 : STA $1042 ;file 1 bottom row + + LDA.w #$6161 : STA $1082 ;gap row top + LDA.w #$8161 : STA $10C2 ;gap row bottom + + LDA.w #$A161 : STA $1102 ;file 2 top row + LDA.w #$C161 : STA $1142 ;file 2 bottom row + + LDA.w #$E161 : STA $1182 ;gap row top + LDA.w #$0162 : STA $11c2 ;gap row bottom + + LDA.w #$2162 : STA $1202 ;file 3 top row + LDA.w #$4162 : STA $1242 ;file 3 bottom row + + LDA.w #$6162 : STA $1282 ;extra gap row top + LDA.w #$8162 : STA $12c2 ;extra gap row bottom + ; set lengths - LDA.w #$2d00 + LDA.w #$3B00 STA $1004 ;file 1 top row - STA $1036 ;file 1 bottom row - STA $1068 ;gap row top - STA $109A ;gap row bottom - STA $10CC ;file 2 top row - STA $10FE ;file 2 bottom row - STA $1130 ;gap row top - STA $1162 ;gap row bottom - STA $1194 ;file 3 top row - STA $11c6 ;file 3 bottom row - + STA $1044 ;file 1 bottom row + STA $1084 ;gap row top + STA $10C4 ;gap row bottom + STA $1104 ;file 2 top row + STA $1144 ;file 2 bottom row + STA $1184 ;gap row top + STA $11c4 ;gap row bottom + STA $1204 ;file 3 top row + STA $1244 ;file 3 bottom row + STA $1284 ;extra gap row top + STA $12c4 ;extra gap row bottom + ; Set last packet marker - LDA.w #$00FF : STA $11f6 + LDA.w #$00FF : STA $1302 SEP #$20 RTL -;------------------------------------------------------------------------------ +;-------------------------------------------------------------------------------- Validate_SRAM: RTL +;-------------------------------------------------------------------------------- diff --git a/hashalphabet.asm b/hashalphabet.asm index 0eb9be5..64cc712 100644 --- a/hashalphabet.asm +++ b/hashalphabet.asm @@ -39,7 +39,7 @@ RTL ;-------------------------------------------------------------------------------- !ALPHA_TILE_WIDTH = "#$40" -!ALPHA_VRAM_DEST_BASE = "#$FA00" +!ALPHA_VRAM_DEST_BASE = "#$5A00" ;-------------------------------------------------------------------------------- ; LoadAlphabetTiles @@ -227,10 +227,10 @@ FileSelect_PlayerSelectText_Top: ;db $60, $62, $00, $37 dw !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_BRACKET_OPEN_TOP -dw !FSTILE_SPACE, !FSTILE_H_TOP -dw !FSTILE_SPACE, !FSTILE_A_TOP -dw !FSTILE_SPACE, !FSTILE_S_TOP -dw !FSTILE_SPACE, !FSTILE_H_TOP +dw !FSTILE_SPACE, !FSTILE_C_TOP +dw !FSTILE_SPACE, !FSTILE_O_TOP +dw !FSTILE_SPACE, !FSTILE_D_TOP +dw !FSTILE_SPACE, !FSTILE_E_TOP dw !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_SPACE, $05A0, $05A1 dw !FSTILE_SPACE, $05A4, $05A5 @@ -245,10 +245,10 @@ FileSelect_PlayerSelectText_Bottom: ;db $60, $82, $00, $37 dw !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_BRACKET_OPEN_BOTTOM -dw !FSTILE_SPACE, !FSTILE_H_BOTTOM -dw !FSTILE_SPACE, !FSTILE_A_BOTTOM -dw !FSTILE_SPACE, !FSTILE_S_BOTTOM -dw !FSTILE_SPACE, !FSTILE_H_BOTTOM +dw !FSTILE_SPACE, !FSTILE_C_BOTTOM +dw !FSTILE_SPACE, !FSTILE_O_BOTTOM +dw !FSTILE_SPACE, !FSTILE_D_BOTTOM +dw !FSTILE_SPACE, !FSTILE_E_BOTTOM dw !FSTILE_SPACE, !FSTILE_SPACE dw !FSTILE_SPACE, $05A2, $05A3 dw !FSTILE_SPACE, $05A6, $05A7 diff --git a/hashalphabethooks.asm b/hashalphabethooks.asm index bd4c5e2..9dc554d 100644 --- a/hashalphabethooks.asm +++ b/hashalphabethooks.asm @@ -10,37 +10,75 @@ !FSTILE_A_TOP = "$1D4A" !FSTILE_A_BOTTOM = "$1D5A" +!FSTILE_C_TOP = "$1D4C" +!FSTILE_C_BOTTOM = "$1D5C" + +!FSTILE_D_TOP = "$1D4D" +!FSTILE_D_BOTTOM = "$1D5D" + +!FSTILE_E_TOP = "$1D4E" +!FSTILE_E_BOTTOM = "$1D5E" + +!FSTILE_F_TOP = "$1D4F" +!FSTILE_F_BOTTOM = "$1D5F" + !FSTILE_H_TOP = "$1D61" !FSTILE_H_BOTTOM = "$1D71" +!FSTILE_I_TOP = "$1D62" +!FSTILE_I_BOTTOM = "$1D72" + +!FSTILE_K_TOP = "$1D64" +!FSTILE_K_BOTTOM = "$1D74" + +!FSTILE_L_TOP = "$1D65" +!FSTILE_L_BOTTOM = "$1D75" + +!FSTILE_N_TOP = "$1D67" +!FSTILE_N_BOTTOM = "$1D77" + +!FSTILE_O_TOP = "$1D68" +!FSTILE_O_BOTTOM = "$1D78" + +!FSTILE_P_TOP = "$1D69" +!FSTILE_P_BOTTOM = "$1D79" + !FSTILE_S_TOP = "$1D6C" !FSTILE_S_BOTTOM = "$1D7C" + +!FSTILE_T_TOP = "$1D6D" +!FSTILE_T_BOTTOM = "$1D7D" + +!FSTILE_Y_TOP = "$1D82" +!FSTILE_Y_BOTTOM = "$1D92" ;-------------------------------------------------------------------------------- org $0CDE60 ; <- 65E60 FileSelect_CopyFile_Top: db $62, $A5, $00, $15 -dw $1D4C, !FSTILE_SPACE, $1D68, !FSTILE_SPACE, $1D69, !FSTILE_SPACE, $1D82, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE +;dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;dw $1CAC, !FSTILE_SPACE, $1D23, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D04, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D07 ;-------------------------------------------------------------------------------- org $0CDE7A ; <- 65E7A FileSelect_CopyFile_Bottom: db $62, $C5, $00, $15 -dw $1D5C, !FSTILE_SPACE, $1D78, !FSTILE_SPACE, $1D79, !FSTILE_SPACE, $1D92, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE +;dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;dw $1CBC, !FSTILE_SPACE, $1D33, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D14, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D17 ;-------------------------------------------------------------------------------- org $0CDE94 ; <- 65E94 FileSelect_KillFile_Top: db $63, $25, $00, $19 -dw $1D4D, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D6D, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1D64, !FSTILE_SPACE, $1D62, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1D64, !FSTILE_SPACE, $1D62, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, $1D04, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D07 +dw !FSTILE_D_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_T_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE +;dw !FSTILE_K_TOP, !FSTILE_SPACE, !FSTILE_I_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +;dw !FSTILE_K_TOP, !FSTILE_SPACE, !FSTILE_I_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, $1D04, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D07 ;-------------------------------------------------------------------------------- ;org $0CDEB2 ; <- 65EB2 ;FileSelect_KillFile_Bottom: db $63, $45, $00, $19 -dw $1D5D, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D7D, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1D74, !FSTILE_SPACE, $1D72, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1D74, !FSTILE_SPACE, $1D72, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D14, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D17 +dw !FSTILE_D_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_T_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE +;dw !FSTILE_K_BOTTOM, !FSTILE_SPACE, !FSTILE_I_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +;dw !FSTILE_K_BOTTOM, !FSTILE_SPACE, !FSTILE_I_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, $1D14, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D17 ;-------------------------------------------------------------------------------- ;org $0CDDE8 ; <- 65DE8 ;FileSelect_PlayerSelectText_Top: @@ -60,9 +98,9 @@ dw $1D5D, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D5E, !FST ;-------------------------------------------------------------------------------- ;CopyFile_Header: org $0CE228 ; <- 66228 -dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_SPACE, $1D4C, $1D68, $1D69, $1D82, !FSTILE_SPACE, $1D4F, $1D62, $1D65, $1D4E, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP +dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_O_TOP, !FSTILE_P_TOP, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP org $0CE24A ; <- 6624A -dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, $1D5C, $1D78, $1D79, $1D92, !FSTILE_SPACE, $1D5F, $1D72, $1D75, $1D5E, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM +dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_O_BOTTOM, !FSTILE_P_BOTTOM, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM ;CopyFile_Which: org $0CE2DB ; <- 662DB @@ -78,21 +116,21 @@ dw $0D90, $0D71, $0D5E, $0D7B, $0D5E, $0D96, !FSTILE_SPACE ;CopyFile_Execute: org $0CD13A ; <- 6513A -dw $1D4C, !FSTILE_SPACE, $1D68, !FSTILE_SPACE, $1D69, !FSTILE_SPACE, $1D82, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE org $0CD150 ; <- 65150 -dw $1D5C, !FSTILE_SPACE, $1D78, !FSTILE_SPACE, $1D79, !FSTILE_SPACE, $1D92, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE ;CopyFile_Cancel: org $0CE29A ; <- 6629A -dw $1D4C, !FSTILE_SPACE, $1D4A, !FSTILE_SPACE, $1D67, !FSTILE_SPACE, $1D4C, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_A_TOP, !FSTILE_SPACE, !FSTILE_N_TOP, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE org $0CE2BA ; <- 662BA -dw $1D5C, !FSTILE_SPACE, $1D5A, !FSTILE_SPACE, $1D77, !FSTILE_SPACE, $1D5C, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_A_BOTTOM, !FSTILE_SPACE, !FSTILE_N_BOTTOM, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Header: org $0CE002 ; <- 66002 -dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, $1D4D, $1D4E, $1D65, $1D4E, $1D6D, $1D4E, !FSTILE_SPACE, $1D4F, $1D62, $1D65, $1D4E, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP, !FSTILE_SPACE, !FSTILE_SPACE org $0CE028 ; <- 66028 -dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, $1D5D, $1D5E, $1D75, $1D5E, $1D7D, $1D5E, !FSTILE_SPACE, $1D5F, $1D72, $1D75, $1D5E, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Which: org $0CE04E ; <- 6604E @@ -102,13 +140,12 @@ dw $0D5D, $0D5E, $0D75, $0D5E, $0D7D, $0D5E, !FSTILE_SPACE, $0D90, $0D71, $0D72, ;KillFile_Execute: org $0CD328 ; <- 65328 -dw $1D4D, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D6D, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE +dw !FSTILE_D_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_T_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE org $0CD344 ; <- 65344 -dw $1D5D, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D7D, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE +dw !FSTILE_D_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_T_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE ;KillFile_Cancel: org $0CE0BA ; <- 660BA -dw $1D4C, !FSTILE_SPACE, $1D4A, !FSTILE_SPACE, $1D67, !FSTILE_SPACE, $1D4C, !FSTILE_SPACE, $1D4E, !FSTILE_SPACE, $1D65, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE +dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_A_TOP, !FSTILE_SPACE, !FSTILE_N_TOP, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE org $0CE0DA ; <- 660DA -dw $1D5C, !FSTILE_SPACE, $1D5A, !FSTILE_SPACE, $1D77, !FSTILE_SPACE, $1D5C, !FSTILE_SPACE, $1D5E, !FSTILE_SPACE, $1D75, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE - +dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_A_BOTTOM, !FSTILE_SPACE, !FSTILE_N_BOTTOM, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE diff --git a/hooks.asm b/hooks.asm index d177cd2..98a9989 100644 --- a/hooks.asm +++ b/hooks.asm @@ -82,8 +82,8 @@ LDA $C8 : EOR.b #$04 : STA $C8 : NOP #4 ; set cursor to only select first file org $0CCE0F ; < 64E0F - Bank0C.asm : 1880 (LDX $00 : INX #2 : CPX.w #$0006 : BCC .nextFile) NOP #9 ; don't draw the other two save files ;-------------------------------------------------------------------------------- -;org $0CD527 ; <- 65527 : Bank0C.asm : 2913 (LDA.w #$0004 : STA $02) [LDA.w #$0006 : STA $02] -;JSL.l DrawPlayerFile : NOP ; hijack hearts draw routine to draw a full inventory +org $0CD527 ; <- 65527 : Bank0C.asm : 2913 (LDA.w #$0004 : STA $02) [LDA.w #$0006 : STA $02] +JSL.l DrawPlayerFile : NOP ; hijack hearts draw routine to draw a full inventory org $0ccdd5 ; Bank0C.asm:1881 (LDX.w #$00FD) JSL.l AltBufferTable : NOP #8 ; Selection screen @@ -96,6 +96,68 @@ JML.l Validate_SRAM ;(Return via RTL. Original code JML'd to Intro_LoadSpriteSta org $0CCD57 ;<- 64D57 - Bank0C.asm : RTL ;Just in case anybody ever removes the previous hook ;-------------------------------------------------------------------------------- +org $00E55D ; <- 0655D - Bank00.asm : 5473 (LDA.w #$7000 : STA $2116) +LDA.w #$2000 ; Load file select screen graphics to VRAM word addres 0x2000 instead of 0x7000 +;-------------------------------------------------------------------------------- +org $00833A ; <- 0033A - Bank00.asm : 481 (LDA.w #$007F) +LDA.w #$0180 ; change which character is used as the blank character for the select screen +;-------------------------------------------------------------------------------- +org $0CD50C ; <- 6550C (Not in disassembly, would be in bank0c.asm if it were) Position table for Name and Hearts +;dw $0012, $0112, $0212 ; vanilla-ish positions of file names +;dw $0026, $0126, $0226 ; vanilla-ish positions of hearts names +dw $00C8, $014A, $01CA ; repositioned, only the first value matters +dw $0012, $0192, $0112 +org $0CD53B ; <- 6553B : Bank0c.asm : 2919 (ADD.w #$0010 : STA $102C, Y) [... : STA $1034, Y] +STA.w $1042, Y ; Make 2nd half of names line up properly +;org $0CD540 ; <- 65540 : Bank0c.asm : 2923 (INY #2) [INY #4] +;NOP #2 ; Remove space between name characters +org $0CD571 ; <- 65571 : Bank0c.asm : 2943 (LDA $04 : ADD.w #$002A : TAY) [... : ADD.w #$0032 : ...] +ADC.w #$0040 ;make Hearts line up properly +;-------------------------------------------------------------------------------- + +;================================================================================ +; Name Entry Screen +;-------------------------------------------------------------------------------- +org $0CD7BE ; <- 657BE : Bank0C.asm : 3353 (STA $7003D9, X) +JSL.l WriteBlanksToPlayerName +org $0CDB11 ; <- 65B11 : Bank0C.asm : 3605 (LDA $00 : AND.w #$FFF0 : ASL A : ORA $02 : STA $7003D9, X) +JSL.l WriteCharacterToPlayerName +org $0CDCA9 ; <- 65CA9 : Bank0C.asm : 3853 (LDA $7003D9, X) +JSL.l ReadCharacterFromPlayerName +org $0CDC90 ; <- 65C90 : Bank0C.asm : 3847 (ORA $DD24, Y) [ORA $DC82, Y] +JSL.l GetCharacterPosition +org $0CDA79 ; <- 65A79 : Bank0C.asm : 3518 (LDA $0CDA13, X : STA $0800, Y) [LDA $0CD98f, X : ...] +LDA.l HeartCursorPositions, X +org $0CDAEB ; <- 65AEB : Bank0C.asm : 3571-3575,3581-3587 (...) [LDA $0B12 : AND #$03] +; JP here is different. Indicated line number implement the US version of the same functionality +JSL.l WrapCharacterPosition : NOP +;-------------------------------------------------------------------------------- +org $0CE43A ; No assembly source. Makes name entry box wider +db $2C +org $0CE448 +db $2D, $40, $1E +org $0CE45C +db $4D, $40, $1E +org $0CE462 +db $6D, $40, $1E +org $0CE468 +db $8D, $40, $1E +org $0CE46E +db $AD, $40, $1E +;-------------------------------------------------------------------------------- +org $0CE41A ; No assembly source. +; Fix name screen background to use the not-overwritten copy of its graphics +db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 +db $09 : SKIP 5 : db $49 : SKIP 1 : db $49 : SKIP 1 : db $49 : SKIP 1 : db $49 : SKIP 1 +db $c9 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 +db $09 : SKIP 1 : db $89 : SKIP 4 : db $80, $09 : SKIP 4 : db $80, $09 : SKIP 4 +db $80, $09 : SKIP 5 : db $89 : SKIP 5 +db $49 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $49 : SKIP 5 : db $09 : SKIP 5 +db $C9 : SKIP 5 : db $89 : SKIP 5 : db $89 : SKIP 5 : db $09 : SKIP 1 : db $09 : SKIP 1 +db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 +db $09 : SKIP 5 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 +db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 5 : db $05 +;-------------------------------------------------------------------------------- ;================================================================================ ; Damage table Relocation from WRAM @@ -1566,9 +1628,8 @@ dw $05AC, $04FC, $0001, $0027, $00F0 ; Zelda in the water room org $00894A ; <- 94A PHB : JSL.l DarkWorldSaveFix ;-------------------------------------------------------------------------------- -org $0CCF05 ; <- 64F05 +org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile) JSL.l OnFileLoad -NOP #7 ;-------------------------------------------------------------------------------- org $09F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA) JSL.l OnPlayerDead diff --git a/playername.asm b/playername.asm new file mode 100644 index 0000000..68dbb8f --- /dev/null +++ b/playername.asm @@ -0,0 +1,54 @@ +; Note shortly before this we have a blank-the-sram slot code that we might want to hook +WriteBlanksToPlayerName: + STA.l !ExtendedPlayerName + STA.l !ExtendedPlayerName+2 + STA.l !ExtendedPlayerName+4 + STA.l !ExtendedPlayerName+6 + + STA.l !ExtendedPlayerName+8 + STA.l !ExtendedPlayerName+10 + STA.l !ExtendedPlayerName+12 + STA.l !ExtendedPlayerName+14 + + STA.l $7003D9, X ;What we wrote over (clear first byte of vanilla name slot) +RTL + +WriteCharacterToPlayerName: + CPX.w #$0008 : !BLT .orig + STA !ExtendedPlayerName-8, X + .orig + STA $7003D9, X ;what we wrote over +RTL + +ReadCharacterFromPlayerName: ;Only for use on Name Screen + CPX.w #$0008 : !BLT .orig + LDA !ExtendedPlayerName-8, X + .orig + LDA $7003D9, X ;what we wrote over +RTL + +GetCharacterPosition: +PHB : PHK : PLB + ORA.w CharacterPositions, Y + XBA +PLB +RTL + +WrapCharacterPosition: + LDA $0B12 : BPL + + LDA.b #$0B + + + CMP.b #$0C : !BLT + + LDA.b #$00 + + + STA $0B12 +RTL + +CharacterPositions: +dw $006E, $006F, $0070, $0071 +dw $0073, $0074, $0075, $0076 +dw $0078, $0079, $007a, $007b +HeartCursorPositions: +db $70, $78, $80, $88 +db $98, $a0, $a8, $b0 +db $c0, $c8, $d0, $d8