Repository navigation
Releases: Lacaedemon/sparta
Releases · Lacaedemon/sparta
Release list
Sparta v0.4.0
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 https://github.com/Lacaedemon/spar...
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 (...
Sparta v0.2.0
What's Changed
- feat: individual-soldier collision — foundation (cross-regiment soldier separation) (#164) by @d-morrison in #254
- feat: individual-soldier collision phase 3 — render soldiers at their simulated positions (#164) by @d-morrison in #255
- ci: add PR website previews (Quarto preview via d-morrison/gha) by @d-morrison in #259
- docs: specify the per-soldier probabilistic combat model by @d-morrison in #257
- feat: phase 4 foundations -- per-soldier combat math + persistent bodies by @d-morrison in #262
- feat: per-soldier melee resolution -- first gameplay change (phase 4b) by @d-morrison in #263
- ci: pass ANTHROPIC_API_KEY through to the reusable workflows by @dem-extra1 in #268
- feat: melee spacing & movement polish + no-teleport physics by @d-morrison in #267
- feat: no-teleport soldier collisions -- steering (friendlies) + knockback (enemies) by @d-morrison in #271
- refactor: extract target-acquisition queries into UnitTargeting by @d-morrison in #273
- refactor: extract regiment-level combat into UnitCombat by @d-morrison in #274
- refactor: extract formation-block geometry into UnitFormation by @d-morrison in #275
- refactor: extract regiment condition ticks into UnitMorale by @d-morrison in #276
- refactor: extract line-relief swap into UnitRelief by @d-morrison in #277
- refactor: extract pure mark-flock math into SoldierFlock by @d-morrison in #278
- refactor: move the _update_flock orchestrator into SoldierFlock by @d-morrison in #279
- feat: animate per-soldier melee weapons (length encodes reach) by @d-morrison in #280
- feat: replay the live cursor, selection & drag-box in demo clips by @d-morrison in #282
- fix: make fatigue accumulate at a realistic rate by @d-morrison in #284
- feat: resizable unit widths (keyboard + drag) by @d-morrison in #285
- feat: drag-to-form-up move orders (single unit) by @d-morrison in #289
- feat: individual collision phase 5 slice 1 — friendly collision at the soldier level by @d-morrison in #294
- docs: defer phase-5 enemy collision to #201 (momentum/mass) by @d-morrison in #297
- feat: physics slice A — per-soldier mass + momentum-based knockback by @d-morrison in #299
- perf: cache soldier_block_extent for the friendly-collision broadphase by @dem-extra1 in #302
- feat: make a unit's regimental flag a click target for selection (#291) by @dem-extra1 in #303
- feat: physics slice B — prone / knockdown by @d-morrison in #301
- feat(physics): depth-buttressed bracing (#201 slice C) by @d-morrison in #309
- ci: re-record the demo clip when only demos/ changes (#315) by @dem-extra1 in #317
- Physics slice D: stamina pool and fatigue condition by @dem-extra1 in #319
- Add max_stamina assertions for archer and infantry profiles by @dem-extra1 in #322
- feat: scripted-input demo recorder — author demos via mouse/keystroke scripts (#318) by @dem-extra1 in #321
- feat: multi-unit drag-to-form-up with equal-depth / equal-width modes (#287) by @dem-extra1 in #308
- Formation ghost in the orders overlay (Space survey) — closes #312 by @dem-extra1 in #323
- docs: require website demo recording updates in user-visible PRs by @dem-extra1 in #311
- Reform before move: units settle ranks before marching (#316) by @dem-extra1 in #324
- Orderly frontage changes: cap soldier speed to jog when idle (#288) by @dem-extra1 in #326
- fix(render): skip weapon blade for prone soldiers at figure LOD by @dem-extra1 in #328
- feat(website): add charge and support demo videos to how-to-play by @dem-extra1 in #329
- feat(physics): stamina pool — per-soldier fatigue drains cond and degrades defence (#201 slice D) by @dem-extra1 in #313
- feat(render): draw prone soldiers as dark horizontal marks (#300) by @dem-extra1 in #314
- feat(orders): group attack distribution — focused vs distributed (#305) by @dem-extra1 in #337
- docs: record-demos.sh type field and demo.json conflict note by @dem-extra1 in #340
- feat(release): add Windows NSIS installer to release builds by @dem-extra1 in #330
- docs(website): add stamina and prone/knockdown sections to tactics.qmd by @dem-extra1 in #333
- fix(replay): record group_attack mode so distributed attacks replay correctly by @dem-extra1 in #343
- feat(hud): bottom control bar for unit toggles by @dem-extra1 in #346
- ums: document GDScript/Godot 4 coding quirks in CLAUDE.md by @dem-extra1 in #349
- feat(gameplay): pace modes — walk/jog/sprint approach by @dem-extra1 in #338
- fix(battle): disconnect physics_frame on exit so restart doesn't null-deref by @d-morrison in #351
- refactor(hud): single source of truth for stance dropup entries by @d-morrison in #353
- feat(maneuver): side-step small lateral move orders by @d-morrison in #360
- feat(settings): configure which modes the Y-key form-up cycle includes by @dem-extra1 in #344
- feat(orders): pre-face destination on move orders so soldiers wheel before marching by @dem-extra1 in #352
- docs(claude): add GUT assert_almost_eq and Vector2 test quirks by @dem-extra1 in #363
- feat(maneuver): gradual wheel + about-face for orderly move orders by @d-morrison in #361
- feat(soldier): per-soldier facing layer (drill-maneuver foundation) by @d-morrison in #383
- feat(maneuver): conversio — per-soldier in-place about-face (V key) by @dem-extra1 in #388
- refactor(render): marks render from sim positions; fix conversio post-wheel surge by @dem-extra1 in #393
- feat(formation): grid-ops primitives (#367) by @dem-extra1 in #395
- feat(maneuver): quarter-turn — 90° in-place turn with grid transpose (#371) by @dem-extra1 in #398
- feat(demo): drill / solo mode — single-team rehearsal (#390) by @dem-extra1 in #403
- fix(release): write NSIS installer into build/ via absolute OUTFILE by @d-morrison in #405
Full Changelog: v0.1.0...v0.2.0
Sparta v0.1.0
What's Changed
- fix: force LF on shell scripts so the SessionStart hook shebang works by @d-morrison in #217
- Broaden .gitattributes: normalize all text files to LF by @d-morrison in #219
- feat: detailed soldier figures at high zoom (closes #187) by @d-morrison in #220
- fix(ci): collapse check-links to a single job so it runs on PRs by @d-morrison in #228
- docs: re-check website sync (prose + demo media + screenshots) each review round by @d-morrison in #224
- docs: document order stances, formations, rank cycling, flags (closes #225) by @d-morrison in #226
- feat: per-type figures, mount facing, no emblem at high zoom (closes #221) by @d-morrison in #230
- fix: use all-Latin SPARTA for the site title (closes #229) by @d-morrison in #231
- Move sparta working notes memory from ai-config into this repo by @dem-extra1 in #235
- feat: record a camera presentation track for demos (closes #222) by @d-morrison in #232
- docs(memory): record demo camera-path and poster→MP4 media learnings (closes #238) by @d-morrison in #239
- feat(ci): demo as poster still linking to MP4, not autoplay GIF (closes #236) by @d-morrison in #237
- feat: per-weapon melee reach — spears out-reach swords (closes #233) by @d-morrison in #242
- fix(ci): inline play-once GIF + MP4 link — mobile can't play poster→MP4 (closes #236) by @d-morrison in #243
- fix(ci): exclude flaky divideetimperamod.com from link-check (closes #244) by @d-morrison in #245
- feat: real-world movement speeds — cavalry gallop vs foot advance (closes #234) by @d-morrison in #246
- feat: show the player's order markers during demo playback (closes #223) by @d-morrison in #248
- docs(memory): demo-scenario authoring + local-verification gotchas by @d-morrison in #249
- feat: cross-platform release builds — Windows / Linux / macOS (#241) by @d-morrison in #250
- fix(ci): derive export-template version from the Godot binary (#241) by @d-morrison in #253
Full Changelog: https://github.com/Lacaedemon/sparta/commits/v0.1.0