From 582b157454fab86c16ffcc0ae71f41977ec7530d Mon Sep 17 00:00:00 2001 From: Julia <145168563+julia-aph@users.noreply.github.com> Date: Mon, 13 May 2024 23:20:20 -0500 Subject: [PATCH] gdf dfg --- .vscode/c_cpp_properties.json | 21 +++++ .vscode/settings.json | 11 +++ build.py | 2 +- build/debug.exe | Bin 135891 -> 0 bytes build/errors.txt | 2 +- build/hdr_checksums.txt | 2 +- debug.exe | Bin 0 -> 144456 bytes objects/ctrl.o | Bin 7917 -> 7889 bytes objects/dictionary.o | Bin 6925 -> 6981 bytes objects/event.o | Bin 4606 -> 4606 bytes objects/fumocommon.o | Bin 4550 -> 4534 bytes objects/fumoengine.o | Bin 7801 -> 7797 bytes objects/fumotris.o | Bin 7827 -> 9077 bytes objects/input.o | Bin 8510 -> 8510 bytes objects/parseinput.o | Bin 4396 -> 4396 bytes objects/ringbuffer.o | Bin 5974 -> 5974 bytes objects/terminal.o | Bin 6985 -> 6989 bytes objects/tetr.o | Bin 5771 -> 6369 bytes objects/tetra.o | Bin 0 -> 8092 bytes objects/vector.o | Bin 4469 -> 4469 bytes objects/win.o | Bin 14752 -> 14792 bytes source/fumoengine/fumocommon.h | 1 - source/fumoengine/fumoengine.c | 3 +- source/fumoengine/include/dictionary.c | 8 +- source/fumoengine/input/ctrl.c | 19 ++-- source/fumoengine/terminal/terminal.c | 4 +- source/fumotris/fumotris.c | 69 +++++++++++---- source/fumotris/fumotris.h | 92 +++++++++++++------- source/fumotris/tetr.c | 77 ----------------- source/fumotris/tetr.h | 26 ------ source/fumotris/tetra.c | 115 +++++++++++++++++++++++++ source/fumotris/tetra.h | 33 +++++++ 32 files changed, 315 insertions(+), 170 deletions(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/settings.json delete mode 100644 build/debug.exe create mode 100644 debug.exe create mode 100644 objects/tetra.o delete mode 100644 source/fumotris/tetr.c delete mode 100644 source/fumotris/tetr.h create mode 100644 source/fumotris/tetra.c create mode 100644 source/fumotris/tetra.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..4fa3689 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,21 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ], + "windowsSdkVersion": "10.0.22000.0", + "compilerPath": "C:/mingw64/bin/gcc.exe", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "windows-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3aef1c1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.associations": { + "compare": "c", + "concepts": "c", + "cstdlib": "c", + "type_traits": "c", + "cmath": "c", + "limits": "c", + "new": "c" + } +} \ No newline at end of file diff --git a/build.py b/build.py index 3cbd166..21802c3 100644 --- a/build.py +++ b/build.py @@ -11,7 +11,7 @@ ARGS = "-fdiagnostics-color -pthread -Wall -std=c17 -pedantic -g" SOURCE_DIR = Path("source/") OBJECT_DIR = Path("objects/") -OUTPUT = Path("build/debug") +OUTPUT = Path("debug") SRC_CHECKSUMS_TXT = Path("build/src_checksums.txt") diff --git a/build/debug.exe b/build/debug.exe deleted file mode 100644 index eda6b157cb688d5f3788c7183c7a6fd4fb51fa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135891 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
  • k1izZ_n1c6wDCM=s=NSwqOxZItVsfV^sOe+rP34y0M+gMRSemH7g2E*oWk z4v;Ft>;9RP4Vk%jt~-tsajYjbB89opkzvyXfao_3WGPkxa@nB_I=vhd@o@FL4LHXf z{V=VKl+iT09yI_6$ar$y4ah}@GVvb*1j^UIFC1q4@x|*Sg^N^Bu^*;{tvzulc~C z=eqj27LY1~*Uf-jc4Q`vW7lUDIk}C z=2~zoAfHih!b^Gj0eKL)BzIE27m#g6N#70#^-RsmTpt7^>d4Go=ZNFzQ15_q9w{#O zmw@xCL%ILR7kZp!GZUuygTMN3%pjF|A zx)g(e@NjYNE<@ZfYWGP%E*X?R3P_`Ya}E%_E~wPcmjSt8)SbTrWWXrt%Ycj;bp8Vn zw>KzfCE#O5-H9xh(z`OR1%!tSsRATy$jlv*FF9I`E7F$@d4_>=HXy0XQoI$A^PuDU z#ybFs88Sak9ET42Btr>wu3`>^l06Na%OK)f@Gk+mVo-h#kV{6cA2F9vieCV77Nv0I zS+oLvDCD8sHBGH`aSV*0Fb~ce;FLKylxI62R}5Zz0eRKnH3rB9M`O(OZb16*-z~-G zNXPJ~uLI&*kh%T^kf)7YSu0V}fLG6@fb2K4x*8C9l%dbhjxsW&9Jc_6t!D`Eph(*Z z2)`iaorLrPLT$JaX&ex<6@C{WlZG}v3dmZ6&eMRLHE_-Y!WjmsjsCGjf+FlUeD&{0 z$I$#0Kpr$8_A2NQIc1cXkGt~3K)ip9t6`P*B@Rp+jQ5Q73?EF4>)XNM{t&7--sH%bCANRv%u|to zjJCl?N{k58L3`5R@)>|1mwhN7wD0I}oD-;2Se%mp2YS*7d2o0Fp|dwJnj9P%)_V^4 ziAl#98R`S>sIxbLA8+u`Xxv%M)9M{a^xlQNiiB6j>6ShzwMPynhmzxcVf<%_JDOV2r|(OQB@Pabqt?lQ z5bqxb8g|@_n{Wk8MfXIKxL8zlWCBBlA#^&%dWNt8XDvpo$wckQaB^&92)jpE4Txf% zTZDyy_<=z@Idp+F{@a#`q2!>|H#k1plk6RcPjHilgeOZ3#C7zUI(DT5Id3TAwFp@% z9?H-rrLP<8r8D-79Tn1hZXsx5GJfE$B%;B{0a(wuN*o$Z9u@a4dIQVl-eUi8Eiz-J zbYj7A7{_!ItV|T%3l0y?gode+3XYCvr9QNLe>*}{m z42~r%aowI6N?@H?dD9_0*lI`4nu%m`WLRA89636k97G7{s_od+InveHu+3_Rr`JsM z_b0~csX)*D4wTtVZB0yiZ>#(IJc*rX%f>;%18SQ{TAkRsW)QPNEj^RGm4(tkp>pSD zVp}{pBHW>OpfcV!*spIjMvMz@J0y~0Ej^=(g1qL&@_@CB98Q3*xNaJ+g_91B!;>_q zZmj2sbztZ&RGgs^><^`@i`bUlq1PkOdmLIlsg!!ORJG9gn8el~!9vh$JDeCB>N%=} z-i>V;&=#{cs!REgYL-{jsR-3_-pReJ~EWBVnaPi1iV8{Z2j~NGPfttO&K3( z??Lr+s_R&y*P`1X^uvW5bozsE79FB=>#pZ@9L$d7$f(5BtoHPPFXrAyR1}Q&p*Z6P zgau3!HETQD+T+bl9i0e%EZ-oy9(O1DnAOujrHZ59fKVbBEJI z@$QGVp1iRpczicItZ?!sw%Rp}ba96FSiQ1&%5BZjR(7_vMo>`{Uc<;3DjGb&@6{d_6$8j zG$|H*st3=o=s1bt!}=C8`0^gzfrRLQV)tR;o8H@=WE^21y(%%@^*NpN3wZd%P$E7! z&WB}IyywvPL5WYw@sWun8ykj`o}{jm>M?pn$~{{qQD;@U3`?lPan^*pu`IcR(ARTx zXz<{GzjIC{@G(8t{)R=y;T0@z!Wcbm7|%JJ$A8)k$Wrlj&g5B z1S;RMdGn2%>5@}dz&Mf}abXC^2Mc#3`{YOnspHAM!4dg{X*hn^BQSC06VN!ViYkFK z8tvi4(2bkoJuoUAZxpW10F3aBFe4w1NIvm6bOEamj-g$m6v-Yria?(sJa z4kba^krz^nF^W0tqYs$fb14ezEaRiJFiR%KfgS)xx(79ed{cwP@sVvUdLA*(Y|Q92RM1sgW^j3*HxMQb74PPs3d9B8I5p;do~-M)C7yH<>g zAg|;>RMyg@>F%p?(E{uk!uY69Aj3z}y#tV~7s^D$8tfex=45{{KGM&kqQ-JGjG-9q zJeAQ%*|C`NB^|_4DmC27OPt$+jv?lf`k|gXN5l8<4YWhqbI^{kVq50fftdq z_GOXk(0##% z*ioxQT>0{`r^m?3qnxH0wsLt)wHSHz{7NcGl zlnP0Sb52}ls!^RBt$3zX6faK|!=P-lZu)uhKOl4G;g0R4oZ&A~v57IlCe4Mok{wGG%#(!cM_zR0C1rAOHk$zATw&JJaG^>;fy0W5c? z!*aK{-VML6wU}PIr{KGX=f@M6on$xwhY>~#a9(uYDqT<|pp<>5qk*%{n=UDqRnsVPAGb}j^PwM?^wf_8%!y|mOagRRC|u~wVR!2C1{#i;)yI>f#mV|C)1GU z>VwB*WHy~7n-0!XY9FlOv8Aq&(vNvobe&uK+};<~o6=&;W8vN@5kV(^2M;E2VSaY3 z`eD^!@h3d%jCj0fsl6pUbOzdNCf=h@qO(*uLWFfF1_uLXYB$1=%$0v`9zLqj{7G=I zA#~rHjs7QqxKz&F6f$K#`%(7V-NFmD{R+3v!yOsBxR&~@LV zKzR(5=|z3%idc3zLnh@qX9_;9JFh@*A})#o5=r9cojS1p#UE9G4ng(c*zZ$#VCp=K zScOjbW47-1C}ctiO3%ieVK^O&WcALxVXLUZkP&=~zes+ODvw(~o$FdE9uE8}J%Nb7BsTf91;eTvXQ}3MzRXCr{1gDW$0?(nq=P%YtR55uV zHm-2Mvbq0p_aaSzd;?&XcU&WCvS!j&R0S4YS!v|^!*9?X@nCT?JW_!04a`lb2B&{F z0yd$t_@&-z^Z=U1>*0t4Tw;1t+3l7pT73wqZqj{ceFZUtVG#9`+Jt`BnyTyVqKBnM zt%#a+JTH2vc2-_9^cAX+nsp^Nt*}%jG&P&CUHS@l&Ps;7kN$$Qx-#=z^HHbdgaX4w zTH))+SM{`M=OiB|Oq(rpEy*C2t##2)yFMSi#Sa5p6m^=!`j`CGZ3&7O^~aAE3E&!y zh7D9=(f`0%ki0mnH}>=cgi%&@lj2b^76N2Vr>>ypf5Uk=j`UDJk9l)*Cv3XCBzWFIm{frV$-2X3O9s2k8Ot!o&gWwIFU zJ`%EqkkMUDOk{ufhjV@;#?-_`{li6ZTZl&g(V0vWli^r4bulrSiOD?o-q#X$lY7rO zzw`Odx%d6P_4}<_c)AGqYRzbV?K>MluL7WE)(40?^W<*Y<^UMUyj?|ipiOV)T9D2m z63_e{pf{1}WNS%)>}4SmbZl7z@Ryg3kxK100eBHb2Ya3Lqxx48B-2b&0@cl^`Joix zf=^@xp1cdXx(Chll6m@Wvzgwhv;B%epEYN;>+Dq}u(6eM=9LpCqz4FbX7Ik5o;!n( zrJb|1moNdCr@v}u*OiN8nVqzi)Xr{Sp4s{D&h+I_`l^|}yv$9_^!9t^=~wQ-r1KJ& z?@+d2dzswNhU_jvK4iOS2RX}TXmfEVX1H$7V4}fg?tPwJqlSveDnxYl2lbV8J$Uc{ zt-R(H9t!3#|G@KKvMNWrQ?*fbkKM)&I?ULt&;oF}fZJu!n@GL5Ii14#4U4*Q6phGp zI*WS~@|-T>n7WWZtN~CUDzZ@Aw`^&clhqLUpn*@ud)APZw3DT5sXZ_-y%_mjsa9OaFcY-n>LosHuGd!v*Bu)RLk+Kv-#)%x zlLV`~kgu*LKRl}3~#U-t9_N_x%b511z%*o8efF$XE`g;8^|o{ z)N4sJ8_|iPEZQFRRG*})j!_L1J5lGT%4rAH`>E#`)t9JyiMoEH zWPgm+mDHA0o}!)(TGdZgWu2RQx{k5ol7;fXHR@8T-Bf#t`Y~kP2ej!XZA{X_H?tk? z1Zf&Sl88;MPeh`P#>iwWo-{^|8{K#Vqe)}$@K`u9k!Um~TI$8SZE9vemsYk^%g@Q5 zx$g`W>C;M2p+hz#yxph2`jps3bg{9padF=B%_C+4!&60M@ zdCZ07N=!#iR@8JT7LNe1!SbOYJ`4f|$REI4DDhwU3i3WmJnjm@o5G*|3i2%?{138% r{DR0VEAactA`AM@k{#?5f0o>4hb#I>f97Z@yIN61nzKJvlqvrKeG+SJ delta 1972 zcmZ8hYitx%6h3!$?{>#+w?iM>-EJQnwzAtoD^LREWm}-_khV|~D%Jj=b-SgjwUllv z5|!nlgiRqZxe<+Gv`LK+hzZ$01bzrAAkiSiKlBd)d^J%537Qb2(R1$1P7`i&&*MAy zJnlJj=hoT>Yt?~6UZAzfP=o4S2fzjepvtHXvnpfDX1>7%u-Evkl6T>mt;Y2TpGM@c z@mH8XLE$A)&cbYmXl4=DrUC$OK#Z^o^*%!{ROgHLSUc+z_gI7pp(^3pCbaxi4DeMz zW(7*#1WoI@x9R);m_zMIA{S)0fVp87}ycbfmB8 z>06KWGi1>xyPxRkwLHQTntt^72V^+PkwV90%cIH8e>&5b zo73Ow>C1E&)3(g&2j8BBi5!{ccMTn9G4vxnt%-AvH`#+stuvRg(_$50!`>0Q`C@Ma z+VM=wZHn@#IL|{I-8yfJyF9>J#oxSC6u9a=^Y}0G94adZWmI&y^v)BM5EtWrN``q zTZx(dPQt2Za>+4TN!rdc`aqN7O!+1?b_TN*Cj>< zAWGHIhezuZlVNpJc6CvEmR3a&T}pv)oU$N@Hkzs?>w)M-Q}vt8u4z=wZV#K?UQ}Xs zsL%B>rLXnNOhym52@leMwo3~Ob8@^PKF$xeg^NzglwjrvSDLCD@>|E^@wqEOdG?Jp z*jK4ivyCnn|K-=P6QV|2z4E57;H@my6AS9kN^V;()r7yZohe#|^qlw^+A zVuRxI;*h7lI`@xLF@ZJu{s` zm}CKNCu~5PC#4Rg5h&5TN#1beilo%4o43@OA%6fb< z9@H4@x20cgsX~0`f0){e_AqV_^hipl-?FiNHa2Zzr)=zd8@p*^f7;j+8!N+l%^V?= z%!=v;6T@*F*2>b}UK$RA5SVX%3N`w1&mm_}qan;87f_?uK8KJ8{WRu~JBUn)howO_ iBRs)ltV?_p%&_}nb6FePXzVH$XUn{-DRZ&Rr~D6kJ8?k( diff --git a/objects/dictionary.o b/objects/dictionary.o index 763d6d492c3d2c96a4b9def8be911310eefa813f..5aa83ba040e07732c5e38c9536bced0b79e4e397 100644 GIT binary patch delta 1618 zcmY*ZO>7%Q6n?Yzde`3AvD3J=iJim=xF9Q0HjW~i)GcY6)N!k-D6yadlsN5{8mCF{ zPZb9hS3xQ&5vbb{s0SY!!4(epg36BsEgYzFfdfBMK|vrPMS@7E9EwVLvwv(xviIBf z=6&BcZ)WGs;V*|hXD)kzjc7>qJmS9OK*RxL)V?xls2lru(FJf;-RyEJ2rl98ntHF7 z{6-^WAAigT@EM&TUG4?}cm?0Sq32027xL3O=E~>4|NMa7bv_-u@$bWj88*?DI!nj-9$)DJX4V>aYqwDJ9(nhAlC`l0gAg; zaps3cU7JHLqQh=!0L1>*U zDa!u`A3})FHmt9;7^ zp8QqdLt>SW9pI%k9&;Y9r@i?_>m1>im&%0|`dFabEkDsM<4w{(&^#Gz(IdSS*aKc g!-E12yzjO`O`_1Z!$s1dBvK^D)UjZ5EwWDj18(;)4*&oF delta 1569 zcmY*ZZD?Cn7=F)9?#*p(zG{~=F-x1Zww=M2+eC_8Ge_;#Ei2Q^mIbELq}|nJX}6K4 zLPs$;u~vrC+p`JEKsMMP{|E*V#z4?16fB7T@Z*mR209fP$O<~fe9t}SUeg1~ea^Y> z`#jJ4o^#JvL+=cEPptTXjoT5^`)Eti1+Y^B2$}s0WZAsZC;uh`449jpEd>Rjh`;0J zy>9XujgdY%5dc`B2S{hjIsrI>vk&Mz>6U&8(sj}+{T`&(NiR|8EsQJu0`6Rcgpxp^Fb5K0I{cz}-V{+|*zCa&3)Xl79$qpo=N=#hwLpRYW{VUsuAe z%s`sHuj~!8ReMN8nLSymf}8%KtPwX|_Vf?B7t5z>ne=oGT)TH{Vx)UgO%QzaE+3GyS8*1HgSwKNC$ah4^S(E#=op5J3lPRcWt8cfj_ zS~}`Ei}oB6u<;y!0J%JY)MN^BJDZhq>1L%|Rw!BA6M`Gmv(+;*#GSRocEF zuevB#VARiZUc^XYjhWIdQ_l#R_Z(A~+*aLsd$T9KzuA*M-0Vr;Z+kk9Wb}^LS4T7H zkZ6bZgpfF9J7ww_+aN9m7mS+Kr_?PGQgYn<$=#%O2seZ!rxLt6zTc@{u?yCIrv|qO z_5?Q^v{#Uqoq-;!)SH4d;gCOp4aWBOgqz8GIs`e-XD2GD%wgmwBJU9=pRHnka+|qi zVvGK*wb$d8=&A@#IZ2=Mr1-Y}#_j%+GQ{ofLU6ol82^6+5HSQxx5IW1*{p9MvYYP^ z?(taFDAnlOKHpwNIf9pmJ?w09nXRI6W!t$^>~qIX&;qFRJKtDG1YGJKZA2T^a%}+e zlWe++@VOLiWc)gj3NCXrLf)mzfjJVTcLIOKd^cpGZj|MAbx}@aW$nD&dPDX~U2Tnj zgGJ(+pM9B5wO`agb1ZS=%D)!8o_2G%Mc2m=Md2~ zM4a$jXYE&K&5xbt!g}M=@Ii^-{nZ{P1saPs@P9K}A?tKFRv|faG~BozyFmT}@aq`% diff --git a/objects/event.o b/objects/event.o index 95dd92ce5529f5f958483d7dc04bf370e50e4c13..68654a02044ceff8b676e038018ef7047f4ed77b 100644 GIT binary patch delta 64 zcmeyT{7-p<5eu`4p5bOwmJ^JOm6QLmYBN@D)?(9QWi7}r&a9Xm&aJ>{sHtEGRHJ9G TxrtkfmC<{mqv+;M0zQlYiRTi5 delta 64 zcmeyT{7-p<5eu`ip3!DgmJ^JOS(E>F)&z6)GcN#nYd7$bqzBEgU`gX%8V~2epF}u z0pvZJEX%0OxNou}qdMyY4hDv($+?WmtOA@240)5MGI}$8;+*`5QH_ypGAENdYZx~J z!?VezOeZF@GnY?pVNT%P541}Gh(WaGF)(;c)GcOgnYd7$bq_NGL(Igp%8WlIepF}W zU}0eRG+CBWnep6YM@Dtl4;%~(S(9@am01-y85rs&Pi6FGV&aaT+cLd{pN$5iHyv-$!U|-xfQsLH5CkjR_PfqFiZ~MUZxlb zbN~oA@(HvtIrFkH`5fb62YO8fBFu1dvpCOACZHV``J{nvd&}3&$mluIQFL>kfCeJ~ DaRN<_ diff --git a/objects/fumoengine.o b/objects/fumoengine.o index 71fbb7616ece9ee9186eaa7fc7e319034c7479b8..9b15b8a0125214204547a99916d3e18644ae1967 100644 GIT binary patch delta 262 zcmexq^VNnkrHzjP1mY%gDl?i))Sb`hH1VuIp)Q zWmIOIIr$-@$mFw(!i=kdEOo||$(&5;tXo7G7?d`fGRZJa&R`Lo9Lyp*xt!%Uvx%PJ z=2F&PMms)9WuPg{rG{n>8za3I8L$(F&A#0 zEc}*{IX5|Na;vBUx3Q*zA}#daL)6)TG3*s&g#P5BY2mRvvPOs1$SiZMm1 zm!vJZ9pKnW8Z9$m@716U)?nQq#g?{4w{B^+cD7T*EwFAG1`O@6Vg4fxyrn}ucPp|a zu=o4Ux%Y~+5^Vct2jIEi<9ELEo!58IIhQjpgo)GIbwrN|N~O-SxmXso%x-##c6*3k zZjn4ck~Ds@b0%F*SK;0U-CkEE069S8S39RmrCRA~?i}M5YYnyo_8+V4bq{ndtj5KC zM6a|;yM8H&%lb@lYs0Dr6yS&cO! ziQCp)BV=yh8lrdCO0fqIVXybm8r*ZRcNVx0Y+SR0dsL2$17^4Gva%`(dwu;?5~AOQ zy#za7l?1N8w!!1je=|`90xA0C@ml|0hWs9IHy@B#9-09f7&@F<{%PvM&jwP<2cxOw z!|~KhBY2Lyk7pdu+jzd8y4W-TcxrjFJ$c|_C<*$&MGZN<5k!_+zIKZlKyMGe9$+zN z)#B8JtMMDV+cz@|&m=zwzk{hsgRgUr8W#CcWhr%IK#T-ieQThfE~PGff8gmiZGXq_ z^OyZ(e{ap+7`ZE5NxgLLMc9n|=|IbKSIb7^&qnTExTVZ4kKARGwib>hYY( z1?*PprNg&U7x%>nzXMb7@4DO46$1mdfh6o!6~F+Zb)Q`9q+P7z(*IQMxvQ0bWDL4N zk=XHWJh=^o-b*Rhg>-qm`(M1MRYDxUSG#fHwt^0sV;EfMmu!GpuHe0~>he`BzV-2g zsETHCjzK)hkCj1WgSI;Z-KpoVE*i6upI^O`ifp<1UIM05fBUZ&ZYnANbw_;tPUPs- zJCP_BG0~mKiEFcwE=>nr@}bn$tM9F2B@0+7M5#9zi*zp4^R^hSrNl=q#fr;`|Qsac%&}A)_xAP$Vqf@{zM{vZc+11~4^>=FYE4Jj6d-nTW;nQytDdfQ{QAwjZ@{vw{ z3XlOOWO|S`(Pm20aXLzaG)x?yc*=ZoQiR3(^$HTpoF_oG#74Rb$unA(uz69`#)`*% z1#Fd~do|rsy$S-Kpnub*qw4cfudWn`HAGizJU>nJ1P3a9^7}Au>&zd0cTkcyhd+fW zr@N0a_i@c@WS#zpPo()@E=!n7N%y?CF#Ty&FqA?!aYfZ0;ael|QH!XNm?sg~M@J_} z(e{lUo0uFO-cKHFWMX)5e1xOQP^DZh7D(6E97Y-CbUI%#NpJRZkD<>77jq>jTdXQ& zt6zshQ0^-(mCCuyDFD`ei2;kGulIk%C6y)8lY&$!F1*{#+f`lP;QJdOqtlf#wa3`a zXqu~du%4@rK2xHNO^-!nB-EavTML@See@0(mn9+Pxx!7@uF z%nbceyD}lQ%)FTv;yxkPZ6ErD4^FMyMXm9bT6c(ATUan>=3#WF5VW$OvOxNif?Z4X zvbl2b>5`%k{wF&$$J0O`YUMWzDbtl%(ud=$iBf<&Q^SkT;6)Z8b)sy!(}%|OJ$=yG z2KH7PNCj8}1JfwC$1$*r>P5Gw(uEns5c25z|DFw4W(Kq1K!W>+^itU({a}Ktg^zNw zlRg$%hJQB|T}*P)$D6(k{+6Pnk(l76$~<@HryIWo>1{Tt18wu)G#7G3fCc4616ESQBEM)~z-=3T)QFA=|Atci0(D5fbUr_w#;OPyp-Bix$rZ3(3mKCFK@m-KQb$gkh^z5HOjRWEsr z=;MH3b)WTg zU%2x6J(c<5sMA2*8w~jI3RW^@D^EeAnWqnT0K(H0cP0gcah`5hbRKUChMLⅅ~XA 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 literal 7827 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 diff --git a/objects/input.o b/objects/input.o index 481c4988fbdb716c35409867b58d2645911e6266..b9a14eba89695dc291988953531de05dcabdb811 100644 GIT binary patch delta 107 zcmdnzw9je7CpKmiJ;Tjk*)}s72};^9GB7Zgnwc=Lic98#*qO#g46KThzF;;;TtzY# z#Lg>DO=e)#*nErAn}@X^zc{mEvWA!fr=g~TA<#HIgU!KWiR_Ht6AMK*pOP(M1^_>4 B86W@v delta 107 zcmdnzw9je7CpKndJ)_NE*)}s72}#;8GB7Zgnwc=LN=W8{*qO#g46I6$zF;;;Tvaj_ z#Lg>DO=e)#+6*m;$%4rh*~RFg*hXhRwlZiR_G?6AMK*pOP(M1^_3| B7%Bh& diff --git a/objects/parseinput.o b/objects/parseinput.o index d82f6db108f03a32465dcc0ba7a23b4f7908b80c..3353ca881a75d6a36813d73d35a117cde80d9ba8 100644 GIT binary patch delta 120 zcmZ3Zv_@&eBW7k3J;TjUnF|^11tldJ85o#K4b9RRScD{_!5lLa1{QHiFAzJ^*oc8e zQBn)c28pXkT7lSk#i_{*EE=1qvOZ#EEyypG^ KqMH>2co+fJe;FVE delta 120 zcmZ3Zv_@&eBW7k}J)_M}nF|^1g(M{z85o#K4b9RRScD~`!5lLa1{MiPFAzJ^*oc8e zNm2{U28pXmT7lSk#i_{*ESj6AvOZ#E&P`66T*IxvZLFza2sByGfPrE2Qtnh1M$d_k KqMH>2co+e{+88SU diff --git a/objects/ringbuffer.o b/objects/ringbuffer.o index 0c42d27e1f31e8af530ded6236350f5842bfa3ce..550bf8293c4cfdf6c2c40fbb4a9c05d11b751feb 100644 GIT binary patch delta 70 zcmcbncTI1@Ggf93J;Ti}S(OCWhc2{=h+~l;$()V!Gb?Kot3V`( zRMMYpA*g6u;l--Mz{J87!72}=7$aCEK~xE=05ew_E6*-gkrGyQkUVp#4T_2;Rt{#q z&HaLojCuw6#hDel#i{=4E5%VLZme&H)tJ94!*cD0&qb+1x-LBf}>+i+}S`(LyF* a5SvRlGcqPku9kFX^q%M_y7`7=AtL~A!-TN_ delta 595 zcmY+BO=uHQ5XWbBcaoQ{-ED2GtMo%XM1@vkXf@bKL)f~SLqlt^f?q|67+R#VF?uR& zYo!E)_2D&o(?i9>dJ^>DLCK-usV5KBgG2<$Q4oo5Ng_ChH}mHApLy@i+ZwNrhi<8k}-nw``nv(jc$a|--OaDbl=ZlcPOjmW9d<2=bSsCu`VhB3|fEzVcU zCySuyyc&9rC7ueW0ws~95?>7O$3gxmJad7i75}CHZ`%&!`%u~j#Atv&7lJ?DdAAR zO?ri*4#o4NKcE;$3bJiV2rtQ%b2Q{9=E?A#kjjxFMc+`L-BH*R|0x_|vQ{H?lcE{I zyc7V$ocF9JiSp9*BH!*Ej-(C`C&kD{j{$hC-YM)K6fgEItLp1gE*6jt{16Q??`q#1 n#_QteBLX6P`xnVxJ-#f7d7s*oLtNl1#u+^8X5-#xV;TPf5A=b1 diff --git a/objects/tetr.o b/objects/tetr.o index 49662814436f784b5801147d3bfa23719ff43b99..df3f43e12e90812cf3bcc385feef8d9a4827885c 100644 GIT binary patch literal 6369 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 KC))oR;(q{#_u#ky diff --git a/objects/tetra.o b/objects/tetra.o new file mode 100644 index 0000000000000000000000000000000000000000..871a9abce74023ccdaa3e5bf6075cd467c922361 GIT binary patch literal 8092 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 literal 0 HcmV?d00001 diff --git a/objects/vector.o b/objects/vector.o index 573ad7cf64ea623e9a747f22a68f1ac620d53203..932cde819279b8192ae3d056fd388d5ab0ccfae4 100644 GIT binary patch delta 76 zcmeyW^i^rYKW1hVJ;Tk6EXs_Ge3MmK*DzL2zQn2wB)_q0GgfX^Vq;`wEyypBj> zU?F2c5Acxpv$%0F2JkLlW>Mo05dDK+WKs5C{wL<;XfKl+f@z7+lgh<)J492Cwu5!rAUFFhrzY1ry&W9VDD9$a7$5=65Xjn8;tY_OV+2 zM{AtLd6g~Bnt8h|U~`wC%Brgxzy{rX#+G2>*4J#eSuAnM2%vvfhqtNi8+h&@yp9I% z2G$;eTE1$(g`!=K^@KaKJd`c0ETuPwm(nK-VEu!snj(=uTv`F^ef1G`Y~6FbsxyRi zO&{@ZyZYHV{%hAV3-ewv%s%4B#d;?2b+H?nYvL}`3l;#=EDyTXU_K;o9C%jF6~UJFokJ1xQ~6Rs)~FMH z;d`FIlQZaVeoD@jG&&<)BW5^1S1M?f?0<+9mN0gB;>h&uB<6~CaNh6hDocIhYK0sC=Q%f;@a&Ua?@YwV~|I`7fGQ5L1sxR83{I;iqUElhT zXI*D$MGkxpvGxIf&ez@{UdL%|BhKNqJVGoyz?=9GZ>Gs??&LseeqLT3mD3q;IwYZo z-}kk$queY7Sdqu2h0c-=DVFel>IhI=~6^GKrGziXU)o;<$e4%kRfCHURZKTK zkk2ncyXvNv3C}ZUzp#QHY(c4bppKCsJ5ibk=b(=)PVi76=MZ}Ne!p-0)lc0={@;Dn zLKbvCfeNpaJ5A?4=olNH9XK*PI}Oem_h0Eftz~nW{2JEJEP}v)?2pGfkpfn&zlULF z+ym-GjdL?z!YKd5A7{6CeO=bzGc<|(Lfyoa&(OL<1hB0w$np{-MVfV;4kSav zL8Q&|$|hh@2k|wxTzC_aS8AADrdh-)0>XEYV=MUruwZSFx79~1iYWMWPkhK{>c5zg zbg3#g>J>LuWMDh(!z4#hAUXH%BFiax16aRr6jPX0VK(4bYEat+Hs}wcQBA#yM}nJm z3r8{3^&#oFs<=N8Vdr^YAa1>hwEkb1Lw}R!0=wB?_?197VfP?GZ%|JN1X`=E>Flz6 zIKKvlHWT&@3AA+cj{{O_;&JclNnGK`Px+ot@XN&0*OENXGdJNnnrh4+(Wdnxb^+WXs z*ybMoN@!&KJiaPt3=c!P=ygKF#8SFApI=>`D&|*|R^jKQa9UHqKMdt!n`>T-y{OTz zQ*4y?hs8tW{XUh57pL~|!hAjeJ1$%SuC@`@mBC&puEN#P{mPSI$-yhOMfBB`CoHsu zuDK8Jm%>fcjUQ+;eO{3Quw>z}?-56#*P zrb}^Oq|J7NN}^1cqc`~HBZ*_Q=pc|&G=qNw>EhhNEXl1=OMA6eW-BcPCAB43mnhwK zM;m^vBRlQO)1Djr?MTO2lK7ogqpbb1%`+sC$5U!CN)RP1%lV89OZK!Gm%IG@8K+0f zNAm#!4b{%=B^t|Ri@;`0r2Uenxx1p>kVP||0LsuxFil>0&Dv4%`a6H2q0T!*;yp^h zLOPdOl5sPSm{R;#4MF=R+MEZqfJOeW;nA03FowI%T@8An*Sg2J+e(if#>Pa3pjKp7 ztIA(s5;5Kg2DIa!kWVp1*dFWdh*>jAUUFACBXWGW@tIc57E*0C@;8!F7<1ZtBMO08 zccEs4-)*ct+mK}YBrHeOF^!2e%vH7DcUs9GecTwAw#{Ev%#Bt?-uNX`!JvMQpzfz&ra@) z`B=|ZBKDTShzECeoj=+UHg_hJFSuk!xxaR6Z_5S4*%E$qG+?9^-mjpa;1Q~Ff2*Kc zJeuirW^fmW#jc^E_E@Y3zmrC)7C=bWhNB<5N9=oI{{0d7vOCX;0*V% zfN8`C@FgE$anoQ7;MaVaMNDgm-sjJ=2>XP;$>N54jr^Z1X1LzWt%jJntp(s_C+{_c z%?}~`ymRN9hDEc|gR&-IC=AdrIzAH|>f96T>`rv;To=E?Sd>3*Z9MEyPBWzCJ9|N> zQJPA45d>K|qrdd_fZ$P%6V7yZfe=>q>X__NWsLAjR-Ff-iGOIl#+>|z(mv+m|B&K1 zR@mY!#@lT^TWuaHBtyj@7FWw>ZB5L%^Nj6%7K^`R0x+%{aG2U1!2Kb@OX%=yVeSEN z@wKYoqFk4Kv#EAr`Culyx|H4;SxTSCg7jB&B}JlrJiiLk--@r$xO2_^OM^)^*rK=i zvo!U^E1TsNijS@H zs1i~yH~`otI0BY`VG97;0!L7X0<0BB_N2KBtWLoC(IdC+{eT37SnJhS> z)wA?+3SrE(ju6ax+@w0Mtu27Z(Iocr*Ay?iz~50?AL*^e^q_(nQiGbd1Z_oHF-%Hu5uz^s-MXXGiqP6B1K2iBs_GIXWa?;x0c3%NkD%SMsP{UH*vV1- zRt*j=wChQvmZ`Ha4WD=(ZERJ`0`u1fd2@Zps;h!x*mH}|)PH?jHn1MaiGsPURTbC+ zRU@QFVc5Csz(eFZt!@Du@QmRkmZCHp^y*m@D+V^?4WhF+`5K;mC+ij;$IzNvBveBa z2vGT0I+GjG)~2wXmeh&4Q|f$3%RuLMnWLc7I#c%mep}>1B8SbmkSc;>Et(kiZpYd%^iOKDkBWpR$0>&f;iKN4uH zyFwJ*TX%FRomp_)h|(^XG8+95K8y>7l)V&@Ou_r>*Ko3$9QO zPY5~(@GnJw*o#lOG4}bA`CW<)@5a*N6k{*;@}ogl-2o3k74CT!F18Ui6rd`bTZ4;- zhWVMG!p8Uu!6=LHE5UjkuLs=$eL)L9+eTS&Kh7`G8FW*peFNjWxEyM;T_#mJt*=Bb z^G8BWUfMnoi4*yLq&ql`by-_b;ZaFH)P*I-b0u$*X6(^bPNuCZ3ri{<+)>=tcf$Uv zSJCMhD={^GJN)I8n@Q4M=|QPKWMX*GoH0n^k4r9^P5lyCYb(JhA`4&1>t-w|lid?S zc02yNC^|pHNXNntH+;LD+yM-$+8eTw6$AT_7)-GJ%C1&iNy_^aVutvC8tPe?*GK)^ z5s6i^nhN~BsAf@7mW+YA02v(EQBgZcs1kECqp0UyN-*wXab2iU{y$HXfQE-93Fp_# z)az+RR#mBP-Oy4?nbI;y+f-p|c>=Uhf^E94>Apmwr?@2OPs;n1eYhpbzpHo#=ored!Q&C!n+omI(%qzgXeBxd1D+kV ziB{M;{^&kH#frametime = now - inst->time; - EventInvoke(&inst->on_update, inst); inst->time = now; + + EventInvoke(&inst->on_update, inst); TerminalPrint(&inst->term, buf, buf_n); puts(buf); diff --git a/source/fumoengine/include/dictionary.c b/source/fumoengine/include/dictionary.c index 7f63491..2e69e08 100644 --- a/source/fumoengine/include/dictionary.c +++ b/source/fumoengine/include/dictionary.c @@ -1,4 +1,5 @@ #include "dictionary.h" +#include #include #include @@ -74,7 +75,11 @@ void *DictionaryFind(DictT T, struct Dictionary *dict, u32 key) { usize index = key % dict->capacity; - return probe_bkt(T, dict, index, key); + void *bkt = probe_bkt(T, dict, index, key); + if (bkt == nullptr) + return false; + + return get_val(T, bkt); } void *DictionarySet(DictT T, struct Dictionary *dict, u32 key, void *val) @@ -82,6 +87,7 @@ void *DictionarySet(DictT T, struct Dictionary *dict, u32 key, void *val) usize index = key % dict->capacity; void *bkt = probe_empty_bkt(T, dict, index, key); + if (*get_key(T, bkt) == 0) set_bkt(T, bkt, key, val); diff --git a/source/fumoengine/input/ctrl.c b/source/fumoengine/input/ctrl.c index deba581..fba729f 100644 --- a/source/fumoengine/input/ctrl.c +++ b/source/fumoengine/input/ctrl.c @@ -10,18 +10,15 @@ DictT BIND_T = DICT_T(struct InputAxis *); bool CreateController(struct Controller *ctrl) { struct InputAxis *axes = calloc(16, sizeof(struct InputAxis)); - if (axes == nullptr) return false; if (!CreateDictionary(BIND_T, &ctrl->binds)) return false; - *ctrl = (struct Controller) { - .pending_len = 0, - .axes = axes, - .axes_len = 0 - }; + ctrl->pending_len = 0; + ctrl->axes = axes; + ctrl->axes_len = 0; return true; } @@ -42,13 +39,11 @@ bool ControllerBind(struct Controller *ctrl, u16 control, u16 code, u16 type) u32 hash = hash_bind(code, type); struct InputAxis *axis = &ctrl->axes[control]; - struct InputAxis **bind = DictionarySet(BIND_T, &ctrl->binds, hash, axis); + struct InputAxis **bind = DictionarySet(BIND_T, &ctrl->binds, hash, &axis); if (bind == nullptr) return false; - *bind = axis; - return true; } @@ -97,13 +92,13 @@ void ControllerPoll(struct Controller *ctrl, struct RecordBuffer *recs) struct InputRecord *rec = recs->buf + i; u32 hash = hash_bind(rec->code, rec->type); - struct InputAxis *axis = DictionaryFind(BIND_T, &ctrl->binds, hash); + struct InputAxis **axis = DictionaryFind(BIND_T, &ctrl->binds, hash); if (axis == nullptr) continue; - dispatch_update(axis, rec); - ctrl->pending[ctrl->pending_len++] = axis; + dispatch_update(*axis, rec); + ctrl->pending[ctrl->pending_len++] = *axis; } recs->head.len = 0; diff --git a/source/fumoengine/terminal/terminal.c b/source/fumoengine/terminal/terminal.c index ddae341..3ae0e8b 100644 --- a/source/fumoengine/terminal/terminal.c +++ b/source/fumoengine/terminal/terminal.c @@ -114,9 +114,9 @@ usize TerminalPrint(struct Terminal *term, char *out, usize n) usize len = 7; memcpy(out, "\x1b[H\x1b[0m", 7); + usize i = 0; for (usize y = 0; y < term->hgt; y++) { - for (usize x = 0; x < term->wid; x++) { - usize i = y * term->wid + x; + for (usize x = 0; x < term->wid; x++, i++) { struct Char4 *ch4 = &term->buf[i]; // DEBUG diff --git a/source/fumotris/fumotris.c b/source/fumotris/fumotris.c index ef7cfcc..3a91d4b 100644 --- a/source/fumotris/fumotris.c +++ b/source/fumotris/fumotris.c @@ -2,36 +2,69 @@ struct Fumotris { - struct TetrMap board; - struct TetrMap piece; + struct Tetra board; + struct Tetra piece; + nsec timer; + bool is_ground; }; -void FumotrisStart(void *inst_arg, void *game_arg) +void FumotrisStart(struct FumoInstance *inst, struct Fumotris *fumo) { - struct FumoInstance *inst = inst_arg; - struct Fumotris *game = game_arg; - ControllerBindMulti(&inst->ctrl, BINDS_N, controls_g, codes_g, types_g); - CreateTetrMap(&game->board, 10, 10); - CreateTetrMap(&game->piece, 3, 3); - game->piece.blks = T; + CreateTetra(&fumo->board, 10, 10); + SetTetra(&fumo->piece, T, 3, 3, 0, 0); + fumo->timer = 0; + fumo->is_ground = false; } -void FumotrisUpdate(void *inst_arg, void *game_arg) +void FumotrisUpdate(struct FumoInstance *inst, struct Fumotris *fumo) { - struct FumoInstance *inst = inst_arg; - struct Fumotris *game = game_arg; - + i16 horizontal = 0; if (inst->ctrl.axes[LEFT].is_down) - game->piece.x -= 1; - + horizontal -= 1; if (inst->ctrl.axes[RIGHT].is_down) - game->piece.x += 1; + horizontal += 1; + TetraMove(&fumo->piece, &fumo->board, horizontal, 0); - TetrMapDraw(&game->board, &inst->term); - TetrMapDraw(&game->piece, &inst->term); + + if (inst->ctrl.axes[SOFT_DROP].is_down) + TetraMove(&fumo->piece, &fumo->board, 0, 1); + + + if (inst->ctrl.axes[HARD_DROP].is_down) { + while (TetraMove(&fumo->piece, &fumo->board, 0, 1)); + + fumo->timer = 0; + TetraOverlay(&fumo->piece, &fumo->board); + SetTetra(&fumo->piece, I, 4, 4, 0, 0); + + return; + } + + fumo->timer += inst->frametime; + while (fumo->timer > 5e8) { + fumo->timer -= 5e8; + + if (!TetraMove(&fumo->piece, &fumo->board, 0, 1)) { + if (!fumo->is_ground) { + fumo->is_ground = true; + } else { + TetraOverlay(&fumo->piece, &fumo->board); + SetTetra(&fumo->piece, I, 4, 4, 0, 0); + + fumo->is_ground = false; + } + } + } +} + +void FumotrisDraw(struct FumoInstance *inst, struct Fumotris *fumo) +{ + TetraTerminalClear(&fumo->board, &inst->term); + TetraTerminalDraw(&fumo->board, &inst->term); + TetraTerminalDraw(&fumo->piece, &inst->term); } int main() diff --git a/source/fumotris/fumotris.h b/source/fumotris/fumotris.h index de2d6f8..9b5a9e2 100644 --- a/source/fumotris/fumotris.h +++ b/source/fumotris/fumotris.h @@ -1,6 +1,6 @@ #include "fumocommon.h" #include "fumoengine.h" -#include "tetr.h" +#include "tetra.h" #define BINDS_N 12 @@ -22,6 +22,12 @@ enum FumotrisControls { MOUSE }; +struct TetraTemplate { + u8 *blks; + u16 wid; + u16 hgt; +}; + u16 controls_g[BINDS_N] = { LEFT, @@ -74,44 +80,72 @@ u16 types_g[BINDS_N] = { JOYSTICK }; -u8 I[16] = { - 0, 0, 0, 0, - 0, 0, 0, 0, - 1, 1, 1, 1, - 0, 0, 0, 0 +struct TetraTemplate I = { + .blks = &(u8) { + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 1, 1, 1, + 0, 0, 0, 0 + }, + .wid = 4, + .hgt = 4 }; -u8 O[4] = { - 1, 1, - 1, 1 +struct TetraTemplate O = { + .blks = &(u8) { + 1, 1, + 1, 1 + }, + .wid = 2, + .hgt = 2 }; -u8 T[9] = { - 0, 1, 0, - 1, 1, 1, - 0, 0, 0 +struct TetraTemplate T = { + .blks = &(u8) { + 0, 1, 0, + 1, 1, 1, + 0, 0, 0 + }, + .wid = 3, + .hgt = 3 }; -u8 S[9] = { - 0, 1, 1, - 1, 1, 0, - 0, 0, 0 +struct TetraTemplate S = { + .blks = &(u8) { + 0, 1, 1, + 1, 1, 0, + 0, 0, 0 + }, + .wid = 3, + .hgt = 3 }; -u8 Z[9] = { - 1, 1, 0, - 0, 1, 1, - 0, 0, 0 +struct TetraTemplate Z = { + .blks = &(u8) { + 1, 1, 0, + 0, 1, 1, + 0, 0, 0 + }, + .wid = 3, + .hgt = 3 }; -u8 J[9] = { - 1, 0, 0, - 1, 1, 1, - 0, 0, 0 +struct TetraTemplate J = { + .blks = &(u8) { + 1, 0, 0, + 1, 1, 1, + 0, 0, 0 + }, + .wid = 3, + .hgt = 3 }; -u8 L[9] = { - 0, 0, 1, - 1, 1, 1, - 0, 0, 0 +struct TetraTemplate L = { + .blks = &(u8) { + 0, 0, 1, + 1, 1, 1, + 0, 0, 0 + }, + .wid = 3, + .hgt = 3 }; \ No newline at end of file diff --git a/source/fumotris/tetr.c b/source/fumotris/tetr.c deleted file mode 100644 index e9c514f..0000000 --- a/source/fumotris/tetr.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "tetr.h" - - -bool CreateTetrMap(struct TetrMap *map, usize wid, usize hgt) -{ - u8 *blks = calloc(wid * hgt, sizeof(u8)); - - if (blks == nullptr) - return false; - - *map = (struct TetrMap) { - .wid = wid, - .hgt = hgt, - - .x = 0, - .y = 0, - - .rot = 0, - - .blks = blks - }; - - return true; -} - -void FreeTetrMap(struct TetrMap *map) -{ - free(map->blks); -} - -void TetrMapDraw(struct TetrMap *map, struct Terminal *term) -{ - static const u8f blk_colors[8] = { 8, 14, 11, 13, 10, 9, 12, 3 }; - - for (usize y = 0; y < map->hgt; y++) { - for (usize x = 0; x < map->wid; x++) { - usize map_i = y * map->wid + x; - usize term_i = (y + map->y) * term->wid + (x + map->x) * 2; - - struct Char4 *block = term->buf + term_i; - - if (map->blks[map_i] == 0) { - block[0].ch = '('; - block[1].ch = ')'; - } else { - block[0].ch = '['; - block[1].ch = ']'; - } - - u8 fg = blk_colors[map->blks[map_i]]; - block[0].color.fg = fg; - block[1].color.fg = fg; - } - } -} - -bool TetrCollisionCheck(struct TetrMap *board, struct TetrMap *piece, int dx, int dy) -{ - size_t i = 0; - for (size_t y = piece->y + dy; y < piece->y + piece->hgt + dy; y++) { - for (size_t x = piece->x + dx; x < piece->x + piece->wid + dx; x++) { - if(piece->blks[i] == 0) - goto next; - - if(y >= board->hgt or x >= board->wid) - return false; - - size_t board_i = y * board->wid + x; - if(board->blks[board_i] != 0) - return false; - -next: - i++; - } - } - return true; -} \ No newline at end of file diff --git a/source/fumotris/tetr.h b/source/fumotris/tetr.h deleted file mode 100644 index 419f990..0000000 --- a/source/fumotris/tetr.h +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -#include "fumocommon.h" -#include "terminal.h" - - -struct TetrMap { - usize wid; - usize hgt; - - int x; - int y; - - u8f rot; - - u8 *blks; -}; - -bool CreateTetrMap(struct TetrMap *map, usize wid, usize hgt); - -void FreeTetrMap(struct TetrMap *map); - -void TetrMapDraw(struct TetrMap *map, struct Terminal *term); - -bool TetrCollisionCheck(struct TetrMap *board, struct TetrMap *piece, int dx, int dy); \ No newline at end of file diff --git a/source/fumotris/tetra.c b/source/fumotris/tetra.c new file mode 100644 index 0000000..cd823fc --- /dev/null +++ b/source/fumotris/tetra.c @@ -0,0 +1,115 @@ +#include "tetra.h" + + +bool CreateTetra(struct Tetra *map, u16 wid, u16 hgt) +{ + u8 *blks = calloc(wid * hgt, sizeof(u8)); + + if (blks == nullptr) + return false; + + map->blks = blks; + map->wid = wid; + map->hgt = hgt; + + map->x = 0; + map->y = 0; + map->rot = 0; + + return true; +} + +void FreeTetra(struct Tetra *tetra) +{ + free(tetra->blks); +} + +void SetTetra(struct Tetra *map, u8 *blks, u16 wid, u16 hgt, i16 x, i16 y) +{ + map->blks = blks; + map->wid = wid; + map->hgt = hgt; + + map->x = x; + map->y = y; + map->rot = 0; +} + +bool TetraMove(struct Tetra *piece, struct Tetra *board, i16 dx, i16 dy) +{ + if (TetraIsCollision(piece, board, dx, dy)) + return false; + + piece->x += dx; + piece->y += dy; + + return true; +} + +bool TetraIsCollision(struct Tetra *piece, struct Tetra *board, i16 dx, i16 dy) +{ + i16 x_start = piece->x + dx; + i16 y_start = piece->y + dy; + + usize i = 0; + for (i16 y = y_start; y < y_start + piece->hgt; y++) { + for (i16 x = x_start; x < x_start + piece->wid; x++, i++) { + if(piece->blks[i] == 0) + continue; + + if(x < 0 or x >= board->wid or y < 0 or y >= board->hgt) + return true; + + if(board->blks[board->wid * y + x] != 0) + return true; + } + } + + return false; +} + +void TetraTerminalClear(struct Tetra *board, struct Terminal *term) +{ + for (usize i = 0; i < board->wid * board->hgt; i++) { + struct Char4 *block = term->buf + i * 2; + + block[0] = (struct Char4) { .ch = '(', .color.fg = 8 }; + block[1] = (struct Char4) { .ch = ')', .color.fg = 8 }; + } +} + +void TetraTerminalDraw(struct Tetra *tetra, struct Terminal *term) +{ + static const u8f blk_colors[8] = { 8, 14, 11, 13, 10, 9, 12, 3 }; + + usize i = 0; + for (usize y = 0; y < tetra->hgt; y++) { + for (usize x = 0; x < tetra->wid; x++, i++) { + if (tetra->blks[i] == 0) + continue; + + usize term_i = (y + tetra->y) * term->wid + (x + tetra->x) * 2; + struct Char4 *block = term->buf + term_i; + + u8 fg = blk_colors[tetra->blks[i]]; + block[0] = (struct Char4) { .ch = '[', .color.fg = fg }; + block[1] = (struct Char4) { .ch = ']', .color.fg = fg }; + } + } +} + +void TetraOverlay(struct Tetra *piece, struct Tetra *board) +{ + usize i = 0; + for (usize y = piece->y; y < piece->y + piece->hgt; y++) { + for (usize x = piece->x; x < piece->x + piece->wid; x++, i++) { + if(piece->blks[i] == 0) + continue; + + if(x < 0 or x >= board->wid or y < 0 or y >= board->hgt) + continue; + + board->blks[board->wid * y + x] = piece->blks[i]; + } + } +} \ No newline at end of file diff --git a/source/fumotris/tetra.h b/source/fumotris/tetra.h new file mode 100644 index 0000000..800bbd3 --- /dev/null +++ b/source/fumotris/tetra.h @@ -0,0 +1,33 @@ +#include +#include +#include "fumocommon.h" +#include "terminal.h" + + +struct Tetra { + u8 *blks; + + u16 wid; + u16 hgt; + + i16 x; + i16 y; + + u8f rot; +}; + +bool CreateTetra(struct Tetra *map, u16 wid, u16 hgt); + +void FreeTetra(struct Tetra *map); + +void SetTetra(struct Tetra *map, u8 *blks, u16 wid, u16 hgt, i16 x, i16 y); + +void TetraTerminalClear(struct Tetra *board, struct Terminal *term); + +void TetraTerminalDraw(struct Tetra *map, struct Terminal *term); + +bool TetraMove(struct Tetra *piece, struct Tetra *board, i16 dx, i16 dy); + +bool TetraIsCollision(struct Tetra *piece, struct Tetra *board, i16 dx, i16 dy); + +void TetraOverlay(struct Tetra *piece, struct Tetra *board); \ No newline at end of file