diff --git a/js/002-config/fc-js-init.js b/js/002-config/fc-js-init.js index 25c52a87a62ced70f885e16e7fedf779bad9c3aa..b2f6656f91a1bfb95e24d6aa2b023b25cdcd3a5e 100644 --- a/js/002-config/fc-js-init.js +++ b/js/002-config/fc-js-init.js @@ -50,6 +50,8 @@ App.Neighbor = {}; App.MainView = {}; App.Medicine = {}; App.Medicine.Modification = {}; +App.Medicine.Modification.Brands = {}; +App.Medicine.Modification.Select = {}; App.Medicine.OrganFarm = {}; App.Medicine.OrganFarm.Organs = {}; App.Medicine.Surgery = {}; diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js new file mode 100644 index 0000000000000000000000000000000000000000..56b2e62ec75ebc97dbcc525065cde5781dd28ed0 --- /dev/null +++ b/js/003-data/slaveMods.js @@ -0,0 +1,206 @@ +/** + * @typedef {object} PolicySelector + * @property {string} title The title of the policy as displayed in the UI, "Health Inspection SMR" + * @property {string} [titleClass] The class to apply to the title: "lime" + * @property {string} [activatedTitle] The title of the policy if the policy is active. Param "title" is used as a fallback. + * @property {string} text Text that describes the policy in detail. No initial cap, ends with punctuation. + * @property {string} [activatedText] Text that describes an active policy in detail. Uses param "text" as a fallback. + * @property {function(void):boolean} [requirements] Function to determine if a policy can be enabled. + * @property {function(void):void} [onImplementation] Beyond applying the policy itself and billing the player, are there other values to change? This allows a shortstack FS policy to revoke some generic tall policies, for example. + * @property {function(void):void} [onRepeal] same as onImplementation, but fires when a policy is repealed. + * @property {number|string} [enable] Value to enable a policy. Defaults to 1 if not defined. + * @property {object} [hide] Object controlling special hide settings that can hide parts of the policy if needed. + * @property {number} [hide.button] Hides the appeal/repeal button if 1 + * @property {number} [hide.ifActivated] Hides the entire policy if the policy is applied. 1 to enable. + * @property {string} [note] Note that appears at the end of the policy display in italics to present further information. Starts with cap, no punctuation at end. + * @property {string} [activatedNote] Note that appears if policy is activated. Please note that unlike the other "activated" categories, "note" is only displayed on deactivated policies. There is no fallback. + */ +/** + * @typedef {object<string, PolicySelector[]>} PolicySelectorGroup + * Key names represent a piece of the variable. "policies.SMR.basicSMR" will be checked against "V.policies.SMR.basicSMR". "arcologies[0].FSEgyptianRevivalistIncestPolicy" will be checked against "V.arcologies[0].FSEgyptianRevivalistIncestPolicy". + */ + +/** @type {object<string, PolicySelectorGroup>} */ +App.Medicine.Modification.Brands = { + personal: { + "your personal symbol": {displayName: "Your slaving emblem"}, + "your initials": {displayName: "Your initials"}, + }, + dirtyWord: { + "SLUT": {displayName: "SLUT"}, + "WHORE": {displayName: "WHORE"}, + "SLAVE": {displayName: "SLAVE"}, + "COW": {displayName: "COW"}, + "MEAT": {displayName: "MEAT"}, + "CUMDUMP": {displayName: "CUMDUMP"}, + "LOVER": {displayName: "LOVER"}, + }, + genitalSymbol: { + "a pussy symbol": {displayName: "Pussy symbol"}, + "an anus symbol": {displayName: "Anus symbol"}, + "a penis symbol": {displayName: "Penis symbol"}, + }, + silhouettes: { + "Lady": {displayName: "a lady silhouette"}, + "Princess": {displayName: "a princess silhouette"}, + "Queen": {displayName: "a queen silhouette"}, + "Angel": {displayName: "an angel silhouette"}, + "Devil": {displayName: "a devil silhouette"}, + + }, + FS: { + "a racial slur": { + displayName: "Racial Slur", + requirements: function() { + return ( + (V.arcologies[0].FSSupremacist !== "unset" && slave.race !== V.arcologies[0].FSSupremacistRace) || + (V.arcologies[0].FSSubjugationist !== "unset" && slave.race === V.arcologies[0].FSSubjugationistRace) + ); + } + }, + "how much sex $he needs per day": { + displayName: "Scores", + requirements: function() { + return (V.arcologies[0].FSIntellectualDependency !== "unset"); + } + }, + "$his average slave aptitude test scores": { + displayName: "Scores", + requirements: function() { + return (V.arcologies[0].FSSlaveProfessionalism !== "unset"); + } + }, + "the number of children $he has birthed": { + displayName: "Birth Count", + requirements: function() { + return (V.arcologies[0].FSRepopulationFocus !== "unset"); + } + }, + "a gender symbol": { + displayName: "Gender Symbol", + requirements: function() { + return ((V.arcologies[0].FSGenderRadicalist !== "unset") || (V.arcologies[0].FSGenderFundamentalist !== "unset")); + } + }, + "$his own personal symbol": { + displayName: "Personal Symbol", + requirements: function() { + return (V.arcologies[0].FSPaternalist !== "unset"); + } + }, + "a chain symbol": { + displayName: "Chain Symbol", + requirements: function() { + return (V.arcologies[0].FSDegradationist !== "unset"); + } + }, + "a Vitruvian man": { + displayName: "Vitruvian Man", + requirements: function() { + return (V.arcologies[0].FSBodyPurist !== "unset"); + } + }, + "a scalpel": { + displayName: "Scalpel", + requirements: function() { + return (V.arcologies[0].FSTransformationFetishist !== "unset"); + } + }, + "$his virginity status": { + displayName: "Virginity Status", + requirements: function() { + return (V.arcologies[0].FSYouthPreferentialist !== "unset"); + } + }, + "$his sexual skills": { + displayName: "Sexual Skill Info", + requirements: function() { + return (V.arcologies[0].FSMaturityPreferentialist !== "unset"); + } + }, + "$his current height": { + displayName: "Current height", + requirements: function() { + return ((V.arcologies[0].FSPetiteAdmiration !== "unset") || (V.arcologies[0].FSStatuesqueGlorification !== "unset")); + } + }, + "$his absolute minimum breast size": { + displayName: "Breast Floor", + requirements: function() { + return (V.arcologies[0].FSSlimnessEnthusiast !== "unset"); + } + }, + "$his absolute maximum breast size": { + displayName: "Breast Ceiling", + requirements: function() { + return (V.arcologies[0].FSAssetExpansionist !== "unset"); + } + }, + "$his highest weigh-in": { + displayName: "Weight Record", + requirements: function() { + return (V.arcologies[0].FSHedonisticDecadence !== "unset"); + } + }, + "a big helping of $PC.refreshment": { // TODO: special case? + displayName: "Favorite Food", + requirements: function() { + return ((V.arcologies[0].FSHedonisticDecadence !== "unset") && V.PC.refreshmentType === 2); + } + }, + "$his body product quality": { + displayName: "Product Quality", + requirements: function() { + return (V.arcologies[0].FSPastoralist !== "unset"); + } + }, + "$his deadlift record": { + displayName: "Deadlift Info", + requirements: function() { + return (V.arcologies[0].FSPhysicalIdealist !== "unset"); + } + }, + "a religious symbol": { + displayName: "Religious Symbol", + requirements: function() { + return (V.arcologies[0].FSChattelReligionist !== "unset"); + } + }, + "the crest of your Republic": { + displayName: "Republican Crest", + requirements: function() { + return (V.arcologies[0].FSRomanRevivalist !== "unset"); + } + }, + "the symbol of the Aztec gods": { + displayName: "Seven Serpents", + requirements: function() { + return (V.arcologies[0].FSAztecRevivalist !== "unset"); + } + }, + "the sigil of your Dynasty": { + displayName: "Dynastic Sigil", + requirements: function() { + return (V.arcologies[0].FSEgyptianRevivalist !== "unset"); + } + }, + "the Shogunate's mon": { + displayName: "Mon", + requirements: function() { + return (V.arcologies[0].FSEdoRevivalist !== "unset"); + } + }, + "a symbol of the Caliphate": { + displayName: "Caliphate Symbol", + requirements: function() { + return (V.arcologies[0].FSArabianRevivalist !== "unset"); + } + }, + "your Imperial Seal": { + displayName: "Imperial Seal", + requirements: function() { + return (V.arcologies[0].FSChineseRevivalist !== "unset"); + } + }, + } +}; diff --git a/src/cheats/mod_editSlaveCheatNew.tw b/src/cheats/mod_editSlaveCheatNew.tw index b4ad3c40a2f1c88592c997eb0e77ba61725fed0c..39d9515986fa00aba4405165e33971eb3de8f03f 100644 --- a/src/cheats/mod_editSlaveCheatNew.tw +++ b/src/cheats/mod_editSlaveCheatNew.tw @@ -4352,6 +4352,9 @@ <br><br> ''Brand Design:'' <br> + <<link "Add">> + <<run App.Medicine.Modification.addScar($tempSlave, "belly", "c-section")>> + <</link>> <<link "[your personal symbol]">><<set $tempSlave.brand = "your personal symbol">><</link>><<print " | ">> <<link "[SLUT]">><<set $tempSlave.brand = "SLUT">><</link>><<print " | ">> <<link "[WHORE]">><<set $tempSlave.brand = "WHORE">><</link>><<print " | ">> diff --git a/src/uncategorized/bodyModification.js b/src/uncategorized/bodyModification.js new file mode 100644 index 0000000000000000000000000000000000000000..c821cad923e424bd63499449c67dc1a482615590 --- /dev/null +++ b/src/uncategorized/bodyModification.js @@ -0,0 +1,316 @@ +App.Medicine.Modification.Select.brand = function(slave, cheat = false) { + const el = new DocumentFragment(); + let p = document.createElement('p'); + let div = document.createElement('div'); + const { his, His, him } = getPronouns(slave); + + p.classList.add("indent"); + for (const brandPlace in slave.brand) { + div = document.createElement('div'); + div.append(`${His} ${brandPlace} is marked with ${slave.brand[brandPlace]}`); + if (slave.brand[brandPlace] === V.brandDesign.official) { + div.append(`, your `); + div.append(App.UI.DOM.passageLink("official brand", "Universal Rules")); + } + if (!cheat) { + div.append( + App.UI.DOM.link( + "Remove Brand", + () => { + V.brandApplied = 0; + delete slave.brand[brandPlace]; + cashX(forceNeg(V.surgeryCost), "slaveSurgery", slave); + V.degradation -= 10; + }, + [], + "Body Modification" + ) + ); + } else { + div.append( + App.UI.DOM.link( + "Remove Brand", + () => { + delete slave.brand[brandPlace]; + }, + ) + ); + } + p.append(div); + } + + if (jQuery.isEmptyObject(slave.brand)) { + App.UI.DOM.appendNewElement("div", "p", `${His} skin is unmarked.`); + } + + if (!(Object.values(slave.brand).includes(V.brandDesign.official))) { + div = document.createElement('div'); + div.append(`${He} lacks your `); + div.append(App.UI.DOM.passageLink("official brand", "Universal Rules")); + div.append(`, "${V.brandDesign.official}."`); + p.append(div); + } + + el.append(p); + p = document.createElement('p'); + p.classList.add("indent"); + + + div = document.createElement('div'); + div.append(`Use ''${V.brandDesign.local}'' or choose another brand: `); + div.append(symbolOptions("personal")); + p.append(div); + + p.append(symbolBlock("dirtyWord")); + p.append(symbolBlock("genitalSymbol")); + p.append(symbolBlock("silhouettes")); + p.append(symbolBlock("FS")); + + function symbolBlock(brandList) { + const div = document.createElement('div'); + div.classList.add("double-indent"); + div.append(symbolOptions(brandList)); + return div; + } + + function symbolOptions(brandList) { + const frag = new DocumentFragment(); + let length = Object.keys(brandList).length; + for (const brand in App.Medicine.Modification.Brands[brandList]) { + frag.append( + App.UI.DOM.link( + App.Medicine.Modification.Brands[brandList].displayName, + () => { + V.brandDesign.local = brand; + } + ) + ); + length--; + if (length > 0) { + div.append(" | "); + } + } + return frag; + } + div = document.createElement('div'); + div.classList.add("indent"); + div.append(`Or design your own: `); + div.append( + App.UI.DOM.makeTextBox( + V.brandDesign.local, + v => { + V.brandDesign.local = v; + }, + ) + ); + el.append(p); + + p = document.createElement('p'); + p.classList.add("indent"); + App.UI.DOM.makeElement("p", "Choose a site for branding: ", "div"); + const body = slaveBody(); + p.append(partLinks(body.head)); + p.append(partLinks(body.torso)); + p.append(partLinks(body.arms)); + p.append(partLinks(body.legs)); + + function slaveBody() { + const body = {}; + /* Sorted head to toe */ + /* Head */ + body.head = {}; + if (slave.earShape !== "none") { + body.head.ears = "Ears"; + } + body.head.cheek = "Cheeks"; + body.head.neck = "Neck"; + + /* Torso */ + body.torso = {}; + body.torso.chest = "Chest"; + body.torso.breast = "Breasts"; + body.torso.back = "Back"; + body.torso["lower back"] = "Lower Back"; + body.torso.belly = "Belly"; + body.torso["pubic mound"] = "Pubic Mound"; + + if (slave.dick > 0) { + body.torso.penis = "Penis"; + } + if (slave.balls > 0 && slave.scrotum > 0) { + body.torso.testicle = "Testicles"; + } + + /* Arms*/ + body.arms = {}; + body.arms.shoulder = "Shoulders"; + if (hasAnyNaturalArms(slave)) { + body.arms["upper arm"] = "Arm, upper"; + body.arms["lower arm"] = "Arm, lower"; + body.arms.wrist = "Wrists"; + body.arms.hand = "Hands"; + } + + /* Legs */ + body.legs = {}; + body.legs.buttock = "Buttocks"; + if (hasAnyNaturalLegs(slave)) { + body.legs.thigh = "Thighs"; + body.legs.calf = "Calves"; + body.legs.ankle = "Ankles"; + body.legs.foot = "Feet"; + } + return body; + } + + function partLinks(bodyPartObj) { + const div = document.createElement("div"); + let length = Object.keys(bodyPartObj).length; + for (const bp in bodyPartObj) { + div.append( + App.UI.DOM.link( + bodyPartObj.bp, + () => { + V.brandTarget.local = bp; + } + ) + ); + length--; + if (length > 0) { + div.append(" | "); + } + } + return div; + } + + div = document.createElement('div'); + div.classList.add("indent"); + div.append(`Or a custom site: `); + div.append( + App.UI.DOM.makeTextBox( + V.brandTarget.local, + v => { + V.brandTarget.local = v; + }, + ) + ); + el.append(p); + + p = document.createElement('p'); + p.classList.add("indent"); + + if (["ankle", "breast", "buttock", "calf", "cheek", "ear", "foot", "hand", "lower arm", "shoulder", "testicle", "thigh", "upper arm", "wrist"].includes(V.brandTarget.local)) { + const leftTarget = ("left " + V.brandTarget.local); + const rightTarget = ("right " + V.brandTarget.local); + if (slave.brand[leftTarget]) { + p.append(`${His} ${leftTarget} is already marked with ${slave.brand[leftTarget]}.`); + } + if (slave.brand[rightTarget]) { + p.append(`${His} ${rightTarget} is already marked with ${slave.brand[rightTarget]}.`); + } + } + p.append(`Brand} ${him} now with ''${V.brandDesign.local}'' on the`); // todo: break out bold + let _left; + let _right; + if (!(["upper arm", "lower arm", "wrist", "hand"].includes(V.brandTarget.local) && getLeftArmID(slave) !== 1) && !(["thigh", "calf", "ankle", "foot"].includes(V.brandTarget.local) && getLeftLegID(slave) !== 1)) { + _left = 1;/* make next checks easier */ + if (!cheat) { + p.append( + App.UI.DOM.link( + "left", + () => { + V.brandApplied = 1; + slave.brand[leftTarget] = V.brandDesign.local; + cashX(forceNeg(V.modCost), "slaveMod", slave); + V.degradation += 10; + }, + [], + "Body Modification" + ) + ); + } else { + p.append( + App.UI.DOM.link( + "left", + () => { + slave.brand[leftTarget] = V.brandDesign.local; + }, + ) + ); + } + + if (!(["upper arm", "lower arm", "wrist", "hand"].includes(V.brandTarget.local) && getRightArmID(slave) !== 1) && !(["thigh", "calf", "ankle", "foot"].includes(V.brandTarget.local) && getRightLegID(slave) !== 1)) { + _right = 1; /* make next checks easier */ + } + if (_left && _right) { + p.append(`${V.brandTarget.local}, or the`); + } + if (_right) { + if (!cheat) { + p.append( + App.UI.DOM.link( + "right", + () => { + V.brandApplied = 1; + slave.brand[rightTarget] = V.brandDesign.local; + cashX(forceNeg(V.modCost), "slaveMod", slave); + V.degradation += 10; + }, + [], + "Body Modification" + ) + ); + } else { + p.append( + App.UI.DOM.link( + "right", + () => { + slave.brand[rightTarget] = V.brandDesign.local; + }, + ) + ); + } + } + if (!_left || !_right) { + p.append(` ${V.brandTarget.local}? `); + App.UI.DOM.makeElement("p", `Branding will slightly reduce ${his} beauty but may slowly increase your reputation.`, "span", "note"); + } + } else { + if (slave.brand[V.brandTarget.local] === V.brandDesign.local) { + p.append(`${He} already has ${V.brandDesign.local} on ${his} V.brandTarget.local.`); + } else { + if (!cheat) { + p.append( + App.UI.DOM.link( + "Brand", + () => { + V.brandApplied = 1; + slave.brand[V.brandTarget.local] = V.brandDesign.local; + cashX(forceNeg(V.modCost), "slaveMod", slave); + V.degradation += 10; + }, + [], + "Body Modification" + ) + ); + } else { + p.append( + App.UI.DOM.link( + "Brand", + () => { + slave.brand[V.brandTarget.local] = V.brandDesign.local; + }, + ) + ); + } + p.append(`with ${V.brandDesign.local} on the V.brandTarget.local`); + if (slave.brand[V.brandTarget.local]) { + p.append(`, covering the "${slave.brand[V.brandTarget.local]}" that is already there? `); + } else { + p.append(`.`); + } App.UI.DOM.makeElement("p", `Branding will slightly reduce ${his} beauty but may slowly increase your reputation.`, "span", "note"); + } + } + el.append(p); + return jQuery('#brandSelection').empty().append(el); +}; diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw index fb09203737d4e2de441237532a86a4058adca0f3..438c073346b62f19bbf005baed66ba4402d59e0e 100644 --- a/src/uncategorized/bodyModification.tw +++ b/src/uncategorized/bodyModification.tw @@ -649,247 +649,11 @@ /* Branding */ <h2>Branding</h2> -<div class="indent"> -<div style="padding-bottom:1em"> -<<for _brandName, _brand range getSlave($AS).brand>> - <div> - $His _brandName is marked with _brand<<if _brand == $brandDesign.official>>, your [[official brand|Universal Rules]]<</if>>: - <<capture _brandName>> - <<link "Remove Brand">> - <<set $brandApplied = 0>> - <<run delete getSlave($AS).brand[_brandName]>> - <<run cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS))>> - <<set $degradation -= 10>> - <<goto "Body Modification">> - <</link>> - <</capture>> - </div> -<</for>> -<<if (jQuery.isEmptyObject(getSlave($AS).brand))>> - <div> - $His skin is unmarked. - </div> -<</if>> +<span id="brandSelection"></span> +<script> + App.Medicine.Modification.Select.brand(getSlave(V.AS)) +</script> -<<if !(Object.values(getSlave($AS).brand).includes($brandDesign.official))>> - <div> - $He lacks your [[official brand|Universal Rules]], "$brandDesign.official." - </div> -<</if>> -</div> - -<div> -Use ''$brandDesign.local'' or choose another brand: -[[Your slaving emblem|Body Modification][$brandDesign.local = "your personal symbol"]] -| [[Your initials|Body Modification][$brandDesign.local = "your initials"]] -</div> -<div class="double-indent"> -<div> -[[SLUT|Body Modification][$brandDesign.local = "SLUT"]] -| [[WHORE|Body Modification][$brandDesign.local = "WHORE"]] -| [[SLAVE|Body Modification][$brandDesign.local = "SLAVE"]] -| [[COW|Body Modification][$brandDesign.local = "COW"]] -| [[MEAT|Body Modification][$brandDesign.local = "MEAT"]] -| [[CUMDUMP|Body Modification][$brandDesign.local = "CUMDUMP"]] -| [[LOVER|Body Modification][$brandDesign.local = "LOVER"]] -</div> -<div> -[[Pussy symbol|Body Modification][$brandDesign.local = "a pussy symbol"]] -| [[Anus symbol|Body Modification][$brandDesign.local = "an anus symbol"]] -| [[Penis symbol|Body Modification][$brandDesign.local = "a penis symbol"]] -</div> -<div> -[[Lady|Body Modification][$brandDesign.local = "a lady silhouette"]] -| [[Princess|Body Modification][$brandDesign.local = "a princess silhouette"]] -| [[Queen|Body Modification][$brandDesign.local = "a queen silhouette"]] -| [[Angel|Body Modification][$brandDesign.local = "an angel silhouette"]] -| [[Devil|Body Modification][$brandDesign.local = "a devil silhouette"]] -<<if ($arcologies[0].FSSupremacist != "unset") && (getSlave($AS).race != $arcologies[0].FSSupremacistRace)>> - | //FS// [[Racial Slur|Body Modification][$brandDesign.local = "a racial slur"]] -<</if>> -<<if ($arcologies[0].FSSubjugationist != "unset") && (getSlave($AS).race == $arcologies[0].FSSubjugationistRace)>> - | //FS// [[Racial Slur|Body Modification][$brandDesign.local = "a racial slur"]] -<</if>> -<<if ($arcologies[0].FSIntellectualDependency != "unset")>> - | //FS// [[Scores|Body Modification][$brandDesign.local = "how much sex $he needs per day"]] -<</if>> -<<if ($arcologies[0].FSSlaveProfessionalism != "unset")>> - | //FS// [[Scores|Body Modification][$brandDesign.local = "$his average slave aptitude test scores"]] -<</if>> -<<if ($arcologies[0].FSRepopulationFocus != "unset")>> - | //FS// [[Birth Count|Body Modification][$brandDesign.local = "the number of children $he has birthed"]] -<</if>> -<<if ($arcologies[0].FSGenderRadicalist != "unset") || ($arcologies[0].FSGenderFundamentalist != "unset")>> - | //FS// [[Gender Symbol|Body Modification][$brandDesign.local = "a gender symbol"]] -<</if>> -<<if ($arcologies[0].FSPaternalist != "unset")>> - | //FS// [[Personal Symbol|Body Modification][$brandDesign.local = "$his own personal symbol"]] -<</if>> -<<if ($arcologies[0].FSDegradationist != "unset")>> - | //FS// [[Chain Symbol|Body Modification][$brandDesign.local = "a chain symbol"]] -<</if>> -<<if ($arcologies[0].FSBodyPurist != "unset")>> - | //FS// [[Vitruvian Man|Body Modification][$brandDesign.local = "a Vitruvian man"]] -<</if>> -<<if ($arcologies[0].FSTransformationFetishist != "unset")>> - | //FS// [[Scalpel|Body Modification][$brandDesign.local = "a scalpel"]] -<</if>> -<<if ($arcologies[0].FSYouthPreferentialist != "unset")>> - | //FS// [[Virginity Status|Body Modification][$brandDesign.local = "$his virginity status"]] -<</if>> -<<if ($arcologies[0].FSMaturityPreferentialist != "unset")>> - | //FS// [[Sexual Skill Info|Body Modification][$brandDesign.local = "$his sexual skills"]] -<</if>> -<<if ($arcologies[0].FSPetiteAdmiration != "unset") || ($arcologies[0].FSStatuesqueGlorification != "unset")>> - | //FS// [[Current height|Body Modification][$brandDesign.local = "$his current height"]] -<</if>> -<<if ($arcologies[0].FSSlimnessEnthusiast != "unset")>> - | //FS// [[Breast Floor|Body Modification][$brandDesign.local = "$his absolute minimum breast size"]] -<</if>> -<<if ($arcologies[0].FSAssetExpansionist != "unset")>> - | //FS// [[Breast Ceiling|Body Modification][$brandDesign.local = "$his absolute maximum breast size"]] -<</if>> -<<if ($arcologies[0].FSHedonisticDecadence != "unset")>> - | //FS// [[Weight Record|Body Modification][$brandDesign.local = "$his highest weigh-in"]] -<</if>> -<<if ($arcologies[0].FSHedonisticDecadence != "unset") && $PC.refreshmentType == 2>> - | //FS// [[Favorite Food|Body Modification][$brandDesign.local = "a big helping of "+$PC.refreshment]] -<</if>> -<<if ($arcologies[0].FSPastoralist != "unset")>> - | //FS// [[Product Quality|Body Modification][$brandDesign.local = "$his body product quality"]] -<</if>> -<<if ($arcologies[0].FSPhysicalIdealist != "unset")>> - | //FS// [[Deadlift Info|Body Modification][$brandDesign.local = "$his deadlift record"]] -<</if>> -<<if ($arcologies[0].FSChattelReligionist != "unset")>> - | //FS// [[Religious Symbol|Body Modification][$brandDesign.local = "a religious symbol"]] -<</if>> -<<if ($arcologies[0].FSRomanRevivalist != "unset")>> - | //FS// [[Republican Crest|Body Modification][$brandDesign.local = "the crest of your Republic"]] -<</if>> -<<if ($arcologies[0].FSAztecRevivalist != "unset")>> - | //FS// [[Seven Serpents|Body Modification][$brandDesign.local = "the symbol of the Aztec gods"]] -<</if>> -<<if ($arcologies[0].FSEgyptianRevivalist != "unset")>> - | //FS// [[Dynastic Sigil|Body Modification][$brandDesign.local = "the sigil of your Dynasty"]] -<</if>> -<<if ($arcologies[0].FSEdoRevivalist != "unset")>> - | //FS// [[Mon|Body Modification][$brandDesign.local = "the Shogunate's mon"]] -<</if>> -<<if ($arcologies[0].FSArabianRevivalist != "unset")>> - | //FS// [[Caliphate Symbol|Body Modification][$brandDesign.local = "a symbol of the Caliphate"]] -<</if>> -<<if ($arcologies[0].FSChineseRevivalist != "unset")>> - | //FS// [[Imperial Seal|Body Modification][$brandDesign.local = "your Imperial Seal"]] -<</if>> -</div> -</div> /* double indent */ - -<div> -Or design your own: <<textbox "$brandDesign.local" $brandDesign.local "Body Modification">> -</div> - -<div> -Choose a site for branding: -/* Sorted head to toe */ -/* Head */ -<<if getSlave($AS).earShape != "none">>[[Ears|Body Modification][$brandTarget.local = "ear"]]<</if>> -| [[Cheeks|Body Modification][$brandTarget.local = "cheek"]] -| [[Neck|Body Modification][$brandTarget.local = "neck"]] - -/* Torso */ -| [[Chest|Body Modification][$brandTarget.local = "chest"]] -| [[Breasts|Body Modification][$brandTarget.local = "breast"]] -| [[Back|Body Modification][$brandTarget.local = "back"]] -| [[Lower Back|Body Modification][$brandTarget.local = "lower back"]] -| [[Belly|Body Modification][$brandTarget.local = "belly"]] -| [[Pubic Mound|Body Modification][$brandTarget.local = "pubic mound"]] -<<if getSlave($AS).dick > 0>> - | [[Penis|Body Modification][$brandTarget.local = "penis"]] -<</if>> -<<if getSlave($AS).balls > 0 && getSlave($AS).scrotum > 0>> - | [[Testicles|Body Modification][$brandTarget.local = "testicle"]] -<</if>> - -/* Arms*/ -| [[Shoulders|Body Modification][$brandTarget.local = "shoulder"]] -<<if hasAnyNaturalArms(getSlave($AS))>> - | [[Arm, upper|Body Modification][$brandTarget.local = "upper arm"]] - | [[Arm, lower|Body Modification][$brandTarget.local = "lower arm"]] - | [[Wrists|Body Modification][$brandTarget.local = "wrist"]] - | [[Hands|Body Modification][$brandTarget.local = "hand"]] -<</if>> - -/* Legs */ -| [[Buttocks|Body Modification][$brandTarget.local = "buttock"]] -<<if hasAnyNaturalLegs(getSlave($AS))>> - | [[Thighs|Body Modification][$brandTarget.local = "thigh"]] - | [[Calves|Body Modification][$brandTarget.local = "calf"]] - | [[Ankles|Body Modification][$brandTarget.local = "ankle"]] - | [[Feet|Body Modification][$brandTarget.local = "foot"]] -<</if>> -</div> - -/* Branding expansion contributed by Anon1888 */ - -<div> -Or a custom site: <<textbox "$brandTarget.local" $brandTarget.local "Body Modification">> -</div> - -<div> -<<if ["ankle", "breast", "buttock", "calf", "cheek", "ear", "foot", "hand", "lower arm", "shoulder", "testicle", "thigh", "upper arm", "wrist"].includes($brandTarget.local)>> - <<set _leftTarget = ("left " + $brandTarget.local)>> - <<set _rightTarget = ("right " + $brandTarget.local)>> - <<if getSlave($AS).brand[_leftTarget]>> - $His _leftTarget is already marked with <<print getSlave($AS).brand[_leftTarget]>>. - <</if>> - <<if getSlave($AS).brand[_rightTarget]>> - $His _rightTarget is already marked with <<print getSlave($AS).brand[_rightTarget]>>. - <</if>> - Brand $him now with ''$brandDesign.local'' on the - - <<if !(["upper arm", "lower arm", "wrist", "hand"].includes($brandTarget.local) && getLeftArmID(getSlave($AS)) !== 1) && !(["thigh", "calf", "ankle", "foot"].includes($brandTarget.local) && getLeftLegID(getSlave($AS)) !== 1)>> - <<set _left = 1>> /* make next checks easier */ - <<link "left">> - <<set $brandApplied = 1>> - <<set getSlave($AS).brand[_leftTarget] = $brandDesign.local>> - <<run cashX(forceNeg($modCost), "slaveMod", getSlave($AS))>> - <<set $degradation += 10>> - <<goto "Body Modification">> - <</link>> - <</if>> - <<if !(["upper arm", "lower arm", "wrist", "hand"].includes($brandTarget.local) && getRightArmID(getSlave($AS)) !== 1) && !(["thigh", "calf", "ankle", "foot"].includes($brandTarget.local) && getRightLegID(getSlave($AS)) !== 1)>> - <<set _right = 1>> /* make next checks easier */ - <</if>> - <<if _left && _right>> - $brandTarget.local, or the - <</if>> - <<if _right>> - <<link "right">> - <<set $brandApplied = 1>> - <<set getSlave($AS).brand[_rightTarget] = $brandDesign.local>> - <<run cashX(forceNeg($modCost), "slaveMod", getSlave($AS))>> - <<set $degradation += 10>> - <<goto "Body Modification">> - <</link>> - <</if>><<if !_left || !_right>> $brandTarget.local<</if>>? - - //Branding will slightly reduce $his beauty but may slowly increase your reputation.// -<<else>> - <<if getSlave($AS).brand[$brandTarget.local] === $brandDesign.local>> - $He already has $brandDesign.local on $his $brandTarget.local. - <<else>> - <<link "Brand">> - <<set $brandApplied = 1>> - <<set getSlave($AS).brand[$brandTarget.local] = $brandDesign.local>> - <<run cashX(forceNeg($modCost), "slaveMod", getSlave($AS))>> - <<set $degradation += 10>> - <<goto "Body Modification">> - <</link>> - with $brandDesign.local on the $brandTarget.local<<if getSlave($AS).brand[$brandTarget.local]>>, covering the "<<print getSlave($AS).brand[$brandTarget.local]>>" that is already there?<<else>>.<</if>> //Branding will slightly reduce $his beauty but may slowly increase your reputation.// - <</if>> -<</if>> -</div> <<if getSlave($AS).breedingMark == 1 && ($propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>> <div>