Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.51.0"
".": "1.52.0"
}
85 changes: 85 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Changelog

## [1.52.0](https://github.com/pythoninthegrasses/jumpnbump/compare/v1.51.0...v1.52.0) (2026-09-23)


### Features

* **abi:** implement core/abi.zig as the sole jnb_ ABI exporter (TASK-012.02) ([5638954](https://github.com/pythoninthegrasses/jumpnbump/commit/56389540fce92f2fafd6a427cc9938bf47d40ee4))
* **abi:** write include/jumpnbump.h with frozen-ABI discipline (TASK-012.01) ([1a3d48b](https://github.com/pythoninthegrasses/jumpnbump/commit/1a3d48b8b9bd956c5cf777c18766817fceabc692))
* **abi:** write the ABI conformance test suite (TASK-012.03) ([b5ffe22](https://github.com/pythoninthegrasses/jumpnbump/commit/b5ffe2240edacbc2c65c51c323d0edc4f25eaa12))
* **assets:** build the audio pipeline (TASK-013.03) ([277b9a1](https://github.com/pythoninthegrasses/jumpnbump/commit/277b9a142fe2064bfb03cbd66abad0c18d09d3b8))
* **assets:** build the level layer pipeline (TASK-013.02) ([1808325](https://github.com/pythoninthegrasses/jumpnbump/commit/1808325ffedd928cafd5727243156a5358675032))
* **assets:** build the sprite atlas pipeline (TASK-013.01) ([52a541a](https://github.com/pythoninthegrasses/jumpnbump/commit/52a541af2f551644772ec06e62d55a5d0aaeff62))
* **build:** add `task run` to build and launch the Godot game end-to-end ([9bc51c8](https://github.com/pythoninthegrasses/jumpnbump/commit/9bc51c8d941a5e5b17a2e90f3b6f665d577c79fa))
* **build:** add task submodules/deps meta task, add summary blocks ([fbf0cfc](https://github.com/pythoninthegrasses/jumpnbump/commit/fbf0cfc30223472a47f22ba305006cbb2910b643))
* **build:** port legacy Makefile build graph to Task ([8c96a94](https://github.com/pythoninthegrasses/jumpnbump/commit/8c96a94c5b49e64da76c8191d317cc949bd23f12))
* **build:** retire the SDL runtime path from the default check gate (TASK-015.05) ([7a2f779](https://github.com/pythoninthegrasses/jumpnbump/commit/7a2f7792669993d03db3f63fa536b33d6a7f26ce))
* **build:** wire every _install-* task into the deps meta task ([90e6f6c](https://github.com/pythoninthegrasses/jumpnbump/commit/90e6f6ce2d2f753ac2725216b6f062f9c1e6f7dc))
* **build:** wrap the GDExtension shim's compiler in ccache when available ([9111c27](https://github.com/pythoninthegrasses/jumpnbump/commit/9111c278d1589b98e63b5640f4cdeea07d7e9879))
* **ci:** add release-please and release automation, pin act via mise ([c6abc67](https://github.com/pythoninthegrasses/jumpnbump/commit/c6abc673a2d7a2ba77c774a9d2323ce41ba5cd24))
* **core,extension,game:** add runtime Zig ProTracker .mod player for custom-level music ([1c4c89e](https://github.com/pythoninthegrasses/jumpnbump/commit/1c4c89eb30c2d57f2ddfab5172c4489d2e47d300))
* **core,extension:** add runtime .dat asset decoding (TASK-016.01) ([dd1f83d](https://github.com/pythoninthegrasses/jumpnbump/commit/dd1f83d8529d18b4fc410576df49f716d7497575))
* **core:** add Tier-B differential-test harness to build.zig (TASK-008.04) ([50cf408](https://github.com/pythoninthegrasses/jumpnbump/commit/50cf408400092538b73eb70233ed95a4289dbc5d))
* **core:** close the core-purity gap the boundary check found (TASK-011.08) ([8a4dceb](https://github.com/pythoninthegrasses/jumpnbump/commit/8a4dcebbb2622bf1584987e3c850d2463202e4cc))
* **core:** extract fireworks.c into a renamed-C differential reference ([0fd6db2](https://github.com/pythoninthegrasses/jumpnbump/commit/0fd6db2b12651f11f931dd1f8c7d4edec539d6d6))
* **core:** port .dat archive reader/writer to Zig (TASK-010.01) ([790b177](https://github.com/pythoninthegrasses/jumpnbump/commit/790b17744825d8b5cc63fe977e24ff6572490f6c))
* **core:** port .gob sprite format reader/writer to Zig (TASK-010.02) ([340ba5c](https://github.com/pythoninthegrasses/jumpnbump/commit/340ba5c559906cc0d95eac953bfdd7a91ec2e670))
* **core:** port 8-bit PCX reader/writer to Zig (TASK-010.03) ([25c4263](https://github.com/pythoninthegrasses/jumpnbump/commit/25c426368972ea1539e6aed40b9356ce8a7c8481))
* **core:** port add_object/update_objects particle system to Zig (TASK-011.04) ([bdbfe92](https://github.com/pythoninthegrasses/jumpnbump/commit/bdbfe928758e694a7b13c6ef277b27412973024c))
* **core:** port collision_check/player_kill/bump scoring to Zig (TASK-011.03) ([3ea81f5](https://github.com/pythoninthegrasses/jumpnbump/commit/3ea81f5b6ad2555f7af018b876749155c084bdb1))
* **core:** port cpu_move bunny AI to Zig (TASK-011.05) ([5e31d04](https://github.com/pythoninthegrasses/jumpnbump/commit/5e31d048f21f54fc43b62928fb35f14e298c6656))
* **core:** port fireworks.c screensaver mode to Zig ([0a2da60](https://github.com/pythoninthegrasses/jumpnbump/commit/0a2da60a3873a2a6df5f0111329412cd3136557a))
* **core:** port game_loop into step()/pump() with an event stream (TASK-011.07) ([c48882d](https://github.com/pythoninthegrasses/jumpnbump/commit/c48882d459c636ef9e772247b8ad796e1cb754c5))
* **core:** port levelmap.txt parser to Zig (TASK-010.04) ([879da75](https://github.com/pythoninthegrasses/jumpnbump/commit/879da75488836294aa405f8e618cef8c87e3b7d7))
* **core:** port rnd()/fixed-point/world layout to Zig (TASK-011.01) ([#3](https://github.com/pythoninthegrasses/jumpnbump/issues/3)) ([03dbd96](https://github.com/pythoninthegrasses/jumpnbump/commit/03dbd96e7c2786444250fdb05e76508e836e1633))
* **core:** port steer_players/position_player physics to Zig (TASK-011.02) ([1b9b4d1](https://github.com/pythoninthegrasses/jumpnbump/commit/1b9b4d1419adec8af068bbd426193660f10cdba2))
* **core:** port update_flies fly swarm to Zig (TASK-011.06) ([eb75ce1](https://github.com/pythoninthegrasses/jumpnbump/commit/eb75ce11d1f14cbcc8ae24babcc0d65d2ef91600))
* **core:** rebuild jnbpack/jnbunpack/gobpack as Zig CLIs (TASK-010.05) ([980f70b](https://github.com/pythoninthegrasses/jumpnbump/commit/980f70b25e925bf8473bb9c81e378f5bb146e590))
* **extension:** add build-macos task for template_release GDExtension ([1c9d3a9](https://github.com/pythoninthegrasses/jumpnbump/commit/1c9d3a942198e615fa21e2ac22629a08f3630386))
* **extension:** build the godot-cpp GDExtension shim (TASK-012.04) ([53006ed](https://github.com/pythoninthegrasses/jumpnbump/commit/53006edc52e106ca02830bf3934e34b9076667cb))
* **extension:** package the macOS arm64 framework bundle and .gdextension file (TASK-012.05) ([b8b51c2](https://github.com/pythoninthegrasses/jumpnbump/commit/b8b51c2016c3c298ac5e694946a3dd186a951e0a))
* **game:** add app icon cropped from the rabbit sprite atlas ([6c2c230](https://github.com/pythoninthegrasses/jumpnbump/commit/6c2c230cadd6fe19c9b555de8706aaaeb126e63c))
* **game:** add headless import task for the release export pipeline ([74005db](https://github.com/pythoninthegrasses/jumpnbump/commit/74005db0a75e3eed718c21899ef33a3f3ccce1f2))
* **game:** add in-game custom level picker with drag-and-drop and validation ([ec7ce38](https://github.com/pythoninthegrasses/jumpnbump/commit/ec7ce38b79fd4340a65c81746b2a50834e30e57b))
* **game:** add persisted settings for sound/music/gore/flies/mirror/player count (TASK-015.03) ([d141a18](https://github.com/pythoninthegrasses/jumpnbump/commit/d141a18541321b6bb59d951f6489a5f0954751ba))
* **game:** bootstrap gdUnit4 and attempt Phase 1 corpus replay through the real GDExtension (TASK-014.07) ([78dbc3d](https://github.com/pythoninthegrasses/jumpnbump/commit/78dbc3dcf9f8757bdb33899ba89756b6608ed099))
* **game:** build InputRouter for 4 local players with remapping (TASK-015.01) ([caf4deb](https://github.com/pythoninthegrasses/jumpnbump/commit/caf4deb8bebb2a1f422d9293e69ad4be4e1a49fa))
* **game:** build level layers with integer scaling and letterboxing (TASK-014.04) ([2b82c4c](https://github.com/pythoninthegrasses/jumpnbump/commit/2b82c4cbc449daf5a54aaf1b5b31c07aa0aac6ff))
* **game:** build the scoreboard from font/number atlases (TASK-014.05) ([97a6100](https://github.com/pythoninthegrasses/jumpnbump/commit/97a610035b0fd884ca0dcbbbc1d3f77e46a87fb1))
* **game:** build the sprite renderer for rabbits, objects, flies, and gore (TASK-014.03) ([d78f976](https://github.com/pythoninthegrasses/jumpnbump/commit/d78f9764b40f0d5775a70321f1293a02bb4ac41a))
* **game:** build TickDriver and SimWorld wrapper over jnb_pump (TASK-014.02) ([fd16dcf](https://github.com/pythoninthegrasses/jumpnbump/commit/fd16dcfbe656e76b47e2834b2a179ece40bda0a4))
* **game:** complete the title-to-scores match flow with pause and clean quit (TASK-015.04) ([c0d56ce](https://github.com/pythoninthegrasses/jumpnbump/commit/c0d56ceef95afe2a966793c1545bde009cc1f64d))
* **game:** port the pixel menu to Godot Control nodes (TASK-015.02) ([377e871](https://github.com/pythoninthegrasses/jumpnbump/commit/377e8714f6c4fc7b233f4747b1c28555b29f4ed4))
* **game:** scaffold Godot project skeleton with four-layer boundary (TASK-014.01) ([ba1dd9e](https://github.com/pythoninthegrasses/jumpnbump/commit/ba1dd9e13e3c51370f02284cfe98025b945f0778))
* **game:** wire up audio buses, players, and the event coalescer (TASK-014.06) ([949036a](https://github.com/pythoninthegrasses/jumpnbump/commit/949036af0a916f94765addd1bba7aca64a135a21))
* **headless:** add deterministic headless mode to the C build (TASK-008.01) ([42a8ea5](https://github.com/pythoninthegrasses/jumpnbump/commit/42a8ea593ba69c795afcd764c29b81a7511ecf40))
* **headless:** add multiplayer/AI support and record checksummed corpus (TASK-008.03) ([8eb61d1](https://github.com/pythoninthegrasses/jumpnbump/commit/8eb61d1b637b20760b93d16bc95b61d689bfa931))
* **headless:** add per-frame canonical-state checksum (TASK-008.02) ([1e38b99](https://github.com/pythoninthegrasses/jumpnbump/commit/1e38b99d4f7c611574421e8f76700f549e285190))
* **release:** add macOS export, codesign, notarize, and DMG pipeline ([1c20a1e](https://github.com/pythoninthegrasses/jumpnbump/commit/1c20a1e9d8c24516611ae16a7f10b11ddbe5b3ee))
* **screensaver:** deliver fireworks mode as a native Swift/Metal screensaver (TASK-017.03) ([af6057b](https://github.com/pythoninthegrasses/jumpnbump/commit/af6057bf8938cb591f774b53ef0ca05f54316dcb))
* **screensaver:** scale fireworks framebuffer anisotropically at QHD ([9d9774f](https://github.com/pythoninthegrasses/jumpnbump/commit/9d9774ffea5cfd03257ed9ecd7dad908151e940f))
* **screensaver:** sign and notarize the fireworks .saver bundle (TASK-017.04) ([a68e1b7](https://github.com/pythoninthegrasses/jumpnbump/commit/a68e1b70b2400df642c14bf644082bc9a53b7697))
* **taskfile:** add DOSBox-X install task, fix Linux SDL 1.2 deps for dnf ([dcffd8f](https://github.com/pythoninthegrasses/jumpnbump/commit/dcffd8f53c2463f9613c14f2d6535830c5fd15bf))
* **taskfiles:** add zig.yml and act.yml wrappers ([16d4e29](https://github.com/pythoninthegrasses/jumpnbump/commit/16d4e29581eeb8060d979562bce5f136bf44a0a7))
* **tools:** enforce core purity boundary check (TASK-011.08) ([27e5d06](https://github.com/pythoninthegrasses/jumpnbump/commit/27e5d0696a2c21c3354d503ced464124425fe767))


### Bug Fixes

* **assets:** compare decoded pixels, not PNG bytes, in sprite/level checks ([2503838](https://github.com/pythoninthegrasses/jumpnbump/commit/2503838e64388ef6cd24d839f4c9f5584a9bc557))
* **build:** pin arch=arm64 for the macOS extension build, drop windows ([258955e](https://github.com/pythoninthegrasses/jumpnbump/commit/258955e9d330da718c686b37f7d44249715b7f49))
* **ci:** build the GDExtension shim before game:test and fix ar extraction bug ([27a8049](https://github.com/pythoninthegrasses/jumpnbump/commit/27a80498a17345b4758790eeb8d5b50d86b29651))
* **core:** expose player enable/position and level-object seeding on the ABI (TASK-018) ([92e4663](https://github.com/pythoninthegrasses/jumpnbump/commit/92e466321fd46de32c084aeaa9c2c3c1a986f2d2))
* **core:** find a working objcopy on macOS for localize_abi_symbols.sh ([991f236](https://github.com/pythoninthegrasses/jumpnbump/commit/991f23694b9f1aacc1b91b10b65e19bdc3cb9499))
* **core:** link steer.zig's and flies.zig's own Tier-A tests, fix rnd.zig wraparound and flies.zig seeding ([1d66d90](https://github.com/pythoninthegrasses/jumpnbump/commit/1d66d902b6ea9ef3fd677753f4be4ecae9aa9eae))
* **core:** replace libc rand() with a portable glibc-compatible rnd() ([86040d7](https://github.com/pythoninthegrasses/jumpnbump/commit/86040d7c3963f2c78fc3d86bcfd65ccc78be470c))
* **core:** stop steer.zig's weak world-storage fallback from colliding with real definitions ([90f96d5](https://github.com/pythoninthegrasses/jumpnbump/commit/90f96d5a3a76b032016a23978d1897250cffa952))
* **core:** underscore-prefix jnb_ symbol names for Mach-O objcopy matching ([64dd935](https://github.com/pythoninthegrasses/jumpnbump/commit/64dd935100837e90048ea9544b7bd8ccbd018b07))
* **extension:** route linux ar link through a response file ([5bc9eed](https://github.com/pythoninthegrasses/jumpnbump/commit/5bc9eedc18b3db763b13f7877b30bf6c2b5eee94))
* **game:** enable ETC2/ASTC texture import for arm64/universal macOS export ([fd37693](https://github.com/pythoninthegrasses/jumpnbump/commit/fd3769377229018298057b07dbcdeb16c838fd83))
* **game:** retry the flaky import crash and bootstrap gdUnit4 in CI ([af7975f](https://github.com/pythoninthegrasses/jumpnbump/commit/af7975f78419e629b27e8f814082812b9472ce20))
* **game:** work around a Godot editor race crashing headless import ([0776257](https://github.com/pythoninthegrasses/jumpnbump/commit/0776257f91045211cae36d51e7ac8fa13c44c07c))
* **taskfile:** run brew install dosbox-x non-interactively ([5fabce4](https://github.com/pythoninthegrasses/jumpnbump/commit/5fabce46fceeeb0a5598ca3356b8cf6f472ecc64))
* **taskfile:** use brew install --no-ask, not NONINTERACTIVE ([269c095](https://github.com/pythoninthegrasses/jumpnbump/commit/269c09548eb9882cd1e76c977813662e8d2b0c5e))
* **tools:** pin semver + exclude-newer for PEP 723 uv script deps ([7c3dde4](https://github.com/pythoninthegrasses/jumpnbump/commit/7c3dde411af018a6a42f89c74d0b691dd737386c))
Loading