Skip to content

Sparta v0.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Jul 23:11
· 455 commits to main since this release
811d9ac

What's Changed

  • fix(hud): info panel renders off-screen when control bar appears by @dem-extra1 in #680
  • Regenerate + diff all website demo clips on every PR (visual snapshot testing) by @dem-extra1 in #683
  • Add a lint check that catches issue/PR-number citations in code comments by @dem-extra1 in #684
  • Release: wire up macOS notarization + Windows Authenticode signing plumbing by @dem-extra1 in #686
  • Fix default spawn-line spacing so wide regiments never overlap (#677) by @dem-extra1 in #685
  • add historically accurate unit behaviors for reforming after casualties by @dem-extra1 in #694
  • ci(links): exclude game-icons.net (expired SSL cert) by @dem-extra1 in #712
  • Anchor all equations on website by @dem-extra1 in #696
  • Periodic opposition research automation by @dem-extra1 in #699
  • Check unit movement/attack speeds against historical records by @dem-extra1 in #700
  • fix(ci): use raw.githubusercontent.com for demo GIF/MP4/state URLs by @dem-extra1 in #714
  • fix(ci): set executable bit on website-demo-diff-summary.sh by @dem-extra1 in #717
  • Record a website demo video for the isolated morale-recovery scenario by @dem-extra1 in #697
  • debug chaotic entity swirling by @dem-extra1 in #698
  • feat: multi-click move speeds for disciplined units by @dem-extra1 in #695
  • feat: per-soldier ID overlay for the selected unit (dev/debug visual) by @dem-extra1 in #702
  • Use Newton's laws for collision forces by @dem-extra1 in #709
  • Attack mode: roll the line by @dem-extra1 in #708
  • Sweep routers attack mode by @dem-extra1 in #711
  • Fix "]" key naming in demo input scripts (silent no-op keycode) by @dem-extra1 in #725
  • Wire SoldierCollision.overcomes_static_friction into the melee/collision impulse path by @dem-extra1 in #726
  • feat(attack): pin down / stall (defensive attack with exposure window) by @dem-extra1 in #707
  • feat: routing units path around terrain and fight if trapped by @dem-extra1 in #710
  • chore: gitignore per-PR worktrees under .claude/worktrees/ by @dem-extra1 in #729
  • docs: record lessons from PR #707's lifecycle and mma cascade sweep by @dem-extra1 in #728
  • feat: Attack subtype: all-out attack (closes #689) by @dem-extra1 in #704
  • Attack subtype: chase (relentless pursuit) by @dem-extra1 in #713
  • fix(unit): absorb rout flee-facing snaps into _formation_angle (#723) by @dem-extra1 in #730
  • fix(demos): update sidestep demo click target for new spawn spacing by @dem-extra1 in #731
  • docs: bank review-lifecycle lessons from PR #730/#731 by @dem-extra1 in #732
  • feat(orders): add wedge charge attack subtype by @dem-extra1 in #733
  • HUD: give newer OrderMode stances their own order-cursor color by @dem-extra1 in #735
  • Attack subtype: push back / knockback focus by @dem-extra1 in #736
  • docs: record the knockback-focus cap-inversion review lesson by @dem-extra1 in #737
  • Bleed regiment speed via friction instead of snapping to zero when idle by @dem-extra1 in #739
  • Fade routing alpha instead of snapping it (flag only, not member icons) by @dem-extra1 in #741
  • docs: record the bottom-up physics / no-top-down-gimmicks design philosophy by @dem-extra1 in #744
  • Make residual speed coast the unit instead of decaying inert by @dem-extra1 in #743
  • Fix residual speed still not coasting after the finishing blow by @dem-extra1 in #747
  • Consolidate movement mechanics: retire combat-only soldier velocity by @dem-extra1 in #749
  • ums: bank lessons from #747/#749's lifecycle by @dem-extra1 in #754
  • Refresh benchmark.yml's stale CI baseline by @dem-extra1 in #755
  • Remove static shield-wall / square formation graphic overlays by @dem-extra1 in #757
  • Fix Square/Schiltron engaged-set staleness after casualties (partial #752) by @dem-extra1 in #758
  • Record memory: partial-fix PRs can auto-close their tracking issue on merge by @dem-extra1 in #759
  • Square/Schiltron engaged-set: select by real cross-unit proximity by @dem-extra1 in #760
  • Make current maneuver explicit Unit state, auto-recorded by the transcript by @dem-extra1 in #761
  • ums: bank lessons from PR #760's review lifecycle by @dem-extra1 in #762
  • Refresh benchmark.yml's CI baseline on a schedule by @dem-extra1 in #764
  • ums: prefer core mechanics over polish when picking issues by @dem-extra1 in #765
  • Evaluate a damped crowding-pressure term for soldier-body collision by @dem-extra1 in #771
  • chore: refresh benchmark.yml's CI baseline (scheduled) by @dem-extra1 in #767
  • Undisciplined units use individual march/form-up behavior instead of professional maneuvers by @dem-extra1 in #768
  • Add space/count-basis form-up split modes for mixed-density groups by @dem-extra1 in #772
  • ums: bank findings from the #724/#774 swirl investigation by @dem-extra1 in #775
  • Fix march-bearing instability causing formations to spin near arrival by @dem-extra1 in #776
  • Tighten the engaged/friendly-contact tier-promotion gate by @dem-extra1 in #777
  • Cap accumulated friendly-avoidance steering magnitude under sustained extreme crowding by @dem-extra1 in #778
  • Select engaged soldiers by live front position, not stale array index by @dem-extra1 in #780
  • Correct disproven "soldier physics alone stops a charge" claim (issue #296) by @dem-extra1 in #782
  • Weight SoldierBodies.couple() toward engaged bodies so contact resistance can arrest a charge by @dem-extra1 in #784
  • Memoize Unit.engaged_soldier_indices() per physics tick by @dem-extra1 in #785
  • Maneuver sequencing (combo queue) foundation by @dem-extra1 in #788
  • chore: bump .ai-config submodule pin (closes #789) by @dem-extra1 in #790
  • fix(maneuver): short backward mouse moves back-step, don't about-face by @dem-extra1 in #787
  • Fix engage-turn swirl in prolonged symmetric melee by @dem-extra1 in #773
  • Move maneuvers: per-soldier 90° pivot / file-march for larger lateral shifts by @dem-extra1 in #793
  • fix(maneuver): lateral pivot keeps its shape and turns back on arrival by @dem-extra1 in #796
  • feat(ai): subcommanders — line integrity, mutual support, flank coverage (#585, phase 2 of battle AI) by @dem-extra1 in #791
  • feat(ai): the general — doctrine profiles, army plans, reserves (#586, phase 3 of battle AI) by @dem-extra1 in #794
  • docs: record two lessons from the Battle AI phase 2/3 review cycles by @dem-extra1 in #795
  • Isolate and fix residual facing-rotation drift in step_all_sim_soldiers by @dem-extra1 in #797
  • Generalize UnitRelief's friendly-target link into a reusable maneuver hook by @dem-extra1 in #800
  • ci: bump publish-site.yml demo-recording timeout to match its actual workload by @dem-extra1 in #804
  • Passage of lines: multi-unit relief pairing (triplex acies) by @dem-extra1 in #801
  • Pair engaged bodies to canonical target slots by physical position (closes #798) by @dem-extra1 in #806
  • perf(soldier-bodies): drop dict allocation + redundant array in the #797 hot path by @dem-extra1 in #807
  • fix(soldier-bodies): rate-limit the engaged-target-slot pairing by @dem-extra1 in #814
  • docs(memory): record GIA batch-cleanup lessons by @dem-extra1 in #812
  • DemoInputRecorder: session setter for show_soldier_ids by @dem-extra1 in #815
  • Investigate which rank knockback affects (front vs rear) by @dem-extra1 in #816
  • Checkerboard (quincunx) multi-line form-up by @dem-extra1 in #818
  • docs(memory): record PR #818's form-up movement/reform lessons by @dem-extra1 in #823
  • Design: atomic order queue (unify reform-hold, decompose composite orders) by @dem-extra1 in #824
  • ums: git worktree remove on your own active worktree can partially succeed by @dem-extra1 in #825
  • Slice 0: order-tree data model + rear-move/lateral-pivot onto children by @dem-extra1 in #831
  • Default scripted-input demos to show the soldier-ID overlay by @dem-extra1 in #833
  • docs(memory): record the fake-worktree hazard hit on PR #831 by @dem-extra1 in #835
  • Fix unit-stats info panel not rendering legible text in recorded demos by @dem-extra1 in #837
  • Slice 1: form-up reform-hold onto a REFORM leaf order by @dem-extra1 in #839
  • Slice 2: group-level FORM_UP composite as real tree children by @dem-extra1 in #840
  • Default demo scripts to drill mode unless the demo needs an enemy by @dem-extra1 in #846
  • Add Codecov badge to README by @dem-extra1 in #850
  • Slice 3: HUD order-tree display by @dem-extra1 in #841
  • Add a "parade ground" battle option with no enemy army by @dem-extra1 in #842
  • Add a battle mode where the player controls all teams by @dem-extra1 in #853
  • docs(memory): record the codecov/patch gap-pinpointing technique by @dem-extra1 in #854
  • Add a local patch-coverage check (codecov/patch approximation) by @dem-extra1 in #852
  • fix(hud): clarify the Soldier IDs toggle requires zoom-in by @dem-extra1 in #855
  • feat(hud): add a frame-rate + tick-rate counter with a corner picker by @dem-extra1 in #856
  • feat(hud): offer to save the replay before an unsaved battle exit by @dem-extra1 in #857
  • feat(replay): stamp saved replays with the build's commit SHA by @dem-extra1 in #858
  • memories: record the blob/main link-checker gotcha for same-PR new files by @dem-extra1 in #859
  • Extend verify-via-state-dump with a standard demo defect checklist by @dem-extra1 in #865
  • Add echelon/oblique order for multi-unit formations by @dem-extra1 in #862
  • Investigate and fix rank-1 synchronized knockback recovery time by @dem-extra1 in #860
  • Anchor unit position on front-rank midpoint instead of full centroid by @dem-extra1 in #861
  • Add countermarch (exelismos) maneuver, 3 variants by @dem-extra1 in #866
  • memories: bank lessons from the 817/821/379/864/375 gii batch by @dem-extra1 in #867
  • docs(memory): always check demos thoroughly, not just the claimed feature by @dem-extra1 in #868
  • docs: document cavalry charge speed as intentional canter-pace by @dem-extra1 in #873
  • Document FORMATION_SPACING as the intentional synaspismos tier by @dem-extra1 in #874
  • fix(ci): exclude unreachable imperiumromanum.pl from the link checker by @dem-extra1 in #882
  • feat(maneuver): about-face + flank-pivot(wheel) + march for large turns by @dem-extra1 in #871
  • docs(memory): demo reviews include a super-physical motion check by @dem-extra1 in #883
  • Derived, on-demand state snapshots for fast replay rewind/scrub by @dem-extra1 in #872
  • docs(memory): manually review every clip the website demo-diff flags, document in the PR description by @dem-extra1 in #884
  • Fix click-and-drag preview width in loose formation by @dem-extra1 in #870
  • memories: bank two lessons from the 2026-07-15 gii batch by @dem-extra1 in #888
  • feat: WorldScale shared-constants leaf script (phase A of the metric-definition plan) by @dem-extra1 in #889
  • feat(ci): diff-scoped units-convention lint (phase B of the metric-definition plan) by @dem-extra1 in #890
  • feat: metric-author the Unit and SoldierCombat physical constants (phase C) by @dem-extra1 in #894
  • feat: metric-author the soldier-layer constants; triage the borderline distances (phase D) by @dem-extra1 in #895
  • docs+tooling: metric docs sweep; state dumps emit metric mirrors (phase E) by @dem-extra1 in #896
  • memories: sim-equality proof technique for dump-schema changes by @dem-extra1 in #897
  • fix(maneuver): pace a wheel by its outer file's gait, not a fixed angular rate by @dem-extra1 in #898
  • feat(orders): drill commands take a response beat -- a configurable atomic-order delay by @dem-extra1 in #899
  • memories: demo box-step timing and stagger-legibility gotchas by @dem-extra1 in #900
  • fix(ui): resize grips follow the selected unit as it moves by @dem-extra1 in #902
  • feat(hud): unit info panel shows the full unit-level stat sheet by @dem-extra1 in #903
  • feat(ci): website-demo-diff compares state transcripts, not clip bytes by @dem-extra1 in #906
  • fix(ci): validate force-compiles every .gd, catching load-only parse errors by @dem-extra1 in #908
  • memories: branch switches count as a second writer during Godot runs by @dem-extra1 in #909
  • feat(ui): resize drag anchors the far flank instead of the centre by @dem-extra1 in #910
  • chore: refresh benchmark.yml's CI baseline (scheduled) by @github-actions[bot] in #914
  • feat(hud): narrow unit info panel — one semantic item per line by @dem-extra1 in #912
  • feat: model armor and mount as typed loadout objects by @dem-extra1 in #913
  • feat(hud): fold static unit characteristics by default by @dem-extra1 in #918
  • feat(hud): drop the top hint bar; clamp the info panel to the viewport by @dem-extra1 in #919
  • fix(ui): centre selection chrome on the block's shifted footprint by @dem-extra1 in #923
  • fix: pre-contact blobbing in the showcase battle (rightmost enemy unit) by @dem-extra1 in #924
  • feat(demo): deterministic defect analyzer over state transcripts (slice 1 of #930) by @dem-extra1 in #931
  • feat(demo): machine-checkable expect blocks in demo input scripts (slice 2 of #930) by @dem-extra1 in #932
  • feat(ci): wire the demo defect scan into the demo and demo-diff workflows (slice 3 of #930) by @dem-extra1 in #933
  • feat(ci): both-sides defect delta over changed clips in the demo diff (closes #930) by @dem-extra1 in #934
  • feat(art): procedural textured ground, forest, and hill (slice 1 of #925) by @dem-extra1 in #935
  • feat(art): shaded soldier figures at figure LOD (slice 2 of #925) by @dem-extra1 in #936
  • feat(art): banner and standard art (slice 3 of #925, closes #925) by @dem-extra1 in #937
  • feat: per-type anisotropic formation spacing --- cavalry at realistic horse dimensions (closes #926) by @dem-extra1 in #938
  • docs(memories): sync the demo spawn table with the post-cavalry-pitch line by @dem-extra1 in #941
  • feat(render): full-length cavalry figure silhouette (closes #721) by @dem-extra1 in #942
  • fix(pathfinding): exact terrain footprints + per-unit clearance (closes #928) by @dem-extra1 in #943
  • docs: 3D conversion plan by @dem-extra1 in #929
  • feat(demo-defects): key blob/overlap floors on body geometry, not grid pitch (closes #939) by @dem-extra1 in #958
  • feat: deepen the battlefield so armies deploy at real distance (closes #945) by @dem-extra1 in #946
  • feat: per-battle map definitions --- field, terrain, and spawn lines as data (closes #960) by @dem-extra1 in #964
  • fix(demo): retune trapped_routing so the terrain detour actually plays out (closes #927) by @dem-extra1 in #966
  • docs(memories): session lessons --- pursuit staging constraints, chase deformation, staging tools, render-side const misses by @dem-extra1 in #967
  • fix: cycle-charge recharge peel never ends when the target flees by @dem-extra1 in #968
  • fix: idle cavalry near a routed enemy compresses its bodies into overlap by @dem-extra1 in #970
  • docs(memories): session lessons --- defect-gate sampling, reversal transients, renderer-config drift by @dem-extra1 in #971
  • chore: gate tools/check.sh patch_coverage on Codecov's effective patch target by @dem-extra1 in #973
  • feat: pursuit stances canter beyond the sprint window instead of walking by @dem-extra1 in #974
  • feat: per-tick two-tier sim-state hash in the state-dump path + offline verify mode by @dem-extra1 in #976
  • feat: funnel string-pulling hugs the clearance-grown terrain boundary on straightaways by @dem-extra1 in #977
  • fix: right-click can issue an attack order on a routing enemy by @dem-extra1 in #978
  • docs(memories): session lessons --- funnel-walk tests, cross-unit crowd-pressure, analyzer dependency split, armed-stance sticky state by @dem-extra1 in #980
  • feat: sustained asymmetric melee standoff (spear holds a swordsman at bay) by @dem-extra1 in #981
  • docs(memories): note #296's second auto-close, narrows the mechanism by @dem-extra1 in #984
  • feat: give-ground order — explicit fighting retreat for a longer-reach unit by @dem-extra1 in #985
  • feat: migrate walk_advance/reform_before_move to per-unit, type-defaulted settings by @dem-extra1 in #987
  • chore: extract Godot+GUT setup boilerplate into a shared composite action by @dem-extra1 in #989
  • chore: dedupe test/coverage GUT reruns; fix stale demo-media comment by @dem-extra1 in #990
  • docs(memories): lessons from the redundancy-audit session (#988/#989/#990) by @dem-extra1 in #991
  • feat: moving wheel maneuver (wheel while marching) by @dem-extra1 in #998
  • feat: file-major vs row-major casualty reflow (per-unit toggle) by @dem-extra1 in #995
  • feat: auto mode for file_major_reform (unit-level AI decides) by @dem-extra1 in #999
  • docs(memories): lessons from the #878/#922/#997 session by @dem-extra1 in #1000
  • fix: undisciplined units skip the formed lateral-pivot maneuver by @dem-extra1 in #1001
  • feat: a queued waypoint leg applies its own stance once promoted by @dem-extra1 in #1002
  • docs(memories): lessons from the #994/#996 GII+mwc session by @dem-extra1 in #1004
  • chore: refresh benchmark.yml's CI baseline (scheduled) by @github-actions[bot] in #1003
  • chore: AI_PERIOD becomes caller-configurable ai_period by @dem-extra1 in #1007
  • fix: correct sweep-routers demo caption and state-dump tick sampling by @dem-extra1 in #1006
  • chore: CAMERA_SMOOTHING becomes caller-configurable camera_smoothing by @dem-extra1 in #1008
  • chore: rout/rally thresholds become caller-configurable by @dem-extra1 in #1009
  • docs(memories): benchmark-noise verification technique from #1007-#1009 by @dem-extra1 in #1010
  • chore: bump .ai-config submodule pin to latest main by @dem-extra1 in #1012
  • docs: pause the standing #963 tunable-externalization audit by @dem-extra1 in #1021
  • chore: DETECTION_RANGE becomes caller-configurable by @dem-extra1 in #1013
  • fix: deterministic per-unit lane offset breaks funnel-corner convergence near the hill by @dem-extra1 in #1020
  • feat: melee maneuver -- disengage and step back by @dem-extra1 in #1024
  • docs(memories): cross-agent Godot collision + Get-CimInstance verification lesson by @dem-extra1 in #1026
  • chore: refresh benchmark.yml's CI baseline (scheduled) by @github-actions[bot] in #1025

New Contributors

  • @github-actions[bot] made their first contribution in #914

Full Changelog: v0.3.0...v0.4.0