Implement password screen
This commit is contained in:
@@ -172,6 +172,7 @@ incsrc inverted.asm
|
||||
incsrc invertedmaps.asm
|
||||
incsrc newhud.asm
|
||||
incsrc compasses.asm
|
||||
incsrc password.asm
|
||||
warnpc $A58000
|
||||
|
||||
;org $228000 ; contrib area
|
||||
|
||||
@@ -32,8 +32,6 @@ RetrieveValueFromEncryptedTable:
|
||||
LDA [$00], Y : STA.l !CryptoBuffer+4 : INY #2
|
||||
LDA [$00], Y : STA.l !CryptoBuffer+6
|
||||
|
||||
; TODO: copy key into crypto Memory
|
||||
|
||||
LDA.w #$0002 : STA $04 ;set block size
|
||||
|
||||
JSL.l XXTEA_Decode
|
||||
|
||||
128
fileselect.asm
128
fileselect.asm
@@ -1,4 +1,5 @@
|
||||
!ExtendedPlayerName = "$700500"
|
||||
!ValidKeyLoaded = "$7F509E"
|
||||
|
||||
;FS prefix means file_select, since these defines and macros are specific to this screen
|
||||
!FS_INVENTORY_SWAP = "$70038C"
|
||||
@@ -118,7 +119,7 @@ DrawPlayerFile:
|
||||
|
||||
; re-enable Stripe Image format upload on this frame
|
||||
; Value loaded must match what gets set by AltBufferTable
|
||||
LDA.w #$2161 : STA $1002
|
||||
LDA.w #$0161 : STA $1002
|
||||
BRA .done
|
||||
.normal
|
||||
STZ $0710 ; ensure core animated tile updates are not suppressed
|
||||
@@ -136,22 +137,22 @@ DrawPlayerFileShared:
|
||||
REP #$20 ; restore 16 bit accumulator
|
||||
|
||||
LDA !ExtendedPlayerName+$00 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(6,3)
|
||||
LDA !ExtendedPlayerName+$02 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(6,5)
|
||||
LDA !ExtendedPlayerName+$02 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(6,6)
|
||||
LDA !ExtendedPlayerName+$04 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(6,7)
|
||||
LDA !ExtendedPlayerName+$06 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(6,9)
|
||||
%fs_draw8x16(6,8)
|
||||
|
||||
LDA !ExtendedPlayerName+$08 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(9,3)
|
||||
LDA !ExtendedPlayerName+$0A : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(9,5)
|
||||
LDA !ExtendedPlayerName+$0A : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(9,6)
|
||||
LDA !ExtendedPlayerName+$0C : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(9,7)
|
||||
LDA !ExtendedPlayerName+$0E : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(9,9)
|
||||
%fs_draw8x16(9,8)
|
||||
|
||||
JSR FileSelectDrawHudBar
|
||||
|
||||
@@ -427,6 +428,7 @@ DrawPlayerFileShared:
|
||||
LDA.w #$0287|!FS_COLOR_GRAY
|
||||
++ : %fs_draw16x8(13,24)
|
||||
|
||||
|
||||
PLB : PLY : PLX
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -590,7 +592,7 @@ AltBufferTable:
|
||||
LDA.b #$02 : STA $210c ; Have Screen 3 use same tile area as screens 1
|
||||
.noScreen3Change
|
||||
REP #$20
|
||||
LDX.w #$0380 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header)
|
||||
LDX.w #$0400 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header)
|
||||
;fill with the blank character
|
||||
LDA.w #$0188
|
||||
-
|
||||
@@ -598,26 +600,29 @@ AltBufferTable:
|
||||
DEX : DEX : BNE -
|
||||
|
||||
; set vram offsets
|
||||
LDA.w #$2161 : STA $1002 ;file 1 top row
|
||||
LDA.w #$4161 : STA $1042 ;file 1 bottom row
|
||||
LDA.w #$0161 : STA $1002 ;file 1 top row
|
||||
LDA.w #$2161 : STA $1042 ;file 1 bottom row
|
||||
|
||||
LDA.w #$6161 : STA $1082 ;gap row top
|
||||
LDA.w #$8161 : STA $10C2 ;gap row bottom
|
||||
LDA.w #$4161 : STA $1082 ;gap row top
|
||||
LDA.w #$6161 : 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 #$8161 : STA $1102 ;file 2 top row
|
||||
LDA.w #$A161 : STA $1142 ;file 2 bottom row
|
||||
|
||||
LDA.w #$E161 : STA $1182 ;gap row top
|
||||
LDA.w #$0162 : STA $11c2 ;gap row bottom
|
||||
LDA.w #$C161 : STA $1182 ;gap row top
|
||||
LDA.w #$E161 : 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 #$0162 : STA $1202 ;file 3 top row
|
||||
LDA.w #$2162 : STA $1242 ;file 3 bottom row
|
||||
|
||||
LDA.w #$6162 : STA $1282 ;extra gap row top
|
||||
LDA.w #$8162 : STA $12c2 ;extra gap row bottom
|
||||
LDA.w #$4162 : STA $1282 ;extra gap row top
|
||||
LDA.w #$6162 : STA $12c2 ;extra gap row bottom
|
||||
|
||||
LDA.w #$A162 : STA $1302 ;extra gap row top
|
||||
LDA.w #$C162 : STA $1342 ;extra gap row bottom
|
||||
LDA.w #$8162 : STA $1302 ;extra gap row top
|
||||
LDA.w #$A162 : STA $1342 ;extra gap row bottom
|
||||
|
||||
LDA.w #$C162 : STA $1382 ;extra gap row top
|
||||
LDA.w #$E162 : STA $13C2 ;extra gap row bottom
|
||||
|
||||
; set lengths
|
||||
LDA.w #$3B00
|
||||
@@ -635,9 +640,25 @@ AltBufferTable:
|
||||
STA $12c4 ;extra gap row bottom
|
||||
STA $1304 ;extra gap row top
|
||||
STA $1344 ;extra gap row bottom
|
||||
STA $1384 ;extra gap row top
|
||||
STA $13c4 ;extra gap row bottom
|
||||
|
||||
; Set last packet marker
|
||||
LDA.w #$00FF : STA $1382
|
||||
LDA.w #$00FF : STA $1402
|
||||
|
||||
; Draw Unlock option if applicable
|
||||
LDA $10 : AND.w #$00FF : CMP.w #$0001 : BNE +
|
||||
LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE +
|
||||
PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP
|
||||
AND.w #$00FF : BNE +
|
||||
LDA.w #!FSTILE_U_TOP : %fs_draw8x16(14,5)
|
||||
LDA.w #!FSTILE_N_TOP : %fs_draw8x16(14,6)
|
||||
LDA.w #!FSTILE_L_TOP : %fs_draw8x16(14,7)
|
||||
LDA.w #!FSTILE_O_TOP : %fs_draw8x16(14,8)
|
||||
LDA.w #!FSTILE_C_TOP : %fs_draw8x16(14,9)
|
||||
LDA.w #!FSTILE_K_TOP : %fs_draw8x16(14,10)
|
||||
+
|
||||
|
||||
SEP #$20
|
||||
|
||||
RTL
|
||||
@@ -666,6 +687,10 @@ AltBufferTable_credits:
|
||||
|
||||
LDA.w #$E169 : STA $1302 ;extra gap row top
|
||||
LDA.w #$016A : STA $1342 ;extra gap row bottom
|
||||
|
||||
LDA.w #$216A : STA $1382 ;extra gap row top
|
||||
LDA.w #$416A : STA $13C2 ;extra gap row bottom
|
||||
|
||||
SEP #$20
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -772,13 +797,13 @@ DrawPlayerFile_credits:
|
||||
REP #$20 ; set 16 bit accumulator
|
||||
|
||||
LDA $7003D9 : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(3,3)
|
||||
LDA $7003DB : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(3,5)
|
||||
LDA $7003DB : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(3,6)
|
||||
LDA $7003DD : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(3,7)
|
||||
LDA $7003DF : ORA.w #!FS_COLOR_BW
|
||||
%fs_draw8x16(3,9)
|
||||
%fs_draw8x16(3,8)
|
||||
|
||||
LDA $70036C : AND.w #$00FF : LSR #3 : STA $02
|
||||
%fs_LDY_screenpos(0,20)
|
||||
@@ -799,3 +824,54 @@ DrawPlayerFile_credits:
|
||||
JSR DrawPlayerFileShared
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FSCursorUp:
|
||||
LDA $C8 : BNE +
|
||||
LDA #$04 ; up from file becomes delete
|
||||
BRA .done
|
||||
+ : CMP #$03 : BNE +
|
||||
LDA #$00 ; up from unlock is the file
|
||||
BRA .done
|
||||
+
|
||||
LDA.l IsEncrypted : CMP.b #$02 : BNE +
|
||||
LDA.l !ValidKeyLoaded : BNE +
|
||||
LDA #$03 ; up from delete is unlock for password protected seeds
|
||||
BRA .done
|
||||
+
|
||||
LDA #$00 ;otherwise up from delete is file
|
||||
.done
|
||||
STA $C8
|
||||
RTL
|
||||
FSCursorDown:
|
||||
LDA $C8 : BNE +
|
||||
LDA.l IsEncrypted : CMP.b #$02 : BNE ++
|
||||
LDA.l !ValidKeyLoaded : BNE ++
|
||||
LDA #$03 ; down from file is unlock for password protected seeds
|
||||
BRA .done
|
||||
++
|
||||
LDA #$04 ;otherwise down from file is delete
|
||||
BRA .done
|
||||
+ : CMP #$03 : BNE +
|
||||
LDA #$04 ; down from unlock is delete
|
||||
BRA .done
|
||||
+
|
||||
LDA #$00 ; down from delete is file
|
||||
.done
|
||||
STA $C8
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FSSelectFile:
|
||||
LDA.l IsEncrypted : CMP.b #$02 : BNE .normal
|
||||
STZ $012E ; temporarily cancel file screen selection sound
|
||||
PHX : PHY
|
||||
JSL ValidatePassword : BEQ .must_unlock
|
||||
PLY : PLX
|
||||
LDA.b #$2C : STA $012E ;file screen selection sound
|
||||
.normal
|
||||
LDA.b #$F1 : STA $012C
|
||||
JML FSSelectFile_continue
|
||||
.must_unlock
|
||||
PLY : PLX
|
||||
LDA #$03 : STA $C8 ;set cursor to unlock
|
||||
LDA.b #$3C : STA $012E ; play error sound
|
||||
JML FSSelectFile_return
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Binary file not shown.
@@ -55,10 +55,10 @@ LoadAlphabetTilemap:
|
||||
AND.w #$001F ; mask to alphabet of 32
|
||||
|
||||
ASL #3 : PHY : TAY
|
||||
LDA.w HashAlphabetTiles,Y : STA !BIGRAM+28, X
|
||||
LDA.w HashAlphabetTiles+2,Y : STA !BIGRAM+28+2, X
|
||||
LDA.w HashAlphabetTiles+4,Y : STA !BIGRAM+28+64, X
|
||||
LDA.w HashAlphabetTiles+6,Y : STA !BIGRAM+28+64+2, X
|
||||
LDA.w HashAlphabetTiles,Y : STA !BIGRAM+24, X
|
||||
LDA.w HashAlphabetTiles+2,Y : STA !BIGRAM+24+2, X
|
||||
LDA.w HashAlphabetTiles+4,Y : STA !BIGRAM+24+64, X
|
||||
LDA.w HashAlphabetTiles+6,Y : STA !BIGRAM+24+64+2, X
|
||||
PLY : INX #6 : INY
|
||||
CPX #25 : !BLT -
|
||||
|
||||
@@ -178,37 +178,37 @@ dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW, #$023E|!FS_COLOR_
|
||||
;--------------------------------------------------------------------------------
|
||||
FileSelect_PlayerSelectText_Top:
|
||||
;db $60, $62, $00, $37
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_BRACKET_OPEN_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_O_TOP
|
||||
dw !FSTILE_D_TOP
|
||||
dw !FSTILE_E_TOP
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, $05A0, $05A1
|
||||
dw $05A0, $05A1
|
||||
dw !FSTILE_SPACE, $05A4, $05A5
|
||||
dw !FSTILE_SPACE, $05A8, $05A9
|
||||
dw !FSTILE_SPACE, $05AC, $05AD
|
||||
dw !FSTILE_SPACE, $05B0, $05B1
|
||||
dw !FSTILE_SPACE
|
||||
dw !FSTILE_BRACKET_CLOSE_TOP
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
;--------------------------------------------------------------------------------
|
||||
FileSelect_PlayerSelectText_Bottom:
|
||||
;db $60, $82, $00, $37
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_BRACKET_OPEN_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_O_BOTTOM
|
||||
dw !FSTILE_D_BOTTOM
|
||||
dw !FSTILE_E_BOTTOM
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, $05A2, $05A3
|
||||
dw $05A2, $05A3
|
||||
dw !FSTILE_SPACE, $05A6, $05A7
|
||||
dw !FSTILE_SPACE, $05AA, $05AB
|
||||
dw !FSTILE_SPACE, $05AE, $05AF
|
||||
dw !FSTILE_SPACE, $05B2, $05B3
|
||||
dw !FSTILE_SPACE
|
||||
dw !FSTILE_BRACKET_CLOSE_BOTTOM
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE
|
||||
dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
!FSTILE_T_TOP = "$1D6D"
|
||||
!FSTILE_T_BOTTOM = "$1D7D"
|
||||
|
||||
!FSTILE_U_TOP = "$1D6E"
|
||||
!FSTILE_U_BOTTOM = "$1D7E"
|
||||
|
||||
!FSTILE_Y_TOP = "$1D82"
|
||||
!FSTILE_Y_BOTTOM = "$1D92"
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -69,14 +72,16 @@ dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE
|
||||
org $0CDE94 ; <- 65E94
|
||||
FileSelect_KillFile_Top:
|
||||
db $63, $25, $00, $19
|
||||
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_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_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, !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 !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_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_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, !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
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -134,9 +139,11 @@ dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTO
|
||||
|
||||
;KillFile_Which:
|
||||
org $0CE04E ; <- 6604E
|
||||
dw $0D4D, $0D4E, $0D65, $0D4E, $0D6D, $0D4E, !FSTILE_SPACE, $0D80, $0D61, $0D62, $0D4C, $0D61, !FSTILE_SPACE, $0D4F, $0D62, $0D65, $0D4E, $0D86, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !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, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
;dw $0D4D, $0D4E, $0D65, $0D4E, $0D6D, $0D4E, !FSTILE_SPACE, $0D80, $0D61, $0D62, $0D4C, $0D61, !FSTILE_SPACE, $0D4F, $0D62, $0D65, $0D4E, $0D86, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
org $0CE084 ; <- 66084
|
||||
dw $0D5D, $0D5E, $0D75, $0D5E, $0D7D, $0D5E, !FSTILE_SPACE, $0D90, $0D71, $0D72, $0D5C, $0D71, !FSTILE_SPACE, $0D5F, $0D72, $0D75, $0D5E, $0D96, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !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, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
;dw $0D5D, $0D5E, $0D75, $0D5E, $0D7D, $0D5E, !FSTILE_SPACE, $0D90, $0D71, $0D72, $0D5C, $0D71, !FSTILE_SPACE, $0D5F, $0D72, $0D75, $0D5E, $0D96, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
|
||||
;KillFile_Execute:
|
||||
org $0CD328 ; <- 65328
|
||||
@@ -146,6 +153,6 @@ dw !FSTILE_D_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_B
|
||||
|
||||
;KillFile_Cancel:
|
||||
org $0CE0BA ; <- 660BA
|
||||
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
|
||||
dw !FSTILE_C_TOP, !FSTILE_A_TOP, !FSTILE_N_TOP, !FSTILE_C_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
org $0CE0DA ; <- 660DA
|
||||
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
|
||||
dw !FSTILE_C_BOTTOM, !FSTILE_A_BOTTOM, !FSTILE_N_BOTTOM, !FSTILE_C_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE
|
||||
|
||||
41
hooks.asm
41
hooks.asm
@@ -79,12 +79,34 @@ org $0CCDA5 ; <- Bank0C.asm : 1650 (JSL Palette_SelectScreen)
|
||||
JSL.l SetFileSelectPalette
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0CCE41 ; <- 64E41 - Bank0C.asm : 1907 (DEC $C8 : BPL .done)
|
||||
LDA $C8 : EOR.b #$04 : STA $C8 : NOP #2 ; set cursor to only select first file and erase
|
||||
JSL FSCursorUp : NOP #4 ; set cursor to only select first file and erase
|
||||
org $0CCE50 ; <- 64E50 - Bank0C.asm : 1918 (INC $C8)
|
||||
LDA $C8 : EOR.b #$04 : STA $C8 : NOP #4 ; set cursor to only select first file and erase
|
||||
JSL FSCursorDown : NOP #6 ; set cursor to only select first file and erase
|
||||
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 $0CCE71 ; <- Bank0C.asm : 1941 (LDA.b #$F1 : STA $012C)
|
||||
JML.l FSSelectFile : NOP
|
||||
FSSelectFile_continue:
|
||||
org $0CCEB1 ; <- Bank0C.asm : 2001 (.return)
|
||||
FSSelectFile_return:
|
||||
;--------------------------------------------------------------------------------
|
||||
; Replace copy file module with a fully custom module
|
||||
org $008061+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile)
|
||||
db Module_Password
|
||||
org $00807D+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile)
|
||||
db Module_Password>>8
|
||||
org $008099+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile)
|
||||
db Module_Password>>16
|
||||
|
||||
; Hook up password screen tilemap
|
||||
org $00937a+$07
|
||||
db Password_Tilemap
|
||||
org $009383+$07
|
||||
db Password_Tilemap>>8
|
||||
org $00938c+$07
|
||||
db Password_Tilemap>>16
|
||||
;--------------------------------------------------------------------------------
|
||||
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
|
||||
|
||||
@@ -108,15 +130,24 @@ LDA.w #$0180 ; change which character is used as the blank character for the sel
|
||||
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 $00CC, $014A, $01CA ; repositioned, only the first value matters
|
||||
dw $002A, $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 $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
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0CCC67 ; <- (Not in disassembly, would be in bank0c.asm if it were) Y position table for File select fairy
|
||||
db $42, $00, $00, $AF, $C7
|
||||
org $0CD308 ; <- (Not in disassembly, would be in bank0c.asm if it were) Y position table for File Delete fairy
|
||||
db $42, $00, $00, $C7
|
||||
org $0CD57E ; <- Y position table for File select link sprite
|
||||
db $3d
|
||||
org $0CD6BD ; <- Y position table for Death Counts
|
||||
db $51
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
; Name Entry Screen
|
||||
|
||||
608
password.asm
Normal file
608
password.asm
Normal file
@@ -0,0 +1,608 @@
|
||||
!PASSWORD_CODE_POSITION = "$C8"
|
||||
!PASSWORD_SELECTION_POSITION = "$C9"
|
||||
!PASSWORD_SRAM = "$700510"
|
||||
|
||||
|
||||
Module_Password:
|
||||
LDA $11
|
||||
|
||||
JSL.l UseImplicitRegIndexedLongJumpTable
|
||||
|
||||
dl Password_BeginInit ; 0
|
||||
dl Password_EndInit ; 1
|
||||
dl Password_Main ; 2
|
||||
dl Password_Check ; 3
|
||||
dl Password_Return ; 4
|
||||
|
||||
Password_BeginInit:
|
||||
LDA.b #$80 : STA $0710 ;skip animated sprite updates in NMI
|
||||
|
||||
JSL EnableForceBlank
|
||||
JSL Vram_EraseTilemaps_triforce
|
||||
;JSL Palette_SelectScreen
|
||||
|
||||
JSL LoadCustomHudPalette ; replace the 2bpp palettes, and trigger upload
|
||||
LDA.b #$07 : STA $14 ; have NMI load up the initial tilemap from Password_Tilemap
|
||||
|
||||
INC $11
|
||||
RTL
|
||||
|
||||
Password_EndInit:
|
||||
JSR LoadPasswordStripeTemplate
|
||||
|
||||
;reset the variables used by this screen
|
||||
STZ !PASSWORD_CODE_POSITION
|
||||
STZ !PASSWORD_SELECTION_POSITION
|
||||
|
||||
JSL ValidatePassword : BNE +
|
||||
; zero out password if not valid
|
||||
LDX.b #$0F
|
||||
LDA.b #$00
|
||||
-
|
||||
STA.l !PASSWORD_SRAM, X
|
||||
DEX : BPL -
|
||||
+
|
||||
|
||||
LDA.b #$0F : STA $13
|
||||
INC $11
|
||||
RTL
|
||||
|
||||
Password_Main:
|
||||
PHB
|
||||
PHK : PLB
|
||||
|
||||
JSR PasswordEraseOldCursors
|
||||
|
||||
; handle joypad input
|
||||
LDA $F6 : AND.b #$10 : BEQ + ; R Button
|
||||
JSR PasswordMoveCursorRight
|
||||
+
|
||||
LDA $F6 : AND.b #$20 : BEQ + ; L Button
|
||||
JSR PasswordMoveCursorLeft
|
||||
+
|
||||
LDA $F4 : AND.b #$01 : BEQ + ; right
|
||||
LDA !PASSWORD_SELECTION_POSITION : INC A : CMP.b #$24 : !BLT ++
|
||||
!SUB.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
+
|
||||
LDA $F4 : AND.b #$02 : BEQ + ; left
|
||||
LDA !PASSWORD_SELECTION_POSITION : DEC A : BPL ++
|
||||
!ADD.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
+
|
||||
LDA $F4 : AND.b #$04 : BEQ + ; down
|
||||
LDA !PASSWORD_SELECTION_POSITION : !ADD.b #$09 : CMP.b #$24 : !BLT ++
|
||||
!SUB.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
+
|
||||
LDA $F4 : AND.b #$08 : BEQ + ; up
|
||||
LDA !PASSWORD_SELECTION_POSITION : !SUB.b #$09 : BPL ++
|
||||
!ADD.b #$24
|
||||
++
|
||||
STA !PASSWORD_SELECTION_POSITION
|
||||
LDA.b #$20 : STA $012F
|
||||
+
|
||||
LDA $F4 : ORA $F6 : AND.b #$C0 : BEQ + ; face button
|
||||
LDX !PASSWORD_SELECTION_POSITION
|
||||
LDA .selectionValues, X : BPL ++
|
||||
CMP #$F0 : BNE +++
|
||||
INC $11
|
||||
BRA .endOfButtonChecks
|
||||
+++ : CMP #$F1 : BNE +++
|
||||
JSR PasswordMoveCursorLeft
|
||||
BRA +
|
||||
+++ : CMP #$F2 : BNE +++
|
||||
JSR PasswordMoveCursorRight
|
||||
BRA +
|
||||
+++ : CMP #$F3 : BNE +++
|
||||
INC $11 : INC $11 ; skip to return submodule
|
||||
LDA.b #$2C : STA $012E ;file screen selection sound
|
||||
BRA .endOfButtonChecks
|
||||
+++
|
||||
BRA +
|
||||
++
|
||||
LDX !PASSWORD_CODE_POSITION
|
||||
STA !PASSWORD_SRAM,X
|
||||
TXA : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
BNE ++
|
||||
STZ $012E
|
||||
INC $11
|
||||
BRA .endOfButtonChecks
|
||||
++
|
||||
LDA.b #$2B : STA $012E
|
||||
+
|
||||
LDA $F4 : AND.b #$10 : BEQ + ; start
|
||||
INC $11
|
||||
+
|
||||
.endOfButtonChecks
|
||||
|
||||
JSR UpdatePasswordTiles
|
||||
|
||||
JSR PasswordSetNewCursors
|
||||
LDA.b #$01 : STA $14
|
||||
PLB
|
||||
RTL
|
||||
.selectionValues
|
||||
db $01, $02, $03, $04, $05, $06, $07, $08, $F0
|
||||
db $09, $0A, $0B, $0C, $0D, $0E, $0F, $10, $F1
|
||||
db $11, $12, $13, $14, $15, $16, $17, $18, $F2
|
||||
db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $F3
|
||||
|
||||
Password_Check:
|
||||
JSL.l ValidatePassword : BNE .correct
|
||||
LDA.b #$3C : STA $012E ; error
|
||||
DEC $11
|
||||
RTL
|
||||
.correct
|
||||
LDA.b #$1B : STA $012F ; solved puzzle sound
|
||||
INC $11
|
||||
RTL
|
||||
|
||||
Password_Return:
|
||||
LDA.b #$01 : STA $10 ; select screen
|
||||
LDA.b #$01 : STA $11 ; Skip the first submodule
|
||||
STZ $B0
|
||||
STZ $0B9D ; Reset file screen cursor pre-selection
|
||||
STZ $C8
|
||||
STZ $C9
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Exported Function
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
ValidatePassword:
|
||||
; returns 1/Not Z for correct, 0/Z for incorrect
|
||||
; REQUIRES: 8 bit both
|
||||
; has a deliberate side effect of key being loaded into RAM if password is correct.
|
||||
PHX : PHY
|
||||
|
||||
;check for incomplete password
|
||||
LDX #$0F
|
||||
-
|
||||
LDA.l !PASSWORD_SRAM, X : BNE +
|
||||
BRL .incorrect
|
||||
+
|
||||
DEX : BPL -
|
||||
|
||||
REP #$20 ; 16 bit Accumulator
|
||||
|
||||
; Clear out any existing encryption key
|
||||
LDX.b #$0E
|
||||
LDA.w #$0000
|
||||
- : STA.l !keyBase, X : DEX #2 : BPL -
|
||||
|
||||
JSR PasswordToKey
|
||||
|
||||
|
||||
LDA.l StaticDecryptionKey+$0A : STA.l !keyBase+$0A
|
||||
LDA.l StaticDecryptionKey+$0C : STA.l !keyBase+$0C
|
||||
LDA.l StaticDecryptionKey+$0E : STA.l !keyBase+$0E
|
||||
|
||||
LDA.l KnownEncryptedValue : STA.l !CryptoBuffer
|
||||
LDA.l KnownEncryptedValue+2 : STA.l !CryptoBuffer+2
|
||||
LDA.l KnownEncryptedValue+4 : STA.l !CryptoBuffer+4
|
||||
LDA.l KnownEncryptedValue+6 : STA.l !CryptoBuffer+6
|
||||
|
||||
LDA.w #$0002 : STA $04 ;set block size
|
||||
|
||||
JSL.l XXTEA_Decode
|
||||
|
||||
SEP #$20 ; 8 bit accumulator
|
||||
|
||||
LDA !CryptoBuffer+0 : CMP #$31 : BNE .incorrect
|
||||
LDA !CryptoBuffer+1 : CMP #$41 : BNE .incorrect
|
||||
LDA !CryptoBuffer+2 : CMP #$59 : BNE .incorrect
|
||||
LDA !CryptoBuffer+3 : CMP #$26 : BNE .incorrect
|
||||
LDA !CryptoBuffer+4 : CMP #$53 : BNE .incorrect
|
||||
LDA !CryptoBuffer+5 : CMP #$58 : BNE .incorrect
|
||||
LDA !CryptoBuffer+6 : CMP #$97 : BNE .incorrect
|
||||
LDA !CryptoBuffer+7 : CMP #$93 : BNE .incorrect
|
||||
|
||||
;trial decrypt the known plaintext, and verify if result is correct
|
||||
|
||||
.correct
|
||||
PLY : PLX
|
||||
|
||||
LDA #$01 : STA.l !ValidKeyLoaded
|
||||
RTL
|
||||
.incorrect
|
||||
PLY : PLX
|
||||
LDA #$00
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Local Helper functions
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
PasswordToKey:
|
||||
; $00 input offset
|
||||
; $02 output offset
|
||||
; $04 shift amount
|
||||
LDA.w #$0000 : STA $00 : STA $02
|
||||
LDA.w #$000B : STA $04
|
||||
-
|
||||
LDX $00
|
||||
LDA !PASSWORD_SRAM, X : DEC : AND #$001F
|
||||
LDY $04
|
||||
-- : BEQ + : ASL : DEY : BRA -- : + ; Shift left by Y
|
||||
XBA
|
||||
LDX $02
|
||||
ORA !keyBase, X
|
||||
STA !keyBase, X
|
||||
|
||||
LDA $04 : !SUB.w #$0005 : BPL +
|
||||
!ADD.w #$0008
|
||||
INC $02
|
||||
+ : STA $04
|
||||
|
||||
LDA $00 : INC : STA $00 : CMP.w #$0010 : !BLT -
|
||||
RTS
|
||||
|
||||
LoadPasswordStripeTemplate:
|
||||
LDA $4300 : PHA : LDA $4301 : PHA : LDA $4302 : PHA ; preserve DMA parameters
|
||||
LDA $4303 : PHA : LDA $4304 : PHA : LDA $4305 : PHA ; preserve DMA parameters
|
||||
LDA $4306 : PHA ; preserve DMA parameters
|
||||
|
||||
LDA.b #$00 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode
|
||||
LDA.b #$80 : STA $4301 ; set bus B destination to WRAM register
|
||||
|
||||
LDA.b #$02 : STA $2181 ; set WRAM register source address
|
||||
LDA.b #$10 : STA $2182
|
||||
LDA.b #$7E : STA $2183
|
||||
|
||||
LDA.b #Password_StripeImageTemplate : STA $4302 ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>8 : STA $4303 ; set bus A source address
|
||||
LDA.b #Password_StripeImageTemplate>>16 : STA $4304 ; set bus A source bank
|
||||
|
||||
LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate
|
||||
STA $4305 ;
|
||||
LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate>>8
|
||||
STA $4306 ; set transfer size
|
||||
|
||||
LDA #$01 : STA $420B ; begin DMA transfer
|
||||
|
||||
PLA : STA $4306 : PLA : STA $4305 : PLA : STA $4304 ; restore DMA parameters
|
||||
PLA : STA $4303 : PLA : STA $4302 : PLA : STA $4301 ; restore DMA parameters
|
||||
PLA : STA $4300 ; restore DMA parameters
|
||||
RTS
|
||||
|
||||
!PASSWORD_INPUT_START_X = $03
|
||||
!PASSWORD_INPUT_START_Y = $0D
|
||||
|
||||
!PASSWORD_DISPLAY_START_X = $04
|
||||
!PASSWORD_DISPLAY_START_Y = $04
|
||||
|
||||
PasswordEraseOldCursors:
|
||||
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
|
||||
;Code Cursor
|
||||
LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA .code_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA $1002+Password_StripeImageTemplate_CodeCursorErase-Password_StripeImageTemplate
|
||||
|
||||
;selection cursor
|
||||
LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA .selection_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA $1002+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0020 : XBA
|
||||
STA $1002+$0C+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0003 : XBA
|
||||
STA $1002+$14+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0040-$0003 : XBA
|
||||
STA $1002+$1C+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate
|
||||
|
||||
SEP #$20 ; restore 8-bit accumulator
|
||||
RTS
|
||||
.code_offsets
|
||||
dw $0040, $0043, $0046, $0049, $004C, $004F, $0052, $0055
|
||||
dw $00A0, $00A3, $00A6, $00A9, $00AC, $00AF, $00B2, $00B5
|
||||
.selection_offsets
|
||||
dw $FFDF, $FFE2, $FFE5, $FFE8, $FFEB, $FFEE, $FFF1, $FFF4, $FFF7
|
||||
dw $003F, $0042, $0045, $0048, $004B, $004E, $0051, $0054, $0057
|
||||
dw $009F, $00A2, $00A5, $00A8, $00AB, $00AE, $00B1, $00B4, $00B7
|
||||
dw $00FF, $0102, $0105, $0108, $010B, $010E, $0111, $0114, $0117
|
||||
|
||||
PasswordSetNewCursors:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
;Code Cursor
|
||||
LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA PasswordEraseOldCursors_code_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA $1002+Password_StripeImageTemplate_CodeCursorDraw-Password_StripeImageTemplate
|
||||
|
||||
;Selection cursor
|
||||
LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX
|
||||
LDA PasswordEraseOldCursors_selection_offsets, X
|
||||
!ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000
|
||||
XBA ; because big endian is needed
|
||||
STA $1002+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0020 : XBA
|
||||
STA $1002+$0C+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0003 : XBA
|
||||
STA $1002+$14+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate
|
||||
XBA : !ADD.w #$0040-$0003 : XBA
|
||||
STA $1002+$1C+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate
|
||||
|
||||
SEP #$20 ; restore 8-bit accumulator
|
||||
RTS
|
||||
|
||||
UpdatePasswordTiles:
|
||||
REP #$30 ; set 16-bit both
|
||||
LDX.w #$000F
|
||||
-
|
||||
LDA.l !PASSWORD_SRAM, X : AND.w #$00FF : TXY
|
||||
ASL #3 : STA $00
|
||||
TYA : ASL #4 : STA $03
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank, X
|
||||
LDX $03 : STA $1006, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$02, X
|
||||
LDX $03 : STA $1008, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$04, X
|
||||
LDX $03 : STA $100E, X
|
||||
LDX $00 : LDA.l HashAlphabetTilesWithBlank+$06, X
|
||||
LDX $03 : STA $1010, X
|
||||
|
||||
TYX : DEX : BMI + : BRA -
|
||||
+
|
||||
SEP #$30 ; restore 8-bit both
|
||||
RTS
|
||||
|
||||
PasswordMoveCursorRight:
|
||||
; return new code position
|
||||
LDA.b #$2B : STA $012E
|
||||
LDA !PASSWORD_CODE_POSITION : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
RTS
|
||||
PasswordMoveCursorLeft:
|
||||
; return new code position
|
||||
LDA.b #$2B : STA $012E
|
||||
LDA !PASSWORD_CODE_POSITION : DEC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION
|
||||
RTS
|
||||
|
||||
macro dw_big_endian(value)
|
||||
db <value>>>8
|
||||
db <value>
|
||||
endmacro
|
||||
macro Layer3_VRAM_Address(x,y)
|
||||
%dw_big_endian(<y>*$20+<x>+$6000)
|
||||
endmacro
|
||||
|
||||
|
||||
Password_Tilemap:
|
||||
;Add any graphics for background 0 here
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+0)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW ;BOW
|
||||
dw #$0200
|
||||
dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE ;BOOM
|
||||
dw #$0200
|
||||
dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED ;HOOK
|
||||
dw #$0200
|
||||
dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE ;BOMB
|
||||
dw #$0200
|
||||
dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED ;SHROOM
|
||||
dw #$0200
|
||||
dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN ;POWDER
|
||||
dw #$0200
|
||||
dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE ;ROD
|
||||
dw #$0200
|
||||
dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN ;PENDANT
|
||||
dw #$0200
|
||||
dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder upper half action button
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+1)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW ;BOW
|
||||
dw #$0200
|
||||
dw #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE ;BOOM
|
||||
dw #$0200
|
||||
dw #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW ;HOOK
|
||||
dw #$0200
|
||||
dw #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP ;BOMB
|
||||
dw #$0200
|
||||
dw #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED ;SHROOM
|
||||
dw #$0200
|
||||
dw #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN ;POWDER
|
||||
dw #$0200
|
||||
dw #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE ;ROD
|
||||
dw #$0200
|
||||
dw #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN ;PENDANT
|
||||
dw #$0200
|
||||
dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder lower half action button
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+3)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS
|
||||
dw #$0200
|
||||
dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;ETHER
|
||||
dw #$0200
|
||||
dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;QUAKE
|
||||
dw #$0200
|
||||
dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP ;LAMP
|
||||
dw #$0200
|
||||
dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN ;HAMMER
|
||||
dw #$0200
|
||||
dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN ;SHOVEL
|
||||
dw #$0200
|
||||
dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE ;FLUTE
|
||||
dw #$0200
|
||||
dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW ;NET
|
||||
dw #$0200
|
||||
dw #$018A|!FS_COLOR_BW, #$0200 ; Left
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+4)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS
|
||||
dw #$0200
|
||||
dw #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;ETHER
|
||||
dw #$0200
|
||||
dw #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;QUAKE
|
||||
dw #$0200
|
||||
dw #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED ;LAMP
|
||||
dw #$0200
|
||||
dw #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN ;HAMMER
|
||||
dw #$0200
|
||||
dw #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN ;SHOVEL
|
||||
dw #$0200
|
||||
dw #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE ;FLUTE
|
||||
dw #$0200
|
||||
dw #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW ;NET
|
||||
dw #$0200
|
||||
dw #$019A|!FS_COLOR_BW, #$0200 ; Left
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+6)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN ;BOOK
|
||||
dw #$0200
|
||||
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW ;BOTTLE
|
||||
dw #$0200
|
||||
dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP ;POTION
|
||||
dw #$0200
|
||||
dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED
|
||||
dw #$0200
|
||||
dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED
|
||||
dw #$0200
|
||||
dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE
|
||||
dw #$0200
|
||||
dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS
|
||||
dw #$0200
|
||||
dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN
|
||||
dw #$0200
|
||||
dw #$0200, #$018B|!FS_COLOR_BW ; Right
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+7)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN ;BOOK
|
||||
dw #$0200
|
||||
dw #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW ;BOTTLE
|
||||
dw #$0200
|
||||
dw #$0252|!FS_COLOR_GREEN, #$0253|!FS_COLOR_GREEN ;POTION
|
||||
dw #$0200
|
||||
dw #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED ;CANE
|
||||
dw #$0200
|
||||
dw #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED ;CAPE
|
||||
dw #$0200
|
||||
dw #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE ;MIRROR
|
||||
dw #$0200
|
||||
dw #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS ;BOOTS
|
||||
dw #$0200
|
||||
dw #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN ;GLOVES
|
||||
dw #$0200
|
||||
dw #$0200, #$019B|!FS_COLOR_BW ; Right
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+9)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE ;FLIPPERS
|
||||
dw #$0200
|
||||
dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED ;PEARL
|
||||
dw #$0200
|
||||
dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW ;SHIELD
|
||||
dw #$0200
|
||||
dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP ;TUNIC
|
||||
dw #$0200
|
||||
dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP ;HEART
|
||||
dw #$0200
|
||||
dw #$0282|!FS_COLOR_YELLOW, #$0283|!FS_COLOR_YELLOW ;MAP
|
||||
dw #$0200
|
||||
dw #$0284|!FS_COLOR_RED, #$0284|!FS_COLOR_RED|!FS_HFLIP ;COMPASS
|
||||
dw #$0200
|
||||
dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW ;KEY
|
||||
dw #$0200
|
||||
dw #$0267|!FS_COLOR_BW|!FS_HFLIP, #$0267|!FS_COLOR_BW ;cancel
|
||||
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+10)
|
||||
%dw_big_endian(51) ;(9*4)+(8*2)-1
|
||||
dw #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE ;FLIPPERS
|
||||
dw #$0200
|
||||
dw #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED ;PEARL
|
||||
dw #$0200
|
||||
dw #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW ;SHIELD
|
||||
dw #$0200
|
||||
dw #$027F|!FS_COLOR_GREEN, #$027F|!FS_COLOR_GREEN|!FS_HFLIP ;TUNIC
|
||||
dw #$0200
|
||||
dw #$0291|!FS_COLOR_RED, #$0291|!FS_COLOR_RED|!FS_HFLIP ;HEART
|
||||
dw #$0200
|
||||
dw #$0292|!FS_COLOR_YELLOW, #$0293|!FS_COLOR_YELLOW ;MAP
|
||||
dw #$0200
|
||||
dw #$0294|!FS_COLOR_RED, #$0294|!FS_COLOR_RED|!FS_HFLIP ;COMPASS
|
||||
dw #$0200
|
||||
dw #$023E|!FS_COLOR_YELLOW, #$023F|!FS_COLOR_YELLOW ;KEY
|
||||
dw #$0200
|
||||
dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW ;cancel
|
||||
|
||||
dw $FFFF
|
||||
|
||||
macro PasswordDisplaySlot(x,y)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+<x>,!PASSWORD_DISPLAY_START_Y+<y>)
|
||||
%dw_big_endian(3)
|
||||
dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+<x>,!PASSWORD_DISPLAY_START_Y+1+<y>)
|
||||
%dw_big_endian(3)
|
||||
dw #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW
|
||||
endmacro
|
||||
!FS_VERT_STRIPE = $8000
|
||||
Password_StripeImageTemplate:
|
||||
%PasswordDisplaySlot(0,0)
|
||||
%PasswordDisplaySlot(3,0)
|
||||
%PasswordDisplaySlot(6,0)
|
||||
%PasswordDisplaySlot(9,0)
|
||||
%PasswordDisplaySlot(12,0)
|
||||
%PasswordDisplaySlot(15,0)
|
||||
%PasswordDisplaySlot(18,0)
|
||||
%PasswordDisplaySlot(21,0)
|
||||
%PasswordDisplaySlot(0,3)
|
||||
%PasswordDisplaySlot(3,3)
|
||||
%PasswordDisplaySlot(6,3)
|
||||
%PasswordDisplaySlot(9,3)
|
||||
%PasswordDisplaySlot(12,3)
|
||||
%PasswordDisplaySlot(15,3)
|
||||
%PasswordDisplaySlot(18,3)
|
||||
%PasswordDisplaySlot(21,3)
|
||||
.CodeCursorErase ; a code cursor erase (position get be updated)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2)
|
||||
%dw_big_endian(3)
|
||||
dw #$0200, #$0200
|
||||
.CodeCursorDraw ; Then comes a code cursor draw (will override the erase if same position)
|
||||
%Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2)
|
||||
%dw_big_endian(3)
|
||||
dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW
|
||||
.SelectionCursorErase ; a selection cursor erase (position get be updated)
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1)
|
||||
%dw_big_endian(7)
|
||||
dw #$0200, #$0200, #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$0200, #$0200
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2)
|
||||
%dw_big_endian(7)
|
||||
dw #$0200, #$0200, #$0200, #$0200
|
||||
.SelectionCursorDraw ; Then comes a selection cursor draw (will override the erase if same position)
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1)
|
||||
%dw_big_endian(7)
|
||||
dw #$02BB|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$02BD|!FS_COLOR_GREEN, #$02BD|!FS_COLOR_GREEN|!FS_VFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y)
|
||||
%dw_big_endian(3|!FS_VERT_STRIPE)
|
||||
dw #$02BD|!FS_COLOR_GREEN|!FS_HFLIP, #$02BD|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP
|
||||
%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2)
|
||||
%dw_big_endian(7)
|
||||
dw #$02BB|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP
|
||||
dw $FFFF
|
||||
.end
|
||||
10
tables.asm
10
tables.asm
@@ -357,7 +357,7 @@ db #$00 ; $00 = static rng, $01 = no extra blue balls/warps
|
||||
;--------------------------------------------------------------------------------
|
||||
org $308087 ; PC 0x180087
|
||||
IsEncrypted:
|
||||
dw #$0000 ; $0000 = not encrypted, $0001 = encrypted with static key, $0002 = Encrypted w/ passcode entry screen (Not implemented yet)
|
||||
dw #$0000 ; $0000 = not encrypted, $0001 = encrypted with static key, $0002 = Encrypted w/ passcode entry screen
|
||||
;--------------------------------------------------------------------------------
|
||||
org $308089 ; PC 0x180089
|
||||
TurtleRockAutoOpenFix:
|
||||
@@ -403,7 +403,11 @@ org $3080B0 ; 0x1800B0-0x1800BF
|
||||
StaticDecryptionKey:
|
||||
dd $00000000, $00000000, $00000000, $00000000
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1800C0 - 0x1800FF (unused)
|
||||
org $3080C0 ; 0x1800C0-0x1800C7 [encrypted]
|
||||
KnownEncryptedValue:
|
||||
db $31, $41, $59, $26, $53, $58, $97, $93
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x1800C8 - 0x1800FF (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $308100 ; PC 0x180100 (0x40 bytes)
|
||||
ShovelSpawnTable:
|
||||
@@ -1403,7 +1407,7 @@ dw #9999 ; Rupee Limit
|
||||
; $7F509B - MSU Flag
|
||||
; $7F509C - Inverted Mode Duck Map Temporary
|
||||
; $7F509D - Stalfos Bomb Damage Value
|
||||
|
||||
; $7F509E - Valid Key Loaded
|
||||
; $7F50A0 - Event Parameter 1
|
||||
|
||||
; $7F50B0 - $7F50BF - Downstream Reserved (Enemizer)
|
||||
|
||||
Reference in New Issue
Block a user