From 0abf305dffdc1ff7231ad56b32aab699427b38d2 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sat, 24 Oct 2026 08:35:53 +0300 Subject: [PATCH] games: snappier Snake turns + Gameboy-style Tetris blocks Snake: add a turn queue (up to 4 pending direction changes) so rapid key presses are never lost, and raise base speed from 70->130 px/sec (~128ms -> ~69ms per step) for snappier, more responsive play. Progressive difficulty (+1 px/sec per 5 food) is unchanged. Tetris: replace solid-green blocks with Gameboy-style 4-shade beveled cells (pale top/left highlight, medium body, dark bottom/right shadow). Settled blocks use C_GB_MED, the active piece uses C_GB_LIGHT, and the next-piece preview is beveled too. --- overlay/rootfs/usr/bin/snake | Bin 13672 -> 13668 bytes overlay/rootfs/usr/bin/tetris | Bin 13668 -> 17764 bytes prebuilt/games/usr/bin/snake | Bin 13672 -> 13668 bytes prebuilt/games/usr/bin/tetris | Bin 13668 -> 17764 bytes src/games/snake.cpp | 39 +++++++++++++++++++++++----------- src/games/tetris.cpp | 31 ++++++++++++++++++++------- 6 files changed, 50 insertions(+), 20 deletions(-) diff --git a/overlay/rootfs/usr/bin/snake b/overlay/rootfs/usr/bin/snake index aafc9723703694af96ab45cc9252acff98d5f4f1..eb21fd565c5a682400ac0fa946b17697a06a8acc 100755 GIT binary patch delta 3908 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 diff --git a/overlay/rootfs/usr/bin/tetris b/overlay/rootfs/usr/bin/tetris index a6cae253f8c90890b2a64d44dd31ed76f1e5a7bc..ece86ab3a266e4d17d518de87fd268b4c65c37e7 100755 GIT binary patch delta 4408 zcmds5jaO9Hwcls%02c%t9F>m&nGe1yehl7`he+dq*9pv^V1m=X=oXsovUGm5pDmbA zYz<?=J9pf&s?Lx`q zVx$)%y-|2{G8O4mq|JhTas|>WkggV1Pr8tHA-x%OJxF_yULeR)Tgc@p_v=Q%KNckZ z#M|@_u~tL*CNN~#$|maSWa+ulY$sB+fA*rHeY3BFiGDekM{$`)TD`=9X{ZyLSL_VW$X|##NpTrIg zfa#egpuF*a8JG)BZonw+rB^if){25E+ciO&!T+Os_ikYBJkP{lCJK;k^;hpFrVgaX zk$>pPy<$&@@0u7o)58jc9%j*A8;5Al&vE^%CM?>|MfWf()y-PB!g`zWi zwLG-8>Zqfq&c${?m8*?d4|WRF-qy17A46ST80$bM$WoCuQlAbCt6{Ch?)La_ftx zg8KSLDnF-Ef|@h8#AQ9O?twwqL=Oh$!0mE}@(P^z2|oC@H&&Nc8ym#0t7XaXMW z)WcAm8v4IO@!?RRno@$zlM8*o6?|0gO1>ux6SO35cON054&2eFf2gD8{)O$IA-<-b1{B$U-C_zRU*r zIvbY2RU}?OeE2r^+=X?TK#Z}f$=z=h5X zT9hz9@}*3GM#Mq-OhR^~6RDpdDri%J$yMQ#C665C_@+vCHnMm(7O$Z}V&pMQNi~`a z;K@VD`5E{md_p+VmvNkr?(<0V??yNx?DgXDs_e7jB@xAYL`C21yD-RG-x&Z;PddO? zDBp|vL$d*}ycd@FAzHgS!gkO$H|1GzHgzPfBJK1@VhSG!CB_zk#r>UeRe0DqiA=&$uGg0N2|razwhiLkRG+LAn=3x@lPe4w zWvKzV3rt>LhenpF2C;-c_D@obcUPj<+XfZcsbtab;%K{Br z&w72`OH>A0)Q*Ls!_&@61u!^mLFv{Q9K&)^qm&FVL4Ztrfki`>)Pov_2KTED&zm7( zhH{977(4H%6R%YzIb)8mx8m+_q${>Xb3w84m|Iz#yO@O*Ca*5FYW23&xBKT`xv8FUBOkatqs5FaZyN*8EVRd>0RChE_!au7q|hz{{VX|cPRR78jiJhPz^?Xl>MmwI zr%m}GiK`GA#O0#;+c!4v4{)lhtb*>FmtI(G%B~JL(@U}LW_*d^y~>I=y;0QRxynj6 zHHi4Un^{@sJz4td>h}gx94b9lcVD;RA``h6QR*Tqr33Q}Hrpt8tmsYEv^Qq-?kk*6 zB3cn`h(93CBR)^X3ZTaW&jZxqXh+l{EU9!&YBIh-C$p^k&(IrW+KHbdomg32sfFp* zmBeDOnekGrxC>d6omx9yPrmLPmGJYTHdZWjc-qjNzon+SI&OmJ@;p3|_$Vbf?GXSw zkv@#rg~-LVe%79bXKv-OmVVay9G_7q_OlPL@%cbxm@5rO57W z$^^6*d!C?Vxw*>5r*U7!T7Lg+qbs(vlBrifw$%9-Y*`GpSfkk%Yr#@;S6TIU#pd$k z<@_%fUGM5=`ppk-tonW7r(?$RBC+ce%O)CkmHB7zt_ExjouLCAln&#ys5iY9I<9zt zbNLK-B`CcZ*$$)#R%e zpY*6R&yC9~PI*2Z=E$exa*iXJ4`@x?@Ub$kG- z*W}33n}McPqg@^LnWw$D*?L2rn1!cta2Q@DM#cG3!wJ0EMgy&Oy}`>Wge<%egHms3 z-K7Xrh6KJ0yzkH(-nVDjlqzxD8I(F6n0O*2aV6kY>P&Xb7iZDbl$rO26$``&FK-FS z{4wymQeym_V~3#u<5&M6e$9d3I*73WWghZ=9eCS?%;&$uJRW!xd56ElI}$jKyrbXY z{VZ_Qal*jcl#RN-NzVo-$~ApQZU;Io3S>FS&geU2hx9|Gbz+0q<-`pXxFe2PTU9S% zTRNQu>Pjr{l|kt>e5*7}#k<4%?c1gcPW*JivHCxDCn}}=K*Jg@o`t=la=QejjkMXM z`;YCYDema;aVD~OOP8{Js^RY1D$RDsyu7s<6*?QSOmWvKY+Wr&Ndc537(q(XbS^&d z>VVRkhM!iN(*?Gw&{Nl{6uX8gcI9Ri&ZBjkoY;k#jwj6Y_A<~Ioe=@Sc#CVtR7{Q^(t+p0AAj@-NwO}!X9{Q|Poawj*GQ^nIc_1X};j4z~D zQbKuc81AfDt06|KMx8S+55EoWWEbQ5tlfAFF=>Xoo`y!0t0Bg?LQNqxr-!>q7*Yd#hU=e)0qBvALR?P9vdSS3(S~#zj_)DPAbx{* z4RIK;A2F)KrVC}dv7tMG^ym2H+KMPj!9|A5B%JIg*o`5`yWqJnNUSxFo|{asjaYsD zOWD=DBG0{GNOs{eTppHPEhod=X(Ko`tKDCPM&5n$roxYLpBj~2P5fE6dTdI5;ui8x zC%6k3>2OkJHwL#s9YOr>n!3B?A1F#w^NIzWZ|*y+dN3!nW}K-;+`Fuj$%z#QZ2n zF4GbrHGDg+ZqJ}U6^vnSB;E97!4&!6zZ3K$AvH1&TWbYsdL&0n?+S7FFNau5X6Sb= zEww1~CoGwGbHE^tvuNq-$gwO8YEnI1Nrsm(sOMwbYuerq-n~$X>H_?mqxV COE1j; delta 3999 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 c%Vl9Vbi2EhJW#G6?RipSDvv|j&#%Kp(n( z)V8yN&vg}c(bkUJq5>7|vQrgA*J`aDP-jOgZq&MbN_Zm8dp643^MJNvXWTzJ`(}Rc zoO|E7=bn4cx#!;3k$*qGG)yro3?LZ*7L-MW`j_YchEQhCmYu@ZDP37rgm0h(puX%< z#h6`Frtg`$ar#Bdx!p1_df=V!4>9JtLaJ0Mp)_^=z6a&>)_Bmk_^s2OWMU_4>#n_) z<>CviDn}k;V?io#wY|l}*CKGrUWZBGST|?{PTlL`v*Mkkc`@jL4cgYsZ#6XY?<=n@ zovW32rGYNqWNqn`CKVHDs%rY8g!7${)Y@Rz>FkT*O^=ec?sP!(73`Dmp_sUlqje*! z0$1;L@qY1?rIEJj=W}GLpXW574^!>)|6GzUA*FRLll~ zHu~M-)i5_!;0jU0sc;{Q*aqzeB5QuB8r>D%?_e>x#S^6{f%B(G_xk7r zuF0)+h`m9(mmpQcSmsJ+aMJCbpn%&wV^mQ`)KxD(-sPX7Q`3yV9mYxQ;h+@-#VKaG z!%B@fB~gY|iG2dsp&R| z*gVE{qFiI2Q7Xz_=4Xg*HHb3e7&@(wl2j~j?2||?^U(&IXaBm!zWvh6d2`(aLmN!js|Vj}xq(x=${hQdgbvwhj4HV}V?fl*~wI!DaB#b?LBl)@|L1g^?0C!q7FAZodNWJOF@+xkOZnJ(Z!iMB$a@CN55*i$Sa zUWKRH?g@3<1@3Ckh;q;=DqpnZ6aRfpyn1nj1^y&(Cwgem$F*WEEZankXuF9$u-V0T z%q}L^J7ws^?LF5!<&?m^;aV&`KGp zGn@LXn}L1&)WvIt$I|^7H9Ol~{FrHC&MQNU$OdvFPoOzT&(w;2W?*OI;$c|0v8AAW zT1BEGrTjg!PsmA)5VBOIADR zmVE+@pBA@@A;t14n)`0gH#{gI4p`OZHTWK}+2$F!ZofIR8T#bmn+xNh?=<5Z7$rZM zv}aa9(gG$iFq$z1`p|olk_wW3dS)dhEx^{v1(?|?91rYHv^i`lx@?6c0oc`BaA9H# zEus6(HQ%+lc%QwG$xYs55X0Mt()<)kdxLRN#>Om%OeK?FP^jQ}<8f>* z>KGi~Tm2!9FTn8y&y2rYZKa>9z{UzmKdJb-dNZn+fhuM^qoT3;`6h@<7}PRo#Ib67 zo4D@;?$iTu&w)-%ELz-fVrF5{d4OBfASVaRDVPXC|EX%Mo6$}ZyaLeiUzK3he&XWK zN6$4lN$JwVXwIo*&=!%1-z6h|Vwj)QmV#3hJP@lWWx3rZRvZjt-!4puxyaF;F*P52 zN6(t~Vp`lwo?yC0a_Ch)N*O@HX5SqU1f3uVA0S>INwm!CqNNhw<|eC?wAjz$o5?wwVeVsQHCkgaocecW$Aq02)3?s3W`X&6(dIf+3GnGyM{D*s$zF| zDS0dJ0|pXU2@ln<-3u3F-7vz|b$9)R?!U=Kc|$^MU3b=0TF!P)P}^u$O;KL;2-Bm| z5{L?ol-!{b-!so_p3f)3b~E4dI?}DL^tV)INW@gjIn(ynOuM$2WMkF8_&J4}lRqYA zHSTvT=kvRVPm|%IIh5LB(ah;CwaRf3!Fj3V5~g|ZVEu?WM&G;-aobt~EIV=ayH{L8 z$F8s0*uDc>L3w-4>CM}alXRb>uJ%X*%#Ux&%gm2kHe;WeH`=YFiT7!A@lVPiYLm@m zd5ot)kZ8hS-KNRUE4Q}$Ca*Neh>?80G!^|w_h-@7c)Wfuc1y8SxNq|agVBBWSRmHi zc~9~&vO~45<>=P?%JQJR<7QdQQZ!(G-kw(!&5%&ty5t#i{@y;i{P=fzI^ovBjD^-B zT=UEPOnU}7ho)Zb9Fgd6e9s)b1a7~&B+HsLN9rV-nDHUuWJ{vd3oKTFPQAXqL9a0^ z26pe`9qpMJdo5H_5wUfBtthu&ZcoopY17lFsBg0hiOL~xhAs+kcbQ#y>+51Rg+$Qz zf&rQl^+^D=NIynckk3XsKM_EN*lGYcj>w)2FbU}cr2j&cBN`E1N`O^JGZCjI0jxz- zA~F#Lh^dHVgl8f^KjJgQaYVsHpuvJn5~6DYz`qfz5&&`$dc;CR5TXe|5RLHwPJ|he zjaY#A67d=0ejLgoEk*hnLXZ3?#QVsvLKqOd9^gFQtXTyB-Vg$8EVDZ_NYeBIb2v2F zucXtr7ET|HVeW;-`>%=xSb@liVM4;<6$Du`!oZ}5>1fg^a1DZg#e#C0!X=oUOlCl_pR-Ee|(yx$i_eUF%_d6-ikYk`LvJyU(rOVSc5OKVw^K^%w zsj3|sj=unK2jx$otOdu2kJgGib^`9#3F2;dGVNg-M`q*qTm(VrnKj{Y)N4#d_!@b1 z2en_|l9=F#Uqv=`KtpRZzzx(|c=PV;^BwMnsa54%mlzzedb`&{1CKzdd-m z?Cwxl{W6?HGkBx&9llXfEwWnWX}mt5-ZuOd5%r$XF<(cheFnJ3UdA2aqz*E9s#wKG zI712I46|Pqihd6A?5%sl{RSpL9YxJ#CaM!C zf95ypICW6(=Z+)h*4Eri#j#wgCaRd|El#3aKER!EGnMLbl4>_|Mor{5@FqCG&0rLf zFHn`t7*twXCq&s+uZe9fNzFPE=L-MxPTytKK!;x3gAH0BA`r`y(oKim4dLn_^|C>z#42y8;6l=n2q+w%ao-R|tnPBZhp zbMC$8-g9#9Ip>{sv#6`6S}FhCM1V{HD5%j)3~$x~jG)H6Dr^u(gW8&URp>)BKy}Tz zy7AuMz@hoing0ID=3ktj@$ioLNnh1ykCsx^5_(p`(eThcQnob()E>TdRyi}x8?bpB zFBf?Dvw5+OXNfHU5`k;%tz<$i0;lM8m;^512erV(^?LaIDdkMdO3*{#)0bQLmyIp_ zHpSvK3$%1l67Auu^W0uZdL<*tiGBDP!x=B6Uu&}KboOUbP2aV?^qK<_FX5c@EsCT> zj@7Nm6Sz4%exQeR?YYxp=og>j%l*ZtLho>zi6YU7uv(NRWOkj_|M1fuG$ZQ$omkuAV6TT?UFzO?cpyzCcQ`ZVLVKfZ(k;_WSJbMj0qZ8^53gG^+i!{_-+` z+vQi)A-AF38%N255*~B{ci8V@K=-E}nG`hZ>=AXz-JLJK7nJJSd85mvt&_`xF)teI zCddVb1X$ncz0|sxHbh= zyaZ}zddN}<(Rqab#sWj%u!>OHRWtR)`ITY$}?v%(IB80tmTzPFdTH-JMrr8N7adD?{h!Z z3A!~0fXK9%D#mI1mt(wc^IhdZ0Vxppn`=EjzjE0IA~)_d&u@V~X{)O=1^UW}JX#aF zC4Ix3)ns~fD!U;)eRcW|zd7mYOK`Mh2}X1*?u5WRw6{15omEU5AfVdf;S0qP+Q9ak z8wPG;^1pqT`Ia}Kji$icC_O)m(w^f@>IYKO8*ZRfb`q$|8O2IU9kbcP8CWMNB*r*{)OAqP{F7F6pI#R(RPaIjlS#KTxA(7SZGQT1YsURitr8z!uz9`P60gNe-8b>_Om}y_;Zx}oIR(1q?7$$ z2mI74wgH*w$o|g`pREPtqw8iw@F4rag zk!sLM?}Uu0vd|q=My+{v%Thi=U1R3mE0FG(*YAGEN{g{m_|5Iz^X=M7W|f_ta+AVD zdg8DcqnI>U4?pVpAx`m~%!{>0tT|_Tw&%O>9lO{$mpO+)8#A1OFCWUjwY}JFu5!QB z`Fj3t3sy_}Z><%~&cce$*R1)Lb~FnU(J2;ztvD~~X{Imx=!m&@+oikAcUkuqoSe%W z6?2)>d`JhD)Edy>vr4u9E*93}o{<8`Ge0eXl|A3`siCqr>(!vtzb&g-1Jd%TfAe^!!w9kvKrdwu3nm7U@K=>;+`1{n)K?@l@K6zU+J`3<##Bsb)S>vTPm1Z`}xjXYpgamm(tuQC}m!;Z$rLkyavR zBCtrq^;7^Q(r`opf)Ha_ik7c}io967fbso0Lc)|fWG3X?Cl@gZ!CRTgPYhx1)*1LC^K z2eIYUAkoAn%U7UMd@aJqWMN#g^`qW(4w@Jodz};ko!Aor8RE|L?ky7gq#AmB z?saO4LUJe)l1*3BIv`^A64s@2g5ja7*GDC{k<)P+Y8SZ`XQ0-S==c=sd6E-9iB|QJ zC*vp6;k{&2JR{BQ?Qjlpwd7=clJcH^BkH9|hC@>%YVUB0x}$o@P<%P{Dk+;hk2Uv} z=m55l{?A27TX6g&(m|y4h)ogzJHml{9O6kt7=GEbA-=%xnhy}$5DO5?5GBV$G#;Pc z;PIv8czmf59-kq0s&#AQ)L%hT1w&~!Gjs2HQcwFrB2N3l*w`cX(n@iS|}uxcCM0UD9g30rOqAaizdLeLtx%#p19Gam{}CBVOKU9~b()czvK7 z;=cB8bcQnH^9@*6b!(!nVy788+G$emu*Q-TL)@2sOa~wr6XGVQwE(YbFnJJL)gw1< zRFk0uGf}H$M@?#zWJZ@)U>hFQyUz3rEWW{E4=1pV`$Jv4NE>9X&v~Q=$GJ*^Nb5sg zxkr!amWGoSU31t0CBQ-@iAtLye&o$etEZx7CEyXGKW8|JR>u&^7;{u%%$CsA<4AtS zAIdm3|v&h1%81hJ#0z>BUtcm{u+bfwX diff --git a/prebuilt/games/usr/bin/tetris b/prebuilt/games/usr/bin/tetris index a6cae253f8c90890b2a64d44dd31ed76f1e5a7bc..ece86ab3a266e4d17d518de87fd268b4c65c37e7 100755 GIT binary patch delta 4408 zcmds5jaO9Hwcls%02c%t9F>m&nGe1yehl7`he+dq*9pv^V1m=X=oXsovUGm5pDmbA zYz<?=J9pf&s?Lx`q zVx$)%y-|2{G8O4mq|JhTas|>WkggV1Pr8tHA-x%OJxF_yULeR)Tgc@p_v=Q%KNckZ z#M|@_u~tL*CNN~#$|maSWa+ulY$sB+fA*rHeY3BFiGDekM{$`)TD`=9X{ZyLSL_VW$X|##NpTrIg zfa#egpuF*a8JG)BZonw+rB^if){25E+ciO&!T+Os_ikYBJkP{lCJK;k^;hpFrVgaX zk$>pPy<$&@@0u7o)58jc9%j*A8;5Al&vE^%CM?>|MfWf()y-PB!g`zWi zwLG-8>Zqfq&c${?m8*?d4|WRF-qy17A46ST80$bM$WoCuQlAbCt6{Ch?)La_ftx zg8KSLDnF-Ef|@h8#AQ9O?twwqL=Oh$!0mE}@(P^z2|oC@H&&Nc8ym#0t7XaXMW z)WcAm8v4IO@!?RRno@$zlM8*o6?|0gO1>ux6SO35cON054&2eFf2gD8{)O$IA-<-b1{B$U-C_zRU*r zIvbY2RU}?OeE2r^+=X?TK#Z}f$=z=h5X zT9hz9@}*3GM#Mq-OhR^~6RDpdDri%J$yMQ#C665C_@+vCHnMm(7O$Z}V&pMQNi~`a z;K@VD`5E{md_p+VmvNkr?(<0V??yNx?DgXDs_e7jB@xAYL`C21yD-RG-x&Z;PddO? zDBp|vL$d*}ycd@FAzHgS!gkO$H|1GzHgzPfBJK1@VhSG!CB_zk#r>UeRe0DqiA=&$uGg0N2|razwhiLkRG+LAn=3x@lPe4w zWvKzV3rt>LhenpF2C;-c_D@obcUPj<+XfZcsbtab;%K{Br z&w72`OH>A0)Q*Ls!_&@61u!^mLFv{Q9K&)^qm&FVL4Ztrfki`>)Pov_2KTED&zm7( zhH{977(4H%6R%YzIb)8mx8m+_q${>Xb3w84m|Iz#yO@O*Ca*5FYW23&xBKT`xv8FUBOkatqs5FaZyN*8EVRd>0RChE_!au7q|hz{{VX|cPRR78jiJhPz^?Xl>MmwI zr%m}GiK`GA#O0#;+c!4v4{)lhtb*>FmtI(G%B~JL(@U}LW_*d^y~>I=y;0QRxynj6 zHHi4Un^{@sJz4td>h}gx94b9lcVD;RA``h6QR*Tqr33Q}Hrpt8tmsYEv^Qq-?kk*6 zB3cn`h(93CBR)^X3ZTaW&jZxqXh+l{EU9!&YBIh-C$p^k&(IrW+KHbdomg32sfFp* zmBeDOnekGrxC>d6omx9yPrmLPmGJYTHdZWjc-qjNzon+SI&OmJ@;p3|_$Vbf?GXSw zkv@#rg~-LVe%79bXKv-OmVVay9G_7q_OlPL@%cbxm@5rO57W z$^^6*d!C?Vxw*>5r*U7!T7Lg+qbs(vlBrifw$%9-Y*`GpSfkk%Yr#@;S6TIU#pd$k z<@_%fUGM5=`ppk-tonW7r(?$RBC+ce%O)CkmHB7zt_ExjouLCAln&#ys5iY9I<9zt zbNLK-B`CcZ*$$)#R%e zpY*6R&yC9~PI*2Z=E$exa*iXJ4`@x?@Ub$kG- z*W}33n}McPqg@^LnWw$D*?L2rn1!cta2Q@DM#cG3!wJ0EMgy&Oy}`>Wge<%egHms3 z-K7Xrh6KJ0yzkH(-nVDjlqzxD8I(F6n0O*2aV6kY>P&Xb7iZDbl$rO26$``&FK-FS z{4wymQeym_V~3#u<5&M6e$9d3I*73WWghZ=9eCS?%;&$uJRW!xd56ElI}$jKyrbXY z{VZ_Qal*jcl#RN-NzVo-$~ApQZU;Io3S>FS&geU2hx9|Gbz+0q<-`pXxFe2PTU9S% zTRNQu>Pjr{l|kt>e5*7}#k<4%?c1gcPW*JivHCxDCn}}=K*Jg@o`t=la=QejjkMXM z`;YCYDema;aVD~OOP8{Js^RY1D$RDsyu7s<6*?QSOmWvKY+Wr&Ndc537(q(XbS^&d z>VVRkhM!iN(*?Gw&{Nl{6uX8gcI9Ri&ZBjkoY;k#jwj6Y_A<~Ioe=@Sc#CVtR7{Q^(t+p0AAj@-NwO}!X9{Q|Poawj*GQ^nIc_1X};j4z~D zQbKuc81AfDt06|KMx8S+55EoWWEbQ5tlfAFF=>Xoo`y!0t0Bg?LQNqxr-!>q7*Yd#hU=e)0qBvALR?P9vdSS3(S~#zj_)DPAbx{* z4RIK;A2F)KrVC}dv7tMG^ym2H+KMPj!9|A5B%JIg*o`5`yWqJnNUSxFo|{asjaYsD zOWD=DBG0{GNOs{eTppHPEhod=X(Ko`tKDCPM&5n$roxYLpBj~2P5fE6dTdI5;ui8x zC%6k3>2OkJHwL#s9YOr>n!3B?A1F#w^NIzWZ|*y+dN3!nW}K-;+`Fuj$%z#QZ2n zF4GbrHGDg+ZqJ}U6^vnSB;E97!4&!6zZ3K$AvH1&TWbYsdL&0n?+S7FFNau5X6Sb= zEww1~CoGwGbHE^tvuNq-$gwO8YEnI1Nrsm(sOMwbYuerq-n~$X>H_?mqxV COE1j; delta 3999 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 c%Vl9Vbi2EhJW#G6?RipSDvv|= 4) return; // queue full: drop the new turn + tqx[(tqh + tqn) % 4] = dx; + tqy[(tqh + tqn) % 4] = dy; + tqn++; +} + static void step() { - // apply buffered direction (no reversing) - if (!(ndirx == -dirx && ndiry == -diry) && !(ndirx == 0 && ndiry == 0)) { - dirx = ndirx; diry = ndiry; + // apply the oldest queued turn (no reversing); rapid presses are not lost + int tdx = 0, tdy = 0; + if (tqn > 0) { + tdx = tqx[tqt]; tdy = tqy[tqt]; + tqt = (tqt + 1) % 4; + tqn--; + } + if (!(tdx == -dirx && tdy == -diry) && !(tdx == 0 && tdy == 0)) { + dirx = tdx; diry = tdy; } int hx = snake[snakelen - 1][0] + dirx; int hy = snake[snakelen - 1][1] + diry; @@ -202,7 +217,7 @@ static void step() { score += 10; if (score > best) best = score; int food = score / 10; // food items eaten so far - pps = 70 + food / 5; // +1 px/sec per 5 food eaten (progressive difficulty) + pps = 130 + food / 5; // +1 px/sec per 5 food eaten (progressive difficulty) update_speed(); place_food(); } @@ -273,13 +288,13 @@ static void render() { static void handle_key(KeySym ks) { switch (ks) { case XK_Up: case XK_w: case XK_KP_Up: case XK_2: - ndirx = 0; ndiry = -1; break; + tq_push(0, -1); break; case XK_Down: case XK_s: case XK_KP_Down: case XK_8: case XK_x: - ndirx = 0; ndiry = 1; break; + tq_push(0, 1); break; case XK_Left: case XK_a: case XK_KP_Left: case XK_4: - ndirx = -1; ndiry = 0; break; + tq_push(-1, 0); break; case XK_Right: case XK_d: case XK_KP_Right: case XK_6: - ndirx = 1; ndiry = 0; break; + tq_push(1, 0); break; case XK_5: case XK_Return: case XK_KP_Enter: case XK_space: case XK_p: if (state == PLAYING) state = PAUSED; else if (state == PAUSED) { state = PLAYING; nextTick = now_ms() + speed; } diff --git a/src/games/tetris.cpp b/src/games/tetris.cpp index 98bb297..8d5576d 100644 --- a/src/games/tetris.cpp +++ b/src/games/tetris.cpp @@ -93,6 +93,7 @@ static Pixmap back; static int screen; static int winW = 240, winH = 296; // overridden at runtime from the actual screen static unsigned long C_BG, C_FG, C_HEAD, C_FOOD, C_DIM; +static unsigned long C_GB_DARK, C_GB_MED, C_GB_LIGHT, C_GB_PALE; // ---- tetromino definitions (state 0 within a 4x4 box) ---- // type 0..6 -> I,O,T,S,Z,J,L @@ -263,6 +264,19 @@ static void draw_text(int x, int y, int scale, unsigned long col, const char* s) } } +// Draw a Gameboy-style beveled cell: medium body, pale top/left highlight, +// dark bottom/right shadow. bodycol is the fill shade (settled vs active). +static void draw_gb_cell(int x, int y, int size, unsigned long bodycol) { + XSetForeground(dpy, gc, bodycol); + XFillRectangle(dpy, back, gc, x + 1, y + 1, size - 2, size - 2); + XSetForeground(dpy, gc, C_GB_PALE); + XFillRectangle(dpy, back, gc, x + 1, y, size - 2, 1); + XFillRectangle(dpy, back, gc, x, y + 1, 1, size - 2); + XSetForeground(dpy, gc, C_GB_DARK); + XFillRectangle(dpy, back, gc, x + 1, y + size - 1, size - 2, 1); + XFillRectangle(dpy, back, gc, x + size - 1, y + 1, 1, size - 2); +} + static void render() { int px0 = 8, py0 = 8; XSetForeground(dpy, gc, C_BG); @@ -275,21 +289,18 @@ static void render() { // settled blocks for (int x = 0; x < PCOLS; x++) for (int y = 0; y < PROWS; y++) - if (board[x][y]) { - XSetForeground(dpy, gc, C_FG); - XFillRectangle(dpy, back, gc, px0 + x * CELL, py0 + y * CELL, CELL, CELL); - } + if (board[x][y]) + draw_gb_cell(px0 + x * CELL, py0 + y * CELL, CELL, C_GB_MED); // active piece if (state == PLAYING) { int cells[4][2]; piece_cells(curType, curRot, cells); - XSetForeground(dpy, gc, C_HEAD); for (int i = 0; i < 4; i++) { int cx = curX + cells[i][0]; int cy = curY + cells[i][1]; if (cy >= 0) - XFillRectangle(dpy, back, gc, px0 + cx * CELL, py0 + cy * CELL, CELL, CELL); + draw_gb_cell(px0 + cx * CELL, py0 + cy * CELL, CELL, C_GB_LIGHT); } } @@ -320,11 +331,10 @@ static void render() { int prows = maxy - miny + 1; int nx0 = sx + ((winW - sx - 4) - pcols * pcell) / 2; int ny0 = boxY + (boxH - prows * pcell) / 2 + 12; // sit lower in the frame - XSetForeground(dpy, gc, C_HEAD); for (int i = 0; i < 4; i++) { int cx = nx0 + (nc[i][0] - minx) * pcell; int cy = ny0 + (nc[i][1] - miny) * pcell; - XFillRectangle(dpy, back, gc, cx, cy, pcell, pcell); + draw_gb_cell(cx, cy, pcell, C_HEAD); } int ty = boxY + boxH + 6; char buf[32]; @@ -402,6 +412,11 @@ static void setup_window() { C_HEAD = 0x99ff99; C_FOOD = 0x66ff66; C_DIM = 0x2f9f2f; + // Gameboy-style four-shade green palette + C_GB_DARK = 0x1f7f1f; // bottom/right shadow + C_GB_MED = 0x3faf3f; // settled block body + C_GB_LIGHT = 0x7fdf7f; // active piece body + C_GB_PALE = 0xbfffbf; // top/left highlight XSelectInput(dpy, win, KeyPressMask | StructureNotifyMask | ExposureMask); XMapWindow(dpy, win);