Skip to content

Address Twilight's Fall improvements from issue #10 - #11

Merged
dzhiriki merged 5 commits into
dzhiriki:tffrom
ben-phillips:bsp-tf-feedback
Aug 28, 2026
Merged

dzhiriki merged 5 commits into
dzhiriki:tffrom
ben-phillips:bsp-tf-feedback

Conversation

@ben-phillips

Copy link
Copy Markdown
Contributor

Faction units:

  • Starlancer II: repair-threshold select (any / half+ / all damaged, measured against living mechs)
  • Starlancer XI: mechs join only while a ship is fielded; combat continues while ships or space-area mechs hold the space area; a "Mechs on ground" count plus a strategy select (win in space / save ground with or without sustains) decides casualty attribution and sustain use
  • Colada: auto-targets the strongest unit with a capacity value
  • Enigma: ignores the nebula's defender bonus (anomaly "effects", not just movement)
  • A Strangled Whisper: FREE_CARGO stat — infantry and fighters ride free while the flagship lives, mechs still pay the printed capacity

Action cards:

  • Feint (new): the retreat resolves at the announcement, skipping the final combat round
  • Divinity: per-mode "units worth saving" gate on both save paths
  • Lash: trigger list + drag-ordered destroy priority per combat mode
  • Spark: Direct Hit-style target checkbox list per combat mode
  • Meld: one-shot toggle melding a single own die (kernel singleDie CUSTOM_ROLL; scope select for combat vs unit-ability rolls)

Shared decks:

  • Planesplitter and Valkyrie Vanguard added to the Abilities deck
  • Artemiris Ascendant and Dimensional Reflection paradigms (reuse Overwing Zeta / Fragment Reality); Overwing Zeta now defaults to flagship + 2 cruisers
  • Temporal Command Suite: per-genome command-token counts; Clever Genome keeps its own row (a second trigger in the same window)
  • Valiant Genome: Courageous-style trigger and spend-gate lists
  • Justiciar Rail: restricts only its own Space Cannon hits via a hit-pool transform, so Lightrail dock hits assign normally
  • TF fighter upgrades: Fighter II model — capacity first, excess to the fleet pool (1/2 each for Hybrid Crystal Fighter)

Engine:

  • TF unit-upgrade cards register ahead of the base slots so their stats settle before Capacity/Fleet Pool enforce at PREPARE
  • Fighter II fleet-pool excess is measured against printed ship capacity (regardless of the enforcement toggle), and capacity enforcement no longer evicts other cargo for fleet-pool-backed overflow
  • New: singleDie CUSTOM_ROLL kernel mode, SideApi.getCombatMode(), FREE_CARGO honored by both capacity and fleet pool, Infinity*0 NaN guard in capacity totals
  • New invariants recorded in docs/engine-gotchas.md

Faction units:
- Starlancer II: repair-threshold select (any / half+ / all damaged,
  measured against living mechs)
- Starlancer XI: mechs join only while a ship is fielded; combat
  continues while ships or space-area mechs hold the space area; a
  "Mechs on ground" count plus a strategy select (win in space / save
  ground with or without sustains) decides casualty attribution and
  sustain use
- Colada: auto-targets the strongest unit with a capacity value
- Enigma: ignores the nebula's defender bonus (anomaly "effects", not
  just movement)
- A Strangled Whisper: FREE_CARGO stat — infantry and fighters ride
  free while the flagship lives, mechs still pay the printed capacity

Action cards:
- Feint (new): the retreat resolves at the announcement, skipping the
  final combat round
- Divinity: per-mode "units worth saving" gate on both save paths
- Lash: trigger list + drag-ordered destroy priority per combat mode
- Spark: Direct Hit-style target checkbox list per combat mode
- Meld: one-shot toggle melding a single own die (kernel singleDie
  CUSTOM_ROLL; scope select for combat vs unit-ability rolls)

Shared decks:
- Planesplitter and Valkyrie Vanguard added to the Abilities deck
- Artemiris Ascendant and Dimensional Reflection paradigms (reuse
  Overwing Zeta / Fragment Reality); Overwing Zeta now defaults to
  flagship + 2 cruisers
- Temporal Command Suite: per-genome command-token counts; Clever
  Genome keeps its own row (a second trigger in the same window)
- Valiant Genome: Courageous-style trigger and spend-gate lists
- Justiciar Rail: restricts only its own Space Cannon hits via a
  hit-pool transform, so Lightrail dock hits assign normally
- TF fighter upgrades: Fighter II model — capacity first, excess to
  the fleet pool (1/2 each for Hybrid Crystal Fighter)

Engine:
- TF unit-upgrade cards register ahead of the base slots so their
  stats settle before Capacity/Fleet Pool enforce at PREPARE
- Fighter II fleet-pool excess is measured against printed ship
  capacity (regardless of the enforcement toggle), and capacity
  enforcement no longer evicts other cargo for fleet-pool-backed
  overflow
- New: singleDie CUSTOM_ROLL kernel mode, SideApi.getCombatMode(),
  FREE_CARGO honored by both capacity and fleet pool, Infinity*0 NaN
  guard in capacity totals
- New invariants recorded in docs/engine-gotchas.md
@ben-phillips

Copy link
Copy Markdown
Contributor Author

Thanks for the great feedback, I didn't understand your comment on meld until I saw how the AI decided to tackle that 🙃.

Unresolved issues: Ssruu + TCS implementation (currently Ssruu allows for only one agent behavior in combat)
Damaged starlancer XI: If some of the starlancers are damaged, it matters whether those are on the ground or in space, since those have different behavior.

@ben-phillips ben-phillips mentioned this pull request Aug 24, 2026
17 tasks
@dzhiriki

Copy link
Copy Markdown
Owner

For TCS I was thinking about different approach: to have a total usage amount & checkboxes for genomes.
And implement event like GENOME_EXHAUSTED-event. It will work as it works in game: when you use genome, it triggers that event & TCS add additional use for that genome.

But, to be honest, I like your approach even more. With that one, you can check is it better to spend CCs on Genome A or save it for Genome B.

@dzhiriki

Copy link
Copy Markdown
Owner

For Colada. Current implementation, adds additional dice group, not extra die for the unit itself.
It breaks interaction with Crown of Thalnos: safe rerolls won't work.
But that opens other question: if there are 4 mechs & 4 good units (i.e. 4 Dreads). Is it better to produce a single dread with 5 dice, and 3 normal ones or is it better to have all 4 dreads roll 2 dice

@ben-phillips

Copy link
Copy Markdown
Contributor Author

I was also realizing there's a few other cases, which I think I'll just add to this

  1. Enigma should also ignore entropic scar (can sustain)
  2. Lash doesn't account for the fact that not all unit costs are identical (There's a WS, mech and dread unit upgrade that change unit costs) there's also a 7 cost flagship

For the Colada question depends how much you like to gamble 😆

5.952 0 2/2/2/2, safe only
5.969 0 5/1/1/1, safe only
6.010 0 3/3/1/1, safe only
6.240 0.008 3/3/1/1, aggressive on the 3s
6.480 0.055 3/2/2/1, aggressive on all but the bare dread
6.720 0.102 2/2/2/2, aggressive everywhere

If there are multiple ships that are best damage (dreads), split the mechs between 2 of them. However, easiest to implement (all dice on best damage) is basically the same odds, so I'd lean towards implementing that, since the logic is very straightforward.

@dzhiriki

Copy link
Copy Markdown
Owner

Nice catches. I know the main game pretty well, but haven't played TF, so most of those interactions are unknown to me. I was just trying to find them from ability texts. Probably there are a bunch of other ones that we didn't think :)
Yeah, for Colada it is a very niche case, so it can be implemented in a simple way.

@ben-phillips

Copy link
Copy Markdown
Contributor Author

Colada changes should now be applied (got reverted in a merge conflict). I forgot that crown adds +1 on re-rolls, but it seems like it's still best to have it on the highest damage ship.

@dzhiriki
dzhiriki merged commit 565a6fb into dzhiriki:tf Aug 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants