This is a macOS-first Godot 4 remake of Warblade 1.34. Version 0.1.0 contains
the complete 100-level authored campaign, cadence shops after every fourth
ordinary level through 96, and mode-three post-Warp shops after levels 33, 41,
49, 58, 66, 74, 83, 91, and 99. It includes the retail level-25, level-50,
level-75, and level-100 big bosses, the nine original base
weapons, four difficulty selections, the original solo mode, and
simultaneous two-player couch co-op. The retail alternating and Duel
two-player modes were removed from the product by user decision (2026-08-10);
their full implementation is preserved on the retail-two-player-modes
branch of the earlier development history, which is not part of this
repository.
Like retail, the campaign does not end at level 100: the credits roll as an
interstitial and play continues through level after level. Content cycles
through the authored set with the per-hundred horizontal mirror, and the
executable-proven progression step raises difficulty every hundred (enemy
health, alien projectile speed, simulation pace, and firing timers; see
docs/evidence/ENDLESS_PROGRESSION.md).
The level counter clamps at the retail maximum 3999.
Gameplay runs at a deterministic 60 Hz in a separate authoritative game-server
process, and the client never simulates. Solo, Time Trial, and couch co-op
play through a local server the client spawns on this Mac, so they work
offline. Online co-op is player-hosted: the host's Mac runs the same
authoritative server bound publicly, a second player joins it as seat 1, and
a small Rust lobby server (lobby-server/) provides nicknames, the lobby
list, global chat, NAT rendezvous, and talent storage. The lobby server never
relays game traffic. Rendering can run at the display refresh rate or at 60, 120,
144, 165, 240, 360, 480, or unlimited FPS. The logical game field remains
800×600 and is aspect-fitted at larger resolutions without exposing additional
play area.
Builds are published on GitHub Releases
(https://github.com/BarutSRB/Warblade-Enhanced/releases): one archive per
platform plus SHA256SUMS.txt. Only the macOS build is tested on real
hardware. The Windows and Linux builds come from the same source and export
pipeline but were not run on Windows or Linux machines before 0.1.0; the
Linux binary is smoke-tested headless in a container.
- macOS (one universal app for Apple silicon and Intel):
WarbladeRemake-<version>-macos-universal.zip. Unzip and moveWarblade.appanywhere. The app is ad-hoc signed and not notarized, so macOS blocks the first launch: open System Settings > Privacy & Security, find the message about Warblade near the bottom, click Open Anyway, and confirm. The Terminal equivalent isxattr -dr com.apple.quarantine /path/to/Warblade.app. - Windows 10/11 x86_64:
WarbladeRemake-<version>-windows-x86_64.zipholds a singleWarblade.exe. It is not code-signed, so SmartScreen shows "Windows protected your PC": click More info, then Run anyway. Windows Firewall asks for permission the first time you host an online game. - Linux x86_64 (glibc 2.28 or newer, X11 or Wayland through XWayland, OpenGL
3.3):
WarbladeRemake-<version>-linux-x86_64.tar.gzholds a singleWarblade.x86_64. Extract it,chmod +x Warblade.x86_64if your extractor dropped the bit, and run it.
Saves, profiles, settings, the talent cache, and the device identity live in
~/Library/Application Support/Warblade Remake (macOS),
%APPDATA%\Warblade Remake (Windows), or ~/.local/share/Warblade Remake
(Linux). Online play needs outbound TCP 7400 and UDP 7401 to the lobby
server; hosting also needs inbound UDP 42000 (the default HOST PORT), opened
by UPnP or a manual port forward. Release notes live in CHANGELOG.md.
- byte-identical decoding and encoding of all one hundred retail LVD files
- authored group/enemy counts, entry transforms, activation delays/staggers, formation targets, base health, path acceleration, explicit-Euler update order, zeroed segment transitions, thresholds, and supported retail opcodes
- the complete 14-file SWD catalog, global state-2 path selection, formation animation, timer-B launch gate, follower path copying, and the state-3 fixed-point path integrator, including first-five follower recruitment and selector/tail routing
- supplemental state-6 and mode-2 state-10 spawn values, motion, steering, strict wrapping/deactivation, timers, firing gates, animation, and the state-6 aimed type-6 projectile with its distinct atlas/HMA geometry
- state-4's dedicated roaming velocity/acceleration, strict wrap/turn rules, and state-1 terminal transitions that preserve integrated position instead of snapping or teleporting aliens into formation
- all nine weapon IDs, damage values, recursive projectile graphs, source rectangles, spawn offsets, special Fireballs/War.I.Plasma movement, and per-player projectile-object capacity
- edge-latched manual fire; strict absolute-deadline Auto Fire at 100 ms and Super Auto Fire at 25 ms
- the four-frame persistent Laser, its latched X/live player-Y collision column, and ordinary-enemy damage halving after each hit
- executable-backed Rocket Pack purchase/cap, release-armed secondary fire, weighted targeting, shared-pool HMA collision, ordinary/boss damage, and per-seat inventory; Alien Lock preserves captured aliens through Warp and does not change missile targeting
- the retail five-word unsigned PRNG, MSVCRT seed initialization, integer and float32 range wrappers, per-slot initialization draws, and serialized replay state
- the 100-slot common alien-projectile pool, persistent phase on slot reuse, strict countdown/bottom bounds, slot-order collision, type-6/type-7 broad metadata, and full 32×32 HMA tests
- exact Easy/Normal/Hard/Ace simulation scales, timer adjustments and floors, projectile speeds, player speed rules, and difficulty border selection
- original HMA pixel masks for the alien sheets used through level 100, both fighters, and all reachable player-projectile frames; texture alpha is not collision authority
- an explicit, collision-safe presentation manifest covering the original
rasters and raw HMA masks (533 texture-namespace entries spanning every
warblade.pacraster), all 12 extracted MP3 music tracks, 116 compatibility SFX entries, and the complete 103-clip rank-0 retail voice pack, with byte hashes and exact dimensions validated against the retail sources; presentation smoke validates every raw HMA's byte count, binary domain, and SHA-256 in source and exported builds; voice pack 2 (36 clips) is extracted alongside pack 1 for the user-selectable voice-pack feature - original fighter/enemy/projectile/background/border/pickup/thrust art in the live renderer, original HUD digits and fighter icons, and original title, pause, shop, and game-over art at native source geometry; accessible screen composition, controls, and timing around those bitmaps are an explicit macOS modernization, and primitive gameplay art is no longer a runtime fallback
- executable-recovered alien-shot atlas cells, ten-frame fighter thrust, animated money/armour/EXTRA/time pickup rows, and the 13-frame small explosion sequence
- authoritative presentation events for firing, hits, destruction, armour, pickups, respawns, level flow, and purchases, consumed once by pooled effects and positional audio
- fighter banking, three-total-fighter start, five-fighter cap, speed and projectile-capacity shop limits, and alien-projectile Armour protection
- executable-backed letter awards: per-collect scoring, the strict consecutive E-X-T-R-A and reversed A-R-T-X-E chains with their cap-filling and SUPER score variants, and the repeating all-collected award
- the executable-backed end-of-game GAME BONUSES tally (cash, cumulative rank bonus, perfects, hit percentage) on every terminal result and the pause-menu retire command
- all one hundred LVD scores, executable-backed group/cohort rewards, falling-bonus selection/drop physics, all 37 outer bonus dispatches, Freeze, the tapered 90-pixel Scoop field with two captive wingmen and visible overflow escape, final-kill rockets, death/respawn deadlines, and watchdog diagnostics; the explicit production-pixel route-assist campaigns prove that no level resolves through the watchdog
- Warp progression starting at
3.0 / 8, the 100+200+100-update mode-13 sequence, bonus-type-15's four skip passes that stop at special level 4, and level-4 completion entering the full Warp before either the first shop or level-5 Get Ready - the first-five mode-16 Warp-malfunction path: four recovered malfunction resource files, exact shared-RNG selection/spawn ordering, 64-pixel state-6 enemies, six-color falling gems, rank-color accumulation, and Super Auto Fire completion
- executable-backed Memory Station, Meteor Storm, and terminal Gem Drop controllers, including their retail board/slot state, RNG draw order, scoring and reward tables, deadlines, success/failure transitions, original art, music, and announcements
- the recurring level-8/16/24/33/41/49/58/66/74/83/91/99 mode-three controller's independent per-player hit ownership, reveal rewards, shared perfect-chain progression/reset, result timing, Warp, and shop handoff
- exact rank-0 voice composition and padding for profile promotions 1–20
- the executable-backed six-sheet level-25 boss controller, with authoritative stage/health/part snapshots, exact HMA collisions, rewards, music ownership, defeat sequencing, and a level-26 bridge when the configured boundary extends past 25
- the shared executable-backed state-13 controller for the six-sheet level-50,
level-75, and level-100 encounters, with exact collision, projectile, reward,
and defeat contracts; level 50 binds its opcode-3
alien_big2_*path, level 75 bindsalien_big3_*, and mirrored level 100 binds the opcode-6 terminalalien_big4_*path - mixed-resource authored groups through level 100, all late supplemental
animations, authored mode 6, level-80 group mode 3, and level-94 opcode 2;
the
stars1/stars2/stars3/stars4retail background selector; cadence shops through level 96; boss handoffs at 25, 50, and 75; and the level-100 ending/credits interstitial with endless continuation past level 100 - shared party progression (lives, score, money, loadout, upgrades) across both simultaneous co-op seats
- the first shop's item IDs, names, prices, rejection rules, weapon effects, Extra Time overshoot, six-bit Rank Marker reward, and non-upgrade Game Secret selection
- inclusive 70/80/90 accuracy gates for shop items 18–20 and profile-v4 above-level-25 best-hit persistence plus the authoritative best level-100 score, without fabricating a level-25 sample
- keyboard/controller-focusable shop and pause controls, with authoritative purchase rejection feedback and no client-side shop-data fallback
- server-owned movement, collision, damage, lives, score, money, upgrades, shop transactions, RNG, pause, and level transitions
- Time Trial (retail match mode 6): its fifteen authored levels in file order with wrap, the 181,000 ms clock and the grouped-best 241,000 ms variant, the mode-6 rules (single seat, weapon 0, no shop/warp/bonus/rank/credits phase, no death loadout reset, no hurry-up ships), and the clock-expiry handoff into the ordinary GAME BONUSES tally and Time Trial hall of fame
- retail in-shop saved games in numbered slots, written by whichever side owns the authoritative state, restoring a shop boundary that stays bit-identical to the run that was never saved
- the hurry-up secret ships: a per-player deadline armed from the difficulty timed-effect interval, the state-9 mothership with its banner, voice line, hum, and parallax planet sweep, the state-12 money ship on every eighth wave, their traced hitboxes and scores, and the found-secrets they record
- authoritative gameplay remains fixed at 60 Hz, while the client interpolates complete snapshots at native display refresh or the selected render cap
- original raster art defaults to smooth high-resolution scaling, with an optional sharp-pixel mode; effects can use only the recovered core layer or restrained additive enhancement without changing authoritative gameplay
- integer fixed-point and rational sixth-tick arithmetic replace retail float32 at the network/replay boundary; this is deterministic but may differ at rare float32 comparison edges, whose deliberate v9 results are pinned by deterministic boundary vectors
- simultaneous couch co-op is a remake mode: both seats play at once with shared score, money, fighters, loadout, upgrades, and shop state, while keeping separate input, position, invulnerability, and live-projectile allowance; there is no friendly fire or player body collision
Classicco-op keeps the authored enemy health;Balancedapplies exactly 2× enemy health- runtime-required SFX retain executable-backed source/event bindings while bounded gain, concurrency, priority, loop, and pitch values are an explicit deterministic macOS mix policy, not a claim about the retail mixer
- the game server enforces the authoritative client/server contract on loopback and public binds alike; hosting is player-owned and the game token is not a trusted online service
- The retail two-player modes — alternating play and simultaneous Duel — were
removed from the product by user decision (2026-08-10). Their complete
traced implementation (independent progression, sequential shops,
pass-through opponent projectiles, the winner/draw result, and winner
fireworks) is preserved on the
retail-two-player-modesbranch of the earlier development history, outside this repository. Simultaneous co-op is the intentional remake modernization and the only two-player mode onmain; ending firework cadence/particle layout remains a deterministic presentation modernization. - Retail cursor/time/UI entropy is replaced by an explicit deterministic match seed. Fixed-point authority, server ownership, and high-refresh interpolation are preserved modernizations.
- Tracker-module (
.mus) playback is a permanent product non-goal. The exact extracted MP3 set is the final music system; module files are not inspected, extracted, converted, emulated, implemented, or scheduled. - Trusted online hosting remains a separate program rather than a defect in the macOS product; online co-op ships player-hosted with the lobby server. Cross-platform delivery is partial from 0.1.0: Windows and Linux builds ship unsigned and without platform QA on real hardware (row I02). Time Trial (retail match mode 6) ships with the game.
- The complete secret-ship family is implemented: the hurry-up mothership and
money ship (G19) and the money-sucker and guard ships (G20) share the traced
death dispatcher, and both rows are closed in
docs/GAP_MATRIX.md. - Source fields without a reachable runtime consumer remain lossless, evidence-only bytes and never receive invented semantics.
The complete six-category closure ledger is in
docs/GAP_MATRIX.md.
- macOS with Godot 4.7.2 stable reachable as
godoton the PATH (make GODOT=/path/to/godot ...overrides it) and the official 4.7.2 export templates for macOS (Universal 2), Windows x86_64, and Linux x86_64 under~/Library/Application Support/Godot/export_templates/4.7.2.stable/for the export targets (see "Export") - optional, for
make export-linux-smoke: Docker through colima with Rosetta (colima start --vz-rosetta) to run the Linux build headless in a linux/amd64 container - Python 3 for the tooling and tests
- a retail Warblade 1.34 installation at
Game/(Game/warblade.exe,Game/data/warblade.pac); it is not part of this repository and git ignores it. A clone needs it once to rebuild the excluded assets and content tables (see "Repository contents and rights"), and the extraction, evidence, and fidelity targets read it directly. - only for deploying the lobby server: rustup's stable toolchain with the
x86_64-unknown-linux-musltarget,cargo-zigbuild, and zig from Homebrew
All make targets run from the repository root.
make runSolo, Time Trial, and couch co-op start a local game server — the same
authoritative server binary, headless and bound to 127.0.0.1 — and need no
network. The client sends the HELLO match request plus input/shop/ready/pause
commands and renders authoritative snapshots; it does not advance the
simulation.
START → HOST 2 PLAYER CO-OP (ONLINE) binds the same server publicly on the HOST PORT from SETTINGS (UDP 42000 by default), lists the game on the lobby server, and opens a waiting room with party chat. START → JOIN ONLINE GAME shows the listed games; joining introduces the two Macs through the lobby server's UDP rendezvous (hole punching, plus UPnP on the host's router when available). CONNECT TO HOST joins by address, port, and token instead, for LAN play or a manually forwarded port. The first online action asks for a nickname; the lobby address and ports live under SETTINGS → LOBBY SERVER, and CHAT on the title bar is the global room. macOS may ask once whether the game may accept incoming connections and find devices on the local network; both are needed to host.
The lobby server is lobby-server/ (Rust, SQLite):
make lobby-runruns it on 127.0.0.1:7400 (WebSocket) and 7401 (UDP) with a local
database; make run-a and make run-b start two clients with separate
identities on this Mac for a host/join smoke. The game defaults to the live
server at 68.183.194.133:7400 (UDP 7401); point a profile at a local
server by entering 127.0.0.1 under SETTINGS → LOBBY SERVER.
make lobby-deploy cross-builds a static Linux binary on rustup's stable
toolchain (one-time cargo install --locked cargo-zigbuild and rustup target add x86_64-unknown-linux-musl --toolchain stable) and installs it on
the droplet as the warblade-lobby systemd service (DROPLET defaults to
root@68.183.194.133). The first deploy writes /etc/warblade-lobby/env
with a random admin token; read it with ssh root@68.183.194.133 cat /etc/warblade-lobby/env. Run lobby-server/deploy/ufw.sh once on the
droplet to open 7400/tcp and 7401/udp (it only adds rules). Nightly SQLite
backups land in /var/backups/warblade-lobby (14 days), and make lobby-admin opens the owner statistics page through an ssh tunnel.
There are no passwords or logins. On first launch the game creates a random
32-byte device key in user://identity.json, and the lobby server stores only
its SHA-256 plus the nickname bound to it; deleting that file abandons the
identity, and the owner can reset an account's key from the admin page. The
server keeps nicknames, talent points and purchased nodes, the last public IP
seen per account, the global chat log (pruned hourly to the newest 5000
messages), and the self-reported match records that earn talent credits. It
never sees or relays game traffic: the host's Mac runs the match and relays
party chat. Talents are cached in user://talent_cache.json so solo and
couch play work offline, and the --profile-suffix=<tag> launch flag keeps
separate identity, cache, and settings files for running two instances on
one Mac (make run-a, make run-b).
Controls:
- Player 1:
A/D,Space - Player 1 secondary ordnance:
Q - Player 2: left / right arrows,
Enter - Pause/resume:
PorEscape - Controllers: first connected controller for player 1, second for player 2
make verifyThis runs:
- the enhanced parser's lossless LVD tests
- asset/hash/provenance validation
- deterministic presentation-manifest regeneration plus a Godot resource-load smoke for every declared raster, music track, and SFX
- all one hundred LVD round-trip tests
- SWD decode/runtime-content round-trip tests
- weapon-runtime evidence regeneration tests
- sprite-atlas/HMA and difficulty-rule extraction tests
- deterministic simulation and pixel-mask collision tests
- executable-contract and deterministic controller tests for levels 6–100, all four bosses, Memory Station, Meteor Storm, and the final credits gate
- protocol/authority tests
- the gap-matrix language contract and two-run level-100 frame-hash replay matrix for solo and co-op; these full-route runs use shipped pixel/HMA collision with an explicit bounded combat-resource assist recorded in every replay, while focused tests cover production starting loadout, economy, rockets, and fighter depletion
- client/layout tests
- lobby server unit tests, the Python lobby smoke, lobby client and transport tests, NAT traversal mechanics, the host/join loopback test, and the sidecar/two-client integration tests
Targets that read the retail executable or warblade.pac need the Game/
installation and fail with a clear message without it; the simulation,
network, lobby, and client suites run standalone.
make harnessThe harness starts one authoritative co-op server and two independent client processes, one per seat. Couch co-op in the normal menu instead authenticates one local peer for both seats.
make release-buildrelease-build runs the fast release gates (make release-gates: version,
contract, gap-language, tool, parse, protocol, client, and packaged-smoke
checks that need no retail installation) and then make release-artifacts,
which produces:
build/Warblade.appandbuild/WarbladeServer.app(macOS, Universal 2, ad-hoc signed)build/windows/Warblade.exe(Windows x86_64, PCK embedded, unsigned)build/linux/Warblade.x86_64(Linux x86_64, PCK embedded)dist/WarbladeRemake-<version>-macos-universal.zip,dist/WarbladeRemake-<version>-windows-x86_64.zip,dist/WarbladeRemake-<version>-linux-x86_64.tar.gz,dist/SHA256SUMS.txt, anddist/RELEASE_NOTES.md(the matchingCHANGELOG.mdsection)
The macOS export keeps its gates: both signatures are verified strictly, the
packaged client and server boot against the default endless (retail-clamp
3999) boundary and representative explicit compatibility boundaries, the
packaged client rejects level 4000 before spawning its sidecar, and every
declared presentation resource loads from the exported PCK. The Windows and
Linux binaries are checked by tools/export_artifact_verify.py (PE32+/x86_64
or ELF64/x86-64 headers, the embedded Godot 4.7.2 PCK trailer, and the Windows
version resource), and make export-linux-smoke runs the Linux binary's
presentation and packaged-client smokes headless in a linux/amd64 Docker
container. Nothing here launches the Windows build; that needs a Windows
machine. make export-release is the same artifact chain behind the full
make verify gate for a checkout that has the retail Game/ installation.
Publishing: make release-publish tags v<version> on the current main
commit, pushes it, and creates a draft GitHub pre-release with the four
dist/ files; make release-finalize publishes the draft;
make release-rollback CONFIRM=yes deletes the release and the tag again.
Version 0.1.0 defaults to content version 12 and an endless match bounded only
by the retail level clamp 3999. Any explicit boundary from 1 through 3999
remains supported. Earlier boundaries use the existing generic result flow;
bosses at 25, 50, and 75 continue exactly once when the configured boundary
extends beyond them. On the default route the level-100 boss leads into the
recovered 13-image ending/credits sequence as an interstitial — the
authoritative score is recorded as the profile's level-100 milestone — and
play continues at level 101 with the per-hundred difficulty escalation.
Bounded matches ending exactly at level 100 keep the terminal credits route
with ALL 100 LEVELS CLEARED.
Releases are tagged vX.Y.Z and published on GitHub Releases with
per-platform archives and SHA-256 sums (see CHANGELOG.md); the retail
extraction history and evidence reports remain local.
The primary retail decoder is Parser/scripts/lvd_lossless.py; the
presentation inventory and validation parser is
Parser/scripts/warblade_presentation.py.
The older parser/editor workflow remains available but its friendly LVD field
names are marked legacy and unverified. Recovered executable addresses, exact
hashes, claim-level confidence, asset provenance, and evidence-only raw fields are under
docs/evidence.
Original work in this repository: src/, scenes/, tests/, tools/,
Parser/scripts/, lobby-server/, content/talents.json, the design
documents under docs/, and the AI-generated replacement art under
assets/packs/.
Retail-derived material is never committed: assets/original/ (rasters,
music, samples, voice packs, level and path files copied from the retail
warblade.pac), assets/generated/, the generated content/*.json tables
and content/lvd_decoded/ (decoded from the retail executable and level
files), Parser/Reports/, and the machine-readable extraction reports under
docs/evidence/. .gitignore excludes them, so a clone holds the code, the
design documents, and content/talents.json only. Warblade and those assets
remain the property of the original game's author. The compiled builds on
GitHub Releases embed that material under the authorization from the original
author recorded in export_presets.cfg (application/copyright); it is still
never committed or published as loose files. The rights boundary is spelled
out in docs/evidence/README.md and row N04 of
docs/GAP_MATRIX.md. To run the game from a
clone, place your own retail Warblade 1.34 installation in Game/ and
rebuild the excluded files with the tools described under "Reproduce and
validate" in docs/evidence/README.md:
tools/extract_original_assets.py restores assets/original/ and the
tools/*_extract.py scripts regenerate content/. The lobby server builds
and runs on its own without any of that.
Nothing in the tree grants access to the lobby server. The admin token exists
only on the droplet in /etc/warblade-lobby/env (mode 600), deploy access is
an SSH key in ~/.ssh on the deploying Mac, and the repository holds only
placeholders: lobby-server/deploy/env.example and the loopback-only
development token in the Makefile. The signing and notarization fields in
export_presets.cfg are empty. .gitignore refuses the retail installation
in Game/, export_credentials.cfg, and *.db files; never commit a filled
env file or SSH keys.
The architecture keeps the server-authoritative contract: clients cannot
submit positions, damage, rewards, inventory, or level state, and the match
itself is negotiated through the normalized HELLO contract. Hosting is
player-owned: the host's Mac runs the authoritative server for its party, and
whoever holds the game token controls that match. There is no anti-cheat, and
the lobby server trusts what clients report (match results, talent credits).
The lobby link itself is plain ws:// in this release, so nicknames, chat,
and the device key travel in cleartext; TLS through a reverse proxy is a
follow-up once the server has a DNS name.
Trusted online hosting remains an independently bounded program.
Cross-platform delivery is partial: 0.1.0 ships Windows and Linux builds,
while signing, input certification, and platform QA on real hardware remain a
separate program; neither is a gap in the supported macOS release.