diff --git a/devTools/FC.ts b/devTools/FC.ts index fd4791e0d7b58a8b2ecc51650d17a8b97f477b11..82253b74720e3fe501b5873ffae1b933b0fbc6e1 100644 --- a/devTools/FC.ts +++ b/devTools/FC.ts @@ -278,7 +278,7 @@ namespace App { namespace DOM { namespace Widgets { } - declare function makeElement<K extends keyof HTMLElementTagNameMap>(tag: K, content: string | Node, classNames: string | string[]): HTMLElementTagNameMap[K]; + declare function makeElement<K extends keyof HTMLElementTagNameMap>(tag: K, content: string | Node, classNames?: string | string[]): HTMLElementTagNameMap[K]; declare function appendNewElement<K extends keyof HTMLElementTagNameMap>(tag: K, parent: ParentNode, content?: string | Node, classNames?: string | string[]): HTMLElementTagNameMap[K]; } namespace View { } diff --git a/js/002-config/fc-js-init.js b/js/002-config/fc-js-init.js index f0f4a2670cc5bd8f4dee378273743a86e4e14c58..550ee01672b9960ed4cbf4b99e439ee30785b1ff 100644 --- a/js/002-config/fc-js-init.js +++ b/js/002-config/fc-js-init.js @@ -43,6 +43,7 @@ App.Facilities.ServantsQuarters = {}; App.Facilities.Spa = {}; App.Interact = {}; App.Intro = {}; +App.Neighbor = {}; App.MainView = {}; App.Medicine = {}; App.Medicine.Modification = {}; diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index a670d18f1fb4ff2019f9bb3cb9b64c120a4d0436..cafb853643fe2fee121317a6581009da75c0f746 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -93,6 +93,7 @@ App.Data.defaultGameStateVariables = { makeDicks: 0, modRequestsAllowed: 1, neighboringArcologies: 3, + neighborDisplay: "list", newDescriptions: 0, newModelUI: 1, nicknamesAllowed: 1, @@ -1116,7 +1117,6 @@ App.Data.resetOnNGPlus = { Wardeness: 0, /** @type {FC.SlaveStateOrZero} */ Concubine: 0, - economicUncertainty: 10, justiceEvents: ["slave deal", "slave training", "majority deal", "indenture deal", "virginity deal", "breeding deal"], /* not in setupVars because we remove events from this array as they occur */ prisonCircuit: ["low tier criminals", "gangs and smugglers", "white collar", "military prison"], diff --git a/src/cheats/mod_EditNeighborArcologyCheat.tw b/src/cheats/mod_EditNeighborArcologyCheat.tw index b4903162a27617c78d1962945a63e5439f3ba785..00a2d0cdeaf34adc8c235ab8967c01524e5e2f15 100644 --- a/src/cheats/mod_EditNeighborArcologyCheat.tw +++ b/src/cheats/mod_EditNeighborArcologyCheat.tw @@ -34,12 +34,8 @@ <</link>> <</if>> -<br> -<<set $averageProsperity = 0, _seed = 0>> -<<for _eca = 0; _eca < $arcologies.length; _eca++>> - <<set $averageProsperity += $arcologies[_eca].prosperity, _seed++>> -<</for>> -<<set $averageProsperity = $averageProsperity/_seed>> +<br><br> +<<set $averageProsperity = _.mean($arcologies.map((a) => a.prosperity))>> <<for $i = 1; $i < $arcologies.length; $i++>> <<if $arcologies[$i].direction != 0>> diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js index d0f12b4330a61b4ab894c712a0fc33057445d4bf..cfba77e9bdf49917629d0406c1d60cd714e0ce15 100644 --- a/src/js/futureSocietyJS.js +++ b/src/js/futureSocietyJS.js @@ -89,6 +89,7 @@ globalThis.FutureSocieties = (function() { }; return { + activeFSes: activeFSes, activeCount: activeCount, applyBroadProgress: applyBroadProgress, influenceSources: influenceSources, diff --git a/src/js/generateMarketSlave.js b/src/js/generateMarketSlave.js index 8d025903825d3d9d7f6a741d0f5b6a743464d02b..1088be2f554d0a8959f61628fa5d9273b9566c30 100644 --- a/src/js/generateMarketSlave.js +++ b/src/js/generateMarketSlave.js @@ -470,7 +470,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1 } else { market = 1; } - opinion = ArcologyDiplomacy.opinion(0, market); + opinion = App.Neighbor.opinion(0, market); opinion = Math.trunc(opinion/20); opinion = Math.clamp(opinion, -10, 10); diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js index 017e3f57dcf64afd86f9f6efd4f60c07b624e6f6..b9d78538af1a29e290e297228842f5f813d9d36e 100644 --- a/src/js/utilsFC.js +++ b/src/js/utilsFC.js @@ -2947,3 +2947,17 @@ App.Utils.countAssignmentWorkers = function(assignments) { assignments = assignments || Object.values(Job); return assignments.reduce((acc, cur) => { acc[cur] = V.JobIDMap[cur].size; return acc; }, {}); }; + +/** Calculate and return economic uncertainty multiplier for a given arcology + * @param {number} arcologyID + * @returns {number} + */ +App.Utils.economicUncertainty = function(arcologyID) { + let uncertainty = arcologyID === 0 ? 5 : 10; + if (assistant.power === 1) { + uncertainty -= Math.max(Math.trunc(uncertainty/2), 0); + } else if (assistant.power > 1) { + uncertainty = 0; + } + return jsRandom(100 - uncertainty, 100 + uncertainty) / 100; +}; diff --git a/src/neighbor/arcologyDiplomacy.js b/src/neighbor/arcologyDiplomacy.js index 9283acf2496456789cd073622f8130437668d837..0f0a1c1962150e599433cef0f5d0514e43a633dd 100644 --- a/src/neighbor/arcologyDiplomacy.js +++ b/src/neighbor/arcologyDiplomacy.js @@ -1,78 +1,68 @@ -globalThis.ArcologyDiplomacy = (function() { - return { - opinion: opinion, - selectInfluenceTarget: selectInfluenceTarget - }; - - /** get one arcology's opinion of another - * @param {number} activeID index - * @param {number} targetID index - * @returns {number} opinion - */ - function opinion(activeID, targetID) { - const activeArcology = V.arcologies[activeID]; - const targetArcology = V.arcologies[targetID]; - if (typeof activeArcology.FSNull === "undefined") { activeArcology.FSNull = "unset"; } - if (typeof targetArcology.FSNull === "undefined") { targetArcology.FSNull = "unset"; } - - let opinion = 0; - - const {shared, conflicting} = FutureSocieties.diplomaticFSes(activeID, targetID); - - for (const fs of shared) { - opinion += activeArcology[fs]; - opinion += targetArcology[fs]; - } +/** get one arcology's opinion of another + * @param {number} activeID index + * @param {number} targetID index + * @returns {number} opinion + */ +App.Neighbor.opinion = function(activeID, targetID) { + const activeArcology = V.arcologies[activeID]; + const targetArcology = V.arcologies[targetID]; + const {shared, conflicting} = FutureSocieties.diplomaticFSes(activeID, targetID); + + let opinion = 0; + + for (const fs of shared) { + opinion += activeArcology[fs]; + opinion += targetArcology[fs]; + } - for (const [activeFS, targetFS] of conflicting) { - opinion -= activeArcology[activeFS]; - opinion -= targetArcology[targetFS]; - } + for (const [activeFS, targetFS] of conflicting) { + opinion -= activeArcology[activeFS]; + opinion -= targetArcology[targetFS]; + } - // unshared but uncontested multiculturalism gets a relationship bonus - if (!shared.includes("FSNull") && !conflicting.some((pair) => pair.includes("FSNull"))) { - if (activeArcology.FSNull !== "unset") { - opinion += activeArcology.FSNull; - } else if (targetArcology.FSNull !== "unset") { - opinion += targetArcology.FSNull; - } + // unshared but uncontested multiculturalism gets a relationship bonus + if (!shared.includes("FSNull") && !conflicting.some((pair) => pair.includes("FSNull"))) { + if (activeArcology.FSNull !== "unset") { + opinion += activeArcology.FSNull; + } else if (targetArcology.FSNull !== "unset") { + opinion += targetArcology.FSNull; } - - return opinion = Number(opinion) || 0; } - /** set a new influence target for a given arcology - * @param {number} arcID - */ - function selectInfluenceTarget(arcID) { - const notMulticulturalism = (f) => f !== "FSNull"; // multiculturalism can neither influence nor be influenced - const influenceSources = FutureSocieties.influenceSources(arcID); - const arcology = V.arcologies[arcID]; - if (influenceSources.length > 0) { - let eligibleTargets = []; - const obdedient = (arcology.government === "your trustees" || arcology.government === "your agent"); + return opinion; +}; - for (let targetID = 0; targetID < V.arcologies.length; ++targetID) { - const target = V.arcologies[targetID]; - if (arcology.direction !== target.direction) { - if (!obdedient || target.direction !== 0) { - const {shared, conflicting} = FutureSocieties.diplomaticFSes(arcID, targetID); - let count = 0; - count += shared.filter(notMulticulturalism).length; - count += conflicting.filter((pair) => pair.every(notMulticulturalism)).length; - eligibleTargets.push(...Array(count).fill(target.direction)); - } +/** set a new influence target for a given arcology + * @param {number} arcID + */ +App.Neighbor.selectInfluenceTarget = function(arcID) { + const notMulticulturalism = (f) => f !== "FSNull"; // multiculturalism can neither influence nor be influenced + const influenceSources = FutureSocieties.influenceSources(arcID); + const arcology = V.arcologies[arcID]; + if (influenceSources.length > 0) { + let eligibleTargets = []; + const obdedient = (arcology.government === "your trustees" || arcology.government === "your agent"); + + for (let targetID = 0; targetID < V.arcologies.length; ++targetID) { + const target = V.arcologies[targetID]; + if (arcology.direction !== target.direction) { + if (!obdedient || target.direction !== 0) { + const {shared, conflicting} = FutureSocieties.diplomaticFSes(arcID, targetID); + let count = 0; + count += shared.filter(notMulticulturalism).length; + count += conflicting.filter((pair) => pair.every(notMulticulturalism)).length; + eligibleTargets.push(...Array(count).fill(target.direction)); } } + } - if (eligibleTargets.length > 0) { - arcology.influenceTarget = eligibleTargets.random(); - } + if (eligibleTargets.length > 0) { + arcology.influenceTarget = eligibleTargets.random(); } } -})(); +}; -globalThis.ArcologyFSPassiveInfluence = class { +App.Neighbor.PassiveFSInfluence = class { /** pick up social hints from an arcology's neighbors * @param {number} arcID */ @@ -106,7 +96,6 @@ globalThis.ArcologyFSPassiveInfluence = class { let conflicting = new Map(); const arcology = V.arcologies[this._arcID]; - debugger; for (const [i, rel] of this._relationships) { if (rel.shared.some((s) => s === fs)) { if (V.arcologies[i][fs] > arcology[fs] + this._thresh) { diff --git a/src/uncategorized/neighborDescription.tw b/src/neighbor/neighborDescription.tw similarity index 92% rename from src/uncategorized/neighborDescription.tw rename to src/neighbor/neighborDescription.tw index 91b4e531e3b9a7fec1aa63f171eafbb8d2d99654..2d4dc8f17960c7c97376fc68d021e49ed0dd3073 100644 --- a/src/uncategorized/neighborDescription.tw +++ b/src/neighbor/neighborDescription.tw @@ -1,43 +1,37 @@ :: Neighbor Description [nobr] -<br><br> -'' $arcologies[$i].name'' is located to the $arcologies[$i].direction of your arcology. It is governed by -<<switch $arcologies[$i].government>> -<<case "elected officials">> - elected officials, periodically paralyzing its development. -<<case "a committee">> - a committee, hindering its development. -<<case "an oligarchy">> - a small group of leading citizens, making its development very unpredictable. -<<case "your trustees">> - a small group of leading citizens who are serving as @@.mediumseagreen;your trustees.@@ -<<case "an individual">> - @@.cyan;an individual,@@ making its development vibrant but unpredictable. -<<case "your agent">> - @@.deeppink;your agent,@@ who is directing the arcology in your stead. -<<case "a corporation">> - a corporation, making its development steady and unspectacular. -<<default>> - direct democracy, making its development dangerously unstable. -<</switch>> -<<if $arcologies[$i].direction == 0>> - <<set $economicUncertainty = 5>> +<div class="indent"> +<<if $arcologies[$i].direction != 0>> + ''$arcologies[$i].name'' is located to the $arcologies[$i].direction of your arcology. It is governed by + <<switch $arcologies[$i].government>> + <<case "elected officials">> + elected officials, periodically paralyzing its development. + <<case "a committee">> + a committee, hindering its development. + <<case "an oligarchy">> + a small group of leading citizens, making its development very unpredictable. + <<case "your trustees">> + a small group of leading citizens who are serving as @@.mediumseagreen;your trustees.@@ + <<case "an individual">> + @@.cyan;an individual,@@ making its development vibrant but unpredictable. + <<case "your agent">> + @@.deeppink;your agent,@@ who is directing the arcology in your stead. + <<case "a corporation">> + a corporation, making its development steady and unspectacular. + <<default>> + direct democracy, making its development dangerously unstable. + <</switch>> <<else>> - <<set $economicUncertainty = 10>> -<</if>> -<<if $assistant.power > 1>> - <<set $economicUncertainty = 0>> -<<elseif $assistant.power == 1>> - <<set $economicUncertainty = Math.max(Math.trunc($economicUncertainty/2),0)>> + ''$arcologies[$i].name'' is your arcology. <</if>> -<<if $arcologies[$i].government != "your trustees">> - <<if $arcologies[$i].government != "your agent">> - Its leadership has control of approximately @@.orange;<<print Math.trunc(($arcologies[$i].ownership*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ of the arcology<<if $arcologies[$i].minority > $arcologies[$i].ownership-10>>, a dangerously narrow margin over competition with a @@.tan;<<print Math.trunc(($arcologies[$i].minority*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ share<</if>>. - <</if>> +<<set _economicUncertainty = App.Utils.economicUncertainty($i)>> +<<if $arcologies[$i].direction == 0>> + You control @@.lime;$arcologies[$i].ownership%@@ of the arcology, and the largest minority holder controls @@.orange;$arcologies[$i].minority%.@@ +<<elseif ($arcologies[$i].government != "your trustees") && ($arcologies[$i].government != "your agent")>> + Its leadership has control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > $arcologies[$i].ownership-10>>, a dangerously narrow margin over competition with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>. <</if>> -<<if $arcologies[$i].PCminority > 0>>You own @@.lime;$arcologies[$i].PCminority%@@ of this arcology<<if (($arcologies[$i].government == "your trustees") || ($arcologies[$i].government == "your agent")) && $arcologies[$i].minority > $arcologies[$i].PCminority-10>>, a dangerously narrow margin over competition with a @@.red;<<print Math.trunc(($arcologies[$i].minority*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ share<</if>>.<</if>> -<<set $economicUncertainty -= Math.min(2*$assistant.power, $economicUncertainty)>> -The arcology has an estimated GSP of @@.yellowgreen;<<print cashFormat(Math.trunc((0.1*$arcologies[$i].prosperity*random(100-$economicUncertainty,100+$economicUncertainty))/100))>>m,@@ +<<if $arcologies[$i].PCminority > 0>>You own @@.lime;$arcologies[$i].PCminority%@@ of this arcology<<if (($arcologies[$i].government == "your trustees") || ($arcologies[$i].government == "your agent")) && $arcologies[$i].minority > $arcologies[$i].PCminority-10>>, a dangerously narrow margin over competition with a @@.red;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>.<</if>> +The arcology has an estimated GSP of @@.yellowgreen;<<print cashFormat(Math.trunc(0.1*$arcologies[$i].prosperity*_economicUncertainty))>>m,@@ <<if Math.abs($arcologies[$i].prosperity - $averageProsperity) < 5>> average among <<elseif $arcologies[$i].prosperity > $averageProsperity>> @@ -614,3 +608,4 @@ its neighbors. Its culture is diverging from the old world: it is _neighborDescription[0] <</if>> <</if>> +</div> diff --git a/src/neighbor/neighborDisplay.css b/src/neighbor/neighborDisplay.css new file mode 100644 index 0000000000000000000000000000000000000000..87c240223bf31ca5a97513c1f717993166fa8d28 --- /dev/null +++ b/src/neighbor/neighborDisplay.css @@ -0,0 +1,48 @@ +.neighbor-container { + background-color: rgba(17,17,17,1); + padding: 5px; + max-width: fit-content; + margin: 0 auto; +} + +.neighbor-container-grid { + display: grid; + grid-template-columns: auto auto auto; +} + +.neighbor-container-list { + display: flex; + flex-flow: row wrap; + align-items: flex-start; +} + +.neighbor-item { + margin: 3px; + border: 5px solid; + padding: 10px; + text-align: center; +} + +.neighbor-item-selected { + background-color: rgba(255, 255, 255, 0.2); +} + +.neighbor-item-empty { + border-color: rgba(17,17,17,1); +} + +.neighbor-item-self { + border-color: white; +} + +.neighbor-item-owned { + border-color: steelblue; +} + +.neighbor-item-unowned { + border-color: red; +} + +.neighbor-item-rival { + border-color: crimson; +} diff --git a/src/neighbor/neighborDisplay.js b/src/neighbor/neighborDisplay.js new file mode 100644 index 0000000000000000000000000000000000000000..7f035f2e115259b5160c28b1555675ac7fe98c5b --- /dev/null +++ b/src/neighbor/neighborDisplay.js @@ -0,0 +1,208 @@ +App.Neighbor.Display = class { + /** Create a neighbor display controller + * @param {function(number):void} onSelection function to be called when selection changes + */ + constructor(onSelection) { + this.containerID = "neighbor-display"; + this._onSelection = onSelection; + } + + /** Render the neighbor display to DOM + * @returns {Element} + */ + render() { + const container = document.createElement("div"); + container.id = this.containerID; + + function makeSortLink(/** @type {string} */ title, /** @type {string} */ mode) { + if (V.neighborDisplay === mode) { + return document.createTextNode(title); + } else { + return App.UI.DOM.link(title, () => { V.neighborDisplay = mode; this.rerender(); } ); + } + } + + container.append("Neighbor display mode:"); + container.appendChild(App.UI.DOM.generateLinksStrip([ + makeSortLink.call(this, "List by ID", "list"), + makeSortLink.call(this, "List by Name", "list-name"), + makeSortLink.call(this, "City Grid", "grid") + ])); + + // pick a mode + if (V.neighborDisplay === "grid") { + container.appendChild(this._renderGrid()); + } else if (V.neighborDisplay === "list-name") { + container.appendChild(this._renderListName()); + } else { // default if $neighborDisplay is unset for some reason; canonically "list" + container.appendChild(this._renderListID()); + } + return container; + } + + /** Refresh an existing neighbor display list */ + rerender() { + $(`#${this.containerID}`).replaceWith(this.render()); + } + + /** Render the display as a list, sorted by ID + * @returns {Element} + */ + _renderListID() { + const container = App.UI.DOM.makeElement("div", null, ["neighbor-container", "neighbor-container-list"]); + + for (let i = 0; i < V.arcologies.length; ++i) { + this._renderCell(container, i); + } + + return container; + } + + /** Render the display as a list, sorted by name + * @returns {Element} + */ + _renderListName() { + const container = App.UI.DOM.makeElement("div", null, ["neighbor-container", "neighbor-container-list"]); + + const arcologyNames = V.arcologies.map((a) => a.name).sort((a, b) => a.localeCompare(b)); + for (const name of arcologyNames) { + this._renderCell(container, V.arcologies.findIndex((a) => a.name === name)); + } + + return container; + } + + /** Render the display as a grid + * @returns {Element} + */ + _renderGrid() { + const container = App.UI.DOM.makeElement("div", null, ["neighbor-container", "neighbor-container-grid"]); + + const directionToIndex = (dir) => V.arcologies.findIndex((a) => a.direction === dir); + for (const dir of [ "northwest", "north", "northeast", "west", 0, "east", "southwest", "south", "southeast" ]) { + this._renderCell(container, directionToIndex(dir)); + } + + return container; + } + + /** Render a single cell to the display + * @param {Element} container + * @param {number} arcID + */ + _renderCell(container, arcID) { + const arcology = V.arcologies[arcID]; + + /** render styled text with a tooltip + * @param {string} text + * @param {string} tooltipText + * @param {string} className + * @returns {HTMLSpanElement} + */ + function withTooltip(text, tooltipText, className) { + let tooltip = App.UI.DOM.makeElement("span", tooltipText, "tooltip"); + let res = App.UI.DOM.makeElement("span", text, ["textWithTooltip", className]); + res.appendChild(tooltip); + return res; + } + + /** @param {function(): void} selectLambda */ + function nameFrag(selectLambda) { + return App.UI.DOM.makeElement("div", App.UI.DOM.link(arcology.name, selectLambda), "name"); + } + + function govGSPFrag() { + let frag = document.createDocumentFragment(); + let gov; + if (arcID === 0) { + gov = App.UI.DOM.appendNewElement("div", frag, "Your arcology; "); + } else { + gov = App.UI.DOM.appendNewElement("div", frag, capFirstChar(arcology.government) + '; '); + } + const estimatedGSP = Math.trunc(0.1 * arcology.prosperity * App.Utils.economicUncertainty(arcID)); + App.UI.DOM.appendNewElement("span", gov, cashFormat(estimatedGSP) + "m GSP", "cash"); + return frag; + } + + function fsFrag() { + let frag = document.createDocumentFragment(); + frag.appendChild(document.createTextNode("FS: ")); + if (arcID === 0) { + const fses = FutureSocieties.activeFSes(0); + for (const fs of fses) { + frag.appendChild(withTooltip("â¯", FutureSocieties.displayName(fs), "steelblue")); + } + } else { + const fses = FutureSocieties.activeFSes(arcID); + const diplo = FutureSocieties.diplomaticFSes(arcID, 0); + for (const fs of fses) { + let style = "white"; + if (diplo.shared.includes(fs)) { + style = "steelblue"; + } else { + const conflict = diplo.conflicting.find((f) => f[0] === fs); + if (conflict) { + style = "red"; + } + } + frag.appendChild(withTooltip("â¯", FutureSocieties.displayName(fs), style)); + } + } + return App.UI.DOM.makeElement("div", frag); + } + + function ownershipFrag() { + let frag = document.createDocumentFragment(); + const owned = arcID === 0 || arcology.government === "your trustees" || arcology.government === "your agent"; + const yourPercent = arcID === 0 ? `${arcology.ownership}%` : `${arcology.PCminority}%`; + const hostilePercent = owned ? `${arcology.minority}%` : `${arcology.ownership}%`; + const challengerPercent = owned ? null : `${arcology.minority}%`; + const publicPercent = `${100 - (arcology.ownership + arcology.minority + arcology.PCminority)}%`; + App.UI.DOM.appendNewElement("li", frag, withTooltip(yourPercent, "Your ownership", "steelblue")); + if (arcID !== 0) { + App.UI.DOM.appendNewElement("li", frag, withTooltip(publicPercent, "Public ownership", "yellow")); + } + if (challengerPercent) { + App.UI.DOM.appendNewElement("li", frag, withTooltip(challengerPercent, "Minority challenger ownership", "orange")); + } + App.UI.DOM.appendNewElement("li", frag, withTooltip(hostilePercent, "Hostile ownership", "red")); + return App.UI.DOM.makeElement("ul", frag, "choicesStrip"); + } + + let frag = document.createDocumentFragment(); + let classNames = ["neighbor-item"]; + if (!arcology) { + // empty block + classNames.push("neighbor-item-empty"); + } else { + frag.appendChild(nameFrag(() => this.select(arcID))); + frag.appendChild(govGSPFrag()); + frag.appendChild(fsFrag()); + frag.appendChild(ownershipFrag()); + if (arcID === 0) { + classNames.push("neighbor-item-self"); + } else if (arcology.government === "your trustees" || arcology.government === "your agent") { + classNames.push("neighbor-item-owned"); + } else if (arcology.rival) { + classNames.push("neighbor-item-rival"); + } else { + classNames.push("neighbor-item-unowned"); + } + } + + const element = App.UI.DOM.appendNewElement("div", container, frag, classNames); + element.id = `neighbor-cell-${arcID}`; + } + + /** Set the selection to a particular arcology + * @param {number} arcID + */ + select(arcID) { + const elementID = `#neighbor-cell-${arcID}`; + + $("div[id^='neighbor-cell']").each((i, e) => { $(e).removeClass("neighbor-item-selected"); }); + $(elementID).addClass("neighbor-item-selected"); + + this._onSelection(arcID); + } +}; diff --git a/src/neighbor/neighborInteract.js b/src/neighbor/neighborInteract.js new file mode 100644 index 0000000000000000000000000000000000000000..e13f02b9c98a87fb34a3ef4b9bb434b23712255a --- /dev/null +++ b/src/neighbor/neighborInteract.js @@ -0,0 +1,322 @@ +App.Neighbor.Interact = (function() { + let nd = new App.Neighbor.Display((id) => replaceDetails(id)); + + /** Output the arcology list + * @returns {DocumentFragment} + */ + function list() { + V.arcologies.forEach((a) => a.prosperity = Math.clamp(a.prosperity, 1, 300)); + if (!V.activeArcologyIdx) { + V.activeArcologyIdx = 0; + } + + let frag = document.createDocumentFragment(); + + // set up the neighbor display list itself + frag.append(nd.render()); + $(document).one(':passagedisplay', () => nd.select(V.activeArcologyIdx)); + + // empty container for details + const detailSpan = App.UI.DOM.appendNewElement("span", frag); + detailSpan.id = "neighbor-details"; + + return frag; + } + + /** Replace the details block with an updated one for the given arcology + * Used both as a refresh and as a selection handler + * @param {number} arcID + */ + function replaceDetails(arcID) { + V.activeArcologyIdx = arcID; + const container = $("#neighbor-details").empty(); + container.append(description(arcID)); + container.append(details(arcID)); + } + + /** Re-render most of the page because some important arcology property (FS, government, ownership) may have changed + * @param {number} arcID for reselection + */ + function arcChanged(arcID) { + nd.rerender(); + nd.select(arcID); + } + + /** Create a div containing the neighbor's description + * @param {number} arcID + * @returns {Element} + */ + function description(arcID) { + // still in Twine for now + let container = document.createElement("div"); + V.i = arcID; + App.UI.DOM.includePassage(container, "Neighbor Description"); + return container; + } + + /** Create a fragment containing all the details for a given arcology + * @param {number} arcID + * @returns {DocumentFragment} + */ + function details(arcID) { + let frag = document.createDocumentFragment(); + if (arcID === 0) { + const desc = FutureSocieties.activeFSes(0).map((f) => FutureSocieties.displayName(f)); + if (desc.length === 0) { + App.UI.DOM.appendNewElement("p", frag, `Your arcology's culture has not developed to the point where it can meaningfully influence other arcologies.`); + } else if (desc.length > 2) { + App.UI.DOM.appendNewElement("p", frag, `Your arcology's mature culture is capable of exerting great cultural sway over other arcologies. It can readily project ${desc.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch)}.`); + } else if (desc.length === 2) { + App.UI.DOM.appendNewElement("p", frag, `Your arcology's culture is capable of exerting some cultural sway over other arcologies. It can effectively project ${desc[0]} and ${desc[1]}.`); + } else { + App.UI.DOM.appendNewElement("p", frag, `Your arcology's culture is capable of starting to exert cultural sway over other arcologies. It can project ${desc[0]}.`); + } + } else { + const ownershipCost = 500*Math.trunc(V.arcologies[arcID].prosperity*(1+(V.arcologies[arcID].demandFactor/100))); + frag.append(`A 1% interest in this arcology is worth ${cashFormat(ownershipCost)}. `); + if (V.arcologies[arcID].ownership + V.arcologies[arcID].PCminority + V.arcologies[arcID].minority < 100) { + frag.append(`The transaction fee is ${cashFormat(10000)}.`); + } + + if (V.arcologies[arcID].ownership + V.arcologies[arcID].PCminority + V.arcologies[arcID].minority < 100) { + let links = []; + links.push(App.UI.DOM.link("Buy", (f) => { + cashX(forceNeg(ownershipCost), "war"); + cashX(-10000, "war"); + V.arcologies[arcID].PCminority += 1; + V.arcologies[arcID].demandFactor += 2; + }, [], "Neighbor Interact")); + if (V.arcologies[arcID].ownership + V.arcologies[arcID].PCminority + V.arcologies[arcID].minority <= 90) { + if (V.cash > ownershipCost*10) { + const link = App.UI.DOM.link("10%", (f) => { + cashX(forceNeg(ownershipCost*10), "war"); + cashX(-10000, "war"); + V.arcologies[arcID].PCminority += 10; + V.arcologies[arcID].demandFactor += 20; + }, [], "Neighbor Interact"); + links.push(link); + } + } + const div = App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.generateLinksStrip(links)); + if (links.length > 1) { + App.UI.DOM.appendNewElement("span", div, "Transaction costs will only be paid once.", "detail"); + } + } + + if (V.arcologies[arcID].PCminority > 0) { + let links = []; + links.push(App.UI.DOM.link("Sell", (f) => { + cashX(ownershipCost, "war"); + V.arcologies[arcID].PCminority -= 1; + V.arcologies[arcID].demandFactor -= 2; + if (V.arcologies[arcID].government !== "your agent" && V.arcologies[arcID].government !== "your trustees" && V.arcologies[arcID].rival !== 1) { + if (V.arcologies[arcID].ownership + V.arcologies[arcID].PCminority + V.arcologies[arcID].minority < 10) { + V.arcologies[arcID].ownership += 10; + } + } + arcChanged(arcID); + }, [], "Neighbor Interact")); + if (V.arcologies[arcID].PCminority >= 10) { + links.push(App.UI.DOM.link("10%", (f) => { + cashX((ownershipCost*10), "war"); + V.arcologies[arcID].PCminority -= 10; + V.arcologies[arcID].demandFactor -= 20; + if (V.arcologies[arcID].government !== "your agent" && V.arcologies[arcID].government !== "your trustees" && V.arcologies[arcID].rival !== 1) { + if (V.arcologies[arcID].ownership + V.arcologies[arcID].PCminority + V.arcologies[arcID].minority < 10) { + V.arcologies[arcID].ownership += 10; + } + } + }, [], "Neighbor Interact")); + } + App.UI.DOM.appendNewElement("div", frag, App.UI.DOM.generateLinksStrip(links)); + } + + if (V.arcologies[arcID].direction !== V.arcologies[0].embargoTarget) { + frag.append(document.createElement("br")); + frag.append(App.UI.DOM.passageLink("Target them for economic warfare", "Neighbor Interact", () => V.arcologies[0].embargoTarget = V.arcologies[arcID].direction)); + } + + if (V.PC.skill.hacking > 0) { + if (V.arcologies[arcID].direction !== V.arcologies[0].CyberEconomicTarget) { + frag.append(document.createElement("br")); + frag.append(App.UI.DOM.passageLink("Target them for cyber economic warfare", "Neighbor Interact", () => V.arcologies[0].CyberEconomicTarget = V.arcologies[arcID].direction)); + } + if (V.arcologies[arcID].direction !== V.arcologies[0].CyberReputationTarget) { + frag.append(document.createElement("br")); + frag.append(App.UI.DOM.passageLink("Target their leadership for character assassination", "Neighbor Interact", () => V.arcologies[0].CyberReputationTarget = V.arcologies[arcID].direction)); + } + } + if (FutureSocieties.influenceSources(0).length > 0) { + if (V.arcologies[arcID].direction !== V.arcologies[0].influenceTarget) { + frag.append(document.createElement("br")); + frag.append(App.UI.DOM.passageLink("Set as influence target", "Neighbor Interact", () => V.arcologies[0].influenceTarget = V.arcologies[arcID].direction)); + } + } + + if (V.arcologies[arcID].government === "your trustees" || V.arcologies[arcID].government === "your agent") { + frag.append(controlActions(arcID)); + } + + frag.append(fsGoods(arcID)); + } + return frag; + } + + /** Create a div containing actions specific to arcologies that are under the player's control + * @param {number} arcID + * @returns {Element} + */ + function controlActions(arcID) { + const container = document.createElement("div"); + const agent = App.currentAgent(arcID); + const him = agent ? getPronouns(agent).him : "them"; + container.append(document.createElement("br")); + if (V.arcologies[arcID].government === "your trustees") { + container.append(App.UI.DOM.passageLink("Appoint an agent", "Agent Select")); + } else { + let linkText = `Recall and reenslave ${him}`; + const residentList = [agent.ID]; + const agentPartner = V.slaves.find((s) => s.assignment === Job.AGENTPARTNER && s.relationshipTarget === agent.ID); + if (agentPartner) { + linkText = `Recall them and reenslave your agent`; + residentList.push(agentPartner.ID); + } + container.append(App.UI.SlaveList.render.listDOM(residentList, [], App.UI.SlaveList.SlaveInteract.stdInteract)); + container.append(App.UI.DOM.link(linkText, (f) => { removeJob(agent, "be your agent"); arcChanged(arcID); })); + } + container.append(" | "); + const rename = App.UI.DOM.appendNewElement("span", container, ''); + rename.id = "rename"; + rename.append(App.UI.DOM.link(`Instruct ${him} to rename the arcology`, () => $("#rename").replaceWith([ + App.UI.DOM.makeTextBox(V.arcologies[arcID].name, (s) => { V.arcologies[arcID].name = s; }, false), + App.UI.DOM.link("Confirm name", arcChanged, [arcID]) + ]))); + + if (V.arcologies[arcID].government === "your agent") { + const {His, his, he, himself /* him is already set */} = getPronouns(agent); + let r = []; + r.push(`${His} ${agent.intelligence > 95 ? `brilliance` : `intelligence`} and education are the most important qualities for ${him}.`); + if (agent.actualAge > 35) { + r.push(`As with the Head Girl position, ${his} age and experience lend ${him} leadership weight.`); + } + if (agent.career === "an arcology owner") { + r.push(`${His} career as an arcology owner ${himself} is, obviously, useful to ${him}.`); + } else if (setup.HGCareers.includes(agent.career)) { + r.push(`${His} career in leadership helps ${him}.`); + } + if (agent.fetishStrength > 95) { + if ((agent.fetish === "dom") || (agent.fetish === "sadist")) { + r.push(`${His} sexually dominant fetish helps ${him} fill a leadership role.`); + } else if ((agent.fetish === "submissive") || (agent.fetish === "masochist")) { + r.push(`Unfortunately, ${he} has an inappropriate fetish for a leader.`); + } else { + r.push(`${His} sexual fetishes will influence how ${he} leads the arcology.`); + } + } + if (agent.energy > 95) { + r.push(`Finally, ${his} sexual depravity lets ${him} fit into arcology society naturally.`); + } + App.UI.DOM.appendNewElement("div", container, r.join(' ' )); + } + + container.append(document.createElement("br")); + const forceAbandonment = (fs) => { V.arcologies[arcID][fs] = "unset"; arcChanged(arcID); }; + for (const fs of FutureSocieties.activeFSes(arcID)) { + App.UI.DOM.appendNewElement("div", container, App.UI.DOM.link(`Force abandonment of ${FutureSocieties.displayName(fs)}`, forceAbandonment, [fs])); + } + + return container; + } + + /** Create an element containing all the society-dependent stuff you can buy from this arcology. + * @param {number} arcID + * @returns {Element} + */ + function fsGoods(arcID) { + const container = document.createElement("div"); + let r = []; + r.push(`If ${V.arcologies[arcID].name} has developed enough to begin exporting worthwhile goods, it may be of interest to acquire some.`); + const opinionDiscount = App.Neighbor.opinion(arcID, 0)*10; + const basePrice = Math.trunc((7500-opinionDiscount)*V.upgradeMultiplierTrade); + const controlled = (V.arcologies[arcID].government === "your trustees") || (V.arcologies[arcID].government === "your agent"); + if (controlled) { + r.push(`Since it is under your control, it is no problem at all to request the transfer of goods to ${V.arcologies[0].name}.`); + } else if (V.PC.skill.hacking >= 50) { + r.push(`It is within your skills to redirect an outgoing shipment to ${V.arcologies[0].name} for your retrieval.`); + } else if (V.arcologies[arcID].direction === V.arcologies[0].embargoTarget) { + r.push(`However, due to your active embargo, trade with ${V.arcologies[arcID].name} is not possible.`); + } + App.UI.DOM.appendNewElement("p", container, r.join(' ')); + + let exports = 0; + + /** Build a link or text block describing how to acquire a specific good from this arcology + * @param {string} fsRequired - the FS that the arcology has to have for this block to appear + * @param {string} itemName - the item name to check to see if the player already has this item + * @param {string} category - the category to check to see if the player already has this item + * @param {string} itemDisplay - a display name for a group of the item; as in, "a shipment of XXX" or "enough XXX" + * @param {string} property - the global property controlling whether this item has been acquired + * @param {number} [itemPrice] - the price the player should pay for the item; by default, basePrice (computed above) + */ + function addAcquisitionBlock(fsRequired, itemName, category, itemDisplay, property, itemPrice = basePrice) { + if (V.arcologies[arcID][fsRequired] > 95) { + if (!isItemAccessible.entry(itemName, category)) { + if (controlled) { + const link = App.UI.DOM.link(`Request a shipment of ${itemDisplay}`, (f) => { + V[property] = 1; + replaceDetails(arcID); + }); + App.UI.DOM.appendNewElement("div", container, link); + } else if (V.PC.skill.hacking >= 50) { + const link = App.UI.DOM.link(`Divert an outgoing shipment of ${itemDisplay}`, (f) => { + V[property] = 1; + replaceDetails(arcID); + }); + App.UI.DOM.appendNewElement("div", container, link); + } else if (V.arcologies[arcID].direction !== V.arcologies[0].embargoTarget) { + const link = App.UI.DOM.link(`Divert an outgoing shipment of ${itemDisplay}`, (f) => { + V[property] = 1; + cashX(forceNeg(itemPrice), "capEx"); + // replaceDetails(arcID); - cash changed, force passage transition for sidebar update + }, [], "Neighbor Interact"); + const div = App.UI.DOM.appendNewElement("div", container, link); + App.UI.DOM.appendNewElement("span", div, `Will cost ${cashFormat(itemPrice)}`, "detail"); + } + } else { + App.UI.DOM.appendNewElement("div", container, `You already have enough ${itemDisplay}.`); + } + exports = 1; + } + } + + addAcquisitionBlock("FSRomanRevivalist", "a toga", "clothing", "togas", "clothesBoughtToga"); + addAcquisitionBlock("FSEdoRevivalist", "a kimono", "clothing", "kimonos", "clothesBoughtKimono"); + addAcquisitionBlock("FSArabianRevivalist", "harem gauze", "clothing", "silken harem garb", "clothesBoughtHarem"); + addAcquisitionBlock("FSAztecRevivalist", "a huipil", "clothing", "huipils", "clothesBoughtHuipil"); + addAcquisitionBlock("FSChineseRevivalist", "a slutty qipao", "clothing", "skimpy qipaos", "clothesBoughtQipao"); + addAcquisitionBlock("FSEgyptianRevivalist", "ancient Egyptian", "collar", "Egyptian necklace replicas", "clothesBoughtEgypt"); + addAcquisitionBlock("FSPaternalist", "conservative clothing", "clothing", "conservative clothing", "clothesBoughtConservative"); + addAcquisitionBlock("FSDegradationist", "chains", "clothing", "binding chains", "clothesBoughtChains"); + addAcquisitionBlock("FSGenderFundamentalist", "a bunny outfit", "clothing", "bunny suits", "clothesBoughtBunny"); + addAcquisitionBlock("FSIntellectualDependency", "a bimbo outfit", "cloting", "bimbo attire", "clothesBoughtBimbo"); + addAcquisitionBlock("FSSlaveProfessionalism", "a courtesan dress", "clothing", "cortesan dresses", "clothesBoughtCourtesan"); + // addAcquisitionBlock("FSPetiteAdmiration", "petite dress", "clothing", "petite-sized dresses", "clothesBoughtPetite"); + addAcquisitionBlock("FSPhysicalIdealist", "body oil", "clothing", "body oil", "clothesBoughtOil"); + addAcquisitionBlock("FSHedonisticDecadence", "stretch pants and a crop-top", "clothing", "stretch pants and crop-tops", "clothesBoughtLazyClothes"); + addAcquisitionBlock("FSChattelReligionist", "a chattel habit", "clothing", "chattel religionist habits", "clothesBoughtHabit"); + addAcquisitionBlock("FSPastoralist", "Western clothing", "clothing", "Western clothing", "clothesBoughtWestern"); + addAcquisitionBlock("FSRepopulationFocus", "a maternity dress", "clothing", "maternity dresses", "clothesBoughtMaternityDress"); + addAcquisitionBlock("FSRepopulationFocus", "attractive lingerie for a pregnant woman", "clothing", "maternity lingerie", "clothesBoughtMaternityLingerie"); + addAcquisitionBlock("FSRepopulationFocus", "a small empathy belly", "bellyAccessory", "empathy bellies", "clothesBoughtBelly"); + addAcquisitionBlock("FSStatuesqueGlorification", "platform heels", "shoes", "platform shoes", "shoesBoughtHeels"); + + if (exports !== 1) { + const luck = (V.arcologies[arcID].direction === V.arcologies[0].embargoTarget) ? `Fortunately` : `Unfortunately`; + App.UI.DOM.appendNewElement("p", container, `${luck}, they have nothing of value.`); + } + + return container; + } + + return list; +})(); diff --git a/src/neighbor/neighborInteract.tw b/src/neighbor/neighborInteract.tw new file mode 100644 index 0000000000000000000000000000000000000000..746acbf34e6eeadc5f29040ee6ce0bc458ff2aef --- /dev/null +++ b/src/neighbor/neighborInteract.tw @@ -0,0 +1,74 @@ +:: Neighbor Interact [nobr jump-to-safe jump-from-safe] + +<<set $averageProsperity = _.mean($arcologies.map((a) => a.prosperity))>> + +<<if $cheatMode == 1>> + [[Cheat Edit Neighboring Arcologies|MOD_Edit Neighbor Arcology Cheat]]<br><br> +<</if>> + +<<set $nextLink = "Main">> +<<set $nextButton = "Back">> +You have <<print $arcologies.length-1>> neighbors. <br><br> + +<<if $arcologies[0].embargoTarget == -1>> + You are not engaged in economic warfare against a neighboring arcology. +<<else>> + <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].embargoTarget; })>> + You have targeted '' $arcologies[_nei].name'' for economic warfare. + <br> Its planned impacts will be + <<if $arcologies[0].embargo == 3>> + ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].embargo -= 1]] + <<elseif $arcologies[0].embargo == 2>> + ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].embargo += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].embargo -= 1]] + <<else>> + ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].embargo += 1]] + <</if>> + | [[Cancel|Neighbor Interact][$arcologies[0].embargoTarget = -1]] +<</if>> + +<br> +<<if $arcologies[0].influenceTarget == -1>> + You are not using your arcology's culture to attempt to influence neighboring arcologies' development. +<<else>> + <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].influenceTarget; })>> + You have targeted '' $arcologies[_nei].name'' for cultural influence. + [[Stop|Neighbor Interact][$arcologies[0].influenceTarget = -1]] +<</if>> + +<<if $PC.skill.hacking > 0>> + <br> + <<if $arcologies[0].CyberEconomicTarget == -1>> + You are not engaged in cyber warfare against a neighboring arcology. + <<else>> + <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].CyberEconomicTarget; })>> + You have targeted ''$arcologies[_nei].name'' for cyber economic warfare. + <br> Its planned impacts will be + <<if $arcologies[0].CyberEconomic == 3>> + ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].CyberEconomic -= 1]] + <<elseif $arcologies[0].CyberEconomic == 2>> + ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberEconomic += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].CyberEconomic -= 1]] + <<else>> + ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberEconomic += 1]] + <</if>> + | [[Revert|Neighbor Interact][$arcologies[0].CyberEconomicTarget = -1]] + <</if>> + + <br> + <<if $arcologies[0].CyberReputationTarget == -1>> + You are not engaged in character assassination against a neighboring arcology. + <<else>> + <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].CyberReputationTarget; })>> + You have targeted the leadership of ''$arcologies[_nei].name'' for character assassination. + <br> Its planned impacts will be + <<if $arcologies[0].CyberReputation == 3>> + ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].CyberReputation -= 1]] + <<elseif $arcologies[0].CyberReputation == 2>> + ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberReputation += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].CyberReputation -= 1]] + <<else>> + ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberReputation += 1]] + <</if>> + | [[Abort|Neighbor Interact][$arcologies[0].CyberReputationTarget = -1]] + <</if>> +<</if>> + +<<includeDOM App.Neighbor.Interact()>> diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw index 95d9db643b04013c722a4955dc2aa24065daf650..6210c09c70d1be8ae36286540c86633283df19dd 100644 --- a/src/uncategorized/arcmgmt.tw +++ b/src/uncategorized/arcmgmt.tw @@ -1501,7 +1501,7 @@ You own <<set _desc = []>> <<set _descNeg = []>> <<for $i = 1; $i < $arcologies.length; $i++>> - <<set _opinion = ArcologyDiplomacy.opinion(0, $i)>> + <<set _opinion = App.Neighbor.opinion(0, $i)>> <<if _opinion >= 100>> <<set _desc.push($arcologies[$i].name)>> <<elseif _opinion <= -100>> diff --git a/src/uncategorized/bulkSlaveGenerate.tw b/src/uncategorized/bulkSlaveGenerate.tw index c7f3d0b90a52cf310d757cab9f145ddec3263cb2..eb87587f3c2dbd68742c0321995bab72f9c8cacb 100644 --- a/src/uncategorized/bulkSlaveGenerate.tw +++ b/src/uncategorized/bulkSlaveGenerate.tw @@ -65,7 +65,7 @@ <<if $numArcology >= $arcologies.length>> <<set $numArcology = 1>> <</if>> - <<set _opinion = ArcologyDiplomacy.opinion(0, $numArcology)>> + <<set _opinion = App.Neighbor.opinion(0, $numArcology)>> <<set _opinion = Math.clamp(Math.trunc(_opinion/20), -10, 10)>> <<set $discount -= (_opinion * 25)>> diff --git a/src/uncategorized/neighborInteract.tw b/src/uncategorized/neighborInteract.tw deleted file mode 100644 index 97c8bba3c3bfdc2a219b6b7d6a0cc76d4eb46a7f..0000000000000000000000000000000000000000 --- a/src/uncategorized/neighborInteract.tw +++ /dev/null @@ -1,846 +0,0 @@ -:: Neighbor Interact [nobr jump-to-safe jump-from-safe] - -<<set $averageProsperity = 0>> -<<set _neighboringArcologyCount = 0>> -<<for $i = 0; $i < $arcologies.length; $i++>> - <<set $averageProsperity += $arcologies[$i].prosperity>> - <<set _neighboringArcologyCount += 1>> -<</for>> -<<set $averageProsperity = $averageProsperity/_neighboringArcologyCount>> - -<<if $cheatMode == 1>> - [[Cheat Edit Neighboring Arcologies|MOD_Edit Neighbor Arcology Cheat]]<br><br> -<</if>> - -<<set $nextLink = "Main">> -<<set $nextButton = "Back">> -You have <<print $arcologies.length-1>> neighbors. <br><br> - -<<if $arcologies[0].embargoTarget == -1>> - You are not engaged in economic warfare against a neighboring arcology. -<<else>> - <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].embargoTarget; })>> - You have targeted '' $arcologies[_nei].name'' for economic warfare. - <br> Its planned impacts will be - <<if $arcologies[0].embargo == 3>> - ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].embargo -= 1]] - <<elseif $arcologies[0].embargo == 2>> - ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].embargo += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].embargo -= 1]] - <<else>> - ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].embargo += 1]] - <</if>> - | [[Cancel|Neighbor Interact][$arcologies[0].embargoTarget = -1]] -<</if>> - -<br> -<<if $arcologies[0].influenceTarget == -1>> - You are not using your arcology's culture to attempt to influence neighboring arcologies' development. -<<else>> - <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].influenceTarget; })>> - You have targeted '' $arcologies[_nei].name'' for cultural influence. - [[Stop|Neighbor Interact][$arcologies[0].influenceTarget = -1]] -<</if>> - -<<if $PC.skill.hacking > 0>> - <br> - <<if $arcologies[0].CyberEconomicTarget == -1>> - You are not engaged in cyber warfare against a neighboring arcology. - <<else>> - <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].CyberEconomicTarget; })>> - You have targeted ''$arcologies[_nei].name'' for cyber economic warfare. - <br> Its planned impacts will be - <<if $arcologies[0].CyberEconomic == 3>> - ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].CyberEconomic -= 1]] - <<elseif $arcologies[0].CyberEconomic == 2>> - ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberEconomic += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].CyberEconomic -= 1]] - <<else>> - ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberEconomic += 1]] - <</if>> - | [[Revert|Neighbor Interact][$arcologies[0].CyberEconomicTarget = -1]] - <</if>> - - <br> - <<if $arcologies[0].CyberReputationTarget == -1>> - You are not engaged in character assassination against a neighboring arcology. - <<else>> - <<set _nei = $arcologies.findIndex(function(s) { return s.direction == $arcologies[0].CyberReputationTarget; })>> - You have targeted the leadership of ''$arcologies[_nei].name'' for character assassination. - <br> Its planned impacts will be - <<if $arcologies[0].CyberReputation == 3>> - ''widespread.'' [[Moderate|Neighbor Interact][$arcologies[0].CyberReputation -= 1]] - <<elseif $arcologies[0].CyberReputation == 2>> - ''limited.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberReputation += 1]] | [[Moderate|Neighbor Interact][$arcologies[0].CyberReputation -= 1]] - <<else>> - ''nominal.'' [[Intensify|Neighbor Interact][$arcologies[0].CyberReputation += 1]] - <</if>> - | [[Abort|Neighbor Interact][$arcologies[0].CyberReputationTarget = -1]] - <</if>> -<</if>> - -<<set $desc = []>> -<<if $arcologies[0].FSSubjugationist > 60>> - <<set $desc.push("Racial Subjugation")>> -<</if>> -<<if $arcologies[0].FSSupremacist > 60>> - <<set $desc.push("Racial Supremacy")>> -<</if>> -<<if $arcologies[0].FSRepopulationFocus > 60>> - <<set $desc.push("Repopulation Focus")>> -<</if>> -<<if $arcologies[0].FSRestart > 60>> - <<set $desc.push("Eugenics")>> -<</if>> -<<if $arcologies[0].FSGenderRadicalist > 60>> - <<set $desc.push("Gender Radicalism")>> -<</if>> -<<if $arcologies[0].FSGenderFundamentalist > 60>> - <<set $desc.push("Gender Fundamentalism")>> -<</if>> -<<if $arcologies[0].FSPaternalist > 60>> - <<set $desc.push("Paternalism")>> -<</if>> -<<if $arcologies[0].FSDegradationist > 60>> - <<set $desc.push("Degradationism")>> -<</if>> -<<if $arcologies[0].FSBodyPurist > 60>> - <<set $desc.push("Body Purism")>> -<</if>> -<<if $arcologies[0].FSTransformationFetishist > 60>> - <<set $desc.push("Transformation Fetishism")>> -<</if>> -<<if $arcologies[0].FSYouthPreferentialist > 60>> - <<set $desc.push("Youth Preferentialism")>> -<</if>> -<<if $arcologies[0].FSMaturityPreferentialist > 60>> - <<set $desc.push("Maturity Preferentialism")>> -<</if>> -<<if $arcologies[0].FSSlimnessEnthusiast > 60>> - <<set $desc.push("Slimness Enthusiasm")>> -<</if>> -<<if $arcologies[0].FSAssetExpansionist > 60>> - <<set $desc.push("Asset Expansionism")>> -<</if>> -<<if $arcologies[0].FSPastoralist > 60>> - <<set $desc.push("Pastoralism")>> -<</if>> -<<if $arcologies[0].FSCummunism > 60>> - <<set $desc.push("Cummunism")>> -<</if>> -<<if $arcologies[0].FSPhysicalIdealist > 60>> - <<set $desc.push("Physical Idealism")>> -<</if>> -<<if $arcologies[0].FSHedonisticDecadence > 60>> - <<set $desc.push("Hedonistic Decadence")>> -<</if>> -<<if $arcologies[0].FSIncestFetishist > 60>> - <<set $desc.push("Incest Fetishism")>> -<</if>> -<<if $arcologies[0].FSIntellectualDependency > 60>> - <<set $desc.push("Intellectual Dependency")>> -<</if>> -<<if $arcologies[0].FSSlaveProfessionalism > 60>> - <<set $desc.push("Slave Professionalism")>> -<</if>> -<<if $arcologies[0].FSPetiteAdmiration > 60>> - <<set $desc.push("Petite Admiration")>> -<</if>> -<<if $arcologies[0].FSStatuesqueGlorification > 60>> - <<set $desc.push("Statuesque Glorification")>> -<</if>> -<<if $arcologies[0].FSChattelReligionist > 60>> - <<set $desc.push("Chattel Religionism")>> -<</if>> -<<if $arcologies[0].FSRomanRevivalist > 60>> - <<set $desc.push("Roman Revivalism")>> -<</if>> -<<if $arcologies[0].FSAztecRevivalist > 60>> - <<set $desc.push("Aztec Revivalism")>> -<</if>> -<<if $arcologies[0].FSEgyptianRevivalist > 60>> - <<set $desc.push("Egyptian Revivalism")>> -<</if>> -<<if $arcologies[0].FSEdoRevivalist > 60>> - <<set $desc.push("Edo Revivalism")>> -<</if>> -<<if $arcologies[0].FSArabianRevivalist > 60>> - <<set $desc.push("Arabian Revivalism")>> -<</if>> -<<if $arcologies[0].FSChineseRevivalist > 60>> - <<set $desc.push("Chinese Revivalism")>> -<</if>> - -<br> <span id="Security"> <br> -<<if $desc.length == 0>> - Your arcology's culture has not developed to the point where it can meaningfully influence other arcologies. -<<elseif $desc.length > 2>> - Your arcology's mature culture is capable of exerting great cultural sway over other arcologies. It can readily project $desc[0], - <<for $i = 1; $i < $desc.length; $i++>> - <<if $i < $desc.length-1>> - $desc[$i], - <<else>> - and $desc[$i]. - <</if>> - <</for>> -<<elseif $desc.length == 2>> - Your arcology's culture is capable of exerting some cultural sway over other arcologies. It can effectively project $desc[0] and $desc[1]. -<<else>> - Your arcology's culture is capable of starting to exert cultural sway over other arcologies. It can project $desc[0]. -<</if>> -<br> - -<<for _currentNeighbor = 1; _currentNeighbor < $arcologies.length; _currentNeighbor++>> -<<set _Agent = App.currentAgent(_currentNeighbor)>> -<<capture _currentNeighbor, _Agent>> - <<set $arcologies[_currentNeighbor].prosperity = Math.clamp($arcologies[_currentNeighbor].prosperity, 1, 300)>> - <br>You own $arcologies[_currentNeighbor].PCminority% of - <<link "$arcologies[_currentNeighbor].name">> - <<replace "#Security">> <<set $activeArcologyIdx = _currentNeighbor>> - <br>[[Back to the main diplomacy page|Neighbor Interact]] - <<set $i = _currentNeighbor>> <<include "Neighbor Description">> <br> - - <<set _ownershipCost = 500*Math.trunc($arcologies[_currentNeighbor].prosperity*(1+($arcologies[_currentNeighbor].demandFactor/100)))>> - <br>A 1% interest in this arcology is worth <<print cashFormat(_ownershipCost)>>. - <<if ($arcologies[_currentNeighbor].ownership + $arcologies[_currentNeighbor].PCminority + $arcologies[_currentNeighbor].minority < 100)>> - The transaction fee is <<print cashFormat(10000)>>. - <</if>> - <<if ($arcologies[_currentNeighbor].ownership + $arcologies[_currentNeighbor].PCminority + $arcologies[_currentNeighbor].minority < 100)>> - <br> - <<link "Buy" "Neighbor Interact">> - <<run cashX(forceNeg(_ownershipCost), "war")>> - <<run cashX(-10000, "war")>> - <<set $arcologies[_currentNeighbor].PCminority += 1>> - <<set $arcologies[_currentNeighbor].demandFactor += 2>> - <</link>> - <<if ($arcologies[_currentNeighbor].ownership + $arcologies[_currentNeighbor].PCminority + $arcologies[_currentNeighbor].minority <= 90)>> - <<if $cash > _ownershipCost*10>> - | <<link "10%" "Neighbor Interact">> - <<run cashX(forceNeg(_ownershipCost*10), "war")>> - <<run cashX(-10000, "war")>> - <<set $arcologies[_currentNeighbor].PCminority += 10>> - <<set $arcologies[_currentNeighbor].demandFactor += 20>> - <</link>> - //Transaction costs will only be paid once.// - <</if>> - <</if>> - <</if>> - - <<if $arcologies[_currentNeighbor].PCminority > 0>> - <br> - <<link "Sell" "Neighbor Interact">> - <<run cashX(_ownershipCost, "war")>> - <<set $arcologies[_currentNeighbor].PCminority -= 1>> - <<set $arcologies[_currentNeighbor].demandFactor -= 2>> - <<if $arcologies[_currentNeighbor].government != "your agent" && $arcologies[_currentNeighbor].government != "your trustees" && $arcologies[_currentNeighbor].rival != 1>> - <<if $arcologies[_currentNeighbor].ownership + $arcologies[_currentNeighbor].PCminority + $arcologies[_currentNeighbor].minority < 10>> - <<set $arcologies[_currentNeighbor].ownership += 10>> - <</if>> - <</if>> - <</link>> - <<if $arcologies[_currentNeighbor].PCminority >= 10>> - | <<link "10%" "Neighbor Interact">> - <<run cashX((_ownershipCost*10), "war")>> - <<set $arcologies[_currentNeighbor].PCminority -= 10>> - <<set $arcologies[_currentNeighbor].demandFactor -= 20>> - <<if $arcologies[_currentNeighbor].government != "your agent" && $arcologies[_currentNeighbor].government != "your trustees" && $arcologies[_currentNeighbor].rival != 1>> - <<if $arcologies[_currentNeighbor].ownership + $arcologies[_currentNeighbor].PCminority + $arcologies[_currentNeighbor].minority < 10>> - <<set $arcologies[_currentNeighbor].ownership += 10>> - <</if>> - <</if>> - <</link>> - <</if>> - <</if>> - <br> - - <<if $arcologies[_currentNeighbor].direction !== $arcologies[0].embargoTarget>> - <br>[[Target them for economic warfare|Neighbor Interact][$arcologies[0].embargoTarget = $arcologies[_currentNeighbor].direction]] - <</if>> - - <<if $PC.skill.hacking > 0>> - <<if $arcologies[_currentNeighbor].direction !== $arcologies[0].CyberEconomicTarget>> - <br>[[Target them for cyber economic warfare|Neighbor Interact][$arcologies[0].CyberEconomicTarget = $arcologies[_currentNeighbor].direction]] - <</if>> - <<if $arcologies[_currentNeighbor].direction !== $arcologies[0].CyberReputationTarget>> - <br>[[Target their leadership for character assassination|Neighbor Interact][$arcologies[0].CyberReputationTarget = $arcologies[_currentNeighbor].direction]] - <</if>> - <</if>> - <<if $desc.length > 0>> - <<if $arcologies[_currentNeighbor].direction !== $arcologies[0].influenceTarget>> - <br>[[Set as influence target|Neighbor Interact][$arcologies[0].influenceTarget = $arcologies[_currentNeighbor].direction]] - <</if>> - <</if>> - - <<if $arcologies[_currentNeighbor].government == "your trustees" || $arcologies[_currentNeighbor].government == "your agent">> - <br><br> - <<if $arcologies[_currentNeighbor].government == "your trustees">> - [[Appoint an agent|Agent Select]] <<set $him = "them">> - <<else>> - <<setLocalPronouns _Agent>> - Your agent @@.deeppink;<<= SlaveFullName(_Agent)>>@@ is running this arcology. <<link "Recall and reenslave $him" "Neighbor Interact">><<run removeJob(_Agent, "be your agent")>><</link>> - <</if>> - <span id="rename"> | <<link "Instruct $him to rename the arcology">><<replace #rename>> | <<textbox "$arcologies[$activeArcologyIdx].name" $arcologies[$activeArcologyIdx].name>> [[Confirm name|Neighbor Interact]]<</replace>><</link>></span> - <<if $arcologies[_currentNeighbor].government === "your agent">> - <br>$His <<if _Agent.intelligence > 95>>brilliance<<else>>intelligence<</if>> and education are the most important qualities for $him. - <<if _Agent.actualAge > 35>> - As with the Head Girl position, $his age and experience lend $him leadership weight. - <</if>> - <<if _Agent.career == "an arcology owner">> - $His career as an arcology owner $himself is, obviously, useful to $him. - <<elseif setup.HGCareers.includes(_Agent.career)>> - $His career in leadership helps $him. - <</if>> - <<if _Agent.fetishStrength > 95>> - <<if (_Agent.fetish == "dom") || (_Agent.fetish == "sadist")>> - $His sexually dominant fetish helps $him fill a leadership role. - <<elseif (_Agent.fetish == "submissive") || (_Agent.fetish == "masochist")>> - Unfortunately, $he has an inappropriate fetish for a leader. - <<else>> - $His sexual fetishes will influence how $he leads the arcology. - <</if>> - <</if>> - <<if _Agent.energy > 95>> - Finally, $his sexual depravity lets $him fit into arcology society naturally. - <</if>> - <</if>> - <<if $arcologies[_currentNeighbor].FSSubjugationist != "unset">> - <br><<link "Force Abandonment of Racial Subjugation" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSSubjugationist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSSupremacist != "unset">> - <br><<link "Force Abandonment of Racial Supremacy" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSSupremacist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSRepopulationFocus != "unset">> - <br><<link "Force Abandonment of Repopulationism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSRepopulationFocus = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSRestart != "unset">> - <br><<link "Force Abandonment of Eugenics" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSRestart = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSGenderRadicalist != "unset">> - <br><<link "Force Abandonment of Gender Radicalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSGenderRadicalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSIntellectualDependency != "unset">> - <br><<link "Force Abandonment of Intellectual Dependency" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSIntellectualDependency = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSSlaveProfessionalism != "unset">> - <br><<link "Force Abandonment of Slave Professionalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSSlaveProfessionalism = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSGenderFundamentalist != "unset">> - <br><<link "Force Abandonment of Gender Fundamentalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSGenderFundamentalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPaternalist != "unset">> - <br><<link "Force Abandonment of Paternalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSPaternalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSDegradationist != "unset">> - <br><<link "Force Abandonment of Degradationism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSDegradationist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSBodyPurist != "unset">> - <br><<link "Force Abandonment of Body Purism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSBodyPurist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSTransformationFetishist != "unset">> - <br><<link "Force Abandonment of Transformation Fetishism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSTransformationFetishist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSYouthPreferentialist != "unset">> - <br><<link "Force Abandonment of Youth Preferentialism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSYouthPreferentialist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSMaturityPreferentialist != "unset">> - <br><<link "Force Abandonment of Maturity Preferentialism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSMaturityPreferentialist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPetiteAdmiration != "unset">> - <br><<link "Force Abandonment of Petite Admiration" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSPetiteAdmiration = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSStatuesqueGlorification != "unset">> - <br><<link "Force Abandonment of Statuesque Glorification" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSStatuesqueGlorification = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSSlimnessEnthusiast != "unset">> - <br><<link "Force Abandonment of Slimness Enthusiasm" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSSlimnessEnthusiast = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSAssetExpansionist != "unset">> - <br><<link "Force Abandonment of Asset Expansionism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSAssetExpansionist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPastoralist != "unset">> - <br><<link "Force Abandonment of Pastoralism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSPastoralist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSCummunism != "unset">> - <br><<link "Force Abandonment of Cummunism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSCummunism = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPhysicalIdealist != "unset">> - <br><<link "Force Abandonment of Physical Idealism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSPhysicalIdealist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSHedonisticDecadence != "unset">> - <br><<link "Force Abandonment of Hedonistic Decadence" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSHedonisticDecadence = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSIncestFetishist != "unset">> - <br><<link "Force Abandonment of Incest Fetishism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSIncestFetishist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSChattelReligionist != "unset">> - <br><<link "Force Abandonment of Chattel Religionism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSChattelReligionist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSRomanRevivalist != "unset">> - <br><<link "Force Abandonment of Roman Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSRomanRevivalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSAztecRevivalist !== "unset">> - <br><<link "Force Abandonment of Aztec Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSAztecRevivalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSEgyptianRevivalist != "unset">> - <br><<link "Force Abandonment of Egyptian Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSEgyptianRevivalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSEdoRevivalist != "unset">> - <br><<link "Force Abandonment of Edo Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSEdoRevivalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSArabianRevivalist != "unset">> - <br><<link "Force Abandonment of Arabian Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSArabianRevivalist = "unset">><</link>> - <</if>> - <<if $arcologies[_currentNeighbor].FSChineseRevivalist != "unset">> - <br><<link "Force Abandonment of Chinese Revivalism" "Neighbor Interact">><<set $arcologies[_currentNeighbor].FSChineseRevivalist = "unset">><</link>> - <</if>> - <</if>> - - <br><br> - If $arcologies[_currentNeighbor].name has developed enough to begin exporting worthwhile goods, it may be of interest to acquire some. - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - Since it is under your control, it is no problem at all to request the transfer of goods to $arcologies[0].name. - <<elseif $PC.skill.hacking >= 50>> - It is within your skills to redirect an outgoing shipment to $arcologies[0].name for your retrieval. - <<elseif $arcologies[_currentNeighbor].direction === $arcologies[0].embargoTarget>> - Due to your active embargo, trade with $arcologies[_currentNeighbor].name is not possible. - <<else>> - <<set _opinion = ArcologyDiplomacy.opinion(_currentNeighbor, 0)>> - <<set _prices = _opinion*10>> - <</if>> - <<if $arcologies[_currentNeighbor].FSRomanRevivalist > 95>> - <<if !isItemAccessible.entry("a toga", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of togas" "Neighbor Interact">> - <<set $clothesBoughtToga = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of togas" "Neighbor Interact">> - <<set $clothesBoughtToga = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of togas" "Neighbor Interact">> - <<set $clothesBoughtToga = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough togas. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSEdoRevivalist > 95>> - <<if !isItemAccessible.entry("a kimono", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of kimonos" "Neighbor Interact">> - <<set $clothesBoughtKimono = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of kimonos" "Neighbor Interact">> - <<set $clothesBoughtKimono = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of kimonos" "Neighbor Interact">> - <<set $clothesBoughtKimono = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough kimonos. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSArabianRevivalist > 95>> - <<if !isItemAccessible.entry("harem gauze", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of silken harem garb" "Neighbor Interact">> - <<set $clothesBoughtHarem = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of silken harem garb" "Neighbor Interact">> - <<set $clothesBoughtHarem = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of silken harem garb" "Neighbor Interact">> - <<set $clothesBoughtHarem = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough silk. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSAztecRevivalist > 95>> - <<if !isItemAccessible.entry("a huipil", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of huipils" "Neighbor Interact">> - <<set $clothesBoughtHuipil = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of huipils" "Neighbor Interact">> - <<set $clothesBoughtHuipil = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of huipils" "Neighbor Interact">> - <<set $clothesBoughtHuipil = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough huipils. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSChineseRevivalist > 95>> - <<if !isItemAccessible.entry("a slutty qipao", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of qipaos" "Neighbor Interact">> - <<set $clothesBoughtQipao = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of qipaos" "Neighbor Interact">> - <<set $clothesBoughtQipao = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of qipaos" "Neighbor Interact">> - <<set $clothesBoughtQipao = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough skimpy qipaos. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSEgyptianRevivalist > 95>> - <<if !isItemAccessible.entry("ancient Egyptian", "collar")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of Egyptian necklace replicas" "Neighbor Interact">> - <<set $clothesBoughtEgypt = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of Egyptian necklace replicas" "Neighbor Interact">> - <<set $clothesBoughtEgypt = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of Egyptian necklace replicas" "Neighbor Interact">> - <<set $clothesBoughtEgypt = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough replicas of Egyptian necklaces. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPaternalist > 95>> - <<if !isItemAccessible.entry("conservative clothing", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of conservative clothing" "Neighbor Interact">> - <<set $clothesBoughtConservative = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of conservative clothing" "Neighbor Interact">> - <<set $clothesBoughtConservative = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of conservative clothing" "Neighbor Interact">> - <<set $clothesBoughtConservative = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough modest clothing. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSDegradationist > 95>> - <<if !isItemAccessible.entry("chains", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of binding chains" "Neighbor Interact">> - <<set $clothesBoughtChains = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of binding chains" "Neighbor Interact">> - <<set $clothesBoughtChains = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of binding chains" "Neighbor Interact">> - <<set $clothesBoughtChains = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough chains. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSGenderFundamentalist > 95>> - <<if !isItemAccessible.entry("a bunny outfit", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of bunny suits" "Neighbor Interact">> - <<set $clothesBoughtBunny = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of bunny suits" "Neighbor Interact">> - <<set $clothesBoughtBunny = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of bunny suits" "Neighbor Interact">> - <<set $clothesBoughtBunny = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough bunny suits and bowties. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSIntellectualDependency > 95>> - <<if !isItemAccessible.entry("a bimbo outfit", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of outfits suitable for bimbos" "Neighbor Interact">> - <<set $clothesBoughtBimbo = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of outfits suitable for bimbos" "Neighbor Interact">> - <<set $clothesBoughtBimbo = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of outfits suitable for bimbos" "Neighbor Interact">> - <<set $clothesBoughtBimbo = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough bimbo attire. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSSlaveProfessionalism > 95>> - <<if !isItemAccessible.entry("a courtesan dress", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of courtesan dresses" "Neighbor Interact">> - <<set $clothesBoughtCourtesan = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of courtesan dresses" "Neighbor Interact">> - <<set $clothesBoughtCourtesan = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of courtesan dresses" "Neighbor Interact">> - <<set $clothesBoughtCourtesan = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough courtesan dresses. - <</if>> - <<set _exports = 1>> - <</if>> - /* - <<if $arcologies[_currentNeighbor].FSPetiteAdmiration > 95>> - <<if !isItemAccessible.entry("temp", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of petite-sized dresses" "Neighbor Interact">> - <<set $clothesBoughtPetite = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of petite-sized dresses" "Neighbor Interact">> - <<set $clothesBoughtPetite = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of petite-sized dresses" "Neighbor Interact">> - <<set $clothesBoughtPetite = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough temp. - <</if>> - <<set _exports = 1>> - <</if>> - */ - <<if $arcologies[_currentNeighbor].FSPhysicalIdealist > 95>> - <<if !isItemAccessible.entry("body oil", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of body oil" "Neighbor Interact">> - <<set $clothesBoughtOil = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of body oil" "Neighbor Interact">> - <<set $clothesBoughtOil = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of body oil" "Neighbor Interact">> - <<set $clothesBoughtOil = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough body oil. - <</if>> - <<set _exports = 1>> - <<elseif $arcologies[_currentNeighbor].FSHedonisticDecadence > 95>> - <<if !isItemAccessible.entry("stretch pants and a crop-top", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of stretch pants and crop-tops" "Neighbor Interact">> - <<set $clothesBoughtLazyClothes = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of stretch pants and crop-tops" "Neighbor Interact">> - <<set $clothesBoughtLazyClothes = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of stretch pants and crop-tops" "Neighbor Interact">> - <<set $clothesBoughtLazyClothes = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough elastic waistbands and tight tops. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSChattelReligionist > 95>> - <<if !isItemAccessible.entry("a chattel habit", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of chattel religionist habits" "Neighbor Interact">> - <<set $clothesBoughtHabit = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of chattel religionist habits" "Neighbor Interact">> - <<set $clothesBoughtHabit = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of chattel religionist habits" "Neighbor Interact">> - <<set $clothesBoughtHabit = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough chattel religionist habits. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSPastoralist > 95>> - <<if !isItemAccessible.entry("Western clothing", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of Western clothing" "Neighbor Interact">> - <<set $clothesBoughtWestern = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of Western clothing" "Neighbor Interact">> - <<set $clothesBoughtWestern = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of Western clothing" "Neighbor Interact">> - <<set $clothesBoughtWestern = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough rancher outfits. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSRepopulationFocus > 95>> - <<if !isItemAccessible.entry("a maternity dress", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of maternity clothing" "Neighbor Interact">> - <<set $clothesBoughtMaternityDress = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of maternity clothing" "Neighbor Interact">> - <<set $clothesBoughtMaternityDress = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of maternity clothing" "Neighbor Interact">> - <<set $clothesBoughtMaternityDress = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough maternity dresses. - <</if>> - <<if !isItemAccessible.entry("attractive lingerie for a pregnant woman", "clothing")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of maternity lingerie" "Neighbor Interact">> - <<set $clothesBoughtMaternityLingerie = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of maternity lingerie" "Neighbor Interact">> - <<set $clothesBoughtMaternityLingerie = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of maternity lingerie" "Neighbor Interact">> - <<set $clothesBoughtMaternityLingerie = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough lingerie suited for pregnant women. - <</if>> - <<if !isItemAccessible.entry("a small empathy belly", "bellyAccessory")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of empathy bellies" "Neighbor Interact">> - <<set $clothesBoughtBelly = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of empathy bellies" "Neighbor Interact">> - <<set $clothesBoughtBelly = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of empathy bellies" "Neighbor Interact">> - <<set $clothesBoughtBelly = 1>> - <<run cashX(forceNeg(Math.trunc((15000-(_prices*2))*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc(15000-(_prices*2)))>>// - <</if>> - <<else>> - <br>You already have enough fake baby bumps. - <</if>> - <<set _exports = 1>> - <</if>> - <<if $arcologies[_currentNeighbor].FSStatuesqueGlorification > 95>> - <<if !isItemAccessible.entry("platform heels", "shoes")>> - <<if ($arcologies[_currentNeighbor].government == "your trustees") || ($arcologies[_currentNeighbor].government == "your agent")>> - <br><<link "Request a shipment of height boosting footwear" "Neighbor Interact">> - <<set $shoesBoughtHeels = 1>> - <</link>> - <<elseif $PC.skill.hacking >= 50>> - <br><<link "Divert an outgoing shipment of height boosting footwear" "Neighbor Interact">> - <<set $shoesBoughtHeels = 1>> - <</link>> - <<elseif $arcologies[_currentNeighbor].direction != $arcologies[0].embargoTarget>> - <br><<link "Purchase a shipment of height boosting footwear" "Neighbor Interact">> - <<set $shoesBoughtHeels = 1>> - <<run cashX(forceNeg(Math.trunc((7500-_prices)*$upgradeMultiplierTrade)), "capEx")>> - <</link>> //Will cost <<print cashFormat(Math.trunc((7500-_prices)*$upgradeMultiplierTrade))>>// - <</if>> - <<else>> - <br>You already have enough varieties of platform shoe. - <</if>> - <<set _exports = 1>> - <</if>> - <<if _exports != 1>> - <<if $arcologies[_currentNeighbor].direction == $arcologies[0].embargoTarget>> - Fortunately, - <<else>> - Unfortunately, - <</if>> - they have nothing of value. - <</if>> - - <</replace>> - <</link>> - which has an estimated GSP of @@.yellowgreen;<<print cashFormat(Math.trunc((0.1*$arcologies[_currentNeighbor].prosperity*random(100-$economicUncertainty,100+$economicUncertainty))/100))>>m@@ and is run by - <<if $arcologies[_currentNeighbor].government !== "your agent">> - $arcologies[_currentNeighbor].government who own $arcologies[_currentNeighbor].ownership%. - <<else>> - your agent: - <<set _residentList = [_Agent.ID]>> - <<set _agentPartner = $slaves.find((s) => s.assignment === Job.AGENTPARTNER && s.relationshipTarget === _Agent.ID)>> - <<if _agentPartner>> - <<run _residentList.push(_agentPartner.ID)>> - <</if>> - <<= App.UI.SlaveList.render.listMarkup( - _residentList, - [], - App.UI.SlaveList.SlaveInteract.stdInteract - )>> - <</if>> -<</capture>> -<</for>> -</span> diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw index 266655e7b0318633d9df4b046d44f3e34125f816..2bd868154ebf5a215c6cdb158e79b5afa6c94c40 100644 --- a/src/uncategorized/neighborsDevelopment.tw +++ b/src/uncategorized/neighborsDevelopment.tw @@ -239,16 +239,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh <<if $arcologies[$i].direction != 0>> /* AI ARCOLOGY SHARE BUYING AND SELLING */ -<<if $arcologies[$i].direction == 0>> - <<set $economicUncertainty = 5>> -<<else>> - <<set $economicUncertainty = 10>> -<</if>> -<<if $assistant.power > 1>> - <<set $economicUncertainty = 0>> -<<elseif $assistant.power == 1>> - <<set $economicUncertainty = Math.max(Math.trunc($economicUncertainty/2),0)>> -<</if>> +<<set _economicUncertainty = App.Utils.economicUncertainty($i)>> <<if $arcologies[$i].government != "your agent">> <<if $arcologies[$i].government != "your trustees">> <<if $arcologies[$i].minority + $arcologies[$i].ownership + $arcologies[$i].PCminority < 100>> @@ -257,14 +248,14 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh Its leadership acquires an increased share of its ownership. <<set $arcologies[$i].ownership += 1>> <<set $arcologies[$i].prosperity -= 5>> - This places its government in control of approximately @@.orange;<<print Math.trunc(($arcologies[$i].ownership*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition with a @@.tan;<<print Math.trunc(($arcologies[$i].minority*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ share<</if>>. + This places its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>. <<elseif _prosperityDiff < random(-50,10)>> <<if $arcologies[$i].ownership > 0>> <<if $arcologies[$i].rival != 1 || ($arcologies[$i].rival == 1 && $arcologies[$i].ownership > 51 && random(1,2) == 1)>> Its leadership sells off some of its ownership to stay afloat. <<set $arcologies[$i].ownership -= 1>> <<set $arcologies[$i].prosperity += 5>> - This leaves its government in control of approximately @@.orange;<<print Math.trunc(($arcologies[$i].ownership*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition, with a @@.tan;<<print Math.trunc(($arcologies[$i].minority*random(100-$economicUncertainty,100+$economicUncertainty))/100)>>%@@ share<</if>>. + This leaves its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition, with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty>>%@@ share<</if>>. <</if>> <</if>> <</if>> @@ -426,7 +417,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh <<if $arcologies[$i].direction != 0>> <<run FutureSocieties.applyBroadProgress($i, _efficiency)>> <</if>> -<<set _passive = new ArcologyFSPassiveInfluence($i)>> +<<set _passive = new App.Neighbor.PassiveFSInfluence($i)>> <<if $arcologies[$i].FSSupremacist != "unset">> <<= _passive.output("FSSupremacist")>> <<if $arcologies[$i].direction != 0>> @@ -1780,7 +1771,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh <<if $arcologies[$i].direction != 0>> <<if $arcologies[$i].influenceTarget == -1>> - <<run ArcologyDiplomacy.selectInfluenceTarget($i)>> + <<run App.Neighbor.selectInfluenceTarget($i)>> <</if>> <</if>> diff --git a/src/uncategorized/neighborsFSAdoption.tw b/src/uncategorized/neighborsFSAdoption.tw index b044c7c478eac4cdf90486a6556225abfe662720..69cf45e9b1ea942ca78a741aed904a6aae5c5fea 100644 --- a/src/uncategorized/neighborsFSAdoption.tw +++ b/src/uncategorized/neighborsFSAdoption.tw @@ -871,7 +871,7 @@ societal development. <<set _influenceBonus = 20>> <</if>> - <<set _opinion = ArcologyDiplomacy.opinion($i, $j)>> + <<set _opinion = App.Neighbor.opinion($i, $j)>> <<if _opinion >= 50>> $arcologies[$i].name is aligned with $arcologies[$j].name socially, encouraging it to consider adopting all its cultural values. <<set _influenceBonus += _opinion-50>> diff --git a/src/uncategorized/slaveMarkets.tw b/src/uncategorized/slaveMarkets.tw index 070a4756e2f9d0c05ab9e7c037e7528d400f61ad..afa58266093315505f82989dc9f89f1a8981c3c5 100644 --- a/src/uncategorized/slaveMarkets.tw +++ b/src/uncategorized/slaveMarkets.tw @@ -139,7 +139,7 @@ You visit the slave markets off the arcology plaza. It's always preferable to ex <<case "neighbor">> You're in the area of the slave market that specializes in slaves from within the Free City, viewing slaves from ''<<print "$arcologies[$numArcology].name">>''. Some were trained there, specifically for sale, while others are simply being sold. - <<set _opinion = ArcologyDiplomacy.opinion(0, $numArcology)>> + <<set _opinion = App.Neighbor.opinion(0, $numArcology)>> <<if _opinion != 0>> <<set _slaveCost -= Math.trunc(_slaveCost*_opinion*0.05)>> <<if _opinion > 2>>