From 7d1a5a365315acac951d2cb268f3fa3818f6f31b Mon Sep 17 00:00:00 2001 From: Masashi Date: Fri, 19 Dec 2025 10:49:53 +0530 Subject: [PATCH 1/3] wider --- game/client | Bin 34416 -> 34416 bytes game/client.c | 6 +++--- game/libfishsoup | 1 - game/server | Bin 39600 -> 39600 bytes 4 files changed, 3 insertions(+), 4 deletions(-) delete mode 120000 game/libfishsoup diff --git a/game/client b/game/client index 0c15c789d7d2a3dd201ea555dbb94f2d64ed0f1f..dff34768c2adfb85197cf391ffcc46373e55215c 100755 GIT binary patch delta 54 zcmV-60LlOGi~{hC0sPKh60@`eH$(x#lk7*{0bY~K MNPhudvr9=OJ&JD@n*aa+ delta 54 zcmV-60LlOGi~{hC0H`Zy*6tlO!ZO0S&WZ zB(eknX0sG2!UO>;v)3)n1Oe`|r7|r60qnEWGb956wX^s(0}25pv;06v0Sz23008q3 zT*UJaSp^WYQ9>dC0r9hRLuUm6471!w4+{a|lk8Jz0TZ)UR1O@IXmGdz0J9x&W&;GE LnVG4xhjb|>OEEh| delta 160 zcmV;R0AK&GwF0oU0?v)3)n1Of81r7|r60r0caGb956xwH5-0}26Uv;06v0SzE7008q3 zT*UJaSp^icQ9>dC0rj(VLuUm65VPD!4+{b1lk8Jz0T;7YR1O>jiHHb2lVotXvmkL} O0|X!u5uvk(bSWnOcR7jx From fcb02805491ee78d742289145ce6f2720f4b0964 Mon Sep 17 00:00:00 2001 From: Masashi Date: Fri, 19 Dec 2025 11:06:12 +0530 Subject: [PATCH 2/3] camera position fixing --- game/client | Bin 34416 -> 34416 bytes game/client.c | 59 ++++++++++++++++++++++++++++++++++++++++---------- game/client.o | Bin 0 -> 38624 bytes game/server.c | 1 - 4 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 game/client.o diff --git a/game/client b/game/client index dff34768c2adfb85197cf391ffcc46373e55215c..7c659dd49e959d31351148287697be205b322694 100755 GIT binary patch delta 12777 zcma)j4O~>$weK02QBYvdL{LOgjK^gB;v>~W6R`{#%pn;QO-Y<-C&Vgp?F~_qU_%O!<4n|u@*x`a-2d8V5S!ck ze$U^J{jv7iYpuQZT5GSp&)8cL)>{#_H9oB5g0hr z?xyKVzSg^6%ge)FHD#>Pp!aLJG3-q2KU|&OY(Kd6@xf!YE2mBR%_py0CV#xAD!eW- zp>UaozwZ}X9idf1(y~48MW2W>ol6%4#iOd~J{?Aae|lIhnm&Ev{&9kkC;4J$m;sc$ z+r)hUNdCB2)H9cTn=CYXhpUhnU7F}q=hhQe9p#vMhE#U7>cHFv1Y8nUo)u~#H_t4=Dt zD?r_>Y%#Xf;%*0^S%`vSN?QbMy`@yuhCA+ImweFPQtypEwrTF8i-F_c(m9so-ZUc# zU7Ig`CMsiAS^%KL@fr&%6;|(h-JT2r~*t%XR@&@&e z3j~)UZ)??Yo3|@}Ykqz*o9e+E1e>=L*_7eJ=L(;-dR`wQjWA*R23nBfV-hnnHLqGJAUD`yI z|Ce_(>0Rsk{WW(n3@PqG4^8+x41z6pbos31CKYW|e6I8V`#qY%R)N*3!&bld9%fnn zAFBi{ZB&6((1_WeVfMQ3@~z(TIsK{%ve%iZB#JlJwG-tI9hHqlbwKB$_IJ8`Z+S9D zS=9^bpJP@Vk;BZ%1h$k82`Vdlmb}vE5x2r|u%TILUGNht?0doEe5WTqh04ELpWWUp z0F{QKgD`NLe{BTq{#mrM+ZzRt1Vs{@C40KCjBJ0MNCsx{yLI8f_kNq!C3$aMet}KR z5ZDTX7Zcfv=*>^cf1ESH)d*SvmfHe{h+*TF3`wQ8IW5m`LD3xum)wm}lDjQxsefK% z-_y)!9Umo?bumv`Bq^-$E;crD>FUA0OlFMTlT{XAp1FMF6B0T!Ant*8HsS9Oe8Ul- zVm~u?!mTHO7CWqvdIfi?m6)jhxtJ9k!+l0Sn)-_kk8JEbICY(q}BJJ-Kal9agCCHqXBWi7y(5) zqki}QyXwFX!13MO`)afdwZlU0t8s%Hgp3}MyokcHg*mNaKPs2ALR0`GJ_L3Im>JvS zIKs@`sJa2-+jTUwT@K>2r5HkEeY>8Z%CLhf^H;3xB($5j2R&%G2^#KzdOBF{LDKO4 zkap7sC75j?lm*hJve6`wk~$!dO`hW1tsOG%mJ+zqPSFUXMq`_psx>ObBsAE}Dn1<} z6=DVlX!8K@h|4%&CwDeBbDQ`H7_pg^;&!<#dD=4tqLG>M#3W|Q5i{rrN~P0indG&K zg>+7=RDKFCqf?Iv`=XzE3>x&${}>fB8-5Lc#X0%mWAfGHiDTX9d8JsKm5s6~CEk^E z12etHz3p^n?}zenX1{=mI5Gq1DO<0rs;`c>C12Gr#(ctP1x`0MODXufI0?Y9c-w$< zijbc9yGSm9W3>aThp-+77R59~rFE?#zG!wo!29boF5P*cBYYhs?9*s8^B6W$FDj>d z|DMQuG0oy7MhY>i0g}~QH(u<)DzOK85hGVHBKe||UzF2Rt&^7_T9jo>7KGXi!0X8{ zp~oLXVC6IUH>p!{PeWMj!2;lwXZ9h^dE3&uyzTYa1R*UT`FHc3x502IS+V>DX09qh zD7;<|46FBM$)N~uQ(8bdMw{T@CW@Gejk}nN94Jhlls3a9d3TGQKvtTrscKrF<|DNE zK?**lMqqbJYo*XBzfz^U8pHn!cZ1q7$Td| zwR=Ph>ZdWPtiZC;IxICtL2w~IQflKkttyTQsg-wu0AHUmJ%xP6m^c+R2z&xG`iJIz zttB8|$ZNNX&>;s`gunpVI0&{Is-2-)3e`xcFvVpRGeUs)P;KY6M=Ylr|G=$IYY8Bm z69Q=&1BqwaDFy&Uqf%_q8X~eNcoC&@JH@Ku!F^~bzkr%O*!DM(y}CW3i|FWVe$c@7 z+x*Z0l&qM^N|EkSo@3l8(z1BqF=9Q4h6vSKp6G1mEVOZCmrVx@EC=WIHG~)wj#iqN ze28U29RTpjM#H7Kux}1=G`p00-*R2YWy0*hEKkfp$&*k=ViPdI4k-)evre3m4xD0k z)WEZHiW&cP41BDVSnkv)J4J~ElKe0rSO7owjE1A|7Q~lK$~v6~@dv_)w9I~xnUM@P zMUMh+EQS(eP(WEJmS8zH9};HYMlHuq>sabND;*Eb{?W;j+l;;YFTB&ls^2<= zU3&Tw)O=EUEnwr?l6-ag0xa8GrO!jv?$MKKC@iyvx4uSj(-)%;q#_MzEh@?P)@5&< zOJBm<|9mFfTVxPHzAxLm(GZo5tmR2M(5;5pjPfddg*Ky~u#$am-Las4T=Je~rm4!j zD=-6Gm)y-?DC~MI0;yFE6MHCWOTu9J)OgFpA8|J z!FDM0AZGE%M%dhD0su;Ws}2`OqaB$v97_vPm_Q+lLt1#lXxHS2BjI2{Bf2HI@EaVL~pF;k%4i|8S{ zQu;2TvxJ5`;&xQZIRZ!;APf|gBLqm&0O14(5a7oEcw3b!v|YX;(aEa!rycfIh=&MX zCHA7yd}BXatU5D^`<;?{HK)CSmv<@OPVZ8BNcv^>sPBOFDgKRwR;~ue%59%X3z27vR zGemaQP5>jU{W#!CH&&CTDvhYHGY`>`#8N_8g}WZd7hgjvoj4J|r&B6QhghJbUf`Q$ z<)%_aKn!X~n6m9bY}&sfdh){6BUQP1o=-#*c$FLv4MPRu1ZvHh;rWhjoF+4qXKDsX z?^={Um~vdCTl)!SCZ7Pr0W|}_9m{DrEOL_}bo*Iy@D>n`F5pn3A&=MO@CXNVC7P`K z&sffT?ow^2K=b+^YP}JsZ&fyOM2Ep;)QIs%HqGnD147pb(6mPnOecc&=pbsPTU#*K zfN`>jBTs>{=pV!?5c8OM2y#GnEg!Joq)qDv3KA?3xs1Uou>|PMe4ND|L$|<%S>v{e z+W`cPB5rAIB=?n6dg18=4WiWxTzV=M zaQWo7Qfg3Wl`V^6U+sh{BzH@y)t4hK!wnf6vhdJSwiSFO9BG9ZENQ@@sHR=@&Hv_M zE=}Ca2t5=FB&cpH=+i$mKMFM^pT+1cjFr3<@|RD)WBLI#%{VDzsO62^`eY&x_S!A^0Q*s44+e0f3nRP_9v&l{SdUSA)wTQw@M>?J~^U zM@9L;#vY>ukxE{_SaiXF5Vs($rUEpyg-14%ZRPRjY+Ae^lpZ9`1kDkX9$2oo8`2AE zba8R9P^K~~F5?CU5ZMap%6n!+uUwtV$K$pA0v#Ui4Y#J^0u7DuT_ka^nPBa0Y9JtT ziKf0RTx1~Jj3<+Th3A_9phxj{iUiszN?@e5>}UagD2v5@Wo6?k#bp4n*iLxx`et&i z4D^*1J(}uW(a*xWE$%ibzr|*8-$TmT2%cF!y@=<)q6;8J2@Zco&o#UbK>>luG*cWt z4{7ujqK%pHn(r*4w8rr*__i{05CHz6;R5l{1zQL0O8KAOAwMDF~~zwl`=95ezc5dJ>Q?K*Ugmi(5|aj?;uM;Bzk%(O?|Gb9CmLi}EDm;kI!4vwm zfVZT@wEM387%XAag9;RY8p&`{p9C<(+Fnl)xq-f3D%&xp%sv^9m3nxpiuVPlG8QYR%l7+M zn9g!KG;!f9Yr)Euy`_r&rqm| z(GB0QYCJXK;-BHc<@ndQMccf+X&t!z-^yT~GW6Nr!ckaz#yEE)uGdZR?U@SJPIOH9 z-Z!tX>cX4w;mkW3;o70#HPeJgcJ&<1;AkA zv{CF%H!U5?rxXeAwUjim6^JxQKY2ujk+X5I1CRmG!^1DWW~_j7#6V4zVmvT#LN`p7 z^PZcLj&png0RD=K#Y!wB1BX-KfTwk$Oi~f0VTPJ?%H=OPVvqdi=cXk$X`S3g&5Kzc*D`2CQHo-p%EIwI+lsyHCh}u_i?C zLvE!UJg%w~0c6FRI0hF#_pL?jgSs#|CM&*RpV@3y>+$?3G$5rX-@b#Y{75aWtGt!% zZLA@9v>+@i=HDo2Scy47@BKF@v{<|f#~7iZ^g=Uu+fN4Xv_Ph>Y975EDPy|jtyz;+ z-aUphp%_FmSwq#l4>3}U1A_1mBhSe%8)VNPffW6~NDF*gTz-u0JyLo=5Q>Yv$M8{w z;L5*at;Cm3kJ{%@)RT;ow_W+&G1<5z;VGGxy$PH$OX}v)JCwjYKZ9a3+1_pQwxVyT zRX@yAm$1DR^R}TY`3>*jUEazXZpc4dGR2i@^+MlEUpsH3&q8M9D=@SoIY5TLQ8d>~ zCcdk%)Age$Y~J~Tw1ID0={G?HUm#9G;g)>^0|RP}nNZ8fDDWwRV;=@KYbX+vfZwX& z|AFIIRaL1qa0#JS{D5c|fi|t_x0sNh>8=w$qJ_Bfv!J80w}<59XA)eSK|omxgy8Za zEq^JjCFzF0uiS!Sm?=Uj1BYNe4%+%EI+HKbnap#aHwH;mb^kJz?_%x$9bOfriznh^ ziFp4_sFHN|KG$8|epS<5;;%I2MS@N6S4ge2yqPvM`0QQz>t_7o=KRkBU854S4R4wa*sHnJ?so>`AV!E=;~cD+|3GT78xLWiG4iB=gL~GqD?=1au{J{EZU7 z)?gq5|4+<@Md7%0iq?7sD{F}7fd?tSRf(Zp07pVg=4i9f&NciKZ#xV>*QVkV3m(WY zVz^l6^rz3m`K0{u2-MV$0MA2e zC$#rBo%kE777i7~A!OgfcQgri zl1Q}&M=I1OG>2;7H*);>wP|wY(n(>hDRRxy#M!?AP}uN;mn3)kzhN?*??O?u6-X9@owT+{3B^Kvgi$fg6nT9DSs+ zGUs_dju*rM3rlIqV&*IOJB3@80~c##q8Pcw{zoJG5X+iHKjCoMhX^=;pZ8q53PN9m z7@WiW0gTwYi0mn5rkvP$7L@Ri4R87t|-FFR?KLEuemR}!dTf^cqx<_Ai6D>)`kgK&;Tv&9I@@k%)ini z{>pnK>v_o6&o;~oUPqZbgyNmSCQS^i%6ybGGT5X^k?2Y% zG0x%5q=if2h%3P{Ns{2z-Eka}VC`IzQ^Xr0na_}1XLye!ISEPn*yc4{lDKdARyzjq zD-`J?R;>^7Tf=o+65iW|uWK63OAzI|T{>6MXtpA~#v};4AVaAp!;HI8TqC%sIWF?s zryaIn#|_0E1S$8QA21BlJ7@cQsnG1Q6WR^X29Y&6d(ms8UL)^mJM|}oP}nVfas>bXhvCvrL00;(v!B~7wkp~L zQ*&R$UhU_{jl+;Lmgta%>FMAm-vtNKbLU}Z?gJ2i&chIVkfj`En;+)P=N}{^V~!4; z>w6a4@qoofa&l1BX);$ZPy98kiyP}Ajd^-EE>B>72DG3pJdeTz9Q_(|+_fF}dw}`- z6c6!ZmJoBYQP+b;+M$^&j1;Uv3{H4_7v~%|8Jx*Nt3U#DXROp1lNDlT?DVvYkm4}d zIGldUiT7(govn)j!PABDCy3k`G}j;k5*&|H8FzjcZRzED{HhVha&RmMmVgH(1}B5F z5vfD*o{#?yr^!hFeDLDm;CBUcM*0w-EBMsk^v?&M8=;4BHQ0P_(S3pd1cFbDFhKu& zaMK6@%gYd<<44}_a9AvWTH{`el&3EjXUso9&XjAg;L=DK+!?NriV-;J$u6KgbU-dx zo;qtQfUtX|y91tv$MwUky1kYXI4C9hBrcHJFDBwV(Q@1JKf3T+SN>ry5hHM4tBCKP zFl0K0;j)f{iXGV^oF`h~2u8e@aWrV1_QZj+icY4-IF`fEHk!z2yW%i(YCS_0YV1yY zGZ$mZZ7ePV{fK5^PuRFkqkpw>%0q!4Vk|=tk}Uu7@x;ZS9kQj%sViscw#zG4ChE~$ zyr*cTHEd5{Rc4qxX3evY_24c*cY~yQRV{~|W}uFs`WsbUNu(~T>UPvC@sp7j)PWoF zmNl~`cH?^(9*=PZj)sc~f{4F)_**G=taqH>r@rlAnutZ<~>UO z{!zaQj~X-lYw@IIa_#HShZWiPj9E7rZYo(uh=RaZfjUVxy*Xjx479>@6o!AO&bugRSvp~YpzueAVW=RyEAIf!N0A;T3Gu>5r6VKM+A3T0 z6LkN^%WC#04Fo;OTk@xrds z5UEi0zO4KC1l_-K{9U~K4_-F$@+dDa^700i6LmPYjlx7B@I5-w@^#Re$jf=WTr5v} zdxGw1-nR3yfR}Ic(#y+j@~6Q0J#W|W@(?f2@G{8DK3wosvn&j2%*S%F#_~!b;i~O;5Dpo16Y6not8Wl-O zQs9|J7$4)h$~ZXV>@sU*Q2GI_wM|QDiwYK0Y{3Rn=x{?2_VMb~fl+k9W{ zpL5SW=iGD8IrrR~bXDrRD)noV^_kQEnDWDbKi(?v&mV792I?lpB=^_4$x5#7M{|!; z>s_yvnfgb}(gF>7y;d6aUnia(`sW`?*u#%2`8U;+OfhyoxM|A3E!9zVF)3*?H2m!^ zYIU?$3GLIjycBmZ$$ThF5L90{9Nw$%n zW$~Um5%Xq>gK7Gc;&5Gx@{%|^hGv67)+XgUF+2KnxAczWH||$5M&0Lj_}>;idO>jb zt3?-TN%n~wdA}~ww~N_Mb|%=(OmQ#X2}Jp-^>DY1joS&xs3m|fi`vZ!)7PTe&E^>^ zd2P0fVmB+;-ObFUVkTNAndK}x4)L~bmQSr>adJ0vo6E!r%yJ$ue9^Hu*>Jlcfa5;U zPmSfoOqeBkcgA+Jai1~E_rz_a#$~pc2HIa?>I9KlcAzd4lhvbRNE8#Apc6*RAx;2? zR(uZw#V#fSSKSUQH!;~fh0qIzLSSG*ssiJS9Fz}CT9TjlBJ((pq3R30JceH9VPTdo zjYa;CnlNP$<^c_{n6zM;KuR$V=k!bv9{lGeJ>1JInV4yV<^@*>b71cf2-m+qH1m=H02wEpHWK1tGV*S%8V! z%CBm}W3IWwVTZq1%y!7#Io4n|Tb^D4lSMs>YKQ;!m$h!{a^6j!hAKBuDYoAPGHhFy z(^ei7bk6B);ZAgWB>5cKiX`_q*}`*DV~6RSoh?2pIBjfUmlV@Qz5N2grI;S7?v!F$ z9CC-Y=Qg&e4Va6%oH=Y!hvW@rI@z_|_?~y#*&-FiwbRt;MP zMnE6?4pSeyL`4gAFG68^(AZzp?qrL@GeC3k#Thj7qLb~o=gCNjE zj_|>4WUqyvpdI&5w3($H&30xvhUypsRX+OpaFCh%SVq!Ugt6)lL}U`&AwSpCitRwy ziwId!h#^ce`9#tvTFTAiN8ejuyj5fK5wRKbf3lfF7%OMN*PyVC59 zE!PmLJMRONWQ~cLs{hxntfJL>gR$Ng>`WsIn*mdG&URQ}8`B6{*$Tuv!0lF&lLJNiSJxA8tQ^idl^6?bORUW>vB$4zce?PtHrk5kHicJJu(5 z!N%!e7r4x)JnE9OASUmZTPgc!qtQUp>!1akAbRRI%KaHh%tMf!fSrJis0{=&Edb0W zw*sgV@O1*tzK;W206ay&rCs4L1v3Pqg**LqoFtm6gd8Kn%%U;t0y?7BZo)o;#!d=` zY^*_4tweZ&{yO3FL^u|N?Q*r)0U4oGg9wg27?AvN!kRk}R*?`vr zj}-HFkWtf=u8d(tR;(OK6@j<c>)G;>sedh?lZ*czZy4+*k zWvej}g(MUZPYP6XGs z@r#+It(!G{Y-F<=F=-coKCuG~*u>pzDi#6&O=TwI^Xaf@4k>6-|MUab5hZ1&)X!lg zs5#w&q`ANYePkDu`W7PDEkJgekJ=4^5<$=){?9QjMQl>DG{U7KC5OADfaX@(8jPi2 zL@IU>oB{^u?>_LX52c|?IZ#0SZ@fM23vpm6xr0)bzHfg%lf4*Z;x^L5BvdQIeMK0%CtZ`Rovom2U_XIV3_%K;_M{1ScNWkG_?q; z3T*SbzyNKCfY9vdYo<{!z=!7aH8=D%JE-Z_Fw%^Ksv-9^ zH}o|-`kHC|`f&T28~U0Zea$pP68gY(e0xyabNmVDLfGmuIsegay8 zrsQAJDap%>v2^@Tl;kpFGTXYO8)|nL6SG%W8$24)c^Y!x;$LzF^*BjB%FO-MQ=QzK zgWM#4kBDURHtTRxxjkpfDONcL`^^p~*JUqZR(*Wkz+2x(;lQ;9(al^FP zZ8)HIs24(Mz_YNK+8B%aU7x40K#&TC?fE)Zk0iUh|_J6hWA6?Sco(U7a!BOWDk4CeSvQQhRTT z`}tFBtLsO|GxbXL>gRs|xW_3!-zE87mnHf6^Ha_)+ZOudCz5+P#N=-9HW)F>N#x}x z(SKWPM_3=sI0vzf@>;~wLIfETF3X722s*(AKt>=GL8V0) zNbej2x*4HoDP9`)p@TZgYLoonqO}7fr{BB+H9hQt#R;xStYK897N}p8|ge3 zq4PA+ahEjMNZ9`0Ls*Jmm&ap@ox=BIUvOzONF&3=fomtMW3*j_^*ONc{$U1j*brrm z2vU%Ga>Ij!SEFrf+`AlYsexh>#w*22A~lOpUe!?C8jKV5Xhe-fj+9U-8sHBNh~9!K zL75FWF9msrdKa}HKzlW|k_N{U;9d>DpJ!4CAZY+SXs9s+NYemO1nBt=fQKk>AR$pZ z(SwC$vaRjby~xl=Ou1709F^u8AE8CjoY(~nHv_j&O9r3-O-wo$kTXy=7u9%N4>&Z( z)l&jWO#sKV5Aca3o&=Y3S$7dVy&HX&h*TeBXt(UE>%>OD=y2JHe&g{dmbg2nosdaz zHmH#tr3KB#B9Ds=YMP?i0P`&}adG43h(JV&800d-G*3VT^*>L*idOCE469jOY1nefdn%Jz za0LKj?-ii;N}%O1i?n+IxtIyb6}quFiK#nOZ3P*-e;p5mxa?%+;G$mP#EwZ&>S91V zYe5A6u3=LKK2ARuFI@prESF_80WB1>bQ?aWI0sNkR4M&a~3E!n- z6}Lf0<==r}xcpOB*d>I1%K_mq0m6by$O)wbLMNZYA6Gvb*S+=P5#U=-M{-05u0TNm zLbD)TJ#fRddFXDZB71c=p4Dvr<;qici*7RPpRL{j=l|L2V|I`USMo?gt@UCDsFZ(< zfxohq^lm3r98$6efKDTpP3O#rH72ACo}qMG33cTKQ<@u*8p8Vmoe-iyB!1 zObReNOQ;m{bnqrM_ZU5=L|=^fPDlI^`}D*H{2zh4fX(NA^fFwJI zis#|1VkNS~dQxd^H8i|Ej8>=|Fj?CT$**PMcKMqe>qT|%@#`lr1&TfJPe;JLU?REo zW|~?Z(k*2r&yb>kJQop}pD zjV1md`6DjQk0-Kbc+nRu0k>B|a9cDP`y9WDzXfntqsIV7&*t3mf9CfXZ&J_vQ^}cEW@}O2y9gwb&yQ(kq@*H_cMHG6MFTq3EYssgP=D= ztquUykjAJN40|B3+(aH=pVGyAB{7(P0h>@m#r6vr)yy2qF(!Zo=&t^>hB%bN0|i{_ z4|KB$T~0Tmzbz&xw>PT8?eY#?yJpvWd*pK*Wn2&xaI{Zo#G$+6Xe5~!gf-f{Eijhm zY@7EQQs}>dvJFSjzKV-wCvBd)M4{{`+#gpsdYYo`g`x`S;3+KRN#^ZGZvo5(|8t1n z@?)W$th!7*&RR|*C!_btlYk&wIm#^b(vNTcm(21Ln)u>iVWzBc!-z1wTV7@>nvo4- z`%l0R4lqk|D2P4+-%2o|m={`t6x${rq5PmMg;bX-x0reAT&bnbyI93lopPT&W#((3 zt2TZG^Bw@v8~($9?j)=pG2KEhvBgMby~_|oneQMjDAbH%zB53hqqO%ds+a=+bXO=2 zRW{p`-1U#cM;;LCl>q&+rnto|{bl;z>mP5%k^k`B`g>BgO3l}bg z>#2=LstT+^-Ef$86}bLNgHn^58YA!UUb>5|`Ad}2k(=yZ{e^A2#bVKj*yZo*(=oS! z2&`_gvu)qkQj}G@uq<2oZb8U%$%i<<99iu{RogK>T|Nt*QQ&C}<~APdH`QMqOV>Py z?0}$0v2Giej(b&Y28k%QK2?92=|1x`>T@K;vTH-XF=km~_Ipy9v3@vEz=!!^l-zb1lTM#L8aA6Gx}Rj0SkP{~)gCJXj6 z0r%aCHMrZ^wukfbBBt{`=5j_LZv%NX1M@>q{G{}smg@ePGwSm>N1iKk=)EEeFV1+|OxAho_#279Dn5gHmh@6lAPJ#qVZ!jGSWo`K~NDshA6 zs>EbI$9QOn@~ku}MxFEp4uEx{s%(}copwN}GAuUK-2WvxR;LMWs>fld-s+6sR$TYU5)+tcr`h+cbI$ibRDZQ|_$*h3( z9?%Pn9dIkMCs9Ma(VjvUc$?ZEJlJrLvh4ohGp+E6aFTzLAe?tjWW#+}H0dYHb{kd3 zJE@w|Q*V{ z%{oWVF_L_;EKc%gZ2~-;)B%t>AM9I<&9^Eu^Cr2G4dx%j36Gm-L2A&<_uMW*n#ioG!5VmwiQ2WT(cNZH}QSxL_4*PyJaDsWef3pyeYMV#@sBw3llo% zKPh<23W8@NG2}n72Jy!TWXUWe$X0l{4QCbd4K4^u^SjvA+wRaEmF8ch238TwzSv?| zdXpwK-OJhl(3SPaZ>yuh+WW1ZRV0B5*kRH6^sLy1Ye*}z;Qms8Kj0K1^Q9kC@GZn2 zGw3C#ovrAmO~lWcNU|`tPuHY7D9zu;wk8hJ5s7_~&c!Cf(ile6t|FOJ;u%omYAbho-by&s$w&EquIq4~l^I`lRFTKXL z8uS5sln%&;wcbX~w*`MxVwR4Lob9N|V7pOYRt&7$JsQVv(T3Xd@vo=+PtcAl1zhsF zn@zum%3;+cUeas;L&tHGL?0SB9eN118nJlvPjuEh*P`APYT-B@NJz`M*!gCkC!rq> zrS#3S&7~Q$1_#!0+e&;bEpV^F`jSWJd@p)nf=YJ$cYP0lr$_-p^yB16Sn zUH&c&xeQ`{iv$C7jP5e5G;0n9Z$Q7GmuZ@qk%aP z+%ueQG zaGd*5CUd+Z!UNC64`_INkI-Dg@hW(^mP+Fr*ST%uGk2nI77&Sww3!C25t5yf zf8*t5UVg~SJ-j@|%hOa2xdJ*SVTcg?1)XT+Ea)WiGJ}^>lo8Jk*8P^ZXYulJUOvN1 zA1~J^?*Zqpyj{)9R$dJ~zU&jQ0-n+6CH_-nvAY>CK3{{ugE^MwPvW Xge@Dqi}kun#k}$k-RDZ~$}#^9A(#L# diff --git a/game/client.c b/game/client.c index 41eaf9d..162e224 100644 --- a/game/client.c +++ b/game/client.c @@ -1,4 +1,3 @@ -// game/client.c - SMOOTH TERRAIN VERSION WITH DIRECTIONAL LIGHT & SHADOWS #include "raylib.h" #include #include @@ -394,6 +393,9 @@ static Vector3 v3_add(Vector3 a, Vector3 b) { static Vector3 v3_sub(Vector3 a, Vector3 b) { return v3(a.x - b.x, a.y - b.y, a.z - b.z); } +static Vector3 v3_mul(Vector3 a, float s) { + return v3(a.x * s, a.y * s, a.z * s); +} static float v3_dot(Vector3 a, Vector3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } @@ -585,6 +587,7 @@ typedef struct MsgRoomState { typedef struct RemotePlayer { int present, alive, hp; Vector3 pos; + Vector3 prevPos; float yaw, pitch; uint8_t weapon; int16_t pistolMag, rifleMag, pistolAmmo, rifleAmmo, medkits; @@ -717,6 +720,10 @@ int main(void) { Vector3 camPos = v3(0, 5.0f, 6); float yaw = 0.0f, pitch = 0.0f; + Vector3 prevBodyPos = v3(0, 5.0f, 6); + Vector3 currentTargetBody = v3(0, 5.0f, 6); + float interpTimer = 0.0f; + float recoilYaw = 0.0f, recoilPitch = 0.0f, crossSpread = 0.0f; int scoped = 0; float fireCooldown = 0.0f; @@ -793,6 +800,7 @@ int main(void) { continue; RemotePlayer *p = &rp[ps->id]; + p->prevPos = p->pos; p->present = 1; p->alive = ps->alive; p->hp = ps->hp; @@ -811,14 +819,9 @@ int main(void) { } if (myId != 255 && rp[myId].present) { - Vector3 body = rp[myId].pos; - camPos.x = body.x; - camPos.y = body.y + 1.0f; - camPos.z = body.z + 0.0001f; - - // Prevent camera from clipping into terrain - float terrain_h = get_terrain_height(camPos.x, camPos.z); - camPos.y = fmaxf(camPos.y, terrain_h + 1.5f); + prevBodyPos = currentTargetBody; + currentTargetBody = rp[myId].pos; + interpTimer = 0.0f; } } else if (type == MSG_ITEMS && n >= (int)sizeof(MsgItems)) { MsgItems *m = (MsgItems *)buf; @@ -843,6 +846,23 @@ int main(void) { } } + // Interpolate camera position + if (myId != 255 && rp[myId].present) { + float interpFactor = interpTimer / (1.0f / 20.0f); + if (interpFactor > 1.0f) + interpFactor = 1.0f; + Vector3 interpBody = v3_add(v3_mul(prevBodyPos, 1.0f - interpFactor), + v3_mul(currentTargetBody, interpFactor)); + camPos.x = interpBody.x; + camPos.y = interpBody.y + 1.0f; + camPos.z = interpBody.z + 0.0001f; + + // Prevent camera from clipping into terrain + float terrain_h = get_terrain_height(camPos.x, camPos.z); + camPos.y = fmaxf(camPos.y, terrain_h + 1.5f); + } + interpTimer += dt; + Vector2 md = GetMouseDelta(); const float sens = 0.0025f; yaw -= md.x * sens; @@ -931,6 +951,14 @@ int main(void) { Vector3 forward = v3(sinf(viewYaw) * cosf(viewPitch), sinf(viewPitch), cosf(viewYaw) * cosf(viewPitch)); + // Offset camera position: 0.3m in front, 0.2m below + camPos = v3_add(camPos, v3_mul(forward, 0.3f)); + camPos.y -= 0.2f; + + // Ensure camera doesn't clip into terrain after offset + float terrain_h = get_terrain_height(camPos.x, camPos.z); + camPos.y = fmaxf(camPos.y, terrain_h + 1.5f); + Camera3D cam = {0}; cam.position = camPos; cam.target = v3_add(camPos, forward); @@ -1000,7 +1028,11 @@ int main(void) { for (int i = 0; i < MAX_PLAYERS; i++) { if (!rp[i].present) continue; - Vector3 p = rp[i].pos; + float interpFactor = interpTimer / (1.0f / 20.0f); + if (interpFactor > 1.0f) + interpFactor = 1.0f; + Vector3 p = v3_add(v3_mul(rp[i].prevPos, 1.0f - interpFactor), + v3_mul(rp[i].pos, interpFactor)); Color c = (i == myId) ? (Color){80, 180, 255, 255} : (Color){255, 80, 80, 255}; if (!rp[i].alive) @@ -1020,7 +1052,12 @@ int main(void) { for (int i = 0; i < MAX_PLAYERS; i++) { if (!rp[i].present || !rp[i].username[0]) continue; - Vector3 head = v3(rp[i].pos.x, rp[i].pos.y + 1.2f, rp[i].pos.z); + float interpFactor = interpTimer / (1.0f / 20.0f); + if (interpFactor > 1.0f) + interpFactor = 1.0f; + Vector3 p = v3_add(v3_mul(rp[i].prevPos, 1.0f - interpFactor), + v3_mul(rp[i].pos, interpFactor)); + Vector3 head = v3(p.x, p.y + 1.2f, p.z); Vector3 camForward = v3_norm(v3_sub(cam.target, cam.position)); Vector3 toHead = v3_sub(head, cam.position); if (v3_dot(camForward, toHead) <= 0.0f) diff --git a/game/client.o b/game/client.o new file mode 100644 index 0000000000000000000000000000000000000000..c6e108565e0e881f527285b596ec0eed7beb8929 GIT binary patch literal 38624 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 qh|`wt^5p4K5r}2wvtqdP`aq@z+b||NjDPQp249 literal 0 HcmV?d00001 diff --git a/game/server.c b/game/server.c index b3c61b9..7a029a7 100644 --- a/game/server.c +++ b/game/server.c @@ -1,4 +1,3 @@ -// game/server.c - SMOOTH TERRAIN VERSION #include #include #include From 2d9857483035bdb1674daba913a2b3bff78b742d Mon Sep 17 00:00:00 2001 From: Masashi Date: Fri, 19 Dec 2025 11:20:00 +0530 Subject: [PATCH 3/3] world border --- game/client | Bin 34416 -> 34456 bytes game/client.c | 6 ++++ game/server | Bin 39600 -> 39600 bytes game/server.c | 85 +++++++++++++++++++++++++++++++++++++++----------- 4 files changed, 73 insertions(+), 18 deletions(-) diff --git a/game/client b/game/client index 7c659dd49e959d31351148287697be205b322694..673d436fc8da0fddcf31bc3c5d26e67f38e74558 100755 GIT binary patch delta 8460 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 AqW}N^ delta 8356 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 F{u`TMhIjw~ diff --git a/game/client.c b/game/client.c index 162e224..eb6df46 100644 --- a/game/client.c +++ b/game/client.c @@ -179,6 +179,8 @@ float get_terrain_height(float x, float z) { #define TERRAIN_SIZE 256 #define TERRAIN_SCALE 1.0f +#define TERRAIN_MIN (-TERRAIN_SIZE * TERRAIN_SCALE / 2.0f) +#define TERRAIN_MAX (TERRAIN_SIZE * TERRAIN_SCALE / 2.0f) static Mesh generate_terrain_mesh(void) { int size = TERRAIN_SIZE; @@ -1005,6 +1007,10 @@ int main(void) { (Color){80, 140, 70, 255}; DrawModel(terrainModel, (Vector3){0, 0, 0}, 1.0f, WHITE); + // Draw border + float borderSize = TERRAIN_MAX - TERRAIN_MIN; + DrawCube((Vector3){0, 0, 0}, borderSize, 1000, borderSize, (Color){255, 0, 0, 100}); + // Items with basic lighting (no shader for now to keep it simple) for (int i = 0; i < MAX_ITEMS; i++) { if (!wi[i].present) diff --git a/game/server b/game/server index d390cbec1325a2f0a673e5fd25e4fd151d79b39b..30f4f0bd7c755907ab1a81cc8987e49afb6c5f66 100755 GIT binary patch delta 13111 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 delta 12160 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, p->body); dGeomSetCategoryBits(p->geom, CAT_PLAYER); dGeomSetCollideBits(p->geom, CAT_WORLD | CAT_PLAYER); + + p->borderDamageTimer = 0.0f; } static void player_ode_destroy(Player *p) { @@ -988,27 +993,71 @@ int main(void) { } } - for (int i = 0; i < MAX_PLAYERS; i++) { - Player *p = &players[i]; - if (!p->inUse || !p->alive) - continue; + for (int i = 0; i < MAX_PLAYERS; i++) { + Player *p = &players[i]; + if (!p->inUse || !p->alive) + continue; - const dReal *lvel = dBodyGetLinearVel(p->body); - const dReal *avel = dBodyGetAngularVel(p->body); + const dReal *lvel = dBodyGetLinearVel(p->body); + const dReal *avel = dBodyGetAngularVel(p->body); - float dx = p->moveX, dz = p->moveZ; - float len = sqrtf(dx * dx + dz * dz); - if (len > 1e-6f) { - dx /= len; - dz /= len; - } + float dx = p->moveX, dz = p->moveZ; + float len = sqrtf(dx * dx + dz * dz); + if (len > 1e-6f) { + dx /= len; + dz /= len; + } - float speed = 10.0f; - float fx = sinf(p->yaw) * dz - cosf(p->yaw) * dx; - float fz = cosf(p->yaw) * dz + sinf(p->yaw) * dx; - dBodySetLinearVel(p->body, fx * speed, lvel[1], fz * speed); - dBodySetAngularVel(p->body, avel[0], 0, avel[2]); - } + float speed = 10.0f; + float fx = sinf(p->yaw) * dz - cosf(p->yaw) * dx; + float fz = cosf(p->yaw) * dz + sinf(p->yaw) * dx; + dBodySetLinearVel(p->body, fx * speed, lvel[1], fz * speed); + dBodySetAngularVel(p->body, avel[0], 0, avel[2]); + } + + // Border damage + for (int i = 0; i < MAX_PLAYERS; i++) { + Player *p = &players[i]; + if (!p->inUse || !p->alive) + continue; + const dReal *pos = dBodyGetPosition(p->body); + float px = (float)pos[0], pz = (float)pos[2]; + if (px < TERRAIN_MIN || px > TERRAIN_MAX || pz < TERRAIN_MIN || pz > TERRAIN_MAX) { + p->borderDamageTimer += DT; + if (p->borderDamageTimer >= 0.5f) { + p->borderDamageTimer -= 0.5f; + p->hp -= 1; + if (p->hp <= 0) { + p->hp = 0; + p->alive = 0; + // Drop loot as in shooting death + const dReal *pos2 = dBodyGetPosition(p->body); + float x = (float)pos2[0], z = (float)pos2[2]; + if (p->pistolAmmo > 0) { + int qty = p->pistolAmmo; + if (qty > 12) qty = 12; + item_spawn(ITEM_AMMO_PISTOL, qty, x + frand_signed(&p->rng) * 2.0f, z + frand_signed(&p->rng) * 2.0f); + p->pistolAmmo -= qty; + } + if (p->rifleAmmo > 0) { + int qty = p->rifleAmmo; + if (qty > 30) qty = 30; + item_spawn(ITEM_AMMO_RIFLE, qty, x + frand_signed(&p->rng) * 2.0f, z + frand_signed(&p->rng) * 2.0f); + p->rifleAmmo -= qty; + } + if (p->medkits > 0) { + int qty = p->medkits; + if (qty > 2) qty = 2; + item_spawn(ITEM_MEDKIT, qty, x + frand_signed(&p->rng) * 2.0f, z + frand_signed(&p->rng) * 2.0f); + p->medkits -= qty; + } + printf("Player %d died from border damage and dropped loot\n", i); + } + } + } else { + p->borderDamageTimer = 0.0f; + } + } MsgSnapshot snap = {0}; snap.type = MSG_SNAPSHOT;