From 7fc4e9cd3c81d7afc9f81d45ed511cf8a3f681ad Mon Sep 17 00:00:00 2001 From: Masashi Date: Thu, 18 Dec 2025 21:55:51 +0530 Subject: [PATCH] wider terrain --- game/client | Bin 30248 -> 30248 bytes game/client.c | 20 ++++++++++-------- game/server | Bin 35160 -> 35160 bytes game/server.c | 55 ++++++++++++++++++++++++++++++++++++-------------- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/game/client b/game/client index fbb164f9b646dcbefd146289c96ff69e39629fd8..44a59f91f0ab91f3947805b09d423a8cba05bc5e 100755 GIT binary patch delta 3544 zcmZu!eNa@_6@PDGkyYR>32XQe1i9j>2%;d6h_d)rAG#nCFc^tiB{Vi>CXH*uj5KV* zV%RQJl1pi7uw&AuW2fni$x;ML*(DOA(WEh{4UHxu3GopyP>G+>y#DT6S+ldHi?h2-N`g&@IFDPlHE~r%`hUnTImTe`x&H)oj`W;o38+`WA`~{&hKlD|Y+AB7#8#wH@hi3?EnQR?OUn_*+3B=sagvRsZMg5hF@n&O z55s-13t#dMGC92n_S(`P7ai<&`s{2U1XJ=~y7?+MZ+APW}eS@M)v&XSfU#qyJ7*Qh-IrtG>UyKdB947Jaf zo1L_RRW4lt(5p-L)RjXIKIP*m{sZXHJ7`@4Zk>Ca%f-!y!||xayLtBTC}Q_wN3jrDvHo zjTO3TO<{%2wWhQ}m)#UiI(JV^SxBU0ipp>7h}s6M?B4wym(6kSzHPy}poicD+4Tj9 z%vJ`+RTYM_#uHG$cSX7WSeBGKLYf|7uVux@I&Z70g>(+c{X-#=8?}TvYr{F>e3A`j zWr>?v#Il*uv!c;w#26kH%h!q%pe1Tl&a&mpk`|17&+R|gK^u8g=5MD+q@9+KPI@24VX$wbIm$A>93&5OKttJsr%2_805s7&&B2lH5)76`Us54=lDeoFol1ys!=OnkhiQl%eDF2Ot=rrk)QlHc zt{->s7L;6Lqc31zoknJJcRgDkDiw`3wD9w%u;u;GG*HHT%iBbs=aIY#5o2Y|$}-W% z+E>QUPaAy;x>ID!4g7tCzd>RiKt3f}GDS8Wvk>zjb_l{VymFc-{)By#Ut5>2b$L6i zTinGTH=ML97RL&~K8&NvXf5z%vAlB{wY2N;+>Bxqc|@|2l-tD=?dk zcn_4hU#M!|bR6UTQ!ut|tg0YY{4;y0AThad2%;?r*3vaOdG&lZM@jRq_2@Xd4o{_; z{i`4`-3nX}5QqAn&@yAx@5c-7b#TP!1yxn-pX0F=2l4T6g(a`5FL)R`x0CW&!OPO% zBMrAOdz2Y~x@)OTdHp<^$0xh}mra$t(0}`ohMkx?^78|OOj)%kuGfeS?AUNHCS)|; z&*rA470^1*7E7}6B0`j1PC5x+WVgPQHA?eBr^7T5L+q%O6ngQTw)u(;Nl9WCGg}kG zD_~4{+0P$m>DGjWyRebnVH8@E@YvGDQ{e8UPXj5VyK1<`8h}OxR%1<=^9MxH9R*Ae ze^|P%UcIXJaS|8R-)8{(4(qa}*6}G`e>0)$gbH{Ghl5Z_alfU@Y&NTXi@@@7HFWwQ zmc}zZ=lSw3Iohw8N197&5FQsQ({QNdx`GNz$OvcgN^7`)CFLT5FK~Bc%0WUncPAO{ zWcZZt&#|Xg$JKrNA9zv&)dJ$}$ov`n(_8}X6slj{aE%n7fitIp$nd>Y(|DE~J@fqg zf>2X~uL90h+L48BbfM6*4iD}LXZwS9y{9ze083XJe%)alwDq2_IWK8O4h-x9qQKFc z$w#+9oR1^b1>|UJW)=2bYFm}MnjCG)d;&XLbG+TauUqdGmbWIhKyroA!v0GkHoW9U zmqb&QQ*cIdgObrx#%>Hhp=Ub`_J#0XzdXnjb`8OO2Qx^*X|{jOtoyxS6K^I3|CpbD zkoB#ZRo4Q3bwPda@?Dx|`?sU$R%E21^cIgvEh)KM^S6II0TyauLD>k+(NvDQcbBx@ zy-PkO&etbZwO*oCqN6w1A9TYWn8y2`bp|sDSBjlh_9<+yOy<0d9hWn6P=;?pKK9$$jy$U66EnQQH?4W!Ojd~||PfPUa9-fvTKclV# zLn1?!XQ4A1j;Y(%!J89=+NE-}1J|`+PyD}NXTl5R&cC7g$qf{dS8aQcP$zU%p~JPZ zRr|{pic?10?qF>2uJ7VqKe`%sEvodyz4uAavo?8C^IgjTbiL6)A+jv~?V;VJl}bEt zcXN_esImPy`Hete-7wtQWZVdAWollb+ldfl%QP9QCaXABjNPu1F>atb%dmwbODh(*|z=uYcdfh|*P zW6#iXJd6 zM^odbHEt&6e#FLgOq3lg+M@eFWOs@-lPZ7DR?;Y(9A3?STAV^w`FT}-UM_1dPFXP1 z&nu(RS`|3DlFs5yENBwcBn&+LHGz#6mo9ov^UoOmdu>J8jDYszbo^ll=qCL>zfAuE zdvd+??UDmxWMT1|w6rv#)M{IAk&+;0uWtC8XItr;y2zTVs#*a~%{5hh1#1P1FJGvO zzRK2?uMh{Bt2|k3Wq&Q7EuLi`l+)~%l%Umyh?aS}>k%N!!XkVrxbRFLE<)#xE&t|+n8a;ggC%% n?%1l!FZMiI)fp_F^+fKx9xCo&hG)_Z1MB_D10KsWmxBHWTq_X7 delta 3464 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 MSv$P8Cw`dqe@mzG+yDRo diff --git a/game/client.c b/game/client.c index c775424..055f10e 100644 --- a/game/client.c +++ b/game/client.c @@ -21,7 +21,7 @@ typedef int socklen_t; #define CLOSESOCK close #endif -#define PROTOCOL_VERSION 5 +#define PROTOCOL_VERSION 67 #define SERVER_PORT 27015 #define MAX_PLAYERS 16 #define USERNAME_MAX 16 @@ -558,6 +558,7 @@ typedef struct PlayerStateNet { float x, y, z, yaw, pitch; uint8_t weapon; int16_t pistolMag, rifleMag, pistolAmmo, rifleAmmo, medkits; + int16_t reloadTimeLeft; char username[USERNAME_MAX]; } PlayerStateNet; @@ -589,6 +590,7 @@ typedef struct RemotePlayer { float yaw, pitch; uint8_t weapon; int16_t pistolMag, rifleMag, pistolAmmo, rifleAmmo, medkits; + int16_t reloadTimeLeft; char username[USERNAME_MAX]; } RemotePlayer; @@ -715,7 +717,7 @@ int main(void) { float recoilYaw = 0.0f, recoilPitch = 0.0f, crossSpread = 0.0f; float fireCooldown = 0.0f; int shotsInBurst = 0; - float burstResetTimer = 0.0f; + float burstResetTimer = 0.0f; const float pistolFireRate = 4.0f, rifleFireRate = 12.0f; const float recoilReturn = 18.0f, crossReturn = 14.0f; @@ -799,15 +801,16 @@ int main(void) { p->pistolAmmo = ps->pistolAmmo; p->rifleAmmo = ps->rifleAmmo; p->medkits = ps->medkits; + p->reloadTimeLeft = ps->reloadTimeLeft; memset(p->username, 0, USERNAME_MAX); strncpy(p->username, ps->username, USERNAME_MAX - 1); } 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; + 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); @@ -854,8 +857,6 @@ int main(void) { if (IsKeyDown(KEY_S)) moveZ -= 1.0f; - - uint8_t buttons = 0; if (IsKeyPressed(KEY_ONE)) buttons |= BTN_SWITCH_PISTOL; @@ -1055,7 +1056,10 @@ int main(void) { DrawText(TextFormat("%d", currentMag), sw - 250, sh - 75, 40, RAYWHITE); DrawText(TextFormat("/ %d", reserveAmmo), sw - 140, sh - 65, 24, (Color){180, 180, 180, 255}); - if (currentMag == 0) + if (rp[myId].reloadTimeLeft > 0) + DrawText("RELOADING...", sw - 250, sh - 30, 20, + (Color){255, 200, 80, 255}); + else if (currentMag == 0) DrawText("RELOAD!", sw - 250, sh - 30, 20, (Color){255, 80, 80, 255}); } diff --git a/game/server b/game/server index e113afb8f9efb29ae34ce5b9e6970ae18cc4b406..1bf56063225deb474713e667740d708cbf60fdee 100755 GIT binary patch delta 8696 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 delta 8608 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 = WEAPON_RIFLE; if (m->buttons & BTN_RELOAD) { - if (p->weapon == WEAPON_PISTOL) { - int need = 12 - p->pistolMag; - if (need > 0 && p->pistolAmmo > 0) { - int take = (p->pistolAmmo < need) ? p->pistolAmmo : need; - p->pistolAmmo -= take; - p->pistolMag += take; - } - } else { - int need = 30 - p->rifleMag; - if (need > 0 && p->rifleAmmo > 0) { - int take = (p->rifleAmmo < need) ? p->rifleAmmo : need; - p->rifleAmmo -= take; - p->rifleMag += take; - } + if (p->reloadTimer <= 0.0f) { + p->reloadTimer = 2.0f; // 2 second reload time + p->reloadWeapon = p->weapon; } } @@ -730,6 +722,9 @@ int main(void) { if (now - sh->lastShotTime > 0.18) sh->shotsInBurst = 0; + if (sh->reloadTimer > 0.0f) + continue; + int *mag = (sh->weapon == WEAPON_PISTOL) ? &sh->pistolMag : &sh->rifleMag; if (*mag <= 0) @@ -801,6 +796,35 @@ int main(void) { dWorldQuickStep(gWorld, DT); dJointGroupEmpty(gContactGroup); + // Handle reload timers + for (int i = 0; i < MAX_PLAYERS; i++) { + Player *p = &players[i]; + if (!p->inUse || !p->alive) + continue; + if (p->reloadTimer > 0.0f) { + p->reloadTimer -= DT; + if (p->reloadTimer <= 0.0f) { + p->reloadTimer = 0.0f; + // Perform reload + if (p->reloadWeapon == WEAPON_PISTOL) { + int need = 12 - p->pistolMag; + if (need > 0 && p->pistolAmmo > 0) { + int take = (p->pistolAmmo < need) ? p->pistolAmmo : need; + p->pistolAmmo -= take; + p->pistolMag += take; + } + } else { + int need = 30 - p->rifleMag; + if (need > 0 && p->rifleAmmo > 0) { + int take = (p->rifleAmmo < need) ? p->rifleAmmo : need; + p->rifleAmmo -= take; + p->rifleMag += take; + } + } + } + } + } + for (int i = 0; i < MAX_PLAYERS; i++) { Player *p = &players[i]; if (!p->inUse || !p->alive) @@ -847,6 +871,7 @@ int main(void) { ps->pistolAmmo = (int16_t)players[i].pistolAmmo; ps->rifleAmmo = (int16_t)players[i].rifleAmmo; ps->medkits = (int16_t)players[i].medkits; + ps->reloadTimeLeft = (int16_t)(players[i].reloadTimer * 1000.0f); strncpy(ps->username, players[i].username, USERNAME_MAX - 1); } broadcast(sock, players, &snap, (int)sizeof(snap));