From bb10fb88f0ba60d76c541f771172e34140f5e1a3 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Thu, 11 Jun 2026 10:35:06 +0300 Subject: [PATCH] various: upgrade Zig version Signed-off-by: NotAShelf Change-Id: Ia97044bd7d44c776f217f2223e35ae3b6a6a6964 --- build.zig | 48 ++++++++++++++++++++--------------------- build.zig.zon | 2 +- docs/README.md | 4 ++-- libs/combat/effects.zig | 12 +++++------ nix/package.nix | 1 + src/render.c | 13 +++++++++-- 6 files changed, 45 insertions(+), 35 deletions(-) diff --git a/build.zig b/build.zig index f819593..2a334b6 100644 --- a/build.zig +++ b/build.zig @@ -29,11 +29,11 @@ pub fn build(b: *std.Build) void { .link_libc = true, }), }); - rng_lib.addCSourceFiles(.{ + rng_lib.root_module.addCSourceFiles(.{ .files = &[_][]const u8{"libs/rng/rng.c"}, .flags = c_flags, }); - rng_lib.addIncludePath(b.path("libs/rng")); + rng_lib.root_module.addIncludePath(b.path("libs/rng")); // Map library const map_lib = b.addLibrary(.{ @@ -44,7 +44,7 @@ pub fn build(b: *std.Build) void { .link_libc = true, }), }); - map_lib.addCSourceFiles(.{ + map_lib.root_module.addCSourceFiles(.{ .files = &[_][]const u8{ "libs/map/map.c", "libs/map/utils.c", @@ -52,11 +52,11 @@ pub fn build(b: *std.Build) void { .flags = c_flags, }); // map.h includes common.h and settings.h which live in src/ - map_lib.addIncludePath(b.path("src")); + map_lib.root_module.addIncludePath(b.path("src")); // map.c includes rng/rng.h via libs/ root - map_lib.addIncludePath(b.path("libs")); + map_lib.root_module.addIncludePath(b.path("libs")); // utils.h is co-located with map.c - map_lib.addIncludePath(b.path("libs/map")); + map_lib.root_module.addIncludePath(b.path("libs/map")); // Tileset library const tileset_obj = b.addObject(.{ @@ -67,7 +67,7 @@ pub fn build(b: *std.Build) void { .link_libc = true, }), }); - tileset_obj.addCSourceFiles(.{ + tileset_obj.root_module.addCSourceFiles(.{ .files = &[_][]const u8{ "libs/tileset/tileset.c", "libs/tileset/tileset_paint.c", @@ -75,10 +75,10 @@ pub fn build(b: *std.Build) void { .flags = c_flags, }); // tileset.h includes settings.h which lives in src/ - tileset_obj.addIncludePath(b.path("src")); + tileset_obj.root_module.addIncludePath(b.path("src")); // tileset.c includes tileset.h which is co-located - tileset_obj.addIncludePath(b.path("libs/tileset")); - tileset_obj.linkSystemLibrary("raylib"); + tileset_obj.root_module.addIncludePath(b.path("libs/tileset")); + tileset_obj.root_module.linkSystemLibrary("raylib", .{}); // Zig combat library. This must be compiled as an object and linked // directly to bypassing the archive step, or it yields a corrupt @@ -93,8 +93,8 @@ pub fn build(b: *std.Build) void { }), }); // common.h and settings.h live in src/; rng.h exposed bare from libs/rng - combat_obj.addIncludePath(b.path("src")); - combat_obj.addIncludePath(b.path("libs/rng")); + combat_obj.root_module.addIncludePath(b.path("src")); + combat_obj.root_module.addIncludePath(b.path("libs/rng")); // C sources remaining in src/ const c_sources = [_][]const u8{ @@ -118,24 +118,24 @@ pub fn build(b: *std.Build) void { }), }); - exe.addCSourceFiles(.{ + exe.root_module.addCSourceFiles(.{ .files = &c_sources, .flags = c_flags, }); // src/ for own headers; libs/ so "rng/rng.h" and "map/map.h" resolve - exe.addIncludePath(b.path("src")); - exe.addIncludePath(b.path("libs")); + exe.root_module.addIncludePath(b.path("src")); + exe.root_module.addIncludePath(b.path("libs")); - exe.linkLibrary(rng_lib); - exe.linkLibrary(map_lib); - exe.addObject(tileset_obj); - exe.addObject(combat_obj); - exe.linkSystemLibrary("raylib"); - exe.linkSystemLibrary("m"); - exe.linkSystemLibrary("pthread"); - exe.linkSystemLibrary("dl"); - exe.linkSystemLibrary("rt"); + exe.root_module.linkLibrary(rng_lib); + exe.root_module.linkLibrary(map_lib); + exe.root_module.addObject(tileset_obj); + exe.root_module.addObject(combat_obj); + exe.root_module.linkSystemLibrary("raylib", .{}); + exe.root_module.linkSystemLibrary("m", .{}); + exe.root_module.linkSystemLibrary("pthread", .{}); + exe.root_module.linkSystemLibrary("dl", .{}); + exe.root_module.linkSystemLibrary("rt", .{}); b.installArtifact(exe); diff --git a/build.zig.zon b/build.zig.zon index 61fe03c..96295f2 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -28,7 +28,7 @@ // Tracks the earliest Zig version that the package considers to be a // supported use case. - .minimum_zig_version = "0.15.2", + .minimum_zig_version = "0.16.0", // This field is optional. // Each dependency must either provide a `url` and `hash`, or a `path`. diff --git a/docs/README.md b/docs/README.md index d9d9ba9..722da5e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,7 +28,7 @@ to be viable. For a semi-complete list of things that need to be done, see the Rogged is built on a relatively simple stack. It uses C99 for the main game logic, and Zig for the combat library. Besides `raylib` and `pkg-config`, you -only need the core Zig tooling. For now the required Zig version is 0.15.2, but +only need the core Zig tooling. For now the required Zig version is 0.16.0, but this might change in the future. Additionally, you will need `clang-format` and `just` for common development tasks in the case you plan to contribute. For building, Zig is enough. @@ -53,7 +53,7 @@ $ just dev ### Manual Build If you are allergic to good tooling and would rather use your system Zig, you -may simply invoke `zig build` after acquiring Zig 0.15.2. +may simply invoke `zig build` after acquiring Zig 0.16.0. ```sh # Full build diff --git a/libs/combat/effects.zig b/libs/combat/effects.zig index a665422..3e105b0 100644 --- a/libs/combat/effects.zig +++ b/libs/combat/effects.zig @@ -101,18 +101,18 @@ fn compact(effects: [*c]c.StatusEffect, count: [*c]c_int) void { count[0] = @intCast(write); } -fn tickOne(eff: *c.StatusEffect, hp: *c_int) c_int { - if (eff.duration <= 0) return 0; +fn tickOne(eff: [*c]c.StatusEffect, hp: [*c]c_int) c_int { + if (eff[0].duration <= 0) return 0; var dmg: c_int = 0; - switch (eff.type) { + switch (eff[0].type) { c.EFFECT_POISON, c.EFFECT_BLEED, c.EFFECT_BURN => { - dmg = eff.intensity; - hp.* -= dmg; + dmg = eff[0].intensity; + hp[0] -= dmg; }, else => {}, } - eff.duration -= 1; + eff[0].duration -= 1; return dmg; } diff --git a/nix/package.nix b/nix/package.nix index 0177a10..03498a3 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation { (s + /libs) (s + /src) (s + /build.zig) + (s + /build.zig.zon) ]; }; diff --git a/src/render.c b/src/render.c index 07b4d9c..5c627a1 100644 --- a/src/render.c +++ b/src/render.c @@ -240,6 +240,11 @@ void render_map(const Map *map, const Tileset *tileset) { Color stairs_color = color_lerp((Color){85, 80, 70, 255}, (Color){180, 160, 100, 255}, light_factor); Color door_color = color_lerp((Color){38, 34, 30, 255}, (Color){120, 92, 58, 255}, light_factor); Color door_handle_color = color_lerp((Color){42, 38, 32, 255}, (Color){145, 122, 82, 255}, light_factor); + int is_currently_lit = brightness > 0; + if (is_door && !is_currently_lit) { + door_color = (Color){30, 27, 24, 255}; + door_handle_color = (Color){34, 31, 27, 255}; + } switch (map->tiles[y][x]) { case TILE_WALL: @@ -299,11 +304,13 @@ void render_map(const Map *map, const Tileset *tileset) { int open_x = swing_to_left ? x * TILE_SIZE + 1 : x * TILE_SIZE + 13; int px = (int)(closed_x + (open_x - closed_x) * t); int alpha = (int)(255 * (1.0f - t * 0.45f)); + if (!is_currently_lit) + alpha = (int)(alpha * 0.55f); int width = (int)(2 + (1 - t)); // 2px closed, 1px open Color panel_color = door_color; panel_color.a = alpha; DrawRectangle(px, y * TILE_SIZE + 1, width, TILE_SIZE - 2, panel_color); - if (t < 0.5f && light_factor > 0.05f) { + if (t < 0.5f && is_currently_lit) { int hx = px + (swing_to_left ? -1 : width + 1); Color handle_color = door_handle_color; handle_color.a = alpha; @@ -324,11 +331,13 @@ void render_map(const Map *map, const Tileset *tileset) { int open_y = swing_up ? y * TILE_SIZE + 1 : y * TILE_SIZE + 13; int py = (int)(closed_y + (open_y - closed_y) * t); int alpha = (int)(255 * (1.0f - t * 0.45f)); + if (!is_currently_lit) + alpha = (int)(alpha * 0.55f); int height = (int)(2 + (1 - t)); // 2px closed, 1px open Color panel_color = door_color; panel_color.a = alpha; DrawRectangle(x * TILE_SIZE + 1, py, TILE_SIZE - 2, height, panel_color); - if (t < 0.5f && light_factor > 0.05f) { + if (t < 0.5f && is_currently_lit) { int hy = py + (swing_up ? -1 : height + 1); Color handle_color = door_handle_color; handle_color.a = alpha;