From 40073aefea6dbb4e6d0f5d2554e11c4f228079fb Mon Sep 17 00:00:00 2001 From: shoofle Date: Tue, 11 Mar 2025 17:01:21 -0400 Subject: [PATCH] some more animations --- 00TheFool.inc | 19 +- 00thefool.aseprite | Bin 6912 -> 6928 bytes 01TheMagician.inc | 331 +++++++++++++++++++++++++++----- 01themagician.aseprite | Bin 6692 -> 6773 bytes 02TheHighPriestess.inc | 220 ++++++++++++++++----- 02thehighpriestess.aseprite | Bin 6261 -> 7110 bytes 03TheEmpress.inc | 12 +- 03theempress.aseprite | Bin 6829 -> 7098 bytes 04TheEmperor.inc | 371 ++++++++++++++++++++++++++++++++++-- 04theemperor.aseprite | Bin 6716 -> 7293 bytes 05TheHierophant.inc | 233 +++++++++++++++++----- 05thehierophant.aseprite | Bin 6450 -> 7641 bytes 07TheChariot.inc | 11 ++ 08Strength.inc | 12 +- 09TheHermit.inc | 12 +- 10WheelOfFortune.inc | 12 +- 11Justice.inc | 12 +- 12TheHangedMan.inc | 12 +- 13Death.inc | 13 +- 14Temperance.inc | 13 +- 15TheDevil.inc | 13 +- 16TheTower.inc | 13 +- 17TheStar.inc | 13 +- 18TheMoon.inc | 13 +- 19TheSun.inc | 13 +- 20Judgement.inc | 13 +- 21TheWorld.inc | 14 +- Async.inc | 7 +- CardHelpers.inc | 19 +- CardLibrary.inc | 14 +- CopyRangeSafe.inc | 17 +- KeyArtTiles.asm | 148 ++++++++++---- ScreenCardBrowse.inc | 14 +- ScreenMainMenu.inc | 119 ++++++------ SpriteTiles.asm | 102 ++++++---- Sprites.asm | 30 +++ SpritesLayer.asm | 61 ++++++ curve_authoring.html | 67 +++++-- main.asm | 65 +++++-- source.zip | Bin 304114 -> 327959 bytes 40 files changed, 1668 insertions(+), 370 deletions(-) create mode 100644 Sprites.asm create mode 100644 SpritesLayer.asm diff --git a/00TheFool.inc b/00TheFool.inc index 551aa5b..d87f2e0 100644 --- a/00TheFool.inc +++ b/00TheFool.inc @@ -26,14 +26,6 @@ def Card_Offset_functions equ @-TheFool dw .fUpdate dw .fDraw -; CVS: timer for dog -; CVS+2: frame for dog -; CVS+3: timer for zero -; CVS+5: frame for zero -; CVS+6: timer for cloud 1 -; CVS+8: frame for cloud 1 -; CVS+9: timer for cloud 2 -; CVS+11: frame for cloud 2 .fInit: ld hl, CVS ld a, 0 @@ -75,7 +67,7 @@ def Card_Offset_functions equ @-TheFool ; set up the palette for the clouds ld hl, rOBP1 - ld [hl], %00_10_01_11 + ld [hl], %11_10_01_00 ld hl, .cloud1 ; six sprites for the doggie, four for the zero, 4 bytes each @@ -106,7 +98,7 @@ def Card_Offset_functions equ @-TheFool ld hl, .cloud3 ld de, MY_OAM + 16*4 - ld bc, 90*$100 + 67 + ld bc, 88*$100 + 67 ld a, $11 call BuildMetaSprite ld hl, MY_OAM + 16*4+3 @@ -119,7 +111,7 @@ def Card_Offset_functions equ @-TheFool call IncrementTimer ld a, [CVS+1] ; checking the high byte of the timer - cp a, 06 ; $10 00 = 1 second + cp a, $06 ; $10 00 = 1 second jp c, .doneWithTimer1 ; if the timer is less than $0600, skip ; if the timer is greater or equal to $0600, reset it @@ -134,7 +126,8 @@ def Card_Offset_functions equ @-TheFool ld a, [CVS+3+1] ; check the high byte of the zero sprite timer cp a, $30 ; $10 00 = 1 second - jp c, .doneWithTimer2 + jp c, .doneWithTimer2 + jp .doneWithTimer2 ld a, 0 ld [CVS+3], a @@ -356,7 +349,7 @@ def Card_Offset_functions equ @-TheFool .cloud3: db $14 .cloud3Anim: - db 2, 90, 66, 90, 67, + db 2, 88, 66, 88, 67, diff --git a/00thefool.aseprite b/00thefool.aseprite index 2d488994494928d981c80b0984e5667fa1536d52..e1f21eeccc537b05f0193bcdf643b03fdcd97eeb 100644 GIT binary patch delta 296 zcmV+@0oVS3Hjp*}5Rn0Y4UifD0Q&JZ0b~FG05-9W{1Ok|0000ZAOrva00sa602PzL z1s9XA6Agc-0001ZoUKvY7Q-M2 zO4WO<0z#4k2aInxyHat{?m(}{b}z{hBJ#Bi(v-p@wYr*l@$So*RRAJ^bNsOYi~o?n z>>p)AVuSfJyzV~`aE{k~%#&+w$NlBHN?!y&lJ+cKB(viqyXH?IBKZhc@9P7H^y!qC zQe<45p7|=@eG2h@erR}rkzqE2^nXrM?41JPfA1*4)e7mSP&S&bO1 zQLUATghc~xaDHIz%EVQ>f}S0HdlRLe)@8T2~Z}mUcVi{*MHgn z*gxxq)CO=5Klh&q1jpk&dKQXPI(Lqzj6w2aQ=TY;&FnlyDEmZ<%ZR^A zn6D;B!3k6J}eg~+8lpAcT zRok}PF4ukE?^lBQLw^g*c5%C(-@h{6p@G@i|v_;qaCP517n{!v}dgtZz1 zK3)@Y+(H8)54IsiU>ZkSSJlsAd7%DQ8<}m)a^~R&;V1#ucz-zXn0eku%?rDig&qBD z=;I}gbF;-EC?8xx{mO(s&bqVQ=PzgqFe)d6*>8`yt&^#)KE?LF(7qPyMIP7P$_@Ud z{R?x=Ml3OaQ4RPJs)NOv=Of^JAzxm3{5Ve%C%;GWILJ8rIq#3=`g)%nZENQpEqW`l zC4yu7c+g%*SbyT{zV_9vrxnQ7jeL2|^BDKC1#wmV!+F|fMp_N{Gy2~a;23c};(f&Z z$m0ozx<4RX01OLD?bg5U%2%xSC{Hm%DsI6K_sBTY-lV@a_MC&r2fmJnp8se^piPVQ z24-M=)X~wLkWn9gl*dh)sF7xFB}?u4y~tdT7y=#vH-GgtzdsTE;oa32{|NoX!$b4Y z_|b1T&uHd^*aU0AcuUGc9OQ;v2jJsoygjA<5#yR;Aa-}F3e?pj@(Ft%H@6?p&;46I zUswty6qryLeaL5e$HDi*`03pdS@=xL`aGW&p7w9V8j6NT2l0 zTApb-+kd%SYn)~FvVvEALAb1cg_N`UdZKjik+X??sZhgh8(hAN@}0o!uXiS9~ZFEzskaKdj!#H>6Wm z@%rTPhf#OVgDRiLh^C8V58PAsjO2KL<5A;J@qY*WKYH3Ivu~(7*CK|f5XY2beyyxe z)=?4d3772G3ZImWTtqhDdmr#u@;nBTACq4<=iG$5cVtgzW-$rDz5N&cI3O0*qgt}N z!RQsV?FX}j=ZcIv=yGz-WxJd!!BKZGS3*39PY6Rn7!hp4VR_5>x5WM5-*?k%Tlal~ zFIr0|qfI2SEt>c^pF7@<7VeW$e|Ite-hX}1U;O{y8;_599Of_g*LfZv@<03gH;PLGyrb>0HTwz0X(yN6r}+H=93{7MSr|S zCb+x17PtTZ3RaUlAWhz2P4>wtCP`9FF+~lvJg3M|M?Fn6^YYItZ8XqAD{s+D-sz)} zb~>nvUh)z88DoMhv(Z1p1LIWE$z1fWFu))~%rMC}^DMB)62o*c#S_0gvdjuOM#xiO zoej2FWsOm$+2@W;w)tU)UG_NSo;pjexaNdY4mgU>F*n?D#(DH|74&kEvUk%{*8TvH za2_&E00005AOZjo01yEG0{{R30000000aODlkpcH6=Pt407f8YVxT`@24WT@J^%uM K01LBA7uf=_u$#dE delta 1301 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 delta 1107 zcmV-Z1g!hUH}x&8v$eh000}Yjl~NOJOcm#BOn6+000I6003N* zVGJaH1p@#8c$}?RiW zxAf0@8h_qXuV>Nk>3Nn;tISQ(meJSI2h9zVTZpp6T4er8O4Vp$M_iy#nbhD`@xOgw zKXFZvt`O;JL22$^Jx;{(MBPQTRQ~I%j7h(Ld(CTPFPi_tndMu;Hsk8v>A|9Jl4OdO+bnFH?6GsH@CR!j6_^(3NA`OOeqM@nKdE{)>dZV>P zE~SJpw&eBOXhu4liZYPxKvJ;U!0tx^n*~O<)$Z`+9(Vk`rtj^;qV>9xNSS#fuhr!Z$jiR=WkS98}~Ris&dA z%xI}>2nnLH=3B3}=(MbOl_H+@Yj&J}Q64~wqHlbQH4>x5nbr()udw5_LUjI-cV0l{ znXeU5G?D4hZbkTHPJoHJQCQ3lwdZFP9*Mm)f2SN@47>y}F?@XWbIZCYv3J+MhS!Xg znyzU;S^;(Dh|bDTml8|NcVbg;R&&R6?Aw>i;VVerx@-$O`h4l;;W04y>uMnKLaS?L9{i{+iYpkI*Dq z9SQj}AcXTU*V8F|#%uxzT5=Ad>?o(y+Qzr*_xtvJys_Gs8`c~l#Ncxnw{e{iwOLS# zjY8|^^n_ZW?gH?h1LY`ls-?<*gJuuGimfQy!Z1j(AL8;>KX#g9oYjuzoM#=7Bdg9C z0fAUyW{c=O080B%Y|n(c?Z>>I_}t?{hHpMtV6op3$1l~Q@}cTTL6rp$>;G4&*70&Z z;rA2&3PyQJr0Js7dL-x(dAAllkV~rb&{d z{P4|Qg*14jhFa>#kmZGX8fc`6W?Dka(Mp~++UcM(v@W`Nqlexw_tDP)gA^E|$S@;} zhCaqP6HGG2bkt{hJ8ZoBX|fK0+^Xz#&H* zbHXWSoO8h?S6p+$Eq6R~AN@nwLum2tk*9xd%c`iZ*!=?PGZ|Wq00005AOe&07>oe} ZlYtp=0R)rt8EgRtlVBQ|0SA-%8qDJy9X0>} diff --git a/03TheEmpress.inc b/03TheEmpress.inc index 16524a9..053051d 100644 --- a/03TheEmpress.inc +++ b/03TheEmpress.inc @@ -8,7 +8,17 @@ TheEmpress: dw EmpressMap dw EmpressTilesEnd - EmpressTiles dw EmpressTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: EmpressMap: db $7e, $1b, $1c, $1d, $1a, $1a, $78, $79 db $75, $1e, $5f, $1f, $20, $21, $7d, $7a diff --git a/03theempress.aseprite b/03theempress.aseprite index 9441e265e6eb81845d7f22f280458d12bb571a50..6cf1fbe786646316e020b133cda84a0dc6194752 100644 GIT binary patch delta 1706 zcmV;b237g3HM%zfx*L%KehoSs008>&F#%)%001$ujl~NOjRODxBOn6+000I6002{y zVGJaHRs#S4c$}qJi=qV)2(0n{|9n?33HvzLc?_1+L|CH#CIIqx0l)&xEH%vi5wnyz z(4X^2IsYl4YoI^TfuXAC(4ta@UWOtMg$-3NRZK;6lyBD;Rxj;bZ3>NjJk4lLYY2p( z3cOH;?P3p0Fs$%QhHN*Cm#M9mFJ85t zltAHm^fmt`S;1FRCv{8Q$QFhsJxRV@dn=25)Up?t-Tmj}40&27RCX(}z^)Gwbo2{_ z%NQGQLZ;zjSQ%@xdYXJRhw9DWl4;l`zS=gy?Qm>!FYmT=N3>81-|99@oQ*xzzp-_H zqc>c+9cn+)j0x#0MjxtaUN7o+LtQ($NNZLSTYt8(#IWY0%9M_6@cw_iM9%`IEg%MUF;a-Pas3<0aH+b{rXA{rX$xYx0hj z&lA#u(ZJ?Gpz%jXL_*;J!4oFr*dA}zk3PCwG^6=Zc76!<{eL6R&G0>9_ziUvR(V$E z<5Wf!IV~@f-!v}BHW~3{L-4}bm8>iFTw!0tnG;PHvIv3e7-Iw`q8215P zM0OPRWA2FKw&nGOp~x6<6*fvje`8A8f8{Jju^K+j03eew@;OuT1mNd_CQs z&LR78=Xn#`36 zgfpw(wx1C%X)xg~P;XEr>aZMNkEme$FEjmDiQm&7uk8_@vvCnf0}rPG001K(1ONa4 z1^@s68_E5cO`UX1lWR(G z;sk*IADM=XFbIo_hAHQpNMl5Dy$-HntmQN=4)a?4I3({KqhT89cm$+56?F5OmexoT z9r~J1c07QWBzxmb3KI2wp4?3}y;H7N6HkbThAB*;e}DOvlg{J({}>@ZEF?;EZXV_# zUpkPk3d@eXV3`JP>y)(Vc6ex7ynj%ETd<*#?Pqs`X^RMLXtz~mDW8p1KP^LV=O()H zu8F(VP+}19%E{OHZb28H_gL>C#66B3J{J;*7U%$RTs--*&sg;L+YcWS(YQ?8NB00000 z000002$Ss=A%Atx#d1P107l`oK+z(D6?b=cEfm-He;CdpOfPpX|ID|^StL0NAwKX4 zo%r7tJFKC{5(a$1h!ghsgGqKXRye|f12(Y2hHw1BE?(z=Q@o!Wo;S@4AN=^y=m7-f z`$8H$j0mELA&!KiCy_!L8Dx=D^gIeE$~#IZqau41H9@#gM*|ZyaYYMlbkIc)eGG6> zy>*B?ZWv*#>Ql@#{`lM+3)R^Jg?|nJdH?_b1t0$$IhRFlM6q*0bq>)000Fb1C!eqi~$6bXc%z;1(VtsYyk(8M;Vy`2$SI%%+fgf AmH+?% delta 1585 zcmV-12G04qH?1`Sts0R6ehn=e008>&Bmraq001Phjl~NO3k3iGBOn6+000I6003o^ zVGJaH)C2$kc$}qJfubWR2m}28f4)i*M90~7_k6F-I90@eh?@Q15)t|Jfe24<_k80% ze{#>d7wUIkr9b~wiKziTse=bp!O*GFgjo-uFNKNF3yML+#QdN72H$5pscogP#=`^N zj1h&A2!S8W;U}hsBRY!~7EQZZ#=2Q zQUCCY_XYx!=hc_?ZL*550VBA$nq~KDZA)SLRB2O7?5NyGD2*oac zT9uL#Owm&sta7yc=dz~qHmQ3V{2Ejf6Nkpz2d&v%hmJv&CZ3t1*@$T6|Bxv^S)m%>MXT877r%lYQfFAju-jEiWXZ*hRJ{UZkM;>&HQ zR7dKV<9fC&M{5o@pA<6#W+19AVorO!p*^q~(2okqzrA8K%(+DI92C@Pqlc7J5NG zpBO?c-?lcZ{~NC=%SKVWQa+a&iCFAjAJpdCc(3Er85Ad+IpVp+3jIg?jbYnuQYJcD zU0y9~UN-1h37A#fvJ5h4@R}EYlpb%qEjOhLb79P`gP0H6Oyl41LdUHdb;{6V4?Rq} zned&I{#33BZ}%JSpyUVQHyo2pm*Nxq`Z#ecua?>4`k zOy1(xUlen!5n*oW&g>9L+Xy9#sDJRN8tcZ^#-D9TiAp)?WytHZRi4A$u4qK>XsSoR z?E+UY7L|8|@(ylcRT zcre2k+Vp*-3w7%ed!6FOQWvbV^t7Xhj1Te;bF$GJ9HEE*lrJ_bv z_t)Fn<~335%V91LOrL&lI$q#VWVr}3`^5lb-^Pct?p3D?c3Qdmd1Ox6*hpgxPIg#b z+6AsmMtl7d`z}Q}zL=2S*O)XabSp1<}#}?HqQ$<#|~C z==ucHs{6oyq@^!U<_o)3;!kXbDRS02*Qa0M_6_LNe&e>Ouyk6E-Fxb% zCEnU_$T8%)a3I^l1#^=svHAqRq5@jp?MA!jp7AXN4{r~^~1t0+c2mlBG{{sL300000000R9 z5R-ryAAfDm)5o>P6wT&=uV=W$Jq4HOCS9VFqpCL5W|eb|BW)n zcv>^TBsEMi%_cKx%`9`wv%n%tEVB}_XEmN{th15OY_Xm8{+rP3u$%Dx599C@c#Qx6 j00kfdljs skip gorget + cp a, 6 + jp nc, .doneWithGorget ; a >= 6 ---> skip gorget + add a, a ; double to make an offset into gorgetsheen + ld b, 0 + ld c, a + ld hl, .gorgetSheen + add hl, bc ; sprites + ld de, MY_OAM + ld b, 8*6 + ld c, 8*5 + ld a, $12 + call BuildMetaSprite +.doneWithGorget + +; stage-left foot animation + ld a, [CVS+2] + sub a, 2 + jp c, .doneWithLeftFoot ; a < 2 -----> skip left foot + jp z, .startLeftFoot ; a == 2 -------> start left foot + cp a, 8 + jp nc, .killLeftFoot ; after 8-1 frames, kill the left foot + + ld hl, MY_OAM + 2*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 3*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 4*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 5*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + + jp .doneWithLeftFoot +.killLeftFoot + ld hl, MY_OAM + 2*4 + ld [hl], 160 + ld hl, MY_OAM + 3*4 + ld [hl], 160 + ld hl, MY_OAM + 4*4 + ld [hl], 160 + ld hl, MY_OAM + 5*4 + ld [hl], 160 + jp .doneWithLeftFoot +.startLeftFoot + ld hl, .flash + ld de, MY_OAM + 2*4 + ld b, 104+16 + ld c, 8+8 + ld a, $22 + call BuildMetaSprite +.doneWithLeftFoot + + +; stage-right foot animation + ld a, [CVS+2] + cp a, 20 + jp nc, .killRightFoot + cp a, 11 + jp c, .doneWithRightFoot + jp z, .startRightFoot + jp .continueRightFoot +.startRightFoot + ld hl, .flash + ld de, MY_OAM+6*4 + ld b, 104+16 + ld c, 40+8 + ld a, $22 + call BuildMetaSprite + jp .doneWithRightFoot +.continueRightFoot + ld hl, MY_OAM + 6*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 7*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 8*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + ld hl, MY_OAM + 9*4 + dec [hl] + inc hl + inc [hl] + inc [hl] + + jp .doneWithRightFoot +.killRightFoot + ld hl, MY_OAM+6*4 + ld [hl], 160 + ld hl, MY_OAM+7*4 + ld [hl], 160 + ld hl, MY_OAM+8*4 + ld [hl], 160 + ld hl, MY_OAM+9*4 + ld [hl], 160 + jp .doneWithRightFoot +.doneWithRightFoot + + +; stage-left hand animation + ld a, [CVS+2] + sub a, 11 + jp c, .doneWithLeftHand + cp a, 7+1 + jp nc, .doneWithLeftHand + add a, a ; double + add a, a ; double again to make an offset into lefthandsheen + ld b, 0 + ld c, a + ld hl, .leftHandSheen + add hl, bc ; sprites + ld de, MY_OAM+10*4 + ld b, 8*10 + ld c, 8*2 + ld a, $22 + call BuildMetaSprite +.doneWithLeftHand + +; right hand + ld a, [CVS+2] + sub a, 19 + jp z, .startRightHand + jp c, .doneWithRightHand + cp a, 20 + jp nc, .killRightHand + + ld hl, MY_OAM + 14*4 + dec [hl] + dec [hl] + dec [hl] + ;dec [hl] + ld hl, MY_OAM + 15*4 + dec [hl] + dec [hl] + dec [hl] + ;dec [hl] + ld hl, MY_OAM + 16*4 + dec [hl] + dec [hl] + dec [hl] + ;dec [hl] + ld hl, MY_OAM + 17*4 + dec [hl] + dec [hl] + dec [hl] + ;dec [hl] + + jp .doneWithRightHand +.killRightHand + ld hl, MY_OAM+14*4 + ld [hl], 160 + ld hl, MY_OAM+15*4 + ld [hl], 160 + ld hl, MY_OAM+16*4 + ld [hl], 160 + ld hl, MY_OAM+17*4 + ld [hl], 160 + jp .doneWithRightHand +.startRightHand + ld hl, .flash + ld de, MY_OAM+14*4 + ld b, 107+16 + ld c, 62+8 + ld a, $22 + call BuildMetaSprite +.doneWithRightHand + + ret + + +.flash: + db $13, $00 + db $01, $13 +.gorgetSheen: + db $08, $00 + db $07, $00 + db $05, $06 + db $03, $04 + db $00, $02 + db $00, $00 +.leftHandSheen: + db $00, $00 + db $17, $00 + db $14, $00 + db $15, $16 + db $14, $00 + db $15, $16 + db $0b, $0d + db $0c, $0a + db $0f, $0e + db $00, $00 + db $11, $10 + db $00, $00 + db $00, $12 + db $00, $00 + db $00, $00 + db $00, $00 +.fDraw: ret +.SpriteTiles: + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $03,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$40,$00,$38,$00,$1c,$00,$08,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$80,$00,$c0,$00,$e0,$00,$70,$00,$38,$00,$00,$00,$00,$00 + db $00,$00,$18,$00,$0e,$00,$07,$00,$03,$00,$01,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$c0,$00,$20,$00,$00,$00 + db $00,$00,$00,$00,$70,$00,$38,$00,$1c,$00,$0e,$00,$06,$00,$00,$00 + db $00,$00,$00,$00,$80,$00,$c0,$00,$e0,$00,$70,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $c0,$00,$e0,$00,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$04,$00,$06,$00,$07,$00,$03,$00 + db $01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$c0,$00,$c0,$00,$40,$00 + db $00,$00,$00,$00,$00,$00,$03,$00,$03,$00,$01,$00,$00,$00,$00,$00 + db $00,$00,$80,$00,$c0,$00,$e0,$00,$70,$00,$38,$00,$04,$00,$04,$00 + db $00,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$40,$00,$38,$00,$1c,$00,$0c,$00,$04,$00,$00,$00,$00,$00 + db $80,$00,$c0,$00,$e0,$00,$70,$00,$38,$00,$1c,$00,$0e,$00,$07,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$0c,$00 + db $0e,$00,$07,$00,$03,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$80,$00,$c0,$00,$c0,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$08,$00,$0c,$00,$06,$00,$07,$00,$00,$00,$00,$00,$00,$00 +.SpriteTilesEnd: EmperorMap: db $1b, $1c, $1d, $1e, $1f, $20, $21, $62 @@ -19,13 +353,13 @@ EmperorMap: db $37, $38, $6b, $77, $73, $39, $3a, $69 db $3b, $3c, $3d, $77, $77, $3e, $3f, $40 db $41, $42, $43, $77, $44, $45, $46, $47 - db $6c, $48, $49, $4a, $4b, $77, $4c, $7a + db $6c, $48, $49, $4a, $4b, $77, $4c, $79 db $6c, $4e, $77, $77, $77, $4f, $50, $79 db $6c, $51, $52, $53, $54, $55, $56, $79 db $67, $57, $58, $59, $5a, $5b, $5c, $68 db $5d, $5e, $5f, $71, $71, $60, $61, $78 - db $71, $71, $71, $7c, $7d, $71, $71, $71 - db $71, $71, $71, $7b, $7e, $71, $71, $71 + db $71, $71, $71, $7b, $7c, $71, $71, $71 + db $71, $71, $71, $7a, $7d, $71, $71, $71 EmperorMapEnd: EmperorTiles: @@ -61,20 +395,20 @@ EmperorTiles: db $00,$ff,$aa,$ff,$04,$ff,$aa,$ff,$00,$ff,$a9,$ff,$03,$ff,$a7,$fa db $0d,$f8,$95,$f0,$35,$e0,$55,$c0,$d5,$80,$55,$00,$55,$00,$54,$01 db $ff,$ff,$35,$f0,$35,$f0,$35,$f0,$35,$f0,$35,$f0,$35,$f8,$39,$7c - db $71,$6f,$62,$3f,$7c,$33,$5e,$11,$5f,$18,$5f,$08,$57,$04,$56,$07 - db $0f,$f3,$1e,$e2,$3e,$c6,$7c,$8c,$f8,$18,$f8,$18,$f0,$30,$30,$f0 - db $f4,$e3,$3d,$3b,$05,$07,$03,$03,$02,$03,$02,$03,$3a,$3b,$2a,$3b + db $71,$6f,$72,$3f,$5c,$1b,$56,$07,$57,$03,$55,$01,$55,$00,$55,$00 + db $0f,$f3,$1e,$e2,$3e,$c6,$7c,$8c,$f8,$1f,$f8,$18,$f0,$30,$30,$f0 + db $f4,$e3,$3d,$3b,$05,$07,$03,$0b,$02,$f3,$02,$13,$3a,$3b,$2a,$3b db $c1,$fc,$91,$fc,$11,$fc,$11,$fc,$15,$f8,$35,$f0,$35,$f0,$75,$e0 - db $39,$7e,$1c,$7f,$16,$7f,$13,$7f,$49,$3f,$4c,$3f,$46,$1f,$53,$0f - db $57,$03,$55,$01,$57,$87,$1c,$ec,$c8,$f8,$68,$f8,$3c,$fc,$18,$f8 - db $f0,$0f,$fa,$87,$fc,$c3,$7e,$71,$0f,$08,$07,$04,$07,$04,$06,$07 - db $70,$b0,$70,$90,$70,$90,$78,$98,$78,$98,$7f,$8f,$7f,$80,$7f,$80 - db $26,$3f,$11,$1f,$13,$1f,$33,$3e,$37,$3e,$ed,$fc,$ed,$18,$fd,$18 + db $39,$7e,$1e,$7f,$17,$7f,$12,$7f,$49,$3f,$4c,$3f,$46,$1f,$53,$0f + db $55,$00,$55,$00,$f5,$e1,$3d,$fd,$87,$ff,$41,$ff,$21,$ff,$19,$ff + db $fd,$fd,$83,$8b,$01,$09,$01,$09,$01,$09,$01,$09,$01,$09,$81,$89 + db $70,$bf,$70,$90,$70,$90,$78,$98,$78,$98,$7f,$8f,$7f,$80,$7f,$80 + db $26,$ff,$11,$1f,$13,$1f,$33,$3e,$37,$3e,$ed,$fc,$ed,$18,$fd,$18 db $d5,$c0,$d5,$80,$55,$00,$55,$00,$55,$00,$55,$20,$45,$30,$41,$1c db $55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$54,$01,$50,$07 db $51,$07,$54,$03,$54,$01,$54,$01,$55,$00,$00,$7f,$15,$c0,$55,$00 - db $8b,$fb,$8a,$fb,$ca,$fb,$6e,$ff,$33,$ff,$1e,$fe,$18,$f8,$1f,$7f - db $86,$87,$86,$87,$86,$87,$86,$87,$8e,$8f,$8b,$8b,$f8,$f8,$ff,$ff + db $8f,$ff,$8f,$ff,$cf,$ff,$6f,$fa,$37,$f8,$1f,$f8,$1f,$f8,$1f,$78 + db $c3,$cb,$fe,$ff,$fe,$ff,$9e,$95,$9e,$91,$9e,$91,$9e,$91,$9e,$91 db $f5,$10,$f5,$20,$f5,$20,$f5,$20,$f5,$20,$f5,$20,$f5,$20,$f5,$20 db $54,$03,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00 db $15,$e0,$05,$f0,$45,$30,$40,$1f,$55,$00,$55,$00,$55,$00,$55,$00 @@ -108,7 +442,7 @@ EmperorTiles: db $f4,$0f,$f7,$0f,$f5,$0f,$f7,$0f,$f5,$0f,$f6,$0f,$f5,$0f,$f7,$0f db $7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$ff,$ff db $9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9f,$9f - db $01,$ff,$aa,$ff,$44,$ff,$aa,$ff,$00,$ff,$aa,$7f,$c0,$3f,$ea,$1f + db $01,$ff,$aa,$ff,$e4,$ff,$9a,$9f,$98,$9f,$fe,$ff,$94,$b7,$92,$93 db $c0,$c0,$70,$30,$58,$18,$5c,$0e,$57,$07,$55,$07,$54,$07,$54,$07 db $54,$0f,$45,$1e,$4d,$1e,$49,$3e,$19,$7e,$39,$7e,$21,$fe,$61,$fc db $7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80,$7f,$80 @@ -125,10 +459,9 @@ EmperorTiles: db $55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00,$55,$00 db $b0,$bf,$e0,$ff,$c0,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff db $9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91,$9e,$91 - db $9e,$91,$9e,$91,$de,$91,$be,$91,$be,$91,$de,$91,$de,$91,$be,$91 - db $00,$ef,$00,$ef,$00,$ef,$00,$ef,$00,$c0,$00,$ff,$00,$ff,$00,$ff - db $00,$ff,$00,$ff,$00,$ff,$00,$c0,$00,$ed,$00,$ee,$00,$ee,$00,$ee - db $00,$ff,$00,$ff,$00,$ff,$00,$03,$00,$f7,$00,$ef,$00,$ef,$00,$ef - db $00,$5f,$00,$5f,$00,$1f,$00,$bf,$00,$03,$00,$ff,$00,$ff,$00,$ff + db $00,$e6,$00,$e7,$00,$e7,$00,$e7,$00,$80,$00,$ff,$00,$ff,$00,$ff + db $00,$ff,$00,$ff,$00,$ff,$00,$80,$00,$e5,$00,$e4,$00,$e6,$00,$e6 + db $00,$ff,$00,$ff,$00,$ff,$00,$01,$00,$f7,$00,$e7,$00,$ef,$00,$ef + db $00,$4f,$00,$5f,$00,$1f,$00,$bf,$00,$07,$00,$ff,$00,$ff,$00,$ff EmperorTilesEnd: diff --git a/04theemperor.aseprite b/04theemperor.aseprite index b497e971ab39c6c929e49070103a9e53b8652977..72e4f213fb6ad3af1f04590bef971454b01f33c5 100644 GIT binary patch delta 1780 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 diff --git a/07TheChariot.inc b/07TheChariot.inc index 29eea74..a7d1386 100644 --- a/07TheChariot.inc +++ b/07TheChariot.inc @@ -8,6 +8,17 @@ TheChariot: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/08Strength.inc b/08Strength.inc index 892aeea..037ae13 100644 --- a/08Strength.inc +++ b/08Strength.inc @@ -8,7 +8,17 @@ Strength: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/09TheHermit.inc b/09TheHermit.inc index ac4e24c..3363719 100644 --- a/09TheHermit.inc +++ b/09TheHermit.inc @@ -8,7 +8,17 @@ TheHermit: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/10WheelOfFortune.inc b/10WheelOfFortune.inc index d77a501..3d787a3 100644 --- a/10WheelOfFortune.inc +++ b/10WheelOfFortune.inc @@ -8,7 +8,17 @@ WheelOfFortune: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/11Justice.inc b/11Justice.inc index 83a7640..e935728 100644 --- a/11Justice.inc +++ b/11Justice.inc @@ -8,7 +8,17 @@ Justice: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/12TheHangedMan.inc b/12TheHangedMan.inc index 57371c3..e242308 100644 --- a/12TheHangedMan.inc +++ b/12TheHangedMan.inc @@ -8,7 +8,17 @@ TheHangedMan: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: ; original export script by gabriel reis, modified by shoofle diff --git a/13Death.inc b/13Death.inc index f95b80a..e58ecfe 100644 --- a/13Death.inc +++ b/13Death.inc @@ -8,7 +8,18 @@ Death: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/14Temperance.inc b/14Temperance.inc index aa49ac8..d866e93 100644 --- a/14Temperance.inc +++ b/14Temperance.inc @@ -8,7 +8,18 @@ Temperance: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: + ; original export script by gabriel reis, modified by shoofle diff --git a/15TheDevil.inc b/15TheDevil.inc index 9fa6167..ed631bc 100644 --- a/15TheDevil.inc +++ b/15TheDevil.inc @@ -8,7 +8,18 @@ TheDevil: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/16TheTower.inc b/16TheTower.inc index 1120293..faa64ed 100644 --- a/16TheTower.inc +++ b/16TheTower.inc @@ -8,7 +8,18 @@ TheTower: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/17TheStar.inc b/17TheStar.inc index 94d7b52..1aa102e 100644 --- a/17TheStar.inc +++ b/17TheStar.inc @@ -8,7 +8,18 @@ TheStar: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/18TheMoon.inc b/18TheMoon.inc index eaa32a4..960575d 100644 --- a/18TheMoon.inc +++ b/18TheMoon.inc @@ -8,7 +8,18 @@ TheMoon: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/19TheSun.inc b/19TheSun.inc index 6d210ad..bf83e3d 100644 --- a/19TheSun.inc +++ b/19TheSun.inc @@ -8,7 +8,18 @@ TheSun: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: diff --git a/20Judgement.inc b/20Judgement.inc index 0ca4e90..076d95f 100644 --- a/20Judgement.inc +++ b/20Judgement.inc @@ -8,7 +8,18 @@ Judgement: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle ; sparks flying off ; original export script by gabriel reis, modified by shoofle diff --git a/21TheWorld.inc b/21TheWorld.inc index 8e3040f..d9a7483 100644 --- a/21TheWorld.inc +++ b/21TheWorld.inc @@ -8,8 +8,18 @@ TheWorld: dw .BackgroundCopy dw .KeyArtTilesEnd - .KeyArtTiles dw .KeyArtTiles - ; original export script by gabriel reis, modified by shoofle -; continents + dw .SpriteTilesEnd - .SpriteTiles + dw .SpriteTiles + dw .fInit + dw .fUpdate + dw .fDraw + +.fInit: ret +.fUpdate: ret +.fDraw: ret +.SpriteTiles: +.SpriteTilesEnd: +; original export script by gabriel reis, modified by shoofle .KeyArtTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/Async.inc b/Async.inc index e7280c1..96426d6 100644 --- a/Async.inc +++ b/Async.inc @@ -18,7 +18,7 @@ def ASYNC_STACK_TOP equ $ffc0 ; second value is the destination of the async call, at ffbc = ffbe-2 = ffc0-2-2 def ASYNC_THREAD_CALL equ ASYNC_STACK_TOP - 2 - 2 -def SAFE_ASYNC_START EQU 150 +def SAFE_ASYNC_START EQU 148 def SAFE_ASYNC_END EQU 153 Async_Spawn_HL: @@ -161,6 +161,11 @@ Async_Spawn: ei ret +Async_Kill: + ld hl, EndOfInstructions + call Async_Spawn_HL + ret + Async_EnterThread: ;stack looks like: ;c113 (SMC int @ LYC 90 pc), 004b (hw int @ LYC 90 pc), outer context pc diff --git a/CardHelpers.inc b/CardHelpers.inc index 34fe1f2..f5b0eba 100644 --- a/CardHelpers.inc +++ b/CardHelpers.inc @@ -1,5 +1,6 @@ ; CARD_HELPER_VARS_START defines the beginning of the $100 bytes set aside for system usage -def cvCardAddress equ 0 ; location of the current card's struct +def cvCardBank equ 0 +def cvCardAddress equ 1 ; location of the current card's struct LoadCardData: LoadCardDataAsync: @@ -30,6 +31,7 @@ LoadCardDataAsync: add hl, bc ; triple add bc entries are bank, addr, addr ld a, [hl+] + ld [CARD_HELPER_VARS_START + cvCardBank], a ld [rROMB0], a ; select the specified bank ; follow the pointer we're looking at, and write it to cvCardAddress ld a, [hl+] @@ -76,7 +78,7 @@ LoadCardDataAsync: ld b, 16 ; height ld c, 8 ; width - call CopyTilesToMapUnsafe + call CopyTilesToMap ld a, [CARD_HELPER_VARS_START + cvCardAddress] ld l, a @@ -100,7 +102,7 @@ LoadCardDataAsync: ld l, e ; hl takes the source ld de, $9000 + VARIABLE_TILES_START*$10 ; always load tile data into the same spot in vram - call CopyRangeUnsafe + call CopyRange ld a, [CARD_HELPER_VARS_START + cvCardAddress] @@ -125,7 +127,7 @@ LoadCardDataAsync: ld l, e ; hl takes the source ld de, $8000 ; sprite tiles get loaded into the bottom of vram - call CopyRangeUnsafe + call CopyRange ld a, [CARD_HELPER_VARS_START + cvCardAddress] ld l, a @@ -133,8 +135,7 @@ LoadCardDataAsync: ld h, a ; hl now contains the address of the card data. ld b, 0 - ld c, Card_Offset_functions ; jump straight to sprite tiles length and location! - + ld c, Card_Offset_functions ; jump straight to function handles add hl, bc ; hl now points to the card functions ld a, [hl+] @@ -158,6 +159,12 @@ CardInit: ld a, [rLCDC] and a, %1111_1011 ld [rLCDC], a + + ld hl, ZEROES + ld de, MY_OAM + ld bc, $100 + call CopyRange + call CARD_INIT - 1 ret diff --git a/CardLibrary.inc b/CardLibrary.inc index 526b3a7..9b68b68 100644 --- a/CardLibrary.inc +++ b/CardLibrary.inc @@ -177,24 +177,30 @@ INCLUDE "01TheMagician.inc" INCLUDE "02TheHighPriestess.inc" INCLUDE "03TheEmpress.inc" INCLUDE "04TheEmperor.inc" + + +SECTION "Second Eight Cards", ROMX INCLUDE "05TheHierophant.inc" INCLUDE "06TheLovers.inc" INCLUDE "07TheChariot.inc" - -SECTION "Second Eight Cards", ROMX INCLUDE "08Strength.inc" INCLUDE "09TheHermit.inc" + + +SECTION "Third Eight Cards", ROMX INCLUDE "10WheelOfFortune.inc" INCLUDE "11Justice.inc" INCLUDE "12TheHangedMan.inc" INCLUDE "13Death.inc" INCLUDE "14Temperance.inc" -INCLUDE "15TheDevil.inc" -SECTION "Third Eight Cards", ROMX +SECTION "Fourth Eight Cards", ROMX +INCLUDE "15TheDevil.inc" INCLUDE "16TheTower.inc" INCLUDE "17TheStar.inc" INCLUDE "18TheMoon.inc" INCLUDE "19TheSun.inc" + +SECTION "FIFTH EIGHT CARDS", ROMX INCLUDE "20Judgement.inc" INCLUDE "21TheWorld.inc" \ No newline at end of file diff --git a/CopyRangeSafe.inc b/CopyRangeSafe.inc index 5d07fff..89ef549 100644 --- a/CopyRangeSafe.inc +++ b/CopyRangeSafe.inc @@ -14,17 +14,21 @@ DEF SAFE_TRANSFER_END EQU 153 CopyRange: -CopyRangeUnsafe: ; this is threadsafe but not vblank safe +CopyRangeUnsafe: ; hl is source ; de is destination ; bc is length to copy + ld a, b + or a, c + ret z +.loop ld a, [hl+] ld [de], a inc de dec bc ld a, b or a, c ; check if bc is zero - jp nz, CopyRange + jp nz, .loop ret @@ -34,7 +38,10 @@ CopyRangeUnsafeBy8s: ; de is destination ; bc is 1/8 of length to copy!!! ; so like this will copy 8*bc bytes! - + ld a, b + or a, c + ret z +.loop ld a, [hl+] ld [de], a inc de @@ -62,7 +69,5 @@ CopyRangeUnsafeBy8s: dec bc ld a, b or a, c ; check if bc is zero - jp nz, CopyRangeBy8s - nop - nop + jp nz, .loop ret \ No newline at end of file diff --git a/KeyArtTiles.asm b/KeyArtTiles.asm index ec3f80c..a0c2fca 100644 --- a/KeyArtTiles.asm +++ b/KeyArtTiles.asm @@ -4,42 +4,120 @@ KeyArtTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$ff,$7f,$ff,$7f,$ff,$60,$ff,$6f,$ff,$6d,$fa,$6a,$fd,$6d,$fa - db $00,$ff,$ff,$ff,$ff,$ff,$00,$ff,$ff,$ff,$55,$aa,$aa,$55,$55,$aa - db $00,$ff,$fe,$ff,$fe,$ff,$06,$ff,$f6,$ff,$56,$bf,$b6,$5f,$56,$bf - db $6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa,$6a,$fd,$6d,$fa - db $aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa,$aa,$55,$55,$aa - db $b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf,$b6,$5f,$56,$bf - db $6a,$fd,$6d,$fa,$6a,$fd,$6f,$ff,$60,$ff,$7f,$ff,$7f,$ff,$00,$ff - db $aa,$55,$55,$aa,$aa,$55,$ff,$ff,$00,$ff,$ff,$ff,$ff,$ff,$00,$ff - db $b6,$5f,$56,$bf,$b6,$5f,$f6,$ff,$06,$ff,$fe,$ff,$fe,$ff,$00,$ff - db $ff,$00,$80,$7f,$80,$7f,$9f,$7f,$9f,$7f,$98,$78,$99,$79,$9a,$7a - db $ff,$00,$01,$fe,$01,$fe,$f9,$fe,$f9,$fe,$19,$1e,$19,$1e,$d9,$de - db $9a,$7a,$99,$79,$98,$78,$9c,$78,$99,$78,$9b,$79,$9b,$7a,$9b,$7a - db $d9,$de,$99,$9e,$d9,$de,$f9,$de,$99,$9e,$d9,$9e,$d9,$9e,$d9,$5e - db $98,$78,$98,$7b,$99,$7a,$9a,$7c,$9f,$7b,$99,$79,$99,$79,$98,$78 - db $59,$5e,$19,$fe,$f9,$1e,$19,$1e,$d9,$de,$d9,$de,$59,$5e,$19,$1e - db $98,$79,$98,$79,$98,$78,$9f,$7f,$9f,$7f,$80,$7f,$80,$7f,$ff,$00 - db $19,$9e,$19,$9e,$19,$1e,$f9,$fe,$f9,$fe,$01,$fe,$01,$fe,$ff,$00 + db $06,$06,$02,$02,$02,$02,$03,$03,$01,$01,$0f,$0f,$00,$00,$00,$00 + db $00,$00,$18,$19,$3c,$3f,$26,$27,$42,$43,$43,$43,$41,$41,$40,$40 + db $00,$00,$00,$80,$00,$80,$00,$c0,$00,$c0,$00,$e0,$80,$e0,$80,$f0 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01 + db $00,$00,$00,$00,$00,$00,$0f,$0f,$0f,$09,$0f,$09,$0f,$09,$ff,$f9 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$f8 + db $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01 + db $80,$80,$80,$80,$80,$80,$80,$80,$00,$00,$00,$00,$00,$00,$00,$00 + db $c0,$f0,$40,$78,$60,$78,$20,$38,$30,$38,$10,$18,$18,$18,$08,$08 + db $01,$01,$00,$00,$00,$00,$00,$00,$0f,$0f,$0f,$0f,$00,$00,$00,$00 + db $ff,$f9,$0f,$09,$0f,$09,$0f,$09,$ff,$f9,$ff,$f9,$0f,$09,$0f,$09 + db $f8,$f8,$00,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$07 + db $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00 + db $00,$00,$00,$3f,$1e,$61,$3f,$c0,$7f,$80,$76,$89,$7f,$99,$7f,$80 + db $08,$08,$08,$08,$08,$c8,$88,$68,$c8,$38,$e8,$18,$f0,$88,$e0,$18 + db $00,$00,$3f,$3f,$3f,$3f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $0f,$09,$ff,$f9,$ff,$f9,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09 + db $00,$00,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $0d,$0b,$0d,$0a,$0d,$0a,$0d,$0a,$0d,$0a,$1d,$1a,$3f,$38,$7e,$41 + db $80,$80,$80,$80,$80,$80,$80,$80,$b0,$b0,$d0,$f0,$90,$d0,$e0,$a3 + db $39,$c6,$3f,$40,$18,$67,$1f,$20,$0f,$30,$0f,$1f,$00,$18,$00,$f1 + db $e0,$10,$e0,$10,$c0,$30,$e0,$20,$c0,$40,$80,$80,$00,$80,$00,$ff + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c0 + db $0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$19 + db $f7,$88,$d7,$a8,$d7,$a8,$7f,$70,$3f,$60,$3f,$30,$1f,$18,$0b,$0c + db $ec,$2e,$f4,$7a,$f4,$7a,$e4,$7b,$54,$eb,$54,$eb,$d5,$6a,$95,$6a + db $00,$30,$00,$10,$00,$10,$00,$10,$00,$1f,$04,$8b,$04,$8b,$04,$8b + db $01,$86,$01,$86,$01,$86,$01,$8e,$05,$8a,$05,$1a,$05,$1a,$07,$1a + db $00,$e0,$40,$b0,$50,$a8,$50,$a8,$54,$ac,$54,$ae,$56,$aa,$56,$aa + db $0e,$1f,$1b,$1f,$3f,$37,$1f,$3c,$30,$5f,$3f,$50,$71,$9e,$7f,$90 + db $00,$00,$80,$80,$c0,$c0,$c0,$40,$c0,$40,$c0,$40,$c0,$40,$c0,$40 + db $0b,$0c,$1f,$18,$17,$18,$1f,$10,$1f,$10,$3f,$30,$3f,$20,$3f,$20 + db $95,$6a,$95,$6a,$95,$6a,$95,$7a,$95,$7a,$55,$ba,$55,$ba,$55,$ba + db $04,$8b,$04,$8b,$04,$8b,$04,$8b,$04,$8b,$04,$8b,$04,$8b,$04,$8b + db $07,$1a,$07,$1a,$07,$1a,$07,$1a,$07,$1a,$07,$1a,$07,$1a,$07,$1a + db $56,$aa,$54,$af,$59,$ae,$53,$bc,$63,$bc,$67,$f8,$4f,$f0,$5f,$e0 + db $71,$9e,$ff,$1f,$ef,$19,$ef,$19,$df,$39,$df,$39,$bf,$79,$af,$69 + db $c0,$40,$c0,$c0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $3f,$20,$7e,$61,$7e,$41,$fe,$c1,$be,$c1,$be,$c1,$be,$c1,$bc,$c3 + db $55,$ba,$55,$ba,$55,$ba,$55,$ba,$b4,$fb,$b4,$eb,$b4,$eb,$f4,$eb + db $04,$8b,$04,$8b,$04,$8b,$04,$8b,$04,$0b,$04,$0b,$04,$0b,$04,$0b + db $07,$1a,$07,$1a,$07,$1a,$07,$1a,$05,$0b,$05,$0b,$05,$0b,$05,$0b + db $7f,$c0,$7f,$c0,$7e,$c1,$7e,$c1,$7d,$c3,$5b,$e7,$47,$ff,$ff,$ff + db $4f,$c9,$4f,$c9,$cf,$c9,$cf,$c9,$cf,$c9,$cf,$c9,$cf,$c9,$cf,$c9 + db $91,$ef,$c7,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$7f,$7f,$7f,$7f + db $f4,$eb,$f4,$eb,$d4,$eb,$94,$ab,$94,$ab,$14,$2b,$14,$2b,$14,$2b + db $04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$0b + db $05,$0a,$05,$0a,$05,$0a,$05,$0a,$05,$0a,$05,$0a,$05,$0a,$05,$0a + db $ff,$ff,$ff,$ff,$ff,$ff,$7f,$ff,$7f,$ff,$7f,$ff,$7f,$bf,$7f,$bf + db $8f,$89,$8f,$89,$8f,$89,$8f,$89,$8f,$89,$8f,$89,$0f,$09,$0f,$09 + db $3e,$3e,$1e,$1e,$0c,$0c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $14,$2b,$14,$6a,$14,$6a,$14,$6a,$14,$6b,$14,$6b,$14,$6b,$15,$6a + db $04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$0b,$04,$1b,$05,$9a,$05,$fa + db $01,$0e,$01,$06,$01,$06,$01,$06,$01,$0e,$05,$8a,$05,$9a,$05,$fa + db $5e,$be,$5c,$bc,$40,$b0,$40,$b0,$40,$b0,$40,$b0,$50,$a8,$50,$a8 + db $0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09,$0f,$09 + db $15,$6a,$15,$6a,$15,$6a,$15,$6a,$15,$6a,$15,$6a,$15,$6a,$15,$6a + db $50,$a8,$50,$a8,$50,$a8,$50,$a8,$50,$a8,$50,$a8,$50,$ac,$50,$ac + db $15,$6a,$15,$6a,$15,$6a,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa + db $50,$ac,$50,$ac,$50,$ac,$50,$ac,$50,$ac,$50,$ac,$50,$ac,$50,$ac + db $55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$15,$ea,$15,$ea + db $55,$aa,$55,$aa,$41,$80,$08,$88,$1c,$1c,$3e,$36,$1f,$0f,$1b,$19 + db $55,$aa,$55,$aa,$05,$02,$11,$12,$38,$38,$7c,$6c,$f8,$f0,$d8,$98 + db $03,$03,$07,$06,$7e,$7e,$4c,$7c,$44,$4c,$64,$6c,$7c,$3c,$00,$00 + db $c0,$c0,$e0,$60,$7e,$7e,$32,$3e,$22,$32,$26,$36,$3e,$3c,$00,$00 + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02 + db $80,$7f,$00,$ff,$00,$ff,$03,$fc,$7f,$80,$fe,$01,$fc,$03,$fc,$02 + db $00,$c0,$00,$c0,$80,$40,$80,$40,$00,$80,$00,$00,$00,$00,$00,$00 + db $00,$01,$00,$1e,$04,$3b,$14,$6b,$30,$4e,$30,$4c,$20,$5e,$20,$57 + db $00,$61,$00,$40,$00,$c0,$00,$c0,$00,$c0,$00,$c0,$00,$c0,$00,$c0 + db $00,$81,$00,$81,$00,$83,$00,$82,$00,$86,$00,$fe,$00,$02,$00,$02 + db $50,$ac,$50,$ac,$50,$ac,$50,$ac,$50,$ad,$50,$ad,$51,$ae,$51,$ae + db $0f,$09,$0f,$09,$00,$3f,$0e,$f1,$7f,$80,$ff,$00,$ff,$00,$80,$7f + db $00,$00,$00,$00,$00,$00,$00,$80,$80,$40,$80,$40,$00,$c0,$00,$c0 + db $3c,$c3,$3c,$c2,$7c,$82,$18,$e6,$00,$3c,$00,$00,$00,$00,$00,$00 + db $00,$fc,$00,$3e,$00,$16,$00,$12,$00,$12,$00,$33,$00,$23,$00,$61 + db $00,$e1,$00,$3f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$c3,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$03,$00,$02 + db $00,$00,$00,$00,$00,$00,$00,$01,$01,$02,$01,$02,$00,$03,$00,$03 + db $00,$00,$00,$00,$00,$fc,$70,$8f,$fe,$01,$ff,$00,$ff,$00,$01,$fe + db $00,$03,$00,$03,$01,$02,$01,$02,$00,$01,$00,$00,$00,$00,$00,$00 + db $01,$fe,$00,$ff,$00,$ff,$c0,$3f,$fe,$01,$7f,$80,$3f,$c0,$3f,$c0 + db $00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40 + db $00,$3f,$00,$7c,$00,$68,$00,$48,$00,$48,$00,$cc,$00,$c4,$00,$86 + db $3c,$c3,$3c,$43,$3e,$41,$18,$67,$00,$3c,$00,$00,$00,$00,$00,$00 + db $00,$80,$00,$78,$20,$dc,$28,$d6,$0c,$72,$0c,$32,$04,$7a,$04,$ea + db $00,$c3,$00,$80,$00,$80,$00,$80,$00,$80,$00,$80,$00,$c0,$00,$40 + db $00,$87,$00,$fc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$86,$00,$02,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03 + db $00,$81,$00,$81,$00,$c1,$00,$41,$00,$61,$00,$7f,$00,$40,$00,$40 + db $01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02,$01,$02 + db $80,$40,$80,$40,$80,$40,$80,$40,$80,$40,$80,$40,$80,$40,$80,$40 + db $60,$60,$40,$40,$40,$40,$c0,$c0,$80,$80,$f0,$f0,$00,$00,$00,$00 + db $00,$00,$00,$00,$1f,$1f,$08,$08,$08,$08,$0c,$0c,$04,$04,$04,$04 + db $00,$00,$00,$00,$f8,$f8,$10,$10,$10,$10,$30,$30,$20,$20,$20,$20 + db $55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa,$55,$aa BackgroundCopy: - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $01, $02, $03, $0a, $0b, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $04, $05, $06, $0c, $0d, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $04, $05, $06, $0e, $0f, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $04, $05, $06, $10, $11, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $07, $08, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $1a, $1a, $1a, $1c, $1d, $1e, $1f, $20 + db $1a, $1a, $21, $22, $23, $24, $25, $26 + db $1a, $27, $28, $29, $2a, $2b, $2c, $2d + db $1a, $2e, $2f, $30, $31, $32, $33, $1a + db $1a, $34, $35, $36, $37, $38, $39, $3a + db $1a, $3b, $3c, $3d, $3e, $3f, $40, $41 + db $1a, $42, $43, $44, $45, $46, $47, $1a + db $1a, $48, $49, $4a, $4b, $4c, $4d, $1a + db $1a, $4e, $4f, $50, $51, $52, $53, $1a + db $1a, $1a, $54, $7b, $7b, $55, $53, $1a + db $1a, $1a, $56, $7b, $7b, $57, $53, $1a + db $6a, $6b, $58, $59, $5a, $63, $64, $65 + db $6c, $6d, $77, $5b, $5c, $76, $5e, $5f + db $6f, $70, $71, $1a, $1a, $60, $66, $67 + db $72, $73, $74, $79, $7a, $61, $68, $69 + db $6e, $1a, $75, $1b, $78, $62, $1a, $5d diff --git a/ScreenCardBrowse.inc b/ScreenCardBrowse.inc index 98f2a9d..564386c 100644 --- a/ScreenCardBrowse.inc +++ b/ScreenCardBrowse.inc @@ -11,15 +11,15 @@ CardBrowseSetup: ld a, 1 ld [vBlocked], a - ld hl, .asyncTask - call Async_Spawn_HL - ; make sure working oam is clear ld hl, ZEROES ld de, MY_OAM ld bc, $100 call CopyRange - + + ld hl, .asyncTask + call Async_Spawn_HL + ret .asyncTask: @@ -91,6 +91,12 @@ CardBrowseUpdate: ld hl, RefreshCardTask call Async_Spawn_HL + ; make sure working oam is clear + ld hl, ZEROES + ld de, MY_OAM + ld bc, $100 + call CopyRange + ret diff --git a/ScreenMainMenu.inc b/ScreenMainMenu.inc index ab4f550..76b03d3 100644 --- a/ScreenMainMenu.inc +++ b/ScreenMainMenu.inc @@ -26,21 +26,21 @@ MainMenuSetup: ; Turn the LCD off ld hl, rLCDC bit 7, [hl] - jp z, MainMenuSetup_ScreenOff -MainMenuSetup_BusyWait: + jp z, .screenOff +.busyWait ld a, [rLY] cp a, 143 - jp c, MainMenuSetup_BusyWait - ld [hl], 0 + ;jp c, .busyWait -MainMenuSetup_ScreenOff: +.screenOff: ld a, 0 ldh [rLCDC], a ld hl, SquaresTileset8 ld de, $8010 + $80*16 - ld bc, (SquaresTilesetEnd - SquaresTileset8) - call CopyRangeUnsafe + ld bc, 16 +;println "the diff is ", SquaresTilesetEnd - SquaresTileset8 + call CopyRange def spacing equ $12 @@ -48,7 +48,7 @@ MainMenuSetup_ScreenOff: def TileStartCardBackSprites24 equ 0 ld de, $8000 + TileStartCardBackSprites24*$10; destination of copy ld bc, CardBackSprites24End - CardBackSprites24 ; length to copy - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites23 def TileStartCardBackSprites23 equ TileStartCardBackSprites24 + spacing @@ -60,45 +60,45 @@ MainMenuSetup_ScreenOff: def TileStartCardBackSprites22 equ TileStartCardBackSprites23 + spacing ld de, $8000 + TileStartCardBackSprites22*$10; destination of copy ld bc, CardBackSprites22End - CardBackSprites22 - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites21 def TileStartCardBackSprites21 equ TileStartCardBackSprites22 + spacing ld de, $8000 + TileStartCardBackSprites21*$10; destination of copy ld bc, CardBackSprites21End - CardBackSprites21 - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites20 def TileStartCardBackSprites20 equ TileStartCardBackSprites21 + spacing ld de, $8000 + TileStartCardBackSprites20*$10 ld bc, CardBackSprites20End - CardBackSprites20 - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites19 def TileStartCardBackSprites19 equ TileStartCardBackSprites20 + spacing ld de, $8000 + TileStartCardBackSprites19*$10 ld bc, CardBackSprites19End - CardBackSprites19 - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites18 def TileStartCardBackSprites18 equ TileStartCardBackSprites19 + spacing ld de, $8000 + TileStartCardBackSprites18*$10 ld bc, CardBackSprites18End - CardBackSprites18 - call CopyRangeUnsafe + call CopyRange ld hl, CardBackSprites17 def TileStartCardBackSprites17 equ TileStartCardBackSprites18 + spacing ld de, $8000 + TileStartCardBackSprites17*$10 ld bc, CardBackSprites17End - CardBackSprites17 - call CopyRangeUnsafe + call CopyRange def TileStartCardBackSprites16 equ TileStartCardBackSprites17 + spacing - ld hl, SquaresTilemap + ld hl, MainUITilemap ld de, $9800 ld b, 18 ld c, 20 - call CopyTilesToMapUnsafe + call CopyTilesToMap ld hl, StringRead ld de, $9800 + 32*11 + 4 @@ -112,15 +112,16 @@ MainMenuSetup_ScreenOff: ; clear out the dma source - ld hl, $c000 + ld hl, MY_OAM ld a, 0 : ld [hl+], a cp a, l - jp nz, :- + jp nz, :- ; this was clever. as long as a (0) doesn't equal l (low bit of address) we loop + ; so this goes until l loops around to 0 ld de, SAFE_DMA_LOCATION - ld a, $c0 + ld a, HIGH(MY_OAM) call RunDMA ; set LCD and display registers @@ -262,7 +263,7 @@ MainMenuUpdate: ld a, [vTime+1] cp a, $01 - jp c, MainMenuUpdate_Done ; if the timer is less than $0100, skip to end + jp c, .allDone ; if the timer is less than $0100, skip to end ;otherwise reset the timer ld a, 0 @@ -310,7 +311,7 @@ MainMenuUpdate: ld c, a ; x coordinate ld a, [hl+] ld e, a ; width - ld hl, $c000 + ld hl, MY_OAM call DrawWholeCard ld hl, Coords @@ -327,7 +328,7 @@ MainMenuUpdate: ld c, a ; x coordinate ld a, [hl+] ld e, a ; width - ld hl, $c000 + 9*4 + ld hl, MY_OAM + 9*4 call DrawWholeCard ld hl, Coords @@ -344,43 +345,18 @@ MainMenuUpdate: ld c, a ; x coordinate ld a, [hl+] ld e, a ; width - ld hl, $c000 + 18*4 + ld hl, MY_OAM + 18*4 call DrawWholeCard -MainMenuUpdate_Done: +.allDone ret MainMenuDraw: - ld hl, $9800 + 32*11 + 3 - 64 - ld a, [vMenuIndexPrevious] - inc a - ld b, 0 - ld c, 32 -.findLastCaret - add hl, bc - add hl, bc - dec a - jp nz, .findLastCaret - ld [hl], $0 - - ld hl, $9800 + 32*11 + 3 - 64 - ld a, [vMenuIndex] - inc a -.findNewCaret - add hl, bc - add hl, bc - dec a - jp nz, .findNewCaret - ld [hl], $80 + $10 + $9 - - ld a, [vMenuIndex] - ld [vMenuIndexPrevious], a - - - ld de, vMenuIndexPrevious+2 - ld a, $c0 + ld de, SAFE_DMA_LOCATION + ld a, HIGH(MY_OAM) call RunDMA + di ld hl, SquaresTiles inc hl ld b, 0 @@ -397,6 +373,35 @@ MainMenuDraw: ld bc, (SquaresTileset8 - SquaresTileset7) / 8 call CopyRangeUnsafeBy8s + ld b, 0 + ld c, 32 + + ; find the location of the last selected caret and make it blank + ld hl, $9800 + 32*11 + 3 - 64 + ld a, [vMenuIndexPrevious] + inc a +.findLastCaret + add hl, bc + add hl, bc + dec a + jp nz, .findLastCaret + ld [hl], $0 + + ;find the location of the new selected caret and make it a caret + ; bc contains 32 (row stride of bgmap) + ld hl, $9800 + 32*11 + 3 - 64 + ld a, [vMenuIndex] + inc a +.findNewCaret + add hl, bc + add hl, bc + dec a + jp nz, .findNewCaret + ld [hl], $80 + $10 + $9 + + ld a, [vMenuIndex] + ld [vMenuIndexPrevious], a + ei ret MainMenuTeardown: @@ -431,10 +436,10 @@ DrawWholeCard: ; hl memory location, b y, c x, e width, d wiggle cp a, 17 ld e, TileStartCardBackSprites17 jp z, Draw3x3Card - + + ; else fall through into 2x2card ld e, TileStartCardBackSprites16 jp Draw2x2Card - ; else fall through into 2x2card Draw2x2Card: ; hl memory location, b y coord, c x coord, e tile start @@ -824,7 +829,7 @@ StringShuffle: StringBrowse: db 11, "Browse Deck" Coords: ; y, x, spread -db 255, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $23, $12, $15, $23, $13, $15, $23, $13, $15, $23, $13, $15, $23, $13, $15, $23, $14, $15, $23, $14, $15, $23, $14, $15, $23, $15, $15, $23, $15, $15, $22, $16, $16, $22, $16, $16, $22, $17, $16, $22, $18, $16, $22, $18, $16, $22, $19, $16, $22, $1a, $16, $22, $1a, $16, $22, $1b, $16, $22, $1c, $16, $22, $1d, $16, $22, $1e, $16, $21, $1e, $17, $21, $1f, $17, $21, $20, $17, $21, $21, $17, $21, $22, $17, $21, $23, $17, $21, $24, $17, $21, $25, $17, $21, $27, $17, $21, $28, $17, $21, $29, $17, $21, $2a, $17, $21, $2b, $17, $21, $2c, $17, $21, $2e, $17, $21, $2f, $17, $20, $30, $18, $20, $31, $18, $20, $33, $18, $20, $34, $18, $20, $35, $18, $20, $37, $18, $20, $38, $18, $20, $3a, $18, $20, $3b, $18, $20, $3c, $18, $20, $3e, $18, $20, $3f, $18, $20, $41, $18, $20, $42, $18, $20, $44, $18, $20, $45, $18, $20, $46, $18, $20, $48, $18, $20, $49, $18, $20, $4b, $18, $20, $4c, $18, $20, $4e, $18, $20, $4f, $18, $20, $51, $18, $20, $52, $18, $20, $54, $18, $20, $55, $18, $20, $57, $18, $20, $58, $18, $20, $5a, $18, $20, $5b, $18, $20, $5c, $18, $20, $5e, $18, $20, $5f, $18, $20, $61, $18, $20, $62, $18, $20, $64, $18, $20, $65, $18, $20, $66, $18, $20, $68, $18, $20, $69, $18, $21, $6a, $17, $21, $6c, $17, $21, $6d, $17, $21, $6e, $17, $21, $6f, $17, $21, $71, $17, $21, $72, $17, $21, $73, $17, $21, $74, $17, $21, $75, $17, $21, $76, $17, $21, $77, $17, $21, $78, $17, $21, $7a, $17, $21, $7b, $17, $21, $7b, $17, $22, $7c, $16, $22, $7d, $16, $22, $7e, $16, $22, $7f, $16, $22, $80, $16, $22, $81, $16, $22, $82, $16, $22, $82, $16, $22, $83, $16, $22, $84, $16, $22, $84, $16, $23, $85, $15, $23, $86, $15, $23, $86, $15, $23, $87, $15, $23, $87, $15, $23, $87, $15, $23, $88, $15, $23, $88, $15, $23, $89, $15, $23, $89, $15, $23, $89, $15, $24, $89, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $25, $8a, $13, $25, $8a, $13, $25, $89, $13, $25, $89, $13, $25, $89, $13, $25, $89, $13, $25, $88, $13, $25, $88, $13, $25, $87, $13, $25, $87, $13, $25, $86, $13, $26, $86, $12, $26, $85, $12, $26, $85, $12, $26, $84, $12, $26, $83, $12, $26, $83, $12, $26, $82, $12, $26, $81, $12, $26, $81, $12, $26, $80, $12, $26, $7f, $12, $27, $7e, $11, $27, $7d, $11, $27, $7c, $11, $27, $7b, $11, $27, $7a, $11, $27, $79, $11, $27, $78, $11, $27, $77, $11, $27, $76, $11, $27, $75, $11, $27, $74, $11, $27, $73, $11, $27, $71, $11, $27, $70, $11, $27, $6f, $11, $27, $6e, $11, $28, $6c, $10, $28, $6b, $10, $28, $6a, $10, $28, $69, $10, $28, $67, $10, $28, $66, $10, $28, $65, $10, $28, $63, $10, $28, $62, $10, $28, $60, $10, $28, $5f, $10, $28, $5e, $10, $28, $5c, $10, $28, $5b, $10, $28, $59, $10, $28, $58, $10, $28, $56, $10, $28, $55, $10, $28, $53, $10, $28, $52, $10, $28, $50, $10, $28, $4f, $10, $28, $4d, $10, $28, $4c, $10, $28, $4a, $10, $28, $49, $10, $28, $48, $10, $28, $46, $10, $28, $45, $10, $28, $43, $10, $28, $42, $10, $28, $40, $10, $28, $3f, $10, $28, $3d, $10, $28, $3c, $10, $28, $3b, $10, $28, $39, $10, $28, $38, $10, $28, $36, $10, $28, $35, $10, $28, $34, $10, $27, $32, $11, $27, $31, $11, $27, $30, $11, $27, $2f, $11, $27, $2d, $11, $27, $2c, $11, $27, $2b, $11, $27, $2a, $11, $27, $28, $11, $27, $27, $11, $27, $26, $11, $27, $25, $11, $27, $24, $11, $27, $23, $11, $27, $22, $11, $27, $21, $11, $26, $20, $12, $26, $1f, $12, $26, $1e, $12, $26, $1d, $12, $26, $1c, $12, $26, $1c, $12, $26, $1b, $12, $26, $1a, $12, $26, $19, $12, $26, $19, $12, $26, $18, $12, $26, $17, $12, $25, $17, $13, $25, $16, $13, $25, $16, $13, $25, $15, $13, $25, $15, $13, $25, $14, $13, $25, $14, $13, $25, $14, $13, $25, $13, $13, $25, $13, $13, $24, $13, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14 + db 255, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $23, $12, $15, $23, $13, $15, $23, $13, $15, $23, $13, $15, $23, $13, $15, $23, $14, $15, $23, $14, $15, $23, $14, $15, $23, $15, $15, $23, $15, $15, $22, $16, $16, $22, $16, $16, $22, $17, $16, $22, $18, $16, $22, $18, $16, $22, $19, $16, $22, $1a, $16, $22, $1a, $16, $22, $1b, $16, $22, $1c, $16, $22, $1d, $16, $22, $1e, $16, $21, $1e, $17, $21, $1f, $17, $21, $20, $17, $21, $21, $17, $21, $22, $17, $21, $23, $17, $21, $24, $17, $21, $25, $17, $21, $27, $17, $21, $28, $17, $21, $29, $17, $21, $2a, $17, $21, $2b, $17, $21, $2c, $17, $21, $2e, $17, $21, $2f, $17, $20, $30, $18, $20, $31, $18, $20, $33, $18, $20, $34, $18, $20, $35, $18, $20, $37, $18, $20, $38, $18, $20, $3a, $18, $20, $3b, $18, $20, $3c, $18, $20, $3e, $18, $20, $3f, $18, $20, $41, $18, $20, $42, $18, $20, $44, $18, $20, $45, $18, $20, $46, $18, $20, $48, $18, $20, $49, $18, $20, $4b, $18, $20, $4c, $18, $20, $4e, $18, $20, $4f, $18, $20, $51, $18, $20, $52, $18, $20, $54, $18, $20, $55, $18, $20, $57, $18, $20, $58, $18, $20, $5a, $18, $20, $5b, $18, $20, $5c, $18, $20, $5e, $18, $20, $5f, $18, $20, $61, $18, $20, $62, $18, $20, $64, $18, $20, $65, $18, $20, $66, $18, $20, $68, $18, $20, $69, $18, $21, $6a, $17, $21, $6c, $17, $21, $6d, $17, $21, $6e, $17, $21, $6f, $17, $21, $71, $17, $21, $72, $17, $21, $73, $17, $21, $74, $17, $21, $75, $17, $21, $76, $17, $21, $77, $17, $21, $78, $17, $21, $7a, $17, $21, $7b, $17, $21, $7b, $17, $22, $7c, $16, $22, $7d, $16, $22, $7e, $16, $22, $7f, $16, $22, $80, $16, $22, $81, $16, $22, $82, $16, $22, $82, $16, $22, $83, $16, $22, $84, $16, $22, $84, $16, $23, $85, $15, $23, $86, $15, $23, $86, $15, $23, $87, $15, $23, $87, $15, $23, $87, $15, $23, $88, $15, $23, $88, $15, $23, $89, $15, $23, $89, $15, $23, $89, $15, $24, $89, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $24, $8a, $14, $25, $8a, $13, $25, $8a, $13, $25, $89, $13, $25, $89, $13, $25, $89, $13, $25, $89, $13, $25, $88, $13, $25, $88, $13, $25, $87, $13, $25, $87, $13, $25, $86, $13, $26, $86, $12, $26, $85, $12, $26, $85, $12, $26, $84, $12, $26, $83, $12, $26, $83, $12, $26, $82, $12, $26, $81, $12, $26, $81, $12, $26, $80, $12, $26, $7f, $12, $27, $7e, $11, $27, $7d, $11, $27, $7c, $11, $27, $7b, $11, $27, $7a, $11, $27, $79, $11, $27, $78, $11, $27, $77, $11, $27, $76, $11, $27, $75, $11, $27, $74, $11, $27, $73, $11, $27, $71, $11, $27, $70, $11, $27, $6f, $11, $27, $6e, $11, $28, $6c, $10, $28, $6b, $10, $28, $6a, $10, $28, $69, $10, $28, $67, $10, $28, $66, $10, $28, $65, $10, $28, $63, $10, $28, $62, $10, $28, $60, $10, $28, $5f, $10, $28, $5e, $10, $28, $5c, $10, $28, $5b, $10, $28, $59, $10, $28, $58, $10, $28, $56, $10, $28, $55, $10, $28, $53, $10, $28, $52, $10, $28, $50, $10, $28, $4f, $10, $28, $4d, $10, $28, $4c, $10, $28, $4a, $10, $28, $49, $10, $28, $48, $10, $28, $46, $10, $28, $45, $10, $28, $43, $10, $28, $42, $10, $28, $40, $10, $28, $3f, $10, $28, $3d, $10, $28, $3c, $10, $28, $3b, $10, $28, $39, $10, $28, $38, $10, $28, $36, $10, $28, $35, $10, $28, $34, $10, $27, $32, $11, $27, $31, $11, $27, $30, $11, $27, $2f, $11, $27, $2d, $11, $27, $2c, $11, $27, $2b, $11, $27, $2a, $11, $27, $28, $11, $27, $27, $11, $27, $26, $11, $27, $25, $11, $27, $24, $11, $27, $23, $11, $27, $22, $11, $27, $21, $11, $26, $20, $12, $26, $1f, $12, $26, $1e, $12, $26, $1d, $12, $26, $1c, $12, $26, $1c, $12, $26, $1b, $12, $26, $1a, $12, $26, $19, $12, $26, $19, $12, $26, $18, $12, $26, $17, $12, $25, $17, $13, $25, $16, $13, $25, $16, $13, $25, $15, $13, $25, $15, $13, $25, $14, $13, $25, $14, $13, $25, $14, $13, $25, $13, $13, $25, $13, $13, $24, $13, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14, $24, $12, $14 CardBackSprites16: @@ -1096,7 +1101,7 @@ SquaresTileset8: SquaresTilesetEnd: -SquaresTilemap: +MainUITilemap: db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 @@ -1116,4 +1121,4 @@ SquaresTilemap: db $01, $01, $06, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $07, $01, $01 db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 -SquaresTilemapEnd: \ No newline at end of file +MainUITilemapEnd: \ No newline at end of file diff --git a/SpriteTiles.asm b/SpriteTiles.asm index 6364e08..dc6b64b 100644 --- a/SpriteTiles.asm +++ b/SpriteTiles.asm @@ -4,45 +4,71 @@ SpriteTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $01,$01,$01,$01,$01,$01,$01,$01,$1f,$1f,$1f,$10,$1f,$10,$1f,$1c - db $f0,$f0,$fc,$5c,$fe,$06,$5f,$a3,$ff,$01,$ff,$00,$ff,$00,$ff,$00 - db $00,$00,$00,$00,$00,$00,$07,$07,$87,$85,$ff,$fd,$ff,$01,$ff,$01 - db $07,$07,$01,$01,$01,$01,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00 - db $ff,$00,$ff,$00,$ff,$00,$ff,$80,$ff,$93,$fe,$d2,$7e,$76,$1c,$1c - db $ff,$01,$ff,$01,$ff,$01,$ff,$01,$ff,$c9,$7f,$69,$3f,$3b,$0e,$0e - db $00,$00,$00,$00,$00,$00,$0e,$0e,$8f,$8b,$ff,$fd,$ff,$01,$ff,$01 - db $ff,$00,$ff,$00,$ff,$00,$ff,$80,$ff,$93,$fe,$96,$fc,$dc,$70,$70 - db $ff,$01,$ff,$01,$ff,$01,$ff,$01,$ff,$c9,$7f,$4b,$7e,$6e,$38,$38 - db $00,$00,$03,$03,$07,$07,$0c,$0c,$18,$18,$18,$18,$30,$30,$30,$30 - db $00,$00,$c0,$c0,$e0,$e0,$30,$30,$18,$18,$18,$18,$0c,$0c,$0c,$0c - db $30,$30,$30,$30,$18,$18,$18,$18,$0c,$0c,$07,$07,$03,$03,$00,$00 - db $0c,$0c,$0c,$0c,$18,$18,$18,$18,$30,$30,$e0,$e0,$c0,$c0,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$3f - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$1f,$00,$ff,$00,$ff - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$c0,$00,$f0,$00,$fc - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$78,$00,$ff,$00,$ff - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$c0,$00,$f0 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff + db $00,$00,$00,$00,$00,$00,$01,$01,$03,$02,$07,$04,$0f,$08,$1f,$10 + db $07,$07,$1f,$18,$7f,$60,$ff,$80,$ff,$00,$ff,$03,$fc,$0c,$f0,$30 + db $1c,$1c,$1f,$03,$1f,$00,$1f,$00,$0f,$00,$0f,$08,$07,$06,$01,$01 + db $00,$00,$00,$00,$c0,$c0,$f0,$30,$f8,$08,$fc,$04,$fc,$00,$fc,$80 + db $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$03,$02,$03,$02 + db $3f,$20,$7f,$40,$ff,$81,$fe,$82,$fc,$05,$f8,$08,$f8,$08,$f0,$10 + db $07,$04,$07,$04,$07,$04,$07,$04,$0f,$08,$0f,$08,$0f,$08,$0f,$08 + db $00,$00,$00,$00,$00,$00,$00,$00,$60,$40,$60,$40,$60,$40,$60,$40 + db $0f,$08,$0f,$08,$0f,$08,$0f,$08,$0f,$08,$07,$04,$07,$04,$06,$04 + db $60,$c0,$60,$40,$60,$40,$60,$40,$60,$40,$e0,$80,$e0,$80,$e0,$80 + db $06,$04,$02,$02,$02,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $c0,$00,$c0,$00,$c0,$00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $80,$80,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $c0,$40,$80,$80,$00,$00,$00,$00,$00,$e0,$60,$98,$38,$c4,$3c,$40 + db $7c,$40,$3c,$20,$1c,$10,$00,$00,$00,$00,$00,$60,$60,$80,$c0,$20 + db $f0,$10,$e0,$20,$e0,$20,$e0,$20,$c0,$40,$c0,$40,$c0,$70,$c0,$40 + db $80,$00,$80,$00,$00,$80,$00,$80,$00,$00,$00,$c0,$c0,$30,$f0,$0c + db $c0,$40,$c0,$40,$c0,$40,$c0,$40,$c0,$40,$80,$00,$00,$00,$00,$00 + db $01,$01,$01,$01,$03,$02,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $1c,$20,$0c,$30,$0c,$10,$04,$18,$04,$78,$7c,$80,$7c,$00,$3c,$00 + db $3e,$00,$3e,$00,$0f,$30,$03,$0c,$00,$03,$00,$00,$00,$00,$00,$00 + db $03,$00,$03,$00,$03,$00,$03,$00,$02,$01,$02,$01,$03,$00,$03,$00 + db $03,$00,$07,$00,$07,$00,$00,$07,$00,$0c,$00,$00,$00,$00,$00,$00 + db $fc,$03,$e0,$1c,$00,$e0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$00 + db $3c,$40,$1c,$60,$1c,$20,$0c,$70,$7c,$80,$fc,$00,$7c,$00,$3c,$00 + db $c0,$40,$80,$80,$00,$00,$00,$00,$00,$f8,$f0,$0c,$fc,$00,$7c,$80 + db $3f,$20,$7f,$40,$ff,$81,$fe,$82,$fc,$05,$f8,$09,$f8,$09,$f0,$10 + db $f0,$10,$e0,$20,$e0,$20,$e0,$20,$c0,$43,$c3,$4c,$c0,$70,$c0,$40 + db $3e,$00,$3e,$00,$3f,$00,$07,$00,$03,$04,$00,$03,$00,$00,$00,$00 + db $03,$00,$07,$00,$07,$00,$06,$01,$0c,$02,$00,$0c,$00,$00,$00,$00 + db $fe,$01,$f8,$06,$c0,$38,$00,$c0,$00,$00,$00,$00,$00,$00,$00,$00 + db $80,$00,$80,$00,$80,$00,$80,$00,$00,$80,$80,$60,$e0,$18,$f8,$06 + db $03,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03,$00,$03,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$00,$03,$00 + db $7c,$40,$3c,$20,$1c,$10,$00,$00,$00,$60,$60,$80,$e0,$00,$e0,$10 + db $f0,$10,$e0,$20,$e0,$20,$e0,$21,$c1,$4e,$cf,$70,$f0,$40,$e0,$40 + db $7c,$80,$7c,$80,$3c,$40,$7c,$80,$fc,$00,$fc,$00,$7c,$00,$3c,$00 + db $3f,$20,$7f,$40,$ff,$81,$fe,$83,$fd,$06,$f9,$0a,$f8,$09,$f0,$11 + db $c0,$40,$80,$80,$00,$00,$00,$f0,$f0,$0c,$fc,$00,$fc,$00,$fc,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$03,$00,$03,$00,$03,$00 + db $3e,$00,$3e,$00,$3f,$00,$07,$00,$07,$00,$03,$04,$00,$00,$00,$00 + db $03,$00,$07,$00,$07,$00,$07,$00,$0e,$01,$0c,$02,$00,$00,$00,$00 + db $ff,$00,$fe,$01,$f8,$06,$c0,$38,$00,$c0,$00,$00,$00,$00,$00,$00 + db $e0,$40,$60,$c0,$60,$40,$60,$40,$60,$40,$e0,$80,$e0,$80,$e0,$80 + db $80,$00,$80,$00,$80,$00,$80,$00,$80,$60,$e0,$18,$f8,$06,$fe,$01 + db $7c,$40,$3c,$20,$1c,$10,$00,$60,$60,$80,$e0,$00,$e0,$00,$f0,$08 + db $c0,$60,$c0,$40,$c0,$40,$c0,$40,$c0,$40,$80,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$60,$40,$60,$40,$60,$40,$60,$c0 Sprites: - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $0a, $0b, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $0c, $0d, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $0e, $0f, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $11, $12, $13, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $14, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $01, $02, $03, $01, $02, $07, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $04, $08, $06, $04, $05, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $01, $02, $0d, $03, $04, $00 + db $05, $06, $0e, $00, $19, $0f, $00 + db $07, $10, $14, $00, $16, $11, $08 + db $09, $12, $15, $00, $17, $18, $0a + db $0b, $00, $00, $00, $00, $13, $0c + db $00, $01, $02, $0d, $03, $04, $00 + db $05, $1c, $1b, $00, $23, $24, $00 + db $07, $1d, $1a, $00, $22, $21, $08 + db $09, $12, $1e, $00, $1f, $20, $0a + db $0b, $00, $00, $00, $00, $13, $0c + db $00, $01, $02, $0d, $03, $04, $00 + db $05, $27, $28, $00, $29, $2f, $00 + db $07, $25, $26, $00, $22, $2e, $31 + db $09, $30, $2a, $00, $2b, $2c, $2d + db $0b, $00, $00, $00, $00, $13, $0c diff --git a/Sprites.asm b/Sprites.asm new file mode 100644 index 0000000..aff9e2d --- /dev/null +++ b/Sprites.asm @@ -0,0 +1,30 @@ + ; original export script by gabriel reis, modified by shoofle + + +Sprites: + + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $20,$20,$30,$30,$38,$28,$3c,$24,$6c,$54,$c6,$fa,$6c,$54,$38,$38 + db $0c,$0c,$18,$18,$38,$28,$3c,$24,$6c,$54,$c6,$fa,$6c,$54,$38,$38 + db $00,$d0,$00,$68,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$80,$00,$80 + + + +SpritesLayer: + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $01, $02, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $03, $04, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 diff --git a/SpritesLayer.asm b/SpritesLayer.asm new file mode 100644 index 0000000..e3b7828 --- /dev/null +++ b/SpritesLayer.asm @@ -0,0 +1,61 @@ + ; original export script by gabriel reis, modified by shoofle + + +SpritesLayer: + + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $1f,$00,$3f,$00,$7e,$00,$fc,$00,$78,$00,$30,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$0f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $e0,$00,$f0,$00,$f8,$00,$f0,$00,$60,$00,$00,$00,$00,$00,$00,$00 + db $1f,$00,$3f,$00,$3f,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$bf,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$3e,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $e0,$00,$f0,$00,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $1f,$00,$3f,$00,$7f,$00,$3f,$00,$1e,$00,$0c,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$6e,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$7f,$00,$1f,$00,$07,$00,$07,$00,$03,$00 + db $e0,$00,$f0,$00,$f0,$00,$f0,$00,$c0,$00,$c0,$00,$80,$00,$00,$00 + db $1f,$00,$3f,$00,$7f,$00,$7f,$00,$7e,$00,$7c,$00,$20,$00,$00,$00 + db $ff,$00,$ff,$00,$fc,$00,$78,$00,$20,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$3f,$00,$07,$00,$02,$00,$00,$00,$00,$00 + db $e0,$00,$f0,$00,$f8,$00,$f8,$00,$f8,$00,$f8,$00,$78,$00,$30,$00 + db $ff,$00,$ff,$00,$7f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$7f,$00,$1f,$00,$0f,$00,$0f,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00 + db $07,$00,$03,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$7f,$00,$03,$00 + db $ff,$00,$ff,$00,$fe,$00,$f8,$00,$f0,$00,$e0,$00,$e0,$00,$60,$00 + db $ff,$00,$ff,$00,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $3f,$00,$7f,$00,$7f,$00,$3f,$00,$1f,$00,$0c,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$7f,$00,$3f,$00 + db $3f,$00,$3f,$00,$1f,$00,$1f,$00,$1f,$00,$0f,$00,$03,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$bf,$00,$1f,$00 + db $ff,$00,$fc,$00,$f8,$00,$f0,$00,$e0,$00,$e0,$00,$e0,$00,$e0,$00 + db $ff,$00,$0f,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$fe,$00,$fc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $3f,$00,$1f,$00,$0f,$00,$07,$00,$07,$00,$07,$00,$03,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$ff,$00,$fc,$00,$f8,$00,$e0,$00 + db $ff,$00,$fe,$00,$f8,$00,$c0,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $df,$00,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $1f,$00,$1f,$00,$0f,$00,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$7f,$00,$0f,$00,$07,$00,$03,$00 + db $ff,$00,$ff,$00,$ff,$00,$ff,$00,$7f,$00,$3f,$00,$01,$00,$00,$00 + db $ff,$00,$fc,$00,$f8,$00,$f0,$00,$e0,$00,$c0,$00,$80,$00,$00,$00 + db $ff,$00,$7f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $86,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $1f,$00,$3f,$00,$3f,$00,$1f,$00,$03,$00,$03,$00,$01,$00,$00,$00 + db $03,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + + + +Sprites: + db $24, $25, $13, $13, $13, $13 + db $00, $2b, $26, $27, $28, $29 + db $11, $12, $13, $13, $13, $13 + db $00, $14, $15, $16, $17, $18 + db $19, $1a, $13, $13, $13, $13 + db $00, $1b, $1c, $1d, $1e, $1f + db $2a, $13, $13, $13, $13, $13 + db $00, $20, $1c, $21, $22, $23 diff --git a/curve_authoring.html b/curve_authoring.html index a3768ce..c576732 100644 --- a/curve_authoring.html +++ b/curve_authoring.html @@ -1,4 +1,5 @@ + curve editor for gameboy animation @@ -18,12 +19,13 @@ + style="border: 1px solid black; display: block; max-height: 700px" + xmlns:xlink="http://www.w3.org/1999/xlink"> - + - + @@ -34,28 +36,36 @@ - - - - - + + + + +
+ +
control mode
- +
- +
- +
@@ -85,9 +95,8 @@ var moving_point_index = -1; var the_list = []; - function length(dx, dy) { - return Math.sqrt(dx*dx + dy*dy); - } + function length(dx, dy) {return Math.sqrt(dx*dx + dy*dy);} + const clicksvg = (event) => { const mode = document.querySelector('input[name=mode]:checked').value; // either 'add', 'delete', or 'move' const {x, y} = dom_to_svg_coords(svg, event.clientX, event.clientY); @@ -253,6 +262,36 @@ text_output = document.querySelector('textarea#output'); text_output.onchange = changetextarea; sprite_dims_change(); + + let filePicker = document.querySelector('input#background-selector'); + filePicker.onchange = (event) => { + var file = event.target.files[0]; + + // setting up the reader + var reader = new FileReader(); + reader.readAsDataURL(file,'UTF-8'); + + // here we tell the reader what to do when it's done reading... + reader.onload = readerEvent => { + var content = readerEvent.target.result; // this is the content! + document + .querySelector('image#background-container') + .setAttributeNS("http://www.w3.org/1999/xlink", "href", content); + } + } + if (filePicker.files[0]) { + filePicker.onchange( {target: filePicker} ); + } + + document.onkeyup = (event) => { + const add_radio = document.querySelector('input[name=mode]#add'); // either 'add', 'delete', or 'move' + const delete_radio = document.querySelector('input[name=mode]#delete'); + const move_radio = document.querySelector('input[name=mode]#move'); + + if (event.key == 'a') { add_radio.checked = true; } + if (event.key == 'd') { delete_radio.checked = true; } + if (event.key == 'g') { move_radio.checked = true; } + } } \ No newline at end of file diff --git a/main.asm b/main.asm index 5e0d9a3..f921cb1 100644 --- a/main.asm +++ b/main.asm @@ -6,14 +6,15 @@ + +def MY_OAM equ $c000 + +; $c100 - c120 call handles, scene stack, interrupt, card functions ; 0xc100 CALL ; 0xc101 LOW - SCENE_SETUP points to this ; 0xc102 HIGH ; 0xc103 RET ; 0xc104 CALL ... -def MY_OAM equ $c000 - -; $c100 - c120 call handles, scene stack, interrupt, card functions DEF SCENE_SETUP EQU $c101 DEF SCENE_UPDATE EQU SCENE_SETUP + 4 ; call then ret is 3+1 bytes DEF SCENE_DRAW EQU SCENE_UPDATE + 4 @@ -47,7 +48,7 @@ def rLFSR equ rDELTAT + 1 ; 16 bit -def SAFE_DMA_LOCATION equ $ffc1 +def SAFE_DMA_LOCATION equ $ffc0 def VARIABLE_TILES_START equ 26 @@ -73,6 +74,8 @@ EntryPoint: ldh [rNR52], a ; shut down audio ldh [rDIV], a ; reset timer just in case?? ldh [rLCDC], a ; shut down screen + ldh [rIE], a + ldh [rIF], a ld a, 0 ld hl, ZEROES @@ -88,7 +91,6 @@ EntryPoint: ld a, 1 ld hl, ONES ld bc, $200 - .buildOnes ld a, 1 ld [hl+], a @@ -99,13 +101,13 @@ EntryPoint: ld hl, UITiles ld de, $8000 + $100*16 - ld bc, (UITilesEnd - UITiles) - call CopyRangeUnsafe + ld bc, UITiles.end - UITiles + call CopyRange ld hl, LetterTiles ; map the small font into vram at ascii locations ld de, $8000 + (127 + $11)*16 - ld bc, LetterTilesEnd - LetterTiles - call CopyRangeUnsafe + ld bc, LetterTiles.end - LetterTiles + call CopyRange ; initialize global variables ld a, 0 @@ -132,7 +134,7 @@ EntryPoint: ld a, [hl] ; get the value of a call instruction so we can shove it into our handles ld hl, SCENE_SETUP - 1 - ld [SCENE_SETUP - 1], a + ld [hl], a ld hl, SCENE_UPDATE - 1 ld [hl], a ld hl, SCENE_DRAW - 1 @@ -196,7 +198,7 @@ EntryPoint: inc hl inc hl - ld a, [hl] ; get the value of a call instruction so we can shove it into our handles + ld a, [hl] ; get the value of a ret instruction so we can shove it into our handles ld hl, SCENE_SETUP + 2 ld [hl], a ld hl, SCENE_UPDATE + 2 @@ -265,12 +267,15 @@ Loop: ld a, b ; select buttons which were pressed this frame ld [rMYBTN], a ; save that as btn state +println "scene update is ", SCENE_UPDATE - 1 call SCENE_UPDATE - 1 ; hope this takes not too many scanlines! ld b, 144 call AwaitLine +println "scene draw is ", SCENE_DRAW - 1 call SCENE_DRAW - 1 ; hope this takes fewer than 9 scanlines! + println "scenee draw call is at ", @ ; either way it's going to eat into the update timing ; at this point we want to make sure that scanline 153 has passed ; we should check if we're past there and skip this await if necessary @@ -280,7 +285,7 @@ Loop: jp Loop ChangeScene: ; hl should be a pointer to, in sequence, setup update draw teardown - call SCENE_TEARDOWN - 1 + ;call SCENE_TEARDOWN - 1 ld a, [hl+] ld [SCENE_SETUP], a @@ -309,6 +314,17 @@ AwaitLine: ; put the line you want to reach in b jp nz, AwaitLine ret +ArrayClampLoopingB: + cp a, b + jp nz, :+ + ld a, 0 +: + cp a, $FF + jp nz, :+ + ld a, b + dec a +: + ret ArrayClampLooping: ; loops a to be in the array, assuming hl points to the length cp a, [hl] ; if a == length... jp nz, :+ @@ -350,32 +366,39 @@ PrintBChars: ;write ascii characters. will not respect newlines or anything like ;thanks to https://gbdev.io/pandocs/OAM_DMA_Transfer.html for this routine ; a should be the high byte of where we're DMAing from (ld a, $c0 in my case probably) -; de should have the address in hram for where to paste to +; de should have the address in hram for where to paste to (SAFE_DMA_LOCATION probably) RunDMA: di push de push af ld hl, run_dma_tail ld bc, run_dma_tail.run_dma_tail_end - run_dma_tail - call CopyRangeUnsafe + call CopyRange pop af run_dma: ; This part must be in ROM. ld bc, $2846 ; B: wait time; C: LOW($FF46) ret ; we pushed de before, so this should "return" to execute that (HRAM) address -run_dma_tail: ; This part must be in HRAM. +run_dma_tail: ; This part must live in HRAM. ldh [c], a .wait dec b jr nz, .wait ei - ret z ; Conditional `ret` is 1 M-cycle slower, which avoids - ; reading from the stack on the last M-cycle of DMA. + ret z ; Conditional `ret` is 1 M-cycle slower, which avoids reading from the + ; stack on the last M-cycle of DMA. .run_dma_tail_end - + nop + nop + nop + halt + nop + nop Instructions: - call Instructions+3 + call .rett +.rett: ret +EndOfInstructions: @@ -408,7 +431,7 @@ UITiles: db $00,$ff,$7e,$ff,$56,$c3,$6a,$c3,$56,$c3,$6a,$c3,$56,$c3,$6a,$c3 db $99,$5a,$99,$5a,$99,$5a,$99,$5a,$99,$5a,$81,$42,$81,$7e,$ff,$00 db $ff,$00,$81,$7e,$81,$42,$99,$5a,$99,$5a,$99,$5a,$99,$5a,$99,$5a -UITilesEnd: +.end LetterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 @@ -507,7 +530,7 @@ LetterTiles: db $3c,$3c,$06,$06,$0c,$0c,$06,$06,$06,$06,$0c,$0c,$06,$06,$3c,$3c db $00,$00,$00,$00,$31,$31,$7b,$7b,$de,$de,$8c,$8c,$00,$00,$00,$00 db $c0,$c0,$a0,$a0,$b8,$b8,$b0,$b0,$da,$da,$12,$12,$1a,$1a,$03,$03 -LetterTilesEnd: +.end INCLUDE "Async.inc" INCLUDE "Random.inc" diff --git a/source.zip b/source.zip index 0e9922137ca4b2fcbeaaddcc34df8cdd5a34e854..f80935867335a78dae18cb621aa847d74262bdf0 100644 GIT binary patch delta 24561 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 delta 8926 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