Repository navigation
Sparta v0.3.0
What's Changed
- test(selection): isolate form-up-cycle tests from persisted settings.cfg (#365) by @dem-extra1 in #408
- docs(demo): add the deferred Walk advance menu screenshot (#341) by @dem-extra1 in #410
- docs(memory): record NSIS OutFile + tag-rerelease gotchas by @d-morrison in #407
- feat(hud): semi-translucent distance legend (map scale bar) (#364) by @dem-extra1 in #411
- fix(hud): disable form-up cycle checkbox for the current default (#345) by @dem-extra1 in #409
- chore(demo): per-PR demo manifest filenames to stop demo.json merge conflicts (#416) by @dem-extra1 in #417
- Upgrade engine target from Godot 4.6.x to Godot 4.7 by @dem-extra1 in #420
- feat(hud): add a keyboard shortcuts overlay (#389) by @dem-extra1 in #418
- docs(claude): note the var name / Node.name shadow gotcha by @dem-extra1 in #422
- docs(memory): record GUT-4.7 doubler gotcha and CLAUDE.md citation check by @dem-extra1 in #421
- feat(orders): label each order line with the metric distance to its target by @dem-extra1 in #423
- feat(render): compact directional marks for spearmen/archers (no striping) by @dem-extra1 in #424
- feat(demo): interpolate the recorder camera between keyframes by @dem-extra1 in #425
- docs(claude): note .gd.uid tracking and class_name import gotcha by @dem-extra1 in #426
- docs: refresh individual-collision status (phase 4 melee is authoritative) by @dem-extra1 in #430
- Add GDScript test coverage with Codecov upload by @dem-extra1 in #433
- feat(combat): ranged casualties kill specific soldiers in the health pool (#164) by @dem-extra1 in #431
- docs: note that push_error() does not set a non-zero exit code by @dem-extra1 in #437
- feat(combat): projectile field — volleys fly and land with travel time (#435 slice 1) by @dem-extra1 in #439
- docs(claude): note soldier body arrays are parent-local (frame gotcha) by @dem-extra1 in #438
- fix(formation): scale mark size and spacing to real-world metrics (#415) by @dem-extra1 in #442
- ci(coverage): fail the job on a Codecov upload error by @d-morrison in #443
- feat(movement): independent per-type walk/jog/sprint speeds, scaled by panoply weight (#445) by @dem-extra1 in #449
- feat(formation): open/close order density changes (#374) by @dem-extra1 in #452
- feat(movement): realistic accel/decel ramp and speed-tapered turn rate (#446) by @dem-extra1 in #454
- feat(render): show per-soldier facing at figure LOD via a facing pip (#399) by @dem-extra1 in #459
- feat(formation): historically-grounded rank-closing after casualties by @dem-extra1 in #471
- Maneuver speeds: cap backward-walking soldiers slower during reshapes by @dem-extra1 in #463
- feat(demo): stage a custom unit matchup via a scripted-input scenario field (#473) by @dem-extra1 in #478
- feat(maneuver): wheeling (circumductio, flank hinge pivot) by @dem-extra1 in #474
- feat(hud): toggleable unit-speed labels in the order overlay by @dem-extra1 in #462
- feat(combat): cycle-charge order stance (caracole for cavalry) by @dem-extra1 in #472
- feat(combat): anti-cavalry square (orbis / schiltron) all-around stance by @dem-extra1 in #487
- feat(demo): render scripted-input demo frames to PNG for visual verification by @dem-extra1 in #492
- feat(maneuver): file doubling -- duplicatio (depth) & explicatio (frontage) (#373) by @dem-extra1 in #466
- feat(formations): shielded close order -- shield wall & testudo by @dem-extra1 in #485
- feat(demo): dump machine-readable game-state at demo ticks for AI verification (#500) by @dem-extra1 in #501
- Engage/attack re-facing: turn in place to the target (#402) by @dem-extra1 in #476
- Routing units stay on-field, recover morale, and can rally by @dem-extra1 in #460
- Arrow-key nudge maneuvers: side-step and back-step the selection (#396) by @dem-extra1 in #469
- fix(battle): a team's last unit can rally instead of instantly losing (#493) by @dem-extra1 in #495
- feat(render): testudo overhead-cover & shield-wall visuals (#486) by @dem-extra1 in #503
- test: fix coverage-instrumentation timing flake in scenario tests (#508) by @dem-extra1 in #511
- ci: post machine-readable game-state transcript to PRs alongside GIF/MP4 (#506) by @dem-extra1 in #507
- docs(memories): migrate local Sparta memories into the repo and load them via CLAUDE.md by @dem-extra1 in #514
- Move to rear: about-face (conversio) then march, not a centre pivot by @dem-extra1 in #465
- feat(combat): purge the slot spring -- soldier bodies arrive under real bounded force (#448) by @dem-extra1 in #497
- fix(orders): apply each order exactly once -- fixes about-face centre-pivot (#517, #518) by @dem-extra1 in #519
- ci: gate demo/transcript freshness against PR HEAD (#542) by @dem-extra1 in #544
- docs: unified orders-queue design + phased plan (#516) by @dem-extra1 in #527
- docs: add verify-via-state-dump skill (state-transcript behavior verification) by @dem-extra1 in #545
- docs(plan): add bottom-up emergence over top-down heuristics as a design pillar by @dem-extra1 in #548
- feat(perf): reference large-battle benchmark + CI regression check (#549) by @dem-extra1 in #551
- docs(plan): add compositionality as a design pillar by @dem-extra1 in #554
- docs: multi-resolution (LOD) simulation design for Cannae-scale battles (#550) by @dem-extra1 in #561
- feat(orders): Order type + queue + current_order, apply-once (#522, phase 1 of #516) by @dem-extra1 in #555
- docs(plan): bump Last-updated date after the bottom-up emergence pillar (#548) by @dem-extra1 in #553
- fix(movement): preserve current_speed across a re-order while actively moving (#521) by @dem-extra1 in #546
- fix(maneuver): about-face holds each soldier's own position, no identity swap (#541) by @dem-extra1 in #543
- docs(design): soldier weapon/shield loadout — type vs instance split by @dem-extra1 in #540
- feat(formations): restructure block geometry per formation, not just combat multipliers (#530) by @dem-extra1 in #534
- balance(morale): scale rout threshold by discipline, not near-immunity (#529) by @dem-extra1 in #533
- fix(demo): include ROUTING units in the state transcript (#528) by @dem-extra1 in #567
- feat(lod): aggregate far-tier formation data model, representational only (#556) by @dem-extra1 in #568
- fix(movement): brake to a stop at move destinations instead of snapping current_speed to 0 (#520) by @dem-extra1 in #531
- feat(maneuver): standalone reform phase refills the new front rank after an about-face (#552) by @dem-extra1 in #565
- feat(loadout): Weapon/Shield type classes + interned registry + per-soldier id arrays (#536) by @dem-extra1 in #566
- docs(design): chain-of-command battle AI — hierarchy, orders-only actuation, perception seam (#498) by @dem-extra1 in #581
- docs(website): label + caption every figure and table via Quarto div syntax (#572) by @dem-extra1 in #573
- feat(tools): prevent and early-detect orphaned Godot processes (#562) by @dem-extra1 in #569
- feat(loadout): per-soldier shield hold-angle/state arrays (#537) by @dem-extra1 in #576
- feat(lod): far-tier statistical simulation rules — morale/casualty/position evolution (#557) by @dem-extra1 in #577
- fix(collision): bound knockback/separation impulses so soldiers stop flying across the screen by @dem-extra1 in #575
- docs(design): unified campaign layer - map, time, logistics, sagas, battle interface (#582) by @dem-extra1 in #583
- feat(orders): migrate movement maneuvers onto the Order queue (#523, phase 2 of #516) by @dem-extra1 in #578
- feat(lod): promotion/demotion tier transitions + determinism verification (#558) by @dem-extra1 in #589
- feat(orders): migrate transition orders, split relief, absorb waypoints (#524, phase 3 of #516) by @dem-extra1 in #592
- refactor(combat): strike-time reads resolve through the loadout registry ids (#571) by @dem-extra1 in #597
- feat(lod): state-transcript tier field + benchmark-driven threshold tuning (#559) by @dem-extra1 in #596
- docs(design): incorporate owner's campaign-design decisions (#582) by @dem-extra1 in #602
- fix(campaign): count still-routing units as survivors in the campaign result (#504) by @dem-extra1 in #595
- docs(combat): knockback clamp wording — per-strike cumulative clamp, not one post-sum clamp (#591) by @dem-extra1 in #594
- ci(demo): tick parsers degrade, not fail, on a malformed state/frames field (#512) by @dem-extra1 in #598
- ci: run GUT suite on push to main (#610) by @dem-extra1 in #611
- feat(orders): stance-order player gesture (in-place stance change + rank-relief toggle) by @dem-extra1 in #612
- feat(orders): phase 4 terminal conditions + guard vocabulary + ROE modes (#525) by @dem-extra1 in #613
- feat(lod): far-tier ranged/volley attrition rules (#579) by @dem-extra1 in #614
- docs(claude): each demo should be simple and focused; split multi-feature PRs by @dem-extra1 in #632
- feat(formation): distinct schiltron / orbis anti-cavalry stances by @dem-extra1 in #615
- feat(ai): unit leaders replace _run_enemy_ai with queue orders (#584, phase 1 of battle AI) by @dem-extra1 in #616
- fix(ci): fail check_test/GUT CI when a test script fails to parse by @dem-extra1 in #618
- fix(test): poll for wheel settle instead of a fixed frame count (#494) by @dem-extra1 in #619
- ci(demo): resolve the per-PR manifest against a live merge base (#564) by @dem-extra1 in #622
- docs(website): correct M2/M3 milestone status on the roadmap page (#599) by @dem-extra1 in #625
- fix(demo): insert the gameplay clip into the PR description, not just a comment by @dem-extra1 in #634
- fix(ci): restore the executable bit on upsert-pr-body-section.sh by @dem-extra1 in #640
- ci: add merge=union gitattribute for record-demos.sh's DEMOS array by @dem-extra1 in #637
- feat(lod): far-tier rout/rally and pursuit rules (#580) by @dem-extra1 in #617
- feat(render): shield-ring overlay for the hollow square (orbis/schiltron) by @dem-extra1 in #623
- fix(benchmark): stop shoot.wav AudioStreamWAV leak at process exit (#628) by @dem-extra1 in #644
- docs(website): fix stale Prioritized backlog section (#624) by @dem-extra1 in #646
- ums: bank two lessons from the wave-5 PR cleanup session by @dem-extra1 in #643
- feat: add forward nudge direction (#479) by @dem-extra1 in #645
- fix(formation): absorb large instant facing snaps into _formation_angle (#631) by @dem-extra1 in #647
- fix(test): drop issue-number reference from benchmark-runner test comment by @dem-extra1 in #649
- chore: bump .ai-config submodule pin (#650) by @dem-extra1 in #651
- docs: bank stub-review-retry identity-attribution lesson by @dem-extra1 in #652
- docs(website): sync architecture.qmd Collision roadmap checklist by @dem-extra1 in #655
- fix(battle): make Battle teardown null-safe and release all leaked statics by @dem-extra1 in #656
- docs: sync PLAN.md collision roadmap checklist with shipped items by @dem-extra1 in #659
- Audit: where would GDScript subclassing beat flag-based branching? by @dem-extra1 in #664
- fix(selection): average spacing for mixed-formation EQUAL_DEPTH form-up (#457) by @dem-extra1 in #662
- Add out-of-bounds retreat margin for routing units by @dem-extra1 in #654
- Engage re-facing: frontage-reshape variants (recreate old width / match target fronting) by @dem-extra1 in #672
- Fix "0.0 m/s" speed label during a wheel maneuver by @dem-extra1 in #666
- Use modifier keys for additional shortcuts by @dem-extra1 in #667
- Add Roman officer rank labels to units' HUD info panel by @dem-extra1 in #673
- feat(formation): contract frontage under heavy losses (close the ranks) by @dem-extra1 in #669
- fix(unit): countermarch reform keeps each soldier on its own flank by @dem-extra1 in #670
- Per-type backward-walk speed stat (deferred from #456) by @dem-extra1 in #663
- Remove hovering per-unit icons over entity glyphs by @dem-extra1 in #671
- feat(maneuver): explicatio right/left (asymmetric) variants (#464) by @dem-extra1 in #665
Full Changelog: v0.2.0...v0.3.0