diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index ba1ec2ce3a402bfd5001a1b0d38d1824160e5c42..2530ad10fbdbc6647f3d9de67e1b3a5568dcbda1 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -54,6 +54,8 @@ declare namespace App { namespace Interact {} + namespace Intro {} + namespace MainView {} namespace RA { diff --git a/js/002-config/fc-js-init.js b/js/002-config/fc-js-init.js index b7dac2c1fb2bf83b954c3976fb4c5e9e243acb18..53ea86283e29cf1b9f01181c0552495a63ad0dad 100644 --- a/js/002-config/fc-js-init.js +++ b/js/002-config/fc-js-init.js @@ -25,6 +25,7 @@ App.UI.SlaveInteract = {}; App.Update = {}; App.Utils = {}; App.Interact = {}; +App.Intro = {}; App.Desc = {}; App.Facilities = { Brothel: {}, diff --git a/src/003-assets/CSS/arcologyBuilding.css b/src/003-assets/CSS/arcologyBuilding.css index 750410612e3a6aae3d0cbf28fe5093e6cfabc1a8..741851cbffe41e50982924f3f474ad942b0f1b66 100644 --- a/src/003-assets/CSS/arcologyBuilding.css +++ b/src/003-assets/CSS/arcologyBuilding.css @@ -5,7 +5,8 @@ div.building { } div.building.basement { - box-shadow: 0 -1px 0 #333333; + border-top: solid 1px #333333; + margin-top: -1px; background-image: repeating-linear-gradient(135deg, transparent, transparent 20px, #333333 20px, #333333 30px); } @@ -23,7 +24,7 @@ div.building div.outerCell { flex-direction: row; } -div.building div.innerCell { +div.building div.innerCell:not(.filler) { margin: 3px; border: 5px solid; padding: 2px; @@ -34,6 +35,18 @@ div.building div.innerCell { background-color: #111; } +/* introduction special formatting */ +/* makes all links unusable */ +.intro div.building a { + color: white; + pointer-events: none; + cursor: default; +} + +.intro div.building .hotkey { + display: none; +} + /* penthouse formatting */ div.building div.gridWrapper { display: grid; @@ -154,3 +167,7 @@ div.building div.row div.transportHub { div.building div.row div.weaponsManufacturing { border-color: springgreen; } + +div.building div.row div.filler { + border-color: transparent; +} diff --git a/src/003-assets/CSS/cardStyle.css b/src/003-assets/CSS/cardStyle.css new file mode 100644 index 0000000000000000000000000000000000000000..81e28b32e5e01ccfaf6fd2ff6d910e6d0ebf49f3 --- /dev/null +++ b/src/003-assets/CSS/cardStyle.css @@ -0,0 +1,12 @@ +div.card { + border-radius: 8px; + border-top: 2px #333333; + border-left: 2px #333333; + border-bottom: 0; + border-right: 0; + border-style: solid; + background-color: #1a1a1a; + box-shadow: 10px 10px 5px black; + padding: 10px; + margin-bottom: 15px; +} diff --git a/src/003-assets/CSS/slaveList.css b/src/003-assets/CSS/slaveList.css index a6a15b2b3d30a9cb5982777fa761e3360dfae282..cee97eac754fe69f14962adf43c61c0cd03c4111 100644 --- a/src/003-assets/CSS/slaveList.css +++ b/src/003-assets/CSS/slaveList.css @@ -2,19 +2,6 @@ div.slaveSummary { clear: both; } -.slaveSummary.card { - border-radius: 8px; - border-top: 2px #333333; - border-left: 2px #333333; - border-bottom: 0; - border-right: 0; - border-style: solid; - background-color: #1a1a1a; - box-shadow: 10px 10px 5px black; - padding: 10px; - margin-bottom: 15px; -} - /* slave summary paragraph when "see images" is enabled */ p.si { margin-bottom: 0; diff --git a/src/003-assets/CSS/tabs.css b/src/003-assets/CSS/tabs.css index 1f972210d691fff9990db931f5c2d915e8d3537e..62efedf434f11e0a7c2cac910d3029e51f327218 100644 --- a/src/003-assets/CSS/tabs.css +++ b/src/003-assets/CSS/tabs.css @@ -49,8 +49,7 @@ div.tabbar a.active { .tabcontent.card { border-radius: 0 8px 8px 8px; background-color: #1a1a1a; - box-shadow: 10px 10px 5px black; - margin-bottom: 15px; + border: 0; } diff --git a/src/arcologyBuilding/base.js b/src/arcologyBuilding/base.js index df7d221c99160c7e1104c12c218bc0bf91347710..efc4405e9d87156d0fbf698abdb43a95bb090140 100644 --- a/src/arcologyBuilding/base.js +++ b/src/arcologyBuilding/base.js @@ -26,7 +26,7 @@ App.Arcology.cellUpgrade = function(building, cellClass, cellType, newType, key * Updates V.arcologies[0].ownership. */ App.Arcology.updateOwnership = function() { - const allCells = V.building.findCells(() => true); + const allCells = V.building.findCells(cell => !(cell instanceof App.Arcology.Cell.Filler)); const ownedCells = allCells.filter(cell => cell.owner === 1); const ratio = ownedCells.length / allCells.length; @@ -35,14 +35,14 @@ App.Arcology.updateOwnership = function() { }; /** - * @param {string} location + * @param {string} terrain * @returns {App.Arcology.Building} */ -App.Arcology.defaultBuilding = function(location = "default") { +App.Arcology.defaultBuilding = function(terrain = "default") { /** * @type {arcologyEnvironment} */ - const env = {location: location, established: false, fs: ""}; + const env = {terrain: terrain, established: false, fs: ""}; const candidates = App.Arcology.presets.filter(preset => preset.isAllowed(env)); return candidates.pluck().construct(env); }; diff --git a/src/arcologyBuilding/filler.js b/src/arcologyBuilding/filler.js new file mode 100644 index 0000000000000000000000000000000000000000..5b0ba2faa768f3833f9b415bfaa81b53d761939f --- /dev/null +++ b/src/arcologyBuilding/filler.js @@ -0,0 +1,25 @@ +App.Arcology.Cell.Filler = class extends App.Arcology.Cell.BaseCell { + constructor(width) { + super(1); + this._width = width; + } + + get width() { + return this._width; + } + + get colorClass() { + return "filler"; + } + + get className() { return "App.Arcology.Cell.Filler"; } + + static _cleanupConfigScheme(config) { + super._cleanupConfigScheme(config); + // BC code + } + + clone() { + return (new App.Arcology.Cell.Filler())._init(this); + } +}; diff --git a/src/arcologyBuilding/presets.js b/src/arcologyBuilding/presets.js index 517507a859e08d2261f7ff6bb453827b62309370..8fc501bc46ef5a12c68b2526a02b6f9e37996378 100644 --- a/src/arcologyBuilding/presets.js +++ b/src/arcologyBuilding/presets.js @@ -1,6 +1,6 @@ /** * @typedef {object} arcologyEnvironment - * @property {string} location + * @property {string} terrain * @property {boolean} established * @property {string} fs */ @@ -80,7 +80,7 @@ App.Arcology.presets = (function() { for (const row of section.rows) { rows.push(getRow(row)); } - return new App.Arcology.Section(section.id, rows, section.ground === true /* to ensure no undefined gets trough */); + return new App.Arcology.Section(section.id, rows, section.ground === true /* to ensure no undefined gets through */); } /** @@ -139,56 +139,89 @@ App.Arcology.presets = (function() { return [ /* basic types for controlled start */ { - isAllowed: env => !env.established && env.location === "default", + isAllowed: env => !env.established && env.terrain === "default", construct: () => templateToBuilding(templates.default), apply() {} }, { - isAllowed: env => !env.established && env.location === "urban", + isAllowed: env => !env.established && env.terrain === "urban", construct: () => templateToBuilding(templates.urban), apply() {} }, { - isAllowed: env => !env.established && env.location === "rural", + isAllowed: env => !env.established && env.terrain === "rural", construct: () => templateToBuilding(templates.rural), apply() {} }, { - isAllowed: env => !env.established && env.location === "ravine", + isAllowed: env => !env.established && env.terrain === "ravine", construct: () => templateToBuilding(templates.ravine), apply() {} }, { - isAllowed: env => !env.established && env.location === "marine", + isAllowed: env => !env.established && env.terrain === "marine", construct: () => templateToBuilding(templates.marine), apply() {} }, { - isAllowed: env => !env.established && env.location === "oceanic", + isAllowed: env => !env.established && env.terrain === "oceanic", construct: () => templateToBuilding(templates.oceanic), apply() {} }, /* crazy presets for established arcologies TODO */ { - isAllowed: env => env.established && env.location === "default", + isAllowed: env => env.established && env.terrain === "default", construct() { return templateToBuilding(templates.default); }, apply() {} }, { - isAllowed: env => env.established && env.location === "urban", + isAllowed: env => env.established && env.terrain === "urban", construct() { return templateToBuilding(templates.urban); }, apply() {} }, { - isAllowed: env => env.established && env.location === "rural", + isAllowed: env => env.established && env.terrain === "rural", construct() { return templateToBuilding(templates.rural); }, apply() {} }, { - isAllowed: env => env.established && env.location === "ravine", + isAllowed: env => env.established && env.terrain === "ravine", construct() { return templateToBuilding(templates.ravine); }, apply() {} }, { - isAllowed: env => env.established && env.location === "marine", + isAllowed: env => env.established && env.terrain === "marine", construct() { return templateToBuilding(templates.marine); }, apply() {} }, { - isAllowed: env => env.established && env.location === "oceanic", + isAllowed: env => env.established && env.terrain === "oceanic", construct() { return templateToBuilding(templates.oceanic); }, apply() {} + }, { + isAllowed: env => env.established && Math.random() < 0.1, + construct: () => { + // yes, this is a giant dick + const sections = []; + let rows = []; + rows.push([new App.Arcology.Cell.Apartment(1, 1)]); + rows.push([new App.Arcology.Cell.Penthouse()]); + sections.push(new App.Arcology.Section("penthouse", rows)); + rows = []; + rows.push([new App.Arcology.Cell.Apartment(1)]); + rows.push([new App.Arcology.Cell.Apartment(1)]); + rows.push([new App.Arcology.Cell.Apartment(1)]); + rows.push([new App.Arcology.Cell.Apartment(1, 3), new App.Arcology.Cell.Filler(0.75), new App.Arcology.Cell.Apartment(1), new App.Arcology.Cell.Filler(0.75), new App.Arcology.Cell.Apartment(1, 3)]); + rows.push([new App.Arcology.Cell.Apartment(1, 3), new App.Arcology.Cell.Apartment(1, 3), new App.Arcology.Cell.Filler(0.25), new App.Arcology.Cell.Shop(1), new App.Arcology.Cell.Filler(0.25), new App.Arcology.Cell.Apartment(1, 3), new App.Arcology.Cell.Apartment(1, 3)]); + sections.push(new App.Arcology.Section("apartments", rows)); + rows = []; + rows.push([new App.Arcology.Cell.Market(1), new App.Arcology.Cell.Market(1), new App.Arcology.Cell.Shop(1), new App.Arcology.Cell.Shop(1), new App.Arcology.Cell.Market(1), new App.Arcology.Cell.Market(1)]); + sections.push(new App.Arcology.Section("markets", rows, true)); + rows = []; + rows.push([new App.Arcology.Cell.Market(1), new App.Arcology.Cell.Manufacturing(1), new App.Arcology.Cell.Filler(0.25), new App.Arcology.Cell.Manufacturing(1), new App.Arcology.Cell.Filler(0.25), new App.Arcology.Cell.Manufacturing(1), new App.Arcology.Cell.Market(1)]); + rows.push([new App.Arcology.Cell.Manufacturing(1), new App.Arcology.Cell.Filler(0.75), new App.Arcology.Cell.Manufacturing(1), new App.Arcology.Cell.Filler(0.75), new App.Arcology.Cell.Manufacturing(1)]); + sections.push(new App.Arcology.Section("manufacturing", rows)); + return new App.Arcology.Building(sections); + }, + apply() {} }, ]; }()); +/** + * @param {arcologyEnvironment} environment + * @returns {buildingPreset} + */ +App.Arcology.randomPreset = function(environment) { + return App.Arcology.presets.filter(p => p.isAllowed(environment)).random(); +}; diff --git a/src/events/intro/arcologySelection.js b/src/events/intro/arcologySelection.js new file mode 100644 index 0000000000000000000000000000000000000000..ee804bb61e31ba5dfd7e59b20d57b528ccf74eb4 --- /dev/null +++ b/src/events/intro/arcologySelection.js @@ -0,0 +1,369 @@ +App.Intro.generateEstablishedArcologies = function() { + /* setup */ + let allowedFS = ["ArabianRevivalist", "AssetExpansionist", "AztecRevivalist", "BodyPurist", "ChattelReligionist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "Eugenics", "HedonisticDecadence", "IntellectualDependency", "MaturityPreferentialist", "Multiculturalist", "Pastoralist", "Paternalist", "PetiteAdmiration", "PhysicalIdealist", "Repopulationist", "RomanRevivalist", "SlaveProfessionalism", "SlimnessEnthusiast", "StatuesqueGlorification", "Subjugationist", "Supremacist", "TransformationFetishist", "YouthPreferentialist"]; + if (V.seeDicks !== 0) { + allowedFS.push("GenderRadicalist"); + } + if (V.seeDicks !== 100) { + allowedFS.push("GenderFundamentalist"); + } + if (V.seeExtreme !== 0) { + allowedFS.push("Degradationist"); + } + const terrainTypes = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"]; + const continents = ["Africa", "Asia", "Asia", "Australia", "Europe", "Europe", "Japan", "North America", "North America", "South America", "the Middle East"]; + const races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"]; + + let targets = 4; + if (V.PC.career === "arcology owner") { + targets += 2; + } + + /* generation */ + const fragment = document.createDocumentFragment(); + for (let i = 0; i < targets; i++) { + fragment.append(arcologyCard()); + } + return fragment; + + function arcologyCard() { + const arcology = generateArcology(); + const div = document.createElement("div"); + div.classList.add("card"); + + div.append(App.UI.DOM.passageLink(arcology.name, "Intro Summary", () => { + V.targetArcology = arcology; + V.terrain = arcology.terrain; + V.continent = arcology.continent; + V.language = arcology.language; + arcology.apply(); + })); + + div.append(" is an established arcology located in a Free City "); + if (arcology.terrain === "urban") { + div.append(`carved out of an urban area of ${arcology.continent}.`); + } else if (arcology.terrain === "rural") { + div.append(`built in a rural area of ${arcology.continent}.`); + } else if (arcology.terrain === "marine") { + div.append(`constructed just offshore of ${arcology.continent}.`); + } else if (arcology.terrain === "ravine") { + div.append(`constructed in a large canyon of ${arcology.continent}.`); + } else { + div.append(`in the middle of the ocean.`); + } + + function newLine(...content) { + const line = document.createElement("div"); + line.classList.add("indent"); + line.append(...content); + div.append(line); + } + + if (arcology.prosperity >= 60) { + newLine("It is unusually prosperous for a vulnerable arcology."); + } else if (arcology.prosperity <= 40) { + newLine("It has little economic prosperity and is vulnerable."); + } + + if (arcology.citizens > 0) { + newLine("It has an unusually high ratio of citizens to sex slaves, increasing demand for sexual services."); + } else if (arcology.citizens < 0) { + newLine("It has an unusually low ratio of citizens to sex slaves, reducing demand for sexual services."); + } + + let innerDiv = document.createElement("div"); + innerDiv.classList.add("indent"); + div.append(innerDiv); + + innerDiv.append("Its society "); + if (arcology.FSProgress >= 50) { + innerDiv.append("has advanced towards"); + } else if (arcology.FSProgress >= 30) { + innerDiv.append("has devoted resources to"); + } else { + innerDiv.append("has just begun to adopt"); + } + innerDiv.append(" "); + switch (arcology.fs) { + case "Supremacist": + innerDiv.append(App.UI.DOM.makeElement("span", `Supremacy of the ${arcology.race} ${arcology.race !== "mixed race" ? "race" : ""}.`, ["intro", "question"])); + break; + case "Subjugationist": + innerDiv.append(App.UI.DOM.makeElement("span", `Subjugation of the ${arcology.race} ${arcology.race !== "mixed race" ? "race" : ""}.`, ["intro", "question"])); + break; + case "GenderRadicalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Gender Radicalism,`, ["intro", "question"]), " a movement that supports feminization of slavegirls with dicks."); + break; + case "GenderFundamentalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Gender Fundamentalism,`, ["intro", "question"]), " a reaction to modern libertinism that seeks to reinforce gender roles."); + break; + case "Paternalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Paternalism,`, ["intro", "question"]), " an optimistic strain of slavery that protects and improves slaves."); + break; + case "Degradationist": + innerDiv.append(App.UI.DOM.makeElement("span", `Degradationism,`, ["intro", "question"]), " an extreme branch of modern slavery that treats slaves as subhuman."); + break; + case "AssetExpansionist": + innerDiv.append(App.UI.DOM.makeElement("span", `Asset Expansionism,`, ["intro", "question"]), " a societal preoccupation with expansion of body parts, especially breasts."); + break; + case "SlimnessEnthusiast": + innerDiv.append(App.UI.DOM.makeElement("span", `Slimness Enthusiasm,`, ["intro", "question"]), " an aesthetic movement that fetishizes the lithe female form."); + break; + case "TransformationFetishist": + innerDiv.append(App.UI.DOM.makeElement("span", `Transformation Fetishism,`, ["intro", "question"]), " a focus on implants and other kinds of surgical alteration."); + break; + case "BodyPurist": + innerDiv.append(App.UI.DOM.makeElement("span", `Body Purism,`, ["intro", "question"]), " a reaction to extreme surgical fetishism that prefers bodies grown biologically."); + break; + case "MaturityPreferentialist": + innerDiv.append(App.UI.DOM.makeElement("span", `Maturity Preferentialism,`, ["intro", "question"]), " an appetite for mature slaves based on MILF fetishism."); + break; + case "YouthPreferentialist": + innerDiv.append(App.UI.DOM.makeElement("span", `Youth Preferentialism,`, ["intro", "question"]), " which focuses on youth and virginity in slaves."); + break; + case "Pastoralist": + innerDiv.append(App.UI.DOM.makeElement("span", `Pastoralism,`, ["intro", "question"]), " an appetite for products of the human body, especially milk."); + break; + case "PhysicalIdealist": + innerDiv.append(App.UI.DOM.makeElement("span", `Physical Idealism,`, ["intro", "question"]), " an aspirational movement which fetishizes muscle and physical fitness."); + break; + case "ChattelReligionist": + innerDiv.append(App.UI.DOM.makeElement("span", `Chattel Religionism,`, ["intro", "question"]), " a religious revival in the context of modern slavery."); + break; + case "RomanRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Roman Revivalism,`, ["intro", "question"]), " which seeks to recreate the glory that was ancient Rome."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Latin.")); + break; + case "AztecRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Aztec Revivalism,`, ["intro", "question"]), " which aspires to reach the heights of the Aztec Empire at it's peak."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Nahuatl.")); + break; + case "EgyptianRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Egyptian Revivalism,`, ["intro", "question"]), " a movement to rebuild the monuments and greatness of ancient Egypt."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Ancient Egyptian.")); + break; + case "EdoRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Edo Revivalism,`, ["intro", "question"]), " an insular movement with a focus on the cultural superiority of old Japan."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Japanese.")); + break; + case "ArabianRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Arabian Revivalism,`, ["intro", "question"]), " a melding of Arabian history and recent mythology of the Near East."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Arabic.")); + break; + case "ChineseRevivalist": + innerDiv.append(App.UI.DOM.makeElement("span", `Chinese Revivalism,`, ["intro", "question"]), " which modernizes the assumed superiority of the Middle Kingdom."); + innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Chinese.")); + break; + case "Repopulationist": + innerDiv.append(App.UI.DOM.makeElement("span", `Repopulationism,`, ["intro", "question"]), " the belief that the key to humanity's survival is a child in every fertile womb."); + break; + case "Eugenics": + innerDiv.append(App.UI.DOM.makeElement("span", `Eugenics,`, ["intro", "question"]), " the belief that the world's failings were caused by rampant breeding of the inferior, and as such, only society's best should reproduce."); + break; + case "HedonisticDecadence": + innerDiv.append(App.UI.DOM.makeElement("span", `Decadent Hedonism,`, ["intro", "question"]), " a movement to embody life's pleasures, particularly eating and sex."); + break; + case "IntellectualDependency": + innerDiv.append(App.UI.DOM.makeElement("span", `Intellectual Dependency,`, ["intro", "question"]), " an appetite for horny, stupid slaves based on bimbo fetishism."); + break; + case "SlaveProfessionalism": + innerDiv.append(App.UI.DOM.makeElement("span", `Slave Professionalism,`, ["intro", "question"]), " a strain of slavery that seeks smart, skilled, elegant slaves to hone to perfection."); + break; + case "PetiteAdmiration": + innerDiv.append(App.UI.DOM.makeElement("span", `Petite Admiration,`, ["intro", "question"]), " which prefers its slaves to stand heads and shoulders shorter than their masters."); + break; + case "StatuesqueGlorification": + innerDiv.append(App.UI.DOM.makeElement("span", `Statuesque Glorification,`, ["intro", "question"]), " an obsession, both sexual and otherwise, over height."); + break; + default: + innerDiv.append(App.UI.DOM.makeElement("span", `Multiculturalism,`, ["intro", "question"]), " a celebration of the total liberty that was the original purpose of the Free Cities."); + } + div.append(innerDiv); + div.append(App.UI.DOM.makeElement("span", arcology.building.render(), "intro")); + return div; + } + + function generateArcology() { + const arcology = {}; + arcology.fs = getFS(); + arcology.name = getName(); + arcology.FSProgress = either(10, 30, 50); + arcology.prosperity = either(40, 50, 60); + arcology.citizens = random(-1, 1); + arcology.terrain = terrainTypes.random(); + arcology.continent = continents.random(); + arcology.language = getLanguage(); + + const env = {terrain: arcology.terrain, established: true, fs: arcology.fs}; + const preset = App.Arcology.randomPreset(env); + arcology.building = preset.construct(env); + arcology.apply = preset.apply; + + return arcology; + + function getFS() { + const type = allowedFS.pluck(); + if (type === "Supremacist" || type === "Subjugationist") { + arcology.race = races.random(); + } + return type; + } + + function getName() { + switch (arcology.fs) { + case "Supremacist": + switch (arcology.race) { + case "white": + return setup.ArcologyNamesSupremacistWhite.random(); + case "asian": + return setup.ArcologyNamesSupremacistAsian.random(); + case "latina": + return setup.ArcologyNamesSupremacistLatina.random(); + case "middle eastern": + return setup.ArcologyNamesSupremacistMiddleEastern.random(); + case "black": + return setup.ArcologyNamesSupremacistBlack.random(); + case "indo-aryan": + return setup.ArcologyNamesSupremacistIndoAryan.random(); + case "pacific islander": + return setup.ArcologyNamesSupremacistPacificIslander.random(); + case "malay": + return setup.ArcologyNamesSupremacistMalay.random(); + case "amerindian": + return setup.ArcologyNamesSupremacistAmerindian.random(); + case "southern european": + return setup.ArcologyNamesSupremacistSouthernEuropean.random(); + case "semitic": + return setup.ArcologyNamesSupremacistSemitic.random(); + default: + return setup.ArcologyNamesSupremacistMixedRace.random(); + } + case "Subjugationist": + switch (arcology.race) { + case "white": + return setup.ArcologyNamesSubjugationistWhite.random(); + case "asian": + return setup.ArcologyNamesSubjugationistAsian.random(); + case "latina": + return setup.ArcologyNamesSubjugationistLatina.random(); + case "middle eastern": + return setup.ArcologyNamesSubjugationistMiddleEastern.random(); + case "black": + return setup.ArcologyNamesSubjugationistBlack.random(); + case "indo-aryan": + return setup.ArcologyNamesSubjugationistIndoAryan.random(); + case "pacific islander": + return setup.ArcologyNamesSubjugationistPacificIslander.random(); + case "malay": + return setup.ArcologyNamesSubjugationistMalay.random(); + case "amerindian": + return setup.ArcologyNamesSubjugationistAmerindian.random(); + case "southern european": + return setup.ArcologyNamesSubjugationistSouthernEuropean.random(); + case "semitic": + return setup.ArcologyNamesSubjugationistSemitic.random(); + default: + return setup.ArcologyNamesSubjugationistMixedRace.random(); + } + case "GenderRadicalist": + return setup.ArcologyNamesGenderRadicalist.random(); + case "GenderFundamentalist": + return setup.ArcologyNamesGenderFundamentalist.random(); + case "Paternalist": + return setup.ArcologyNamesPaternalist.random(); + case "Degradationist": + return setup.ArcologyNamesDegradationist.random(); + case "AssetExpansionist": + return setup.ArcologyNamesAssetExpansionist.random(); + case "SlimnessEnthusiast": + return setup.ArcologyNamesSlimnessEnthusiast.random(); + case "TransformationFetishist": + return setup.ArcologyNamesTransformationFetishist.random(); + case "BodyPurist": + return setup.ArcologyNamesBodyPurist.random(); + case "MaturityPreferentialist": + return setup.ArcologyNamesMaturityPreferentialist.random(); + case "YouthPreferentialist": + if (V.pedo_mode === 1 || V.minimumSlaveAge < 6) { + return setup.ArcologyNamesYouthPreferentialistLow.random(); + } else if (V.minimumSlaveAge < 14) { + return either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow).random(); + } else { + return setup.ArcologyNamesYouthPreferentialist.random(); + } + case "Pastoralist": + return setup.ArcologyNamesPastoralist.random(); + case "PhysicalIdealist": + return setup.ArcologyNamesPhysicalIdealist.random(); + case "ChattelReligionist": + return setup.ArcologyNamesChattelReligionist.random(); + case "RomanRevivalist": + return setup.ArcologyNamesRomanRevivalist.random(); + case "AztecRevivalist": + return setup.ArcologyNamesAztecRevivalist.random(); + case "EgyptianRevivalist": + return setup.ArcologyNamesEgyptianRevivalist.random(); + case "EdoRevivalist": + return setup.ArcologyNamesEdoRevivalist.random(); + case "ArabianRevivalist": + return setup.ArcologyNamesArabianRevivalist.random(); + case "ChineseRevivalist": + return setup.ArcologyNamesChineseRevivalist.random(); + case "Repopulationist": + return setup.ArcologyNamesRepopulationist.random(); + case "Eugenics": + return setup.ArcologyNamesEugenics.random(); + case "HedonisticDecadence": + return setup.ArcologyNamesHedonisticDecadence.random(); + case "IntellectualDependency": + return setup.ArcologyNamesIntellectualDependency.random(); + case "SlaveProfessionalism": + return setup.ArcologyNamesSlaveProfessionalism.random(); + case "PetiteAdmiration": + return setup.ArcologyNamesPetiteAdmiration.random(); + case "StatuesqueGlorification": + return setup.ArcologyNamesStatuesqueGlorification.random(); + default: + return "Arcology X-4"; + } + } + + function getLanguage() { + switch (arcology.fs) { + case "RomanRevivalist": + return "Latin"; + case "AztecRevivalist": + return "Nahuatl"; + case "EgyptianRevivalist": + return "Ancient Egyptian"; + case "EdoRevivalist": + return "Japanese"; + case "ArabianRevivalist": + return "Arabic"; + case "ChineseRevivalist": + return "Chinese"; + default: + switch (arcology.terrain) { + case "South America": + return "Spanish"; + case "Brazil": + return "Portuguese"; + case "the Middle East": + case "Africa": /* shouldn't that be portuguese, spanish or something? */ + return "Arabic"; + case "Asia": + return "Chinese"; + case "Europe": + return "German"; + case "Japan": + return "Japanese"; + case "oceanic": + case "North America": + case "Australia": + default: + return "English"; + } + } + } + } +}; diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw index ef9fdaa6427b99d000b579725d019e546d289d9b..2f3110f859363e767aee640c7386ebe58b9b58ce 100644 --- a/src/events/intro/initNationalities.tw +++ b/src/events/intro/initNationalities.tw @@ -1,6 +1,10 @@ :: init Nationalities [silently] -<<set $building = App.Arcology.defaultBuilding($terrain)>> +<<if $targetArcology !== "New">> + <<set $building = $targetArcology.building, delete $targetArcology.building>> +<<else>> + <<set $building = App.Arcology.defaultBuilding($terrain)>> +<</if>> <<set _sellable = $building.findCells(cell => cell.canBeSold())>> <<set _random12 = jsRandomMany(_sellable, 12)>> <<run _random12.forEach(cell => {cell.owner = 0})>> @@ -172,12 +176,12 @@ <<set _newArcology.direction = 0>> <<set _newArcology.name = "Arcology X-4">> <<set _newArcology.FSSupremacistDecoration = 20, _newArcology.FSSubjugationistDecoration = 20, _newArcology.FSGenderRadicalistDecoration = 20, _newArcology.FSGenderFundamentalistDecoration = 20, _newArcology.FSPaternalistDecoration = 20, _newArcology.FSDegradationistDecoration = 20, _newArcology.FSBodyPuristDecoration = 20, _newArcology.FSTransformationFetishistDecoration = 20, _newArcology.FSYouthPreferentialistDecoration = 20, _newArcology.FSMaturityPreferentialistDecoration = 20, _newArcology.FSSlimnessEnthusiastDecoration = 20, _newArcology.FSAssetExpansionistDecoration = 20, _newArcology.FSPastoralistDecoration = 20, _newArcology.FSPhysicalIdealistDecoration = 20, _newArcology.FSChattelReligionistDecoration = 20, _newArcology.FSRomanRevivalistDecoration = 20, _newArcology.FSAztecRevivalistDecoration = 20, _newArcology.FSEgyptianRevivalistDecoration = 20, _newArcology.FSEdoRevivalistDecoration = 20, _newArcology.FSArabianRevivalistDecoration = 20, _newArcology.FSChineseRevivalistDecoration = 20, _newArcology.FSRepopulationFocusDecoration = 20, _newArcology.FSRestartDecoration = 20, _newArcology.FSHedonisticDecadenceDecoration = 20, _newArcology.FSIntellectualDependencyDecoration = 20, _newArcology.FSSlaveProfessionalismDecoration = 20, _newArcology.FSPetiteAdmirationDecoration = 20, _newArcology.FSStatuesqueGlorificationDecoration = 20, _newArcology.FSCummunismDecoration = 20, _newArcology.FSIncestFetishistDecoration = 20>> - <<if $targetArcology.type != "New">> + <<if $targetArcology.fs != "New">> <<set $FSAnnounced = 1>> <<set $FSGotRepCredits = 1>> <<set _newArcology.name = $targetArcology.name, _newArcology.prosperity = $targetArcology.prosperity, $ACitizens += $targetArcology.citizens*500>> <<set _decoration = $targetArcology.FSProgress + 10>> - <<switch $targetArcology.type>> + <<switch $targetArcology.fs>> <<case "Supremacist">> <<set _newArcology.FSSupremacist = $targetArcology.FSProgress, _newArcology.FSSupremacistDecoration = _decoration, _newArcology.FSSupremacistRace = $targetArcology.race>> <<case "Subjugationist">> @@ -372,19 +376,19 @@ <<if ndef $customVariety>> <<set $nationalities = arr2obj(setup.baseNationalities)>> <</if>> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "white">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "middle eastern">> <</if>> <<else>> <<switch $continent>> <<case "North America">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "white">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "black">> <</if>> <<if ndef $customVariety>> /* If non-custom variety, adds regional $nationalities */ @@ -418,10 +422,10 @@ <<set hashPush($nationalities, "Vincentian")>> <</if>> <<case "South America">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "latina">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "black">> <</if>> <<if ndef $customVariety>> @@ -440,10 +444,10 @@ <<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>> <</if>> <<case "Brazil">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "white">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "black">> <</if>> <<if ndef $customVariety>> @@ -462,10 +466,10 @@ <<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>> <</if>> <<case "the Middle East">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "middle eastern">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "asian">> <</if>> <<if ndef $customVariety>> @@ -493,10 +497,10 @@ <<set hashPush($nationalities, "Yemeni", "Yemeni")>> <</if>> <<case "Africa">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "black">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "white">> <</if>> <<if ndef $customVariety>> @@ -556,10 +560,10 @@ <<set hashPush($nationalities, "Zimbabwean", "Zimbabwean")>> <</if>> <<case "Asia">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "asian">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "indo-aryan">> <</if>> <<if ndef $customVariety>> @@ -594,10 +598,10 @@ <<set hashPush($nationalities, "Vietnamese", "Vietnamese", "Vietnamese")>> <</if>> <<case "Europe">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "white">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "middle eastern">> <</if>> <<if ndef $customVariety>> @@ -650,10 +654,10 @@ <<set hashPush($nationalities, "Vatican")>> <</if>> <<case "Australia">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "white">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "asian">> <</if>> <<if ndef $customVariety>> @@ -678,10 +682,10 @@ <<set hashPush($nationalities, "Tuvaluan")>> <</if>> <<case "Japan">> - <<if $targetArcology.type != "Supremacist">> + <<if $targetArcology.fs != "Supremacist">> <<set $arcologies[0].FSSupremacistRace = "asian">> <</if>> - <<if $targetArcology.type != "Subjugationist">> + <<if $targetArcology.fs != "Subjugationist">> <<set $arcologies[0].FSSubjugationistRace = "asian">> <</if>> <<if ndef $customVariety>> diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw index 99e33316b8f8fabb12cd6c4c2a3f9202a25d5165..f6b0ade2fd351ec6ad5a26e0c86e383b30fb5811 100644 --- a/src/events/intro/introSummary.tw +++ b/src/events/intro/introSummary.tw @@ -489,7 +489,7 @@ All the things you need to run your arcology are getting more expensive City. <</options>> -<<if $targetArcology.type == "New">> +<<if $targetArcology.fs == "New">> <<options $terrain>> The Free City is located on ''$terrain'' terrain. <<option "urban" "Urban">> @@ -530,7 +530,7 @@ All the things you need to run your arcology are getting more expensive <</if>> <</if>> -<<if !["ArabianRevivalist", "AztecRevivalist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "RomanRevivalist"].includes($targetArcology.type)>> +<<if !["ArabianRevivalist", "AztecRevivalist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "RomanRevivalist"].includes($targetArcology.fs)>> <<options $language>> The lingua franca of your arcology is: <<option "English" "English">> diff --git a/src/events/intro/locationIntro.tw b/src/events/intro/locationIntro.tw index cb1a33f74ae90a508ceab72ebfbbdcc4c9df9b7d..87b8fe0f3d5d22a5aaff07732239016ed166c8d5 100644 --- a/src/events/intro/locationIntro.tw +++ b/src/events/intro/locationIntro.tw @@ -1,19 +1,25 @@ -:: Location Intro +:: Location Intro [nobr] -As the old countries crumble and technology stagnates, the gap between rich and poor increases. In order to continue living a good life without having their property taken by the mob, many of the wealthy and powerful come together to form 'Free Cities.' These are new cities on undeveloped land, in remote areas, or even afloat, fully free of any allegiance or law. These new cities are built on new ideas, with most buildings designed as futuristic, self-contained 'arcologies.' An arcology and everything in it is usually owned by a single person. And you're determined that you will soon be one of those single people. @@.orange;In what part of the world is your new arcology going to be located?@@ +<p> + As the old countries crumble and technology stagnates, the gap between rich and poor increases. In order to continue living a good life without having their property taken by the mob, many of the wealthy and powerful come together to form 'Free Cities.' These are new cities on undeveloped land, in remote areas, or even afloat, fully free of any allegiance or law. These new cities are built on new ideas, with most buildings designed as futuristic, self-contained 'arcologies.' An arcology and everything in it is usually owned by a single person. And you're determined that you will soon be one of those single people. + <span class="intro question">In what part of the world is your new arcology going to be located?</span> +</p> -[[North America|Intro Summary][$continent = "North America", $language = "English"]] -[[South America|Intro Summary][$continent = "South America", $language = "Spanish"]] -[[Brazil|Intro Summary][$continent = "Brazil", $language = "Portuguese"]] -[[Europe|Intro Summary][$continent = "Europe", $language = "German"]] -[[the Middle East|Intro Summary][$continent = "the Middle East", $language = "Arabic"]] -[[Africa|Intro Summary][$continent = "Africa", $language = "Arabic"]] -[[Asia|Intro Summary][$continent = "Asia", $language = "Chinese"]] -<<if $freshPC == 1 || $saveImported == 0>> - [[Japan|Intro Summary][$continent = "Japan", $language = "Japanese", $PC.race = "asian", $PC.nationality = "Japanese", $PC.hColor = "black", $PC.eye.origColor = "brown", resetEyeColor($PC)]] -<<else>> - [[Japan|Intro Summary][$continent = "Japan", $language = "Japanese"]] -<</if>> -[[Australia|Intro Summary][$continent = "Australia", $language = "English"]] -<br> -//Slaves from countries in the selected continent will appear more frequently.// +<p> + [[North America|Intro Summary][$continent = "North America", $language = "English"]] + | [[South America|Intro Summary][$continent = "South America", $language = "Spanish"]] + | [[Brazil|Intro Summary][$continent = "Brazil", $language = "Portuguese"]] + | [[Europe|Intro Summary][$continent = "Europe", $language = "German"]] + | [[the Middle East|Intro Summary][$continent = "the Middle East", $language = "Arabic"]] + | [[Africa|Intro Summary][$continent = "Africa", $language = "Arabic"]] + | [[Asia|Intro Summary][$continent = "Asia", $language = "Chinese"]] + <<if $freshPC == 1 || $saveImported == 0>> + | [[Japan|Intro Summary][$continent = "Japan", $language = "Japanese", $PC.race = "asian", $PC.nationality = "Japanese", $PC.hColor = "black", $PC.eye.origColor = "brown", resetEyeColor($PC)]] + <<else>> + | [[Japan|Intro Summary][$continent = "Japan", $language = "Japanese"]] + <</if>> + | [[Australia|Intro Summary][$continent = "Australia", $language = "English"]] + <div> + //Slaves from countries in the selected continent will appear more frequently.// + </div> +</p> diff --git a/src/events/intro/takeoverTarget.tw b/src/events/intro/takeoverTarget.tw new file mode 100644 index 0000000000000000000000000000000000000000..231ec44ca006e908742433560d40932fbc75bb2b --- /dev/null +++ b/src/events/intro/takeoverTarget.tw @@ -0,0 +1,46 @@ +:: Takeover Target [nobr] + +<p> + Before you deploy the + <<if $PC.rumor == "wealth">> + financial reserves that + <<elseif $PC.rumor == "diligence">> + carefully constructed plan that + <<elseif $PC.rumor == "force">> + mercenaries and <<if $continent == "Europe">>//maskirovka//<<else>>cover plan<</if>> that + <<elseif $PC.rumor == "social engineering">> + clever social manipulation that + <<else>> + optimistic plan you hope + <</if>> + will allow you to take over an arcology, you need to select a target. There are a number of vulnerable arcologies that you could + <<if $PC.rumor == "wealth">> + attempt a hostile takeover of + <<elseif $PC.rumor == "diligence">> + work to take over + <<elseif $PC.rumor == "force">> + attack + <<elseif $PC.rumor == "social engineering">> + infiltrate + <<else>> + aspire to take over + <</if>> + with a reasonable chance of success. Free Cities are volatile places, even compared to the troubled state of the rest of the world. There are always arcologies whose owners are on the brink of failure, and you could target one of them. + <<if $PC.career == "arcology owner">>(Since you've @@.springgreen;owned an arcology before,@@ you identify more potential target arcologies than a novice might.)<</if>> + Alternatively, arcologies are being built every day, and their owners' control is often uncertain. + <span class="intro question"> + Which arcology will you target? + </span> +</p> + +<div class="card"> +[[A newly constructed arcology|Terrain Intro][$targetArcology.fs = "New"]] +<div class="indent note"> + With many new arcologies being constructed, you will be able to select which area of the world and type of Free City you'd like your target arcology to be located in. +</div> +<div class="indent note"> + Recommended for new players. +</div> +</div> + +<<print App.UI.DOM.includeDOM(App.Intro.generateEstablishedArcologies(), "list")>> diff --git a/src/events/intro/terrainIntro.tw b/src/events/intro/terrainIntro.tw index feb934ccf8bccff5e602b43e6631a68b22a98b37..91b3275ee3713901c8146a4c08eaca54baa3515e 100644 --- a/src/events/intro/terrainIntro.tw +++ b/src/events/intro/terrainIntro.tw @@ -1,84 +1,74 @@ :: Terrain Intro [nobr] -<<if $targetArcology.type != "New">> - <<set $terrain = $targetArcology.terrain, $continent = $targetArcology.continent>> - <<switch $targetArcology.type>> - <<case "RomanRevivalist">><<set $language = "Latin">> - <<case "AztecRevivalist">><<set $language = "Nahuatl">> - <<case "EgyptianRevivalist">><<set $language = "Ancient Egyptian">> - <<case "EdoRevivalist">><<set $language = "Japanese">> - <<case "ArabianRevivalist">><<set $language = "Arabic">> - <<case "ChineseRevivalist">><<set $language = "Chinese">> - <<default>> - <<switch $terrain>> - <<case "oceanic" "North America" "Australia">><<set $language = "English">> - <<case "South America">><<set $language = "Spanish">> - <<case "Brazil">><<set $language = "Portuguese">> - <<case "the Middle East" "Africa">><<set $language = "Arabic">> - <<case "Asia">><<set $language = "Chinese">> - <<case "Europe">><<set $language = "German">> - <<case "Japan">><<set $language = "Japanese">> - <</switch>> - <</switch>> - <<goto "Intro Summary">> -<<else>> +<p> + The Free Cities are located wherever the rule of law is weak enough or permissive enough to allow a small area to secede, and where founders can afford to buy an area on which to build. +</p> +<p> + Many Free Cities are therefore located in marginal, rural terrain. Founding a Free City in such an area is easy, and can usually be accomplished with the indifference or even connivance of the old country from which it secedes. After all, the potential commercial benefits are great, and the loss of underused land is only significant in the moral sense. +</p> +<p> + Some Free Cities are located on water. Though some areas of shallow sea over the continental shelves hide valuable resources, others are neglected. Arcologies are such massive structures that it is very possible to design them to float anchored to the seabed. +</p> +<p> + Finally, a few Free Cities have been carved out from old world cities. Urban decay has left the hearts of many cities ripe for this. Many old world countries resist this kind of secession, but this rarest, smallest, and densest kind of Free City can offer its surrounding nation a great deal of economic advantage. +</p> +<p> + <span class="intro question">Which kind of Free City hosts your arcology?</span> +</p> -The Free Cities are located wherever the rule of law is weak enough or permissive enough to allow a small area to secede, and where founders can afford to buy an area on which to build. -<br><br> -Many Free Cities are therefore located in marginal, rural terrain. Founding a Free City in such an area is easy, and can usually be accomplished with the indifference or even connivance of the old country from which it secedes. After all, the potential commercial benefits are great, and the loss of underused land is only significant in the moral sense. -<br><br> -Some Free Cities are located on water. Though some areas of shallow sea over the continental shelves hide valuable resources, others are neglected. Arcologies are such massive structures that it is very possible to design them to float anchored to the seabed. -<br><br> -Finally, a few Free Cities have been carved out from old world cities. Urban decay has left the hearts of many cities ripe for this. Many old world countries resist this kind of secession, but this rarest, smallest, and densest kind of Free City can offer its surrounding nation a great deal of economic advantage. -<br><br> -@@.orange;Which kind of Free City hosts your arcology?@@ -<br> +<div class="card"> + [[Urban|Location Intro][$terrain = "urban"]] + <div class="indent"><span class="noteworthy">Low</span> minimum slave value and initial <span class="noteworthy">bear market</span> for slaves.</div> + <div class="indent"><span class="positive">High</span> ease of commerce with the old world.</div> + <div class="indent"><span class="positive">High</span> access to refugees and other desperate people.</div> + <div class="indent"><span class="warning">Low</span> cultural independence.</div> + <div class="indent">Unusually compact arcology with few manufacturing sectors.</div> +</div> +<div class="card"> + [[Rural|Location Intro][$terrain = "rural"]] + <div class="indent"><span class="noteworthy">High</span> minimum slave value and initial <span class="noteworthy">bull market</span> for slaves.</div> + <div class="indent">Moderate ease of commerce with the old world.</div> + <div class="indent">Moderate access to refugees and other desperate people.</div> + <div class="indent">Moderate cultural independence.</div> + <div class="indent">Widespread arcology with many manufacturing sectors.</div> +</div> +<div class="card"> + [[Ravine|Location Intro][$terrain = "ravine"]] + <div class="indent"><span class="noteworthy">High</span> minimum slave value and initial <span class="noteworthy">bull market</span> for slaves.</div> + <div class="indent"><span class="warning">Low</span> ease of commerce with the old world.</div> + <div class="indent"><span class="warning">Very low</span> access to refugees and other desperate people.</div> + <div class="indent"><span class="positive">High</span> cultural independence.</div> + <div class="indent">The arcology mostly being hidden inside the ravine leads to an unusual layout.</div> +</div> +<div class="card"> + [[Marine|Location Intro][$terrain = "marine"]] + <div class="indent">Moderate minimum slave value and initially balanced market for slaves.</div> + <div class="indent">Moderate ease of commerce with the old world.</div> + <div class="indent"><span class="warning">Low</span> access to refugees and other desperate people.</div> + <div class="indent"><span class="positive">High</span> cultural independence.</div> + <div class="indent">Large amount of markets and an extra shop sector.</div> +</div> +<div class="card"> + [[Oceanic|Intro Summary][$terrain = "oceanic"]] + <div class="indent"><span class="noteworthy">High</span> minimum slave value and initial <span class="noteworthy">bull market</span> for slaves.</div> + <div class="indent">Moderate ease of commerce with the old world.</div> + <div class="indent"><span class="warning">Very low</span> access to refugees and other desperate people.</div> + <div class="indent"><span class="positive">Very high</span> cultural independence.</div> + <div class="indent">This unique location attracts the wealthy leading to initial luxury apartments.</div> + <div class="indent">Ensures access to slaves from all over the world and will not associate the arcology with a continent.</div> + <<if $showSecExp == 1>> + <div class="indent">Oceanic arcologies will not be subjects of attacks.</div> + <</if>> +</div> -<br>[[Urban|Location Intro][$terrain = "urban"]] -<br> @@.yellow;Low@@ minimum slave value and initial @@.yellow;bear market@@ for slaves. -<br> @@.green;High@@ ease of commerce with the old world. -<br> @@.green;High@@ access to refugees and other desperate people. -<br> @@.red;Low@@ cultural independence. -<br> Unusually compact arcology with few manufacturing sectors. -<br>[[Rural|Location Intro][$terrain = "rural"]] -<br> @@.yellow;High@@ minimum slave value and initial @@.yellow;bull market@@ for slaves. -<br> Moderate ease of commerce with the old world. -<br> Moderate access to refugees and other desperate people. -<br> Moderate cultural independence. -<br> Widespread arcology with many manufacturing sectors. -<br>[[Ravine|Location Intro][$terrain = "ravine"]] -<br> @@.yellow;High@@ minimum slave value and initial @@.yellow;bull market@@ for slaves. -<br> @@.red;Low@@ ease of commerce with the old world. -<br> @@.red;Very low@@ access to refugees and other desperate people. -<br> @@.green;High@@ cultural independence. -<br> The arcology mostly being hidden inside the ravine leads to an unusual layout. -<br>[[Marine|Location Intro][$terrain = "marine"]] -<br> Moderate minimum slave value and initially balanced market for slaves. -<br> Moderate ease of commerce with the old world. -<br> @@.red;Low@@ access to refugees and other desperate people. -<br> @@.green;High@@ cultural independence. -<br> Large amount of markets and an extra shop sector. -<br>[[Oceanic|Intro Summary][$terrain = "oceanic"]] -<br> @@.yellow;High@@ minimum slave value and initial @@.yellow;bull market@@ for slaves. -<br> Moderate ease of commerce with the old world. -<br> @@.red;Very low@@ access to refugees and other desperate people. -<br> @@.green;Very high@@ cultural independence. -<br> This unique location attracts the wealthy leading to initial luxury apartments. -<br> Ensures access to slaves from all over the world and will not associate the arcology with a continent. -<<if $showSecExp == 1>> - <br>Oceanic arcologies will not be subjects of attacks. -<</if>> - -<br><br> - -<<if $showSecExp == 1>> - <<link "Hide Security Expansion Mod effects" "Terrain Intro">> - <<set $showSecExp = 0>> - <</link>> -<<else>> - <<link "Show Security Expansion Mod effects" "Terrain Intro">> - <<set $showSecExp = 1>> - <</link>> -<</if>> - -<</if>> +<p> + <<if $showSecExp == 1>> + <<link "Hide Security Expansion Mod effects" "Terrain Intro">> + <<set $showSecExp = 0>> + <</link>> + <<else>> + <<link "Show Security Expansion Mod effects" "Terrain Intro">> + <<set $showSecExp = 1>> + <</link>> + <</if>> +</p> diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css index dc0e69c9be39a271a1a2a5f795cb1e9d7110c371..eef848945fb6c02aaf310f6a5f449d4ce59a625d 100644 --- a/src/gui/css/mainStyleSheet.css +++ b/src/gui/css/mainStyleSheet.css @@ -195,7 +195,7 @@ span.zeroButton > a:hover { text-decoration: none; } .gold, .gold a, .trust.dec, .trust.dec a, .trust.frightened, .trust.frightened a { color: gold } .goldenrod, .goldenrod a, .trust.terrified, .trust.terrified a { color: goldenrod } .gray, .gray a { color: gray } -.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a { color: green } +.green, .green a, .reputation.inc, .reputation.inc a, .improvement, .improvement a, .flaw.break, .flaw.break a, .skill.inc, .skill.inc a, .positive, .positive a { color: green } .hotpink, .hotpink a, .devotion.inc, .devotion.inc a, .devotion.accept, .devotion.accept a { color: hotpink } .lawngreen, .lawngreen a { color: lawngreen } .lightblue, .lightblue a { color: lightblue } diff --git a/src/npc/acquisition.tw b/src/npc/acquisition.tw index 9044a2047328f76057fc847154f43b70e53cc924..963653ab1853507c895cd62c50b8aca540050c7c 100644 --- a/src/npc/acquisition.tw +++ b/src/npc/acquisition.tw @@ -222,12 +222,12 @@ The previous owner seems to have left in something of a hurry. <<include [[Cheatmode Database]]>> <<elseif $saveImported == 1>> Since it took some time for you to ensure that your existing stable of slaves were safely moved to $arcologies[0].name, the previous owner had the time to get most of their things away. -<<elseif ($targetArcology.type != "New") && ($targetArcology.type != "Multiculturalist")>> +<<elseif ($targetArcology.fs != "New") && ($targetArcology.fs != "Multiculturalist")>> <<for $j = 0; $j < 5; $j++>> <<if _valueOwed - _valueGiven <= 5000>> <<break>> <</if>> - <<switch $targetArcology.type>> + <<switch $targetArcology.fs>> <<case "Supremacist">> <<set $oneTimeDisableDisability = 1>> <<set $fixedRace = $arcologies[0].FSSupremacistRace>><<set $activeSlave = GenerateNewSlave()>> @@ -689,7 +689,7 @@ The previous owner seems to have left in something of a hurry. <</switch>> <<set $activeSlave.origin = "You acquired $him along with the arcology.", $activeSlave.career = "a slave">> <<set _slaveCost = slaveCost($activeSlave)>> - <<if ["AztecRevivalist", "ChineseRevivalist", "Eugenics", "SlaveProfessionalism"].includes($targetArcology.type)>> + <<if ["AztecRevivalist", "ChineseRevivalist", "Eugenics", "SlaveProfessionalism"].includes($targetArcology.fs)>> <<set _valueGiven += _slaveCost*4>> <<else>> <<set _valueGiven += _slaveCost>> @@ -697,7 +697,7 @@ The previous owner seems to have left in something of a hurry. <<run newSlave($activeSlave)>> <</for>> <<setLocalPronouns $activeSlave>> - <<switch $targetArcology.type>> + <<switch $targetArcology.fs>> <<case "Supremacist">> They kept a personal stable of fearful $arcologies[0].FSSupremacistRace sex slaves, but their sexual training is incomplete. Several of them are still here. <<case "Subjugationist">> @@ -758,7 +758,7 @@ The previous owner seems to have left in something of a hurry. ERROR: bad arcology type <</switch>> <<else>> - They could not get all of their personal effects away. Since they <<if $targetArcology.type == "Multiculturalist">>tried to sample different kinds of sexual slavery<<else>>did not have the time in control of the arcology to develop a specific stable of sex slaves<</if>>, their slaves were quite varied. + They could not get all of their personal effects away. Since they <<if $targetArcology.fs == "Multiculturalist">>tried to sample different kinds of sexual slavery<<else>>did not have the time in control of the arcology to develop a specific stable of sex slaves<</if>>, their slaves were quite varied. <<for $j = 0; $j < _heroSlaves.length; $j++>> <<if _valueOwed - _valueGiven <= 5000>> <<break>> diff --git a/src/npc/takeoverTarget.tw b/src/npc/takeoverTarget.tw deleted file mode 100644 index 52a2a68166a495f88cc3e602101f7406276e7241..0000000000000000000000000000000000000000 --- a/src/npc/takeoverTarget.tw +++ /dev/null @@ -1,249 +0,0 @@ -:: Takeover Target [nobr] - -<p> - Before you deploy the - <<if $PC.rumor == "wealth">> - financial reserves that - <<elseif $PC.rumor == "diligence">> - carefully constructed plan that - <<elseif $PC.rumor == "force">> - mercenaries and <<if $continent == "Europe">>//maskirovka//<<else>>cover plan<</if>> that - <<elseif $PC.rumor == "social engineering">> - clever social manipulation that - <<else>> - optimistic plan you hope - <</if>> - will allow you to take over an arcology, you need to select a target. There are a number of vulnerable arcologies that you could - <<if $PC.rumor == "wealth">> - attempt a hostile takeover of - <<elseif $PC.rumor == "diligence">> - work to take over - <<elseif $PC.rumor == "force">> - attack - <<elseif $PC.rumor == "social engineering">> - infiltrate - <<else>> - aspire to take over - <</if>> - with a reasonable chance of success. Free Cities are volatile places, even compared to the troubled state of the rest of the world. There are always arcologies whose owners are on the brink of failure, and you could target one of them. - <<if $PC.career == "arcology owner">>(Since you've @@.springgreen;owned an arcology before,@@ you identify more potential target arcologies than a novice might.)<</if>> - Alternatively, arcologies are being built every day, and their owners' control is often uncertain. - <span class="intro question"> - Which arcology will you target? - </span> -</p> - - -[[A newly constructed arcology|Terrain Intro][$targetArcology.type = "New"]] -<div class="indent note"> - With many new arcologies being constructed, you will be able to select which area of the world and type of Free City you'd like your target arcology to be located in. -</div> -<div class="indent note"> - Recommended for new players. -</div> -<hr style="margin:0"> -<<set _arcologyTypes = ["ArabianRevivalist", "AssetExpansionist", "AztecRevivalist", "BodyPurist", "ChattelReligionist", "ChineseRevivalist", "EdoRevivalist", "EgyptianRevivalist", "Eugenics", "HedonisticDecadence", "IntellectualDependency", "MaturityPreferentialist", "Multiculturalist", "Pastoralist", "Paternalist", "PetiteAdmiration", "PhysicalIdealist", "Repopulationist", "RomanRevivalist", "SlaveProfessionalism", "SlimnessEnthusiast", "StatuesqueGlorification", "Subjugationist", "Supremacist", "TransformationFetishist", "YouthPreferentialist"]>> -<<if $seeDicks != 0>><<set _arcologyTypes.push("GenderRadicalist")>><</if>> -<<if $seeDicks != 100>><<set _arcologyTypes.push("GenderFundamentalist")>><</if>> -<<if $seeExtreme != 0>><<set _arcologyTypes.push("Degradationist")>><</if>> -<<set _terrainTypes = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"]>> -<<set _continents = ["Africa", "Asia", "Asia", "Australia", "Europe", "Europe", "Japan", "North America", "North America", "South America", "the Middle East"]>> -<<set _races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"]>> -<<set _targetArcologies = []>> -<<set _targets = 4>> -<<if $PC.career == "arcology owner">><<set _targets += 2>><</if>> -<<for $i = 0; $i < _targets; $i++>> - <<set $targetArcology = {}>> - <<set $targetArcology.type = _arcologyTypes.pluck()>> - <<switch $targetArcology.type>> - <<case "Supremacist">> - <<set $targetArcology.race = _races.random()>> - <<switch $targetArcology.race>> - <<case "white">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistWhite.random()>> - <<case "asian">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistAsian.random()>> - <<case "latina">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistLatina.random()>> - <<case "middle eastern">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistMiddleEastern.random()>> - <<case "black">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistBlack.random()>> - <<case "indo-aryan">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistIndoAryan.random()>> - <<case "pacific islander">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistPacificIslander.random()>> - <<case "malay">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistMalay.random()>> - <<case "amerindian">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistAmerindian.random()>> - <<case "southern european">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistSouthernEuropean.random()>> - <<case "semitic">> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistSemitic.random()>> - <<default>> - <<set $targetArcology.name = setup.ArcologyNamesSupremacistMixedRace.random()>> - <</switch>> - <<case "Subjugationist">> - <<set $targetArcology.race = _races.random()>> - <<switch $targetArcology.race>> - <<case "white">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistWhite.random()>> - <<case "asian">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistAsian.random()>> - <<case "latina">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistLatina.random()>> - <<case "middle eastern">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistMiddleEastern.random()>> - <<case "black">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistBlack.random()>> - <<case "indo-aryan">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistIndoAryan.random()>> - <<case "pacific islander">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistPacificIslander.random()>> - <<case "malay">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistMalay.random()>> - <<case "amerindian">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistAmerindian.random()>> - <<case "southern european">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistSouthernEuropean.random()>> - <<case "semitic">> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistSemitic.random()>>\ - <<default>> - <<set $targetArcology.name = setup.ArcologyNamesSubjugationistMixedRace.random()>> - <</switch>> - <<case "GenderRadicalist">><<set $targetArcology.name = setup.ArcologyNamesGenderRadicalist.random()>> - <<case "GenderFundamentalist">><<set $targetArcology.name = setup.ArcologyNamesGenderFundamentalist.random()>> - <<case "Paternalist">><<set $targetArcology.name = setup.ArcologyNamesPaternalist.random()>> - <<case "Degradationist">><<set $targetArcology.name = setup.ArcologyNamesDegradationist.random()>> - <<case "AssetExpansionist">><<set $targetArcology.name = setup.ArcologyNamesAssetExpansionist.random()>> - <<case "SlimnessEnthusiast">><<set $targetArcology.name = setup.ArcologyNamesSlimnessEnthusiast.random()>> - <<case "TransformationFetishist">><<set $targetArcology.name = setup.ArcologyNamesTransformationFetishist.random()>> - <<case "BodyPurist">><<set $targetArcology.name = setup.ArcologyNamesBodyPurist.random()>> - <<case "MaturityPreferentialist">><<set $targetArcology.name = setup.ArcologyNamesMaturityPreferentialist.random()>> - <<case "YouthPreferentialist">> - <<if $pedo_mode == 1 || $minimumSlaveAge < 6>> - <<set $targetArcology.name = setup.ArcologyNamesYouthPreferentialistLow.random()>> - <<elseif $minimumSlaveAge < 14>> - <<set $targetArcology.name = either(setup.ArcologyNamesYouthPreferentialist, setup.ArcologyNamesYouthPreferentialistLow)>> - <<else>> - <<set $targetArcology.name = setup.ArcologyNamesYouthPreferentialist.random()>> - <</if>> - <<case "Pastoralist">><<set $targetArcology.name = setup.ArcologyNamesPastoralist.random()>> - <<case "PhysicalIdealist">><<set $targetArcology.name = setup.ArcologyNamesPhysicalIdealist.random()>> - <<case "ChattelReligionist">><<set $targetArcology.name = setup.ArcologyNamesChattelReligionist.random()>> - <<case "RomanRevivalist">><<set $targetArcology.name = setup.ArcologyNamesRomanRevivalist.random()>> - <<case "AztecRevivalist">><<set $targetArcology.name = setup.ArcologyNamesAztecRevivalist.random()>> - <<case "EgyptianRevivalist">><<set $targetArcology.name = setup.ArcologyNamesEgyptianRevivalist.random()>> - <<case "EdoRevivalist">><<set $targetArcology.name = setup.ArcologyNamesEdoRevivalist.random()>> - <<case "ArabianRevivalist">><<set $targetArcology.name = setup.ArcologyNamesArabianRevivalist.random()>> - <<case "ChineseRevivalist">><<set $targetArcology.name = setup.ArcologyNamesChineseRevivalist.random()>> - <<case "Repopulationist">><<set $targetArcology.name = setup.ArcologyNamesRepopulationist.random()>> - <<case "Eugenics">><<set $targetArcology.name = setup.ArcologyNamesEugenics.random()>> - <<case "HedonisticDecadence">><<set $targetArcology.name = setup.ArcologyNamesHedonisticDecadence.random()>> - <<case "IntellectualDependency">><<set $targetArcology.name = setup.ArcologyNamesIntellectualDependency.random()>> - <<case "SlaveProfessionalism">><<set $targetArcology.name = setup.ArcologyNamesSlaveProfessionalism.random()>> - <<case "PetiteAdmiration">><<set $targetArcology.name = setup.ArcologyNamesPetiteAdmiration.random()>> - <<case "StatuesqueGlorification">><<set $targetArcology.name = setup.ArcologyNamesStatuesqueGlorification.random()>> - <<default>><<set $targetArcology.name = "Arcology X-4">> - <</switch>> - <<set $targetArcology.FSProgress = either(10,30,50)>> - <<set $targetArcology.prosperity = either(40,50,60)>> - <<set $targetArcology.citizens = random(-1,1)>> - <<set $targetArcology.terrain = _terrainTypes.random()>> - <<set $targetArcology.continent = _continents.random()>> - <<set _targetArcologies.push($targetArcology)>> -<</for>> - -<<for $i = 0; $i < _targetArcologies.length; $i++>> - <<print "[[_targetArcologies[$i].name|Terrain Intro][$targetArcology = _targetArcologies[" + $i + "]]]">> is an established arcology located in a Free City - <<if _targetArcologies[$i].terrain == "urban">> - carved out of an urban area of _targetArcologies[$i].continent. - <<elseif _targetArcologies[$i].terrain == "rural">> - built in a rural area of _targetArcologies[$i].continent. - <<elseif _targetArcologies[$i].terrain == "marine">> - constructed just offshore of _targetArcologies[$i].continent. - <<elseif _targetArcologies[$i].terrain == "ravine">> - constructed in a large canyon of _targetArcologies[$i].continent. - <<else>> - in the middle of the ocean. - <</if>> - <<if _targetArcologies[$i].prosperity >= 60>> - <div class="indent"> - It is unusually prosperous for a vulnerable arcology. - </div> - <<elseif _targetArcologies[$i].prosperity <= 40>> - <div class="indent"> - It has little economic prosperity and is vulnerable. - </div> - <</if>> - <<if _targetArcologies[$i].citizens > 0>> - <div class="indent"> - It has an unusually high ratio of citizens to sex slaves, increasing demand for sexual services. - </div> - <<elseif _targetArcologies[$i].citizens < 0>> - <div class="indent"> - It has an unusually low ratio of citizens to sex slaves, reducing demand for sexual services. - </div> - <</if>> - <div class="indent"> - Its society - <<if _targetArcologies[$i].FSProgress >= 50>> - has advanced towards - <<elseif _targetArcologies[$i].FSProgress >= 30>> - has devoted resources to - <<else>> - has just begun to adopt - <</if>> - <<switch _targetArcologies[$i].type>> - <<case "Supremacist">>@@.orange;Supremacy of the _targetArcologies[$i].race<<if _targetArcologies[$i].race != "mixed race">> race<</if>>.@@ - <<case "Subjugationist">>@@.orange;Subjugation of the _targetArcologies[$i].race<<if _targetArcologies[$i].race != "mixed race">> race<</if>>.@@ - <<case "GenderRadicalist">>@@.orange;Gender Radicalism,@@ a movement that supports feminization of slavegirls with dicks. - <<case "GenderFundamentalist">>@@.orange;Gender Fundamentalism,@@ a reaction to modern libertinism that seeks to reinforce gender roles. - <<case "Paternalist">>@@.orange;Paternalism,@@ an optimistic strain of slavery that protects and improves slaves. - <<case "Degradationist">>@@.orange;Degradationism,@@ an extreme branch of modern slavery that treats slaves as subhuman. - <<case "AssetExpansionist">>@@.orange;Asset Expansionism,@@ a societal preoccupation with expansion of body parts, especially breasts. - <<case "SlimnessEnthusiast">>@@.orange;Slimness Enthusiasm,@@ an aesthetic movement that fetishizes the lithe female form. - <<case "TransformationFetishist">>@@.orange;Transformation Fetishism,@@ a focus on implants and other kinds of surgical alteration. - <<case "BodyPurist">>@@.orange;Body Purism,@@ a reaction to extreme surgical fetishism that prefers bodies grown biologically. - <<case "MaturityPreferentialist">>@@.orange;Maturity Preferentialism,@@ an appetite for mature slaves based on MILF fetishism. - <<case "YouthPreferentialist">>@@.orange;Youth Preferentialism,@@ which focuses on youth and virginity in slaves. - <<case "Pastoralist">>@@.orange;Pastoralism,@@ an appetite for products of the human body, especially milk. - <<case "PhysicalIdealist">>@@.orange;Physical Idealism,@@ an aspirational movement which fetishizes muscle and physical fitness. - <<case "ChattelReligionist">>@@.orange;Chattel Religionism,@@ a religious revival in the context of modern slavery. - <<case "RomanRevivalist">>@@.orange;Roman Revivalism,@@ which seeks to recreate the glory that was ancient Rome. - <div class="indent"> - It has an established lingua franca: Latin. - </div> - <<case "AztecRevivalist">>@@.orange;Aztec Revivalism,@@ which aspires to reach the heights of the Aztec Empire at it's peak. - <div class="indent"> - It has an established lingua franca: Nahuatl. - </div> - <<case "EgyptianRevivalist">>@@.orange;Egyptian Revivalism,@@ a movement to rebuild the monuments and greatness of ancient Egypt. - <div class="indent"> - It has an established lingua franca: Ancient Egyptian. - </div> - <<case "EdoRevivalist">>@@.orange;Edo Revivalism,@@ an insular movement with a focus on the cultural superiority of old Japan. - <div class="indent"> - It has an established lingua franca: Japanese. - </div> - <<case "ArabianRevivalist">>@@.orange;Arabian Revivalism,@@ a melding of Arabian history and recent mythology of the Near East. - <div class="indent"> - It has an established lingua franca: Arabic. - </div> - <<case "ChineseRevivalist">>@@.orange;Chinese Revivalism,@@ which modernizes the assumed superiority of the Middle Kingdom. - <div class="indent"> - It has an established lingua franca: Chinese. - </div> - <<case "Repopulationist">>@@.orange;Repopulationism,@@ the belief that the key to humanity's survival is a child in every fertile womb. - <<case "Eugenics">>@@.orange;Eugenics,@@ the belief that the world's failings were caused by rampant breeding of the inferior, and as such, only society's best should reproduce. - <<case "HedonisticDecadence">>@@.orange;Decadent Hedonism,@@ a movement to embody life's pleasures, particularly eating and sex. - <<case "IntellectualDependency">>@@.orange;Intellectual Dependency,@@ an appetite for horny, stupid slaves based on bimbo fetishism. - <<case "SlaveProfessionalism">>@@.orange;Slave Professionalism,@@ a strain of slavery that seeks smart, skilled, elegant slaves to hone to perfection. - <<case "PetiteAdmiration">>@@.orange;Petite Admiration,@@ which prefers its slaves to stand heads and shoulders shorter than their masters. - <<case "StatuesqueGlorification">>@@.orange;Statuesque Glorification,@@ an obsession, both sexual and otherwise, over height. - <<default>>@@.orange;Multiculturalism,@@ a celebration of the total liberty that was the original purpose of the Free Cities. - <</switch>> - </div> - <hr style="margin:0"> -<</for>> \ No newline at end of file