From 5196362ab9c4bdf37bdc9bd863b944706a85e291 Mon Sep 17 00:00:00 2001 From: cellos51 Date: Sat, 28 Jun 2025 22:32:45 -0400 Subject: [PATCH] Added wip moving background, end of round screen and temporarily removed blind icon. --- graphics/background_gfx.png | Bin 2329 -> 2082 bytes graphics/background_play_gfx.png | Bin 2359 -> 2088 bytes graphics/background_round_end_gfx.png | Bin 2135 -> 2212 bytes graphics/blinds_gfx.grit | 1 + graphics/blinds_gfx.png | Bin 0 -> 865 bytes graphics/nums.grit | 1 + graphics/nums.png | Bin 0 -> 2948 bytes source/game.c | 73 ++++++++++++++++++--- source/main.c | 88 +++++++++++++++++++++++--- 9 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 graphics/blinds_gfx.grit create mode 100644 graphics/blinds_gfx.png create mode 100644 graphics/nums.grit create mode 100644 graphics/nums.png diff --git a/graphics/background_gfx.png b/graphics/background_gfx.png index 090d8f57539171184d3577df9b7d2ba5b5a6b585..b72c86b638e1be02a9653cff7abaf3caacc44f97 100644 GIT binary patch delta 1941 zcmYk7X;_n28iv0t>=BR=Ng)^$+}PK$L?8hL#VVkafb3~mMbMzE1^f~!S}PVQi*(o# zB@F}^M8O2)D|LbuSpTp?M}EF(9JcX_2at}4-=8v9J4NeLvHJH>Bt4GsX$d)VT_$4p*(BtGFy?>henAbuloizB zC^~>pQ2%oHD*{nMWclEgp%0a_IV)~NH~0l6l;jv~Go5{?9-yqorsx$%8w9$M=D`jbSGwXveV`ZemUh-oD0dq!~yLY41ciD6g=$a9f z-6Xo`ep-)u$y=4|2+i^7O5s~>lAedm2n2$_cGdj+{5iFzI{4_`_N4TNN{wy#^GGzP z0EtBZk80&9&tG=(J7h;146M>Vz2VCzTWT-FZ_f3dmBRS}j3v$Urwr1rwleL3kKBRt z<9`>A2=|h7tv(gn57M)2&>u>VceNbNeNERDb$I$ia8f!tS6H0UVd)%pUY#=fh|^7EZ?V*4#y*VoBxQv!%y(bhmilC#&#n8H5; zQ`%%^JO~){@4bC&P9`Xi&bc{#$5J3T@Mgkgkd2i7fiH!qP@L_%QH} zAmX=9&uTH;i9!Y5=Q3nF^sP=DA{LRUP>Z$bostPii!z~I^WsY<(#ceJl;ZsyPbKB! z28d{xixs{4Dzxd#fbpR3mKO&~^AICHGp;)ud5$?6spRM*YMEW0rFpmGN*#d_3N<+n zQfwRjCqF6>mCN`IQs|~I6ChJ7Ey9IQfb{bH4R3ae+bJq13k0rPsq1Z}4n}?-C5;(( zaIr0MY^)}jMzm#?C3m&5-cepc0mdgwtZ8IY*U(hu;cN$UN)Vxkm8BIik*(>iWm_?g zPQ9s(tdm+z-C%7HUKak#9&ju1NpTJSBZghl!?D$(kt1)gasvEA1?m+o&Ns7%3nRBb z+{X(EwL8$bShdht`t%%D;otnhL4pge&a|hQbE?lir$BcXDDc9Wa5G8oeisjRZQ-A| zh#{_u&S2YSzC2=kc3t delta 2190 zcmV;92yyqK5SbE?a|!y{D6rd?0@t0V)?5z2*!600>=4L_t(|+U?y>Xx4Td z$MNqYJqb#E9v>=gJ&3s4vegM9h%l`?ZQu^x6xq&R{Bu;c4Fs-cu+fQnzSgWr)7sOU7G%q{PH~c^Gou6!ARnhC%@-UKKuTDPtv4u=*)j{ zSN^j+Z^?t!DH)x;B6T!7dQSG(yT7N86^@DTt67ytnVK!5=P41fRwAix0D>xp{M zUbJiRA+)x(*b`8#0DIwmapapye*gowFN(cr6Jk`a3!OB)?)Wir$B(Vf`=`3|s%?d> zuUbd7tu)^wQ0Xyn=?L{@Va-dO5@ZIYnE3-?3>rB z=y$HJ{10LHlkk;-k43H9q2+mtJ;gw}=d73Y`_p-U=~m#FF!`%4isUs+tdOD{TG9Z6<%{Mkjrb zK&i&S9qr(M|Ef2QnpbVFlWhWZ4)B}p`z!qcY@Bv7dhb&iD`D z&G!9-7}c%7alxIr|0;Z)k56a?xu^hDy>|fu+);2n-a1i1_QL!8@gort85|l>&g(Aw zx8+|)weF^8GlUqWwjpVFXYPN$(h6@d$TRm}MRvFS0gRdt`#04(acuy#39uL5ZiI!{ zUl~>Z7JNKdO~cj!2ynoY$&>PA^5p8gf2upLs*1si>n(fp{^j6Q^?aQvP>TQutMAUS z8=)cHId&s5tU6t302x)_Ab*(SDlLGV1FWjPQ6UWmnkoz!T!8_UD8PS7yU4mfWC2Jn z@rfM%F0wZtH`VQ014y|7|NP63>nf`1P?CS%|F~*dwOs%?je&KlY4FFcxF5d&

1< zcrO6M1MK#{6MJDQvbrW^FHDKs|Bg=|D53%bC{cieRXA9Eb*iz~?WXzy>FMe)QgB)4 za1ww5y3nezFk@e!L=}J7?SCis{7Q&heFqZ-*LyyI0=v*&2z7$26Wk&%D#zt?P`dz! z1vzRRf&>&0V4aJ;mAzZcC1p{`06Uf?&33yMJGf(6+~6D43h=Js-SXGmAGP=pb`9?i zeXO^?%^eC2rE~kuGJk(M@2{uR9h)5me1FB`R7#+VU1$*zd(nTc{0Gozh%{S_e^Idj zd*SW&mM7jdm`(hV$X>L?byueRh=s~_p*J?$vGY;OriO#if-x`vvjg00w`1o;MBX~q znkpQ896$j9R^5CotgHRju@XNIKt=%$j%#%*b<*bo$RNPobc5+a0|s=V0hBbrQ8&_# z8{;wt1`HSjdt+Hy)x3W>IQ8aDJ)^4*XPTkfV*i{__Yjh|9GsRREc`hkDi>h>oDe8+ zfZ4Hu3XFjP5MTg#ccB*+7HaV!^!4?zC!kstxGv$X+j|9FXaEEl009OFFaQD!lkfu= ze-K~*rP33(!ot}o4WRN}=$FF- z^4eJw6aTO>;xg|1SdB`JRubn0CkA!Lkm>YZpCGSGBW3O1AxA+ihsJFju{A*+Y zNO)1=@16hyB}RY&0t|ov10cXaU4$M+a$Q#(+sWlcw6?a4Yab|e1r7_(^T&_Ye@s>L z-hck(DE6Wq+J5l)sM{ln4Y2FF;@D0u?^|^eMbYg8rLMqH;d%b}kqi!vtj>D|e}_h5msM0(g$%Z@ z(@t=zT3_`VxGE)TGX@R|NN_$Fl(6t7rD{uOT~+Xb)Vt9B`EHi890PX}0)N%+CcI(Q zU*~nD@frZX>3ef4_b^I$OBCI0ryk(2${JP~)2_U_6+Ui#APqMsu8YW*=G|V@FRSsP z?q4|--9DgVE!ooEf6|hh6W8VDL@}?Sr>O9F+l~uS(d`2&cb%uQuen34B|Ee2>s(Bc z4 z6|(5|fl>!J&#O|ZE}mC(`#`A!Y{HIBuz)VdzyJs^00Inv8~_6Z7(mhf1t(UHlryj( QYybcN07*qoM6N<$f)@xNqyPW_ diff --git a/graphics/background_play_gfx.png b/graphics/background_play_gfx.png index 6fa86b5d3c46cdf54b053c11536a5a5c6549101f..fc0a095e245cb7b55fa84556c8b33b5867eea79d 100644 GIT binary patch delta 1947 zcmZ8iX;_lm8vPJOR2(WxO$@Wa9yP@VBkc&s^pvO6GI2_bQ>RPfgcE9Z04W<4EmJ!= z)x8dcV~!-0UusfTf+>J1;yGPgFE3G{N2q_k=AZtKtq%2(%b4LRJE0$=OHeeFVc zY|M~oZoC7(4$o-aXq=B@6m%A!DHeGu&TD%4Y-NgzTP5M*rczG9?G1v#=zzB>t^+}< z;EfMpL_1vF4B0FJw3mRP<$p891UcS0_!#es~Z!~n+K1w-tJz@b~RzN5BA zuh2;-Yd3%Mi!f%7g-}}PUu8>8mTu!EocxA{Rfxch@Wc&!U-Id@h+urKp+k0)J`)^p zRN=;Ei(Ioh4O=swVJ_gXRm7fR*RM0@B}-1HZ>#=_dCCbtP5qnnh|n?;RP$+~{L5lp z6{z!vuD^UoG_ur6`2Iz5ByVvcEFz^0=B;QsuTh9IFh~n14_72gQwK6rS^WJawh`EE-=G|;dK!1`{>{x1?m@&X6&s)!%L;epTUpiB@=FT(3k|Dn`RUZx zy@L)&M}^YOCd3z_6LK%5 zpa@zB0t;qDhN!j#fuF4ZzXT8tgNl4?rms5{cxw|W9fk`!E3@`$Rk!cX-tDlXvJ#vm zTUL3OuW{kKn9@?CU#%X!GJIf4+<&a`>xK|T=;a5~Dz5k)5mg$O++)+qSj!aG?4IL1 z=V*lD>qQ`7Gmy6CYH-Ny+8(2@Mzim2b%1)TaORrz^6nd6d-lIYS$q-tG^0D%jie8M z`&-92N6GqVM!{GFf=p)}E%biVaPhHrBGxypeICALJ;=L~>5B6`E*PInZ_%|b7&8yB4Z!f#v1JKPPGpZQR%Go-*O&X)B-ne65yB&ZMDdFC+7!_E z?X_7}-7P4Lqq+*6t&L)3&)Tbf@IT^7L^;*~8iAAZ9zyCs(*@QX>rqb*N8 zwpLIvwM}{!2BNk%FCKs2YGy&T&sh`pEp(Ro*B(T>?dPO-$cc(7v>k3u}#X#c@KF;>e)chG-^aBy`o!GId7dWK8`}o z3hb#Hm6^f)>SEiwn2s2EJ(5P^yy#p9S_x+v<4%itVP1u*fz#*unVfFP*p?le6aPw{ z>JrFIzAd{bHy>Eqd95eMgbQ?n1pnVn;c>=mv0i)exqf7@!BI84+6H@w#9X)96fzKa z>L*CcEr!FloJKBUexP=ACg$e$SSSZ+S1BD^%qeeKhfj z2<_OR9$gfuaKx@Qy`=$%u4Cz<`c9(IW@PbnN5YU>QS+w*#t>Ej(T|dbYOd+^{_5W-q?+SwH&M4EIJ*0joYB|0sRur%PmN3a%fn5p=Hr4A-@`b(%ELL16I~TY$Fg&^>r{V6 z65XRN$K;vlcZHwfs%^{b2DSYVYEFE2)4L}FOx~U#TZ;M3lWC%3iM|)RqA-V&8y1q@ z%{@PQ{~^OwEyhd=79sv3E!NF0>B)Wx{!4f*+(i>NXoA{#Mrn=ATR}Q?W0np3^^D0{ zCCxn)M_dXIuKIGV90S&Y(w8j&H)05PICkg1m|z!PYv6gFLtXN3KG@ c8PwY~hj;FO6gZ4yF9Oi<^ze4Cb|bU@0UWQNK>z>% delta 2240 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 delta 1995 zcmZ9Nc~p{V8^&KCKug6e(+o|Wtdv~FbR;u1v)poUEW~P1Pt#=O#+0On_=2N@Z7!qb zUOKsgNzIs=QNBu=7HMjdE1HxAE{OZ!Hhg|({`kJ*832IJ^>96WGP-YKkZ@sZuLs6qku-@%aS4FLYlO;8X5J!p02-k%oe z*{c-4WUNeOI37^}X8;I82vD(dX23LqfDO6;45eZPz}1xcTWTsXH7u&@Cli17g&ZoW z=6+kd8*(@AiRe3v2&ep?_do#s|4Ni77-}8$FBgEL)Yif2&Kq>W^;YZjv3K+YlktK7 zlD_;6C1g#wAyGjtmyq*IaT6ryWr90r@I1l!IUM_2)K7G8SJ%-|oecgd@s*iP#>SoZ zsx5cL4P`b2t#vnlMr=Hga4(c<&FX3nQ%4sfm9DO$Yr7@qG;Su1BSmX$$}$~5!LbwI z(0Tn!GNh>GKElVBAznE>=y^yQ49n0Qc3?GNT@c%pn_>gW<3b}HI4NE`bsrUAu=76? z`5p4b5PayEHrczjQ*G{Uw29wvOs6!mieQu|mXmZEwW1Als09Hq$L>Ss?KIHltVy2q z-nx51a(?)KuJC;l2fPfn3?Wjsi&ncx6)G;r8Dw=!`sg)P(CFE=k@rAESeWfu@mqmF zQ}kO1p(bBV&MaZoTy(-o6OVj_QyhB-*<%e1C)`4lLH3kDR1b1NSPdwu(zgkmAS>>|?QAn#OIhQ5g12V4SG zR_YGoBI5O3knhka6-sgPTtKTRasRYZO~pl~p;wYIicRH_|R53c#IY86#Io}K1)=5qf~ zhun8YpP$RgSP{f$cZXb;k>hC2MV}btI4?`Mt=d#>kefzLi7&!0(F{JnyQd@0(YM1< zvFtZOt6zytJhWAe%tFVKwhXWc)%#10T6D)WbI`H5s^NR{j_qmLF&1KMY;9LxfEDVe zwBhW%JFBd~n;Jn)AL)zd&fs`*L#Nn3^RLzFV~CxU&NT_@_hGH!V=TLrB272k1L@j` z>=ox?r;Q<$6!SRNBVb>ko`zc>l|>|e8}JKXPQlw7fJA!07wrwTY26E-Mljcn4n18w za><{nQGA&3L)wL`zs$^?8Rlg#E*jlN=a}8Hxn7zEqJCv=i1TT6sVeOkKEdG0%=E@B zac8n;&A&7&`lbRS9c~XTZ0Sz{1G?`{MtXFy`z+s-v0CZ^&oP0Jo2+lfcGXL(n)Y@& zauxF@pB!gjoY{Bco?}FGR>cfk4|N%dH+WZJn84J_l+MJo(?`j>$@R;ME}AxxYG!JW zr3Zqxl{uDQ5h+_mMOWgF-rq0C0Z*G)gk;|+Ydpo`f3)e?h}B0|A$}BQI@Hk#T@#rd znB7TbpETa=CB*{%g?X%Tq<|9+E89E{?(B z;fkfBF(v(6`xeTp$r3y43;NtrBOhmcc{P+2{(4TJd4^8%oV=l$%U|kky|R`FE{vRg ztUeehy1$S=+q$?-PnZ8xc>U#Y>&oX?@zGf(>{fs+>keLRq*i=%L(luBRiZcQZ4m7^ls=t{^_r;XPy|~8au**gLM`o z;DTg80r|?t3Ue<%wA1TBS57DEHZQrLCR><#X5$W1XIBAIjGLO61r6WIj!DA-;jgrX5+16kq2NzPw;pV$?}?bz}(wl`zw`F-M@&ktjK^ zZ#e}k%jiO*a-=QtwyEt6De;-b)hFDMD64>4HdLI!;IGdv|Lw!p^~K%UHOlhbQ@@Zr zyU9l0H5k19u$j!Wye{URQZGg93*{$!KVszlJGPX+BwP)u0s+YuGy^P#I|9n(arArF JN|&Jce*m(0yaoUO diff --git a/graphics/blinds_gfx.grit b/graphics/blinds_gfx.grit new file mode 100644 index 0000000..0196d39 --- /dev/null +++ b/graphics/blinds_gfx.grit @@ -0,0 +1 @@ +-gB8 -mR8 -mRtf -p! \ No newline at end of file diff --git a/graphics/blinds_gfx.png b/graphics/blinds_gfx.png new file mode 100644 index 0000000000000000000000000000000000000000..cc681a4b5e50e600244650b2fbb55afb87bb7749 GIT binary patch literal 865 zcmV-n1D^beP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;$7$f&ja?CUm0!000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2k8bJ1sX8;FZJ;N00N~+L_t(o!|j;8Y8ycmh0iR8ba9bHA&@FAVnGU5NfA;Q z5|TW@nxF>|s$2(>LITyP!ajfyah1{%5*QR**p&)_l)|nI!fU&*J6Drx#CW)Oeq}Jk z2bSI0oxMn(&YZg|0f)A>`;xo%>&HidM9q5*w*IqEKa=Zsn*+A~m+v2(^@R(};kaaP ze!WqN2BpAUmt%I$gUUuUCx}1b09;&P@qgmVp(upkW%5eAenIf{N44g`R?Us7E)$TKH96{Xs@<7*7v^0 zzN+m!UTkVioexzA9M}96$~|kF9TvjcW@oXdbT}@twcVGxi)`-cOvx1^`ueG#YuecB;*r_vlh}&HAQW^esfHZWbHFW|+Ie-KT}y!rK<+ArFM1 z&@xx9+=lLYYrg^La$1Os(|xNuLUnPvkIQKx03dHq#KG*!yS4l1V0MMPJrMv<3|r#( zY_?P=$7eGX!hy=IHKG%G(pM^YxW{v;L55;XX@F&C%VX zR1909{{EYM@nk)zW0~%`@ixC&tuFwjhynxvI-nF$fB?V*6#F*M0$K(n4$iV5ad0?D zsqP{FQCzLoB>;qgQXy}HqeB9K5Kt=QZE$o*01yI7g}e!e1QY@)1WXL55HK;IY+#&# rOi+|!z;K`_#em^JQL=%#m#6*#*k19E*RM>p00000NkvXXu0mjf{g!o$ literal 0 HcmV?d00001 diff --git a/graphics/nums.grit b/graphics/nums.grit new file mode 100644 index 0000000..3205289 --- /dev/null +++ b/graphics/nums.grit @@ -0,0 +1 @@ +-gt -gB8 -mLa -mRa \ No newline at end of file diff --git a/graphics/nums.png b/graphics/nums.png new file mode 100644 index 0000000000000000000000000000000000000000..26fd35cfecf7869889c0e9f7626dd5e406e1fe94 GIT binary patch literal 2948 zcmeH}{ZA8j9LK*9EVT?QiDm<)z;td57Z*FDv};e=VtELHC^C6y#U-l)oJ2qvV9$r@ z7!H~&aYH~3*C+-?yJeBYE?6O(FvB<)QS2C$M-Ql7+Z@ndd%f-sfAOd7ALtMF@OgdT z_sQM+-uc{pm3c@O%8BFv076rerC9(3(5C@_&7u$aXYYQ>RApH*ae(RfT`*k)DHGEZ z0r*K1LKbeI>zGfHv(f>m-U+}3H2`iJU04L5;sXGdPXNGg0^s%1R>R?s=mplvG?^6a z2H8M*YjaT*O*WP$A1?zSten{big*0{l!n3ODd|bUORTMdoN!6y)olQ922-SoN2~s_ zPNwPRQ@3mwIoY)$y_mW;>R|sHO_10=VmS~mh+9~FN7OU7t8y%7OL27k6<*RhphwI-J^D4ms)rts^s3kMozX|3@M+4Uu;K$S7-yre3W>g3Aj zo@4rDG@Cc$X;*$}7s;7!`QiN?eZ!oYvHb+mMeqdb?!?Bh!s1$zyiVST=%0!xI?Aq5 zo>EcoQA3=W#l5LEZlhf5z;o=%gKT9^T+NlzbJxE`;0oXK%LnpoY0lgx*T?Dx=k1#J zhwOOHigFWG!tS*zC5zd$Dk|G+65v}yZ#jo5KU7cgAjnrwy_sM&MfKkuYwL~uns1%M z6n`Mv!EUomftPqi?q&@FzYPx$l_F~`_of}68IOmENV3aSwibz<_nEqG+B~S-x_~MA z5T47))ft{R+`n{vzG}yz$!O;n1no}?Kk%L??ulW2=V1767-QZnj*qX(9E?QkBFPHx zVfqdY)Vm@GF7Q=e`CkpZ8DZW;J&G#E%`5yLEBgonv1;0EOs|gIOH0HsYP{+zJ(4Lj z6U4Y9x+p}42_RoCH5tts#cv|8(5K6|ye_)~<8$rR4{%&>LF??g<^(8Fp5wKG=IxZ+ie zjK=0i{HjqvyM=U6ZU3M@#E@qmqA>KISG{aDAQ)x3-QN?`J4X=uRjl(yrmadvS-kh( zT1U1S^aXdN5yOlch$k5lv>`q@9nnNa>6CILkfi_@% literal 0 HcmV?d00001 diff --git a/source/game.c b/source/game.c index 0b9d5ce..682b34b 100644 --- a/source/game.c +++ b/source/game.c @@ -281,26 +281,38 @@ void change_background(int id) } else if (id == 1) // selecting { - memcpy(&se_mem[30][0], background_gfxMap, background_gfxMapLen); + memcpy(&se_mem[31], background_gfxMap, background_gfxMapLen); tte_erase_rect(128, 152, 152, 160); } else if (id == 2) // playing { - memcpy(&se_mem[30][0], background_play_gfxMap, background_play_gfxMapLen); + memcpy(&se_mem[31], background_play_gfxMap, background_play_gfxMapLen); tte_erase_rect(128, 128, 152, 136); } else if (id == 3) // round end { + REG_DISPCNT &= ~DCNT_WIN0; // Disable window 0 so it doesn't make the cashout menu transparent + memcpy(pal_bg_mem, background_round_end_gfxPal, 64); - memcpy(&tile_mem[0][0], background_round_end_gfxTiles, background_round_end_gfxTilesLen); - memcpy(&se_mem[30][0], background_round_end_gfxMap, background_round_end_gfxMapLen); + memcpy(&tile_mem[1], background_round_end_gfxTiles, background_round_end_gfxTilesLen); + memcpy(&se_mem[31], background_round_end_gfxMap, background_round_end_gfxMapLen); - tte_erase_rect(0, 0, 64, 64); // Clear top left corner where the blind stats are displayed - tte_erase_rect(128, 152, 152, 160); // Clear the hand size/max size display + // 1024 0x0400 is when sprites are flipped horizontally, 2048 0x0800 is when they are flipped vertically, 3072 0x0C00 is when they are flipped both horizontally and vertically - tte_printf("#{P:88,72; cx:0xF000}Cash Out: $5"); // Hardcoded example + // Incoming hack! this just clears the cash out menu thing so that we can slowly display it with an animation later. The reason this isn't optimal is because the full background is already loaded into the vram at this point. + // I'm just doing it this way because it's easier than doing some weird shit with Grit in order to get a proper tilemap. I'm not the biggest fan of Grit. + for (int y = 19; y >= 7; y--) + { + const unsigned short tile_map[17] = {se_mem[31][8 + 32 * y], 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; + memcpy(&se_mem[31][8 + 32 * y], tile_map, sizeof(tile_map)); + } + + //tte_erase_rect(0, 0, 64, 48); // Clear top left corner where the blind stats are displayed + tte_erase_rect(128, 128, 152, 160); // Clear the hand size/max size display + + //tte_printf("#{P:88,72; cx:0xF000}Cash Out: $5"); // Hardcoded example } else { @@ -1204,9 +1216,54 @@ void game_playing() void game_round_end() { - if (timer > 30) + const int timer_delay = 30; // 30 frames = 500ms + + if (timer > timer_delay) { change_background(3); // Change to the round end background + + int timer_offset = (timer - timer_delay); // Offset the timer to start at 0 + if (timer_offset <= 12) + { + const int bottom_of_screen = 19; + int y = bottom_of_screen - timer_offset; + + // Tbh idk why it has to be like this because I'm not a true GBA™️ programmer, but it seems you cant copy to an odd address with more than one tile. + + // 1st row + const unsigned short tile_map1[17] = {se_mem[31][8 + 32 * y], 0x0027, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0427}; + memcpy(&se_mem[31][8 + 32 * y], tile_map1, sizeof(tile_map1)); + + // 2nd row + y += 1; + if (y > bottom_of_screen) return; // Prevent out of bounds access + const unsigned short tile_map2[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x042D, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x002D, 0x0401}; + memcpy(&se_mem[31][8 + 32 * y], tile_map2, sizeof(tile_map2)); + + // 3rd row + y += 1; + if (y > bottom_of_screen) return; // Prevent out of bounds access + unsigned short tile_map3[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0401}; + memcpy(&se_mem[31][8 + 32 * y], tile_map3, sizeof(tile_map3)); + + // 4th row + y += 1; + if (y > bottom_of_screen) return; // Prevent out of bounds access + tile_map3[0] = se_mem[31][8 + 32 * y]; // Copy the first tile from the previous row + memcpy(&se_mem[31][8 + 32 * y], tile_map3, sizeof(tile_map3)); + + //5th row + y += 1; + if (y > bottom_of_screen) return; // Prevent out of bounds access + const unsigned short tile_map4[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x0054, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0454, 0x0401}; + memcpy(&se_mem[31][8 + 32 * y], tile_map4, sizeof(tile_map4)); + + // 6th row + y += 1; + if (y > bottom_of_screen) return; // Prevent out of bounds access + const unsigned short tile_map5[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0401}; + memcpy(&se_mem[31][8 + 32 * y], tile_map5, sizeof(tile_map5)); + } } } diff --git a/source/main.c b/source/main.c index 2630f9c..c11fc09 100644 --- a/source/main.c +++ b/source/main.c @@ -10,11 +10,35 @@ #include "deck_gfx.h" #include "background_gfx.h" #include "background_play_gfx.h" +#include "nums.h" // Audio #include "soundbank.h" #include "soundbank_bin.h" +#define MAP_AFF_SIZE 0x0100 +BG_AFFINE bgaff; +AFF_SRC_EX asx = {32<<8, 64<<8, 120, 80, 0x0100, 0x0100, 0}; + + +void init_map() // Temp function ripped from libtonc example +{ + // Grit is fucking garbage and doesn't allow you to have a palette offset, they all get loaded at 0x0000. I have no manually change each tile's palette bank + + unsigned int correctedTiles[numsTilesLen / 4]; + for (int i = 0; i < numsTilesLen / 4; i++) + { + correctedTiles[i] = numsTiles[i] | 0xF0F0F0F0; // I brute forced this. I have no idea how this would and does work, but it does. We'll just leave this here for now. + // Actually for future reference, each number seems to equate to an XY on the palette, so 0xF0F0F0F0 would just push everything down 15 colors, since the second number isn't set. + } + + memcpy(&tile8_mem[2], correctedTiles, numsTilesLen); + GRIT_CPY(&se_mem[2], numsMap); + memcpy16(&pal_bg_mem[16 * 15], numsPal, 5); + + bgaff = bg_aff_default; +} + void init() { irq_init(NULL); @@ -24,35 +48,82 @@ void init() mmInitDefault((mm_addr)soundbank_bin, 12); mmStart(MOD_MAIN_THEME, MM_PLAY_LOOP); - // Set up the video mode - REG_DISPCNT = DCNT_MODE0 | DCNT_OBJ_1D | DCNT_BG0 | DCNT_BG1 | DCNT_OBJ; - REG_BG0CNT = BG_PRIO(1) | BG_CBB(0) | BG_SBB(30) | BG_8BPP | BG_REG_64x32; - REG_BG1CNT = BG_PRIO(0) | BG_CBB(1) | BG_SBB(31) | BG_4BPP; - // Initialize text engine - tte_init_se(1, BG_CBB(1) | BG_SBB(31), 0, CLR_WHITE, 14, NULL, NULL); + tte_init_se(0, BG_CBB(0) | BG_SBB(30), 0, CLR_WHITE, 14, NULL, NULL); tte_erase_screen(); tte_init_con(); + // TTE palette setup pal_bg_bank[12][15] = 0x029F; // Yellow. honestly fuck libtonc because i cannot figure out how you're supposed to select a color from the palette index so i'm doing it like this pal_bg_bank[13][15] = 0x7E40; // Blue pal_bg_bank[14][15] = 0x213F; // Red pal_bg_bank[15][15] = CLR_WHITE; // Load the tiles and palette + // Background memcpy(pal_bg_mem, background_gfxPal, 64); // This '64" isn't a specific number, I'm just using it to prevent the text colors from being overridden - memcpy(&tile_mem[0][0], background_gfxTiles, background_gfxTilesLen); + memcpy(&tile8_mem[1], background_gfxTiles, background_gfxTilesLen); // Deadass i have no clue how any of these memory things work but I just messed with them until stuff worked + memcpy(&se_mem[31], background_gfxMap, background_gfxMapLen); - memcpy(&tile_mem[4][0], deck_gfxTiles, deck_gfxTilesLen); + // Deck graphics + memcpy(&tile_mem[4], deck_gfxTiles, deck_gfxTilesLen); memcpy(pal_obj_mem, deck_gfxPal, deck_gfxPalLen); + // Set up the video mode + REG_BG0CNT = BG_PRIO(0) | BG_CBB(0) | BG_SBB(30) | BG_4BPP; + REG_BG1CNT = BG_PRIO(1) | BG_CBB(1) | BG_SBB(31) | BG_8BPP; + REG_BG2CNT = BG_PRIO(2) | BG_CBB(2) | BG_SBB(2) | BG_8BPP | BG_WRAP | BG_AFF_32x32; + + int win1_left = 72; + int win1_top = 44; + int win1_right = 200; + int win1_bottom = 160; + + int win2_left = 72; + int win2_top = 0; + int win2_right = 232; + int win2_bottom = 44; + + REG_WIN0H = win1_left<<8 | win1_right; + REG_WIN0V = win1_top<<8 | win1_bottom; + REG_WIN0CNT = WIN_ALL | WIN_BLD; + REG_WINOUTCNT = WIN_ALL; + + REG_WIN1H = win2_left<<8 | win2_right; + REG_WIN1V = win2_top<<8 | win2_bottom; + REG_WIN1CNT = WIN_ALL | WIN_BLD; + + REG_BLDCNT = BLD_BUILD(BLD_BG1, BLD_BG2, 1); + + REG_BLDALPHA = BLDA_BUILD(0, 13); + + REG_DISPCNT = DCNT_MODE1 | DCNT_OBJ_1D | DCNT_BG0 | DCNT_BG1 | DCNT_BG2 | DCNT_OBJ | DCNT_WIN0 | DCNT_WIN1; + + init_map(); // Initialize the map for the background + // Initialize subsystems sprite_init(); game_init(); } +void background_update() // This needs to be called before update() and draw() because setting REG_BG_AFFINE during an HBlank can cause issues +{ + static uint timer = 0; + timer++; + asx.alpha += 30; + asx.tex_x += 78; + asx.tex_y += 12; + asx.sx = (lu_sin(timer * 100) * 4 ) >> 8; // Scale the sine value to fit in a s16 + asx.sx += 256; // Add 256 to the sine value to make it positive + asx.sy = (lu_sin(timer * 100 + 0x4000) * 4 ) >> 8; // Scale the sine value to fit in a s16 + asx.sy += 256; // Add 256 to the sine value to make it positive + bg_rotscale_ex(&bgaff, &asx); + REG_BG_AFFINE[2]= bgaff; +} + void update() { + game_update(); } @@ -70,6 +141,7 @@ int main() vid_vsync(); mmFrame(); key_poll(); + background_update(); update(); draw(); }