Skip to content

Sparta v0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 19:02
· 651 commits to main since this release
8f4d230

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