code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="4.808326" inkscape:cx="531.76051" inkscape:cy="751.71421" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="Boob_Large_3_" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Torso_Unnatural_straps" inkscape:label="Torso_Unnatural_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 501.152,204.07 C 500.44,208.762 504.877,212.166 510.374,215.305 C 523.664,215.126 537.25,213.091 550.54,206.278" id="path9218" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path9222" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1" d="M 496.678,465.98 L 482.188,407.3 L 491.521,353.918 L 491.181,281.745 L 510.374,215.305 L 528.877,283.779 L 512.809,320.263 L 498.229,354.208 L 482.188,407.3 L 477.335,354.779 L 462.265,311.869 L 468.744,277.264 L 510.374,215.305" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 468.581,355.606 L 477.335,354.779 L 491.521,353.918 L 498.229,354.208 L 535.693,361.984" id="path9224" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 465.026,377.931 C 472.614,387.409 477.095,393.328 482.188,407.3 C 495.417,392.256 523.809,387.614 542.329,378.524" id="path9226" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path4809" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 586.895,273.468 L 558.608,283.791 L 528.877,283.779 L 491.181,281.745 L 468.744,277.264 L 459.884,274.615" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
  </svg:g>
</svg>


code:
#!/bin/bash
if [ ! -d ".git" ]; then
	#not running in git repo, so can't use git commands :-)
	echo "No .git repo found - skipping sanity checks"
	exit 0
fi

WARNING='\033[93m'

myprint() {
	while read data; do
		echo -n -e "[$1]$WARNING"
		echo "$data"
	done
}

#check if java version should be run
if [[ "$1" == "java" ]]; then
	java="true"
fi

#for everyone that wants to add new checks; just add them outside the java checks.

GREP="git grep -n --color"

if [[ ! "$java" ]]; then
	# Check for missing right angle bracket: <</if>
	$GREP "<</[^>]*>[^>]" -- 'src/*'  | myprint "MissingClosingAngleBracket"
	$GREP "<<[^>()]*>[^()<>"$'\r]*\r'"\?$" -- 'src/*' | myprint "MissingClosingAngleBracket"
	# Check for missing left angle bracket: </if>>
	$GREP "\([^<]\|^\)</\?\(if\|else\|case\|set\|print\|elseif\)" -- 'src/*' | myprint "MissingOpeningAngleBracket2"
fi
# Check for accidental assignment.  e.g.:   <<if $foo = "hello">>
$GREP "<<[ ]*if[^>=]*[^><\!=]=[^=][^>]*>>" -- 'src/*' | myprint "AccidentalAssignmentInIf"
# Check for accidental assignment.  e.g.:   <<elseif $foo = "hello">>
$GREP "<<[ ]*elseif[^>=]*[^><\!=]=[^=][^>]*>>" -- 'src/*' | myprint "AccidentalAssignmentInElseIf"
# Check for missing ".  e.g.:   <<if $foo == "hello>>
$GREP "<<[^\"<>]*\"[^\"<>]*>>" -- 'src/*' | myprint "MissingSpeechMark"
# Check for missing ".  e.g.:   <<if $foo = "hello)
$GREP -e "<<[^\"<>]*\([^\"<>]*\"[^><\"]*\"\| [<>] \)*\"\([^\"<>]*\"[^><\"]*\"\| [<>] \)*\([^\"<>]\| [<>] \)*>>" --and --not -e "*[^']*" -- 'src/*' | myprint "MissingSpeechMark2"
# Check for colors like: @@color:red   - should be @@.red
$GREP -e "@@color:" --and --not -e  "@@color:rgb([0-9 ]\+,[0-9 ]\+,[0-9 ]\+)" -- "src/*" | myprint "UseCSSColors"
# Check for missing $ in activeSlave or PC
$GREP "<<[ ]*[^\$><_\[]*\(activeSlave\|PC\)[.]"  -- "src/*" | myprint "MissingDollar"
# Check for closing bracket without opening bracket.  e.g.:  <<if foo)>>	  (but  <<case "foo")>>   is valid, so ignore those
$GREP -e "<<[ a-zA-Z]\+\([^()<>]\|[^()<>][<>][^()<>]\)*)" --and --not -e "<< *case"  -- "src/*" | myprint "MissingOpeningBracket"
# Check for opening bracket without closing bracket.  e.g.:  <<if (foo>>
$GREP -e "<<[ a-zA-Z]\([^<>]\|[^<>][<>][^<>]\)\+(\([^()<>]\|[^<>()][<>][^<>()]\|([^<>()]*])\)*>>" -- "src/*" | myprint "MissingClosingBracket"
# Check for two closing brackets but one opening bracket.  e.g.:  <<if (foo))>>
$GREP -e "<<[ a-zA-Z]\+[^()<>]*([^()]*)[^()]*)[^()<>]*>>"  -- "src/*" | myprint "MissingOpeningBracket2"
# Check for one closing bracket but two opening brackets.  e.g.:  <<if ((foo)>>
$GREP -e "<<[ a-zA-Z]\+[^()<>]*([^()]*([^()]*)[^()<>]*>>"  -- "src/*" | myprint "MissingClosingBracket2"
$GREP -e "<<.*[(][^<>)]*[(][^<>)]*)\?[^<>)]*>>" -- "src/*" | myprint "MissingClosingBracket3"
if [[ ! "$java" ]]; then
	# Check for missing >>.  e.g.:   <<if $foo
	$GREP "<<[^<>]*[^,\"\[{"$'\r]\r'"\?$" -- 'src/*' | myprint "MissingClosingAngleBrackets"
	# Check for too many <<<.  e.g.: <<</if>>
	$GREP "<<<[^<>]*[<>]\?[^<>]*>>" -- "src/*.tw" | myprint "TooManyAngleBrackets"
fi
# Check for too many >>>.  e.g.: <</if>>>
$GREP "<<[^<>]*[<>]\?[^<>]*>>>" -- "src/*.tw" | myprint "TooManyAngleBrackets"
# Check for wrong capitalization on 'activeslave' and other common typos
$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeStandard\|activeOrgan\|activeLimbs\|activeUnits\|activeCanine\|activeHooved\|activeFeline\)" -- "src/*" | myprint "WrongCapitilization"
if [[ ! "$java" ]]; then
	$GREP  "\(csae\|[a-z] She \|attepmts\|youreslf\|advnaces\|canAcheive\|setBellySize\|SetbellySize\|setbellySize\|bellypreg\|pregBelly\|bellyimplant\|bellyfluid\|pronounCaps\|carress\|hormonebalance\|fetishknown\)" -- 'src/*' | myprint "SpellCheck"
	$GREP  "\(recieve\|recieves\)" -- 'src/*' | myprint "PregmodderCannotSpellReceive"
	$GREP "\$slave\[" -- 'src/*' | myprint "ShouldBeSlaves"
fi
# Check for strange spaces e.g.  $slaves[$i]. lips
$GREP "\$slaves\[\$i\]\. " -- 'src/*' | myprint "MissingPropertyAfterSlaves"
# Check using refreshmentType instead of refreshment
$GREP "\$PC.refreshmentType[^ =]" -- 'src/*' | grep -v src/events/intro/introSummary.tw | myprint "ShouldBeRefreshment"
if [[ ! "$java" ]]; then
	# Check, e.g., <<//if>>
	$GREP "<</[a-zA-Z]*[^a-zA-Z<>]\+[a-zA-Z]*>>" -- 'src/*' | myprint "DoubleSlash"
fi
# Check, e.g.  <<else $foo==4
$GREP "<<else >\?[^>]" -- 'src/*' | myprint "ShouldBeElseIf"
# Check, e.g., =to
$GREP "=to" -- 'src/*' | myprint "EqualAndTo"
# Check doing  $slaves.foo instead of $slaves[i].foo
$GREP -e "[$]slaves[.]"  --and --not -e '[$]slaves[.]\(length\|random\|map\|filter\|deleteAt\|push\|find\|includes\|delete\|forEach\)' -- 'src/*' | myprint "MissingSlavesIndex"
# Try to check for accidentally mixing slaves[] and activeSlave.  This can have a lot of false matches, but has caught a lot of bugs so it's worth the pain
$GREP -e "activeSlave[.]" --and -e "slaves\[..\?\][.]" --and --not -e '[.]ID' --and --not -e 'slaves\[..\?\][.]\(slaveName\|slaveSurname\|actualAge\|relation\|assignment\|age\|devotion\|trust\|vagina\|mother\|father\|training\)' -- 'src/*' | myprint "MaybeAccidentalMixingOfSlavesAndActiveSlave"
# Check, e.g.  <<set foo == 4>>
$GREP "<<set[^{>=]*==" -- 'src/*' | myprint "DoubleEqualsInSet"
# Check for, e.g   <<if slaves[foo]>>
$GREP "<<\([^>]\|[^>]>[^>]\)*[^$]slaves\[" -- 'src/*' | myprint "MissingDollar"
# Check for missing $ or _ in variable name:
$GREP -e "<<[a-zA-Z]\([^>\"]\|[^>]>[^>]\|\"[^\"]*\"\)* [a-zA-Z]\+ * =" -- src/*.tw | myprint "MissingDollar2"
# Check for missing command, e.g.  <<foo =
$GREP -e "<<[a-zA-Z]* = *" -- src/*.tw | myprint "BadCommand"
# Check for duplicate words, e.g. with with
$GREP -e  " \(\b[a-zA-Z][a-zA-Z]\+\) \1\b " --and --not -e " her her " --and --not -e " you you " --and --not -e " New New " --and --not -e "Slave Slave " --and --not -e " that that " --and --not -e " in in " --and --not -e " is is " -- 'src/*' | myprint "Duplicate words"
# Check for obsolete SugarCube macros
$GREP -E "<<display |<<click|<<.*\.contains" -- src/*.tw | myprint "ObsoleteMacro"
# Check for double articles
$GREP -E "\Wa an\W" -- src/*.tw | myprint "DoubleArticle"
# Check for incorrect articles
$GREP -i -E "\Wa (a|e|i|o|u)." -- src/*.tw | grep -a -i -vE "\Wa (un|eu|us|ut|on|ur|in)." | grep -a -i -vE "(&|<<s>>|UM)." | myprint "IncorrectArticle"
$GREP -i -E "\Wan (b|c|d|f|g|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)\w." -- src/*.tw | grep -a -i -vE "[A-Z]{3}" | myprint "IncorrectArticle"
# Check for $ sign mid-word
$GREP -i "\w$\w" -- src/*.tw | myprint "VarSignMidWord"
# check for $ sign at beginning of macro
$GREP '<<\s*\$' -- 'src/*'  | myprint "VarSignAtMacroStart"
# check our custom option macro is either options,option,optionlt,optionlte,optiongt,optiongte,optiondefault,optionstyle,optionif
$GREP -e '<<option' --and --not -e "<<option\(\|s\|lt\|lte\|gt\|gte\|default\|style\|if\)[ >]" -- 'src/*'  | myprint "OptionUnrecognized"
# check our custom option macro is: <<option variable "somestring"
$GREP -e "<<option[lg]te\? " --and --not -e "<<option[lg]te\?\s\+-\?[0-9]\+\s\+-\?[0-9]\+\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments1"
$GREP -e "<<optiondefault " --and --not -e "<<optiondefault\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments2"
$GREP -e "<<option\([lg]t\?\|default\) *>" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments3"
$GREP -e "<<option " --and --not -e "<<option\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\`\'\"].*[\'\"\`]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments4"
$GREP -e "<<if def [^(>]*[&|]" -- 'src/*' | myprint "AddBracketsAroundDef2"
# check for missing ; before statement
$GREP 'if $ ' -- 'src/*'  | myprint "Missing ; before statement"
$GREP 'elseif $ ' -- 'src/*'  | myprint "Missing ; before statement"
# Check for an unrecognized letter before >>
$GREP "[^]a-zA-Z0-9 \")}'+-\*\`] *>>" -- 'src/*' | myprint "StrangeCharacterAtEndOfCommand"
# Check for a . inside a <<>>
$GREP "<<[a-zA-Z]\([^\"'>]\|[^\"'>]>[^\"'>]\)*[a-zA-Z][.][^a-zA-Z]" | myprint "StrangeCharacterAfterDot"
# Check for @@.  instead of .@@
$GREP -E "@@(\.|,|;|:)\s" -- src/*.tw | myprint "WrongSelectorPunctuation"
$GREP "@@[a-z]\+;" -- 'src/*' | myprint "SelectorMissingDot"
# Check for .  instead of .
$GREP -E "(\.|,|;|:)\s" -- src/*.js | myprint "WrongSelectorPunctuation"
# Check for missing whitespace between operators
#$GREP -E "\(.(\+|\-|\*|\/|\=)." -- src/*.js :^src/001-lib/Jquery.js,^src/js/dTree.min.js,^devTools/tweeGo/storyFormats/sugarcube-2/format.js,^src/001-lib/mousetrap.js | myprint "MissingWhitespace"		disabled until I can figure out how to exclude files
# Check for @@ selector instead of  selector
$GREP "@@\." -- src/*.js | myprint "WrongSelectorUsed"
# Check for JSdoc inside function declaration
$GREP -e ".\=.\/\*\*" --or -e "slave\s\*\/" -- src/*.js --exclude 'src/interaction/main/mainLinks.js' | myprint "WrongJSdocFormat"	# this --exclude doesn't work
# Check for missing whitespace at end of /**/ style comments
#$GREP "\S\*\/" -- src/* --exclude 'src/001-lib/jquery/Jquery.js' | myprint "MissingWhitespace"		disabled until I can figure out to exclude files
# Check for var instead of let or const
#$GREP "var\s" -- src/*.js | myprint "UseLetOrConst"	disabled until I can figure out how to exclude certain files
# Check for non lethal or non-lethal instead of nonlethal
$GREP -i "non.lethal" -- 'src/*' | myprint "ShouldBeNonlethal"
# Check for missing quotation marks around selectors
#$GREP "span class=[^\"]" -- src/*.js --exclude 'src/001-lib/Jquery/Jquery.js' | myprint "MissingQuotes" disabled until I can figure out how to exclude files

(
cd src/

if [[ ! "$java" ]]; then
	# Check that we do not have any variables that we use only once.   e.g.	 $onlyUsedOnce
	# Ignore  *Nationalities
	cat $(find . -name "*.tw" ) | tr -c '$a-zA-Z' '\n'  | sed -n '/^[$]/p' | grep -v "Nationalities" | sort | uniq -u | sed 's/^[$]/-e[$]/' | sed 's/$/\\\\W/' | xargs -r  git grep -n --color | myprint "OnlyUsedOnce"
	cat $(find . -name "*.tw" ) | tr -c '.$a-zA-Z[]_' '\n' | sed 's/SugarCube\.State\.variables\./$/g' | sed -n -e 's/^[$]\(PC\|activeSlave\|\(slaves\|tanks\)\[[^]]*\]*\)[.]\([a-zA-Z]\+\).*$/[.]\3/p' | sort | uniq -u |sed 's/^\(.*\)$/-e\1\\\\\b/'  | xargs -r git grep -n --color | myprint "SlaveAttributeUsedOnce"
fi

$GREP "\$\(PC\|activeSlave\|slaves\|tanks\)[.][^a-zA-Z]" | myprint "UnexpectedCharAfterDot"

)

# Check that all the tags are properly opened and closed
if [[ "$java" ]]; then
	java -jar devTools/javaSanityCheck/SanityCheck.jar # and all the excluded stuff
else
	git ls-files "src/*.tw" | xargs -d '\n' ./devTools/check.py
fi


code:
**anything labeled accepts string will return any string entered into it**

slaveName:

Slave's current name
accepts string

birthName:

slave's original name
accepts string

slaveSurname:

Slave's current surname
accepts string

birthSurname:

slave's original surname
accepts string

genes:

slave sex
"XX"
"XY"

weekAcquired:

game week slave was acquired
accepts int
0 - Obtained prior to game start/at game start

origin:

slave's origin
accepts string

career:

career prior to enslavement
accepts string

$gratefulCareers
"unemployed"
"a prisoner"
"a refugee"
"homeless"
"a street urchin"
"a sweatshop worker"
"a child soldier"
"an orphan"
"a student from a boarding school"
"a beggar"
"a pick-pocket"
"from a lower class family"
"a shut-in"

$menialCareers
"an athlete"
"an apprentice"
"a courier"
"an engineer"
"a mechanic"
"a pilot"
"a ride attendant"
"an arcade attendant"
"a dropout"
"a mail carrier"
"a student from a private school"
"a fisherwoman"
"a truck driver"
"a factory worker"
"a farm laborer"
"a cook"
"a service worker"
"a paper girl"
"a part-time farm laborer"
"a maid"
"a housewife"
"a student"
"from an upper class family"
"a programmer"
"a student from a public school"
"from a middle class family"
"a nun"
"being homeschooled by her parents"
"a housesitter"
"a handmaiden"

$entertainmentCareers
"a party girl"
"a racing driver"
"a child actress"
"a camgirl"
"an actress"
"a journalist"
"a writer"
"a local news anchor"
"a weathergirl"
"a camwhore"
"a cocktail waitress"
"a cheerleader"
"a waitress"

$whoreCareers
"a prostitute"
"a child prostitute"
"a stripper"
"a saleswoman"
"a criminal"
"a porn star"
"a trophy wife"
"a Futanari Sister"
"a model"
"a juvenile delinquent"
"a mistress"
"a serial divorcee"
"a pageant star"
"an exotic dancer"

$HGCareers
"a lawyer"
"a military officer"
"a politician"
"a model-UN star"
"a student council president"
"a leading arcology citizen"
"a Queen"

$recruiterCareers
"a military recruiter"
"a club recruiter"
"a college scout"
"a girl scout"
"a missionary"
"a cult leader"
"a political activist"
"a princess"

$madamCareers
"a procuress"
"a pimp"
"a business owner"
"a manager"

$DJCareers
"a dancer"
"a musician"
"a classical dancer"
"a classical musician"
"a house DJ"
"an aspiring pop star"

$bodyguardCareers
"a soldier"
"an assassin"
"a transporter"
"an MS pilot"
"a bodyguard"
"a law enforcement officer"
"a child soldier"
"in a militia"
"a revolutionary"
"a military brat"
"captain of the kendo club"
"a kunoichi"
"a prince"

$wardenessCareers
"a security guard"
"a mercenary"
"an enforcer"
"a private detective"
"a bouncer"
"a prison guard"
"a street thug"
"a gang member"
"a bounty hunter"

$nurseCareers
"a nurse"
"a doctor"
"a medic"
"a paramedic"
"a medical student"

$attendantCareers
"a masseuse"
"a dispatch officer"
"a counselor"
"a lifeguard"
"a therapist"
"a psychologist"

$matronCareers
"a babysitter"
"a nanny"
"a practitioner"
"a wet nurse"
"an au pair"

$milkmaidCareers
"a beekeeper"
"a bullfighter"
"a cowgirl"
"a dairy worker"
"a milkmaid"
"a rodeo star"
"a shepherd"
"a veterinarian"
"a zookeeper"

$farmerCareers
"a farmer"
"a farmer's daughter"
"a rancher"
"a farmhand"

$stewardessCareers
"a secretary"
"a barista"
"a bartender"
"an air hostess"
"a professional bartender"
"an office worker"
"an investor"
"a charity worker"
"a caregiver"
"a wedding planner"
"an estate agent"

$schoolteacherCareers
"a principal"
"a teacher"
"a scientist"
"a professor"
"a teaching assistant"
"a private instructor"
"a librarian"
"a scholar"

-others
"a breeder"
"a Futanari Sister"
"a fuckdoll"
"a bioreactor"
"a slave"
"a dairy slave"
"a dairy cow"
"a breeding bull"

ID:

slave's ID
accepts int

prestige:

slave's prestige
0 - no prestige
1 - Prestigious
2 - Very prestigious
> 2 - Extremely prestigious

pornFeed:

is the studio outputting porn of her?
0 - no
1 - yes

pornFame:

how famous her porn is?
accepts int

pornFameSpending:

how much money is being spent on promoting her porn
accepts int

pornPrestige:

how famous she is in porn
0 - not
1 - some
2 - recognized
3 - world renowned

pornPrestigeDesc:

description to go with above pornPrestige
accepts string

porn:

porn performance of the slave. Has the following properties:

porn.fameType:

what porn she is known for
"none"
"orgasm denial"
"cum addiction"
"anal addiction"
"exhibition"
"breast expansion"
"abuse"
"sexual torture"
"self hating"
"breeder"
"submissive"
"cum"
"buttslut"
"humiliating"
"breast"
"dominant"
"sadistic"
"masochistic"
"pregnancy fetish"
"fuckdoll"
"rape"
"preggo"
"BBW"
"underage"
"weight gain"
"big dick"
"generic"
"deepthroat"
"unwilling"
"hardcore anal"
"softcore"
"romantic"
"really perverted"
"voyeur"
"unspeakable"
"huge insertion"

porn.focus:

what aspect of her the upgraded studio is focusing on for porn
"none"
"neglectful"
"cum addict"
"anal addict"
"attention whore"
"breast growth"
"abusive"
"malicious"
"self hating"
"breeder"
"submissive"
"cumslut"
"buttslut"
"humiliation"
"boobs"
"dom"
"sadist"
"masochist"
"pregnancy"
"fuckdoll"
"rape"
"preggo"
"BBW"
"loli"
"gainer"
"stud"
"porn"
"gagfuck queen"
"strugglefuck queen"
"painal queen"
"tease"
"romantic"
"perverted"
"caring"
"unflinching"
"size queen"

porn.fame.general:

generic porn fame
accepts int

porn.fame.fuckdoll:

fuckdoll porn fame
accepts int

porn.fame.rape:

rape porn fame
accepts int

porn.fame.preggo:

preggo porn fame
accepts int

porn.fame.BBW:

BBW porn fame
accepts int

porn.fame.gainer:

weight gain porn fame
accepts int

porn.fame.stud:

well hung porn fame
accepts int

porn.fame.loli:

underage porn fame
accepts int

porn.fame.deepThroat:

gagfuck queen porn fame
accepts int

porn.fame.struggleFuck:

strugglefuck queen porn fame
accepts int

porn.fame.painal:

painal queen porn fame
accepts int

porn.fame.tease:

tease porn fame
accepts int

porn.fame.romantic:

romantic porn fame
accepts int

porn.fame.pervert:

pervert porn fame
accepts int

porn.fame.caring:

caring porn fame
accepts int

porn.fame.unflinching:

unflinching porn fame
accepts int

porn.fame.sizeQueen:

size queen porn fame
accepts int

porn.fame.neglectful:

neglectful porn fame
accepts int

porn.fame.cumAddict:

cum addict porn fame
accepts int

porn.fame.analAddict:

anal addict porn fame
accepts int

porn.fame.attentionWhore:

attention whore porn fame
accepts int

porn.fame.breastGrowth:

breast growth porn fame
accepts int

porn.fame.abusive:

abusive porn fame
accepts int

porn.fame.malicious:

malicious porn fame
accepts int

porn.fame.selfHating:

self hating porn fame
accepts int

porn.fame.breeder:

breeder porn fame
accepts int

porn.fame.sub:

submissive porn fame
accepts int

porn.fame.cumSlut:

cumslut porn fame
accepts int

porn.fame.anal:

buttslut porn fame
accepts int

porn.fame.humiliation:

humiliation porn fame
accepts int

porn.fame.boobs:

boob porn fame
accepts int

porn.fame.dom:

dom porn fame
accepts int

porn.fame.sadist:

sadist porn fame
accepts int

porn.fame.masochist:

masochist porn fame
accepts int

porn.fame.pregnancy:

pregnancy porn fame
accepts int

prestigeDesc:

reason for prestige
accepts string
"She is notorious as a former abolitionist turned devoted slave."
"She is remembered for winning best in show as a cockmilker."
"She is remembered for winning best in show as a dairy cow."
"She is remembered for winning best in show as a breeder."
"She is a famed Free Cities slut, and can please anyone."
"She is a famed Free Cities whore, and commands top prices."

recruiter:

slave's relation to recruited slave? (used in some events)
"mother"
"daughter"
"older sister"
"younger sister"
"twin"
good idea to leave at 0

relation:

relation to relationTarget
accepts string
"twin"
"sister"
"mother"
"daughter"

relationTarget:

target of relation
accepts ID

relationship:

slave's relationship
-3 - married to you
-2 - emotionally bound to you
-1 - emotional slut
 0 - none
 1 - friends with relationshipTarget
 2 - best friends with relationshipTarget
 3 - friends with benefits with relationshipTarget
 4 - lover with relationshipTarget
 5 - relationshipTarget's slave wife

relationshipTarget:

target of relationship
accepts ID

rivalry:

slave's rivalry
0 - none
1 - dislikes rivalryTarget
2 - rival of rivalryTarget
3 - bitterly hates rivalryTarget

rivalryTarget:

target of rival
accepts ID

subTarget:

slave will serve subTarget
accepts ID

choosesOwnAssignment:

can slave choose own assignment
0 - no
1 - yes

assignment:

slave's assignment
	Unassigned to facility:
		"rest"
		"be a servant"
		"get milked"
		"serve the public"
		"please you"
		"whore"
		"take classes"
		"stay confined"
		"work a glory hole"
		"be a subordinate slave"

	Assigned to facility:
		"rest in the spa"
		"work as a nanny"
		"work as a servant" (Servants' Quarters)
		"work in the dairy"
		"work as a farmhand"
		"serve in the club"
		"serve in the master suite"
		"work in the brothel"
		"learn in the schoolroom"
		"be confined in the cellblock"
		"be confined in the arcade"
		"get treatment in the clinic"
		"live with your agent"
		"live with your Head Girl"

	Leadership positions:
		"be the Attendant"
		"be the Matron"
		"be the Stewardess"
		"be the Milkmaid"
		"be the Farmer"
		"be the DJ"
		"be your agent"
		"be your Concubine"
		"be the Madam"
		"be the Schoolteacher"
		"be the Wardeness"
		"be the Nurse"
		"be your Head Girl"
		"guard you"
		"recruit girls"

assignmentVisible:

shows assignment in descriptions
0 - yes
1 - no

sentence:

how many weeks a slave is sentenced to work a job
accepts int

training:
how far along slave is with being trained (skills, flaws, quirks)

toyHole:

which hole to focus on when serving you
"all her holes"
"mouth"
"boobs"
"pussy"
"ass"
"dick"

indenture:

How long her servitude will be.
-1 - not
 0+ - number of weeks remaining

indentureRestrictions:

2 - complete protection
1 - some protection
0 - no protection

birthWeek:

week she was born
int between 0-51

actualAge:

How old she really is.
Accepts int
starting retirement age is 45

physicalAge:

How old her body is.
Accepts int

visualAge:

How old her body looks.
Accepts int

ageAdjust:

progress towards modifying visualAge
Accepts int
-40 - add 1 to visualAge
+40 - subtract 1 from visualAge

ovaryAge:
How old her ovaries are. (used to trick menopause)
Accepts int

ageImplant:

has had facial surgery to reduce age
0 - no
1 - yes

health:

slave's 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

minorInjury:

slave has a minor injury
accepts string
"black eye"
"bruise"
"split lip"

trust:

slave's trust
-96-		- abjectly terrified
-95  - -51  - terrified
-50  - -21  - frightened
-20  -  20  - fearful
 21  -  50  - careful
 51  -  95  - trusting
 96+		- profoundly trusting

oldTrust:

used to calculate trust loss/gain
set to trust to start

devotion:

slave's devotion
-96-		- hate-filled
-95  - -51  - hateful
-50  - -21  - reluctant
-20  -  20  - careful
 21  -  50  - accepting
 51  -  95  - devoted
 96+		- worshipful

oldDevotion:

used to calculate devotion loss/gain
set to devotion to start

weight:

slave's 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

muscles:

slave's muscles
96+		- extremely muscular
31  - 95   - muscular
6   - 30   - toned
-5  - 5	- none
-30 - -6   - weak
-95 - -31  - very weak
-96-	   - frail

height:

accepts int
slave's height in cm
<150	 - petite
150-159  - short
160-169  - average
170-185  - tall
186+	 - very tall

heightImplant:

slave has height implant
-1 - -10 cm
0  - none
1  - +10 cm

nationality:

slave's nationality
accepts string
"slave"
"Afghan"
"Albanian"
"Algerian"
"American"
"Andorran"
"Angolan"
"Antiguan"
"Argentinian"
"Armenian"
"Aruban"
"Australian"
"Austrian"
"Azerbaijani"
"Bahamian"
"Bahraini"
"Bangladeshi"
"Barbadian"
"Belarusian"
"Belgian"
"Belizean"
"Beninese"
"Bermudian"
"Bhutanese"
"Bissau-Guinean"
"Bolivian"
"Bosnian"
"Brazilian"
"British"
"Bruneian"
"Bulgarian"
"Burkinabé"
"Burmese"
"Burundian"
"Cambodian"
"Cameroonian"
"Canadian"
"Cape Verdean"
"Catalan"
"Central African"
"Chadian"
"Chilean"
"Chinese"
"Colombian"
"Comorian"
"Congolese"
"a Cook Islander"
"Costa Rican"
"Croatian"
"Cuban"
"Curaçaoan"
"Cypriot"
"Czech"
"Danish"
"Djiboutian"
"Dominican"
"Dominiquais"
"Dutch"
"East Timorese"
"Ecuadorian"
"Egyptian"
"Emirati"
"Equatoguinean"
"Eritrean"
"Estonian"
"Ethiopian"
"Fijian"
"Filipina"
"Finnish"
"French"
"French Guianan"
"French Polynesian"
"Gabonese"
"Gambian"
"Georgian"
"German"
"Ghanan"
"Greek"
"Greenlandic"
"Grenadian"
"Guamanian"
"Guatemalan"
"Guinean"
"Guyanese"
"Haitian"
"Honduran"
"Hungarian"
"I-Kiribati"
"Icelandic"
"Indian"
"Indonesian"
"Iranian"
"Iraqi"
"Irish"
"Israeli"
"Italian"
"Ivorian"
"Jamaican"
"Japanese"
"Jordanian"
"Kazakh"
"Kenyan"
"Kittitian"
"Korean"
"Kosovan"
"Kurdish"
"Kuwaiti"
"Kyrgyz"
"Laotian"
"Latvian"
"Lebanese"
"Liberian"
"Libyan"
"a Liechtensteiner"
"Lithuanian"
"Luxembourgian"
"Macedonian"
"Malagasy"
"Malawian"
"Malaysian"
"Maldivian"
"Malian"
"Maltese"
"Marshallese"
"Mauritanian"
"Mauritian"
"Mexican"
"Micronesian"
"Moldovan"
"Monégasque"
"Mongolian"
"Montenegrin"
"Moroccan"
"Mosotho"
"Motswana"
"Mozambican"
"Namibian"
"Nauruan"
"Nepalese"
"New Caledonian"
"a New Zealander"
"Ni-Vanuatu"
"Nicaraguan"
"Nigerian"
"Nigerien"
"Niuean"
"Norwegian"
"Omani"
"Pakistani"
"Palauan"
"Palestinian"
"Panamanian"
"Papua New Guinean"
"Paraguayan"
"Peruvian"
"Polish"
"Portuguese"
"Puerto Rican"
"Qatari"
"Romanian"
"Russian"
"Rwandan"
"Sahrawi"
"Saint Lucian"
"Salvadoran"
"Sammarinese"
"Samoan"
"São Toméan"
"Saudi"
"Scottish"
"Senegalese"
"Serbian"
"Seychellois"
"Sierra Leonean"
"Singaporean"
"Slovak"
"Slovene"
"a Solomon Islander"
"Somali"
"South African"
"South Sudanese"
"Spanish"
"Sri Lankan"
"Sudanese"
"Surinamese"
"Swazi"
"Swedish"
"Swiss"
"Syrian"
"Taiwanese"
"Tajik"
"Tanzanian"
"Thai"
"Tibetan"
"Togolese"
"Tongan"
"Trinidadian"
"Tunisian"
"Turkish"
"Turkmen"
"Tuvaluan"
"Ugandan"
"Ukrainian"
"Uruguayan"
"Uzbek"
"Vatican"
"Venezuelan"
"Vietnamese"
"Vincentian"
"Yemeni"
"Zairian"
"Zambian"
"Zimbabwean"

race:

slave's race
accepts string
"white"
"asian"
"latina"
"black"
"pacific islander"
"southern european"
"amerindian"
"semitic"
"middle eastern"
"indo-aryan"
"mixed race"

origRace:

slave's original race
accepts string

pubicHColor:

pubic hair color
accepts string

skin:

skin color
accepts string

"pure white"
"ivory"
"white"
"extremely pale"
"very pale"
"pale"
"extremely fair"
"very fair"
"fair"
"light"
"light olive"
"tan"
"olive"
"bronze"
"dark olive"
"dark"
"light beige"
"beige"
"dark beige"
"light brown"
"brown"
"dark brown"
"black"
"ebony"
"pure black"

origSkin:

Slave's original skin color.
accepts string

markings:

slave markings
accepts string
"beauty mark"
"birthmark"
"freckles"
"heavily freckled"

eyes:

slave eyesight
-4 - empty
-3 - glass eye
-2 - blind
-1 - nearsighted
 1 - normal

eyesImplant:

0 - normal eyes
1 - artificial eyes

origEye:

slave's original eye color, defaults to their initial eye color.

eyeColor:

eye color
accepts string

"blue"
"black"
"brown"
"green"
"turquoise"
"sky-blue"
"hazel"
"pale-grey"
"white"
"pink"
"amber"
"red"

pupil:

shape of slave pupils
accepts string

"catlike"
"serpent-like"
"devilish"
"demonic"
"hypnotic"
"heart-shaped"
"wide-eyed"
"almond-shaped"
"bright"
"teary"
"vacant"
"circular"
"star-shaped"
"goat-like"

sclerae:

color of slave sclerae
accepts string

"white"
"blue"
"black"
"brown"
"green"
"turquoise"
"sky-blue"
"hazel"
"pale-grey"
"pink"
"amber"
"red"
"yellow"
"orange"

eyeWear:

accepts string
"none"
"glasses"
"blurring glasses"
"corrective glasses"
"blurring contacts"
"corrective contacts"

hears:

slave hearing
-2 - deaf
-1 - hard of hearing
 0 - normal

earWear:

accepts string
"none"
"hearing aids"
"muffling ear plugs"
"deafening ear plugs"

earImplant:

is there an inner ear implant device
0 - no
1 - yes

earShape:

the shape of their outer ears
"none"
"damaged"
"normal"
"pointy"
"elven"
"ushi"

earT:

type of kemonomimi ears if any
"none"
"neko"
"inu"
"kit"
"tanuki"
"human"

earTColor:

kemonomimi ear color
accepts hColor strings
"hairless"

smells:

sense of smell
-1 - no
0 - yes

tastes:

sense of taste
-1 - no
0 - yes

horn:

horn type if any
"none"
"curved succubus horns"
"backswept horns"
"cow horns"
"one long oni horn"
"two long oni horns"
"small horns"

hornColor:

horn color
accepts string

PTail:

Does she have a tail interface installed
0: no
1: yes

tail:

type of tail installed
"none"
"mod"
"combat"
"sex"

tailShape:

the current shape of their modular tail
"none"
"neko"
"inu"
"kit"
"kitsune"
"tanuki"
"ushi"

tailColor:

tail color
accepts hColor strings

origHColor:

slave's original hair color, defaults to their initial hair color.

hColor:

hair color
accepts string
"blonde"
"golden"
"platinum blonde"
"strawberry-blonde"
"copper"
"ginger"
"red"
"green"
"blue"
"pink"
"dark brown"
"brown"
"auburn"
"burgundy"
"chocolate brown"
"chestnut"
"hazel"
"black"
"grey"
"silver"
"white"

hLength:

hair length
accepts int
150	 - calf-length
149-100 - ass-length
99-30   - long
29-10   - shoulder-length
9-0	 - short

hStyle:

hair style
accepts string
"shaved"
"buzzcut"
"trimmed"
"afro"
"cornrows"
"bun"
"neat"
"strip"
"tails"
"up"
"ponytail"
"braided"
"dreadlocks"
"permed"
"curled"
"luxurious"
"bald"
"messy bun"
"messy"

pubicHStyle:

pubic hair style
accepts string
"hairless"
"waxed"
"in a strip"
"neat"
"bushy"
"very bushy"
"bushy in the front and neat in the rear"
"bald"

waist:

slave waist
 96+	   - masculine
 95 -  41  - ugly
 40 -  11  - unattractive
 10 - -10  - average
-11 - -40  - feminine
-40 - -95  - hourglass
-96-	   - absurd

corsetPiercing:

series of rings up the back that can be tied together
0 - no
1 - yes

amp:

is slave amputee
-5 - swiss army limbs
-4 - artificial limbs - Combat
-3 - artificial limbs - Beauty
-2 - artificial limbs - Sex
-1 - artificial limbs
 0 - no
 1 - yes

PLimb:

What level of prosthetic interface she has installed
0 - no interface
1 - basic interface
2 - advanced interface

heels:

are heels clipped
0 - no
1 - yes

voice:

slave voice
0 - mute
1 - deep
2 - feminine
3 - high, girly

voiceImplant:

has voice implant
0 - no
1 - yes, high
-1 - yes, low

electrolarynx:

has cybernetic voicebox
0 - no
1 - yes

accent:

slave accent
0 - none
1 - attractive
2 - heavy
3 - does not speak language

shoulders:

shoulder width
-2 - very narrow
-1 - narrow
 0 - feminine
 1 - broad
 2 - very broad

shouldersImplant:

has shoulder implant
-1 - shoulders -1
 0 - none
 1 - shoulders +1

boobs:

slave boob size
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-10499- massive

boobsMilk:

breast engorgement from unmilked tits
accepts int

boobsImplant:

slave implant size
0	  - no implants
1-199	 - small implants
200-399   - normal implants
400-599   - large implants
600+	  - boobsImplant size fillable implants

boobsImplantType:

0 - normal/none
1 - string

boobShape:

breast shape
accepts string
"normal"
"perky"
"saggy"
"torpedo-shaped"
"downward-facing"
"wide-set"

nipples:

nipple shape
accepts string
"huge"
"puffy"
"inverted"
"tiny"
"cute"
"partially inverted"
"fuckable"

nipplesPiercing:

nipple are pierced
0 - none
1 - yes
2 - heavily

nipplesAccessory:

what accessory, if any, or on her nipples
"none"

areolae:

slave areolae
0 - normal
1 - large
2 - unusually wide
3 - huge
4 - massive

areolaeShape:

slave areolae shape
accepts string

"heart"
"star"
"circle"

areolaePiercing:

edge of areolae are pierced
0 - none
1 - yes
2 - heavy

boobsTat:

boobs 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"

lactation:

slave lactation
0 - none
1 - natural
2 - implant

lactationDuration:

how many more weeks until lactation dries up
usually 2 as interactions and lact. implant reset it to 2
accepts int

induceLactation:

odds of inducing lactation
begins trying on breast play if over 10
accepts int

lactationAdaptation:

0  - 10  - not used to producing milk (no bonuses)
11 - 50  - used to producing milk
51 - 100 - heavily adapted to producing milk (big bonus)

hips:

hip size
-2 - very narrow
-1 - narrow
 0 - normal
 1 - wide hips
 2 - very wide hips
 3 - inhumanly wide hips

hipsImplant:

slave has hip implant
-1 - hips -1
 0 - none
 1 - hips +1

butt:

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

buttImplant:

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

buttImplantType:

0 - normal/none
1 - string

buttTat:

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"

face:

face attractiveness
-96-	   - very ugly
-95 - -41  - ugly
-40 - -11  - unattractive
-10 -  10  - attractive
 11 -  40  - very pretty
 41 -  95  - gorgeous
 96+	   - mind blowing

faceImplant:

facial surgery degree
0  - 14 - none
15 - 34 - Subtle Improvements
35 - 64 - Noticeable Work
65 - 99 - Heavily Reworked
100	 - Uncanny Valley

faceShape:

accepts string (will be treated as "normal")
"normal"
"masculine"
"androgynous"
"cute"
"sensual"
"exotic"

lips:

lip size (0-100)
0  - 10 - thin
11 - 20 - normal
21 - 40 - pretty
41 - 70 - plush
71 - 95 - huge (lisps)
96 - 100- facepussy (mute)

lipsImplant:

how large her lip implants are
See .lips

lipsPiercing:

lips pierced
0 - no
1 - yes
2 - heavy

lipsTat:

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"

teeth:

teeth type
accepts string
"normal"
"crooked"
"straightening braces"
"cosmetic braces"
"removable"
"pointy"
"baby"
"mixed"

tonguePiercing:

has tongue piercing
0 - no
1 - yes
2 - heavy

vagina:

vagina type
-1 - no vagina
 0 - virgin
 1 - tight
 2 - reasonably tight
 3 - loose
 4 - cavernous
10 - ruined

vaginaLube:

how wet she is
0 - dry
1 - wet
2 - soaking wet

vaginaPiercing:

has vagina piercing
0 - no
1 - yes
2 - heavy

vaginaTat:

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"

preg:

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

pregSource:

accepts ID. See Pregnancy Control section for more.
Who sired her pregnancy
 0 - unknown
-1 - player
-2 - citizen of your arcology
-3 - player's former master
-4 - male arc owner
-5 - player's client
-6 - Societal Elite
-7 - designer baby
-8 - an animal
-9 - futanari sister

pregType:

Number of children. Warning! Should be not changed after initial impregnation setup. See Pregnancy Control section for more.

readyOva:

Number of ready to be impregnated ova (override normal cases), default - 0. 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.

fertKnown:

Menstrual cycle known variable. To be used for fert cycle discover and things like pregnancy without a first period

0 - no
1 - yes

fertPeak:

Menstrual cycle control variable.

 0 - Danger week
1+ - safe week

ovaImplant:

Ovary implant type.

0 - no implants
"fertility" - higher chance of twins (or more)
"sympathy" - doubles eggs released
"asexual" - self-fertilizing

wombImplant:

Womb focused enhancements.
"none"
"restraint" - Provides structural support for extremely oversized pregnancies

broodmother:

has the slave been turned into 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)

broodmotherFetuses:
count of ova that broodmother implant force to release. Should be set with "broodmother" property together. If broodmother == 0 has no meaning.

broodmotherOnHold:

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.

broodmotherCountDown:

Number of weeks left until last baby will be birthed. Mainly informative only. Updated automatically at birth process based on remaining fetuses.
0-37

labor:

variable used to set off the birth events
1 - birth this week
0 - not time yet

cSec:

does she have a c-section scar
1 - yes
0 - no

bellyAccessory:

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"

labia:

labia type
0 - minimal
1 - big
2 - huge
3 - huge dangling

clit:

clit size
0 - normal
1 - large
2 - huge
3 - enormous
4 - penis-like
5 - like a massive penis

clitPiercing:

is clit pierced
0 - no
1 - yes
2 - heavy
3 - smart

clitSetting:

smart piercing setting
"off"
"none"
"all"
"no default setting"
"women"
"men"
"vanilla"
"oral"
"anal"
"boobs"
"submissive"
"humiliation"
"pregnancy"
"dom"
"masochist"
"sadist"

dick:

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

foreskin:

0  - circumcised
1+ - uncut*

*also affects foreskin size

anus:

anus size
0 - virgin
1 - tight
2 - loose
3 - very loose
4 - gaping

analArea:

used to calculate size of area around anus.
accepts int

dickPiercing:

is dick pierced
0 - no
1 - yes
2 - heavy

dickTat:

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"

prostate:

does the slave have a prostate?
0 - no
1 - normal
2 - hyperstimulated +20%
3 - modified hyperstimulated +50%

balls:*

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

scrotum:*

scrotum size
function relative to .ballSize

*If .balls gt 0 and .scrotum is 0, balls are internal

ovaries:

has ovaries
0 - no
1 - yes

anusPiercing:

has anus piercing
0 - no
1 - yes
2 - heavy

anusTat:

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"

makeup:

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

nails:

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

brand:

brand description
accepts 0 or string

brandLocation:

brand location
accepts string
"back"
"chest"
"ankles"
"wrists"
"thighs"

earPiercing:

has pierced ears
0 - no
1 - yes
2 - heavy

nosePiercing:

has pierced nose
0 - no
1 - yes
2 - heavy

eyebrowPiercing:

has eyebrow piercing
0 - no
1 - yes
2 - heavy

navelPiercing:

has navel piercing
0 - no
1 - yes
2 - heavy

shouldersTat:

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"

armsTat:

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"

legsTat:

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"

backTat:

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"

stampTat:

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"

skill:

Encapsulates all the skills
skill.vaginal:

0-10  - unskilled
11-30 -	basic
31-60 -	skilled
61-99 - expert
100+  - master

skill.oral:

0-10  - unskilled
11-30 -	basic
31-60 -	skilled
61-99 - expert
100+  - master

skill.anal:

0-10  - unskilled
11-30 -	basic
31-60 -	skilled
61-99 - expert
100+  - master

skill.whoring:

0-10  - unskilled
11-30 -	basic
31-60 -	skilled
61-99 - expert
100+  - master

skill.entertainment:

0-10  - unskilled
11-30 -	basic
31-60 -	skilled
61-99 - expert
100+  - master

skill.combat:

0 - unskilled
1 - skilled

skill.headGirl:

Her skill as a Head Girl
accepts int
default cap is 200

skill.recruiter:

Her skill as a recruiter
accepts int
default cap is 200

skill.bodyguard:

Her skill as a bodyguard
accepts int
default cap is 200

skill.madam:

Her skill as a brothel madam
accepts int
default cap is 200

skill.DJ:

Her skill as a DJ
accepts int
default cap is 200

skill.nurse:

Her skill as a nurse
accepts int
default cap is 200

skill.teacher:

Her skill as a teacher
accepts int
default cap is 200

skill.attendant:

Her skill as an attendant
accepts int
default cap is 200

skill.matron:

Her skill as a matron
accepts int
default cap is 200

skill.stewardess:

Her skill as a stewardess
accepts int
default cap is 200

skill.milkmaid:

Her skill as a milk maid
accepts int
default cap is 200

skill.farmer:

Her skill as a farmer
accepts int
default cap is 200

skill.wardeness:
Her skill as a wardeness
accepts int
default cap is 200

skill.servant:
Her skill as a servant.
accepts int
default cap is 200

skill.entertainer:
Her skill as an entertainer.
accepts int
default cap is 200

skill.whore:
Her skill as a whore.
accepts int
default cap is 200

livingRules:

"spare"
"normal"
"luxurious"

speechRules:

"restrictive"
"permissive"
"accent elimination"
"language lessons"

releaseRules:

"permissive"
"sapphic"
"masturbation"
"restrictive"
"chastity"

relationshipRules:

"restrictive"
"just friends"
"permissive"

lactationRules:

"none"
"induce"
"maintain"

standardPunishment:

"confinement"
"whipping"
"chastity"
"situational"

standardReward:

"relaxation"
"drugs"
"orgasm"
"situational"

useRulesAssistant:

follows rules or is exempt from them
0 - exempt
1 - obeys

diet:

"healthy"
"restricted"
"muscle building"
"fattening"
"slimming"
"XX"
"XY"
"XXY"
"cum production"
"cleansing"
"fertility"

dietCum:

how much of her diet is cum
0 - none
1 - supplemented
2 - nearly entirely

dietMilk:

how much of her diet is milk
0 - none
1 - supplemented
2 - nearly entirely

tired:

affects work performance, i.e. decreased pay for whoring
caused by poor/overcrowded sleeping conditions
0 - not tired
1 - tired

hormones:

-2 - heavy male hormones
-1 - male hormones
 0 - none
 1 - female hormones
 2 - heavy female hormones

drugs:

"no drugs"
"breast injections"
"butt injections"
"lip injections"
"fertility drugs"
"penis enhancement"
"testicle enhancement"
"psychosuppressants"
"steroids"
"hormone enhancers"
"hormone blockers"
"super fertility drugs"
"hyper breast injections"
"hyper butt injections"
"hyper penis enhancement"
"hyper testicle enhancement"
"female hormone injections"
"male hormone injections"
"anti-aging cream"
"appetite suppressors"
"penis atrophiers"
"testicle atrophiers"
"clitoris atrophiers"
"labia atrophiers"
"nipple atrophiers"
"lip atrophiers"
"breast redistributors"
"butt redistributors"
"sag-B-gone"
"growth stimulants"
"priapism agents"

aphrodisiacs:

-1 - anaphrodisiacs
 0 - none
 1 - standard
 2 - powerful

curatives:

0 - none
1 - preventatives
2 - curatives

chem:

if greater than 10 triggers side effects from drug use.
accepts int

addict:

how addict to aphrodisiacs slave is
0   - not
1-2 - new addict
3-9 - confirmed addict
10+ - dependent

fuckdoll:

fuckdoll degree
0  - not
1+ - fuckdoll

choosesOwnClothes:

0 - no
1 - yes

clothes:

may accept strings, use at own risk
"a ball gown"
"a biyelgee costume"
"a bra"
"a bunny outfit"
"a burkini"
"a burqa"
"a button-up shirt"
"a button-up shirt and panties"
"a chattel habit"
"a cheerleader outfit"
"a comfortable bodysuit"
"a cybersuit"
"a dirndl"
"a fallen nuns habit"
"a Fuckdoll suit"
"a gothic lolita dress"
"a halter top dress"
"a hanbok"
"a hijab and abaya"
"a hijab and blouse"
"a huipil"
"a kimono"
"a klan robe"
"a latex catsuit"
"a leotard"
"a long qipao"
"a maternity dress"
"a military uniform"
"a mini dress"
"a monokini"
"a mounty outfit"
"a nice maid outfit"
"a nice nurse outfit"
"a nice pony outfit"
"a niqab and abaya"
"a one-piece swimsuit"
"a penitent nuns habit"
"a police uniform"
"a red army uniform"
"a Santa dress"
"a scalemail bikini"
"a schoolgirl outfit"
"a schutzstaffel uniform"
"a skimpy loincloth"
"a slave gown"
"a slutty klan robe"
"a slutty maid outfit"
"a slutty nurse outfit"
"a slutty outfit"
"a slutty pony outfit"
"a slutty qipao"
"a slutty schutzstaffel uniform"
"a sports bra"
"a string bikini"
"a striped bra"
"a succubus outfit"
"a sweater"
"a sweater and cutoffs"
"a sweater and panties"
"a t-shirt"
"a t-shirt and jeans"
"a t-shirt and panties"
"a t-shirt and thong"
"a tank-top"
"a tank-top and panties"
"a thong"
"a toga"
"a tube top"
"a tube top and thong"
"an apron"
"an oversized t-shirt"
"an oversized t-shirt and boyshorts"
"attractive lingerie"
"attractive lingerie for a pregnant woman"
"battlearmor"
"battledress"
"body oil"
"boyshorts"
"chains"
"choosing her own clothes"
"clubslut netting"
"conservative clothing"
"cutoffs"
"cutoffs and a t-shirt"
"harem gauze"
"jeans"
"kitty lingerie"
"leather pants"
"leather pants and a tube top"
"leather pants and pasties"
"lederhosen"
"nice business attire"
"no clothing"
"overalls"
"panties"
"panties and pasties"
"pasties"
"restrictive latex"
"shibari ropes"
"slutty business attire"
"slutty jewelry"
"spats and a tank top"
"sport shorts"
"sport shorts and a sports bra"
"sport shorts and a t-shirt"
"stretch pants and a crop-top"
"striped panties"
"striped underwear"
"uncomfortable straps"
"Western clothing"

collar:

may accept strings, use at own risk
"none"
"ancient Egyptian"
"cruel retirement counter"
"uncomfortable leather"
"tight steel"
"shock punishment"
"dildo gag"
"heavy gold"
"pretty jewelry"
"nice retirement counter"
"bell collar"
"leather with cowbell"
"bowtie"
"neck corset"
"stylish leather"
"satin choker"
"preg biometrics"
"massive dildo gag"
"silk ribbon"
"ball gag"
"bit gag"
"porcelain mask"

shoes:

may accept strings, use at own risk
"none"
"heels"
"pumps"
"extreme heels"
"boots"
"flats"

vaginalAccessory:

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"

vaginalAttachment:

may accept strings, use at own risk
"none"
"vibrator"

dickAccessory:

may accept strings, use at own risk
"none"

chastityAnus:

whether the slave has a chastity device on their anus
0 - no
1 - yes

chastityPenis:

whether the slave has a chastity device on their penis
0 - no
1 - yes

chastityVagina:

whether the slave has a chastity device on their vagina
0 - no
1 - yes

legAccessory:

"none"
"short stockings"
"long stockings"

buttplug:

may accept strings, use at own risk
"none"
"plug"
"large plug"
"huge plug"
"long plug"
"long, large plug"
"long, huge plug"

buttplugAttachment:

Does the slave have an attachment on their buttplug
may accept strings, use at own risk
"none"
"tail"
"fox tail"
"cat tail"

intelligence:

slave 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

intelligenceImplant:

Degree of slave's education
0   - uneducated
1+  - partial education (not really used)
15+ - educated
30  - well educated

energy:

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

need:

how badly she needs sex.
0	 - sated

attrXX:

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

attrXY:

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, slave will be omnisexual*
*if energy > 95 and either attrXX or attrXY > 95, slave will be nymphomaniac

attrKnown:

0 - no
1 - yes

fetish:

"none"
"mindbroken"
"submissive"
"cumslut"
"humiliation"
"buttslut"
"boobs"
"sadist"
"masochist"
"dom"
"pregnancy"

fetishStrength:

how strong her fetish is (10-100)

10+ - enjoys fetish
60+ - likes fetish
95+ - loves fetish

fetishKnown:

is fetish known to player
0 - no
1 - yes

behavioralFlaw:

"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

behavioralQuirk:

"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

sexualFlaw:

"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

sexualQuirk:

"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

geneticQuirks:

0 - does not have
1 - carrier
2 - active
3 - inactive (used for triggering macromastia and kin to start growin)

{

macromastia - Oversized breasts. Breasts try to return to oversized state if reduced.
gigantomastia - 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.

fertility - slave is prone to having twins, shorter pregnancy recovery rate
hyperFertility - slave is prone to having multiples, even shorter pregnancy recovery rate
fertility + hyperFertility - slave will have multiples, even shorter pregnancy recovery rate

superfetation - pregnancy does not block ovulation, slave can become pregnant even while pregnant

gigantism - slave is abnormally tall
dwarfism - slave is abnormally short
gigantism + dwarfism - slave is very average

pFace - slave has a flawless face
uFace - slave has a hideous face
pFace + uFace - Depends on carrier status, may swing between average and above/below depending on it

albinism - slave has pale skin, white hair and red eyes

heterochromia - slave may have mismatched eye colors (Takes a string if not zero!)

rearLipedema - slave's ass never stops growing. Increased growth rate, reduced shrink rate.

wellHung - slave has (or will have) a huge dong

wGain - slave constantly gains weight unless dieting, easier to gain weight
wLoss - slave constantly loses weight unless gaining, easier to lose weight
wGain + wLoss - slave weight gain/loss fluctuates randomly

mGain - slave constantly gains muscle mass, easier to gain muscle.
mLoss - slave constantly loses muscle mass, easier to gain muscle.
mGain + mLoss - slave muscle gain/loss amplified, passively lose muscle unless building

androgyny - slave's body attempts to normalize to an androgynous state

}

counter:

Tracks slave participation in various actions and their outcomes

counter.milk:

amount of milk given
accepts int

counter.cum:

amount of cum given
accepts int

counter.births:

number of births as your slave
accepts int

counter.birthsTotal:

How many known times the slave has given birth.
accepts int

counter.oral:

oral sex count
accepts int

counter.vaginal:

vaginal sex count
accepts int

counter.anal:

anal sex count
accepts int

counter.mammary:

breast sex count
accepts int

counter.penetrative:

penetrative sex count
accepts int

counter.publicUse:

How many times the slave has had public sex in your arcology. Used to determine if she is your private toy or a lusted after slut.
accepts int

counter.pitKills:

number of slaves killed in pit fights
accepts int

counter.slavesFathered:

How many slaves she has sired under your ownership.

counter.PCChildrenFathered:

How many children she has fucked into you that you later birthed.

counter.slavesKnockedUp:

How many of your slaves she has knocked up.

counter.PCKnockedUp:

How many times she has knocked you up.

custom:

Encapsulates various custom properties, set by users

custom.tattoo:

adds a custom tattoo
accepts string

custom.label:

seems to just be a label appended after the slave's name
accepts string

custom.desc:

adds a custom description
accepts string

custom.title:

What the slave refers to you as.
accepts string
default ""

custom.titleLisp:

What the slave refers to you as, with a lisp.
accepts string
default ""

rudeTitle:

Does this slave refer to you rudely?
0 - not being rude
1 - insists on calling you a rude title

custom.image:

Custom slave image or null
default is null (no custom image)

custom.image.filename

holds the custom slave image file name (used if images are enabled)
accepts string

custom.image.format:

holds the custom slave image file format.
one of "png", "jpg", "gif" or "webm"
default "png"

custom.hairVector:

holds the custom hair vector base file name (used if vector images are enabled)
accepts string
default 0 (use hardcoded hair styles)

currentRules: []

array that holds active rules for the slave
wouldn't mess with it

bellyTat:

Slave has a tattoo that is only recognizable when she has a big belly.
"a heart"
"a star"
"a butterfly"

abortionTat:

Slave has a series of tattoos to denote how many abortions she has had.
-1: no tattoo
 0: assigned to have tattoo, may not have one yet
1+: number of abortion tattoos she has

birthsTat:

Slave has a series of tattoos to denote how many times she has given birth.
-1: no tattoo
 0: assigned to have tattoo, may not have one yet
1+: number of birth tattoos she has

bellySag:

How saggy her belly is after being distended for too long.
1+ changes belly description

bellySagPreg:

How saggy her belly is from being too pregnant.
1+ changes belly description and overrides/coincides with bellySag

induce:

Slave will give birth this week.
1 - true
0 - false

mpreg:

Male slave has an anal womb and can get pregnant.
1 - true
0 - false

inflation:

How much fluid is distending the slave.
1 - 2L
2 - 4L
3 - 8L

inflationType:

What kind of fluid is in the slave.
Accepts string
"none"
"water"
"cum"
"milk"
"food"
"aphrodisiac"
"curative"
"tightener"

inflationMethod:

How she is being filled.
0 - not
1 - oral
2 - anal
3 - orally by another slave

milkSource:

If inflationMethod 3, ID of the slave filling her with milk.
accepts ID

cumSource:

If inflationMethod 3, ID of the slave filling her with cum.
accepts ID

burst:

Slave's internals have ruptured. Used with poor health and overinflation.
1 - true
0 - false

pregKnown:

Do you and the slave know she is pregnant.
0 - no
1 - yes

pregWeek:

How long she has been pregnant (used in place of .preg when pregnancy speed up and slow down are used on a slave) (if negative, designates postpartum.)
accepts int

belly:

how big their 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

bellyPreg:

how big their 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)

bellyFluid: 0

how big their belly is in CCs (fluid distension only)
thresholds
100	- bloated
2000   - clearly bloated (2L)
5000   - very full (~1gal)
10000  - full to bursting (~2gal)

bellyImplant:

Does the slave 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

bellyPain:

Has the slave's belly implant been filled this week. Causes health damage for overfilling.
0 - no pain
1 - will experience pain
2 - cannot be filled this week

cervixImplant:

Does the slave 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

counter.birthsTotal:

How many known times the slave has given birth.
accepts int

pubertyAgeXX:

Target .physicalAge for female puberty to occur.
accepts int

pubertyXX:

Has the slave gone through female puberty.
0 - no
1 - yes

pubertyAgeXY:

Target .physicalAge for male puberty to occur.
accepts int

pubertyXY:

Has the slave gone through male puberty.
0 - no
1 - yes

scars:

not fully implemented.
0 - no scars
1 - light scarring
2 - heavy scarring
3 - fresh scarring
4 - burns
5 - menacing scar
6 - exotic scar

breedingMark:

In a eugenics society, this slave is a designated breeder.
1 - yes
0 - no

underArmHColor:

color of armpit hair
accepts string

underArmHStyle:

armpit hair style
accepts string
"hairless"
"waxed"
"shaved"
"neat"
"bushy"
"bald"

eyebrowHColor:

color of eyebrows
accepts string

eyebrowHStyle:

eyebrow hair style
accepts string

"bald"
"shaved"
"straight"
"rounded"
"natural"
"slanted inwards"
"slanted outwards"
"high-arched"
"elongated"
"shortened"
"curved"

eyebrowFullness:

eyebrow thickness
accepts string

"pencil-thin"
"thin"
"threaded"
"natural"
"tapered"
"thick"
"bushy"

bodySwap:

Slave is in original body.
0 - yes
1+ number of swaps (increases upkeep each time)

mother:

Slave's mother's ID
Accepts ID
Values between 0 and -20 are reserved.
 0 - unknown
-1 - player
-2 - citizen of your arcology
-3 - player's former master
-4 - male arc owner
-5 - player's client
-6 - Societal Elite
-7 - designer baby
-9 - Futanari Sister

father:

Slave's father's ID
Accepts ID
Values between 0 and -20 are reserved.
 0 - unknown
-1 - player
-2 - citizen of your arcology
-3 - player's former master
-4 - male arc owner
-5 - player's client
-6 - Societal Elite
-7 - designer baby
-9 - Futanari Sister

sisters:

How many sisters the slave has, do not tamper with.

daughters:

How many daughters the slave has, do not tamper with.

canRecruit:

Can the slave recruit. Non-random slaves should be left off.
0 - no
1 - yes

HGExclude:

Is the Head Girl permitted to fuck this slave pregnant.
0 - no
1 - yes

ballType:

What species of sperm she produces.
"human"
"sterile"
"dog"
"pig"
"horse"
"cow"

eggType:

What species of ovum she produces.
"human"
"dog"
"pig"
"horse"
"cow"

reservedChildren:

How many of her children are tagged to be incubated. Carefully balanced, do not manually touch.
! Secondary|legacy. Can be used for caching only, use JS:
  WombSetGenericReserve(slave, "incubator", reservedChildren) to setup primary data. Not add count, but set it to reservedChildren
  WombCleanGenericReserve(slave, "incubator", reservedChildren) to remove reserve. To clean all incubator reserve use 9999 for reservedChildren.

reservedChildrenNursery:

How many of her children are tagged to be put in the Nursery. Highly likely to break.
! Secondary|legacy. Can be used for caching only, use JS:
  WombSetGenericReserve(slave, "nursery", reservedChildren) to setup primary data. Not add count, but set it to reservedChildren
  WombCleanGenericReserve(slave, "nursery", reservedChildren) to remove reserve. To clean all nursery reserve use 9999 for reservedChildren.

  Reserve type ("incubator", "nursery", etc) do not affect each other types, and can be safely used without any checks.
  Also if you try to reserve more then available and not already reserved fetuses in slave womb, will be reserved only actually existing free fetuses. If you try to clean reserve more then present - will be cleaned only actually existing reserve.
  These reserve functions always use first available fetus(es) - this will be most ready to birth fetuses (older).

  WombCleanAllReserve(slave) - will clean all reserves for slave (any type).
  x = WombReserveCount(slave, reserveType) - x will be set to count of fetuses that have reserveType. (reserveType is "incubator", "nursery", etc.)
  x = FetusGlobalReserveCount(reserveType) - x will be set to global count of reserved fetuses of reserveType. Also count PC.womb fetuses.

choosesOwnChastity:

Eugenics variable. Is the slave allowed to choose to wear chastity.
0 - no
1 - yes

pregControl:

Is she on gestation altering drugs?
"none"
"slow gestation"
"speed up"
"labor suppressors"

readyLimbs:

Array that holds an amputee's constructed limbs for anon's hotswap mod. Elements of the array should be objects.
.type - type of prosthetic limb, ranges from -1 to -5, see .amp for more information
.armsTat - any string, see .armsTat for standard strings
.legsTat - any string, see .legsTat for standard strings

bald:

Slave has undergone hair removal surgery
0 - no
1 - yes

origBodyOwner:

accepts string
Who, if relevant, the body belonged to.

death:

Cause of slave death.

hormoneBalance:

Slave's current hormonal balance, directs saHormones changes
-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

onDiet:

Whether a slave is permitted to eat Hedonistic Decadence's specialized slave food.
0 - no
1 - yes

breastMesh:

Does the slave have the breast shape maintaining mesh implant.
0 - no
1 - yes

prematureBirth:

Used to denote a slave giving birth prematurely.
0 - no
1 - yes

premature:

Was the slave born prematurely?
0 - no
1 - yes

vasectomy:

Has the slave had a vasectomy?
0 - no
1 - yes

haircuts:

Is the slave's hair under constant maintenance?
0 - no
1 - yes

newGamePlus:

Used to tell if the slave is from this game or a previous.
0 - no
1 - yes

tankBaby:

Whether she was put in the incubator at birth
accepts int
0 - no
1 - yes, comforting
2 - yes, terrifying

missingEyes:

are eyes missing?
0 - none
1 - yes, left
2 - yes, right
3 - yes, both

missingArms:

are arms missing?
0 - none
1 - yes, left
2 - yes, right
3 - yes, both

missingLegs:

are legs missing?
0 - none
1 - yes, left
2 - yes, right
3 - yes, both

geneMods:

	NCS:
		Does slave have induced NCS?
		0 - no
		1 - yes
	rapidCellGrowth:
		Has the slave undergone the elasticity (plasticity) treatment?
		0 - no
		1 - yes

slaveCost:

Amount of cash paid to acquire the slave
accepts negative numbers, 0, or 1.
1 - unknown price
0 - free
negative - amount paid

lifetimeCashExpenses:

Amount of cash you have spent because of this slave
accepts negative numbers or 0

lifetimeCashIncome:

Total amount of cash you have earned because of this slave
accepts positive numbers or 0

lastWeeksCashIncome:

Amount of cash you have earned because of this slave last week
accepts positive numbers or 0

lifetimeRepExpenses:
lifetimeRepIncome:
lastWeeksRepIncome:
Not currently used, will work similarly to the cash variables above

How to set up your own hero slave.

-The default slave template used is defined in src/js/SlaveState.js

Making your slave; add their name to the following, then go down the documentation adding in your changes.
-each variable must be separated from the last by a comma followed by a space
-each variable must be assigned to _HS
-if your slave's variable matches the default, you do not have to list it
-strings MUST be in " or your slave will not compile properly

<<set _HS =  App.Entity.SlaveState.makeSkeleton()>>
<<set _HS.slaveName = "STANDARD", _HS.birthName = "STANDARD", _HS.ID = _i++>>
<<set $heroSlaves.push(_HS)>>

Once finished, add it into "customSlavesDatabase".
To test if your slave is functioning, start up a normal game, swap to cheat mode, max your rep, and view other slaveowner's stock in the slave market. If you cannot find your slave in the list, and you didn't start the game with your slave, you should double check your slave for errors. If a slave named "Blank" is present, then you likely messed up. Once you find your slave, check their description to make sure it is correct. If it is not, you messed up somewhere in setting them up.

@@.green;				- something good or health/libido/attraction gain
@@.red;					- something bad or health/libido/attraction loss
@@.hotpink;				- devotion gain
@@.mediumorchid;		- devotion loss
@@.mediumaquamarine;	- trust gain with higher devotion
@@.orangered;			- trust gain with lower devotion
@@.gold;				- trust loss
@@.coral;				- notable change and fetish loss
@@.lightcoral;			- fetish strength gain, fetish acquisition and fetish discovery
@@.lime;				- growth/improvement to a body part (reversed in some cases)
@@.orange;				- shrinking/degradation of a body part (reversed in some cases)
@@.lightsalmon;			- rivalry
@@.lightgreen;			- relationship

wombJS.tw subsystem:

This is a womb processor/simulator script. It takes care of calculation of belly sizes based on individual fetus sizes, with full support of broodmothers implant random turning on and off possibility. Also this can be expanded to store more parents data in each individual fetus in future.
Should be initialized for all slaves not female only. Currently it's not affect pregnancy mechanic in game directly - it's addon for better sizes calculation, and optional mechanics for future usage.
Design limitations:
- Mother can't gestate children with different speeds at same time. All speed changes apply to all fetuses.
- Sizes of individual fetuses updated only on call of WombGetVolume - not every time as called WombProgress. This is for better overall code speed.
- For broodmothers we need actual "new ova release" code now. But it's possible to control how many children will be added each time, and so - how much children is ready to birth each time.

For new generated slaves automatically called WombInit function to do initial setup. But it's can be called at any time "just in case", if code need to be completely sure that womb exists and correctly initialized. If .preg and pregType is set above 0 at time of call with empty womb array - fetuses will be generated too.

Pregnancy control, best practices ($activeSlave used as sample, can be any slave related variable or $PC for player character):

Impregnation:

<<set WombImpregnate($activeSlave, 3, -1, 15)>>
$activeSlave, 3 fetuses, -1 - player is father, 15 week is initial time for fetuses. Can be used on already pregnant slaves (broodmothers use it).
<<SetSlaveBelly $activeSlave>>
Last line needed only if you need to show description with changed state immediately, an advanced initial pregnancy time set (showing already).

Advancing pregnancy:

<<set WombProgress($activeSlave, 1)>>
Advancing 1 week. Normally it's called by End Week processing for all slaves. Old method with using .preg++ on slave supported too, but better to use this new.

Birth checking:

<<if WombBirthReady($activeSlave, 40) > 0>>
Check if we have any babies in womb with is at minimum 40 week of gestation age? Age can be any.

Birthing:

<<set _babies = WombBirth($activeSlave, 34)>>
In array _babies will be placed all babies from womb of $activeSlave who gestation age at least 34 weeks (can be any). Others will be leaved in womb.
Optionally:
<<set WombFlush($activeSlave)>>
Will empty womb. You also still should set .preg .pregType .pregSource .pregWeek to 0, or call WombNormalizePreg.
_babies here become normal array - we can do with it as with any other array in sugarcube. _babies.length - size, _babies[0] - first element, etc. Contains all babies object, with their age, sex, volume/size, and father ID. Right now - not used anywhere but useful for possible incubator improvements in future at least.

Usage reference without sugarcube code (samples):

WombInit($slave) - before first pregnancy, at slave creation, of as backward compatibility update. Can generate proper pregnancy based on preg, pregType, and pregSource properties too. Can be little glitchy with broodmothers in this case, if their preg != pregType (or pregType can't be divided by preg with integer result).

WombImpregnate($Slave, $fetus_count, $fatherID, $initial_age) - should be added after normal impregnation code, with already calculated fetus count. ID of father - can be used in future for processing children from different fathers in one pregnancy. Initial age normally 1 (as .preg normally set to 1), but can be raised if needed. Also should be called at time as broodmother implant add another fetus(es), or if new fetuses added from other sources in future (transplanting maybe?)

WombProgress($slave, $time_to_add_to_fetuses) - after code that update $slave.preg, time to add should be the same.

$isReady = WombBirthReady($slave, $birth_ready_age) - how many children ready to be birthed if their time to be ready is $birth_ready_age (40 is for normal length pregnancy). Return int - count of ready to birth children, or 0 if no ready exists.

$children = WombBirth($slave, $birth_ready_age) - for actual birth. Return array with fetuses objects that birthed (can be used in future) and remove them from womb array of $slave. Should be called at actual birth code in sugarcube. fetuses that not ready remained in womb (array).

WombFlush($slave) - clean womb (array). Can be used at broodmother birthstorm or abortion situations in game. But birthstorm logically should use WombBirth($slave, 35) or so before - some children in this event is live capable, others is not.

$slave.bellyPreg = WombGetWolume($slave) - return double, with current womb volume in CC - for updating $slave.bellyPreg, or if need to update individual fetuses sizes.

_time = WombMinPreg($activeSlave) - age of most young fetus in womb.

_time = WombMaxPreg($activeSlave) - age of most old fetus in womb.

WombUpdatePregVars($activeSlave) - automatically update $activeSlave.preg, $activeSlave.pregType, $activeSlave.bellyPreg to actual values based on womb fetuses.

WombNormalizePreg($activeSlave) - automatically correct all pregnancy related properties of given $activeSlave. Also it advances pregnancy if detected old .preg++ method used on slave and womb simulation is late. Can be called at any time without conditions checks - function do all needed checks by itself. Call of this function do NOT advance pregnancy by itself.

WombZeroID($activeSlave, _SlaveID) - automatically scan all fetuses and if their father ID matched - it will be replaced with zero. After it actor pregnancy related variables (like .pregSource) will be updated. Used mainly in process of removing slaves from game, to clean father's ID of unborn children of remaining slaves.

All this womb system can be much more automated (.preg .pregType .pregSource .pregWeek may have to be done in a way, that they will have no need to be controlled manually anywhere at all. Just will be set fully automatically). But in this case many changes in present game code needed, to REMOVE legacy code.
Right now they are set correctly, based on state of .womb object through pregnancy, but not outside. Also old style pregnancy initiation (setting only .preg to >0 and .pregType to >=1 ) working too - WombImpregnation function for proper setup of .womb will be called on next SetBellySize call. Also old style pregnancy progression through using .preg++ is supported too, but can have minor issues with character descriptions in some cases, if SetBellySize widget not called before descriptions widgets.

Advanced pregnancy control structure:

Now, with support of human-animal pregnancy, there is need for ability to change values that been constant before. New structure designed for it.

.pregData property for slave should now contain object with describable pregnancy process. By default it will be set to human data. Templates stored in setup.pregData.x where "x" - name of species.

<<set slave.pregData = setup.pregData.human>>

In code at any time properties that contain data can be accessed now. Properties is RW, so slaves can be changed individually later. Example:

<<if slave.pregData.type == "human">>
or
<<set slave.pregData.normalOvaMin = 2, slave.pregData.normalOvaMax = 4>> (setting normal ova count 2-4 on every ovulation).

	Property list:

	type			- name of species. Should math slave.ovaType
	normalOvaMin	- normal/base ova count on ovulation (minimal)
	normalOvaMax	- normal/base ova count on ovulation (maximal)
	normalBirth		- typical normal pregnancy length in weeks
	minLiveBirth	- typical weeks that guarantee at least 90% chance to fetus survival if normal birth occur.
	fetusWeek		- array with weeks control points.
	fetusSize		- array with size control points.
	fetusCTR		- array with CTR control points.

	These three array is linked, and values in second and third should be in the same order as in first. (Week of .fetusWeek[i] is correspond to .fetusSize[i] and fetusCTR[i])
	Control points - it's points of graph as if it built on paper (one axis - fetusWeek, other - fetusSize/fetusCTR). This graph data is used to get actual size of fetus, so no need for manual setting of every week data in array.

	What is CTR? In most medical data, human fetus size (length) measured as "crown to rump" from 1 to 20 weeks, and "crown to heel" later. Formula that calculate volume of womb should get data in single format. So there is need CTR rate - value that describe difference between full "crown to heel" and "crown to rump" length of fetus (also it's can be used to control approximation of legs, hands and tails volume). For most animal fetus data it's always 1 as they are not bipedal and "crown to rump" is natural measurements for them. But CTR rate changes might be needed to get more accurate results for volume calculations, as fetus is not sphere and length - not always have the same relation to it's volume.

path: slave variables documentation - Pregmod.txt


code:
/* eslint-disable no-var */
/*
* SugarCube executes scripts via eval() inside a closure. Thus to make App global,
* we declare it as a property of the window object. I don't know why 'App = {}'
* does not work.
*/
window.App = { };
// the same declaration for code parsers that don't like the line above
var App = window.App || {};

App.Data = {};
App.Debug = {};
App.Entity = {};
App.Entity.Utils = {};
App.UI = {};
App.UI.View = {};
App.Utils = {};
App.Interact = {};
App.Desc = {};
App.Facilities = {
	Brothel: {},
	Club: {},
	Dairy: {},
	Farmyard: {},
	ServantsQuarters: {},
	MasterSuite: {},
	Spa: {},
	Nursery: {},
	Clinic: {},
	Schoolroom: {},
	Cellblock: {},
	Arcade: {},
	HGSuite: {}
};
App.SF = {};


code:
/* eslint-disable */
Mousetrap.bind("enter", function() {
	$("#story-caption #endWeekButton a.macro-link").trigger("click");
});
Mousetrap.bind("space", function() {
	$("#story-caption #nextButton a.macro-link").trigger("click");
});
Mousetrap.bind("c", function() {
	$("#story-caption #manageArcology a.macro-link").trigger("click");
});
Mousetrap.bind("p", function() {
	$("#story-caption #managePenthouse a.macro-link").trigger("click");
});
Mousetrap.bind("n", function() {
	$("#story-caption #manageEconomy a.macro-link").trigger("click");
});
Mousetrap.bind("left", function() {
	$("#prevSlave a.macro-link").trigger("click");
	$("#prevRule a").trigger("click");
	$("#prevChild a.macro-link").trigger("click");
});
Mousetrap.bind("q", function() {
	$("#prevSlave a.macro-link").trigger("click");
	$("#prevRule a").trigger("click");
	$("#prevChild a.macro-link").trigger("click");
});
Mousetrap.bind("shift+left", function() {
	$("#firstRule a").trigger("click");
});
Mousetrap.bind("shift+q", function() {
	$("#firstRule a").trigger("click");
});
Mousetrap.bind("right", function() {
	$("#nextSlave a.macro-link").trigger("click");
	$("#nextRule a").trigger("click");
	$("#nextChild a.macro-link").trigger("click");
});
Mousetrap.bind("shift+right", function() {
	$("#lastRule a").trigger("click");
});
Mousetrap.bind("e", function() {
	$("#nextSlave a.macro-link").trigger("click");
	$("#nextRule a").trigger("click");
	$("#nextChild a.macro-link").trigger("click");
});
Mousetrap.bind("shift+e", function() {
	$("#lastRule a").trigger("click");
});
Mousetrap.bind("f", function() {
	$("#walkpast a.macro-link").trigger("click");
});
Mousetrap.bind("h", function() {
	$("#manageHG a").trigger("click");
});
Mousetrap.bind("s", function() {
	$("#buySlaves a.macro-link").trigger("click");
});
Mousetrap.bind("a", function() {
	$("#managePA a.macro-link").trigger("click");
});
Mousetrap.bind("b", function() {
	$("#manageBG a").trigger("click");
});
Mousetrap.bind("u", function() {
	$("#manageRecruiter a").trigger("click");
});
Mousetrap.bind("o", function() {
	$("#story-caption #optionsButton a.macro-link").trigger("click");
});
Mousetrap.bind("y", function() {
	$("#story-caption #policyButton a.macro-link").trigger("click");
});
Mousetrap.bind("f", function() {
	$("#story-caption #FSButton a.macro-link").trigger("click");
});
Mousetrap.bind("t", function() {
	$("#story-caption #PAOButton a.macro-link").trigger("click");
});
Mousetrap.bind("v", function() {
	$("#story-caption #URButton a.macro-link").trigger("click");
});
Mousetrap.bind("r", function() {
	$("#RAButton a.macro-link").trigger("click");
});
Mousetrap.bind("x", function() {
	$("#story-caption #managePerson a.macro-link").trigger("click");
});
Mousetrap.bind("z", function() {
	$("#story-caption #SFMButton a.macro-link").trigger("click");
});
Mousetrap.bind("d", function() {
	$("#story-caption #edictButton a.macro-link").trigger("click");
});
Mousetrap.bind("shift+s", function() {
	$("#story-caption #securityHQ a.macro-link").trigger("click");
});
Mousetrap.bind("shift+a", function() {
	$("#story-caption #secBarracks a.macro-link").trigger("click");
});
Mousetrap.bind("shift+h", function() {
	$("#story-caption #propHub a.macro-link").trigger("click");
});
Mousetrap.bind("shift+r", function() {
	$("#story-caption #riotCenter a.macro-link").trigger("click");
});
Mousetrap.bind("shift+c", function() {
	$("#story-caption #manageCorporation a.macro-link").trigger("click");
});


code:
:: StorySettings
ifid:18dfc483-910e-4d3b-ac31-71ae10c5015a

:: Start [nobr]

:: StoryTitle

Free Cities


code:
/* eslint-disable no-undef */
/* Main SugarCube configuration file. */

/* Change the starting passage from the default 'start' to 'Alpha disclaimer'. */
Config.passages.start = "init";

/* Disable forward/back buttons in panel. */
Config.history.controls = false;

/* Set Autosaves. */
Config.saves.autosave = "autosave";

/* Save only one game state. */
Config.history.maxStates = 1;

/* Set to 'true' to enable SugarCube's debug mode.
Note: This is an 'engine level' debug mode, completely separate from the game's debug mode. */
Config.debug = false;


code:
.textWithTooltip {
	position: relative;
	display: inline-block;
	text-decoration: underline;
	text-decoration-color: lightblue;
}

.textWithTooltip .tooltip {
	visibility: hidden;
	display: block;
	font-size: smaller;
	width: 20em;
	margin-left: -10em;
	background-color: slategray;
	color: black;
	text-align: center;
	border-radius: 3px;
	padding: 3px;
	position: absolute;
	z-index: 1;
	bottom: 100%;
	left: 50%;
}

.textWithTooltip .tooltip ul {
	margin-left: 5px;
	margin-right: 0px;
	padding-left: 10px;
	padding-right: 0px;
	text-align: left;
}

.textWithTooltip .tooltip::after {
	content: "";
	position: absolute;
	top: 100%;
	left: 50%;
	margin-left: -5px;
	border-width: 5px;
	border-style: solid;
	border-color: #555 transparent transparent transparent;
}

.textWithTooltip:hover .tooltip {
	visibility: visible;
	opacity: 1;
	transition-delay: 0.3s;
}


code:
div.tab {
	overflow: hidden;
}

div.tab button {
	background-color: #252525;
	border: solid 2px #252525;
	color: #68d;
	float: left;
	outline: none;
	cursor: pointer;
	padding: 1ex 1ex;
	transition: 0.3s;
	font-size: large;
}

div.tab button:hover {
	background-color: #414141;
}

div.tab button.active {
	background-color: #050505;
	color: #c7cedf;
}

.tabcontent {
	display: none;
	padding: 6px 12px;
	-webkit-animation: fadeEffect 1s;
	animation: fadeEffect 1s;
}

@-webkit-keyframes fadeEffect {
	from {
		opacity: 0;
	}

	to {
		opacity: 1;
	}
}

@keyframes fadeEffect {
	from {
		opacity: 0;
	}

	to {
		opacity: 1;
	}
}