News

Release updates and server news. Newest first.

v1.0.0 2026-06-01

PATCH. Reverts 9830689 regression: nextNpcId was incorrectly lowered to 1000 (for CTF OOM fix), causing NPC IDs to collide with user units (1001, 1002) — player appeared on enemy team in Last Stand. Fix: nextNpcId stays 100000 for NPCs; CTF uses its own hardcoded flag IDs (7203, 7204 from PCAP). AllocateNpcId removed from GameInstance.

v0.26.0 2026-03-16

MINOR. Path graphs can now be overlaid on the 3D Map Viewer for realistic visualization. Gameserver adds map_name to path graph CSV; Map Viewer accepts optional pathgraph overlay; admin Path Graphs tab has "View on map" with overlay modal (darkened background, close button).

v0.25.0 2026-03-16

MINOR. MinIO extracted to dedicated submodule (git@gitlab.com:axedsteel/minio.git) with Config and baked-models self-contained. Server sanitised: removed GeoMapVisualizer (migrated to graphworker), Config (moved to minio), old Dockerfile, docker-compose, start.sh. Mesh Viewer UI: full-width search/tree, folder icons instead of arrows, load on tab switch.

v0.24.3 2026-03-16

PATCH. Mesh Viewer in admin Manage: dropdown selector for 3D models (glb/gltf) from MinIO, same UI pattern as Map Viewer. All Exteel meshes (Animations/*.ukx, StaticMeshes/*.usx) exported via umodel and baked into MinIO image at `models/` prefix. No upload step required.

v0.24.2 2026-03-16

PATCH. MinIO object storage with Config baked into a custom image; config-sync pulls to shared volume for gameserver. Map Viewer in admin Manage: dropdown selector from MinIO, full-page overlay with loading state, no file picker. Removed server/Config fallback and upload-config service.

v0.24.0 2026-03-16

MINOR. CTF is now fully playable end-to-end. Three issues fixed: flag bases were placed at wrong map positions (now use dedicated `*_ctf.spn` files per map with confirmed base coordinates); the top-of-screen capture HUD counter was not updating (now sends `0xBB S_CTF_CAPTURE_SCORE` after each capture); client OOM crash on match start caused by oversized flag unit IDs (NPC ID pool lowered from 100000 to 1000). `0x54` flag info packet corrected with proper team encoding per flag entry.

v0.23.0 2026-03-15

MINOR. Capture the Flag game mode wired up end-to-end (balanced team assignment, split spawns, flag pickup/capture/drop mechanics, 0xB9/0x3D packet support). `#dumpmech <name>` command (all users) exports current mech loadout to infra-redis; profile page "Loadout Exports" tab lets players download/delete JSON exports. Last Stand admin tools: `#skipstage` (cycle stage 0–10 with 40s countdown in LS_TEST/LS_SUSPEND), `#lsinit [next]` (replay or step-through match-start packet sequence). Admin panel health check improved (2-consecutive-failure threshold, data refetch without full reload, parallel server status fetch). New documentation: NPC encyclopedia with reference images, CTF packet analysis, LS full match wave/spawn analysis.

v0.22.9 2026-03-15

PATCH. Base destruction now triggers defeat-base (footer[0]=1) instead of defeat-life (footer[0]=2). Client-tested correct. Documented all match-end behaviours: Victory (0), base destroyed (1), defeat-life (2 reserved for future limited lives). Updated all Last Stand docs, engine protocol reference, exteel-status.

v0.22.8 2026-03-15

PATCH. Corrected 0x50 footer[0] mapping (client-tested): 0=victory, 1=defeat-base, 2=defeat-life. Victory was incorrectly using 1 (showed defeat-base). LastStand victory path now uses 0; base kill uses 2. Added `#end victory|defeat|defeat-life` admin command to trigger each end-screen combination directly. Match end packet documentation (GAME_MODES_LAST_STAND_MATCH_END_PACKETS.md) and debug logging.

v0.22.3 2026-03-15

PATCH. Documentation updates: Last Stand mechanics (4 waves: soldier, shooter, soldier, miniboss+drone), end-to-end investigation, constants, NPC spawn presets; analysis patching guide and engine protocol reference fixes; INDEX and CLIENT updates. client-builder: README rewrite (patch/rehash workflow, LIEF, l2encdec), new l2encdec/README for Exteel-specific usage. Server: LastStand.cs comment fix (wave 3 gunner→soldier). Project rule: TODO and Last Stand mode description updates.

vv0.22.2 2026-03-15

PATCH. developer.dll now fully implements the original spec. Added: `CClientSocket::Connect/InitSocket/Reconnect` inline hooks with proper trampoline (prologue-aware length disassembly, `VirtualAlloc` executable stub); server address override reads `[Server] ServerAddr/ServerPort` from `developer.ini` and is applied at connect time. `CClientSocket::OnUserNetmessage/OnUserConnect/OnDisconnected` connection lifecycle hooks (disabled by default). `UGUIController::eventNotifyLevelChange` and `NativeMessage` GUI hooks (disabled by default). `ws2_32!connect` and `WSAConnect` IAT hooks with address override (disabled by default). `[Log] LogCategories` filter — comma-separated category whitelist, empty = log all. Fixed inline hook trampoline: previous version stored the patched address as the original function pointer (infinite recursion → stack overflow). New trampoline correctly copies N bytes covering complete instructions (measured with a minimal x86 length disassembler), appends a 5-byte JMP back to `addr+N`, and stores trampoline address as the original. Fixed `InitSocket` crash: first instruction is 6-byte `MOV EAX, FS:[0]`; copying only 5 bytes caused execution to land mid-instruction. Added `ws2_32.lib` to linker dependencies. Added `LogCategories` to INI, expanded all sections with new hook options.

vv0.22.1 2026-03-15

C→S packet capture working — multi-module IAT scan hooks GF.DLL and all send() callers

v0.22.0 2026-03-15

MINOR. Last Stand defeat now shows "DEFEAT - LIFE" end screen when base is destroyed. Fixed 0x50 packet footer[0] for defeat (value=2). Per-player result always 1 (sidx must be 0–1; -1/2 crash). Added `#kill base` admin command to immediately destroy the base for testing. Death penalty and scoring carry over from v0.21.4.

v0.21.5 2026-03-15

client-builder: LIEF patch in container, no Python on WSL

v0.21.4 2026-03-14

PATCH. Last Stand: base destroyed ends match with defeat (-2000 penalty). Death penalty allows negative scores, sends DefensiveBattleScore. GameEnd per-player result and footer. KillUnit only updates killer scores when killer is a player (Owner != null).

v0.21.3 2026-03-14

Last Stand dev summary: detailed packet payloads (0x5E, 0x7E, 0x50, etc.)

v0.21.2 2026-03-14

MINOR. Last Stand base/aerogate HP scaling 5k–20k by player×wave; rescale on join/leave. NPC attack cooldown 5×. Arena LS spawn points updated.

v0.21.1 2026-03-14

MINOR. Last Stand base/aerogate HP scaling 5k–20k by player×wave; rescale on join/leave. NPC attack cooldown 5×. Arena LS spawn points updated.

v0.21.0 2026-03-14

MINOR. Last Stand base/aerogate HP scaling 5k–20k by player×wave; rescale on join/leave. NPC attack cooldown 5×. Arena LS spawn points updated.

v0.20.17 2026-03-14

PATCH. NPC combat redesign: 160° FOV (facing-based), target priority (base > aggro > closest), LOS broken by geomesh or 1500u → forget combat, chase 600u, path smoothing (more waypoints, no boost), turn rate 180°/s.

v0.20.16 2026-03-14

NPC combat: 160° FOV, base>aggro>closest, LOS reset, path smoothing

v0.20.15 2026-03-14

NPC LOS (3D geo), aggro drop 650u, Gun LOS safety

v0.20.14 2026-03-14

PATCH. NPC collision with players and each other, path AI aggro (20% damage trigger, LOS/leash revert), player repulsion when aggrod on leash, movement speed scaling (miniboss 0.6, common 0.8).

v0.20.13 2026-03-14

PATCH. Last Stand wave system refinements: 4 waves (soldier, shooter, soldier, miniboss+drone), NPC health scaling (0.1x–0.7x player avg), wave 1 blue/0.75 scale, default orange paint, miniboss 1x HP with soldier model, PreserveMaxHealth for wave NPCs.

v0.20.12 2026-03-14

PATCH. Fix client crash (`sidx>=0 && sidx<2` in BattleManager.cpp:2652) when multiple players join Last Stand. Three fixes:

v0.20.11 2026-03-14

PATCH. Fix client crash (`sidx>=0 && sidx<2` in BattleManager.cpp:2652) when multiple players join Last Stand. Three fixes:

v0.20.10 2026-03-14

PATCH. Fix client crash (`sidx>=0 && sidx<2` in BattleManager.cpp:2652) when multiple players join Last Stand. Three fixes:

v0.20.9 2026-03-14

PATCH. Fix client crash (`sidx>=0 && sidx<2` in BattleManager.cpp:2652) when multiple players join Last Stand. Three fixes:

v0.20.8 2026-03-14

Fix multi-player Last Stand crash: ScoreUpdate per-user padding corrected (10→9 bytes), filtered multicasts during loading, packet ordering fix.

v0.20.7 2026-03-13

Last Stand: rollback join-in-progress guard, add GeoObjectsHp (0x6A) to match burst

v0.20.6 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.5 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.4 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.3 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.2 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.1 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.20.0 2026-03-13

MINOR. Deathmatch "waiting for other players" fix. Lobby room list: 0x19 RequestSearchGame handled, push on leave/OnEnter, 10s periodic, empty rooms report 1 player for grace-period rejoin.

v0.19.1 2026-03-13

PATCH. init-letsencrypt IP address cert support (6-day short-lived profile). Deploy-templates and LETSENCRYPT_STAGING docs. docker-compose.arm.yml for local ARM64 dev.

v0.19.0 2026-03-13

MINOR. Publish to registry and stack-deploy. SSL compose and init script in stack-deploy. Build cache optimizations.

v0.18.0 2026-03-13

MINOR. Publish to registry and stack-deploy. Includes v0.17.1 (Let's Encrypt HTTPS), v0.17.0 (graphworker in deploy).

v0.17.0 2026-03-13

MINOR. Graphworker added to publish flow and deploy templates. Path Graphs Display now works in stack-deploy deployments.

v0.16.0 2026-03-13

MINOR. Admin guide updated with new screenshots, Path Graphing 2s correction, fixed capture paths. Publish script corrected for documentation/admin/ paths.

v0.15.0 2026-03-13

Publish to registry and stack-deploy. Includes v0.14.1 (appstatus redaction, status page CSS, publish cache).

v0.14.1 2026-03-13

Appstatus API redacts database tables for non-admin. Status page public with card styling. Publish script uses date-stable BUILD_TIME for Docker cache.

v0.14.0 2026-03-13

Architecture docs for graphworker, path graphing. Path graph: 2s poll, admin display, pathgraphs API.

v0.13.5 2026-03-13

Graphworker extracted to own GitLab repo, added as submodule.

v0.13.4 2026-03-13

Path graph: 2s poll, hover coords, single-point segments, higher-res SVG. Admin: graphworker in Infrastructure, delete/display via data attributes.

v0.13.3 2026-03-13

GameCreated result=1 for template-not-found (Capital City LS, CTF maps) triggers client 'Map doesn't exist' message.

v0.13.2 2026-03-13

Last Stand: stacked waves, early clear bonus, game start guard. Enemy counts stack across waves; +200 bonus for early clear.

v0.13.1 2026-03-13

Last Stand: sync match-start burst, 40s grace, wave transition fix. No more 'waiting for other players' stuck.

v0.13.0 2026-03-13

Last Stand PVE playable end-to-end: waves, HUD, scoring, victory. Full PVE HUD, TAB scoreboard, 'Victory' message.