diff --git a/devTools/Script to convert SC to JS/SC to JS 1.py b/devTools/Script to convert SC to JS/SC to JS 1.py index 45b41bca4270124a08a76b34555e045e46cbc7cc..ddece0976db593759b9d43e04e843f87ebe6511e 100644 --- a/devTools/Script to convert SC to JS/SC to JS 1.py +++ b/devTools/Script to convert SC to JS/SC to JS 1.py @@ -99,7 +99,4 @@ editor.rereplace(r"( r.push.*?[^{])(slave\.[^ ,']*)", r"\1${\2}") #remove incompatible comment style editor.rereplace(r"/%", r"/*") -editor.rereplace(r"%/", r"*/") - -# replace random() with jsRandom() -editor.rereplace(r"random\(", r"jsRandom\(") \ No newline at end of file +editor.rereplace(r"%/", r"*/") \ No newline at end of file diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js index b2937ef78dae9dd9780d0354c20d094c7aa06211..9bf02642129d272dfdab8529fc3ea7e943b9f383 100644 --- a/js/003-data/gameVariableData.js +++ b/js/003-data/gameVariableData.js @@ -856,7 +856,7 @@ App.Data.resetOnNGPlus = { }, arcadePrice: 2, clubSlaveSexAmount: 0, - + /** @type {App.Entity.SlaveState|number} */ shelterSlave: 0, shelterSlaveBought: 0, shelterAbuse: 0, diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js index 13ad51986035fed5b87ce0d805d31816f9179b0b..11316f3222cc1d68c94e1ca7b1791f1c4c3c2377 100644 --- a/js/003-data/miscData.js +++ b/js/003-data/miscData.js @@ -1982,6 +1982,8 @@ App.Data.misc.lawlessMarkets = [ "LDE" ]; +App.Data.misc.schools = ["GRI", "HA", "NUL", "SCP", "TCR", "TFS", "TGA", "TSS", "LDE", "TUO"]; + App.Data.weather = { nice: [ {name: "Sunny", severity: 1}, diff --git a/src/Corporation/corporateMarket.tw b/src/Corporation/corporateMarket.tw deleted file mode 100644 index 0fcb02f061b6bbebacfa73b1cbdcbee8ead24da6..0000000000000000000000000000000000000000 --- a/src/Corporation/corporateMarket.tw +++ /dev/null @@ -1,115 +0,0 @@ -:: Corporate Market [nobr] - -<<set $nextButton = "Back", $nextLink = "Main", $slaveMarket = "corporate">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -<<if $corp.SpecGender == 2>> - <<setNonlocalPronouns 100>> -<<elseif $corp.SpecGender == 1>> - <<setNonlocalPronouns 0>> -<<else>> - <<setNonlocalPronouns $seeDicks>> -<</if>> - -You're in your corporation's flagship slave market. - -The corporation pays you only nominal rent for this space, but will offer you a discount on slaves here based on your shares in it. Additionally, having the corporation's premiere products sold here in $arcologies[0].name will associate them with you, allowing your reputation to improve the corporate brand. A pretty -<<if $corp.SpecDick == 1 && $corp.SpecPussy == 1>>futanari<<elseif $corp.SpecGender == 2>><<if $corp.SpecBalls == -1>>clipped<<else>>shemale<</if>><</if>> -sales<<if $corp.SpecAge == 3>>_womanU<<else>>_girlU<</if>> in a slutty suit greets you properly. _HeU's a corporate slave chosen for loyalty and intelligence, and to physically represent the brand. -<<if $corp.SpecHeight == 5>> - Even before _heU engaged with you _hisU towering height made _himU stand out and caught your eye, from up close _heU's even more impressive. -<<elseif $corp.SpecHeight == 1>> - _HeU's so short you have to physically look down on _himU. -<</if>> -<<if $corp.SpecInjection == 4>> - _HeU has awe-inspiring breasts which _hisU suit jacket helps support; even so, their bottoms reach past _hisU navel. -<<elseif $corp.SpecInjection == 5>> - _HeU has gigantic, milk-swollen breasts almost spilling out of _hisU suit. -<<elseif $corp.SpecImplants == 2>> - _HeU has enormous fake tits that ride inhumanly high on _hisU chest. -<<elseif $corp.SpecInjection == 3>> - _HeU has huge tits and a nice broad butt which _hisU tight skirt hugs closely. -<<elseif $corp.SpecImplants == 1>> - _HeU has nice fake bimbo tits and a silicone bubble butt. -<<elseif $corp.SpecInjection == 2>> - _HeU's nice and curvy, with nice breasts and a lovely ass. -<<elseif $corp.SpecInjection == 1>> - _HeU has cute little breasts and a petite rump. -<</if>> -<<if $corp.SpecCosmetics == 1>>_HisU face is flawless.<</if>> -<<if ($corp.SpecRaces.length == 1) || $corp.SpecNationality>> - <<if $corp.SpecNationality>> - <<set _corpSpecRace = $corp.SpecNationality>> - <<elseif ($corp.SpecRaces.length == 1)>> - <<set _corpSpecRace = $corp.SpecRaces.random()>> - <</if>> - _HeU's <<print _corpSpecRace>>, of course<<if $corp.SpecAccent == 1>>, and has a cute accent<</if>>. -<</if>> -<<if $corp.SpecHormones == 1>> - _HisU voice is soft and feminine, and _heU bats _hisU eyes at you. -<<elseif $corp.SpecHormones == 2>> - _HeU has a deep voice, and speaks assertively. -<</if>> -<<if $corp.SpecMuscle == 4>> - _HisU hot body is perfectly toned under _hisU suit. -<<elseif $corp.SpecMuscle == 5>> - _HisU suit is specially tailored to flatter _hisU visible musculature. -<</if>> -Of course, you know all about the corporation, but sales<<if $corp.SpecAge == 3>>_womenU<<else>><<= _girlU>>s<</if>> here have standing orders to treat you like any other customer, so you can review the market properly. The slave turns to <<if $corp.SpecAmputee != 1>>a multimedia presentation on<<else>>a rack of<</if>> your corporation's slaves. - -<br><br> - -_HeU explains that the corporation captures many people, so it only retains and trains those that fit its product lines. - -<<set _marketResult = generateMarketSlave("corporate")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<br><br> - -_HisU presentation done, the -<<if $corp.SpecDick == 1 && $corp.SpecPussy == 1>>futanari<<elseif $corp.SpecGender == 2>><<if $corp.SpecBalls == -1>>clipped<<else>>shemale<</if>><</if>> -sales<<if $corp.SpecAge == 3>>_womanU<<else>>_girlU<</if>> directs you to the inventory interface that will allow you to peruse the corporation's slaves, and moves over to stand next to it, ready to answer any questions. -<<if $PC.dick != 0>> - _HeU positions _himselfU facing away from you and hikes up _hisU skirt to bare _hisU - <<if $corp.SpecInjection > 4>>gigantic ass<<elseif $corp.SpecImplants > 0>>fake ass<<elseif $corp.SpecInjection == 3>>big butt<<elseif $corp.SpecInjection == 2>>cute butt<<else>>little behind<</if>> - and cocks _hisU hips<<if $corp.SpecBalls == -1>>, keeping _hisU soft cock demurely out of sight<</if>>, if you feel like <<if $corp.SpecGender == 2 && $corp.SpecPussy != 1>>sodomizing<<else>>fucking<</if>> _himU -<<else>> - _HeU gets down on _hisU knees right there, making _hisU mouth available if you feel like riding _hisU face -<</if>> -while you browse. -<span id="result"> -<<link "Use _himU">> - <<replace "#result">> - <<if $PC.dick != 0>> - _HisU <<if $corp.SpecGender == 2 && $corp.SpecPussy != 1>>asshole is thoughtfully pre-lubed, and your cock slides easily up it<<else>>pussy is nice and wet, and your cock slides inside _himU easily<</if>> as you consider the slaves on offer. _HeU's well trained, and uses _hisU <<if $corp.SpecGender == 2 && $corp.SpecPussy != 1>>sphincter<<else>>womanly muscles<</if>> to please your member expertly as _heU ruts _himselfU gently back against you, doing almost all the work. When you orgasm, _heU retains the load carefully, keeping your cum inside _himU and away from _hisU nice clothes. - <<else>> - _HeU's very well trained, and does all the work. Once you move in and straddle _himU, _heU gets right down to it, or in this case, up to it. _HisU clever tongue runs gently along your labia to build anticipation before starting a delightful dance around and then atop your clitoris. You orgasm in no time at all, a climax which _heU carefully prolongs by kissing you full on the pussy in just the right way, only breaking the oral embrace when you've ridden it as far as you'll go. - <</if>> - <</replace>> -<</link>> -</span> - -<br><br> - -<<set _slaveCost = slaveCost($activeSlave, false, true)>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += _slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1)>><</if>> - -<<if $corp.Market == 1>> - Your own local franchise of your corporation allows you to enjoy a discount. - <<set _slaveCost *= 0.9>> -<</if>> - -<<set _slaveCost = 500*Math.trunc(_slaveCost/500)>> -The offered price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> -<br> -<<includeDOM App.UI.buyingFromMarketControls($activeSlave, _slaveCost)>> - -<<link "End corporate slave sales here and return this sector to standard markets">> - <<set $corp.Market = 0>> - <<run App.Arcology.cellUpgrade($building, App.Arcology.Cell.Market, "Corporate Market", "Markets")>> - <<goto "Main">> -<</link>> diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js index 6e8ad55b18e3165415e67004fbe8dd990773bb51..7f1048a943d33641df738be49fe4f420931738e0 100644 --- a/src/endWeek/endWeek.js +++ b/src/endWeek/endWeek.js @@ -31,7 +31,7 @@ globalThis.endWeek = (function() { function resetSlaveMarkets() { V.gingering = 0; delete V.slaveMarket; - for (const school of ["TSS", "GRI", "SCP", "LDE", "TGA", "HA", "TFS", "TCR", "NUL"]) { + for (const school of App.Data.misc.schools) { V[school].schoolSale = 0; } } diff --git a/src/interaction/main/mainLinks.js b/src/interaction/main/mainLinks.js index 96d9cbc5779d17885300a64e925822aece8c63da..b9d9bfce81654281d3cf87ccd16f37b8631bce01 100644 --- a/src/interaction/main/mainLinks.js +++ b/src/interaction/main/mainLinks.js @@ -251,7 +251,7 @@ App.UI.View.mainLinks = function() { function schoolSale(school) { const div = document.createElement("div"); div.append(App.UI.DOM.makeElement("span", "For your first purchase, ", "yellow"), - App.UI.DOM.passageLink(school, school, () => { V.slavesSeen += 1; }), + App.UI.DOM.passageLink(school, school), App.UI.DOM.makeElement("span", " will sell at half price this week.", "yellow")); fragment.append(div); } diff --git a/src/markets/JobFulfillmentCenterOrder.tw b/src/markets/JobFulfillmentCenterOrder.tw deleted file mode 100644 index afa2511936397067d6d0b3527700161f9eeaad18..0000000000000000000000000000000000000000 --- a/src/markets/JobFulfillmentCenterOrder.tw +++ /dev/null @@ -1,49 +0,0 @@ -:: JobFulfillmentCenterOrder [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Kidnapped Slaves">> - -<<setAssistantPronouns>> - -<<if $JFC.order == 0>>You work up a new slave order for posting where slave merchants can work to fulfill it.<</if>> <<if $JFC.order == 1>>You review your posted slave order for a ''$JFC.role''.<</if>> <<if $assistant.personality == 1>>As you work, $assistant.name makes lewd comments about what _heA looks forward to doing to this new slave.<</if>> - -<<if $JFC.order == 0>> - <span id="JobType"> - <br><br> - <<link "Security">> - <<replace "#JobType">> - <br> - <br>[[Bodyguard|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Bodyguard"]] - <br>[[Wardeness|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Wardeness"]] - <br>[[Return|JobFulfillmentCenterOrder]] - <</replace>> - <</link>> - - <br><<link "Management">> - <<replace "#JobType">> - <br> - <br>[[Headgirl|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Headgirl"]] - <br>[[Teacher|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Teacher"]] - <br>[[Nurse|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Nurse"]] - <br>[[Attendant (normal)|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Attendant"]] | [[Attendant (motherly)|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Motherly Attendant"]] - <br>[[Matron|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Matron"]] - <br>[[Stewardess|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Stewardess"]] - <br>[[Milkmaid|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Milkmaid"]] - <br>[[Farmer|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Farmer"]] - <br>[[Return|JobFulfillmentCenterOrder]] - <</replace>> - <</link>> - - <br><<link "Entertainment">> - <<replace "#JobType">> - <br> - <br>[[DJ|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "DJ"]] - <br>[[Madam|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Madam"]] - <br>[[Concubine|JobFulfillmentCenterOrder][$JFC.order = 1, $JFC.role = "Concubine"]] - <br>[[Return|JobFulfillmentCenterOrder]] - <</replace>> - <</link>> - </span> -<<else>> - <br> - <br>[[Withdraw slave order|JobFulfillmentCenterOrder][$JFC.order = 0, $JFC.role = ""]] -<</if>> diff --git a/src/markets/criminalMarkets.tw b/src/markets/criminalMarkets.tw deleted file mode 100644 index 81fc15dab97ba29aea74f753f60f380b051f4ebb..0000000000000000000000000000000000000000 --- a/src/markets/criminalMarkets.tw +++ /dev/null @@ -1,74 +0,0 @@ -:: Criminal Market [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = $prisonCircuit[$prisonCircuitIndex]>> - -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -You board the transport to -<<switch $slaveMarket>> -<<case "low tier criminals">> /* mixed prisoners */ - - a small prison on the edge of the city spanning from the foot of your arcology with the appearance of an old world police station. You arrive inside and are met by a cute receptionist, asking why one such as yourself would visit such a place. With formalities out of the way, the head of the station is called and arrives shortly. "Well now, didn't expect to see you here. Came to pick up a criminal and give them a chance at not being a menial?" You are then led further into the station and into the prisoners' quarters; most of them appear downcast and dismal, but some look up to see what the commotion is about. "You! Come here! This fine <<if $PC.title == 1>>gentleman<<else>>lady<</if>> wants to take a look, so be on your best behavior!" the head calls out, bringing one of the criminals close enough to be inspected. - -<<case "gangs and smugglers">> /* males only, or females only if $seeDicks == 0 */ - - a large gray prison at the edge of the Free City as word of your approach is sent ahead. The visage of the prison itself is a grim one, enclosed by a large gray concrete fence with electrified barbed wire coiled at the top. As the vehicle rolls to a stop before a large gate, the guard in control of the gate operates a board of buttons and levers, promptly opening it so it may continue. "Stay on the road," he respectfully advises, a final remark before letting your driver carry on. Beyond the fence is an array of guard towers manned with drones for 24/7 surveillance, giving you a clear idea of what was to happen if you were not to heed the guard's words and decided to wander off from the group. - <br><br> - Your destination at the end of the road is a garage, where upon your disembarking, no less than 4 heavily armored guards with electric batons at their sides come to greet you. You could almost mistake them for unmanned drones had they not start speaking. "We've been expecting you; please follow us. We house some dangerous individuals in our establishment and we need to keep you safe." You accept their advice and enter the premises. - <br><br> - You are met with a dimly lit concrete hallway as you enter, only for it to open up to a multi-floor prison that had placed its prisoners underground for the most part<<if ($PC.title == 0 || $PC.boobs >= 1000 || $PC.butt >= 3) && $seeDicks > 0>>, where you are met with a hailstorm of whistles, cheers and other catcalls<</if>>. You come to a bridge and look down to see its inhabitants, hard criminals that are coming together for a meal. You watch a fight break out at one point and an armored guard quickly step in and apply his baton to the offenders, coupled with a loud zap that silences the entire area. Around your level, you see the better stock: the attractive prisoners one would show to an interested customer. - <br><br> - You finally reach the warden's office, "Welcome <<if $PC.title == 1>>Mister<<else>>Miss<</if>> $PC.slaveSurname, I never thought my prison could have turned to a trade such as this, but times are hard." He beckons you to the seat opposite him, "but I'm not one to complain when an opportunity such as this comes my way." He motions to his guards to bring in a select stock for your perusal. "We house some tough nuts in this establishment, but if you believe you can capitalize on these criminals, we'll be happy to have you take them off our hands." The guard returns with a convict ready to be sold. - -<<case "white collar">> /* mixed prisoners */ - - what looks more like an oversized vacation home rather than something one goes to for committing crimes. You enter the premises into a small chamber with a booth to the side and are immediately met with a cheerful "Ah! We've been waiting for you. Please go in. We'll call someone to guide you immediately." - <br><br> - You nod at the prompt and enter further into the luxurious building to find a formally dressed guide and what appears to be the holding area of the prison. The cells, if you can call them that, are large and cozy, each with their own computer and television. The air is also conditioned for their comfort and old world classical music is playing to provide further ambiance. Walking through, you see the prisoners themselves, lazing about in their beds, sitting at their computers, or just talking to each other. If there was ever a prison you'd rather end up in, this would be it. - <br><br> - You enter the warden's office and are greeted with all due formalities. "Glad to see you at our establishment. When I heard that someone as renowned as yourself was coming over, I made the appropriate preparations." You are served a cup of tea as she brings in the chosen stock for you to observe at your leisure. - -<<case "military prison">> - - a holding facility for prisoners of war located on the outskirts of the Free City, which is reasonable due to the dangers inherent to the criminals imprisoned in such an establishment. The driver radios ahead that you and several other interested parties will be arriving shortly. Once you disembark at the edge of the grounds, you are recognized by the stationed guard and ushered into a heavily armored vehicle. <<if $PC.career == "mercenary">>The interior brings back memories and you completely<<else>>Although the interior makes you feel like a prisoner, you<</if>> understand the reasoning behind such a design choice. - <br><br> - Once you arrive at the prison, the door opens to a garage and another door, brightly lit to welcome you to the premises. Through the door, you find the prisoner's quarters, each of them enclosed by electrified fences to ensure your safety as you see the stock. A guard enters, asking you to follow him as he leads you across the chamber to meet with the warden. - <br><br> - Entering the warden's quarters, you take a seat across from him as he takes the initiative. "Ah, fancy meeting one such as yourself here. Though we house some of the hardiest criminals you can find, I'm sure one such as yourself could find great use for them." He smirks. "... or perhaps great entertainment through the pits," he says as he beckons to his staff as they bring in the selected stock. - -<</switch>> - -<<set _marketResult = generateMarketSlave($slaveMarket)>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> - -<br><br> - -<<set _slaveCost = slaveCost($activeSlave)>> -<<setLocalPronouns $activeSlave>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -It will cost <<print cashFormat(_slaveCost)>> to enslave $him. - -<br>[[Inspect a different prisoner|Criminal Market][$slavesSeen += 1]] -<<if $cash >= _slaveCost>> - <br>[["Enslave " + $him + " and check out other available prisoners"|Criminal Market][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), $newSlaves.push($activeSlave), $introType = "multi", $slavesSeen+=1]] - <<if $newSlaves.length == 0>> - <br>[["Enslave " + $him|New Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave),$nextButton = "Continue",$nextLink = "AS Dump",$returnTo = "Main"]] - <<else>> - <br>[["Enslave " + $him + " and finish your inspection"|Bulk Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), $newSlaves.push($activeSlave)]] - <</if>> -<<else>> - //You lack the necessary funds to enslave this criminal.// -<</if>> -<<if $newSlaves.length > 0>> - <br>[[Finish your enslavement of prisoners|Bulk Slave Intro]] -<</if>> - -<br><br> -<<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>> - -<<set _slaveCost = slaveCost($activeSlave)>> diff --git a/src/markets/eliteSlave.tw b/src/markets/eliteSlave.tw deleted file mode 100644 index 7bba87b8776bf0c110b2e70f3739d808943be7a5..0000000000000000000000000000000000000000 --- a/src/markets/eliteSlave.tw +++ /dev/null @@ -1,257 +0,0 @@ -:: Elite Slave [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves">> -<<set $encyclopedia = "Slave Schools">> - -You check to see if any potential breeding slaves are on auction. <<if $eliteAuctioned == 1>>There are none available right now, but there probably will be next week.<<else>> - -<<set $eliteAuctioned = 1>> - -<<if $arcologies[0].FSMaturityPreferentialist > 20>> - <<set _minAge = 25>> -<<else>> - <<set _minAge = $fertilityAge>> -<</if>> -<<if $arcologies[0].FSYouthPreferentialist > 20>> - <<set _maxAge = 23>> -<<else>> - <<set _maxAge = 40>> -<</if>> -<<if $arcologies[0].FSSupremacist != "unset">> - <<set _race = $arcologies[0].FSSupremacistRace>> -<<elseif $arcologies[0].FSSubjugationist != "unset">> - <<set _races = ["amerindian", "asian", "asian", "asian", "asian", "asian", "asian", "black", "black", "indo-aryan", "indo-aryan", "latina", "latina", "latina", "malay", "malay", "middle eastern", "middle eastern", "mixed race", "pacific islander", "semitic", "semitic", "southern european", "southern european", "white", "white", "white", "white", "white", "white", "white", "white", "white"]>> - <<set _races = _races.delete($arcologies[0].FSSubjugationistRace)>> - <<set _race = _races.random()>> -<</if>> -<<set $activeSlave = GenerateNewSlave("XX", {minAge: _minAge, maxAge: _maxAge, ageOverridesPedoMode: 1, race: _race, disableDisability: 1})>> -<<set $activeSlave.origin = "$He was purchased from a member of the Elite.">> -<<set $activeSlave.career = "a slave">> -<<set $activeSlave.prestige = 1>> -<<set $activeSlave.trust = random(60,100)>> -<<set $activeSlave.devotion = random(60,100)>> -<<if $arcologies[0].FSPetiteAdmiration > 20>> - <<if !heightPass($activeSlave)>> - <<set $activeSlave.height = Math.trunc(Height.random($activeSlave, {limitMult: [-4, -2]}))>> - <</if>> -<<elseif $arcologies[0].FSStatuesqueGlorification > 20>> - <<if !heightPass($activeSlave)>> - <<set $activeSlave.height = Math.trunc(Height.random($activeSlave, {limitMult: [3, 5]}))>> - <</if>> -<</if>> -<<if $arcologies[0].FSPaternalist > 20>> - <<run setHealth($activeSlave, 100, 0, 0, 0, 0)>> - <<set $activeSlave.intelligenceImplant = 30>> -<<else>> - <<run setHealth($activeSlave, jsRandom(10, 60), undefined, undefined, 0)>> - <<set $activeSlave.intelligenceImplant = either(0,15,30)>> -<</if>> -<<if $arcologies[0].FSSlimnessEnthusiast > 20>> - <<if $arcologies[0].FSHedonisticDecadence > 20 || $arcologies[0].FSPhysicalIdealistLaw == 1>> - <<set _weightMax = 30>> - <<else>> - <<set _weightMax = 0>> - <</if>> -<<elseif $arcologies[0].FSPhysicalIdealistLaw == 1>> - <<set _weightMax = 30>> -<<else>> - <<set _weightMax = 100>> -<</if>> -<<if $arcologies[0].FSHedonisticDecadence > 20>> - <<if $arcologies[0].FSSlimnessEnthusiast > 20>> - <<set _weightMin = 10>> - <<else>> - <<set _weightMin = 95>> - <</if>> -<<else>> - <<set _weightMin = -70>> -<</if>> -<<set $activeSlave.weight = random(_weightMin, _weightMax)>> -<<if $arcologies[0].FSPhysicalIdealist > 20>> - <<if $arcologies[0].FSPhysicalIdealistLaw == 1>> - <<set _musclesMin = 20>> - <<set _musclesMax = 50>> - <<else>> - <<set _musclesMin = 95>> - <<set _musclesMax = 100>> - <</if>> -<<elseif $arcologies[0].FSHedonisticDecadence > 20>> - <<if $arcologies[0].FSHedonisticDecadenceStrongFat == 1>> - <<set _musclesMin = 50>> - <<set _musclesMax = 100>> - <<else>> - <<set _musclesMin = -100>> - <<set _musclesMax = 50>> - <</if>> -<<else>> - <<set _musclesMin = -50>> - <<set _musclesMax = 50>> -<</if>> -<<set $activeSlave.muscles = random(_musclesMin, _musclesMax)>> -<<if $arcologies[0].FSPhysicalIdealist > 20>> - <<set $activeSlave.height += 5>> -<</if>> -<<run eyeSurgery($activeSlave, "both", "normal")>> -<<set $activeSlave.hears = 0>> -<<if ($activeSlave.weight < -30)>> - <<set $activeSlave.waist = random(-55,0)>> -<<elseif $activeSlave.physicalAge < 13>> - <<set $activeSlave.waist = random(-25,25)>> -<<elseif ($activeSlave.weight <= 30)>> - <<set $activeSlave.waist = random(-45,5)>> -<<elseif ($activeSlave.weight <= 160)>> - <<set $activeSlave.waist = random(-20,10)>> -<</if>> -<<if $activeSlave.voice < 2>> - <<set $activeSlave.voice++>> -<</if>> -<<if $activeSlave.accent > 1>> - <<set $activeSlave.accent = 1>> -<</if>> -<<if $activeSlave.shoulders > 0>> - <<set $activeSlave.shoulders -= 2>> -<</if>> -<<if $arcologies[0].FSAssetExpansionist > 20>> - <<set $activeSlave.boobs = (random(50,500) * 100)>> - <<set $activeSlave.butt = random(6,20)>> - <<if $arcologies[0].FSTransformationFetishist > 20>> - <<set $activeSlave.boobsImplant = $activeSlave.boobs-200>> - <<if $activeSlave.boobsImplant > 10000>> - <<set $activeSlave.boobsImplantType = "hyper fillable">> - <<else>> - <<set $activeSlave.boobsImplantType = "advanced fillable">> - <</if>> - <<set $activeSlave.buttImplant = $activeSlave.butt-1>> - <<if $activeSlave.buttImplant > 9>> - <<set $activeSlave.buttImplantType = "hyper fillable">> - <<else>> - <<set $activeSlave.buttImplantType = "advanced fillable">> - <</if>> - <</if>> -<<elseif $arcologies[0].FSSlimnessEnthusiast > 20>> - <<set $activeSlave.boobs = (random(3,5) * 100)>> - <<set $activeSlave.butt = random(0,2)>> - <<if $arcologies[0].FSTransformationFetishist > 20>> - <<set $activeSlave.boobsImplant = $activeSlave.boobs-50>> - <<set $activeSlave.boobsImplantType = "normal">> - <<if $activeSlave.butt > 1>> - <<set $activeSlave.buttImplant = 1>> - <<set $activeSlave.buttImplantType = "normal">> - <</if>> - <</if>> -<<else>> - <<set $activeSlave.boobs = (random(5,10) * 100)>> - <<set $activeSlave.butt = random(3,7)>> - <<if $arcologies[0].FSTransformationFetishist > 20>> - <<set $activeSlave.boobsImplant = $activeSlave.boobs-200>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.buttImplant = $activeSlave.butt-1>> - <<set $activeSlave.buttImplantType = "normal">> - <</if>> -<</if>> -<<if $arcologies[0].FSTransformationFetishist > 20>> - <<set $activeSlave.boobShape = "normal">> -<<else>> - <<set $activeSlave.boobShape = either("perky", "perky", "torpedo-shaped", "wide-set")>> -<</if>> -<<if $activeSlave.nipples == "tiny">> - <<set $activeSlave.nipples = "puffy">> -<</if>> -<<set $activeSlave.face = 100>> -<<set $activeSlave.faceShape = either("cute", "cute", "exotic", "exotic", "normal", "normal", "sensual", "sensual", "sensual")>> -<<set $activeSlave.lips = random(45,75)>> -<<if $arcologies[0].FSTransformationFetishist > 20>> - <<set $activeSlave.lips += 25>> - <<set $activeSlave.lipsImplant = 25>> -<</if>> -<<if $activeSlave.teeth != "normal" && $activeSlave.physicalAge >= 12>> - <<set $activeSlave.teeth = "normal">> -<</if>> -<<if $activeSlave.vaginaLube == 0>> - <<set $activeSlave.vaginaLube++>> -<</if>> -<<set $activeSlave.preg = 0>> -<<set $activeSlave.counter.birthsTotal = either(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 4)>> -<<if $arcologies[0].FSPastoralist > 20 || $activeSlave.counter.birthsTotal > 0>> - <<set $activeSlave.lactation = 1>> - <<if $arcologies[0].FSPastoralist > 20>> - <<set $activeSlave.lactationAdaptation = $arcologies[0].FSPastoralist>> - <<else>> - <<set $activeSlave.lactationAdaptation = Math.min($activeSlave.counter.birthsTotal*10, 100)>> - <</if>> -<<else>> - <<set $activeSlave.lactation = either(0, 0, 0, 0, 1)>> -<</if>> -<<if $activeSlave.lactation > 0>> - <<set $activeSlave.lactationDuration = 2>> -<</if>> -<<if $activeSlave.counter.birthsTotal > 0>> - <<set $activeSlave.vagina = random(2,3)>> - <<set $activeSlave.pregWeek = either(-4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)>> -<<else>> - <<set $activeSlave.vagina = random(0,3)>> - <<set $activeSlave.pregWeek = 0>> -<</if>> -<<if $activeSlave.hips <= 0>> - <<set $activeSlave.hips = 1>> -<</if>> -<<if $arcologies[0].FSGenderRadicalist > 20>> - <<set $activeSlave.dick = random(2,5)>> - <<set $activeSlave.balls = random(2,10)>> - <<set $activeSlave.scrotum = $activeSlave.balls>> - <<set $activeSlave.prostate = random(1,3)>> -<</if>> -<<set $activeSlave.makeup = 2>> -<<set $activeSlave.nails = 1>> -<<if $activeSlave.vagina == 0>> - <<set $activeSlave.skill.vaginal = 30>> -<<else>> - <<set $activeSlave.skill.vaginal = 60>> -<</if>> -<<if $activeSlave.anus == 0>> - <<set $activeSlave.skill.anal = 10>> -<<else>> - <<set $activeSlave.skill.anal = 60>> -<</if>> -<<set $activeSlave.skill.oral = 60>> -<<set $activeSlave.chastityVagina = 1>> -<<set $activeSlave.intelligence = random(51,100)>> -<<if $arcologies[0].FSIntellectualDependency > 20>> - <<set $activeSlave.energy = 100>> - <<set $activeSlave.attrXY = 100>> -<<elseif $arcologies[0].FSSlaveProfessionalism > 20>> - <<set $activeSlave.intelligence = Intelligence.random({limitIntelligence: [80, 100]})>> - <<if $activeSlave.vagina >= 0>> - <<set $activeSlave.skill.vaginal = 100>> - <</if>> - <<set $activeSlave.skill.anal = 100>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.entertainment = 100>> - <<set $activeSlave.skill.whoring = 100>> - <<set $activeSlave.intelligenceImplant = 30>> -<</if>> -<<set $activeSlave.attrKnown = 1>> -<<set $activeSlave.fetishKnown = 1>> -<<set $activeSlave.behavioralQuirk = "confident">> -<<set $activeSlave.sexualQuirk = either("caring", "caring", "gagfuck queen", "perverted", "romantic", "romantic", "strugglefuck queen", "tease", "unflinching")>> -<<set $activeSlave.pubertyXX = 1>> -<<set $activeSlave.breedingMark = 1>> - -<<set _slaveCost = slaveCost($activeSlave, false, true)>> - -<br><br> - -It will take <<print cashFormat(_slaveCost)>> to win the auction. - -<br><br> -<<if $cash >= _slaveCost>> - [[Place that bid|New Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave),$nextButton = "Continue",$nextLink = "AS Dump",$returnTo = "Main"]] -<<else>> - //You lack the necessary funds to place a winning bid.// -<</if>> - -<br><br> - -<<includeDOM App.Desc.longSlave(V.activeSlave, {market: "Elite Slave"})>> - -<</if>> diff --git a/src/markets/growthResearchInstitute.tw b/src/markets/growthResearchInstitute.tw deleted file mode 100644 index fa8735e424e7e745ad016e67afd24e40be894525..0000000000000000000000000000000000000000 --- a/src/markets/growthResearchInstitute.tw +++ /dev/null @@ -1,29 +0,0 @@ -:: Growth Research Institute [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "GRI">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//The Growth Research Institute (GRI) is not primarily a slave school at all, but rather the world leader in female growth hormone development. It operates research centers in the Free Cities to avoid traditional medical research laws. GRI runs several slave schools to raise healthy, unmodified subjects for use in trials. After a year of experimental hormone treatment they are sold. <<if $GRI.schoolUpgrade != 0>><br><br>You have endowed <<if $GRI.schoolUpgrade == 1>>a research focus on advanced curatives; most subjects now leave the GRI at unnatural levels of vitality.<<else>>a research focus on milk production; subjects' breasts are bigger and milkier than ever.<</if>> As a major benefact<<if $PC.title == 0>>rix<<else>>or<</if>> of the institution, you also receive a discount on them.<</if>>// - -<br><br>GRI offers a fresh graduate for inspection via video call. The interview takes place in the graduate's bare-metal holding cell. Disturbingly, it is strongly reminiscent of an enclosure for a lab animal, only scaled up to contain a lab animal of human dimensions. - -<<set _marketResult = generateMarketSlave("GRI")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<setLocalPronouns $activeSlave>> -<<if $GRI.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $GRI.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $GRI "slave" "slaves">> diff --git a/src/markets/householdLiquidator.tw b/src/markets/householdLiquidator.tw deleted file mode 100644 index 502ae6acbc4d833a556719f1b5495fc5af9e002c..0000000000000000000000000000000000000000 --- a/src/markets/householdLiquidator.tw +++ /dev/null @@ -1,102 +0,0 @@ -:: Household Liquidator [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Household Liquidations">> -<<set $introType = "liquidator", $newSlavesDone = 0, $newSlaveIndex = 0, _newSlaves = []>> - - -<<if random(1,100) > 50>> - -<<set $activeSlave = GenerateNewSlave(null, {disableDisability: 1})>> -<<set $activeSlave.origin = "You bought $him from the household liquidator.">> -<<set $activeSlave.devotion = random(-75,-25)>> -<<set $activeSlave.trust = random(-45,-25)>> -<<set $activeSlave.oldDevotion = $activeSlave.devotion>> -<<set $activeSlave.oldTrust = $activeSlave.trust>> -<<run setHealth($activeSlave, jsRandom(-50, 20))>> -<<run setMissingParents($activeSlave)>> -<<set $activeSlave.canRecruit = 0>> - -/% Create opposite sex chance of relative %/ -<<set _oppositeSex = 0>> -<<if $activeSlave.genes != GenerateChromosome()>> - <<set _oppositeSex = 1>> -<</if>> - -The household liquidator is offering a set of siblings for sale. You are permitted to inspect both slaves. -<br><br> - -<<set _relativeSlave = generateRelatedSlave($activeSlave, "younger sibling", _oppositeSex)>> -<<run _newSlaves.push($activeSlave), _newSlaves.push(_relativeSlave)>> - -<<set _slaveCost = slaveCost($activeSlave, false, true)>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> -<<set _totalCost = _slaveCost*3>> - -<<elseif random(1,100) > 20>> - -<<set $activeSlave = GenerateNewSlave(null, {minAge: ($fertilityAge + $minimumSlaveAge), maxAge: 42, ageOverridesPedoMode: 1, disableDisability: 1})>> -<<set $activeSlave.origin = "You bought $him from the household liquidator.">> -<<set $activeSlave.devotion = random(-75,-25)>> -<<set $activeSlave.trust = random(-45,-25)>> -<<set $activeSlave.oldDevotion = $activeSlave.devotion>> -<<set $activeSlave.oldTrust = $activeSlave.trust>> -<<run setHealth($activeSlave, jsRandom(-50, 20))>> -<<if $activeSlave.vagina > -1>><<set $activeSlave.boobs += 100>><</if>> -<<set $activeSlave.butt += 1>> -<<if $activeSlave.vagina > -1>><<set $activeSlave.vagina += 1>><</if>> -<<if $activeSlave.vagina > -1>><<set $activeSlave.counter.birthsTotal = 1>><</if>> -<<set $activeSlave.canRecruit = 0>> - -/% Create opposite sex chance of relative %/ -<<set _oppositeSex = 0>> -<<if $activeSlave.genes != GenerateChromosome()>> - <<set _oppositeSex = 1>> -<</if>> - -<<setLocalPronouns $activeSlave>> -The household liquidator is offering a $mother and $his <<if $activeSlave.genes == "XX" && _oppositeSex == 1>>son<<elseif $activeSlave.genes == "XY" && _oppositeSex == 1>>daughter<<else>>$daughter<</if>> for sale. You are permitted to inspect both slaves. -<br><br> - -<<set _relativeSlave = generateRelatedSlave($activeSlave, "child", _oppositeSex)>> -<<run _newSlaves.push($activeSlave), _newSlaves.push(_relativeSlave)>> - -<<set _slaveCost = slaveCost($activeSlave, false, true)>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> -<<set _totalCost = _slaveCost*3>> - -<<else>> - -<<set $activeSlave = GenerateNewSlave({disableDisability: 1})>> -<<set $activeSlave.origin = "You bought $him from the household liquidator.">> -<<set $activeSlave.devotion = random(-75,-25)>> -<<set $activeSlave.trust = random(-45,-25)>> -<<set $activeSlave.oldDevotion = $activeSlave.devotion>> -<<set $activeSlave.oldTrust = $activeSlave.trust>> -<<run setHealth($activeSlave, jsRandom(-50, 20))>> -<<run setMissingParents($activeSlave)>> -<<set $activeSlave.canRecruit = 0>> - -The household liquidator is offering something special: identical twins. The markup is huge, but the merchandise isn't something you see every day. -<br><br> - -<<set _relativeSlave = generateRelatedSlave($activeSlave, "twin")>> -<<run _newSlaves.push($activeSlave), _newSlaves.push(_relativeSlave)>> - -<<set _slaveCost = slaveCost($activeSlave, false, true)>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> -<<set _totalCost = _slaveCost*4>> - -<</if>> - -The price is <<print cashFormatColor(_totalCost)>>. <<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> -<br><br> - -<<if $cash >= _totalCost>> - [[Buy their slave contract|Bulk Slave Intro][$newSlaves = _newSlaves, $newSlaves.forEach((s) => cashX(forceNeg(_totalCost/$newSlaves.length), "slaveTransfer", s))]] -<<else>> - //You lack the necessary funds to buy these slaves.// -<</if>> -<br>[[Decline to purchase them and check out another set of slaves|Household Liquidator][$slavesSeen += 2]] -<br><br> - -<<includeDOM App.UI.MultipleInspect(_newSlaves, true, "Household Liquidators")>> diff --git a/src/markets/huskSlave.tw b/src/markets/huskSlave.tw deleted file mode 100644 index 4a0a13ef120d251fca348e78f8395002c845a69d..0000000000000000000000000000000000000000 --- a/src/markets/huskSlave.tw +++ /dev/null @@ -1,60 +0,0 @@ -:: Husk Slave [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Kidnapped Slaves">> -<<if ($huskSlave.dick == 0) && ($huskSlave.vagina == -1)>><<set $huskSlave.vagina = 0>><</if>> - -<<if $huskSlaveOrdered == 0>>You lay out a new order for a braindead slave to be put aside for your use.<<else>>You review your posted husk order.<</if>> Your order requests a body with the following characteristics: - -<<set $huskSlave.age = Math.clamp($huskSlave.age, $minimumSlaveAge, $retirementAge-1)>> - -<br><br> -Age: -<br><<textbox "$huskSlave.age" $huskSlave.age "Husk Slave">> - -<br><br> -Sex: -<<if $huskSlave.sex == 1>>Female. -<<elseif $huskSlave.sex == 2>>Male. -<<elseif $huskSlave.sex == 3>>Futanari. -<</if>> -<br>[[Female|Husk Slave][$huskSlave.sex = 1]] -| [[Male|Husk Slave][$huskSlave.sex = 2]] -| [[Both|Husk Slave][$huskSlave.sex = 3]] - -<br><br> -Nationality: -<br><<textbox "$huskSlave.nationality" $huskSlave.nationality "Husk Slave">> - -<br><br> -<<textbox "$huskSlave.race" $huskSlave.race "Husk Slave">> -<br>[[White|Husk Slave][$huskSlave.race = "white"]] -| [[Asian|Husk Slave][$huskSlave.race = "asian"]] -| [[Latina|Husk Slave][$huskSlave.race = "latina"]] -| [[Middle Eastern|Husk Slave][$huskSlave.race = "middle eastern"]] -| [[Black|Husk Slave][$huskSlave.race = "black"]] -| [[Semitic|Husk Slave][$huskSlave.race = "semitic"]] -| [[Southern European|Husk Slave][$huskSlave.race = "southern european"]] -| [[Indo-Aryan|Husk Slave][$huskSlave.race = "indo-aryan"]] -| [[Amerindian|Husk Slave][$huskSlave.race = "amerindian"]] -| [[Pacific Islander|Husk Slave][$huskSlave.race = "pacific islander"]] -| [[Malay|Husk Slave][$huskSlave.race = "malay"]] -| [[Mixed Race|Husk Slave][$huskSlave.race = "mixed race"]] -| [[Not Important|Husk Slave][$huskSlave.race = "not important"]] - -<br><br> -Virginity: -<<if $huskSlave.virgin == 0>>Virgin. -<<else>>Not important. -<</if>> -<br>[[Important|Husk Slave][$huskSlave.virgin = 0]] -| [[Not Important|Husk Slave][$huskSlave.virgin = 1]] - -<br><br><br> -Reserving a body will cost <<print cashFormat(10000)>> up front. Canceling an order will refund your money; however, if a delivered body is rejected, your money will not be refunded. -<<if $huskSlaveOrdered == 1>> - [[Withdraw body order|Main][$huskSlaveOrdered = 0, cashX(10000, "slaveTransfer")]] -<<elseif $cash < 10000>> - //You lack the credits to place a body reservation.// -<<else>> - [[Post body order|Main][$huskSlaveOrdered = 1, cashX(-10000, "slaveTransfer")]] -<</if>> diff --git a/src/markets/lecoleDesEnculees.tw b/src/markets/lecoleDesEnculees.tw deleted file mode 100644 index 95d00a72b77cc633a5c816abad8fe410bc08b7ec..0000000000000000000000000000000000000000 --- a/src/markets/lecoleDesEnculees.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: L'École des Enculées [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "LDE">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//L'École des Enculées is one of the oldest networks of slave schools, but because its training must be started early, it is only now beginning to produce and show a return on its investors' stakes. It aims to produce graduates more feminine than the average naturally born female, in spite of their having been born male. The school is a global leader in hormonal feminization, which allows it to produce curvier slaves than many schools that focus on natural females. It also retains its graduates for a year after their majority and their enslavement, so as to be able to legally subject them to intensive sexual conditioning that focuses on their prostates as their main remaining locus of arousal. <<if $LDE.schoolUpgrade != 0>><br><br>Since you have endowed <<if $LDE.schoolUpgrade == 1>>the regular application of drugs to induce extreme infatuation in its graduates towards the first dominant person they encounter, any graduate purchased here will now promptly fall in love with you.<<else>>research into narrowly targeted hormonal treatments, its graduates are now available with generous members despite their femininity.<</if>> As a major benefact<<if $PC.title == 0>>rix<<else>>or<</if>> of the institution, you also receive a discount on them.<</if>>// - -<br><br>L'École des Enculées offers a fresh graduate for inspection via video call. The interview takes place in the dormitory for the oldest class of girls. Absurdly sexual squeals repeatedly interrupt the call, making it very clear that someone close by the interviewee is experiencing a strong combination of anal pain and anal pleasure. - -<<set _marketResult = generateMarketSlave("LDE")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $LDE.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $LDE.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $LDE "slave" "slaves">> diff --git a/src/markets/marketUI.js b/src/markets/marketUI.js index 437b79880181cd52f557f33445905def6c5f2ded..9fcc1ff6083cfc69b7a3245ca3e4cc730af0c747 100644 --- a/src/markets/marketUI.js +++ b/src/markets/marketUI.js @@ -1,82 +1,140 @@ -App.UI.buyingFromMarketControls = function(slave, slaveCost) { - const {him, his} = getPronouns(slave); - const el = document.createElement("p"); - App.UI.DOM.appendNewElement( - "div", +/** + * + * @param {string} slaveMarket + * @param {object} [param1] + * @param {number} [param1.numArcology] + * @param {string} [param1.sTitleSingular] + * @param {string} [param1.sTitlePlural] + * @param {number} [param1.costMod] + */ +App.Markets.purchaseFramework = function(slaveMarket, {numArcology, sTitleSingular = "slave", sTitlePlural = "slaves", costMod = 1} = {}) { + const el = new DocumentFragment(); + const {slave, text} = generateMarketSlave(slaveMarket, (numArcology || 1)); + const cost = getCost(); + + el.append(text); + + App.UI.DOM.appendNewElement("p", el, - App.UI.DOM.link( - `Decline to purchase ${him} and check out another slave`, - () => { - V.slavesSeen += 1; - }, - [], - passage() - ) + `The offered price is ${cashFormat(cost)}. ${(V.slavesSeen > V.slaveMarketLimit) ? `You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.` : ``}` ); - if (V.cash >= slaveCost) { + + el.append(choices()); + return el; + + function getCost() { + let cost = (slaveCost(slave, false, !App.Data.misc.lawlessMarkets.includes(slaveMarket)) * costMod); + if (V.slavesSeen > V.slaveMarketLimit) { + cost += cost * ((V.slavesSeen - V.slaveMarketLimit) * 0.1); + } + + cost = 500 * Math.trunc(cost / 500); + return cost; + } + + function choices() { + const {him, his} = getPronouns(slave); + const el = document.createElement("p"); + let title = {}; + V.slavesSeen += 1; + if (sTitleSingular === "prisoner") { + title = { + decline: `Inspect a different prisoner`, + buyAndKeepShopping: `Buy ${him} and check out other other available ${sTitlePlural}`, + buyJustHer: `Enslave ${him}`, + buyHerAndFinish: `Enslave ${him} and finish your inspection`, + finish: `Finish your enslavement of prisoners` + }; + } else { + title = { + decline: `Decline to purchase ${him} and check out another ${sTitleSingular}`, + buyAndKeepShopping: `Buy ${him} and check out other ${sTitlePlural} to order`, + buyJustHer: `Buy ${his} slave contract`, + buyHerAndFinish: `Buy ${him} and finish your order of slaves`, + finish: `Finish your order of slaves` + }; + } + App.UI.DOM.appendNewElement( "div", el, App.UI.DOM.link( - `Buy ${him} and check out other slaves to order`, + title.decline, () => { - cashX(forceNeg(slaveCost), "slaveTransfer", slave); - V.newSlaves.push(slave); - V.introType = "multi"; - V.slavesSeen += 1; + jQuery("#slave-markets").empty().append(App.Markets[slaveMarket]); }, - [], - passage() ) ); - if (V.newSlaves.length === 0) { + if (V.cash >= cost) { App.UI.DOM.appendNewElement( "div", el, App.UI.DOM.link( - `Buy ${his} slave contract`, + title.buyAndKeepShopping, () => { - cashX(forceNeg(slaveCost), "slaveTransfer", slave); + cashX(forceNeg(cost), "slaveTransfer", slave); V.newSlaves.push(slave); - V.nextButton = "Continue"; - V.nextLink = "AS Dump"; - V.returnTo = "Main"; + V.introType = "multi"; + student(); + jQuery("#slave-markets").empty().append(App.Markets[slaveMarket]); }, - [], - passage() ) ); + if (V.newSlaves.length === 0) { + App.UI.DOM.appendNewElement( + "div", + el, + App.UI.DOM.link( + title.buyJustHer, + () => { + cashX(forceNeg(cost), "slaveTransfer", slave); + V.newSlaves.push(slave); + V.nextButton = "Continue"; + V.returnTo = "Main"; + student(); + newSlave(slave); + jQuery("#slave-markets").empty().append(App.UI.newSlaveIntro(slave)); + }, + ) + ); + } else { + App.UI.DOM.appendNewElement( + "div", + el, + App.UI.DOM.link( + title.buyHerAndFinish, + () => { + student(); + cashX(forceNeg(cost), "slaveTransfer", slave); + V.newSlaves.push(slave); + }, + [], + "Bulk Slave Intro" + ) + ); + } } else { + App.UI.DOM.appendNewElement("span", el, `You lack the necessary funds to buy this slave.`, "note"); + } + if (V.newSlaves.length > 0) { App.UI.DOM.appendNewElement( "div", el, - App.UI.DOM.link( - `Buy ${him} and finish your order of slaves`, - () => { - cashX(forceNeg(slaveCost), "slaveTransfer", slave); - V.newSlaves.push(slave); - }, - [], + App.UI.DOM.passageLink( + title.finish, "Bulk Slave Intro" ) ); } - } else { - App.UI.DOM.appendNewElement("span", el, `You lack the necessary funds to buy this slave.`, "note"); - } - if (V.newSlaves.length > 0) { - App.UI.DOM.appendNewElement( - "div", - el, - App.UI.DOM.link( - `Finish your order of slaves`, - () => { }, - [], - "Bulk Slave Intro" - ) - ); - } - el.append(App.Desc.longSlave(slave, {market: V.slaveMarket})); - return el; + el.append(App.Desc.longSlave(slave, {market: slaveMarket})); + return el; + + function student() { + if ([App.Data.misc.schools].includes(slaveMarket)) { + V[slaveMarket].schoolSale = 0; + V[slaveMarket].studentsBought += 1; + } + } + } }; diff --git a/src/markets/nuevaUniversidadDeLibertad.tw b/src/markets/nuevaUniversidadDeLibertad.tw deleted file mode 100644 index fcd231dc78e938583578dcc5c2fb6dc0bf797b13..0000000000000000000000000000000000000000 --- a/src/markets/nuevaUniversidadDeLibertad.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: Nueva Universidad de Libertad [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "NUL">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//Nueva Universidad de Libertad is a unique slave school operating in the Free Cities. Its business model is to offer as close to asexuality as a sex slave can possess. All students have their sex organs surgically removed at a very young age, before the onset of puberty. This is followed by numerous cosmetic surgery alternations, alongside a steady regimen of hormone blockers, throughout their education. The result is an utterly physically androgynous slave. <<if $NUL.schoolUpgrade != 0>><br><br>You have endowed the school with advanced training courses in <<if $NUL.schoolUpgrade == 1>>entertainment and conversation<<else>>the various sexual arts<</if>>. As a major financial supporter of the institution, you also receive a discount on them.<</if>>// - -<br><br>Nueva Universidad de Libertad offers a fresh graduate for inspection via video call. The interview takes place in said graduate's dormitory. The room is sparse and utilitarian, and immaculately clean. Likely by design, it looks like the set from an old sci-fi movie. - -<<set _marketResult = generateMarketSlave("NUL")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $NUL.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $NUL.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $NUL "slave" "slaves">> diff --git a/src/markets/prestigiousSlave.tw b/src/markets/prestigiousSlave.tw deleted file mode 100644 index 8743bd05991cdc3d3e6f22e05cdd6359babf14b6..0000000000000000000000000000000000000000 --- a/src/markets/prestigiousSlave.tw +++ /dev/null @@ -1,934 +0,0 @@ -:: Prestigious Slave [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves">> -<<set $encyclopedia = "Slave Schools">> - -You check to see if any especially prestigious slaves are on auction. <<if $prestigeAuctioned == 1>>There are none available right now, but there probably will be next week.<<else>> - -<<set $prestigeAuctioned = 1>> - -<<set _choice = (function() { - const options = [ - "porn star", - "trophy wife", - "sports star", - "young model", - "albino", - "old-timer", - "b-list actress", - "politician", - "princess", - "arcology", - "streamer", - ]; - const dickOptions = [ - "d herm", - "d young herm", - "d pornstar", - "d trophy husband", - "d sports star", - "d young model", - "d albino", - "d old-timer", - "d b-list actress", - "d politician", - "d princess", - "d arcology", - "d streamer", - ]; - return jsEither(Math.random()*100 < V.seeDicks ? dickOptions : options); -})()>> - -<<switch _choice>> -<<case "porn star">> - <<set $activeSlaveOneTimeMinAge = Math.min(24, $minimumSlaveAge + 6)>> - <<set $activeSlaveOneTimeMaxAge = 40>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a noted adult film star, and was sold into slavery by $his unscrupulous managers.">> - <<set $activeSlave.career = "a porn star">> - <<set $activeSlave.boobsImplant += random(4,6)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "string">> - <<set $activeSlave.nipples = either("cute", "huge", "puffy")>> - <<set $activeSlave.areolae = 1>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.buttImplant += 1>> - <<set $activeSlave.buttImplantType = "normal">> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.lipsImplant += 10>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "sensual">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave)>> - <<set $activeSlave.anus = 2>> - <<set $activeSlave.vagina = 2>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 1>> - <<set $activeSlave.tonguePiercing = 1>> - <<set $activeSlave.nipplesPiercing = 1>> - <<set $activeSlave.nosePiercing = 1>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.vaginal = 100>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 100>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 100>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy")>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.desc = "$He has seen and done almost everything sexually possible, on camera.">> - -<<case "trophy wife">> - <<set $activeSlaveOneTimeMinAge = Math.min(19, Math.max($fertilityAge, $minimumSlaveAge) + 1)>> - <<set $activeSlaveOneTimeMaxAge = 22>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once the young trophy $wife of a powerful man in the old world, but he sold $him into slavery in revenge for $his infidelity.">> - <<set $activeSlave.career = "a trophy wife">> - <<set $activeSlave.boobsImplant += random(1,3)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.buttImplant += 1>> - <<set $activeSlave.buttImplantType = "normal">> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.lipsImplant += 10>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "sensual">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(60, 80), 0, 0, 0)>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 1>> - <<set $activeSlave.nipplesPiercing = 1>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.vaginal = 35>> - <<set $activeSlave.skill.oral = 35>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 35>> - <<set $activeSlave.skill.entertainment = 15>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy")>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.tattoo = "$His ex-husband's name is prettily tattooed on $his left arm, but a black line has been subsequently tattooed across it.">> - -<<case "sports star">> - <<set $activeSlaveOneTimeMinAge = 21>> - <<set $activeSlaveOneTimeMaxAge = 25>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once expected to become a major sports star, but flamed out due to injury and was recently enslaved due to debt.">> - <<set $activeSlave.career = "an athlete">> - <<set $activeSlave.intelligence = random(-90,-20)>> - <<set $activeSlave.intelligenceImplant = 0>> - <<set $activeSlave.muscles = 50>> - <<set $activeSlave.heels = 1>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(80, 90), 0, jsRandom(5, 10), 0, jsRandom(10, 30))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.eyebrowPiercing = random(0,1)>> - <<set $activeSlave.nosePiercing = random(0,1)>> - <<set $activeSlave.navelPiercing = random(0,1)>> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.skill.combat = 1>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration")>> - <<set $activeSlave.behavioralFlaw = "arrogant">> - <<set $activeSlave.custom.desc = "$He's not particularly bright, and enjoys solving problems with physical force.">> - -<<case "young model">> - <<set $activeSlaveOneTimeMaxAge = 21>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a rising young model, but apparently someone decided to take a shortcut in cashing in on $his great beauty.">> - <<set $activeSlave.career = "a model">> - <<set $activeSlave.boobs = random(2,4)*100>> - <<set $activeSlave.butt = random(1,3)>> - <<set $activeSlave.lips = random(15,25)>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-20, 20), 0, 0, 0, jsRandom(10, 30))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant")>> - <<set $activeSlave.custom.desc = "$He moves with the practiced grace of someone who unconsciously still pictures $himself on the runway.">> - -<<case "albino">> - <<set $activeSlaveOneTimeMaxAge = 18>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens.">> - <<set $activeSlave.geneticQuirks.albinism = 2>> - <<set $activeSlave.albinismOverride = {skin: "pure white", eyeColor: "pale grey", hColor: "white"}>> - <<run applyGeneticColor($activeSlave)>> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run eyeSurgery($activeSlave, "both", "blur"), setHealth($activeSlave, jsRandom(40, 60), 0, 0, 0, jsRandom(10, 30))>> - <<set $activeSlave.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast.">> - -<<case "old-timer">> - <<set $activeSlaveOneTimeMinAge = ($minimumSlaveAge + 15)>> - <<set $activeSlaveOneTimeMaxAge = 35>> - <<set $one_time_age_overrides_pedo_mode = 1>> /% 15 years a slave. %/ - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He is one of the longest legally-enslaved persons in the world, having been a slave for 15 years. $He has spent almost all that time working as a slave prostitute, and has been heavily modified to keep $him productive.">> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.boobsImplant += random(10,15)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "fillable">> - <<set $activeSlave.nipples = either("cute", "huge", "puffy")>> - <<set $activeSlave.areolae = 2>> - <<set $activeSlave.butt += 4>> - <<set $activeSlave.buttImplant += 4>> - <<set $activeSlave.buttImplantType = "fillable">> - <<set $activeSlave.lips = random(75,85)>> - <<set $activeSlave.lipsImplant = 3>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.faceImplant = 40>> - <<set $activeSlave.faceShape = "exotic">> - <<set $activeSlave.devotion = random(25,45)>> - <<set $activeSlave.trust = random(0,15)>> - <<run setHealth($activeSlave, jsRandom(20, 40), 0, jsRandom(0, 5), 0, jsRandom(10, 30))>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.vagina = 3>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 2>> - <<set $activeSlave.tonguePiercing = 2>> - <<set $activeSlave.nipplesPiercing = 2>> - <<set $activeSlave.nosePiercing = 2>> - <<set $activeSlave.lipsPiercing = 2>> - <<set $activeSlave.vaginaPiercing = 2>> - <<set $activeSlave.anusPiercing = 2>> - <<set $activeSlave.navelPiercing = 2>> - <<set $activeSlave.eyebrowPiercing = 2>> - <<set $activeSlave.earPiercing = 2>> - <<set $activeSlave.skill.vaginal = 100>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 100>> - <<set $activeSlave.skill.whoring = 100>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<set $activeSlave.energy = 100>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.desc = "$He has almost no inhibitions left at all.">> - <<set $activeSlave.custom.tattoo = "'50,000 Served!' is tattooed across $his back.">> - <<set $activeSlave.counter.publicUse += 1000>> - -<<case "b-list actress">> - <<set $activeSlaveOneTimeMinAge = 24>> - <<set $activeSlaveOneTimeMaxAge = 28>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He was once a B-list actress, but fell on hard times and drug addiction and was recently enslaved due to debt.">> - <<set $activeSlave.career = "an actress">> - <<set $activeSlave.boobs += 200>> - <<set $activeSlave.boobsImplant += 200>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.buttImplant += 1>> - <<set $activeSlave.buttImplantType = "normal">> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.lipsImplant += 10>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "cute">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-70, -40), undefined, undefined, 0, jsRandom(30, 80))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 100>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.addict = 20>> - <<set $activeSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration")>> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "odd")>> - <<set $activeSlave.custom.desc = "$He sometimes forgets $himself and acts as though $he were still a coming celebrity.">> - -<<case "politician">> - <<set $activeSlaveOneTimeMinAge = 38>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He was once a rising old world politician, but was forced to flee from the increasingly dangerous politics common in a stressed world, and was subsequently enslaved.">> - <<set $activeSlave.career = "a politician">> - <<set $activeSlave.boobs += 100>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "normal">> - <<set $activeSlave.height += 10>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-45, -25), 0, 0, 0, jsRandom(30, 70))>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 0>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("arrogant", "bitchy")>> - <<set $activeSlave.custom.tattoo = "A small tattoo of the crest of an old world sorority is visible on $his left shoulder blade.">> - <<set $activeSlave.custom.desc = "$His face is still recognizable as that which once graced a million campaign posters.">> - -<<case "princess">> - <<set $activeSlaveOneTimeMaxAge = 18>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 3>> - <<set $activeSlave.prestigeDesc = "$He was born a $daughter of royalty, but $his family was overthrown when $he was still young. $He is a graduate cum laude of the world's most renowned slave school.">> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.boobs += 100>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.height += 10>> - <<set $activeSlave.devotion = random(75,90)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, 100, 0, 0, 0, jsRandom(0, 20))>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.vagina = 0>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.skill.vaginal = 0>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<set $activeSlave.custom.tattoo = "$His family crest is tattooed on $his cheek.">> - <<set $activeSlave.custom.desc = "$His recognizable face marks $him as a descendant of an overthrown royal family.">> - -<<case "arcology">> - <<set $activeSlaveOneTimeMinAge = 28>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 3>> - <<set $activeSlave.prestigeDesc = "$He was once an arcology owner like you, but lost a Free Cities power struggle and was enslaved. An object lesson in the need to stay vigilant.">> - <<set $activeSlave.career = "an arcology owner">> - <<set $activeSlave.boobsImplant += random(20,40)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "advanced fillable">> - <<set $activeSlave.boobs += 1000>> - <<set $activeSlave.nipples = either("cute", "huge", "puffy")>> - <<set $activeSlave.areolae = 2>> - <<set $activeSlave.buttImplant += random(6,8)>> - <<set $activeSlave.butt += $activeSlave.buttImplant>> - <<set $activeSlave.buttImplantType = "advanced fillable">> - <<set $activeSlave.heels = 1>> - <<set $activeSlave.voice = 0>> - <<set $activeSlave.lips = random(75,85)>> - <<set $activeSlave.lipsImplant = 3>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-70, -60), undefined, undefined, undefined, jsRandom(40, 90))>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.vagina = 3>> - <<set $activeSlave.weight = -20>> - <<set $activeSlave.nipplesPiercing = 2>> - <<set $activeSlave.clitPiercing = 2>> - <<set $activeSlave.vaginaPiercing = 2>> - <<set $activeSlave.dickPiercing = 2>> - <<set $activeSlave.anusPiercing = 2>> - <<set $activeSlave.lipsPiercing = 2>> - <<set $activeSlave.tonguePiercing = 2>> - <<set $activeSlave.earPiercing = 2>> - <<set $activeSlave.nosePiercing = 2>> - <<set $activeSlave.eyebrowPiercing = 2>> - <<set $activeSlave.navelPiercing = 2>> - <<set $activeSlave.boobsTat = "rude words">> - <<set $activeSlave.buttTat = "rude words">> - <<set $activeSlave.vaginaTat = "rude words">> - <<set $activeSlave.dickTat = "rude words">> - <<set $activeSlave.lipsTat = "rude words">> - <<set $activeSlave.anusTat = "rude words">> - <<set $activeSlave.shouldersTat = "rude words">> - <<set $activeSlave.armsTat = "rude words">> - <<set $activeSlave.legsTat = "rude words">> - <<set $activeSlave.stampTat = "rude words">> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.hStyle = "shaved">> - <<set $activeSlave.hLength = 0>> - <<set $activeSlave.behavioralFlaw = either("odd")>> - <<set $activeSlave.custom.desc = "$His back is covered in a fine network of hairline scars, as though $he's been repeatedly flogged bloody, healed with curatives, and then flogged again.">> - <<set $activeSlave.custom.tattoo = "'ARCOLOGY OWNER' is tattooed across $his forehead.">> - -<<case "streamer">> - <<set $activeSlaveOneTimeMaxAge = 28>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a popular creator on a live streaming service, but donations dropped off after getting caught up in some controversy.">> - <<set $activeSlave.career = "a camgirl">> - <<set $activeSlave.boobs = random(1,4)*100>> - <<set $activeSlave.butt = random(1,3)>> - <<set $activeSlave.lips = random(15,25)>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-45, -25), 0, 0, 0, jsRandom(30, 70))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.weight = 20>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.vaginal = 15>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 1>> - <<set $activeSlave.skill.whoring = 5>> - <<set $activeSlave.skill.entertainment = 70>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("arrogant", "bitchy", "odd")>> - <<set $activeSlave.custom.desc = "$He is very comfortable in front of a camera and in public performances, having spent a long time entertaining $his viewers.">> - -<<case "d herm">> - <<set $activeSlaveOneTimeMinAge = 24>> - <<set $activeSlaveOneTimeMaxAge = 40>> - <<set $one_time_age_overrides_pedo_mode = 1>> /% Enslaved as an adult. %/ - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He is a natural-born hermaphrodite. $He was enslaved as an adult and subjected to treatment to upgrade both $his halves to full functionality.">> - <<set $activeSlave.devotion = random(-45,-25)>> - <<set $activeSlave.trust = random(-90,-75)>> - <<run setHealth($activeSlave, jsRandom(-40, -30), undefined, undefined, 0, jsRandom(30, 70))>> - <<set $activeSlave.chem = 100>> - <<set $activeSlave.anus = random(1,2)>> - <<set $activeSlave.dick = random(1,2)>> - <<if $activeSlave.dick > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<set $activeSlave.prostate = 1>> - <<set $activeSlave.vagina = 1>> - <<set $activeSlave.ovaries = 1>> - <<set $activeSlave.preg = 0>> - <<set $activeSlave.balls = random(1,2)>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.weight = random(-80,-20)>> - <<set $activeSlave.attrXX = random(30,50)>> - <<set $activeSlave.attrXY = random(30,50)>> - <<set $activeSlave.energy = random(5,20)>> - <<set $activeSlave.skill.vaginal = 0>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.custom.desc = "$He has had a very difficult time adjusting to $his unusual biology.">> - -<<case "d young herm">> - <<set $activeSlaveOneTimeMaxAge = 19>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He is a natural-born hermaphrodite. $He received treatment to ensure both $his halves would be fully functional from an early age.">> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.devotion = random(25,45)>> - <<set $activeSlave.trust = random(25,45)>> - <<run setHealth($activeSlave, jsRandom(0, 20), 0, 0, 0, jsRandom(20, 60))>> - <<set $activeSlave.chem = 200>> - <<set $activeSlave.boobs += 100*random(2,4)>> - <<set $activeSlave.butt += random(1,2)>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.dick = random(4,6)>> - <<set $activeSlave.prostate = 1>> - <<if $activeSlave.dick > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<set $activeSlave.balls = random(4,6)>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.weight = random(20,80)>> - <<set $activeSlave.attrXX = random(80,100)>> - <<set $activeSlave.attrXY = random(80,100)>> - <<set $activeSlave.energy = random(60,90)>> - <<set $activeSlave.skill.vaginal = 0>> - <<set $activeSlave.skill.oral = 0>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 15>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<set $activeSlave.sexualQuirk = either("caring", "perverted", "romantic", "tease")>> - <<set $activeSlave.behavioralQuirk = either("adores men", "adores women", "advocate", "confident", "cutting", "funny")>> - <<set $activeSlave.custom.desc = "$He is very comfortable with $his unusual biology.">> - -<<case "d pornstar">> - <<set $activeSlaveOneTimeMinAge = 24>> - <<set $activeSlaveOneTimeMaxAge = 40>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a noted adult film star, and was sold into slavery by $his unscrupulous managers.">> - <<set $activeSlave.career = "a porn star">> - <<set $activeSlave.boobsImplant += random(4,6)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "fillable">> - <<set $activeSlave.nipples = either("cute", "huge", "puffy")>> - <<set $activeSlave.areolae = 1>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.buttImplant += 1>> - <<set $activeSlave.buttImplantType = "normal">> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.lipsImplant += 10>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "androgynous">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, undefined, undefined, undefined, undefined, jsRandom(30, 70))>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.dick = 5>> - <<if $activeSlave.foreskin > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<set $activeSlave.balls = 5>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 1>> - <<set $activeSlave.tonguePiercing = 1>> - <<set $activeSlave.nipplesPiercing = 1>> - <<set $activeSlave.nosePiercing = 1>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 100>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 100>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy")>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.desc = "$He has seen and done almost everything sexually possible, on camera.">> - -<<case "d trophy husband">> - <<set $activeSlaveOneTimeMinAge = 19>> - <<set $activeSlaveOneTimeMaxAge = 22>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once the young trophy husband of a powerful woman in the old world, but she sold $him into slavery in revenge for $his infidelities.">> - <<set $activeSlave.career = "a trophy spouse">> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "cute">> - <<set $activeSlave.muscles = random(20,100)>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(60, 80), 0, 0, 0, jsRandom(10, 30))>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 1>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 15>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("arrogant", "bitchy")>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.tattoo = "$His ex-wife's name is prettily tattooed on $his left arm, but a black line has been subsequently tattooed across it.">> - -<<case "d sports star">> - <<set $activeSlaveOneTimeMinAge = 21>> - <<set $activeSlaveOneTimeMaxAge = 25>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once expected to become a major sports star, but flamed out due to injury and was recently enslaved due to debt.">> - <<set $activeSlave.career = "an athlete">> - <<set $activeSlave.intelligence = random(-90,-20)>> - <<set $activeSlave.intelligenceImplant = 0>> - <<set $activeSlave.muscles = 50>> - <<set $activeSlave.heels = 1>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(80, 90), 0, jsRandom(5, 10), 0, jsRandom(20, 50))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.dick = random(3,5)>> - <<if $activeSlave.dick > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<set $activeSlave.balls = random(3,5)>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.skill.combat = 1>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration")>> - <<set $activeSlave.behavioralFlaw = "arrogant">> - <<set $activeSlave.custom.desc = "$He's not particularly bright, and enjoys solving problems with physical force.">> - -<<case "d young model">> - <<set $activeSlaveOneTimeMaxAge = 21>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a rising young model, but apparently someone decided to take a shortcut in cashing in on $his great beauty.">> - <<set $activeSlave.career = "a model">> - <<set $activeSlave.boobs = random(1,3)*100>> - <<set $activeSlave.butt = random(1,2)>> - <<set $activeSlave.muscles = 20>> - <<set $activeSlave.lips = random(15,25)>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.faceImplant = 20*random(1,2)>> - <<set $activeSlave.faceShape = "androgynous">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-20, 20), 0, 0, 0, jsRandom(10, 30))>> - <<set $activeSlave.anus = 2>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = either("hates women")>> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant")>> - <<set $activeSlave.custom.desc = "$He moves with the practiced grace of someone who unconsciously still pictures $himself on the runway.">> - -<<case "d albino">> - <<set $activeSlaveOneTimeMaxAge = 18>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens.">> - <<set $activeSlave.geneticQuirks.albinism = 2>> - <<set $activeSlave.albinismOverride = {skin: "pure white", eyeColor: "pale grey", hColor: "white"}>> - <<run applyGeneticColor($activeSlave)>> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run eyeSurgery($activeSlave, "both", "blur"), setHealth($activeSlave, jsRandom(40, 60), 0, 0, 0, jsRandom(10, 30))>> - <<set $activeSlave.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast.">> - -<<case "d old-timer">> - <<set $activeSlaveOneTimeMinAge = ($minimumSlaveAge + 15)>> - <<set $activeSlaveOneTimeMaxAge = 35>> - <<set $one_time_age_overrides_pedo_mode = 1>> /% 15 years a slave. %/ - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He is one of the longest legally-enslaved persons in the world, having been a slave for 15 years. $He has spent almost all that time working as a slave prostitute, and has been heavily modified to keep $him productive.">> - <<set $activeSlave.career = "a prostitute">> - <<set $activeSlave.boobsImplant += random(10,15)*200>> - <<set $activeSlave.boobs += $activeSlave.boobsImplant>> - <<set $activeSlave.boobsImplantType = "advanced fillable">> - <<set $activeSlave.nipples = either("cute", "huge", "puffy")>> - <<set $activeSlave.areolae = 2>> - <<set $activeSlave.butt += 4>> - <<set $activeSlave.buttImplant += 4>> - <<set $activeSlave.buttImplantType = "fillable">> - <<set $activeSlave.lips = random(25,55)>> - <<set $activeSlave.lipsImplant = 2>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.faceImplant = 40>> - <<set $activeSlave.faceShape = "exotic">> - <<set $activeSlave.devotion = random(25,45)>> - <<set $activeSlave.trust = random(0,15)>> - <<run setHealth($activeSlave, jsRandom(20, 40), undefined, jsRandom(5, 10), undefined, jsRandom(30, 70))>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.dick = 1>> - <<if $activeSlave.foreskin > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.balls = 0>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.clitPiercing = 2>> - <<set $activeSlave.tonguePiercing = 2>> - <<set $activeSlave.nipplesPiercing = 2>> - <<set $activeSlave.nosePiercing = 2>> - <<set $activeSlave.lipsPiercing = 2>> - <<set $activeSlave.vaginaPiercing = 2>> - <<set $activeSlave.anusPiercing = 2>> - <<set $activeSlave.navelPiercing = 2>> - <<set $activeSlave.eyebrowPiercing = 2>> - <<set $activeSlave.earPiercing = 2>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 100>> - <<set $activeSlave.skill.whoring = 100>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<set $activeSlave.energy = 100>> - <<set $activeSlave.fetish = "none">> - <<set $activeSlave.fetishKnown = 1>> - <<set $activeSlave.custom.desc = "$He has almost no inhibitions left at all.">> - <<set $activeSlave.custom.tattoo = "'50,000 Served!' is tattooed across $his back.">> - <<set $activeSlave.counter.publicUse += 1000>> - -<<case "d b-list actress">> - <<set $activeSlaveOneTimeMinAge = 24>> - <<set $activeSlaveOneTimeMaxAge = 28>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He was once a B-list actress, but fell on hard times and drug addiction and was recently enslaved due to debt.">> - <<set $activeSlave.career = "an actress">> - <<set $activeSlave.boobs += 200>> - <<set $activeSlave.boobsImplant += 200>> - <<set $activeSlave.boobsImplantType = "normal">> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.buttImplant += 1>> - <<set $activeSlave.buttImplantType = "normal">> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.lipsImplant += 10>> - <<set $activeSlave.face = 55>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "cute">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-80, -40), 0, 0, 0, jsRandom(30, 70))>> - <<set $activeSlave.anus = 1>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 100>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.addict = 20>> - <<set $activeSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration")>> - <<set $activeSlave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "odd")>> - <<set $activeSlave.custom.desc = "$He sometimes forgets $himself and acts as though $he were still a coming celebrity.">> - -<<case "d politician">> - <<set $activeSlaveOneTimeMinAge = 38>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 2>> - <<set $activeSlave.prestigeDesc = "$He was once a rising old world politician, but was forced to flee from the increasingly dangerous politics common in a stressed world, and was subsequently enslaved.">> - <<set $activeSlave.career = "a politician">> - <<set $activeSlave.muscles = random(10,50)>> - <<set $activeSlave.height = random(160,200)>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.faceImplant += 20>> - <<set $activeSlave.faceShape = "masculine">> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(60, 80), 0, 0, 0, jsRandom(30, 70))>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.skill.oral = 0>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.behavioralFlaw = either("arrogant", "bitchy")>> - <<set $activeSlave.custom.tattoo = "A small tattoo of the crest of an old world fraternity is visible on $his left shoulder blade.">> - <<set $activeSlave.custom.desc = "$His face is still recognizable as that which once graced a million campaign posters.">> - -<<case "d princess">> - <<set $activeSlaveOneTimeMaxAge = 18>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 3>> - <<set $activeSlave.prestigeDesc = "$He was born a child of royalty, but $his family was overthrown when $he was still young. $He is a graduate cum laude of the world's most renowned slave school.">> - <<set $activeSlave.career = "a slave">> - <<set $activeSlave.boobs += 100>> - <<set $activeSlave.butt += 1>> - <<set $activeSlave.lips += 10>> - <<set $activeSlave.face = Math.clamp($activeSlave.face+20,-100,100)>> - <<set $activeSlave.height += 10>> - <<set $activeSlave.devotion = random(75,85)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, 100, 0, 0, 0, jsRandom(0, 20))>> - <<set $activeSlave.anus = 0>> - <<set $activeSlave.dick = 2>> - <<if $activeSlave.foreskin > 0>><<set $activeSlave.foreskin = $activeSlave.dick>><</if>> - <<set $activeSlave.balls = 1>> - <<if $activeSlave.balls > 0>><<set $activeSlave.scrotum = $activeSlave.balls>><</if>> - <<set $activeSlave.weight = 0>> - <<set $activeSlave.skill.vaginal = 0>> - <<set $activeSlave.skill.oral = 100>> - <<set $activeSlave.skill.anal = 0>> - <<set $activeSlave.skill.whoring = 15>> - <<set $activeSlave.skill.entertainment = 35>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.sexualFlaw = "none">> - <<set $activeSlave.behavioralFlaw = "none">> - <<set $activeSlave.custom.tattoo = "$His family crest is tattooed on $his cheek.">> - <<set $activeSlave.custom.desc = "$His recognizable face marks $him as a descendant of an overthrown royal family.">> - -<<case "d arcology">> - <<set $activeSlaveOneTimeMinAge = 28>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 3>> - <<set $activeSlave.prestigeDesc = "$He was once an arcology owner like you, but lost a Free Cities power struggle and was enslaved. An object lesson in the need to stay vigilant.">> - <<set $activeSlave.career = "an arcology owner">> - <<set $activeSlave.muscles = random(10,50)>> - <<set $activeSlave.heels = 1>> - <<set $activeSlave.voice = 0>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-80, -60), undefined, undefined, undefined, jsRandom(40, 90))>> - <<set $activeSlave.anus = 3>> - <<set $activeSlave.weight = -20>> - <<set $activeSlave.nipplesPiercing = 2>> - <<set $activeSlave.clitPiercing = 2>> - <<set $activeSlave.vaginaPiercing = 2>> - <<set $activeSlave.dickPiercing = 2>> - <<set $activeSlave.anusPiercing = 2>> - <<set $activeSlave.lipsPiercing = 2>> - <<set $activeSlave.tonguePiercing = 2>> - <<set $activeSlave.earPiercing = 2>> - <<set $activeSlave.nosePiercing = 2>> - <<set $activeSlave.eyebrowPiercing = 2>> - <<set $activeSlave.navelPiercing = 2>> - <<set $activeSlave.boobsTat = "rude words">> - <<set $activeSlave.buttTat = "rude words">> - <<set $activeSlave.vaginaTat = "rude words">> - <<set $activeSlave.dickTat = "rude words">> - <<set $activeSlave.lipsTat = "rude words">> - <<set $activeSlave.anusTat = "rude words">> - <<set $activeSlave.shouldersTat = "rude words">> - <<set $activeSlave.armsTat = "rude words">> - <<set $activeSlave.legsTat = "rude words">> - <<set $activeSlave.stampTat = "rude words">> - <<set $activeSlave.skill.oral = 15>> - <<set $activeSlave.skill.anal = 15>> - <<set $activeSlave.skill.whoring = 0>> - <<set $activeSlave.skill.entertainment = 0>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.hStyle = "shaved">> - <<set $activeSlave.hLength = 0>> - <<set $activeSlave.behavioralFlaw = either("odd")>> - <<set $activeSlave.custom.desc = "$His back is covered in a fine network of hairline scars, as though $he's been repeatedly flogged bloody, healed with curatives, and then flogged again.">> - <<set $activeSlave.custom.tattoo = "'ARCOLOGY OWNER' is tattooed across $his forehead.">> - -<<case "d streamer">> - <<set $activeSlaveOneTimeMaxAge = 28>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $activeSlave.origin = "You bought $him at auction.">> - <<set $activeSlave.prestige = 1>> - <<set $activeSlave.prestigeDesc = "$He was once a popular creator on a live streaming service, but donations dropped off after getting caught up in some controversy.">> - <<set $activeSlave.career = "a camgirl">> - <<set $activeSlave.boobs = random(1,3)*100>> - <<set $activeSlave.butt = random(1,2)>> - <<set $activeSlave.muscles = random(0, 20)>> - <<set $activeSlave.lips = random(15,25)>> - <<set $activeSlave.face = random(20,55)>> - <<set $activeSlave.faceShape = either("androgynous", "masculine")>> - <<set $activeSlave.devotion = random(-90,-80)>> - <<set $activeSlave.trust = random(-45,-25)>> - <<run setHealth($activeSlave, jsRandom(-45, -25), 0, 0, 0, jsRandom(20, 60))>> - <<set $activeSlave.anus = 2>> - <<set $activeSlave.weight = 20>> - <<set $activeSlave.earPiercing = 1>> - <<set $activeSlave.skill.oral = 30>> - <<set $activeSlave.skill.anal = 1>> - <<set $activeSlave.skill.whoring = 5>> - <<set $activeSlave.skill.entertainment = 70>> - <<set $activeSlave.pubicHStyle = "waxed">> - <<set $activeSlave.underArmHStyle = "waxed">> - <<set $activeSlave.behavioralFlaw = either("arrogant", "bitchy", "odd")>> - <<set $activeSlave.custom.desc = "$He is very comfortable in front of a camera and in public performances, having spent a long time entertaining $his viewers.">> - -<</switch>> - -<<set _slaveCost = slaveCost($activeSlave)>> - -<br><br>It will take <<print cashFormat(_slaveCost)>> to win the auction. - -<br> -<<if $cash >= _slaveCost>> - [[Place that bid|New Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave),$nextButton = "Continue",$nextLink = "AS Dump",$returnTo = "Main"]] -<<else>> - //You lack the necessary funds to place a winning bid.// -<</if>> - -<br><br><<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>> - -<</if>> diff --git a/src/markets/slaveMarkets.tw b/src/markets/slaveMarkets.tw deleted file mode 100644 index d3976e658ca0a271c53dc2efd287ad091db5cc9a..0000000000000000000000000000000000000000 --- a/src/markets/slaveMarkets.tw +++ /dev/null @@ -1,186 +0,0 @@ -:: Slave Markets [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Kidnapped Slaves">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -You visit the slave markets off the arcology plaza. It's always preferable to examine merchandise in person. - -<<switch $slaveMarket>> -<<case "heap">> - You're in the corner of the slave market occupied by "The Flesh Heap", a dumping ground, of sorts, for broken slaves. Be it brain death, drug overdose, coma, or anything else, this market is willing to buy and sell them. Most of the worthwhile slaves have already been picked clean by pharmaceutical companies for drug testing, and the rest are practically nothing more than vegetables, but a handful remain just conscious enough to be profitable with effort as slaves. One should go in expecting only the worst quality possible, though if anything catches your eye, it will be rather cheap to purchase. - - <<set _heap = random(1,4)>> - <<if _heap == 1>> - "Looking for a warm body to use as furniture? Perhaps as a decorative, living sculpture? We got what you want!" - <<elseif _heap == 2>> - "I guarantee they are all alive, maybe not healthy, but alive. Well, except that one; just ignore that one." - <<elseif _heap == 3>> - "We ask that you don't use this merchandise for organ harvesting; we have plenty of nonfunctional ones for that." - <<else>> - "If you are looking for a body to do unmentionable things to, you came to the right place! Though these in particular just barely fall under slave laws." - <</if>> - -<<case "wetware">> - <<setNonlocalPronouns $seeDicks>> - You're in the corner of the slave market occupied by scientists and programmers, pioneers in perfecting the skills of slaves by removing all external stimuli and subjecting them to an inhumane regimen of simulated sexual and career training. Although their bodies are ruined, these slaves are guaranteed to be intelligent, skilled and trained in a variety of jobs. If you're willing to perform extensive repairs<<if $bodyswapAnnounced>>, or have a spare body ready<</if>>, these slaves have high potential in almost any role in your arcology. - - <<set _wetware = random(1,4)>> - <<if _wetware == 1>> - Just past a scientist, you can see a <<if $seeExtreme == 1>>limbless <</if>>slave being extracted from a tank filled with fluid wearing a bizarre helmet. As the device is removed by a technician, the slave begins to panic as _heU is dragged from _hisU virtual life and realizes exactly what has happened to _hisU body. - <<elseif _wetware == 2>> - A scientist turns to you and remarks "I almost envy the hardware. They believe they're having a fulfilling career with a loving family and meaningful relationships for a lifetime. Honestly, if the mental imprinting process wasn't so destructive to the human body, I'd probably hop in myself!" - <<elseif _wetware == 3>> - Racks of ravaged bodies are laid across tables with plaques stating slave IQ, career, and sexual skill exam results. - <<else>> - Curious, you ask a technician why it's necessary for the merchandise to be so badly treated. He replies "Forcing stimulus on the hardware takes an enormous toll on their nervous and circulatory system. The nonfunctional components are disabled and removed as necessary to ensure optimal response to the imprinting process." - <</if>> - -<<case "kidnappers">> - <<setNonlocalPronouns $seeDicks>> - You're in the area of the slave market populated by slave kidnappers, though of course they prefer more polite titles. The slaves here are cheap, and they look it. They're almost all recent catches from bad parts of the old world, and most of them have seen considerable abuse between the moment of their capture and entering your arcology. - <<if $arcologies[0].FSPaternalistSMR == 1>> - Fortunately for them, such behavior is not permitted here. Though they remain frightened and angry, they are safe from rape, for now. - <<else>> - <<set _kidnappers = random(1,4)>> - There's more merchandise out of sight in the holding areas. To go by what you can hear, - <<if (_kidnappers == 1) && (random(1,100) <= $seeDicks)>> - muffled insistence that the speaker is not a girl followed by struggling and then shrieks as a resistant dickgirl takes anal rape, - <<elseif (_kidnappers == 2) && (random(0,99) >= $seeDicks)>> - muffled begging followed by struggling and then crying as a new slave learns how it feels to have a slave's cunt, - <<elseif (_kidnappers == 3)>> - muffled gagging followed gasping and sobbing as a new slave tries to get _hisU breath back after oral rape, - <<else>> - the unmistakable slap of flesh on flesh, - <</if>> - at least one of the slavers is amusing himself<<if $arcologies[0].FSGenderFundamentalist == "unset">> (or herself)<</if>> back there. - <</if>> - -<<case "indentures">> - <<setNonlocalPronouns $seeDicks>> - You're in the area of the slave market that deals in indentured servants. The people sold here are slaves, but they are temporary slaves, and many of them have clauses in their indentures that prohibit some of the most severe practices. They exhibit a strange variety, with some looking more frightened than the most downtrodden slave and some looking almost cheerful. - <<if $arcologies[0].FSPaternalistSMR == 1>> - The generous protections for slaves in your arcology lend this last group extra confidence. - <<else>> - <<set _indentures = random(1,4)>> - The area is crowded, and more indentured servants are packed together in the holding areas. To go by what you can hear, - <<if (_indentures == 1) && (random(1,100) <= $seeDicks)>> - the unmistakable mixed shrieks, sobs, and slaps of anal rape, - <<elseif (_indentures == 2) && (random(0,99) >= $seeDicks)>> - the characteristic crying and gasping of an unwilling _girlU giving up _hisU cunt, - <<elseif (_indentures == 3)>> - the gagging and expectoration of someone who has just gotten a mouthful of unwelcome cum, - <<else>> - disconsolate sobbing interrupted by a gasp as something is stuffed inside someone's mouth, and followed by muffled screams, - <</if>> - one of them is learning exactly what _hisU indenture allows. - <</if>> - -<<case "hunters">> - <<setNonlocalPronouns $seeDicks>> - You're in the area of the slave market populated by runaway slave catchers, a proud group. The slaves here know their way around Free Cities slavery already, and their eyes are watchful. Most of them probably harbor thoughts of another attempt at escape, though the slavers to their best to disabuse them of these notions. - <<if $arcologies[0].FSPaternalistSMR == 1>> - Their methods are somewhat limited, as the rules in your arcology preclude the more effective methods of punishment. - <<else>> - <<set _hunters = random(1,4)>> - The slave catchers consider their catches fair game, though they usually confine their amusements to the holding areas out of sight. Not out of earshot, though; to go by what you can hear, - <<if (_hunters == 1) && (random(1,100) <= $seeDicks)>> - vehement insistence that the speaker is not a girl followed by a beating and then shrieks as a rebellious dickgirl takes anal rape, - <<elseif (_hunters == 2) && (random(0,99) >= $seeDicks)>> - vehement protestations followed by a beating and then crying as a slave's cunt takes _hisU punishment for _himU, - <<elseif (_hunters == 3)>> - struggling and gagging followed gasping and angry swearing as a rebellious slave tries to get _hisU breath back after oral rape, - <<else>> - struggling followed by the slap of flesh on flesh, - <</if>> - at least one of the runaway hunters is amusing himself<<if $arcologies[0].FSGenderFundamentalist == "unset">> (or herself)<</if>> back there. - <</if>> - -<<case "underage raiders">> - You're in the seediest area of the slave market populated by the cradle robbers, a despised group of slavers known for raiding elementary schools, orphanages and even preschools. They specifically target those who have yet to experience their first period. The extreme risk of these raids makes the slavers here aggressive and confident, - <<if $arcologies[0].FSPaternalistSMR == 1>> - though they do obey the rules of your arcology that restrain them from abusing the slaves. - <<else>> - <<set _ur = random(1,4)>> - though they restrain themselves from reducing the value of their captures by taking virginities. They do have their fun, though; to go by what you can hear from the holding area where they keep underage slaves who can be sold, - <<if (_ur == 1) && (random(1,100) <= $seeDicks)>> - a muffled but obviously sadistic description of feminization, and the desperate sobbing in response, - <<elseif (_ur == 2) && (random(0,99) >= $seeDicks)>> - a muffled but obviously sadistic description of breeding, and the desperate sobbing in response, - <<elseif (_ur == 3)>> - faint struggling and crying that suggests that someone is being thoroughly groped and pinched, - <<else>> - the lewd, lubricated noise of someone giving a reluctant handjob, - <</if>> - at least one of the raiders is amusing himself<<if $arcologies[0].FSGenderFundamentalist == "unset">> (or herself)<</if>> back there. - <</if>> - -<<case "raiders">> - You're in the area of the slave market populated by girl raiders, that daredevil subset of slave kidnappers that specifically target old world schools, preparatory institutions, religious groups, and other sources of slaves that can soon be sold right after they reach their majorities. The extreme risk of these raids makes the slavers here aggressive and confident, - <<if $arcologies[0].FSPaternalistSMR == 1>> - though they do obey the rules of your arcology that restrain them from abusing the slaves. - <<else>> - <<set _raiders = random(1,4)>> - though they restrain themselves from reducing the value of their captures by taking virginities. They do have their fun, though; to go by what you can hear from the holding area where they keep slaves of age who can be sold, - <<if (_raiders == 1) && (random(1,100) <= $seeDicks)>> - a muffled but obviously sadistic description of feminization, and the desperate sobbing in response, - <<elseif (_raiders == 2) && (random(0,99) >= $seeDicks)>> - a muffled but obviously sadistic description of breeding, and the desperate sobbing in response, - <<elseif (_raiders == 3)>> - faint struggling and crying that suggests that someone is being thoroughly groped and pinched, - <<else>> - the lewd, lubricated noise of someone giving a reluctant handjob, - <</if>> - at least one of the raiders is amusing himself<<if $arcologies[0].FSGenderFundamentalist == "unset">> (or herself)<</if>> back there. - <</if>> - -<<case "neighbor">> - You're in the area of the slave market that specializes in slaves from within the Free City, viewing slaves from ''<<print "$arcologies[$numArcology].name">>''. Some were trained there, specifically for sale, while others are simply being sold. - <<set _opinion = App.Neighbor.opinion(0, $numArcology)>> - <<if _opinion != 0>> - <<set _slaveCost -= Math.trunc(_slaveCost*_opinion*0.05)>> - <<if _opinion > 2>> - Your cultural ties with '' $arcologies[$numArcology].name'' helps keep the price reasonable. - <<elseif _opinion < -2>> - Your social misalignment with '' $arcologies[$numArcology].name'' drives up the price. - <</if>> - <</if>> - -<<case "trainers">> - <<setNonlocalPronouns $seeDicks>> - You're in the area of the slave market populated by slave trainers, easily the wealthiest vendors. The slaves here have received obedience training and medical care, and many have had some basic sexual skills forced on them. - <<if $arcologies[0].FSPaternalistSMR == 1>> - Though the rules of your arcology protected them from the worst excesses of the training profession, many of the slaves on sale have the haunted look of people still coming to terms with the idea that they no longer have any bodily autonomy. - <<else>> - <<set _trainers = random(1,4)>> - The trainers are a competitive bunch, and to go by what you can hear, - <<if (_trainers == 1) && (random(1,100) <= $seeDicks)>> - moaning interspersed with lewd, well-lubricated noises coming from both anal sex and vigorous masturbation, - <<elseif (_trainers == 2) && (random(0,99) >= $seeDicks)>> - moaning and the distinctive slap of feminine buttocks on thighs beneath them as a _girlU rides a dick, - <<elseif (_trainers == 3)>> - the lush, lewd sounds of diligent oral sex, - <<else>> - the call-and-response of a trainer and a slave running through a memorized obedience exercise, - <</if>> - at least one of them is applying some last-minute training to a slave in the holding pens nearby. - <</if>> - -<</switch>> - -<<set _marketResult = generateMarketSlave($slaveMarket, ($numArcology || 1))>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> - -<br><br> - -<<set _slaveCost = slaveCost($activeSlave, false, !App.Data.misc.lawlessMarkets.includes($slaveMarket))>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += _slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1)>><</if>> - -<<set _slaveCost = 500*Math.trunc(_slaveCost/500)>> -The offered price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<includeDOM App.UI.buyingFromMarketControls($activeSlave, _slaveCost)>> diff --git a/src/markets/slaveShelter.tw b/src/markets/slaveShelter.tw deleted file mode 100644 index 1e560ec3a079d582f6a0b5c4108831555846bb8a..0000000000000000000000000000000000000000 --- a/src/markets/slaveShelter.tw +++ /dev/null @@ -1,401 +0,0 @@ -:: Slave Shelter [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Kidnapped Slaves">> - -<<if $shelterSlaveBought == 1>><<goto $returnTo>><</if>> - -You contact the Slave Shelter to review the profile of the slave the Shelter is offering to a good <<if $PC.title == 1>>Master<<else>>Mistress<</if>> willing to pay the Shelter's nominal placement fee. The severe, tired-looking woman who answers your call hurries through the disclaimers. "All Shelter Slaves are provided as-is... the Shelter provides a single slave for placement each week... resale of Shelter slaves is contractually forbidden... we reserve the right to unannounced inspection of placed slaves... the Shelter follows up on reports of abuse or resale of its slaves..." - -<br><br> - -<<if ($shelterSlaveGeneratedWeek || 0) < $week>> -<<set $shelterSlaveGeneratedWeek = $week>> - -<<set _possibleOrigins = []>> -<<set _possibleOrigins.push("broken")>> -<<if $seeExtreme == 1>> - <<set _possibleOrigins.push("amputee", "blind", "deaf")>> - <<if random(1,100) <= $seeDicks>> - <<set _possibleOrigins.push("cannibal victim male")>> - <<else>> - <<set _possibleOrigins.push("cannibal victim female")>> - <</if>> -<</if>> -<<if random(1,100) <= $seeDicks>> - <<set _possibleOrigins.push("dickpain", "gelding")>> -<</if>> -<<if random(0,99) >= $seeDicks>> - <<set _possibleOrigins.push("plugs", "reaction", "used whore")>> - <<if $seePreg != 0>> - <<set _possibleOrigins.push("breeder", "broken womb")>> - <</if>> -<</if>> -<<if $week > 80>> - <<set _possibleOrigins.push("degraded DoL")>> -<</if>> - -<<set _origin = _possibleOrigins.random()>> - -<<switch _origin>> -<<case "broken">> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$He has never communicated anything about $his background, since $he arrived at the shelter with a broken mind.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-25,-45)>> - <<set $shelterSlave.trust = random(-25,-45)>> - <<run setHealth($shelterSlave, jsRandom(-30,-10))>> - <<set $shelterSlave.anus = 3>> - <<set $shelterSlave.skill.oral = 0>> - <<set $shelterSlave.skill.anal = 0>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.intelligence = -70>> - <<set $shelterSlave.intelligenceImplant = 0>> - <<set $shelterSlave.behavioralFlaw = "none">> - <<set $shelterSlave.sexualFlaw = "none">> - <<set $shelterSlave.fetish = "mindbroken">> - <<set $shelterSlave.fetishStrength = 0>> -<<case "amputee">> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "It's not clear why $his previous owner cut $his arms and legs off.">> - <<set $shelterSlave.career = "a slave">> - <<run removeLimbs($shelterSlave, "all")>> - <<set $shelterSlave.devotion = random(-100,-90)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.behavioralFlaw = either("hates men", "hates women", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration")>> -<<case "blind">> - <<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>> - <<set $activeSlaveOneTimeMaxAge = 22>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His owner purposely blinded $him by dumping boiling water into $his eyes.">> - <<set $shelterSlave.career = "a slave">> - <<run eyeSurgery($shelterSlave, "both", "blind")>> - <<run setEyeColor($shelterSlave, "milky white")>> - <<set $shelterSlave.custom.desc = "$He has an obvious burn across $his eyes.">> - <<set $shelterSlave.devotion = random(-100,-90)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.behavioralFlaw = "hates men">> - <<set $shelterSlave.sexualFlaw = "hates oral">> - <<set $shelterSlave.canRecruit = 0>> - <<set $shelterSlave.override_Eye_Color = 1>> -<<case "deaf">> - <<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>> - <<set $activeSlaveOneTimeMaxAge = 22>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His owner purposely deafened $him by piercing $his eardrums with knitting needles.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.hears = -2>> - <<set $shelterSlave.devotion = random(-100,-90)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.behavioralFlaw = "hates men">> - <<set $shelterSlave.sexualFlaw = "hates oral">> - <<set $shelterSlave.canRecruit = 0>> -<<case "broken womb">> - <<set $activeSlaveOneTimeMinAge = 6>> - <<set $activeSlaveOneTimeMaxAge = 22>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$He was found unresponsive in the lower arcology with a gaping pussy and deflated belly. It is unclear what happened to $him.">> - <<set $shelterSlave.career = "homeless">> - <<set $shelterSlave.devotion = random(-25,-45)>> - <<set $shelterSlave.trust = random(-25,-45)>> - <<run setHealth($shelterSlave, jsRandom(-50,-30), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.weight = -50>> - <<set $shelterSlave.vagina = 9>> - <<set $shelterSlave.bellySag = 20>> - <<set $shelterSlave.skill.oral = 0>> - <<set $shelterSlave.skill.anal = 0>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.intelligence = -70>> - <<set $shelterSlave.intelligenceImplant = 0>> - <<set $shelterSlave.behavioralFlaw = "none">> - <<set $shelterSlave.sexualFlaw = "none">> - <<set $shelterSlave.fetish = "mindbroken">> - <<set $shelterSlave.fetishStrength = 0>> -<<case "cannibal victim male">> - <<if $pedo_mode == 1>> - <<set $activeSlaveOneTimeMinAge = 16>> - <<set $one_time_age_overrides_pedo_mode = 1>> - <<else>> - <<set $activeSlaveOneTimeMinAge = 16>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <</if>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His previous owner forced $him to cut off $his dick and balls and cook them.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-100,-80)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.dick = 0>> - <<set $shelterSlave.foreskin = 0>> - <<set $shelterSlave.balls = 0>> - <<set $shelterSlave.scrotum = 0>> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "anorexic", "anorexic", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "neglectful", "self hating")>> - <<set $shelterSlave.fetish = either("masochist", "none", "none")>> - <<set $shelterSlave.custom.desc = "The scars from $his crudely performed self-castration are still visible on $his lower groin.">> -<<case "cannibal victim female">> - <<if $pedo_mode == 1>> - <<set $activeSlaveOneTimeMinAge = 16>> - <<set $one_time_age_overrides_pedo_mode = 1>> - <<else>> - <<set $activeSlaveOneTimeMinAge = 16>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <</if>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His previous owner forced $him to cut off $his breasts and cook them.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-100,-80)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.boobs = 0>> - <<set $shelterSlave.boobsImplant = 0>> - <<set $shelterSlave.boobsImplantType = "none">> - <<set $shelterSlave.nipples = "tiny">> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "anorexic", "anorexic", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "neglectful", "self hating")>> - <<set $shelterSlave.fetish = either("masochist", "none", "none")>> - <<set $shelterSlave.custom.desc = "$His chest is covered by an ugly mess of scar tissue.">> -<<case "degraded DoL">> - <<set $activeSlaveOneTimeMinAge = 14>> - <<set $one_time_age_overrides_pedo_mode = 1>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$He is an enslaved Daughter of Liberty, caught some weeks after the failed coup. $His previous owner used $him as a punching bag and dart board, then when he was bored of $him tattooed obscenities all over $his body and threw $him away.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-100,-90)>> - <<set $shelterSlave.trust = random(-100,-90)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.slaveName = either("Cumbitch", "Cumbucket", "Cumdoll", "Cumgulper", "Fuckhole", "Fuckmeat", "Fuckpuppet", "Fuckslut", "Fucktoy", "Rapemeat", "Sluttypig", "Spunkbucket", "Spunkswallow", "Whorelips")>> - <<set $shelterSlave.slaveSurname = 0>> - <<set $shelterSlave.minorInjury = either("black eye", "bruise", "split lip", 0)>> - <<set $shelterSlave.weight = random(-90,-30)>> - <<set $shelterSlave.muscles = random(-75,0)>> - <<set $shelterSlave.energy = random(0,30)>> - <<set $shelterSlave.fetish = either("humiliation", "humiliation", "masochist", "none", "none", "submissive")>> - <<set $shelterSlave.boobsTat = either("degradation", "rude words", "none")>> - <<set $shelterSlave.buttTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.lipsTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.anusTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.shouldersTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.armsTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.legsTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.backTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.stampTat = either("degradation", "rude words", 0)>> - <<set $shelterSlave.skill.anal = random(10,25)>> - <<set $shelterSlave.anus = random(1,4)>> - <<if isFertile($shelterSlave) && $seePreg != 0>> - <<set $shelterSlave.preg = either(-3, -2, -2, -2, 0, 0, 2, 3, 4, 5)>> - <<if $shelterSlave.preg > 0>> - <<set $shelterSlave.pregSource = -2, $shelterSlave.pregKnown = 1>> - <<set $shelterSlave.pregType = setPregType($shelterSlave)>> - <<set WombImpregnate($shelterSlave, $shelterSlave.pregType, $shelterSlave.pregSource, $shelterSlave.preg)>> - <</if>> - <</if>> - <<if $shelterSlave.vagina > -1>> - <<set $shelterSlave.vagina = random(1,4)>> - <<set $shelterSlave.skill.vaginal = random(10,25)>> - <<set $shelterSlave.vaginaTat = either("degradation", "rude words", 0)>> - <</if>> - <<if $shelterSlave.dick > 1>> - <<set $shelterSlave.dickTat = either("degradation", "rude words", 0)>> - <</if>> -<<case "gelding">> - <<set $activeSlaveOneTimeMinAge = 20>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His previous owner gelded $him and used $him for anal abuse.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-50,-30))>> - <<set $shelterSlave.face = random(-60,-20)>> - <<set $shelterSlave.dick = random(1,2)>> - <<set $shelterSlave.balls = 0>> - <<set $shelterSlave.anus = 4>> - <<set $shelterSlave.skill.oral = 0>> - <<set $shelterSlave.skill.anal = 15>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.attrXY = random(40,60)>> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "hates men", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "hates anal")>> -<<case "dickpain">> - <<set $activeSlaveOneTimeMinAge = 20>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XY")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His background is obscure, but seems to have involved terrible abuse of $his huge cock and balls.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-50,-30))>> - <<set $shelterSlave.face = random(-60,-20)>> - <<set $shelterSlave.dick = random(4,5)>> - <<set $shelterSlave.balls = random(4,5)>> - <<set $shelterSlave.anus = 0>> - <<set $shelterSlave.skill.oral = 0>> - <<set $shelterSlave.skill.anal = 0>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.energy = random(5,10)>> - <<set $shelterSlave.attrXX = 0>> - <<set $shelterSlave.behavioralFlaw = either("hates women", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic")>> -<<case "plugs">> - <<set $activeSlaveOneTimeMinAge = 20>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His holes were cruelly stretched by constant plug use.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-50,-30))>> - <<set $shelterSlave.vagina = 4>> - <<set $shelterSlave.anus = 4>> - <<set $shelterSlave.skill.oral = 15>> - <<set $shelterSlave.skill.anal = 15>> - <<set $shelterSlave.skill.vaginal = 15>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "odd")>> - <<set $shelterSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration")>> -<<case "breeder">> - <<if $pedo_mode == 1>> - <<set $activeSlaveOneTimeMinAge = ($fertilityAge + 6)>> - <<set $one_time_age_overrides_pedo_mode = 1>> /% Old enough to have been pregnant many times. %/ - <<else>> - <<set $activeSlaveOneTimeMinAge = 30>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <</if>> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$His previous owner discarded $him after many pregnancies.">> - <<set $shelterSlave.career = "a breeder">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-50,-30))>> - <<set $shelterSlave.preg = -2>> - <<set $shelterSlave.counter.birthsTotal = 13>> - <<set $activeSlave.pregAdaptation = 60>> - <<set $shelterSlave.bellySag = 10, $shelterSlave.bellySagPreg = 10>> - <<set $shelterSlave.vagina = 3>> - <<set $shelterSlave.skill.oral = 0>> - <<set $shelterSlave.skill.anal = 0>> - <<set $shelterSlave.skill.vaginal = 0>> - <<set $shelterSlave.skill.whoring = 0>> - <<set $shelterSlave.skill.entertainment = 0>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.behavioralFlaw = either("gluttonous", "hates men", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "hates penetration", "repressed")>> -<<case "used whore">> - <<set $activeSlaveOneTimeMinAge = 32>> - <<set $activeSlaveOneTimeMaxAge = 42>> - <<set $one_time_age_overrides_pedo_mode = 1>> /% 20 years of brothel service. %/ - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave("XX")>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$He was worn out by twenty years of brothel service.">> - <<set $shelterSlave.career = "a prostitute">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3))>> - <<set $shelterSlave.face = random(-60,-20)>> - <<set $shelterSlave.preg = -2>> - <<set $shelterSlave.vagina = 4>> - <<set $shelterSlave.anus = 4>> - <<set $shelterSlave.skill.oral = 35>> - <<set $shelterSlave.skill.anal = 35>> - <<set $shelterSlave.skill.vaginal = 35>> - <<set $shelterSlave.skill.whoring = 35>> - <<set $shelterSlave.skill.entertainment = 15>> - <<set $shelterSlave.skill.combat = 0>> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "hates men", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration")>> -<<case "reaction">> - <<set $oneTimeDisableDisability = 1>> - <<set $activeSlave = GenerateNewSlave()>> - <<set $shelterSlave = $activeSlave>> - <<set $shelterSlave.origin = "$He was discarded after suffering a terrible reaction to growth hormone treatment.">> - <<set $shelterSlave.career = "a slave">> - <<set $shelterSlave.devotion = random(-75,-60)>> - <<set $shelterSlave.trust = random(-100,-75)>> - <<run setHealth($shelterSlave, jsRandom(-60,-40), normalRandInt(10, 3), normalRandInt(20, 3))>> - <<set $shelterSlave.chem = 1000>> - <<if ($shelterSlave.dick > 0) && (random(1,2) == 1)>> - <<set $shelterSlave.dick = random(5,6)>> - <</if>> - <<if ($shelterSlave.balls > 0) && (random(1,2) == 1)>> - <<set $shelterSlave.balls = random(5,10)>> - <</if>> - <<if (random(1,3) == 1)>> - <<set $shelterSlave.boobs += 100*random(10,30)>> - <</if>> - <<if (random(1,3) == 1)>> - <<set $shelterSlave.butt += random(3,5)>> - <</if>> - <<set $shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "odd")>> - <<set $shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration")>> -<</switch>> -<<set $shelterSlave.origin = "You got $him at the Slave Shelter. " + $shelterSlave.origin>> -<</if>> -<<set _slaveCost = 1000>> - -<<setLocalPronouns $shelterSlave>> - -The placement fee is <<print cashFormat(_slaveCost)>>. - -<br><br> - -<<set $activeSlave = $shelterSlave>><<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>> - -<br><br> - -<<print $shelterSlave.origin>> - -<br><br> - -<span id="result"> - -<<if $cash >= _slaveCost>> - <<link "Buy $his slave contract">> - <<replace "#result">> - <<set cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), $shelterSlaveBought = 1, $nextButton = "Continue", $nextLink = "AS Dump", $returnTo = "Main">> - <<include "New Slave Intro">> - <</replace>> - <</link>> -<<else>> - //You lack the necessary funds to buy this slave.// -<</if>> - -</span> diff --git a/src/markets/specialSlave.tw b/src/markets/specialSlave.tw deleted file mode 100644 index e0edf91dd3b5e90af440b0eb7a58d1d5e4710885..0000000000000000000000000000000000000000 --- a/src/markets/specialSlave.tw +++ /dev/null @@ -1,5 +0,0 @@ -:: Special Slave [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Direct Sales">> - -<<includeDOM App.Markets.specialSlave()>> diff --git a/src/markets/specificMarkets/JobFulfillmentCenterOrder.js b/src/markets/specificMarkets/JobFulfillmentCenterOrder.js new file mode 100644 index 0000000000000000000000000000000000000000..0bfd3cfa479037e3f91b810b6c05f49b130651af --- /dev/null +++ b/src/markets/specificMarkets/JobFulfillmentCenterOrder.js @@ -0,0 +1,110 @@ +App.Markets.JobFulfillmentCenterOrder = function() { + V.encyclopedia = "Kidnapped Slaves"; + let r = []; + let linkArray = []; + const el = document.createElement("p"); + el.id = "job-fulfillment-center-order"; + el.append(JobFulfillmentCenterOrder()); + return el; + + function JobFulfillmentCenterOrder() { + const el = new DocumentFragment(); + let span = document.createElement("span"); + const {heA} = getPronouns(assistant.pronouns().main).appendSuffix('A'); + + if (V.JFC.order === 0) { + r.push(`You work up a new slave order for posting where slave merchants can work to fulfill it.`); + } + if (V.JFC.order === 1) { + r.push(`You review your posted slave order for a <span class="bold">${V.JFC.role}</span>.`); + } + if (V.assistant.personality === 1) { + r.push(`As you work, ${V.assistant.name} makes lewd comments about what ${heA} looks forward to doing to this new slave.`); + } + el.append(r.join(" ")); + + if (V.JFC.order === 0) { + const security = [ + {title: "Bodyguard"}, + {title: "Wardeness"}, + ]; + const management = [ + {title: "Headgirl"}, + {title: "Teacher"}, + {title: "Nurse"}, + {title: "Attendant (normal)", value: "Attendant"}, + {title: "Attendant (motherly)", value: "Motherly Attendant"}, + {title: "Matron"}, + {title: "Stewardess"}, + {title: "Milkmaid"}, + {title: "Farmer"}, + ]; + const entertainment = [ + {title: "DJ"}, + {title: "Madam"}, + {title: "Concubine"}, + + ]; + linkArray.push( + App.UI.DOM.link( + "Security", + () => { + jobSelection(security); + } + ) + ); + linkArray.push( + App.UI.DOM.link( + "Management", + () => { + jobSelection(management); + } + ) + ); + linkArray.push( + App.UI.DOM.link( + "Entertainment", + () => { + jobSelection(entertainment); + } + ) + ); + App.UI.DOM.appendNewElement("div", el, App.UI.DOM.generateLinksStrip(linkArray)); + span.id = "job-type"; + el.append(span); + } else { + App.UI.DOM.appendNewElement("div", el, + App.UI.DOM.link( + "Withdraw slave order", + () => { + V.JFC.order = 0; + V.JFC.role = ""; + refresh(); + } + ) + ); + } + return el; + + function jobSelection(choices) { + const el = new DocumentFragment(); + for (const choice of choices) { + App.UI.DOM.appendNewElement("div", el, + App.UI.DOM.link( + choice.title, + () => { + V.JFC.order = 1; + V.JFC.role = choice.value || choice.title; + refresh(); + } + ) + ); + } + return jQuery("#job-type").empty().append(el); + } + + function refresh() { + jQuery("#job-fulfillment-center-order").empty().append(JobFulfillmentCenterOrder()); + } + } +}; diff --git a/src/markets/specificMarkets/corporateMarket.js b/src/markets/specificMarkets/corporateMarket.js new file mode 100644 index 0000000000000000000000000000000000000000..6773e02a873c91fe84305d232b5f39682092a130 --- /dev/null +++ b/src/markets/specificMarkets/corporateMarket.js @@ -0,0 +1,174 @@ +App.Markets.corporate = function() { + const el = new DocumentFragment(); + let r = []; + let dickVision; + if (V.corp.SpecGender === 2) { + dickVision = 100; + } else if (V.corp.SpecGender === 1) { + dickVision = 0; + } else { + dickVision = V.seeDicks; + } + const { + HeU, heU, HisU, hisU, himU, himselfU, womanU, girlU, womenU + } = getNonlocalPronouns(dickVision).appendSuffix('U'); + + r.push(`You're in your corporation's flagship slave market.`); + + r.push(`The corporation pays you only nominal rent for this space, but will offer you a discount on slaves here based on your shares in it. Additionally, having the corporation's premiere products sold here in ${V.arcologies[0].name} will associate them with you, allowing your reputation to improve the corporate brand. A pretty`); + if (V.corp.SpecDick === 1 && V.corp.SpecPussy === 1) { + r.push(`futanari`); + } else if (V.corp.SpecGender === 2) { + if (V.corp.SpecBalls === -1) { + r.push(`clipped`); + } else { + r.push(`shemale`); + } + } + r.push(`sales${V.corp.SpecAge === 3 ? womanU : girlU}`); + r.push(`in a slutty suit greets you properly. ${HeU}'s a corporate slave chosen for loyalty and intelligence, and to physically represent the brand.`); + if (V.corp.SpecHeight === 5) { + r.push(`Even before ${heU} engaged with you ${hisU} towering height made ${himU} stand out and caught your eye; from up close ${heU}'s even more impressive.`); + } else if (V.corp.SpecHeight === 1) { + r.push(`${HeU}'s so short you have to physically look down on ${himU}.`); + } + if (V.corp.SpecInjection === 4) { + r.push(`${HeU} has awe-inspiring breasts which ${hisU} suit jacket helps support; even so, their bottoms reach past ${hisU} navel.`); + } else if (V.corp.SpecInjection === 5) { + r.push(`${HeU} has gigantic, milk-swollen breasts almost spilling out of ${hisU} suit.`); + } else if (V.corp.SpecImplants === 2) { + r.push(`${HeU} has enormous fake tits that ride inhumanly high on ${hisU} chest.`); + } else if (V.corp.SpecInjection === 3) { + r.push(`${HeU} has huge tits and a nice broad butt which ${hisU} tight skirt hugs closely.`); + } else if (V.corp.SpecImplants === 1) { + r.push(`${HeU} has nice fake bimbo tits and a silicone bubble butt.`); + } else if (V.corp.SpecInjection === 2) { + r.push(`${HeU}'s nice and curvy, with nice breasts and a lovely ass.`); + } else if (V.corp.SpecInjection === 1) { + r.push(`${HeU} has cute little breasts and a petite rump.`); + } + if (V.corp.SpecCosmetics === 1) { + r.push(`${HisU} face is flawless.`); + } + if (V.corp.SpecRaces.length === 1 || V.corp.SpecNationality) { + let corpSpecRace; + if (V.corp.SpecNationality) { + corpSpecRace = V.corp.SpecNationality; + } else if (V.corp.SpecRaces.length > 0) { + corpSpecRace = V.corp.SpecRaces.jsRandom(); + } + r.push(`${HeU}'s ${corpSpecRace}, of course${(V.corp.SpecAccent === 1) ? `, and has a cute accent` : ``}.`); + } + if (V.corp.SpecHormones === 1) { + r.push(`${HisU} voice is soft and feminine, and ${heU} bats ${hisU} eyes at you.`); + } else if (V.corp.SpecHormones === 2) { + r.push(`${HeU} has a deep voice, and speaks assertively.`); + } + if (V.corp.SpecMuscle === 4) { + r.push(`${HisU} hot body is perfectly toned under ${hisU} suit.`); + } else if (V.corp.SpecMuscle === 5) { + r.push(`${HisU} suit is specially tailored to flatter ${hisU} visible musculature.`); + } + r.push(`Of course, you know all about the corporation, but sales${V.corp.SpecAge === 3 ? womenU : `${girlU}s`} here have standing orders to treat you like any other customer, so you can review the market properly. The slave turns to`); + if (V.corp.SpecAmputee !== 1) { + r.push(`a multimedia presentation on`); + } else { + r.push(`a rack of`); + } + r.push(`your corporation's slaves.`); + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + r = []; + + + r.push(`${HeU} explains that the corporation captures many people, so it only retains and trains those that fit its product lines.`); + + let costMod = 1; + if (V.corp.Market === 1) { + r.push(`Your own local franchise of your corporation allows you to enjoy a discount.`); + costMod = 0.9; + } + + App.UI.DOM.appendNewElement("p", el, App.Markets.purchaseFramework("corporate", {costMod: costMod})); + + r = []; + + r.push(`${HisU} presentation done, the`); + if (V.corp.SpecDick === 1 && V.corp.SpecPussy === 1) { + r.push(`futanari`); + } else if (V.corp.SpecGender === 2) { + if (V.corp.SpecBalls === -1) { + r.push(`clipped`); + } else { + r.push(`shemale`); + } + } + r.push(`sales${V.corp.SpecAge === 3 ? womanU : girlU} directs you to the inventory interface that will allow you to peruse the corporation's slaves, and moves over to stand next to it, ready to answer any questions.`); + if (V.PC.dick !== 0) { + r.push(`${HeU} positions ${himselfU} facing away from you and hikes up ${hisU} skirt to bare ${hisU}`); + if (V.corp.SpecInjection > 4) { + r.push(`gigantic ass`); + } else if (V.corp.SpecImplants > 0) { + r.push(`fake ass`); + } else if (V.corp.SpecInjection === 3) { + r.push(`big butt`); + } else if (V.corp.SpecInjection === 2) { + r.push(`cute butt`); + } else { + r.push(`little behind`); + } + r.push(`and cocks ${hisU} hips${(V.corp.SpecBalls === -1) ? `, keeping ${hisU} soft cock demurely out of sight` : ``}, if you feel like`); + if (V.corp.SpecGender === 2 && V.corp.SpecPussy !== 1) { + r.push(`sodomizing`); + } else { + r.push(`fucking`); + } + r.push(himU); + } else { + r.push(`${HeU} gets down on ${hisU} knees right there, making ${hisU} mouth available if you feel like riding ${hisU} face`); + } + r.push(`while you browse.`); + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + + let result = document.createElement("span"); + result.id = "result"; + result.append( + App.UI.DOM.link( + `Use ${himU}`, + () => { + const r = []; + if (V.PC.dick !== 0) { + r.push(HisU); + if (V.corp.SpecGender === 2 && V.corp.SpecPussy !== 1) { + r.push(`asshole is thoughtfully pre-lubed, and your cock slides easily up it`); + } else { + r.push(`pussy is nice and wet, and your cock slides inside ${himU} easily`); + } + r.push(`as you consider the slaves on offer. ${HeU}'s well trained, and uses ${hisU}`); + if (V.corp.SpecGender === 2 && V.corp.SpecPussy !== 1) { + r.push(`sphincter`); + } else { + r.push(`womanly muscles`); + } + r.push(`to please your member expertly as ${heU} ruts ${himselfU} gently back against you, doing almost all the work. When you orgasm, ${heU} retains the load carefully, keeping your cum inside ${himU} and away from ${hisU} nice clothes.`); + } else { + r.push(`${HeU}'s very well trained, and does all the work. Once you move in and straddle ${himU}, ${heU} gets right down to it, or in this case, up to it. ${HisU} clever tongue runs gently along your labia to build anticipation before starting a delightful dance around and then atop your clitoris. You orgasm in no time at all, a climax which ${heU} carefully prolongs by kissing you full on the pussy in just the right way, only breaking the oral embrace when you've ridden it as far as you'll go.`); + } + jQuery("#result").empty().append(r.join(" ")); + } + ) + ); + el.append(result); + App.UI.DOM.appendNewElement("p", el, + App.UI.DOM.link( + "End corporate slave sales here and return this sector to standard markets", + () => { + V.corp.Market = 0; + App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Market, "Corporate Market", "Markets"); + }, + [], + "Main" + ) + ); + + return el; +}; diff --git a/src/markets/specificMarkets/criminalMarkets.js b/src/markets/specificMarkets/criminalMarkets.js new file mode 100644 index 0000000000000000000000000000000000000000..0b27bca57fbee5862228de2a88aeae885688c400 --- /dev/null +++ b/src/markets/specificMarkets/criminalMarkets.js @@ -0,0 +1,74 @@ +App.Markets["low tier criminals"] = function() { + const el = new DocumentFragment(); + let r = []; + // mixed prisoners + r.push(`You board the transport to a small prison on the edge of the city spanning from the foot of your arcology with the appearance of an old world police station. You arrive inside and are met by a cute receptionist, asking why one such as yourself would visit such a place. With formalities out of the way, the head of the station is called and arrives shortly. "Well now, didn't expect to see you here. Came to pick up a criminal and give them a chance at not being a menial?" You are then led further into the station and into the prisoners' quarters; most of them appear downcast and dismal, but some look up to see what the commotion is about. "You! Come here! This fine`); + if (V.PC.title === 1) { + r.push(`gentleman`); + } else { + r.push(`lady`); + } + r.push(`wants to take a look, so be on your best behavior!" the head calls out, bringing one of the criminals close enough to be inspected.`); + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("low tier criminals", {sTitleSingular: "prisoner", sTitlePlural: "prisoners"})); + return el; +}; + +App.Markets["gangs and smugglers"] = function() { + const el = new DocumentFragment(); + let r = []; + /* males only, or females only if ${V.seeDicks} === 0 */ + App.UI.DOM.appendNewElement("p", el, `You board the transport to a large gray prison at the edge of the Free City as word of your approach is sent ahead. The visage of the prison itself is a grim one, enclosed by a large gray concrete fence with electrified barbed wire coiled at the top. As the vehicle rolls to a stop before a large gate, the guard in control of the gate operates a board of buttons and levers, promptly opening it so it may continue. "Stay on the road," he respectfully advises, a final remark before letting your driver carry on. Beyond the fence is an array of guard towers manned with drones for 24/7 surveillance, giving you a clear idea of what was to happen if you were not to heed the guard's words and decided to wander off from the group.`); + App.UI.DOM.appendNewElement("p", el, `Your destination at the end of the road is a garage, where upon your disembarking, no less than 4 heavily armored guards with electric batons at their sides come to greet you. You could almost mistake them for unmanned drones had they not start speaking. "We've been expecting you; please follow us. We house some dangerous individuals in our establishment and we need to keep you safe." You accept their advice and enter the premises.`); + + r.push(`You are met with a dimly lit concrete hallway as you enter, only for it to open up to a multi-floor prison that had placed its prisoners underground for the most`); + if ((V.PC.title === 0 || V.PC.boobs >= 1000 || V.PC.butt >= 3) && V.seeDicks > 0) { + r.push(`part, where you are met with a hailstorm of whistles, cheers and other catcalls.`); + } else { + r.push(`part.`); + } + r.push(`You come to a bridge and look down to see its inhabitants, hard criminals that are coming together for a meal. You watch a fight break out at one point and an armored guard quickly step in and apply his baton to the offenders, coupled with a loud zap that silences the entire area. Around your level, you see the better stock: the attractive prisoners one would show to an interested customer.`); + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + r = []; + r.push(`You finally reach the warden's office, "Welcome`); + if (V.PC.title === 1) { + r.push(`Mister`); + } else { + r.push(`Miss`); + } + r.push(`${V.PC.slaveSurname}, I never thought my prison could have turned to a trade such as this, but times are hard." He beckons you to the seat opposite him, "but I'm not one to complain when an opportunity such as this comes my way." He motions to his guards to bring in a select stock for your perusal. "We house some tough nuts in this establishment, but if you believe you can capitalize on these criminals, we'll be happy to have you take them off our hands." The guard returns with a convict ready to be sold.`); + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("gangs and smugglers", {sTitleSingular: "prisoner", sTitlePlural: "prisoners"})); + return el; +}; + +App.Markets["white collar"] = function() { + const el = new DocumentFragment(); + // mixed prisoners + App.UI.DOM.appendNewElement("p", el, `You board the transport to what looks more like an oversized vacation home rather than something one goes to for committing crimes. You enter the premises into a small chamber with a booth to the side and are immediately met with a cheerful "Ah! We've been waiting for you. Please go in. We'll call someone to guide you immediately."`); + App.UI.DOM.appendNewElement("p", el, `You nod at the prompt and enter further into the luxurious building to find a formally dressed guide and what appears to be the holding area of the prison. The cells, if you can call them that, are large and cozy, each with their own computer and television. The air is also conditioned for their comfort and old world classical music is playing to provide further ambiance. Walking through, you see the prisoners themselves, lazing about in their beds, sitting at their computers, or just talking to each other. If there was ever a prison you'd rather end up in, this would be it.`); + App.UI.DOM.appendNewElement("p", el, `You enter the warden's office and are greeted with all due formalities. "Glad to see you at our establishment. When I heard that someone as renowned as yourself was coming over, I made the appropriate preparations." You are served a cup of tea as she brings in the chosen stock for you to observe at your leisure.`); + + el.append(App.Markets.purchaseFramework("white collar", {sTitleSingular: "prisoner", sTitlePlural: "prisoners"})); + return el; +}; + +App.Markets["military prison"] = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`You board the transport to a holding facility for prisoners of war located on the outskirts of the Free City, which is reasonable due to the dangers inherent to the criminals imprisoned in such an establishment. The driver radios ahead that you and several other interested parties will be arriving shortly. Once you disembark at the edge of the grounds, you are recognized by the stationed guard and ushered into a heavily armored vehicle.`); + if (V.PC.career === "mercenary") { + r.push(`The interior brings back memories and you completely`); + } else { + r.push(`Although the interior makes you feel like a prisoner, you`); + } + r.push(`understand the reasoning behind such a design choice.`); + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + App.UI.DOM.appendNewElement("p", el, `Once you arrive at the prison, the door opens to a garage and another door, brightly lit to welcome you to the premises. Through the door, you find the prisoner's quarters, each of them enclosed by electrified fences to ensure your safety as you see the stock. A guard enters, asking you to follow him as he leads you across the chamber to meet with the warden.`); + App.UI.DOM.appendNewElement("p", el, `Entering the warden's quarters, you take a seat across from him as he takes the initiative. "Ah, fancy meeting one such as yourself here. Though we house some of the hardiest criminals you can find, I'm sure one such as yourself could find great use for them." He smirks. "... or perhaps great entertainment through the pits," he says as he beckons to his staff as they bring in the selected stock.`); + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("military prison", {sTitleSingular: "prisoner", sTitlePlural: "prisoners"})); + return el; +}; diff --git a/src/markets/customSlave.tw b/src/markets/specificMarkets/customSlave.tw similarity index 100% rename from src/markets/customSlave.tw rename to src/markets/specificMarkets/customSlave.tw diff --git a/src/markets/specificMarkets/eliteSlave.js b/src/markets/specificMarkets/eliteSlave.js new file mode 100644 index 0000000000000000000000000000000000000000..4e89b9a6c3b0a56a50660c75ac2f8fa59e1c4727 --- /dev/null +++ b/src/markets/specificMarkets/eliteSlave.js @@ -0,0 +1,278 @@ +App.Markets["Elite Slave"] = function() { + const el = new DocumentFragment(); + let r = []; + V.encyclopedia = "Slave Schools"; + + r.push(`You check to see if any potential breeding slaves are on auction.`); + if (V.eliteAuctioned === 1) { + r.push(`There are none available right now, but there probably will be next week.`); + } else { + V.eliteAuctioned = 1; + + let minAge; + let maxAge; + if (V.arcologies[0].FSMaturityPreferentialist > 20) { + minAge = 25; + } else { + minAge = V.fertilityAge; + } + if (V.arcologies[0].FSYouthPreferentialist > 20) { + maxAge = 23; + } else { + maxAge = 40; + } + let race; + let races; + if (V.arcologies[0].FSSupremacist !== "unset") { + race = V.arcologies[0].FSSupremacistRace; + } else if (V.arcologies[0].FSSubjugationist !== "unset") { + races = ["amerindian", "asian", "asian", "asian", "asian", "asian", "asian", "black", "black", "indo-aryan", "indo-aryan", "latina", "latina", "latina", "malay", "malay", "middle eastern", "middle eastern", "mixed race", "pacific islander", "semitic", "semitic", "southern european", "southern european", "white", "white", "white", "white", "white", "white", "white", "white", "white"]; + races = races.delete(V.arcologies[0].FSSubjugationistRace); + race = races.random(); + } + let slave = GenerateNewSlave("XX", { + minAge: minAge, maxAge: maxAge, ageOverridesPedoMode: 1, race: race, disableDisability: 1 + }); + slave.origin = "$He was purchased from a member of the Elite."; + slave.career = "a slave"; + slave.prestige = 1; + slave.trust = random(60, 100); + slave.devotion = random(60, 100); + if (V.arcologies[0].FSPetiteAdmiration > 20) { + if (!heightPass(slave)) { + slave.height = Math.trunc(Height.random(slave, {limitMult: [-4, -2]})); + } + } else if (V.arcologies[0].FSStatuesqueGlorification > 20) { + if (!heightPass(slave)) { + slave.height = Math.trunc(Height.random(slave, {limitMult: [3, 5]})); + } + } + if (V.arcologies[0].FSPaternalist > 20) { + setHealth(slave, 100, 0, 0, 0, 0); + slave.intelligenceImplant = 30; + } else { + setHealth(slave, jsRandom(10, 60), undefined, undefined, 0); + slave.intelligenceImplant = either(0, 15, 30); + } + let weightMin; + let weightMax; + if (V.arcologies[0].FSSlimnessEnthusiast > 20) { + if (V.arcologies[0].FSHedonisticDecadence > 20 || V.arcologies[0].FSPhysicalIdealistLaw === 1) { + weightMax = 30; + } else { + weightMax = 0; + } + } else if (V.arcologies[0].FSPhysicalIdealistLaw === 1) { + weightMax = 30; + } else { + weightMax = 100; + } + if (V.arcologies[0].FSHedonisticDecadence > 20) { + if (V.arcologies[0].FSSlimnessEnthusiast > 20) { + weightMin = 10; + } else { + weightMin = 95; + } + } else { + weightMin = -70; + } + slave.weight = random(weightMin, weightMax); + + let musclesMin; + let musclesMax; + if (V.arcologies[0].FSPhysicalIdealist > 20) { + if (V.arcologies[0].FSPhysicalIdealistLaw === 1) { + musclesMin = 20; + musclesMax = 50; + } else { + musclesMin = 95; + musclesMax = 100; + } + } else if (V.arcologies[0].FSHedonisticDecadence > 20) { + if (V.arcologies[0].FSHedonisticDecadenceStrongFat === 1) { + musclesMin = 50; + musclesMax = 100; + } else { + musclesMin = -100; + musclesMax = 50; + } + } else { + musclesMin = -50; + musclesMax = 50; + } + slave.muscles = random(musclesMin, musclesMax); + if (V.arcologies[0].FSPhysicalIdealist > 20) { + slave.height += 5; + } + eyeSurgery(slave, "both", "normal"); + slave.hears = 0; + if (slave.weight < -30) { + slave.waist = random(-55, 0); + } else if (slave.physicalAge < 13) { + slave.waist = random(-25, 25); + } else if ((slave.weight <= 30)) { + slave.waist = random(-45, 5); + } else if ((slave.weight <= 160)) { + slave.waist = random(-20, 10); + } + if (slave.voice < 2) { + slave.voice++; + } + if (slave.accent > 1) { + slave.accent = 1; + } + if (slave.shoulders > 0) { + slave.shoulders -= 2; + } + if (V.arcologies[0].FSAssetExpansionist > 20) { + slave.boobs = (random(50, 500) * 100); + slave.butt = random(6, 20); + if (V.arcologies[0].FSTransformationFetishist > 20) { + slave.boobsImplant = slave.boobs - 200; + if (slave.boobsImplant > 10000) { + slave.boobsImplantType = "hyper fillable"; + } else { + slave.boobsImplantType = "advanced fillable"; + } + slave.buttImplant = slave.butt - 1; + if (slave.buttImplant > 9) { + slave.buttImplantType = "hyper fillable"; + } else { + slave.buttImplantType = "advanced fillable"; + } + } + } else if (V.arcologies[0].FSSlimnessEnthusiast > 20) { + slave.boobs = (random(3, 5) * 100); + slave.butt = random(0, 2); + if (V.arcologies[0].FSTransformationFetishist > 20) { + slave.boobsImplant = slave.boobs - 50; + slave.boobsImplantType = "normal"; + if (slave.butt > 1) { + slave.buttImplant = 1; + slave.buttImplantType = "normal"; + } + } + } else { + slave.boobs = (random(5, 10) * 100); + slave.butt = random(3, 7); + if (V.arcologies[0].FSTransformationFetishist > 20) { + slave.boobsImplant = slave.boobs - 200; + slave.boobsImplantType = "normal"; + slave.buttImplant = slave.butt - 1; + slave.buttImplantType = "normal"; + } + } + if (V.arcologies[0].FSTransformationFetishist > 20) { + slave.boobShape = "normal"; + } else { + slave.boobShape = either("perky", "perky", "torpedo-shaped", "wide-set"); + } + if (slave.nipples === "tiny") { + slave.nipples = "puffy"; + } + slave.face = 100; + slave.faceShape = either("cute", "cute", "exotic", "exotic", "normal", "normal", "sensual", "sensual", "sensual"); + slave.lips = random(45, 75); + if (V.arcologies[0].FSTransformationFetishist > 20) { + slave.lips += 25; + slave.lipsImplant = 25; + } + if (slave.teeth !== "normal" && slave.physicalAge >= 12) { + slave.teeth = "normal"; + } + if (slave.vaginaLube === 0) { + slave.vaginaLube++; + } + slave.preg = 0; + slave.counter.birthsTotal = either(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 4); + if (V.arcologies[0].FSPastoralist > 20 || slave.counter.birthsTotal > 0) { + slave.lactation = 1; + if (V.arcologies[0].FSPastoralist > 20) { + slave.lactationAdaptation = V.arcologies[0].FSPastoralist; + } else { + slave.lactationAdaptation = Math.min(slave.counter.birthsTotal * 10, 100); + } + } else { + slave.lactation = either(0, 0, 0, 0, 1); + } + if (slave.lactation > 0) { + slave.lactationDuration = 2; + } + if (slave.counter.birthsTotal > 0) { + slave.vagina = random(2, 3); + slave.pregWeek = either(-4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } else { + slave.vagina = random(0, 3); + slave.pregWeek = 0; + } + if (slave.hips <= 0) { + slave.hips = 1; + } + if (V.arcologies[0].FSGenderRadicalist > 20) { + slave.dick = random(2, 5); + slave.balls = random(2, 10); + slave.scrotum = slave.balls; + slave.prostate = random(1, 3); + } + slave.makeup = 2; + slave.nails = 1; + if (slave.vagina === 0) { + slave.skill.vaginal = 30; + } else { + slave.skill.vaginal = 60; + } + if (slave.anus === 0) { + slave.skill.anal = 10; + } else { + slave.skill.anal = 60; + } + slave.skill.oral = 60; + slave.chastityVagina = 1; + slave.intelligence = random(51, 100); + if (V.arcologies[0].FSIntellectualDependency > 20) { + slave.energy = 100; + slave.attrXY = 100; + } else if (V.arcologies[0].FSSlaveProfessionalism > 20) { + slave.intelligence = Intelligence.random({limitIntelligence: [80, 100]}); + if (slave.vagina >= 0) { + slave.skill.vaginal = 100; + } + slave.skill.anal = 100; + slave.skill.oral = 100; + slave.skill.entertainment = 100; + slave.skill.whoring = 100; + slave.intelligenceImplant = 30; + } + slave.attrKnown = 1; + slave.fetishKnown = 1; + slave.behavioralQuirk = "confident"; + slave.sexualQuirk = either("caring", "caring", "gagfuck queen", "perverted", "romantic", "romantic", "strugglefuck queen", "tease", "unflinching"); + slave.pubertyXX = 1; + slave.breedingMark = 1; + + let cost = slaveCost(slave, false, true); + + + App.UI.DOM.appendNewElement("p", el, `It will take ${cashFormat(cost)} to win the auction.`); + + if (V.cash >= cost) { + App.UI.DOM.appendNewElement( + "p", + el, + App.UI.DOM.link( + `Place that bid`, + () => { + cashX(forceNeg(cost), "slaveTransfer", slave); + newSlave(slave); + jQuery("#slave-markets").empty().append(App.UI.newSlaveIntro(slave)); + } + ) + ); + } else { + App.UI.DOM.appendNewElement("p", el, `You lack the necessary funds to place a winning bid.`, "note"); + } + + el.append(App.Desc.longSlave(slave, {market: "Elite Slave"})); + } + return el; +}; diff --git a/src/markets/specificMarkets/householdLiquidator.js b/src/markets/specificMarkets/householdLiquidator.js new file mode 100644 index 0000000000000000000000000000000000000000..83b182635701e6f650e1b9e56191cd45f9399809 --- /dev/null +++ b/src/markets/specificMarkets/householdLiquidator.js @@ -0,0 +1,144 @@ +App.Markets["Household Liquidator"] = function() { + V.encyclopedia = "Household Liquidations"; + V.introType = "liquidator"; + V.newSlavesDone = 0; + + const el = new DocumentFragment(); + let slave; + let r = []; + const _newSlaves = []; + let _totalCost; + if (jsRandom(1, 100) > 50) { + slave = GenerateNewSlave(null, {disableDisability: 1}); + slave.origin = "You bought $him from the household liquidator."; + slave.devotion = jsRandom(-75, -25); + slave.trust = jsRandom(-45, -25); + slave.oldDevotion = slave.devotion; + slave.oldTrust = slave.trust; + setHealth(slave, jsRandom(-50, 20)); + setMissingParents(slave); + slave.canRecruit = 0; + + // Create opposite sex chance of relative + const _oppositeSex = (slave.genes !== GenerateChromosome()); + App.UI.DOM.appendNewElement("p", el, `The household liquidator is offering a set of siblings for sale. You are permitted to inspect both slaves.`); + + let _relativeSlave = generateRelatedSlave(slave, "younger sibling", _oppositeSex); + _newSlaves.push(slave); + _newSlaves.push(_relativeSlave); + + let _slaveCost = slaveCost(slave, false, true); + if (V.slavesSeen > V.slaveMarketLimit) { + _slaveCost += Math.trunc(_slaveCost * ((V.slavesSeen - V.slaveMarketLimit) * 0.1)); + } + _totalCost = _slaveCost * 3; + } else if (jsRandom(1, 100) > 20) { + // Old enough to have a child who can be a slave. + slave = GenerateNewSlave(null, { + minAge: (V.fertilityAge + V.minimumSlaveAge), maxAge: 42, ageOverridesPedoMode: 1, disableDisability: 1 + }); + slave.origin = "You bought $him from the household liquidator."; + slave.devotion = jsRandom(-75, -25); + slave.trust = jsRandom(-45, -25); + slave.oldDevotion = slave.devotion; + slave.oldTrust = slave.trust; + setHealth(slave, jsRandom(-50, 20)); + if (slave.vagina > -1) { + slave.boobs += 100; + } + slave.butt += 1; + if (slave.vagina > -1) { + slave.vagina += 1; + } + if (slave.vagina > -1) { + slave.counter.birthsTotal = 1; + } + slave.canRecruit = 0; + + // Create opposite sex chance of relative + const _oppositeSex = (slave.genes !== GenerateChromosome()); + const {his, mother, daughter} = getPronouns(slave); + + r.push(`The household liquidator is offering a ${mother} and ${his}`); + if (slave.genes === "XX" && _oppositeSex === true) { + r.push(`son`); + } else if (slave.genes === "XY" && _oppositeSex === true) { + r.push(`daughter`); + } else { + r.push(`${daughter}`); + } + r.push(`for sale. You are permitted to inspect both slaves.`); + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + + let _relativeSlave = generateRelatedSlave(slave, "child", _oppositeSex); + _newSlaves.push(slave); + _newSlaves.push(_relativeSlave); + + let _slaveCost = slaveCost(slave, false, true); + if (V.slavesSeen > V.slaveMarketLimit) { + _slaveCost += Math.trunc(_slaveCost * ((V.slavesSeen - V.slaveMarketLimit) * 0.1)); + } + _totalCost = _slaveCost * 3; + } else { + slave = GenerateNewSlave(null, {disableDisability: 1}); + slave.origin = "You bought $him from the household liquidator."; + slave.devotion = jsRandom(-75, -25); + slave.trust = jsRandom(-45, -25); + slave.oldDevotion = slave.devotion; + slave.oldTrust = slave.trust; + setHealth(slave, jsRandom(-50, 20)); + setMissingParents(slave); + slave.canRecruit = 0; + App.UI.DOM.appendNewElement("p", el, `The household liquidator is offering something special: identical twins. The markup is huge, but the merchandise isn't something you see every day.`); + + let _relativeSlave = generateRelatedSlave(slave, "twin"); + _newSlaves.push(slave); + _newSlaves.push(_relativeSlave); + + let _slaveCost = slaveCost(slave, false, true); + if (V.slavesSeen > V.slaveMarketLimit) { + _slaveCost += Math.trunc(_slaveCost * ((V.slavesSeen - V.slaveMarketLimit) * 0.1)); + } + _totalCost = _slaveCost * 4; + } + + el.append(`The price is`); + el.append(App.UI.DOM.cashFormat(_totalCost)); + el.append(`.`); + if (V.slavesSeen > V.slaveMarketLimit) { + el.append(` You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.`); + } + + if (V.cash >= _totalCost) { + App.UI.DOM.appendNewElement( + "div", + el, + App.UI.DOM.link( + `Buy their slave contract`, + () => { + V.newSlaves = _newSlaves; + V.newSlaves.forEach((s) => cashX(forceNeg(_totalCost / V.newSlaves.length), "slaveTransfer", s)); + }, + [], + "Bulk Slave Intro" + ) + ); + } else { + el.append(`You lack the necessary funds to buy these slaves.`); + } + App.UI.DOM.appendNewElement( + "div", + el, + App.UI.DOM.link( + `Decline to purchase them and check out another set of slaves`, + () => { + V.slavesSeen += 2; + }, + [], + "Household Liquidator" + ) + ); + App.UI.DOM.appendNewElement("p", el, App.UI.MultipleInspect(_newSlaves, true, "Household Liquidators")); + + return el; +}; diff --git a/src/markets/specificMarkets/huskSlave.js b/src/markets/specificMarkets/huskSlave.js new file mode 100644 index 0000000000000000000000000000000000000000..39244fd5cc14646b7b528347fb92d5dbca2aa33b --- /dev/null +++ b/src/markets/specificMarkets/huskSlave.js @@ -0,0 +1,217 @@ +App.Markets["Husk Slave"] = function() { + const el = new DocumentFragment(); + let r = []; + V.encyclopedia = "Kidnapped Slaves"; + + if (V.huskSlaveOrdered === 0) { + r.push(`You lay out a new order for a braindead slave to be put aside for your use.`); + } else { + r.push(`You review your posted husk order.`); + } + r.push(`Your order requests a body with the following characteristics:`); + + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + + setupHusk(); + el.append(age()); + el.append(sex()); + el.append(nationality()); + el.append(race()); + el.append(virginity()); + App.UI.DOM.appendNewElement("h2", el, "Reservations"); + el.append(reserve()); + return el; + + function setupHusk() { + if (V.huskSlave.dick === 0 && V.huskSlave.vagina === -1) { + V.huskSlave.vagina = 0; + } + V.huskSlave.age = Math.clamp(V.huskSlave.age, V.minimumSlaveAge, V.retirementAge - 1); + } + function age() { + const p = document.createElement("p"); + App.UI.DOM.appendNewElement("div", p, "Age:"); + App.UI.DOM.appendNewElement( + "div", + p, + App.UI.DOM.makeTextBox( + V.huskSlave.age, + v => { + V.huskSlave.age = v; + refresh(); + }, + true + ) + ); + return p; + } + function sex() { + const p = document.createElement("p"); + p.append("Sex: "); + if (V.huskSlave.sex === 1) { + p.append(`Female.`); + } else if (V.huskSlave.sex === 2) { + p.append(`Male.`); + } else if (V.huskSlave.sex === 3) { + p.append(`Futanari.`); + } + const choices = { + Female: 1, + Male: 2, + Both: 3 + }; + p.append(links(choices, "sex")); + return p; + } + + function nationality() { + const p = document.createElement("p"); + App.UI.DOM.appendNewElement("div", p, "Nationality:"); + App.UI.DOM.appendNewElement( + "div", + p, + App.UI.DOM.makeTextBox( + V.huskSlave.nationality, + v => { + V.huskSlave.nationality = v; + refresh(); + }, + ) + ); + p.append(links(App.Data.misc.baseNationalities.concat(["Stateless"]), "nationality")); + return p; + } + + function race() { + const p = document.createElement("p"); + App.UI.DOM.appendNewElement("div", p, "Race: "); + App.UI.DOM.appendNewElement( + "div", + p, + App.UI.DOM.makeTextBox( + V.huskSlave.race, + v => { + V.huskSlave.race = v; + refresh(); + }, + ) + ); + + const linkArray = []; + const raceUpper = App.Data.misc.filterRaces.concat(["Not Important"]); + const raceLower = App.Data.misc.filterRacesLowercase.concat(["not important"]); + for (let i = 0; i < raceUpper.length; i++) { + if (V.huskSlave.race === raceLower[i]) { + linkArray.push( + App.UI.DOM.disabledLink( + raceUpper[i], + ["current selection"] + ) + ); + } else { + linkArray.push( + App.UI.DOM.link( + raceUpper[i], + () => { + V.huskSlave.race = raceLower[i]; + refresh(); + } + ) + ); + } + } + App.UI.DOM.appendNewElement("div", p, App.UI.DOM.generateLinksStrip(linkArray)); + return p; + } + function virginity() { + const p = document.createElement("p"); + p.append("Virginity: "); + if (V.huskSlave.sex === 1) { + p.append(`Female.`); + } else if (V.huskSlave.sex === 2) { + p.append(`Male.`); + } else if (V.huskSlave.sex === 3) { + p.append(`Futanari.`); + } + const choices = { + Important: 0, + "Not Important": 1, + }; + p.append(links(choices, "virgin")); + return p; + } + + function reserve() { + const p = document.createElement("p"); + App.UI.DOM.appendNewElement("div", p, `Reserving a body will cost ${cashFormat(10000)} up front. Canceling an order will refund your money; however, if a delivered body is rejected, your money will not be refunded.`); + + if (V.huskSlaveOrdered === 1) { + p.append( + App.UI.DOM.link( + `Withdraw body order`, + () => { + V.huskSlaveOrdered = 0; + cashX(10000, "slaveTransfer"); + }, + [], + "Main" + ) + ); + } else if (V.cash < 10000) { + App.UI.DOM.appendNewElement("span", p, `You lack the credits to place a body reservation.`, "note"); + } else { + p.append( + App.UI.DOM.link( + `Post body order`, + () => { + V.huskSlaveOrdered = 1; + cashX(-10000, "slaveTransfer"); + }, + [], + "Main" + ) + ); + } + + return p; + } + + function links(choices, global) { + const linkArray = []; + if (Array.isArray(choices)) { + for (let i = 0; i < choices.length; i++) { + makeLink(choices[i], choices[i]); + } + } else { + for (const choice in choices) { + makeLink(choice, choices[choice]); + } + } + return App.UI.DOM.makeElement("div", App.UI.DOM.generateLinksStrip(linkArray)); + + function makeLink(title, value) { + if (V.huskSlave[global] === value) { + linkArray.push( + App.UI.DOM.disabledLink( + title, + ["current selection"] + ) + ); + } else { + linkArray.push( + App.UI.DOM.link( + title, + () => { + V.huskSlave[global] = value; + refresh(); + } + ) + ); + } + } + } + + function refresh() { + jQuery("#slave-markets").empty().append(App.Markets["Husk Slave"]); + } +}; diff --git a/src/markets/specificMarkets/prestigiousSlave.js b/src/markets/specificMarkets/prestigiousSlave.js new file mode 100644 index 0000000000000000000000000000000000000000..2f35bd71ad1670d9a2856e56ef1d27e13c00c536 --- /dev/null +++ b/src/markets/specificMarkets/prestigiousSlave.js @@ -0,0 +1,912 @@ +App.Markets["Prestigious Slave"] = function() { + V.encyclopedia = "Slave Schools"; + const el = new DocumentFragment(); + App.UI.DOM.appendNewElement("p", el, `You check to see if any especially prestigious slaves are on auction.`); + if (V.prestigeAuctioned === 1) { + App.UI.DOM.appendNewElement("span", el, ` There are none available right now, but there probably will be next week.`); + } else { + V.prestigeAuctioned = 1; + + const choice = (function() { + const options = [ + "porn star", + "trophy wife", + "sports star", + "young model", + "albino", + "old-timer", + "b-list actress", + "politician", + "princess", + "arcology", + "streamer", + ]; + const dickOptions = [ + "d herm", + "d young herm", + "d pornstar", + "d trophy husband", + "d sports star", + "d young model", + "d albino", + "d old-timer", + "d b-list actress", + "d politician", + "d princess", + "d arcology", + "d streamer", + ]; + return jsEither(Math.random() * 100 < V.seeDicks ? dickOptions : options); + })(); + let slave; + switch (choice) { + case "porn star": + slave = GenerateNewSlave("XX", {minAge: Math.min(24, V.minimumSlaveAge + 6), maxAge: 40, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a noted adult film star, and was sold into slavery by $his unscrupulous managers."; + slave.career = "a porn star"; + slave.boobsImplant += random(4, 6) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "string"; + slave.nipples = either("cute", "huge", "puffy"); + slave.areolae = 1; + slave.butt += 1; + slave.buttImplant += 1; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "sensual"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave); + slave.anus = 2; + slave.vagina = 2; + slave.weight = 0; + slave.clitPiercing = 1; + slave.tonguePiercing = 1; + slave.nipplesPiercing = 1; + slave.nosePiercing = 1; + slave.earPiercing = 1; + slave.skill.vaginal = 100; + slave.skill.oral = 100; + slave.skill.anal = 100; + slave.skill.whoring = 15; + slave.skill.entertainment = 100; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy"); + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.desc = "$He has seen and done almost everything sexually possible, on camera."; + break; + case "trophy wife": + slave = GenerateNewSlave("XX", {minAge: Math.min(19, Math.max(V.fertilityAge, V.minimumSlaveAge) + 1), maxAge: 22, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once the young trophy $wife of a powerful man in the old world, but he sold $him into slavery in revenge for $his infidelity."; + slave.career = "a trophy wife"; + slave.boobsImplant += random(1, 3) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "normal"; + slave.butt += 1; + slave.buttImplant += 1; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "sensual"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(60, 80), 0, 0, 0); + slave.anus = 1; + slave.vagina = 1; + slave.weight = 0; + slave.clitPiercing = 1; + slave.nipplesPiercing = 1; + slave.earPiercing = 1; + slave.skill.vaginal = 35; + slave.skill.oral = 35; + slave.skill.anal = 15; + slave.skill.whoring = 35; + slave.skill.entertainment = 15; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy"); + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.tattoo = "$His ex-husband's name is prettily tattooed on $his left arm, but a black line has been subsequently tattooed across it."; + break; + case "sports star": + slave = GenerateNewSlave("XX", {minAge: 21, maxAge: 25, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once expected to become a major sports star, but flamed out due to injury and was recently enslaved due to debt."; + slave.career = "an athlete"; + slave.intelligence = random(-90, -20); + slave.intelligenceImplant = 0; + slave.muscles = 50; + slave.heels = 1; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(80, 90), 0, jsRandom(5, 10), 0, jsRandom(10, 30)); + slave.anus = 1; + slave.vagina = 1; + slave.weight = 0; + slave.earPiercing = 1; + slave.eyebrowPiercing = random(0, 1); + slave.nosePiercing = random(0, 1); + slave.navelPiercing = random(0, 1); + slave.skill.vaginal = 15; + slave.skill.oral = 15; + slave.skill.anal = 0; + slave.skill.whoring = 0; + slave.skill.entertainment = 0; + slave.skill.combat = 1; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = either("hates anal", "hates oral", "hates penetration"); + slave.behavioralFlaw = "arrogant"; + slave.custom.desc = "$He's not particularly bright, and enjoys solving problems with physical force."; + break; + case "young model": + slave = GenerateNewSlave("XX", {maxAge: 21, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a rising young model, but apparently someone decided to take a shortcut in cashing in on $his great beauty."; + slave.career = "a model"; + slave.boobs = random(2, 4) * 100; + slave.butt = random(1, 3); + slave.lips = random(15, 25); + slave.face = 55; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-20, 20), 0, 0, 0, jsRandom(10, 30)); + slave.anus = 1; + slave.vagina = 1; + slave.weight = 0; + slave.earPiercing = 1; + slave.skill.vaginal = 15; + slave.skill.oral = 15; + slave.skill.anal = 0; + slave.skill.whoring = 15; + slave.skill.entertainment = 35; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("anorexic", "arrogant"); + slave.custom.desc = "$He moves with the practiced grace of someone who unconsciously still pictures $himself on the runway."; + break; + case "albino": + slave = GenerateNewSlave("XX", {maxAge: 18, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens."; + slave.geneticQuirks.albinism = 2; + slave.albinismOverride = {skin: "pure white", eyeColor: "pale grey", hColor: "white"}; + applyGeneticColor(slave); + slave.career = "a slave"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + eyeSurgery(slave, "both", "blur"); + setHealth(slave, jsRandom(40, 60), 0, 0, 0, jsRandom(10, 30)); + slave.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast."; + break; + case "old-timer": + slave = GenerateNewSlave("XX", { + minAge: (V.minimumSlaveAge + 15), maxAge: 35, disableDisability: 1, ageOverridesPedoMode: 1 + }); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He is one of the longest legally-enslaved persons in the world, having been a slave for 15 years. $He has spent almost all that time working as a slave prostitute, and has been heavily modified to keep $him productive."; + slave.career = "a slave"; + slave.boobsImplant += random(10, 15) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "fillable"; + slave.nipples = either("cute", "huge", "puffy"); + slave.areolae = 2; + slave.butt += 4; + slave.buttImplant += 4; + slave.buttImplantType = "fillable"; + slave.lips = random(75, 85); + slave.lipsImplant = 3; + slave.face = 55; + slave.faceImplant = 40; + slave.faceShape = "exotic"; + slave.devotion = random(25, 45); + slave.trust = random(0, 15); + setHealth(slave, jsRandom(20, 40), 0, jsRandom(0, 5), 0, jsRandom(10, 30)); + slave.anus = 3; + slave.vagina = 3; + slave.weight = 0; + slave.clitPiercing = 2; + slave.tonguePiercing = 2; + slave.nipplesPiercing = 2; + slave.nosePiercing = 2; + slave.lipsPiercing = 2; + slave.vaginaPiercing = 2; + slave.anusPiercing = 2; + slave.navelPiercing = 2; + slave.eyebrowPiercing = 2; + slave.earPiercing = 2; + slave.skill.vaginal = 100; + slave.skill.oral = 100; + slave.skill.anal = 100; + slave.skill.whoring = 100; + slave.skill.entertainment = 0; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + slave.energy = 100; + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.desc = "$He has almost no inhibitions left at all."; + slave.custom.tattoo = "'50,000 Served!' is tattooed across $his back."; + slave.counter.publicUse += 1000; + break; + case "b-list actress": + slave = GenerateNewSlave("XX", {minAge: 24, maxAge: 28, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He was once a B-list actress, but fell on hard times and drug addiction and was recently enslaved due to debt."; + slave.career = "an actress"; + slave.boobs += 200; + slave.boobsImplant += 200; + slave.boobsImplantType = "normal"; + slave.butt += 1; + slave.buttImplant += 1; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.face = 55; + slave.faceImplant += 20; + slave.faceShape = "cute"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-70, -40), undefined, undefined, 0, jsRandom(30, 80)); + slave.anus = 1; + slave.vagina = 1; + slave.weight = 0; + slave.earPiercing = 1; + slave.skill.vaginal = 15; + slave.skill.oral = 15; + slave.skill.anal = 15; + slave.skill.whoring = 0; + slave.skill.entertainment = 100; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.addict = 20; + slave.sexualFlaw = either("hates anal", "hates oral", "hates penetration"); + slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "odd"); + slave.custom.desc = "$He sometimes forgets $himself and acts as though $he were still a coming celebrity."; + break; + case "politician": + slave = GenerateNewSlave("XX", {minAge: 38, maxAge: 42, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He was once a rising old world politician, but was forced to flee from the increasingly dangerous politics common in a stressed world, and was subsequently enslaved."; + slave.career = "a politician"; + slave.boobs += 100; + slave.butt += 1; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "normal"; + slave.height += 10; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-45, -25), 0, 0, 0, jsRandom(30, 70)); + slave.anus = 0; + slave.vagina = 1; + slave.weight = 0; + slave.skill.vaginal = 15; + slave.skill.oral = 0; + slave.skill.anal = 0; + slave.skill.whoring = 0; + slave.skill.entertainment = 35; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("arrogant", "bitchy"); + slave.custom.tattoo = "A small tattoo of the crest of an old world sorority is visible on $his left shoulder blade."; + slave.custom.desc = "$His face is still recognizable as that which once graced a million campaign posters."; + break; + case "princess": + slave = GenerateNewSlave("XX", {maxAge: 18, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 3; + slave.prestigeDesc = "$He was born a $daughter of royalty, but $his family was overthrown when $he was still young. $He is a graduate cum laude of the world's most renowned slave school."; + slave.career = "a slave"; + slave.boobs += 100; + slave.butt += 1; + slave.lips += 10; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.height += 10; + slave.devotion = random(75, 90); + slave.trust = random(-45, -25); + setHealth(slave, 100, 0, 0, 0, jsRandom(0, 20)); + slave.anus = 0; + slave.vagina = 0; + slave.weight = 0; + slave.skill.vaginal = 0; + slave.skill.oral = 100; + slave.skill.anal = 0; + slave.skill.whoring = 15; + slave.skill.entertainment = 35; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + slave.custom.tattoo = "$His family crest is tattooed on $his cheek."; + slave.custom.desc = "$His recognizable face marks $him as a descendant of an overthrown royal family."; + break; + case "arcology": + slave = GenerateNewSlave("XX", {minAge: 28, maxAge: 42, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 3; + slave.prestigeDesc = "$He was once an arcology owner like you, but lost a Free Cities power struggle and was enslaved. An object lesson in the need to stay vigilant."; + slave.career = "an arcology owner"; + slave.boobsImplant += random(20, 40) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "advanced fillable"; + slave.boobs += 1000; + slave.nipples = either("cute", "huge", "puffy"); + slave.areolae = 2; + slave.buttImplant += random(6, 8); + slave.butt += slave.buttImplant; + slave.buttImplantType = "advanced fillable"; + slave.heels = 1; + slave.voice = 0; + slave.lips = random(75, 85); + slave.lipsImplant = 3; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-70, -60), undefined, undefined, undefined, jsRandom(40, 90)); + slave.anus = 3; + slave.vagina = 3; + slave.weight = -20; + slave.nipplesPiercing = 2; + slave.clitPiercing = 2; + slave.vaginaPiercing = 2; + slave.dickPiercing = 2; + slave.anusPiercing = 2; + slave.lipsPiercing = 2; + slave.tonguePiercing = 2; + slave.earPiercing = 2; + slave.nosePiercing = 2; + slave.eyebrowPiercing = 2; + slave.navelPiercing = 2; + slave.boobsTat = "rude words"; + slave.buttTat = "rude words"; + slave.vaginaTat = "rude words"; + slave.dickTat = "rude words"; + slave.lipsTat = "rude words"; + slave.anusTat = "rude words"; + slave.shouldersTat = "rude words"; + slave.armsTat = "rude words"; + slave.legsTat = "rude words"; + slave.stampTat = "rude words"; + slave.skill.vaginal = 15; + slave.skill.oral = 15; + slave.skill.anal = 15; + slave.skill.whoring = 0; + slave.skill.entertainment = 0; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.hStyle = "shaved"; + slave.hLength = 0; + slave.behavioralFlaw = either("odd"); + slave.custom.desc = "$His back is covered in a fine network of hairline scars, as though $he's been repeatedly flogged bloody, healed with curatives, and then flogged again."; + slave.custom.tattoo = "'ARCOLOGY OWNER' is tattooed across $his forehead."; + break; + case "streamer": + slave = GenerateNewSlave("XX", {maxAge: 28, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a popular creator on a live streaming service, but donations dropped off after getting caught up in some controversy."; + slave.career = "a camgirl"; + slave.boobs = random(1, 4) * 100; + slave.butt = random(1, 3); + slave.lips = random(15, 25); + slave.face = 55; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-45, -25), 0, 0, 0, jsRandom(30, 70)); + slave.anus = 1; + slave.vagina = 1; + slave.weight = 20; + slave.earPiercing = 1; + slave.skill.vaginal = 15; + slave.skill.oral = 15; + slave.skill.anal = 1; + slave.skill.whoring = 5; + slave.skill.entertainment = 70; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("arrogant", "bitchy", "odd"); + slave.custom.desc = "$He is very comfortable in front of a camera and in public performances, having spent a long time entertaining $his viewers."; + break; + case "d herm": + slave = GenerateNewSlave("XY", { + minAge: 24, maxAge: 40, disableDisability: 1, ageOverridesPedoMode: 1 + }); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He is a natural-born hermaphrodite. $He was enslaved as an adult and subjected to treatment to upgrade both $his halves to full functionality."; + slave.devotion = random(-45, -25); + slave.trust = random(-90, -75); + setHealth(slave, jsRandom(-40, -30), undefined, undefined, 0, jsRandom(30, 70)); + slave.chem = 100; + slave.anus = random(1, 2); + slave.dick = random(1, 2); + if (slave.dick > 0) { + slave.foreskin = slave.dick; + } + slave.prostate = 1; + slave.vagina = 1; + slave.ovaries = 1; + slave.preg = 0; + slave.balls = random(1, 2); + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.weight = random(-80, -20); + slave.attrXX = random(30, 50); + slave.attrXY = random(30, 50); + slave.energy = random(5, 20); + slave.skill.vaginal = 0; + slave.skill.oral = 15; + slave.skill.anal = 15; + slave.skill.whoring = 0; + slave.skill.entertainment = 0; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.custom.desc = "$He has had a very difficult time adjusting to $his unusual biology."; + break; + case "d young herm": + slave = GenerateNewSlave("XX", {maxAge: 19, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He is a natural-born hermaphrodite. $He received treatment to ensure both $his halves would be fully functional from an early age."; + slave.career = "a slave"; + slave.devotion = random(25, 45); + slave.trust = random(25, 45); + setHealth(slave, jsRandom(0, 20), 0, 0, 0, jsRandom(20, 60)); + slave.chem = 200; + slave.boobs += 100 * random(2, 4); + slave.butt += random(1, 2); + slave.anus = 1; + slave.dick = random(4, 6); + slave.prostate = 1; + if (slave.dick > 0) { + slave.foreskin = slave.dick; + } + slave.balls = random(4, 6); + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.weight = random(20, 80); + slave.attrXX = random(80, 100); + slave.attrXY = random(80, 100); + slave.energy = random(60, 90); + slave.skill.vaginal = 0; + slave.skill.oral = 0; + slave.skill.anal = 0; + slave.skill.whoring = 0; + slave.skill.entertainment = 15; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + slave.sexualQuirk = either("caring", "perverted", "romantic", "tease"); + slave.behavioralQuirk = either("adores men", "adores women", "advocate", "confident", "cutting", "funny"); + slave.custom.desc = "$He is very comfortable with $his unusual biology."; + break; + case "d pornstar": + slave = GenerateNewSlave("XY", {minAge: 24, maxAge: 40, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a noted adult film star, and was sold into slavery by $his unscrupulous managers."; + slave.career = "a porn star"; + slave.boobsImplant += random(4, 6) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "fillable"; + slave.nipples = either("cute", "huge", "puffy"); + slave.areolae = 1; + slave.butt += 1; + slave.buttImplant += 1; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "androgynous"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, undefined, undefined, undefined, undefined, jsRandom(30, 70)); + slave.anus = 3; + slave.dick = 5; + if (slave.foreskin > 0) { + slave.foreskin = slave.dick; + } + slave.balls = 5; + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.weight = 0; + slave.clitPiercing = 1; + slave.tonguePiercing = 1; + slave.nipplesPiercing = 1; + slave.nosePiercing = 1; + slave.earPiercing = 1; + slave.skill.oral = 100; + slave.skill.anal = 100; + slave.skill.whoring = 15; + slave.skill.entertainment = 100; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy"); + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.desc = "$He has seen and done almost everything sexually possible, on camera."; + break; + case "d trophy husband": + slave = GenerateNewSlave("XY", {minAge: 19, maxAge: 22, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once the young trophy husband of a powerful woman in the old world, but she sold $him into slavery in revenge for $his infidelities."; + slave.career = "a trophy spouse"; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "cute"; + slave.muscles = random(20, 100); + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(60, 80), 0, 0, 0, jsRandom(10, 30)); + slave.weight = 0; + slave.clitPiercing = 1; + slave.skill.oral = 15; + slave.skill.anal = 0; + slave.skill.whoring = 15; + slave.skill.entertainment = 15; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("arrogant", "bitchy"); + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.tattoo = "$His ex-wife's name is prettily tattooed on $his left arm, but a black line has been subsequently tattooed across it."; + break; + case "d sports star": + slave = GenerateNewSlave("XY", {minAge: 21, maxAge: 25, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once expected to become a major sports star, but flamed out due to injury and was recently enslaved due to debt."; + slave.career = "an athlete"; + slave.intelligence = random(-90, -20); + slave.intelligenceImplant = 0; + slave.muscles = 50; + slave.heels = 1; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(80, 90), 0, jsRandom(5, 10), 0, jsRandom(20, 50)); + slave.anus = 1; + slave.dick = random(3, 5); + if (slave.dick > 0) { + slave.foreskin = slave.dick; + } + slave.balls = random(3, 5); + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.weight = 0; + slave.skill.oral = 15; + slave.skill.anal = 0; + slave.skill.whoring = 0; + slave.skill.entertainment = 0; + slave.skill.combat = 1; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = either("hates anal", "hates oral", "hates penetration"); + slave.behavioralFlaw = "arrogant"; + slave.custom.desc = "$He's not particularly bright, and enjoys solving problems with physical force."; + break; + case "d young model": + slave = GenerateNewSlave("XY", {maxAge: 21, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a rising young model, but apparently someone decided to take a shortcut in cashing in on $his great beauty."; + slave.career = "a model"; + slave.boobs = random(1, 3) * 100; + slave.butt = random(1, 2); + slave.muscles = 20; + slave.lips = random(15, 25); + slave.face = 55; + slave.faceImplant = 20 * random(1, 2); + slave.faceShape = "androgynous"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-20, 20), 0, 0, 0, jsRandom(10, 30)); + slave.anus = 2; + slave.weight = 0; + slave.earPiercing = 1; + slave.skill.oral = 100; + slave.skill.anal = 0; + slave.skill.whoring = 15; + slave.skill.entertainment = 35; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = either("hates women"); + slave.behavioralFlaw = either("anorexic", "arrogant"); + slave.custom.desc = "$He moves with the practiced grace of someone who unconsciously still pictures $himself on the runway."; + break; + case "d albino": + slave = GenerateNewSlave("XY", {maxAge: 18, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He is a natural albino, and was quickly enslaved due to the great demand for physically unusual specimens."; + slave.geneticQuirks.albinism = 2; + slave.albinismOverride = {skin: "pure white", eyeColor: "pale grey", hColor: "white"}; + applyGeneticColor(slave); + slave.career = "a slave"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + eyeSurgery(slave, "both", "blur"); + setHealth(slave, jsRandom(40, 60), 0, 0, 0, jsRandom(10, 30)); + slave.custom.desc = "$His eyes are unsettling; though $his irises are a pale grey color, in some lights the whole eye takes on a red cast."; + break; + case "d old-timer": + slave = GenerateNewSlave("XY", { + minAge: (V.minimumSlaveAge + 15), maxAge: 35, disableDisability: 1, ageOverridesPedoMode: 1 + }); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He is one of the longest legally-enslaved persons in the world, having been a slave for 15 years. $He has spent almost all that time working as a slave prostitute, and has been heavily modified to keep $him productive."; + slave.career = "a prostitute"; + slave.boobsImplant += random(10, 15) * 200; + slave.boobs += slave.boobsImplant; + slave.boobsImplantType = "advanced fillable"; + slave.nipples = either("cute", "huge", "puffy"); + slave.areolae = 2; + slave.butt += 4; + slave.buttImplant += 4; + slave.buttImplantType = "fillable"; + slave.lips = random(25, 55); + slave.lipsImplant = 2; + slave.face = 55; + slave.faceImplant = 40; + slave.faceShape = "exotic"; + slave.devotion = random(25, 45); + slave.trust = random(0, 15); + setHealth(slave, jsRandom(20, 40), undefined, jsRandom(5, 10), undefined, jsRandom(30, 70)); + slave.anus = 3; + slave.dick = 1; + if (slave.foreskin > 0) { + slave.foreskin = slave.dick; + } + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.balls = 0; + slave.weight = 0; + slave.clitPiercing = 2; + slave.tonguePiercing = 2; + slave.nipplesPiercing = 2; + slave.nosePiercing = 2; + slave.lipsPiercing = 2; + slave.vaginaPiercing = 2; + slave.anusPiercing = 2; + slave.navelPiercing = 2; + slave.eyebrowPiercing = 2; + slave.earPiercing = 2; + slave.skill.oral = 100; + slave.skill.anal = 100; + slave.skill.whoring = 100; + slave.skill.entertainment = 0; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + slave.energy = 100; + slave.fetish = "none"; + slave.fetishKnown = 1; + slave.custom.desc = "$He has almost no inhibitions left at all."; + slave.custom.tattoo = "'50,000 Served!' is tattooed across $his back."; + slave.counter.publicUse += 1000; + break; + case "d b-list actress": + slave = GenerateNewSlave("XY", {minAge: 24, maxAge: 28, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He was once a B-list actress, but fell on hard times and drug addiction and was recently enslaved due to debt."; + slave.career = "an actress"; + slave.boobs += 200; + slave.boobsImplant += 200; + slave.boobsImplantType = "normal"; + slave.butt += 1; + slave.buttImplant += 1; + slave.buttImplantType = "normal"; + slave.lips += 10; + slave.lipsImplant += 10; + slave.face = 55; + slave.faceImplant += 20; + slave.faceShape = "cute"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-80, -40), 0, 0, 0, jsRandom(30, 70)); + slave.anus = 1; + slave.weight = 0; + slave.earPiercing = 1; + slave.skill.oral = 15; + slave.skill.anal = 15; + slave.skill.whoring = 0; + slave.skill.entertainment = 100; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.addict = 20; + slave.sexualFlaw = either("hates anal", "hates oral", "hates penetration"); + slave.behavioralFlaw = either("anorexic", "arrogant", "bitchy", "odd"); + slave.custom.desc = "$He sometimes forgets $himself and acts as though $he were still a coming celebrity."; + break; + case "d politician": + slave = GenerateNewSlave("XY", {minAge: 38, maxAge: 42, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 2; + slave.prestigeDesc = "$He was once a rising old world politician, but was forced to flee from the increasingly dangerous politics common in a stressed world, and was subsequently enslaved."; + slave.career = "a politician"; + slave.muscles = random(10, 50); + slave.height = random(160, 200); + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.faceImplant += 20; + slave.faceShape = "masculine"; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(60, 80), 0, 0, 0, jsRandom(30, 70)); + slave.anus = 0; + slave.weight = 0; + slave.skill.oral = 0; + slave.skill.anal = 0; + slave.skill.whoring = 0; + slave.skill.entertainment = 35; + slave.behavioralFlaw = either("arrogant", "bitchy"); + slave.custom.tattoo = "A small tattoo of the crest of an old world fraternity is visible on $his left shoulder blade."; + slave.custom.desc = "$His face is still recognizable as that which once graced a million campaign posters."; + break; + case "d princess": + slave = GenerateNewSlave("XY", {maxAge: 18, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 3; + slave.prestigeDesc = "$He was born a child of royalty, but $his family was overthrown when $he was still young. $He is a graduate cum laude of the world's most renowned slave school."; + slave.career = "a slave"; + slave.boobs += 100; + slave.butt += 1; + slave.lips += 10; + slave.face = Math.clamp(slave.face + 20, -100, 100); + slave.height += 10; + slave.devotion = random(75, 85); + slave.trust = random(-45, -25); + setHealth(slave, 100, 0, 0, 0, jsRandom(0, 20)); + slave.anus = 0; + slave.dick = 2; + if (slave.foreskin > 0) { + slave.foreskin = slave.dick; + } + slave.balls = 1; + if (slave.balls > 0) { + slave.scrotum = slave.balls; + } + slave.weight = 0; + slave.skill.vaginal = 0; + slave.skill.oral = 100; + slave.skill.anal = 0; + slave.skill.whoring = 15; + slave.skill.entertainment = 35; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.sexualFlaw = "none"; + slave.behavioralFlaw = "none"; + slave.custom.tattoo = "$His family crest is tattooed on $his cheek."; + slave.custom.desc = "$His recognizable face marks $him as a descendant of an overthrown royal family."; + break; + case "d arcology": + slave = GenerateNewSlave("XY", {minAge: 28, maxAge: 42, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 3; + slave.prestigeDesc = "$He was once an arcology owner like you, but lost a Free Cities power struggle and was enslaved. An object lesson in the need to stay vigilant."; + slave.career = "an arcology owner"; + slave.muscles = random(10, 50); + slave.heels = 1; + slave.voice = 0; + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-80, -60), undefined, undefined, undefined, jsRandom(40, 90)); + slave.anus = 3; + slave.weight = -20; + slave.nipplesPiercing = 2; + slave.clitPiercing = 2; + slave.vaginaPiercing = 2; + slave.dickPiercing = 2; + slave.anusPiercing = 2; + slave.lipsPiercing = 2; + slave.tonguePiercing = 2; + slave.earPiercing = 2; + slave.nosePiercing = 2; + slave.eyebrowPiercing = 2; + slave.navelPiercing = 2; + slave.boobsTat = "rude words"; + slave.buttTat = "rude words"; + slave.vaginaTat = "rude words"; + slave.dickTat = "rude words"; + slave.lipsTat = "rude words"; + slave.anusTat = "rude words"; + slave.shouldersTat = "rude words"; + slave.armsTat = "rude words"; + slave.legsTat = "rude words"; + slave.stampTat = "rude words"; + slave.skill.oral = 15; + slave.skill.anal = 15; + slave.skill.whoring = 0; + slave.skill.entertainment = 0; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.hStyle = "shaved"; + slave.hLength = 0; + slave.behavioralFlaw = either("odd"); + slave.custom.desc = "$His back is covered in a fine network of hairline scars, as though $he's been repeatedly flogged bloody, healed with curatives, and then flogged again."; + slave.custom.tattoo = "'ARCOLOGY OWNER' is tattooed across $his forehead."; + break; + case "d streamer": + slave = GenerateNewSlave("XY", {maxAge: 28, disableDisability: 1}); + slave.origin = "You bought $him at auction."; + slave.prestige = 1; + slave.prestigeDesc = "$He was once a popular creator on a live streaming service, but donations dropped off after getting caught up in some controversy."; + slave.career = "a camgirl"; + slave.boobs = random(1, 3) * 100; + slave.butt = random(1, 2); + slave.muscles = random(0, 20); + slave.lips = random(15, 25); + slave.face = random(20, 55); + slave.faceShape = either("androgynous", "masculine"); + slave.devotion = random(-90, -80); + slave.trust = random(-45, -25); + setHealth(slave, jsRandom(-45, -25), 0, 0, 0, jsRandom(20, 60)); + slave.anus = 2; + slave.weight = 20; + slave.earPiercing = 1; + slave.skill.oral = 30; + slave.skill.anal = 1; + slave.skill.whoring = 5; + slave.skill.entertainment = 70; + slave.pubicHStyle = "waxed"; + slave.underArmHStyle = "waxed"; + slave.behavioralFlaw = either("arrogant", "bitchy", "odd"); + slave.custom.desc = "$He is very comfortable in front of a camera and in public performances, having spent a long time entertaining $his viewers."; + } + + const cost = slaveCost(slave); + + App.UI.DOM.appendNewElement("p", el, `It will take ${cashFormat(cost)} to win the auction.`); + + + + if (V.cash >= cost) { + App.UI.DOM.appendNewElement( + "p", + el, + App.UI.DOM.link( + `Place that bid`, + () => { + cashX(forceNeg(cost), "slaveTransfer", slave); + newSlave(slave); + jQuery("#slave-markets").empty().append(App.UI.newSlaveIntro(slave)); + } + ) + ); + } else { + App.UI.DOM.appendNewElement("p", el, `You lack the necessary funds to place a winning bid.`, "note"); + } + + el.append(App.Desc.longSlave(slave, {market: "generic"})); + } + return el; +}; diff --git a/src/markets/specificMarkets/schoolFutanari.js b/src/markets/specificMarkets/schoolFutanari.js new file mode 100644 index 0000000000000000000000000000000000000000..dbcfc77bb7851e9367a31cb1eaceb137cd74f107 --- /dev/null +++ b/src/markets/specificMarkets/schoolFutanari.js @@ -0,0 +1,174 @@ +App.Markets.TFS = function() { + const el = new DocumentFragment(); + let r = []; + + if (V.TFS.schoolPresent === 1) { + App.UI.DOM.appendNewElement("p", el, `You pay a visit to the Futanari Sisters. They occupy a suite remodeled for their very special needs; it's surprisingly small, to house so many girls, since they live communally and do not believe in privacy. You are the only outsider permitted to enter the outer door. As you move towards the center of the suite, you pass through the outer ring of sleeping areas, kitchens, medical rooms, and workout stations that surround the inner sanctum.`); + + App.UI.DOM.appendNewElement("p", el, `This is a large, circular room with a shallow depression in the floor, filled with pillows and naked, fucking futas. Every possible interaction between mouths, nipples, breasts, penises, vaginas, and anuses is taking place, with most participants managing several at once. They are all very, very pretty, and it's easier to distinguish the older ones by their bigger tits, asses and cocks than by their apparent age. The older futas tend to be on top, but this is by no means the rule, and they like to switch around often.`); + if (V.TFS.farmUpgrade === 2) { + if (V.TFS.farmUpgradeAsked < V.week - 10) { + App.UI.DOM.appendNewElement("p", el, `It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are visibly pregnant. This hasn't slowed their sexual congress at all, though. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant.`); + } else { + App.UI.DOM.appendNewElement("p", el, `It hasn't been long enough since you allowed them to use your organ farm to add ovaries to themselves for the effects to be obvious yet. Most of them are doubtless pregnant, however. There's been a subtle shift in their sexual behavior, too: they're much more likely to focus on vaginal sex than they were before, so much so that they often double penetrate each others' pussies. When there aren't any cunts available, they do their best to hold their orgasms until one opens up, so to speak.`); + } + } else if (V.TFS.farmUpgrade === 3) { + if (V.TFS.farmUpgradeAsked < V.week - 20) { + App.UI.DOM.appendNewElement("p", el, `It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are extremely pregnant. This hasn't slowed their sexual congress at all, though they've had to get creative with their positioning. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant.`); + } else if (V.TFS.farmUpgradeAsked < V.week - 10) { + App.UI.DOM.appendNewElement("p", el, `It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are visibly pregnant. This hasn't slowed their sexual congress at all, though. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant.`); + } else { + App.UI.DOM.appendNewElement("p", el, `It hasn't been long enough since you allowed them to use your organ farm to add ovaries to themselves for the effects to be obvious yet. Most of them are doubtless pregnant, however. There's been a subtle shift in their sexual behavior, too: they're much more likely to focus on vaginal sex than they were before, so much so that they often double penetrate each others' pussies. When there aren't any cunts available, they do their best to hold their orgasms until one opens up, so to speak.`); + } + } + } + App.UI.DOM.appendNewElement("p", el, `Visitors are not common: in fact, visitors are only as frequent as you feel like visiting. It takes a while before they notice you. When a dreamy-eyed young futa finally does, she reaches a lazy hand over to alert the eldest one present by tugging on one of her nipples and pointing in your direction. The elder looks over at you and gives you a friendly wave followed by a wait-one-moment gesture. She's curled up on her back with her cockhead in her own mouth, using both hands to give her own shaft a boob job while a younger futa is eats her ass and fingers her pussy. The futa matron orgasms promptly, sucking down her own cum. She gets up languidly, her plush body, softening forearm-sized dick, and enormous natural boobs making it a wonderful sight.`); + + if (V.PC.title === 1) { + r.push(`"Protector,`); + } else { + r.push(`"Protectrix,`); + } + r.push(`thank you so much for coming to see us. Our own Selection of a Sister to serve in slavery is not to take place for some time, but our communications interface in that side room," she points, "will permit you to access a regional listing of Selected Sisters ${(V.TFS.farmUpgrade > 0) ? `, all of which are fully fertile and produce their own natural female hormones, thanks to you` : ``}." She looks uncharacteristically uncertain. "Will you permit me to`); + if (V.PC.dick !== 0) { + if (V.PC.vagina !== -1) { + r.push(`worship your perfect genitalia`); + } else { + r.push(`serve your cock`); + } + } else { + r.push(`adore your pussy`); + } + r.push(`while you use it? I think my Sisters will forgive me the infidelity."`); + if (V.PC.dick !== 0 && V.PC.vagina !== -1 && V.PC.boobs >= 300) { + r.push(`She looks at you speculatively. "Or you could join us for a while."`); + } + const result = document.createElement("p"); + result.id = "result"; + App.UI.DOM.appendNewElement( + "div", + result, + App.UI.DOM.link( + "Let her give you oral while you browse", + () => { + r = []; + r.push(`You accept her offer, and she walks seductively over to the interface with the listing of available Sisters, getting down on her knees below it. When you step up to look through the listing, she presses her huge soft tits against your knees`); + if (V.PC.dick !== 0) { + if (V.PC.vagina !== -1) { + r.push(`and nuzzles her plush lips and hot tongue against your womanhood, using one hand to massage your shaft languidly. Perusing the very thorough pictures and videos of the pretty futanari for sale here is arousing enough without a truly masterful oral queen pleasing both your cock and your pussy, and you cum quickly. She drinks your cum rapturously and returns her mouth to your wet cunt, eagerly working to bring more forth.`); + } else { + r.push(`and snuggles her face between your thighs, nuzzling her nose into your ballsack before licking it with appetite and then sucking each of your balls gently, one by one. Meanwhile one of her clever hands is languidly massaging your shaft, bringing forth a drop of precum which she laps up with appetite. Humming with pleasure, she deepthroats you without apparent effort, her mischievous tongue flicking forward to lap at your scrotum. You blow your load down her throat, and she starts to suck you hard again.`); + } + } else { + r.push(`and trails nibbles and kisses along your inner thighs before nuzzling her plush lips and hot tongue against your womanhood. Perusing the very thorough pictures and videos of the pretty futanari for sale here is arousing enough without a truly masterful cunt pleaser working her magic between your legs, and you've orgasmed before you finish one listing. She prolongs the climax cleverly and then starts to build you towards another.`); + } + + jQuery("#result").empty().append(r.join(" ")); + } + ) + ); + + if (V.PC.dick !== 0 && V.PC.vagina >= 0 && V.PC.boobs >= 300) { + App.UI.DOM.appendNewElement("div", result, + App.UI.DOM.link( + "Join the Sisters' orgy", + () => { + r = []; + V.futaAddiction += 1; + switch (V.futaAddiction) { + case 1: + r.push(`You agree to spend some time taking part in the Sisters' orgy. The futa matron looks doubtful. "You'd have to agree to act as one of us," she says. "No different. No special sexual treatment." Her voice rises cutely on the last syllable, as you take her enormous dick in one hand and begin to stroke it vigorously. "V-very well," she gasps, taking one of your breasts in each of her hands.`); + if (V.PC.vagina === 0) { + r.push(`You leave the Sisters' suite a few hours later, <span class="green">leaving your virginity behind.</span> You are tired and a bit sore, but satisfied.`); + V.PC.vagina = 1; + } else { + r.push(`You leave the Sisters' suite after a few hours of fucking and being fucked, feeling tired but satisfied.`); + } + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 5, 0, -9, 1)); + } + break; + case 2: + r.push(`She doesn't have to explain the Sisters' sexual equality this time, or that you have to subject yourself to it. You remember, and you let her know you're willing by giving her a friendly hug that squashes your breasts against each other and rubs your stiff pricks together. She reaches around you to grab your ass, already pulling you towards the pile of futas. You leave the Sisters' suite after a few hours of fucking and being fucked, in a state of total sexual satiation.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 10, 0, -9, 1)); + } + break; + case 3: + r.push(`She asked that with a distinctly flirty tone, obviously hoping you'd agree again, and she isn't disappointed. You take her by the hand and skip over to the pile of futas, most of which know you very intimately by now. They see their Sister and you approaching, and those of them that don't have their mouths full greet you eagerly. Three of them quickly rearrange themselves to present you with a couple of dicks to sit on and a pussy to fuck, all at once. You leave the Sisters' suite after many hours of fucking and being fucked, tired but satisfied.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 20, 0, -9, 1)); + } + break; + case 4: + r.push(`She asked that in a knowing voice, confident you'd agree, and was already moving in to kiss you when you did. She seems to want you more than usual today, and pulls you down onto the edge of the pit, guiding your cock into her pussy. She isn't selfish, of course, and reaches around to spread your buttocks so you can get fucked while you fuck. You leave the Sisters' suite after many hours of this, very tired. You wonder when you can make time to visit the Sisters again.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 40, 0, -9, 1)); + } + break; + case 5: + r.push(`She runs her tongue over her lips as she asks, and sits you down on the edge of the pit and deepthroats you as soon as you agree. She wants your cum, and uses a couple of fingers to tickle your prostate and make it appear faster. You jerk with orgasm, and she pushes your wet cock up against your stomach so she can fuck your pussy. She pauses for a moment, letting a younger Sister enter her ass first. You leave the Sisters' suite after a full day of this, utterly exhausted but eager to return.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 60, 0, -9, 1)); + } + break; + case 6: + r.push(`You nod, and she turns back towards the orgy, not seeing any reason to lead you, since you know the way. You both sink back into the pile of cocks, pussies, mouths, asses, boobs; the hours go by without you noticing. You leave the Sisters' suite unable to remember specifics, but you clearly fucked and got fucked by every futa there at least once. You're surprised when you learn how long you were there, but the worries of being an arcology owner no longer seem as pressing as they once did.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 80, 0, -9, 1)); + } + break; + case 7: + r.push(`You don't even bother to respond, and head straight for the orgy. You insert yourself into an eager mouth, bending over so the matron following you can take you from behind. The worries of your life as an arcology owner seem very far away as she slides inside you. You only leave when ${V.assistant.name} repeatedly pages you over the arcology's public announcement system. On the way to your office, you notice how full of cum your stomach is, how relaxed your pussy and ass are, and how happy you feel.`); + if (canGetPregnant(V.PC)) { + r.push(knockMeUp(V.PC, 100, 0, -9, 1)); + } + break; + case 8: + V.gameover = "sisters"; + SugarCube.Engine.play("Gameover"); + break; + default: + V.futaAddiction = 0; + } + jQuery("#result").empty().append(r.join(" ")); + } + ) + ); + } else { + App.UI.DOM.appendNewElement("p", el, `The Futanari Sisters use the same legalistic structures as other slave schools, but are actually very different. They're quite enigmatic, and inquiry into their cult-like methods is politely discouraged. All the Sisters own the institution together, and seem to share the goal of pursuing transformation of themselves to fit the classic futanari fetish — that is, to transform themselves into beautiful, curvaceous women with large dicks. All Sisters remain within the closed society for at least seven years. The Sisters fund themselves by selling members into slavery: interestingly, the more impressive a member is, the older she seems to be when sold; there may be a sort of selection mechanism by which the losers are sold immediately and the winners remain, leading the Sisters. This does not mean that ex-Sisters are unhappy with enslavement. On the contrary, it seems to be an expected stage of their lives, and not shameful.`, "scene-intro"); + if (V.TFS.schoolUpgrade !== 0) { + r.push(`Since you have supported the faction within the Sisters that favors`); + if (V.TFS.schoolUpgrade === 3) { + r.push(`a mix of futas with and without balls; its female members will appear without balls, while its male members will appear with extremely large testicles.`); + if (V.TFS.compromiseWeek + 15 > V.week) { + r.push(`Or they will, in around ${(V.TFS.compromiseWeek + 15) - V.week} weeks.`); + } + } else if (V.TFS.schoolUpgrade === 1) { + r.push(`futas without balls, its members will now appear without visible testicles and increased submissiveness.`); + } else { + r.push(`futa balls, its members will now appear with extremely large testicles and increased sex drives.`); + } + r.push(`As a major`); + if (V.PC.title === 0) { + r.push(`benefactrix`); + } else { + r.push(`benefactor`); + } + r.push(`of the institution, you also receive a discount on them.`); + } + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + App.UI.DOM.appendNewElement("p", el, `The Sisters offer a member selected for sale into slavery for inspection via video call. The feed is of an exhausted futa, fast asleep. Whatever ceremonies the Sisters perform before releasing a member into slavery, they seem to have tired her out. There are indistinct but obviously sexual sounds audible in the background; it sounds like an orgy with a very large number of participants is going on nearby.`); + } + let costMod = 0.8; + if (V.TFS.schoolSale !== 0) { + costMod = costMod * 0.5; + } else if (V.TFS.schoolUpgrade !== 0) { + costMod = costMod * 0.8; + } + el.append( + App.Markets.purchaseFramework("TFS", {costMod:costMod}) + ); + + return el; +}; diff --git a/src/markets/specificMarkets/schools.js b/src/markets/specificMarkets/schools.js new file mode 100644 index 0000000000000000000000000000000000000000..4d756131e97982c2b2e7d132c5df0b9fd8d9b294 --- /dev/null +++ b/src/markets/specificMarkets/schools.js @@ -0,0 +1,282 @@ +App.Markets.GRI = function() { + const el = new DocumentFragment(); + let r = []; + if (V.GRI.schoolUpgrade !== 0) { + r.push(`You have endowed`); + if (V.GRI.schoolUpgrade === 1) { + r.push(`a research focus on advanced curatives; most subjects now leave the GRI at unnatural levels of vitality.`); + } else { + r.push(`a research focus on milk production; subjects' breasts are bigger and milkier than ever.`); + } + if (V.PC.title === 0) { + r.push(`As a major benefactrix`); + } else { + r.push(`As a major benefactor`); + } + r.push(`of the institution, you also receive a discount on them.`); + } + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `GRI offers a fresh graduate for inspection via video call. The interview takes place in the graduate's bare-metal holding cell. Disturbingly, it is strongly reminiscent of an enclosure for a lab animal, only scaled up to contain a lab animal of human dimensions.`); + let costMod = 1; + if (V.GRI.schoolSale !== 0) { + costMod = 0.5; + } else if (V.GRI.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("GRI", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.LDE = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`L'École des Enculées is one of the oldest networks of slave schools, but because its training must be started early, it is only now beginning to produce and show a return on its investors' stakes. It aims to produce graduates more feminine than the average naturally born female, in spite of their having been born male. The school is a global leader in hormonal feminization, which allows it to produce curvier slaves than many schools that focus on natural females. It also retains its graduates for a year after their majority and their enslavement, so as to be able to legally subject them to intensive sexual conditioning that focuses on their prostates as their main remaining locus of arousal.`); + if (V.LDE.schoolUpgrade !== 0) { + r.push(`Since you have endowed`); + if (V.LDE.schoolUpgrade === 1) { + r.push(`the regular application of drugs to induce extreme infatuation in its graduates towards the first dominant person they encounter, any graduate purchased here will now promptly fall in love with you.`); + } else { + r.push(`research into narrowly targeted hormonal treatments, its graduates are now available with generous members despite their femininity.`); + } + r.push(`As a major ${(V.PC.title === 0)? `benefactrix`:`benefactor`} of the institution, you also receive a discount on them.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `L'École des Enculées offers a fresh graduate for inspection via video call. The interview takes place in the dormitory for the oldest class of girls. Absurdly sexual squeals repeatedly interrupt the call, making it very clear that someone close by the interviewee is experiencing a strong combination of anal pain and anal pleasure.`); + let costMod = 1; + if (V.LDE.schoolSale !== 0) { + costMod = 0.5; + } else if (V.LDE.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("LDE", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.NUL = function() { + const el = new DocumentFragment(); + let r = []; + + r.push(`Nueva Universidad de Libertad is a unique slave school operating in the Free Cities. Its business model is to offer as close to asexuality as a sex slave can possess. All students have their sex organs surgically removed at a very young age, before the onset of puberty. This is followed by numerous cosmetic surgery alternations, alongside a steady regimen of hormone blockers, throughout their education. The result is an utterly physically androgynous slave.`); + if (V.NUL.schoolUpgrade !== 0) { + r.push(`You have endowed the school with advanced training courses in`); + if (V.NUL.schoolUpgrade === 1) { + r.push(`entertainment and conversation.`); + } else { + r.push(`the various sexual arts.`); + } + r.push(`As a major financial supporter of the institution, you also receive a discount on them.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `Nueva Universidad de Libertad offers a fresh graduate for inspection via video call. The interview takes place in said graduate's dormitory. The room is sparse and utilitarian, and immaculately clean. Likely by design, it looks like the set from an old sci-fi movie.`); + let costMod = 1; + if (V.NUL.schoolSale !== 0) { + costMod = 0.5; + } else if (V.NUL.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("NUL", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.SCP = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`St. Claver Preparatory is an old world preparatory school that was purchased by an old world medical school adapting to the demand for plastic surgeons from the Free Cities. It functions as a standard slave school until its students near graduation. At that point they are paired with a budding plastic surgeon. Intensive, flawless, and of course successful surgical modification of the student is required to complete certification as a Free Cities plastic surgeon of the top rank. All St. Claver's graduates are modified to a single exacting standard. Meanwhile, the slave school is free to train its students for obedience and sexual conformity.`); + if (V.SCP.schoolUpgrade !== 0) { + r.push(`You have endowed`); + if (V.SCP.schoolUpgrade === 1) { + r.push(`thorough use of mental suppressants that reliably produce total devotion at the price of total stupidity.`); + } else { + r.push(`diversification of the school's approach into general slave training that produces graduates with basic skills.`); + } + r.push(`As a major`); + if (V.PC.title === 0) { + r.push(`benefactrix`); + } else { + r.push(`benefactor`); + } + r.push(`of the institution, you also receive a discount on them.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `St. Claver Preparatory offers a fresh graduate for inspection via video call. The interview takes place in a very obviously medical office, with medical supply robots wheeling past its glass walls and nurses hurrying to and fro. + `); + let costMod = 1; + if (V.SCP.schoolSale !== 0) { + costMod = 0.5; + } else if (V.SCP.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("SCP", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.TCR = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`The Cattle Ranch is a controversial slave school operating primarily out of Pastoralistic Free Cities. Its business model is to offer the ideal free range dairy cow; one whose tits and belly reach the floor when on all fours. All cattle come optimized for milking, with big breasts and gravid middles. Slave orphans have their heels clipped shortly after birth and are conditioned to believe they are actual livestock, resulting in a mindbreak-like state. Between their wide hips and big butts and their heavy, milky breasts, they are often popular breeding slaves. They rarely display their stock over video call, instead favoring a more hands-on approach. Buyers can visit their local shops to view grazing cattle available for sale. Alternatively, they can watch the calves frolic among their mothers or enjoy the sight of a breeding bull impregnating an empty womb. Cows are also specially trained to respond to spectators banging on the fence; oral awaits if you drop trou for them!`); + if (V.TCR.schoolUpgrade !== 0) { + r.push(`You have endowed`); + if (V.TCR.schoolUpgrade === 1) { + r.push(`a healthy sum of credits to make their breeding bulls available for sale.`); + } else { + r.push(`a healthy sum of credits to encourage the sale of heifers.`); + } + r.push(`As a major ${(V.PC.title === 0)? `benefactrix`:`benefactor`} of the ranch, you also receive a discount on them.`); + } + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + r = []; + r.push(`The Cattle Ranch parades a choice selection of cows for your viewing pleasure. You're free to do as you please to the slaves, as long as you don't cause lasting harm to them.`); + if (isFertile(V.PC) && V.PC.preg !== -1) { + r.push(`You can't help but notice the number of bulls lining up along the fence sniffing at you.`); + } + App.UI.DOM.appendNewElement("p", el, r.join(" ")); + let costMod = 1; + if (V.TCR.schoolSale !== 0) { + costMod = 0.5; + } else if (V.TCR.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("TCR", {costMod:costMod, sTitleSingular: "cow", sTitlePlural: "cattle"}) + ); + + return el; +}; + +App.Markets.TGA = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`The Gymnasium-Academy is a very unusual slave school. It sits at a bizarre juncture of the evolving gender roles and slave roles in the Free Cities. Its graduates are exclusively born male, and are not surgically or hormonally changed, but are thoroughly indoctrinated in the gender roles of the Free Cities to be accepting of their place in the new and rapidly changing world. Since the Gymnasium-Academy produces graduates with a greater ability to build muscle, fitness and virility than any of its competitors, it also trains for athletic perfection to further differentiate them. This training relies on traditional methods of corporal punishment.`); + if (V.TGA.schoolUpgrade !== 0) { + r.push(`Since you have endowed`); + if (V.TGA.schoolUpgrade === 1) { + r.push(`advanced training methods at the Gymnasium-Academy, its graduates are now fanatically loyal.`); + } else { + r.push(`a combat training center at the Gymnasium-Academy, its graduates are now deadly fighters.`); + } + r.push(`As a major`); + if (V.PC.title === 0) { + r.push(`benefactrix`); + } else { + r.push(`benefactor`); + } + r.push(`of the institution, you also receive a discount on them.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `The Gymnasium-Academy offers a fresh graduate for inspection via video call. The interview takes place in an office overlooking an expansive workout room, in which a large number of naked, fit young bodies are performing punishing workout routines.`); + let costMod = 1; + if (V.TGA.schoolSale !== 0) { + costMod = 0.5; + } else if (V.TGA.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("TGA", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.HA = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`The Hippolyta Academy is one of the most famous slave bodyguarding schools in all the Free Cities. Its business model is to offer very high quality, highly trained girls. Their renowned amazonian maids are some of the best combatants in the world and can be often found at the side of the wealthiest citizens.`); + if (V.HA.schoolUpgrade === 1) { + r.push(`Recently the school was able to enhance its educational programs thanks to your generous donation. Their slaves are now some of the most well trained and educated on the market.`); + } else if (V.HA.schoolUpgrade === 2) { + r.push(`Recently the school was able to improve its drug enhancement program thanks to your generous donation. Their slaves are now some of the most physically impressive specimen on the market.`); + } else if (V.HA.schoolUpgrade === 3) { + r.push(`Recently the school redirected its focus to better align with the strongfat ideal, as of your suggestion. Their slaves are physically impressive yet maintain a soft and feminine aspect.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `The Hippolyta Academy offers a fresh graduate for inspection. The interview takes place in one of the many training areas of the school, where the physical prowess of the candidate can be easily showcased.`); + let costMod = 1; + if (V.HA.schoolSale !== 0) { + costMod = 0.6; + } else if (V.HA.schoolUpgrade !== 0) { + costMod = 1.2; + } + el.append( + App.Markets.purchaseFramework("HA", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.TSS = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`The Slavegirl School is the newest slave school operating in the Free Cities. Its business model is to offer simpler, cheaper wares than its competitors. All Slavegirl School graduates are natural-born females without surgical modifications. Their training emphasizes elimination of any serious psychological deformities. They are promptly enslaved and sold as soon as they reach their majorities, and are marketed as complete virgins.`); + if (V.TSS.schoolUpgrade !== 0) { + r.push(`You have endowed`); + if (V.TSS.schoolUpgrade === 1) { + r.push(`an alternative college at The Slavegirl School, which focuses on retraining good MILF stock into mature slave girls.`); + } else { + r.push(`an improvement in the simplistic school's approach that teaches good basic skills without losing too much efficiency.`); + } + r.push(`As a major`); + if (V.PC.title === 0) { + r.push(`benefactrix`); + } else { + r.push(`benefactor`); + } + r.push(`of the institution, you also receive a discount on them.`); + } + + App.UI.DOM.appendNewElement("p", el, r.join(" "), "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `The Slavegirl School offers a fresh graduate for inspection via video call. The interview takes place in a faculty member's office. Absurdly, it's barely distinguishable from an office at any traditional institution of higher education. The only giveaway is the profusion of sex toys on the desk and the pornography on the walls.`); + let costMod = 1; + if (V.TSS.schoolSale !== 0) { + costMod = 0.5; + } else if (V.TSS.schoolUpgrade !== 0) { + costMod = 0.8; + } + el.append( + App.Markets.purchaseFramework("TSS", {costMod:costMod}) + ); + + return el; +}; + +App.Markets.TUO = function() { + const el = new DocumentFragment(); + App.UI.DOM.appendNewElement("p", el, `The Utopian Orphanage is where all slaves dream of being raised. Its business model is to offer intelligent, well educated girls just past their majority. The girls are treated exceptionally well and have no sexual education or experience.`, "scene-intro"); + + App.UI.DOM.appendNewElement("p", el, `The Utopian Orphanage offers a fresh graduate for inspection. The interview takes place in the girl's private room, where she showcases her education and wits.`); + let costMod = 1; + if (V.TUO.schoolSale !== 0) { + costMod = 0.6; + } else if (V.TUO.schoolUpgrade !== 0) { + costMod = 1.2; + } + el.append( + App.Markets.purchaseFramework("TUO", {costMod:costMod}) + ); + + return el; +}; diff --git a/src/markets/specificMarkets/slaveMarkets.js b/src/markets/specificMarkets/slaveMarkets.js new file mode 100644 index 0000000000000000000000000000000000000000..f20441f9ed3694c69bba8dc6b07bc06c319190fa --- /dev/null +++ b/src/markets/specificMarkets/slaveMarkets.js @@ -0,0 +1,249 @@ +App.Markets.heap = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`You visit the slave markets off the arcology plaza. It's always preferable to examine merchandise in person.`); + r.push(`You're in the corner of the slave market occupied by "The Flesh Heap", a dumping ground, of sorts, for broken slaves. Be it brain death, drug overdose, coma, or anything else, this market is willing to buy and sell them. Most of the worthwhile slaves have already been picked clean by pharmaceutical companies for drug testing, and the rest are practically nothing more than vegetables, but a handful remain just conscious enough to be profitable with effort as slaves. One should go in expecting only the worst quality possible, though if anything catches your eye, it will be rather cheap to purchase.`); + + let _heap = jsRandom(1, 4); + if (_heap === 1) { + r.push(`"Looking for a warm body to use as furniture? Perhaps as a decorative, living sculpture? We got what you want!"`); + } else if (_heap === 2) { + r.push(`"I guarantee they are all alive, maybe not healthy, but alive. Well, except that one; just ignore that one."`); + } else if (_heap === 3) { + r.push(`"We ask that you don't use this merchandise for organ harvesting; we have plenty of nonfunctional ones for that."`); + } else { + r.push(`"If you are looking for a body to do unmentionable things to, you came to the right place! Though these in particular just barely fall under slave laws."`); + } + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("heap")); + return el; +}; + +App.Markets.wetware = function() { + const el = new DocumentFragment(); + let r = []; + const {heU, hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You're in the corner of the slave market occupied by scientists and programmers, pioneers in perfecting the skills of slaves by removing all external stimuli and subjecting them to an inhumane regimen of simulated sexual and career training. Although their bodies are ruined, these slaves are guaranteed to be intelligent, skilled and trained in a variety of jobs. If you're willing to perform extensive repairs${(V.bodyswapAnnounced) ? `, or have a spare body ready` : ``}, these slaves have high potential in almost any role in your arcology.`); + + let _wetware = jsRandom(1, 4); + if (_wetware === 1) { + r.push(`Just past a scientist, you can see a`); + if (V.seeExtreme === 1) { + r.push(`limbless`); + } + r.push(`slave being extracted from a tank filled with fluid wearing a bizarre helmet. As the device is removed by a technician, the slave begins to panic as ${heU} is dragged from ${hisU} virtual life and realizes exactly what has happened to ${hisU} body.`); + } else if (_wetware === 2) { + r.push(`A scientist turns to you and remarks "I almost envy the hardware. They believe they're having a fulfilling career with a loving family and meaningful relationships for a lifetime. Honestly, if the mental imprinting process wasn't so destructive to the human body, I'd probably hop in myself!"`); + } else if (_wetware === 3) { + r.push(`Racks of ravaged bodies are laid across tables with plaques stating slave IQ, career, and sexual skill exam results.`); + } else { + r.push(`Curious, you ask a technician why it's necessary for the merchandise to be so badly treated. He replies "Forcing stimulus on the hardware takes an enormous toll on their nervous and circulatory system. The nonfunctional components are disabled and removed as necessary to ensure optimal response to the imprinting process."`); + } + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("wetware")); + return el; +}; + +App.Markets.kidnappers = function() { + const el = new DocumentFragment(); + let r = []; + const {hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You're in the area of the slave market populated by slave kidnappers, though of course they prefer more polite titles. The slaves here are cheap, and they look it. They're almost all recent catches from bad parts of the old world, and most of them have seen considerable abuse between the moment of their capture and entering your arcology.`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`Fortunately for them, such behavior is not permitted here. Though they remain frightened and angry, they are safe from rape, for now.`); + } else { + let _kidnappers = jsRandom(1, 4); + r.push(`There's more merchandise out of sight in the holding areas. To go by what you can hear,`); + if (_kidnappers === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`muffled insistence that the speaker is not a girl followed by struggling and then shrieks as a resistant dickgirl takes anal rape,`); + } else if ((_kidnappers === 2) && (jsRandom(0, 99) >= V.seeDicks)) { + r.push(`muffled begging followed by struggling and then crying as a new slave learns how it feels to have a slave's cunt,`); + } else if ((_kidnappers === 3)) { + r.push(`muffled gagging followed gasping and sobbing as a new slave tries to get ${hisU} breath back after oral rape,`); + } else { + r.push(`the unmistakable slap of flesh on flesh,`); + } + r.push(`at least one of the slavers is amusing himself`); + if (V.arcologies[0].FSGenderFundamentalist === "unset") { + r.push(`(or herself)`); + } + r.push(`back there.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("kidnappers")); + return el; +}; + +App.Markets.indentures = function() { + const el = new DocumentFragment(); + let r = []; + const {girlU, hisU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You're in the area of the slave market that deals in indentured servants. The people sold here are slaves, but they are temporary slaves, and many of them have clauses in their indentures that prohibit some of the most severe practices. They exhibit a strange variety, with some looking more frightened than the most downtrodden slave and some looking almost cheerful.`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`The generous protections for slaves in your arcology lend this last group extra confidence.`); + } else { + let _indentures = jsRandom(1, 4); + r.push(`The area is crowded, and more indentured servants are packed together in the holding areas. To go by what you can hear,`); + if (_indentures === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`the unmistakable mixed shrieks, sobs, and slaps of anal rape,`); + } else if ((_indentures === 2) && (jsRandom(0, 99) >= V.seeDicks)) { + r.push(`the characteristic crying and gasping of an unwilling ${girlU} giving up ${hisU} cunt,`); + } else if ((_indentures === 3)) { + r.push(`the gagging and expectoration of someone who has just gotten a mouthful of unwelcome cum,`); + } else { + r.push(`disconsolate sobbing interrupted by a gasp as something is stuffed inside someone's mouth, and followed by muffled screams,`); + } + r.push(`one of them is learning exactly what ${hisU} indenture allows.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("indentures")); + return el; +}; + +App.Markets.hunters = function() { + const el = new DocumentFragment(); + let r = []; + const {hisU, himU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You're in the area of the slave market populated by runaway slave catchers, a proud group. The slaves here know their way around Free Cities slavery already, and their eyes are watchful. Most of them probably harbor thoughts of another attempt at escape, though the slavers to their best to disabuse them of these notions.`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`Their methods are somewhat limited, as the rules in your arcology preclude the more effective methods of punishment.`); + } else { + let _hunters = jsRandom(1, 4); + r.push(`The slave catchers consider their catches fair game, though they usually confine their amusements to the holding areas out of sight. Not out of earshot, though; to go by what you can hear,`); + if (_hunters === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`vehement insistence that the speaker is not a girl followed by a beating and then shrieks as a rebellious dickgirl takes anal rape,`); + } else if (_hunters === 2 && jsRandom(0, 99) >= V.seeDicks) { + r.push(`vehement protestations followed by a beating and then crying as a slave's cunt takes ${hisU} punishment for ${himU},`); + } else if (_hunters === 3) { + r.push(`struggling and gagging followed gasping and angry swearing as a rebellious slave tries to get ${hisU} breath back after oral rape,`); + } else { + r.push(`struggling followed by the slap of flesh on flesh,`); + } + r.push(`at least one of the runaway hunters is amusing himself`); + if (V.arcologies[0].FSGenderFundamentalist === "unset") { + r.push(`(or herself)`); + } + r.push(`back there.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("hunters")); + return el; +}; + +App.Markets["underage raiders"] = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`You're in the seediest area of the slave market populated by the cradle robbers, a despised group of slavers known for raiding elementary schools, orphanages and even preschools. They specifically target those who have yet to experience their first period. The extreme risk of these raids makes the slavers here aggressive and confident,`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`though they do obey the rules of your arcology that restrain them from abusing the slaves.`); + } else { + let _ur = jsRandom(1, 4); + r.push(`though they restrain themselves from reducing the value of their captures by taking virginities. They do have their fun, though; to go by what you can hear from the holding area where they keep underage slaves who can be sold,`); + if (_ur === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`a muffled but obviously sadistic description of feminization, and the desperate sobbing in response,`); + } else if ((_ur === 2) && (jsRandom(0, 99) >= V.seeDicks)) { + r.push(`a muffled but obviously sadistic description of breeding, and the desperate sobbing in response,`); + } else if ((_ur === 3)) { + r.push(`faint struggling and crying that suggests that someone is being thoroughly groped and pinched,`); + } else { + r.push(`the lewd, lubricated noise of someone giving a reluctant handjob,`); + } + r.push(`at least one of the raiders is amusing himself`); + if (V.arcologies[0].FSGenderFundamentalist === "unset") { + r.push(`(or herself)`); + } + r.push(`back there.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("underage raiders")); + return el; +}; +App.Markets.raiders = function() { + const el = new DocumentFragment(); + let r = []; + r.push(`You're in the area of the slave market populated by girl raiders, that daredevil subset of slave kidnappers that specifically target old world schools, preparatory institutions, religious groups, and other sources of slaves that can soon be sold right after they reach their majorities. The extreme risk of these raids makes the slavers here aggressive and confident,`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`though they do obey the rules of your arcology that restrain them from abusing the slaves.`); + } else { + let _raiders = jsRandom(1, 4); + r.push(`though they restrain themselves from reducing the value of their captures by taking virginities. They do have their fun, though; to go by what you can hear from the holding area where they keep slaves of age who can be sold,`); + if (_raiders === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`a muffled but obviously sadistic description of feminization, and the desperate sobbing in response,`); + } else if (_raiders === 2 && jsRandom(0, 99) >= V.seeDicks) { + r.push(`a muffled but obviously sadistic description of breeding, and the desperate sobbing in response,`); + } else if ((_raiders === 3)) { + r.push(`faint struggling and crying that suggests that someone is being thoroughly groped and pinched,`); + } else { + r.push(`the lewd, lubricated noise of someone giving a reluctant handjob,`); + } + r.push(`at least one of the raiders is amusing himself`); + if (V.arcologies[0].FSGenderFundamentalist === "unset") { + r.push(`(or herself)`); + } + r.push(`back there.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("raiders")); + return el; +}; + +App.Markets.neighbor = function(numArcology) { + const el = new DocumentFragment(); + let r = []; + r.push(`You're in the area of the slave market that specializes in slaves from within the Free City, viewing slaves from <span class="bold>${V.arcologies[numArcology].name}</span>. Some were trained there, specifically for sale, while others are simply being sold.`); + let _opinion = App.Neighbor.opinion(0, numArcology); + let costMod = 1; + if (_opinion !== 0) { + if (_opinion > 2) { + r.push(`Your cultural ties with ${V.arcologies[numArcology].name} helps keep the price reasonable.`); + } else if (_opinion < -2) { + r.push(`Your social misalignment with ${V.arcologies[numArcology].name} drives up the price.`); + } + costMod = (1 - (_opinion * 0.05)); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("neighbor", {numArcology: numArcology, costMod:costMod})); + return el; +}; + +App.Markets.trainers = function() { + const el = new DocumentFragment(); + let r = []; + const {girlU} = getNonlocalPronouns(V.seeDicks).appendSuffix('U'); + r.push(`You're in the area of the slave market populated by slave trainers, easily the wealthiest vendors. The slaves here have received obedience training and medical care, and many have had some basic sexual skills forced on them.`); + if (V.arcologies[0].FSPaternalistSMR === 1) { + r.push(`Though the rules of your arcology protected them from the worst excesses of the training profession, many of the slaves on sale have the haunted look of people still coming to terms with the idea that they no longer have any bodily autonomy.`); + } else { + let _trainers = jsRandom(1, 4); + r.push(`The trainers are a competitive bunch, and to go by what you can hear,`); + if (_trainers === 1 && jsRandom(1, 100) <= V.seeDicks) { + r.push(`moaning interspersed with lewd, well-lubricated noises coming from both anal sex and vigorous masturbation,`); + } else if (_trainers === 2 && jsRandom(0, 99) >= V.seeDicks) { + r.push(`moaning and the distinctive slap of feminine buttocks on thighs beneath them as a ${girlU} rides a dick,`); + } else if ((_trainers === 3)) { + r.push(`the lush, lewd sounds of diligent oral sex,`); + } else { + r.push(`the call-and-response of a trainer and a slave running through a memorized obedience exercise,`); + } + r.push(`at least one of them is applying some last-minute training to a slave in the holding pens nearby.`); + } + + el.append(r.join(" ")); + el.append(App.Markets.purchaseFramework("trainers")); + return el; +}; + +App.Markets.wetware = function() { + const el = new DocumentFragment(); + App.UI.DOM.appendNewElement("p", el, `Wetware CPUs offer highly trained slaves with useful career experience at a discount; That is, at the cost of the physical health of the merchandise.`, "scene-intro"); + + el.append(App.Markets.purchaseFramework("wetware")); + return el; +}; + diff --git a/src/markets/specificMarkets/slaveShelter.js b/src/markets/specificMarkets/slaveShelter.js new file mode 100644 index 0000000000000000000000000000000000000000..242ba0c72b476df923f4a8335986d63eec955140 --- /dev/null +++ b/src/markets/specificMarkets/slaveShelter.js @@ -0,0 +1,385 @@ +App.Markets["Slave Shelter"] = function() { + V.encyclopedia = "Kidnapped Slaves"; + const el = new DocumentFragment(); + let r = []; + + if (V.shelterSlaveBought === 1) { + App.UI.DOM.appendNewElement("span", el, ` You already bought a shelter slave this week.`); + } else { + r.push(`You contact the Slave Shelter to review the profile of the slave the Shelter is offering to a good`); + if (V.PC.title === 1) { + r.push(`Master`); + } else { + r.push(`Mistress`); + } + r.push(`willing to pay the Shelter's nominal placement fee. The severe, tired-looking woman who answers your call hurries through the disclaimers. "All Shelter Slaves are provided as-is... the Shelter provides a single slave for placement each week... resale of Shelter slaves is contractually forbidden... we reserve the right to unannounced inspection of placed slaves... the Shelter follows up on reports of abuse or resale of its slaves..."`); + + App.UI.DOM.appendNewElement("span", el, r.join(" ")); + + if ((V.shelterSlaveGeneratedWeek || 0) < V.week) { + V.shelterSlaveGeneratedWeek = V.week; + + const possibleOrigins = []; + possibleOrigins.push("broken"); + if (V.seeExtreme === 1) { + possibleOrigins.push("amputee", "blind", "deaf"); + if (jsRandom(1, 100) <= V.seeDicks) { + possibleOrigins.push("cannibal victim male"); + } else { + possibleOrigins.push("cannibal victim female"); + } + } + if (jsRandom(1, 100) <= V.seeDicks) { + possibleOrigins.push("dickpain", "gelding"); + } + if (jsRandom(0, 99) >= V.seeDicks) { + possibleOrigins.push("plugs", "reaction", "used whore"); + if (V.seePreg !== 0) { + possibleOrigins.push("breeder", "broken womb"); + } + } + if (V.week > 80) { + possibleOrigins.push("degraded DoL"); + } + + const origin = possibleOrigins.random(); + let pedo; + let minAge; + let maxAge; + switch (origin) { + case "broken": + V.shelterSlave = GenerateNewSlave(null, {disableDisability: 1}); + V.shelterSlave.origin = "$He has never communicated anything about $his background, since $he arrived at the shelter with a broken mind."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-25, -45); + V.shelterSlave.trust = jsRandom(-25, -45); + setHealth(V.shelterSlave, jsRandom(-30, -10)); + V.shelterSlave.anus = 3; + V.shelterSlave.skill.oral = 0; + V.shelterSlave.skill.anal = 0; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.intelligence = -70; + V.shelterSlave.intelligenceImplant = 0; + V.shelterSlave.behavioralFlaw = "none"; + V.shelterSlave.sexualFlaw = "none"; + V.shelterSlave.fetish = "mindbroken"; + V.shelterSlave.fetishStrength = 0; + break; + case "amputee": + V.shelterSlave = GenerateNewSlave(null, {disableDisability: 1}); + V.shelterSlave.origin = "It's not clear why $his previous owner cut $his arms and legs off."; + V.shelterSlave.career = "a slave"; + removeLimbs(V.shelterSlave, "all"); + V.shelterSlave.devotion = jsRandom(-100, -90); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.behavioralFlaw = either("hates men", "hates women", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration"); + break; + case "blind": + V.shelterSlave = GenerateNewSlave(null, {minAge: V.minimumSlaveAge, maxAge: 22, disableDisability: 1}); + V.shelterSlave.origin = "$His owner purposely blinded $him by dumping boiling water into $his eyes."; + V.shelterSlave.career = "a slave"; + eyeSurgery(V.shelterSlave, "both", "blind"); + setEyeColor(V.shelterSlave, "milky white"); + V.shelterSlave.custom.desc = "$He has an obvious burn across $his eyes."; + V.shelterSlave.devotion = jsRandom(-100, -90); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.behavioralFlaw = "hates men"; + V.shelterSlave.sexualFlaw = "hates oral"; + V.shelterSlave.canRecruit = 0; + V.shelterSlave.override_Eye_Color = 1; + break; + case "deaf": + V.shelterSlave = GenerateNewSlave(null, {minAge: V.minimumSlaveAge, maxAge: 22, disableDisability: 1}); + V.shelterSlave.origin = "$His owner purposely deafened $him by piercing $his eardrums with knitting needles."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.hears = -2; + V.shelterSlave.devotion = jsRandom(-100, -90); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.behavioralFlaw = "hates men"; + V.shelterSlave.sexualFlaw = "hates oral"; + V.shelterSlave.canRecruit = 0; + break; + case "broken womb": + V.shelterSlave = GenerateNewSlave("XX", {minAge: 6, maxAge: 22, disableDisability: 1}); + V.shelterSlave.origin = "$He was found unresponsive in the lower arcology with a gaping pussy and deflated belly. It is unclear what happened to $him."; + V.shelterSlave.career = "homeless"; + V.shelterSlave.devotion = jsRandom(-25, -45); + V.shelterSlave.trust = jsRandom(-25, -45); + setHealth(V.shelterSlave, jsRandom(-50, -30), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.weight = -50; + V.shelterSlave.vagina = 9; + V.shelterSlave.bellySag = 20; + V.shelterSlave.skill.oral = 0; + V.shelterSlave.skill.anal = 0; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.intelligence = -70; + V.shelterSlave.intelligenceImplant = 0; + V.shelterSlave.behavioralFlaw = "none"; + V.shelterSlave.sexualFlaw = "none"; + V.shelterSlave.fetish = "mindbroken"; + V.shelterSlave.fetishStrength = 0; + break; + case "cannibal victim male": + if (V.pedo_mode === 1) { + pedo = 1; + } else { + maxAge = 42; + } + V.shelterSlave = GenerateNewSlave("XY", { + minAge: 16, maxAge: maxAge, disableDisability: 1, ageOverridesPedoMode: pedo + }); + V.shelterSlave.origin = "$His previous owner forced $him to cut off $his dick and balls and cook them."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-100, -80); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.dick = 0; + V.shelterSlave.foreskin = 0; + V.shelterSlave.balls = 0; + V.shelterSlave.scrotum = 0; + V.shelterSlave.behavioralFlaw = either("anorexic", "anorexic", "anorexic", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "neglectful", "self hating"); + V.shelterSlave.fetish = either("masochist", "none", "none"); + V.shelterSlave.custom.desc = "The scars from $his crudely performed self-castration are still visible on $his lower groin."; + break; + case "cannibal victim female": + if (V.pedo_mode === 1) { + pedo = 1; + } else { + maxAge = 42; + } + V.shelterSlave = GenerateNewSlave("XX", { + minAge: 16, maxAge: maxAge, disableDisability: 1, ageOverridesPedoMode: pedo + }); + V.shelterSlave.origin = "$His previous owner forced $him to cut off $his breasts and cook them."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-100, -80); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.boobs = 0; + V.shelterSlave.boobsImplant = 0; + V.shelterSlave.boobsImplantType = "none"; + V.shelterSlave.nipples = "tiny"; + V.shelterSlave.behavioralFlaw = either("anorexic", "anorexic", "anorexic", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "neglectful", "self hating"); + V.shelterSlave.fetish = either("masochist", "none", "none"); + V.shelterSlave.custom.desc = "His chest is covered by an ugly mess of scar tissue."; + break; + case "degraded DoL": + V.shelterSlave = GenerateNewSlave(null, {minAge: 14, disableDisability: 1, ageOverridesPedoMode: 1}); + V.shelterSlave.origin = "$He is an enslaved Daughter of Liberty, caught some weeks after the failed coup. $His previous owner used $him as a punching bag and dart board, then when $he was bored of $him tattooed obscenities all over $his body and threw $him away."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-100, -90); + V.shelterSlave.trust = jsRandom(-100, -90); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.slaveName = either("Cumbitch", "Cumbucket", "Cumdoll", "Cumgulper", "Fuckhole", "Fuckmeat", "Fuckpuppet", "Fuckslut", "Fucktoy", "Rapemeat", "Sluttypig", "Spunkbucket", "Spunkswallow", "Whorelips"); + V.shelterSlave.slaveSurname = 0; + V.shelterSlave.minorInjury = either("black eye", "bruise", "split lip", 0); + V.shelterSlave.weight = jsRandom(-90, -30); + V.shelterSlave.muscles = jsRandom(-75, 0); + V.shelterSlave.energy = jsRandom(0, 30); + V.shelterSlave.fetish = either("humiliation", "humiliation", "masochist", "none", "none", "submissive"); + V.shelterSlave.boobsTat = either("degradation", "rude words", "none"); + V.shelterSlave.buttTat = either("degradation", "rude words", 0); + V.shelterSlave.lipsTat = either("degradation", "rude words", 0); + V.shelterSlave.anusTat = either("degradation", "rude words", 0); + V.shelterSlave.shouldersTat = either("degradation", "rude words", 0); + V.shelterSlave.armsTat = either("degradation", "rude words", 0); + V.shelterSlave.legsTat = either("degradation", "rude words", 0); + V.shelterSlave.backTat = either("degradation", "rude words", 0); + V.shelterSlave.stampTat = either("degradation", "rude words", 0); + V.shelterSlave.skill.anal = jsRandom(10, 25); + V.shelterSlave.anus = jsRandom(1, 4); + if (isFertile(V.shelterSlave) && V.seePreg !== 0) { + V.shelterSlave.preg = either(-3, -2, -2, -2, 0, 0, 2, 3, 4, 5); + if (V.shelterSlave.preg > 0) { + V.shelterSlave.pregSource = -2; + V.shelterSlave.pregKnown = 1; + V.shelterSlave.pregType = setPregType(V.shelterSlave); + WombImpregnate(V.shelterSlave, V.shelterSlave.pregType, V.shelterSlave.pregSource, V.shelterSlave.preg); + } + } + if (V.shelterSlave.vagina > -1) { + V.shelterSlave.vagina = jsRandom(1, 4); + V.shelterSlave.skill.vaginal = jsRandom(10, 25); + V.shelterSlave.vaginaTat = either("degradation", "rude words", 0); + } + if (V.shelterSlave.dick > 1) { + V.shelterSlave.dickTat = either("degradation", "rude words", 0); + } + break; + case "gelding": + V.shelterSlave = GenerateNewSlave("XY", {minAge: 20, maxAge: 42, disableDisability: 1}); + V.shelterSlave.origin = "$His previous owner gelded $him and used $him for anal abuse."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-50, -30)); + V.shelterSlave.face = jsRandom(-60, -20); + V.shelterSlave.dick = jsRandom(1, 2); + V.shelterSlave.balls = 0; + V.shelterSlave.anus = 4; + V.shelterSlave.skill.oral = 0; + V.shelterSlave.skill.anal = 15; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.attrXY = jsRandom(40, 60); + V.shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "hates men", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "hates anal"); + break; + case "dickpain": + V.shelterSlave = GenerateNewSlave("XY", {minAge: 20, maxAge: 42, disableDisability: 1}); + V.shelterSlave.origin = "$His background is obscure, but seems to have involved terrible abuse of $his huge cock and balls."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-50, -30)); + V.shelterSlave.face = jsRandom(-60, -20); + V.shelterSlave.dick = jsRandom(4, 5); + V.shelterSlave.balls = jsRandom(4, 5); + V.shelterSlave.anus = 0; + V.shelterSlave.skill.oral = 0; + V.shelterSlave.skill.anal = 0; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.energy = jsRandom(5, 10); + V.shelterSlave.attrXX = 0; + V.shelterSlave.behavioralFlaw = either("hates women", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic"); + break; + case "plugs": + V.shelterSlave = GenerateNewSlave("XX", {minAge: 20, maxAge: 42, disableDisability: 1}); + V.shelterSlave.origin = "$His holes were cruelly stretched by constant plug use."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-50, -30)); + V.shelterSlave.vagina = 4; + V.shelterSlave.anus = 4; + V.shelterSlave.skill.oral = 15; + V.shelterSlave.skill.anal = 15; + V.shelterSlave.skill.vaginal = 15; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "odd"); + V.shelterSlave.sexualFlaw = either("hates anal", "hates oral", "hates penetration"); + break; + case "breeder": + if (V.pedo_mode === 1) { + minAge = (V.fertilityAge + 6); + pedo = 1; // Old enough to have been pregnant many times. + } else { + minAge = 30; + maxAge = 42; + } + V.shelterSlave = GenerateNewSlave("XX", {minAge: minAge, maxAge: maxAge, disableDisability: 1}); + V.shelterSlave.origin = "$His previous owner discarded $him after many pregnancies."; + V.shelterSlave.career = "a breeder"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-50, -30)); + V.shelterSlave.preg = -2; + V.shelterSlave.counter.birthsTotal = 13; + V.shelterSlave.pregAdaptation = 60; + V.shelterSlave.bellySag = 10; + V.shelterSlave.bellySagPreg = 10; + V.shelterSlave.vagina = 3; + V.shelterSlave.skill.oral = 0; + V.shelterSlave.skill.anal = 0; + V.shelterSlave.skill.vaginal = 0; + V.shelterSlave.skill.whoring = 0; + V.shelterSlave.skill.entertainment = 0; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.behavioralFlaw = either("gluttonous", "hates men", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "hates penetration", "repressed"); + break; + case "used whore": + V.shelterSlave = GenerateNewSlave("XX", { + minAge: 32, maxAge: 42, disableDisability: 1, ageOverridesPedoMode: 1 + });// 20 years of brothel service. + V.shelterSlave.origin = "$He was worn out by twenty years of brothel service."; + V.shelterSlave.career = "a prostitute"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3)); + V.shelterSlave.face = jsRandom(-60, -20); + V.shelterSlave.preg = -2; + V.shelterSlave.vagina = 4; + V.shelterSlave.anus = 4; + V.shelterSlave.skill.oral = 35; + V.shelterSlave.skill.anal = 35; + V.shelterSlave.skill.vaginal = 35; + V.shelterSlave.skill.whoring = 35; + V.shelterSlave.skill.entertainment = 15; + V.shelterSlave.skill.combat = 0; + V.shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "hates men", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration"); + break; + case "reaction": + V.shelterSlave = GenerateNewSlave(null, {disableDisability: 1}); + V.shelterSlave.origin = "$He was discarded after suffering a terrible reaction to growth hormone treatment."; + V.shelterSlave.career = "a slave"; + V.shelterSlave.devotion = jsRandom(-75, -60); + V.shelterSlave.trust = jsRandom(-100, -75); + setHealth(V.shelterSlave, jsRandom(-60, -40), normalRandInt(10, 3), normalRandInt(20, 3)); + V.shelterSlave.chem = 1000; + if ((V.shelterSlave.dick > 0) && (jsRandom(1, 2) === 1)) { + V.shelterSlave.dick = jsRandom(5, 6); + } + if ((V.shelterSlave.balls > 0) && (jsRandom(1, 2) === 1)) { + V.shelterSlave.balls = jsRandom(5, 10); + } + if (jsRandom(1, 3) === 1) { + V.shelterSlave.boobs += 100 * jsRandom(10, 30); + } + if (jsRandom(1, 3) === 1) { + V.shelterSlave.butt += jsRandom(3, 5); + } + V.shelterSlave.behavioralFlaw = either("anorexic", "gluttonous", "odd"); + V.shelterSlave.sexualFlaw = either("apathetic", "hates anal", "hates oral", "hates penetration"); + break; + default: + V.shelterSlave = GenerateNewSlave(null, {disableDisability: 1}); + throw `"${origin}" not found`; + } + } + const cost = 1000; + const {his} = getPronouns(V.shelterSlave); + + App.UI.DOM.appendNewElement("p", el, `The placement fee is ${cashFormat(cost)}.`); + + if (V.cash >= cost) { + App.UI.DOM.appendNewElement( + "p", + el, + App.UI.DOM.link( + `Buy ${his} slave contract`, + () => { + cashX(forceNeg(cost), "slaveTransfer", V.shelterSlave); + V.shelterSlaveBought = 1; + V.shelterSlave.origin = "You got $him at the Slave Shelter. " + V.shelterSlave.origin; + newSlave(V.shelterSlave); + jQuery("#slave-markets").empty().append(App.UI.newSlaveIntro(V.shelterSlave)); + } + ) + ); + } else { + App.UI.DOM.appendNewElement("p", el, `You lack the necessary funds to buy this slave.`, "note"); + } + + el.append(App.Desc.longSlave(V.shelterSlave, {market: "generic"})); + App.UI.DOM.appendNewElement("p", el, pronounsForSlaveProp(V.shelterSlave, V.shelterSlave.origin)); + } + return el; +}; diff --git a/src/markets/specialSlave.js b/src/markets/specificMarkets/specialSlave.js similarity index 97% rename from src/markets/specialSlave.js rename to src/markets/specificMarkets/specialSlave.js index 4fe18fdbe4315918ef6a3ad7f92e3f9d0004f290..ac1c71c72276669065a7bf32ca1870c4129bbc2f 100644 --- a/src/markets/specialSlave.js +++ b/src/markets/specificMarkets/specialSlave.js @@ -2,7 +2,7 @@ * Displays the UI for special/hero slave market, slaves that are from the /d/ databases. * @returns {Node} */ -App.Markets.specialSlave = function() { +App.Markets["Special Slave"] = function() { const el = document.createElement("p"); let p; let heroSlaves = App.Utils.buildHeroArray(); @@ -135,7 +135,7 @@ App.Markets.specialSlave = function() { App.UI.DOM.appendNewElement("p", el, App.Desc.longSlave(slave, {market: "generic"})); p = document.createElement("p"); - p.append(`The offered price is ${cashFormat(slaveCost)}. `); + p.append(`The offered price is ${cashFormat(slaveCost)}.`); p.append( App.UI.DOM.link( `Buy ${his} slave contract`, diff --git a/src/markets/stClaverPreparatory.tw b/src/markets/stClaverPreparatory.tw deleted file mode 100644 index 245109957d96d60723486d44fcdaee76c4a9fcf9..0000000000000000000000000000000000000000 --- a/src/markets/stClaverPreparatory.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: St. Claver Preparatory [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "SCP">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//St. Claver Preparatory is an old world preparatory school that was purchased by an old world medical school adapting to the demand for plastic surgeons from the Free Cities. It functions as a standard slave school until its students near graduation. At that point they are paired with a budding plastic surgeon. Intensive, flawless, and of course successful surgical modification of the student is required to complete certification as a Free Cities plastic surgeon of the top rank. All St. Claver's graduates are modified to a single exacting standard. Meanwhile, the slave school is free to train its students for obedience and sexual conformity. <<if $SCP.schoolUpgrade != 0>><br><br>You have endowed <<if $SCP.schoolUpgrade == 1>>thorough use of mental suppressants that reliably produce total devotion at the price of total stupidity.<<else>>diversification of the school's approach into general slave training that produces graduates with basic skills.<</if>> As a major <<if $PC.title == 0>>benefactrix<<else>>benefactor<</if>> of the institution, you also receive a discount on them.<</if>>// - -<br><br>St. Claver Preparatory offers a fresh graduate for inspection via video call. The interview takes place in a very obviously medical office, with medical supply robots wheeling past its glass walls and nurses hurrying to and fro. - -<<set _marketResult = generateMarketSlave("SCP")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $SCP.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $SCP.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $SCP "slave" "slaves">> diff --git a/src/markets/theCattleRanch.tw b/src/markets/theCattleRanch.tw deleted file mode 100644 index f2701ce127d3a1a7827b4a0a3a1fe3cc342fd5f9..0000000000000000000000000000000000000000 --- a/src/markets/theCattleRanch.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: The Cattle Ranch [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "TCR">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//The Cattle Ranch is a controversial slave school operating primarily out of Pastoralistic Free Cities. Its business model is to offer the ideal free range dairy cow; one whose tits and belly reach the floor when on all fours. All cattle come optimized for milking, with big breasts and gravid middles. Slave orphans have their heels clipped shortly after birth and are conditioned to believe they are actual livestock, resulting in a mindbreak-like state. Between their wide hips and big butts and their heavy, milky breasts, they are often popular breeding slaves. They rarely display their stock over video call, instead favoring a more hands-on approach. Buyers can visit their local shops to view grazing cattle available for sale. Alternatively, they can watch the calves frolic among their mothers or enjoy the sight of a breeding bull impregnating an empty womb. Cows are also specially trained to respond to spectators banging on the fence; oral awaits if you drop trou for them! <<if $TCR.schoolUpgrade != 0>><br><br>You have endowed <<if $TCR.schoolUpgrade == 1>>a healthy sum of credits to make their breeding bulls available for sale.<<else>>a healthy sum of credits to encourage the sale of heifers.<</if>> As a major benefact<<if $PC.title == 0>>rix<<else>>or<</if>> of the ranch, you also receive a discount on them.<</if>>// - -<br><br>The Cattle Ranch parades a choice selection of cows for your viewing pleasure. You're free to do as you please to the slaves, as long as you don't cause lasting harm to them.<<if isFertile($PC) && $PC.preg != -1>> You can't help but notice the number of bulls lining up along the fence sniffing at you.<</if>> - -<<set _marketResult = generateMarketSlave("TCR")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $TCR.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $TCR.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $TCR "cow" "cattle">> diff --git a/src/markets/theFutanariSisters.tw b/src/markets/theFutanariSisters.tw deleted file mode 100644 index 701c0ea13f8c1ac8227426c4088b0f9b6cfe0506..0000000000000000000000000000000000000000 --- a/src/markets/theFutanariSisters.tw +++ /dev/null @@ -1,150 +0,0 @@ -:: The Futanari Sisters [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "TFS">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -<<if $TFS.schoolPresent == 1>> - -You pay a visit to the Futanari Sisters. They occupy a suite remodeled for their very special needs; it's surprisingly small, to house so many girls, since they live communally and do not believe in privacy. You are the only outsider permitted to enter the outer door. As you move towards the center of the suite, you pass through the outer ring of sleeping areas, kitchens, medical rooms, and workout stations that surround the inner sanctum. -<br><br> -This is a large, circular room with a shallow depression in the floor, filled with pillows and naked, fucking futas. Every possible interaction between mouths, nipples, breasts, penises, vaginas, and anuses is taking place, with most participants managing several at once. They are all very, very pretty, and it's easier to distinguish the older ones by their bigger tits, asses and cocks than by their apparent age. The older futas tend to be on top, but this is by no means the rule, and they like to switch around often. -<<if $TFS.farmUpgrade == 2>> - <<if $TFS.farmUpgradeAsked < $week - 10>> - <br><br> - It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are visibly pregnant. This hasn't slowed their sexual congress at all, though. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant. - <<else>> - <br><br> - It hasn't been long enough since you allowed them to use your organ farm to add ovaries to themselves for the effects to be obvious yet. Most of them are doubtless pregnant, however. There's been a subtle shift in their sexual behavior, too: they're much more likely to focus on vaginal sex than they were before, so much so that they often double penetrate each others' pussies. When there aren't any cunts available, they do their best to hold their orgasms until one opens up, so to speak. - <</if>> -<<elseif $TFS.farmUpgrade == 3>> - <<if $TFS.farmUpgradeAsked < $week - 20>> - <br><br> - It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are extremely pregnant. This hasn't slowed their sexual congress at all, though they've had to get creative with their positioning. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant. - <<elseif $TFS.farmUpgradeAsked < $week - 10>> - <br><br> - It's been long enough since you allowed them to use your organ farm to add ovaries to themselves and instructed them not to use contraceptives that most of them are visibly pregnant. This hasn't slowed their sexual congress at all, though. They've become much more focused on vaginal, and there's an obvious eagerness to cum inside Sisters who aren't obviously pregnant. - <<else>> - <br><br> - It hasn't been long enough since you allowed them to use your organ farm to add ovaries to themselves for the effects to be obvious yet. Most of them are doubtless pregnant, however. There's been a subtle shift in their sexual behavior, too: they're much more likely to focus on vaginal sex than they were before, so much so that they often double penetrate each others' pussies. When there aren't any cunts available, they do their best to hold their orgasms until one opens up, so to speak. - <</if>> -<</if>> -<br><br> -Visitors are not common: in fact, visitors are only as frequent as you feel like visiting. It takes a while before they notice you. When a dreamy-eyed young futa finally does, she reaches a lazy hand over to alert the eldest one present by tugging on one of her nipples and pointing in your direction. The elder looks over at you and gives you a friendly wave followed by a wait-one-moment gesture. She's curled up on her back with her cockhead in her own mouth, using both hands to give her own shaft a boob job while a younger futa is eats her ass and fingers her pussy. The futa matron orgasms promptly, sucking down her own cum. She gets up languidly, her plush body, softening forearm-sized dick, and enormous natural boobs making it a wonderful sight. -<br><br> -<<if $PC.title == 1>>"Protector,<<else>>"Protectrix,<</if>> thank you so much for coming to see us. Our own Selection of a Sister to serve in slavery is not to take place for some time, but our communications interface in that side room," she points, "will permit you to access a regional listing of Selected Sisters<<if $TFS.farmUpgrade > 0>>, all of which are fully fertile and produce their own natural female hormones, thanks to you<</if>>." She looks uncharacteristically uncertain. "Will you permit me to <<if $PC.dick != 0>><<if $PC.vagina != -1>>worship your perfect genitalia<<else>>serve your cock<</if>><<else>>adore your pussy<</if>> while you use it? I think my Sisters will forgive me the infidelity." <<if ($PC.dick != 0) && ($PC.vagina != -1) && ($PC.boobs >= 300)>>She looks at you speculatively. "Or you could join us for a while."<</if>> -<br><br> -<span id="result"> -<<link "Let her give you oral while you browse">> - <<replace "#result">> - You accept her offer, and she walks seductively over to the interface with the listing of available Sisters, getting down on her knees below it. When you step up to look through the listing, she presses her huge soft tits against your knees - <<if $PC.dick != 0>> - <<if $PC.vagina != -1>> - and nuzzles her plush lips and hot tongue against your womanhood, using one hand to massage your shaft languidly. Perusing the very thorough pictures and videos of the pretty futanari for sale here is arousing enough without a truly masterful oral queen pleasing both your cock and your pussy, and you cum quickly. She drinks your cum rapturously and returns her mouth to your wet cunt, eagerly working to bring more forth. - <<else>> - and snuggles her face between your thighs, nuzzling her nose into your ballsack before licking it with appetite and then sucking each of your balls gently, one by one. Meanwhile one of her clever hands is languidly massaging your shaft, bringing forth a drop of precum which she laps up with appetite. Humming with pleasure, she deepthroats you without apparent effort, her mischievous tongue flicking forward to lap at your scrotum. You blow your load down her throat, and she starts to suck you hard again. - <</if>> - <<else>> - and trails nibbles and kisses along your inner thighs before nuzzling her plush lips and hot tongue against your womanhood. Perusing the very thorough pictures and videos of the pretty futanari for sale here is arousing enough without a truly masterful cunt pleaser working her magic between your legs, and you've orgasmed before you finish one listing. She prolongs the climax cleverly and then starts to build you towards another. - <</if>> - <</replace>> -<</link>> -<<if ($PC.dick != 0) && ($PC.vagina >= 0) && ($PC.boobs >= 300)>> - <br><<link "Join the Sisters' orgy">> - <<replace "#result">> - <<set $futaAddiction += 1>> - <<switch $futaAddiction>> - <<case 1>> - You agree to spend some time taking part in the Sisters' orgy. The futa matron looks doubtful. "You'd have to agree to act as one of us," she says. "No different. No special sexual treatment." Her voice rises cutely on the last syllable, as you take her enormous dick in one hand and begin to stroke it vigorously. "V-very well," she gasps, taking one of your breasts in each of her hands. - <<if $PC.vagina == 0>> - You leave the Sisters' suite a few hours later, @@.green;leaving your virginity behind.@@ You are tired and a bit sore, but satisfied. - <<set $PC.vagina = 1>> - <<else>> - You leave the Sisters' suite after a few hours of fucking and being fucked, feeling tired but satisfied. - <</if>> - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 5, 0, -9, 1)>> - <</if>> - <<case 2>> - She doesn't have to explain the Sisters' sexual equality this time, or that you have to subject yourself to it. You remember, and you let her know you're willing by giving her a friendly hug that squashes your breasts against each other and rubs your stiff pricks together. She reaches around you to grab your ass, already pulling you towards the pile of futas. You leave the Sisters' suite after a few hours of fucking and being fucked, in a state of total sexual satiation. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 10, 0, -9, 1)>> - <</if>> - <<case 3>> - She asked that with a distinctly flirty tone, obviously hoping you'd agree again, and she isn't disappointed. You take her by the hand and skip over to the pile of futas, most of which know you very intimately by now. They see their Sister and you approaching, and those of them that don't have their mouths full greet you eagerly. Three of them quickly rearrange themselves to present you with a couple of dicks to sit on and a pussy to fuck, all at once. You leave the Sisters' suite after many hours of fucking and being fucked, tired but satisfied. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 20, 0, -9, 1)>> - <</if>> - <<case 4>> - She asked that in a knowing voice, confident you'd agree, and was already moving in to kiss you when you did. She seems to want you more than usual today, and pulls you down onto the edge of the pit, guiding your cock into her pussy. She isn't selfish, of course, and reaches around to spread your buttocks so you can get fucked while you fuck. You leave the Sisters' suite after many hours of this, very tired. You wonder when you can make time to visit the Sisters again. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 40, 0, -9, 1)>> - <</if>> - <<case 5>> - She runs her tongue over her lips as she asks, and sits you down on the edge of the pit and deepthroats you as soon as you agree. She wants your cum, and uses a couple of fingers to tickle your prostate and make it appear faster. You jerk with orgasm, and she pushes your wet cock up against your stomach so she can fuck your pussy. She pauses for a moment, letting a younger Sister enter her ass first. You leave the Sisters' suite after a full day of this, utterly exhausted but eager to return. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 60, 0, -9, 1)>> - <</if>> - <<case 6>> - You nod, and she turns back towards the orgy, not seeing any reason to lead you, since you know the way. You both sink back into the pile of cocks, pussies, mouths, asses, boobs; the hours go by without you noticing. You leave the Sisters' suite unable to remember specifics, but you clearly fucked and got fucked by every futa there at least once. You're surprised when you learn how long you were there, but the worries of being an arcology owner no longer seem as pressing as they once did. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 80, 0, -9, 1)>> - <</if>> - <<case 7>> - You don't even bother to respond, and head straight for the orgy. You insert yourself into an eager mouth, bending over so the matron following you can take you from behind. The worries of your life as an arcology owner seem very far away as she slides inside you. You only leave when $assistant.name repeatedly pages you over the arcology's public announcement system. On the way to your office, you notice how full of cum your stomach is, how relaxed your pussy and ass are, and how happy you feel. - <<if canGetPregnant($PC)>> - <<= knockMeUp($PC, 100, 0, -9, 1)>> - <</if>> - <<case 8>> - <<set $gameover = "sisters">> - <<goto "Gameover">> - <<default>> - <<set $futaAddiction = 0>> - <</switch>> - <</replace>> - <</link>> -<</if>> -</span> - -<<else>> - -//The Futanari Sisters use the same legalistic structures as other slave schools, but are actually very different. They're quite enigmatic, and inquiry into their cult-like methods is politely discouraged. All the Sisters own the institution together, and seem to share the goal of pursuing transformation of themselves to fit the classic futanari fetish — that is, to transform themselves into beautiful, curvaceous women with large dicks. All Sisters remain within the closed society for at least seven years. The Sisters fund themselves by selling members into slavery: interestingly, the more impressive a member is, the older she seems to be when sold; there may be a sort of selection mechanism by which the losers are sold immediately and the winners remain, leading the Sisters. This does not mean that ex-Sisters are unhappy with enslavement. On the contrary, it seems to be an expected stage of their lives, and not shameful. -<<if $TFS.schoolUpgrade != 0>> - <br><br> - Since you have supported the faction within the Sisters that favors - <<if $TFS.schoolUpgrade == 3>> - a mix of futas with and without balls; its female members will appear without balls, while its male members will appear with extremely large testicles. - <<if $TFS.compromiseWeek+15 > $week>>Or they will, in around <<print (($TFS.compromiseWeek+15)-$week)>> weeks.<</if>> - <<elseif $TFS.schoolUpgrade == 1>> - futas without balls, its members will now appear without visible testicles and increased submissiveness. - <<else>> - futa balls, its members will now appear with extremely large testicles and increased sex drives. - <</if>> - As a major <<if $PC.title == 0>>benefactrix<<else>>benefactor<</if>> of the institution, you also receive a discount on them. -<</if>>// - -The Sisters offer a member selected for sale into slavery for inspection via video call. The feed is of an exhausted futa, fast asleep. Whatever ceremonies the Sisters perform before releasing a member into slavery, they seem to have tired her out. There are indistinct but obviously sexual sounds audible in the background; it sounds like an orgy with a very large number of participants is going on nearby. - -<</if>> - -<br><br> - -<<set _marketResult = generateMarketSlave("TFS")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<<if $TFS.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $TFS.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $TFS "slave" "slaves">> diff --git a/src/markets/theGymnasiumAcademy.tw b/src/markets/theGymnasiumAcademy.tw deleted file mode 100644 index aa7895b8451c1796d4bd18d8cb6d2619516dab5c..0000000000000000000000000000000000000000 --- a/src/markets/theGymnasiumAcademy.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: The Gymnasium-Academy [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "TGA">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//The Gymnasium-Academy is a very unusual slave school. It sits at a bizarre juncture of the evolving gender roles and slave roles in the Free Cities. Its graduates are exclusively born male, and are not surgically or hormonally changed, but are thoroughly indoctrinated in the gender roles of the Free Cities to be accepting of their place in the new and rapidly changing world. Since the Gymnasium-Academy produces graduates with a greater ability to build muscle, fitness and virility than any of its competitors, it also trains for athletic perfection to further differentiate them. This training relies on traditional methods of corporal punishment. <<if $TGA.schoolUpgrade != 0>><br><br>Since you have endowed <<if $TGA.schoolUpgrade == 1>>advanced training methods at the Gymnasium-Academy, its graduates are now fanatically loyal.<<else>>a combat training center at the Gymnasium-Academy, its graduates are now deadly fighters.<</if>> As a major <<if $PC.title == 0>>benefactrix<<else>>benefactor<</if>> of the institution, you also receive a discount on them.<</if>>// - -<br><br>The Gymnasium-Academy offers a fresh graduate for inspection via video call. The interview takes place in an office overlooking an expansive workout room, in which a large number of naked, fit young bodies are performing punishing workout routines. - -<<set _marketResult = generateMarketSlave("TGA")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $TGA.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $TGA.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $TGA "slave" "slaves">> diff --git a/src/markets/theHippolytaAcademy.tw b/src/markets/theHippolytaAcademy.tw deleted file mode 100644 index fa7c39764ba1346eeed61cebec3d72ec98f5027a..0000000000000000000000000000000000000000 --- a/src/markets/theHippolytaAcademy.tw +++ /dev/null @@ -1,37 +0,0 @@ -:: The Hippolyta Academy [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "HA">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -// -The Hippolyta Academy is one of the most famous slave bodyguarding schools in all the Free Cities. Its business model is to offer very high quality, highly trained girls. Their renowned amazonian maids are some of the best combatants in the world and can be often found at the side of the wealthiest citizens. -<<if $HA.schoolUpgrade == 1>> - Recently the school was able to enhance its educational programs thanks to your generous donation. Their slaves are now some of the most well trained and educated on the market. -<<elseif $HA.schoolUpgrade == 2>> - Recently the school was able to improve its drug enhancement program thanks to your generous donation. Their slaves are now some of the most physically impressive specimen on the market. -<<elseif $HA.schoolUpgrade == 3>> - Recently the school redirected its focus to better align with the strongfat ideal, as of your suggestion. Their slaves are physically impressive yet maintain a soft and feminine aspect. -<</if>> -// - -<br><br>The Hippolyta Academy offers a fresh graduate for inspection. The interview takes place in one of the many training areas of the school, where the physical prowess of the candidate can be easily showcased. - -<<set _marketResult = generateMarketSlave("HA")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $HA.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.6)>> -<<elseif $HA.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*1.2)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $HA "slave" "slaves">> diff --git a/src/markets/theMarket/buySlaves.js b/src/markets/theMarket/buySlaves.js index a6fa5190fc7f094e4d28a114afe6a1d8486e1bbb..041addc710f6869956844218de490f3facc4e0d2 100644 --- a/src/markets/theMarket/buySlaves.js +++ b/src/markets/theMarket/buySlaves.js @@ -20,7 +20,7 @@ App.UI.buySlaves = function() { } else if (V.slaveCostFactor < 1) { App.UI.DOM.appendNewElement("div", el, `The slave market is bearish; the price of slaves is low. `, "yellow"); } else { - App.UI.DOM.appendNewElement("div", el, `The slave market is stable; the price of slaves is average. `); + App.UI.DOM.appendNewElement("div", el, `The slave market is stable; the price of slaves is average.`); } App.UI.DOM.appendNewElement("h2", el, "Sex Slave Purchase Options"); @@ -33,10 +33,6 @@ App.UI.buySlaves = function() { App.UI.DOM.appendNewElement("div", el, "The arcology's prosperity and culture will affect slaves who have lived there.", "note"); App.UI.DOM.appendNewElement("div", el, neighborsBlock()); - // Midrange - App.UI.DOM.appendNewElement("h3", el, "Midrange"); - el.append(storeBlock(App.Data.Markets.intermediate)); - // Schools if (V.rep > 6000) { App.UI.DOM.appendNewElement("h3", el, "Slave Schools"); @@ -71,11 +67,13 @@ App.UI.buySlaves = function() { App.UI.DOM.link( "Slaves from", () => { - V.slaveMarket = "neighbor"; - V.numArcology = _i; + App.UI.specificMarket({ + market: "neighbor", + slaveMarket: 0, + newSlaves: [], + numArcology: _i + }); }, - [], - "Slave Markets" ) ); App.UI.DOM.appendNewElement("span", linkUnit, ` ${V.arcologies[_i].name}`, "bold"); @@ -131,20 +129,33 @@ App.UI.buySlaves = function() { el.append(requirements); return el; } - const linkArray = []; + if (!App.Markets[store.marketType] && V.debugMode) { + App.UI.DOM.appendNewElement("span", el, "marketType not set up", "red"); + } - store.passage = store.passage || "Slave Markets"; - linkArray.push( - App.UI.DOM.link( - store.title, - () => { - V.slavesSeen += 1; - V.slaveMarket = store.marketType; - }, - [], - store.passage - ) - ); + const linkArray = []; + if (store.marketType === "Custom Slave") { // hardcoding this exception because converting this is going to be a bitch. + linkArray.push( + App.UI.DOM.passageLink( + store.title, + store.marketType + ) + ); + } else { + linkArray.push( + App.UI.DOM.link( + store.title, + () => { + App.UI.specificMarket({ + market: store.marketType, + slaveMarket: 0, + newSlaves: [], + numArcology: 1 + }); + }, + ) + ); + } if (store.bulkAvailable !== false) { if (V.cash > (minCost * 5)) { linkArray.push( @@ -175,6 +186,7 @@ App.UI.buySlaves = function() { ); } } + el.append(App.UI.DOM.generateLinksStrip(linkArray)); if (store.sale) { @@ -184,7 +196,7 @@ App.UI.buySlaves = function() { if (store.note) { App.UI.DOM.appendNewElement("span", el, ` ${store.note}`, "note"); } - if (["GRI", "HA", "NUL", "SCP", "TCR", "TFS", "TGA", "TSS", "LDE", "TUO"].includes(store.marketType)) { + if ([App.Data.misc.schools].includes(store.marketType)) { if (V[store.marketType].schoolSale === 1) { App.UI.DOM.appendNewElement("span", el, `Offering your first purchase at half price this week. `, "yellow"); } diff --git a/src/markets/theMarket/market.js b/src/markets/theMarket/market.js index 7fbde0137e732c4a3da19df5562554dd429c576d..e93c1bc6cfd3267fc129790ac862027285230890 100644 --- a/src/markets/theMarket/market.js +++ b/src/markets/theMarket/market.js @@ -17,16 +17,19 @@ App.UI.market = function() { return span; }; -App.UI.specificMarket = function({market, slaveMarket, slaveMarketLimit, newSlaves = [], numArcology} = {}) { +App.UI.specificMarket = function({market, slaveMarket, newSlaves = [], numArcology} = {}) { const el = new DocumentFragment(); + // Temp + V.newSlaves = newSlaves; + // Sidebar V.nextButton = "Back"; V.nextLink = "Buy Slaves"; V.returnTo = "Buy Slaves"; V.encyclopedia = "Kidnapped Slaves"; // Multi-Purchase Support - if (V.newSlaves.length > 0) { + if (newSlaves.length > 0) { V.nextButton = "Continue"; V.nextLink = "Bulk Slave Intro"; V.returnTo = "Main"; diff --git a/src/markets/theMarket/marketData.js b/src/markets/theMarket/marketData.js index b136d888a318f838e5d0e2efbd81945e2683a080..7ab69ed70561b26f65d06973927b3cb2b0623b45 100644 --- a/src/markets/theMarket/marketData.js +++ b/src/markets/theMarket/marketData.js @@ -1,11 +1,10 @@ /** * @typedef {Array<market>} marketCategory - * / + */ /** * @typedef {object} market * @property {string} title - * @property {string} [passage] * @property {string} [marketType] * @property {string} [note] * @property {string} [sale] @@ -18,7 +17,6 @@ App.Data.Markets = { low: [ { title: "Corporate Market", - passage: `Corporate Market`, marketType: "corporate", get note() { return V.corp.Market === 1 ? `Slaves from your corporation purchased at a discounted rate.` : `Slaves from your corporation`; }, sale: "", @@ -33,51 +31,51 @@ App.Data.Markets = { }, { title: "Order a custom husk slave from the Flesh Heap", - passage: `Husk Slave`, + marketType: `Husk Slave`, note: `Will need to be used on arrival.`, bulkAvailable: false, get requirements() { return (V.bodyswapAnnounced === 1); } }, { title: "Kidnappers' Market", - passage: `Slave Markets`, marketType: "kidnappers", note: `Slaves will tend to be low quality and resistant.`, get requirements() { return (V.rep > 500) ? true : `You are not reputable enough to buy kidnapped slaves.`; } }, - ], - intermediate: [ { title: "Runaway Hunters' Market", - passage: `Slave Markets`, marketType: "hunters", note: "Slaves will tend to be skilled but rebellious.", get requirements() { return (V.rep > 1000) ? true : `You are not reputable enough to buy recaptured slaves.`; } }, { title: "Indentures Market", - passage: `Slave Markets`, marketType: "indentures", note: "Temporary enslavement and restrictions on treatment.", get requirements() { return (V.rep > 1500) ? true : `You are not reputable enough to buy indentured servants.`; } }, { title: "Raiders' Market", - passage: ``, marketType: "raiders", note: "Slaves will always be sold immediately upon reaching majority.", get requirements() { return (V.rep > 2000) ? true : `You are not reputable enough to buy teenaged slaves.`; } }, { title: "Raiders' Black Market", - passage: ``, marketType: "underage raiders", note: "Very young slaves.", - get requirements() { return ((V.pedo_mode === 1 || (V.minimumSlaveAge <= 13 && V.minimumSlaveAge <= V.fertilityAge)) && V.rep > 3000) ? true : `You are not reputable enough to buy underaged slaves.`; } + get requirements() { + if (V.rep <= 3000) { + return `You are not reputable enough to buy underaged slaves.`; + } else if (V.pedo_mode === 1 || (V.minimumSlaveAge <= 13 && V.minimumSlaveAge <= V.fertilityAge)) { + return true; + } else { + return false; + } + } }, { title: "Trainers' Market", - passage: ``, marketType: "trainers", note: "Slaves will tend to be good quality and obedient.", sale: "", @@ -86,7 +84,6 @@ App.Data.Markets = { }, { title: "Wetware CPUs", - passage: ``, marketType: "wetware", note: "Ruined bodies but keen minds. Requires some TLC, but offers outstanding training at a discount.", sale: "", @@ -95,7 +92,7 @@ App.Data.Markets = { }, { title: "Prisoner Sale", - passage: `Criminal Market`, + get marketType() { return V.prisonCircuit[V.prisonCircuitIndex]; }, get note() { switch (V.prisonCircuit[V.prisonCircuitIndex]) { case "low tier criminals": @@ -131,78 +128,67 @@ App.Data.Markets = { { title: "The Slavegirl School", marketType: "TSS", - passage: "The Slavegirl School", note: "Straightforward slaves with good training.", get requirements() { return (V.seeDicks !== 100); } }, { title: "The Utopian Orphanage", marketType: "TUO", - passage: "The Utopian Orphanage", note: "Intelligent, unspoiled slaves just past their majority.", get requirements() { return (V.seeDicks !== 100); } }, { title: "Growth Research Institute", marketType: "GRI", - passage: "Growth Research Institute", note: "Poorly trained slaves with huge assets.", get requirements() { return (V.seeDicks !== 100); } }, { title: "St. Claver Preparatory", marketType: "SCP", - passage: "St. Claver Preparatory", note: "Slaves with basic training and solid implants.", get requirements() { return (V.seeDicks !== 100); } }, { title: "The Cattle Ranch", marketType: "TCR", - passage: "The Cattle Ranch", note: "Mentally conditioned free-range cowgirls.", get requirements() { return (V.seeDicks !== 100); } }, { title: "The Hippolyta Academy", marketType: "HA", - passage: "The Hippolyta Academy", note: "High quality slaves of powerful physique and refined skills.", get requirements() { return (V.seeDicks !== 100); } }, { title: "L'École des Enculées", marketType: "LDE", - passage: "L'École des Enculées", note: "Slaves optimized and trained for anal.", get requirements() { return (V.seeDicks !== 0); } }, { title: "The Gymnasium-Academy", marketType: "TGA", - passage: "The Gymnasium-Academy", note: "Well trained slaves with dicks.", get requirements() { return (V.seeDicks !== 0); } }, { title: "The Futanari Sisters", marketType: "TFS", - passage: "The Futanari Sisters", note: "Highly skilled, highly feminine hermaphrodites.", get requirements() { return (V.seeDicks !== 0); } }, { title: "Nueva Universidad de Libertad", marketType: "NUL", - passage: "Nueva Universidad de Libertad", note: "Androgynous slaves lacking genitalia.", }, ], high: [ { title: "Take in a shelter slave", - passage: `Slave Shelter`, - marketType: "", + marketType: "Slave Shelter", note: "Presents charity cases for a nominal fee.", bulkAvailable: false, get requirements() { @@ -223,48 +209,42 @@ App.Data.Markets = { }, { title: "Consult the household liquidator", - passage: `Household Liquidator`, - marketType: "", + marketType: "Household Liquidator", note: "Offers slaves close to one another at a very high price.", bulkAvailable: false, get requirements() { return (V.rep > 8000) ? true : `You are not reputable enough to consult the household liquidator.`; } }, { title: "Place a special order", - passage: `Custom Slave`, - marketType: "", + marketType: "Custom Slave", note: "Customizable but very expensive.", bulkAvailable: false, get requirements() { return (V.rep > 10000) ? true : `You are not reputable enough to order custom slaves.`; } }, { title: "Place a fulfillment order", - passage: `JobFulfillmentCenterOrder`, - marketType: "", + marketType: "JobFulfillmentCenterOrder", note: "Fills leaderships roles for a price.", bulkAvailable: false, get requirements() { return (V.rep > 10000); } }, { title: "Attend an auction of a prestigious slave", - passage: `Prestigious Slave`, - marketType: "", + marketType: "Prestigious Slave", note: "Variable and expensive.", bulkAvailable: false, get requirements() { return (V.rep > 12000) ? true : `You are not reputable enough to bid on prestigious slaves.`; } }, { title: "Attend an auction of other Elite's stock", - passage: `Elite Slave`, - marketType: "", + marketType: "Elite Slave", note: "Limited and very expensive.", bulkAvailable: false, get requirements() { return (V.propOutcome === 1); } }, { title: "Acquire other slaveowners' stock", - passage: `Special Slave`, - marketType: "", + marketType: "Special Slave", note: "Variable and expensive", bulkAvailable: false, get requirements() { return (V.rep > 14000) ? true : `You are not reputable enough to acquire other slaveowners' stock.`; } diff --git a/src/markets/theMarket/sellSlaves.js b/src/markets/theMarket/sellSlaves.js index 6caea63744ba827f055c53029763292f999aba92..d4237afca5968ea19c59021969c5ed0fdafef851 100644 --- a/src/markets/theMarket/sellSlaves.js +++ b/src/markets/theMarket/sellSlaves.js @@ -4,7 +4,7 @@ App.UI.sellSlaves = function() { App.UI.DOM.appendNewElement("h2", el, "Selling slaves"); const div = document.createElement("div"); - div.append(`While you are at the market, you may want to `); + div.append(`While you are at the market, you may want to`); div.append( App.UI.DOM.passageLink( `look at your own underperforming slaves`, diff --git a/src/markets/theMarket/tradeMenials.js b/src/markets/theMarket/tradeMenials.js index be7ab60a304f6f231b29581c5b9cc36c0462e79d..4a9682690a4c8119be6d35c16240092a62fa0a8c 100644 --- a/src/markets/theMarket/tradeMenials.js +++ b/src/markets/theMarket/tradeMenials.js @@ -13,7 +13,7 @@ App.UI.tradeMenials = function() { App.UI.DOM.appendNewElement("div", el, popCap.text); bulkMax = popCap.value - V.menials - V.fuckdolls - V.menialBioreactors; - App.UI.DOM.appendNewElement("div", el, `The parts of your arcology you own can house a total of ${num(popCap.value)} menial slaves. `); + App.UI.DOM.appendNewElement("div", el, `The parts of your arcology you own can house a total of ${num(popCap.value)} menial slaves.`); el.append(menialTrading()); @@ -31,7 +31,7 @@ App.UI.tradeMenials = function() { const el = new DocumentFragment(); let div = document.createElement("div"); let span; - div.append(`Slave demand is `); + div.append(`Slave demand is`); if (V.menialDemandFactor <= -35000) { App.UI.DOM.appendNewElement("span", div, `extremely low`, ["red", "bold"]); } else if (V.menialDemandFactor <= -20000) { @@ -46,10 +46,10 @@ App.UI.tradeMenials = function() { App.UI.DOM.appendNewElement("span", div, `strong`, ["yellow", "bold"]); } if (V.deltaDemand > 0) { - div.append(` and `); + div.append(` and`); App.UI.DOM.appendNewElement("span", div, `improving`, ["green", "bold"]); } else if (V.deltaDemand < 0) { - div.append(` and `); + div.append(` and`); App.UI.DOM.appendNewElement("span", div, `decreasing`, ["red", "bold"]); } if (V.deltaDemand !== 0) { @@ -87,7 +87,7 @@ App.UI.tradeMenials = function() { const el = new DocumentFragment(); let span; let div = document.createElement("div"); - div.append(`Slave supply is `); + div.append(`Slave supply is`); if (V.menialSupplyFactor <= -35000) { App.UI.DOM.appendNewElement("span", div, "extremely low", ["green", "bold"]); @@ -103,10 +103,10 @@ App.UI.tradeMenials = function() { App.UI.DOM.appendNewElement("span", div, "strong", ["yellow", "bold"]); } if (V.deltaSupply > 0) { - div.append(` and `); + div.append(` and`); App.UI.DOM.appendNewElement("span", div, "improving", ["red", "bold"]); } else if (V.deltaSupply < 0) { - div.append(` and `); + div.append(` and`); App.UI.DOM.appendNewElement("span", div, "decreasing", ["green", "bold"]); } if (V.deltaSupply !== 0) { @@ -146,13 +146,13 @@ App.UI.tradeMenials = function() { const el = new DocumentFragment(); let div = document.createElement("div"); if (V.menials > 1) { - el.append(`You own ${num(Math.trunc(V.menials))} menial slaves. `); + el.append(`You own ${num(Math.trunc(V.menials))} menial slaves.`); } else if (V.menials > 0) { - el.append(`You own one menial slave. `); + el.append(`You own one menial slave.`); } else { - el.append(`You do not own any menial slaves. `); + el.append(`You do not own any menial slaves.`); } - el.append(`The market price of menials is ${cashFormat(menialPrice)}. `); + el.append(`The market price of menials is ${cashFormat(menialPrice)}.`); if (bulkMax > 0 && V.cash > menialPrice) { div = document.createElement("div"); @@ -334,14 +334,14 @@ App.UI.tradeMenials = function() { const el = new DocumentFragment(); let div = document.createElement("div"); if (V.fuckdolls > 1) { - el.append(`You own ${num(Math.trunc(V.fuckdolls))} standard Fuckdolls. `); + el.append(`You own ${num(Math.trunc(V.fuckdolls))} standard Fuckdolls.`); } else if (V.fuckdolls > 0) { - el.append(`You own one standard Fuckdoll. `); + el.append(`You own one standard Fuckdoll.`); } else if (V.arcologies[0].FSPaternalist === "unset") { - el.append(`You do not own any standard Fuckdolls. `); + el.append(`You do not own any standard Fuckdolls.`); } if ((V.fuckdolls > 0) || (V.arcologies[0].FSPaternalist === "unset")) { - el.append(`The market price of standard Fuckdolls is ${cashFormat(menialPrice)}. `); + el.append(`The market price of standard Fuckdolls is ${cashFormat(menialPrice)}.`); if (bulkMax > 0) { if (V.arcologies[0].FSPaternalist === "unset" && V.cash > menialPrice) { div = document.createElement("div"); @@ -434,14 +434,14 @@ App.UI.tradeMenials = function() { const el = new DocumentFragment(); let div = document.createElement("div"); if (V.menialBioreactors > 1) { - el.append(`You own ${num(Math.trunc(V.menialBioreactors))} standard bioreactors. `); + el.append(`You own ${num(Math.trunc(V.menialBioreactors))} standard bioreactors.`); } else if (V.menialBioreactors > 0) { - el.append(`You own one standard bioreactor. `); + el.append(`You own one standard bioreactor.`); } else if (V.arcologies[0].FSPaternalist === "unset") { - el.append(`You do not own any standard bioreactors. `); + el.append(`You do not own any standard bioreactors.`); } if ((V.menialBioreactors > 0) || (V.arcologies[0].FSPaternalist === "unset")) { - el.append(`The market price of standard bioreactors is ${cashFormat(menialPrice - 100)}. `); + el.append(`The market price of standard bioreactors is ${cashFormat(menialPrice - 100)}.`); if (bulkMax > 0) { if (V.arcologies[0].FSPaternalist === "unset" && V.cash > menialPrice) { div = document.createElement("div"); diff --git a/src/markets/theSlavegirlSchool.tw b/src/markets/theSlavegirlSchool.tw deleted file mode 100644 index 94792e4d4c45594a7f3b3b42f138eed95a8597e0..0000000000000000000000000000000000000000 --- a/src/markets/theSlavegirlSchool.tw +++ /dev/null @@ -1,28 +0,0 @@ -:: The Slavegirl School [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "TSS">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//The Slavegirl School is the newest slave school operating in the Free Cities. Its business model is to offer simpler, cheaper wares than its competitors. All Slavegirl School graduates are natural-born females without surgical modifications. Their training emphasizes elimination of any serious psychological deformities. They are promptly enslaved and sold as soon as they reach their majorities, and are marketed as complete virgins. <<if $TSS.schoolUpgrade != 0>><br><br>You have endowed <<if $TSS.schoolUpgrade == 1>>an alternative college at The Slavegirl School, which focuses on retraining good MILF stock into mature slave girls.<<else>>an improvement in the simplistic school's approach that teaches good basic skills without losing too much efficiency.<</if>> As a major <<if $PC.title == 0>>benefactrix<<else>>benefactor<</if>> of the institution, you also receive a discount on them.<</if>>// - -<br><br>The Slavegirl School offers a fresh graduate for inspection via video call. The interview takes place in a faculty member's office. Absurdly, it's barely distinguishable from an office at any traditional institution of higher education. The only giveaway is the profusion of sex toys on the desk and the pornography on the walls. - -<<set _marketResult = generateMarketSlave("TSS")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $TSS.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.5)>> -<<elseif $TSS.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.8)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $TSS "slave" "slaves">> diff --git a/src/markets/theUtopianOrphanage.tw b/src/markets/theUtopianOrphanage.tw deleted file mode 100644 index 98f300e63cecda8db3b6278addc3413ff5bed9a0..0000000000000000000000000000000000000000 --- a/src/markets/theUtopianOrphanage.tw +++ /dev/null @@ -1,31 +0,0 @@ -:: The Utopian Orphanage [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "TUO">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -// -The Utopian Orphanage is where all slaves dream of being raised. Its business model is to offer intelligent, well educated girls just past their majority. The girls are treated exceptionally well and have no sexual education or experience. -// -<br><br> -The Utopian Orphanage offers a fresh graduate for inspection. The interview takes place in the girl's private room, where she showcases her education and wits. - -<<set _marketResult = generateMarketSlave("TUO")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $TUO.schoolSale != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*0.6)>> -<<elseif $TUO.schoolUpgrade != 0>> - <<set _slaveCost = Math.trunc(_slaveCost*1.2)>> -<</if>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br> -The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<setLocalPronouns $activeSlave>> -<<buyingFromSchoolControls $TUO "slave" "slaves">> diff --git a/src/markets/wetwareCPUs.tw b/src/markets/wetwareCPUs.tw deleted file mode 100644 index f467247b81a6c6b19bbda79a30d245747360df58..0000000000000000000000000000000000000000 --- a/src/markets/wetwareCPUs.tw +++ /dev/null @@ -1,22 +0,0 @@ -:: Wetware CPUs [nobr] - -<<set $nextButton = "Back", $nextLink = "Buy Slaves", $returnTo = "Buy Slaves", $encyclopedia = "Slave Schools", $slaveMarket = "wetware">> -/* Multi-Purchase Support */ -<<if ndef $newSlaves>><<set $newSlaves = []>><</if>> -<<if $newSlaves.length > 0>> - <<set $nextButton = "Continue", $nextLink = "Bulk Slave Intro", $returnTo = "Main", $newSlaveIndex = 0>> -<</if>> - -//Wetware CPUs offer highly trained slaves with useful career experience at a discount; That is, at the cost of the physical health of the merchandise.// - -<br><br> - -<<set _marketResult = generateMarketSlave("wetware")>> -<<set $activeSlave = _marketResult.slave>> -<<print _marketResult.text>> -<<set _slaveCost = slaveCost($activeSlave)>> -<<if $slavesSeen > $slaveMarketLimit>><<set _slaveCost += Math.trunc(_slaveCost*(($slavesSeen-$slaveMarketLimit)*0.1))>><</if>> - -<br><br>The price is <<print cashFormat(_slaveCost)>>.<<if $slavesSeen > $slaveMarketLimit>> You have cast such a wide net for slaves this week that it is becoming more expensive to find more for sale. Your reputation helps determine your reach within the slave market.<</if>> - -<<includeDOM App.UI.buyingFromMarketControls($activeSlave, _slaveCost)>> diff --git a/src/utility/slaveCreationWidgets.tw b/src/utility/slaveCreationWidgets.tw index 37743cf33fdaf899db4e4357d6baa1e5bddc69a5..404cd4b5bad78519331bb96385554d6fedc494f3 100644 --- a/src/utility/slaveCreationWidgets.tw +++ b/src/utility/slaveCreationWidgets.tw @@ -767,32 +767,3 @@ /* Closes Entertain */ <</switch>> <</widget>> - -/% - % Shows controls for buying and advancing the queue for buying slaves from a school - % Arguments: - % 0: school - % 1: name for a single slave ("slave", "cow", etc.) - % 2: name for a bunch of them ("slaves", "cattle", etc.) - % Call as <<buyingFromSchoolControls $TCR "cow" "cattle">> - %/ -<<widget "buyingFromSchoolControls">> -<br>[["Decline to purchase " + $him + " and check out another " + $args[1]|passage()][$slavesSeen += 1]] -<<if $cash >= _slaveCost>> - <<set _schoolToBuyFrom = $args[0]>> - <br>[["Buy " + $him + " and check out other " + $args[2] + " to order"|passage()][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), _schoolToBuyFrom.schoolSale = 0, _schoolToBuyFrom.studentsBought += 1, $newSlaves.push($activeSlave), $introType = "multi", $slavesSeen+=1]] - <<if $newSlaves.length == 0>> - <br>[["Buy " + $his + " slave contract"|New Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), _schoolToBuyFrom.schoolSale = 0, _schoolToBuyFrom.studentsBought += 1, $nextButton = "Continue", $nextLink = "AS Dump", $returnTo = "Main"]] - <<else>> - <br>[["Buy " + $him + " and finish your order of " + $args[2]|Bulk Slave Intro][cashX(forceNeg(_slaveCost), "slaveTransfer", $activeSlave), _schoolToBuyFrom.schoolSale = 0, _schoolToBuyFrom.studentsBought += 1, $newSlaves.push($activeSlave)]] - <</if>> -<<else>> - <br>//You lack the necessary funds to buy this $args[1].// -<</if>> -<<if $newSlaves.length > 0>> - <br>[["Finish your order of " + $args[2]|"Bulk Slave Intro"]] -<</if>> - -<br><br> -<<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>> -<</widget>>