diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 908e3ccaac6729a1efdfe770f48065d8c4710558..8681ba47b06a9d11037626e6e3b210cab798b90c 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -1,7 +1,7 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. - pmod: "3.0.0", - release: 1056, + pmod: "3.1.0", + release: 1057, }; /* Use release as save version */ diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 23543775e38054dbf290692486686ddaab716ce8..69d0deda1847ef4af15c90cf86d920ee650f9d3f 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -197,9 +197,6 @@ You should have received a copy of the GNU General Public License along with thi <<set $slaves[_i].lastWeeksRepIncome = 0>> <</for>> <<set $slavesOriginal = []>> /* not used by pregmod */ - <<if ndef $PC.markings>> - <<set $PC.markings = "none">> - <</if>> <<else>> <<set $slaves = []>> <<set $slavesOriginal = []>> /* not used by pregmod */ @@ -220,7 +217,7 @@ You should have received a copy of the GNU General Public License along with thi <<if $saveImported == 0>> /* new game (not NG+) */ - <<initPC>> + <<set $PC = basePlayer()>> <<set $freshPC = 0>> <<set $cheater = 0>> <<setupLastWeeksCash>> @@ -397,7 +394,7 @@ You should have received a copy of the GNU General Public License along with thi <<set _cash = Math.clamp(1000*Math.trunc(_cash/100000), 5000, 1000000)>> <<run cashX((_cash-$cash), "personalBusiness")>> /*"-cash" to clean out the current value of cash and then completely replace it with the new value for NG+ start. */ <<if $retainCareer == 0>> - <<set $PC.career = "arcology owner", $PC.trading = 100, $PC.warfare = 100, $PC.hacking = 100, $PC.slaving = 100, $PC.engineering = 100, $PC.medicine = 100>> + <<set $PC.career = "arcology owner", $PC.skill.trading = 100, $PC.skill.warfare = 100, $PC.skill.hacking = 100, $PC.skill.slaving = 100, $PC.skill.engineering = 100, $PC.skill.medicine = 100>> <</if>> <<if $PC.mother > 0>> <<set $PC.mother += _NGPOffset>> @@ -422,7 +419,7 @@ You should have received a copy of the GNU General Public License along with thi <</for>> <</if>> <<else>> - <<initPC>> + <<set $PC = basePlayer()>> <<set $cheater = 0>> <<set $cash = 0>> <<run cashX(10000, "personalBusiness")>> @@ -1492,10 +1489,6 @@ You should have received a copy of the GNU General Public License along with thi <<set $UterineRestraintMesh = 0>> <<set $PGHack = 0>> -<<if ndef $PC.hacking>> - <<set $PC.hacking = 0>> -<</if>> - <<set $diversePronouns = 0>> /* Security Expansion */ diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js new file mode 100644 index 0000000000000000000000000000000000000000..e1fe4a41abd4cf6d8dd65d2c81664460a258d3f6 --- /dev/null +++ b/src/player/js/PlayerState.js @@ -0,0 +1,1979 @@ +/** + * Encapsulates the full description of a player state. Serializable by the SugarCube state + * management. + */ + +/** + * Encapsulates your skills. Used inside of the + * App.Entity.PlayerState class. + * @ref App.Entity.PlayerState + */ +App.Entity.PlayerSkillsState = class { + constructor() { //migrate + /** exclusive variables */ + /** Your skill in trading. */ + this.trading = 0; + /** Your skill in warfare. */ + this.warfare = 0; + /** Your skill in slaving. */ + this.slaving = 0; + /** Your skill in engineering. */ + this.engineering = 0; + /** Your skill in medicine. */ + this.medicine = 0; + /** Your skill in hacking. */ + this.hacking = 0; + /** Your skill in taking huge loads. */ + this.cumTap = 0; + } +}; + +App.Entity.PlayerActionsCountersState = class { + constructor() { //migrate + /** exclusive variables */ + /** how many children you've carried for the SE */ + this.birthElite = 0; + /** how many children you've carried for your former master (servant start only) */ + this.birthMaster = 0; + /** how many slave babies you've had */ + this.birthDegenerate = 0; + /** how many whoring babies you've had */ + this.birthClient = 0; + /** untracked births */ + this.birthArcOwner = 0; + /** how many children you've had by sex with citizens (not whoring) */ + this.birthCitizen = 0; + /** how many times you've giving birth to your own selfcest babies */ + this.birthFutaSis = 0; + /** how many units of your cum are stored away for artificially inseminating slaves */ + this.birthSelf = 0; + /** how many designer babies you've produced */ + this.birthLab = 0; + /** how many children you've had with the Sisters */ + this.birthOther = 0; + /** how many children you've carried for other arc owners */ + this.storedCum = 0; + /** shared variables */ + /** amount of milk given */ + this.milk = 0; + /** amount of cum given */ + this.cum = 0; + /** number of births as your slave */ + this.birthsTotal = 0; + this.laborCount = 0; + /** How many slaves you have sired. */ + this.slavesFathered = 0; + /** How many slaves you have knocked up. */ + this.slavesKnockedUp = 0; + } +}; + +/** + * Encapsulates various custom properties, set by users + */ +App.Entity.PlayerCustomAddonsState = class PlayerCustomAddonsState { + constructor() { + /** adds a custom tattoo */ + this.tattoo = ""; + } +}; + +/** + * To ensure that all new eyes contain expected attributes + */ +App.Entity.PlayerEyeState = class PlayerEyeState { + constructor() { + this.left = new App.Entity.PlayerIndividualEyeState(); + this.right = new App.Entity.PlayerIndividualEyeState(); + /** + * original eye color + */ + this.origColor = "blue"; + } +}; + +App.Entity.PlayerIndividualEyeState = class PlayerIndividualEyeState { + constructor() { + /** + * type of eye + * * 1: normal + * * 2: glass + * * 3: cybernetic + */ + this.type = 1; + /** + * vision of eye + * * 1: normal + * * 2: impaired + * * 3: blind + */ + this.vision = 2; + /** + * current eye color + */ + this.iris = "blue"; + /** + * pupil shape + */ + this.pupil = "circular"; + /** + * sclera color + */ + this.sclera = "white"; + } +}; + +App.Entity.PlayerRelationshipsState = class PlayerRelationshipsState { + // in the future this will be used to determine who will be used to sate player lust + constructor() { //migrate + /** player's wives */ + this.marriage = []; + /** player's lovers */ + this.lovers = []; + /** player's friends with benefits */ + this.FWBs = []; + /** player's best friends */ + this.BFFs = []; + /** player's friends */ + this.friends = []; + /** slaves player likes */ + this.likes = []; + /** slaves player dislikes */ + this.dislikes = []; + /** slaves player hates */ + this.hates = []; + /** slaves player slaves */ + this.loathes = []; + /** + * player's emotional obsession + * * -2: emotionally bound to you + * * -1: emotional slut + * * 0: none + * * (ID): target of obsession + */ + this.obsession = 0; + } +}; + + +App.Entity.PlayerPornPerformanceState = class { + constructor() { + /** what porn you are known for */ + this.fameType = "none"; + /** what aspect of you is being focused on for porn */ + this.focus = "none"; + this.fame = { + /** generic porn fame */ + general: 0, + /** Fuckdoll porn fame */ + fuckdoll: 0, + /** rape porn fame */ + rape: 0, + /** preggo porn fame */ + preggo: 0, + /** BBW porn fame */ + BBW: 0, + /** weight gain porn fame */ + gainer: 0, + /** well hung porn fame */ + stud: 0, + /** underage porn fame */ + loli: 0, + /** gagfuck queen porn fame */ + deepThroat: 0, + /** strugglefuck queen porn fame */ + struggleFuck: 0, + /** painal queen porn fame */ + painal: 0, + /** tease porn fame */ + tease: 0, + /** romantic porn fame */ + romantic: 0, + /** pervert porn fame */ + pervert: 0, + /** caring porn fame */ + caring: 0, + /** unflinching porn fame */ + unflinching: 0, + /** size queen porn fame */ + sizeQueen: 0, + /** neglectful porn fame */ + neglectful: 0, + /** cum addict porn fame */ + cumAddict: 0, + /** anal addict porn fame */ + analAddict: 0, + /** attention whore porn fame */ + attentionWhore: 0, + /** breast growth porn fame */ + breastGrowth: 0, + /** abusive porn fame */ + abusive: 0, + /** malicious porn fame */ + malicious: 0, + /** self hating porn fame */ + selfHating: 0, + /** breeder porn fame */ + breeder: 0, + /** submissive porn fame */ + sub: 0, + /** cumslut porn fame */ + cumSlut: 0, + /** buttslut porn fame */ + anal: 0, + /** humiliation porn fame */ + humiliation: 0, + /** boob porn fame */ + boobs: 0, + /** dom porn fame */ + dom: 0, + /** sadist porn fame */ + sadist: 0, + /** masochist porn fame */ + masochist: 0, + /** pregnancy porn fame*/ + pregnancy: 0 + }; + } +}; + +App.Entity.PlayerState = class PlayerState { + constructor() { + /** Player's current name */ + this.slaveName = "Anonymous"; //migrate + /** Player's current surname + * @type {string|number} */ + this.slaveSurname = 0; //migrate + /** Player's original name */ + this.birthName = "Anonymous"; //migrate + /** Player's original surname + * @type {string|number} */ + this.birthSurname = 0; //migrate + /** Player sex ("XX", "XY") */ + this.genes = "XY"; + // exclusive major player variables here + /** your title's gender + * + * 0: female; 1: male */ + this.title = 1; + /** + * How strong/are there rumors about you doing unsavory things with your slaves + * * 0 - 10: occasional whispers + * * 11 - 25: minor rumors + * * 26 - 50: rumors + * * 51 - 75: bad rumors + * * 70 - 100: severe rumors + * * 101+: life ruining rumors + */ + this.degeneracy = 0; + /** your favorite refreshment + * @type {string} */ + this.refreshment = "cigar"; + /** + * * The method of consumption of .refreshment + * * 0: smoked + * * 1: drank + * * 2: eaten + * * 3: snorted + * * 4: injected + * * 5: popped + * * 6: orally dissolved + */ + this.refreshmentType = 0; + /** @type {number} */ + this.pronoun = App.Data.Pronouns.Kind.male; + /** + * * career prior to becoming owner + * * "wealth" + * * "capitalist" + * * "mercenary" + * * "slaver" + * * "engineer" + * * "medicine" + * * "celebrity" + * * "escort" + * * "servant" + * * "gang" + * * "BlackHat" + * * "arcology owner" + */ + this.career = "capitalist"; + /** + * * how player became owner + * * "wealth" + * * "diligence" + * * "force" + * * "social engineering" + * * "luck" + */ + this.rumor = "wealth"; + /** Player's ID */ + this.ID = -1; + /** your ability to function normally in day to day affairs + * + * 0: normal, 1: hindered, 2: unable */ + this.physicalImpairment = 0; + /** Player's prestige */ + this.prestige = 0; + /** reason for prestige + * @type {string|number} */ + this.prestigeDesc = 0; + this.relationships = new App.Entity.PlayerRelationshipsState(); + this.father = 0; + this.mother = 0; + this.daughters = 0; + this.sisters = 0; + /** week you was born (int between 0-51) */ + this.birthWeek = jsRandom(0, 51); + /** How old you really are. */ + this.actualAge = 35; + /** How old your body looks. */ + this.visualAge = 35; + /** How old your body is. */ + this.physicalAge = 35; + /** How old your ovaries are. (used to trick menopause) */ + this.ovaryAge = 35; + /** has had facial surgery to reduce age. 0: no, 1: yes */ + this.ageImplant = 0; + /** + * your health + * * -90 - : On the edge of death + * * -90 - -51: Extremely unhealthy + * * -50 - -21: Unhealthy + * * -20 - 20: Healthy + * * 21 - 50: Very healthy + * * 50 - 90: Extremely healthy + * * 90 - : Unnaturally healthy + */ + this.health = 100; + /** + * you have a minor injury ("black eye", "bruise", "split lip") + * @type {number | string} + */ + this.minorInjury = 0; + /** + * you have a major injury (will replace the injured PC global) + * @type {number | string} + */ + this.majorInjury = 0; + /** + * you have a life-changing injury/malaise + * @type {number | string} + */ + this.criticalDamage = 0; + /** + * your weight + * * 191+: dangerously obese + * * 190 - 161: super obese + * * 160 - 131: obese + * * 130 - 96: fat + * * 95 - 31: overweight + * * 30 - 11: curvy + * * 10 - -10: neither too fat nor too skinny + * * -11 - -30: thin + * * -31 - -95: very thin + * * -96 - : emaciated + */ + this.weight = 0; + /** + * your musculature + * * 96+ : extremely muscular + * * 31 - 95: muscular + * * 6 - 30: toned + * * -5 - 5: none + * * -30 - -6: weak + * * -95 - -31: very weak + * * -96- : frail + */ + this.muscles = 30; //migrate + /** + * your height in cm + * * < 150: petite + * * 150 - 159: short + * * 160 - 169: average + * * 170 - 185: tall + * * 186+ : very tall + */ + this.height = 185; + /** you have height implant + * -1: -10 cm, 0: none, 1: +10 cm */ + this.heightImplant = 0; + /** your nationality */ + this.nationality = "Stateless"; + /** your race */ + this.race = "white"; + /** your original race */ + this.origRace = "white"; + /** + * your markings + * * "beauty mark" + * * "birthmark" + * * "freckles" + * * "heavily freckled" + */ + this.markings = "none"; + /** "none", "glasses", "corrective glasses", "corrective contacts" */ + this.eyewear = "none"; + /** + * your eyes + */ + this.eye = new App.Entity.PlayerEyeState(); //migrate + /** your hearing + * + * -2: deaf; -1: hard of hearing; 0: normal */ + this.hears = 0; + /** "none", "hearing aids", "muffling ear plugs", "deafening ear plugs" */ + this.earwear = "none"; + /** is there an inner ear implant device + * 0: no; 1: yes */ + this.earImplant = 0; + /** the shape of your outer ears + * "none", "damaged", "normal", "pointy", "elven", "ushi" */ + this.earShape = "normal"; + /** type of kemonomimi ears if any + * "neko", "inu", "kit", "tanuki" */ + this.earT = "none"; + /** kemonomimi ear color + * "hairless" */ + this.earTColor = "hairless"; + /** sense of smell + 0 - yes, -1 - no */ + this.smells = 0; + /** sense of taste + 0 - yes, -1 - no */ + this.tastes = 0; + /** horn type if any + * "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */ + this.horn = "none"; + /** horn color */ + this.hornColor = "none"; + /** type of tail installed + * "none", "mod", "combat", "sex"*/ + this.tail = "none"; + /** + * Do you have a tail interface installed + * * 0: no + * * 1: yes + */ + this.PTail = 0; + /** the current shape of your modular tail + * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi" */ + this.tailShape = "none"; + /** tail color */ + this.tailColor = "none"; + /** yout original hair color, defaults to your initial hair color. */ + this.origHColor = "blonde"; + /** hair color */ + this.hColor = "blonde"; + /** pubic hair color */ + this.pubicHColor = "blonde"; + /** armpit hair style */ + this.underArmHColor = "blonde"; + /** eyebrowHColor*/ + this.eyebrowHColor = "blonde"; + /** your original skin color. */ + this.origSkin = "light"; + /** skin color */ + this.skin = "light"; + /** + * hair length + * * 150: calf-length + * * 149-100: ass-length + * * 99-30: long + * * 29-10: shoulder-length + * * 9-0: short + */ + this.hLength = 2; //migrate + /** + * eyebrow thickness + * * "pencil-thin" + * * "thin" + * * "threaded" + * * "natural" + * * "tapered" + * * "thick" + * * "bushy" + */ + this.eyebrowFullness = "natural"; + /** hair style */ + this.hStyle = "neat"; + /** pubic hair style */ + this.pubicHStyle = "hairless"; + /** armpit hair style */ + this.underArmHStyle = "hairless"; + /** eyebrowHStyle */ + this.eyebrowHStyle = "natural"; + /** + * slave waist + * * 96+: masculine + * * 95 - 41: ugly + * * 40 - 11: unattractive + * * 10 - -10: average + * * -11 - -40: feminine + * * -40 - -95: hourglass + * * -96-: absurd + */ + this.waist = 0; //migrate + /** series of rings up the back that can be tied together. 0: no, 1: yes */ + this.corsetPiercing = 0; + /** + * What level of prosthetic interface you have installed + * * 0: no interface + * * 1: basic interface + * * 2: advanced interface + */ + this.PLimb = 0; + /** + * your legs + */ + this.leg = { + left: new App.Entity.LimbState(), + right: new App.Entity.LimbState() + }; + /** + * your arms + */ + this.arm = { + left: new App.Entity.LimbState(), + right: new App.Entity.LimbState() + }; + /** are your heels clipped + * + * 0: no, 1: yes */ + this.heels = 0; + /** your voice + * + * 0: mute, 1: deep, 2: feminine, 3: high, girly */ + this.voice = 1; //migrate + /** has voice implant + * + * 0: no; 1: yes, high; -1: yes, low */ + this.voiceImplant = 0; + /** have cybernetic voicebox + * + * 0: no; 1: yes */ + this.electrolarynx = 0; + /** + * your accent + * * 0: none + * * 1: attractive + * * 2: heavy + * * 3: does not speak language + */ + this.accent = 0; + /** + * shoulder width + * * -2: very narrow + * * -1: narrow + * * 0: feminine + * * 1: broad + * * 2: very broad + */ + this.shoulders = 0; //migrate + /** + * have shoulder implant + * + * * -1: shoulders -1 + * * 0: none + * * 1: shoulders +1 + */ + this.shouldersImplant = 0; + /** + * your boob size (in cc) + * * 0-299 - flat; + * * 300-399 - A-cup; + * * 400-499 - B-cup + * * 500-649 - C-cup + * * 650-799 - D-cup + * * 800-999 - DD-cup + * * 1000-1199 - F-cup + * * 1200-1399 - G-cup + * * 1400-1599 - H-cup + * * 1600-1799 - I-cup + * * 1800-2049 - J-cup + * * 2050-2299 - K-cup + * * 2300-2599 - L-cup + * * 2600-2899 - M-cup + * * 2900-3249 - N-cup + * * 3250-3599 - O-cup + * * 3600-3949 - P-cup + * * 3950-4299 - Q-cup + * * 4300-4699 - R-cup + * * 4700-5099 - S-cup + * * 5100-5499 - T-cup + * * 5500-6499 - U-cup + * * 6500-6999 - V-cup + * * 7000-7499 - X-cup + * * 7500-7999 - Y-cup + * * 8000-8499 - Z-cup + * * 8500-14999 - obscenely massive UPDATE! + * * 15000-24999 - arm filling + * * 25000-39999 - figure dominating + * * 40000-54999 - beanbag sized + * * 55000-69999 - door jamming + * * 70000-89999 - hall clearing + * * 90000-100000 - hall jamming + */ + this.boobs = 0; //migrate + /** breast engorgement from unmilked tits */ + this.boobsMilk = 0; + /** + * your implant size + * * 0: no implants; + * * 1-199: small implants; + * * 200-399: normal implants; + * * 400-599: large implants; + * * 600+: boobsImplant size fillable implants + */ + this.boobsImplant = 0; //migrate + /** Implants type. 0: normal/none; 1: string */ + this.boobsImplantType = 0; + /** + * breast shape + * * "normal" + * * "perky" + * * "saggy" + * * "torpedo-shaped" + * * "downward-facing" + * * "wide-set" + */ + this.boobShape = "perky"; + /** + * nipple shape + * * "huge" + * * "puffy" + * * "inverted" + * * "tiny" + * * "cute" + * * "partially inverted" + * * "fuckable" + */ + this.nipples = "cute"; + /** + * nipple are pierced + * @default 0 + * 0: none; 1: yes; 2: heavily */ + this.nipplesPiercing = 0; + /** what accessory, if any, are on your nipples */ + this.nipplesAccessory = "none"; + /** slave areolae + * + * 0: normal; 1: large; 2: unusually wide; 3: huge, 4: massive */ + this.areolae = 0; + /** edge of areolae are pierced + * @default 0 + * 0: none; 1: yes; 2: heavy */ + this.areolaePiercing = 0; + /** your areolae shape ("heart"; "star"; "circle") */ + this.areolaeShape = "circle"; + /** + * boobs tattoo + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string | number} + */ + this.boobsTat = 0; + /** your lactation + * + * 0: none; 1: natural; 2: implant */ + this.lactation = 0; + /** how many more weeks until lactation dries up + * + * usually 2 as interactions and lact. implant reset it to 2 */ + this.lactationDuration = 0; + /** + * odds of inducing lactation + * + * begins trying on breast play if over 10 */ + this.induceLactation = 0; + /** 0: 10: not used to producing milk(no bonuses); + * 11: 50: used to producing milk; + * 51: 100: heavily adapted to producing milk(big bonus) */ + this.lactationAdaptation = 0; + /** + * hip size + * * -2: very narrow + * * -1: narrow + * * 0: normal + * * 1: wide hips + * * 2: very wide hips + * * 3: inhumanly wide hips + */ + this.hips = 0; //migrate + /** you have hip implant + * + * -1: hips -1; 0: none; 1: hips +1 */ + this.hipsImplant = 0; + /** + * butt size + * * 0 : flat + * * 1 : small + * * 2 : plump * + * * 3 : big bubble butt + * * 4 : huge + * * 5 : enormous + * * 6 : gigantic + * * 7 : ridiculous + * * 8 - 10: immense + * * 11 - 20: inhuman + * + * _* Descriptions vary for just how big 2 is, as such, it may be better to just go with 3_ + */ + this.butt = 0; //migrate + /** + * butt implant type and size + * + * * 0: none + * * 1: butt implant + * * 2: big butt implant + * * 3: fillable butt implants + * * 5 - 8: advanced fillable implants + * * 9+: hyper fillable implants + */ + this.buttImplant = 0; //migrate + /** butt implant type + * + * 0: normal/none; 1: string */ + this.buttImplantType = 0; + /** + * butt tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.buttTat = 0; + /** + * face attractiveness + * + * * -96 - : very ugly + * * -95 - -41: ugly + * * -40 - -11: unattractive + * * -10 - 10: attractive + * * 11 - 40: very pretty + * * 41 - 95: gorgeous + * * 96+: mind blowing + */ + this.face = 100; + /** + * facial surgery degree + * + * * 0 - 14: none + * * 15 - 34: Subtle Improvements + * * 35 - 64: Noticeable Work + * * 65 - 99: Heavily Reworked + * * 100: Uncanny Valley + */ + this.faceImplant = 0; + /** + * accepts string (will be treated as "normal") + * * "normal" + * * "masculine" + * * "androgynous" + * * "cute" + * * "sensual" + * * "exotic" + */ + this.faceShape = "normal"; + /** + * lip size (0 - 100) + * * 0 - 10: thin + * * 11 - 20: normal + * * 21 - 40: pretty + * * 41 - 70: plush + * * 71 - 95: huge(lisps) + * * 96 - 100: facepussy(mute) + */ + this.lips = 15; //migrate + /** + * how large her lip implants are + * @see lips + */ + this.lipsImplant = 0; + /** + * lips pierced + * + * 0: no; 1: yes; 2: heavy */ + this.lipsPiercing = 0; + /** + * lip tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "permanent makeup" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.lipsTat = 0; + /** + * teeth type + * * "normal" + * * "crooked" + * * "straightening braces" + * * "cosmetic braces" + * * "removable" + * * "pointy" + * * "baby" + * * "mixed" + */ + this.teeth = "normal"; + /** + * have tongue piercing + * + * 0: no; 1: yes; 2: heavy */ + this.tonguePiercing = 0; + /** + * vagina type + * * -1: no vagina + * * 0: virgin + * * 1: tight + * * 2: reasonably tight + * * 3: loose + * * 4: cavernous + * * 10: ruined + */ + this.vagina = -1; //migrate + /** have has your vagina improved + * + * 0: no; 1: yes; */ + this.newVag = 0; + /** exclusive variable + * how wet you are + * + * 0: dry; 1: wet; 2: soaking wet */ + this.vaginaLube = 0; //migrate + /** have vagina piercing + * + * 0: no; 1: yes; 2: heavy */ + this.vaginaPiercing = 0; + /** + * vagina tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.vaginaTat = 0; + /** + * pregnancy time or state.See Pregnancy Control section for more. + * * -3: sterilized + * * -2: sterile + * * -1: contraceptives + * * 0: fertile + * * 1 - 10: pregnant, not showing + * * 11 - 20: showing + * * 21 - 30: pregnant + * * 30 - 35: very pregnant + */ + this.preg = 0; + /** + * accepts ID See Pregnancy Control section for more. + * + * Who sired your pregnancy + * * -9: a futanari sister + * * -8: an animal + * * -7: designer baby + * * -6: a member of the Societal Elite + * * -5: one of your clients + * * -4: another arcology owner + * * -3: your former Master + * * -2: citizen of your arcology + * * -1: you + * * 0: Unidentifiable + */ + this.pregSource = 0; + /** + * Number of children. + * + * **Warning!** Should be not changed after initial impregnation setup. + * See Pregnancy Control section for more. + */ + this.pregType = 0; + /** + * Number of ready to be impregnated ova (override normal cases), + * + * For delayed impregnations with multiples.Used onetime on next call of the SetPregType + * widget. After SetPregType use it to override .pregType, it set back to 0 automatically. + */ + this.readyOva = 0; + /** exclusive variable + * (uncommon in events)($PC.preg >= 28) + * how you act when heavily pregnant + * * 0 - no change + * * 1 - submissive and motherly + * * 2 - aggressive and dominant + */ + this.pregMood = 0; + /** + * How adapted you are to being pregnant (allows for larger, safer pregnancies) + */ + this.pregAdaptation = 50; //migrate + /** + * Ovary implant type. + * + * * 0: no implants + * * "fertility": higher chance of twins (or more) + * * "sympathy": doubles eggs released + * * "asexual": self-fertilizing + */ + this.ovaImplant = 0; + /** + * Womb focused enhancements. + * + * * "none" + * * "restraint": Provides structural support for extremely oversized pregnancies + */ + this.wombImplant = "none"; + /** + * Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period + * + * * 0: no + * * 1: yes + */ + this.fertKnown = 0; + /** + * Menstrual cycle control variable. + * + * * 0: Danger week + * * 1+: safe week + */ + this.fertPeak = 0; + /** + * are you a broodmother + * + * * 0: no + * * 1: standard 1 birth / week + * * 2: black market 12 births / week + * * 3: black market upgrade for implant firmware, to allow change weekly number + * of ova in range of 1 to 12 in remote surgery block. (broodmotherFetuses change + * through remote surgery). (future usage) + */ + this.broodmother = 0; + /** + * count of ova that broodmother implant force to release. + * + * Should be set with "broodmother" property together. If broodmother === 0 has no meaning. + */ + this.broodmotherFetuses = 0; + /** + * If broodmother implant set to pause it 's work. + * + * 1: implant on pause !1: working. + * + * If broodmother birth her last baby and her implant is on pause, she will be in contraception like state. + */ + this.broodmotherOnHold = 0; + /** + * Number of weeks left until last baby will be birthed. + * + * Mainly informative only. Updated automatically at birth process based on remaining fetuses. 0 - 37 + */ + this.broodmotherCountDown = 0; + /** + * variable used to set off the birth events + * + * 1: birth this week; 0: not time yet */ + this.labor = 0; + /** + * may accept strings, use at own risk + * + * * "none" + * * "a small empathy belly" + * * "a medium empathy belly" + * * "a large empathy belly" + * * "a huge empathy belly" + * * "a corset" + * * "an extreme corset" + * * "a support band" + */ + this.bellyAccessory = "none"; + /** + * labia type + * * 0: minimal + * * 1: big + * * 2: huge + * * 3: huge dangling + */ + this.labia = 0; + /** + * clit size + * * 0: normal + * * 1: large + * * 2: huge + * * 3: enormous + * * 4: penis-like + * * 5: like a massive penis + */ + this.clit = 0; + /** + * is clit pierced + * * 0: no + * * 1: yes + * * 2: heavy + * * 3: smart + */ + this.clitPiercing = 0; + /** 0: circumcised; 1+:uncut, also affects foreskin size */ + this.foreskin = 0; + /** + * anus size + * * 0: virgin + * * 1: tight + * * 2: loose + * * 3: very loose + * * 4: gaping + */ + this.anus = 0; + /** + * dick size + * * 0: none + * * 1: tiny + * * 2: little + * * 3: normal + * * 4: big + * * 5: huge + * * 6: gigantic + * * 7: massive/gigantic + * * 8: truly imposing/titanic + * * 9: monstrous/absurd + * * 10: awe-inspiring/inhuman + * * 11+: hypertrophied + */ + this.dick = 4; //migrate + /** used to calculate size of area around anus. */ + this.analArea = 1; + /** + * is dick pierced + * * 0: no + * * 1: yes + * * 2: heavy + */ + this.dickPiercing = 0; + /** + * dick tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.dickTat = 0; + /** + * does the slave have a prostate? + * * 0: no + * * 1: normal + * * 2: hyperstimulated +20% + * * 3: modified hyperstimulated +50% + */ + this.prostate = 1; //migrate + /** + * ball size + * * 0: none + * * 1: vestigial + * * 2: small + * * 3: average + * * 4: large + * * 5: massive + * * 6: huge + * * 7: giant + * * 8: enormous + * * 9: monstrous + * * 10: inhuman + * * 11+: hypertrophied + */ + this.balls = 4; //migrate + /** Exclusive variable + * ball size booster + * * 0: none + */ + this.ballsImplant = 0; //migrate + /** + * scrotum size + * + * function relative to .ballSize + * + * *If .balls > 0 and .scrotum === 0, balls are internal* + */ + this.scrotum = 4; //migrate + /** has ovaries + * + * 0: no; 1: yes */ + this.ovaries = 0; //migrate + /** has anus piercing + * + * 0: no; 1: yes; 2: heavy */ + this.anusPiercing = 0; + /** + * anus tattoo + * + * takes one of the following strings or 0 + * * "bleached" + * * "tribal patterns" + * * "flowers" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.anusTat = 0; + /** + * has makeup + * * 0: none + * * 1: minimal + * * 2: expensive, luxurious + * * 3: color-coordinated with hair + * * 4: heavy + * * 5: neon + * * 6: color-coordinated neon + * * 7: metallic + * * 8: color-coordinated metallic + */ + this.makeup = 0; + /** + * nail type + * * 0: neatly clipped + * * 1: long and elegant + * * 2: color-coordinated with hair + * * 3: sharp and claw-like + * * 4: bright and glittery + * * 5: very long and garish + * * 6: neon + * * 7: color-coordinated neon + * * 8: metallic + * * 9: color-coordinated metallic + */ + this.nails = 0; + /** + * brand + * + * @type {Object.<string, string>} */ + this.brand = {}; + /** has pierced ears + * + * 0: no; 1: yes; 2: heavy */ + this.earPiercing = 0; + /** has pierced nose + * + * 0: no; 1: yes; 2: heavy */ + this.nosePiercing = 0; + /** has eyebrow piercing + * + * 0: no; 1: yes; 2: heavy */ + this.eyebrowPiercing = 0; + /** has navel piercing + * + * 0: no; 1: yes; 2: heavy */ + this.navelPiercing = 0; + /** + * shoulder tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.shouldersTat = 0; + /** + * arm tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.armsTat = 0; + /** + * leg tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.legsTat = 0; + /** + * back tattoo + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.backTat = 0; + /** + * tramp stamp + * + * takes one of the following strings or 0 + * * "tribal patterns" + * * "flowers" + * * "scenes" + * * "Asian art" + * * "degradation" + * * "counting" + * * "advertisements" + * * "rude words" + * * "bovine patterns" + * * "sacrament" + * * "Sacrilege" + * * "Possessive" + * * "Paternalist" + * @type {string|number} */ + this.stampTat = 0; + /** + * * "healthy" + * * "restricted" + * * "muscle building" + * * "fattening" + * * "slimming" + * * "XX" + * * "XY" + * * "XXY" + * * "cum production" + * * "cleansing" + * * "fertility" + */ + this.diet = "healthy"; + /** + * * -2: heavy male hormones + * * -1: male hormones + * * 0: none + * * 1: female hormones + * * 2: heavy female hormones + */ + this.hormones = 0; + /** compatibility */ + this.drugs = "no drugs"; + /** 0: none; 1: preventatives; 2: curatives */ + this.curatives = 0; + /** if greater than 10 triggers side effects from drug use. */ + this.chem = 0; + /** 0: none; 1: standard; 2: powerful */ + this.aphrodisiacs = 0; + /** + * how addict to aphrodisiacs slave is + * * 0: not + * * 1-2: new addict + * * 3-9: confirmed addict + * * 10+: dependent + */ + this.addict = 0; + /** + * may accept strings, use at own risk + * + * * "a nice maid outfit" + * * "a slutty outfit" + * * "nice business attire" + * * "no clothing" + */ + this.clothes = "nice business attire"; //migrate + /** + * may accept strings, use at own risk + * * "none" + */ + this.collar = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "flats" + */ + this.shoes = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "bullet vibrator" + * * "smart bullet vibrator" + * * "dildo" + * * "large dildo" + * * "huge dildo" + * * "long dildo" + * * "long, large dildo" + * * "long, huge dildo" + */ + this.vaginalAccessory = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "vibrator" + */ + this.vaginalAttachment = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "sock" + * * "vibrator" + */ + this.dickAccessory = "none"; + /** + * whether the slave has a chastity device on their anus + * 0 - no + * 1 - yes + */ + this.chastityAnus = 0; + /** + * whether the slave has a chastity device on their penis + * 0 - no + * 1 - yes + */ + this.chastityPenis = 0; + /** + * whether the slave has a chastity device on their vagina + * 0 - no + * 1 - yes + */ + this.chastityVagina = 0; + /** + * may accept strings, use at own risk + * * "none" + * * "hand gloves" + * * "elbow gloves" + */ + this.armAccessory = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "short stockings" + * * "long stockings" + */ + this.legAccessory = "none"; + /** + * may accept strings, use at own risk + * * "none" + * * "plug" + * * "large plug" + * * "huge plug" + * * "long plug" + * * "long, large plug" + * * "long, huge plug" + */ + this.buttplug = "none"; + /** + * Do you have an attachment on your buttplug + * + * may accept strings, use at own risk + * * "none" + * * "tail" + * * "fox tail" + * * "cat tail" + * * "cow tail" + */ + this.buttplugAttachment = "none"; + /** + * your intelligence + * * -100 - -96: borderline retarded + * * -95 - -51: very slow + * * -50 - -16: slow + * * -15 - 15: average + * * 16 - 50: smart + * * 51 - 95: very smart + * * 96 - 100: brilliant + */ + this.intelligence = 100; + /** + * Degree of your education + * * -15+: miseducated (you appear to be dumber than you really are) + * * 0: uneducated + * * 1+: partial education (not really used) + * * 15+: educated + * * 30: well educated + */ + this.intelligenceImplant = 30; //migrate + /** + * how much fucking you can do in a week + */ + this.sexualEnergy = 4; //migrate this into the following two variables somehow + /** + * sex drive + * * 0 - 20: no sex drive + * * 21 - 40: poor sex drive + * * 41 - 60: average sex drive + * * 61 - 80: good sex drive + * * 81 - 95: powerful sex drive + * * 96+: nymphomaniac + */ + this.energy = 80; + /** + * how badly you need sex. Will be how much sex you can have a week + * + * 0: sated + */ + this.need = 0; + /** + * attraction to women + * * 0 - 5: disgusted by women + * * 6 - 15: turned off by women + * * 15 - 35: not attracted to women + * * 36 - 65: indifferent to women + * * 66 - 85: attracted to women + * * 86 - 95: aroused by women + * * 96+: passionate about women + * + * *if both attrXX and attrXY > 95, you will be omnisexual* + * + * *if energy > 95 and either attrXX or attrXY > 95, you will be nymphomaniac* + */ + this.attrXX = 100; + /** + * attraction to men + * * 0 - 5: disgusted by men + * * 6 - 15: turned off by men + * * 15 - 35: not attracted to men + * * 36 - 65: indifferent to men + * * 66 - 85: attracted to men + * * 86 - 95: aroused by men + * * 96+: passionate about men + * + * *if both attrXX and attrXY > 95, you will be omnisexual* + * + * *if energy > 95 and either attrXX or attrXY > 95, you will be nymphomaniac* + */ + this.attrXY = 100; + /** + * * "none" + * * "mindbroken" + * * "submissive" + * * "cumslut" + * * "humiliation" + * * "buttslut" + * * "boobs" + * * "sadist" + * * "masochist" + * * "dom" + * * "pregnancy" + */ + this.fetish = "none"; + /** how strong your fetish is (10-100) + * + * 10+: enjoys fetish; 60+: likes fetish; 95+: loves fetish */ + this.fetishStrength = 70; + /** + * * "none" + * * "arrogant": clings to her dignity, thinks slavery is beneath her + * * "bitchy": can 't keep her opinions to herself + * * "odd": says and does odd things + * * "hates men": hates men + * * "hates women": hates women + * * "gluttonous": likes eating, gains weight + * * "anorexic": dislikes eating and being forced to eat, loses weight + * * "devout": resistance through religious faith + * * "liberated": believes slavery is wrong + */ + this.behavioralFlaw = "none"; + /** + * * "none" + * * "confident": believes she has value as a slave + * * "cutting": often has as witty or cunning remark ready, knows when to say it + * * "funny": is funny + * * "fitness": loves working out + * * "adores women": likes spending time with women + * * "adores men": likes spending time with men + * * "insecure": defines herself on the thoughts of others + * * "sinful": breaks cultural norms + * * "advocate": advocates slavery + */ + this.behavioralQuirk = "none"; + /** + * * "none" + * * "hates oral": hates oral sex + * * "hates anal": hates anal sex + * * "hates penetration": dislikes penetrative sex + * * "shamefast": nervous when naked + * * "idealistic": believes sex should be based on love and consent + * * "repressed": dislikes sex + * * "apathetic": inert during sex + * * "crude": sexually crude and has little sense of what partners find disgusting during sex + * * "judgemental": sexually judgemental and often judges her sexual partners' performance + * * "neglectful": disregards herself in sex + * * "cum addict": addicted to cum + * * "anal addict": addicted to anal + * * "attention whore": addicted to being the center of attention + * * "breast growth": addicted to her own breasts + * * "abusive": sexually abusive + * * "malicious": loves causing pain and suffering + * * "self hating": hates herself + * * "breeder": addicted to being pregnant + */ + this.sexualFlaw = "none"; + /** + * * "none" + * * "gagfuck queen": can take a facefucking + * * "painal queen": knows how far she can go without getting hurt + * * "strugglefuck queen": knows how much resistance her partners want + * * "tease": is a tease + * * "romantic": enjoys the closeness of sex + * * "perverted": enjoys breaking sexual boundaries + * * "caring": enjoys bring her partners to orgasm + * * "unflinching": willing to do anything + * * "size queen": prefers big cocks + */ + this.sexualQuirk = "none"; + /** 0: does not have; 1: carrier; 2: active + * * heterochromia is an exception. String = active + */ + this.geneticQuirks = { + /** Oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. */ + macromastia: 0, + /** Greatly oversized breasts. Increased growth rate, reduced shrink rate. Breasts try to return to oversized state if reduced. + * + * **macromastia + gigantomastia** - Breasts never stop growing. Increased growth rate, no shrink rate. */ + gigantomastia: 0, + /** is prone to having twins, shorter pregnancy recovery rate */ + fertility: 0, + /** is prone to having multiples, even shorter pregnancy recovery rate + * + * **fertility + hyperFertility** - will have multiples, even shorter pregnancy recovery rate */ + hyperFertility: 0, + /** pregnancy does not block ovulation, slave can become pregnant even while pregnant */ + superfetation: 0, + /** is abnormally tall. gigantism + dwarfism - is very average*/ + gigantism: 0, + /** is abnormally short. gigantism + dwarfism - is very average*/ + dwarfism: 0, + /** has a flawless face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */ + pFace: 0, + /** has a hideous face. pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it */ + uFace: 0, + /** has pale skin, white hair and red eyes */ + albinism: 0, + /** may have mismatched eyes */ + heterochromia: 0, + /** ass never stops growing. Increased growth rate, reduced shrink rate. */ + rearLipedema: 0, + /** has (or will have) a huge dong */ + wellHung: 0, + /** constantly gains weight unless dieting, easier to gain weight. wGain + wLoss - weight gain/loss fluctuates randomly */ + wGain: 0, + /** constantly loses weight unless gaining, easier to lose weight. wGain + wLoss - weight gain/loss fluctuates randomly */ + wLoss: 0, + /** body attempts to normalize to an androgynous state */ + androgyny: 0, + /** constantly gains muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */ + mGain: 0, + /** constantly loses muscle mass, easier to gain muscle. mGain + mLoss - muscle gain/loss amplified, passively lose muscle unless building */ + mLoss: 0, + /** slave can only ever birth girls */ + girlsOnly: 0 + }; + /** Counts various thing you have done in */ + this.counter = new App.Entity.PlayerActionsCountersState(); + /** Values provided by players */ + this.custom = new App.Entity.PlayerCustomAddonsState(); + /** + * You have a tattoo that is only recognizable when you have a big belly. + * * "a heart" + * * "a star" + * * "a butterfly" + * @type {string|number} */ + this.bellyTat = 0; + /** + * You have a series of tattoos to denote how many abortions you've had. + * * -1: no tattoo + * * 0: assigned to have tattoo, may not have one yet + * * 1+: number of abortion tattoos she has + */ + this.abortionTat = -1; + /** + * You have a series of tattoos to denote how many times you've given birth. + * * -1: no tattoo + * * 0: assigned to have tattoo, may not have one yet + * * 1+: number of birth tattoos she has + */ + this.birthsTat = -1; + /** You will give birth this week. + * + * 1: true; 0: false */ + this.induce = 0; + /** You have an anal womb and can get pregnant. + * + * 1: true; 0: false */ + this.mpreg = 0; + /** How much fluid is distending your middle. + * + * 1: 2L; 2: 4L; 3: 8L */ + this.inflation = 0; + /** + * What kind of fluid is in you. + * * "none" + * * "water" + * * "cum" + * * "milk" + * * "food" + * * "aphrodisiac" + * * "curative" + * * "tightener" + * * "urine" + */ + this.inflationType = "none"; + /** + * How you are being filled. + * * 0: not + * * 1: oral + * * 2: anal + * * 3: orally by another slave + */ + this.inflationMethod = 0; + /** If inflationMethod === 3, ID of the slave filling you with milk. */ + this.milkSource = 0; + /** If inflationMethod 3, ID of the slave filling you with cum. */ + this.cumSource = 0; + /** Your internals have ruptured. Used with poor health and overinflation. + * + * 1: true; 0: false */ + this.burst = 0; + /** Do you know you are pregnant. + * + * 0: no; 1: yes */ + this.pregKnown = 0; + /** How long you have been pregnant + * + * used in place of .preg when pregnancy speed up and slow down are used + * + * if negative, designates postpartum. */ + this.pregWeek = 0; + /** + * how big your belly is in CCs + * + * ||thresholds:| + * |-|-| + * 100 | bloated + * 1500 | early pregnancy + * 5000 | obviously pregnant + * 10000 | very pregnant + * 15000 | full term + * 30000 | full term twins + * 45000 | full term triplets + * 60000 | full term quads + * 75000 | full term quints + * 90000 | full term sextuplets + * 105000 | full term septuplets + * 120000 | full term octuplets + * 150000 | oversized pregnancy + * 300000 | hyperpreg state 1 + * 450000 | hyperpreg state 2 + * 600000 | hyperpreg state 3 + * 750000 | hyperpreg state 4 + */ + this.belly = 0; + /** + * how big your belly is in CCs (pregnancy only) + * + * ||thresholds| + * |-|-| + * 100 | bloated + * 1500 | early pregnancy + * 5000 | obviously pregnant + * 10000 | very pregnant + * 15000 | full term + * 30000 | full term twins + * 45000 | full term triplets + * 60000 | full term quads + * 75000 | full term quints + * 90000 | full term sextuplets + * 105000 | full term septuplets + * 120000 | full term octuplets + * 150000 | oversized pregnancy (9+ babies) + * 300000 | hyperpreg state 1 (20+ babies) + * 450000 | hyperpreg state 2 (30+ babies) + * 600000 | hyperpreg state 3 (40+ babies) + * 750000 | hyperpreg state 4 (50+ babies) + */ + this.bellyPreg = 0; + /** + * how big your belly is in CCs (fluid distension only) + * + * ||thresholds| + * |-|-| + * 100 | bloated + * 2000 | clearly bloated (2 L) + * 5000 | very full (~1 gal) + * 10000 | full to bursting (~2 gal) + */ + this.bellyFluid = 0; + /** + * Do you have a fillable abdominal implant. + * * -1: no + * * 0+: yes + * * 2000+: Early pregnancy + * * 4000+: looks pregnant + * * 8000+: looks full term + * * 16000+: hyperpregnant 1 + * * 32000+: hyperpregnant 2 + */ + this.bellyImplant = -1; + /** How saggy your belly is after being distended for too long. + * + * 1+ changes belly description */ + this.bellySag = 0; + /** How saggy your belly is from being too pregnant. + * + * 1+ changes belly description and overrides/coincides with bellySag */ + this.bellySagPreg = 0; + /** + * Has the your belly implant been filled this week. Causes health damage for overfilling. + * + * 0: no pain; 1: will experience pain; 2: cannot be filled this week */ + this.bellyPain = 0; + /** Do you have a cervical implant that slowly feeds cum from being fucked into a fillable implant. + * + * 0: no; 1: vaginal version only; 2: anal version only; 3: both vaginal and anal */ + this.cervixImplant = 0; + /** Target .physicalAge for female puberty to occur. */ + this.pubertyAgeXX = 13; + /** Have you gone through female puberty. + * + * 0: no; 1: yes */ + this.pubertyXX = 1; + /** Target .physicalAge for male puberty to occur. */ + this.pubertyAgeXY = 13; + /** Have you slave gone through male puberty. + * + * 0: no; 1: yes */ + this.pubertyXY = 1; + /** + * scar + * Sub-object: + * the body part in question, such as back or left hand + * the key of that part is the type of scar they can have and the value is how serious it is, from 0 up + * @type {Object.Object} */ + this.scar = {}; + /** + * In a eugenics society, you are a designated breeder. + * + * 1: yes; 0: no */ + this.breedingMark = 0; + /** + * What species of sperm she produces. + * * "human" + * * "sterile" + * * "dog" + * * "pig" + * * "horse" + * * "cow" + */ + this.ballType = "human"; + /** + * What species of ovum she produces. + * * "human" + * * "dog" + * * "pig" + * * "horse" + * * "cow" + */ + this.eggType = "human"; + /** */ + this.ageAdjust = 0; + /** You are bald + * + * 0: no; 1: yes */ + this.bald = 0; + /** You are in your original body. + * + * 0: yes; 1+: number of swaps (increases upkeep each time) */ + this.bodySwap = 0; + /** Who, if relevant, the body belonged to. */ + this.origBodyOwner = ""; + /** Who, if relevant, the body belonged to. */ + this.origBodyOwnerID = 0; + /** + * Slave's current hormonal balance, directs saHormones changes + * + * ||thresholds| + * |-|-| + * -500 - -400 | overwhelmingly masculine + * -399 - -300 | extremely masculine + * -299 - -200 | heavily masculine + * -199 - -100 | very masculine + * -99 - -21 | masculine + * -20 - 20 | neutral + * 21 - 99 | feminine + * 100 - 199 | very feminine + * 200 - 299 | heavily feminine + * 300 - 399 | extremely feminine + * 400 - 500 | overwhelmingly feminine + */ + this.hormoneBalance = 0; + /** Do you have the breast shape maintaining mesh implant. + * + * 0: no; 1: yes */ + this.breastMesh = 0; + /** Used to denote you are giving birth prematurely. + * + * 0: no; 1: yes */ + this.prematureBirth = 0; + /** Were you born prematurely? + * + * 0: no; 1: yes */ + this.premature = 0; + /** Have you had had a vasectomy? + * + * 0: no; 1: yes */ + this.vasectomy = 0; + /** Your skills */ + this.skill = new App.Entity.PlayerSkillsState(); + /** Whether she was put in the incubator at birth + * + * 0: no; 1: yes, comforting; 2: yes, terrifying */ + this.tankBaby = 0; + /** */ + this.clone = 0; + /** */ + this.geneMods = { + /** Do you have induced NCS? + * + * 0: no; 1: yes */ + NCS: 0, + /** Have you undergone the elasticity (plasticity) treatment? + * + * 0: no; 1: yes */ + rapidCellGrowth: 0 + }; + /** erratic weight gain + * + * 0: stable; 1: gaining; -1: losing */ + this.weightDirection = 0; + // exclusive minor player variables (probably) here + /** Number of your children reserved for the incubator + * int */ + this.reservedChildren = 0; + /** Number of your children reserved for the nursery + * int */ + this.reservedChildrenNursery = 0; + /** are you on fertility supplements + * + * 0: no; 1: yes */ + this.fertDrugs = 0; + /** have you been drugged with fertility drugs + * + * 0: no; 1+: how many weeks they will remain in your system */ + this.forcedFertDrugs = 0; + /** Are you taking pills to fuck more slaves each week? + * + * 0: no; 1: yes */ + this.staminaPills = 0; + } + + /** Creates an object suitable for setting nested attributes as it would be a SlaveState + * @returns {object} Object containing all the attributes + * that are complex objects in the SlaveState class + */ + static makeSkeleton() { + return { + arm: {left: {}, right: {}}, + leg: {left: {}, right: {}}, + eye: {left: {}, right: {}}, + readyProsthetics: [], // yes, not an object, but needed for hero slaves + counter: {}, + brand: {}, + scar: {}, + skill: {}, + custom: {}, + }; + } +}; + +/** + * @callback playerOperation + * @param {App.Entity.PlayerState} s + * @returns {void} + */ + +/** + * @callback slaveTestCallback + * @param {App.Entity.PlayerState} PC + * @returns {boolean} + */ diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index a0dc8d3c482476e2e434f451e4d186d3c27b0899..3fb26a9fd6e014ab93044c895c1012b4270b31f3 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -1,12 +1,5 @@ :: pregmod widgets [nobr widget] -<<widget "initPC">> - <<set $PC = {name: "Anonymous", surname: 0, title: 1, ID: -1, genes: "XY", pronoun: "he", possessive: "him", object: "his", dick: 1, vagina: 0, preg: 0, pregType: 0, pregWeek: 0, pregKnown: 0, fertKnown: 0, fertPeak: 0, belly: 0, bellyPreg: 0, mpreg: 0, pregSource: 0, pregMood: 0, labor: 0, births: 0, boobsBonus: 0, degeneracy: 0, voiceImplant: 0, accent: 0, shoulders: 0, shouldersImplant: 0, boobs: 0, lactation: 0, lactationDuration: 0, career: "capitalist", rumor: "wealth", birthWeek: random(0,51), age: 2, sexualEnergy: 4, refreshment: "cigar", refreshmentType: 0, trading: 0, warfare: 0, slaving: 0, engineering: 0, medicine: 0, hacking: 0, cumTap: 0, race: "white", origRace: "white", skin: "light", origSkin: "light", markings: "none", eyeColor: "blue", origEye: "blue", pupil: "circular", sclerae: "white", hColor: "blonde", origHColor: "blonde", nationality: "Stateless", father: 0, mother: 0, sisters: 0, daughters: 0, birthElite: 0, birthMaster: 0, birthDegenerate: 0, birthClient: 0, birthOther: 0, birthArcOwner: 0, birthCitizen: 0, birthSelf: 0, birthLab: 0, birthFutaSis: 0, slavesFathered: 0, slavesKnockedUp: 0, intelligence: 100, face: 100, faceShape: "normal", actualAge: 35, physicalAge: 35, visualAge: 35, boobsImplant: 0, butt: 0, buttImplant: 0, balls: 0, ballsImplant: 0, ageImplant: 0, newVag: 0, reservedChildren: 0, reservedChildrenNursery: 0, fertDrugs: 0, forcedFertDrugs: 0, staminaPills: 0, ovaryAge: 35, eggType: "human", ballType: "human", storedCum: 0, behavioralFlaw: "none", behavioralQuirk: "none", sexualFlaw: "none", sexualQuirk: "none", fetish: "none", pubicHStyle: "hairless", underArmHStyle: "hairless", geneticQuirks: {macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, heterochromia: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, mGain: 0, mLoss: 0, androgyny: 0, girlsOnly: 0}}>> - - <<set WombInit($PC)>> - -<</widget>> - <<widget "PMODinit">> <<set $args[0].geneticQuirks = Object.assign({macromastia: 0, gigantomastia: 0, fertility: 0, hyperFertility: 0, superfetation: 0, gigantism: 0, dwarfism: 0, pFace: 0, uFace: 0, albinism: 0, heterochromia: 0, rearLipedema: 0, wellHung: 0, wGain: 0, wLoss: 0, mGain: 0, mLoss: 0, androgyny: 0, girlsOnly: 0}, $args[0].geneticQuirks)>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 02dd56c109cba55faca48b8fea57ed16c710897a..9ae2db9a848d33b290ba24c0b887bdf4654b5a0e 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -536,7 +536,8 @@ <<set $PC.genes = "XX">> <</if>> <</if>> -<<elseif $releaseID == 1057>> /* player object converter */ + + /* player object converter */ <<set _newPC = basePlayer()>> <<set _newPC.slaveName = $PC.name>> <<set _newPC.slaveSurname = $PC.surname>> @@ -694,19 +695,32 @@ <<set _newPC.reservedChildren = $PC.reservedChildren>> <<set _newPC.reservedChildrenNursery = $PC.reservedChildrenNursery>> <<set _newPC.geneticQuirks = clone($PC.geneticQuirks)>> - /*muscles*/ - /*eyes*/ - /*hLength*/ - /*waist*/ - /*voice*/ - /*shoulders*/ - /*hips*/ - /*lips*/ - /*anus*/ - /*clothes*/ - /*education*/ + <<if $arcologies[0].FSPhysicalIdealist != "unset">> + <<set _newPC.muscles = 100>> + <<elseif PC.title == 1>> + <<set _newPC.muscles = 50>> + <<else>> + <<set _newPC.muscles = 30>> + <</if>> + <<if PC.title == 0>> + <<set _newPC.hLength = 15>> + <<set _newPC.waist = -20>> + <<set _newPC.voice = 2>> + <<set _newPC.shoulders = -1>> + <<set _newPC.hips = 1>> + <</if>> + <<if $PC.career == "escort">> + <<set _newPC.anus = 1>> + <<set _newPC.clothes = "a slutty outfit">> + <<set _newPC.education = 15>> + <<elseif $PC.career == "servant">> + <<set _newPC.clothes = "a nice maid outfit">> + <<set _newPC.education = 0>> + <</if>> <<set WombInit(_newPC)>> + + <<set $PC = clone(_newPC)>> <</if>> <<if ndef $PCWounded>> @@ -3719,6 +3733,12 @@ Setting missing slave variables: <</if>> <</if>> +<<if $releaseID < 1057>> + <<if _Slave.relatioship == -3>> + <<set $PC.relationships.wives.push(_Slave.ID)>> + <</if>> +<</if>> + <<set $slaves[_bci] = _Slave>> <</for>>