From 3829f62100fbff1bc9dea14b5127421cb31f574c Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Tue, 24 Oct 2023 10:29:16 +0200 Subject: [PATCH] Push colorization --- DMGTRIS.GB => DMGTRIS.GBC | Bin 32768 -> 32768 bytes README.md | 5 +- src/constants.asm | 4 +- src/gbc.asm | 443 +++++++++++++++++++++++++++++++------- src/main.asm | 1 - src/state_title.asm | 18 +- 6 files changed, 377 insertions(+), 94 deletions(-) rename DMGTRIS.GB => DMGTRIS.GBC (65%) diff --git a/DMGTRIS.GB b/DMGTRIS.GBC similarity index 65% rename from DMGTRIS.GB rename to DMGTRIS.GBC index 1746492130c9e9b5aaf0c51f4276903394aba9cc..2d5fd5c4b33fa50faffaf31b3242c2107f6e2d4b 100644 GIT binary patch delta 7178 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 BtAhXl delta 5697 zcma)A4R93I9pAmr+~sn~B@iyjCF~{#EFpk=6f!oqoHlY%hzS^x5JEo6=je!4oJ0&< zptWi>2rRS#DMlwaYOANlwx~1Ak~=fG!<~wqLI@BxYEsxDJOw{`&`tku_p&*1OxwNL z{r`XO_xr#1{%_yDw|lLvy4F_R?rf6Zle5t}uWC;5o%842Ie+e+wz(O+xR_-;)W1yx zx^cAoiZeL*0nV{$mVpSqP|q32MJdGn%LzT9Bjyp|y^nNNk_#to=1D|kl7fezTf50e z$jp%-xE)HV0lT}8I}{Xj<6_6|pleI8C!$?Il;7Fmq31f{~o}C|G?&#%d zvYpK22D7QIysQ=a+@=O}n(nD^q!BW~7_vOhAGe9EE#eL+T~Wd9apg|zcG!s$gOSl^ zIisH50_Tk|eVFeGx)zWd9(4&XyU-aQ>JyH-s%nK#UFcl~3T*9zR9_dB>GSM3l`?V@#Y;c&X&ug8~=^A25@pt?iL18O^AK4Jc(BH*(e7jkpu5o!WzQ@gNVi7OHJ2e;4_=(KE%Y@uZxGfgI$0-2y3 z(bb_?%_n@_9Obk>C6f^kB^#OTvc<}5RhlXhI=M6|a~e*N%0hi5V&CoRSF|2g`;$?v z=k{8y-P5v(Dnn;Hc=VN4d^i&4dd4H38Eb~1OllT!2|+%DGAbv0kzyJ>ucElR<|@4? z_|-6*o}ZsKI%l^jb5^M4BKd`W z6C@osq0zH3GB3;$K6FUVV;0C+%u0CzvsF%y{G~uni<~cz?Ge3Owne79Wox9uEhj}b zyJb^kms>VOj<{uARW__j#VSX<%79fStg>KLGFGKvRqAb2 zkAf@-%dA*t!!rAAWS}x*l?AJku_{GVk$tirH)+64ny|`@RTiwW#;bJwUvTyAef}Wa zNC!Myi{T0Sa0(3BXH$Y-PeBKI4B`Rdm{XWI6}{v`yDQM1htS@RS6`Dym{e8=YYFM%m4w&q(G|{ zo2+NZl9D=+6Uyqi9aFqzuQj4w9&wjU@WS2G1(-5PFlBJ=`O{6eN zzL7}kH1c2~sn^IC6G?+cZV#IL;~O<<>|=?cCXH-NB+VLGl}ILO z8oN6&G*csYCX$mz$uN2e_Fj0u;I1;x?BnG3BNh+r zRX>ncBC`eFN6?-aO;2}bCDLIBLD0WG&h43=qXRQoMCn>Ea*--{T&2KZYNLw4V6;X> zU@)pu5g3f_QxO=9yea~N(E=5L!Kg?@U@*#85g3e|DguL%T}5CpGN=d)Mp0f#0nA_# zO{xH4KQxaKjE<=Y3`QTQ2nVp|8uC1Vnc5WZBvpt=-%>mfW3Ch5l73#Kf z$&Fw;0uA&UsufT!-OG11_|o-V(@JS`(&#{Pl}jeAsILsZ(4bUf5#DzqQ5Tb8(38M7z%A=XXMO0jc(z$Q4f6Bhu7YLLNZnsgcC{?8B1ucv$p^k9{SQ>(iPC{5 zO0+%%3rx0yDW~sgCyls6j+y23x|r{D$qvftm>b6~9AjfMC);QC0-1+fbr3C#OFQcXxQDguM% z$~q9hXM|G0>X2lLRWRzxdf;ngd~HZFE4)q`b>R)d6O*D0&iLQsU15Oc6 z>LB2QO)x~<-&W4|hwukv1$}v`rK*;`+D;nqd=B_vY*ga9Ld-s(5vC56NGit>o5u)q zj7U?6z!3!L%ODhuHowW#s*|~M;t`Pcf>ES_a*keaxAE% zXNAZD<#DU7q?d(AGxmkz8W_ia!JYU{Jd5wBo-#w3bZI0EYwD0VEdE2hsLo;&ETjN{ zjlRc1m|TqFFM}_78g^U;83ryW{9AK zSvAti5PWw-r!3o*s7s(8f^!hg^Fp*5x;Vce?uSle`Ld9u3F?umm0&{fF%HjvQWv@b7@4(ku!44(MTlP$Ix8F<_M_Z8s3!AcU6)VSj@#tybU&p}rFC zzVK#)@ByLzo%^dr!NJO|dp67^XPjyzoi_!z9vXqG{d>5S!RgFqM@lTkH$VBVdA9GV c*%kV8R~ot3Hm=pfH0yF~x|-QVZR$4u2g7<0T>t<8 diff --git a/README.md b/README.md index e71b94a..0f4bae9 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,8 @@ The game can be built using gnu make and the RGBDS toolchain. ## Future Goals -- Multiplayer with items. -- Colorization. -- ... +- Implement better sound engine. +- Add more speed curves. ## License diff --git a/src/constants.asm b/src/constants.asm index 6a5c323..2912b73 100644 --- a/src/constants.asm +++ b/src/constants.asm @@ -113,9 +113,9 @@ sOption5:: sEasterM0:: db $C4, $C6, $C8, $CA, $CC ; MGB sEasterM1:: db $C5, $C7, $C9, $CB, $CD sEasterC0:: db $CE, $D0, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 ; CGB -sEasterC1:: db $CF, $D1, $C9, $CB, $CD +sEasterC1:: db $CF, $D1, $C9, $CB, $CD, $73, $75, $77, $79, $7B, $01, $01 sEasterA0:: db $D2, $D4, $C8, $CA, $CC, $72, $74, $76, $78, $7A, $D6, $D7 ; AGB -sEasterA1:: db $D3, $D5, $C9, $CB, $CD +sEasterA1:: db $D3, $D5, $C9, $CB, $CD, $73, $75, $77, $79, $7B, $01, $01 sEasterS0:: db $F6, $F8, $C8, $CA, $CC ; SGB sEasterS1:: db $F7, $F9, $C9, $CB, $CD sPieceXOffsets:: ; How to draw each piece. X-offsets of the sprites. diff --git a/src/gbc.asm b/src/gbc.asm index ab606d1..e1e0024 100644 --- a/src/gbc.asm +++ b/src/gbc.asm @@ -44,11 +44,33 @@ wShadowTileAttrs:: ds 32*32 SECTION "GBC Variables", WRAM0 wOuterReps:: ds 1 wInnerReps:: ds 1 - - +wTitlePal:: ds 1 SECTION "GBC Functions", ROM0 +ToATTR:: + ld a, [wInitialA] + cp a, $11 + ret nz + + ; Bank 1 + ld a, 1 + ldh [rVBK], a + ld a, HIGH(wShadowTileAttrs) + ldh [rHDMA1], a + ld a, LOW(wShadowTileAttrs) + ldh [rHDMA2], a + ld a, HIGH($9800) + ldh [rHDMA3], a + ld a, LOW($9800) + ldh [rHDMA4], a + ld a, 39 + ldh [rHDMA5], a + ld a, 0 + ldh [rVBK], a + ret + + ToVRAM:: ; Bank 1 ld a, 1 @@ -65,7 +87,7 @@ ToVRAM:: ldh [rHDMA5], a - ; Bank 1 + ; Bank 0 ld a, 0 ldh [rVBK], a ld a, HIGH(wShadowTilemap) @@ -78,8 +100,292 @@ ToVRAM:: ldh [rHDMA4], a ld a, 39 | $80 ldh [rHDMA5], a + jp EventLoop -GBCPalettes:: + +GBCTitleInit:: + ld a, [wInitialA] + cp a, $11 + ret nz + ld a, BCPSF_AUTOINC + ldh [rBCPS], a + ldh [rOCPS], a + + ; Pal 0 (red, I) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 1 (green, Z) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, G1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, G2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, G3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 2 (purple, S) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R1 | B1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R2 | B2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R3 | B3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 3 (blue, J) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 4 (orange, L) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R1 | G0 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R2 | G1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R3 | G2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 5 (yellow, O) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R1 | G1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R2 | G2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, R3 | G3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 6 (cyan, T) + ld bc, %0000000000000000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B1 | G1 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B2 | G2 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, B3 | G3 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Pal 7 (grayscale, inverted) + ld bc, %0000000000000000 + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, %0010000100001000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, %0100001000010000 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + ld bc, %0111111111111111 + ld a, c + ldh [rBCPD], a + ldh [rOCPD], a + ld a, b + ldh [rBCPD], a + ldh [rOCPD], a + + ; Copy the tilemap to shadow. + ld de, $9800 + ld hl, wShadowTilemap + ld bc, 32*32 + call UnsafeMemCopy + + ; Set attrs to pal 7 and copy to shadow. + ld a, 1 + ldh [rVBK], a + ld d, $03 + ld hl, $9800 + ld bc, 32 + call UnsafeMemSet + ld d, $01 + ld bc, (5*32) + call UnsafeMemSet + ld d, $07 + ld bc, (14*32) + call UnsafeMemSet + ld de, $9800 + ld hl, wShadowTileAttrs + ld bc, 32*32 + call UnsafeMemCopy + + ; Reset back to bank 0. + xor a, a + ldh [rVBK], a + + ; Save the current title palette. + ld a, $07 + ld [wTitlePal], a + ret + + +GBCGameplayInit:: ld a, [wInitialA] cp a, $11 ret nz @@ -317,78 +623,6 @@ GBCPalettes:: ld a, b ldh [rBCPD], a ldh [rOCPD], a - ret - - -GBCTitleInit:: - ld a, [wInitialA] - cp a, $11 - ret nz - ld a, BCPSF_AUTOINC | (7*8) - ldh [rBCPS], a - ldh [rOCPS], a - - ; Pal 7 (grayscale, inverted) - ld bc, %0000000000000000 - ld a, b - ldh [rBCPD], a - ldh [rOCPD], a - ld a, c - ldh [rBCPD], a - ldh [rOCPD], a - ld bc, %0010000100001000 - ld a, c - ldh [rBCPD], a - ldh [rOCPD], a - ld a, b - ldh [rBCPD], a - ldh [rOCPD], a - ld bc, %0100001000010000 - ld a, c - ldh [rBCPD], a - ldh [rOCPD], a - ld a, b - ldh [rBCPD], a - ldh [rOCPD], a - ld bc, %0111111111111111 - ld a, c - ldh [rBCPD], a - ldh [rOCPD], a - ld a, b - ldh [rBCPD], a - ldh [rOCPD], a - - ; Copy the tilemap to shadow. - ld de, $9800 - ld hl, wShadowTilemap - ld bc, 32*32 - call UnsafeMemCopy - - ; Copy set attrs to pal 7 and copy to shadow. - ld a, 1 - ldh [rVBK], a - ld d, $07 - ld hl, $9800 - ld bc, (32*32) - call UnsafeMemSet - ld de, $9800 - ld hl, wShadowTileAttrs - ld bc, 32*32 - call UnsafeMemCopy - - ; Reset back to bank 0. - xor a, a - ldh [rVBK], a - ret - - -GBCGameplayInit:: - ld a, [wInitialA] - cp a, $11 - ret nz - ld a, BCPSF_AUTOINC | (7*8) - ldh [rBCPS], a - ldh [rOCPS], a ; Pal 7 (grayscale) ld bc, %0111111111111111 @@ -444,6 +678,57 @@ GBCGameplayInit:: ret +GBCTitleProcess:: + ld a, [wInitialA] + cp a, $11 + ret nz + + ; Wipe the palettes. + ld d, $03 + ld hl, wShadowTileAttrs + ld bc, 32 + call UnsafeMemSet + ld d, $07 + ld hl, wShadowTileAttrs+32 + ld bc, (19*32) + call UnsafeMemSet + + ; Palette for the title? + ldh a, [hFrameCtr] + and $0F + cp a, $01 + jr nz, .noinc + ld a, [wTitlePal] + inc a + cp a, $07 + jr c, .nores + ld a, $00 +.nores + ld [wTitlePal], a +.noinc + + ; Set the palette for the title. + ld a, [wTitlePal] + ld d, a + ld hl, wShadowTileAttrs + (2*32) + ld bc, (4*32) + call UnsafeMemSet + + ; And the selected row. + ld a, [wSelected] + inc a + ld hl, wShadowTileAttrs + (5*32) + ld bc, 64 +: add hl, bc + dec a + jr nz, :- + ld a, 3 + ld d, a + ld bc, 32 + call UnsafeMemSet + ret + + GBCGameplayProcess:: ld a, [wInitialA] cp a, $11 @@ -544,15 +829,11 @@ GBCGameplayProcess:: dec a ld [wOuterReps], a jr nz, .outer2 - - ret - GBCBlitField:: - call ToVRAM - jp EventLoop + jp ToVRAM ENDC diff --git a/src/main.asm b/src/main.asm index 4e60602..f44747a 100644 --- a/src/main.asm +++ b/src/main.asm @@ -93,7 +93,6 @@ Main:: ld a, KEY1F_PREPARE ldh [rKEY1], a stop - call GBCPalettes .notgbc ; We use a single set of tiles for the entire game, so we copy it at the start. diff --git a/src/state_title.asm b/src/state_title.asm index 8fca3e0..9a9f304 100644 --- a/src/state_title.asm +++ b/src/state_title.asm @@ -23,7 +23,7 @@ INCLUDE "globals.asm" SECTION "Title Variables", WRAM0 -wSelected: ds 1 +wSelected:: ds 1 SECTION "Title Functions", ROM0 @@ -79,23 +79,23 @@ SwitchToTitle:: bit 0, a jr nz, .agb ld de, sEasterC0 - ld hl, EASTER_0 + ld hl, EASTER_0-1 ld bc, 12 call UnsafeMemCopy ld de, sEasterC1 - ld hl, EASTER_1 - ld bc, 5 + ld hl, EASTER_1-1 + ld bc, 12 call UnsafeMemCopy jr .oam .agb ld de, sEasterA0 - ld hl, EASTER_0 + ld hl, EASTER_0-1 ld bc, 12 call UnsafeMemCopy ld de, sEasterA1 - ld hl, EASTER_1 - ld bc, 5 + ld hl, EASTER_1-1 + ld bc, 12 call UnsafeMemCopy jr .oam .noegg @@ -130,6 +130,8 @@ SwitchToTitle:: TitleEventLoopHandler:: + call GBCTitleProcess + ; Start game? .abstart ldh a, [hStartState] @@ -443,6 +445,8 @@ CheckLevelRange: TitleVBlankHandler:: + call ToATTR + ld a, TILE_UNSELECTED ld hl, TITLE_OPTION_0 ld [hl], a