Spaces:
Running
Running
File size: 6,365 Bytes
b51e03a 3597f5a b51e03a 3597f5a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | ;
;
/* Canonical faction identity seam. Simulation keeps its shipped
legion/ascendancy/horde keys; UI and newly written saves expose stable IDs. */
(function(){
var DEF={
nova:{runtime:'nova',art:'nova',name:'Terran Frontline Command',aliases:['nova','nova federation','federation','terran','terran frontline','terran frontline command','frontline command']},
dominion:{runtime:'legion',art:'ascendancy',name:'Crimson Dominion',aliases:['dominion','crimson dominion','legion','ascendancy','red ascendancy','bloodward legion']},
syndicate:{runtime:'syndicate',art:'syndicate',name:'Syndicate Coalition',aliases:['syndicate','syndicate coalition','coalition','machine ascendancy','emerald triad']},
brood:{runtime:'horde',art:'horde',name:'Brood Swarm',aliases:['brood','brood swarm','horde','umbral brood','infestation','infestation swarm','swarm','void swarm']}
},LOOKUP={};
Object.keys(DEF).forEach(function(id){LOOKUP[id]=id;DEF[id].aliases.forEach(function(a){LOOKUP[a]=id;});});
function clean(v){return String(v==null?'':v).trim().toLowerCase().replace(/[_-]+/g,' ').replace(/\s+/g,' ');}
function canonical(v){var s=clean(v);if(!s)return null;if(s==='random')return 'random';if(LOOKUP[s])return LOOKUP[s];
if(s.includes('machine')||s.includes('syndicate')||s.includes('coalition'))return 'syndicate';
if(s.includes('brood')||s.includes('horde')||s.includes('infestation')||s.includes('swarm'))return 'brood';
if(s.includes('dominion')||s.includes('legion')||s.includes('red ascendancy')||s==='ascendancy')return 'dominion';
if(s.includes('nova')||s.includes('terran')||s.includes('frontline')||s.includes('federation'))return 'nova';return null;
}
function runtime(v){var id=canonical(v);return id==='random'?'random':id&&DEF[id].runtime||null;}
function art(v){var id=canonical(v);return id&&id!=='random'?DEF[id].art:null;}
function name(v){var id=canonical(v);return id==='random'?'Random':id&&DEF[id].name||String(v||'');}
function canonicalIds(){return ['nova','dominion','syndicate','brood'];}
function winsMap(src,toRuntime){var out={};src=src&&typeof src==='object'?src:{};Object.keys(src).forEach(function(k){
var id=canonical(k),key=id&&(toRuntime?runtime(id):id);if(key)out[key]=Math.max(out[key]||0,+src[k]||0);
});return out;}
function metaCopy(src,toRuntime){var out=Object.assign({},src||{}),S=out.setup&&typeof out.setup==='object'?Object.assign({},out.setup):null;
if(S){if(S.pf){var pf=toRuntime?runtime(S.pf):canonical(S.pf);if(pf)S.pf=pf;}if(S.f&&S.f!=='random'){var af=toRuntime?runtime(S.f):canonical(S.f);if(af)S.f=af;}out.setup=S;}
if(out.facWins)out.facWins=winsMap(out.facWins,toRuntime);if(out.favFac){var fav=toRuntime?runtime(out.favFac):canonical(out.favFac);if(fav)out.favFac=fav;}
out.factionSchema=1;return out;
}
function persistMeta(src){return metaCopy(src,false);}function restoreMeta(src){return metaCopy(src,true);}
globalThis.MF_FACTION_IDS=Object.freeze(canonicalIds());globalThis.facCanonicalId=canonical;globalThis.facRuntimeKey=runtime;
globalThis.facArtKey=art;globalThis.facDisplayName=name;globalThis.facCanonicalIds=canonicalIds;
globalThis.facPersistMeta=persistMeta;globalThis.facRestoreMeta=restoreMeta;
if(typeof FACTIONS!=='undefined'){if(FACTIONS.nova)FACTIONS.nova.nm=DEF.nova.name;if(FACTIONS.legion)FACTIONS.legion.nm=DEF.dominion.name;
if(FACTIONS.syndicate)FACTIONS.syndicate.nm=DEF.syndicate.name;if(FACTIONS.horde)FACTIONS.horde.nm=DEF.brood.name;}
if(typeof facArt==='function'){var artBase=facArt;facArt=function(k){return artBase(art(k)||k);};}
if(typeof commanderFactionKey==='function'){var commanderKeyBase=commanderFactionKey;commanderFactionKey=function(k){return runtime(k)||commanderKeyBase(k);};}
if(typeof playerKitKey==='function'){var playerKitBase=playerKitKey;playerKitKey=function(){var k=playerKitBase();return runtime(k)||k;};}
if(typeof applyFactionTheme==='function'){var themeBase=applyFactionTheme;applyFactionTheme=function(k){return themeBase(runtime(k)||k);};}
if(typeof factionUnitGeo==='function'){var unitGeoBase=factionUnitGeo;factionUnitGeo=function(ty,kit,strict){return unitGeoBase(ty,runtime(kit)||kit,strict);};}
if(typeof factionBldMdlSet==='function'){var bldSetBase=factionBldMdlSet;factionBldMdlSet=function(kit,strict){return bldSetBase(runtime(kit)||kit,strict);};}
if(typeof dropFactionKey==='function'){var dropKeyBase=dropFactionKey;dropFactionKey=function(k){return runtime(k)||dropKeyBase(k);};}
if(typeof metaLoad==='function'){var metaLoadBase=metaLoad;metaLoad=function(){var r=metaLoadBase.apply(this,arguments);META=restoreMeta(META);return r;};}
if(typeof metaSave==='function'){var metaSaveBase=metaSave;metaSave=function(){var live=META;try{META=persistMeta(live);return metaSaveBase.apply(this,arguments);}finally{META=live;}};metaSave.__mfFactionIds=true;}
if(typeof syncPayload==='function'){var syncPayloadBase=syncPayload;syncPayload=function(){var p=syncPayloadBase.apply(this,arguments);if(p&&p.meta)p.meta=persistMeta(p.meta);return p;};}
if(typeof applyIncoming==='function'){var applyIncomingBase=applyIncoming;applyIncoming=function(p,src){if(p&&p.meta)p=Object.assign({},p,{meta:restoreMeta(p.meta)});return applyIncomingBase.call(this,p,src);};}
if(typeof cloudMerge==='function'){var cloudMergeBase=cloudMerge;cloudMerge=function(p){if(p&&p.meta)p=Object.assign({},p,{meta:restoreMeta(p.meta)});return cloudMergeBase.call(this,p);};}
if(typeof sessSnapshot==='function'&&typeof SESS_KEY!=='undefined'){var sessSnapshotBase=sessSnapshot;sessSnapshot=function(reason){
var ok=sessSnapshotBase.call(this,reason);if(!ok)return ok;try{var s=JSON.parse(localStorage.getItem(SESS_KEY));if(s){
if(s.setup)s.setup=persistMeta({setup:s.setup}).setup;if(s.aiFac&&s.aiFac!=='random')s.aiFac=canonical(s.aiFac)||s.aiFac;
if(s.playerFac)s.playerFac=canonical(s.playerFac)||s.playerFac;localStorage.setItem(SESS_KEY,JSON.stringify(s));}}catch(e){}return ok;};}
if(typeof sessLoad==='function'){var sessLoadBase=sessLoad;sessLoad=function(){var s=sessLoadBase.apply(this,arguments);if(!s)return s;
if(s.setup)s.setup=restoreMeta({setup:s.setup}).setup;if(s.aiFac&&s.aiFac!=='random')s.aiFac=runtime(s.aiFac)||s.aiFac;
if(s.playerFac)s.playerFac=runtime(s.playerFac)||s.playerFac;return s;};}
})();
|