BattleTech results printing, defaults dialog, and BT411 catalog (BT port phase 4)

Completes the BattleTech console feature to parity with Red Planet:

- BTPrintDocument: the per-pilot landscape score sheet (mech portrait,
  placing, kill/death/damage stats, randomized mission-highlights narrative,
  pilot-vs-pilot damage matrix, place-over-time chart), mirroring
  RPPrintDocument minus the football/lap/boost/score-zone concepts. Wired into
  BTGame (Auto Print checkbox + Print Last Mission button) and the shell's File
  menu (BT Mission Print Preview / Print BT Mission, loading .btm files).
- BTStrings(.xml): the BT mission-highlight narrative pools (damage tiers,
  kill, death-without-honor, recap), loaded from BattleTech\BTStrings.xml like
  RPStrings.
- BTDefaultsDialog: two-column (Free For All / No Return) editor for the BT
  operator defaults, reachable from Settings (Change/Import/Export BattleTech
  Defaults). Verified via UI Automation: opens with all 18 option combos
  populated.
- Apps.xml: the BattleTech 4.11 product (btl4.exe on the shared RP411 engine,
  same -net/-res/-lc/-mr command line; deploys to C:\Games\BT411) with Game
  Client / Live Camera / Mission Review launch entries. CatalogTests updated to
  4 products / 8 entries plus the three new BT entry assertions.

Role model spelling corrected to "noreturn": the Mac Console.ini tag and the
game's BTL4.RES role resource are dfltrole/NoReturn; the 4.10 console's eggs
emitted a broken "noretun" that cannot resolve against the RES. BTGoldenEggTests
and BTConfig.xml updated accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-07 23:04:03 -05:00
co-authored by Claude Fable 5
parent deaade4f72
commit 18d787bdd5
12 changed files with 1658 additions and 15 deletions
+5 -3
View File
@@ -64,10 +64,12 @@
<badge key="None" name="None" />
<!-- role= : Free For All uses Default, No Return uses NoReturn. model= is the
egg value (Mac ini tags dfltrole/noreturn; TESTARN.EGG emitted "noretun"
for NoReturn, so that spelling is used as the pod consumed it). -->
egg value. The Mac ini tag is "noreturn" and the game's BTL4.RES role
resources are named dfltrole/NoReturn; the 4.10 console emitted a broken
"noretun" (a dropped character) in every egg on the production box, which
cannot resolve against the RES, so the correct spelling is used here. -->
<role key="Default" model="dfltrole" name="Default" />
<role key="NoReturn" model="noretun" name="No Return" />
<role key="NoReturn" model="noreturn" name="No Return" />
</freeforall>
+34
View File
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
BattleTech mission-highlight narrative strings (mirror of RedPlanet\RPStrings.xml).
Placeholders: {time} = mm:ss game time, {player} = pilot name, {vehicle} = mech
display name, {damager} = the other pilot involved.
-->
<BTStrings>
<LightDamage>{time} - Armor plating flakes off as {damager} lightly damages {player}'s mech.</LightDamage>
<LightDamage>{time} - {damager} lands a glancing hit on {player}.</LightDamage>
<LightDamage>{player}'s armor shrugs off a light volley from {damager}.</LightDamage>
<LightDamage>{player} laughs over the comm as {damager} can only scratch {player}'s paint.</LightDamage>
<ModerateDamage>{time} - Armor buckles as {damager} moderately damages {player}'s mech.</ModerateDamage>
<ModerateDamage>{player} is still in the fight as {damager} delivers a solid blow to {player}'s mech.</ModerateDamage>
<ModerateDamage>{damager} carves a respectable chunk out of {player}'s armor.</ModerateDamage>
<ModerateDamage>{time} - {damager} rocks {player}'s cockpit with a moderate impact.</ModerateDamage>
<HeavyDamage>{time} - Molten armor sprays as {damager} heavily damages {player}'s mech.</HeavyDamage>
<HeavyDamage>{player} fights the controls as {damager} nearly cores {player}'s mech.</HeavyDamage>
<HeavyDamage>{damager} unloads a devastating alpha strike into {player}'s mech.</HeavyDamage>
<HeavyDamage>{time} - Warning klaxons scream in {player}'s cockpit after a heavy impact from {damager}.</HeavyDamage>
<Kill>{time} - {damager} delivers a righteous kill to {player}.</Kill>
<Kill>{damager} stands victorious over the smoking wreckage of {player}'s {vehicle}.</Kill>
<Kill>{time} - {damager} cores {player}'s reactor. Glory to the victor.</Kill>
<Kill>The shattered remains of {player}'s {vehicle} litter the arena floor as {damager} salutes.</Kill>
<DeathWithoutHonor>{time} - {player} dies without honor as the {vehicle} destroys itself.</DeathWithoutHonor>
<DeathWithoutHonor>Shame falls upon {player}, whose {vehicle} is lost to no enemy's hand.</DeathWithoutHonor>
<DeathWithoutHonor>{time} - {player}'s {vehicle} overheats catastrophically. A death without honor.</DeathWithoutHonor>
<DeathWithoutHonor>{player} learns a hard lesson in mech management as the {vehicle} goes down on its own.</DeathWithoutHonor>
<Recap>...and at the end of the mission it's: {winners} followed by {looser}.</Recap>
</BTStrings>