From 889af173da129d874113a048e092203712f01208 Mon Sep 17 00:00:00 2001 From: Karkat Date: Mon, 23 Jul 2018 23:21:22 -0400 Subject: [PATCH] let's dev 7/23/18 started file-select tile mapping & tile DMA --- LTTP_RND_GeneralBugfixes.asm | 7 +- events.asm | 10 ++ fileselect.asm | 214 +++++++++++++++++++++++++++++++++-- fileselect.chr.gfx | Bin 0 -> 4096 bytes hashalphabet.asm | 13 --- hooks.asm | 2 +- 6 files changed, 220 insertions(+), 26 deletions(-) create mode 100755 fileselect.chr.gfx diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 14dc242..eb6d684 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 ; <- FFFF8 timestamp rom -db #$20, #$18, #$08, #$08 ; year/month/day +db #$20, #$18, #$07, #$23 ; year/month/day ;================================================================================ @@ -232,6 +232,11 @@ Damage_Table: incbin damage_table.bin warnpc $31D001 +org $31D000 +FileSelectNewGraphics: +incbin fileselect.chr.gfx +warnpc $31F001 + org $338000 GFX_HUD_Palette: incbin hudpalette.pal diff --git a/events.asm b/events.asm index fe7e1bb..658edd2 100644 --- a/events.asm +++ b/events.asm @@ -5,6 +5,16 @@ ; LDA $7EF2DB ; thing we wrote over ;RTL ;-------------------------------------------------------------------------------- +OnPrepFileSelect: + LDA $11 : CMP.b #$03 : BNE + + LDA.b #$06 : STA $14 ; thing we wrote over + RTL + + + JSL.l LoadAlphabetTiles + JSL.l LoadAlphabetTilemap + JSL.l LoadFullItemTiles +RTL +;-------------------------------------------------------------------------------- OnDrawHud: JSL.l Draw4DigitRupees JSL.l DrawChallengeTimer diff --git a/fileselect.asm b/fileselect.asm index 544e664..f92eab8 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -14,6 +14,9 @@ !FS_COLOR_GREEN = "$1800" !FS_COLOR_BW = "$1C00" +!FS_HFLIP = "$4000" +!FS_VFLIP = "$8000" + macro fs_draw8x8(screenrow,screencol) ;Note due to XKAS's screwy math this formula is misleading. ;in normal math we have $1004+2*col+$40*row @@ -35,6 +38,27 @@ macro fs_draw16x16(screenrow,screencol) %fs_draw16x8(+1,) endmacro +macro fs_drawItem(screenrow,screencol,tileAddress) + LDA.l : %fs_draw8x8(,) + LDA.l +2 : %fs_draw8x8(,+1) + LDA.l +4 : %fs_draw8x8(+1,) + LDA.l +6 : %fs_draw8x8(+1,+1) +endmacro +macro fs_drawItemGray(screenrow,screencol,tileAddress) + LDA.l : AND.w #$E3FF : ORA.w #!FS_COLOR_GRAY : %fs_draw8x8(,) + LDA.l +2 : AND.w #$E3FF : ORA.w #!FS_COLOR_GRAY : %fs_draw8x8(,+1) + LDA.l +4 : AND.w #$E3FF : ORA.w #!FS_COLOR_GRAY : %fs_draw8x8(+1,) + LDA.l +6 : AND.w #$E3FF : ORA.w #!FS_COLOR_GRAY : %fs_draw8x8(+1,+1) +endmacro + +macro fs_drawItemBasic(address,screenrow,screencol,tileAddress) + LDA.l
: AND.w #$00FF : BEQ + + %fs_drawItem(,,) + BRA ++ + + + %fs_drawItemGray(,,) + ++ +endmacro DrawPlayerFile: PHX : PHY @@ -77,17 +101,84 @@ DrawPlayerFile: ; LDA.w #$0201|!FS_COLOR_GRAY : %fs_draw16x16(2,12) ; .bow_end ; -; ;hookshot -; LDA.l $700342 : AND.w #$00FF : BEQ + -; LDA.w #$0215|!FS_COLOR_RED -; BRA .draw_hook -; + -; LDA.w #$0215|!FS_COLOR_GRAY -; .draw_hook -; %fs_draw8x8(2,17) -; !ADD.w #$0230-$0215 ;hookshot handle -; %fs_draw8x8(3,16) -; + ; Hookshot + %fs_drawItemBasic($700342,2,16,FileSelectItems_hookshot) + + ; Powder + LDA.l !FS_INVENTORY_SWAP : AND.w #$0010 : BEQ + + %fs_drawItem(2,20,FileSelectItems_powder) + BRA ++ + + + %fs_drawItemGray(2,20,FileSelectItems_powder) + ++ + + ; Mushroom + LDA.l !FS_INVENTORY_SWAP : AND.w #$0020 : BEQ + + %fs_drawItem(2,22,FileSelectItems_mushroom) + BRA ++ + + + %fs_drawItemGray(2,22,FileSelectItems_mushroom) + ++ + + ; Fire Rod + %fs_drawItemBasic($700345,4,12,FileSelectItems_fire_rod) + + ; Ice Rod + %fs_drawItemBasic($700346,4,14,FileSelectItems_ice_rod) + + ; Bombos Medallion + %fs_drawItemBasic($700347,4,16,FileSelectItems_bombos) + + ; Ether Medallion + %fs_drawItemBasic($700348,4,18,FileSelectItems_ether) + + ; Quake Medallion + %fs_drawItemBasic($700349,4,20,FileSelectItems_quake) + + ; Lamp + %fs_drawItemBasic($70034A,6,12,FileSelectItems_lamp) + + ; Hammer + %fs_drawItemBasic($70034B,6,14,FileSelectItems_hammer) + + ; Bug Net + %fs_drawItemBasic($70034D,6,18,FileSelectItems_bugnet) + + ; Book of Mudora + %fs_drawItemBasic($70034E,6,20,FileSelectItems_book) + + ; Red Cane + %fs_drawItemBasic($700350,8,14,FileSelectItems_redcane) + + ; Blue Cane + %fs_drawItemBasic($700351,8,16,FileSelectItems_bluecane) + + ; Cape + %fs_drawItemBasic($700352,8,18,FileSelectItems_cape) + + ; Mirror + %fs_drawItemBasic($700353,8,20,FileSelectItems_mirror) + + ; Boots + %fs_drawItemBasic($700355,2,26,FileSelectItems_boots) + + ; Gloves + LDA.l $700354 : AND.w #$00FF : BNE + + %fs_drawItemGray(4,26,FileSelectItems_gloves) + BRA ++ + + : DEC : BNE + + %fs_drawItem(4,26,FileSelectItems_gloves) + BRA ++ + + + %fs_drawItem(4,26,FileSelectItems_mitts) + ++ + + ; Flippers + %fs_drawItemBasic($700356,6,26,FileSelectItems_flippers) + + ; Moon Pearl + %fs_drawItemBasic($700357,8,26,FileSelectItems_pearl) + ; ;powder ; LDA !FS_INVENTORY_SWAP : AND.w #$0010 : BEQ + ; LDA.w #$020A|!FS_COLOR_BROWN @@ -110,6 +201,67 @@ DrawPlayerFile: LDA.w #$0004 : STA $02 ; thing we wrote over RTL ;-------------------------------------------------------------------------------- + +FileSelectItems: + .empty_bow + dw #$0201|!FS_COLOR_YELLOW, #$0204|!FS_COLOR_YELLOW, #$0203|!FS_COLOR_RED, #$0212|!FS_COLOR_YELLOW + .bow + dw #$0201|!FS_COLOR_YELLOW, #$0204|!FS_COLOR_YELLOW, #$0203|!FS_COLOR_RED, #$0212|!FS_COLOR_YELLOW + .silver_bow + dw #$0201|!FS_COLOR_YELLOW, #$0204|!FS_COLOR_YELLOW, #$0203|!FS_COLOR_RED, #$0212|!FS_COLOR_YELLOW + .blue_boomerang + dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE + .red_boomerang + dw #$0205|!FS_COLOR_RED, #$0206|!FS_COLOR_RED, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_RED + .hookshot + dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW + .fire_rod + dw #$0220|!FS_COLOR_RED, #$0210|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0231|!FS_COLOR_RED + .ice_rod + dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE + .bombos + dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + .ether + dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + .quake + dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + .lamp + dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP|, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED + .hammer + dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN + .bugnet + dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW + .book + dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN + .redcane + dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED + .bluecane + dw #$021D|!FS_COLOR_BLUE, #$021E|!FS_COLOR_BLUE, #$022D|!FS_COLOR_BLUE, #$022E|!FS_COLOR_BLUE + .cape + dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED + .mirror + dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE + + .flippers + dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE + + .boots + dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS + + .pearl + dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED + + .gloves + dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN + .mitts + dw #$0260|!FS_COLOR_YELLOW, #$0261|!FS_COLOR_YELLOW, #$0270|!FS_COLOR_YELLOW, #$0271|!FS_COLOR_YELLOW + + .mushroom + dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED + .powder + dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN + +;-------------------------------------------------------------------------------- AltBufferTable: LDA.b #$02 : STA $210c ; Have Screen 3 use same tile area as screens 1 @@ -164,3 +316,43 @@ RTL Validate_SRAM: RTL ;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +LoadFullItemTiles: + PHA : PHX + LDA $4300 : PHA ; preserve DMA parameters + LDA $4301 : PHA ; preserve DMA parameters + LDA $4302 : PHA ; preserve DMA parameters + LDA $4303 : PHA ; preserve DMA parameters + LDA $4304 : PHA ; preserve DMA parameters + LDA $4305 : PHA ; preserve DMA parameters + LDA $4306 : PHA ; preserve DMA parameters + ;-------------------------------------------------------------------------------- + LDA.b #$80 : STA $2115 ; write read increment on $2119 + LDA.b #$01 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode + LDA.b #$18 : STA $4301 ; set bus B destination to VRAM register + + LDA.b #$00 : STA $2116 ; write VRAM destination address + LDA.b #$30 : STA $2117 ; write VRAM destination address + + LDA.b #$31 : STA $4304 ; set bus A source bank + LDA.b #FileSelectNewGraphics : STA $4302 ; set bus A source address to SRAM + LDA.b #FileSelectNewGraphics>>8 : STA $4303 ; set bus A source address to SRAM + + LDA $2100 : PHA : LDA.b #$80 : STA $2100 ; save screen state & turn screen off + + STZ $4305 : LDA.b #$10 : STA $4306 ; set transfer size to 0x1000 + LDA #$01 : STA $420B ; begin DMA transfer + + PLA : STA $2100 ; put screen back however it was before + ;-------------------------------------------------------------------------------- + PLA : STA $4306 ; restore DMA parameters + PLA : STA $4305 ; restore DMA parameters + PLA : STA $4304 ; restore DMA parameters + PLA : STA $4303 ; restore DMA parameters + PLA : STA $4302 ; restore DMA parameters + PLA : STA $4301 ; restore DMA parameters + PLA : STA $4300 ; restore DMA parameters + PLX : PLA +RTL +;-------------------------------------------------------------------------------- diff --git a/fileselect.chr.gfx b/fileselect.chr.gfx new file mode 100755 index 0000000000000000000000000000000000000000..608936a49af3a718255a0f43dc04655c3b69259a GIT binary patch literal 4096 zcmeHJ-)kLp7Pq*N2ZgZsAWM<^P?lv8Da8jVB7=yC$kK;p@kuVF4}DtlkcUu0`6?F; z`VzH>g0}MzmMXGD5VnooW)ea>)<~yPY795Y-0QS{EwTCD+o_$I%#Y80&Ufxjqx}z- zp2N(|`JVGV-*Z0ae9r{9k9@q2vu+hYBNk;BeH_432yq%mw^3p{NL-UsnGDr^=av(~ z(@NLg766Z4_*2s;eI*THpg<2d@2>vTzW&vP|1ODqyWHxpMQhPn|Ew=^T$oA&=Ylh?_2Io~JZljz0EGN47C&oP-!c_2#-V0Rlw!I(m zKKUCm6pn}GOL&?5cQW9IGwnZ{_a@#}OKy@^C@<&yHG}jb#42_&Hw!W@(OZf9{`_%^ z@ObnsaAmkbt3#9&689b>06vM{$`-4zV|sB>(E5wOTaa9b^32+quXoE{51j$`2o0vk zr;hmtg9F$@1V#aK#av<5Vq^7mDO3$uj+mn50UX0I)%Ol#A4a(1Bk%&{!VzO3$*bg> zw74Fv&qOCD-X2?VMNw2)c{{&uPe`E>XWTs)xJQGhu_u01Hq?}`7)#4M;b<#PZ!Ai<2u1-XhV(eEc4XI9OsK#AUV#jqQsI-@*Y zAeI;uW#%8#D7B}Clp8!~ly8F-Z2nHaV)kmU8S%Eu^Axpv^=vb480RMC$E>d2X{YCgHi^uv^k?6%fi^xERkXb z9d>_NR#jd`@wc3}uXF#nYGFi8;SuJ~0z_Y&!32T9hvWtq2v8}b&H_~U zlojC_OI#$QxgGEobv?OX>_j<1q2V2BnCS`gnEsPEuoF8r$%+YYiR>`EGpzPGqVQXi z2!yn~o()Ohwpndn6`6a$Le3y}{WHuQM9EV!q4z`mruWrc16cJbUz6o&Ka znfAoFWWty*tRwmk9owmOyILO+)-lg(CoDucnqREDl44r*WeBFahRhXnIL{58>=$_f+ZTC&RDIngpajUh zPdf9{%l+;~@--u2#^)`|Jh4>YX$ z;DpsLvNwG`L;F>H$G_j;4&Um#+$s8au)l9LCwA=Ryg6#+1R;?ZsU7;O<5}9-FVli( z(7Lu405ito+g0%(`qqwKRzSI?6