From fdb93391d8415c44c63c7e5b8bb3d934d82bfbde Mon Sep 17 00:00:00 2001 From: Masashi Date: Sat, 20 Dec 2025 18:30:21 +0530 Subject: [PATCH] GAME READY --- game/client | Bin 115344 -> 115344 bytes game/client.c | 8 +-- game/client.sui | 12 ++--- game/server | Bin 40816 -> 40816 bytes game/server.c | 133 ++++++++++++++++++++++++++---------------------- 5 files changed, 79 insertions(+), 74 deletions(-) diff --git a/game/client b/game/client index 47eb6d0e029e8ad36ec5ae33783c295f2a4a1a6a..ac7de855f3eeb8370b7ef925ecc50be96b5470db 100755 GIT binary patch delta 7272 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 delta 7288 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 Kih`45ZueghOd5Lt diff --git a/game/client.c b/game/client.c index 909617d..1f5a8f1 100644 --- a/game/client.c +++ b/game/client.c @@ -137,10 +137,10 @@ void suic_game_handle_input(struct GameState* game_state, float dt) { float move_x = 0.000000; float move_z = 0.000000; if (suic_is_key_down(65)) { - move_x = (((move_x)) + ((1.000000))); + move_x = (((move_x)) - ((1.000000))); } if (suic_is_key_down(68)) { - move_x = (((move_x)) - ((1.000000))); + move_x = (((move_x)) + ((1.000000))); } if (suic_is_key_down(87)) { move_z = (((move_z)) + ((1.000000))); @@ -359,13 +359,13 @@ int suic_main(void) { struct GameState game_state = ((struct GameState){ .cam_pos = ((struct SuicVec3){ .x = 0.000000, .y = 5.000000, .z = 6.000000 }), .yaw = 0.000000, .pitch = 0.000000, .prev_body_pos = ((struct SuicVec3){ .x = 0.000000, .y = 5.000000, .z = 6.000000 }), .current_target_body = ((struct SuicVec3){ .x = 0.000000, .y = 5.000000, .z = 6.000000 }), .interp_timer = 0.000000, .recoil_yaw = 0.000000, .recoil_pitch = 0.000000, .cross_spread = 0.000000, .scoped = false, .fire_cooldown = 0.000000, .shots_in_burst = 0, .burst_reset_timer = 0.000000, .client_tick = 0, .light = default_light }); int screen_w = 1280; int screen_h = 720; - suic_init_window(screen_w, screen_h, suic_alloc_array(NULL, sizeof(char), 21, "Voxel Shooter Client")); + suic_init_window(screen_w, screen_h, suic_alloc_array(NULL, sizeof(char), 5, "Soup")); suic_set_target_fps(120); suic_disable_cursor(); (game_state).light = suic_light_create_default(); char* username = suic_alloc_array(NULL, sizeof(char), 1, ""); suic_ui_username_prompt(username, SUIC_NET_USERNAME_MAX); - suic_game_init(((&game_state)), username, suic_alloc_array(NULL, sizeof(char), 10, "127.0.0.1"), 27015); + suic_game_init(((&game_state)), username, suic_alloc_array(NULL, sizeof(char), 15, "24.240.181.107"), 27015); while ((((suic_window_should_close())) == ((false)))) { float dt = suic_get_frame_time(); suic_game_handle_input(((&game_state)), dt); diff --git a/game/client.sui b/game/client.sui index d4133a1..ee51307 100644 --- a/game/client.sui +++ b/game/client.sui @@ -1,7 +1,3 @@ - -# Game Client in Suicmez -# Full rewrite of the C client using Suicmez language - struct SuicVec3 x: float, y: float, @@ -132,10 +128,10 @@ fn suic_game_handle_input(game_state: *GameState, dt: float) -> () do let mut move_x = 0.0 let mut move_z = 0.0 if is_key_down(65) do # KEY_A - move_x = move_x + 1.0 + move_x = move_x - 1.0 end if is_key_down(68) do # KEY_D - move_x = move_x - 1.0 + move_x = move_x + 1.0 end if is_key_down(87) do # KEY_W move_z = move_z + 1.0 @@ -424,7 +420,7 @@ fn main() -> int do let screen_w = 1280 let screen_h = 720 - init_window(screen_w, screen_h, "Voxel Shooter Client") + init_window(screen_w, screen_h, "Soup") defer close_window() set_target_fps(120) disable_cursor() @@ -436,7 +432,7 @@ fn main() -> int do suic_ui_username_prompt(username, SUIC_NET_USERNAME_MAX) # Initialize game subsystems - suic_game_init(&game_state, username, "127.0.0.1", 27015) + suic_game_init(&game_state, username, "24.240.181.107", 6769) # 24.240.181.107 -> nishi.boats # Main loop while window_should_close() == false do diff --git a/game/server b/game/server index 4663f836fb524c53b03a3d65a17550dfc65de860..5738c3c1ae5773de0077c79bb82612f4159aca62 100755 GIT binary patch delta 940 zcmZ`&O=uHA6rQ)){A`2ChSqlVU|K}+)C8o)>Y>f8f}!*v>LE6@H5zG~nkwj_NvhDM zLb2@w`-71bf5>s$ZSfBhK`&JhJryBBJ%|V%5-#V7n~ZL zBJIds8Q0_n)SW>%C}NN!UgaeplG`4vek>D z={wzL8sme>WGc=^FQqQWS$}erZxh3DBk!)WVafAi?@;S#vh@%fOq@;iUE{NWZEZn8 zBnQq3bQsawj<3D>jQP8P0o%_ngUVqu|E}y#D2&$kZ1 z+1n1r>}<%wYlLNX)xxHq^v7@eBDzFDG4y@rS~P0vch72bA&UCgftDcGivi}s!vEk1 zei;iu0e7YSP{j6hH{8IfbgxhMnF6P!tK!de2V}856s?z5L?s{c P=@!zhcc>aYdB5}`bGrZyYr@6)T%}8 z(H2h$MlCh-;XdX-@K?G`bm9aA+e>L1m9qcOOtUewHee9i^NuX<$ZGR|BOAb8SG@7Z z*I2aW;LF#C3+rd&*=Ivb;m2sX)?f~M-9gyF2~QAny1)ls0Us5I+q!^@IH3n&1xI~JyIm)+P4<9K zfTh&f~{|&Ib$x?=adC7opn2LRRT@PWIbaBJLhmuX66jW+$`qcH-vRI=wRDV+w-ecidUI2 zhJOPb3Klna8?fpUt8L4dXI%kYP9HMWsZ;}dV%@lt4nZE9Gp$g-u1r7N!KqB#%$c^p zinUse || !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; - } - } + // 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;