From 5e215f448d379b200088f8f4c291155b10a0ba14 Mon Sep 17 00:00:00 2001 From: James Hay Date: Fri, 17 Jul 2026 12:36:34 -0700 Subject: [PATCH 1/5] Repair Terrifying saves with active Trade state --- src/repair-terrifying-trade.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/repair-terrifying-trade.js diff --git a/src/repair-terrifying-trade.js b/src/repair-terrifying-trade.js new file mode 100644 index 000000000..d4111c211 --- /dev/null +++ b/src/repair-terrifying-trade.js @@ -0,0 +1,17 @@ +import { global } from './vars.js'; +import { cleanAddTrait } from './races.js'; + +/** + * Repair saves where Terrifying is active while local Trade state remains live. + * + * Older Synth/Imitation saves can contain researched Trade technology and Trade + * Posts even though Terrifying disables local trading. cleanAddTrait() owns the + * canonical transition into purgatory, including route and market cleanup. + */ +export function repairTerrifyingTrade(){ + if (global.race?.terrifying && (global.tech?.trade || global.city?.trade)){ + cleanAddTrait('terrifying'); + } +} + +repairTerrifyingTrade(); From b4044157a6c518bc8e8e6786ecfdfebf3633805f Mon Sep 17 00:00:00 2001 From: James Hay Date: Fri, 17 Jul 2026 12:36:44 -0700 Subject: [PATCH 2/5] Run save repairs before application startup --- src/main-repaired.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main-repaired.js diff --git a/src/main-repaired.js b/src/main-repaired.js new file mode 100644 index 000000000..4712f9444 --- /dev/null +++ b/src/main-repaired.js @@ -0,0 +1,2 @@ +import './repair-terrifying-trade.js'; +import './main.js'; From 5c2d4aa5b1eb6277abe2c8287219732220a6c464 Mon Sep 17 00:00:00 2001 From: James Hay Date: Fri, 17 Jul 2026 12:36:50 -0700 Subject: [PATCH 3/5] Run Terrifying trade repair in production builds --- buildEvolve.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildEvolve.js b/buildEvolve.js index fb3baebe4..22c7ee8cb 100644 --- a/buildEvolve.js +++ b/buildEvolve.js @@ -1,7 +1,7 @@ require("esbuild") .build({ logLevel: "info", - entryPoints: ["./src/main.js"], + entryPoints: ["./src/main-repaired.js"], bundle: true, minify: true, outfile: "evolve/main.js", From 9a888e3f029d6106c79779e620c8e93fca0c78ef Mon Sep 17 00:00:00 2001 From: James Hay Date: Fri, 17 Jul 2026 12:36:59 -0700 Subject: [PATCH 4/5] Run Terrifying trade repair in debug builds --- buildEvolveDebug.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildEvolveDebug.js b/buildEvolveDebug.js index 984cd2ba1..e5a467bf7 100644 --- a/buildEvolveDebug.js +++ b/buildEvolveDebug.js @@ -1,7 +1,7 @@ require("esbuild") .build({ logLevel: "debug", - entryPoints: ["./src/main.js"], + entryPoints: ["./src/main-repaired.js"], bundle: true, minify: false, sourcemap : true, From fc8ed55e278582fbcc1aa476682cbe4083da4e0a Mon Sep 17 00:00:00 2001 From: James Hay Date: Thu, 23 Jul 2026 20:49:35 -0700 Subject: [PATCH 5/5] Limit Terrifying trade repair to Imitation saves --- src/repair-terrifying-trade.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/repair-terrifying-trade.js b/src/repair-terrifying-trade.js index d4111c211..d86444e0c 100644 --- a/src/repair-terrifying-trade.js +++ b/src/repair-terrifying-trade.js @@ -2,16 +2,21 @@ import { global } from './vars.js'; import { cleanAddTrait } from './races.js'; /** - * Repair saves where Terrifying is active while local Trade state remains live. + * Repair an invalid Trade state left by an imitated Terrifying trait. * - * Older Synth/Imitation saves can contain researched Trade technology and Trade - * Posts even though Terrifying disables local trading. cleanAddTrait() owns the - * canonical transition into purgatory, including route and market cleanup. + * Affected saves can retain researched Trade technology and Trade Posts while + * Terrifying is active. cleanAddTrait() owns the canonical transition into + * purgatory, including route, queue, and market cleanup. */ export function repairTerrifyingTrade(){ - if (global.race?.terrifying && (global.tech?.trade || global.city?.trade)){ + const imitatedTerrifying = global.race?.imitation && global.race?.terrifying && ( + global.race?.iTraits?.terrifying === 0 || global.race?.srace === 'balorg' + ); + const activeLocalTrade = global.tech?.trade || global.city?.trade; + + if (imitatedTerrifying && activeLocalTrade){ cleanAddTrait('terrifying'); } } -repairTerrifyingTrade(); +repairTerrifyingTrade(); \ No newline at end of file