Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
/* verb is in javascript files */
<<include 'InitBanterTopic'>><<set setup.BANTER_TOPIC = [
'you',
'your race',
'your gender',
'your personality',
'your skills',
'your career',
'the company',
'recent events',
'slaves',
'new slaves',
'their past life',
'humans',
'elves',
'the Kingdom of Tor',
'the City of Lucgate',
'orcs',
'nekos',
'dragonkins',
'foreigners',
'quests',
'recent quests',
'past quests',
'adventuring',
'swords',
'dragons',
'culture',
'cooking',
'hobbies',
'literature',
'art',
'entertainment',
'game',
'poetry',
'sports',
'exercise',
'muscle',
'sex',
'anal sex',
'oral sex',
'vaginal sex',
'pony slave',
'pet slave',
'music',
'painting',
'health',
'history',
'mathematics',
'animals',
'plants',
'dick',
'balls',
'vagina',
'anus',
'breasts',
'relationships',
'religion',
'politics',
'love life',
'crime',
'slaving career',
'knights',
'peasants',
'milk',
'trading',
'magic',
'northern vale',
'southern seas',
'western forests',
'eastern deserts',
'bimbos',
'mindbroken slaves',
'fleshshaping',
'corruption',
'purification',
'duties',
'your leadership',
'their friends',
'their rivals',
'the future',
'the past',
'the world',
'their dreams',
'money',
'fame',
'travel',
'the weather',
'food',
'fashion',
'armor',
'bondage',
'naked',
'submissive slaves',
'dominant slavers',
'technology',
'romance',
'love',
'pets',
'education',
'mercenaries',
'pirates',
'whores',
'soldiers',
'raiders',
'demons',
'healers',
'healing',
'crafting',
'potions',
'trauma',
'equipments',
'their background',
'their gender',
'their race',
'their personality',
'work',
'combat',
'survival',
'stealth',
'slaving',
'knowledge',
'social life',
'sex life',
'family',
'nipples',
'wings',
'tail',
'healsluts',
'friendship',
'rivalry',
'mistakes',
'triumphs',
'the fort',
'tomorrow',
'yesterday',
'next month',
'last month',
'next week',
'last week',
'hypnotism',
'breaking slaves',
'domestic slaves',
'sissies',
'exhibitionism',
'edging',
'sex addiction',
'ghosts',
'nature',
'sleeping',
'puns',
'home',
'hygiene',
'science',
'tentacles',
'favors',
'eldritch abominations',
'Neko Port City',
'harems',
'low wages',
'wet dreams',
"dinner",
"indigestion",
"the Mist",
"the cold",
"the heat",
"old flames",
"virginity",
"sex protection",
"a bad rash",
"fungus",
"feet",
"working out",
"saving up",
"getting new clothes",
"chafing",
"the thing",
"getting stains out of clothing",
"favorite songs",
"regular cats",
"weapon maintenance",
"holey underwear",
"wearing a mask while raiding",
"the ethics of slaving",
"philosophy",
"tea",
"rumors",
"that smell",
"tall people",
"short people",
"big butts",
"flat butts",
"cake",
"birthdays",
"injuries",
"scars",
"childhood friends",
"perfect handwriting",
"awful handwriting",
"new slavers",
"the meaning of your name",
"our glorious leader",
"dancing",
"prisoners",
"favorite slaves",
"networking",
"one-night stands",
"the night sky",
"orc tusks",
"elf ears",
"peach fuzz",
"other worlds",
"dildos",
"fresh fruits",
"the afterlife",
"sunrise",
"sunset",
"camp nightlife",
"elven hand-woven rugs",
"Southern Lands dragonspice",
"orc liquor",
"werewolf soaps",
"neko milk-mead",
"Northern fur coats",
"Lucgate pickpockets",
"Eastern crystal tooth-knives",
"Kingdom of Tor eggplant dishes",
"seaman-sucking sea serpents",
"Mist culinary",
]>><<set setup.buildingtemplate = {}>>
/* Unique buildings */
/* Structural */
<<include 'InitBuildingFort'>>
<<include 'InitBuildingGrandHall'>>
<<include 'InitBuildingVeteranHall'>>
/* Critical Buildings */
<<include 'InitBuildingQuestOffice'>>
<<include 'InitBuildingLodgings'>>
<<include 'InitBuildingConstructionOffice'>>
<<include 'InitBuildingScoutHut'>>
<<include 'InitBuildingProspectsHall'>>
<<include 'InitBuildingMissionControl'>>
<<include 'InitBuildingHiringSquare'>>
<<include 'InitBuildingDungeons'>>
<<include 'InitBuildingSlavePens'>>
<<include 'InitBuildingMarketingOffice'>>
<<include 'InitBuildingMailRoom'>>
/* Offices */
<<include 'InitBuildingViceLeaderOffice'>>
<<include 'InitBuildingMoraleOffice'>>
<<include 'InitBuildingLibrary'>>
/* Lodgings */
/* activities */
<<include 'InitBuildingDutyRoom'>>
/* slaver training */
<<include 'InitBuildingTrainingGrounds'>>
/* scout */
<<include 'InitBuildingScoutTower'>>
<<include 'InitBuildingScoutOffice'>>
<<include 'InitBuildingScoutCarriage'>>
<<include 'InitBuildingScoutHarbor'>>
/* training */
<<include 'InitBuildingTrainingChamber'>>
/* storage */
<<include 'InitBuildingArmory'>>
<<include 'InitBuildingWarehouse'>>
/* hospital */
<<include 'InitBuildingHospital'>>
<<include 'InitBuildingTraumaCenter'>>
/* bed chamber */
<<include 'InitBuildingBedchamberWing'>>
/* rec wing */
<<include 'InitBuildingRecreationWing'>>
/* under here are optional buildings */
/* Markets */
<<include 'InitBuildingForge'>>
<<include 'InitBuildingSexShop'>>
<<include 'InitBuildingApothecary'>>
/* treatment */
<<include 'InitBuildingTreatmentRoom'>>
/* biolab */
<<include 'InitBuildingBiolab'>>
/* surgery */
<<include 'InitBuildingSurgery'>>
/* ritual chamber */
<<include 'InitBuildingRitualChamber'>>
<<include 'InitBuildingDeepRitualChamber'>>
/* temple */
<<include 'InitBuildingTemple'>>
/* Supplementary Buildings */
/* Offices */
<<include 'InitBuildingMarketerOffice'>>
<<include 'InitBuildingInsurerOffice'>>
<<include 'InitBuildingRescuerOffice'>>
<<include 'InitBuildingRelationsOffice'>>
<<include 'InitBuildingRelationshipManagerOffice'>>
<<include 'InitBuildingDamageControlOffice'>>
<<include 'InitBuildingMessengerPost'>>
/* Hiring */
<<include 'InitBuildingHiringSquareVale'>>
<<include 'InitBuildingHiringSquareForest'>>
<<include 'InitBuildingHiringSquareDesert'>>
<<include 'InitBuildingHiringSquareSea'>>
/* Hospital */
<<include 'InitBuildingTreatmentRoomResetLevel'>>
<<include 'InitBuildingTreatmentRoomBlank'>>
<<include 'InitBuildingTreatmentRoomMindMend'>>
<<include 'InitBuildingTreatmentRoomHate'>>
<<include 'InitBuildingTreatmentRoomLove'>>
<<include 'InitBuildingTreatmentRoomLoveTrue'>>
<<include 'InitBuildingTreatmentRoomForget'>>
<<include 'InitBuildingTreatmentRoomIsolation'>>
<<include 'InitBuildingTreatmentRoomTransformation'>>
/* training */
<<include 'InitBuildingTrainingBedroom'>>
<<include 'InitBuildingTrainingField'>>
<<include 'InitBuildingTortureChamber'>>
<<include 'InitBuildingFetishTrainingRoom'>>
<<include 'InitBuildingMilkerRoom'>>
<<include 'InitBuildingObedienceTrainingRoom'>>
<<include 'InitBuildingVaginaTrainingRoom'>>
<<include 'InitBuildingOralTrainingRoom'>>
<<include 'InitBuildingAnalTrainingRoom'>>
<<include 'InitBuildingSissyTrainingRoom'>>
<<include 'InitBuildingToiletTrainingRoom'>>
<<include 'InitBuildingDomesticTrainingRoom'>>
<<include 'InitBuildingEnduranceTrainingRoom'>>
<<include 'InitBuildingPetTrainingRoom'>>
<<include 'InitBuildingPonyTrainingRoom'>>
<<include 'InitBuildingDominanceTrainingRoom'>>
<<include 'InitBuildingMasochistTrainingRoom'>>
<<include 'InitBuildingEdgingTrainingRoom'>>
<<include 'InitBuildingHornyTrainingRoom'>>
<<include 'InitBuildingConvincingRoom'>>
<<include 'InitBuildingBrainwashingRoom'>>
/* biolab */
<<include 'InitBuildingBreastlab'>>
<<include 'InitBuildingDicklab'>>
<<include 'InitBuildingBallslab'>>
<<include 'InitBuildingAnuslab'>>
<<include 'InitBuildingVaginalab'>>
/* surgery */
<<include 'InitBuildingSurgeryBreast'>>
<<include 'InitBuildingSurgeryDick'>>
<<include 'InitBuildingSurgeryBalls'>>
<<include 'InitBuildingSurgeryAnus'>>
<<include 'InitBuildingSurgeryVagina'>>
/* ritual chamber */
<<include 'InitBuildingAltarOfDarkness'>>
<<include 'InitBuildingMirrorOfTheDamned'>>
<<include 'InitBuildingPoolOfMist'>>
<<include 'InitBuildingDeepAltarOfDarkness'>>
<<include 'InitBuildingDeepMirrorOfTheDamned'>>
<<include 'InitBuildingDeepPoolOfMist'>>
/* temple */
<<include 'InitBuildingBlessingRoom'>>
<<include 'InitBuildingPenitenceRoom'>>
<<include 'InitBuildingPrayerRoom'>>
/* activities */
<<include 'InitBuildingDoctorOffice'>>
<<include 'InitBuildingMysticOffice'>>
/* Scout Outposts */
<<include 'InitBuildingScoutOutpostVale'>>
<<include 'InitBuildingScoutOutpostForest'>>
<<include 'InitBuildingScoutOutpostCity'>>
<<include 'InitBuildingScoutOutpostDesert'>>
<<include 'InitBuildingScoutOutpostSea'>>
/* storage */
<<include 'InitBuildingBazaar'>>
<<include 'InitBuildingAlchemistShop'>>
<<include 'InitBuildingBlacksmith'>>
<<include 'InitBuildingTailor'>>
<<include 'InitBuildingWeaver'>>
<<include 'InitBuildingWoodworks'>>
<<include 'InitBuildingSexShopPony'>>
<<include 'InitBuildingSexShopPet'>>
/* rec wing */
<<include 'InitBuildingAnalFuckhole'>>
<<include 'InitBuildingBar'>>
<<include 'InitBuildingBath'>>
<<include 'InitBuildingCleaning'>>
<<include 'InitBuildingCourtyard'>>
<<include 'InitBuildingGym'>>
<<include 'InitBuildingKennel'>>
<<include 'InitBuildingMuseum'>>
<<include 'InitBuildingOralFuckhole'>>
<<include 'InitBuildingPasture'>>
<<include 'InitBuildingStables'>>
<<include 'InitBuildingStage'>>
<<include 'InitBuildingTavern'>>
<<include 'InitBuildingTheatre'>>
<<include 'InitBuildingVaginaFuckhole'>>
/* buildings from mods */
<<set _passages = Story.lookup('tags', 'building')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<run new setup.BuildingTemplate(
'dutyroom',
'Duty roster room',
['duty', 'critical', 'unlocker', ],
'BuildingDutyRoom',
1,
[
[setup.qc.Money(-1500)],
],
[
[setup.qres.Building('grandhall')],
],
false,
)>><p>
Unlocks assigning slavers to duties.
</p><<run new setup.BuildingTemplate(
'bedchamberwing',
'Bedchamber wing',
['critical'],
'BuildingBedchamberWing',
1,
[
[setup.qc.Money(-3000)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('grandhall'),
],
[
setup.qres.Building('veteranhall'),
],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
false,
[
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
[ setup.qc.Function(() => State.variables.bedchamberlist.newBedchamber()), ],
],
)>><p>
Transforms a small north wing of your fort into a luxurious area for you and your
slavers to revel in your success.
Unlocks private bedchambers, in which you can give ownership of some slaves to yourself
or your slavers.
Very, very slightly increases the slaver's skills, but the main reason this improvement exists
is to roleplay.
</p>
<p>
Each upgrade unlocks one extra bedchamber.
</p><<run new setup.BuildingTemplate(
'anuslab',
'Anuslab',
['biolab'],
'BuildingAnuslab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('biolab'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
false,
)>><p>
Unlocks tightening and loosening of slave's anus.
</p><<run new setup.BuildingTemplate(
'ballslab',
'Ballslab',
['biolab'],
'BuildingBallslab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[setup.qres.Building('biolab')],
],
false,
)>><p>
Unlocks limited growing and shrinking of slave ballss.
</p><<run new setup.BuildingTemplate(
'biolab',
'Biolab',
['biolab', 'critical', 'unlocker', ],
'BuildingBiolab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_water]),
],
],
false,
)>><p>
Unlocks limited muscle and height growing and shrinking on slaves.
Can build further improvements to unlock more flesh shaping options.
</p><<run new setup.BuildingTemplate(
'breastlab',
'Breastlab',
['biolab'],
'BuildingBreastlab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[setup.qres.Building('biolab')],
],
false,
)>><p>
Unlocks limited growing and shrinking of slave breasts.
</p><<run new setup.BuildingTemplate(
'dicklab',
'Dicklab',
['biolab'],
'BuildingDicklab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[setup.qres.Building('biolab')],
],
false,
)>><p>
Unlocks limited growing and shrinking of slave dicks.
</p><<run new setup.BuildingTemplate(
'vaginalab',
'Vaginalab',
['biolab'],
'BuildingVaginalab',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('biolab'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
false,
)>><p>
Unlocks tightening and loosening of slave's vagina.
</p><<run new setup.BuildingTemplate(
'doctoroffice',
'Doctor office',
['duty', 'hospital',],
'BuildingDoctorOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('hospital'), setup.qres.Building('dutyroom')],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.Doctor)],
],
)>><p>
Unlocks the doctor duty, which speedups injury recovery.
</p><<run new setup.BuildingTemplate(
'hospital',
'Hospital',
['critical', 'hospital', 'unlocker', ],
'BuildingHospital',
1,
[
[setup.qc.Money(-2900)],
],
[
[setup.qres.Building('grandhall')],
],
false,
)>><p>
A proper place for the injured to rest and recover.
Unlocks management of injured units.
Allows building additional improvements that can speedup recovery.
</p><<run new setup.BuildingTemplate(
'moraleoffice',
'Morale office',
['critical'],
'BuildingMoraleOffice',
1,
[
[setup.qc.Money(-2400)],
],
[
[
setup.qres.Building('hospital'),
setup.qres.Building('grandhall'),
],
],
false,
)>><p>
You keep track of your slaver's morales and relationship with each other in this room.
Unlocks viewing banters at week ends, as well as viewing relationships between slavers
and between a slaver and a slave.
</p><<run new setup.BuildingTemplate(
'mysticoffice',
'Mystic office',
['duty', 'hospital',],
'BuildingMysticOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('hospital'), setup.qres.Building('dutyroom')],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.Mystic)],
],
)>><p>
Unlocks the mystic duty, which can reduce injury durations.
</p><<run new setup.BuildingTemplate(
'traumacenter',
'Trauma center',
['critical', 'hospital',],
'BuildingTraumaCenter',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('hospital'),
setup.qres.Building('grandhall'),
],
],
false,
)>><p>
A ward to treat your unit's psyche.
Unlocks viewing the durations of your unit's traumas and boons.
</p><<run new setup.BuildingTemplate(
'treatmentroom',
'Treatment Room',
['hospital', 'critical', 'unlocker', ],
'BuildingTreatmentRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('hospital'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
false,
)>><p>
A sterile room next to your hospital designated to allow your slaver
to (literally) work their healing magic.
Unlocks treatments that can heal significantly injured slavers.
Can be further expanded for more treatment options.
</p><<run new setup.BuildingTemplate(
'treatmentroomblank',
'Therapy Room',
['hospital'],
'BuildingTreatmentRoomBlank',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can reset a slave's trainings.
Each treatment will consume a <<rep setup.item.blank_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomforget',
'PTSD Room',
['hospital'],
'BuildingTreatmentRoomForget',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can forcefully make two slavers forget each other and reset their friendship to 0.
Each treatment will consume a <<rep setup.item.forget_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomhate',
'Solitary Room',
['hospital'],
'BuildingTreatmentRoomHate',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can forcefully make two units hate each other.
Each treatment will consume a <<rep setup.item.hate_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomisolation',
'Memory Isolator Room',
['hospital'],
'BuildingTreatmentRoomIsolation',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.isolation_technology),
],
],
false,
)>><p>
Unlocks treatment that can remove a background or skill from a unit.
This can be useful if they want to learn new skill or background, since both
of them are capped.
Each treatment will consume a <<rep setup.item.potion_isolation>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomlove',
'Massage Room',
['hospital'],
'BuildingTreatmentRoomLove',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can forcefully make two units like each other.
Each treatment will consume a <<rep setup.item.love_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomlovetrue',
'Private Vacation Room',
['hospital'],
'BuildingTreatmentRoomLoveTrue',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.love_technology),
],
],
false,
)>><p>
Unlocks treatment option that can forcefully make two units love each other.
Each treatment will consume a <<rep setup.item.love_potion_true>>.
</p><<run new setup.BuildingTemplate(
'treatmentroommindmend',
'Spa',
['hospital'],
'BuildingTreatmentRoomMindMend',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can restore a mindbroken slave.
Each treatment will consume a <<rep setup.item.mindmend_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomresetlevel',
'Pharmacy',
['hospital'],
'BuildingTreatmentRoomResetLevel',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
false,
)>><p>
Unlocks treatment option that can reset the level of a unit to level 1.
Note that their skills will also be reset to those of a level 1 unit.
Each treatment will consume a <<rep setup.item.reset_potion>>.
</p><<run new setup.BuildingTemplate(
'treatmentroomtransformation',
'Body Reshaper Room',
['hospital'],
'BuildingTreatmentRoomTransformation',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.transformation_technology),
],
],
false,
)>><p>
Unlocks treatment that can grow a random non-demonic body-part to a unit.
Each treatment will consume a <<rep setup.item.potion_transformation>>.
</p><<run new setup.BuildingTemplate(
'dungeons',
'Dungeons',
['critical', 'unlocker',],
'BuildingDungeons',
1,
[
[setup.qc.Money(-600)],
[setup.qc.Money(-300)],
[setup.qc.Money(-400)],
[setup.qc.Money(-500)],
[setup.qc.Money(-600)],
[setup.qc.Money(-800)],
[setup.qc.Money(-1200)],
[setup.qc.Money(-1400)],
[setup.qc.Money(-1600)],
[setup.qc.Money(-1800)],
[setup.qc.Money(-5000)],
[setup.qc.Money(-6000)],
[setup.qc.Money(-7000)],
[setup.qc.Money(-8000)],
[setup.qc.Money(-9000)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-11000)],
[setup.qc.Money(-12000)],
[setup.qc.Money(-13000)],
[setup.qc.Money(-14000)],
[setup.qc.Money(-15000)],
[setup.qc.Money(-16000)],
[setup.qc.Money(-17000)],
[setup.qc.Money(-18000)],
[setup.qc.Money(-19000)],
[setup.qc.Money(-20000)],
[setup.qc.Money(-21000)],
[setup.qc.Money(-22000)],
[setup.qc.Money(-23000)],
[setup.qc.Money(-24000)],
[setup.qc.Money(-25000)],
[setup.qc.Money(-26000)],
[setup.qc.Money(-27000)],
[setup.qc.Money(-28000)],
[setup.qc.Money(-29000)],
[setup.qc.Money(-30000)],
[setup.qc.Money(-31000)],
[setup.qc.Money(-32000)],
[setup.qc.Money(-33000)],
[setup.qc.Money(-34000)],
[setup.qc.Money(-35000)],
[setup.qc.Money(-36000)],
[setup.qc.Money(-37000)],
[setup.qc.Money(-38000)],
[setup.qc.Money(-39000)],
[setup.qc.Money(-40000)],
[setup.qc.Money(-41000)],
[setup.qc.Money(-42000)],
[setup.qc.Money(-43000)],
[setup.qc.Money(-44000)],
],
[
[],
[],
[setup.qres.Building('grandhall')],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
false,
)>><p>
An underground complex where you can keep your slaves.
While initially limited in size, you can build more cells to keep more slaves.
Each upgrade adds
<<= setup.FORT_SLAVE_CAPACITY_PER_CELL>>
extra space for keeping slaves.
</p><<run new setup.BuildingTemplate(
'lodgings',
'Lodgings',
['critical', 'unlocker',],
'BuildingLodgings',
1,
[
[],
[setup.qc.Money(-300)],
[setup.qc.Money(-400)],
[setup.qc.Money(-500)],
[setup.qc.Money(-800)],
/* 14 people */
[setup.qc.Money(-1000)],
[setup.qc.Money(-2000)],
/* 18 people */
[setup.qc.Money(-10000)],
[setup.qc.Money(-25000)],
[setup.qc.Money(-75000)],
/* 24 people, softcap starts */
[setup.qc.Money(-300000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-900000)],
[setup.qc.Money(-1000000)],
[setup.qc.Money(-1100000)],
[setup.qc.Money(-1200000)],
[setup.qc.Money(-1300000)],
[setup.qc.Money(-1400000)],
[setup.qc.Money(-1500000)],
[setup.qc.Money(-1600000)],
[setup.qc.Money(-1700000)],
[setup.qc.Money(-1800000)],
[setup.qc.Money(-1900000)],
[setup.qc.Money(-2000000)],
[setup.qc.Money(-2100000)],
[setup.qc.Money(-2200000)],
[setup.qc.Money(-2300000)],
[setup.qc.Money(-2400000)],
[setup.qc.Money(-2500000)],
[setup.qc.Money(-2600000)],
[setup.qc.Money(-2700000)],
[setup.qc.Money(-2800000)],
[setup.qc.Money(-2900000)],
[setup.qc.Money(-3000000)],
[setup.qc.Money(-3100000)],
[setup.qc.Money(-3200000)],
[setup.qc.Money(-3300000)],
[setup.qc.Money(-3400000)],
[setup.qc.Money(-3500000)],
[setup.qc.Money(-3600000)],
[setup.qc.Money(-3800000)],
[setup.qc.Money(-4000000)],
[setup.qc.Money(-4500000)],
[setup.qc.Money(-5000000)],
[setup.qc.Money(-7000000)],
[setup.qc.Money(-10000000)],
],
[
[],
[],
[],
/* 10 people */
[setup.qres.Building('grandhall')],
[],
[],
[],
/* 18 people */
[setup.qres.Building('veteranhall')],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
false,
)>><p>
The west wing of the fort has been transformed into
a lodgings area for your slavers.
While only few rooms have been prepared initially, you can prepare more rooms
to house more slavers.
Each upgrade adds
<<= setup.FORT_SLAVER_CAPACITY_PER_LODGING>>
extra spaces for slavers.
</p><<run new setup.BuildingTemplate(
'prospectshall',
'Prospects hall',
['hiring', 'critical'],
'BuildingProspectsHall',
1,
[
[setup.qc.Money(-500)],
],
[
[setup.qres.Building('lodgings')],
],
false,
)>><p>
One of the most important improvements, a prospect hall is where
new prospective slavers are accomodated in your fort before your
decide to hire them.
Unlocks hiring new slavers.
</p><<run new setup.BuildingTemplate(
'slavepens',
'Slave pens',
['hiring', 'critical'],
'BuildingSlavePens',
1,
[
[setup.qc.Money(-700)],
],
[
[setup.qres.Building('dungeons')],
],
false,
)>><p>
A must have after you build your dungeons, slave pens is where
you temporarily keep slaves you capture, as well as slaves
that are being offered to you at a price.
Unlocks getting new slaves.
</p><<run new setup.BuildingTemplate(
'hiringsquare',
'Fort Square',
['hiring', 'unlocker', ],
'BuildingHiringSquare',
1,
[
[setup.qc.Money(-700)],
],
[
[setup.qres.Building('prospectshall')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.recruiter),]
]
)>><p>
A small empty space in front of your fort where you can post
job openings.
Unlocks a contact which gives you a quest for hiring new slavers from across the region.
</p><<run new setup.BuildingTemplate(
'hiringsquaredesert',
'Recruitment Booth: Desert',
['hiring', ],
'BuildingHiringSquareDesert',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scoutcarriage'),
],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.recruiterdesert),]
]
)>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the people and orcs living on the eastern deserts into your company.
Unlocks a contact which gives you a quest for hiring new slavers from the eastern deserts.
</p><<run new setup.BuildingTemplate(
'hiringsquareforest',
'Recruitment Booth: Forest',
['hiring', ],
'BuildingHiringSquareForest',
1,
[
[setup.qc.Money(-1500)],
],
[
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scouttower'),
],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.recruiterforest),]
]
)>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the nekos and elves living on the western forests into your company.
Unlocks a contact which gives you a quest for hiring new slavers from the western forests.
</p><<run new setup.BuildingTemplate(
'hiringsquaresea',
'Recruitment Booth: Sea',
['hiring', ],
'BuildingHiringSquareSea',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scoutharbor'),
],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.recruitersea),]
]
)>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the people and occasionally dragonkins living off the southern seas into your company.
Unlocks a contact which gives you a quest for hiring new slavers from the southern seas.
</p><<run new setup.BuildingTemplate(
'hiringsquarevale',
'Recruitment Booth: Vale',
['hiring', ],
'BuildingHiringSquareVale',
1,
[
[setup.qc.Money(-1000)],
],
[
[
setup.qres.Building('hiringsquare'),
],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.recruitervale),]
]
)>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the northerners and weres living in the <<lore region_vale>> into your company.
Unlocks a contact which gives you a quest for hiring new slavers from the <<lore region_vale>>.
</p><<run new setup.BuildingTemplate(
'constructionoffice',
'Construction office',
['critical'],
'BuildingConstructionOffice',
1,
[
[],
],
[
[],
],
false,
)>><p>
An essential part of every fort,
this small wooden office houses all the current and future blueprints
of all the improvements in your fort.
You can make further upgrades to your fort by entering this office.
</p><<run new setup.BuildingTemplate(
'damagecontroloffice',
'Damage control office',
['duty'],
'BuildingDamageControlOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('relationsoffice'), setup.qres.Building('dutyroom')],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.DamageControlOfficer)],
],
)>><p>
Unlocks the Damage Control Officer duty, which can decrease ire
with the other forces, in exchange for some money.
</p><<run new setup.BuildingTemplate(
'insureroffice',
'Insurer office',
['duty'],
'BuildingInsurerOffice',
1,
[
[setup.qc.Money(-1500)],
],
[
[
setup.qres.Building('missioncontrol'),
setup.qres.Building('grandhall'),
],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.Insurer)],
],
)>><p>
If you want to succeed, then make plans for the failures.
Unlocks the Insurer duty,
which gives you money each time you fail a quest.
</p><<run new setup.BuildingTemplate(
'library',
'Library',
['critical'],
'BuildingLibrary',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT )],
],
[
[
setup.qres.Building('veteranhall'),
],
],
false,
)>><p>
A room full of books for the more studious slavers.
Unlocks viewing game lores at your leisure.
</p><<run new setup.BuildingTemplate(
'mailroom',
'Mail room',
['critical'],
'BuildingMailRoom',
1,
[
[setup.qc.Money(-800)],
],
[
[
setup.qres.Building('questoffice'),
],
],
false,
)>><p>
Where your incoming mails are sorted to.
Unlocks the management of opportunities.
</p><<run new setup.BuildingTemplate(
'marketeroffice',
'Marketer office',
['duty'],
'BuildingMarketerOffice',
1,
[
[setup.qc.Money(-2400)],
],
[
[setup.qres.Building('marketingoffice'), setup.qres.Building('dutyroom')],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.Marketer)],
],
)>><p>
A critical improvement if you want to dabble in slave trade.
Unlocks the Marketer duty, which gives you a fixed-price slave order each week.
</p><<run new setup.BuildingTemplate(
'marketingoffice',
'Marketing office',
['critical', 'unlocker',],
'BuildingMarketingOffice',
1,
[
[setup.qc.Money(-800)],
],
[
[
setup.qres.Building('questoffice'),
setup.qres.Building('dungeons')
],
],
false,
[
[
setup.qc.SlaveOrderMenial(),
],
]
)>><p>
This room allows the company to accept and complete slave orders.
</p><<run new setup.BuildingTemplate(
'messengerpost',
'Messenger post',
['critical'],
'BuildingMessengerPost',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('questoffice'),
setup.qres.Building('veteranhall'),
],
],
false,
)>><p>
Where you send and receive messages from across the realm.
Unlocks managing your contacts.
</p><<run new setup.BuildingTemplate(
'missioncontrol',
'Mission control',
['critical'],
'BuildingMissionControl',
1,
[
[setup.qc.Money(-800)],
[setup.qc.Money(-1200)],
[setup.qc.Money(-2000)],
[setup.qc.Money(-3000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-1200000)],
[setup.qc.Money(-2500000)],
[setup.qc.Money(-5000000)],
[setup.qc.Money(-10000000)],
],
[
[
setup.qres.Building('questoffice'),
setup.qres.Building('lodgings'),
],
[setup.qres.Building('grandhall')],
[],
[
setup.qres.Building('veteranhall'),
],
[],
[],
[],
[],
[],
],
false,
)>><p>
Unlocks team management.
Allows you to assign units to permanent team, as well as automatically
assigning units to quests.
Also allows more teams to be sent concurrently on a quest.
Can be upgraded to send even more teams concurrently on a quest,
as well as unlocking more permanent team slots.
</p><<run new setup.BuildingTemplate(
'questoffice',
'Your office',
['critical'],
'BuildingQuestOffice',
1,
[
[],
],
[
[],
],
false,
)>><p>
Your office, where you do your main work: picking and outfitting teams to quests.
</p><<run new setup.BuildingTemplate(
'relationsoffice',
'Relations office',
['critical', 'unlocker', ],
'BuildingRelationsOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('questoffice'),
setup.qres.Building('veteranhall'),
],
],
false,
)>><p>
A room for managing your company's relationship with other forces.
Allows you to see your current favors and ires with those forces.
Unlocks an improvement which opens up the Relationship Manager duty,
as well as another improvement which allows you to manage your contacts.
</p><<run new setup.BuildingTemplate(
'relationshipmanageroffice',
'Relationship manager office',
['duty',],
'BuildingRelationshipManagerOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('relationsoffice'), setup.qres.Building('dutyroom')],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.RelationshipManager)],
],
)>><p>
Unlocks the Relationship Manager duty, which can prevent favor with other companies
from decaying.
</p><<run new setup.BuildingTemplate(
'rescueroffice',
'Rescuer office',
['duty'],
'BuildingRescuerOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('missioncontrol'),
setup.qres.Building('veteranhall'),
],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.Rescuer)],
],
)>><p>
A lifeline for your slavers especially on veteran missions.
Unlocks the Rescuer duty, which gives you quests to rescue your missing slaves/slavers.
</p><<run new setup.BuildingTemplate(
'viceleaderoffice',
'Vice-leader office',
['duty'],
'BuildingViceLeaderOffice',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('questoffice'),
setup.qres.Building('veteranhall'),
],
],
false,
[
[setup.qc.Duty(setup.dutytemplate.ViceLeader)],
],
)>><p>
A lavish office suitable for your vice-leader to do their work.
Unlocks the Vice-leader duty, which increases your skills based on their skills, i.e.,
<<for _iskill, _skill range setup.skill>><<rep _skill>><</for>>.
The Vice-leader also can help automate some of your tasks.
</p><<run new setup.BuildingTemplate(
'analfuckhole',
'Anal fuckhole',
['recreation', 'duty',],
'BuildingAnalFuckhole',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.AnalFuckholeSlave)
],
],
)>><p>
Unlocks the Anal Fuckhole Slave duty, which raises prestige based on the anal skill of the slave.
</p><<run new setup.BuildingTemplate(
'bar',
'Bar',
['recreation', 'duty',],
'BuildingBar',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ServerSlave)
],
],
)>><p>
Unlocks the Server Slave duty, which raises prestige based on the edging skill of the slave.
</p><<run new setup.BuildingTemplate(
'bath',
'Bath',
['recreation', 'duty',],
'BuildingBath',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ToiletSlave)
],
],
)>><p>
Unlocks the Toilet Slave duty, which raises prestige based on the toilet skill of the slave.
</p><<run new setup.BuildingTemplate(
'cleaning',
'Cleaning',
['recreation', 'duty',],
'BuildingCleaning',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.MaidSlave)
],
],
)>><p>
Unlocks the Maid Slave duty, which raises prestige based on the domestic skill of the slave.
</p><<run new setup.BuildingTemplate(
'courtyard',
'Courtyard',
['recreation', 'duty',],
'BuildingCourtyard',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.FurnitureSlave)
],
],
)>><p>
Unlocks the Furniture Slave duty, which raises prestige based on the endurance skill of the slave.
</p><<run new setup.BuildingTemplate(
'gym',
'Gym',
['recreation', 'duty',],
'BuildingGym',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.PunchingBagSlave)
],
],
)>><p>
Unlocks the Punching Bag Slave duty, which raises prestige based on the masochist skill of the slave.
</p><<run new setup.BuildingTemplate(
'kennel',
'Kennel',
['recreation', 'duty',],
'BuildingKennel',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.DogSlave)
],
],
)>><p>
Unlocks the Dog Slave duty, which raises prestige based on the pet skill of the slave.
</p><<run new setup.BuildingTemplate(
'museum',
'Museum',
['recreation', 'duty',],
'BuildingMuseum',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.DecorationSlave)
],
],
)>><p>
Unlocks the Decoration Slave duty, which raises prestige based on the horny skill of the slave.
</p><<run new setup.BuildingTemplate(
'oralfuckhole',
'Oral fuckhole',
['recreation', 'duty',],
'BuildingOralFuckhole',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.OralFuckholeSlave)
],
],
)>><p>
Unlocks the Oral Fuckhole Slave duty, which raises prestige based on the oral skill of the slave.
</p><<run new setup.BuildingTemplate(
'pasture',
'Pasture',
['recreation', 'duty',],
'BuildingPasture',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.MilkCowSlave)
],
],
)>><p>
Unlocks the Cow Milk Slave duty, which raises prestige based on the size of the slave's milky breasts.
</p><<run new setup.BuildingTemplate(
'recreationwing',
'Recreation wing',
['recreation', 'critical', 'unlocker', ],
'BuildingRecreationWing',
1,
[
[setup.qc.Money(-3000)],
[setup.qc.MoneyMult(-12)],
[setup.qc.MoneyMult(-20)],
[setup.qc.MoneyMult(-30)],
[setup.qc.MoneyMult(-40)],
[setup.qc.MoneyMult(-50)],
[setup.qc.MoneyMult(-70)],
[setup.qc.MoneyMult(-90)],
[setup.qc.MoneyMult(-120)],
[setup.qc.MoneyMult(-150)],
[setup.qc.MoneyMult(-200)],
[setup.qc.MoneyMult(-300)],
],
[
[
setup.qres.Building('grandhall'),
setup.qres.Building('trainingchamber'),
],
[
setup.qres.Building('veteranhall'),
],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
false,
[
[
setup.qc.Prestige(1),
setup.qc.Duty(setup.dutytemplate.Pimp),
setup.qc.Duty(setup.dutytemplate.EntertainmentSlave),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
[
setup.qc.Prestige(1),
],
],
)>><p>
Transforms the right wing of your fort into an area of entertainment and general debauchery.
Unlocks the Pimp duty, which grants you money each week based on your prestige, and
the Entertainment Slave duty, which raises prestige based on the obedience of the slave.
Can build further improvements which further unlock slave duties that increases prestige,
which in turn boosts
the profit made by the Pimp duty.
The level of the recreation wing limits the amount of money the Pimp can make.
Upgrade the recreation wing to increase this amount.
Each upgrade also slightly increase prestige.
</p><<run new setup.BuildingTemplate(
'stables',
'Stables',
['recreation', 'duty',],
'BuildingStables',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.PonySlave)
],
],
)>><p>
Unlocks the Pony Slave duty, which raises prestige based on the pony skill of the slave.
</p><<run new setup.BuildingTemplate(
'stage',
'Stage',
['recreation', 'duty',],
'BuildingStage',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.DominatrixSlave)
],
],
)>><p>
Unlocks the Dominatrix Slave duty, which raises prestige based on the dominance skill of the slave.
</p><<run new setup.BuildingTemplate(
'tavern',
'Tavern',
['recreation', 'duty',],
'BuildingTavern',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.CumCowSlave)
],
],
)>><p>
Unlocks the Cum Cow Slave duty, which raises prestige based on the size of the slave's full balls.
</p><<run new setup.BuildingTemplate(
'theatre',
'Theatre',
['recreation', 'duty',],
'BuildingTheatre',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.TheatreSlave)
],
],
)>><p>
Unlocks the Stripper Slave duty, which raises prestige based on the sissy skill of the slave.
</p><<run new setup.BuildingTemplate(
'vaginafuckhole',
'Vagina fuckhole',
['recreation', 'duty',],
'BuildingVaginaFuckhole',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('recreationwing')],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.VaginaFuckholeSlave)
],
],
)>><p>
Unlocks the Vagina Fuckhole Slave duty, which raises prestige based on the vagina skill of the slave.
</p><<run new setup.BuildingTemplate(
'altarofdarkness',
'Altar of Darkness',
['ritualchamber'],
'BuildingAltarOfDarkness',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
[
[
setup.qres.Building('ritualchamber'),
setup.qres.HasItem(setup.item.wings_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
false,
)>><p>
Unlocks targeted corruptions on the tails, wings, and dicks of slaves.
</p><<run new setup.BuildingTemplate(
'deepaltarofdarkness',
'Deep Altar of Darkness',
['ritualchamber'],
'BuildingDeepAltarOfDarkness',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_ASTRO_MULT)],
],
[
[
setup.qres.Building('deepritualchamber'),
setup.qres.HasItem(setup.item.wings_technology),
],
],
false,
)>><p>
Unlocks targeted corruptions on the tails, wings, and dicks of slavers.
</p><<run new setup.BuildingTemplate(
'deepmirrorofthedamned',
'Deep Mirror Of The Damned',
['ritualchamber'],
'BuildingDeepMirrorOfTheDamned',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
[
[setup.qres.Building('deepritualchamber')],
],
false,
)>><p>
Unlocks targeted corruptions on the body, arms, and legs of slavers.
</p><<run new setup.BuildingTemplate(
'deeppoolofmist',
'Deep Pool of Mist',
['ritualchamber'],
'BuildingDeepPoolOfMist',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
[
[setup.qres.Building('deepritualchamber')],
],
false,
)>><p>
Unlocks targeted corruptions on the eyes, ears, and mouths of slavers.
</p><<run new setup.BuildingTemplate(
'deepritualchamber',
'Deep ritual chamber',
['ritualchamber', 'unlocker', ],
'BuildingDeepRitualChamber',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
[
[
setup.qres.Building('ritualchamber'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.dark_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
false,
)>><p>
A damned place to communicate beyond the mist, in particular with the demon prince you have
somehow successfully bargained with.
Unlocks corruption on slavers.
Corruption requires slaves to be sent beyond the mist as payment.
Can build further improvements to unlock more targeted corruptions.
</p><<run new setup.BuildingTemplate(
'mirrorofthedamned',
'Mirror Of The Damned',
['ritualchamber'],
'BuildingMirrorOfTheDamned',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[setup.qres.Building('ritualchamber')],
],
false,
)>><p>
Unlocks targeted corruptions on the body, arms, and legs of slaves.
</p><<run new setup.BuildingTemplate(
'poolofmist',
'Pool of Mist',
['ritualchamber'],
'BuildingPoolOfMist',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[setup.qres.Building('ritualchamber')],
],
false,
)>><p>
Unlocks targeted corruptions on the eyes, ears, and mouths of slaves.
</p><<run new setup.BuildingTemplate(
'ritualchamber',
'Ritual chamber',
['ritualchamber', 'critical', 'unlocker', ],
'BuildingRitualChamber',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
],
false,
)>><p>
A damned place to communicate beyond the mist.
Unlocks corruption on slaves.
Corruption requires slaves to be sent beyond the mist as payment.
Can build further improvements to unlock more targeted corruptions.
</p><<run new setup.BuildingTemplate(
'scoutcarriage',
'Scout Carriage',
['scout', 'unlocker',],
'BuildingScoutCarriage',
1,
[
[setup.qc.Money(-3900)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('grandhall'),
],
],
false,
[
[
setup.qc.QuestDirect('desert_contact'),
],
],
)>><p>
A horse carriage parked neatly next to the scout hut, for distant travel.
Unlocks a quest which grants a contact in the desert that supply you with scouting mission each week.
</p><<run new setup.BuildingTemplate(
'scoutharbor',
'Scout Harbor',
['scout', 'unlocker',],
'BuildingScoutHarbor',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('veteranhall'),
setup.qres.Prestige(12),
],
],
false,
[
[
setup.qc.QuestDirect('sea_contact'),
],
],
)>><p>
A fully functional harbor in the vicinity of the scout hut, for sea travel.
Unlocks a quest which grants a contact across the sea that supply you with scouting mission each week.
</p><<run new setup.BuildingTemplate(
'scouthut',
'Scout Hut',
['scout', 'unlocker',],
'BuildingScoutHut',
1,
[
[setup.qc.Money(-100)],
],
[
[],
],
false,
[
[
setup.qc.QuestDirect('vale_contact'),
],
],
)>><p>
A small hut inside your fort where your scouts prepare before venturing outside.
Unlocks a quest which grants
a contact in the <<lore region_vale>> that supply you with scouting mission each week.
</p><<run new setup.BuildingTemplate(
'scoutoffice',
'Scout Office',
['scout', 'unlocker',],
'BuildingScoutOffice',
1,
[
[setup.qc.Money(-2400)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('grandhall'),
],
],
false,
[
[
setup.qc.QuestDirect('city_contact'),
],
],
)>><p>
An office attached to the scout hut where the scouts store all the leads in
the city.
Unlocks a quest which grants a contact in the city that supply you with scouting mission each week.
</p><<run new setup.BuildingTemplate(
'scoutoutpostcity',
'Scout Outpost: City',
['scout', 'duty',],
'BuildingScoutOutpostCity',
1,
[
[setup.qc.Money(-4700)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutoffice'),
setup.qres.Building('dutyroom'),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ScoutCity)
],
],
)>><p>
Unlocks the City Scout duty, which grants you free quest leads each week from the<<lore location_lucgate>>.
</p><<run new setup.BuildingTemplate(
'scoutoutpostdesert',
'Scout Outpost: Desert',
['scout', 'duty',],
'BuildingScoutOutpostDesert',
1,
[
[setup.qc.Money(-5800)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutcarriage'),
setup.qres.Building('dutyroom'),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ScoutDesert)
],
],
)>><p>
Unlocks the Desert Scout duty, which grants you free quest leads each week from the eastern desert.
</p><<run new setup.BuildingTemplate(
'scoutoutpostforest',
'Scout Outpost: Forest',
['scout', 'duty',],
'BuildingScoutOutpostForest',
1,
[
[setup.qc.Money(-3200)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('scouttower'),
setup.qres.Building('dutyroom'),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ScoutForest)
],
],
)>><p>
Unlocks the Forest Scout duty, which grants you free quest leads each week from the western forest.
</p><<run new setup.BuildingTemplate(
'scoutoutpostsea',
'Scout Outpost: Sea',
['scout', 'duty',],
'BuildingScoutOutpostSea',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutharbor'),
setup.qres.Building('dutyroom'),
setup.qres.Prestige(12),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ScoutSea)
],
],
)>><p>
Unlocks the Sea Scout duty, which grants you free quest leads each week from the beyond the southern sea.
</p><<run new setup.BuildingTemplate(
'scoutoutpostvale',
'Scout Outpost: Vale',
['scout', 'duty',],
'BuildingScoutOutpostVale',
1,
[
[setup.qc.Money(-2000)],
],
[
[
setup.qres.Building('scouthut'),
setup.qres.Building('dutyroom'),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.ScoutVale)
],
],
)>><p>
Unlocks the Vale Scout duty, which grants you free quest leads each week from the <<lore region_vale>>.
</p><<run new setup.BuildingTemplate(
'scouttower',
'Scout Tower',
['scout', 'unlocker',],
'BuildingScoutTower',
1,
[
[setup.qc.Money(-600)],
],
[
[setup.qres.Building('scouthut')],
],
false,
[
[
setup.qc.QuestDirect('forest_contact'),
],
],
)>><p>
A small tower next to the scout hut which allows your scouts to see far ahead.
Unlocks a quest which grants a contact in the western forests that supply you with scouting mission each week.
</p><<run new setup.BuildingTemplate(
'alchemistshop',
'Alchemist Shop',
['equipment', ],
'BuildingAlchemistShop',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('apothecary'),
setup.qres.Building('veteranhall'),
],
],
false,
[
[],
],
)>><p>
A laboratory for an alchemist to work their magic.
Unlocks buying an infinite number of all kinds of potions that you have ever acquired in the game, but at a
steep markup.
</p><<run new setup.BuildingTemplate(
'apothecary',
'Market',
['equipment', 'unlocker',],
'BuildingApothecary',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('warehouse')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.itempeddler),]
],
)>><p>
An area with small kiosks where peddlers can sell their goods to you and your slavers.
Unlocks buying items.
Can build improvements which attracts vendors that makes more goods available to purchase.
</p><<run new setup.BuildingTemplate(
'armory',
'Armory',
['critical', 'equipment', 'unlocker',],
'BuildingArmory',
1,
[
[setup.qc.Money(-2000)],
[setup.qc.Money(-300)],
[setup.qc.Money(-400)],
[setup.qc.Money(-500)],
[setup.qc.Money(-600)],
[setup.qc.Money(-800)],
[setup.qc.Money(-1200)],
[setup.qc.Money(-1400)],
[setup.qc.Money(-1600)],
[setup.qc.Money(-1800)],
[setup.qc.Money(-5000)],
[setup.qc.Money(-6000)],
[setup.qc.Money(-7000)],
[setup.qc.Money(-8000)],
[setup.qc.Money(-9000)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-11000)],
[setup.qc.Money(-12000)],
[setup.qc.Money(-13000)],
[setup.qc.Money(-14000)],
[setup.qc.Money(-15000)],
[setup.qc.Money(-16000)],
[setup.qc.Money(-17000)],
[setup.qc.Money(-18000)],
[setup.qc.Money(-19000)],
[setup.qc.Money(-20000)],
[setup.qc.Money(-21000)],
[setup.qc.Money(-22000)],
[setup.qc.Money(-23000)],
[setup.qc.Money(-24000)],
[setup.qc.Money(-25000)],
[setup.qc.Money(-26000)],
[setup.qc.Money(-27000)],
[setup.qc.Money(-28000)],
[setup.qc.Money(-29000)],
[setup.qc.Money(-30000)],
[setup.qc.Money(-31000)],
[setup.qc.Money(-32000)],
[setup.qc.Money(-33000)],
[setup.qc.Money(-34000)],
[setup.qc.Money(-35000)],
[setup.qc.Money(-36000)],
[setup.qc.Money(-37000)],
[setup.qc.Money(-38000)],
[setup.qc.Money(-39000)],
[setup.qc.Money(-40000)],
[setup.qc.Money(-41000)],
[setup.qc.Money(-42000)],
[setup.qc.Money(-43000)],
[setup.qc.Money(-44000)],
],
[
[setup.qres.Building('grandhall')],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
false,
)>><p>
Where you store are all your spare equipments, and allows you to manage them more efficiently.
Unlocks the management of equipment sets.
Initially, there are only enough space for a few equipment set, but this can be
expanded by
upgrading the armory.
Each upgrade adds
<<= setup.EQUIPMENTSET_PER_STORAGE>>
extra spaces for equipment sets.
</p><<run new setup.BuildingTemplate(
'bazaar',
'Bazaar',
['equipment', 'critical'],
'BuildingBazaar',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('warehouse'), setup.qres.Building('armory')],
],
false,
[
],
)>><p>
A designated square just outside your fort where you occasionally auctions trinkets and
treasures from your raids to the public.
Unlocks selling items and spare equipments from their corresponding menus.
</p><<run new setup.BuildingTemplate(
'blacksmith',
'Blacksmith Shop',
['equipment', ],
'BuildingBlacksmith',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('forge')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.blacksmithpeddler),]
],
)>><p>
Unlocks a contact which specializes in selling gears that improve
<<rep setup.skill.combat>>, <<rep setup.skill.brawn>>, and
<<rep setup.skill.slaving>>.
</p><<run new setup.BuildingTemplate(
'forge',
'Forge',
['equipment', 'unlocker',],
'BuildingForge',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('armory')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.combatpeddler),]
],
)>><p>
An area with anvil and source of flame where blacksmiths and tailor can practice their craft.
Unlocks buying non-sexual related equipments.
Can build improvements which attracts vendors that makes more goods available to purchase.
</p><<run new setup.BuildingTemplate(
'sexshop',
'Sex Shop',
['equipment', 'unlocker',],
'BuildingSexShop',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('armory')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.sexpeddler),]
],
)>><p>
An underground room in your fort that has been transformed into a marketplace for
sexual-related items.
Unlocks buying sex equipments such as dildos and gags.
Can build improvements which attracts vendors that makes more goods available to purchase.
</p><<run new setup.BuildingTemplate(
'sexshoppet',
'Sex Shop: Pet-gear Booth',
['equipment', ],
'BuildingSexShopPet',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('sexshop')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.petpeddler),]
],
)>><p>
Unlocks a contact which sells specialized pet gears.
</p><<run new setup.BuildingTemplate(
'sexshoppony',
'Sex Shop: Pony-gear Booth',
['equipment', ],
'BuildingSexShopPony',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('sexshop')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.ponypeddler),]
],
)>><p>
Unlocks a contact which sells specialized pony gears.
</p><<run new setup.BuildingTemplate(
'tailor',
'Tailor Shop',
['equipment', ],
'BuildingTailor',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('forge')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.tailorpeddler),]
],
)>><p>
Unlocks a contact which specializes in selling gears that improve
<<rep setup.skill.survival>>, <<rep setup.skill.intrigue>>,
<<rep setup.skill.social>>, and <<rep setup.skill.sex>>.
</p><<run new setup.BuildingTemplate(
'warehouse',
'Warehouse',
['equipment', 'critical', 'unlocker',],
'BuildingWarehouse',
1,
[
[setup.qc.Money(-2400)],
],
[
[
setup.qres.Building('armory'),
setup.qres.Building('grandhall'),
],
],
false,
)>><p>
A proper place to store all your items. Allows you to see all the items you hold, as well as use
items you own such as potions.
</p><<run new setup.BuildingTemplate(
'weaver',
'Weaver Shop',
['equipment', ],
'BuildingWeaver',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('forge')],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.weaverpeddler),]
],
)>><p>
Unlocks a contact which specializes in selling gears that improve
<<rep setup.skill.knowledge>>, <<rep setup.skill.aid>>, and
<<rep setup.skill.arcane>>.
</p><<run new setup.BuildingTemplate(
'woodworks',
'Woodworks',
['equipment', ],
'BuildingWoodworks',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
[
[
setup.qres.Building('apothecary'),
setup.qres.Building('bedchamberwing'),
],
],
false,
[
[setup.qc.Contact(setup.contacttemplate.furniturepeddler),]
],
)>><p>
Unlocks a contact which specializes in selling furnitures for your
<<rep setup.buildingtemplate.bedchamberwing>>.
</p><<run new setup.BuildingTemplate(
'fort',
'Fort',
['critical'],
'BuildingFort',
1,
[
[],
[setup.qc.Money(-50)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
[setup.qc.Money(-200)],
/* 10 */
[setup.qc.Money(-210)],
[setup.qc.Money(-220)],
[setup.qc.Money(-230)],
[setup.qc.Money(-240)],
[setup.qc.Money(-250)],
[setup.qc.Money(-260)],
[setup.qc.Money(-270)],
[setup.qc.Money(-280)],
[setup.qc.Money(-290)],
[setup.qc.Money(-300)],
/* 20 */
[setup.qc.Money(-320)],
[setup.qc.Money(-340)],
[setup.qc.Money(-360)],
[setup.qc.Money(-380)],
[setup.qc.Money(-400)],
[setup.qc.Money(-450)],
[setup.qc.Money(-500)],
[setup.qc.Money(-550)],
[setup.qc.Money(-600)],
[setup.qc.Money(-650)],
/* 30 */
[setup.qc.Money(-700)],
[setup.qc.Money(-750)],
[setup.qc.Money(-800)],
[setup.qc.Money(-850)],
[setup.qc.Money(-900)],
[setup.qc.Money(-950)],
[setup.qc.Money(-1000)],
[setup.qc.Money(-1050)],
[setup.qc.Money(-1100)],
[setup.qc.Money(-1150)],
/* 40 */
[setup.qc.Money(-1200)],
[setup.qc.Money(-1250)],
[setup.qc.Money(-1300)],
[setup.qc.Money(-1350)],
[setup.qc.Money(-1400)],
[setup.qc.Money(-1450)],
[setup.qc.Money(-1500)],
[setup.qc.Money(-1600)],
[setup.qc.Money(-1700)],
[setup.qc.Money(-1800)],
/* 50 */
[setup.qc.Money(-1900)],
[setup.qc.Money(-2000)],
[setup.qc.Money(-2100)],
[setup.qc.Money(-2200)],
[setup.qc.Money(-2300)],
[setup.qc.Money(-2400)],
[setup.qc.Money(-2500)],
[setup.qc.Money(-2600)],
[setup.qc.Money(-2700)],
[setup.qc.Money(-2800)],
/* 60 */
[setup.qc.Money(-2900)],
[setup.qc.Money(-3000)],
[setup.qc.Money(-3100)],
[setup.qc.Money(-3200)],
[setup.qc.Money(-3300)],
[setup.qc.Money(-3400)],
[setup.qc.Money(-3500)],
[setup.qc.Money(-3600)],
[setup.qc.Money(-3700)],
[setup.qc.Money(-3800)],
/* 70 */
[setup.qc.Money(-3900)],
[setup.qc.Money(-4000)],
[setup.qc.Money(-4100)],
[setup.qc.Money(-4200)],
[setup.qc.Money(-4300)],
[setup.qc.Money(-4400)],
[setup.qc.Money(-4500)],
[setup.qc.Money(-4600)],
[setup.qc.Money(-4700)],
[setup.qc.Money(-4800)],
/* 80 */
[setup.qc.Money(-4900)],
[setup.qc.Money(-5000)],
[setup.qc.Money(-5200)],
[setup.qc.Money(-5400)],
[setup.qc.Money(-5600)],
[setup.qc.Money(-5800)],
[setup.qc.Money(-6000)],
[setup.qc.Money(-6200)],
[setup.qc.Money(-6400)],
[setup.qc.Money(-6600)],
/* 90 */
[setup.qc.Money(-6800)],
[setup.qc.Money(-7000)],
[setup.qc.Money(-7200)],
[setup.qc.Money(-7400)],
[setup.qc.Money(-7600)],
[setup.qc.Money(-7800)],
[setup.qc.Money(-8000)],
[setup.qc.Money(-8200)],
[setup.qc.Money(-8400)],
[setup.qc.Money(-8600)],
/* 100 */
[setup.qc.Money(-8800)],
[setup.qc.Money(-9000)],
[setup.qc.Money(-9200)],
[setup.qc.Money(-9600)],
[setup.qc.Money(-9800)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-11000)],
[setup.qc.Money(-12000)],
/* 110 */
[setup.qc.Money(-13000)],
[setup.qc.Money(-14000)],
[setup.qc.Money(-15000)],
[setup.qc.Money(-17000)],
[setup.qc.Money(-19000)],
[setup.qc.Money(-21000)],
[setup.qc.Money(-23000)],
[setup.qc.Money(-25000)],
[setup.qc.Money(-27000)],
[setup.qc.Money(-29000)],
/* 120 */
[setup.qc.Money(-30000)],
[setup.qc.Money(-32000)],
[setup.qc.Money(-34000)],
[setup.qc.Money(-36000)],
[setup.qc.Money(-38000)],
[setup.qc.Money(-40000)],
[setup.qc.Money(-42000)],
[setup.qc.Money(-44000)],
[setup.qc.Money(-46000)],
[setup.qc.Money(-48000)],
/* 130 */
[setup.qc.Money(-50000)],
[setup.qc.Money(-52000)],
[setup.qc.Money(-54000)],
[setup.qc.Money(-56000)],
[setup.qc.Money(-58000)],
[setup.qc.Money(-60000)],
[setup.qc.Money(-62000)],
[setup.qc.Money(-64000)],
[setup.qc.Money(-66000)],
[setup.qc.Money(-68000)],
/* 140 */
[setup.qc.Money(-70000)],
[setup.qc.Money(-72000)],
[setup.qc.Money(-74000)],
[setup.qc.Money(-76000)],
[setup.qc.Money(-78000)],
[setup.qc.Money(-80000)],
[setup.qc.Money(-82000)],
[setup.qc.Money(-84000)],
[setup.qc.Money(-86000)],
[setup.qc.Money(-88000)],
/* 150 */
[setup.qc.Money(-90000)],
[setup.qc.Money(-92000)],
[setup.qc.Money(-94000)],
[setup.qc.Money(-96000)],
[setup.qc.Money(-98000)],
[setup.qc.Money(-100000)],
[setup.qc.Money(-105000)],
[setup.qc.Money(-110000)],
[setup.qc.Money(-115000)],
[setup.qc.Money(-120000)],
/* 160 */
[setup.qc.Money(-130000)],
[setup.qc.Money(-140000)],
[setup.qc.Money(-150000)],
[setup.qc.Money(-160000)],
[setup.qc.Money(-170000)],
[setup.qc.Money(-180000)],
[setup.qc.Money(-190000)],
[setup.qc.Money(-200000)],
[setup.qc.Money(-210000)],
[setup.qc.Money(-220000)],
/* 170 */
[setup.qc.Money(-230000)],
[setup.qc.Money(-240000)],
[setup.qc.Money(-250000)],
[setup.qc.Money(-260000)],
[setup.qc.Money(-270000)],
[setup.qc.Money(-280000)],
[setup.qc.Money(-290000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
/* 180 */
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
[setup.qc.Money(-300000)],
/* 190 */
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
[setup.qc.Money(-400000)],
/* 200 */
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
[setup.qc.Money(-500000)],
/* 210 */
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
[setup.qc.Money(-600000)],
/* 220 */
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
[setup.qc.Money(-700000)],
/* 230 */
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
[setup.qc.Money(-800000)],
/* 240 */
[setup.qc.Money(-900000)],
[setup.qc.Money(-900000)],
[setup.qc.Money(-900000)],
[setup.qc.Money(-1000000)],
[setup.qc.Money(-1200000)],
[setup.qc.Money(-1400000)],
[setup.qc.Money(-1600000)],
[setup.qc.Money(-1800000)],
[setup.qc.Money(-2000000)],
/* 250 */
],
[
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 10 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 20 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 30 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 40 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 50 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 60 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 70 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 80 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 90 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 100 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 110 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 120 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 130 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 140 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 150 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 160 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 170 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 180 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 190 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 200 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 210 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 220 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 230 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 240 */
[],
[],
[],
[],
[],
[],
[],
[],
[],
/* 250 */
],
false,
)>><p>
The structural integrity of your fort. As your fort has been abandoned for many
years, at the beginning, you need to hire workers to clear out the rubbles
to make spaces for other improvements.
Once all the rubbles are cleared, you can start building new structures
to house the other improvements, although this will come at a much greater costs.
</p>
<p>
Each time this improvement is upgraded, one extra improvement space is added to your fort.
</p><<run new setup.BuildingTemplate(
'grandhall',
'Grand Hall',
['critical', 'unlocker', ],
'BuildingGrandHall',
1,
[
[setup.qc.Money(-2000)],
],
[
[
setup.qres.Building('dungeons'),
setup.qres.Building('hiringsquare'),
setup.qres.Building('lodgings'),
setup.qres.Building('mailroom'),
setup.qres.Building('marketingoffice'),
setup.qres.Building('missioncontrol'),
setup.qres.Building('prospectshall'),
setup.qres.Building('slavepens'),
setup.qres.Building('scouttower'),
],
],
false,
[
[
setup.qc.Event('renovation_feast', 0),
setup.qc.Event('loan_tiger', 2),
]
]
)>><p>
Renovate the first floor of your fort into a grand hall suitable for your fledging company.
Unlocks seeing your company information, as well as many filter options in various menus.
This improvement is also required to build many of the advanced improvements.
</p><<run new setup.BuildingTemplate(
'veteranhall',
'Veteran Hall',
['critical', 'unlocker', ],
'BuildingVeteranHall',
1,
[
[setup.qc.MoneyMult(-20)],
],
[
[
setup.qres.Building('armory'),
setup.qres.Building('bedchamberwing'),
setup.qres.Building('dutyroom'),
setup.qres.Building('hospital'),
setup.qres.Building('moraleoffice'),
setup.qres.Building('recreationwing'),
setup.qres.Building('scoutcarriage'),
setup.qres.Building('scoutoffice'),
setup.qres.Building('trainingchamber'),
setup.qres.Building('traininggrounds'),
setup.qres.Building('warehouse'),
],
],
false,
[
[setup.qc.Event('veteran_celebration', 0),]
],
)>><p>
Renovates the floor above your grand hall into a grand area suitable to display your company's
achievements.
Unlocks seeing your company statistics in the company info.
Also enables veteran quests to be scouted, which are considerably harder than normal quests.
Furthermore, this improvement is a requirement for many veteran improvements.
</p>
<p>
Building this improvement will also <<successtextlite 'permanently'>> ramp up all the quest
rewards of low-level quests to the equivalent of a level <<= setup.LEVEL_VETERANHALL >> quest.
The difficulties do not change.
</p><<run new setup.BuildingTemplate(
'surgery',
'Surgery',
['biolab', 'unlocker', ],
'BuildingSurgery',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('biolab'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.water_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_water_master]),
],
],
false,
)>><p>
Unlocks limited muscle and height growing and shrinking on yourself and your slavers.
Can build further improvements to unlock more physical changes options.
</p><<run new setup.BuildingTemplate(
'surgeryanus',
'Surgery: Anus Operating Room',
['biolab'],
'BuildingSurgeryAnus',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('surgery'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
false,
)>><p>
Unlocks tightening and loosening of yours and your slavers' anus.
</p><<run new setup.BuildingTemplate(
'surgeryballs',
'Surgery: Balls Operating Room',
['biolab'],
'BuildingSurgeryBalls',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[setup.qres.Building('surgery')],
],
false,
)>><p>
Unlocks limited growing and shrinking of yours and your slavers' balls.
</p><<run new setup.BuildingTemplate(
'surgerybreast',
'Surgery: Breast Operating Room',
['biolab'],
'BuildingSurgeryBreast',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[setup.qres.Building('surgery')],
],
false,
)>><p>
Unlocks limited growing and shrinking of yours and your slavers' breasts.
</p><<run new setup.BuildingTemplate(
'surgerydick',
'Surgery: Dick Operating Room',
['biolab'],
'BuildingSurgeryDick',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[setup.qres.Building('surgery')],
],
false,
)>><p>
Unlocks limited growing and shrinking of yours and your slavers' dicks.
</p><<run new setup.BuildingTemplate(
'surgeryvagina',
'Surgery: Vagina Operating Room',
['biolab'],
'BuildingSurgeryVagina',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('surgery'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
false,
)>><p>
Unlocks tightening of yours and your slavers' vagina.
</p><<run new setup.BuildingTemplate(
'blessingroom',
'Blessing Room',
['temple'],
'BuildingBlessingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
false,
)>><p>
Unlocks targeted purification on the eyes, mouth, or ears of slaves and slavers.
</p><<run new setup.BuildingTemplate(
'penitenceroom',
'Penitence Room',
['temple'],
'BuildingPenitenceRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
false,
)>><p>
Unlocks targeted purification on the tails, wings and dicks of slaves and slavers.
</p><<run new setup.BuildingTemplate(
'prayerroom',
'Prayer Room',
['temple'],
'BuildingPrayerRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
false,
)>><p>
Unlocks targeted purification on the body, legs, and arms of slaves and slavers.
</p><<run new setup.BuildingTemplate(
'temple',
'Temple',
['temple', 'critical', 'unlocker', ],
'BuildingTemple',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[
setup.qres.Building('grandhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire]),
],
],
false,
)>><p>
A temple to pray to some higher beings.
Unlocks purification, which can revert the effect of corruptions on both slaves and slavers,
but it costs quite a bit of money.
Can build further improvements to unlock more targeted purifications.
</p><<run new setup.BuildingTemplate(
'analtrainingroom',
'Anal Training Room',
['training'],
'BuildingAnalTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingbedroom')],
],
false,
)>><p>
Unlocks Anal Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'brainwashingroom',
'Brainwashing Room',
['training', 'hiring',],
'BuildingBrainwashingRoom',
1,
[
[
setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
[
[
setup.qres.Building('trainingchamber'),
setup.qres.Building('convincingroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.brainwash_technology),
],
],
false,
)>><p>
Where you can practice your brainwash-assisted manipulation techniques to convert
a slave into a slaver without side-effects.
Unlocks a training that can convert a slave into a slaver with no side effect other than
losing all their slave trainings.
</p><<run new setup.BuildingTemplate(
'convincingroom',
'Convincing Room',
['training', 'hiring',],
'BuildingConvincingRoom',
1,
[
[
setup.qc.Money(-3000)],
],
[
[
setup.qres.Building('trainingchamber'),
setup.qres.Building('grandhall'),
],
],
false,
)>><p>
Where you can practice your best manipulation techniques to convince a slave to do terrible things.
Unlocks a training that can convert a completely untrained slave into a slaver, although it will cost you quite a bit of money. The slaver will
also be traumatized for a good while, but there are no long-term damage.
</p><<run new setup.BuildingTemplate(
'domestictrainingroom',
'Domestic Training Room',
['training'],
'BuildingDomesticTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('fetishtrainingroom')],
],
false,
)>><p>
Unlocks Domestic Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'dominancetrainingroom',
'Dominance Training Room',
['training'],
'BuildingDominanceTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('torturechamber')],
],
false,
)>><p>
Unlocks Dominance Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'edgingtrainingroom',
'Edging Training Room',
['training'],
'BuildingEdgingTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('milkerroom')],
],
false,
)>><p>
Unlocks Edging Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'endurancetrainingroom',
'Endurance Training Room',
['training'],
'BuildingEnduranceTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingfield')],
],
false,
)>><p>
Unlocks Endurance Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'fetishtrainingroom',
'Fetish Training Room',
['training', 'unlocker', ],
'BuildingFetishTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
Room containing several specialized tools to train slaves for particularly...
uncommon tastes.
Unlocks basic and advanced training for: toilet training, sissy training, and domestic training.
</p><<run new setup.BuildingTemplate(
'hornytrainingroom',
'Horny Training Room',
['training'],
'BuildingHornyTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('milkerroom')],
],
false,
)>><p>
Unlocks Horny Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'masochisttrainingroom',
'Masochist Training Room',
['training'],
'BuildingMasochistTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('torturechamber')],
],
false,
)>><p>
Unlocks Masochist Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'milkerroom',
'Milker Room',
['training', 'unlocker', ],
'BuildingMilkerRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
The centerpiece of this room are a row of chairs with various devious looking tubes.
They can be used to edge slaves or to milk slaves dry.
Unlocks basic and advanced edging and horny training for slaves.
</p><<run new setup.BuildingTemplate(
'obediencetrainingroom',
'Obedience Training Room',
['training'],
'BuildingObedienceTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
Unlocks Obedience Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'oraltrainingroom',
'Oral Training Room',
['training'],
'BuildingOralTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingbedroom')],
],
false,
)>><p>
Unlocks Oral Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'pettrainingroom',
'Pet Training Room',
['training'],
'BuildingPetTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingfield')],
],
false,
)>><p>
Unlocks Pet Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'ponytrainingroom',
'Pony Training Room',
['training'],
'BuildingPonyTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingfield')],
],
false,
)>><p>
Unlocks Pony Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'sissytrainingroom',
'Sissy Training Room',
['training'],
'BuildingSissyTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('fetishtrainingroom')],
],
false,
)>><p>
Unlocks Sissy Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'toilettrainingroom',
'Toilet Training Room',
['training'],
'BuildingToiletTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('fetishtrainingroom')],
],
false,
)>><p>
Unlocks Toilet Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'torturechamber',
'Torture Chamber',
['training', 'unlocker', ],
'BuildingTortureChamber',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
Containing various tools to inflict pain upon your slaves, this room is
the dread of all but the most masochistic of slaves.
Unlocks basic and advanced dominance and masochist training for slaves, as well
as allowing you to mindbreak slaves.
</p><<run new setup.BuildingTemplate(
'trainingbedroom',
'Training Bedroom',
['training', 'unlocker', ],
'BuildingTrainingBedroom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
A small room with a bed within the training chamber complex.
Unlocks basic and advanced vaginal, oral, and anal sex training for slaves.
</p><<run new setup.BuildingTemplate(
'trainingchamber',
'Training Chamber',
['training', 'critical', 'unlocker', ],
'BuildingTrainingChamber',
1,
[
[setup.qc.Money(-1700)],
],
[
[setup.qres.Building('grandhall')],
],
false,
)>><p>
Unlocks basic and advanced obedience training for slaves.
This improvement is critical to fulfill
some of the more lucrative slave demands, which requires
that the slaves is pre-trained.
Can build further improvements to unlock special types of slave training.
</p><<run new setup.BuildingTemplate(
'trainingfield',
'Training Field',
['training', 'unlocker', ],
'BuildingTrainingField',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
[
[setup.qres.Building('trainingchamber')],
],
false,
)>><p>
A small fenced field right next to the training chamber, for exercising slaves.
Unlocks basic and advanced endurance, pet, and pony training for slaves.
</p><<run new setup.BuildingTemplate(
'vaginatrainingroom',
'Vagina Training Room',
['training'],
'BuildingVaginaTrainingRoom',
1,
[
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
[
[setup.qres.Building('trainingbedroom')],
],
false,
)>><p>
Unlocks Vagina Training: Master for slaves.
</p><<run new setup.BuildingTemplate(
'traininggrounds',
'Training Grounds',
['critical',],
'BuildingTrainingGrounds',
1,
[
[setup.qc.Money(-2500)],
],
[
[
setup.qres.Building('dutyroom'),
setup.qres.Building('grandhall'),
],
],
false,
[
[
setup.qc.Duty(setup.dutytemplate.Trainer),
setup.qc.Contact(setup.contacttemplate.trainer),
],
],
)>><p>
The training grounds is where your slavers can practice their skills.
Unlocks the Drill Sergeant duty, who when staffed, will generate
a quest each week that allows them to train new slavers and increase their
levels rapidly. The drill sergeant will also give EXP to units on duties.
</p><<set setup.contacttemplate = {}>>
<<include 'InitContactValeLead' >>
<<include 'InitContactForestLead' >>
<<include 'InitContactDesertLead' >>
<<include 'InitContactCityLead' >>
<<include 'InitContactSeaLead' >>
<<include 'InitContactRecruiter' >>
<<include 'InitContactRecruiterVale'>>
<<include 'InitContactRecruiterForest' >>
<<include 'InitContactRecruiterDesert' >>
<<include 'InitContactRecruiterSea' >>
<<include 'InitContactTrainer' >>
<<include 'InitContactMenialOrder' >>
<<include 'InitContactCombatPeddler' >>
<<include 'InitContactBlacksmithPeddler' >>
<<include 'InitContactTailorPeddler' >>
<<include 'InitContactWeaverPeddler' >>
<<include 'InitContactSexPeddler' >>
<<include 'InitContactItemPeddler' >>
<<include 'InitContactFurniturePeddler' >>
<<include 'InitContactPetPeddler' >>
<<include 'InitContactPonyPeddler' >>
/* quest */
<<include 'InitContactFuckholeFair'>>
<<include 'InitContactAuctionHigh'>><<run new setup.ContactTemplate(
'citylead',
'Contact in the<<lore location_lucgate>>',
'ContactCityLead',
[setup.qc.QuestDelay(setup.questpool.scoutcity)],
)>>A contact in the city who agrees to supply you with potential quest leads every week.<<run new setup.ContactTemplate(
'desertlead',
'Contact in the Eastern Desert',
'ContactDesertLead',
[setup.qc.QuestDelay(setup.questpool.scoutdesert)],
)>>A small orcish nomads who agrees to supply you with potential quest lead every week.<<run new setup.ContactTemplate(
'forestlead',
'Contact in the Western Forest',
'ContactForestLead',
[setup.qc.QuestDelay(setup.questpool.scoutforest)],
)>>You have established contact with some of the elven people at the western forest,
which supplies you with potential quest leads every week./* DEPRECATED (v1.2.5.3) */
/* WILL BE REMOVED IN v1.4 */
<<run new setup.ContactTemplate(
'menialorder',
'Mine Owner',
'ContactMenialOrder',
[
],
)>>You have made a deal with a nearby unscrupulous businessman who will be more than happy
to buy your unwanted slaves for a very cheap sum.
You can get much better value orders elsewhere, but fulfilling this order can be better than nothing.<<run new setup.ContactTemplate(
'sealead',
'Contact in the Southern Sea',
'ContactSeaLead',
[setup.qc.QuestDelay(setup.questpool.scoutsea)],
)>>A contact residing in faraway land who agrees to send you mails regarding potential
leads in the southern lands.<<run new setup.ContactTemplate(
'trainer',
'Trainer',
'ContactTrainer',
[setup.qc.QuestDelay(setup.questpool.training)],
)>>Having a <<rep setup.buildingtemplate.traininggrounds>> allows you to rapidly level your
slavers, as long as you have someone in the Drill Sergeant duty.<<run new setup.ContactTemplate(
'valelead',
'Contact in the Northern Vale',
'ContactValeLead',
[setup.qc.QuestDelay(setup.questpool.scoutvale)],
)>>You have established contact with the locals at the <<lore region_vale>>,
which supplies you with potential quest leads every week.<<run new setup.ContactTemplate(
'blacksmithpeddler',
'Blacksmith',
'ContactBlacksmithPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.blacksmith,
/* amount = */ 3,
),
],
)>>A burly vendor selling iron armors and gears.<<run new setup.ContactTemplate(
'combatpeddler',
'Combat Peddler',
'ContactCombatPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.all_combat,
/* amount = */ 1,
),
],
)>>Random traveling peddlers who sell combat-related equipment at your fort.<<run new setup.ContactTemplate(
'furniturepeddler',
'Furniture Peddler',
'ContactFurniturePeddler',
[
setup.qc.ItemForSale(
'itemmarket',
setup.itempool.furniture_normal,
/* amount = */ 3,
),
],
)>>A specialized peddler from the<<lore location_lucgate>> who sell furnitures for your fort.<<run new setup.ContactTemplate(
'itempeddler',
'Item Peddler',
'ContactItemPeddler',
[
setup.qc.ItemForSale(
'itemmarket',
setup.itempool.all,
/* amount = */ 1,
),
setup.qc.ItemForSale(
'itemmarket',
setup.itempool.furniture_normal,
/* amount = */ 1,
),
],
)>>Random traveling peddlers who sell random items at your fort.<<run new setup.ContactTemplate(
'petpeddler',
'Pet Peddler',
'ContactPetPeddler',
[
setup.qc.EquipmentForSale(
'sexequipmentmarket',
setup.equipmentpool.dog,
/* amount = */ 3,
),
],
)>>A peddler specializing in selling pet gears for your fort.<<run new setup.ContactTemplate(
'ponypeddler',
'Pony Peddler',
'ContactPonyPeddler',
[
setup.qc.EquipmentForSale(
'sexequipmentmarket',
setup.equipmentpool.pony,
/* amount = */ 3,
),
],
)>>A trader specializing in selling pony gears for your fort.<<run new setup.ContactTemplate(
'sexpeddler',
'Sex Peddler',
'ContactSexPeddler',
[
setup.qc.EquipmentForSale(
'sexequipmentmarket',
setup.equipmentpool.all_sex,
/* amount = */ 1,
),
],
)>>Random traveling peddlers who sell sex-related equipment at your fort.<<run new setup.ContactTemplate(
'tailorpeddler',
'Tailor',
'ContactTailorPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.tailor,
/* amount = */ 3,
),
],
)>>A well-dressed tailor selling high quality outfits and clothes.<<run new setup.ContactTemplate(
'weaverpeddler',
'Weaver',
'ContactWeaverPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.weaver,
/* amount = */ 3,
),
],
)>>A young beautiful lady selling various colored robes.<<run new setup.ContactTemplate(
'quest_auctionhigh',
'Contact from Auction High',
'ContactAuctionHigh',
[],
10,
)>>Your contact in the Auction High, who is responsible for managing the slave
that you decide to auction, if you choose to do so.<<run new setup.ContactTemplate(
'fuckholefair',
'Contact from Fuckhole Fair',
'ContactFuckholeFair',
[setup.qc.Money(Math.round(setup.MONEY_PER_SLAVER_WEEK * 3 / 10))],
10,
)>><<run new setup.ContactTemplate(
'recruiter',
'Recruiter',
'ContactRecruiter',
[setup.qc.QuestDelay(setup.questpool.recruitment)],
)>>Having a <<rep setup.buildingtemplate.hiringsquare>> allows you to invite people for potentially joining your band of slavers.<<run new setup.ContactTemplate(
'recruiterdesert',
'Desert Recruiter',
'ContactRecruiterDesert',
[setup.qc.QuestDelay(setup.questpool.recruitmentdesert)],
)>>A contact that came with the <<rep setup.buildingtemplate.hiringsquaredesert>>.
Grants you quest to recruit the residents of the eastern deserts to your company.<<run new setup.ContactTemplate(
'recruiterforest',
'Forest Recruiter',
'ContactRecruiterForest',
[setup.qc.QuestDelay(setup.questpool.recruitmentforest)],
)>>With the <<rep setup.buildingtemplate.hiringsquareforest>> built, this contact will
grant you quest to recruit the residents of the western forests to your company.<<run new setup.ContactTemplate(
'recruitersea',
'Sea Recruiter',
'ContactRecruiterSea',
[setup.qc.QuestDelay(setup.questpool.recruitmentsea)],
)>>An elusive contact who manned the <<rep setup.buildingtemplate.hiringsquaresea>>.
Grants you quest to recruit the residents of the southern seas to your company.<<run new setup.ContactTemplate(
'recruitervale',
'Vale Recruiter',
'ContactRecruiterVale',
[setup.qc.QuestDelay(setup.questpool.recruitmentvale)],
)>>Thanks to your <<rep setup.buildingtemplate.hiringsquarevale>>, this contact will
give you a quest to specifically recruit residents on the <<lore region_vale>> into your company.<<set setup.ch = {}>>
<<include 'InitCostHelperTransformation'>>
<<include 'InitCostHelperRear'>><<set setup.ch.gapevagina = function(actor_name) {
return setup.qc.IfActorSatisfyThen(
actor_name,
setup.qs.trait_vagina,
setup.qc.Trait(actor_name, setup.trait.vagina_gape))
}>>
<<set setup.ch.loosenvagina = function(actor_name) {
return setup.qc.IfActorSatisfyThen(
actor_name,
setup.qs.trait_vagina,
setup.qc.Trait(actor_name, setup.trait.vagina_loose))
}>>
<<set setup.ch.tightenvagina = function(actor_name) {
return setup.qc.IfActorSatisfyThen(
actor_name,
setup.qs.trait_vagina,
setup.qc.Trait(actor_name, setup.trait.vagina_tight))
}>>
<<set setup.ch.gapeanus = function(actor_name) {
return setup.qc.Trait(actor_name, setup.trait.anus_gape)
}>>
<<set setup.ch.loosenanus = function(actor_name) {
return setup.qc.Trait(actor_name, setup.trait.anus_loose)
}>>
<<set setup.ch.tightenanus = function(actor_name) {
return setup.qc.Trait(actor_name, setup.trait.anus_tight)
}>><<set setup.ch.shrinkdick = function(actor_name) {
return setup.qc.TraitDecrease(actor_name, setup.trait.dick_small)
}>>
<<set setup.ch.shrinkballs = function(actor_name) {
return setup.qc.TraitDecrease(actor_name, setup.trait.balls_small)
}>>
<<set setup.ch.shrinkbreast = function(actor_name) {
return setup.qc.Trait(actor_name, null, setup.trait.breast_tiny.getTraitGroup())
}>>
<<set setup.ch.growdick = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.dick_large)
}>>
<<set setup.ch.growballs = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.balls_large)
}>>
<<set setup.ch.growbreast = function(actor_name) {
return setup.qc.Trait(actor_name, setup.trait.breast_large)
}>>
<<set setup.ch.growbreastsafe = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.breast_large)
}>>
<<set setup.ch.growdickhuge = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.dick_huge)
}>>
<<set setup.ch.growballshuge = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.balls_huge)
}>>
<<set setup.ch.growbreasthuge = function(actor_name) {
return setup.qc.Trait(actor_name, setup.trait.breast_huge)
}>>
<<set setup.ch.growbreasthugesafe = function(actor_name) {
return setup.qc.TraitIncreaseExisting(actor_name, setup.trait.breast_huge)
}>>[[(Icon Credits)|ImageCredits]]
<h3>Inspirations</h3>
BedlamGames, who made No Haven, which this games takes an enormous amount of inspirations from,
and FCDev, who made Free Cities, which this games also takes an enormous amount of content from.
<h3>Playtesters</h3>
Thank you playtesters for feedback, bug reports, and playtestings.
Special thanks to
Someguy01, Dirtyxmind, docclox, LordXenon_, Hermenegild, X Death
and the F95Zone community.
<h3>Unit names</h3>
Norse names from:
Coats, Steven. (2019). Language choice and gender in a Nordic social media corpus. Nordic Journal of Linguistics 42(1).
TES names:
https://en.uesp.net/wiki/Main_Page
https://github.com/KieranMcCool/TESGen
Name data are scraped from UESP and in accordance with their Copyright & Ownership guidelines, they are provided freely under the Creative Commons Attribution-ShareAlike 2.5 Generic license.
https://en.uesp.net/wiki/Lore:Khajiit_Names
https://en.uesp.net/wiki/Lore:Orc_Names
<h3>Others</h3>
Thanks to ChapelR for various Twine and SugarCube templates.
And of course, many thanks to Chris Klimas for making Twine, and
Thomas M. Edwards for making SugarCube 2.<<set _credits = setup.UnitImage.getCreditsByArtist()>>
<<set _artists = Object.keys(_credits)>>
<<run _artists.sort()>>
<<for _artist range _artists>>
<<capture _artist>>
<<message _artist>>
<<set _images = _credits[_artist]>>
<<run _images.sort((a, b) => a.info.title.localeCompare(b.info.title))>>
<<for _image range _images>>
<<set _info = _image.info>>
<<set _path = _image.path>>
"<<= _info.title>>"
<<if _info.url>>
[[(source)|_info.url]]
<</if>>
(<<= _info.license>>)
<<if _info.extra>>
[<<= _info.extra>>]
<</if>>
<<capture _path>>
<<message _path>>
<<image _path>>
<</message>>
<</capture>>
<br/>
<</for>>
<</message>>
(<<= _credits[_artist].length>> artworks)
<br/>
<</capture>>
<</for>><<set _credits = setup.getAuthorCredits()>>
<<set _authors = Object.keys(_credits)>>
<<run _authors.sort()>>
<<for _author range _authors>>
<<capture _author>>
<<message _author>>
<<set _items = ['quest', 'opportunity', 'event', 'interaction']>>
<<for _item range _items>>
<<if _credits[_author][_item].length>>
<<capture _item>>
<<message _item>>
<<for _title range _credits[_author][_item]>>
<<nameof _title>>
<br/>
<</for>>
<</message>>
(<<= _credits[_author][_item].length>>)
<br/>
<</capture>>
<</if>>
<</for>>
<</message>>
<</capture>>
(<<= _credits[_author].quest.length>> quests,
<<= _credits[_author].opportunity.length>> opportunitys,
<<= _credits[_author].event.length>> events, and
<<= _credits[_author].interaction.length>> interactions)
<br/>
<</for>><h3>Repository contributors</h3>
This is a joint work of the [[repository contributors|https://gitgud.io/darkofocdarko/foc/-/graphs/master]].
Naraden contributed many, many fixes and improvements, and acciabread
gave many suggestions and work that greatly improve the game.
Give your thanks to them!<<set setup.qu = {}>>
<<include 'InitCriteriaCombatCommon'>>
<<include 'InitCriteriaRaiderCommon'>>
<<include 'InitCriteriaBrawnCommon'>>
<<include 'InitCriteriaSurvivalCommon'>>
<<include 'InitCriteriaIntrigueCommon'>>
<<include 'InitCriteriaSlavingCommon'>>
<<include 'InitCriteriaKnowledgeCommon'>>
<<include 'InitCriteriaSocialCommon'>>
<<include 'InitCriteriaAidCommon'>>
<<include 'InitCriteriaArcaneCommon'>>
<<include 'InitCriteriaSexCommon'>>
<<include 'InitCriteriaSlaveCommon'>>
<<include 'InitCriteriaUnitTraining'>>
<<include 'InitCriteriaFleshShape'>>
<<include 'InitCriteriaSurgery'>>
<<include 'InitCriteriaCorruption'>>
<<include 'InitCriteriaPurify'>>
<<include 'InitCriteriaHeal'>>
<<include 'InitCriteriaScout'>><<run new setup.UnitCriteria(
'healer', /* key */
'Healer', /* title */
[
setup.trait.bg_healer,
setup.trait.per_kind,
setup.trait.per_humble,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.per_calm,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
], /* critical traits */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_proud,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_intimidating,
setup.trait.per_aggressive,
setup.trait.breast_tiny,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
aid: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'knight', /* key */
'Knight', /* title */
[
setup.trait.bg_knight,
setup.trait.per_brave,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_ambidextrous,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.race_orc,
setup.trait.race_werewolf,
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.race_demon,
setup.trait.per_cautious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_deceitful,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_alchemy,
setup.trait.skill_flight,
setup.trait.corrupted,
setup.trait.corruptedfull,
], /* disaster traits */
[
setup.qs.job_slaver,
], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 1.0,
brawn: 1.0,
aid: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'squire', /* key */
'Squire', /* title */
[
setup.trait.per_submissive,
setup.trait.per_honest,
setup.trait.per_loyal,
setup.trait.per_studious,
setup.trait.per_humble,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_knight,
setup.trait.race_orc,
setup.trait.race_werewolf,
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.race_demon,
setup.trait.per_dominant,
setup.trait.per_deceitful,
setup.trait.per_independent,
setup.trait.per_active,
setup.trait.per_proud,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.corrupted,
setup.trait.corruptedfull,
], /* disaster traits */
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.bg_knight),
], /* requirement */
{ /* skill effects, sum to 3.0 */
aid: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'support', /* key */
'Support', /* title */
[ /* critical traits */
setup.trait.per_loyal,
setup.trait.per_generous,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_independent,
setup.trait.per_thrifty,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
aid: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'maid', /* key */
'Maid / Butler', /* title */
[
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_studious,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_connected,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
aid: 2.0,
brawn: 1.0,
}
)>><<run new setup.UnitCriteria(
'arcanefire', /* key */
'Arcane (Fire)', /* title */
[ /* critical traits */
setup.trait.per_proud,
setup.trait.per_aggressive,
setup.trait.per_tough,
setup.trait.per_serious,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_ambidextrous,
],
[ /* disaster traits */
setup.trait.per_humble,
setup.trait.per_calm,
setup.trait.per_nimble,
setup.trait.per_playful,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.skill_creative,
],
[
setup.qs.job_slaver
], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanewater', /* key */
'Arcane (Water)', /* title */
[ /* critical traits */
setup.trait.per_loner,
setup.trait.per_brave,
setup.trait.per_stubborn,
setup.trait.per_honest,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_gregarious,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_deceitful,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_hypnotic,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanewind', /* key */
'Arcane (Wind)', /* title */
[ /* critical traits */
setup.trait.per_gregarious,
setup.trait.per_playful,
setup.trait.per_thrifty,
setup.trait.per_empath,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_connected,
],
[ /* disaster traits */
setup.trait.per_loner,
setup.trait.per_serious,
setup.trait.per_generous,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_alchemy,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcaneearth', /* key */
'Arcane (Earth)', /* title */
[ /* critical traits */
setup.trait.per_humble,
setup.trait.per_nimble,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_animal,
],
[ /* disaster traits */
setup.trait.per_proud,
setup.trait.per_tough,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_flight,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanelight', /* key */
'Arcane (Light)', /* title */
[ /* critical traits */
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_chaste,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_alchemy,
],
[ /* disaster traits */
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_independent,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_entertain,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
aid: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanedark', /* key */
'Arcane (Dark)', /* title */
[ /* critical traits */
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_deceitful,
setup.trait.per_active,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_entertain,
],
[ /* disaster traits */
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_honest,
setup.trait.per_studious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_animal,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanefireveteran', /* key */
'Arcane Veteran (Fire)', /* title */
[ /* critical traits */
setup.trait.per_proud,
setup.trait.per_aggressive,
setup.trait.per_tough,
setup.trait.per_serious,
setup.trait.magic_fire_master,
setup.trait.skill_ambidextrous,
],
[ /* disaster traits */
setup.trait.per_humble,
setup.trait.per_calm,
setup.trait.per_nimble,
setup.trait.per_playful,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.skill_creative,
],
[
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_fire),
], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanewaterveteran', /* key */
'Arcane Veteran (Water)', /* title */
[ /* critical traits */
setup.trait.per_loner,
setup.trait.per_brave,
setup.trait.per_stubborn,
setup.trait.per_honest,
setup.trait.magic_water_master,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_gregarious,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_deceitful,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_hypnotic,
],
[
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_water),
], /* requirement */
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanewindveteran', /* key */
'Arcane Veteran (Wind)', /* title */
[ /* critical traits */
setup.trait.per_gregarious,
setup.trait.per_playful,
setup.trait.per_thrifty,
setup.trait.per_empath,
setup.trait.magic_wind_master,
setup.trait.skill_connected,
],
[ /* disaster traits */
setup.trait.per_loner,
setup.trait.per_serious,
setup.trait.per_generous,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_alchemy,
],
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_wind),
],
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcaneearthveteran', /* key */
'Arcane Veteran (Earth)', /* title */
[ /* critical traits */
setup.trait.per_humble,
setup.trait.per_nimble,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.magic_earth_master,
setup.trait.skill_animal,
],
[ /* disaster traits */
setup.trait.per_proud,
setup.trait.per_tough,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_flight,
],
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_earth),
],
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanelightveteran', /* key */
'Arcane Veteran (Light)', /* title */
[ /* critical traits */
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_chaste,
setup.trait.magic_light_master,
setup.trait.skill_alchemy,
],
[ /* disaster traits */
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_independent,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_entertain,
],
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_light),
],
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
aid: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'arcanedarkveteran', /* key */
'Arcane Veteran (Dark)', /* title */
[ /* critical traits */
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_deceitful,
setup.trait.per_active,
setup.trait.magic_dark_master,
setup.trait.skill_entertain,
],
[ /* disaster traits */
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_honest,
setup.trait.per_studious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_animal,
],
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_dark),
],
{ /* skill effects, sums to 3.0 */
arcane: 2.0,
sex: 1.0,
}
)>><<run new setup.UnitCriteria(
'builder', /* key */
'Builder', /* title */
[
setup.trait.bg_laborer,
setup.trait.per_tough,
setup.trait.per_studious,
setup.trait.per_submissive,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong
], /* critical traits */
[
setup.trait.per_nimble,
setup.trait.per_active,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'tank', /* key */
'Tank', /* title */
[
setup.trait.per_tough,
setup.trait.per_stubborn,
setup.trait.per_masochistic,
setup.trait.per_dominant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.height_giant,
setup.trait.skill_intimidating,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.per_nimble,
setup.trait.per_curious,
setup.trait.per_independent,
setup.trait.per_submissive,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.height_dwarf,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'brawler', /* key */
'Brawler', /* title */
[
setup.trait.per_tough,
setup.trait.per_stubborn,
setup.trait.per_aggressive,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.height_giant,
setup.trait.skill_intimidating,
], /* critical traits */
[
setup.trait.per_masochistic,
setup.trait.per_nimble,
setup.trait.per_curious,
setup.trait.per_calm,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.height_dwarf,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'carrier', /* key */
'Carrier', /* title */
[
setup.trait.bg_laborer,
setup.trait.per_honest,
setup.trait.per_submissive,
setup.trait.per_slow,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
], /* critical traits */
[
setup.trait.per_deceitful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.skill_flight,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'dragontamer', /* key */
'Dragon Tamer', /* title */
[ /* critical traits */
setup.trait.race_dragonkin,
setup.trait.per_aggressive,
setup.trait.per_honorable,
setup.trait.per_brave,
setup.trait.per_masochistic,
setup.trait.skill_hypnotic,
setup.trait.skill_animal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.race_humanvale,
setup.trait.race_humankingdom,
setup.trait.race_humandesert,
setup.trait.race_humansea,
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.per_calm,
setup.trait.per_evil,
setup.trait.per_cautious,
setup.trait.per_lunatic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
brawn: 1.0,
slaving: 1.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'blacksmith', /* key */
'Blacksmith', /* title */
[ /* critical traits */
setup.trait.bg_artisan,
setup.trait.bg_metalworker,
setup.trait.race_dragonkin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_tough,
setup.trait.per_calm,
setup.trait.skill_creative,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[ /* disaster traits */
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.per_nimble,
setup.trait.per_aggressive,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
brawn: 1.5,
knowledge: 1.5,
}
)>><<run new setup.UnitCriteria(
'guard', /* key */
'Guard', /* title */
[
setup.trait.bg_soldier,
setup.trait.per_loyal,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_raider,
setup.trait.bg_thug,
setup.trait.per_independent,
setup.trait.per_cautious,
setup.trait.per_evil,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'fighter', /* key */
'Fighter', /* title */
[
setup.trait.bg_adventurer,
setup.trait.bg_mercenary,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.eq_restrained,
setup.trait.eq_blind,
setup.trait.per_humble,
setup.trait.per_masochistic,
setup.trait.per_curious,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.height_dwarf,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'guardsupport', /* key */
'Guard Support', /* title */
[ /* critical traits */
setup.trait.bg_healer,
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
aid: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'defender', /* key */
'Defender', /* title */
[
setup.trait.bg_knight,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* critical traits */
[
setup.trait.bg_raider,
setup.trait.bg_thug,
setup.trait.bg_slaver,
setup.trait.per_masochistic,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 2,
aid: 1,
}
)>>
<<run new setup.UnitCriteria(
'defendersupport', /* key */
'Defender Support', /* title */
[ /* critical traits */
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.breast_large,
setup.trait.breast_huge,
],
[ /* disaster traits */
setup.trait.per_masochistic,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.breast_titanic,
setup.trait.breast_tiny,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
aid: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'dark_warrior', /* key */
'Dark Warrior', /* title */
[
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_proud,
setup.trait.per_independent,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.skill_intimidating,
], /* critical traits */
[
setup.trait.bg_knight,
setup.trait.skill_animal,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.per_playful,
setup.trait.per_humble,
setup.trait.per_generous,
setup.trait.per_loyal,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'light_warrior', /* key */
'Light Warrior', /* title */
[
setup.trait.bg_knight,
setup.trait.per_kind,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.per_empath,
setup.trait.per_humble,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_animal,
], /* critical traits */
[
setup.trait.skill_intimidating,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_submissive,
setup.trait.per_proud,
setup.trait.per_logical,
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
aid: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'dps', /* key */
'Damager', /* title */
[
setup.trait.bg_assassin,
setup.trait.per_nimble,
setup.trait.per_lunatic,
setup.trait.skill_creative,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.per_tough,
setup.trait.per_lunatic,
setup.trait.per_sexaddict,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'pirate', /* key */
'Pirate', /* title */
[ /* critical traits */
setup.trait.bg_pirate,
setup.trait.per_playful,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.skill_ambidextrous,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[ /* disaster traits */
setup.trait.per_serious,
setup.trait.per_studious,
setup.trait.per_masochistic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
combat: 1.0,
brawn: 1.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'mercenary', /* key */
'Mercenary', /* title */
[ /* critical traits */
setup.trait.bg_mercenary,
setup.trait.per_thrifty,
setup.trait.per_independent,
setup.trait.per_honest,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.per_generous,
setup.trait.per_loyal,
setup.trait.per_deceitful,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.join_junior,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
combat: 1.0,
brawn: 1.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'archer', /* key */
'Archer', /* title */
[ /* critical traits */
setup.trait.bg_hunter,
setup.trait.per_attentive,
setup.trait.per_nimble,
setup.trait.per_calm,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.skill_flight,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* disaster traits */
setup.trait.per_tough,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.height_short,
setup.trait.height_dwarf,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_blind,
setup.trait.eq_restrained,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
combat: 1.5,
survival: 1.5,
}
)>><<run new setup.UnitCriteria(
'corruption_head',
'Head Corruptor',
[
setup.trait.race_demon,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_chaste,
setup.trait.per_submissive,
],
[setup.qs.job_slaver, setup.qres.Trait(setup.trait.magic_dark,
setup.trait.magic_dark_master)],
{
arcane: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'corruption_assistant',
'Assistant Corruptor',
[
setup.trait.bg_apprentice,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_active,
],
[
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_studious,
],
[setup.qs.job_slaver],
{
arcane: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'corruptor',
'Corruptor',
[
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.per_cruel,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_hypnotic,
],
[
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_logical,
setup.trait.per_chaste,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.magic_dark,
setup.trait.magic_dark_master),
],
{
arcane: 3.0,
}
)>><<run new setup.UnitCriteria(
'fleshshape_head',
'Head Flesh-Shaper',
[
setup.trait.race_humanvale,
setup.trait.race_werewolf,
setup.trait.per_chaste,
setup.trait.per_attentive,
setup.trait.per_cautious,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_dreamy,
setup.trait.per_lustful,
setup.trait.per_brave,
setup.trait.per_lunatic,
setup.trait.per_sexaddict,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qs.job_slaver, setup.qres.Trait(setup.trait.magic_water,
setup.trait.magic_water_master)],
{
arcane: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'fleshshape_assistant',
'Assistant Flesh-Shaper',
[
setup.trait.race_humanvale,
setup.trait.race_werewolf,
setup.trait.per_chaste,
setup.trait.per_attentive,
setup.trait.per_cautious,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_dreamy,
setup.trait.per_lustful,
setup.trait.per_brave,
setup.trait.per_lunatic,
setup.trait.per_sexaddict,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qs.job_slaver],
{
arcane: 2.0,
aid: 1.0,
}
)>><<run new setup.UnitCriteria(
'heal_head',
'Head Healer',
[
setup.trait.bg_healer,
setup.trait.per_masochistic,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_humble,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_logical,
setup.trait.per_proud,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[setup.qs.job_slaver, setup.qres.Trait(setup.trait.magic_light,
setup.trait.magic_light_master)],
{
aid: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'heal_assistant',
'Assistant Healer',
[
setup.trait.per_submissive,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_humble,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.per_dominant,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_proud,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[setup.qs.job_slaver],
{
aid: 3.0,
}
)>><<run new setup.UnitCriteria(
'infiltrator', /* key */
'Infiltrator', /* title */
[ /* critical traits */
setup.trait.bg_thief,
setup.trait.bg_assassin,
setup.trait.per_nimble,
setup.trait.per_attentive,
setup.trait.skill_hypnotic,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.per_honorable,
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_dreamy,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'thief', /* key */
'Thief', /* title */
[ /* critical traits */
setup.trait.bg_thief,
setup.trait.per_loner,
setup.trait.per_aggressive,
setup.trait.per_thrifty,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_nimble,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_flight,
],
[
setup.trait.per_gregarious,
setup.trait.per_calm,
setup.trait.per_generous,
setup.trait.per_loyal,
setup.trait.per_dreamy,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'kidnapper', /* key */
'Kidnapper', /* title */
[ /* critical traits */
setup.trait.per_cruel,
setup.trait.per_nimble,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_tough,
setup.trait.magic_light,
setup.trait.magic_light_master
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 1.5,
slaving: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'schemer', /* key */
'Schemer', /* title */
[ /* critical traits */
setup.trait.per_deceitful,
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_logical,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_honest,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_empath,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'conartist', /* key */
'Con Artist', /* title */
[ /* critical traits */
setup.trait.per_deceitful,
setup.trait.per_playful,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
],
[ /* disaster traits */
setup.trait.bg_thug,
setup.trait.per_honest,
setup.trait.per_serious,
setup.trait.per_honorable,
setup.trait.per_masochistic,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 1.5,
social: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'shadow_fighter', /* key */
'Shadow Fighter', /* title */
[ /* critical traits */
setup.trait.bg_assassin,
setup.trait.per_nimble,
setup.trait.per_calm,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.per_tough,
setup.trait.per_aggressive,
setup.trait.per_lunatic,
setup.trait.per_playful,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 1.0,
combat: 1.0,
survival: 1.0,
}
)>><<run new setup.UnitCriteria(
'planner', /* key */
'Planner', /* title */
[ /* critical traits */
setup.trait.bg_scholar,
setup.trait.per_cautious,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_aggressive,
setup.trait.per_slow,
setup.trait.per_active
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'biologist', /* key */
'Biologist', /* title */
[
setup.trait.bg_scholar,
setup.trait.per_cautious,
setup.trait.per_smart,
setup.trait.per_logical,
setup.trait.skill_animal,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_slow,
setup.trait.per_empath,
setup.trait.skill_intimidating,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'bidder', /* key */
'Bidder', /* title */
[
setup.trait.bg_informer,
setup.trait.per_thrifty,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.per_dreamy,
setup.trait.per_generous,
setup.trait.per_brave,
setup.trait.per_honest,
setup.trait.per_aggressive,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'explorer', /* key */
'Explorer', /* title */
[ /* critical traits */
setup.trait.bg_adventurer,
setup.trait.per_curious,
setup.trait.per_brave,
setup.trait.per_studious,
setup.trait.skill_animal,
],
[ /* disaster traits */
setup.trait.per_stubborn,
setup.trait.per_cautious,
setup.trait.per_active,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qs.job_slaver
], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'milker', /* key */
'Milker', /* title */
[
setup.trait.bg_farmer,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_nimble,
setup.trait.per_playful,
setup.trait.skill_animal,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.per_chaste,
setup.trait.per_kind,
setup.trait.per_tough,
setup.trait.per_serious,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'alchemist', /* key */
'Alchemist', /* title */
[
setup.trait.bg_scholar,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_alchemy,
], /* critical traits */
[
setup.trait.per_stubborn,
setup.trait.per_active,
setup.trait.per_sexaddict,
setup.trait.skill_creative,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'navigator', /* key */
'Navigator', /* title */
[
setup.trait.bg_seaman,
setup.trait.per_attentive,
setup.trait.per_smart,
setup.trait.per_cautious,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.skill_flight,
], /* critical traits */
[
setup.trait.race_humandesert,
setup.trait.per_dreamy,
setup.trait.race_orc,
setup.trait.per_lunatic,
setup.trait.per_slow,
setup.trait.per_brave,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'alchemist_veteran', /* key */
'Veteran Alchemist', /* title */
[
setup.trait.bg_scholar,
setup.trait.per_smart,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_slow,
setup.trait.per_stubborn,
setup.trait.per_active,
setup.trait.per_sexaddict,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.skill_alchemy),
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'hypnotist', /* key */
'Hypnotist', /* title */
[
setup.trait.per_dominant,
setup.trait.per_empath,
setup.trait.per_gregarious,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.skill_hypnotic,
], /* critical traits */
[
setup.trait.skill_animal,
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_logical,
setup.trait.per_loner,
setup.trait.face_ugly,
setup.trait.face_hideous,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'hypnotist_veteran', /* key */
'Hypnotist Veteran', /* title */
[
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_dominant,
setup.trait.per_empath,
setup.trait.per_gregarious,
setup.trait.face_attractive,
setup.trait.face_beautiful,
], /* critical traits */
[
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_animal,
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_logical,
setup.trait.per_loner,
setup.trait.face_ugly,
setup.trait.face_hideous,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.skill_hypnotic),
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'writer', /* key */
'Writer', /* title */
[
setup.trait.bg_artist,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_dreamy,
setup.trait.skill_entertain,
setup.trait.skill_creative,
], /* critical traits */
[
setup.trait.per_lunatic,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_attentive,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'bureaucrat', /* key */
'Bureaucrat', /* title */
[
setup.trait.bg_clerk,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.per_studious,
setup.trait.per_masochistic,
], /* critical traits */
[
setup.trait.bg_artist,
setup.trait.per_kind,
setup.trait.per_honorable,
setup.trait.per_generous,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.skill_creative,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'appraiser', /* key */
'Appraiser', /* title */
[
setup.trait.bg_merchant,
setup.trait.per_thrifty,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.skill_connected,
], /* critical traits */
[
setup.trait.per_lunatic,
setup.trait.per_dreamy,
setup.trait.per_generous,
setup.trait.per_stubborn,
setup.trait.trauma_knowledge,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'scientist', /* key */
'Scientist', /* title */
[
setup.trait.bg_scholar,
setup.trait.per_logical,
setup.trait.per_studious,
setup.trait.per_smart,
setup.trait.per_humble,
setup.trait.skill_creative,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* critical traits */
[
setup.trait.per_proud,
setup.trait.bg_apprentice,
setup.trait.bg_mystic,
setup.trait.bg_mythical,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.per_empath,
setup.trait.per_active,
setup.trait.per_slow,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.skill_hypnotic,
], /* disaster traits */
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'crafter', /* key */
'Crafter', /* title */
[ /* critical traits */
setup.trait.bg_artisan,
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_lunatic,
setup.trait.skill_creative,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.per_brave,
setup.trait.per_active,
setup.trait.per_lunatic,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'ritualist', /* key */
'Ritualist', /* title */
[ /* critical traits */
setup.trait.per_calm,
setup.trait.per_chaste,
setup.trait.per_loner,
setup.trait.magic_water_master,
setup.trait.magic_earth_master,
setup.trait.magic_wind_master,
setup.trait.magic_fire_master,
setup.trait.magic_dark_master,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_gregarious,
setup.trait.per_aggressive,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
],
[ /* requirement */
setup.qs.job_slaver,
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
arcane: 1.0,
}
)>><<run new setup.UnitCriteria(
'purify_head',
'Head Purifier',
[
setup.trait.bg_priest,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.per_chaste,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
],
[
setup.trait.race_demon,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_curious,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[setup.qs.job_slaver, setup.qres.Trait(setup.trait.magic_fire,
setup.trait.magic_fire_master)],
{
aid: 1.5,
arcane: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'purify_assistant',
'Assistant Purifier',
[
setup.trait.bg_apprentice,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.per_chaste,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.trait.race_demon,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[setup.qs.job_slaver],
{
knowledge: 1.5,
aid: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'repentant',
'Repentant',
[
setup.trait.per_chaste,
setup.trait.per_kind,
setup.trait.per_honorable,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
{
arcane: 1.0,
aid: 1.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'purifier',
'Purifier',
[
setup.trait.bg_priest,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_studious,
],
[
setup.trait.race_demon,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.per_active,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[setup.qs.job_slaver],
{
aid: 2.0,
arcane: 1.0,
}
)>><<run new setup.UnitCriteria(
'raider', /* key */
'Raider', /* title */
[
setup.trait.bg_raider,
setup.trait.per_aggressive,
setup.trait.per_playful,
setup.trait.per_cruel,
setup.trait.per_dreamy,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.per_attentive,
setup.trait.per_kind,
setup.trait.per_humble,
setup.trait.per_honorable,
setup.trait.per_serious,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'raidersupport', /* key */
'Raider Support', /* title */
[ /* critical traits */
setup.trait.bg_raider,
setup.trait.per_calm,
setup.trait.per_loyal,
setup.trait.per_dreamy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_attentive,
setup.trait.per_kind,
setup.trait.per_humble,
setup.trait.per_honorable,
setup.trait.per_aggressive,
setup.trait.per_independent,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
aid: 2.0,
knowledge: 1.0,
}
)>><<run new setup.UnitCriteria(
'scout_vale',
'Scout (Vale)',
[
setup.trait.race_werewolf,
setup.trait.race_humanvale,
setup.trait.per_attentive,
setup.trait.per_honest,
setup.trait.per_curious,
setup.trait.skill_flight,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_dreamy,
setup.trait.race_orc,
setup.trait.race_humandesert,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.per_deceitful,
setup.trait.per_stubborn,
],
[setup.qs.job_slaver],
{
survival: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_city',
'Scout (City)',
[
setup.trait.bg_informer,
setup.trait.race_humankingdom,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_curious,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.skill_intimidating,
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.per_generous,
setup.trait.per_stubborn,
setup.trait.per_honest,
],
[setup.qs.job_slaver],
{
survival: 1.0,
social: 1.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_forest',
'Scout (Forest)',
[
setup.trait.bg_woodsman,
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.per_cautious,
setup.trait.per_loner,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.race_humankingdom,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_gregarious,
setup.trait.per_brave,
],
[setup.qs.job_slaver],
{
survival: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_desert',
'Scout (Desert)',
[
setup.trait.bg_nomad,
setup.trait.race_orc,
setup.trait.race_humandesert,
setup.trait.per_tough,
setup.trait.per_calm,
setup.trait.skill_intimidating,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.race_humanvale,
setup.trait.race_werewolf,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_aggressive,
],
[setup.qs.job_slaver],
{
survival: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_sea',
'Scout (Sea)',
[
setup.trait.bg_seaman,
setup.trait.race_dragonkin,
setup.trait.race_humansea,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_playful,
setup.trait.skill_hypnotic,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_independent,
setup.trait.per_masochistic,
setup.trait.per_cautious,
setup.trait.per_generous,
setup.trait.per_sexaddict,
setup.trait.per_empath,
setup.trait.per_honest,
setup.trait.per_submissive,
setup.trait.per_serious,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qs.job_slaver],
{
survival: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_guard',
'Scout (Guard)',
[
setup.trait.per_tough,
setup.trait.per_loyal,
setup.trait.per_masochistic,
setup.trait.per_dominant,
setup.trait.per_serious,
],
[
setup.trait.per_independent,
setup.trait.per_nimble,
setup.trait.per_lunatic,
setup.trait.per_submissive,
setup.trait.per_playful,
],
[setup.qs.job_slaver],
{
survival: 1.0,
combat: 2.0,
}
)>><<run new setup.UnitCriteria(
'seducer', /* key */
'Seducer', /* title */
[
setup.trait.bg_courtesan,
setup.trait.per_deceitful,
setup.trait.per_playful,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
], /* critical traits */
[ /* disaster traits */
setup.trait.per_chaste,
setup.trait.per_serious,
setup.trait.per_honest,
setup.trait.dick_tiny,
setup.trait.breast_tiny,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.skill_intimidating,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'whore', /* key */
'Whore', /* title */
[
setup.trait.bg_whore,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dreamy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
], /* critical traits */
[ /* disaster traits */
setup.trait.breast_tiny,
setup.trait.balls_tiny,
setup.trait.dick_tiny,
setup.trait.per_chaste,
setup.trait.per_attentive,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_loner,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'whoreblowjob', /* key */
'Whore (Head special)', /* title */
[
setup.trait.bg_whore,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_cautious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
], /* critical traits */
[
setup.trait.breast_tiny,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dominant,
setup.trait.per_chaste,
setup.trait.per_loner,
setup.trait.per_aggressive,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.gender_male,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'loveinterest', /* key */
'Love Interest', /* title */
[
setup.trait.bg_courtesan,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.per_humble,
setup.trait.per_empath,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.breast_tiny,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_aggressive,
setup.trait.per_logical,
setup.trait.dick_medium,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_medium,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'escort', /* key */
'Escort', /* title */
[
setup.trait.bg_courtesan,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.breast_tiny,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.race_orc,
setup.trait.dick_tiny,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'bimbo', /* key */
'Bimbo', /* title */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_playful,
setup.trait.per_active,
setup.trait.per_humble,
setup.trait.per_slow,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.face_beautiful,
setup.trait.anus_gape,
setup.trait.vagina_gape,
], /* critical traits */
[
setup.trait.bg_courtesan,
setup.trait.per_chaste,
setup.trait.per_serious,
setup.trait.per_lunatic,
setup.trait.per_cruel,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_smart,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.per_proud,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'pimp', /* key */
'Pimp', /* title */
[
setup.trait.bg_courtesan,
setup.trait.bg_slaver,
setup.trait.per_active,
setup.trait.per_thrifty,
setup.trait.per_dominant,
setup.trait.per_proud,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.skill_connected,
], /* critical traits */
[
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_humble,
setup.trait.face_ugly,
setup.trait.face_hideous,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'housekeeper', /* key */
'Housekeeper', /* title */
[
setup.trait.bg_maid,
setup.trait.per_kind,
setup.trait.per_studious,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.skill_alchemy,
], /* critical traits */
[
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_active,
setup.trait.per_proud,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'highescort', /* key */
'High-Class Prostitute', /* title */
[
setup.trait.bg_courtesan,
setup.trait.per_gregarious,
setup.trait.per_nimble,
setup.trait.per_active,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.face_beautiful,
setup.trait.skill_creative,
setup.trait.skill_connected,
setup.trait.eq_veryvaluable,
setup.trait.eq_veryslutty,
], /* critical traits */
[
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.race_orc,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.per_loner,
setup.trait.per_lunatic,
setup.trait.per_tough,
setup.trait.per_studious,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>><<run new setup.UnitCriteria(
'slave', /* key */
'Slave', /* title */
[], /* critical traits */
[], /* disaster traits */
[setup.qs.job_slave], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'offeringslave', /* key */
'Offering Slave', /* title */
[], /* critical traits */
[], /* disaster traits */
[setup.qs.job_slave], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'fuckholeslave', /* key */
'Fuckhole Slave', /* title */
[ /* critical traits */
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.anus_loose,
setup.trait.training_anal_basic,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
setup.trait.training_vagina_basic,
setup.trait.training_vagina_advanced,
setup.trait.training_vagina_master,
setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master,
],
[
setup.trait.per_dominant,
setup.trait.training_mindbreak,
setup.trait.race_humanvale,
], /* disaster traits */
[setup.qs.job_slave], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavepet', /* key */
'Pet', /* title */
[ /* critical traits */
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.per_submissive,
setup.trait.per_loyal,
setup.trait.per_nimble,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.training_pet_master,
setup.trait.skill_animal,
],
[
setup.trait.race_humankingdom,
setup.trait.race_humanvale,
setup.trait.race_humandesert,
setup.trait.race_humansea,
setup.trait.per_dominant,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_aggressive,
setup.trait.per_serious,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_pet_basic,
setup.trait.training_pet_advanced,
setup.trait.training_pet_master),
setup.qres.Trait(setup.trait.eq_pet),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavegeneric', /* key */
'Slave (generic)', /* title */
[ /* critical traits */
setup.trait.per_submissive,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
].concat(setup.TraitHelper.TRAINING_MASTER),
[
setup.trait.per_dominant,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_stubborn,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qs.job_slave,
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavefurniture', /* key */
'Furniture', /* title */
[ /* critical traits */
setup.trait.race_orc,
setup.trait.per_stubborn,
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_restrained,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.training_endurance_master,
],
[
setup.trait.race_elf,
setup.trait.per_gregarious,
setup.trait.per_aggressive,
setup.trait.per_sexaddict,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavepony', /* key */
'Pony', /* title */
[ /* critical traits */
setup.trait.race_dragonkin,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_tough,
setup.trait.per_active,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.training_pony_master,
setup.trait.skill_animal,
],
[
setup.trait.per_chaste,
setup.trait.per_nimble,
setup.trait.per_studious,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_pony_basic,
setup.trait.training_pony_advanced,
setup.trait.training_pony_master),
setup.qres.Trait(setup.trait.eq_pony),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavecow', /* key */
'Cum/Milk Slave', /* title */
[ /* critical traits */
setup.trait.race_orc,
setup.trait.per_sexaddict,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.eq_restrained,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
setup.trait.eq_gagged,
setup.trait.training_mindbreak,
setup.trait.skill_animal,
],
[
setup.trait.breast_small,
setup.trait.breast_tiny,
setup.trait.balls_small,
setup.trait.balls_tiny,
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.height_giant,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_chastity,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.dick_small, setup.trait.breast_small]),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slaveoral', /* key */
'Oral Slave', /* title */
[ /* critical traits */
setup.trait.mouth_demon,
setup.trait.per_thrifty,
setup.trait.per_active,
setup.trait.per_masochistic,
setup.trait.eq_gagged,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master,
],
[
setup.trait.per_generous,
setup.trait.per_studious,
setup.trait.per_lunatic,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_oral_basic,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slaveobedient', /* key */
'Slave (Obedient)', /* title */
[ /* critical traits */
setup.trait.per_submissive,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
].concat(setup.TraitHelper.TRAINING_MASTER),
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dominant,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_stubborn,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>><<run new setup.UnitCriteria(
'slaver', /* key */
'Slaver (Generic)', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavetrader', /* key */
'Slave Trader', /* title */
[ /* critical traits */
setup.trait.bg_merchant,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_cruel,
setup.trait.magic_wind,
setup.trait.magic_wind_master
],
[ /* disaster traits */
setup.trait.bg_slave,
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_kind
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'slavetrainer', /* key */
'Slave Trainer', /* title */
[ /* critical traits */
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_intimidating,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_honorable,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'slaveappraiser', /* key */
'Slave Appraiser', /* title */
[ /* critical traits */
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_calm,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.per_dreamy,
setup.trait.bg_slave,
setup.trait.per_stubborn,
setup.trait.per_aggressive,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 1.0,
knowledge: 1.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'slavehandler', /* key */
'Slave Handler', /* title */
[ /* critical traits */
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.per_calm,
setup.trait.per_dominant,
setup.trait.per_aggressive,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_aggressive,
setup.trait.per_calm,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'slavecapturer', /* key */
'Slave Capturer', /* title */
[ /* critical traits */
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.per_aggressive,
setup.trait.per_stubborn,
setup.trait.per_active,
setup.trait.per_nimble,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_calm,
setup.trait.per_masochistic,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.per_tough,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 2.0,
brawn: 1.0,
}
)>><<run new setup.UnitCriteria(
'negotiator', /* key */
'Negotiator', /* title */
[ /* critical traits */
setup.trait.bg_merchant,
setup.trait.per_deceitful,
setup.trait.per_calm,
setup.trait.per_logical,
setup.trait.per_gregarious,
setup.trait.per_attentive,
],
[
setup.trait.per_dreamy,
setup.trait.per_honest,
setup.trait.per_aggressive,
setup.trait.per_empath,
setup.trait.per_loner,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'trader', /* key */
'Trader', /* title */
[ /* critical traits */
setup.trait.bg_merchant,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_smart,
setup.trait.per_logical,
],
[ /* disaster traits */
setup.trait.skill_intimidating,
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_empath,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'recruiter', /* key */
'Recruiter', /* title */
[ /* critical traits */
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.per_curious,
setup.trait.per_dominant,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.skill_intimidating,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_submissive,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'convincer', /* key */
'Convincer', /* title */
[ /* critical traits */
setup.trait.per_gregarious,
setup.trait.per_stubborn,
setup.trait.per_attentive,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.skill_hypnotic,
setup.trait.skill_intimidating,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_loner,
setup.trait.per_curious,
setup.trait.per_aggressive,
setup.trait.face_ugly,
setup.trait.face_hideous,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'informer', /* key */
'Informer', /* title */
[ /* critical traits */
setup.trait.bg_informer,
setup.trait.per_gregarious,
setup.trait.per_deceitful,
setup.trait.per_logical,
setup.trait.per_attentive,
setup.trait.face_attractive,
setup.trait.face_beautiful
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_dreamy,
setup.trait.face_ugly,
setup.trait.face_hideous
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'salesman', /* key */
'Salesman', /* title */
[ /* critical traits */
setup.trait.bg_merchant,
setup.trait.per_thrifty,
setup.trait.per_stubborn,
setup.trait.per_logical,
setup.trait.face_attractive,
setup.trait.face_beautiful
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_generous,
setup.trait.per_curious,
setup.trait.per_lunatic,
setup.trait.per_empath,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'attentionseeker', /* key */
'Attention Seeker', /* title */
[ /* critical traits */
setup.trait.bg_artist,
setup.trait.bg_entertainer,
setup.trait.per_gregarious,
setup.trait.per_aggressive,
setup.trait.per_dominant,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.per_proud,
setup.trait.skill_connected,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_calm,
setup.trait.per_submissive,
setup.trait.per_studious,
setup.trait.per_masochistic,
setup.trait.per_humble,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 1.0,
sex: 1.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'performer', /* key */
'Performer', /* title */
[ /* critical traits */
setup.trait.bg_entertainer,
setup.trait.bg_artist,
setup.trait.per_playful,
setup.trait.per_active,
setup.trait.per_dreamy,
setup.trait.skill_entertain,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_serious,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 1.5,
brawn: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'briber', /* key */
'Briber', /* title */
[ /* critical traits */
setup.trait.bg_informer,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.skill_intimidating,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_generous,
setup.trait.per_honest,
setup.trait.per_honorable,
setup.trait.face_ugly,
setup.trait.face_hideous,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
intrigue: 1.0,
}
)>><<run new setup.UnitCriteria(
'surgery_head',
'Head Surgeon',
[
setup.trait.bg_healer,
setup.trait.per_nimble,
setup.trait.per_attentive,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.per_brave,
setup.trait.per_cruel,
setup.trait.per_masochistic,
setup.trait.per_tough,
setup.trait.per_dreamy,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qs.job_slaver, setup.qres.Trait(setup.trait.magic_water,
setup.trait.magic_water_master)
],
{
arcane: 1.5,
aid: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'surgery_assistant',
'Assistant Surgeon',
[
setup.trait.bg_apprentice,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.per_submissive,
],
[
setup.trait.per_masochistic,
setup.trait.per_aggressive,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qs.job_slaver
],
{
arcane: 1.5,
aid: 1.5,
}
)>><<run new setup.UnitCriteria(
'hunter', /* key */
'Hunter', /* title */
[
setup.trait.bg_hunter,
setup.trait.per_attentive,
setup.trait.per_calm,
setup.trait.per_stubborn,
setup.trait.per_nimble,
setup.trait.skill_animal,
], /* critical traits */
[
setup.trait.per_dreamy,
setup.trait.per_curious,
setup.trait.per_aggressive,
setup.trait.per_lunatic,
setup.trait.per_tough,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
survival: 2.0,
combat: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'trapper', /* key */
'Trapper', /* title */
[
setup.trait.bg_woodsman,
setup.trait.per_calm,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_animal,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_serious,
setup.trait.per_stubborn,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
survival: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scavenger', /* key */
'Scavenger', /* title */
[
setup.trait.per_aggressive,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.per_dreamy,
setup.trait.per_calm,
setup.trait.per_lunatic,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
survival: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'spotter', /* key */
'Spotter', /* title */
[
setup.trait.eyes_neko,
setup.trait.eyes_dragonkin,
setup.trait.per_attentive,
setup.trait.per_aggressive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.per_dreamy,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_sexaddict,
setup.trait.per_calm,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
survival: 3.0,
}
)>><<run new setup.UnitCriteria(
'training_head',
'Head Slave Trainer',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.per_dominant,
setup.trait.per_cruel,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.bg_slave,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.per_kind,
],
[setup.qs.job_slaver],
{
slaving: 1.5,
knowledge: 1.0,
social: 0.5,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_nosex',
'Slave Trainer (No sex)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.per_dominant,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_submissive,
setup.trait.per_honorable,
],
[setup.qs.job_slaver],
{
slaving: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_dick_normal',
'Slave Trainer (Dick)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.dick_small,
setup.trait.dick_medium,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.per_dominant,
],
[
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.dick_tiny,
setup.trait.dick_titanic,
],
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.eq_chastity),
],
{
slaving: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_dick_master',
'Slave Trainer+ (Dick)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.per_dominant,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_huge,
setup.trait.balls_titanic,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_masochistic,
],
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.eq_chastity),
],
{
slaving: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_sex',
'Slave Trainer (Sex)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_dominant,
],
[
setup.trait.bg_slave,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_masochistic,
],
[
setup.qs.job_slaver,
],
{
slaving: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_masochist',
'Slave Trainer (Masochist)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_dominant,
setup.trait.per_cruel,
],
[
setup.trait.bg_slave,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_masochistic,
],
[
setup.qs.job_slaver,
],
{
slaving: 1.0,
brawn: 1.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_mindbreak',
'Slave Trainer (Mindbreaker)',
[
setup.trait.bg_slaver,
setup.trait.bg_demon,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.per_dominant,
setup.trait.per_cruel,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_slave,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_humble,
setup.trait.per_empath,
setup.trait.per_masochistic,
],
[
setup.qs.job_slaver,
],
{
slaving: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'training_slave',
'Slave',
[
setup.trait.per_submissive,
setup.trait.training_obedience_master,
],
[
setup.trait.per_dominant,
setup.trait.per_masochistic,
],
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master),
],
{}
)>>
<<run new setup.UnitCriteria(
'trainee',
'Trainee',
[
setup.trait.per_studious,
setup.trait.per_active,
setup.trait.per_submissive,
setup.trait.per_calm,
],
[
setup.trait.per_aggressive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
],
[setup.qs.job_slaver],
{
brawn: 1.0,
knowledge: 1.0,
sex: 1.0,
}
)>><div>
<<devtoolreturnbutton>>
</div>
<div>
<<successtext 'Actor name'>>:
<<message '(?)'>>
Actor name. Don't forget to fill this in!
<br/>
<br/>
Name should be entirely consist of lowercase characters, numbers, all without space.
For example, 'bigdick'.
<</message>>
<<textbox '$qactorname' '' autofocus>>
</div>
Choose unit group:
<<link '(Create new from scratch)' 'UnitGroupGen'>>
<<set _baseunitgroup = null>>
<<include 'UGGenInit'>>
<</link>>
<br/>
<<set _customkeys = {}>>
<<for _iunitgroup, _unitgroup range $qcustomunitgroup>>
<<set _customkeys[_unitgroup.key] = true>>
<</for>>
<<set _ugall = []>>
<<for _iug, _ug range setup.unitgroup>>
<<if !(_ug.key in _customkeys)>>
<<run _ugall.push(_ug)>>
<</if>>
<</for>>
<<set _uglist = [
['Unit groups you made...', {ug: $qcustomunitgroup}],
['Units on location...', [
['All locations...', {ug: _ugall.filter(a => a.key.startsWith('all'))}],
['Vale...', {ug: _ugall.filter(a => a.key.startsWith('vale'))}],
['Forest...', {ug: _ugall.filter(a => a.key.startsWith('forest'))}],
['City...', {ug: _ugall.filter(a => a.key.startsWith('city'))}],
['Desert...', {ug: _ugall.filter(a => a.key.startsWith('desert'))}],
['Sea...', {ug: _ugall.filter(a => a.key.startsWith('sea'))}],
]],
['Units of certain race...', [
['Human (vale)...', {ug: _ugall.filter(a => a.key.startsWith('humanvale'))}],
['Human (kingdom)...', {ug: _ugall.filter(a => a.key.startsWith('humankingdom'))}],
['Human (desert)...', {ug: _ugall.filter(a => a.key.startsWith('humandesert'))}],
['Human (sea)...', {ug: _ugall.filter(a => a.key.startsWith('humansea'))}],
['Werewolf...', {ug: _ugall.filter(a => a.key.startsWith('werewolf'))}],
['Neko...', {ug: _ugall.filter(a => a.key.startsWith('neko'))}],
['Elf...', {ug: _ugall.filter(a => a.key.startsWith('elf'))}],
['Orc...', {ug: _ugall.filter(a => a.key.startsWith('orc'))}],
['Dragonkin...', {ug: _ugall.filter(a => a.key.startsWith('dragonkin'))}],
['Demon...', {ug: _ugall.filter(a => a.key.startsWith('demon'))}],
]],
['Persistent unit groups...', {ug: _ugall.filter(a => !(a.key in _customkeys) && a.reuse_chance)}],
['Quest-specific unit groups...', {ug: _ugall.filter(a => !(a.key in _customkeys) && a.key.startsWith('quest_'))}],
]>>
<<focwidget 'DisplayUnitGroup'>>
<<message $args[0]>>
<div class='slavercard'>
<<for _iunitgroup, _unitgroup range $args[1]>>
<<set _customkeys[_unitgroup.key] = true>>
<<set _text = `Select ${_unitgroup.getName()} (${_unitgroup.key})`>>
<<capture _unitgroup>>
<<link _text>>
<<devroleaddunitgroup $qactorname _unitgroup>>
<</link>>
or
<<link '(New based on this)' 'UnitGroupGen'>>
<<set _baseunitgroup = _unitgroup>>
<<include 'UGGenInit'>>
<</link>>
<</capture>>
<<capture _unitgroup>>
<<message '(+)'>>
<<unitgroupcard _unitgroup>>
<</message>>
<</capture>>
<br/>
<</for>>
</div>
<</message>>
<</focwidget>>
<<for _iuglist, _uglisten range _uglist>>
<<if !Array.isArray(_uglisten[1])>>
<<if _uglisten[1].ug.length>>
<<DisplayUnitGroup _uglisten[0] _uglisten[1].ug>>
<br/>
<</if>>
<<else>>
<<capture _uglisten>>
<<message _uglisten[0]>>
<div class='marketobjectcard'>
<<for _iuglistdeep, _uglistdeep range _uglisten[1]>>
<<DisplayUnitGroup _uglistdeep[0] _uglistdeep[1].ug>>
<br/>
<</for>>
</div>
<</message>>
<</capture>>
<br/>
<</if>>
<</for>><<devtoolreturnbutton>>
<p>
Choose addon to add:
<<message '(Need something else?)'>>
If you need some other addon, please drop a message in the subreddit.
<</message>>
</p>
<<message 'Add random critical, disaster, and must-have traits...'>>
[[The traits must match exactly|AddonTraitsRandomExact]]
<<message '(?)'>>
E.g., a unit with <<rep setup.trait.muscle_verystrong>> will not count for <<rep setup.trait.muscle_strong>>.
Use the other option if you want stronger traits to match weaker ones.
(The strength is the upper-left number).
<</message>>
<br/>
[[Stronger counts for weaker traits|AddonTraitsRandom]]
<<message '(?)'>>
E.g., <<rep setup.trait.muscle_veryweak>> counts for
<<rep setup.trait.muscle_weak>>, and <<rep setup.trait.dick_large>> counts for
<<rep setup.trait.dick_tiny>>.
(The strength is the upper-left number).
Use the exact match option if you only want the traits to match exactly.
<</message>>
<</message>>
<br/>
[[Must have a random gender|AddonRequireGenderRandomSlave]]
<<message '(?)'>>
Will try to follow the player's slave preferences.
E.g., if the preferences is 75% male slave, then 75% of the time will require
male slave.
<</message>>Adds
<<numberbox "_crit" 0>>
critical traits,
<<numberbox "_disaster" 0>>
disaster traits,
and
<<numberbox "_restriction" 0>>
must-have traits from the following traits.
The traits are inexact: e.g., <<rep setup.trait.muscle_veryweak>> counts for
<<rep setup.trait.muscle_weak>>, and <<rep setup.trait.dick_large>> counts for
<<rep setup.trait.dick_tiny>>.
<<message '(?)'>>
A must-have trait will be translated to unit requirement.
The traits will not overlap. For example, if a trait is chosen as a critical trait, it will not be
chosen as a disaster trait or must-have.
<</message>>
<<link '(Done)'>>
<<if _crit + _disaster + _restriction > _chosentraits.length>>
<<warning 'Not enough traits chosen! Must have at least equal to number of critical traits plus number of disaster traits'>>
<<else>>
<<run $soaddons.push(setup.SlaveOrderAddon.TraitsRandom(_chosentraits, _crit, _disaster, _restriction))>>
<<goto 'SlaveOrderGen'>>
<</if>>
<</link>>
<<include 'ChooseTraits'>>Adds
<<numberbox "_crit" 0>>
critical traits,
<<numberbox "_disaster" 0>>
disaster traits,
and
<<numberbox "_restriction" 0>>
must-have traits from the following traits:
The traits must match exactly.
<<message '(?)'>>
A must-have trait will be translated to unit requirement.
The traits will not overlap. For example, if a trait is chosen as a critical trait, it will not be
chosen as a disaster trait or must-have.
<</message>>
<<link '(Done)'>>
<<if _crit + _disaster + _restriction > _chosentraits.length>>
<<warning 'Not enough traits chosen! Must have at least equal to number of critical traits plus number of disaster traits'>>
<<else>>
<<run $soaddons.push(setup.SlaveOrderAddon.TraitsRandomExact(_chosentraits, _crit, _disaster, _restriction))>>
<<goto 'SlaveOrderGen'>>
<</if>>
<</link>>
<<include 'ChooseTraits'>><<run $soaddons.push(setup.SlaveOrderAddon.RequireGenderRandom(setup.job.slave))>>
<<gotowipehistory 'SlaveOrderGen'>><!-- Used for tooltips for macro info -->
<<focwidget 'devmacroinfo'>>
<<set _macroname = $args[0]>>
<<set _meta = setup.getMacroMetadata(_macroname)>>
<header style="margin: 6px 0; padding-left: 4px">
<<set _aliases = setup.getMacroAliases(_macroname).join(' / ')>>
<b><<= _aliases >></b>
<small>(macro)</small>
</header>
<<if _meta>>
<<= _meta.info >>
<<if _meta.args>>
<<set _overloads = Array.isArray(_meta.args[0]) ? _meta.args : [_meta.args]>>
<hr/>
<<for _ioverload, _overload range _overloads>>
<div>
Parameters:
<span class="language-twee3">
<span class="token macro"><<<<= _macroname>> <b class="token macro-inner"><<= _overload.join(' ')>></b>>></span>
</span>
</div>
<</for>>
<</if>>
<<elseif _meta === null>>
This macro is for internal use only
<<else>>
No info available
<</if>>
<</focwidget>>
<<focwidget 'devcodeeditorpreview'>>
<<set _devpreviewvalue = $args[0]>>
<<set _devpreviewvar = $args[1]>>
<<switch $devtooltype>>
<<case 'quest'>>
<<include 'CodeEditorPreviewQuest'>>
<<case 'event'>>
<<include 'CodeEditorPreviewEvent'>>
<<case 'opportunity'>>
<<include 'CodeEditorPreviewOpportunity'>>
<<case 'interaction'>>
<<include 'CodeEditorPreviewInteraction'>>
<<default>>
[Preview not supported for this content]
<</switch>>
<</focwidget>><aside>
<<set _actors = setup.DevToolHelper.getActors()>>
Actors:
<<link '(reset)'>>
<<unset $compiledquest>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
<div class="indented">
<<for _iactor, _actor range _actors>>
<div>
_actor[0]: <<rep setup.evalJsPath(_actor[1])>>
<<capture _actor>>
<<link '(edit)'>>'
<<set $gUnit_key = setup.evalJsPath(_actor[1]).key>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<focgoto 'UnitDebugDo'>>
<</link>>
<<if _actor[0] != 'Player'>>
<<link '(replace)'>>
<<set $dtEditActor = _actor[0]>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<focgoto 'CodeEditorReplaceUnit'>>
<</link>>
<</if>>
<</capture>>
</div>
<</for>>
</div>
</aside><div>
<<link '(Cancel)'>>
<<unset $dtEditActor>>
<<devgotoreturn>>
<</link>>
</div>
<<focwidget 'rostershowaction'>>
<<link '(Select)'>>
<<if $dtEditActor == 'Target'>>
<<set $compiledquest.unit_key = $args[0].key>>
<<else>>
<<set $compiledquest.actor_unit_key_map[$dtEditActor] = $args[0].key>>
<</if>>
<<unset $dtEditActor>>
<<devgotoreturn>>
<</link>>
<</focwidget>>
<<set _unitlist = $company.player.getUnits()>>
<<rostershow _unitlist>><<if !$compiledquest>>
<<set setup.interaction[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<questvarload $compiledquest>>
<<include 'CodeEditorPreviewContextDetails'>>
<div>
<<= setup.DevToolHelper.debugDevToolTwine(_devpreviewvalue) >>
</div><<if !$compiledquest>>
<<set setup.opportunitytemplate[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<questvarload $compiledquest>>
<<include 'CodeEditorPreviewContextDetails'>>
<div>
<<= setup.DevToolHelper.debugDevToolTwine(_devpreviewvalue) >>
</div><<if !$compiledquest>>
<<set setup.event[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<questvarload $compiledquest>>
<<include 'CodeEditorPreviewContextDetails'>>
<div>
<<= setup.DevToolHelper.debugDevToolTwine(_devpreviewvalue) >>
</div><<set _outcome = 'crit'>>
<<switch _devpreviewvar>>
<<case '$qoutcomedesc[1]'>>
<<set _outcome = 'success'>>
<<case '$qoutcomedesc[2]'>>
<<set _outcome = 'failure'>>
<<case '$qoutcomedesc[3]'>>
<<set _outcome = 'disaster'>>
<</switch>>
/* TODO: creating a quest will create their users and quest instances.
These needs to be destroyed too, otherwise will fill variables with garbage. */
<<if !$compiledquest>>
<<set setup.questtemplate[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeFilledInstance(_outcome)>>
<</if>>
<<run $notification.popAll()>>
<<questvarload $compiledquest>>
<<include 'CodeEditorPreviewContextDetails'>>
<div>
<<= setup.DevToolHelper.debugDevToolTwine(_devpreviewvalue) >>
</div>Adds a free random equipment from an equipment pool:
<<for _ieqpool, _eqpool range setup.equipmentpool>>
<<capture _eqpool>>
<br/>
<<rep _eqpool>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.Equipment(_eqpool)>>
<</link>>
<</capture>>
<</for>>Gain a free equipment:
<<for _ieq, _eq range setup.equipment>>
<<capture _eq>>
<br/>
<<rep _eq>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.EquipmentDirect(_eq)>>
<</link>>
<</capture>>
<</for>>Schedule the following event to trigger in
<<numberbox '_weeks' 0>> weeks.
<<message '(?)'>>
Put 0 if you want the event to trigger in the same week.
<</message>>
<br/>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'QGCostDone'>>
<<set $qcost = setup.qc.Event(_event, _weeks)>>
<</link>>
<br/>
<</capture>>
<</for>>If the following event was scheduled, unschedule it.
<br/>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'QGCostDone'>>
<<set $qcost = setup.qc.UnscheduleEvent(_event, _weeks)>>
<</link>>
<br/>
<</capture>>
<</for>><div>
First, choose the event
that you want to trigger in
<<numberbox '_weeks' 0>> weeks.
<<message '(?)'>>
Put 0 if you want the event to trigger in the same week.
<</message>>
</div>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'CostEventRolesImplement'>>
<<set $qeventchosenweeks = _weeks>>
<<set $qeventchosen = _event>>
<</link>>
<br/>
<</capture>>
<</for>><p>
Select the roles in <<rep $qeventchosen>> that you want to assign with roles
in the current thing you are making:
</p>
<p>
<<devquestroles $qeventchosen>>
</p>
<<link '(Done)' 'QGCostDone'>>
<<set $qcost = setup.qc.Event($qeventchosen, $qeventchosenweeks, setup.deepCopy($qdevquestroles))>>
<<unset $qdevquestroles>>
<</link>><p>Adds exp. Use 0 or POSITIVE to add exp, and NEGATIVE to substract exp.
If this is a quest cost, use a NEGATIVE number. If this is a reward, use either POSITIVE
or 0. 0 will default to automatically adjust the reward based on the quest length.</p>
Multiplier: <<numberbox '_expmulti' 0>>
<<link 'Add cost' 'QGCostDone'>>
<<ExpDone>>
<</link>><<focwidget 'ExpDone'>>
<<set $qcost = setup.qc.ExpNormal(_expmulti)>>
<</focwidget>>
<<include 'CostExpCommon'>><<focwidget 'ExpDone'>>
<<set $qcost = setup.qc.ExpCrit(_expmulti)>>
<</focwidget>>
<<include 'CostExpCommon'>><<for _icompany, _company range $company>>
<<capture _company>>
<<if _company != $company.player && _company != $company.independent>>
<br/>
<<rep _company>>
<<link '(select this)' 'QGCostDone'>>
<<costrelationshipwidget>>
<</link>>
<</if>>
<</capture>>
<</for>><<focwidget 'costrelationshipwidget'>>
<<set $qcost = setup.qc.Favor(_company, _favor)>>
<</focwidget>>
Gain <<numberbox '_favor' 200>> favor with:
<<message '(?)'>>
Insert this as 10 times the amount displayed in game.
For example, to add 20.5 favor, put 205.
Maximum favor is <<= setup.FAVOR_MAX >>.
5.0 favor is worth <<money 1000>>.
<</message>>
<<include 'CostFavorChoose'>><<focwidget 'costrelationshipwidget'>>
<<set $qcost = setup.qc.Favor(_company, -_favor)>>
<</focwidget>>
Lose <<numberbox '_favor' 200>> favor with:
<<message '(?)'>>
Insert this as 10 times the amount displayed in game.
For example, to lose 20.5 favor, put 205.
Maximum favor is <<= setup.FAVOR_MAX >>
5.0 favor is worth <<money 1000>>.
<</message>>
<<include 'CostFavorChoose'>><<focwidget 'costrelationshipwidget'>>
<<set $qcost = setup.qc.Ire(_company, _ire)>>
<</focwidget>>
Gain <<numberbox '_ire' 1>> ire with:
<<message '(?)'>>
1 ire is worth <<money 500>>. When ire reaches 20,
something bad will happen to the company.
<</message>>
<<include 'CostFavorChoose'>><<focwidget 'costrelationshipwidget'>>
<<set $qcost = setup.qc.Ire(_company, -_ire)>>
<</focwidget>>
Lose <<numberbox '_ire' 20>> ire with:
<<message '(?)'>>
1 ire is worth <<money 500>>. When ire reaches 20,
something bad will happen to the company.
<</message>>
<<include 'CostFavorChoose'>>Gain an item:
<<for _iitem, _item range setup.item>>
<<capture _item>>
<br/>
<<rep _item>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.Item(_item)>>
<</link>>
<</capture>>
<</for>>Lose <<numberbox '_lostnumber' 1>> copies of:
<<for _iitem, _item range setup.item>>
<<capture _item>>
<br/>
<<rep _item>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.LoseItem(_item, _lostnumber)>>
<</link>>
<</capture>>
<</for>>Gain an item from an item pool:
<<for _iitem, _item range setup.itempool>>
<<capture _item>>
<br/>
<<rep _item>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.ItemPool(_item)>>
<</link>>
<</capture>>
<</for>><<set _moneymulti = 0>>
<<MoneyDone>>
<<gotowipehistory 'QGCostDone'>><<focwidget 'MoneyDone'>>
<<set $qcost = setup.qc.MoneyNormal(_moneymulti)>>
<</focwidget>>
<<include 'CostMoneyCommon'>><<focwidget 'MoneyDone'>>
<<set $qcost = setup.qc.MoneyCrit(_moneymulti)>>
<</focwidget>>
<<include 'CostMoneyCommon'>><<focwidget 'MoneyDone'>>
<<set $qcost = setup.qc.MoneySmall(_moneymulti)>>
<</focwidget>>
<<include 'CostMoneyCommon'>><p>
Gain
<<numberbox '_money' 1500>>
money.<<message '(?)'>>This is the amount of money that the quest should give on
a Lv. 40 quest. The amount will be scaled down automatically if the quest level is lower.<</message>>
</p>
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.MoneyCustom(_money)>>
<</link>><p>
Lose
<<numberbox '_money' 1500>>
money.<<message '(?)'>>This is the amount of money that the quest should take on
a Lv. 40 quest. The amount will be scaled down automatically if the quest level is lower.<</message>>
</p>
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.MoneyLoseCustom(_money)>>
<</link>><p>
Gain a FIXED amount of money:
<<numberbox '_money' 1500>>g.
<<message '(?)'>>
Unlike all other money options, this amount will not be scaled depending on the level.
<</message>>
</p>
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.Money(_money)>>
<</link>><p>
Lose a FIXED amount of money:
<<numberbox '_money' 1500>>g.
<<message '(?)'>>
Unlike all other money options, this amount will not be scaled depending on the level.
<</message>>
</p>
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.Money(-_money)>>
<</link>>Gain the following chosen opportunity.
<br/>
<<devchooseopportunity 'CostOpportunityDo'>><<set $qcost = setup.qc.Opportunity(_opportunitychosen)>>
<<gotowipehistory 'QGCostDone'>><div>
First, choose the opportunity:
</div>
<<devchooseopportunity 'CostOpportunityRolesDo'>><<set $qopportunitychosen = _opportunitychosen>>
<<gotowipehistory 'CostOpportunityRolesImplement'>><p>
Select the roles in <<rep $qopportunitychosen>> that you want to assign with roles
in the current thing you are making:
</p>
<p>
<<devquestroles $qopportunitychosen>>
</p>
<<link '(Done)' 'QGCostDone'>>
<<set $qcost = setup.qc.Opportunity($qopportunitychosen, setup.deepCopy($qdevquestroles))>>
<<unset $qdevquestroles>>
<</link>><p>Adds or substract prestige. Use 0 or POSITIVE to add money, and NEGATIVE to substract money.
If this is a quest cost, use a NEGATIVE number.</p>
Prestige: <<numberbox '_prestige' 1>>
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.Prestige(_prestige)>>
<</link>>Gain <<numberbox '_quantity' 1>> quests from a questpool:
<<for _iquestpool, _questpool range setup.questpool>>
<<capture _questpool>>
<br/>
<<rep _questpool>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.QuestDelay(_questpool, _quantity)>>
<</link>>
<</capture>>
<</for>>Gain the following chosen quest.
<br/>
<<devchoosequest 'CostQuestDirectDo'>><<set $qcost = setup.qc.QuestDirect(_questchosen)>>
<<gotowipehistory 'QGCostDone'>>First, choose the quest:
<<devchoosequest 'CostQuestDirectRolesDo'>><<set $qquestchosen = _questchosen>>
<<gotowipehistory 'CostQuestDirectRolesImplement'>><p>
Select the roles in <<rep $qquestchosen>> that you want to assign with roles
in the current thing you are making:
</p>
<p>
<<devquestroles $qquestchosen>>
</p>
<<link '(Done)' 'QGCostDone'>>
<<set $qcost = setup.qc.QuestDirect($qquestchosen, setup.deepCopy($qdevquestroles))>>
<<unset $qdevquestroles>>
<</link>>First, choose the quest:
<<devchoosequest 'CostQuestDirectForceAssignDo'>><<set $qquestchosen = _questchosen>>
<<gotowipehistory 'CostQuestDirectForceAssignImplement'>><p>
Match the roles in <<rep $qquestchosen>> that you want to assign with units going on in this quest.
Note that all roles must be matched.
</p>
<p>
<<devquestroles $qquestchosen>>
</p>
<<link '(Done)'>>
/* sanity checks */
<<set _error = setup.qcImpl.QuestDirectForceAssign.sanityCheckDevTool($qquestchosen, $qdevquestroles)>>
<<if _error>>
<<warning _error>>
<<else>>
<<set $qcost = setup.qc.QuestDirectForceAssign($qquestchosen, setup.deepCopy($qdevquestroles))>>
<<unset $qdevquestroles>>
<<goto 'QGCostDone'>>
<</if>>
<</link>><<set $qcost = setup.qc.DoAll([])>>
<<gotowipehistory 'QGCostDone'>><<if _entry.probability !== undefined>>
<b>Do all of the following with <<= (_entry.probability * 100).toFixed(1)>>% chance:</b>
<<else>>
<b>Do all of the following:</b>
<</if>><p>
Do all of the following with probability: <<numberbox "_probability" 50>>%
<<message '(?)'>>
Put a percentage. For example, 50, which means these will be executed half of the time.
<</message>>:
</p>
<<link '(Continue)' 'QGCostDone'>>
<<set $qcost = setup.qc.DoAll([], _probability / 100)>>
<</link>><<set $qcost = setup.qc.IfThenElse(setup.qres.Never('Never'), setup.qc.DoAll([]), setup.qc.DoAll([]))>>
<<gotowipehistory 'QGCostDone'>><b>If</b><b>Then:</b>
<<message '(?)'>>
What happens if the condition is satisfied?
<</message>><b>Else:</b>
<<message '(?)'>>
What happens if the condition is not satisfied?
<</message>><<set $qcost = setup.qc.OneRandom([])>>
<<gotowipehistory 'QGCostDone'>><b>A random effect out of:</b><p>
Choose a slave order to gain:
<<link '(Create new slave order)' 'SlaveOrderGen'>>
<<set _sobaserole = null>>
<<include 'SOGenInit'>>
<</link>>
</p>
<<for _islaveorder, _slaveorder range $qcustomslaveorder>>
<<capture _slaveorder>>
<<= _slaveorder.explain()>>
<<link '(Choose this)' 'QGCostDone'>>
<<set $qcost = _slaveorder>>
<</link>>
<<link '(Create new slave order based on this)' 'SlaveOrderGen'>>
<<set _sobaserole = _slaveorder>>
<<include 'SOGenInit'>>
<</link>>
<br/>
<</capture>>
<</for>>
<br/>
<br/>
<<devtoolreturnbutton>><<include LoadSelectTrait>>
<<include CostTraitActorCommon>>
<<selecttrait 'CostBgTraitResetDo' setup.TraitHelper.getAllTraitsOfTags(['bg'])>><<set $qcost = setup.qc.BgTraitReset($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><p>
<<dangertext 'No eligible actor.'>>
Please ensure you have at least one eligible actor for this option.
You can try adding more roles, or adding a new actor to the quest / opportunity / event.
</p>
[[Return|$gPrevious]]<p>
<<devactordefault>> becomes a bodyshifter, with
<<devactor '$qgDefaultActorName2'>> as its other body.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.SetBodyshifter($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> bodyshifts.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Bodyshift($qgDefaultActorName)>>
<</link>><p>
<<devactordefault>> swap bodies with
<<devactor '$qgDefaultActorName2'>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Bodyswap($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
Randomly corrupt <<devactordefault>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Corrupt($qgDefaultActorName)>>
<</link>><p>
<<devactordefault>> becomes siblings with
<<devactor '$qgDefaultActorName2'>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Sibling($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> becomes twins with
<<devactor '$qgDefaultActorName2'>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Twin($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> becomes the parent of
<<devactor '$qgDefaultActorName2'>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Parent($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> gains <<numberbox '_friendship_amt' 1>> friendship with
<<devactor '$qgDefaultActorName2'>>
<<message '(?)'>>
Put a negative number if you want them to gain rivalry instead.
Note that this number is 10 times larger than displayed in game. So, if it's displayed
as 47.2 in game, that actually means it's 472. Maximum friendship is 1000, minimum is -1000.
<</message>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Friendship($qgDefaultActorName, $qgDefaultActorName2, _friendship_amt)>>
<</link>><p>
<<devactordefault>> gains <<numberbox '_friendship_amt' 1>> friendship with you.
<<message '(?)'>>
Put a negative number if you want them to gain rivalry instead.
Note that this number is 10 times larger than displayed in game. So, if it's displayed
as 47.2 in game, that actually means it's 472. Maximum friendship is 1000, minimum is -1000.
<</message>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.FriendshipWithYou($qgDefaultActorName, _friendship_amt)>>
<</link>><p>
<<devactordefault>> becomes lovers with
<<devactor '$qgDefaultActorName2'>>
<<message '(?)'>>
<div class='helpcard'>
If they had other lovers previously, they will break up first.
</div>
<</message>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Hookup($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> breaks up with
<<devactor '$qgDefaultActorName2'>>
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Breakup($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
<<devactordefault>> breaks up with you
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.BreakupWithYou($qgDefaultActorName)>>
<</link>><p>
<<devactordefault>> hooks up with you
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.HookupWithYou($qgDefaultActorName)>>
<</link>>Give <<devactordefault>> a history record:
Actor <<textbox '_history' 'kills a demon lord.'>>
<<message '(?)'>>
The game will automatically record history for important moments,
e.g., when a slaver leave the company or when a unit gains a new trait.
However, you can use this to add extra flavorful things, e.g.,
if a unit got possessed.
<</message>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddHistory($qgDefaultActorName, _history)>>
<</link>><<devactordefault>> is injured for <<numberbox '_injuryamt' 1>> weeks.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Injury($qgDefaultActorName, _injuryamt)>>
<</link>><<devactordefault>> is healed by <<numberbox '_healamt' 1>> weeks.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Heal($qgDefaultActorName, _healamt)>>
<</link>><div>
Unit
<<textbox '_leavereason' 'is training to become a great warrior'>>.
<<message '(?)'>>
<div class='helpcard'>
Complete the sentence describing the reason for being on leave.
Don't put a period at the end.
</div>
<</message>>
</div><p>
<<devactordefault>> will be on leave from your company
for <<numberbox "_weeks" 1>> weeks.
The reason is as follows.
</p>
<<include 'CostLeaveReason'>>
<br/>
<div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Leave($qgDefaultActorName, _leavereason, _weeks)>>
<</link>>
</div><p>
<<devactordefault>> will be on leave from your company for an indefinite number of weeks.
The reason is as follows.
</p>
<<include 'CostLeaveReason'>>
<br/>
<div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Leave($qgDefaultActorName, _leavereason)>>
<</link>>
</div><p>
<<devactordefault>> will return to your company from their leave.
</p>
<div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Return($qgDefaultActorName)>>
<</link>>
</div>Unit <<devactordefault>> gains a level.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.levelUp($qgDefaultActorName)>>
<</link>><p>
Unit <<devactordefault>> will be gone from your company,
but can be rescued one day.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnit($qgDefaultActorName)>>
<</link>><p>
Unit <<devactordefault>> will be gone from your company
<<dangertext 'forever'>> with no chance of being rescued.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitForever($qgDefaultActorName)>>
<</link>><p>
Unit <<devactordefault>> will be gone from your company, but can be
<<successtext 'rebought'>> immediately.
The price is
<<numberbox '_multiplier' 1.0>> times their value.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRebuy($qgDefaultActorName, _multiplier)>>
<</link>><p>
Unit <<devactordefault>> will switch their job.
<<message '(?)'>>
A slaver becomes a slave available in the slave pens,
while a slave becomes a slaver available in the prospects hall.
<</message>>
Replace their flavor text background with:
The slave <<textbox '_background' 'was'>>.
For example, you can write "was a slave corrupted into a slaver".
(Leave blank to keep old flavor text.)
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitOpposite($qgDefaultActorName, _background)>>
<</link>><p>
Unit <<devactordefault>> will attempt an escape. A quest will then be generated
which must be done in order to recapture the slave.
For this one, the quest will be <<successtext 'easy'>>, with level around 15-30.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'escapeeasy')>>
<</link>><p>
Unit <<devactordefault>> will attempt an escape. A quest will then be generated
which must be done in order to recapture the slave.
For this one, the quest will be medium difficulty, with level around 35-50.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'escapemedium')>>
<</link>><p>
Unit <<devactordefault>> will attempt an escape. A quest will then be generated
which must be done in order to recapture the slave.
For this one, the quest will be <<dangertext 'hard'>>, with level 50-70.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'escapehard')>>
<</link>><p>
Slaver <<devactordefault>> will be captured, but immediately rescue-able with a quest.
For this one, the quest will be <<successtext 'easy'>>, with level around 15-30.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'capturedeasy')>>
<</link>><p>
Slaver <<devactordefault>> will be captured, but immediately rescue-able with a quest.
For this one, the quest will be medium difficulty, with level around 35-50.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'capturedmedium')>>
<</link>><p>
Slaver <<devactordefault>> will be captured, but immediately rescue-able with a quest.
For this one, the quest will be <<dangertext 'hard'>>, with level 50-70.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MissingUnitRecapture($qgDefaultActorName, 'capturedhard')>>
<</link>>Gain money equal to <<devactordefault>>'s value multiplied by
<<numberbox '_multiplier' 0.5>>, and capped at <<numberbox '_cap' 10000>>g.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.MoneyUnitValue($qgDefaultActorName, _multiplier, _cap)>>
<</link>>Give <<devactordefault>> the nickname: <<textbox '_nickname' ''>>.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Nickname($qgDefaultActorName, _nickname)>>
<</link>><<include LoadSelectTrait>>
Change <<devactordefault>>'s name to a generated one based on:
<<message '(?)'>>
The game will generate a name based on their traits. In particular, race
and gender are the two most important traits that will determine the name.
So here, if you want to replace a unit's name with a demon name, put the demon race in
and don't put any gender --- if the gender is not put, then it will use the unit's original gender.
<</message>>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.GenName($qgDefaultActorName, _rTraits)>>
<</link>>
<<selecttraits setup.trait>><<set $qcost = setup.qc.FreePlayer()>>
<<gotowipehistory 'QGCostDone'>><p>
Randomly purify <<devactordefault>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Purify($qgDefaultActorName)>>
<</link>>Resets the level of <<devactordefault>> to Level 1.
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.ResetLevel($qgDefaultActorName)>>
<</link>><p>
Gain slave: <<devactordefault>> with the following background.
The slave <<textbox '_background' 'was'>>.
For example, you can write "was a farmer".
<br/>
The slave will be <<successtextlite 'free'>> to get.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slave($qgDefaultActorName, _background, _needmoney)>>
<</link>><p>
Gain slave: <<devactordefault>> with the following background.
The slave <<textbox '_background' 'was'>>.
For example, you can write "was a farmer".
<br/>
The slave will need to be <<dangertextlite 'bought'>> to get.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slave($qgDefaultActorName, _background, /* mercenary = */ true)>>
<</link>><<set $qcost = setup.qc.EscapedSlaveRandom()>>
<<include QGCostDone>><<devactordefault>> is marked as a slave, for gender preference.
<<message '(?)'>>
You can use this to mark a certain actor to use slave's gender preferences.
You don't have to use this when the unit is already a possible slave reward,
but you can use this if the unit is just a slave participating in the story.
<</message>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.SlaveMarker($qgDefaultActorName)>>
<</link>><p>
Gain a slaver: <<devactordefault>> with the following background.
The slaver <<textbox '_background' 'was'>>.
For example, you can write "was a hunter".
<br/>
The slaver will offer to join your company for <<successtextlite 'free'>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slaver($qgDefaultActorName, _background)>>
<</link>><p>
Gain a slaver: <<devactordefault>> with the following background.
The slaver <<textbox '_background' 'was'>>.
For example, you can write "was a hunter".
<br/>
The slaver needs to be <<dangertextlite 'paid'>> money to join your company.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slaver($qgDefaultActorName, _background, /* mercenary = */ true)>>
<</link>><<devactordefault>> is marked as a slaver, for gender preference.
<<message '(?)'>>
You can use this to mark a certain actor to use slaver's gender preferences.
You don't have to use this when the unit is already a possible slaver reward,
but you can use this if the unit is just a slaver participating in the story.
<</message>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.SlaverMarker($qgDefaultActorName)>>
<</link>><<message '(?)'>>
Tag acts as a flag that you can set on units.
This can later be checked --- e.g., you can require that a quest
only be generated when you have a unit with a certain flag.
Use this only when you need, and remove the tag when you are done.
Also, consider using titles instead. The difference between titles and tags
is that: title is visible to the user and can have gameplay effects (e.g., increasing skills),
while tags are hidden and has no gameplay effect.
<</message>>Give <<devactordefault>> the tag: <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddTag($qgDefaultActorName, _tag)>>
<</link>>From <<devactordefault>>, remove their tag (if any): <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveTag($qgDefaultActorName, _tag)>>
<</link>>From ALL units, remove tag (if any): <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveTagGlobal(_tag)>>
<</link>><<focwidget 'devtoolchoosetitle'>>
<<link '(Create new title)' 'TRGen'>>
<<set $gTRReturnPassage = passage()>>
<<include 'TRGenInit'>>
<</link>>
<br/>
<br/>
<<for _title range $qcustomtitle>>
<<rep _title>>
<<capture _title>>
<<link '(select this)'>>
<<set _chosentitle = _title>>
<<include $args[0]>>
<</link>>
<</capture>>
<br/>
<</for>>
<<for _title range setup.title>>
<<rep _title>>
<<capture _title>>
<<link '(select this)'>>
<<set _chosentitle = _title>>
<<include $args[0]>>
<</link>>
<</capture>>
<br/>
<</for>>
<</focwidget>>Give <<devactordefault>> the title:
<<devtoolchoosetitle 'CostAddTitleDo'>><<set $qcost = setup.qc.AddTitle($qgDefaultActorName, _chosentitle)>>
<<gotowipehistory 'QGCostDone'>><<devactordefault>> loses the title:
<<devtoolchoosetitle 'CostRemoveTitleDo'>><<set $qcost = setup.qc.RemoveTitle($qgDefaultActorName, _chosentitle)>>
<<gotowipehistory 'QGCostDone'>>From <<dangertextlite 'ALL'>> units, remove the title:
<<devtoolchoosetitle 'CostRemoveTitleGlobalDo'>><<set $qcost = setup.qc.RemoveTitleGlobal(_chosentitle)>>
<<gotowipehistory 'QGCostDone'>><<devactordefault>> gains the following trait:
<br/><<include LoadSelectTrait>>
<<include CostTraitActorCommon>>
<<selecttrait 'CostTraitReplaceDo'>><<set $qcost = setup.qc.TraitReplace($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<<devactordefault>> increases the following trait:
<<message '(?)'>>
(Here, increases means that
the level increase, up to the chosen trait. E.g.,
a unit with muscle_strong will increase to muscle_verystrong, when the chosen
trait is muscle_extremelystrong, while a unit with muscle_weak will have the trait disappear.)
<</message>>
<br/>
<<selecttrait 'CostTraitDo'>><<set $qcost = setup.qc.Trait($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<<devactordefault>> loses the following exact trait, if they have it:
<br/>
<<selecttrait 'CostTraitRemoveDo'>><<set $qcost = setup.qc.TraitRemove($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<<devactordefault>> decreases the following trait up to the given trait:
<<message '(?)'>>
For example, if you choose small_dick, then it will change a unit with large dick into
medium dick, while unit with small dick remain small dick.
<</message>>
<br/>
<<selecttrait 'CostTraitDecreaseDo' setup.TraitHelper.getAllTraitsOfTags(['decreasable'])>><<set $qcost = setup.qc.TraitDecrease($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<<devactordefault>> increases the following trait, if they ALREADY have it:
<<message '(?)'>>
For example, if you choose large_dick, then it will give it a larger dick ONLY
if it already have some sort of dick before.
<</message>>
<br/>
<<selecttrait 'CostTraitIncreaseExistingDo' setup.TraitHelper.getAllTraitsOfTags(['decreasable'])>><<set $qcost = setup.qc.TraitIncreaseExisting($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><p>
Give
<<devactordefault>>
<<dangertext 'all'>> of the following traits (replacing conflicting ones):
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.TraitsReplace($qgDefaultActorName, _chosentraits)>>
<</link>>
</p>
<<include 'ChooseTraits'>><p>
Gives
<<devactordefault>>.
a random trait from:
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['per'])>><<rep _trait>><</for>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddRandomTraitWithTags($qgDefaultActorName, ['per'])>>
<</link>><p>
<<devactordefault>>.
loses a random trait from:
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['per'])>><<rep _trait>><</for>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveRandomTraitWithTag($qgDefaultActorName, 'per')>>
<</link>><p>
Gives
<<devactordefault>>.
a random trait from:
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['skill'])>><<rep _trait>><</for>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddRandomTraitWithTags($qgDefaultActorName, ['skill'])>>
<</link>><p>
<<devactordefault>>.
loses a random trait from:
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['skill'])>><<rep _trait>><</for>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveRandomTraitWithTag($qgDefaultActorName, 'skill')>>
<</link>><p>
Gives
<<devactordefault>>
a random non-demonic bodypart.
(Can give rare ones too like <<= setup.trait.wings_feathery.rep() >>!)
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddRandomBodypart($qgDefaultActorName, false)>>
<</link>><p>
Gives
<<devactordefault>>
a random bodypart (can include demonic ones).
(Can give rare ones too like <<= setup.trait.wings_feathery.rep() >>!)
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddRandomBodypart($qgDefaultActorName, true)>>
<</link>><div>
<<set _guaranteed = false>>
<<checkbox '_guaranteed' false true autocheck>> guaranteed
<<message '(?)'>>
<div class='helpcard'>
If checked, then the unit is guaranteed to get this.
<br/>
<br/>
If checked, then the game will avoid the traits that the unit already have.
Otherwise, it is possible that a trait the unit already have will get selected,
which will result in the unit not gaining any trait.
</div>
<</message>>
</div><p>
Give
<<devactordefault>>
a total of
<<numberbox '_no_of_traits' 1>>
random traits out of the following traits.
The traits are increased,
<<message '(?)'>>
<div class='helpcard'>
For example, if a unit has <<rep setup.trait.muscle_veryweak>> and gained
<<rep setup.trait.muscle_verystrong>>, then the unit will now have
<<rep setup.trait.muscle_weak>>.
If you want to replace instead, use the other version.
</div>
<</message>>
not replaced.
<<include 'CostAddTraitsGuaranteedCheck'>>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddTraitsRandom($qgDefaultActorName, _chosentraits, _no_of_traits, false, _guaranteed)>>
<</link>>
</p>
<<include 'ChooseTraits'>><p>
Give
<<devactordefault>>
a total of
<<numberbox '_no_of_traits' 1>>
random traits out of the following traits.
The traits are <<dangertextlite 'replaced'>>.
<<message '(?)'>>
<div class='helpcard'>
This will first remove any conflicting traits before adding the trait.
</div>
<</message>>
<<include 'CostAddTraitsGuaranteedCheck'>>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.AddTraitsRandom($qgDefaultActorName, _chosentraits, _no_of_traits, true, _guaranteed)>>
<</link>>
</p>
<<include 'ChooseTraits'>><p>
<<devactordefault>>
loses a total of
<<numberbox '_no_of_traits' 1>>
traits out of the following traits.
The traits are decreased,
<<message '(?)'>>
For example, if a unit has <<rep setup.trait.muscle_verystrong>> and loses
it, then it becomes <<rep setup.trait.muscle_strong>>.
If you want to remove it completely instead, use the other version.
<</message>>
not necessarily removed entirely.
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.DecreaseTraitsRandom($qgDefaultActorName, _chosentraits, _no_of_traits, false)>>
<</link>>
</p>
<<include 'ChooseTraits'>><p>
<<devactordefault>>
LOSES a total of
<<numberbox '_no_of_traits' 1>>
random traits out of the following traits.
The traits are <<dangertextlite 'removed'>>.
<<message '(?)'>>
For example, a unit with <<rep setup.trait.muscle_verystrong>> will lost it completely,
instead of becoming <<rep setup.trait.muscle_strong>>.
<</message>>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.DecreaseTraitsRandom($qgDefaultActorName, _chosentraits, _no_of_traits, true)>>
<</link>>
</p>
<<include 'ChooseTraits'>><<include LoadSelectTrait>>
<<devactordefault>> permanently (not purifiable) gain the following trait:
<br/>
<<selecttrait 'CostTraitAndMakeInnateDo' setup.TraitHelper.getAllTraitsOfTags(['skin'])>><<set $qcost = setup.qc.TraitAndMakeInnate($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>>Unit <<devactordefault>> will gain all their current skin traits as their innate traits.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.ResetInnateTraits($qgDefaultActorName)>>
<</link>>Unit <<devactordefault>> will lose a random background.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveRandomTraitWithTag($qgDefaultActorName, 'bg')>>
<</link>>Unit <<devactordefault>> will lose a random personality.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveRandomTraitWithTag($qgDefaultActorName, 'per')>>
<</link>><<include LoadSelectTrait>>
<<devactordefault>> gains the following temporary trait for
<<numberbox '_duration' 5>> weeks:
<br/>
<<selecttrait 'CostTraumaDo' setup.TraitHelper.getAllTraitsOfTags(['temporary'])>><<set $qcost = setup.qc.Trauma($qgDefaultActorName, $rTrait, _duration)>>
<<gotowipehistory 'QGCostDone'>><<devactordefault>> gains a random temporary trauma for
<<numberbox '_duration' 5>> weeks.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.TraumatizeRandom($qgDefaultActorName, _duration)>>
<</link>><<devactordefault>> gains a random temporary boon for
<<numberbox '_duration' 5>> weeks.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.BoonizeRandom($qgDefaultActorName, _duration)>>
<</link>><<devactordefault>> heals
<<numberbox '_duration' 5>> weeks worth of trauma.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.TraumaHeal($qgDefaultActorName, _duration)>>
<</link>><p>
Deletes <<devactordefault>>.
<<message '(?)'>>
Only relevant for unit groups that retain their units.
Will make the unit "gone" from that unit group.
For example, you can make a slaver in the Missing Slaver unit gone,
i.e., no longer rescue-able. Often used in quests with persistent units to make
the persistent unit disappear and replaced with a new one.
<</message>>
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.RemoveFromUnitGroup($qgDefaultActorName)>>
<</link>><p>
Deletes all units from the following unit group:
<<message '(?)'>>
This effectively clears this unit group.
<</message>>
</p>
<<for _iug, _ug range setup.unitgroup>>
<<if _ug.reuse_chance>>
<<rep _ug>>
<<capture _ug>>
<<link '(Select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.EmptyUnitGroup(_ug)>>
<</link>>
<</capture>>
<br/>
<</if>>
<</for>><p>
Adds <<devactordefault>> to the following unit group:
</p>
<<for _iug, _ug range setup.unitgroup>>
<<if _ug.reuse_chance>>
<<rep _ug>>
<<capture _ug>>
<<link '(Select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.AddUnitToUnitGroup($qgDefaultActorName, _ug)>>
<</link>>
<</capture>>
<br/>
<</if>>
<</for>>Set the value of variable <<textbox '_key' ''>> to <<textbox '_value' ''>>
for <<numberbox '_expires' -1>> weeks.
<<message '(?)'>>
If expiration is 0 or negative, then will never expires.
<</message>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.VarSet(_key, _value, _expires)>>
<</link>>Unsets the value of the variable <<textbox '_key' ''>>.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.VarRemove(_key)>>
<</link>>Add into variable <<textbox '_key' ''>> a value of <<numberbox '_value' ''>>
and resets expiration to <<numberbox '_expires' -1>> weeks.
<<message '(?)'>>
If the value did not exist before, it becomes 0.
If expiration is 0 or negative, then will never expires.
<</message>>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.VarAdd(_key, _value, _expires)>>
<</link>>Select from these options:
<hr/>
<div><b>Non-unit related</b></div>
<<if $qCostActualNoUnit>>
<div>
<<message 'Money...'>>
<div class='marketobjectcard'>
<<if $qCostActualNonCost>>
<div>
[['Gain money'|CostMoneyCustom]]
</div>
<</if>>
<div>
[['Lose money'|CostMoneyLoseCustom]]
</div>
<hr/>
<<message 'Advanced...'>>
<div class='slavercard'>
<<if $qCostActualNonCost>>
<div>
[['Gain money (auto, success)'|CostMoneyNormal]]
<<message '(?)'>>A convenience option that gives an automatically computed amount of money
equal to the total rewards that this quest should give on a <<successtext 'critical success'>>,
assuming no other rewards.
<</message>>
</div>
<div>
[['Gain money (auto, crit)'|CostMoneyCrit]]
<<message '(?)'>>A convenience option that gives an automatically computed amount of money
equal to the total rewards that this quest should give on a <<successtextlite 'success'>>,
assuming no other rewards.
<</message>>
</div>
<div>
[["Gain money based on unit's value"|CostMoneyUnitValue]]
<<message '(?)'>>Gain a sum of money equal to a fraction of a slave's value,
up to a certain cap. Use with caution, as slave value can range from 1000g to 40,000g.
Can be useful for quests that whore out your slave.<</message>>
</div>
<</if>>
<<if $qCostActualNonCost>>
<div>
[['Gain money (FIXED)'|CostMoneyCustomFixed]]
<<message '(?)'>>
Gain a fixed amount of money. When using the standard gain money,
the amount of money will be adjusted by difficulty. This one does not get
adjusted by difficulty.
<</message>>
</div>
<</if>>
<div>
[['Lose money (FIXED)'|CostMoneyLoseCustomFixed]]
<<message '(?)'>>
Lose a fixed amount of money. When using the standard gain money,
the amount of money will be adjusted by difficulty. This one does not get
adjusted by difficulty.
<</message>>
</div>
</div>
<</message>>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit>>
<div>
<<message 'Favor / Ire...'>>
<div class='marketobjectcard'>
<div><b>Favor</b></div>
<<if $qCostActualNonCost>>
<div>
[['Gain favor'|CostFavor]]
<<message '(?)'>>
5.0 favor is worth <<money 1000>>
<</message>>
</div>
<</if>>
<div>
[['Lose favor'|CostFavorLose]]
<<message '(?)'>>
5.0 favor is worth <<money 1000>>
<</message>>
</div>
<<if $qCostActualNonCost>>
<hr/>
<div><b>Ire</b></div>
<div>
[['Gain ire'|CostIre]]
<<message '(?)'>>
1 ire is worth <<money 500>>
<</message>>
</div>
<div>
[['Lose ire'|CostIreLose]]
<<message '(?)'>>
1 ire is worth <<money 500>>
<</message>>
</div>
<</if>>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit>>
<div>
<<message 'Item / Equipment...'>>
<div class='marketobjectcard'>
<div><b>Item</b></div>
<<if $qCostActualNonCost>>
<div>
[['Gain an item'|CostItem]]
</div>
<div>
[['Gain a random item'|CostItemPool]]
</div>
<</if>>
<div>
[['Lose an item'|CostLoseItem]]
</div>
<<if $qCostActualNonCost>>
<hr/>
<div><b>Equipment</b></div>
<div>
[['Gain an equipment'|CostEquipmentDirect]]
</div>
<div>
[['Gain a random equipment'|CostEquipment]]
</div>
<</if>>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<div>
<<message 'Quests / Mails / Event / Slave order...'>>
<div class='marketobjectcard'>
<div><b>Quest</b></div>
<div>
[['Gain a quest'|CostQuestDirect]]
</div>
<div>
[['Gain a random quest from pool'|CostQuest]]
</div>
<div>
[['Gain a chained quest'|CostQuestDirectRoles]]
<<message '(?)'>>
<div class='helpcard'>
A chained quest will make some of its actors to be the same actors in this quest.
For example, you can fight the same villain over multiple quests this way.
</div>
<</message>>
</div>
<div>
[['Gain a consecutive quest'|CostQuestDirectForceAssign]]
<<message '(?)'>>
<div class='helpcard'>
A consecutive quest will force the same team to be stuck in a new quest.
This way, you can make a quest with variable length. You can also use
this if you want to tell that your slavers got lost, and is instead stuck
in another quest.
</div>
<</message>>
</div>
<hr/>
<div><b>Opportunity</b></div>
<div>
[['Gain an opportunity'|CostOpportunity]]
</div>
<div>
[['Gained a chained opportunity'|CostOpportunityRoles]]
</div>
<hr/>
<div><b>Event</b></div>
<div>
[['Schedule an event'|CostEvent]]
</div>
<div>
[['Unschedule an event'|CostUnscheduleEvent]]
</div>
<div>
[['Schedule a chained event'|CostEventRoles]]
</div>
<hr/>
<div><b>Slave order</b></div>
<div>
[['Gain a slave order'|CostSlaveOrder]]
</div>
</div>
<</message>>
</div>
<</if>>
<hr/>
<div><b>Gain / Lose unit</b></div>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<div>
<<message 'Gain unit...'>>
<div class='marketobjectcard'>
<div><b>Slaver</b></div>
<div>
[['Gain a slaver'|CostSlaver]]
</div>
<div>
[['Gain a slaver (must be paid)'|CostSlaverMercenary]]
<<message '(?)'>>
Slavers gained via this option will have to be paid a hiring free.
The most promiment user of this reward are recruitment quests, that scouts
for potential recruits. The amount paid will depend on the traits of the slaver.
<</message>>
</div>
<hr/>
<div><b>Slave</b></div>
<div>
[['Gain a slave'|CostSlave]]
</div>
<div>
[['Gain a slave (must be paid)'|CostSlaveMercenary]]
<<message '(?)'>>
Slaves gained via this option will have to be bought with a sum of money equal to their value.
The most promiment user of this reward are quests that browse wares in a slave market.
<</message>>
</div>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<div>
<<message 'Lose unit...'>>
<div class='marketobjectcard'>
<div><b>Slaver</b></div>
<div>
[['Lose a slaver (rescue-able with a Rescuer)'|CostMissingUnit]]
<<message '(?)'>>
This is the standard way to lose slavers.
Slavers lost this way can be rescued later by the Rescuer duty.
<</message>>
</div>
<div>
<<message 'Slaver is captured but immediately rescue-able...'>>
<div class='slavercard'>
<div>
[['Easy (Lv 15 - 30)'|CostMissingUnitRecaptureEasySlaver]]
</div>
<div>
[['Medium (Lv 35 - 50)'|CostMissingUnitRecaptureMediumSlaver]]
</div>
<div>
[['Hard (Lv 50 - 70)'|CostMissingUnitRecaptureHardSlaver]]
</div>
</div>
<</message>>
<<message '(?)'>>
The slaver will went missing, but
a quest will be immediately generated where the slaver can be rescued.
If the quest is ignored, the slaver will disappear forever --- otherwise,
the slaver will be rescued in the quest.
Has three difficulties to choose from.
<</message>>
</div>
<div>
[['Lose a slaver (rebuy-able)'|CostMissingUnitRebuy]]
<<message '(?)'>>
Slavers lost this way are immediately added back to the
prospects hall, and can be rebought at a price.
The price can be adjusted to be high or low.
This is useful for example when your slaver is captured by another slaver and immediately
sold back to you.
<</message>>
</div>
<div>
[['Lose a slaver FOREVER'|CostMissingUnitForever]]
<<message '(?)'>>
Lose a slaver forever. Use extremely sparingly.
<</message>>
</div>
<hr/>
<div><b>Slave</b></div>
<div>
[['Lose a slave (rescue-able with a Rescuer)'|CostMissingUnit]]
<<message '(?)'>>
This is the standard way to lose slaves.
Slaves lost this way can be rescued later by the Rescuer duty.
<</message>>
</div>
<div>
<<message 'Slave escapes but immediately recapture-able...'>>
<div class='slavercard'>
<div>
[['Easy (Lv 15 - 30)'|CostMissingUnitRecaptureEasy]]
</div>
<div>
[['Medium (Lv 35 - 50)'|CostMissingUnitRecaptureMedium]]
</div>
<div>
[['Hard (Lv 50 - 70)'|CostMissingUnitRecaptureHard]]
</div>
</div>
<</message>>
<<message '(?)'>>
A quest will be generated where the slave will attempt an escape.
If the quest is ignored, the slave will disappear forever --- otherwise,
the slave will be recaptured in the quest.
Has three difficulties to choose from.
<</message>>
</div>
<div>
[['Lose a slave (rebuy-able immediately)'|CostMissingUnitRebuy]]
<<message '(?)'>>
Lose a slave.
Slaves lost this way are immediately added back to the
slaves pen, and can be rebought at a price.
The price can be adjusted.
This is useful for example when your slave is captured by another slaver and immediately
sold to you.
<</message>>
</div>
<div>
[['Lose a slave FOREVER'|CostMissingUnitForever]]
<<message '(?)'>>
Lose a slave forever.
Primarily used when you sell a slave.
<</message>>
</div>
<div>
[['Lose a random slave'|CostEscapedSlaveRandom]]
<<message '(?)'>>
Will make a random one of your slaves escape from the fort.
<</message>>
</div>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualUnit>>
<hr/>
<div><b>Unit related</b></div>
<div>
<<message 'Injury, Trauma, Corruption...'>>
<div class='marketobjectcard'>
<div><b>Injury</b></div>
<div>
[['Injure unit'|CostInjury]]
</div>
<div>
[['Heal unit'|CostHeal]]
</div>
<hr/>
<div><b>Trauma</b></div>
<div>
[['Traumatize unit'|CostTraumatizeRandom]]
<<message '(?)'>>
The default way to traumatize a unit.
A random trauma will be chosen and given the unit. The chance of each trauma
depends on the slaver's skills.
<</message>>
</div>
<div>
[['Boonize unit'|CostBoonizeRandom]]
<<message '(?)'>>
The default way to give a boon to a unit.
A random boon will be chosen and given the unit. The chance of each trauma
depends on the slaver's skills.
<</message>>
</div>
<div>
[['Specialized trauma / boon'|CostTrauma]]
<<message '(?)'>>
Gives a unit a specific boon or trauma.
<</message>>
</div>
<div>
[['Heal trauma'|CostTraumaHeal]]
<<message '(?)'>>
Heals traumas on a unit worth the given amount of weeks.
If the unit is not traumatized, nothing happens.
<</message>>
</div>
<hr/>
<div><b>Corruption</b></div>
<div>
[['Corrupt unit'|CostCorrupt]]
<<message '(?)'>>
Corruption will replace one of the bodyparts with its demonic counterpart,
significantly reducing one skill and reducing the value of the unit.
The bodypart chosen by this option is randomly chosen.
Corruption sometimes will replace the bodypart with non-demonic part.
<</message>>
</div>
<div>
[['Purify a unit'|CostPurify]]
<<message '(?)'>>
Restores a missing bodypart to what it should be.
Can be used to reverse corruption.
Demons cannot be purified.
<</message>>
</div>
<div>
[['Gain innate trait'|CostTraitAndMakeInnate]]
<<message '(?)'>>
Permanently give a unit a bodypart. If you give it using this, then the trait
cannot be purified.
<</message>>
</div>
<div>
[['Reset innate traits'|CostResetInnateTraits]]
<<message '(?)'>>
This unit will gain all its current skin traits as their innate traits.
Most useful for generating units.
<</message>>
</div>
</div>
<</message>>
</div>
<div>
<<message 'Trait...'>>
<div class='marketobjectcard'>
<div><b>Gain trait</b></div>
<div>
[['Gain trait / Increase trait level'|CostTrait]]
<<message '(?)'>>
<div class='helpcard'>
The preferred way to add trait.
<br/>
<br/>
For most traits, this will simply add the trait to the unit if it does not already have it.
However, some traits have level in them --- for example,
<<rep setup.trait.muscle_strong>>
<<rep setup.trait.muscle_verystrong>>
<<rep setup.trait.muscle_extremelystrong>>.
For these traits, this option will increase the trait level by one, up to the chosen trait.
For example, if you choose <<rep setup.trait.muscle_verystrong>>,
then a <<rep setup.trait.muscle_strong>> will get <<rep setup.trait.muscle_verystrong>>
and a unit with <<rep setup.trait.muscle_veryweak>> will get <<rep setup.trait.muscle_weak>>.
Units with <<rep setup.trait.muscle_verystrong>> or <<rep setup.trait.muscle_extremelystrong>>
will not change their traits.
<br/>
<br/>
Be careful with gender-specific traits such as
<<rep setup.trait.dick_small>> or <<rep setup.trait.vagina_loose>>.
Using this will grow those if the unit does not have it.
Use the "Increase trait" option instead.
<br/>
<br/>
If you want to forcefully add a trait, use the
"Replace trait" option.
</div>
<</message>>
</div>
<div>
[['Increase existing trait'|CostTraitIncreaseExisting]]
<<message '(?)'>>
Increase an existing trait, if the unit already have it, up to a certain cap.
Mostly useful for growing existing physical attributes such as
<<rep setup.trait.dick_large>> or <<rep setup.trait.breast_large>>.
<</message>>
</div>
<div>
[['Replace background'|CostBgTraitReset]]
<<message '(?)'>>
Replace a unit's background trait with a new one.
<br/>
<br/>
Note that unit can usually have multiple backgrounds. Using this,
the old background will be removed and replaced with the new one.
Most useful in generating units so that they always come with a
specific background.
<</message>>
</div>
<div>
[['Replace trait'|CostTraitReplace]]
<<message '(?)'>>
Forcefully gain a specific trait, replacing all conflicting trait.
<br/>
<br/>
This is different than gaining trait: a <<rep setup.trait.muscle_veryweak>>
slaver that gains a <<rep setup.trait.muscle_verystrong>> will end up with
<<rep setup.trait.muscle_weak>>.
But if the <<rep setup.trait.muscle_veryweak>> slaver replaced it with
<<rep setup.trait.muscle_verystrong>>, then the slaver will end up with
<<rep setup.trait.muscle_verystrong>>.
<</message>>
</div>
<div>
[['Replace trait (mass)'|CostTraitsReplace]]
<<message '(?)'>>
Shorthand for using (replace trait) on multiple traits at once.
<</message>>
</div>
<div>
<<message 'Gain random traits...'>>
<div class='slavercard'>
<div>
[['Gain random traits'|CostAddTraitsRandom]]
</div>
<div>
[['Replace random traits'|CostAddTraitsRandomReplace]]
</div>
<div>
[['Gain a random non-demonic bodypart'|CostAddRandomBodypartNonDemonic]]
</div>
<div>
[['Gain a random bodypart (can be demonic)'|CostAddRandomBodypartAll]]
</div>
</div>
<</message>>
</div>
<hr/>
<div><b>Lose trait</b></div>
<div>
[['Remove trait'|CostTraitRemove]]
<<message '(?)'>>
Removes a specific trait, if the unit have it.
<</message>>
</div>
<div>
[['Decrease existing trait'|CostTraitDecrease]]
<<message '(?)'>>
Decrease an existing trait, if the unit already have it, up to a certain cap.
Mostly useful for shrinking physical attributes such as
<<rep setup.trait.dick_small>> or <<rep setup.trait.breast_small>>,
to ensure they will not be gone.
<</message>>
</div>
<div>
<<message 'Decrease random traits...'>>
<div class='slavercard'>
<div>
[['Remove random traits'|CostDecreaseTraitsRandomReplace]]
</div>
<div>
[['Decrease random traits'|CostDecreaseTraitsRandom]]
</div>
<div>
[['Remove a random background trait'|CostRemoveRandomBgTrait]]
</div>
<div>
[['Remove a random personality trait'|CostRemoveRandomPerTrait]]
</div>
</div>
<</message>>
</div>
</div>
<</message>>
</div>
<div>
<<message 'Title...'>>
<div class='marketobjectcard'>
<div>
[["Gain title"|CostAddTitle]]
</div>
<div>
[["Lose title"|CostRemoveTitle]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Leave...'>>
<div class='marketobjectcard'>
<div><b>Go on a leave</b></div>
<div>
[["Go on a leave (set duration)"|CostLeave]]
<<message '(?)'>>
<div class='helpcard'>
This will cause the unit to be away from your company for a set number of weeks.
</div>
<</message>>
</div>
<div>
[["Go on a leave (indefinite duration)"|CostLeaveNoDuration]]
<<message '(?)'>>
<div class='helpcard'>
This will cause the unit to be away from your company until another
event / quest returns the unit back to the company.
</div>
<</message>>
</div>
<hr/>
<div><b>Return from leave</b></div>
<div>
[["Return from leave"|CostReturn]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Others...'>>
<div class='marketobjectcard'>
<div><b>History</b></div>
<div>
[["Mark a historical moment in unit's history"|CostAddHistory]]
</div>
<hr/>
<div><b>Friend / Lover</b></div>
<div>
[["Gain friendship / rivalry with you"|CostFriendshipWithYou]]
</div>
<div>
[["Become your lovers"|CostHookupWithYou]]
</div>
<div>
[["Breaks up with you"|CostBreakupWithYou]]
</div>
<hr/>
<div><b>Name</b></div>
<div>
[["Change unit's nickname"|CostNickname]]
</div>
<div>
[["Change unit's real name to a newly generated one"|CostGenName]]
</div>
<hr/>
<div><b>Level</b></div>
<div>
[["Unit levels up"|CostlevelUp]]
<<message '(?)'>>
Should NOT be used in most circumstances.
<</message>>
</div>
<div>
[["Reset unit's level to 1"|CostResetLevel]]
</div>
<hr/>
<div><b>Unit group</b></div>
<div>
[["Add unit to unit group"|CostAddUnitToUnitGroup]]
<<message '(?)'>>
Adds a unit to another unit group. This can be useful to set up an event chain,
for example, you add a slaver that just left your company to the villain unit group,
to be picked from later when the slaver seeks retribution against you.
<</message>>
</div>
<div>
[["Delete actor"|CostRemoveFromUnitGroup]]
<<message '(?)'>>
Removes the unit from the game. Only relevant for units that are generated
from persistent unit groups, such as the "Missing Slavers" unit groups
or custom-made unit groups.
<</message>>
</div>
<hr/>
<div><b>Tags</b></div>
<div>
[["Remove a tag / flag from a unit"|CostRemoveTag]]
<<include 'CostTagHelp'>>
</div>
<div>
[["Give a Tag / Flag to a unit"|CostAddTag]]
<<include 'CostTagHelp'>>
</div>
</div>
<</message>>
</div>
<</if>>
<hr/>
<div><b>Advanced</b></div>
<<if $qCostActualNonCost>>
<div>
<<message 'Recursive...'>>
<div class='marketobjectcard'>
[['Do all of the following'|CostDoAll]]
<<message '(?)'>>
Get all the rewards listed. Useful in combination with other conditionals, such as "Do one at random"
<</message>>
<br/>
[['Do one at random'|CostOneRandom]]
<<message '(?)'>>
One of these outcomes are chosen at random.
<</message>>
<br/>
[['If (restriction) then (outcome) else (outcome)'|CostIfThenElse]]
<<message '(?)'>>
Sets a restriction. If it's satisfied, then the first outcome is given. Otherwise, the second outcome is given.
<</message>>
<br/>
[['Do all of the following with certain probability'|CostDoAllProbability]]
<<message '(?)'>>
Will only give the rewards with some probability.
Useful for a "lucky" reward, e.g., small chance of getting something rare.
<</message>>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<<message 'All Others...'>>
<div class='marketobjectcard'>
<div><b>Misc.</b></div>
<div>
<<message 'Variables...'>>
<div class='slavercard'>
<div>
[['Set variable'|CostVarSet]]
</div>
<div>
[['Unset variable'|CostVarRemove]]
</div>
<div>
[['Adds a value into a variable'|CostVarAdd]]
</div>
</div>
<</message>>
<<message '(?)'>>
Variables are advanced but very flexible technique.
It is essentially a "data container" that can be used to store decisions
made by the player. For example, you can store here that a player has decided to
choose a certain opportunity, and this can later be checked for.
<</message>>
</div>
<div>
[['Prestige'|CostPrestige]]
<<message '(?)'>>
Should NOT be used in most circumstances.
<</message>>
</div>
<hr/>
<div><b>Two units</b></div>
<div>
<<message 'Family...'>>
<div class='slavercard'>
<div>
[['Make siblings'|CostSibling]]
</div>
<div>
[["Make parent-child"|CostParent]]
</div>
<div>
[['Make twins'|CostTwin]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Friendship / Lovers...'>>
<div class='slavercard'>
<div>
[['Friendship / Rivalry'|CostFriendship]]
</div>
<div>
[['Make lovers'|CostHookup]]
</div>
<div>
[['Break up lovers'|CostBreakup]]
</div>
</div>
<</message>>
</div>
<div>
[['Swap bodies'|CostBodyswap]]
<<message '(?)'>>
Swapping bodies will exchange all physical traits between the units including race
and gender.
<</message>>
</div>
<div>
[['Make bodyshifter'|CostSetBodyshifter]]
<<message '(?)'>>
A bodyshifter is able to shift their body to another one at will.
<</message>>
</div>
<hr/>
<div><b>One unit (others)</b></div>
<div>
[['Bodyshifts'|CostBodyshift]]
<<message '(?)'>>
Only usable on bodyshifters.
<</message>>
</div>
<div>
[["Mark unit as slaver"|CostSlaverMarker]]
<<message '(?)'>>
Mark this unit as a slaver --- the unit's gender will try to follow player's
preferences for slaver gender.
There is no need to use this if you already have the unit as a slaver reward.
<</message>>
</div>
<div>
[["Mark unit as slave"|CostSlaveMarker]]
<<message '(?)'>>
Mark this unit as a slave --- the unit's gender will try to follow player's
preferences for slave gender.
There is no need to use this if you already have the unit as a slave reward.
<</message>>
</div>
<div>
[['Unit switches job'|CostMissingUnitOpposite]]
<<message '(?)'>>
A unit switches their job --- i.e., a slave becomes a slaver, or a slaver becomes a slave.
<<dangertext 'USE WITH CAUTION'>>.
This is a very dangerous reward, and could easily break the game if abused.
<</message>>
</div>
<hr/>
<div><b>Global</b></div>
<div>
[["Remove a tag from ALL units that have it"|CostRemoveTagGlobal]]
</div>
<div>
[["Remove a title from ALL units that have it"|CostRemoveTitleGlobal]]
</div>
<div>
[["Clear all units from a unit group"|CostEmptyUnitGroup]]
</div>
<hr/>
<div><b>Others</b></div>
<div>
[["Free player"|CostFreePlayer]]
<<message '(?)'>>
<div class='helpcard'>
This is only relevant for quest or events that can free a captured player.
</div>
<</message>>
</div>
</div>
<</message>>
<</if>>
<br/>
<br/>
<<devtoolreturnbutton>><<set $qCostActualUnit = true>>
<<set $qCostActualNoUnit = true>>
<<set $qCostActualNonCost = true>>
<<set $qgDefaultActorName = ''>>
<<include 'QGAddCostActual'>>Choose cost type:
<<set $qCostActualUnit = false>>
<<set $qCostActualNoUnit = true>>
<<set $qCostActualNonCost = true>>
<<set $qgDefaultActorName = ''>>
<<include 'QGAddCostActual'>>Choose cost type:
<<set $qCostActualUnit = true>>
<<set $qCostActualNoUnit = false>>
<<set $qCostActualNonCost = true>>
<<set $qgDefaultActorName = 'unit'>>
<<include 'QGAddCostActual'>>Choose cost type:
<<set $qCostActualNoUnit = true>>
<<set $qCostActualUnit = false>>
<<set $qCostActualNonCost = false>>
<<include 'QGAddCostActual'>><<set $qCostActualUnit = true>>
<<set $qCostActualNoUnit = true>>
<<set $qCostActualNonCost = true>>
<<set $qgDefaultActorName = 'target'>>
<<include 'QGAddCostActual'>><<set _entry = $qcost>>
<<unset $qcost>>
<<include 'DevAddEntry'>><<if _qbaserole>>
<<set $crname = _qbaserole.getName()>>
<<set $crcrit = _qbaserole.getCritTraits()>>
<<set $crdisaster = _qbaserole.getDisasterTraits()>>
<<set $crrestrictions = _qbaserole.getRestrictions()>>
<<set $crskillmultis = _qbaserole.getSkillMultis()>>
<<set $crcritmap = {}>>
<<set $crdisastermap = {}>>
<<for _itrait, _trait range $crcrit>>
<<set $crcritmap[_trait.key] = true>>
<</for>>
<<for _itrait, _trait range $crdisaster>>
<<set $crdisastermap[_trait.key] = true>>
<</for>>
<<else>>
<<set $crname = "">>
<<set $crcrit = []>>
<<set $crdisaster = []>>
<<set $crcritmap = {}>>
<<set $crdisastermap = {}>>
<<set $crrestrictions = []>>
<<set $crskillmultis = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
]>> /* array of 10 elements */
<</if>>
<<dtsavepassage 'CriteriaGen'>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtloadpassagelink>>
<br/>
<p>
Criteria name:
<<message '(?)'>>
<div class='helpcard'>
The criteria's name.
<br/>
<br/>
For example: "Slave Trainer"
</div>
<</message>>
<<textbox "$crname" $crname>>
</p>
<div class='equipmentcard'>
Unit Restrictions:
<<message '(?)'>>
<div class='helpcard'>
Only units that satisfies these requirements can be assigned to this role.
<br/>
<br/>
The most common requirement is Job: Slaver, which indicates that this is for
slavers only.
</div>
<</message>>
<<devlist '$crrestrictions' '(Add new restriction)' 'QGAddRestrictionUnit' 'CriteriaGen'>>
</div>
<div class='equipmentsetcard card'>
Skill weights: (should sum to 3.0)
<<message '(?)'>>
<div class='helpcard'>
How important each skill is for this role.
<br/>
<br/>
If this is a slave role, skills are not used and should be set to all 0.
<br/>
<br/>
The skill weights should sum to 3.0.
For example, you can assign 1.5 to <<rep setup.skill.combat>>, 0.5 to <<rep setup.skill.brawn>>,
and 1.0 to <<rep setup.skill.knowledge>>.
</div>
<</message>>
<<for _iskill, _skill range setup.skill>>
<br/>
<<set _varname = `$crskillmultis[${_iskill}]`>>
<<capture _varname>>
<<rep _skill>>: <<numberbox _varname $crskillmultis[_iskill]>>
<</capture>>
<</for>>
</div>
<<focwidget 'loadcatcrit'>>
<div class='dutycard'>
<<successtext 'CRITICAL'>>:
<<message '(?)'>>
<div class='helpcard'>
Specially beneficial traits for this mission.
<br/>
<br/>
Having these traits increase the chance to get <<successtext 'critical success'>>.
Having 5-10 traits is recommended.
</div>
<</message>>
<<for _itrait, _trait range $crcrit >>
<<capture _itrait, _trait>>
<<rep _trait>>
<<link '(-)'>>
<<run $crcrit.splice(_itrait, 1)>>
<<run delete $crcritmap[_trait.key]>>
<<refreshcatcrit>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add new trait:
<<for _itrait, _trait range setup.trait>>
<<if !(_trait.key in $crcritmap)>>
<<rep _trait>>
<<capture _trait>>
<<link '(+)'>>
<<run $crcrit.push(_trait)>>
<<set $crcritmap[_trait.key] = true>>
<<refreshcatcrit>>
<</link>>
<</capture>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
|
<</for>>
</div>
<</focwidget>>
<<focwidget 'loadcatdisaster'>>
<div class='contactcard'>
<<dangertext 'DISASTER'>>:
<<message '(?)'>>
<div class='helpcard'>
Specially disastrous traits for this mission.
<br/>
<br/>
Having these traits increase the chance to get <<dangertext 'disaster failure'>>.
Having 5-10 traits is recommended.
</div>
<</message>>
<<for _itrait, _trait range $crdisaster >>
<<capture _itrait, _trait>>
<<rep _trait>>
<<link '(-)'>>
<<run $crdisaster.splice(_itrait, 1)>>
<<run delete $crdisastermap[_trait.key]>>
<<refreshcatdisaster>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add new trait:
<<for _itrait, _trait range setup.trait>>
<<if !(_trait.key in $crdisastermap)>>
<<rep _trait>>
<<capture _trait>>
<<link '(+)'>>
<<run $crdisaster.push(_trait)>>
<<set $crdisastermap[_trait.key] = true>>
<<refreshcatdisaster>>
<</link>>
<</capture>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
|
<</for>>
</div>
<</focwidget>>
<div id='catdivcrit'>
<<loadcatcrit>>
</div>
<<focwidget 'refreshcatcrit'>>
<<replace '#catdivcrit'>>
<<loadcatcrit>>
<</replace>>
<</focwidget>>
<div id='catdivdisaster'>
<<loadcatdisaster>>
</div>
<<focwidget 'refreshcatdisaster'>>
<<replace '#catdivdisaster'>>
<<loadcatdisaster>>
<</replace>>
<</focwidget>>
<<link 'CREATE CRITERIA' >>
<<if !$crname>>
<<warning 'Name cannot be empty'>>
<<else>>
<<run $qcustomcriteria.push(
new setup.UnitCriteria(
null, /* key */
$crname,
$crcrit,
$crdisaster,
$crrestrictions,
$crskillmultis,
)
)>>
<<dtloadpassage>>
<<goto 'QGAddRole'>>
<</if>>
<</link>><<unset _sellore>>
<div style="display: flex; flex-wrap: wrap">
<<for _lore range Object.values(setup.lore)>>
<<capture _lore>>
<<set _text = _lore.getName()>>
<<button _text>>
<<set _sellore = _lore>>
<<run Dialog.close()>>
<</button>>
<</capture>>
<</for>>
</div>
<div>
<<button 'Cancel'>>
<<run Dialog.close()>>
<</button>>
</div><<focwidget 'devselectedtraits'>>
<div>Selected: <<= _seltraits.length >></div>
<div style="display: flex; flex-wrap: wrap">
<<for _iseltraitkey, _seltraitkey range _seltraits>>
<div style="margin: 0 4px; cursor: pointer">
<<capture _iseltraitkey>>
<<onevent 'click'>>
<<= setup.trait[_seltraitkey].rep(true)>>
<<onevent-callback>>
<<run _seltraits.splice(_iseltraitkey, 1)>>
<<replace '#seltraits'>><<devselectedtraits>><</replace>>
<</onevent>>
<</capture>>
</div>
<</for>>
<<if !_seltraits.length>>
(none)
<</if>>
</div>
<div>
<<button 'Clear'>>
<<set _seltraits.length = 0>>
<<replace '#seltraits'>><<devselectedtraits>><</replace>>
<</button>>
</div>
<div>
<<button 'Confirm'>>
<<run Dialog.close()>>
<</button>>
</div>
<</focwidget>>
<div id="seltraits" style="display: grid; grid-template-columns: auto 1fr auto auto; grid-column-gap: 8px">
<<devselectedtraits>>
</div>
<hr/>
<p>
Search by name:
<<onevent 'input'>>
<<textbox '_devtraitpickerfilter_dummy' ''>>
<<onevent-callback>>
<<set _devtraitpickerfilter = (_value || '').trim().toLowerCase()>>
<<filterable-refresh '<.filterable'>>
<</onevent>>
</p>
<p>Click on a trait to add it to selection:</p>
<<set _filterfn = () => Object.keys(setup.trait).filter(trait_key => !_devtraitpickerfilter || trait_key.includes(_devtraitpickerfilter))>>
<<filterable _filterfn>>
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(34px, 1fr))">
<<for _itrait, _trait range setup.trait>>
<div style="cursor: pointer" @data-filter-key="_trait.key">
<<capture _trait>>
<<onevent 'click'>>
<<= _trait.rep(true)>>
<<onevent-callback>>
<<run _seltraits.includes(_trait.key) ? undefined : _seltraits.push(_trait.key)>>
<<replace '#seltraits'>><<devselectedtraits>><</replace>>
<</onevent>>
<</capture>>
</div>
<</for>>
</div>
<</filterable>><<nobr>>
<<devtoolcontentdonebegin 'event'>>
<<link '(Test your event)' 'EventDebugDo'>>
<<set setup.event[$dtquest.key] = $dtquest>>
<<set $qDebugEventTemplate_key = $dtquest.key>>
<<set setup.DEVTOOL_edesc = $edesc>>
<</link>>
[[(Back to edit event)|EventGen]]
<br/>
<br/>
<<devtoolcontentdonemid 'event'>>
<</nobr>>
<div class='companycard'> <code>
"""::""" <<= $epassagesetup >> [nobr event]
<<dtprintmeta>>
"""<<run new setup.Event("""
'<<= $ekey>>', """/* key */"""
<<dtprinttitle>>
<<dtprintauthor>>
<<dtprinttags>>
'<<= $epassagedesc>>',
{ """/* roles */"""
<<for _irole, _role range $dtquest.getUnitRestrictions()>> <<nobr>>
'<<= _irole>>': [
<<for _iccost, _ccost range _role>>
<br/>
<<= _ccost.text()>>,
<</for>>
<br/>
],
<</nobr>>
<</for>> },
<<dtprintactors>>
<<dtprintoutcomes 'rewards'>>
<<dtprintrestrictions 'requirements'>>
<<= $dtquest.cooldown >>, """/* Cooldown */"""
<<= $dtquest.rarity >>, """/* Rarity */"""
)>>
"""::""" <<= $epassagedesc >> [nobr]
<<= setup.escapeTwine($edesc)>>
</code></div><<set $devtooltype = 'event'>>
<<set $qcustomslaveorder = []>>
<<set $qcustomcriteria = []>>
<<set $qcustomunitgroup = []>>
<<set $qcustomtitle = []>>
<<set _ekey = '__devtool_event'>>
<<set _epassage = 'DummyEventPassageDesc'>>
<<set $edesc = "">>
<<if _ekey in setup.event>>
<<run delete setup.event[_ekey]>>
<</if>>
<<if !_ebase>>
<<set $dtquest = new setup.Event(
_ekey,
"", /* name */
"", /* author */
[], /* tags */
_epassage, /* desc passage */
[], /* unit restrictions */
{}, /* actors */
[], /* outcomes */
[], /* requirements */
300, /* cooldown */
1, /* rarity */
)>>
<<else>>
<<set $edesc = Story.get(_ebase.getPassage()).text>>
<<set $dtquest = new setup.Event(
_ekey,
_ebase.getName(), /* name */
_ebase.getAuthor(), /* author */
_ebase.getTags(), /* tags */
_epassage, /* desc passage */
_ebase.getUnitRestrictions(), /* unit restrictions */
_ebase.getActorUnitGroups(), /* actors */
_ebase.getRewards(), /* outcomes */
_ebase.getRequirements(), /* requirements */
_ebase.getCooldown(), /* cooldown */
_ebase.getRarity(), /* rarity */
)>>
<</if>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<<dtrarity "$dtquest.rarity" $dtquest.rarity>>
<p>
<b>Cooldown</b>:
<<message '(?)'>>
<div class='helpcard'>
How many weeks before this event can be triggered again.
<br/>
<br/>
Recommended to put at least 200 weeks for random events, but 0 for chain events.
</div>
<</message>>
<<numberbox "$dtquest.cooldown" $dtquest.cooldown>>
</p>
<<dttags $dtquest>>
/*
<div class='slavecard'>
Roles (max. 5)
<<message '(?)'>>
<div class='helpcard'>
Your units that are participating in this event.
<br/>
<br/>
Maximum is 5 roles.
</div>
<</message>>
<<if Object.keys($dtquest.getUnitRestrictions()).length < 5>>
<br/>
Add new role with actor name: <<textbox '_newactorname' ''>>
<<link '(Add role)'>>
<<if !_newactorname || $dtquest.getAllActorNames().includes(_newactorname)>>
<<warning 'Duplicate actor name or missing actor name'>>
<<else>>
<<set $dtquest.unit_restrictions[_newactorname] = []>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto 'EventGen'>>
<</if>>
<</link>>
<</if>>
<<for _irole, _role range $dtquest.unit_restrictions>>
<div class='marketobjectcard'>
<<= _irole>>
<<message '(?)'>>
<div class='helpcard'>
Restrictions for this unit
<br/>
<br/>
Only units that satisfies this will ever be assigned to this role.
The game will try to find an assignment that matches.
The most common requirement is Job: Slaver, which indicates that this role is for
slavers only.
</div>
<</message>>:
<<capture _irole, _role>>
<<link '(DELETE THIS ROLE)' 'EventGen'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<run delete $dtquest.unit_restrictions[_irole]>>
<</link>>
<</capture>>
<<set _listpath = '$dtquest.unit_restrictions[' + _irole + ']'>>
<<devlist _listpath '(Add new restriction)' 'QGAddRestrictionUnit' 'EventGen'>>
<br/>
</div>
<</for>>
</div>
*/
<<dtactor $dtquest>>
<<dtoutcome "$dtquest.rewards">>
<<dtrestriction "$dtquest.requirements">>
<hr/>
<<dtstoryhelp>>
<div class="overflow-story-container">
<hr/>
<p>
<b>Event text</b>:
<br/>
<<codeeditor '$edesc' $edesc>>
</p>
<hr/>
<p class="center">
<br/>
<<button 'CREATE EVENT!'>>
<<set $ekey = setup.getKeyFromName($dtquest.name, setup.event)>>
/* create passage names etc */
<<set $efilename = `${$ekey}.twee`>>
<<set $epassagesetup = `EventSetup_${$ekey}`>>
<<set $epassagedesc = `Event_${$ekey}`>>
<<goto 'EGCreate'>>
<</button>>
</p>
</div><<nobr>>
<<devtoolcontentdonebegin 'interaction'>>
<<link '(Test your interaction)' 'InteractionDebugDo'>>
<<set setup.interaction[$dtquest.key] = $dtquest>>
<<set $qDebugInteractionTemplate_key = $dtquest.key>>
<<set setup.DEVTOOL_idesc = $idesc>>
<</link>>
[[(Back to edit interaction)|InteractionGen]]
<br/>
<br/>
<<devtoolcontentdonemid 'interaction'>>
<</nobr>>
<div class='companycard'> <code>
"""::""" <<= $ipassagesetup >> [nobr interaction]
<<dtprintmeta>>
"""<<run new setup.Interaction("""
'<<= $ikey>>', """/* key */"""
<<dtprinttitle>>
<<dtprintauthor>>
<<dtprinttags>>
'<<= $ipassagedesc>>',
<<dtprintcosts>>
<<dtprintrestrictions 'prerequisites'>>
[ """/* unit requirements */"""
<<for _irestriction, _restriction range $dtquest.unit_requirements >><<nobr>>
<<= _restriction.text()>>,
<</nobr>>
<</for>> ],
<<dtprintoutcomes 'rewards'>>
<<= $dtquest.cooldown >>,
setup.interactionpool.unit,
)>>
"""::""" <<= $ipassagedesc >> [nobr]
<<= setup.escapeTwine($idesc)>>
</code></div><<set $devtooltype = 'interaction'>>
<<set $qcustomslaveorder = []>>
<<set $qcustomcriteria = []>>
<<set $qcustomunitgroup = []>>
<<set $qcustomtitle = []>>
<<set _ikey = '__devtool_interaction'>>
<<set _ipassage = 'DummyInteractionPassage'>>
<<set $idesc = "">>
<<if _ikey in setup.interaction>>
<<run delete setup.interaction[_ikey]>>
<</if>>
<<if !_ibase>>
<<set $dtquest = new setup.Interaction(
_ikey,
'', /* name */
'', /* author */
[], /* tags */
_ipassage, /* desc passage */
[], /* costs */
[], /* requirements */
[], /* unit requirements */
[], /* outcomes */
0, /* cooldown */
setup.interactionpool.unit, /* pool */
)>>
<<else>>
<<set $idesc = Story.get(_ibase.getPassage()).text>>
<<set $dtquest = new setup.Interaction(
_ikey,
_ibase.getName(), /* name */
_ibase.getAuthor(), /* author */
_ibase.getTags(), /* tags */
_ipassage, /* desc passage */
_ibase.getCosts(), /* costs */
_ibase.getPrerequisites(), /* requirements */
_ibase.getUnitRequirements(), /* unit requirements */
_ibase.getRewards(), /* outcomes */
_ibase.getCooldown(), /* cooldown */
setup.interactionpool.unit, /* pool */
)>>
<</if>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<p>
Interaction cooldown:
<<message '(?)'>>
<div class='helpcard'>
Number of weeks before this interaction can be used again.
<br/>
<br/>
0 means no cooldown, and this interaction can be spammed each week.
</div>
<</message>>
<<numberbox "$dtquest.cooldown" $dtquest.cooldown>> weeks
</p>
<<dttags $dtquest>>
<div class='marketobjectcard'>
<b>Unit requirements</b>:
<<message '(?)'>>
<div class='helpcard'>
Only units that satisfies these requirements can be interacted with.
<br/>
<br/>
The most common requirement is Job: Slave,
which indicates that this interaction can only be used on slaves.
</div>
<</message>>:
<<devlist '$dtquest.unit_requirements' '(Add new requirement)' 'QGAddRestrictionUnit' 'InteractionGen'>>
</div>
<<dtcost '$dtquest.costs'>>
<div class='equipmentcard'>
<b>Outcomes</b>:
<<message '(?)'>>
<div class='helpcard'>
What happens afterwards, if any.
</div>
<</message>>
<<devlist '$dtquest.rewards' '(Add new outcome)' 'QGAddCostTarget' 'DevGoToReturn'>>
</div>
<<dtrestriction "$dtquest.prerequisites">>
<hr/>
<<dtstoryhelp>>
<div class="overflow-story-container">
<hr/>
<p>
Interaction text:
<<message '(?)'>>
<div class='helpcard'>
Describes what happens during the interaction.
</div>
<</message>>
<br/>
<<codeeditor '$idesc' $idesc>>
</p>
<hr/>
<p class="center">
<br/>
<<button 'CREATE INTERACTION!'>>
<<set $ikey = setup.getKeyFromName($dtquest.name, setup.interaction)>>
/* create passage names etc */
<<set $ifilename = `${$ikey}.twee`>>
<<set $ipassagesetup = `InteractionSetup_${$ikey}`>>
<<set $ipassagedesc = `Interaction_${$ikey}`>>
<<goto 'IGCreate'>>
<</button>>
</p>
</div><<run Config.history.maxStates = 3>>
<<set $qDevTool = true>>
<<include 'DevToolMenu'>><p>
Remember that you can undo your action by clicking on the left arrow on the top left of the screen.
</p>
<div class='unemployedcard'>
<b>New Quest</b>
<<message '(?)'>>
Create a new quest.
<</message>>
<br/>
<<link 'Create new quest based on existing quest' 'QuestGenSetupExisting'>>
<</link>>
<b>recommended</b>
<<message '(?)'>>
Using this option, some of your quest details such as slaver roles and difficulty will be based
on an existing quest.
They can be changed later, and there is <b>no drawback</b> on selecting this option compared
to creating new from scratch. This is the recommended option.
<</message>>
<br/>
<<link 'Create new from scratch' 'QuestGen'>>
<<set _qbase = null>>
<<include 'QuestGenSetup'>>
<</link>>
</div>
<div class='companycard'>
<b>New Interaction</b>
<<message '(?)'>>
Create a new interaction, either between you and a slave, or between you and a slaver (or sometimes both).
This includes the sex options that you can see when you interact with your slavers/slaves.
Most of the interactions have no in-game effects, and just flavor text, but they remain
an important part of the game.
<</message>>
<br/>
<<link 'Create new interaction based on existing interaction' 'InteractionGenSetupExisting'>>
<</link>>
<<message '(?)'>>
Using this option, some of your interaction details such as the option rewards and difficulty will be based
on an existing interaction.
They can be changed later, and there is <b>no drawback</b> on selecting this option compared
to creating new from scratch. This is the recommended option.
<</message>>
<br/>
<<link 'Create new interaction from scratch' 'InteractionGen'>>
<<set _ibase = null>>
<<include 'InteractionGenSetup'>>
<</link>>
</div>
<div class='opportunitycard'>
<b>New Mail / Opportunity</b>
<<message '(?)'>>
Create a new opportunity.
Opportunity and mails are the same thing.
An opportunity usually diverges into multiple quests, for example it could ask if you want
to kidnap the farmer's daughter or just raid the farm.
To make an opportunity, you usually will first write the corresponding quests,
and then create an opportunity that rewards those quests when you select the options.
<</message>>
<br/>
<<link 'Create new opportunity based on existing opportunity' 'OpportunityGenSetupExisting'>>
<</link>>
<<message '(?)'>>
Using this option, some of your opportunity details such as the option rewards and difficulty will be based
on an existing opportunity.
They can be changed later, and there is <b>no drawback</b> on selecting this option compared
to creating new from scratch. This is the recommended option.
<</message>>
<br/>
<<link 'Create new opportunity from scratch' 'OpportunityGen'>>
<<set _obase = null>>
<<include 'OpportunityGenSetup'>>
<</link>>
</div>
<div class='equipmentsetcard card'>
<b>New Event</b>
<<message '(?)'>>
Create a new event.
Events can either be randomly triggered during the end of week,
or can be scheduled to event (e.g., a quest can make a slaver leave your company for a few weeks
until an event triggers.
<</message>>
<br/>
<<link 'Create new event based on existing event' 'EventGenSetupExisting'>>
<</link>>
<br/>
<<link 'Create new event from scratch' 'EventGen'>>
<<set _ebase = null>>
<<include 'EventGenSetup'>>
<</link>>
</div><<include 'LoadDevWidgets'>>
<<devchoosequest 'QuestGenSetupExistingDo'>><<set _qbase = _questchosen>>
<<include 'QuestGenSetup'>>
<<goto 'QuestGen'>><<include 'LoadDevWidgets'>>
<<devchooseopportunity 'OpportunityGenSetupExistingDo'>><<set _obase = _opportunitychosen>>
<<include 'OpportunityGenSetup'>>
<<goto 'OpportunityGen'>>Choose existing event to base from:
<br/>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'EventGen'>>
<<set _ebase = _event>>
<<include 'EventGenSetup'>>
<</link>>
<br/>
<</capture>>
<</for>>Choose existing interaction to base from:
<br/>
<<for _iinteraction, _interaction range setup.interaction>>
<<capture _interaction>>
<<link _interaction.getName() 'InteractionGen'>>
<<set _ibase = _interaction>>
<<include 'InteractionGenSetup'>>
<</link>>
<br/>
<</capture>>
<</for>><<nobr>>
<<devtoolcontentdonebegin 'opportunity'>>
<<link '(Test your opportunity)'>>
<<set setup.opportunitytemplate[$dtquest.key] = $dtquest>>
<<if $qpool>>
<<run $qpool.registerOpportunity($dtquest, $qrarity)>>
<</if>>
<<set setup.DEVTOOL_odesc = $odesc>>
<<set setup.DEVTOOL_ooptiondesc = $ooptiondesc>>
<<set setup.DEVTOOL_ooptiontitle = $ooptiontitle>>
<<for _ioption, _option range $ooptiondesc>>
<<set $dtquest.options[_ioption][0] = `DummyOpportunityPassage${_ioption}`>>
<<set $dtquest.options[_ioption][1] = `DummyOpportunityPassageFlavor${_ioption}`>>
<</for>>
<<set $qDebugOpportunityTemplate_key = $dtquest.key>>
<<focgoto 'OpportunityDebugChoose'>>
<</link>>
[[(Back to edit opportunity)|OpportunityGen]]
<br/>
<br/>
<<devtoolcontentdonemid 'opportunity'>>
<</nobr>>
<div class='companycard'> <code>
"""::""" <<= $opassagesetup >> [nobr opportunity]
<<dtprintmeta>>
"""<<run new setup.OpportunityTemplate("""
'<<= $okey>>', """/* key */"""
<<dtprinttitle>>
<<dtprintauthor>>
<<dtprinttags>>
<<dtprintdeadlineweeks>>
'<<= $opassagedesc>>',
<<dtprintdifficulty>>
[ """/* options */""" <<nobr>>
<<for _ioption, _option range $dtquest.options>>
<br>
[
<br/>
'Opportunity_<<= $okey>>_<<= _ioption>>',
<br/>
<<if $ooptiondesc[_ioption]>>
'Opportunity_<<= $okey>>_<<= _ioption>>_flavor',
<<else>>
null,
<</if>>
<br/>
[ """/* costs */"""
<<for _icost, _cost range _option[2]>>
<br/>
<<= _cost.text()>>,
<</for>>
<br/>
],
<br/>
[ """/* restrictions */"""
<<for _irestriction, _restriction range _option[3]>>
<br/>
<<= _restriction.text()>>,
<</for>>
<br/>
],
<br/>
[ """/* outcomes */"""
<<for _ioutcome, _outcome range _option[4]>>
<br/>
<<= _outcome.text()>>,
<</for>>
<br/>
],
<br/>
],
<</for>>
<</nobr>>
],
<<dtprintquestpool $opool $orarity>>
<<dtprintrestrictions 'prerequisites'>>
<<dtprintactors>>
<<dtprintexpirationoutcomes>>
<<= $dtquest.isMustBeAnswered()>>, """ /* is must be answered */ """
)>>
"""::""" <<= $opassagedesc >> [nobr]
<<= setup.escapeTwine($odesc)>>
<<for _ioption, _option range $dtquest.options>>
"""::""" Opportunity_<<= $okey>>_<<= _ioption>> [nobr]
<<= setup.escapeTwine($ooptiontitle[_ioption])>>
<<if $ooptiondesc[_ioption]>>
"""::""" Opportunity_<<= $okey>>_<<= _ioption>>_flavor [nobr]
<<= setup.escapeTwine($ooptiondesc[_ioption])>>
<</if>>
<</for>>
</code></div><<set $devtooltype = 'opportunity'>>
<<set $qcustomslaveorder = []>>
<<set $qcustomcriteria = []>>
<<set $qcustomunitgroup = []>>
<<set $qcustomtitle = []>>
<<set _okey = '__devtool_opportunity'>>
<<set _opassage = 'DummyOpportunityPassageDesc'>>
<<set $opool = null>>
<<set $orarity = 1>>
<<set $odesc = "">>
<<set $ooptiondesc = []>>
<<set $ooptiontitle = []>>
<<if _okey in setup.opportunitytemplate>>
<<run delete setup.opportunitytemplate[_okey]>>
<</if>>
<<if !_obase>>
<<set $dtquest = new setup.OpportunityTemplate(
_okey, /* key */
"", /* name */
"", /* author */
[], /* tags */
1, /* deadline weeks */
_opassage, /* description passage */
setup.qdiff.normal40, /* difficulty */
[], /* options */
[], /* quest pools */
[], /* restrictions */
{}, /* actors */
[], /* expiration outcomes */
true, /* is_must_be_answered */
)>>
<<else>>
<<set $odesc = Story.get(_obase.getDescriptionPassage()).text>>
<<set _ooptions = []>>
<<for _ioption, _option range _obase.getOptions()>>
<<set _optiondesc = ''>>
<<if _option[1]>>
<<set _optiondesc = Story.get(_option[1]).text>>
<</if>>
<<run $ooptiondesc.push(_optiondesc)>>
<<run $ooptiontitle.push(Story.get(_option[0]).text)>>
<<run _ooptions.push([
`DummyOpportunityPassage${_ioption}`,
`DummyOpportunityPassageFlavor${_ioption}`,
_option[2],
_option[3],
_option[4],
])>>
<</for>>
<<set $dtquest = new setup.OpportunityTemplate(
_okey, /* key */
_obase.getName(), /* name */
_obase.getAuthor(), /* author */
_obase.tags, /* tags */
_obase.getDeadlineWeeks(), /* deadline weeks */
_opassage, /* description passage */
_obase.getDifficulty(), /* difficulty */
_ooptions, /* options */
[], /* quest pools */
_obase.getPrerequisites(), /* restrictions */
_obase.getActorUnitGroups(), /* actors */
_obase.getExpiredOutcomes(), /* expiration outcomes */
_obase.isMustBeAnswered(), /* is_must_be_answered */
)>>
<</if>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<<dtquestpool "$opool" $opool 'OGChooseQuestPool'>>
<<dtrarity "$orarity" $orarity>>
<<dtdifficulty $dtquest 'OGChooseDifficulty'>>
<<dttags $dtquest>>
<<dtactor $dtquest>>
<<dtrestriction '$dtquest.prerequisites'>>
<div class='opportunitycard'>
Options: <<message '(?)'>>
<div class='helpcard'>
The various choices you can make on this opportunity.
<br/>
<br/>
An opportunity should always have at least one option.
Maximum 10 options.
</div>
<</message>>
<<if $ooptiondesc.length < 10>>
<<link '(Add new option)' 'OpportunityGen'>>
<<set _i = $ooptiondesc.length>>
<<run $dtquest.options.push([
`DummyOpportunityPassage${_i}`,
`DummyOpportunityPassageFlavor${_i}`,
[],
[],
[],
])>>
<<run $ooptiondesc.push('')>>
<<run $ooptiontitle.push('')>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<<for _ioption, _option range $dtquest.options>>
<<set _baseoptionvar = `$dtquest.options[${_ioption}]`>>
<<capture _ioption, _option>>
<div class='opportunitycardoption'>
<div>
Option name:
<<message '(?)'>>
<div class='helpcard'>
The displayed option name.
<br/>
<br/>
For example, "Raid the vilage"
</div>
<</message>>
<<set _title = `$ooptiontitle[${_ioption}]`>>
<<textbox _title $ooptiontitle[_ioption]>>
</div>
<div>
Option flavor text:
<<message '(?)'>>
<div class='helpcard'>
Flavor text of what happens after you select this option.
<br/>
<br/>
Can be left empty if you don't want to have any text.
</div>
<</message>>
<br/>
<<set _desccontainer = `$ooptiondesc[${_ioption}]`>>
<<codeeditor _desccontainer $ooptiondesc[_ioption]>>
</div>
<<set _cost = `$dtquest.options[${_ioption}][2]`>>
<<dtcost _cost>>
<<set _restriction = `$dtquest.options[${_ioption}][3]`>>
<<dtrestriction _restriction>>
<<set _outcomes = `$dtquest.options[${_ioption}][4]`>>
<<dtoutcome _outcomes>>
<<link '(DELETE THIS OPTION)' 'OpportunityGen'>>
<<run $dtquest.options.splice(_ioption, 1)>>
<<run $ooptiontitle.splice(_ioption, 1)>>
<<run $ooptiondesc.splice(_ioption, 1)>>
<</link>>
</div>
<</capture>>
<</for>>
</div>
<<if $dtquest.isMustBeAnswered()>>
<div>This opportunity <<dangertext 'must be answered'>> by the player.
<<link '(Click to allow this to be ignored)' 'OpportunityGen'>>
<<set $dtquest.is_must_be_answered = false>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
</div>
<<else>>
<div>This opportunity <<successtext 'can be ignored'>> and expire on its own.
<<link '(Click to force players to answer this opportunity)' 'OpportunityGen'>>
<<set $dtquest.is_must_be_answered = true>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
</div>
<<dtexpires "$dtquest.deadline_weeks" $dtquest.deadline_weeks>>
<<dtexpireoutcome '$dtquest.expired_outcomes'>>
<</if>>
<hr/>
<<dtstoryhelp>>
<div class="overflow-story-container">
<hr/>
<p>
<b>Opportunity description</b>:
<br/>
<<codeeditor '$odesc' $odesc>>
</p>
<hr/>
<p class="center">
<br/>
<<button 'CREATE OPPORTUNITY!'>>
<<set $okey = setup.getKeyFromName($dtquest.name, setup.opportunitytemplate)>>
/* create passage names */
<<set $ofilename = `${$okey}.twee`>>
<<set $opassagesetup = `OpportunitySetup_${$okey}`>>
<<set $opassagedesc = `Opportunity_${$okey}`>>
<<goto 'OGCreate'>>
<</button>>
</p>
</div><p>Choose where quest can appear</p>
<<dtquestpoolchoose 'OGChooseQuestPoolDo'>><<set $opool = _questpoolchosen>>
<<gotowipehistory 'OpportunityGen'>><p>Choose quest difficulty</p>
<<devchoosedifficulty 'OGChooseDifficultyDo'>><<set $dtquest.difficulty = _diffchosen>>
<<gotowipehistory 'OpportunityGen'>><<nobr>>
<<devtoolcontentdonebegin 'quest'>>
<<link '(Test your quest)' 'QuestDebugAll'>>
<<set setup.questtemplate[$dtquest.key] = $dtquest>>
<<if $qpool>>
<<run $qpool.registerQuest($dtquest, $qrarity)>>
<</if>>
<<set $qDebugQuestTemplate_key = $dtquest.key>>
<<set setup.DEVTOOL_qdesc = $qdesc>>
<<set setup.DEVTOOL_qoutcomedesc = $qoutcomedesc>>
<</link>>
[[(Back to edit quest)|QuestGen]]
<br/>
<br/>
<<devtoolcontentdonemid 'quest'>>
<</nobr>>
<div class='companycard'> <code>
"""::""" <<= $qpassagesetup >> [nobr quest]
<<dtprintmeta>>
<<for _irole, _role range $dtquest.getUnitCriterias()>> <<if !_role.criteria.key>> <<set _rolename = `_criteria${_irole}`>>
"""<<"""set <<= _rolename >> = new setup.UnitCriteria(
null, """/* key */"""
'<<= setup.escapeJsString(_role.criteria.getName())>>', """/* name */"""
[
<<for _itrait, _trait range _role.criteria.getCritTraits()>><<nobr>>
setup.trait.<<= _trait.key>>,
<</nobr>>
<</for>> ],
[
<<for _itrait, _trait range _role.criteria.getDisasterTraits()>><<nobr>>
setup.trait.<<= _trait.key>>,
<</nobr>>
<</for>> ],
[
<<for _irestriction, _restriction range _role.criteria.getRestrictions()>><<nobr>>
<<= _restriction.text()>>,
<</nobr>>
<</for>> ],
{ <<for _iskill, _ivalue range _role.criteria.getSkillMultis()>> <<nobr>>
<<if _ivalue>>
<br/>
<<= setup.skill[_iskill].keyword>>: <<= _ivalue>>,
<</if>>
<</nobr>> <</for>>
}
)>> <</if>>
<</for>><<nobr>>
<</nobr>>"""<<run new setup.QuestTemplate("""
'<<= $qkey>>', """/* key */"""
<<dtprinttitle>>
<<dtprintauthor>>
<<dtprinttags>>
<<= $dtquest.weeks>>, """/* weeks */"""
<<dtprintdeadlineweeks>>
{ """/* roles */"""
<<for _irole, _role range $dtquest.getUnitCriterias()>><<nobr>>
'<<= _irole>>':
<<set _slaverole = true>>
<<for _restriction range _role.criteria.getRestrictions()>>
<<if _restriction instanceof setup.qresImpl.Job && _restriction.job_key == setup.job.slaver.key>>
<<set _slaverole = false>>
<<break>>
<</if>>
<</for>>
<<if !_slaverole>>[<</if>>
<<if _role.criteria.key>>
setup.qu.<<= _role.criteria.key>>,
<<else>>
_criteria<<= _irole >>,
<</if>>
<<if !_slaverole>>
<<= _role.offsetmod>>],
<</if>>
<</nobr>>
<</for>>},
<<dtprintactors>>
<<dtprintcosts>>
'<<= $qpassagedesc>>',
<<dtprintdifficulty>>
[ """/* outcomes */"""
<<for _ioutcome, _outcomes range $dtquest.outcomes>><<nobr>>
[
<br/>
'<<= $qpassageoutcomes[setup.DevToolHelper.getPassageIndex($qoutcomedesc, _ioutcome)]>>',
<br/>
[
<<for _ixxx, _outcome range _outcomes[1]>>
<br/>
<<= _outcome.text()>>,
<</for>>
<br/>
],
<br/>
],
<</nobr>>
<</for>> ],
<<dtprintquestpool $qpool $qrarity>>
<<dtprintrestrictions 'quest_prerequisites'>>
<<dtprintexpirationoutcomes>>
)>>
"""::""" <<= $qpassagedesc >> [nobr]
<<= setup.escapeTwine($qdesc)>>
<<for _ipo, _po range $qpassageoutcomes>><<if !_ipo || $qoutcomedesc[_ipo].trim()>>
"""::""" <<= _po >> [nobr]
<<= setup.escapeTwine($qoutcomedesc[_ipo])>>
<</if>><</for>>
</code>
</div><<set $devtooltype = 'quest'>>
<<set $qcustomslaveorder = []>>
<<set $qcustomcriteria = []>>
<<set $qcustomunitgroup = []>>
<<set $qcustomtitle = []>>
<<set _qkey = '__devtool_quest'>>
<<set _dpassage = 'DummyPassageDesc'>>
<<set $qpool = null>>
<<set $qrarity = 1>>
<<set $qoutcomedesc = ['', '', '', '']>>
<<set $qdesc = ''>>
<<if _qkey in setup.questtemplate>>
<<run delete setup.questtemplate[_qkey]>>
<</if>>
<<if !_qbase>>
<<set $dtquest = new setup.QuestTemplate(
_qkey,
"", /* name */
"", /* author */
[], /* tag list */
1, /* weeks */
6, /* deadline weeks */
{}, /* roles */
{}, /* actors */
[], /* costs */
_dpassage, /* description passage */
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[`DummyPassage0`, []],
[`DummyPassage1`, []],
[`DummyPassage2`, []],
[`DummyPassage3`, []],
],
[ /* quest pools */
],
[], /* restriction */
[], /* expired outcomes */
)>>
<<else>>
<<set _criterias = _qbase.getUnitCriterias()>>
<<set _toinputroles = {}>>
<<for _actorname, _criteriaobj range _criterias>>
<<set _toinputroles[_actorname] = _criteriaobj.criteria>>
<</for>>
<<set $dtquest = new setup.QuestTemplate(
_qkey,
_qbase.getName(), /* name */
_qbase.getAuthor(), /* author */
_qbase.getTags(), /* tag list */
_qbase.getWeeks(), /* weeks */
_qbase.getDeadlineWeeks(), /* deadline weeks */
_toinputroles, /* roles */
_qbase.actor_unitgroup_key_map, /* actors */
_qbase.getCosts(), /* costs */
_dpassage, /* description passage */
_qbase.getDifficulty(), /* difficulty */
[ /* outcomes */
[`DummyPassage0`, _qbase.outcomes[0][1]],
[`DummyPassage1`, _qbase.outcomes[1][1]],
[`DummyPassage2`, _qbase.outcomes[2][1]],
[`DummyPassage3`, _qbase.outcomes[3][1]],
],
[ /* quest pools */
],
_qbase.getPrerequisites(), /* restriction */
_qbase.getExpiredOutcomes(), /* expired outcomes */
)>>
/* get the descriptions */
<<for _ioutcome, _outcome range _qbase.getOutcomes()>>
<<if _ioutcome && _outcome[0] == _qbase.getOutcomes()[_ioutcome-1][0]>>
<<else>>
<<set $qoutcomedesc[_ioutcome] = Story.get(_outcome[0]).text>>
<</if>>
<</for>>
<<set $qdesc = Story.get(_qbase.getDescriptionPassage()).text>>
<</if>>
/* Remove the auto-generated exps */
<<for _i range [0, 1, 2, 3]>>
<<set $dtquest.outcomes[_i][1] = $dtquest.outcomes[_i][1].filter(c => !c.IS_EXP_AUTO)>>
<</for>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<<dtquestpool "$qpool" $qpool 'QGChooseQuestPool'>>
<<dtrarity "$qrarity" $qrarity>>
<<dtduration "$dtquest.weeks" $dtquest.weeks>>
<<dtexpires "$dtquest.deadline_weeks" $dtquest.deadline_weeks>>
<<dtdifficulty $dtquest 'QGChooseDifficulty'>>
<<dttags $dtquest>>
<div class='slavecard'>
<b>Roles</b> (max. 5)
<<message '(?)'>>
<div class='helpcard'>
The details about your units that go on this quest.
<br/>
<br/>
For balance reason, most quests are encouraged to have three slavers participating in it.
You can have less or more, but you must be careful with balancing the quest if you do.
</div>
<</message>>
<<if Object.keys($dtquest.unit_criteria_map).length < 5>>
<<link '(Add new role)'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto 'QGAddRole'>>
<</link>>
<</if>>
<<for _irole, _role range $dtquest.unit_criteria_map>>
<br/>
<<= _irole>>: <<= _role.criteria.getName()>>
<<capture _irole, _role>>
<<message '(+)'>>
<<criteriacard _role.criteria>>
<</message>>
<<set _text = `(remove ${_irole})`>>
<<link _text>>
<<run delete $dtquest.unit_criteria_map[_irole]>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto 'QuestGen'>>
<</link>>
<</capture>>
<</for>>
</div>
<<dtactor $dtquest>>
<<dtcost '$dtquest.costs'>>
<<dtrestriction '$dtquest.quest_prerequisites'>>
<div class='companycard'>
<b>Outcomes</b>:
<<message '(?)'>>
<div class='helpcard'>
Outcomes of the quest.
<br/>
<br/>
See the help texts in their corresponding area for more information.
</div>
<</message>>
<<for _ioutcome, _outcome range $dtquest.outcomes>>
<div class='buildingcard'>
<<if _ioutcome == 0>>
<<successtext 'CRITICAL SUCCESS'>>
<<message '(?)'>>
<<dtrewardhelp>>
<</message>>
<<link '(Click here to compute your recommended total quest reward)'>>
<<replace '#critrewarddiv'>>
<<set _money = 2 * 500 * $dtquest.weeks * Object.keys($dtquest.getUnitCriterias()).length>>
Your quest should reward a total of <<money _money>> on <<successtext 'critical success'>>.
<</replace>>
<</link>>
<div id='critrewarddiv'>
Please compute your recommended <<successtext 'critical success'>> quest reward by clicking the link above.
</div>
<<elseif _ioutcome == 1>>
<<successtextlite 'SUCCESS'>>
<<message '(?)'>>
<<dtrewardhelp>>
<</message>>
<<link '(Click here to compute your recommended total quest reward)'>>
<<replace '#successrewarddiv'>>
<<set _money = 500 * $dtquest.weeks * Object.keys($dtquest.getUnitCriterias()).length>>
Your quest should reward a total of <<money _money>> on <<successtextlite 'success'>>.
<</replace>>
<</link>>
<div id='successrewarddiv'>
Please compute your recommended <<successtextlite 'success'>> quest reward by clicking the link above.
</div>
<<elseif _ioutcome == 2>>
<<dangertextlite 'FAILURE'>>
<<message '(?)'>>
<<dtfailurehelp>>
<</message>>
<<elseif _ioutcome == 3>>
<<dangertext 'DISASTER'>>
<<message '(?)'>>
<<dtfailurehelp>>
<</message>>
<</if>>
<<set _listpath = "$dtquest.outcomes[" + _ioutcome + "][1]">>
<<devlist _listpath '(Add new result)' 'QGAddCost' 'QuestGen'>>
</div>
<</for>>
</div>
<<dtexpireoutcome '$dtquest.expired_outcomes'>>
<hr/>
<<dtstoryhelp>>
<div class="overflow-story-container">
<hr/>
<p>
<h4>Quest description:</h4>
</p>
<p>
<<codeeditor '$qdesc' $qdesc>>
</p>
<hr/>
There are two ways to write your quest outcomes.
First, you can write each of the outcomes below.
Alternatively, you can only write several outcomes, and use the
same text for multiple results.
<<message '(Click for more information)'>>
<div class='helpcard'>
If you leave some of the fields blank, then it will use the first non-blank one
above it.
For example, if you leave both <<successtextlite 'SUCCESS'>> and <<dangertextlite 'FAILURE'>> blank,
but fill in <<dangertext 'DISASTER'>>, then
then both <<successtextlite 'SUCCESS'>> and
<<dangertextlite 'FAILURE'>> will use the <<successtext 'CRITICAL SUCCESS'>> text,
while <<dangertext 'DISASTER'>> will use its own.
To refer to the quest result, Click "Quest" then "If... outcomes" from the toolbar.
For example, it can look like this:
<div class='companycard'>
<code>
Your slavers venture into the abandoned temple.<br/>
"""<<if $gOutcome == 'crit'>>"""<br/>
They found a treasure!<br/>
"""<<elseif $gOutcome == 'success'>>"""<br/>
They found a bag of gold.<br/>
"""<<elseif $gOutcome == 'failure'>>"""<br/>
They fell into a hole.<br/>
"""<<elseif $gOutcome == 'disaster'>>"""<br/>
They fell into a spike trap.<br/>
"""<</if>>"""<br/>
They then went home.
"""
</code>
</div>
<hr/>
<p>
In <<successtextlite 'SUCCESS'>>,
the above would become: <br/>
Your slavers venture into the abandoned temple. They found a bag of gold. They then went home.
As an example quest, you can open in Content Creator the
"Bounty Hunt: Wolves" quest in the <<lore region_vale>>.
</p>
</div>
<</message>>
<<for _iqod, _qod range $qoutcomedesc>>
<hr/>
<p>
<<if _iqod == 0>>
<<successtext 'CRITICAL SUCCESS'>>
<<elseif _iqod == 1>>
<<successtextlite 'SUCCESS'>>
<<elseif _iqod == 2>>
<<dangertextlite 'FAILURE'>>
<<elseif _iqod == 3>>
<<dangertext 'DISASTER'>>
<</if>>
text:
</p>
<p>
<<set _receiver = `$qoutcomedesc[${_iqod}]`>>
<<codeeditor _receiver $qoutcomedesc[_iqod]>>
</p>
<</for>>
<hr/>
<p class="center">
<br/>
<<button 'CREATE QUEST!'>>
/* normalize role weights */
<<set _slavers = 0>>
<<for _iactor, _icriteria range $dtquest.getUnitCriterias()>>
<<if $dtquest.getActorResultJob(_iactor) == setup.job.slaver>>
<<set _slavers = _slavers + 1>>
<</if>>
<</for>>
<<if _slavers == 0>><<set _slavers = 1>><</if>>
<<for _iactor, _icriteria range $dtquest.getUnitCriterias()>>
<<set $dtquest.unit_criteria_map[_iactor].offsetmod = 3.0 / _slavers>>
<</for>>
/* create passage names etc */
<<set $qkey = setup.getKeyFromName($dtquest.name, setup.questtemplate)>>
<<set $qfilename = `${$qkey}.twee`>>
<<set $qpassagesetup = `QuestSetup_${$qkey}`>>
<<set $qpassagedesc = `Quest_${$qkey}`>>
<<set $qpassageoutcomes = [
`Quest_${$qkey}Crit`,
`Quest_${$qkey}Success`,
`Quest_${$qkey}Failure`,
`Quest_${$qkey}Disaster`,
]>>
<<goto 'QGCreate'>>
<</button>>
</p>
</div><p>Choose where quest can appear</p>
<<dtquestpoolchoose 'QGChooseQuestPoolDo'>><<set $qpool = _questpoolchosen>>
<<gotowipehistory 'QuestGen'>><<devchoosedifficulty 'QGChooseDifficultyDo'>><<set $dtquest.difficulty = _diffchosen>>
<<gotowipehistory 'QuestGen'>><p>Must have built the following improvement:</p>
<<for _ibt, _bt range setup.buildingtemplate>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Building(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>><p>Must <<dangertext 'NOT'>> have the following contact:</p>
<<for _ibt, _bt range setup.contacttemplate>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoContact(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>><p>Must have the following contact:</p>
<<for _ibt, _bt range setup.contacttemplate>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasContact(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>>This event must NOT already been scheduled: <br/>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoEvent(_event)>>
<</link>>
<br/>
<</capture>>
<</for>>At <<dangertext 'LEAST'>> <<numberbox '_favor' 300>> favor with:
<<message '(?)'>>
Insert this as 10 times the amount displayed in game.
For example, to add 20.5 favor, put 205.
Maximum favor is <<= setup.FAVOR_MAX >>.
5.0 favor is worth <<money 1000>>.
<</message>>
<<for _icompany, _company range $company>>
<<capture _company>>
<<if _company != $company.player>>
<br/>
<<rep _company>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.FavorAtLeast(_company, _favor)>>
<</link>>
<</if>>
<</capture>>
<</for>>At <<dangertext 'LEAST'>> <<numberbox '_ire' 20>> ire with:
<<message '(?)'>>
1 ire is worth <<money 500>>. When ire reaches 20,
something bad will happen to the company.
<</message>>
<<for _icompany, _company range $company>>
<<capture _company>>
<<if _company != $company.player>>
<br/>
<<rep _company>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.IreAtLeast(_company, _ire)>>
<</link>>
<</if>>
<</capture>>
<</for>>Must have the following item: <br/>
<<for _ibt, _bt range setup.item>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasItem(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>>Must <<dangertext 'NOT'>> have the following item: <br/>
<<for _ibt, _bt range setup.item>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoItem(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>>Slave must be in a bedchamber containing the following furniture: <br/>
<<for _ibt, _bt range setup.item>>
<<if _bt.getItemClass() == setup.itemclass.furniture>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SlaveBedchamberHasFurniture(_bt)>>
<</link>>
<</capture>>
<br/>
<</if>>
<</for>><<set $qrestriction = setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers)>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslaves)>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.UnitGroupHasUnit(setup.unitgroup.escapedslaves)>>
<<include 'QGRestrictionDone'>>At least <<numberbox '_money' 100>> money.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Money(_money)>>
<</link>>This restriction is NEVER satisfied. Shows up as: <<textbox '_thistext' 'You died.'>>
Useful for flavor texts.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Never(_thistext)>>
<</link>>At least <<numberbox '_prestige' 10>> prestige.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Prestige(_prestige)>>
<</link>>Must NOT currently doing or having the following quest: <br/>
<<devchoosequest 'RestrictionNoQuestDo'>><<set $qrestriction = setup.qres.NoQuest(_questchosen)>>
<<gotowipehistory 'QGRestrictionDone'>><<set $qrestriction = setup.qres.QuestUnique()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.OpportunityUnique()>>
<<include 'QGRestrictionDone'>>Quest/Opportunity can only be generated at most once per <<numberbox '_cooldown' 8>> weeks.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Cooldown(_cooldown)>>
<</link>>Do NOT currently have the following opportunity: <br/>
<<devchooseopportunity 'RestrictionNoOpportunityDo'>><<set $qrestriction = setup.qres.NoOpportunity(_opportunitychosen)>>
<<gotowipehistory 'QGRestrictionDone'>>Must have successfully completed this quest: <br/>
<<devchoosequest 'RestrictionQuestDoneDo'>><<set $qrestriction = setup.qres.QuestDone(_questchosen)>>
<<gotowipehistory 'QGRestrictionDone'>><p>
<<devactordefault>> must satisfy:
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Actor($qgDefaultActorName, $qrestriction ? $qrestriction.restriction : setup.qres.Never('Never'))>>
<</link>><b><i><<= _entry.actor_name >></i> must satisfy:</b>
<<capture _passage, _ientry, _entry, _listpath>>
<<link '(change actor)' 'RestrictionActor'>>
<<set $qPassageName = _passage>>
<<set $qJsPath = _listpath>>
<<set $qListIndex = _ientry>>
<<set $qrestriction = _entry>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</capture>><<set $qrestriction = setup.qres.ExistUnit([])>>
<<gotowipehistory 'QGRestrictionDone'>>Must exist some unit that satisfies all of these:<<set $qrestriction = setup.qres.NotExistUnit([])>>
<<gotowipehistory 'QGRestrictionDone'>>Must <<dangertext 'NOT'>> exist some unit that satisfies all of these:<p>
<<devactor '_actorname1'>> must be best friends with
<<devactor '_actorname2'>>.
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.BestFriends(_actorname1, _actorname2)>>
<</link>><p>
<<devactor '_actorname1'>> must be lovers with
<<devactor '_actorname2'>>.
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Lovers(_actorname1, _actorname2)>>
<</link>><<set $qrestriction = setup.qres.Not(setup.qres.Never('Never'))>>
<<gotowipehistory 'QGRestrictionDone'>><<gotowipehistory 'RestrictionNot'>><b>Must be false:</b><<set $qrestriction = setup.qres.Or([])>>
<<gotowipehistory 'QGRestrictionDone'>><<gotowipehistory 'RestrictionOr'>><<dangertextlite 'At least one'>> of the following must be true:<<set $qrestriction = setup.qres.And([])>>
<<gotowipehistory 'QGRestrictionDone'>><<gotowipehistory 'RestrictionAnd'>><<dangertextlite 'ALL'>> of the following must be true:<<set $qrestriction = setup.qres.Player(setup.qres.Never('Never'))>>
<<gotowipehistory 'QGRestrictionDone'>><b>Player character must satisfy:</b><<set $qrestriction = setup.qres.Owner(setup.qres.Never('Never'))>>
<<gotowipehistory 'QGRestrictionDone'>><b>Slave's owner must satisfy:</b><<set $qrestriction = setup.qres.BedchamberOtherSlave(setup.qres.Never('Never'))>>
<<gotowipehistory 'QGRestrictionDone'>><b>The other slave in bedchamber must satisfy:</b><<set $qrestriction = setup.qres.BestFriend(setup.qres.Never('Never'))>>
<<gotowipehistory 'QGRestrictionDone'>><b>Unit's best friend or lover must satisfy:</b><<set $qrestriction = setup.qres.HasSlave()>>
<<include 'QGRestrictionDone'>>Has at least one slave with all the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasSlaveWithTraits(_chosentraits)>>
<</link>>
<<include 'ChooseTraits'>>None of your slaves has <<dangertext 'ALL'>> the following traits (i.e., it
is ok if they only have one or two, but not ALL of the traits):
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoSlaveWithTraits(_chosentraits)>>
<</link>>
<<include 'ChooseTraits'>>Has at least one slaver with all the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasSlaverWithTraits(_chosentraits)>>
<</link>>
<<include 'ChooseTraits'>>None of your slavers has <<dangertext 'ALL'>> the following traits (i.e., it
is ok if they only have one or two, but not ALL of the traits):
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoSlaverWithTraits(_chosentraits)>>
<</link>>
<<include 'ChooseTraits'>><<set $qrestriction = setup.qres.SlaveHasBedchamber()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.SlaveNoBedchamber()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.SlaveBedchamberFullUsableByYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.SlaveOwnedByYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.Bodyshifter()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.NotBusy()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.SlaveUsableByYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.Home()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.Available()>>
<<include 'QGRestrictionDone'>><p>Must have a unit on the following duty, and the unit must be <<successtext 'available'>>:</p>
<<for _duty range setup.dutytemplate>>
<<= _duty.prototype.getName()>>
<<capture _duty>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasUnitOnDuty(_duty)>>
<</link>>
<</capture>>
<br/>
<</for>>Unit's friendship with you is at most <<numberbox '_level' -500>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.FriendshipWithYouAtMost(_level)>>
<</link>><<set _default = setup.LEVEL_PLATEAU>>
Unit's friendship with you is at least <<numberbox '_level' 500>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.FriendshipWithYouAtLeast(_level)>>
<</link>><<set _default = setup.LEVEL_PLATEAU>>
Unit must have a best friend / lover, and their friendship is at least
<<numberbox '_level' 500>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.BestFriendFriendshipAtLeast(_level)>>
<</link>><<set _default = setup.LEVEL_PLATEAU>>
Unit must have a best friend / lover, and their friendship is at most
<<numberbox '_level' -500>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.BestFriendFriendshipAtMost(_level)>>
<</link>><<set $qrestriction = setup.qres.BestFriendExist()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.LoverExist()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.YourBestFriend()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.YourLover()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.RememberUnit()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.BestFriendWithRememberedUnit()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.CanBeLoverWithBestFriend()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.CanBeLoverWithYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsInjured()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.NotInjured()>>
<<include 'QGRestrictionDone'>>Unit must have the following job: <br/>
<<for _ibt, _bt range setup.job>>
<<rep _bt>>
<<capture _bt>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Job(_bt)>>
<</link>>
<</capture>>
<br/>
<</for>><<set $qrestriction = setup.qres.Job(setup.job.slaver)>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.Job(setup.job.slave)>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.HasFamilyWithJob(setup.job.slaver)>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.HasFamilyWithJob(setup.job.slave)>>
<<include 'QGRestrictionDone'>>Unit has been with your company for at most <<numberbox '_weeks' 27>> weeks.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.WeeksWithCompanyAtMost(_weeks)>>
<</link>>Unit has been with your company for at least <<numberbox '_weeks' 53>> weeks.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.WeeksWithCompanyAtLeast(_weeks)>>
<</link>><<set _default = setup.LEVEL_PLATEAU - 1>>
Unit's level is at most <<numberbox '_level' _default>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.LevelAtMost(_level)>>
<</link>><<set _default = setup.LEVEL_PLATEAU>>
Unit's level is at least <<numberbox '_level' _default>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.LevelAtLeast(_level)>>
<</link>>Unit's slave value is at most <<numberbox '_slavevalue' 1500 >>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SlaveValueAtMost(_slavevalue)>>
<</link>>Unit's slave value is at least <<numberbox '_slavevalue' 1500 >>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SlaveValueAtLeast(_slavevalue)>>
<</link>>Unit has the following tag/flag: <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasTag(_tag)>>
<</link>>Unit does <<dangertext 'NOT'>> have the following tag/flag: <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoTag(_tag)>>
<</link>>Does not exists a unit <<dangertext 'ANYWHERE'>>
<<message '(?)'>>
This includes slavers that you have lost, but are still rescue-able.
<</message>>
that have the following tag/flag: <<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoUnitWithTag(_tag)>>
<</link>>At least one of your <<rep setup.job.slaver>> slavers has the tag / flag:
<<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasUnitWithTagAndJob(_tag, setup.job.slaver)>>
<</link>>At least one of your <<rep setup.job.slave>> slaves has the tag / flag:
<<textbox '_tag' ''>>.
<<include 'CostTagHelp'>>
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasUnitWithTagAndJob(_tag, setup.job.slave)>>
<</link>>Unit has the following title:
<<devtoolchoosetitle 'RestrictionHasTitleDo'>><<set $qrestriction = setup.qres.HasTitle(_chosentitle)>>
<<gotowipehistory 'QGRestrictionDone'>>Unit does <<dangertext 'not'>> have the following title:
<<devtoolchoosetitle 'RestrictionNoTitleDo'>><<set $qrestriction = setup.qres.NoTitle(_chosentitle)>>
<<gotowipehistory 'QGRestrictionDone'>>Has a slaver with the following title:
<<devtoolchoosetitle 'RestrictionHasSlaverWithTitleDo'>><<set $qrestriction = setup.qres.HasUnitWithTitle(_chosentitle, {job_key: 'slaver'})>>
<<gotowipehistory 'QGRestrictionDone'>>Has a slave with the following title:
<<devtoolchoosetitle 'RestrictionHasSlaveWithTitleDo'>><<set $qrestriction = setup.qres.HasUnitWithTitle(_chosentitle, {job_key: 'slave'})>>
<<gotowipehistory 'QGRestrictionDone'>>No a slaver with the following title:
<<devtoolchoosetitle 'RestrictionNoSlaverWithTitleDo'>><<set $qrestriction = setup.qres.NoUnitWithTitle(_chosentitle, {job_key: 'slaver'})>>
<<gotowipehistory 'QGRestrictionDone'>>Does not exist a slave with the following title:
<<devtoolchoosetitle 'RestrictionNoSlaveWithTitleDo'>><<set $qrestriction = setup.qres.NoUnitWithTitle(_chosentitle, {job_key: 'slave'})>>
<<gotowipehistory 'QGRestrictionDone'>>Does not exist any unit with the following title:
<<devtoolchoosetitle 'RestrictionNoUnitWithTitleDo'>><<set $qrestriction = setup.qres.NoUnitWithTitle(_chosentitle)>>
<<gotowipehistory 'QGRestrictionDone'>>Exists any unit with the following title:
<<devtoolchoosetitle 'RestrictionHasUnitWithTitleDo'>><<set $qrestriction = setup.qres.HasUnitWithTitle(_chosentitle)>>
<<gotowipehistory 'QGRestrictionDone'>><div class='filtercard'>
Display:
<<if $gTraitDisplay>>
<<link 'Compact'>>
<<set $gTraitDisplay = null>>
<<refreshtraits>>
<</link>>
<<else>>
Compact
<</if>>
|
<<if $gTraitDisplay == 'long'>>
Long
<<else>>
<<link 'Long'>>
<<set $gTraitDisplay = 'long'>>
<<refreshtraits>>
<</link>>
<</if>>
|
<<if $gTraitDisplay == 'longlist'>>
Long List
<<else>>
<<link 'Long List'>>
<<set $gTraitDisplay = 'longlist'>>
<<refreshtraits>>
<</link>>
<</if>>
|
<<if $gTraitDisplay == 'full'>>
Full
<<else>>
<<link 'Full'>>
<<set $gTraitDisplay = 'full'>>
<<refreshtraits>>
<</link>>
<</if>>
<br/>
Filter:
<<if !$gTraitFilterTag>>
All
<<else>>
<<link 'All'>>
<<set $gTraitFilterTag = null>>
<<refreshtraits>>
<</link>>
<</if>>
<<for _itagkey, _tagkey range setup.TraitHelper.TRAIT_MAIN_TAGS>>
<<capture _tagkey>>
|
<<if $gTraitFilterTag == _tagkey>>
<<= _tagkey>>
<<else>>
<<link _tagkey>>
<<set $gTraitFilterTag = _tagkey>>
<<refreshtraits>>
<</link>>
<</if>>
<</capture>>
<</for>>
</div><<focwidget 'selecttrait'>>
<<focwidget 'loadtraits'>>
<<include 'LoadTraitFilter'>>
<<for _itrait, _trait range _traitpool >>
<<if !$gTraitFilterTag || _trait.getTags().includes($gTraitFilterTag)>>
<<capture _trait>>
<<rep _trait>>
<<link '(+)'>>
<<set $rTrait = _trait>>
<<include _targetpassage>>
<</link>>
<<if $gTraitDisplay == 'full' || $gTraitDisplay == 'long' || $gTraitDisplay == 'longlist'>>
<<nameof _trait>>
<</if>>
<<if $gTraitDisplay == 'full'>>:<<= _trait.getDescriptionDisplay() >> <br/>
<<elseif $gTraitDisplay == 'longlist'>><br/>
<<else>>
|
<</if>>
<</capture>>
<</if>>
<</for>>
<</focwidget>>
<<focwidget 'refreshtraits'>>
<<replace '#traitdiv'>>
<<loadtraits>>
<</replace>>
<</focwidget>>
<<set _targetpassage = $args[0]>>
<<set _traitpool = $args[1]>>
<<if !_traitpool>> <<set _traitpool = setup.trait>> <</if>>
<div id='traitdiv'>
<<loadtraits>>
</div>
<</focwidget>>
<<focwidget 'selecttraitsload'>>
<div class='contactcard'>
<<for _itrait, _trait range _rTraits >>
<<capture _itrait>>
<<rep _trait>>
<<link '(-)'>>
<<run _rTraits.splice(_itrait, 1)>>
<<selecttraitrefreshcat>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add trait:
<<include 'LoadTraitFilter'>>
<<for _itrait, _trait range _traitpool>>
<<if !$gTraitFilterTag || _trait.getTags().includes($gTraitFilterTag)>>
<<capture _trait>>
<<if !_rTraits.includes(_trait)>>
<<rep _trait>>
<<link '(+)'>>
<<run _rTraits.push(_trait)>>
<<selecttraitrefreshcat>>
<</link>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
<<if $gTraitDisplay == 'full' || $gTraitDisplay == 'long' || $gTraitDisplay == 'longlist'>>
<<nameof _trait>>
<</if>>
<<if $gTraitDisplay == 'full'>>:<<= _trait.getDescriptionDisplay() >> <br/>
<<elseif $gTraitDisplay == 'longlist'>><br/>
<<else>>
|
<</if>>
<</capture>>
<</if>>
<</for>>
</div>
<</focwidget>>
<<focwidget 'selecttraitrefreshcat'>>
<<replace '#selecttraitsdiv'>>
<<selecttraitsload>>
<</replace>>
<</focwidget>>
<<focwidget 'selecttraits'>>
<<focwidget 'refreshtraits'>>
<<selecttraitrefreshcat>>
<</focwidget>>
<<set _traitpool = $args[0]>>
<<set _rTraits = []>>
<div id='selecttraitsdiv'>
<<selecttraitsload>>
</div>
<</focwidget>><<set _chosentraits = []>>
<<focwidget 'refreshtraits'>>
<<refresharraycat>>
<</focwidget>>
<<focwidget 'loadarraycat'>>
<div class='dutycard'>
Chosen traits:
<<for _itrait, _trait range _chosentraits >>
<<capture _itrait>>
<<rep _trait>>
<<link '(-)'>>
<<run _chosentraits.splice(_itrait, 1)>>
<<refresharraycat>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add new trait:
<<include 'LoadTraitFilter'>>
<<for _itrait, _trait range setup.trait>>
<<if !$gTraitFilterTag || _trait.getTags().includes($gTraitFilterTag)>>
<<capture _trait>>
<<if !_chosentraits.includes(_trait)>>
<<rep _trait>>
<<link '(+)'>>
<<run _chosentraits.push(_trait)>>
<<refresharraycat>>
<</link>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
<<if $gTraitDisplay == 'full' || $gTraitDisplay == 'long' || $gTraitDisplay == 'longlist'>>
<<nameof _trait>>
<</if>>
<<if $gTraitDisplay == 'full'>>:<<= _trait.getDescriptionDisplay() >> <br/>
<<elseif $gTraitDisplay == 'longlist'>><br/>
<<else>>
|
<</if>>
<</capture>>
<</if>>
<</for>>
</div>
<</focwidget>>
<div class='chosencatdiv'>
<<loadarraycat>>
</div>
<<focwidget 'refresharraycat'>>
<<replace '.chosencatdiv'>>
<<loadarraycat>>
<</replace>>
<</focwidget>><<include LoadSelectTrait>>
<p>Unit must have the following trait:
<<message '(?)'>>
Note that a stronger trait will "dominate" the lower trait. Hence, if a unit has
a large dick, it will count as having a tiny dick as well.
(You can see it by the "number" on the top right of the icon.)
<</message>>
</p>
<<selecttrait 'RestrictionTraitDo'>><<set $qrestriction = setup.qres.Trait($rTrait)>>
<<gotowipehistory 'QGRestrictionDone'>><<include LoadSelectTrait>>
<p>Unit must <<dangertext 'NOT'>> have the following trait:
<<message '(?)'>>
Note that a stronger trait will "dominate" the lower trait. Hence, if a unit has
a large dick, it will count as having a tiny dick as well.
<</message>></p>
<<selecttrait 'RestrictionNoTraitDo'>><<set $qrestriction = setup.qres.NoTrait($rTrait)>>
<<gotowipehistory 'QGRestrictionDone'>><p>Unit must have <<dangertext 'at least one'>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.AnyTrait(_chosentraits)>>
<</link>>
</p>
<<include 'ChooseTraits'>><<include LoadSelectTrait>>
<p>Unit must have the following trait EXACTLY:
<<message '(?)'>>
This is exact trait --- e.g., if you choose muscle_strong,
then muscle_verystrong is not counted.
<</message>>
</p>
<<selecttrait 'RestrictionTraitExactDo'>><<set $qrestriction = setup.qres.TraitExact($rTrait)>>
<<gotowipehistory 'QGRestrictionDone'>><p>Unit must have <<dangertext 'NONE'>> of the following traits (exact):
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoTraits(_chosentraits, true)>>
<</link>>
</p>
<<include 'ChooseTraits'>><p>Unit must have <<successtext 'ALL'>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.AllTraits(_chosentraits, false)>>
<</link>>
</p>
<<include 'ChooseTraits'>><<include LoadSelectTrait>>
<p>Unit must have the following trait as an INNATE trait:
<<message '(?)'>>
Innate trait is the traits that the unit should have when fully purified.
<</message>>
</p>
<<selecttrait 'RestrictionInnateTraitDo' setup.TraitHelper.getAllTraitsOfTags(['skin'])>><<set $qrestriction = setup.qres.InnateTrait($rTrait)>>
<<gotowipehistory 'QGRestrictionDone'>><<set $qrestriction = setup.qres.NotYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.You()>>
<<include 'QGRestrictionDone'>>Variable <<textbox '_key' ''>> must equals <<textbox '_value' ''>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.VarEqual(_key, _value)>>
<</link>>Variable <<textbox '_key' ''>> must >= <<numberbox '_value' ''>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.VarGte(_key, _value)>>
<</link>>Variable <<textbox '_key' ''>> must <= <<numberbox '_value' ''>>.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.VarLte(_key, _value)>>
<</link>>Variable <<textbox '_key' ''>> must be unset.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.VarNull(_key)>>
<</link>>Choose restriction type:
<<back 'Back'>>
<hr/>
<div><b>Company</b></div>
<div>
[[Improvement|RestrictionBuilding]]
</div>
<div>
[[Money|RestrictionMoney]]
</div>
<div>
[[Prestige|RestrictionPrestige]]
</div>
<div>
<<message 'Favor / Ire...'>>
<div class='marketobjectcard'>
<div>
[[Favor at LEAST this much |RestrictionFavorAtLeast]]
</div>
<div>
[[Ire at LEAST this much |RestrictionIreAtLeast]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Item...'>>
<div class='marketobjectcard'>
<div>
[[Must have item|RestrictionHasItem]]
</div>
<div>
[[Must NOT have item|RestrictionNoItem]]
</div>
</div>
<</message>>
</div>
<hr/>
<div><b>Quest / Opportunity / Event</b></div>
<<if $devtooltype == 'quest'>>
<div>
[[Unique|RestrictionQuestUnique]]
<<message '(?)'>>
Only one instance of this quest can exists at any given time.
You can get more of this quest once the quest expires / complete.
<</message>>
</div>
<<elseif $devtooltype == 'opportunity'>>
<div>
[[Unique|RestrictionOpportunityUnique]]
<<message '(?)'>>
Only one instance of this opportunity can exists at any given time.
You can get more of this opportunity once the opportunity expires / complete.
Usually used in combination with the
"(Certain quest does not exist)".
<</message>>
</div>
<</if>>
<div>
<<message 'Quest / Opportunity / Event...'>>
<div class='marketobjectcard'>
<<if $devtooltype == 'quest' || $devtooltype == 'opportunity'>>
<div>
[[Cooldown|RestrictionCooldown]]
<<message '(?)'>>
This $devtooltype can only be created at most once per
this many weeks.
<</message>>
</div>
<</if>>
<div>
[[Quest cannot exist|RestrictionNoQuest]]
<<message '(?)'>>
Must not have or already doing the chosen quest.
Most commonly used in conjunction with (Unique) ---
e.g., to ensure that none of the three variations of
the flesh shaping temple quest can exist simultaneously.
<</message>>
</div>
<div>
[[Must have ever completed quest|RestrictionQuestDone]]
</div>
<div>
[[Opportunity cannot exist|RestrictionNoOpportunity]]
<<message '(?)'>>
Must not currently have this opportunity.
Can be used with quests that rewards opportunities, to ensure the player
has to answer the opportunity first before proceeding.
<</message>>
</div>
<div>
[[Event cannot already been scheduled|RestrictionNoEvent]]
<<message '(?)'>>
Must not have this event scheduled to occur in the future.
<</message>>
</div>
</div>
<</message>>
</div>
<hr/>
<div><b>Unit</b></div>
<div>
<<message 'Slaver...'>>
<div class='marketobjectcard'>
<div><b>Trait</b></div>
<div>
[[Exist slaver with ALL these traits|RestrictionHasSlaverWithTraits]]
</div>
<div>
[[NOT exist slaver with ALL these traits|RestrictionNoSlaverWithTraits]]
</div>
<hr/>
<div><b>Title</b></div>
<div>
[[Exist slaver with title|RestrictionHasSlaverWithTitle]]
</div>
<div>
[[NOT exist slaver with title|RestrictionNoSlaverWithTitle]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Slave...'>>
<div class='marketobjectcard'>
<div>
[[Have any slave|RestrictionHasSlave]]
</div>
<hr/>
<div><b>Trait</b></div>
<div>
[[Exist slave with ALL these traits|RestrictionHasSlaveWithTraits]]
</div>
<div>
[[NOT exist slave with ALL these traits|RestrictionNoSlaveWithTraits]]
</div>
<hr/>
<div><b>Title</b></div>
<div>
[[Exist slave with title|RestrictionHasSlaveWithTitle]]
</div>
<div>
[[NOT exist slave with title|RestrictionNoSlaveWithTitle]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Unit...'>>
<div class='marketobjectcard'>
<div>
[[Exist unit that satisfies...|RestrictionExistUnit]]
</div>
<div>
[[NOT exist unit that satisfies...|RestrictionNotExistUnit]]
</div>
<div>
[[Has unit on this duty|RestrictionHasUnitOnDuty]]
</div>
<div>
<<message 'Tag...'>>
<div class='slavercard'>
<div>
[[Exist slave with tag|RestrictionHasSlaveWithTag]]
</div>
<div>
[[Exist slaver with tag|RestrictionHasSlaverWithTag]]
</div>
<div>
[[No unit with tag|RestrictionNoUnitWithTag]]
<<message '(?)'>>
This means that there cannot exist a unit ANYWHERE that have this tag.
This includes slavers that are lost, but rescue-able, as well as similar-fated slaves.
<</message>>
</div>
</div>
<</message>>
<<include 'CostTagHelp'>>
</div>
<div>
[[Exist unit with title|RestrictionHasUnitWithTitle]]
</div>
<div>
[[NOT exist unit with title|RestrictionNoUnitWithTitle]]
</div>
<div>
<<message 'Multiple units...'>>
<div class='slavercard'>
<div>
[[Two units must be best friends|RestrictionBestFriends]]
</div>
<div>
[[Two units must be lovers|RestrictionLovers]]
</div>
</div>
<</message>>
</div>
</div>
<</message>>
</div>
<div>
<<message 'A certain unit satisfies...'>>
<div class='marketobjectcard'>
<div>
<<link 'You satisfies this'>>
<<include 'RestrictionPlayer'>>
<</link>>
</div>
<<if $qgDefaultActorName || $dtquest.getAllActorNames().length>>
<div>
[[Actor satisfies this|RestrictionActor]]
</div>
<</if>>
</div>
<</message>>
</div>
<hr/>
<div><b>Advanced</b></div>
<div>
<<message 'Recursive...'>>
<div class='marketobjectcard'>
<div>
[[OR: At least one of these must be true|RestrictionOr]]
</div>
<div>
[[AND: ALL of these must be true|RestrictionAnd]]
</div>
<div>
[[NOT: This requirement must be false|RestrictionNot]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Others..'>>
<div class='marketobjectcard'>
<div>
<<message 'Contact...'>>
<div class='slavercard'>
<div>
[[Contact exists|RestrictionHasContact]]
</div>
<div>
[[Contact does NOT exist|RestrictionNoContact]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Exist missing unit...'>>
<div class='slavercard'>
<div>
[[Exist rescue-able missing slaver|RestrictionHasMissingSlaver]]
</div>
<div>
[[Exist rescue-able missing slave|RestrictionHasMissingSlave]]
</div>
<div>
[[Exist escaped slave|RestrictionHasEscapedSlave]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Variable...'>>
<div class='slavercard'>
<div>
[[Variable equals|RestrictionVarEqual]]
</div>
<div>
[[Variable greater than or equal|RestrictionVarGte]]
</div>
<div>
[[Variable less than or equal|RestrictionVarLte]]
</div>
<div>
[[Variable is unset|RestrictionVarNull]]
</div>
</div>
<</message>>
</div>
<div>
[[Never|RestrictionNever]]
</div>
</div>
<</message>>
</div>
<br/>
<br/>
<<devtoolreturnbutton>><div>
Choose restriction type:
</div>
<hr/>
<div><b>Status</b></div>
<div>
[[Is a slaver|RestrictionJobSlaver]]
</div>
<div>
[[Is a slave|RestrictionJobSlave]]
</div>
<div>
<<message 'Busy / Injury...'>>
<div class='marketobjectcard'>
<div><b>Status</b></div>
<div>
[[Is available|RestrictionAvailable]]
<<message '(?)'>>
This means the unit can go on a quest. Note that this includes
units on duty.
<</message>>
</div>
<div>
[[Is available and not on duty|RestrictionNotBusy]]
</div>
<div>
[[Is at home|RestrictionHome]]
<<message '(?)'>>
This is the same with unit being available, but also includes injured units and units on duty.
<</message>>
</div>
<div>
[[Is a slave usable by you|RestrictionSlaveUsableByYou]]
<<message '(?)'>>
Whether you can interact with this particular slave. You cannot interact with injured slaves
and slaves that have been set as a private slave for other slavers.
<</message>>
</div>
<hr/>
<div><b>Status</b></div>
<div>
[[Is injured|RestrictionIsInjured]]
</div>
<div>
[[Is NOT injured|RestrictionNotInjured]]
</div>
<br/>
</div>
<</message>>
<br/>
<hr/>
<div><b>Traits and characteristic</b></div>
<div>
<<message "Trait...">>
<div class='marketobjectcard'>
<div><b>One trait</b></div>
<div>
[[Has this trait|RestrictionTrait]]
<<message '(?)'>>
This is the standard checking where stronger trait will count for weaker trait.
E.g., if a <<rep setup.trait.muscle_verystrong>> unit counts for <<rep setup.trait.muscle_strong>>.
If you want exact checking, use "Has this EXACT trait".
<</message>>
</div>
<div>
[['NOT have this trait'|RestrictionNoTrait]]
<<message '(?)'>>
Behave similarly with the above, i.e.,
a <<rep setup.trait.muscle_verystrong>> unit counts for <<rep setup.trait.muscle_strong>>.
If you want exact checking, use "(NOT have any of these traits (exact))" below.
<</message>>
</div>
<div>
[[Unit must have this EXACT trait|RestrictionTraitExact]]
<<message '(?)'>>
This check will require the unit to have this EXACT trait --- i.e.,
a <<rep setup.trait.muscle_verystrong>> will NOT count for <<rep setup.trait.muscle_strong>>.
If you want inexact check, use "Has this trait".
<</message>>
</div>
<div>
[[Unit must INNATELY have this trait|RestrictionInnateTrait]]
<<message '(?)'>>
Innate trait are traits that the unit will have when fully purified.
Generally, this is the skin traits they started with, e.g.,
<<rep setup.trait.body_dragonkin>> for most dragonkins.
<</message>>
</div>
<hr/>
<div><b>Multiple traits</b></div>
<div>
[[Has AT LEAST ONE of these traits|RestrictionAnyTrait]]
</div>
<div>
[['Has ALL these traits'|RestrictionAllTraits]]
</div>
<div>
[['NOT have any of these traits (exact)'|RestrictionNoTraitsExact]]
</div>
</div>
<</message>>
</div>
<div>
<<message "Level...">>
<div class='marketobjectcard'>
<div>
[[Level at LEAST|RestrictionLevelAtLeast]]
</div>
<div>
[[Level at MOST|RestrictionLevelAtMost]]
</div>
</div>
<</message>>
</div>
<div>
<<message "Slave value...">>
<div class='marketobjectcard'>
<div>
[[Slave value at least|RestrictionSlaveValueAtLeast]]
</div>
<div>
[[Slave value at most|RestrictionSlaveValueAtMost]]
</div>
</div>
<</message>>
</div>
<hr/>
<div><b>Title, Identity, and Family</b></div>
<div>
<<message "Title...">>
<div class='marketobjectcard'>
<div>
[[Has title|RestrictionHasTitle]]
</div>
<div>
[[NOT have title|RestrictionNoTitle]]
</div>
</div>
<</message>>
</div>
<div>
<<message "You...">>
<div class='marketobjectcard'>
<div><b>Identity</b></div>
<div>
[[Is not you|RestrictionNotYou]]
</div>
<div>
[[Is you|RestrictionYou]]
</div>
<hr/>
<div><b>Friendship / Lover</b></div>
<div>
[[Is your best friend / lover|RestrictionYourBestFriend]]
</div>
<div>
[[Is your lover|RestrictionYourLover]]
</div>
<div>
[[Can become your lover|RestrictionCanBeLoverWithYou]]
</div>
<div>
[[Friendship with you at least|RestrictionFriendshipWithYouAtLeast]]
</div>
<div>
[[Friendship with you at most|RestrictionFriendshipWithYouAtMost]]
</div>
</div>
<</message>>
</div>
<div>
<<message "Friendship / Lover...">>
<div class='marketobjectcard'>
<div><b>Existance</b></div>
<div>
[[Must have best friend / lover|RestrictionBestFriendExist]]
</div>
<div>
[[Must have lover|RestrictionLoverExist]]
</div>
<hr/>
<div><b>Value</b></div>
<div>
[[Friendship with best friend at least|RestrictionBestFriendFriendshipAtLeast]]
</div>
<div>
[[Friendship with best friend at most|RestrictionBestFriendFriendshipAtMost]]
</div>
<div>
[[Can make best friend into lover|RestrictionCanBeLoverWithBestFriend]]
<<message '(?)'>>
<div class='helpcard'>
A unit can turn its best friend into lover when the following is satisfied:
<ol>
<li>
Both units does not already have lovers.
</li>
<li>
Their friendship is at least <<= setup.LOVERS_HOOKUP_FRIENDSHIP >>.
</li>
<li>
Satisfies the orientation settings of the player (e.g., hetero only or gay only).
</li>
<li>
If it's incest, then this can only happen with small probability.
</li>
</ol>
</div>
<</message>>
</div>
<div><b>Identity</b></div>
<div>
[[Remember unit|RestrictionRememberUnit]]
</div>
<div>
[[Must be the best friend / lover of remembered unit|RestrictionBestFriendWithRememberedUnit]]
<<message '(?)'>>
<div class='helpcard'>
This restricts this unit to be the best friend / lover of the unit on which the (Remember Unit)
above is located.
<br/>
<br/>
For example, to create an event for two lovers, then you use the following restrictions:
<ol>
<li>
Role a: Unit must have a lover
Role a: Unit's best friend / lover must satisfy: Unit is available
Role a: Remember unit
</li>
<li>
Role b: Unit must be the best friend / lover of remembered unit
</li>
</ol>
</div>
<</message>>
</div>
<hr/>
<div><b>Custom</b></div>
<div>
[[Best friend / lover satisfies...|RestrictionBestFriend]]
</div>
</div>
<</message>>
</div>
<div>
<<message "Family...">>
<div class='marketobjectcard'>
<div>
[[Has one of your slavers as a family member|RestrictionHasFamilyWithJobSlaver]]
</div>
<div>
[[Has one of your slaves as a family member|RestrictionHasFamilyWithJobSlave]]
</div>
</div>
<</message>>
</div>
<hr/>
<div><b>Advanced</b></div>
<div>
<<message 'Bedchambers...'>>
<div class='marketobjectcard'>
<div><b>Basic</b></div>
<div>
[[Is assigned to some bedchamber|RestrictionSlaveHasBedchamber]]
</div>
<div>
[[Is NOT assigned to some bedchamber|RestrictionSlaveNoBedchamber]]
</div>
<div>
<<message "Slave's owner...">>
<div class='slavercard'>
<div>
[[Is owned by you|RestrictionSlaveOwnedByYou]]
</div>
<div>
[["Slave's owner must satisfy..."|RestrictionOwner]]
</div>
</div>
<</message>>
</div>
<div>
[[Is usable by you|RestrictionSlaveUsableByYou]]
</div>
<hr/>
<div><b>The other slave in the bedchamber</b></div>
<div>
[[Is in a full bedchamber, with both slaves available to you|RestrictionSlaveBedchamberFullUsableByYou]]
</div>
<div>
[[The other slave in the bedchamber must satisfy this|RestrictionBedchamberOtherSlave]]
</div>
<hr/>
<div><b>Furniture</b></div>
<div>
[[Is in a bedchamber with this furniture|RestrictionSlaveBedchamberHasFurniture]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Recursive...'>>
<div class='marketobjectcard'>
<div>
[[OR: At least one of these must be true|RestrictionOrUnit]]
</div>
<div>
[[AND: ALL of these must be true|RestrictionAndUnit]]
</div>
<div>
[[NOT: This requirement must not be true|RestrictionNotUnit]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Others...'>>
<div class='marketobjectcard'>
<div><b>Join week</b></div>
<div>
[['Has been with your company for at least this many weeks'|RestrictionWeeksWithCompanyAtLeast]]
</div>
<div>
[['Has been with your company for at most this many weeks'|RestrictionWeeksWithCompanyAtMost]]
</div>
<hr/>
<div><b>Others</b></div>
<div>
[['Is a bodyshifter'|RestrictionBodyshifter]]
</div>
<<message "Tag...">>
<div class='slavercard'>
<div>
[[Has this tag|RestrictionHasTag]]
</div>
<div>
[[NOT have this tag|RestrictionNoTag]]
</div>
</div>
<</message>>
<<include 'CostTagHelp'>>
</div>
<</message>>
</div>
<br/>
<br/>
<<devtoolreturnbutton>><<set _entry = $qrestriction>>
<<unset $qrestriction>>
<<include 'DevAddEntry'>><div>
<<devtoolreturnbutton>>
</div>
<div>
<<successtext 'Role name'>>:
<<message '(?)'>>
<div class='helptext'>
Name for this actor. Don't forget to fill this in!
<br/>
<br/>
Put something short,
which will make it easier for you later to refer to the unit in the stories.
<br/>
<br/>
The name must consists of only lower case characters and numbers. No space allowed.
For example, you can put "farmer", or even just "x", but you cannot put "Farmer", "x y", or "Y".
</div>
<</message>>
<<textbox '$qrolename' '' autofocus>>
</div>
Choose criteria:
<<link '(Create new from scratch)' 'CriteriaGen'>>
<<set _qbaserole = null>>
<<include 'CRGenInit'>>
<</link>>
<<focwidget 'roleaddcriteria'>>
<<devgotoreturn>>
<</focwidget>>
<<for _icriteria, _criteria range $qcustomcriteria>>
<br/>
<<capture _criteria>>
<<= _criteria.getName()>>
<<message '(+)'>>
<<criteriacard _criteria>>
<</message>>
<</capture>>
<<set _text = `(Select this)`>>
<<capture _icriteria, _criteria>>
<<link _text>>
<<devroleaddcriteria $qrolename _criteria>>
<</link>>
or
<<link '(New based from this)' 'CriteriaGen'>>
<<set _qbaserole = _criteria>>
<<include 'CRGenInit'>>
<</link>>
<</capture>>
<</for>>
<<set _qmap = setup.DevToolHelper.getCriteriasMap()>>
<<for _skillkey, _qulist range _qmap>>
<br/>
<<capture _qulist>>
<<if _skillkey == 'SLAVE'>>
<<set _text = 'Slave criterias'>>
<<else>>
<<= setup.skill[_skillkey].rep()>>
<<set _text = `${setup.skill[_skillkey].getName()}-based criterias`>>
<</if>>
<<message _text>>
<<for _icriteria, _criteria range _qulist>>
<<capture _criteria>>
<<= _criteria.getName()>>
<<message '(+)'>>
<<criteriacard _criteria>>
<</message>>
<</capture>>
<<set _text = `(Select criteria)`>>
<<capture _criteria>>
<<link _text>>
<<devroleaddcriteria $qrolename _criteria>>
<</link>>
or
<<link '(New based from this)' 'CriteriaGen'>>
<<set _qbaserole = _criteria>>
<<include 'CRGenInit'>>
<</link>>
<</capture>>
<br/>
<</for>>
<</message>>
<</capture>>
<</for>><<if _sobaserole>>
<<set $soname = _sobaserole.getName()>>
<<set $socompany = _sobaserole.getCompany()>>
<<set $soexpires_in = _sobaserole.expires_in>>
<<set $sobase_price = _sobaserole.base_price>>
<<set $sotrait_mult = _sobaserole.trait_multi>>
<<set $sovalue_mult = _sobaserole.value_multi>>
<<set $socrit_traits = Object.keys(_sobaserole.criteria.crit_trait_map).map(a => setup.trait[a])>>
<<set $sodisaster_traits = Object.keys(_sobaserole.criteria.disaster_trait_map).map(a => setup.trait[a])>>
<<set $socritmap = setup.deepCopy(_sobaserole.criteria.crit_trait_map)>>
<<set $sodisastermap = setup.deepCopy(_sobaserole.criteria.disaster_trait_map)>>
<<set $sorestrictions = _sobaserole.criteria.restrictions>>
<<set $soaddons = _sobaserole.addons>>
<<set $sofulfilled = _sobaserole.fulfilled_outcomes>>
<<set $sounfulfilled = _sobaserole.unfulfilled_outcomes>>
<<else>>
<<set $soname = ''>>
<<set $socompany = $company.independent>>
<<set $soexpires_in = 12>>
<<set $sobase_price = 1500>>
<<set $sotrait_mult = 0>>
<<set $sovalue_mult = 1>>
<<set $socrit_traits = []>>
<<set $sodisaster_traits = []>>
<<set $socritmap = {}>>
<<set $sodisastermap = {}>>
<<set $sorestrictions = [setup.qs.job_slave]>>
<<set $soaddons = []>>
<<set $sofulfilled = []>>
<<set $sounfulfilled = []>>
<</if>>
<<dtsavepassage 'SlaveOrderGen'>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtloadpassagelink>>
<p>
Slave order name:
<<message '(?)'>>
Enter the slave order's name. For example: "Order from the Safari Zone"
<</message>>
<<textbox "$soname" $soname>>
</p>
<p>
Order source:
<<message '(?)'>>
Which company logically generate this order. If none is applicable, use the default "Independent" company.
<<dangertextlite 'Not used'>> for anything but flavor text.
<</message>>
<<= $socompany.rep()>>
<<message '(Change)'>>
|
<<for _icompany, _company range $company>>
<<capture _company>>
<<link _company.getName()>>
<<set $socompany = _company>>
<<focgoto 'SlaveOrderGen'>>
<</link>>
|
<</capture>>
<</for>>
<</message>>
</p>
<p>
Expires in:
<<numberbox "$soexpires_in" $soexpires_in>>
weeks.
</p>
<p>
Base price:
<<numberbox "$sobase_price" $sobase_price>>g.
</p>
<p>
Gold per trait match (or negative per disaster match):
<<numberbox "$sotrait_mult" $sotrait_mult>>g.
</p>
<p>
Gold per slave value (can put fraction, e.g., 1.5):
<<numberbox "$sovalue_mult" $sovalue_mult>>g.
</p>
<div class='equipmentcard'>
Unit Restrictions:
<<message '(?)'>>
Only units that satisfies these requirements can fulfill this requirement.
There's also a second "hidden" requirement where the unit must sell for some positive value.
This requirement is ALWAYS here --- if you want random requirements, use the (Addons) field later.
<</message>>
<<devlist '$sorestrictions' '(Add new restriction)' 'QGAddRestrictionUnit' 'SlaveOrderGen'>>
</div>
<<focwidget 'loadcatcrit'>>
<div class='dutycard'>
<<successtext 'CRITICAL'>>:
<<message '(?)'>>
Slaves having this trait will sell for more for this order.
These criterias are ALWAYS here --- if you want random criterias, use the (Addons) field later.
<</message>>
<<for _itrait, _trait range $socrit_traits>>
<<capture _itrait, _trait>>
<<rep _trait>>
<<link '(-)'>>
<<run $socrit_traits.splice(_itrait, 1)>>
<<run delete $socritmap[_trait.key]>>
<<refreshcatcrit>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add new trait:
<<for _itrait, _trait range setup.trait>>
<<if !(_trait.key in $socritmap)>>
<<rep _trait>>
<<capture _trait>>
<<link '(+)'>>
<<run $socrit_traits.push(_trait)>>
<<set $socritmap[_trait.key] = true>>
<<refreshcatcrit>>
<</link>>
<</capture>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
|
<</for>>
</div>
<</focwidget>>
<<focwidget 'loadcatdisaster'>>
<div class='contactcard'>
<<dangertext 'DISASTER'>>:
<<message '(?)'>>
Slaves with these traits will sell for less for this order.
These criterias are ALWAYS here --- if you want random criterias, use the (Addons) field later.
<</message>>
<<for _itrait, _trait range $sodisaster_traits>>
<<capture _itrait>>
<<rep _trait>>
<<link '(-)'>>
<<run $sodisaster_traits.splice(_itrait, 1)>>
<<run delete $sodisastermap[_trait.key]>>
<<refreshcatdisaster>>
<</link>>
|
<</capture>>
<</for>>
<br/>
Add new trait:
<<for _itrait, _trait range setup.trait>>
<<if !(_trait.key in $sodisastermap)>>
<<rep _trait>>
<<capture _trait>>
<<link '(+)'>>
<<run $sodisaster_traits.push(_trait)>>
<<set $sodisastermap[_trait.key] = true>>
<<refreshcatdisaster>>
<</link>>
<</capture>>
<<else>>
<<negtraitcard _trait>>
(+)
<</if>>
|
<</for>>
</div>
<</focwidget>>
<div id='catdivcrit'>
<<loadcatcrit>>
</div>
<<focwidget 'refreshcatcrit'>>
<<replace '#catdivcrit'>>
<<loadcatcrit>>
<</replace>>
<</focwidget>>
<div id='catdivdisaster'>
<<loadcatdisaster>>
</div>
<<focwidget 'refreshcatdisaster'>>
<<replace '#catdivdisaster'>>
<<loadcatdisaster>>
<</replace>>
<</focwidget>>
<div class='bedchambercard'>
Addons:
<<message '(?)'>>
Special modifiers to this order. For example, you can add an addon that requires the slave
to be of a random gender, or an addon that adds random critical traits.
<</message>>
<<link '(Add new addon)' 'QGAddAddon'>>
<</link>>
<<for _iccaddon, _ccaddon range $soaddons>>
<br/>
<<= _ccaddon.explain()>>
<<capture _iccaddon>>
<<link '(delete)' 'SlaveOrderGen'>>
<<run $soaddons.splice(_iccaddon, 1)>>
<</link>>
<</capture>>
<</for>>
</div>
<div class='companycard'>
Outcomes on Fulfillment:
<<message '(?)'>>
Extra things that happen when the order is fulfilled (outside of getting the money specified).
Usually empty, but sometimes can be things such as gaining relations.
<</message>>
<<devlist '$sofulfilled' '(Add new result)' 'QGAddCost' 'SlaveOrderGen'>>
</div>
<div class='eventcard'>
Outcomes on expiration without fulfilling:
<<message '(?)'>>
What happens when you fail to fulfill the order. Usually empty, but sometimes can be
used to substract money from the player.
<</message>>
<<devlist '$sounfulfilled' '(Add new result)' 'QGAddCost' 'SlaveOrderGen'>>
</div>
<<link 'CREATE SLAVE ORDER' >>
<<if !$soname>>
<<warning 'Name cannot be empty'>>
<<elseif $soexpires_in <= 0>>
<<warning 'Expiration must be positive'>>
<<else>>
<<set _order = setup.qc.SlaveOrderFlex(
$soname,
$socompany.key,
$soexpires_in,
$sobase_price,
$sotrait_mult,
$sovalue_mult,
$socrit_traits,
$sodisaster_traits,
$sorestrictions,
$soaddons,
$sofulfilled,
$sounfulfilled,
)>>
<<run $qcustomslaveorder.push(_order)>>
<<dtloadpassage>>
<<devgotoreturn>>
<</if>>
<</link>>
<br/>
<br/>
<<dtloadpassagelink>><<set $trname = "">>
<<set $trdescription = "">>
<<set $trunittext = "">>
<<set $trslavevalue = 0>>
<<set $trskilladds = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
]>><<link '(Cancel)'>>
<<goto $gTRReturnPassage>>
<</link>>
<br/>
<p>
Title name:
<<message '(?)'>>
Enter the title's name. For example "Divine Wielder of Excalibur"
<</message>>
<<textbox "$trname" $trname>>
</p>
<p>
Title description:
<<message '(?)'>>
Enter the title's description. For example "Wielder of the divine sword Excalibur"
<</message>>
<<textbox "$trdescription" $trdescription>>
</p>
<p>
Title unit text:
<<message '(?)'>>
Enter the unit text that will be displayed in unit description.
For example: " is the sole wielder of the divine sword Excalibur".
Do NOT put period at the end.
<</message>>
<<textbox "$trunittext" $trunittext>>
</p>
<p>
Slave value:
<<message '(?)'>>
Enter the additional value slaves with this title gets.
Often 0.
Rule of thumb: cheap title: 1500g. Good titles: 3000g.
Rare title: 7500g.
Unicorn: 15000g.
Can be negative.
<</message>>
<<textbox "$trslavevalue" $trslavevalue>>
</p>
<div class='equipmentsetcard card'>
Skill additives:
<<message '(?)'>>
How much increment does each of these skills get?
This is a flat bonus, not percentage.
Should not exceed 5 on any one skill.
(Only put 5 for very rare titles! Most ordinary ones should be at most 3.)
Total sum should not exceed 10 for the rarest trait --- less rare trait should sum less.
Can put negative values to penalty those stats instead.
<</message>>
<<for _iskill, _skill range setup.skill>>
<br/>
<<set _varname = `$trskilladds[${_iskill}]`>>
<<capture _varname>>
<<rep _skill>>: <<numberbox _varname $trskilladds[_iskill]>>
<</capture>>
<</for>>
</div>
<<link 'CREATE TITLE' >>
<<if !$trname>>
<<warning 'Name cannot be empty'>>
<<elseif !$trdescription>>
<<warning 'Description cannot be empty'>>
<<else>>
setup.Title = function(key, name, description, unit_text, slave_value, skill_adds) {
<<set $tkey = 'quest_' + setup.getKeyFromName($trname, setup.title) + `_${$qcustomtitle.length}`>>
<<run $qcustomtitle.push(
new setup.Title(
$tkey,
$trname,
$trdescription,
$trunittext,
$trslavevalue,
$trskilladds,
)
)>>
<<goto $gTRReturnPassage>>
<</if>>
<</link>><<if _baseunitgroup>>
<<set $ugname = _baseunitgroup.getName()>>
<<set $ugpools = _baseunitgroup.getUnitPools()>>
<<set $ugpostprocess = _baseunitgroup.unit_post_process>>
<<set $ugisreuse = !(!(_baseunitgroup.reuse_chance))>>
<<else>>
<<set $ugname = "">>
<<set $ugpools = []>>
<<set $ugpostprocess = []>>
<<set $ugisreuse = false>>
<</if>>
<<dtsavepassage 'UnitGroupGen'>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtloadpassagelink>>
<p>
Unit group name:
<<message '(?)'>>
<div class='helpcard'>
Enter the unit group's name.
<br/>
<br/>
For example: "Desert Warriors"
</div>
<</message>>
<<textbox "$ugname" $ugname>>
</p>
<div class='itemcard'>
Pools:
[[(Add new unitpool)|UGAddUnitPool]]
<<for _iccunitpool, _ccunitpool range $ugpools>>
<br/>
<<= _ccunitpool[1]>>: <<= _ccunitpool[0].rep()>>
<<capture _iccunitpool>>
<<link '(delete)' 'UnitGroupGen'>>
<<run $ugpools.splice(_iccunitpool, 1)>>
<</link>>
<</capture>>
<</for>>
</div>
<div class='equipmentsetcard card'>
Unit effect:
<<message '(?)'>>
<div class='helpcard'>
Use this if you want units generated from this pool to have certain characteristics.
<br/>
<br/>
For example, you can use this to ensure that the unit always have a certain trait or title.
</div>
<</message>>
<<devlist '$ugpostprocess' '(Add new cost)' 'QGAddCostUnit' 'UnitGroupGen'>>
</div>
<div>
<<checkbox '$ugisreuse' false true autocheck>> Is unit persistent?
<<message '(?)'>>
<div class='helpcard'>
If checked, then the unit generated by this unitgroup will remain <<successtext 'persistent'>>.
<br/>
<br/>
A persistent unit will persist when the quest ended.
When another quest tries to pull a unit from this unit group, the same unit will
be selected.
For example, you can use this to generate a villain character that spans
multiple quests, or making a quest that details the adventure of a certain
unit spanning multiple quests.
A new unit will only be generated when the existing one is removed, either
by using the (Delete actor) outcome, or by the
(Clear all units from a unit group) outcome.
</div>
<</message>>
</div>
<<link '(CREATE UNIT GROUP)' >>
<<if !$ugname>>
<<warning 'Name cannot be empty'>>
<<else>>
<<if !$ugpools.length>>
<<warning 'Unit pools cannot be empty'>>
<<else>>
<<if $ugisreuse>>
<<set _reuse = 1>>
<<else>>
<<set _reuse = 0>>
<</if>>
/* generate title */
<<set _basekey = setup.getKeyFromName($dtquest.name, setup.unitgroup)>>
<<set _basekey = `${_basekey}${$qcustomunitgroup.length}`>>
<<set $qcustomunitgroup.push(
new setup.UnitGroup(
_basekey, /* key */
$ugname,
$ugpools,
_reuse, /* reuse chance */
$ugpostprocess,
)
)>>
<<dtloadpassage>>
<<goto 'QGAddActor'>>
<</if>>
<</if>>
<</link>>Weight:
<<message '(?)'>>
The larger the weight, the more often this pool is used.
For example, a pool with weight 3 will be used thrice more often than another
pool with weight 1.
<</message>>
<<numberbox '$ugweight' 1>>
<br/>
Choose unit pool:
<<for _iunitpool, _unitpool range setup.unitpool>>
<<set _text = `Select ${_unitpool.getName()}`>>
<br/>
<<capture _unitpool>>
<<link _text>>
<<if $ugweight <= 0 || !$ugweight>>
<<warning 'Weight cannot be 0 or negative'>>
<<else>>
<<run $ugpools.push([_unitpool, $ugweight])>>
<<goto 'UnitGroupGen'>>
<</if>>
<</link>>
<</capture>>
<<capture _unitpool>>
<<message '(+)'>>
<<unitpoolcard _unitpool>>
<</message>>
<</capture>>
<</for>><<focwidget 'twinehelptext'>>
<<message '(Help and Formatting)'>>
For additional game-specific commands not covered in the toolbar,
see [[here|https://gitgud.io/darkofocdarko/foc/-/blob/master/docs/text.md]].
For SugarCube 2 commands, see [[here|http://www.motoslave.net/sugarcube/2/docs/]].
<</message>>
<</focwidget>>
<<focwidget 'devtoolreturnbutton'>>
<<link '(Cancel)'>>
<<devgotoreturn>>
<</link>>
<</focwidget>>
<<focwidget 'devtoolcontentdonebegin'>>
Your new $args[0] is ready!
It is advisable to <<successtext 'save your game now'>>, so you don't lose your progress,
and you can continue to work on this $args[0] later if you want to revise it.
Click the (Test your $args[0]) link to test your $args[0]:
You can also <<message 'test your content in a real game'>>
<div class='helpcard'>
To test your $args[0] in a real game, you must have an existing saved game right now.
Click the "(Test your $args[0])" button below. Once the $args[0] test results shows up,
<<dangertext 'in that same screen'>>, load your save from the SAVES menu at the bottom left.
Your $args[0] is now in that game!
If you want to add multiple $args[0]s to test in the game, you can do so by following the
(Click for guide on how to add it to the game code yourself) guide below.
</div>
<</message>>.
<br/>
<</focwidget>>
<<focwidget 'devtoolcontentdonemid'>>
When you are happy with your $args[0] and no error appeared in the (Test your $args[0]) above,
you are ready to add the $args[0] to the game!
There are two options for you.
The first option is to copy paste all the code below to the [[subreddit|https://www.reddit.com/r/FortOfChains/]],
and a contributor will put it in the game code.
(Hint: your code is likely to exceed reddit's word limit. In this case,
paste your code to [[pastebin|https://pastebin.com/]],
then paste the resulting link to reddit.)
The second option is to add it to the code directly, and it's also very easy!
<<set _filename = `project/twee/${$args[0]}/[yourname]/${$qfilename}`>>
<<message "Click for guide on how to add it to the game code yourself">>
<div class='helpcard'>
<p>
First, go to https://gitgud.io/darkofocdarko/foc and download the repository.
Next, create the following file:
<<successtext _filename>>,
and copy paste all the code later below to that file.
(Replace [yourname] with your name. You can use any text editor like Notepad to create the file.
You may need to create a new directory here.)
[[(Example)|https://gitgud.io/darkofocdarko/foc/-/blob/master/project/twee/quest/Dporentel/goblin_resque.twee]]
Finally, compile the game, which is really easy! See [[here|https://gitgud.io/darkofocdarko/foc#compiling-instructions]]
for compiling instructions.
</p>
<p>
That's all.
Your $args[0] is now permanently in the game (in your copy of the game that is).
You can
test your $args[0] after you compile by going to the Debug Start, then go to Settings, then to "Test $args[0]".
<<if $args[0] == 'quest'>>
Your $args[0] will be at their corresponding pool (or at "Other Quests" if it does not belong to any pool).
<</if>>
Once that works, all you need to do is
[[send a merge request to the repository|https://gitgud.io/darkofocdarko/foc/-/blob/master/docs/mergerequest.md]].
(Again, you don't need to install anything to do so.)
</p>
</div>
<</message>>
<br/>
<br/>
Copy all the code below to either the subreddit,
or if you have compiled, to <<successtextlite _filename>>:
<</focwidget>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_qdesc)>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_qoutcomedesc[0])>><<if !setup.DEVTOOL_qoutcomedesc[1]>>
<<include 'DummyPassage0'>>
<<else>>
<<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_qoutcomedesc[1])>>
<</if>><<if !setup.DEVTOOL_qoutcomedesc[2]>>
<<include 'DummyPassage1'>>
<<else>>
<<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_qoutcomedesc[2])>>
<</if>><<if !setup.DEVTOOL_qoutcomedesc[3]>>
<<include 'DummyPassage2'>>
<<else>>
<<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_qoutcomedesc[3])>>
<</if>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_odesc)>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[0])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[0])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[1])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[1])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[2])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[2])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[3])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[3])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[4])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[4])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[5])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[5])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[6])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[6])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[7])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[7])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[8])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[8])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiontitle[9])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_ooptiondesc[9])>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_edesc)>><<= setup.DevToolHelper.debugDevToolTwine(setup.DEVTOOL_idesc)>><<run State.history.splice(State.activeIndex, 1)>>
<<devgotoreturn>><<focwidget 'dtauthor'>>
<p>
<b>Author</b>:
<<message '(?)'>>
<div class='helpcard'>
Enter your nickname.
<br/>
<br/>
This will be displayed as author of this $devtooltype.
You can leave this blank if you want to remain anonymous.
</div>
<</message>>
<<textbox $args[0] $args[1]>>
</p>
<</focwidget>>
<<focwidget 'dtname'>>
<p>
<b>Name</b> of the $devtooltype:
<<message '(?)'>>
<div class='helpcard'>
Enter the $devtooltype's name.
<br/>
<br/>
Example: "Raiding the Farm: Corny Revenge"
</div>
<</message>>
<<textbox $args[0] $args[1]>>
</p>
<</focwidget>>
<<focwidget 'dtquestpool'>>
<p>
<b>Quest pool</b>:
<<message '(?)'>>
<div class='helpcard'>
Where this quest can be scouted.
<br/>
<br/>
This field is optional and can be left empty. If you do, the quest can never be
scouted. This can be useful when the quest is generated by other means, for example,
as part of a quest chain.
</div>
<</message>>
<<if $args[1]>>
<<= $args[1].rep()>>
<<link '(remove)'>>
<<set State.variables[$args[0].substr(1)] = null>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
<<else>>
<<dangertextlite 'No quest pool'>>
<</if>>
<<link '(Select quest pool)'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto $args[2]>>
<</link>>
</p>
<</focwidget>>
<<focwidget 'dtrarity'>>
<p>
<b>Rarity</b>:
<<message '(?)'>>
<div class='helpcard'>
The higher the rarity, the rarer the $devtooltype will be scouted.
<br/>
<br/>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Rarity Number</th>
<th>Meaning</th>
<th>Effect</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>Common</td>
<td></td>
</tr>
<tr>
<td>30</td>
<td>Uncommon</td>
<td>Roughly 1 quest every 2 common quests</td>
</tr>
<tr>
<td>60</td>
<td>Rare</td>
<td>Roughly 1 quest every 5 common quests</td>
</tr>
<tr>
<td>80</td>
<td>Very Rare</td>
<td>Roughly 1 quest every 10 common quests</td>
</tr>
<tr>
<td>90</td>
<td>Extremely Rare</td>
<td>Roughly 1 quest every 20 common quests</td>
</tr>
<tr>
<td>100</td>
<td>Impossible</td>
<td>Will never be scouted</td>
</tr>
<tr>
<td>0</td>
<td>Always</td>
<td>Special value: this quest will ALWAYS be scouted whenever possible</td>
</tr>
</tbody>
</table>
</div>
<</message>>
<<numberbox $args[0] $args[1]>>.
</p>
<</focwidget>>
<<focwidget 'dtduration'>>
<p>
<b>Weeks to complete</b>:
<<message '(?)'>>
<div class='helpcard'>
How many weeks to complete this $devtooltype?
<br/>
<br/>
The guideline is as follows. You can deviate from it, but use your good judgment if you do.
<br/>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Location</th>
<th>Quest type</th>
<th>Duration</th>
</tr>
</thead>
<tbody>
<tr>
<td><<lore region_vale>></td>
<td>Normal</td>
<td>1 week</td>
</tr>
<tr>
<td>Western Forests</td>
<td>Normal</td>
<td>1 week</td>
</tr>
<tr>
<td>City of Lucgate</td>
<td>Normal</td>
<td>1-2 week</td>
</tr>
<tr>
<td>Eastern Deserts</td>
<td>Normal</td>
<td>2-3 weeks</td>
</tr>
<tr>
<td>All locations</td>
<td>Veteran</td>
<td>4-8 weeks</td>
</tr>
</tbody>
</table>
<br/>
Note that all quests in the southern seas are Veteran quests.
</div>
<</message>>
<<numberbox $args[0] $args[1]>> weeks
</p>
<</focwidget>>
<<focwidget 'dtexpires'>>
<b>Weeks before $devtooltype expires</b>:
<<message '(?)'>>
<div class='helpcard'>
How many weeks before this quest expires on its own?
<br/>
<br/>
<<if $devtooltype == 'quest'>>
The standard value is <<successtext 6>> weeks.
<<elseif $devtooltype == 'opportunity'>>
The standard value is <<successtext 1>> week.
<</if>>
<br/>
<br/>
You can use less if you want to make the $devtooltype feels urgent,
and use more if you want to allow players to have more time to prepare
for the $devtooltype.
</div>
<</message>>
<<numberbox $args[0] $args[1]>> weeks
<</focwidget>>
<<focwidget 'dtdifficultyrewardtable'>>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Modifier</th>
<th>Risks</th>
</tr>
</thead>
<tbody>
<tr>
<td>Easiest-Normal</td>
<td>
- Losing money
<br/>
- Gaining a little ire
<br/>
- Injury
<br/>
- Trauma
</td>
</tr>
<tr>
<td>Normal-Harder</td>
<td>
- All of the above
<br/>
- A slave escapes but immediately recapture-able
<br/>
- A slaver is captured but immediately rescue-able
<br/>
- Longer injuries
<br/>
- Longer trauma
<br/>
- Gaining more ire
</td>
</tr>
<tr>
<td>Hardest+</td>
<td>
- All of the above
<br/>
- Very long trauma
<br/>
- Very long injury
<br/>
- Losing a slaver / slave that must be rescued using a Rescuer
<br/>
- Your slaver got corrupted
<br/>
- Gaining a lot of ire
</td>
</tr>
</tbody>
</table>
<</focwidget>>
<<focwidget 'dtdifficultyhelp'>>
<<message '(?)'>>
<div class='helpcard'>
Difficulty consists of two parts, a <<successtextlite 'level'>>
and a <<dangertextlite 'modifier'>>.
A Lv. X quest is meant to be tackled by a set of naked, uoptimized Lv. X slavers.
The difficulty is further adjusted by the <<dangertextlite 'modifier'>>,
such as <<successtextlite 'easy'>> or <<dangertextlite 'hard'>>.
A Lv. 15 <<successtextlite 'easy'>> quest will be easier to do
than a Lv. 15 <<dangertextlite 'hard'>> quest, for example.
<br/>
<br/>
Note that at the late game, players are expected to have more optimized slavers,
and hence higher level quests (e.g., Lv 60 quests) can be tackled by lv40 but optimized slavers.
<br/>
<br/>
Quest level should be chosen in the following way:
<br/>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Location</th>
<th>Type</th>
<th>Level</th>
</tr>
</thead>
<tbody>
<tr>
<td><<lore region_vale>></td>
<td>Normal Quests</td>
<td>Lv. 1 - Lv. 20</td>
</tr>
<tr>
<td>Western Forests</td>
<td>Normal Quests</td>
<td>Lv. 15 - Lv. 30</td>
</tr>
<tr>
<td>City of Lucgate</td>
<td>Normal Quests</td>
<td>Lv. 25 - Lv. 40</td>
</tr>
<tr>
<td>Eastern Deserts</td>
<td>Normal Quests</td>
<td>Lv. 35 - Lv. 50</td>
</tr>
<tr>
<td>All Locations</td>
<td>Veteran Quests</td>
<td>Lv. 50 - Lv. 80</td>
</tr>
</tbody>
</table>
<br/>
Note that all quests in the Southern Seas are Veteran quests.
<br/>
<br/>
Choosing modifier should be done according to their risks, i.e., what
happens on failure. The following is a general guideline, but you are
free to be creative with your quest failure outcomes.
<br/>
<<dtdifficultyrewardtable>>
</div>
<</message>>
<</focwidget>>
<<focwidget 'dtdifficulty'>>
<p>
<b>Difficulty</b>:
<<dtdifficultyhelp>>
<<if $args[0]['difficulty']>>
<<rep $args[0]['difficulty']>>
<</if>>
<<link '(Choose difficulty)'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto $args[1]>>
<</link>>
</p>
<</focwidget>>
<<focwidget 'dttagsinternal'>>
<<for _itag range setup.TagHelper.getAllTagsOfType('quest', $args[1])>>
<<capture _itag>>
<<set _tagtext = setup.TagHelper.tagRepLong('quest', _itag)>>
<<if $args[0].tags.includes(_itag)>>
(<<= _tagtext>>)
<<else>>
<<set _linkname = `(${_tagtext})`>>
<<link _linkname>>
<<run $args[0].tags.push(_itag)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
<</if>>
<</capture>>
<</for>>
<</focwidget>>
<<focwidget 'dttags'>>
<div class='dutycard'>
<div>
<b>Tags</b>:
<<message '(?)'>>
<div class='helpcard'>
Tags primary purpose is for filtering content, including filtering out banned content.
Please see their corresponding help texts for more information.
</div>
<</message>>
<<for _itag, _tag range $args[0].tags>>
<<capture _tag>>
<span class='tagcard'>
<<= setup.TagHelper.tagRepLong('quest', _tag) >>
<<link '<<icon cancel "Delete">>'>>
<<set $args[0].tags = $args[0].tags.filter(item => item != _tag)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
</span>
<</capture>>
<</for>>
</div>
<div>
New fetish tag:
<<message '(?)'>>
<div class='helpcard'>
The fetishes associated with this $devtooltype.
<br/>
<br/>
This is used to filter
<<dangertext 'out'>> content based on player's preferences.
You should only use these tags if it is highly relevant for your $devtooltype.
</div>
<</message>>
<<dttagsinternal $args[0] 'fetish'>>
</div>
<div>
New region tag:
<<message '(?)'>>
<div class='helpcard'>
The location where this $devtooltype is scouted or takes place.
Usually only relevant for quests and opportunities.
</div>
<</message>>
<<dttagsinternal $args[0] 'region'>>
</div>
<div>
New type tag:
<<message '(?)'>>
<div class='helpcard'>
Special properties of this $devtooltype, if any.
</div>
<</message>>
<<dttagsinternal $args[0] 'type'>>
</div>
<div>
New reward tag:
<<message'(?)'>>
<div class='helpcard'>
The best guess on the rewards that this $devtooltype gives solely by reading the description.
<br/>
<br/>
This is often not actually the real reward!
There has been quests whose description is intentionally misleading, and the
tags should reflect that.
</div>
<</message>>
<<dttagsinternal $args[0] 'reward'>>
</div>
</div>
<</focwidget>>
<<focwidget 'devroleaddcriteria'>>
<<if !$args[0] || !$args[0].match('^[a-z0-9]+$') >>
<<warning 'Role name cannot be empty and must consist of lowercase letters and numbers only'>>
<<else>>
<<if $dtquest.getAllActorNames().includes($args[0])>>
<<warning 'Duplicate rolename'>>
<<else>>
<<if $devtooltype == 'quest'>>
<<run $dtquest.unit_criteria_map[$args[0]] = {
criteria: $args[1],
offsetmod: 1,
}>>
<<unset $compiledquest>>
<<devgotoreturn>>
<</if>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'dtactor'>>
<div class='opportunitycard'>
<div>
<b>Actors</b>:
<<message '(?)'>>
<div class='helpcard'>
List of units that are involved in this $devtooltype.
<br/>
<br/>
You can use this to add NPCs to participate in your $devtooltype.
For example, if you are raiding a farm, the NPC could be the farmer
that you are raiding and potentially enslave.
<br/>
<br/>
You can also use this to add units from your company to participate
in the $devtooltype.
These actors will be chosen randomly, among the eligible units in your
company.
For example, this could be used for making a quest where a slave tries to
escape from your company.
Note that the unit will be considered busy for the entirety of the
$devtooltype, so this should only be used sparingly.
If you just want a slaver to add flavor to the quest description,
consider using
<code>
"""<<set _u = setup.getAnySlaver()>>"""
</code>
instead.
</div>
<</message>>
<<link '(Add new NPC)'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto 'QGAddActor'>>
<</link>>
<<message '(Add a random actor from your company)'>>
<div class='slavercard'>
<div><b>Actor name</b>: <<textbox '_newactorname' ''>></div>
<<link '(Add actor)'>>
<<if !_newactorname || $dtquest.getAllActorNames().includes(_newactorname)>>
<<warning 'Duplicate actor name or missing actor name'>>
<<else>>
<<if !_newactorname.match('^[a-z0-9]+$') >>
<<warning 'Actor name cannot be empty and must consist of lowercase letters and numbers only'>>
<<else>>
<<if ['event', 'quest', 'opportunity'].includes($devtooltype)>>
<<set $dtquest.actor_unitgroup_key_map[_newactorname] = []>>
<</if>>
<<unset $compiledquest>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</if>>
<</if>>
<</link>>
</div>
<</message>>
</div>
<<if ['event', 'quest', 'opportunity'].includes($devtooltype)>>
<<set _actor_unitgroup_key_map = $dtquest.actor_unitgroup_key_map>>
<<set _listpathbase = "$dtquest.actor_unitgroup_key_map">>
<</if>>
<<for _iactor, _actor range _actor_unitgroup_key_map>>
<div>
<<if _actor>>
<<if Array.isArray(_actor)>>
<div class='marketobjectcard'>
<<= _iactor>>
<<message '(?)'>>
A random unit from YOUR COMPANY that satisfies these requirements will be assigned to this actor.
<</message>>:
<<set _listpath = _listpathbase + "[" + _iactor + "]">>
<<devlist _listpath '(Add new restriction)' 'QGAddRestrictionUnit' 'DevGoToReturn'>>
</div>
<<else>>
<<= _iactor>>: <<rep setup.unitgroup[_actor]>>
<</if>>
<<else>>
<<= _iactor>>: None
<</if>>
<<capture _iactor, _actor>>
<<set _text = `(remove ${_iactor})`>>
<<link _text>>
<<run delete _actor_unitgroup_key_map[_iactor]>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
<</capture>>
</div>
<</for>>
</div>
<</focwidget>>
<<focwidget 'devroleaddunitgroup'>>
<<if !$args[0] || !$args[0].match('^[a-z0-9]+$') >>
<<warning 'Actor name cannot be empty and must consist of lowercase letters and numbers only'>>
<<else>>
<<if $dtquest.getAllActorNames().includes($args[0])>>
<<warning 'Duplicate actor name'>>
<<else>>
<<if ['event', 'quest', 'opportunity'].includes($devtooltype)>>
<<run $dtquest.actor_unitgroup_key_map[$args[0]] = _unitgroup.key>>
<<unset $compiledquest>>
<<devgotoreturn>>
<</if>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'dtcost'>>
<div class='equipmentsetcard card'>
<b>Costs</b>:
<<message '(?)'>>
<div class='helpcard'>
Upfront cost of doing this $devtooltype.
<br/>
<br/>
Most $devtooltype have no cost, and should leave this part empty.
<<if $devtooltype == 'quest'>>
If your quest have a cost, remember to
take it into account when calculating the rewards.
<</if>>
</div>
<</message>>
<<devlist $args[0] '(Add new cost)' 'QGAddActualCost' 'DevGoToReturn'>>
</div>
<</focwidget>>
<<focwidget 'dtrestriction'>>
<div class='equipmentcard'>
<b>Restrictions</b>:
<<message '(?)'>>
<div class='helpcard'>
Restrictions on when the $devtooltype can
<<if ['quest', 'opportunity'].includes($devtooltype)>>
be scouted.
<<elseif $devtooltype == 'event'>>
appear.
<<elseif $devtooltype == 'interaction'>>
be performed.
<</if>>
<br/>
<br/>
For example, you can restrict this only after you have build the
<<rep setup.buildingtemplate.veteranhall>>.
</div>
<</message>>
<<devlist $args[0] '(Add new restriction)' 'QGAddRestriction' 'DevGoToReturn'>>
</div>
<</focwidget>>
<<focwidget 'dtexpireoutcome'>>
<div class='eventcard'>
Expiration outcome:
<<message '(?)'>>
<div class='helpcard'>
What happens if you let this $devtooltype expire without being done.
<br/>
<br/>
Usually, this list is empty.
But this can be useful,
for example in the following quest:
A quest that recaptures a runaway slave, which will make the slave gone forever if
the quest expires without being done.
</div>
<</message>>
<<devlist $args[0] '(Add new result)' 'QGAddCost' 'DevGoToReturn'>>
</div>
<</focwidget>>
<<focwidget 'dtoutcome'>>
<div class='equipmentcard'>
<b>Outcomes</b>:
<<message '(?)'>>
<div class='helpcard'>
<<if $devtooltype == 'opportunity'>>
What happens if you select this option.
<<else>>
What happens afterwards, if any.
<</if>>
<br/>
<br/>
For example, it could grant you a new quest, or it could give you money.
</div>
<</message>>
<<devlist $args[0] '(Add new outcome)' 'QGAddCost' 'DevGoToReturn'>>
</div>
<</focwidget>>
<<focwidget 'dtrewardhelp'>>
<div class='helpcard'>
This is the recommended total reward that your $devtooltype should give.
The EXP reward is given automatically.
<br/>
<br/>
The total recommended reward is computed based on the number of units,
the difficulty, whether it's a critical result, and so on.
To get this amount of reward, you can combine multiple rewards.
Their monetary values are the following:
<br/>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Type</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Money</td>
<td>Their value</td>
</tr>
<tr>
<td>Favor</td>
<td>1.0 favor = <<money 200>></td>
</tr>
<tr>
<td>Items</td>
<td>Equal to their value</td>
</tr>
<tr>
<td>Equipment / Furniture</td>
<td>Equal to their value. Usually common is
<<money setup.EQUIPMENT_PRICE_NORMAL>>,
rare is <<money setup.EQUIPMENT_PRICE_GOOD>>,
and master is <<money setup.EQUIPMENT_PRICE_MASTER>>.
</td>
</tr>
<tr>
<td>Boon</td>
<td><<money 100>> per week per unit. For example, 15 weeks of boon to two units is worth <<money 3000>></td>
</tr>
<tr>
<td>Healing</td>
<td><<money 500>> per weeks healed</td>
</tr>
<tr>
<td>Free slave / slaver</td>
<td>Equal to their <b>unit value</b>. See table below</td>
</tr>
<tr>
<td>Paid slave / slaver<<message '(?)'>>These are recruits / slaves that you have to buy in order to hire / enslave<</message>></td>
<td><<money 500>> per unit</td>
</tr>
<tr>
<td>Quests</td>
<td>
- Vale: <<money 250>>
<br/>
- Forest: <<money 250>>
<br/>
- City: <<money 300>>
<br/>
- Desert: <<money 500>>
<br/>
- Sea: <<money 750>>
</td>
</tr>
<tr>
<td>Trait</td>
<td>Depends on the trait, but must be VERY expensive. At least <<money 10000>> for
normal traits. <<money 80000>> or more for skill / magic traits (can be achieved via quest chains).</td>
</tr>
<tr>
<td>Slave order</td>
<td><<money 500>> plus any extra modifiers (see below)</td>
</tr>
<tr>
<td>Title</td>
<td>Variable. But titles that increase slave value should be worth at least that much</td>
</tr>
</tbody>
</table>
<br/>
For example, to get a total reward of <<money 2000>>, you can give 2 quests in the Vale plus
<<money 1500>>.
<br/>
<br/>
Remember that <b>there is no need to be too creative with rewards</b>. If you are
unsure what reward to give, monetary reward is always helpful to the players.
<br/>
<br/>
<b>Calculating unit's value:</b> To calculate a unit's value,
sum up their race value, the titles you give them (if any), as well as the value of
any other traits modifiers you give them such as when they come pre-trained
or with magical ability. The following is the base unit value based on their race.
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Race</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><<rep setup.trait.race_humanvale>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_humankingdom>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_humandesert>></td>
<td>
<<money 2000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_humansea>></td>
<td>
<<money 5000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_werewolf>></td>
<td>
<<money 3000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_elf>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_neko>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_orc>></td>
<td>
<<money 3000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_dragonkin>></td>
<td>
<<money 10000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.race_demon>></td>
<td>
<<money 15000>>
</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<b>Slave order value calculation.</b>
**Slave order reward calculation**.
Slave order has a base price of <<money 500>>.
The overall price can increase / decrease based on the quality of the order.
As a baseline, a slave order that rewards 1x the slave value does not increase
or decrease its price.
Hence, if you give extra money on top of it (e.g., <<money 1500>> bonus payment)
for the slave order, then increase its value by that much.
<br/>
<br/>
If your $devtooltype gives negative result as a reward, make sure to compensate
for them properly.
<<message '(?)'>>
<<dtfailurehelp>>
<</message>>
</div>
<</focwidget>>
<<focwidget 'dtfailurehelp'>>
<div class='helpcard'>
Different than success, there are no strict guidelines on what happens during failure.
The outcomes should be reflected in the $devtooltype difficulty:
<br/>
<<dtdifficultyrewardtable>>
<br/>
<br/>
There are rough monetary value of failure outcomes as well:
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Type</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Losing Money</td>
<td>Their value</td>
</tr>
<tr>
<td>Gain Ire</td>
<td><<money 500>> per ire</td>
</tr>
<tr>
<td>Injury</td>
<td><<money 350>> per week</td>
</tr>
<tr>
<td>Trauma</td>
<td><<money 100>> per week per slaver</td>
</tr>
<tr>
<td>Corruption</td>
<td><<money 3000>> per corruption</td>
</tr>
<tr>
<td>Losing a slaver / slave, but immediately rescue-able</td>
<td>
Depends on the quest difficulty:
<br/>
- <<money 1500>> for easiest
<br/>
- <<money 3000>> for medium
<br/>
- <<money 7000>> for hardest
</td>
</tr>
<tr>
<td>Losing a slaver / slave, but can be later rescued by a rescuer</td>
<td>
<<money 3000>>
</td>
</tr>
</tbody>
</table>
</div>
<</focwidget>>
<<focwidget 'dtstoryhelp'>>
<p>
The following are all the stories accompanying this $devtooltype.
<<message '(Content Guidelines)'>>
<div class='helpcard'>
The game tries to be permissive with what kind of stories you can add,
but due to various reasons, there are some
[[Guidelines|https://gitgud.io/darkofocdarko/foc/-/blob/master/docs/contentguideline.md]]
on this.
</div>
<</message>>
<<message '(Code editor help)'>>
<div class='helpcard'>
The code editor is divided into two panes: the left-side pane
is for you to write. You can preview what it looks like by clicking the
"Refresh" link on the top right of the output preview.
<br/>
<br/>
You can add unit-specific "macros" by using the toolbar that appears when
you are inside the left-side pane. For example, you can use this to insert a
gender specific pronoun, or refer to a unit's name.
There are much more things you can do it with it, please feel free to try
each of the items in the toolbar.
</div>
<</message>>
<<message '(Writing suggestions)'>>
<div class='helpcard'>
To make the slavers feel more alive, consider personalizing the story based on the slaver.
This can be done in several ways:
<br/>
<br/>
First, you can create different sentences based on their **general personality**.
Each unit has one of the five possibly general personality.
To do this, in the editor you choose "If Actor" from the toolbar, and then
"Has general personality"
<br/>
<br/>
Second, you can use adverbs that will be based on their personality.
To do this, in the editor choose "Terms" from the toolbar, and then
"Random adverb".
<br/>
<br/>
There are many other ways you can do this, but the two above are the main ones.
You can also check their traits, give a randomized sentence based on their personality,
and much more. Check out the toolbar in the editor below for more.
</div>
<</message>>
</p>
<</focwidget>>
<<focwidget 'dtquestpoolchoose'>>
<<set _questpooldefault = [
'vale', 'forest', 'city', 'desert', 'sea',
]>>
<<for _iquestpool, _questpool range setup.questpool>>
<<if _questpooldefault.includes(_questpool.key)>>
<div>
<<rep _questpool>>
<<capture _questpool>>
<<link '(select this)'>>
<<set _questpoolchosen = _questpool>>
<<include $args[0]>>
<</link>>
<</capture>>
</div>
<</if>>
<</for>>
<<message '(Other...)'>>
<<for _iquestpool, _questpool range setup.questpool>>
<<if !_questpooldefault.includes(_questpool.key)>>
<div>
<<rep _questpool>>
<<capture _questpool>>
<<link '(select this)'>>
<<set _questpoolchosen = _questpool>>
<<include $args[0]>>
<</link>>
<</capture>>
</div>
<</if>>
<</for>>
<</message>>
<</focwidget>>/* widgets that requires br */
<<focwidget 'dtprintmeta'>>
<<for _title range $qcustomtitle>>"""<<run """<<= _title.toText()>>""">>"""
<</for>><<for _iug, _ug range $qcustomunitgroup>> <<nobr>>
<<set _used = false>>
<<for _iactor, _actor range $dtquest.getActorUnitGroups()>>
<<if _actor && !Array.isArray(_actor) && _actor.key == _ug.key>>
<<set _used = true>>
<</if>>
<</for>>
<</nobr>> <<if _used>> """<<run """<<= _ug.toJs()>>""">>""" <</if>> <</for>>
<</focwidget>>
<<focwidget 'dtprinttitle'>><<nobr>>
"<<= setup.escapeJsString($dtquest.name)>>", """/* Title */"""
<</nobr>><</focwidget>>
<<focwidget 'dtprintauthor'>><<nobr>>
"<<= setup.escapeJsString($dtquest.author)>>", """/* Author */"""
<</nobr>><</focwidget>>
<<focwidget 'dtprintdeadlineweeks'>><<nobr>>
<<= $dtquest.deadline_weeks>>, """/* expiration weeks */"""
<</nobr>><</focwidget>>
<<focwidget 'dtprintdifficulty'>><<nobr>>
setup.qdiff.<<= $dtquest.difficulty.diffname>><<= $dtquest.difficulty.level>>, """/* difficulty */"""
<</nobr>><</focwidget>>
<<focwidget 'dtprintactors'>>{ """/* actors */"""
<<for _iactor, _actor range $dtquest.getActorUnitGroups()>><<nobr>>
'<<= _iactor>>':
<<if Array.isArray(_actor)>>
[
<<for _iactorcost, _actorcost range _actor>>
<br/>
<<= _actorcost.text()>>,
<</for>>
<br/>
],
<<elseif _actor>>
'<<= _actor.key>>',
<<else>>
null,
<</if>>
<</nobr>>
<</for>> }, <</focwidget>>
<<focwidget 'dtprinttags'>>[ """/* tags */"""
<<for _itag, _tag range $dtquest.tags>><<nobr>>
'<<= _tag>>',
<</nobr>>
<</for>> ],<</focwidget>>
<<focwidget 'dtprintcosts'>>[ """/* costs */"""
<<for _icost, _cost range $dtquest.costs>><<nobr>>
<<= _cost.text()>>,
<</nobr>>
<</for>> ], <</focwidget>>
<<focwidget 'dtprintrestrictions'>>[ """/* restrictions */"""
<<for _irestriction, _restriction range $dtquest[$args[0]]>><<nobr>>
<<= _restriction.text()>>,
<</nobr>>
<</for>> ], <</focwidget>>
<<focwidget 'dtprintoutcomes'>>[ """/* outcomes */"""
<<for _ioutcome, _outcome range $dtquest[$args[0]]>><<nobr>>
<<= _outcome.text()>>,
<</nobr>>
<</for>> ], <</focwidget>>
<<focwidget 'dtprintexpirationoutcomes'>>[ """/* expiration outcomes */"""
<<for _ixxx, _outcome range $dtquest.expired_outcomes >><<nobr>>
<<= _outcome.text()>>,
<</nobr>>
<</for>>
], <</focwidget>>
<<focwidget 'dtprintquestpool'>>[ """/* quest pool and rarity */"""
<<if $args[0]>> [setup.questpool.<<= $args[0].key>>, <<= $args[1]>>],
<</if>> ], <</focwidget>>/* Save the current passage, and switch to the new one supplied as argument */
/* The saved passage can be restored using <<dtloadpassage>> */
<<focwidget dtsavepassage>>
<<run setup.devQueue('devtoolmainpassage', $gDtSavePassageReturnPassage)>>
<<set $gDtSavePassageReturnPassage = $args[0]>>
<</focwidget>>
<<focwidget dtloadpassage>>
<<set $gDtSavePassageReturnPassage = setup.devPop('devtoolmainpassage')>>
<</focwidget>>
<<focwidget dtloadpassagelink>>
<div>
<<link '(Cancel)'>>
<<dtloadpassage>>
<<devgotoreturn>>
<</link>>
</div>
<</focwidget>><<focwidget 'gotowipehistory'>>
<<run State.history.splice(State.activeIndex, 1)>>
<<goto $args[0]>>
<</focwidget>>
<<focwidget 'devgotoreturn'>>
<<if $gDtSavePassageReturnPassage>>
<<goto $gDtSavePassageReturnPassage>>
<<else>>
<<if $devtooltype == 'quest'>>
<<goto 'QuestGen'>>
<<elseif $devtooltype == 'event'>>
<<goto 'EventGen'>>
<<elseif $devtooltype == 'opportunity'>>
<<goto 'OpportunityGen'>>
<<elseif $devtooltype == 'interaction'>>
<<goto 'InteractionGen'>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'devquestroles'>>
<<if !$qdevquestroles>>
<<set $qdevquestroles to {}>>
<</if>>
<div>
<b>Quest roles:</b>
<<message '(Add new)'>>
<div class='slavecard'>
<div>
<<set _newroles = $args[0].getAllActorNames()>>
<<devactorall '_newquestactor' _newroles>>
of <<rep $args[0]>> will be set to
<<devactor '_oldquestactor'>>
of the new quest/event/mail you are making now.
</div>
<div>
<<link '(ADD THIS!)'>>
<<set $qdevquestroles[_newquestactor] = _oldquestactor>>
<<set _thispassage = passage()>>
<<goto _thispassage>>
<</link>>
</div>
</div>
<</message>>
</div>
<<for _actornew, _actorpast range $qdevquestroles>>
<div>
<<successtext _actornew>> of <<rep $args[0]>> will be set to <<successtext _actorpast>> in this quest.
<<capture _actornew>>
<<link '(Delete)'>>
<<run delete $qdevquestroles[_actornew]>>
<<set _thispassage = passage()>>
<<goto _thispassage>>
<</link>>
<</capture>>
</div>
<</for>>
<</focwidget>>
/* Usage: <<devactorall '_varname' actornamelist>> */
/* Use <<devactor>> for most cases, but this can be useful for very few reasons */
/* Unlike <<devactor>>, this ignores $qgDefaultActorName, and list of actors must be supplied */
<<focwidget 'devactorall'>>
<<if !$args[1].length>>
<<if passage() != 'DevActorError'>>
<<set $gPrevious = previous()>>
<<goto 'DevActorError'>>
<</if>>
<<else>>
Actor
<<cycle $args[0] autoselect>>
<<optionsfrom $args[1]>>
<</cycle>>
(Click to change)
<</if>>
<</focwidget>>
/* Usage: <<devactor '_varname'>> */
/* Gives an actor cycling through the list of actors */
<<focwidget 'devactor'>>
<<set _actorlist = $dtquest.getAllActorNames()>>
<<devactorall $args[0] _actorlist>>
<</focwidget>>
<<focwidget 'devactordefault'>>
<<if !$qgDefaultActorName>>
<<devactor '$qgDefaultActorName'>>
<<else>>
<<= $qgDefaultActorName>>
<</if>>
<</focwidget>><<focwidget 'devchoosequest'>>
<p>
Search:
<<onevent 'input'>>
<<textbox '_choosequestfilterunused' ''>>
<<onevent-callback>>
<<set _choosequestfilter = _value>>
<<set _choosequestshowall = 0>>
<<refreshable-refresh "#devchoosequestlist0">>
<</onevent>>
<div>
<<refreshable id="devchoosequestlist0">>
<<devchoosequestlist $args[0]>>
<</refreshable>>
</div>
</p>
<</focwidget>>
<!-- (internal, do not use directly) -->
<<focwidget 'devchoosequestlist'>>
<<if _choosequestfilter>>
<p>Matching quests:</p>
<<set _cand = []>>
<<set _filter = _choosequestfilter.toLowerCase()>>
<<for _iquest, _quest range setup.questtemplate>>
<<if _quest.getName().toLowerCase().includes(_filter)>>
<<run _cand.push(_quest)>>
<</if>>
<</for>>
<<run _cand.sort((q1, q2) => q1.getDifficulty().getLevel() - q2.getDifficulty().getLevel())>>
<<set _subset = _choosequestshowall ? _cand : _cand.slice(0, 20)>>
<<for _iquest, _quest range _subset>>
<<capture _quest>>
<<= _quest.getDifficulty().rep()>>:
<<rep _quest>>
<<link '(select this)'>>
<<set _questchosen = _quest>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<<if _subset.length < _cand.length>> <!-- prevent showing too many matches at once -->
<p class="indented">
And <<= _cand.length - _subset.length >> more
<<link '(see all results)'>>
<<set _choosequestshowall = 1>>
<<refreshable-refresh "#devchoosequestlist0">>
<</link>>
</p>
<<elseif !_cand.length>>
<p class="indented">
(No matches)
</p>
<</if>>
<<else>>
<p>
Where is the quest located?
<<message '(?)'>>
If it does not have a quest location, it will be at the bottom option "Other Quests".
<</message>>
</p>
<<set _passage = $args[0]>>
<<set _found = {}>>
<<for _iquestpool, _questpool range setup.questpool>>
<<set _qkeys = Object.keys(_questpool.quest_template_rarity_map)>>
<<for _z, _iqkey range _qkeys>>
<<set _found[_iqkey] = true>>
<</for>>
<<capture _questpool>>
<<set _text = `Quests in ${_questpool.getName()}`>>
<<message _text>>
<<set _qkeys = Object.keys(_questpool.quest_template_rarity_map)>>
<<run _qkeys.sort((q1, q2) => setup.questtemplate[q1].getDifficulty().getLevel() - setup.questtemplate[q2].getDifficulty().getLevel())>>
<<for _z, _iqkey range _qkeys>>
<<set _questtemplate = setup.questtemplate[_iqkey]>>
<<capture _questtemplate>>
<<= _questtemplate.getDifficulty().rep()>>:
<<rep _questtemplate>>
<<link '(select this)'>>
<<set _questchosen = _questtemplate>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<</message>>
<br/>
<</capture>>
<</for>>
<<message 'Other Quests'>>
<<set _cand = []>>
<<for _iquest, _quest range setup.questtemplate>>
<<if !_found[_quest.key]>>
<<run _cand.push(_quest)>>
<</if>>
<</for>>
<<run _cand.sort((q1, q2) => q1.getDifficulty().getLevel() - q2.getDifficulty().getLevel())>>
<<for _iquest, _quest range _cand>>
<<capture _quest>>
<<= _quest.getDifficulty().rep()>>:
<<rep _quest>>
<<link '(select this)'>>
<<set _questchosen = _quest>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<</message>>
<</if>>
<</focwidget>>
<<focwidget 'devchoosedifficulty'>>
Choose a difficulty:
<<message '(?)'>>
A difficulty consists of two parts: a "modifier" in easy, medium, or hard, and the level.
In general, "easy" quests have higher success rate than "hard" quest.
The modifier should reflect how dangerous the risks are --- easy or medium quests means that
even on disaster it won't be too bad, while "hardest" or "abyss" quest will have terrible consequences
on disaster.
The level of a difficulty is the recommended level for slavers to tackle this difficulty ---
e.g., a Lv 50 quest is designed to be tackled by a set of lv 50 slavers.
<</message>>
<br/>
<<set _passage = $args[0]>>
<<set _keywords = []>>
<<for _iqdiff, _qdiff range setup.qdiff>>
<<if !_keywords.includes(_qdiff.diffname)>>
<<run _keywords.push(_qdiff.diffname)>>
<</if>>
<</for>>
<<for _ikeyword, _keyword range _keywords>>
<<capture _keyword>>
<<message _keyword>>
<<for _iqdiff, _qdiff range setup.qdiff>>
<<if _qdiff.diffname == _keyword>>
<<rep _qdiff>>
<<capture _qdiff>>
<<link '(select this)'>>
<<set _diffchosen = _qdiff>>
<<include _passage>>
<</link>>
<</capture>>
<br/>
<</if>>
<</for>>
<</message>>
<br/>
<</capture>>
<</for>>
<</focwidget>>
<<focwidget 'devchooseopportunity'>>
<p>
Search:
<<onevent 'input'>>
<<textbox '_chooseoppfilterunused' ''>>
<<onevent-callback>>
<<set _chooseoppfilter = _value>>
<<set _chooseoppshowall = 0>>
<<refreshable-refresh "#devchooseopplist0">>
<</onevent>>
<div>
<<refreshable id="devchooseopplist0">>
<<devchooseopportunitylist $args[0]>>
<</refreshable>>
</div>
</p>
<</focwidget>>
<!-- (internal, do not use directly) -->
<<focwidget 'devchooseopportunitylist'>>
<<if _chooseoppfilter>>
<p>Matching opportunities:</p>
<<set _cand = []>>
<<set _filter = _chooseoppfilter.toLowerCase()>>
<<for _iopp, _opp range setup.opportunitytemplate>>
<<if _opp.getName().toLowerCase().includes(_filter)>>
<<run _cand.push(_opp)>>
<</if>>
<</for>>
<<run _cand.sort((q1, q2) => q1.getDifficulty().getLevel() - q2.getDifficulty().getLevel())>>
<<set _subset = _chooseoppshowall ? _cand : _cand.slice(0, 20)>>
<<for _iopp, _opp range _subset>>
<<capture _opp>>
<<= _opp.getDifficulty().rep()>>:
<<rep _opp>>
<<link '(select this)'>>
<<set _opportunitychosen = _opp>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<<if _subset.length < _cand.length>> <!-- prevent showing too many matches at once -->
<p class="indented">
And <<= _cand.length - _subset.length >> more
<<link '(see all results)'>>
<<set _chooseoppshowall = 1>>
<<refreshable-refresh "#devchooseopplist0">>
<</link>>
</p>
<<elseif !_cand.length>>
<p class="indented">
(No matches)
</p>
<</if>>
<<else>>
<p>
Where is the opportunity located?
<<message '(?)'>>
If it does not have an opportunity location, it will be at the bottom option "Other Quests".
<</message>>
</p>
<<set _passage = $args[0]>>
<<set _found = {}>>
<<for _iopportunitypool, _opportunitypool range setup.questpool>>
<<set _qkeys = Object.keys(_opportunitypool.opportunity_template_rarity_map)>>
<<for _z, _iqkey range _qkeys>>
<<set _found[_iqkey] = true>>
<</for>>
<<capture _opportunitypool>>
<<set _text = `Opportunities in ${_opportunitypool.getName()}`>>
<<message _text>>
<<set _qkeys = Object.keys(_opportunitypool.opportunity_template_rarity_map)>>
<<run _qkeys.sort((q1, q2) => setup.opportunitytemplate[q1].getDifficulty().getLevel() - setup.opportunitytemplate[q2].getDifficulty().getLevel())>>
<<for _z, _iqkey range _qkeys>>
<<set _opportunitytemplate = setup.opportunitytemplate[_iqkey]>>
<<capture _opportunitytemplate>>
<<= _opportunitytemplate.getDifficulty().rep()>>:
<<rep _opportunitytemplate>>
<<link '(select this)'>>
<<set _opportunitychosen = _opportunitytemplate>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<</message>>
<br/>
<</capture>>
<</for>>
<<message 'Other Quests'>>
<<set _cand = []>>
<<for _iopportunity, _opportunity range setup.opportunitytemplate>>
<<if !_found[_opportunity.key]>>
<<run _cand.push(_opportunity)>>
<</if>>
<</for>>
<<run _cand.sort((q1, q2) => q1.getDifficulty().getLevel() - q2.getDifficulty().getLevel())>>
<<for _iopportunity, _opportunity range _cand>>
<<capture _opportunity>>
<<= _opportunity.getDifficulty().rep()>>:
<<rep _opportunity>>
<<link '(select this)'>>
<<set _opportunitychosen = _opportunity>>
<<include _passage>>
<</link>>
<br/>
<</capture>>
<</for>>
<</message>>
<</if>>
<</focwidget>>
<!-- Care: must be reentrant (temporary variables may get overwritten by recursion) -->
<<focwidget 'devlistentry'>>
<<set _entrypath = $args[0]>>
<<set _addpassage = $args[1]>>
<<set _passage = $args[2]>>
<<set _ientry = $args[3]>> <!-- _ientry === null: a fixed single entry (e.g. 'if' condition) instead of a list -->
<<set _entry = $args[4]>>
<<set _listpath = $args[5]>>
<<set _sameline = $args[6]>> <!-- if true, don't add br -->
<<if !_entry>> <!-- handle undefined/null gracefully -->
<div @style="_sameline ? 'display: inline-block' : ''">
Invalid
<<capture _listpath, _ientry>>
<<link '(delete)' _passage>>
<<run setup.evalJsPath(_listpath).splice(_ientry, 1)>>
<</link>>
<</capture>>
</div>
<<elseif _entry.getLayout>> <!-- recursive entry (do all block, if/then/else, etc) -->
<<set _layout = _entry.getLayout()>>
<div @class="_layout.css_class || ''">
<div style="float: right">
<<if $args[3] === null>> <!-- _ientry === null -->
<!-- replace block button -->
<<capture _passage, _entrypath>>
<<link '(replace)' $args[1]>>
<<set $qPassageName = _passage>>
<<set $qJsPath = _entrypath>>
<<set $qListIndex = null>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</capture>>
<<else>> <!-- _ientry !== null -->
<!-- delete recursive block button -->
<<set _listpath = $args[5]>>
<<capture _ientry, _listpath>>
<<link '(delete block)' $args[2]>>
<<run setup.evalJsPath(_listpath).splice(_ientry, 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<<if _ientry > 0>>
<<link '<<icon up-dir "Move up">>' _passage>>
<<run setup.swapValues(setup.evalJsPath(_listpath), _ientry, _ientry - 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<<if _ientry < setup.evalJsPath(_listpath).length - 1>>
<<link '<<icon down-dir "Move down">>' _passage>>
<<run setup.swapValues(setup.evalJsPath(_listpath), _ientry, _ientry + 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<</capture>>
<</if>>
</div>
<<for _iblock, _block range _layout.blocks>>
<div>
<<if _block.passage>>
<!-- allow passages to access args (e.g. actor name) via '_entry' -->
<<set _entry = $args[4]>>
<<include _block.passage>>
<</if>>
<<set _childaddpassage = _block.addpassage || $args[1]>>
<<if _block.listpath>>
<<set _childpath = $args[0] + _block.listpath>>
<<devlist _childpath '(add)' _childaddpassage $args[2]>>
<<elseif _block.entrypath>>
<<set _childpath = $args[0] + _block.entrypath>>
<<set _childentry = setup.evalJsPath(_childpath)>>
<<devlistentry _childpath _childaddpassage $args[2] null _childentry null _block.sameline>>
<</if>>
</div>
<</for>>
</div>
<<else>> <!-- regular entry -->
<div @style="_sameline ? 'display: inline-block' : ''">
<<= _entry.explain()>>
<<capture _ientry, _entry, _entrypath, _listpath, _passage, _addpassage>>
<!-- edit entry button -->
<!--<<set _editpassage = (_entry.passage && _entry.passage()) || _entry.PASSAGE>>
<<run _editpassage || console.log("[DevTool] PASSAGE not defined for class of entry ", _entry.text(), _entry)>>
<<if _editpassage && tags(_editpassage).includes('editable')>>
<<capture _editpassage>>
<<link '(edit)' _editpassage>>
<<set $qPassageName = _passage>>
<<set $qJsPath = _listpath>>
<<set $qListIndex = _ientry>>
<<if _addpassage.includes("Restriction")>>
<<set $qrestriction = _entry>>
<<else>>
<<set $qcost = _entry>>
<</if>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</capture>>
<</if>>-->
<<if _ientry === null>>
<!-- replace entry button -->
<<link '(replace)' _addpassage>>
<<set $qPassageName = _passage>>
<<set $qJsPath = _entrypath>>
<<set $qListIndex = null>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<<else>>
<!-- move entry buttons -->
<<if _ientry > 0>>
<<link '<<icon up-dir "Move up">>' _passage>>
<<run setup.swapValues(setup.evalJsPath(_listpath), _ientry, _ientry - 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<<if _ientry < setup.evalJsPath(_listpath).length - 1>>
<<if _ientry === 0>> <</if>>
<<link '<<icon down-dir "Move down">>' _passage>>
<<run setup.swapValues(setup.evalJsPath(_listpath), _ientry, _ientry + 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<!-- delete entry button -->
<<link '<<icon cancel "Delete">>' _passage>>
<<run setup.evalJsPath(_listpath).splice(_ientry, 1)>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</if>>
<</capture>>
</div>
<</if>>
<</focwidget>>
<!-- Care: must be reentrant (temporary variables may get overwritten by recursion) -->
<<focwidget 'devlist'>>
<<set _listpath = $args[0]>>
<<set _addtext = $args[1]>>
<<set _addpassage = $args[2]>> <!-- passage called to add/replace an entry (e.g. QGAddCostUnit) -->
<<set _passage = $args[3]>> <!-- passage to return to after adding/editing -->
<!-- Add entry to recursive block button -->
<<capture _listpath, _passage>>
<<link _addtext _addpassage>>
<<set $qPassageName = _passage>>
<<set $qJsPath = _listpath>>
<<set $qListIndex = -1>>
<<run setup.DevToolHelper.saveScrollPos()>>
<</link>>
<</capture>>
<<if !(setup.evalJsPath($args[0]) || []).length>>
<div class="graytext">(empty)</div>
<</if>>
<<for _ientry, _entry range (setup.evalJsPath($args[0]) || [])>>
<!-- use $args instead of temporary variables, cause recursion breaks them... -->
<<set _entrypath = $args[0] + '[' + _ientry + ']'>>
<<devlistentry _entrypath $args[2] $args[3] _ientry _entry $args[0]>>
<</for>>
<</focwidget>><!-- Called by QGCostDone and QGRestrictionDone, with the result at '_entry' -->
<!-- [DEBUG]: Uncomment line below to report all changes (add/edit/replace) -->
<!--<<run console.log("DevAddEntry", $qJsPath, $qListIndex, _entry)>>-->
<<if $qListIndex === null>>
<!-- null: not a list but a single root cost/restriction, so replace it -->
<<run setup.evalJsPathAssign($qJsPath, undefined, _entry)>>
<<else>>
<<set _list = setup.evalJsPath($qJsPath)>>
<<if $qListIndex === -1>>
<!-- -1: push at the end of the list -->
<<run _list.push(_entry)>>
<<else>>
<!-- >= 0: replace the i-th entry -->
<<run _list[$qListIndex] = _entry>>
<</if>>
<</if>>
<<unset $qJsPath>>
<<unset $qListIndex>>
<<unset $qgDefaultActorName>>
<<gotowipehistory $qPassageName>><<include 'InitDutyBedchamberSlave'>>
<<include 'InitDutyDamageControlOfficer'>>
<<include 'InitDutyDoctor'>>
<<include 'InitDutyInsurer'>>
<<include 'InitDutyMarketer'>>
<<include 'InitDutyMystic'>>
<<include 'InitDutyPimp'>>
<<include 'InitDutyRelationshipManager'>>
<<include 'InitDutyRescuer'>>
<<include 'InitDutyTrainer'>>
<<include 'InitDutyViceLeader'>>
<<include 'InitDutyScout'>>
<<include 'InitDutyPrestigeSlave'>><<run setup.DutyTemplate.create('BedchamberSlave', {
subclass: setup.DutyTemplate.BedchamberSlave,
name: 'Bedchamber Slave',
description_passage: 'DutyBedchamberSlave',
type: 'bedchamber',
unit_restrictions: [setup.qs.job_slave],
})>><p>
Private slave to whoever is given ownership of
<<= _gDuty.getBedchamber().rep()>>.
Once the slave bonds with their owner, will improve the owner's skills
a tiny amount.
More effective for slavers who tend to stay at your fort and does not go on quests.
</p><<run setup.DutyTemplate.create('DamageControlOfficer', {
subclass: setup.DutyTemplate.DamageControlOfficer,
name: 'Damage Control Officer',
description_passage: 'DutyDamageControlOfficer',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
knowledge: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
intrigue: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_intimidating: setup.DUTY_TRAIT_CRIT_CHANCE,
per_deceitful: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_honest: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Responsible for minimizing anger from other factions.
Has a chance to reduce the anger from other faction,
but in exchange for <<money setup.IRE_DCO_PAY>> each time.
(If the chance is higher than 100%, then there is a chance that the
ire will be reduced further, but in exchange for <<money setup.IRE_DCO_PAY_CRIT>>.)
</p><<run setup.DutyTemplate.create('Doctor', {
name: 'Doctor',
description_passage: 'DutyDoctor',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
aid: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
arcane: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
magic_light_master: setup.DUTY_TRAIT_CRIT_CHANCE,
magic_light: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_kind: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_cruel: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Helps with injury recovery.
The doctor each week
heals up to <<= setup.DOCTOR_ATTEMPTS >> weeks of injuries,
each with the trigger chance.
(If the chance is higher than 100%, then there is a chance that the doctor will heal even more injuries.)
</p><<run setup.DutyTemplate.create('Insurer', {
name: 'Insurer',
description_passage: 'DutyInsurer',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
intrigue: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
survival: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_creative: setup.DUTY_TRAIT_CRIT_CHANCE,
per_cautious: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_brave: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Has a chance to
grant you money each time a quest resulted in failure or disaster.
(If the chance is higher than 100%, then there is a chance that you will get even more money.)
</p><<run setup.DutyTemplate.create('Marketer', {
subclass: setup.DutyTemplate.Marketer,
name: 'Marketer',
description_passage: 'DutyMarketer',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
slaving: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
social: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_connected: setup.DUTY_TRAIT_CRIT_CHANCE,
per_gregarious: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_loner: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Grants you a fixed-priced
slave orders at the end of each week with some chance.
The price depends on your marketer's level.
(If the chance is higher than 100%, then there is a chance that the order found will have higher than usual price.)
</p><<run setup.DutyTemplate.create('Mystic', {
name: 'Mystic',
description_passage: 'DutyMystic',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
arcane: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
knowledge: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_alchemy: setup.DUTY_TRAIT_CRIT_CHANCE,
per_studious: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_active: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Reduces injury duration.
Whenever a unit is injured, the mystic has a chance to reduce the injury
duration. (Maximum <<= setup.MYSTIC_MAX_INJURY>> weeks of injuries prevented per unit.)
(If the chance is higher than 100%, then there is a chance that the mythic will further decrease the injury duration.)
</p><<run setup.DutyTemplate.create('Pimp', {
subclass: setup.DutyTemplate.Pimp,
name: 'Pimp',
description_passage: 'DutyPimp',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
sex: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
slaving: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_entertain: setup.DUTY_TRAIT_CRIT_CHANCE,
per_playful: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_serious: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Grants money
each week based on prestige.
At the end of each week,
has a chance to
grant you around <<money setup.PIMP_PRESTIGE_MULTIPLIER >> for every prestige your company have,
as profits from the operation of your recreation wing.
(If the chance is higher than 100%, then there is a chance that the pimp will generate even more money.)
The money gained per week is capped at
<<money setup.dutytemplate.Pimp.getMoneyCap()>>.
You can increase this cap by upgrading your <<rep setup.buildingtemplate.recreationwing>>.
</p><<run setup.DutyTemplate.PrestigeSlave.create(
'AnalFuckholeSlave',
'Anal Fuckhole Slave',
'DutyAnalFuckholeSlave',
{
training_anal_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_anal_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_anal_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_calm: setup.DUTY_TRAIT_PRESTIGE2,
anus_tight: setup.DUTY_TRAIT_PRESTIGE1,
per_aggressive: -setup.DUTY_TRAIT_PRESTIGE2,
anus_gape: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_anal_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'ServerSlave',
'Server Slave',
'DutyServerSlave',
{
training_edging_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_edging_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_edging_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_generous: setup.DUTY_TRAIT_PRESTIGE2,
skill_alchemy: setup.DUTY_TRAIT_PRESTIGE2,
per_thrifty: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_edging_basic),
],
[
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'ToiletSlave',
'Toilet Slave',
'DutyToiletSlave',
{
training_toilet_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_toilet_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_toilet_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_slow: setup.DUTY_TRAIT_PRESTIGE2,
per_brave: setup.DUTY_TRAIT_PRESTIGE2,
per_smart: -setup.DUTY_TRAIT_PRESTIGE2,
per_cautious: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_toilet_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'MaidSlave',
'Maid Slave',
'DutyMaidSlave',
{
training_domestic_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_domestic_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_domestic_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_chaste: setup.DUTY_TRAIT_PRESTIGE2,
skill_ambidextrous: setup.DUTY_TRAIT_PRESTIGE2,
per_lustful: -setup.DUTY_TRAIT_PRESTIGE2,
per_sexaddict: -setup.DUTY_TRAIT_PRESTIGE3,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_domestic_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'FurnitureSlave',
'Furniture Slave',
'DutyFurnitureSlave',
{
training_endurance_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_endurance_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_endurance_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_loner: setup.DUTY_TRAIT_PRESTIGE2,
per_serious: setup.DUTY_TRAIT_PRESTIGE2,
per_gregarious: -setup.DUTY_TRAIT_PRESTIGE2,
per_playful: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_endurance_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'PunchingBagSlave',
'Punching Bag Slave',
'DutyPunchingBagSlave',
{
training_masochist_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_masochist_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_masochist_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_masochistic: setup.DUTY_TRAIT_PRESTIGE2,
per_tough: setup.DUTY_TRAIT_PRESTIGE2,
per_nimble: -setup.DUTY_TRAIT_PRESTIGE2,
per_lunatic: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_masochist_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'DogSlave',
'Dog Slave',
'DutyDogSlave',
{
training_pet_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_pet_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_pet_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_playful: setup.DUTY_TRAIT_PRESTIGE2,
per_loyal: setup.DUTY_TRAIT_PRESTIGE2,
per_serious: -setup.DUTY_TRAIT_PRESTIGE2,
per_independent: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_pet_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'DecorationSlave',
'Decoration Slave',
'DutyDecorationSlave',
{
training_horny_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_horny_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_horny_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_lustful: setup.DUTY_TRAIT_PRESTIGE2,
per_sexaddict: setup.DUTY_TRAIT_PRESTIGE2,
skill_ambidextrous: setup.DUTY_TRAIT_PRESTIGE2,
per_chaste: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_horny_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'OralFuckholeSlave',
'Oral Fuckhole Slave',
'DutyOralFuckholeSlave',
{
training_oral_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_oral_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_oral_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_submissive: setup.DUTY_TRAIT_PRESTIGE2,
face_attractive: setup.DUTY_TRAIT_PRESTIGE2,
face_beautiful: setup.DUTY_TRAIT_PRESTIGE3,
per_dominant: -setup.DUTY_TRAIT_PRESTIGE2,
face_ugly: -setup.DUTY_TRAIT_PRESTIGE2,
face_hideous: -setup.DUTY_TRAIT_PRESTIGE3,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_oral_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'EntertainmentSlave',
'Entertainment Slave',
'DutyEntertainmentSlave',
{
training_obedience_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_obedience_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_obedience_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
skill_entertain: setup.DUTY_TRAIT_PRESTIGE2,
per_gregarious: setup.DUTY_TRAIT_PRESTIGE2,
per_loner: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'PonySlave',
'Pony Slave',
'DutyPonySlave',
{
training_pony_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_pony_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_pony_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
skill_animal: setup.DUTY_TRAIT_PRESTIGE2,
muscle_strong: setup.DUTY_TRAIT_PRESTIGE1,
muscle_verystrong: setup.DUTY_TRAIT_PRESTIGE2,
muscle_extremelystrong: setup.DUTY_TRAIT_PRESTIGE3,
muscle_weak: -setup.DUTY_TRAIT_PRESTIGE1,
muscle_veryweak: -setup.DUTY_TRAIT_PRESTIGE2,
muscle_extremelyweak: -setup.DUTY_TRAIT_PRESTIGE3,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_pony_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'DominatrixSlave',
'Dominatrix Slave',
'DutyDominatrixSlave',
{
training_dominance_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_dominance_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_dominance_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_dominant: setup.DUTY_TRAIT_PRESTIGE2,
skill_hypnotic: setup.DUTY_TRAIT_PRESTIGE2,
per_submissive: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_dominance_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'TheatreSlave',
'Stripper Slave',
'DutyTheatreSlave',
{
training_sissy_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_sissy_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_sissy_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_dreamy: setup.DUTY_TRAIT_PRESTIGE2,
skill_creative: setup.DUTY_TRAIT_PRESTIGE2,
per_attentive: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_sissy_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'VaginaFuckholeSlave',
'Vagina Fuckhole Slave',
'DutyVaginaFuckholeSlave',
{
training_vagina_basic: setup.DUTY_TRAIT_PRESTIGE1,
training_vagina_advanced: setup.DUTY_TRAIT_PRESTIGE3,
training_vagina_master: setup.DUTY_TRAIT_PRESTIGE5,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
per_generous: setup.DUTY_TRAIT_PRESTIGE2,
vagina_tight: setup.DUTY_TRAIT_PRESTIGE1,
per_thrifty: -setup.DUTY_TRAIT_PRESTIGE2,
vagina_gape: -setup.DUTY_TRAIT_PRESTIGE2,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_vagina_basic),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'CumCowSlave',
'Cum Cow Slave',
'DutyCumCowSlave',
{
balls_tiny: setup.DUTY_TRAIT_PRESTIGE1,
balls_small: setup.DUTY_TRAIT_PRESTIGE2,
balls_medium: setup.DUTY_TRAIT_PRESTIGE3,
balls_large: setup.DUTY_TRAIT_PRESTIGE4,
balls_huge: setup.DUTY_TRAIT_PRESTIGE5,
balls_titanic: setup.DUTY_TRAIT_PRESTIGE6,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.balls_tiny),
setup.qres.Trait(setup.trait.dick_tiny),
],
)>>
<<run setup.DutyTemplate.PrestigeSlave.create(
'MilkCowSlave',
'Milk Cow Slave',
'DutyMilkCowSlave',
{
breast_tiny: setup.DUTY_TRAIT_PRESTIGE1,
breast_small: setup.DUTY_TRAIT_PRESTIGE2,
breast_medium: setup.DUTY_TRAIT_PRESTIGE3,
breast_large: setup.DUTY_TRAIT_PRESTIGE4,
breast_huge: setup.DUTY_TRAIT_PRESTIGE5,
breast_titanic: setup.DUTY_TRAIT_PRESTIGE6,
value_high1: setup.DUTY_TRAIT_PRESTIGE1,
value_high2: setup.DUTY_TRAIT_PRESTIGE2,
value_high3: setup.DUTY_TRAIT_PRESTIGE3,
value_high4: setup.DUTY_TRAIT_PRESTIGE4,
value_high5: setup.DUTY_TRAIT_PRESTIGE5,
value_high6: setup.DUTY_TRAIT_PRESTIGE6,
},
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.breast_tiny),
],
)>><p>
Slave stationed in the recreation wing to entertain its users.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the anal fuckhole station of the recreation wing.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the vagina fuckhole station of the recreation wing.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the oral fuckhole station of the recreation wing.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the bar of the recreation wing, responsible for sucking the dicks of the customers
of the bar without bringing them to climax.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the bath area of the recreation wing, as an alternative to normal urinals.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the cleaning area of the recreation wing, responsible both for cleaning the area,
and for being fucked whenever a customer desires.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the courtyard of the recreation wing, to be used as a furniture by the customers.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the gym of the recreation wing, a living punching bag that loves being punched hard.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the kennel of the recreation wing --- a playful companion that likes to play fetch.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the museum of the recreation wing, as an exhibit displaying aroused human body.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the stables of the recreation wing, which can be used as transportation between various entertainment.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the stage of the recreation wing, which dazzle customers with bondage shows.
Increases prestige based on the slave's traits.
</p><p>
Slave stationed in the theatre area of the recreation wing, which shows nude plays.
Increases prestige based on the slave's traits.
</p><p>
Slaves installed in the taverns as an alternative source of fresh cream for either consumption or play.
Increases prestige based on the slave's traits.
</p><p>
Slaves roaming the pastures acting as a source of fresh milk for patrons.
Increases prestige based on the slave's traits.
</p><<run setup.DutyTemplate.QuestPoolDuty.create(
'ScoutVale',
`Vale Scout`,
'DutyScoutVale',
{
brawn: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
survival: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
{
skill_intimidating: setup.DUTY_TRAIT_CRIT_CHANCE,
per_loner: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_gregarious: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
setup.questpool.vale,
3, /* amount */
)>>
<<run setup.DutyTemplate.QuestPoolDuty.create(
'ScoutForest',
`Forest Scout`,
'DutyScoutForest',
{
survival: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
arcane: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
{
skill_animal: setup.DUTY_TRAIT_CRIT_CHANCE,
per_nimble: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_tough: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
setup.questpool.forest,
2, /* amount */
)>>
<<run setup.DutyTemplate.QuestPoolDuty.create(
'ScoutCity',
`City Scout`,
'DutyScoutCity',
{
social: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
sex: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
{
skill_hypnotic: setup.DUTY_TRAIT_CRIT_CHANCE,
per_curious: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_stubborn: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
setup.questpool.city,
2, /* amount */
)>>
<<run setup.DutyTemplate.QuestPoolDuty.create(
'ScoutDesert',
`Desert Scout`,
'DutyScoutDesert',
{
combat: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
brawn: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
{
skill_ambidextrous: setup.DUTY_TRAIT_CRIT_CHANCE,
per_aggressive: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_calm: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
setup.questpool.desert,
1, /* amount */
)>>
<<run setup.DutyTemplate.QuestPoolDuty.create(
'ScoutSea',
`Sea Scout`,
'DutyScoutSea',
{
combat: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 3,
slaving: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 3,
},
{
skill_flight: setup.DUTY_TRAIT_CRIT_CHANCE / 3,
per_honorable: setup.DUTY_TRAIT_NORMAL_CHANCE / 3,
per_evil: setup.DUTY_TRAIT_NORMAL_CHANCE / 3,
},
setup.questpool.sea,
1, /* amount */
)>><p>
Has a chance to grant quests from <<= setup.questpool.vale.rep() >>.
(If the chance is higher than 100%, then there is a chance that even more quests will be found.)
</p><p>
Has a chance to grant quests from <<= setup.questpool.forest.rep() >>.
(If the chance is higher than 100%, then there is a chance that even more quests will be found.)
</p><p>
Has a chance to grant quests from <<= setup.questpool.city.rep() >>.
(If the chance is higher than 100%, then there is a chance that even more quests will be found.)
</p><p>
Has a chance to grant quests from <<= setup.questpool.desert.rep() >>.
(If the chance is higher than 100%, then there is a chance that even more quests will be found.)
</p><p>
Has a chance to grant quests from <<= setup.questpool.sea.rep() >>.
(If the chance is higher than 100%, then there is a chance that even more quests will be found.)
</p><<run setup.DutyTemplate.create('RelationshipManager', {
name: 'Relationship Manager',
description_passage: 'DutyRelationshipManager',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
aid: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
social: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_connected: setup.DUTY_TRAIT_CRIT_CHANCE,
per_smart: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_slow: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>><p>
Responsible for smoothing it out with all the other forces out there.
Prevents favor decay on some chosen companies.
The number of companies the manager can manage is determined by the
trigger chance -- the higher it is, the more companies the manager can
manage at the same time.
This duty costs <<dangertextlite "upkeep">>,
which is higher when the manager is managing a large number of companies.
</p>
<<include 'RelationshipManagerDescribe'>><<run setup.DutyTemplate.create('Rescuer', {
subclass: setup.DutyTemplate.Rescuer,
name: 'Rescuer',
description_passage: 'DutyRescuer',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
intrigue: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 6,
aid: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 6,
},
relevant_traits:{
skill_creative: setup.DUTY_TRAIT_CRIT_CHANCE / 3,
per_aggressive: setup.DUTY_TRAIT_NORMAL_CHANCE / 3,
per_calm: -setup.DUTY_TRAIT_NORMAL_CHANCE / 3,
},
})>><p>
Your slaver's best friend.
The rescuer will occassionally generate a quest that can possibly rescue one of
your lost slaves/slavers, if any.
This is a difficult duty, however, and the chance is generally not high.
</p><<run setup.DutyTemplate.create('Trainer', {
name: 'Drill Sergeant',
description_passage: 'DutyTrainer',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
brawn: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
knowledge: setup.DUTY_SKILL_MULTIPLIER_TOTAL / 2,
},
relevant_traits:{
skill_intimidating: setup.DUTY_TRAIT_CRIT_CHANCE,
per_dominant: setup.DUTY_TRAIT_NORMAL_CHANCE,
per_submissive: -setup.DUTY_TRAIT_NORMAL_CHANCE,
},
})>>
/*
<<run setup.dutytemplate.Trainer.onWeekend = function(unit) {
setup.questpool.training.generateQuest()
}>>
*/<p>
Gives EXP to your slavers.
The drill sergeant has a chance to
give each unit on duty (including themselves) some exp each week.
(If the chance is higher than 100%, then there is a chance that the drill sergeant
will give even more exp.)
The drill sergeant is also required to do level catch-up quests.
</p><<run setup.DutyTemplate.create('ViceLeader', {
name: 'Vice Leader',
description_passage: 'DutyViceLeader',
type: 'util',
unit_restrictions: [setup.qs.job_slaver],
relevant_skills: {
combat: 0.001,
brawn: 0.001,
survival: 0.001,
intrigue: 0.001,
slaving: 0.001,
knowledge: 0.001,
social: 0.001,
aid: 0.001,
arcane: 0.001,
sex: 0.001,
},
relevant_traits:{
},
})>><p>
Your second in command, who helps you with everything.
You gain <<= Math.round(setup.VICELEADER_SKILL_MULTI * 100)>>% of each of the vice leader's skills (i.e,
<<for _iskill, _skill range setup.skill>><<rep _skill>><</for>>
).
(The trigger chance does not actually do anything.)
</p>/* By FCDev from Free Cities game */
<<set $i1 = {}>>
<<set $i2 = {}>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<if _u.isHasDick() && _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _hasdick = true>>
<<else>>
<<set _hasdick = false>>
<</if>>
You quietly head over to the doctor's office door.
As you get closer and close,
you hear a quiet moaning and the distinct noise of flesh on flesh.
Peeking into the office, you see <<rep _u>> between
$i1.his patient slave <<rep _victim>>'s legs,
who are lying on top of the doctor's table and
spread wide by makeshift stirrups made from weapon sheathes.
<<if _hasdick>>
$i1.He's pounding eagerly away and mauling $i1.his patient's
bare <<ubreast _victim>> with both <<uhands _u>>.
<<else>>
$i1.He's using one <<uhand _u>> to fingerfuck $i1.his patient, and the other to masturbate furiously.
<</if>>
Sensing nothing wrong with a little fun on the job, you leave
your <<uadjper _u>> doctor alone.
<<questauthorcardtext 'FCDev (Free Cities)'>>/* By FCDev from Free Cities game */
<<set $i = {}>>
<<pronounload $i _u>>
You bring <<= _u.getName()>> back to your office.
You cuff $i.his wrists and ankles,
bend all four limbs behind $i.him,
secure them together, and hoist $i.him up to the ceiling on a rope.
$i.He hangs up ther like a sex slave chandelier, $i.his
<<if _u.isHasDick()>><<udick _u>> swaying<<else>>
<<ubreasts _u>> swaying<</if>>
in a lovely way whenever $i.he moves.
Periodically you let $i.him down to stretch $i.his aching limbs,
but whenever you put your decoration back up you add some clips with little bells on them:
first the nose, then the nipples, and finally the
<<if _u.isHasDick()>>dickhead<<else>>pussylips<</if>>.
By the end of the day your work is accompanied by the sweet sounds of ringing bells and
stoic moans, which makes your work less dull.
<<questauthorcardtext 'FCDev (Free Cities)'>><<set $i = {}>>
<<pronounload $i _u>>
When $i.he saw you approaching, <<= _u.getName()>> stops the scrubbing and immediately switched
$i.his attention to you, asking if there is anything $i.he can do for you.
<<if Math.random() < 0.5>>
You instruct $i.him to go back to what $i.he was doing.
$i.He gets back to $i.his knees,
puzzled, and then gasps when $i.he finds
<<if !$unit.player.isHasDick()>>your fingers<<else>>your cockhead<</if>>
pressing against $i.his
<<if _u.isHasVagina()>>rosebud<<else>>asshole<</if>>.
You instruct $i.him imperiously to get on with it,
and $i.he soon understands your intent.
$i.He scrubs back and forth, panting and moaning, as you buttfuck $i.him
in time with $i.his labors<<if $unit.player.isHasDick()>>,
using your other <<uhand $unit.player>> to look after yourself<<elseif $unit.player.isHasVagina()>>,
using your other <<uhand $unit.player>> to shlick your pussy while you pound $i.him<</if>>.
You even carefully scoot along with $i.him when $i.he needs to reach new spots.
By the time $i.he's done $i.his <<ulegs _u>>, <<uarms _u>> and $i.his <<uanus _u>> are very tired.
<<else>>
<<if !setup.Text.Unit.Equipment.isNaked(_u)>>
You instruct $i.him to strip off
$i.his clothes and lay $i.his back against the floor.
<<ustriptorso _u>>
<<ustriplegs _u>>
<<else>>
You instruct $i.him to lay $i.his back against the floor.
<</if>>
You empty a bottle of lubricating potion across $i.his entire body.
$i.He gasps from the cold fluid.
You slide around on the floor with $i.him,
playfully scrubbing $i.his <<ubody _u>>
around in the pool of lube,
playing with $i.his wet <<ubreast _u>> and $i.his lubricated <<ulegs _u>> before
<<if !$unit.player.isHasDick()>>
wrestling the slick slave onto $i.his back so you can ride $i.his <<uface _u>>
while reaching down to spread $i.his legs and molest $i.his ass<<else>>
sinking your <<udick $unit.player>> into $i.his
<<if _u.isHasVagina()>>
now-slick pussy and then $i.his relaxing butthole
<<else>>
now-slick butthole
<</if>>
<<if $unit.player.isHasVagina()>>
followed by some grinding to coat $i.his face in your pussyjuice<</if>><</if>>
Both you and the slave $i.he had fun for a while before getting back to your work.
<</if>>
<<questauthorcardtext 'FCDev (Free Cities)'>><<set $i = {}>>
<<pronounload $i _u>>
<<if Math.random() < 0.5>>
You head toward the utility area with the cow milkers,
and <<= _u.getName()>> follows eagerly behind you,
pleased you'd do this for $i.him and very ready to relieve the pressure in $i.his tits.
You seat yourself on a stool
and draw $i.him onto your lap rather.
Reaching behind yourself, you give the cow on your lap a broad bucket,
and tell $i.him to hold it
on $i.his lap.
Then you reach around $i.him and take $i.his
<<ubreasts _u>>
in your <<uhands $unit.player>>.
She gasps as $i.he realizes exactly how you plan to do this,
and adjusts the bucket so it's below both of $i.his nipples at once.
<br><br>
You gave $i.her a methodical massage of $i.his breasts, both at once.
<<if _u.isHasTrait(setup.trait.breast_medium)>>
They're large enough to be more than a single handful, so you go bit by bit,
ensuring that no part of $i.his udders goes untouched.
<</if>>
Her nipples start to gush milk without help after a few moments of this,
and $i.he groans with relief and satisfaction as $i.he
feels $i.his breasts begin to empty and enjoys the sensation of the massage.
After you're satisfied, you move your <<uhands $unit.player>> to $i.his nipples and milk $i.him like a cow,
getting the last drops of milk out of $i.him.
When $i.he's done, $i.he leans back into you for a moment before setting the milk bucket
down.
<<else>>
You decided to treat <<= _u.getName()>> like the cow $i.he is
You lead $i.him to the utility area of the pasture,
where the cow milkers are.
You fetch a pair of low stools, make $i.him kneel on one, and put $i.his <<uhands _u>> on the other,
so $i.he's on all fours with $i.his udders hanging beneath $i.his
<<ubreast _u>>.
<br><br>
You swing a bucket under $i.his nipples and milk $i.him by hand,
as though $i.he were a cow.
This isn't exactly what $i.he had in mind, but the feeling of your <<uhands $unit.player>>
on $i.his nipples, tugging the streams of milk out of $i.him
and into the bucket beneath
eventually relaxes $i.him.
Seeing this, you muse aloud, as though to yourself,
that a little farmyard bestiality wouldn't hurt,
since there's no one there but you and a dairy cow.
Pawing the cow's behind possessively,
you finger $i.him aggressively before deciding on
<<if $unit.player.isHasVagina()>>
a little cow tongue action.
You stand up and grind your pussy against the cow's upturned <<umouth _u>>,
humping $i.his face hard enough to shake the drops of milk still clinging to
$i.his sore nipples down and into the bucket below.
<<if $unit.player.isHasDick()>>
You pull away when you're about halfway there,
only to shove your cock down $i.his throat instead.
<</if>>
When you're finished,
you step away, leaving $i.his face thoroughly coated in
girlcum
<<if $unit.player.isHasDick()>>
and $i.his mouth full of your load<</if>>,
<<elseif _u.isHasVagina()>>
a little cow pussy.
<<ustripvagina _u>>
You walk around behind $i.him and fuck $i.him
hard enough to shake the drops of milk still clinging
to $i.his sore nipples down and into the bucket below.
When you're finished,
you step away, leaving your cum to run out of $i.his cunt and down $i.his <<ulegs _u>>,
<<else>>
some cow ass.
<<ustripanus _u>>
You walk around behind $i.him and buttfuck $i.him hard enough to
shake the drops of milk still clinging to $i.his sore
nipples down and into the bucket below. When you're finished,
you step away, leaving your cum to drip out of $i.his asshole,
<</if>>
<</if>>
<<questauthorcardtext 'FCDev (Free Cities)'>><<set $i = {}>>
<<pronounload $i _u>>
$i.He comes eagerly over and sucks you off with enthusiasm.
As you cum, $i.he orgasms quickly at the taste of the stuff hitting $i.his <<umouth _u>>,
before complimenting the taste.
<<questauthorcardtext 'FCDev (Free Cities)'>><<set $i = {}>>
<<pronounload $i _u>>
You order a refreshment to go with some
<<if $unit.player.isHasDick()>>
a blowjob<<else>>some
cunnilingus<</if>>.
Turning to <<= _u.getName()>>, you
select a beverage, which <<= _u.getName()>> prompty serve.
You relieve the slave of the tray, and
widen your legs slightly in your chair.
$i.He immediately drops to $i.his knees and gets to work,
using all of her mastery at edging and giving oral pleasure.
You take your time, enjoying the combination of alcohol and <<if $unit.player.isHasDick()>>blowjob<<else>>rimjob<</if>>,
running a molesting <<uhand $unit.player>> on the slave's <<ubody _u>>.
/*
This isn't the first time you've done this, nor will it be the last,
and <<= _u.getName()>> is used to being used as a serving $i.man.
*/
<<questauthorcardtext 'FCDev (Free Cities)'>><<set setup.equipment = {}>>
<<include InitEquipmentCombat>>
<<include InitEquipmentBrawn>>
<<include InitEquipmentSurvival>>
<<include InitEquipmentIntrigue>>
<<include InitEquipmentSlaving>>
<<include InitEquipmentKnowledge>>
<<include InitEquipmentSocial>>
<<include InitEquipmentAid>>
<<include InitEquipmentArcane>>
<<include InitEquipmentSex>>
<<include InitEquipmentPet>>
<<include InitEquipmentPony>>
<<include InitEquipmentRestraint>>
<<include InitEquipmentSexToy>>
<<include InitEquipmentChastity>>
<<include InitEquipmentWeapon>>
<<include InitEquipmentOther>>
<<include InitEquipmentTexts>>
/* must be last: */
<<include InitEquipmentPoolGroup>>
<<run setup.EquipmentSet.initDefaultEquipmentSets()>><<set setup.EQUIPMENT_TEXTS = {
/* orc-born gauntlet */
combat_arms_master: {
description: 'An extremely well-crafted gauntlets suitable for the hardiest combatants. ' +
'It bear the craftsmanship of a master orcish blacksmith.',
flavor: 'The gauntlets bear the mark of a legendary orcish smith, truly a mastework equipment.' +
'It is said to grant whoever wear them great power like orcs of ancient times',
},
/* dark excalibur: */
slaving_weapon_master: {
description: 'Once the famous sword Excalibur, its purifying powers have been corrupted beyond recognition. ' +
'The corruption does not reduce its ego however, and the sword continues to refuse being wielded by anyone but the people it consider most honorable',
flavor: 'Even when fully corrupted, the sword remains beautiful in its stark nature.' +
'It is able to cut through flesh inflicting as much pain as possible without causing damage, truly a useful weapon for slavers',
},
weapon_broadsword: {
description: 'A masterfully crafted broadsword made using pure strong metal',
flavor: 'It is very heavy, and only the stronger slavers are able to wield it with deadly efficiency',
},
weapon_dualdagger: {
description: 'Masterfully crafted dual daggers for the stealthiest of assasins. Or assasin-wannabes',
flavor: 'With one dagger in each hand, an experienced assassin can make great use of such a weapon',
},
weapon_rapier: {
description: 'Masterfully crafted rapier guaranteed to give you the required edge for those damsel-winning duels',
flavor: 'The preferred weapon of the high nobility, but perhaps still useful for a slaving career',
},
weapon_log: {
description: 'An ordinary log bearing the inscriptions of a master blacksmith',
flavor: "If it's any consolation, the ladies are sure to be pleased seeing such a hard, thick piece of wood",
},
}>><<run new setup.Equipment(
'aid_torso',
'Healer Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'aid_mouth',
'Healer Plague Mask',
setup.equipmentslot.mouth,
['accessory', 'plaguemask'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'eyes_mask_plague' },
)>>
<<run new setup.Equipment(
'aid_head',
'Healer Habit',
setup.equipmentslot.head,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'aid_arms',
'Healer Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'aid_nipple',
'Healer Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
15, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'nipple_clamps' },
)>>
<<run new setup.EquipmentPool(
'aid',
{
aid_torso: 1,
aid_mouth: 1,
aid_arms: 1,
aid_head: 1,
aid_nipple: 1,
}
)>>
<<run new setup.Equipment(
'aid_torso_good',
'Saint Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'aid_mouth_good',
'Saint Shroud',
setup.equipmentslot.mouth,
['accessory', 'mouthcover'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'neck_hood' },
)>>
<<run new setup.Equipment(
'aid_head_good',
'Saint Habit',
setup.equipmentslot.head,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'aid_arms_good',
'Saint Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'aid_nipple_good',
'Saint Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
15, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'nipple_clamps' },
)>>
<<run new setup.EquipmentPool(
'aid_good',
{
aid_torso_good: 1,
aid_mouth_good: 1,
aid_arms_good: 1,
aid_head_good: 1,
aid_nipple_good: 1,
}
)>><<run new setup.Equipment(
'arcane_torso',
'Wizard Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'arcane_arms',
'Wizard Ring',
setup.equipmentslot.arms,
['ring'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'arms_ring' },
)>>
<<run new setup.Equipment(
'arcane_feet',
'Wizard Slippers',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{},
)>>
<<run new setup.Equipment(
'arcane_head',
'Wizard Hat',
setup.equipmentslot.head,
['accessory', 'hat',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'head_hat_wizard' },
)>>
<<run new setup.Equipment(
'arcane_neck',
'Wizard Amulet',
setup.equipmentslot.neck,
['necklace'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'neck_necklace_star' },
)>>
<<run new setup.EquipmentPool(
'arcane',
{
arcane_torso: 1,
arcane_arms: 1,
arcane_head: 1,
arcane_feet: 1,
arcane_neck: 1,
}
)>>
<<run new setup.Equipment(
'arcane_torso_good',
'Archwizard Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'arcane_arms_good',
'Archwizard Ring',
setup.equipmentslot.arms,
['ring'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'arms_ring' },
)>>
<<run new setup.Equipment(
'arcane_feet_good',
'Archwizard Slippers',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{},
)>>
<<run new setup.Equipment(
'arcane_head_good',
'Archwizard Hat',
setup.equipmentslot.head,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'head_hat_wizard' },
)>>
<<run new setup.Equipment(
'arcane_neck_good',
'Archwizard Amulet',
setup.equipmentslot.neck,
['necklace'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'neck_necklace_star' },
)>>
<<run new setup.EquipmentPool(
'arcane_good',
{
arcane_torso_good: 1,
arcane_arms_good: 1,
arcane_head_good: 1,
arcane_feet_good: 1,
arcane_neck_good: 1,
}
)>><<run new setup.Equipment(
'brawn_neck',
"Brawler Cape",
setup.equipmentslot.neck,
['clothes', 'cape',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'brawn_rear',
"Brawler Boxers",
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'brawn_arms',
"Brawler Gauntlets",
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
"brawn_mouth",
"Brawler Bandana",
setup.equipmentslot.mouth,
['accessory', 'mouthcover'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
"brawn_feet",
"Brawler Sandals",
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'feet_sandals' },
)>>
<<run new setup.EquipmentPool(
'brawn',
{
brawn_neck: 1,
brawn_rear: 1,
brawn_arms: 1,
brawn_feet: 1,
brawn_mouth: 1,
}
)>>
<<run new setup.Equipment(
'brawn_neck_good',
"Gladiator Cape",
setup.equipmentslot.neck,
['clothes', 'cape'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'brawn_rear_good',
"Gladiator Boxers",
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'brawn_arms_good',
"Gladiator Gauntlets",
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
"brawn_mouth_good",
"Gladiator Bandana",
setup.equipmentslot.mouth,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
"brawn_feet_good",
"Gladiator Sandals",
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'feet_sandals' },
)>>
<<run new setup.EquipmentPool(
'brawn_good',
{
brawn_neck_good: 1,
brawn_rear_good: 1,
brawn_arms_good: 1,
brawn_feet_good: 1,
brawn_mouth_good: 1,
}
)>><<run new setup.Equipment(
'chastity_dick',
'Dick Chastity Device',
setup.equipmentslot.genital,
['dick', 'chastity', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{},
[setup.trait.eq_chastity],
[ /* unit restrictions */
setup.qs.trait_dick,
],
{ image: 'genital_chastity' }
)>>
<<run new setup.EquipmentPool(
'chastity',
{
chastity_dick: 1,
}
)>><<run new setup.Equipment(
'combat_torso',
'Chain Mail',
setup.equipmentslot.torso,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'torso_chestplate_heavy' },
)>>
<<run new setup.Equipment(
'combat_legs',
'Chain Greaves',
setup.equipmentslot.legs,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'legs_faulds_heavy' },
)>>
<<run new setup.Equipment(
'combat_feet',
'Chain Sabatons',
setup.equipmentslot.feet,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'feet_greaves_heavy' },
)>>
<<run new setup.Equipment(
'combat_arms',
'Chain Gauntlets',
setup.equipmentslot.arms,
['armor'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'arms_gauntlets_heavy' },
)>>
<<run new setup.Equipment(
'combat_head',
'Chain Coif',
setup.equipmentslot.head,
['armor', 'helmet', 'coverface'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'head_helm_heavy' },
)>>
<<run new setup.EquipmentPool(
'combat',
{
combat_torso: 1,
combat_legs: 1,
combat_arms: 1,
combat_feet: 1,
combat_head: 1,
}
)>>
<<run new setup.Equipment(
'combat_torso_good',
'Plate Armor',
setup.equipmentslot.torso,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'torso_chestplate_heavy' },
)>>
<<run new setup.Equipment(
'combat_legs_good',
'Plate Greaves',
setup.equipmentslot.legs,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'legs_faulds_heavy' },
)>>
<<run new setup.Equipment(
'combat_feet_good',
'Plate Sabatons',
setup.equipmentslot.feet,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'feet_greaves_heavy' },
)>>
<<run new setup.Equipment(
'combat_arms_good',
'Plate Gauntlets',
setup.equipmentslot.arms,
['armor'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'arms_gauntlets_heavy' },
)>>
<<run new setup.Equipment(
'combat_head_good',
'Plate Helmet',
setup.equipmentslot.head,
['armor', 'helmet', 'coverface'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'head_helm_heavy' },
)>>
<<run new setup.EquipmentPool(
'combat_good',
{
combat_torso_good: 1,
combat_legs_good: 1,
combat_arms_good: 1,
combat_feet_good: 1,
combat_head_good: 1,
}
)>>
<<run new setup.Equipment(
'combat_arms_master',
'Orc-born Gauntlets',
setup.equipmentslot.arms,
['armor'],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_MASTER},
[],
[],
{ image: 'arms_gauntlets_heavy' },
)>><<run new setup.Equipment(
'intrigue_neck',
'Thief Cloak',
setup.equipmentslot.neck,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_legs',
'Thief Trousers',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_feet',
'Thief Shoes',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_mouth',
'Thief Bandana',
setup.equipmentslot.mouth,
['accessory', 'mouthcover',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_eyes',
'Thief Mask',
setup.equipmentslot.eyes,
['accessory', 'eyemask'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'eyes_mask' },
)>>
<<run new setup.EquipmentPool(
'intrigue',
{
intrigue_neck: 1,
intrigue_legs: 1,
intrigue_mouth: 1,
intrigue_feet: 1,
intrigue_eyes: 1,
}
)>>
<<run new setup.Equipment(
'intrigue_neck_good',
'Ninja Cloak',
setup.equipmentslot.neck,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_legs_good',
'Ninja Trousers',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_feet_good',
'Ninja Slippers',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_mouth_good',
'Ninja Bandana',
setup.equipmentslot.mouth,
['accessory', 'mouthcover',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'intrigue_eyes_good',
'Ninja Mask',
setup.equipmentslot.eyes,
['accessory', 'eyemask'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{intrigue: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'eyes_mask' },
)>>
<<run new setup.EquipmentPool(
'intrigue_good',
{
intrigue_neck_good: 1,
intrigue_legs_good: 1,
intrigue_mouth_good: 1,
intrigue_feet_good: 1,
intrigue_eyes_good: 1,
}
)>><<run new setup.Equipment(
'knowledge_torso',
'Scholar Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'knowledge_legs',
'Scholar Pants',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'knowledge_head',
'Scholar Cap',
setup.equipmentslot.head,
['accessory', 'hat'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'head_hat_wizard' },
)>>
<<run new setup.Equipment(
'knowledge_eyes',
'Scholar Spectacles',
setup.equipmentslot.eyes,
['accessory', 'spectacles',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'eyes_spectacles' },
)>>
<<run new setup.Equipment(
'knowledge_arms',
'Scholar Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'knowledge',
{
knowledge_torso: 1,
knowledge_legs: 1,
knowledge_eyes: 1,
knowledge_head: 1,
knowledge_arms: 1,
}
)>>
<<run new setup.Equipment(
'knowledge_torso_good',
'Wiseman Robe',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'torso_robes' },
)>>
<<run new setup.Equipment(
'knowledge_legs_good',
'Wiseman Pants',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'knowledge_head_good',
'Wiseman Thinking Cap',
setup.equipmentslot.head,
['accessory', 'hat'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'head_hat_wizard' },
)>>
<<run new setup.Equipment(
'knowledge_eyes_good',
'Wiseman Spectacles',
setup.equipmentslot.eyes,
['clothes', 'spectacles',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'eyes_spectacles' },
)>>
<<run new setup.Equipment(
'knowledge_arms_good',
'Wiseman Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{knowledge: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'knowledge_good',
{
knowledge_torso_good: 1,
knowledge_legs_good: 1,
knowledge_eyes_good: 1,
knowledge_head_good: 1,
knowledge_arms_good: 1,
}
)>><<run new setup.Equipment(
'pants',
'Standard Pants',
setup.equipmentslot.legs,
['clothes', 'covering', ],
0, /* value */
0, /* sluttines */
{},
[],)>>
<<run new setup.Equipment(
'shirt',
'Standard Shirt',
setup.equipmentslot.torso,
['clothes', 'covering', ],
0, /* value */
0, /* sluttines */
{},
[],)>>
<<run new setup.Equipment(
'shoes',
'Standard Shoes',
setup.equipmentslot.feet,
['shoes', 'covering', ],
0, /* value */
0, /* sluttines */
{},
[],)>><<run new setup.Equipment(
'tailplug_dog',
'Puppy Tail Plug',
setup.equipmentslot.rear,
['pet', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_pony_tailplug' },
)>>
<<run new setup.Equipment(
'collar_dog',
'Puppy Collar',
setup.equipmentslot.neck,
['pet', 'collar'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{},
[setup.trait.eq_collar],
[],
{ image: 'neck_puppy_collar' },
)>>
<<run new setup.Equipment(
'hood_dog',
'Puppy Hood',
setup.equipmentslot.head,
['pet', 'headcover', 'coverface'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{},
[],
[],
{ image: 'head_puppy_hood' },
)>>
<<run new setup.Equipment(
'mitts_dog',
'Puppy Mitts',
setup.equipmentslot.arms,
['pet', 'mitts', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{},
[setup.trait.eq_restrained],
[],
{ image: 'arms_puppy_mitts' },
)>>
<<run new setup.Equipment(
'harness_dog',
'Puppy Harness',
setup.equipmentslot.torso,
['pet', 'harness'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[],
[],
{ image: 'torso_puppy_harness' },
)>>
<<run new setup.EquipmentPool(
'dog',
{
tailplug_dog: 1,
collar_dog: 1,
hood_dog: 1,
mitts_dog: 1,
harness_dog: 1,
}
)>>
<<run new setup.Equipment(
'golden_tailplug_dog',
'Golden Puppy Tail Plug',
setup.equipmentslot.rear,
['pet', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
30, /* sluttines */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_pony_tailplug', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golden_collar_dog',
'Golden Puppy Collar',
setup.equipmentslot.neck,
['pet', 'collar'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
15, /* sluttines */
{},
[setup.trait.eq_collar],
[],
{ image: 'neck_puppy_collar', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golden_harness_dog',
'Golden Puppy Harness',
setup.equipmentslot.torso,
['pet', 'harness'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
25, /* sluttines */
{},
[],
[],
{ image: 'torso_puppy_harness', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golden_hood_dog',
'Golden Puppy Hood',
setup.equipmentslot.head,
['pet', 'headcover', 'coverface'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[],
[],
{ image: 'head_puppy_hood', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golden_mitts_dog',
'Golden Puppy Mitts',
setup.equipmentslot.arms,
['pet', 'mitts', 'banuse'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[setup.trait.eq_restrained],
[],
{ image: 'arms_puppy_mitts', colorize: 'gold' },
)>>
<<run new setup.EquipmentPool(
'pet_good',
{
golden_tailplug_dog: 1,
golden_collar_dog: 1,
golden_harness_dog: 1,
golden_mitts_dog: 1,
golden_hood_dog: 1,
}
)>><<run new setup.Equipment(
'tailplug_pony',
'Pony Tail Plug',
setup.equipmentslot.rear,
['pony', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttiness */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_pony_tailplug' },
)>>
<<run new setup.Equipment(
'gag_pony',
'Pony Bit Gag',
setup.equipmentslot.mouth,
['pony', 'gag', 'bitgag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{},
[setup.trait.eq_gagged],
[],
{ image: 'mouth_pony_bitgag' },
)>>
<<run new setup.Equipment(
'eyecover_pony',
'Pony Blinders',
setup.equipmentslot.eyes,
['pony', 'ponyeyecover', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{},
[],
[],
{ image: 'eyes_pony_blinders' },
)>>
<<run new setup.Equipment(
'hooves_front_pony',
'Pony Hooves (Front)',
setup.equipmentslot.arms,
['pony', 'hooves', 'banuse'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{},
[setup.trait.eq_restrained],
[],
{ image: 'legs_pony_hooves' },
)>>
<<run new setup.Equipment(
'hooves_rear_pony',
'Pony Hooves (Rear)',
setup.equipmentslot.feet,
['pony', 'hooves', 'banuse', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{},
[setup.trait.eq_restrained],
[],
{ image: 'legs_pony_hooves' },
)>>
<<run new setup.Equipment(
'large_tailplug_pony',
'Extra Large Pony Tail Plug',
setup.equipmentslot.rear,
['pony', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
30, /* sluttiness */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_pony_tailplug' },
)>>
<<run new setup.Equipment(
'large_gag_pony',
'Extra Large Pony Bit Gag',
setup.equipmentslot.mouth,
['pony', 'gag', 'bitgag', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttiness */
{},
[setup.trait.eq_gagged],
[],
{ image: 'mouth_pony_bitgag' },
)>>
<<run new setup.Equipment(
'large_eyecover_pony',
'Extra Dark Pony Blinders',
setup.equipmentslot.eyes,
['pony', 'ponyeyecover'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttiness */
{},
[],
[],
{ image: 'eyes_pony_blinders' },
)>>
<<run new setup.Equipment(
'constricting_hooves_front_pony',
'Extra Constricting Pony Hooves (Front)',
setup.equipmentslot.arms,
['pony', 'hooves', 'banuse'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttiness */
{},
[setup.trait.eq_restrained],
[],
{ image: 'legs_pony_hooves' },
)>>
<<run new setup.Equipment(
'constricting_hooves_rear_pony',
'Extra Constricting Pony Hooves (Rear)',
setup.equipmentslot.feet,
['pony', 'hooves', 'banuse', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttiness */
{},
[setup.trait.eq_restrained],
[],
{ image: 'legs_pony_hooves' },
)>>
<<run new setup.EquipmentPool(
'pony',
{
tailplug_pony: 1,
gag_pony: 1,
eyecover_pony: 1,
hooves_front_pony: 1,
hooves_rear_pony: 1,
}
)>>
<<run new setup.EquipmentPool(
'pony_good',
{
large_tailplug_pony: 1,
large_gag_pony: 1,
large_eyecover_pony: 1,
constricting_hooves_front_pony: 1,
constricting_hooves_rear_pony: 1,
}
)>><<run new setup.Equipment(
'manacles_up',
'Manacles',
setup.equipmentslot.arms,
['restraints'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{},
[setup.trait.eq_restrained],
[],
{ image: 'arms_manacles' },
)>>
<<run new setup.Equipment(
'manacles_down',
'Fetters',
setup.equipmentslot.feet,
['restraints'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{},
[setup.trait.eq_restrained],
[],
{ image: 'feet_fetters' },
)>>
<<run new setup.Equipment(
'blindfold',
'Blindfold',
setup.equipmentslot.eyes,
['blindfold', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{},
[setup.trait.eq_blind],
[],
{ image: 'eyes_blindfold' },
)>>
<<run new setup.Equipment(
'ballgag',
'Ball Gag',
setup.equipmentslot.mouth,
['gag', 'ballgag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[setup.trait.eq_gagged],
[],
{ image: 'mouth_gag_ball' },
)>>
<<run new setup.Equipment(
'metal_collar',
'Heavy Metal Collar',
setup.equipmentslot.neck,
['collar'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{},
[setup.trait.eq_collar],
[],
{ image: 'neck_collar' },
)>>
<<run new setup.EquipmentPool(
'restraint',
{
metal_collar: 1,
ballgag: 1,
blindfold: 1,
manacles_up: 1,
manacles_down: 1,
}
)>><<run new setup.Equipment(
'sex_torso',
'Whore Harness',
setup.equipmentslot.torso,
['harness'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],)>>
<<run new setup.Equipment(
'sex_legs',
'Whore Leggings',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],)>>
<<run new setup.Equipment(
'sex_rear',
'Whore Thong',
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'rear_thong' },)>>
<<run new setup.Equipment(
'sex_nipple',
'Whore Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],)>>
<<run new setup.Equipment(
'sex_neck',
'Whore Choker',
setup.equipmentslot.neck,
['choker'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'neck_necklace' },
)>>
<<run new setup.EquipmentPool(
'sex',
{
sex_torso: 1,
sex_legs: 1,
sex_nipple: 1,
sex_rear: 1,
sex_neck: 1,
}
)>>
<<run new setup.Equipment(
'sex_torso_good',
'Succubus Harness',
setup.equipmentslot.torso,
['harness'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],)>>
<<run new setup.Equipment(
'sex_legs_good',
'Succubus Leggings',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],)>>
<<run new setup.Equipment(
'sex_rear_good',
'Succubus Thong',
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'rear_thong' },)>>
<<run new setup.Equipment(
'sex_nipple_good',
'Succubus Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],)>>
<<run new setup.Equipment(
'sex_neck_good',
'Succubus Choker',
setup.equipmentslot.neck,
['choker'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'neck_necklace' },
)>>
<<run new setup.EquipmentPool(
'sex_good',
{
sex_torso_good: 1,
sex_legs_good: 1,
sex_nipple_good: 1,
sex_rear_good: 1,
sex_neck_good: 1,
}
)>><<run new setup.Equipment(
'nipplechains',
'Nipple Chains',
setup.equipmentslot.nipple,
['accessory', 'nipplechains'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[],
[],
{ image: 'nipple_clamps' },
)>>
<<run new setup.Equipment(
'buttplug',
'Buttplug',
setup.equipmentslot.rear,
['buttplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_buttplug' },
)>>
<<run new setup.Equipment(
'dildo',
'Dildo',
setup.equipmentslot.genital,
['dildo', 'vagina', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[setup.trait.eq_plug_vagina],
[
setup.qs.trait_vagina,
],
{ image: 'genital_dildo' },
)>>
<<run new setup.Equipment(
'dildogag',
'Dildo Gag',
setup.equipmentslot.mouth,
['gag', 'dildogag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[setup.trait.eq_gagged],
[],
{ image: 'mouth_gag_dildo' },
)>>
<<run new setup.Equipment(
'dickplug',
'Dick Plug',
setup.equipmentslot.genital,
['dickplug', 'dick', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
[],
[
setup.qs.trait_dick,
],
{ image: 'genital_dickplug' },
)>>
<<run new setup.Equipment(
'goldnipplechains',
'Gold Nipple Chains',
setup.equipmentslot.nipple,
['accessory', 'nipplechains'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[],
[],
{ image: 'nipple_clamps', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'goldbuttplug',
'Gold Buttplug',
setup.equipmentslot.rear,
['buttplug', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_buttplug', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golddildo',
'Gold Dildo',
setup.equipmentslot.genital,
['dildo', 'vagina', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[setup.trait.eq_plug_vagina],
[
setup.qs.trait_vagina,
],
{ image: 'genital_dildo', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golddildogag',
'Gold Dildo Gag',
setup.equipmentslot.mouth,
['dildogag', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[setup.trait.eq_gagged],
[],
{ image: 'mouth_gag_dildo', colorize: 'gold' },
)>>
<<run new setup.Equipment(
'golddickplug',
'Gold Dick Plug',
setup.equipmentslot.genital,
['dickplug', 'dick', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
[],
[
setup.qs.trait_dick,
],
{ image: 'genital_dickplug', colorize: 'gold' },
)>>
<<run new setup.EquipmentPool(
'sextoy',
{
nipplechains: 1,
buttplug: 1,
dildo: 1,
dildogag: 1,
dickplug: 1,
}
)>>
<<run new setup.EquipmentPool(
'sextoy_good',
{
goldnipplechains: 1,
goldbuttplug: 1,
golddildo: 1,
golddildogag: 1,
golddickplug: 1,
}
)>>
<<run new setup.Equipment(
'buttplug_master',
'Ancient Neko Buttplug',
setup.equipmentslot.rear,
['buttplug',],
setup.EQUIPMENT_PRICE_MASTER, /* value */
30, /* sluttines */
{},
[setup.trait.eq_plug_anus],
[],
{ image: 'rear_buttplug' },
)>><<run new setup.Equipment(
'slaving_torso',
'Kinky Jacket',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_legs',
'Kinky Leggings',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_arms',
'Kinky Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_rear',
'Kinky Underwear',
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_head',
'Kinky Cap',
setup.equipmentslot.head,
['accessory', 'hat'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'slaving',
{
slaving_torso: 1,
slaving_legs: 1,
slaving_rear: 1,
slaving_arms: 1,
slaving_head: 1,
}
)>>
<<run new setup.Equipment(
'slaving_torso_good',
"Master Jacket",
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_legs_good',
"Master Trousers",
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_arms_good',
"Master Gloves",
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_rear_good',
"Master Boxers",
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'slaving_head_good',
"Master Hat",
setup.equipmentslot.head,
['accessory', 'hat'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{slaving: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'slaving_good',
{
slaving_torso_good: 1,
slaving_legs_good: 1,
slaving_rear_good: 1,
slaving_arms_good: 1,
slaving_head_good: 1,
}
)>>
<<run new setup.Equipment(
'slaving_weapon_master',
"Dark Excalibur",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{ /* skills */
slaving: setup.EQUIPMENT_STAT_BOOST_MASTER,
combat: setup.EQUIPMENT_STAT_BOOST_NORMAL,
},
[ /* traits */
],
[ /* unit restriction */
setup.qs.job_slaver,
setup.qres.HasTitle('quest_corrupted_wielder_of_the_excalibur_0'),
],
{ /* image: 'TBD' */ },
)>><<run new setup.Equipment(
'social_neck',
'Socialite Necklace',
setup.equipmentslot.neck,
['necklace'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'neck_necklace' },
)>>
<<run new setup.Equipment(
'social_eyes',
'Socialite Ball Mask',
setup.equipmentslot.eyes,
['accessory', 'eyemask'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'eyes_masquerade' },
)>>
<<run new setup.Equipment(
'social_feet',
'Socialite Shoes',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'social_head',
'Socialite Circlet',
setup.equipmentslot.head,
['accessory', 'tiara'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'social_arms',
'Socialite Ring',
setup.equipmentslot.arms,
['ring'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'arms_ring_jeweled' },
)>>
<<run new setup.EquipmentPool(
'social',
{
social_neck: 1,
social_eyes: 1,
social_head: 1,
social_feet: 1,
social_arms: 1,
}
)>>
<<run new setup.Equipment(
'social_neck_good',
'Noble Necklace',
setup.equipmentslot.neck,
['necklace'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'neck_necklace' },
)>>
<<run new setup.Equipment(
'social_eyes_good',
'Noble Masquerade Mask',
setup.equipmentslot.eyes,
['accessory', 'eyemask'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'eyes_masquerade' },
)>>
<<run new setup.Equipment(
'social_feet_good',
'Noble Shoes',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'social_head_good',
'Noble Tiara',
setup.equipmentslot.head,
['accessory', 'tiara'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'social_arms_good',
'Noble Signet Ring',
setup.equipmentslot.arms,
['ring'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{social: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'arms_ring_jeweled' },
)>>
<<run new setup.EquipmentPool(
'social_good',
{
social_neck_good: 1,
social_eyes_good: 1,
social_head_good: 1,
social_feet_good: 1,
social_arms_good: 1,
}
)>><<run new setup.Equipment(
'survival_torso',
'Ranger Breastplate',
setup.equipmentslot.torso,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ image: 'torso_chestplate' },
)>>
<<run new setup.Equipment(
'survival_legs',
'Ranger Leggings',
setup.equipmentslot.legs,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_feet',
'Ranger Boots',
setup.equipmentslot.feet,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_neck',
'Ranger Cloak',
setup.equipmentslot.neck,
['armor', 'cape',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_head',
'Ranger Hood',
setup.equipmentslot.head,
['armor', 'hood',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_NORMAL},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'survival',
{
survival_torso: 1,
survival_legs: 1,
survival_neck: 1,
survival_feet: 1,
survival_head: 1,
}
)>>
<<run new setup.Equipment(
'survival_torso_good',
'Silk Ranger Shirt',
setup.equipmentslot.torso,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ image: 'torso_chestplate' },
)>>
<<run new setup.Equipment(
'survival_legs_good',
'Silk Ranger Leggings',
setup.equipmentslot.legs,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_feet_good',
'Silk Ranger Boots',
setup.equipmentslot.feet,
['armor', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_neck_good',
'Silk Ranger Cloak',
setup.equipmentslot.neck,
['armor', 'cape',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.Equipment(
'survival_head_good',
'Silk Ranger Hood',
setup.equipmentslot.head,
['armor', 'hood',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_GOOD},
[],
[],
{ /* image: 'TBD' */ },
)>>
<<run new setup.EquipmentPool(
'survival_good',
{
survival_torso_good: 1,
survival_legs_good: 1,
survival_neck_good: 1,
survival_feet_good: 1,
survival_head_good: 1,
}
)>>/* These are a set of default weapons */
<<run new setup.Equipment(
'weapon_sword',
"Sword",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_sword' },
)>>
<<run new setup.Equipment(
'weapon_spear',
"Spear",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_spear' },
)>>
<<run new setup.Equipment(
'weapon_axe',
"Axe",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_axe' },
)>>
<<run new setup.Equipment(
'weapon_dagger',
"Dagger",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_dagger' },
)>>
<<run new setup.Equipment(
'weapon_staff',
"Staff",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_staff' },
)>>
<<run new setup.Equipment(
'weapon_broadsword',
"Broadsword",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{
combat: setup.EQUIPMENT_STAT_BOOST_NORMAL,
brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL,
},
[], /* traits */
[
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.muscle_strong),
], /* unit restrictions */
{ image: 'weapon_broadsword' },
)>>
<<run new setup.Equipment(
'weapon_dualdagger',
"Dual Dagger",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{
combat: setup.EQUIPMENT_STAT_BOOST_NORMAL,
intrigue: setup.EQUIPMENT_STAT_BOOST_NORMAL,
},
[], /* traits */
[
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.skill_ambidextrous),
], /* unit restrictions */
{ image: 'weapon_dual' },
)>>
<<run new setup.Equipment(
'weapon_rapier',
"Rapier",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{
combat: setup.EQUIPMENT_STAT_BOOST_NORMAL,
social: setup.EQUIPMENT_STAT_BOOST_NORMAL,
},
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_rapier' },
)>>
<<run new setup.Equipment(
'weapon_log',
"Log",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{
combat: -setup.EQUIPMENT_STAT_BOOST_NORMAL,
sex: 0.01,
},
[], /* traits */
[
setup.qs.job_slaver,
], /* unit restrictions */
{ image: 'weapon_log' },
)>><<set setup.equipmentpool = {}>><<run new setup.EquipmentPoolGroup(
'all_sex',
{
dog: 1,
pony: 1,
sextoy: 1,
restraint: 1,
chastity: 0.2,
}
)>>
<<run new setup.EquipmentPoolGroup(
'all_combat',
{
aid: 1,
brawn: 1,
combat: 1,
survival: 1,
intrigue: 1,
slaving: 1,
knowledge: 1,
social: 1,
arcane: 1,
sex: 1,
}
)>>
<<run new setup.EquipmentPoolGroup(
'all_nonsex_good',
{
aid_good: 1,
brawn_good: 1,
combat_good: 1,
survival_good: 1,
intrigue_good: 1,
slaving_good: 1,
knowledge_good: 1,
social_good: 1,
arcane_good: 1,
sex_good: 1,
}
)>>
<<run new setup.EquipmentPoolGroup(
'blacksmith',
{
brawn: 1,
combat: 1,
slaving: 1,
}
)>>
<<run new setup.EquipmentPoolGroup(
'tailor',
{
survival: 1,
intrigue: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.EquipmentPoolGroup(
'weaver',
{
aid: 1,
knowledge: 1,
arcane: 1,
}
)>><<set setup.equipmentslot = {}>>
<<run new setup.EquipmentSlot('head', 'head')>>
<<run new setup.EquipmentSlot('neck', 'neck')>>
<<run new setup.EquipmentSlot('torso', 'torso')>>
<<run new setup.EquipmentSlot('arms', 'arms')>>
<<run new setup.EquipmentSlot('legs', 'legs')>>
<<run new setup.EquipmentSlot('feet', 'feet')>>
<<run new setup.EquipmentSlot('weapon', 'weapon')>>
<<run new setup.EquipmentSlot('eyes', 'eyes')>>
<<run new setup.EquipmentSlot('mouth', 'mouth')>>
<<run new setup.EquipmentSlot('nipple', 'nipple')>>
<<run new setup.EquipmentSlot('rear', 'rear')>>
<<run new setup.EquipmentSlot('genital', 'genital')>><<run new setup.Event(
'coming_of_age', /* key */
"Coming of Age", /* Title */
"Alberich", /* Author */
[ ], /* tags */
'Event_coming_of_age',
{ /* roles */
},
{ /* actors */
'child': null },
[ /* outcomes */
setup.qc.Opportunity('coming_of_age', {child: 'child',}), ],
[ /* restrictions to generate */
],
1, /* Cooldown */
100, /* Rarity */
)>><<set _mom = $family.getUnitRelation($g.child, setup.familyrelation.mother)>>
<<set _dad = $family.getUnitRelation($g.child, setup.familyrelation.father)>>
<<set _u = setup.getAnySlaver()>>
<p>
Today marks the 18-th birthday of <<rep $g.child>>, which if you recall correctly was the <<daughter $g.child>> of
<<if _mom && _mom.isSlaver()>>
your <<repfull _mom>>.
<<else>>
a former slaver in your employ.
<</if>>
Now comes the day where you need to decide what to do with the <<lass $g.child>>.
You could try asking <<repfull _u>> for advice, but on a second thought these personal matters are best resolved
with your own hands.
</p><<run new setup.Event(
'enlightenment_of_the_soul___interlude', /* key */
"Enlightenment of the Soul - Interlude", /* Title */
"Alberich", /* Author */
[ ], /* tags */
'Event_enlightenment_of_the_soul___interlude',
{ /* roles */
'pupil': [
setup.qres.HasTitle('quest_enlightenment_2_graduate_1'),
],
},
{ /* actors */
'child': null,
},
[ /* outcomes */
setup.qc.TraitRemove('pupil', setup.trait.per_chaste),
setup.qc.QuestDirect('enlightenment_of_the_soul', {child: 'child'}),
],
[ /* restrictions to generate */
],
1,
100,
)>><<set _p = $g.pupil>>
<<set _doctor = $dutylist.getUnit('DutyDoctor')>>
<p>
In obedience to your instructions, <<rep _p>> stops taking her contraceptive potions. <<if _doctor>> Your physician, <<rep _doctor>> <<else>> an alchemist <</if>> has concocted a fertility draught and calculated the best night to ensure your sowing will fall on fertile ground. That night has now come.
</p>
<p>
The evening hour strikes, and you swagger your way down to <<rep _p>>'s quarters, ready for an evening's delight. She knows to expect you and to make herself ready. Her door is ajar and soft lamplight is shining inside. You push it open.
</p>
<p>
The light mage's quarters are clean, freshly swept out, and simply appointed, with clean sheets and a well-turned-down blanket. Since her recent education, her furnishings include a few books and a pair of decorative prisms.
<<if _p.isHasTrait('per_lustful')>> Erotic paintings advertise <<rep _p>> 's lubricious longings to all who enter these quarters, and given her well known predilections, you suspect they have been many. But tonight, she is for you.
<<elseif _p.isHasTrait('per_submissive')>>Her paintings feature women in submissive postures and attitudes, bowing to the will of their masters, and ensuring that <<rep _p>>'s visitors understand that she wants them to take charge. <</if>>
<<if _p.isHasTrait('per_masochistic')>> One of the paintings features a woman spreadeagled and chained in midair, her face a mask of pleasure, and telling the visitor of <<rep _p>>'s fondness for receiving pleasure through pain.<</if>>
<<if _p.isHasTrait('per_dominant')>> Fur-lined handcuffs on the bed, blindfolds, and an arresting watercolor of helpless male figures on their knees before an imperious Mistress, reveal <<rep _p>>'s fondness for taking the dominant role. A small wooden table is covered with marks where previous visitors have been forced to scratch their names and protestations of devotion to their Mistress. If you ever get into this room alone, you might find it interesting to see how many members of your company have tasted the delights of <<rep _p>>'s bootheels.
<</if>>
<<if _p.isHasTrait('per_cruel')>> Several scourges and fetters adorn the walls, hinting at <<rep _p>>'s fondness for inflicting pain to bring pleasure to herself. <</if>>
What matters most now is that she is here and she is ready.
</p>
<<if _p.isHasTrait('per_submissive')>> <p>She sits on the edge of the bed, stripped to a filmy shift with a gold “slave” anklet above her left foot, her crossed arms barely covering her <<ubreasts _p>>. Her eyes are downcast, and her demeanor could not be plainer: she is awaiting your orders. With a wolfish grin, you kick the door closed and stride over her way. “On your feet!” you command. She springs up hastily, like a soldier caught by the sergeant-major or a slave fearing the whip. “Now off with that,” you say, gesturing up and down at her flimsy night-dress. She hastens to obey, casting it aside and leaving herself defenseless before you. </p>
<p> Smiling a contemptuous sort of approval, you walk around your shivering slaver, stroking her <<ubody _p>> and assets as you do so. She dares not utter a sound, but her body flushes and her breathing betrays her arousal. When you've brought her to a higher pitch of excitement, you command her to remove your own garments. She does so, standing to remove your upper clothes, and kneeling at your feet—where she belongs—to remove the lower ones. When she reveals your <<udick $unit.player>>, she treats it with deference, looking down as if too nervous to face this sacred idol. At a gesture from you, she folds your clothes carefully and sets them aside, as a good maid would do. </p>
<p> “My lord. . . “ she begins, but you cut her off with a gesture. You've got other uses for her tongue than talking. Hiking one foot up on the edge of her bed, you gesture her back to her knees. Taking hold of her hair, you guide her 'til she understands what she is to do, licking first between your toes, then up to the spots between your <<uballs $unit.player>> and legs. Only when she has performed these early devotions is she allowed to face your stiff cock in worship. </p>
<<elseif _p.isHasTrait('per_dominant') && $unit.player.isHasTrait('per_submissive')>>
<p> She stands there in black with a silver circlet on her head and a short black rod cradled in her arms, looking imperiously as you enter, and bringing out immediately all your own submissive tendencies—tendencies she must have noticed long ago, whether she said a thing about them or not. </p>
<p> “You're late,” she says. You look for a clock, but she cuts you off. “I <i>said</i>, you're <i>late!</i>. Now get that door closed and off with those clothes.” You hasten to obey. “On the <i>floor!</i>,” she adds before you can finish. “Your head doesn't come up to my level unless I say, got it?” </p>
<p>”Yes, mistress.</p>
<p>”Speak when you're spoken to! Now <i>get</i> those clothes <i>off!</i>.” You scramble to obey. Instinctively you look up to see her approval when you've done. With a gesture of her fingers, she half-blinds you with a flash of magic light. “<i>Don't</i> look me in the face, slaveboy, not unless I say!” </p>
<p>Under threat of her sharp tongue you're forced to fold the clothes neatly and put them away. Only then are you allowed to crawl to her feet, and lick her leather shoes while she taps your shoulders with her rod. Total silence and quick obedience are the ways to her favor, and you quickly fall into both habits. Mistress doesn't need a word except “yes, mistress,” and she doesn't need <i>that</i> very often. </p>
<p> Your good behavior is rewarded in time, as Mistress throws down her black gown and orders you to fold it up. “So,” she says, “you think you're fit to put your spawn in me, do you? Get over here.” You scramble to obey. She hikes a foot up onto her bed and makes it plain what you are to do—to give pleasure to her legs and lower regions with your tongue. The rod is in her hand. You had best not be idle. </p>
<<elseif _p.isHasTrait('bg_whore')>> <p> Before <<per _p>> was a slaver, she was an experienced whore, and she has not forgotten her tradecraft. She's seductively dressed and approaches with a welcoming smile and terms of endearment. You are her “love” and her “sweetheart,” at least for tonight, and her welcoming words and friendly smiles would put the shyest young novice at his ease. </p>
<p> Shyness about getting down to business was never part of her profession, and in moments you are sitting together on the bed, your arms twined around each other, and kissing lasciviously. She asks whether you like her, whether you fancy her, whether you want to put a baby in her, while her practiced fingers pluck the pair of you as naked as the day you were born. </p>
<<elseif _p.isHasTrait('bg_courtesan')>> <p> Before <<per _p>> was a slaver, she was an experienced courtesan, and she has not forgotten her tradecraft. She's seductively dressed and approaches with a welcoming smile and terms of endearment. You are her “love” and her “sweetheart,” at least for tonight, and her welcoming words and friendly smiles would put the shyest young novice at his ease. </p>
<p> Shyness about getting down to business was never part of her profession, and in moments you are sitting together on the bed, your arms twined around each other, and kissing lasciviously. She asks whether you like her, whether you fancy her, whether you want to put a baby in her, while her practiced fingers pluck the pair of you as naked as the day you were born. </p>
<<elseif _p.isHasTrait('per_lunatic')>> <p> <<per _p>>'s back is to you, as she kneels beside a small desk, naked as the day she was born, and eyeing a glass snow-globe. As you close the door and approach, she shakes the globe and stares at it intensely, seemingly oblivious to you, but grinding her hips erotically and stroking one of her own thighs. </p>
<p> When you've latched the door softly and crossed the room halfway, her head snaps around suddenly. There's a wild look in her eyes, as if she's being hunted. She sets the globe down carefully and rises into a crouch with a wild look in her eyes, as if preparing to spring or to flee. You come closer yet, a half-amused smile on your face. She backs towards the bed. When she feels it behind her she grips the mattress with both hands, holding on as if for dear life. Calmly and confidently, you undress.</p>
<p> And then you step forward and pounce, and she shifts immediately from wild fear to wild passion. Now she's clinging to <i>you</i> and covering your body with little kisses and bites. When you seize her head for a long kiss, her tongue invades yours like a hungry she-beast, and your touches can't come half as fast as hers. You're dealing with a Force of Nature here, and the best you can do is hang on. </p>
<p> In a little while she has you face-down on her bed, while she gives extra attention to your nether regions, gripping your hips and biting your buttocks. Soon after she's peeling your cheeks aside and giving your <<uanus $unit.player>> careful attention with her tongue, moaning her devotion and delight as she does so. </p>
<<elseif _p.isHasTrait('per_aggressive')>> <p> She's standing in a one-piece robe. Upon your entry, she looks you up and down once, nods, and marches straight up to you. With a single, decisive gesture, she pulls open the sash of her robe. With another, she shrugs it off, leaving her proudly naked and ready for action. “Let's,” she says, which is all the wooing you need. </p>
<p>Your own clothes take a little longer to get off, but she assists you eagerly, and soon you're kneeling face-to-face on the bed, kissing and touching each other eagerly. With simple gestures she guides you to the sweet spots on her body, and you are not slow to touch, kiss, and bite them, bringing forth her gasps and moans of pleasure. There's a great attraction in a woman who knows what she wants, and <i>this</i> woman knows what she wants. She wants you. And she wants your child. And she's going to get it. </p>
<<else>> <p> She sits on a small loveseat, near a table with wine and glasses, and invites you over in a friendly way. When you sit beside her, it's clear enough she'd had a glass or two already, and it's easy enough to break the ice. You talk a little about your day, about the business, about the times you've had together, and when the moment seems right the talk turns to kissing, and the kissing turns to passionate necking, and the passionate necking moves to the bed. You stroke and touch each other's bodies, first through the clothes, then, as you take them off, bare. As you get more naked, you get more excited. </p>
<</if>>
<<if _p.isHasTrait('per_playful')>> <p> With an impish grin, <<rep _p>> reaches to a side table, and presents you with a small silver salver. On top of which you see (of all things!) dice. You look a question and she explains the game. You each take a roll, and what the dice say, you do. One die for acts, one for parts.
<<elseif _p.isHasTrait('race_neko') || _p.isHasTrait('race_dragonkin') || _p.isHasTrait('race_werewolf') || _p.isHasTrait('race_demon')>> The dice are eight-sided instead of the usual six, so as to accommodate her nonhuman body parts. <</if>>. </p>
<p>You roll the reddish-pink “female” dice—they come up “massage” and “lower back.” So you give her a lower back massage, eliciting sighs of pleasure and satisfaction.</p>
<p>She rolls the blue “male” dice—one for “nibble,” one for “stomach.” She nibbles playfully at your stomach, flicking her tongue out occasionally and hitting a sweet spot that makes you spasm.</p>
<<if _p.isHasTrait('race_neko') || _p.isHasTrait('race_dragonkin') || _p.isHasTrait('race_werewolf') || _p.isHasTrait('race_demon')>> <p> The next roll comes up “stroke” and “tail,” and you do. </p>
<<else>>
<p>And so the fun and games go on. </p>
<</if>>
<p> On the bed, you and <<rep _p>> continue your lovemaking.
<<if _p.isHasTrait('per_lustful')>> As your love-play continues, <<rep _p>> abandons herself further and further to desire, losing all inhibitions if she ever had any. Truly she is in her element. <</if>>
<<if _p.isHasTrait('per_kind') || _p.isHasTrait('per_calm') || _p.isHasTrait('bg_whore') || _p.isHasTrait('bg_courtesan')>> To your delight, you find that <<rep _p>> has the trick of putting a man at his ease, so that you think only of pleasure and happiness, and are overwhelmed with a strong feeling for her.
<<elseif _p.isHasTrait('per_dominant') || _p.isHasTrait('per_cruel')>> She is a demanding sort of lover, quick to criticize any move she doesn't like, and if you were older or less full of lust tonight she might undermine your performance (and then laugh at you). As it is—not a chance! <</if>>
<<if _p.isHasTrait('per_playful')>> She is enjoying every moment and she lets you know it. <</if>>
<<if _p.isHasTrait('per_lunatic')>> Her wild face scrunches on one side, and she goes at your body with reckless abandon. <</if>>
<<if _p.isHasTrait('per_empath')>> She seems to know just what you're in the mood for, and anticipates your desires like a wife of ten years. <</if>>
<<if _p.isHasTrait('per_cruel') and $unit.player.isHasTrait('per_masochistic')>> You soon discover that she loves inflicting pain just as much as you love receiving it—and she slaps your face repeatedly while growling at you, as your erection swells to an almost painful maximum. <</if>>
<<if _p.isHasTrait('per_masochistic') and $unit.player.isHasTrait('per_cruel')>> You soon discover that she loves receiving pain as much as you love inflicting it—and you slap her face with a wolfish growl, twist her arms behind her, then seize up a rod and thrash her buttocks while she screams for more. <</if>>
<<if _p.isHasTrait('per_submissive')>> Above all things, <<rep _p>> lives to serve your desires, and whatever you wish, she does at once without question. <</if>>
</p>
<p>
<<if _p.isHasTrait('per_dominant')>> When she feels the moment has come, <<rep _p>> takes hold of you, rolls you onto your back, and slides her hands over your chest. With a lascivious leer, she guides your hands to her <<ubreasts _p>>, and while you fondle them, she guides your <<udick $unit.player>> into her well-lubricated <<uvagina _p>>. She begins to ride.
<<elseif _p.isHasTrait('per_dominant') && $unit.player.isHasTrait('per_submissive') && _p.isHasTrait('race_draconic')>> To your surprise, your Mistress lowers her breast to yours, seizes your arms, and rolls over to put <i>you</i> on top. Her eager face tells you what you want and you plow away at her without holding back. Then you feel a sudden pressure on your buttocks and begin to realize why she changed positions as her leer grows fierce and you feel the tip of her <<utail _p>> penetrate your <<uanus $unit.player>>. Judging by her laugh, the look on your <i>own</i> face must be priceless. “That's right,” she says. “You get it while you give it. Now <i>knock me up, you bitch!</i> You slam away obediently.
<<elseif _p.isHasTrait('per_dominant') && $unit.player.isHasTrait('per_submissive') &&
_p.isHasTrait('race_demon')>>
To your surprise, your Mistress lowers her breast to yours, seizes your arms, and rolls over to put <i>you</i> on top. Her eager face tells you what you want and you plow away at her without holding back. Then you feel a sudden pressure on your buttocks and begin to realize why she changed positions as her leer grows fierce and you feel the tip of her <<utail _p>> penetrate your <<uanus $unit.player>>. Judging by her laugh, the look on your <i>own</i> face must be priceless. “That's right,” she says. “You get it while you give it. Now <i>knock me up, you bitch!</i> You slam away obediently.
<<elseif _p.isHasTrait('race_neko') || _p.isHasTrait('race_dragonkin') || _p.isHasTrait('race_werewolf') || _p.isHasTrait('race_demon')>>
At a silent assent between you, <<rep _p>> kneels on the bed, with her legs apart, her head far down, and her <<utail _p>> curled up to present her <<uvagina _p>>. She puts back a hand to guide you as you slide your full length in and begin to couple.
<<elseif _p.isHasTrait('per_lustful')>> And now she is on her back, eagerly encouraging you, as you slide your full length into her <<uvagina _p>>. A slaver she may be by day, but by <i>this</i> night she is a slave of lust, and she whispers her encouragements as you grind into her and give her what she wants. Her cries of pleasure are heard by all.
<<else>> And in time, <<rep _p>> finds herself beneath you, and you atop her. There is a pause filled with breathing as you look into each others' eyes, and the looks say <i>yes</i> and <i>now</i>. With a gentle hand she guides your <<udick $unit.player>> into herself and you begin to couple.
<</if>>
</p>
<p>
Your coupling grows more intense as you near your climax.
<<if _p.isHasTrait('per_active')>> <<rep _p>>'s energy is boundless, and she keeps up with you like a gold-medal sexual athlete. <</if>>
<<if _p.isHasTrait('per_deceitful')>> By the sound of her, <<rep _p>> has three screaming orgasms while you're on the way. If that accomplished liar is deceiving you about that, who is harmed, really? <</if>>
<<if _p.isHasTrait('per_lunatic')>> <<rep _p>>'s orgasmic cries rise to a passionate scream they can hear down in the slave dungeons, and with her wriggling body beneath you, you burst inside in ecstasy. As you lie together panting in the afterglow, she clutches your body and begins a little sing-song, “I'm gonnnna haaave a baaaaay-beee….”
<<elseif _p.isHasTrait('bg_whore') || _p.isHasTrait('bg_courtesan')>> Soon you are overcome with ecstasy and your semen streams inside <<rep _p>>, putting her in the happy state she most desires to be in. And if she never truly climaxed from your now-softening member, there are (as it were) no hard feelings. It was a motto of her old profession: “The customer always comes first.”
<<elseif _p.isHasTrait('per_dominant')>> <<rep _p>> 's body arches in climax, but she won't let you stop. “Do it!” she cries out. “Knock me up! <i>Knock</i> me <i>up</i>, I said!!!” Your <<udick $unit.player>> happily obliges, exploding in a burst of delight, leaving you both sated and panting.
<<elseif _p.isHasTrait('race_werewolf')>> <<rep _p>> pants doglike as you copulate, and at the moment of climax lets out an ear-splitting wolf howl. (You vaguely remember reading that wolf howls are for communication, not anything sexual. You resolve not to tell <i>her</i> that.) Your own climax is not far behind, and the animal before you is well and truly bred.
<<else>> In a fit of generosity, you try to keep your mind on other things, hoping to draw out <<rep _p>> 's pleasure before you reach your own climax. You think of the account books, but those are full of sex slaves, and that turns you on. You think of your latest staff memo, but it was about an order from a specialty brothel, and <i>that</i> turns you on. In the end, you come in less than a minute after <<rep _p>>, and as your juices flow, you know you have done a good night's work. <</if>>
</p>
<p>
Afterwards, you lie together.
<<if _p.isHasTrait('per_dominant') && $unit.player.isHasTrait('per_submissive')>> But not for long. While you are in this room, <<rep _p>> is the Mistress and she doesn't let you forget it. Before you can leave, you have one last task to perform. She hands you a folding knife and gestures you to her marked-up wooden table, where you must carefully scratch your name amongst those of the others who have served beneath her. The humiliation makes you blush and rouses your <<udick $unit.player>>. You may be rubbing one out later at the thought. When you're done she takes the knife back, cuts a small lock of your hair for a trophy, and tells you to get the fuck out. But you can see her satisfied smile as you go, and know that beneath the games you have played, both of you are well satisfied.
<<elseif _p.isHasTrait('per_dominant')>> But not for long. <<rep _p>>, that natural dominatrix, doesn't like you seeing her vulnerable side. She curtly dismisses you and you leave without lingering, but you can see her satisfied smile as you go.
<<elseif _p.isHasTrait('per_sexaddict')>> You fall asleep beside <<rep _p>>, her arm across your chest and a satisfied smile on her face. An hour or two later, she prods you awake, wanting more . . . .
<<elseif _p.isHasTrait('per_calm')>> Soon after <<rep _p>> falls asleep, her face a mask of inner calm and pure tranquility, such as you rarely see on a slaver. You think this must be a reflection of her inner being, something the perverse ways of <<rep $company.player>> have never been able to touch. You slip away quietly back to your own room.
<<elseif _p.isHasTrait('per_submissive')>> <<rep _p>> demurely avoids eye contact and doesn't speak too much, but you can tell she is happy to have been fully in your power, and to have come out as she wished to be. In time, you give your “slave” a pinch on the buttocks, and leave her to her happy dreams.
<<elseif _p.isHasTrait('per_playful')>> In time <<rep _p>> pulls out a boardgame from her native country, and the two of you enjoy some play and a little good wine before you take your leave. It's all so friendly and casual. You return to your own room, happy.
<<else>> Contentedly, <<rep _p>> falls asleep, secure in her knowledge that she is the future mother of your child, and now able to advance to the final level in the Academy.
<</if>>
</p>
<p>
Some days later,
<<if _doctor>>
Your physician, <<rep _doctor>>, confirms
<<else>>
<<rep _p>> confirms
<</if>>
that you have done your duty, and the pupil is now ready to return to the academy. </p><<run new setup.Event(
'enlightenment_of_the_soul___interlude2', /* key */
"Enlightenment of the Soul - Interlude", /* Title */
"Alberich", /* Author */
[ ], /* tags */
'Event_enlightenment_of_the_soul___interlude2',
{ /* roles */
'pupil': [
setup.qres.HasTitle('quest_enlightenment_2_graduate_1'),
],
},
{ /* actors */
'child': null,
},
[ /* outcomes */
setup.qc.TraitRemove('pupil', setup.trait.per_chaste),
setup.qc.QuestDirect('enlightenment_of_the_soul', {child: 'child'}),
],
[ /* restrictions to generate */
],
1,
100,
)>><<set _p = $g.pupil>>
<<set _father = $family.getUnitRelation($g.child, 'father')>>
<<set _doctor = $dutylist.getUnit('DutyDoctor')>>
<<if !_father>>
/* player dismissed the father */
<p>
Later that week, your <<repfull _p>>
was often found missing from the fort. You can only hope they are doing
their work in the earnest.
</p>
<<else>>
<p>
Later that week, your <<repfull _p>> and <<rep _father>>
were often found missing from the fort. You can only hope they are doing
their work in the earnest.
</p>
<</if>>
<p>
Some days later,
<<if _doctor>>
Your physician, <<rep _doctor>>, confirms
<<else>>
<<rep _p>> confirms
<</if>>
that
<<if _father>>
<<rep _father>>
<<else>>
your former slaver
<</if>>
has done the duty, and the pupil is now ready to return to the academy. </p><<run new setup.Event(
'rival_interaction', /* key */
"Rival Interaction", /* Title */
"Kyiper", /* Author */
[ ], /* tags */
'Event_rival_interaction',
{ /* roles */
'you': [
setup.qres.You(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.per_dominant], true),
],
'rival': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.FriendshipWithYouAtMost(-500),
setup.qres.NoTraits([setup.trait.per_submissive], true),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Opportunity('rival_interaction', {'rival': 'rival',}),
],
[ /* restrictions to generate */
],
300,
1,
)>><<include 'Opportunity_rival_interaction'>><<run new setup.Event(
'assault_on_your_lover', /* key */
"Assault on Your Lover", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_assault_on_your_lover',
{ /* roles */
},
{ /* actors */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTag('future_assassin_parent'),
setup.qres.YourLover(),
],
},
[ /* outcomes */
setup.qc.VarSet('future_assassin_progress', '1', -1),
setup.qc.VarSet('future_assassin_cooldown', '1', 4),
],
[ /* restrictions */
setup.qres.VarNull('future_assassin_progress'),
setup.qres.VarNull('future_assassin_cooldown'),
setup.qres.HasUnitWithTagAndJob('future_assassin_parent', setup.job.slaver),
],
0, /* Cooldown */
1, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Today, you receive a most dreaded news.
Your lover <<repfull $g.victim>> was apparently assaulted in <<their $g.victim>> room last night by a mysterious assailant. Luckily, your <<repfull _u>> happened to be nearby, and together they managed to repel the assailant. But damn, it did make your heart skipped a beat at the thought of losing your <<uadjgood $g.victim>> <<urace $g.victim>> lover. You make notes to yourself to force <<them $g.victim>> to sleep in your room tonight.
</p>
<p>
Maybe you'll hear more about this assailant, and you have plans on what to do with them once you get your hands on them. But in the mean time, maybe you should reward <<rep _u>> for <<their _u>> great service.
</p><<run new setup.Event(
'at_what_cost2', /* key */
"At What Cost", /* Title */
"darko", /* Author */
[ /* tags */
'playercapture',
],
'Event_at_what_cost2',
{ /* roles */
},
{ /* actors */
'you': null,
},
[ /* outcomes */
setup.qc.Opportunity('at_what_cost', {
you: "you",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
100, /* Rarity */
)>><<include "Opportunity_at_what_cost">><<run new setup.Event(
'bodyswap_epilogue', /* key */
"Serial Bodyswapper Epilogue", /* Title */
"darko", /* Author */
[ 'desert',
], /* tags */
'Event_bodyswap_epilogue',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.EmptyUnitGroup('quest_the_serial_bodyswapper1'),
setup.qc.EmptyUnitGroup('quest_night_shift231'),
setup.qc.EmptyUnitGroup('quest_the_serial_bodyswapper2'),
setup.qc.Favor('humandesert', 250),
setup.qc.MoneyCustom(3000), ],
[ /* restrictions to generate */
],
50,
100,
)>><p>
It seems your actions have somehow stopped the bodyswapper activities in the eastern desert.
The grateful citizens pool up some money for your company, which you <<uadv $unit.player>> accept.
</p><<run new setup.Event(
'equivalent_exchange', /* key */
"Equivalent Exchange", /* Title */
"darko", /* Author */
[ /* tags */
'playercapture',
],
'Event_equivalent_exchange',
{ /* roles */
},
{ /* actors */
'you': null,
},
[ /* outcomes */
setup.qc.Opportunity('equivalent_exchange', {
you: "you",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
100, /* Rarity */
)>><<include "Opportunity_equivalent_exchange">><<run new setup.Event(
'excalibur_missing_sword', /* key */
"Missing Sword", /* Title */
"darko", /* Author */
[ 'veteran',
], /* tags */
'Event_missing_sword',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarSet('quest_excalibur', '2', -1),
],
[ /* restrictions to generate */
setup.qres.VarEqual('quest_excalibur', '1'),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
1, /* cooldown */
100, /* rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
"Hear ye, hear ye. Brave adventurers are wanted, for the legendary sword Excalibur has been stolen from Lucgate."
</p>
<<if $varstore.get('quest_excalibur_done')>>
<p>
Oh no, not again.
It seems that a legendary sword has once again been lost soon after your company's heist into the city treasury.
Obviously given your company's history with the sword, none of your slavers would have dared to
bring or touch the sword. Still, you asked
your <<repfull _u>> whether <<they _u>> stole the sword, which the
<<urace _u>> answers negatively.
</p>
<p>
Rumors said that each Excalibur sword is different. Perhaps this Excalibur sword is not as feisty
as the previous one?
Probably not, but perhaps you are foolish enough to reattempt acquiring the sword...
If you really want to go through with such a terrible idea, you no doubt will need a
chivalrious, experienced, and wise slaver yet again.
</p>
<<else>>
<p>
Finishing the news, it seems that a legendary sword has been lost soon after your company's heist into the city treasury. You asked your <<repfull _u>> whether the sword was one of the items stolen during the heist. <<They _u>> shakes their head, "Sorry boss, but no". You had a thoughts or two about giving your slavers a hard lecture about "how-to-choose-object-to-steal", but on a second thought perhaps they made the right decision not to make the entire Kingdom of Tor your company's mortal enemy.
</p>
<p>
You wondered what could have possibly happened to the sword. Rumors said that the sword tend to show itself to a worthy swordsman who has proven their chivalry, experience, and wisdom, but it has never happened for centuries as no single <<man $unit.player>> is capable of having all three. You dismissed the tale as dumb before, but maybe it's the only hope for recovering the sword.
</p>
<p>
Then again recovering the sword is not really your business. What use does a band of slaver possibly have over some petty sword, after all? You should really get going with your day.
Still, the maybe you should keep the three aspects in mind.
Chivalry, experience, and wisdom, huh?
</p>
<</if>><<run new setup.Event(
'flickering_flame', /* key */
"Flickering Flame", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_flickering_flame',
{ /* roles */
},
{ /* actors */
'you': [
setup.qres.You(),
],
'lover': [
setup.qres.NotYou(),
setup.qres.CanBeLoverWithYou(),
],
},
[ /* outcomes */
setup.qc.Opportunity('flickering_flame', {
you: "you",
lover: "lover",
}),
],
[ /* restrictions */
],
100, /* Cooldown */
1, /* Rarity */
)>><<include "Opportunity_flickering_flame">><<run new setup.Event(
'corruption_rain', /* key */
"Corruption Rain", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_corruption_rain',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('demon', -20),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('demon', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
As you were going by your usual business, the sky above your fort (and only above your fort) suddenly turned pitch black. A black magical circle appears on the sky, raining dark spells down your fort.
Your slavers and slaves frantically try to dodge as many of the dark bullets as possible, which seemingly deal no damage to the structure but rapidly alter the flesh of whatever it touches.
</p>
<p>
Eventually, the spell fizzles leaving the sky bright once again. But the damage has been done, as several of your slavers and slaves who were at home at the time were noticably corrupted by the event.
</p>
<p>
Only powerful beings can possibly cast such a dangerous spell. Given the amount of dark energy though, this must be the work of the <<rep $company.demon>>, who you have angered recently.
</p><<run new setup.Event(
'ire_of_the_dark_dragon_lord', /* key */
"Ire of the Dark Dragon Lord", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_ire_of_the_dark_dragon_lord',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, you have somehow made a very dangerous enemy: a dark dragon
lord of the southern seas.
With your relationship finally reaching breaking point, however, the great dark dragon
has personally come to visit your fort and unleash woes upon it.
Before you could even react, the walls of your fort has melted into a slimy substance,
where tentacled abominations hurled free away from it, touching and corrupting the many flesh
it touches.
Eventually, the dragon lord felt that punishment was delivered and left your fort.
The fort itself remain intact, but many of its residents have been corrupted by the experience.
Perhaps it would be wiser not to make such a dangerous enemy...
</p><<run new setup.Event(
'revenge_of_the_elves', /* key */
"Revenge of the Elves", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_revenge_of_the_elves',
{ /* roles */
'elf': setup.unitgroup.elf,
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('elf', -20),
/* elven corruption is slightly weaker, only 5 corruption vs 6 */
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
setup.qc.CorruptRandomUnitHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('elf', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
A strange visitor has come to your fort, a <<male $g.elf>> of unknown origin.
<<They $g.elf>> comes seeking shelter for the harsh night, which you grant while
eyeing specifically whether the elf would make a great slave.
</p>
<p>
Later that night, your generosity was punished as the elf revealed <<themself $g.elf>>
as an emissary of a certain wizarding circle in <<rep $company.elf>>, whom you have angered recently.
As the elf chants an unknown language, the sky turned dark and soon enough,
you can hear writhing sounds coming from all over your fort.
You too get affected soonafter, and the moments passed in a blur of pain and ecstacy for you
and your slavers.
</p>
<p>
When you awake next month, the elf was nowhere to be seen. Fortunately it seems that no
damage was done to your fort, but its residents have noticably been corrupted by the turn of events.
</p><<run new setup.Event(
'disappearing_act', /* key */
"Disappearing Act", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_disappearing_act',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('elf', -20),
setup.qc.MissingUnitRecapture('victim', 'escapehard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('elf', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Today has been a stressful day, with many new assignments and many antics from your slavers occupying your mind. As you contemplated using your <<repfull $g.victim>> to ease the stress, a sudden out-of-nowhere brown magical circle formed under <<rep $g.victim>>. Before your eyes, <<their $g.victim>> body disintegrates, no doubt being transported to another plane via portal magic. As the magic finished, there was no trace left of <<rep $g.victim>>, outside of their equipment which fell to the floor.
</p>
<p>
The elves are said to be master of such portal magic, and you suspect this is one of their doings. After all you have done to <<rep $company.elf>>, it should be no surprise that they retaliate. Still, somehow you were able to track down <<rep $g.victim>>'s location. <<uneedrescue $g.victim>>, but it will sure as hell be difficult to do.
</p><<run new setup.Event(
'the_dragonkin_beckons2', /* key */
"The Dragonkin Beckons", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_dragonkin_beckons2',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
],
},
{ /* actors */
'dragon': setup.unitgroup.dragonkin, },
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.MissingUnitRecapture('victim', 'escapehard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
The sun shone brightly today, and just as you thought the day is perfect a sudden chill froze the entire compound. Paralyzed from an unknown force, you can't do anything but watched as a majestic blue-colored dragonkin descend from the sky into your compound. <<They $g.dragon>> calmly walked around your compound as if nothing happen, inspecting some of your slaves until settling at your <<repfullgood $g.victim>>. "You will do," said the dragonkin calmly as they took <<rep $g.victim>> and carried <<them $g.victim>> effortlessly back to the sky.
</p>
<p>
Whatever paralyzes you and your slavers dissipate soon after. After catching your breath, you look to the sky wondering if this was a retribution for your actions against the <<rep $company.dragonkin>>. You shrug it all off, and start planning your next move. <<urescuenow $g.victim>>, although it sure as hell won't be easy.
</p><<run new setup.Event(
'with_interest', /* key */
"With Interest", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_with_interest',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
],
},
{ /* actors */
'dragon': setup.unitgroup.dragonkin, },
[ /* outcomes */
setup.qc.Ire('bank', -20),
setup.qc.MissingUnitRecapture('victim', 'escapehard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('bank', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Through your recent actions, your reputation with the powerful <<rep $company.bank>> has suffered greatly. And now, this has come to bite you in the ass as a representative of the bank came to your fort demanding the <<repfull $g.victim>> as payment for your grievances.
</p>
<p>
You are not planning to back down without a fight however, and as the slave is brought to <<their $g.victim>> new home, you use your connections to track down the slave. <<urescuenow $g.victim>>, but it won't be easy given the reputation of the <<rep $company.bank>>.
</p><<run new setup.Event(
'faraway_disapproval', /* key */
"Faraway Disapproval", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_faraway_disapproval',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humansea', -20),
setup.qc.Favor('humansea', -500),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humansea', 20),
setup.qres.FavorAtLeast('humansea', 500), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Despite the long distance, your company has somehow managed a positive relationship with the <<rep $company.humansea>>. But recent quests have painted your company in a much worse light for them, and apparently they had enough of it. In the coming days, you receive much less communication from these elusive people. It seems they have decided to sever connections with your company as the result of your recent actions.
</p><<run new setup.Event(
'the_nekos_disapprove', /* key */
"The Nekos Disapprove", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_nekos_disapprove',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('neko', -20),
setup.qc.Favor('neko', -500),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('neko', 20),
setup.qres.FavorAtLeast('neko', 500), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Your company has been a good friend to the <<rep $company.neko>>, the sexually driven cats. But you have angered some high-class citizens of the <<lore location_npc>> recently, and using their power, they boycotted your company from the city. As a result, your relationship with the nekos suffer greatly. Perhaps you should not have irked the cats too much.
</p><<run new setup.Event(
'the_werewolves_disapprove', /* key */
"The Werewolves Disapprove", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_werewolves_disapprove',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('werewolf', -20),
setup.qc.Favor('werewolf', -500), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('werewolf', 20),
setup.qres.FavorAtLeast('werewolf', 500), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Your company has been a good friend to the <<rep $company.werewolf>>. But recently, you have irked them quite a bit, and a result their confidence is your company is shaken to the core. Today, you receive a messenger from them, indicating their wishes to get more distant with your company. Ah well, perhaps they make better pets than allies.
</p><<run new setup.Event(
'bandit_ambush_ambush', /* key */
"Bandit Ambush Ambush", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_bandit_ambush_ambush',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('outlaws', -20),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('outlaws', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Several of your slavers reported with heavy injuries today. Apparently, when they were ambushing
a trading caravan, they were ambushed by a group of bandits who seemingly have been waiting for them.
Having carried no valuables with them, the slavers were beaten badly by this particular group of bandits
who seemed to carry some kind of grudge against your company.
</p>
<p>
There is nothing else you could do for now other than try to nurse their injuries as best as you could.
Perhaps you could get your revenge one day. A former-bandit slave is always useful to have.
</p><<run new setup.Event(
'hunting_party', /* key */
"Hunting Party", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_hunting_party',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('werewolf', -20),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('werewolf', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
During a tavern break, a group of your slavers were ambushed by a werewolf hunting party.
They appear to carry some kind of grudge against your company, perhaps due to your recent
actions against the <<rep $company.werewolf>>. Your slavers managed to barely escape,
sustaining heavy injuries in the process.
</p>
<p>
There is nothing else you could do for now other than try to nurse their injuries as best as you could.
You make a mental note to teach these pups a lesson one day -- your kennel could always use
more pets.
</p><<run new setup.Event(
'orc_hospitality', /* key */
"Orc Hospitality", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_orc_hospitality',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('orc', -20),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('orc', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
During late night, you are woken up by the sounds of moaning and groaning coming from the fort gates. Several of your slavers came home badly injured from their short misadventure in a nearby tavern. Apparently, a group of orc brigands decided to rough them up for associating with your company, who has earned bad reputation among some circle of orcs.
</p>
<p>
There is nothing else you could do for now other than try to nurse their injuries as best as you could. Perhaps making enemies of the orcs were not such a bright idea after all...
</p><<run new setup.Event(
'bank_marketing_strategy', /* key */
"Bank Marketing Strategy", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_bank_marketing_strategy',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('bank', -20),
setup.qc.IreSpread('bank'),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('bank', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
You have made dangerous friends with some executives of the <<rep $company.bank>>.
And recently, they have begin to retaliate. Suddenly several other companies
view your company with much more disdain than usual, no doubt thanks to the bank
unleashing their marketers to spread bad words around.
The <<uadjgood $g.slaver>> <<urace $g.slaver>> slaver could offer you no advice
on this situation, other than perhaps not to anger the bank too much.
You considered for a little while to deduct the slaver's pay for such a dumb comment,
but ultimately decide to carry on with your day.
</p><<run new setup.Event(
'lies_and_slander', /* key */
"Lies and Slander", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_lies_and_slander',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humankingdom', -20),
setup.qc.IreSpread('humankingdom'),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humankingdom', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, your company activities have irked certain powerful people in the undercity of Lucgate. And they have decided to retaliate against your company in the way they know best: by spreading lies and slander: "Let it be known that <<rep $company.player>> often raided villages in order to rape and enslave their women!", they say. Surely a total lie and slander! You make a mental note to ask your <<uadjgood $g.slaver>> <<ufriend $unit.player $g.slaver>> <<rep $g.slaver>> about this later.
</p>
<p>
Either way, many other companies now view your company with a level of disdain...
</p><<run new setup.Event(
'vale_gossip', /* key */
"Gossipers of the Vale", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_vale_gossip',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humanvale', -20),
setup.qc.IreSpread('humanvale'),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humanvale', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, your company's evil deeds is at the tip of the tongue of many womens
of the <<lore region_vale>>. They spread the words quickly, and soon enough many are made aware
of the atrocious ventures your companies may or may not have done.
There is nothing you could do right now, but perhaps it would be wiser not to
anger these gossip-frenzied women of the <<lore region_vale>> next time...
</p><<run new setup.Event(
'eastern_swindlers', /* key */
"Eastern Swindlers", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_eastern_swindlers',
{ /* roles */
'slaver': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
'slaver2': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-10000),
setup.qc.Ire('humandesert', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humandesert', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
As you are doing the daily accounting for your money, you noticed a large sum has recently went missing. Upon further scrutiny, it seems that your company made a bad purchase some time in the eastern city. Apparently <<rep $g.slaver>> was swindled by an unscrupulous merchant from the east, losing much of your money. The <<uadjbad $g.slaver2>> slaver <<rep $g.slaver2>> were also swindled, and probably many more.
</p>
<p>
In fact, talking to the rest of the fort revealed that almost everyone seemingly have been swindled by a merchant or two in the recent days. Perhaps this is their way of showing their displeasure at your company from your deeds in the past. Perhaps you should be more careful in the future not to make these people your enemy, but in the meantime you can always channel your frustration into one of your slaves.
</p><<run new setup.Event(
'heisted_by_ninjas', /* key */
"Heisted by Ninjas", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_heisted_by_ninjas',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-10000),
setup.qc.Ire('humansea', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humansea', 20), ],
0,
0,
)>><p>
You were woken up by one of your slavers <<rep $g.slaver>> in the middle of the night. Normally you would give the <<uadjgood $g.slaver>> a good stern talking-to after such a rude awakening, but apparently <<they $g.slaver>> has a good reason for the urgency this time. Apparently according to the slaver your coffers have been robbed a group of ninjas, who came in the dead of the night, infiltrate the compound, and left with much of your money without nobody noticing anything.
</p>
<p>
As much as you wanted to blame luck for such a misfortune, this is most certainly the work of the residents of the southern seas, who your company have irked in the past.
</p><<run new setup.Event(
'robbery_bank', /* key */
"Robbery Bank", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_robbery_bank',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-10000),
setup.qc.Ire('bank', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('bank', 20), ],
0,
0,
)>><p>
Your slavers woke up today with a light feeling in their pockets. Literally this time, as somehow a huge sum of money went missing from your coffers. While you would normally suspect one of your slavers to spend too much on a drunken night (especially that <<uadjbad $g.slaver>> <<urace $g.slaver>> slaver of yours <<rep $g.slaver>>), the sum is simply too much to be spent by one <<man $g.slaver>>.
</p>
<p>
A few days later, you receive a thank you letter coming from the <<rep $company.bank>> for your investment in the bank. If you had doubts before, it is gone now — the bank has stole from you as recompense for the troubles you may have caused them in the past. As much as you wanted revenge, it is better to give up the plan especially against an entity as rich as the <<rep $company.bank>>. At least this should even out the goodwill, eh?
</p><<run new setup.Event(
'tax_collector', /* key */
"Tax Collector", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_tax_collector',
{ /* roles */
'tax': setup.unitgroup.humankingdom,
'slaver': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-10000),
setup.qc.Ire('humankingdom', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humankingdom', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
A most unusual visitor has arrived at your fort today: A well-dressed
<<man $g.tax>>, probably in <<their $g.tax>> 40s, who came to your office
to collect some... tax?
It turned out to be a thinly-veiled threat, as your actions against the
<<rep $company.humankingdom>> has apparently raised the ire of some
powerful members of its undercity.
</p>
<p>
Consulting your <<uadjper $g.slaver>> <<urace $g.slaver>> slaver <<rep $g.slaver>>,
seems like the best approach here is to simply pay the tax.
These undercity mafias are business people after all, and a good chunk of money
will surely smooth out the relationship between the two companies.
</p>
<p>
As the tax collector departs you wonder what would have happened to your company
were you to refuse to pay... Best not to dwell on such questions and get back to work.
</p><<run new setup.Event(
'angry_peasants', /* key */
"Angry Peasants", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_angry_peasants',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humanvale', -20),
setup.qc.QuestDirect('angry_peasants'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humanvale', 20),
setup.qres.Building('veteranhall'),
],
0, /* Cooldown */
0, /* Rarity */
)>><<include 'Quest_angry_peasants'>><<run new setup.Event(
'desert_raiders', /* key */
"Desert Raiders", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_desert_raiders',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humandesert', -20),
setup.qc.QuestDirect('desert_raider'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humandesert', 20),
setup.qres.Building('veteranhall'),
],
0, /* Cooldown */
0, /* Rarity */
)>><<include 'Quest_desert_raider'>><<run new setup.Event(
'dragons_at_your_doorstep', /* key */
"Dragons at Your Doorstep", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_dragons_at_your_doorstep',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.QuestDirect('dragons_at_your_doorstep'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20),
setup.qres.Building('veteranhall'),
],
0, /* Cooldown */
0, /* Rarity */
)>><<include 'Quest_dragons_at_your_doorstep'>><<run new setup.Event(
'orc_invasion', /* key */
"Orc Invasion", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_orc_invasion',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('orc', -20),
setup.qc.QuestDirect('orc_invasion'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('orc', 20),
setup.qres.Building('veteranhall'),
],
0, /* Cooldown */
0, /* Rarity */
)>><<include 'Quest_orc_invasion'>><<run new setup.Event(
'brothel_pickup', /* key */
"Brothel Pickup", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_brothel_pickup',
{ /* roles */
'victim': [
setup.qres.Available(),
setup.qres.Job(setup.job.slave),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humandesert', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humandesert', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Today, you have half a mind to tie up your <<repfull $g.slaver>> in your office as decoration. The slaver had fell victim to a pick-up scam:<<they $g.slaver>> is being promised great rewards and price in exchange for lending the slave <<rep $g.victim>> for a single week. And of course, the slave never came back, and the supposed business disappear into the vast deserts of the east...
</p>
<p>
As much as you'd like to castrate <<rep $g.victim>> for the stupidity, you also took a little part of the blame: this is probably done in part in retaliation for your recent aggressive actions against the <<rep $company.humandesert>>. Either way, the task now falls to your hand. <<uneedrescue $g.victim>>.
</p><<run new setup.Event(
'fort_rescue', /* key */
"Fort Rescue", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_fort_rescue',
{ /* roles */
'victim': [
setup.qres.Available(),
setup.qres.Job(setup.job.slave),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humankingdom', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humankingdom', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Ever since slavery is banned ten years ago, the <<rep $company.humankingdom>> abhors slavery. This, compounded with your recent acts against them has made them painfully aware of your existence, and you have been wary of some sort of retaliation in the past few weeks.
</p>
<p>
Today, a small band of adventurers, no doubt sent over by <<rep $company.humankingdom>>, came over and launched a surprise attack on your fort. While you and your slavers managed to fend off their attacks from damaging the compound, there were nobody to guard the dungeons. When the assault ended, your slave <<rep $g.victim>> were nowhere to be seen, quite possibly being rescued by the adventurers on order from <<rep $company.humankingdom>>.
</p>
<p>
<<if $g.victim.isHasTrait('training_obedience_advanced')>>
Given the slave's trainings, it will be quite difficult for them to undo the slave into a normal <<urace $g.victim>> being again.
<<elseif $g.victim.isMindbroken()>>
It's unclear however, if the mindbroken slave can ever be reintegrated into the society.
<<else>>
The disobedient slave surely rejoices at <<their $g.victim>> daring rescue.
<</if>>
<<uneedrescue $g.victim>>, before <<they $g.victim>> disappear forever into the<<lore location_lucgate>>...
</p><<run new setup.Event(
'slaves_war', /* key */
"Slaves War", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_slaves_war',
{ /* roles */
'victim': [
setup.qres.Available(),
setup.qres.Job(setup.job.slave),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('outlaws', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('outlaws', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, your company's actions have undermined the general <<rep $company.outlaws>> society —
In particular, you have made enemies with one particular outlawed slaving company in the past few weeks. In a brazen retaliation, they have somehow kidnapped one of your slavers, the <<repfull $g.victim>>, straight from your fort. You have a mind to scold your <<repfull $g.slaver>> for allowing such a brazen kidnapping to happen, but on the other hand you should probably spend time thinking how to get the slave back, if you wish. <<uneedrescue $g.victim>>.
</p><<run new setup.Event(
'ex_slaver_for_sale', /* key */
"Ex-Slaver for Sale", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_ex_slaver_for_sale',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('outlaws', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('outlaws', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
In the recent months, you have somehow made enemies with the local brigand gang. And today, you reap the consequences as your <<repfull $g.slaver>> reported that <<rep $g.victim>> is nowhere to be seen. Searching through the entire fort, from their room to the empty dungeon cells yielded nothing, as if <<rep $g.victim>> had just vanished into thin air. That is, until you saw the news that <<rep $g.victim>> is going to be auctioned soon in the undercity of Lucgate.
</p>
<p>
It is unfortunately already too late for you to participate in the auction, but from what you gathered this is the work of that <<rep $company.outlaws>> that you have irked recently. But there is no time to think about that —- <<uneedrescue $g.victim>>.
</p><<run new setup.Event(
'peasant_uprising', /* key */
"Peasant Uprising", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_peasant_uprising',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humanvale', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humanvale', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Today, you are greeted by your <<repfull $g.slaver>>, who brings bad news. Last night, when <<they $g.slaver>> is out drinking in a nearby tavern with <<rep $g.victim>>, an angry mob of peasants came storming into the tavern. They demanded your head for all the atrocities your company has done against the <<rep $company.humanvale>>. Seeing you were not there drinking with them, they settled with kidnapping <<rep $g.victim>> to send you a strong message not to mess with them.
</p>
<p>
As much as you want to chastise <<rep $g.slaver>> for being stupid enough to patron such a tavern, you now have more important work to do if you ever want to see <<rep $g.victim>> again.
<<uneedrescue $g.victim>>, before <<they $g.victim>> suffer in the hand of the mobs...
</p><<run new setup.Event(
'whorebaited', /* key */
"Whorebaited", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_whorebaited',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
'neko': setup.unitgroup.neko, },
[ /* outcomes */
setup.qc.Ire('neko', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('neko', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, you noticed your <<repfull $g.victim>> spending more and more time with a certain neko <<lady $g.neko>> from the <<lore location_npc>>. You given it no notice since it sounds harmless enough, but today marks the fifth day that <<rep $g.victim>> has been missing from your compound.
</p>
<p>
Given the cleaned up state of <<their $g.victim>> room, it seems that <<rep $g.victim>> had been lured into voluntarily quitting your company. You started to wonder if this is the work of some people in <<rep $company.neko>>, whom you have angered recently. If it does, then whatever fate awaits the <<uadjgood $g.victim>> slaver will not be a good one. <<uneedrescue $g.victim>> from <<their $g.victim>> fake lover...
</p><<run new setup.Event(
'demonic_pitfall', /* key */
"Unknown Tentacle Object", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_demonic_pitfall',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('demon', -20),
setup.qc.MissingUnitRecapture('victim', 'capturedhard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('demon', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Today, you spilled your drink in the morning, lost a sparring fight to <<rep $g.victim>> later, and triped on your own clothes and fell flat into the ground just now. Just as you thought your day could not get any worse, the sky suddenly turned dark. As you stare into the sky cursing your luck, a dark tendril lurches fast into your compound, grabbing your <<repfull $g.victim>>, and within moments sucked the slaver into the vortex.
</p>
<p>
While you are tempted to just blame it all on luck, this is probably the works of <<rep $company.demon>> whom you've angered recently. <<uneedrescue $g.victim>>, before god-knows what the demons will do to the poor <<urace $g.victim>> there beyond the mist.
</p><<run new setup.Event(
'hoisted_by_ninjas', /* key */
"Hoisted by Ninjas", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_hoisted_by_ninjas',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('humansea', -20),
setup.qc.MissingUnitRecapture('victim', 'capturedhard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humansea', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Your sleep today was disrupted by the sound of smoke and explosion coming from the <<rep setup.buildingtemplate.lodgings>>. When you arrived, you saw several ninjas standing on the roof of your fort with your <<repfull $g.victim>> bound and gagged in their clutches. In a flash, the ninjas disappear from your fort together with your slaver.
</p>
<p>
Fortunately, you have been somewhat prepared for this as you have expected retaliation from the <<rep $company.humansea>> for the horrible deeds you have committed over there. You're able to track down <<rep $g.victim>> to a distant location, but rescuing <<them $g.victim>> will surely be a challenge. <<urescuenow $g.victim>>.
</p><<run new setup.Event(
'the_dragonkin_beckons', /* key */
"The Dragonkin Beckons", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_dragonkin_beckons',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
},
{ /* actors */
'dragon': setup.unitgroup.dragonkin, },
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.MissingUnitRecapture('victim', 'capturedhard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
The sun shone brightly today, and just as you thought the day is perfect a sudden chill froze the entire compound. Paralyzed from an unknown force, you can't do anything but watched as a majestic blue-colored dragonkin descend from the sky into your compound. <<They $g.dragon>> calmly walked around your compound as if nothing happen, inspecting some of your slavers until settling at your <<repfullgood $g.victim>>. "You will do," said the dragonkin calmly as they took <<rep $g.victim>> and carried <<them $g.victim>> effortlessly back to the sky.
</p>
<p>
Whatever paralyzes you and your slavers dissipate soon after. After catching your breath, you look to the sky wondering if this was a retribution for your actions against the <<rep $company.dragonkin>>. You shrug it all off, and start planning your next move. <<urescuenow $g.victim>>, although it sure as hell won't be easy.
</p><<run new setup.Event(
'nightmares', /* key */
"Nightmares", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_nightmares',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('demon', -20),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('demon', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
In the recent weeks, you and some other slavers have started to experience more and more haunting nightmares. While initially it started innocuously with falling into an endless pit, lately the nightmares have become more intrusive. At one point you dreamt being held in front of a succubus, being forced to watch as your <<uadjgood $g.slaver>> <<urace $g.slaver>> slaver <<rep $g.slaver>> were sexually tortured in front of you.
</p>
<p>
The experience has deeply traumatized some inhabitants of the fort. You are certain this is the work of some other entities out there, perhaps as a result of you angering the <<rep $company.demon>> recently.
</p><<run new setup.Event(
'spirit_dream', /* key */
"Spirit Dream", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_spirit_dream',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('werewolf', -20),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('werewolf', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
As you begin your work today, the <<uadjgood $g.slaver>> slaver <<rep $g.slaver>> came to your
office bearing grave news. Some of your slavers had experienced a dream so nightmarish,
that they are now traumatized.
</p>
<p>
From what you gather from the mess that is your traumatized slavers, they dreamt of various
evil spirits, which plagued their dreams in the past few weeks. The description of the spirit
matches a certain furry guardian of the werewolves, which made you certain this must be the work
of some werewolf tribe out there who bear some grudge against your company. Maybe next time you
can be more careful when dealing with these pups.
</p><<run new setup.Event(
'waking_dream', /* key */
"Waking Dream", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_waking_dream',
{ /* roles */
'elf': setup.unitgroup.elf,
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('elf', -20),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
setup.qc.TraumatizeRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('elf', 20), ],
0, /* Cooldown */
0, /* Rarity */
)>><p>
Recently, you noticed some of your slavers look as if they haven't slept in days.
When you question them, they have apparently been unable to sleep due to seeing
the same unnerving dream each time:
they are seated in front of the sternest looking elf <<lady $g.elf>> they have ever seen,
lecturing them on their evil deeds and making them promise to do better in the future.
Fortunately it does not seem to affect most of your slavers, which means only a select few
were traumatized by this.
</p>
<p>
You wonder if this is the work of some dissidents of the <<rep $company.elf>>.
Perhaps you should try not to anger them next time...
</p><<run new setup.UnitGroup(
'quest_event_loan_tiger1',
"Loan Tiger Agent",
[
[setup.unitpool.race_neko_male, 0.5],
[setup.unitpool.race_neko_female, 0.5], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_clerk),
setup.qc.TraitReplace('unit', setup.trait.per_thrifty), ],
)>>
<<run new setup.Event(
'loan_tiger', /* key */
"Loan Tiger", /* Title */
"darko", /* Author */
[ 'special',
], /* tags */
'Event_loan_tiger',
{ /* roles */
'you': [
setup.qres.You(),
],
},
{ /* actors */
'tiger': setup.unitgroup.quest_event_loan_tiger1, },
[ /* outcomes */
setup.qc.SlaverMarker('tiger'),
setup.qc.Favor('bank', 100),
setup.qc.Opportunity('loan_tiger'),
],
[ /* restrictions to generate */
],
1,
100,
)>><p>
It's not everyday that a slaver such as yourself receives visitors, but today you are visited by a representative from the <<rep $company.bank>>. The <<name $company.bank>> is perhaps the largest banking institution in the region, and they are headquartered in the <<lore location_npc>> —- a city in the western forests predominantly inhabited by <<rep setup.trait.race_neko>> people.
</p>
<p>
<<They $g.tiger>> introduces <<themself $g.tiger>> as <<name $g.tiger>>. "You must be <<= $g.you.getName()>>, the leader of a" - he pauses a bit - "new mercenary company in this area. <<name $g.tiger>> have heard of your recent deeds, and is quite impressed." As it turns out, your company's activities has reached the institution. You do not have to guess what such institution wants from your company as <<name $g.tiger>> proceeds to open <<their $g.tiger>> expensive-looking suitcase filled to the brim with documents, and hands you over a loan agreement. "The bank and also <<name $g.tiger>> trusted that your company can benefit from this offer." - <<they $g.tiger>> adds.
</p>
<p>
You put the documents in your desk to read later. You asked one of your slavers to give <<name $g.tiger>> a tour of your fort while you get back to work.
</p><<run new setup.Event(
'loan_tiger__payment', /* key */
"Loan Tiger: Payment", /* Title */
"darko", /* Author */
[ 'special',
], /* tags */
'Event_loan_tiger__payment',
{ /* roles */
},
{ /* actors */
'tiger': setup.unitgroup.quest_event_loan_tiger1, },
[ /* outcomes */
setup.qc.SlaverMarker('tiger'),
setup.qc.Money(-15000), ],
[ /* restrictions to generate */
],
1,
100,
)>><p>
A year ago, you borrows some money from the <<rep $company.bank>>. Today, the charming representative of the bank is back at your company to collect the loan.
<<if $company.player.getMoney() >= 15000>>
You have allocated some funds for this purpose, which <<name $g.tiger>> happily took.
"<<name $g.tiger>> is pleased to do business with you." - <<they $g.tiger>> cordially said as they leave your fort with the bag of money.
<<else>>
Paying the money puts your company in significant debt, but a promise is a promise as <<name $g.tiger>> took the money.
"<<name $g.tiger>> is pleased to do business with you, but <<name $g.tiger>> hopes your company will be doing well." - <<they $g.tiger>> apologetically said as they leave your fort with the bag of money.
<</if>>
</p><<run new setup.Event(
'lost_flame', /* key */
"Lost Flame", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_lost_flame',
{ /* roles */
},
{ /* actors */
'you': [
setup.qres.You(),
],
'lover': [
setup.qres.Job(setup.job.slaver),
setup.qres.YourLover(),
setup.qres.FriendshipWithYouAtMost(setup.LOVERS_BREAKUP_FRIENDSHIP - 1),
],
},
[ /* outcomes */
setup.qc.BreakupWithYou('lover'),
],
[ /* restrictions */
],
0, /* Cooldown */
0, /* Rarity */
)>><p>
You never realized how you and your <<urace $g.lover>> lover <<rep $g.lover>> has grown distant over the last few weeks. No longer you feel the heat rising within you when you look into <<their $g.lover>> <<ueyes $g.lover>>, and lately you almost see a stranger inside the <<man $g.lover>> you once loved.
</p>
<p>
It was not really a surprise then when <<rep $g.lover>> came to you to declare the relationship over. It was doomed to happen sooner or later, and you both just have to get over it as quickly as possible.
</p><<run new setup.Event(
'renovation_feast', /* key */
"Grand Hall Built", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_renovation_feast',
{ /* roles */
'slaver1': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver2': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver3': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver4': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
],
[ /* restrictions to generate */
],
50,
100,
)>><p>
This week, you have built the
<<rep setup.buildingtemplate.grandhall>> of your fort. The fort is starting to feel like home now, with all the basic improvements required for a slaving career fully built.
You decided to do a little tour of the fort for today.
</p>
<p>
You found <<rep $g.slaver1>> <<uadv $g.slaver1>> snoozing away in the <<rep setup.buildingtemplate.lodgings>> area, on a comfortable bed this time rather than outside in the rain.
Exiting the lodging area, you now arrive at an open space designated as the <<rep setup.buildingtemplate.hiringsquare>>, where you can hire new slavers into your fort, which will then go to <<rep setup.buildingtemplate.prospectshall>>. Next is the newly built <<rep setup.buildingtemplate.grandhall>> —- a wide open space where you can gather your slavers for important occassions. It's empty right now, save for <<rep $g.slaver2>> who is busy <<uadv $g.slaver2>> arguing with <<rep $g.slaver3>>.
</p>
<p>
Not wanting to get into their argument, you enter the work area, a series of office rooms to sort out the paperwork that will surely become your daily business. The incoming mails are received in the <<rep setup.buildingtemplate.mailroom>>, which is next to your main office. A separate room has been designated as the <<rep setup.buildingtemplate.marketingoffice>>, where you can arrange slaves to be pawned for money.
</p>
<p>
Finally, you descend to the basements of your fort. While initially it was full of rubble, they have been mostly cleared and part of the basement has been turned into a dungeons complex. Here you can keep slaves either to sell them later, or for your own and your slavers' amusement. Who knows, maybe one day you'll be able to affort the <<rep setup.buildingtemplate.bedchamberwing>> and keep a harem for your own. Newly gathered slaves will be placed in the <<rep setup.buildingtemplate.slavepens>> just outside your fort.</p>
<p>
Your fellow slaver <<rep $g.slaver4>> <<uadv $g.slaver4>> greets you, and expressed <<their $g.slaver4>> appreciation of your work leading the group so far. The team indeed feels a little more like family now. Still, there are more work to be done. Perhaps you can aim to renovate the empty space above your <<rep setup.buildingtemplate.grandhall>> —- a <<rep setup.buildingtemplate.veteranhall>> would surely be a nice addition to your fort.
</p><<run new setup.Event(
'stolen_flame', /* key */
"Stolen Flame", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
],
'Event_stolen_flame',
{ /* roles */
},
{ /* actors */
'lover': [
setup.qres.Job(setup.job.slaver),
setup.qres.YourLover(),
],
},
[ /* outcomes */
setup.qc.VarSet('future_assassin_progress', '2', -1),
setup.qc.QuestDirect('stolen_flame', {
lover: "lover",
}),
],
[ /* restrictions */
setup.qres.VarEqual('future_assassin_progress', '1'),
setup.qres.VarNull('future_assassin_cooldown'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('future_assassin_parent')
]),
],
0, /* Cooldown */
1, /* Rarity */
)>><<include "Quest_stolen_flame">><<run new setup.Event(
'the_quest_for_excalibur__epilogue', /* key */
"The Quest for Excalibur: Epilogue", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_quest_for_excalibur__epilogue',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarRemove('quest_excalibur'),
setup.qc.VarSet('quest_excalibur_done', '1', -1),
],
[ /* restrictions to generate */
],
0, /* Cooldown */
100, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
You have recently heard from your <<repfull _u>> that the<<lore location_lucgate>> actually stores a massive amount of Excalibur swords in its vaults.
Those swords are dangerous in the wrong hands, possessing their wielders to do terribly good things.
Surely a slaving company such as yours has nothing to do with 'em.
</p>
<p>
You do your best to reassure yourself of this in the coming days.
</p><<run new setup.Title(
"quest_love_trialist_0", /* key */
"Love Trialist", /* name */
"Participant in the Trials of Love", /* description */
"is currently participating in the Trials of Love", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Event(
'trial_of_love_cancelled', /* key */
"Trial of Love Cancelled", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_trial_of_love_cancelled',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
setup.qc.VarRemove('trial_of_love_progress'),
setup.qc.VarSet('trial_of_love_cooldown', '1', 15),
],
[ /* restrictions */
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_love_trialist_0'),
setup.qres.Not(setup.qres.BestFriend(setup.qres.HasTitle('quest_love_trialist_0')))
]),
],
0, /* Cooldown */
0, /* Rarity */
)>><p>
The slavers you sent previously on the trial of love are apparently no longer lovers. This immediately disqualifies them from continuing the trials. You'll just have to wait for another opportunity to show up before reattempting.
</p><<run new setup.Event(
'veteran_celebration', /* key */
"Veteran Celebration", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_veteran_celebration',
{ /* roles */
'slaver1': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver2': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver3': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'slaver4': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
],
[ /* restrictions to generate */
],
50,
100,
)>><p>
This week marks the <<= $calendar.getWeek()>>-th week of your slaving career. Finally, the fort is looking like a proper villain headquarters —- the walls surrounding the fort has been fully repaired. Visitors are greeted with an imposing iron gate, behind which stands your mighty fort. The <<rep setup.buildingtemplate.grandhall>> greets the visitors entering your fort, and the newly built <<rep setup.buildingtemplate.veteranhall>> majestically tower over it.
</p>
<p>
It took a lot of money and work to get here, and in no small part also thanks to your slaving family. You see your slavers similarly celebrating the construction of the <<rep setup.buildingtemplate.veteranhall>>. <<rep $g.slaver1>> <<uadv $g.slaver1>> admiring the equipments in the <<rep setup.buildingtemplate.armory>>, which is next to the <<rep setup.buildingtemplate.warehouse>> where you store all your other items.
From the windows of your fort you can see <<rep $g.slaver3>> <<uadv $g.slaver3>> training in the <<rep setup.buildingtemplate.traininggrounds>> of your fort. There, you can welcome new slavers into your family and rapidly train them in the art of slaving.
</p>
<p>
Your fort now has a proper <<rep setup.buildingtemplate.hospital>> to nurse your injured slavers.
The <<rep setup.buildingtemplate.moraleoffice>> is located next, and here you can manage your slaver's relationships with each other. The office complex has also been expanded with the <<rep setup.buildingtemplate.dutyroom>>, where you can assign slaver (and slaves too, later) to perform important duties in your fort.
</p>
<p>
Down in the basement <<rep $g.slaver2>> <<uadv $g.slaver2>> <<if $g.slaver2.isHasTrait('per_kind')>>
frowns
<<else>>
licks <<their $g.slaver2>> lips
<</if>>
imagining what kind of pain you can inflict on the slaves in the <<rep setup.buildingtemplate.trainingchamber>>.
</p>
<p>
With the <<rep setup.buildingtemplate.veteranhall>> fully built, the world is now fully open to you. Whatever your goal is, be it wealth, fame, power, or pleasure, you can pursue it now. Now that your company is well known, clients may offer your company more dangerous quests. While these quests are dangerous in nature, they promise unique rewards not found anywhere else. Perhaps you can consider sending your slavers to attempt some of these...
</p><<run new setup.Title(
"quest_mysterious_wanderer_0", /* key */
"Mysterious Wanderer", /* name */
"A mysterious wonderer who one day showed up at your fort", /* description */
"has a mysterious past that you know little about", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_shapeshifter__werewolf_1", /* key */
"Shapeshifter: Werewolf", /* name */
"Either through heritage or advanced magic, this unit is capable of shifting forms between northerner and werewolf", /* description */
"is a shapeshifter capable of shifting form between ordinary northerner and a hulking werewolf", /* unit text */
3000, /* slave value */
{ /* skill additives */
brawn: 1,social: 1,},
)
>>
<<run new setup.UnitGroup(
"wanderer_joins1",
"Wanderer",
[ /* pools */
[setup.unitpool.race_humanvale_male, 0.5],
[setup.unitpool.race_humanvale_female, 0.5],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_nomad),
setup.qc.TraitsReplace('unit', [setup.trait.face_attractive, setup.trait.per_loner]),
setup.qc.AddTitle('unit', 'quest_mysterious_wanderer_0'),
],
)>>
<<run new setup.Event(
'wanderer_joins', /* key */
"Wanderer Joins", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_wanderer_joins',
{ /* roles */
},
{ /* actors */
'wanderer': 'wanderer_joins1',
},
[ /* outcomes */
setup.qc.Slaver('wanderer', "has an unknown past", undefined),
setup.qc.VarSet('wanderer_joins_cooldown', "1", 4),
],
[ /* restrictions */
setup.qres.Building('prospectshall'),
setup.qres.NoUnitWithTitle('quest_mysterious_wanderer_0', {
}),
setup.qres.NoUnitWithTitle('quest_shapeshifter__werewolf_1', {
}),
],
300, /* Cooldown */
0, /* Rarity */
)>><p>
Your fort has received a guest today — a hooded northerner who claims to seek company of fellow <<women $g.wanderer>>. Seeing your company occupying a previously abandoned fort, <<they $g.wanderer>> saw an opportunity, which leads <<them $g.wanderer>> to where <<they $g.wanderer>> is now.
</p>
<p>
You were not able to gather much about the <<man $g.wanderer>>'s past, but at this point you are hard-pressed for slavers that it might be a good decision to hire the <<uadjphys $g.wanderer>> <<man $g.wanderer>>.
</p>
<p>
<<successtext 'Please note'>>: If you want to hire <<them $g.wanderer>>, you have to do so using by going into your <<rep setup.buildingtemplate.prospectshall>>.
</p><<run new setup.Event(
'wanderer_missing', /* key */
"Wanderer Missing", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_wanderer_missing',
{ /* roles */
},
{ /* actors */
'wanderer': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_mysterious_wanderer_0'),
],
},
[ /* outcomes */
setup.qc.Leave('wanderer', "went missing from your company", 1),
setup.qc.IfThenElse(
setup.qres.VarGte('wanderer_joins_missing', 2),
setup.qc.DoAll([
setup.qc.QuestDirect('the_wanderer_wanders', {
wanderer: "wanderer",
})
], undefined),
setup.qc.DoAll([
], undefined)),
setup.qc.VarAdd('wanderer_joins_missing', 1, -1),
],
[ /* restrictions */
setup.qres.VarNull('wanderer_joins_cooldown'),
],
8, /* Cooldown */
0, /* Rarity */
)>><<set _iter = $varstore.get('wanderer_joins_missing') || 0>>
<<set _u = setup.getAnySlaver()>>
<p>
Your usually <<uadj $g.wanderer>> <<rep $g.wanderer>> is nowhere to be seen.
<<if _iter > 2>>
But you're not a little bit surprised by now — It almost has become a routine that <<rep $g.wanderer>> must disappear from your fort every now and then. Perhaps you can adjust your schedule to fit this variable in, or perhaps you can try to find the root cause of <<their $g.wanderer>> disappearances...
<<elseif _iter > 0>>
As you recall, this isn't the first time the mysterious slaver disappeared from your fort. The last time <<they $g.wanderer>> disappeared, <<they $g.wanderer>> dodged all of your questions asking where <<they $g.wanderer>> have gone to. You're starting to think if you should dock the <<uadjper $g.wanderer>> slaver's pay...
<<else>>
Even with your <<repfull _u>> helping you comb the entire fort, there was no trace of <<rep $g.wanderer>> to be found. Strange, you think to yourself, but perhaps the slaver just need some time for <<themself $g.wanderer>>. <<They $g.wanderer>>'ll probably be back by next week to collect <<their $g.wanderer>> pay as usual.
<</if>>
</p><<set setup.event = {}>>
<<set _passages = Story.lookup('tags', 'event')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<set setup.familyrelation = {}>>
<<run new setup.FamilyRelation('brother', 'brother', ['sibling', 'incest',])>>
<<run new setup.FamilyRelation('sister', 'sister', ['sibling', 'incest',])>>
<<run new setup.FamilyRelation('twinbrother', 'twin brother', ['twin', 'sibling', 'incest',])>>
<<run new setup.FamilyRelation('twinsister', 'twin sister', ['twin', 'sibling', 'incest',])>>
<<run new setup.FamilyRelation('father', 'father', ['parent', 'incest',])>>
<<run new setup.FamilyRelation('mother', 'mother', ['parent', 'incest',])>>
<<run new setup.FamilyRelation('son', 'son', ['child', 'incest',])>>
<<run new setup.FamilyRelation('daughter', 'daughter', ['child', 'incest',])>><<include 'InitFurnitureSlaverBed'>>
<<include 'InitFurnitureSlaveBed'>>
<<include 'InitFurnitureFoodTray'>>
<<include 'InitFurnitureDrinkTray'>>
<<include 'InitFurnitureReward'>>
<<include 'InitFurniturePunishment'>>
<<include 'InitFurnitureLighting'>>
<<include 'InitFurnitureTile'>>
<<include 'InitFurnitureObject'>>
<<include 'InitFurnitureWall'>>
/* must be at bottom */
<<include 'InitFurniturePool'>><<run new setup.ItemPool(
'furniture_normal',
{
f_slaverbed_normal: 1,
f_slavebed_normal: 1,
f_foodtray_normal: 1,
f_drinktray_normal: 1,
f_reward_normal: 1,
f_punishment_normal: 1,
f_lighting_normal: 1,
f_tile_normal: 1,
f_object_normal: 1,
f_wall_normal: 1,
}
)>>
<<run new setup.ItemPool(
'furniture_good',
{
f_slaverbed_good: 1,
f_slavebed_good: 1,
f_foodtray_good: 1,
f_drinktray_good: 1,
f_reward_good: 1,
f_punishment_good: 1,
f_lighting_good: 1,
f_tile_good: 1,
f_object_good: 1,
f_wall_good: 1,
}
)>>
<<run new setup.ItemPool(
'furniture_master',
{
f_slaverbed_master: 1,
f_slavebed_master: 1,
f_foodtray_master: 1,
f_drinktray_master: 1,
f_reward_master: 1,
f_punishment_master: 1,
f_lighting_master: 1,
f_tile_master: 1,
f_object_master: 1,
f_wall_master: 1,
}
)>><<run new setup.Furniture(
'f_drinktray_none',
'floor',
'Drink from a depression on the floor',
/* value = */ 0,
setup.furnitureslot.drinktray,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_drinktray_normal',
'water bowl',
'A small water bowl for your slaves to drink from',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.drinktray,
['normal'],
{
social: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_drinktray_good',
'gilded water bowl',
'Luxurious-looking water bowl placed on the floor for your slaves to lap water from',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.drinktray,
['good'],
{
social: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_drinktray_master',
'Golden Chalice of Tor',
'An incredibly lavish chalice stolen from the secret coffers of the Kingdom of Tor',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.drinktray,
['master'],
{
social: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_foodtray_none',
'floor',
'Eat from the floor',
/* value = */ 0,
setup.furnitureslot.foodtray,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_foodtray_normal',
'pet food tray',
'Doggy bowl for your slaves to eat from',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.foodtray,
['normal'],
{
knowledge: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_foodtray_good',
'gilded pet food tray',
'Luxurious-looking doggy bowl for your slaves to eat from',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.foodtray,
['good'],
{
knowledge: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_foodtray_master',
'PLACEHOLDER foodtray master title',
'PLACEHOLDER foodtray master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.foodtray,
['master'],
{
knowledge: setup.FURNITURE_SKILL_MASTER,
},
)>>
<<run new setup.Furniture(
'f_foodtray_normal_hermit',
"wooden food bowl of wizardry",
"An ordinary and worn-out food bowl, given to you by the infamous Hermit of the Crags. \
No matter which angle you see it from, it looks nothing more than a worthless food bowl, \
but every now and then it glows purple with strange magic",
/* value = */ 100,
setup.furnitureslot.foodtray,
['normal'],
{
knowledge: setup.FURNITURE_SKILL_NORMAL,
arcane: 1,
},
)>><<set setup.furnitureslot = {}>>
<<run new setup.FurnitureSlot('slaverbed', 'slaver bed')>>
<<run new setup.FurnitureSlot('slavebed', 'slaves beds')>>
<<run new setup.FurnitureSlot('foodtray', 'food tray')>>
<<run new setup.FurnitureSlot('drinktray', 'drink container')>>
<<run new setup.FurnitureSlot('reward', 'slave reward')>>
<<run new setup.FurnitureSlot('punishment', 'slave punishment')>>
<<run new setup.FurnitureSlot('lighting', 'lighting')>>
<<run new setup.FurnitureSlot('tile', 'floor decoration')>>
<<run new setup.FurnitureSlot('object', 'object decoration')>>
<<run new setup.FurnitureSlot('wall', 'wall decoration')>><<run new setup.Furniture(
'f_lighting_none',
'candle',
'Some candles to dimly light the room',
/* value = */ 0,
setup.furnitureslot.lighting,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_lighting_normal',
'candlestick',
'Tall candlesticks illuminate the room',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.lighting,
['normal'],
{
survival: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_lighting_good',
'chandelier',
'Large chandelier of elven design that can hang from the ceiling',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.lighting,
['good'],
{
survival: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_lighting_master',
'PLACEHOLDER lighting master title',
'PLACEHOLDER lighting master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.lighting,
['master'],
{
survival: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_object_none',
'none',
'Nothing to decorate the space',
/* value = */ 0,
setup.furnitureslot.object,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_object_normal',
'statue',
'A non-descript statue that barely looks beautiful',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.object,
['normal'],
{
brawn: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_object_good',
'exotic statue',
'An exotic statue of an incredibly sexy humanified god',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.object,
['good'],
{
brawn: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_object_master',
'PLACEHOLDER object master title',
'PLACEHOLDER object master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.object,
['master'],
{
brawn: setup.FURNITURE_SKILL_MASTER,
},
)>>
<<run new setup.Furniture(
'f_object_master_fuckmachine',
'Fuckmachine',
'A protruding stick ending up with a large dildo with a solid box base. The box is powered by magic to move the lewd dildo up and down. Unlocks a new interaction with anally-trained slaves in the same bedchamber',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.object,
['master'],
{
brawn: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_punishment_none',
'nothing',
'Spanks for naughty slaves!',
/* value = */ 0,
setup.furnitureslot.punishment,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_punishment_normal',
'whip',
'A worn-out whip for inflicting discipline on slaves',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.punishment,
['normal'],
{
slaving: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_punishment_good',
'cross',
'A large cross to secure your slaves for a good session of bondage',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.punishment,
['good'],
{
slaving: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_punishment_master',
'PLACEHOLDER punishment master title',
'PLACEHOLDER punishment master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.punishment,
['master'],
{
slaving: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_reward_none',
'nothing',
'Pets for your pets!',
/* value = */ 0,
setup.furnitureslot.reward,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_reward_normal',
'ball',
'A small ball your slaves can play with when their owners are not around',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.reward,
['normal'],
{
aid: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_reward_good',
'climbing platform',
'A monkey climbing platform for your slaves to amuse themselves when their owners are not around',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.reward,
['good'],
{
aid: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_reward_master',
'PLACEHOLDER reward master title',
'PLACEHOLDER reward master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.reward,
['master'],
{
aid: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_slavebed_none',
'floor',
'Sleep on the floor',
/* value = */ 0,
setup.furnitureslot.slavebed,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_slavebed_normal',
'iron cages',
'Iron cages to keep your slaves comfortable inside',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.slavebed,
['normal'],
{
intrigue: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_slavebed_good',
'gilded cages',
'Gilded cages to keep and showcase your slaves inside',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.slavebed,
['good'],
{
intrigue: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_slavebed_master',
'PLACEHOLDER slavebed master title',
'PLACEHOLDER slavebed master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.slavebed,
['master'],
{
intrigue: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_slaverbed_none',
'bedroll',
'A worn-out bedroll',
/* value = */ 0,
setup.furnitureslot.slaverbed,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_slaverbed_normal',
'wooden bed',
'Sturdy but cheap wooden bed',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.slaverbed,
['normal'],
{
sex: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_slaverbed_good',
'luxurious bed',
'A luxurious double bed complete with a canopy',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.slaverbed,
['good'],
{
sex: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_slaverbed_master',
'Silver Wolf Bed',
'An extremely luxurious canopy bed decorated masterfully with beautiful and exotic animal furs',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.slaverbed,
['master'],
{
sex: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_tile_none',
'floor',
'Dirty floor with nothing covering it',
/* value = */ 0,
setup.furnitureslot.tile,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_tile_normal',
'rug',
'Some cheap-looking rug keeping the floor nice and tidy',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.tile,
['normal'],
{
combat: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_tile_good',
'exotic rug',
'Exotic rugs from the southern seas that makes for a beautiful decoration',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.tile,
['good'],
{
combat: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_tile_master',
'PLACEHOLDER tile master title',
'PLACEHOLDER tile master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.tile,
['master'],
{
combat: setup.FURNITURE_SKILL_MASTER,
},
)>><<run new setup.Furniture(
'f_wall_none',
'wall',
'The walls are unevenly painted',
/* value = */ 0,
setup.furnitureslot.wall,
['basic'],
{},
)>>
<<run new setup.Furniture(
'f_wall_normal',
'painting',
'Some paintings bought for cheap in the<<lore location_lucgate>>',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.wall,
['normal'],
{
arcane: setup.FURNITURE_SKILL_NORMAL,
},
)>>
<<run new setup.Furniture(
'f_wall_good',
'exotic painting',
'Beautiful paintings of various natural sceneries',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.wall,
['good'],
{
arcane: setup.FURNITURE_SKILL_GOOD,
},
)>>
<<run new setup.Furniture(
'f_wall_master',
'PLACEHOLDER wall master title',
'PLACEHOLDER wall master description',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.wall,
['master'],
{
arcane: setup.FURNITURE_SKILL_MASTER,
},
)>>These are credits for various icons and miscelianous images used in the game.
For portrait credits, they can be found in-game, either by clicking the portrait,
or by going to the (interact with unit) menu.
Various images from wikimedia
CSS patterns from heropatterns.com
broken bone by Veysel Kara from the Noun Project
Muscle by Ayub Irawan from the Noun Project
Male by Yo! Baba from the Noun Project
Female by Yo! Baba from the Noun Project
Farmer by Adrien Coquet from the Noun Project
Village by Adrien Coquet from the Noun Project
Human by Gan Khoon Lay from the Noun Project
battle axe by Ben Davis from the Noun Project
Brain by BomSymbols from the Noun Project
magic ball by b farias from the Noun Project
Muscle by Adrien Coquet from the Noun Project
shackle by Robert Bjurshagen from the Noun Project
camp by Dev Patel from the Noun Project
dagger by iconcheese from the Noun Project
Letter by Arthur Shlain from the Noun Project
chatting by Scott Dunlap from the Noun Project
Sex by Yazmin Alanis from the Noun Project
medic by alkhalifi_design from the Noun Project
Book by Bismillah from the Noun Project
human trafficking by Gan Khoon Lay from the Noun Project
whipping by Andrew Doane from the Noun Project
Unemployed by Adriana Danaila from the Noun Project
Fort by Atif Arshad from the Noun Project
Construction by Nikita Kozin from the Noun Project
bedroom by Shocho from the Noun Project
Park by Adrien Coquet from the Noun Project
goblet by Pham Duy Phuong Hung from the Noun Project
Muscle by Adrien Coquet from the Noun Project
penis by Alex Muravev from the Noun Project
Male by Andrejs Kirma from the Noun Project
Female by Adam Schraff from the Noun Project
Hermaphrodite by Egorova Valentina from the Noun Project
Circle by Tresnatiq from the Noun Project
Wolf by Serhii Smirnov from the Noun Project
Cat by Sven Gabriel from the Noun Project
Fox by prasong tadoungsorn from the Noun Project
dragon by Icons Producer from the Noun Project
demon by RareSloth from the Noun Project
human head by Elisabeta from the Noun Project
Face by David Alexander Slaager from the Noun Project
Face by David Alexander Slaager from the Noun Project
Farm by mynamepong from the Noun Project
Castle by Eucalyp from the Noun Project
whip by Cédric Villain from the Noun Project
pirate ship by ProSymbols from the Noun Project
thief by Nhor from the Noun Project
Satan by Royyan Wijaya from the Noun Project
classes hunter by Maxicons from the Noun Project
university by ProSymbols from the Noun Project
Church by Smalllike from the Noun Project
Sex by Rflor from the Noun Project
leader by Wilson Joseph from the Noun Project
alone by Adrien Coquet from the Noun Project
Trident by kareemovic from the Noun Project
Lock by Adrien Coquet from the Noun Project
Heart by Ahmed Elzahra from the Noun Project
Charity by Vectors Point from the Noun Project
Dog by Anang Taufik from the Noun Project
Lion by m. turan ercan from the Noun Project
meditate by Becris from the Noun Project
skill hammer slam by Maxicons from the Noun Project
Peace by Tinashe Mugayi from the Noun Project
dragon by BGBOXXX Design from the Noun Project
Rat by sandra from the Noun Project
compassionate by priyanka from the Noun Project
Fist by Alejandro Capellan from the Noun Project
whip by Angelo Troiano from the Noun Project
short circuit by dDara from the Noun Project
hawk by Brand Mania from the Noun Project
Wolf by Olga from the Noun Project
Speech Bubble by Alice Noir from the Noun Project
Pinocchio by HeadsOfBirds from the Noun Project
rock by Gan Khoon Lay from the Noun Project
Pleading by Luis Prado from the Noun Project
top by Subagus Indra from the Noun Project
Gears by Gregor Cresnar from the Noun Project
Bleeding Heart by Bohdan Burmich from the Noun Project
Angel by Pascal Heß from the Noun Project
Devil by Gan Khoon Lay from the Noun Project
magnify by Alice Design from the Noun Project
Elephant by bmijnlieff from the Noun Project
Cat by b farias from the Noun Project
wave by Nawicon from the Noun Project
Sea by tulpahn from the Noun Project
fracture by Adrien Coquet from the Noun Project
Fox by David from the Noun Project
Cow by styleku from the Noun Project
penis by Alex Muravev from the Noun Project
breasts by IcoLabs from the Noun Project
[[vagina by priyanka from the Noun Project|https://thenounproject.com/search/?q=vagina&i=2529029]]
butt by Mello from the Noun Project
mirror by b farias from the Noun Project
Broken Mirror by arif fajar yulianto from the Noun Project
tall by Adrien Coquet from the Noun Project
wings by Luis Prado from the Noun Project
alchemy by Matthias Hartmann from the Noun Project
Gym by Bhuvan from the Noun Project
Weapon by Eucalyp from the Noun Project
connection by counloucon from the Noun Project
Brain by Laymik from the Noun Project
aura by Alexander Skowalsky from the Noun Project
pendulum by Rflor from the Noun Project
Maraca by Smalllike from the Noun Project
Water by Ricki Tri Putra from the Noun Project
oclone a willy by Smalllike from the Noun Project
Wind by Marko Fuček from the Noun Project
thunder by Ziyad Al junaidi from the Noun Project
sprout by tulpahn from the Noun Project
tentacles by Smalllike from the Noun Project
vortex by Eliricon from the Noun Project
Corruption by Daniel Schott from the Noun Project
healing by agus raharjo from the Noun Project
pony by Jose Dean from the Noun Project
Dog by Mariia Nisiforova from the Noun Project
ball gag by Arthur Shlain from the Noun Project
blindfold by Luis Prado from the Noun Project
Heart by Oleg Frolov from the Noun Project
sex shop by Smalllike from the Noun Project
Bikini by IconMark from the Noun Project
Oral Sex by Gan Khoon Lay from the Noun Project
homosexual sex by Gan Khoon Lay from the Noun Project
Sex Position by ghayn from the Noun Project
transgender by Andrejs Kirma from the Noun Project
pet playing by ProSymbols from the Noun Project
horseback rider by designer468 from the Noun Project
riding whip by Azam Ishaq from the Noun Project
Tortured Man by Gan Khoon Lay from the Noun Project
Toilet by Vadim Solomakhin from the Noun Project
treadmill by Ayub Irawan from the Noun Project
penis by Cédric Villain from the Noun Project
solution by Anton from the Noun Project
cleaning by Mavadee from the Noun Project
smashed by Laymik from the Noun Project
cliff by suhyeon Jung from the Noun Project
Injury by Rose Duong from the Noun Project
Trolley by alvianwijaya from the Noun Project
marketplace by Jasmine Christine from the Noun Project
Tent by nareerat jaikaew from the Noun Project
Pitchfork by Mello from the Noun Project
jungle by iconfield from the Noun Project
Camping by Smalllike from the Noun Project
Burning by monkik from the Noun Project
adventure by Guilherme Schmitt from the Noun Project
entertainer by Ben Davis from the Noun Project
demon by Amethyst Studio from the Noun Project
Elf by Rodrigo Vidinich from the Noun Project
Knight by Icon Island from the Noun Project
horse rider by ProSymbols from the Noun Project
gold by franc11s from the Noun Project
clinic by IcoLabs from the Noun Project
Restaurant by Manaqib S from the Noun Project
flogger by Smalllike from the Noun Project
workshop by Vectors Point from the Noun Project
electric by Alice Design from the Noun Project
electrician by Gan Khoon Lay from the Noun Project
Toy by Smalllike from the Noun Project
clock by Gregor Cresnar from the Noun Project
books by Aleksandr Vector from the Noun Project
battery charge by ProSymbols from the Noun Project
magnify by Adrien Coquet from the Noun Project
Swords by Sweet Farm from the Noun Project
Cat by Alejandro Capellan from the Noun Project
Dog by Jack Made from the Noun Project
Wolf by Emir Palavan from the Noun Project
equipment elf ears by Maxicons from the Noun Project
Wolf by Serhii Smirnov from the Noun Project
dragon by prasong tadoungsorn from the Noun Project
demon by Amethyst Studio from the Noun Project
Werewolf by parkjisun from the Noun Project
demon by parkjisun from the Noun Project
dragon by Anna Neyshtadt from the Noun Project
wings by Valeriy from the Noun Project
demon by Pau Urquijo from the Noun Project
claw by regina from the Noun Project
Fox Tail by Lucid Formation from the Noun Project
Devil Emoji by Razmik Badalyan from the Noun Project
Big tail cat by Johanna Vargas Sanchez from the Noun Project
dragon by prasong tadoungsorn from the Noun Project
penis by Phạm Thanh Lộc from the Noun Project
Chimera by Studio Fibonacci from the Noun Project
potion by Deemak Daksina from the Noun Project
Hobo by Luis Prado from the Noun Project
metalworking by Symbolon from the Noun Project
rape by Cédric Villain from the Noun Project
fangs by Alexander Wiefel from the Noun Project
Tiger by Ben Avery from the Noun Project
Tiger by Sarah Rudkin from the Noun Project
Tiger by Iconic from the Noun Project
Tiger by Christy Presler from the Noun Project
Tiger by Saeful Muslim from the Noun Project
Question by heri sugianto from the Noun Project
Bed by alrigel from the Noun Project
dog bowl by Andrew Acree from the Noun Project
washbasin by Symbolon from the Noun Project
Ball by Sandhi Priyasmoro from the Noun Project
st. andrew's cross by Avana Vana from the Noun Project
Candle by Guilherme Simoes from the Noun Project
rugs by priyanka from the Noun Project
statue by Eucalyp from the Noun Project
painting by priyanka from the Noun Project
furniture by Kantor Tegalsari from the Noun Project
Axe by Anil from the Noun Project
Mine by David from the Noun Project
paperwork by Nociconist from the Noun Project
crime by Adrien Coquet from the Noun Project
Garden by supalerk laipawat from the Noun Project
Wizard Hat by Alice Design from the Noun Project
broom by Vector Valley from the Noun Project
throne by Eucalyp from the Noun Project
Unicorn by Lazar Nikolic from the Noun Project
GPS by Rohith M S from the Noun Project
spy by Vectorstall from the Noun Project
wand by Vector Valley from the Noun Project
treasure by Misbahul Munir from the Noun Project
coin by fahmionline from the Noun Project
sapling by Vectors Market from the Noun Project
Tree by kareemovic3000 from the Noun Project
Butterfly by Benedetta Ferrero Varsino from the Noun Project
lightbulb by Davo Sime from the Noun Project
[[Diamond by HAMEL KHALED from the Noun Project|https://thenounproject.com/search/?creator=3998020&q=diamond&i=3614721]] (trait: eq. very valuable)
Streaking by Luis Prado from the Noun Project
flaming heart by Jaime Serra from the Noun Project
passion by Richard Cordero from the Noun Project
Spanking by Luis Prado from the Noun Project
flippers by Vectors Market from the Noun Project
Flute by Flatart from the Noun Project
Bat by satrio bagus permadi from the Noun Project
Idea by corpus delicti from the Noun Project
Rose by Kmg Design from the Noun Project
Rose by Fardan from the Noun Project
Rose by Vallone Design from the Noun Project
Tulip by Vectors Market from the Noun Project
Bicep by Mello from the Noun Project
crawl by Desbenoit from the Noun Project
Shuriken by Kieu Thi Kim Cuong from the Noun Project
Library by vicentnovoa from the Noun Project
meditation by Adrien Coquet from the Noun Project
busy by Akshar Pathak from the Noun Project
Ok by Thales Muller from the Noun Project
crafted by priyanka from the Noun Project
Art by Vectors Point from the Noun Project
Smooth criminal by Jordy Madueño from the Noun Project
Cigar by Sergey Demushkin from the Noun Project
Warning by Dan Craggs from the Noun Project
prisoners by Gan Khoon Lay from the Noun Project
clay crafting by Smalllike from the Noun Project
pet dog by Hea Poh Lin from the Noun Project
Horse by Smalllike from the Noun Project
Bleeding Heart by Bohdan Burmich from the Noun Project
fairy by Atif Arshad from the Noun Project
skill dead skull by Maxicons from the Noun Project
skill magic fire soul by Maxicons from the Noun Project
Fire by Akhmad taufiq from the Noun Project
abnormal silent by Maxicons from the Noun Project
[[Milking by Andrejs Kirma from the Noun Project|https://thenounproject.com/search/?q=udder&i=3353718]] (icon for duty MilkCowSlave)
[[Cell Preservation by Luis Prado from the Noun Project|https://thenounproject.com/term/semen/10708/]] (icon for duty CumCowSlave)
[[pimp by Gan Khoon Lay from the Noun Project|https://thenounproject.com/search/?q=pimp&i=858486]] (icon for duty Pimp)
[[negotiate by irene hoffman from the Noun Project|https://thenounproject.com/search/?q=diplomacy&i=82393]] (icon for duty RelationshipManager)
[[tree in snow by Graphic Nehar from the Noun Project|https://thenounproject.com/search/?q=snow+pine&i=2940502]] (icon for duty ScoutVale)
[[forest by Vectors Market from the Noun Project|https://thenounproject.com/term/forest/2011305/]] (icon for duty ScoutForest)
[[Castle by Manthana Chaiwong from the Noun Project|https://thenounproject.com/search/?q=castle&i=3373238]] (icon for duty ScoutCity)
[[desert by icon 54 from the Noun Project|https://thenounproject.com/search/?q=desert&i=211188]] (icon for duty ScoutDesert)
[[island by Designs by MB from the Noun Project|https://thenounproject.com/search/?q=island&i=3360037]] (icon for duty ScoutSea)
[[sea dragon by Eucalyp from the Noun Project|https://thenounproject.com/term/sea-dragon/1969020/]] (icon for duty ScoutSea)
[[rescue by visual language from the Noun Project|https://thenounproject.com/search/?q=rescue&i=2762899]] (icon for duty Rescuer)
[[Coins by Gregor Cresnar from the Noun Project|https://thenounproject.com/search/?q=coins+bag&i=780244]] (icon for duty Insurer)
[[Scale by Erik Vullings from the Noun Project|https://thenounproject.com/search/?q=scales&i=873248]] (icon for duty Marketer)
[[leader by Wilson Joseph from the Noun Project|https://thenounproject.com/search/?q=leader&i=509087]] (icon for duty Viceleader)
[[Peace by I Create Stuff from the Noun Project|https://thenounproject.com/search/?q=peace&i=248818]] (icon for duty DamageControlOfficer)
[[workout by Adrien Coquet from the Noun Project|https://thenounproject.com/term/workout/2397485/]] (icon for duty DamageControlOfficer)
[[all seeing eye by Kyle Tezak from the Noun Project|https://thenounproject.com/term/all-seeing-eye/96280/]] (icon for duty Mystic)
[[Nurse by Adrien Coquet from the Noun Project|https://thenounproject.com/term/nurse/2195046/]] (icon for duty Doctor)
[[Sex by Miranda Dempster from the Noun Project|https://thenounproject.com/term/sex/14484/]] (icon for duty VaginalFuckholeSlave)
[[maid by Hea Poh Lin from the Noun Project|https://thenounproject.com/term/maid/584456/]] (icon for duty MaidSlave)
[[flowerpot by Akshar Pathak from the Noun Project|https://thenounproject.com/search/?q=flowerpot&i=947947]] (icon for duty FurnitureSlave)
[[crawl by Marco Fleseri from the Noun Project|https://thenounproject.com/search/?q=crawl&i=485414]] (icon for duty FurnitureSlave)
[[makeup by monkik from the Noun Project|https://thenounproject.com/search/?q=makeup&i=3382821]] (icon for duty TheatreSlave)
[[Ecstacy by Luis Prado from the Noun Project|https://thenounproject.com/search/?q=ecstasy&i=25211]] (icon for duty ServerSlave)
[[Danger by luca fruzza from the Noun Project|https://thenounproject.com/term/danger/1750323/]] (icon for special/danger.png)
[[fairy by Maxicons from the Noun Project|https://thenounproject.com/term/fairy/2157927/]] (icon for dreamy)
[[Donkey by Rfourtytwo from the Noun Project|https://thenounproject.com/term/donkey/2396972/]] (icon for humble)
[[Lion by Javier Triana from the Noun Project|https://thenounproject.com/term/lion/184473/]] (icon for proud)
<h4>Misc:</h4>
[[Danger by luca fruzza from the Noun Project|https://thenounproject.com/term/danger/1750323/]] (special/danger.png)
<h4>Trait icons:</h4>
[[Hero by Andrew J. Young from the Noun Project|https://thenounproject.com/search/?q=leader+speaker&i=195465]] (trait: per_gregarious)
[[fly by Lucas Helle from the Noun Project|https://thenounproject.com/term/fly/3608310/]] (trait: value_low)
[[Voodoo Doll by Sitara Shah from the Noun Project|https://thenounproject.com/term/voodoo-doll/38199/]] (trait: per_masochistic)
[[Pickpocket by Proletkult Graphik from the Noun Project|https://thenounproject.com/term/pickpocket/1368/]] (trait: bg_thief)
[[Needle and Thread by Vectors Point from the Noun Project|https://thenounproject.com/term/needle-and-thread/3243023/]] (trait: bg_artisan)
[[classes archer by Maxicons from the Noun Project|https://thenounproject.com/term/classes-archer/2360003/]] (trait: bg_hunter)
[[classes priest by Maxicons from the Noun Project|https://thenounproject.com/term/classes-priest/2360008/]] (trait: bg_priest)
[[classes engineer by Maxicons from the Noun Project|https://thenounproject.com/term/classes-engineer/2360010/]] (trait: bg_engineer)
[[Spear by Template from the Noun Project|https://thenounproject.com/term/spear/2206287/]] (trait: bg_soldier)
[[game ui money by Maxicons from the Noun Project|https://thenounproject.com/maxicons/collection/role-playing-game/?i=2360125]] (trait: bg_merchant)
[[Question by NeMaria from the Noun Project|https://thenounproject.com/term/question/2774612/]] (trait: per_curious)
[[collar by lipi from the Noun Project|https://thenounproject.com/term/collar/788700/]] (trait: eq_collar)
[[Head by Magicon from the Noun Project|https://thenounproject.com/term/head/489118/]] (trait: training_mindbreak)
[[Dojo Master by Gan Khoon Lay from the Noun Project|https://thenounproject.com/search/?q=master&i=1926810]] (trait: per_dominant)
[[fairy by Maxicons from the Noun Project|https://thenounproject.com/term/fairy/2157927/]] (trait: per_dreamy)
[[Deer by Alexander Skowalsky from the Noun Project|https://thenounproject.com/search/?q=deer&i=257568]] (trait: per_humble)
[[Lion by Icons Producer from the Noun Project|https://thenounproject.com/term/lion/1315674/]] (trait: per_proud)
[[Prostitute by Gan Khoon Lay from the Noun Project|https://thenounproject.com/term/prostitute/682587/]] (trait: bg_courtesan)
<h4>Race, and body parts icons:</h4>
[[cat eyes by Stanislav Levin from the Noun Project|https://thenounproject.com/search/?creator=619&q=cat&i=217677]] (cat eye)
[[cat paw by Olena Panasovska from the Noun Project|https://thenounproject.com/search/?q=paws&i=3292545]] (cat arms)
[[Cat by Jieting Tina Chen from the Noun Project|https://thenounproject.com/term/cat/1643181/]] (cat ears)
[[Tiger by Eight on from the Noun Project|https://thenounproject.com/term/tiger/1917820/]] (cat face)
[[cat ey by Alex Muravev from the Noun Project|https://thenounproject.com/search/?creator=2223634&q=cat&i=882424]] (dragonkin eye)
[[dragon by Icons Producer from the Noun Project|https://thenounproject.com/term/dragon/1387591/]] (dragonkin mouth)
[[Wyvern by Nathan Thomson from the Noun Project|https://thenounproject.com/term/wyvern/60790/]] (dragonkin body)
[[dragon by parkjisun from the Noun Project|https://thenounproject.com/term/dragon/1005199/]] (dragonkin arms)
[[Orc by Darren Northcott from the Noun Project|https://thenounproject.com/search/?q=orc&i=318104]] (orc race)
[[Orc by Icons Producer from the Noun Project|https://thenounproject.com/search/?q=orc&i=1395140]] (orc body)
[[Medieval Orc mask by Gerard Girbes Berges from the Noun Project|https://thenounproject.com/search/?q=orc&i=418857]] (orc mouth)
[[snake head by Vectors Market from the Noun Project|https://thenounproject.com/search/?q=snake+tongue&i=2145934]] (demon mouth)
[[eyeball by Nimal Raj from the Noun Project|https://thenounproject.com/term/eyeball/186322/]] (demon eyes)
<h4>Duty icons:</h4>
[[Milking by Andrejs Kirma from the Noun Project|https://thenounproject.com/search/?q=udder&i=3353718]] (duty MilkCowSlave)
[[Cell Preservation by Luis Prado from the Noun Project|https://thenounproject.com/term/semen/10708/]] (duty CumCowSlave)
[[pimp by Gan Khoon Lay from the Noun Project|https://thenounproject.com/search/?q=pimp&i=858486]] (duty Pimp)
[[negotiate by irene hoffman from the Noun Project|https://thenounproject.com/search/?q=diplomacy&i=82393]] (duty RelationshipManager)
[[tree in snow by Graphic Nehar from the Noun Project|https://thenounproject.com/search/?q=snow+pine&i=2940502]] (duty ScoutPlains)
[[forest by Vectors Market from the Noun Project|https://thenounproject.com/term/forest/2011305/]] (duty ScoutForest)
[[Castle by Manthana Chaiwong from the Noun Project|https://thenounproject.com/search/?q=castle&i=3373238]] (duty ScoutCity)
[[desert by icon 54 from the Noun Project|https://thenounproject.com/search/?q=desert&i=211188]] (duty ScoutDesert)
[[island by Designs by MB from the Noun Project|https://thenounproject.com/search/?q=island&i=3360037]] (duty ScoutSea)
[[sea dragon by Eucalyp from the Noun Project|https://thenounproject.com/term/sea-dragon/1969020/]] (duty ScoutSea)
[[rescue by visual language from the Noun Project|https://thenounproject.com/search/?q=rescue&i=2762899]] (duty Rescuer)
[[Coins by Gregor Cresnar from the Noun Project|https://thenounproject.com/search/?q=coins+bag&i=780244]] (duty Insurer)
[[Scale by Erik Vullings from the Noun Project|https://thenounproject.com/search/?q=scales&i=873248]] (duty Marketer)
[[leader by Wilson Joseph from the Noun Project|https://thenounproject.com/search/?q=leader&i=509087]] (duty Viceleader)
[[Peace by I Create Stuff from the Noun Project|https://thenounproject.com/search/?q=peace&i=248818]] (duty DamageControlOfficer)
[[workout by Adrien Coquet from the Noun Project|https://thenounproject.com/term/workout/2397485/]] (duty DamageControlOfficer)
[[all seeing eye by Kyle Tezak from the Noun Project|https://thenounproject.com/term/all-seeing-eye/96280/]] (duty Mystic)
[[Nurse by Adrien Coquet from the Noun Project|https://thenounproject.com/term/nurse/2195046/]] (duty Doctor)
[[Sex by Miranda Dempster from the Noun Project|https://thenounproject.com/term/sex/14484/]] (duty VaginalFuckholeSlave)
[[maid by Hea Poh Lin from the Noun Project|https://thenounproject.com/term/maid/584456/]] (duty MaidSlave)
[[flowerpot by Akshar Pathak from the Noun Project|https://thenounproject.com/search/?q=flowerpot&i=947947]] (duty FurnitureSlave)
[[crawl by Marco Fleseri from the Noun Project|https://thenounproject.com/search/?q=crawl&i=485414]] (duty FurnitureSlave)
[[makeup by monkik from the Noun Project|https://thenounproject.com/search/?q=makeup&i=3382821]] (duty TheatreSlave)
[[juggler by Isabel Martínez Isabel from the Noun Project|https://thenounproject.com/search/?q=juggler&i=129409]] (duty EntertainmentSlave)
[[master by Adrien Coquet from the Noun Project|https://thenounproject.com/term/master/2560113/]] (duty DominatrixSlave)
<h4>Equipment slots</h4>
[[skill sword mastery by Maxicons from the Noun Project|https://thenounproject.com/search/?creator=3983118&q=sword&i=2360217]] (equip slot: weapon)
[[eyes by luca fruzza from the Noun Project|https://thenounproject.com/search/?creator=3312903&q=eyes&i=1729493]] (equip slot: eyes)
[[foot by Mello from the Noun Project|https://thenounproject.com/search/?creator=2404951&q=foot&i=1676032]] (equip slot: feet)
[[Head by Elisabeta from the Noun Project|https://thenounproject.com/search/?creator=2405554&q=head&i=991299]] (equip slot: head)
[[legs by iconsmind.com from the Noun Project|https://thenounproject.com/search/?creator=438738&q=legs&i=70520]] (equip slot: legs)
[[mouth by Wuppdidu from the Noun Project|https://thenounproject.com/search/?creator=3263277&q=mouth&i=3096701]] (equip slot: mouth)
[[neck by Deemak Daksina from the Noun Project|https://thenounproject.com/search/?creator=2976159&q=neck&i=2206967]] (equip slot: neck)
[[breasts by LAFS from the Noun Project|https://thenounproject.com/search/?creator=1804969&q=breast&i=665665]] (equip slot: nipple)
[[butt by Mark S Waterhouse from the Noun Project|https://thenounproject.com/search/?creator=339310&q=butt&i=706902]] (equip slot: rear)
[[torso by Andrejs Kirma from the Noun Project|https://thenounproject.com/search/?creator=757191&q=torso&i=3353601]] (equip slot: torso)
[[OPEN HANDS by tezar tantular from the Noun Project|https://thenounproject.com/term/open-hands/3657235/]] (equip slot: arms)
[[vagina by Pham Duy Phuong Hung from the Noun Project|https://thenounproject.com/search/?q=genital&i=2073647]] (equip slot: genitals)
[[penis by Sergey Demushkin from the Noun Project|https://thenounproject.com/search/?q=penis&i=392553]] (equip slot: penis)
<h4>Equipment</h4>
[[weapon board sword by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-board-sword/2360303/]] (weapon: broadsword)
[[Spear by Monjin Friends from the Noun Project|https://thenounproject.com/term/spear/1071981/]] (weapon: spear)
[[weapon battle axe by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-battle-axe/2360306/]] (weapon: axe)
[[weapon knife by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-knife/2360328/]] (weapon: dagger)
[[weapon staff by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-staff/2360318/]] (weapon: staff)
[[Sword by uzeir syarief from the Noun Project|https://thenounproject.com/term/sword/1722113/]] (weapon: sword)
[[weapon dual blade by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-dual-blade/2360311/]] (weapon: dual blade)
[[weapon flail by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-flail/2360312/]] (weapon: flail)
[[weapon blade by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-blade/2360305/]] (weapon: scimitar)
[[weapon spear by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-spear/2360313/]] (weapon: spear)
[[weapon magic book by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-magic-book/2360315/]] (weapon: magicbook)
[[weapon mace by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-mace/2360320/]] (weapon: mace)
[[weapon rapier by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-rapier/2360322/]] (weapon: rapier)
[[weapon sickle by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-sickle/2360324/]] (weapon: scythe)
[[weapon wand by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-wand/2360326/]] (weapon: wand)
[[weapon katana by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-katana/2360325/]] (weapon: katana)
[[battle hammer by Maxicons from the Noun Project|https://thenounproject.com/term/battle-hammer/2360330/]] (weapon: hammer)
[[weapon dead wand by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-dead-wand/2360321/]] (weapon: evilwand)
[[weapon halberd by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-halberd/2360319/]] (weapon: halberd)
[[weapon shield by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-shield/2360317/]] (weapon: shield)
[[weapon buckler by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-buckler/2360307/]] (weapon: buckler)
[[weapon claw by Maxicons from the Noun Project|https://thenounproject.com/term/weapon-claw/2360308/]] (weapon: claw)
[[log by Cédric Villain from the Noun Project|https://thenounproject.com/term/log/2349028/]] (weapon: log)
[[Glasses by Ellen from the Noun Project|https://thenounproject.com/term/glasses/2945453/]] (eyes: spectacles)
[[mask by Deemak Daksina from the Noun Project|https://thenounproject.com/search/?q=mask&i=1595651]] (eyes: mask)
[[plague mask by Catherine Please from the Noun Project|https://thenounproject.com/search/?q=plague+mask&i=911576]] (eyes: mask plague)
[[masquerade by Phạm Thanh Lộc from the Noun Project|https://thenounproject.com/term/masquerade/3028783/]] (eyes: masquerade)
[[blind fold by 1516 from the Noun Project|https://thenounproject.com/term/blind-fold/1671787/]] (eyes: blindfold)
[[blinkers by P Thanga Vignesh from the Noun Project|https://thenounproject.com/search/?q=blinkers&i=3081735]] (eyes: pony blinders)
[[neck scarf by Olena Panasovska from the Noun Project|https://thenounproject.com/term/neck-scarf/2091847/]] (mouth: bandana)
[[Penis mouth gag by sobinsergey from the Noun Project|https://thenounproject.com/term/penis-mouth-gag/1130812/]] (mouth: gag dildo)
[[ball gag by 1516 from the Noun Project|https://thenounproject.com/search/?q=ball+gag&i=1671782]] (mouth: gag ball)
[[bit gag by Smalllike from the Noun Project|https://thenounproject.com/search/?q=gag&i=2566893]] (mouth: pony bitgag)
[[equipment helm armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-helm-armor/2360100/]] (head: helm)
[[equipment helm armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-helm-armor/2360086/]] (head: helm heavy)
[[equipment viking helm by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-viking-helm/2360085/]] (head: helm viking)
[[equipment viking helm by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wizard-hat/2360088/]] (head: hat wizard)
[[equipment crown by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-crown/2360075/]] (head: crown)
[[equipment earring by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-earring/2360079/]] (head: earrings)
[[Dog by Mister Pixel from the Noun Project|https://thenounproject.com/term/dog/35537/]] (head: dog hood)
[[equipment wizard cover by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wizard-cover/2360089/]] (neck: cloak)
[[equipment wizard hood by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wizard-hood/2360098/]] (neck: hood)
[[equipment necklace by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-necklace/2360073/]] (neck: necklace)
[[equipment star necklace by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-star-necklace/2360080/]] (neck: star necklace)
[[collar by Andrejs Kirma from the Noun Project|https://thenounproject.com/search/?q=collar&i=2496330]] (neck: collar dog)
[[collar by lipi from the Noun Project|https://thenounproject.com/term/collar/788700/]] (neck: collar)
[[equipment simple ring by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-simple-ring/2360072/]] (arms: ring)
[[equipment ring by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-ring/2360074/]] (arms: ring jeweled)
[[equipment bracelet by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-bracelet/2360099/]] (arms: bracelet)
[[equipment glove by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-glove/2360096/]] (arms: gloves)
[[equipment silmple glove armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-silmple-glove-armor/2360082/]] (arms: gauntlets)
[[equipment glove armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-glove-armor/2360083/]] (arms: gauntlets heavy)
[[handcuff by tulpahn from the Noun Project|https://thenounproject.com/search/?q=handcuff&i=2078171]] (arms: manacles)
[[Boxing Gloves by Creative Stall from the Noun Project|https://thenounproject.com/term/boxing-gloves/177869/]] (arms: dog mitts)
[[equipment shirt by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-shirt/2360097/]] (torso: shirt)
[[equipment wizard robe by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wizard-robe/2360101/]] (torso: robes)
[[equipment silmple body armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-silmple-body-armor/2360084/]] (torso: chestplate)
[[equipment body armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-body-armor/2360076/]] (torso: chestplate heavy)
[[Dog Harness by Ale Santander from the Noun Project|https://thenounproject.com/search/?q=harness&i=1452272]] (torso: dog harness)
[[Nipple Clamps by Elaine Madsen from the Noun Project|https://thenounproject.com/search/?q=nipple+clamps&i=1207159]] (nipple: clamps)
[[Underwear by iconixar from the Noun Project|https://thenounproject.com/search/?q=underwear&i=3482532]] (rear: underwear)
[[thong by Llisole from the Noun Project|https://thenounproject.com/search/?q=thong&i=3650296]] (rear: thong)
[[Butt Plug by 1516 from the Noun Project|https://thenounproject.com/search/?q=butt+plug&i=1671781]] (rear: buttplug)
[[flogger by Smalllike from the Noun Project|https://thenounproject.com/search/?q=flogger&i=2566912]] (rear: pony tailplug)
[[Dildo by Smalllike from the Noun Project|https://thenounproject.com/search/?q=dildo&i=2566902]] (genital: dildo)
[[pipette by Marco Livolsi from the Noun Project|https://thenounproject.com/term/pipette/1233329/]] (genital: dickplug)
[[chastity by Leopold Merleau from the Noun Project|https://thenounproject.com/search/?q=chastity&i=2074956]] (genital: chastity)
[[equipment belt by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-belt/2360093/]] (legs: belt)
[[pants by iconfield from the Noun Project|https://thenounproject.com/search/?q=pants&i=1790099]] (legs: pants)
[[equipment silmple waist armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-silmple-waist-armor/2360091/]] (legs: faulds)
[[equipment waist armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-waist-armor/2360094/]] (legs: faulds heavy)
[[hoof by P Thanga Vignesh from the Noun Project|https://thenounproject.com/term/hoof/3081761/]] (legs: pony hooves / arms: pony hooves)
[[equipment boot by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-boot/2360087/]] (feet: boots)
[[equipment wizard boot by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wizard-boot/2360090/]] (feet: boots fancy)
[[equipment wing boot by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-wing-boot/2360095/]] (feet: boots winged)
[[equipment silmple leg armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-silmple-leg-armor/2360081/]] (feet: greaves medium)
[[equipment leg armor by Maxicons from the Noun Project|https://thenounproject.com/term/equipment-leg-armor/2360077/]] (feet: greaves heavy)
[[Sandal by LSE Designs from the Noun Project|https://thenounproject.com/term/sandal/1245056/]] (feet: sandals)
[[shackle by Robert Bjurshagen from the Noun Project|https://thenounproject.com/search/?q=fetters&i=217216]] (feet: fetters)
<h4>Quest tags</h4>
[[Coins by Gregor Cresnar from the Noun Project|https://thenounproject.com/term/coins/162941/]] Money
[[game ui item bag by Maxicons from the Noun Project|https://thenounproject.com/term/game-ui-item-bag/2360112/]] Item
[[person by Alice Design from the Noun Project|https://thenounproject.com/term/person/1995015/]] Unit
[[item quest scroll by Maxicons from the Noun Project|https://thenounproject.com/term/item-quest-scroll/2360143/]] Quest
[[Death by Adrien Coquet from the Noun Project|https://thenounproject.com/term/death/3194193/]] Danger
[[Prostitute by Luis Prado from the Noun Project|https://thenounproject.com/term/prostitute/16839/]] Order
[[study by Bonegolem from the Noun Project|https://thenounproject.com/term/study/532113/]] Trait
[[Fort by RocketDiction from the Noun Project|https://thenounproject.com/term/fort/1439810/]] Fort
[[Construction by tezar tantular from the Noun Project|https://thenounproject.com/term/construction/2504673/]] Upgrade
[[snowy mountains by Camila Bertoco from the Noun Project|https://thenounproject.com/term/snowy-mountains/207643/]] Vale
[[forest by Eucalyp from the Noun Project|https://thenounproject.com/term/forest/1977259/]] Forest
[[desert by iconfield from the Noun Project|https://thenounproject.com/term/desert/3005227/]] Desert
[[fortification by dDara from the Noun Project|https://thenounproject.com/search/?q=fortification&i=2096245]] City
[[valley scene by Azam Ishaq from the Noun Project|https://thenounproject.com/term/valley-scene/3310171/]] Sea
[[Repeat by Rflor from the Noun Project|https://thenounproject.com/search/?q=repeat&i=287836]] Repeat
[[Planning by emka angelina from the Noun Project|https://thenounproject.com/term/planning/2941604/]] Prep
[[special effects by ProSymbols from the Noun Project|https://thenounproject.com/term/special-effects/1872356/]] Unknown
[[exclamation by iconcheese from the Noun Project|https://thenounproject.com/search/?q=exclamation&i=2686931]] Special
[[shiny by Marie Van den Broeck from the Noun Project|https://thenounproject.com/term/shiny/236213/]] New
[[panorama|https://freesvg.org/panorama]] Vale quest background
[[https://freesvg.org/flat-shaded-mountains-scene|https://freesvg.org/flat-shaded-mountains-scene]] Vale quest background
[[Pier Panorama Silhouette|https://freesvg.org/1548790890]] City quest background
[[Sunset in the desert|https://freesvg.org/sunset-in-the-desert]] Desert quest background
[[Forest Treeline Landscape|https://freesvg.org/1544226855]] Forest quest background
[[Sea waves|https://freesvg.org/sea-waves]] Sea quest background
[[Fence refixed|https://freesvg.org/1471287239]] Fort quest background
[[Old city background|https://freesvg.org/old-city-background]] City quest background
[[shake hand by Wing from the Noun Project|https://thenounproject.com/term/shake-hand/1546237/]] Favor
<h4>Building tags</h4>
[[Key by Eagle Eye from the Noun Project|https://thenounproject.com/term/key/1814655/]] Key Building
[[increase by Alice Design from the Noun Project|https://thenounproject.com/term/increase/1920812/]] Unlocker
[[hiring by Aneeque Ahmed from the Noun Project|https://thenounproject.com/term/hiring/739201/]] Hiring
[[skipping rope by sandra from the Noun Project|https://thenounproject.com/term/skipping-rope/1553122/]] Training
[[officer by Adi Kurniawan from the Noun Project|https://thenounproject.com/term/officer/2051092/]] Duty
[[Binoculars by Andreas Bjurenborg from the Noun Project|https://thenounproject.com/term/binoculars/100530/]] Scout
[[game ui item bag by Maxicons from the Noun Project|https://thenounproject.com/term/game-ui-item-bag/2360112/]] Item
[[amusement park by Lars Meiertoberens from the Noun Project|https://thenounproject.com/term/amusement-park/3390684/]] Recreation
[[bandaid by Alice Design from the Noun Project|https://thenounproject.com/term/bandaid/3408162/]] hospital
[[Laboratory by zidney from the Noun Project|https://thenounproject.com/term/laboratory/1260379/]] Laboratory
[[temple by rivercon from the Noun Project|https://thenounproject.com/term/temple/2382623/]] Temple
[[ofrenda by Eucalyp from the Noun Project|https://thenounproject.com/term/ofrenda/3153721/]] Ritual chamber
<h4>Duty tags</h4>
[[Bed by Vectorstall from the Noun Project|https://thenounproject.com/term/bed/3663437/]] (duty: bedchamber)
[[champion by Mello from the Noun Project|https://thenounproject.com/term/champion/1676552/]] (duty: prestige)
[[utilities by Kevin White from the Noun Project|https://thenounproject.com/term/utilities/3039201/]] (duty: utility)
<h4>Lore tags</h4>
[[Flag by Oksana Latysheva from the Noun Project|https://thenounproject.com/term/flag/787776/]] (lore: race)
[[Book by Jaime Serra from the Noun Project|https://thenounproject.com/term/book/1722861/]] (lore: concept)
[[region by Adrien Coquet from the Noun Project|https://thenounproject.com/term/region/3097495/]] (lore: region)
[[Monument by Sascha Elmers from the Noun Project|https://thenounproject.com/term/monument/95211/]] (lore: location)
<h4>Others</h4>
[[Heart by Cassandra Cappello from the Noun Project|https://thenounproject.com/term/heart/405032/]] (special: lovers)<<set setup.companytemplate = {}>>
<<run new setup.CompanyTemplate(
'player',
'Fort of Chains',
'CompanyTemplatePlayer',
[ /* favor effects */
[],
[],
[],
],
)>>
<<run new setup.CompanyTemplate(
'independent',
'Independent',
'CompanyTemplateIndependent',
[ /* favor effects */
[],
[],
[],
],
)>>
<<set _getslaver = setup.qc.Function(() => {
var preference = State.variables.settings.getGenderPreference(setup.job.slaver);
var unit = setup.unitgroup.all.getUnit(preference);
setup.qc.Slaver('recruit', "", /* is mercenary = */ true).apply({getActorUnit: () => unit});
})>>
<<run new setup.CompanyTemplate(
'humankingdom',
'Kingdom of Tor',
'CompanyTemplateHumanKingdom',
[ /* favor effects */
[
_getslaver,
],
[
_getslaver,
_getslaver,
],
[
_getslaver,
_getslaver,
_getslaver,
],
],
)>>
<<set _scout = setup.qc.OneRandom([
setup.qc.QuestDelay('vale', 2),
setup.qc.QuestDelay('forest', 2),
setup.qc.QuestDelay('city', 2),
])>>
<<run new setup.CompanyTemplate(
'humanvale',
'Humans of the Northern Vale',
'CompanyTemplateHumanVale',
[ /* favor effects */
[
_scout,
],
[
_scout,
_scout,
],
[
_scout,
_scout,
_scout,
],
],
)>>
<<set _scout = setup.qc.OneRandom([
setup.qc.QuestDelay('desert', 1),
setup.qc.QuestDelay('sea', 1),
])>>
<<run new setup.CompanyTemplate(
'humandesert',
'Nomads of the Eastern Desert',
'CompanyTemplateHumanDesert',
[ /* favor effects */
[
_scout,
],
[
_scout,
_scout,
],
[
_scout,
_scout,
_scout,
],
],
)>>
<<set _heal = setup.qc.Function(() => {
State.variables.hospital.healRandom();
})>>
<<run new setup.CompanyTemplate(
'humansea',
'Humans of the Southern Lands',
'CompanyTemplateHumanSea',
[ /* favor effects */
[
_heal,
],
[
_heal,
_heal,
],
[
_heal,
_heal,
_heal,
],
],
)>>
<<set _item = setup.qc.ItemForSale(
'itemmarket',
'all',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.ItemForSaleSingle(
'itemmarket',
'blank_potion',
)>>
<<run new setup.CompanyTemplate(
'elf',
'Elven Council',
'CompanyTemplateElf',
[ /* favor effects */
[
_item,
_item,
_item,
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMENT_PROBABILITY_MEDIUM),
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMETN_PROBABILITY_HIGH),
],
],
)>>
<<set _item = setup.qc.EquipmentForSale(
'sexequipmentmarket',
'all_sex',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.EquipmentForSaleSingle(
'sexequipmentmarket',
'buttplug_master',
)>>
<<run new setup.CompanyTemplate(
'neko',
"Nekos",
'CompanyTemplateNeko',
[ /* favor effects */
[
_item,
_item,
_item,
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMENT_PROBABILITY_MEDIUM),
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMETN_PROBABILITY_HIGH),
],
],
)>>
<<set _item = setup.qc.EquipmentForSale(
'combatequipmentmarket',
'blacksmith',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.EquipmentForSaleSingle(
'combatequipmentmarket',
'combat_arms_master',
)>>
<<run new setup.CompanyTemplate(
'orc',
'Orcish Band',
'CompanyTemplateOrc',
[ /* favor effects */
[
_item,
_item,
_item,
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMENT_PROBABILITY_MEDIUM),
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMETN_PROBABILITY_HIGH),
],
],
)>>
<<set _item = setup.qc.ItemForSale(
'itemmarket',
'furniture_normal',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.ItemForSaleSingle(
'itemmarket',
'f_slaverbed_master',
)>>
<<run new setup.CompanyTemplate(
'werewolf',
'Werewolves of the Northern Vale',
'CompanyTemplateWerewolf',
[ /* favor effects */
[
_item,
_item,
_item,
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMENT_PROBABILITY_MEDIUM),
],
[
_item,
_item,
_item,
setup.qc.DoAll([_rare], setup.FAVOR_MASTER_EQUIPMETN_PROBABILITY_HIGH),
],
],
)>>
<<set _scout = setup.qc.OneRandom([
setup.qc.DoAll([]),
setup.qc.QuestDelay('veteran', 1),
])>>
<<run new setup.CompanyTemplate(
'dragonkin',
'The Land of Dragons',
'CompanyTemplateDragonkin',
[ /* favor effects */
[
_scout,
],
[
setup.qc.QuestDelay('veteran', 1),
],
[
setup.qc.QuestDelay('veteran', 1),
_scout,
],
],
)>>
<<set _boon = setup.qc.Function(() => {
var unit = setup.rngLib.choiceRandom(State.variables.company.player.getUnits({job: setup.job.slaver}));
State.variables.trauma.boonize(unit, 5);
})>>
<<run new setup.CompanyTemplate(
'demon',
'The Great Mist',
'CompanyTemplateDemon',
[ /* favor effects */
[
_boon,
],
[
_boon,
_boon,
],
[
_boon,
_boon,
_boon,
],
],
)>>
<<set _getslave = setup.qc.Function(() => {
var preference = State.variables.settings.getGenderPreference(setup.job.slave);
var unit = setup.unitgroup.all.getUnit(preference);
setup.qc.Slave('recruit', "", /* is mercenary = */ true).apply({getActorUnit: () => unit});
})>>
<<run new setup.CompanyTemplate(
'outlaws',
'Outlaws',
'CompanyTemplateOutlaws',
[ /* favor effects */
[
_getslave,
],
[
_getslave,
_getslave,
],
[
_getslave,
_getslave,
_getslave,
],
],
)>>
<<run new setup.CompanyTemplate(
'bank',
'Tiger Bank',
'CompanyTemplateBank',
[ /* favor effects */
[
setup.qc.Money(500),
],
[
setup.qc.Money(1000),
],
[
setup.qc.Money(1500),
],
],
)>>Your glorious company.Various rabbles scattered around the region with no clear leadership between them.Humans of the <<lore region_vale>>.
If you befriend them, they can supply your fort with leads for quests from the surrounding
vale, forest, and city.The glorious Kingdom of Tor.
Befriending them will let an influx of mercenaries to come from the city and sign up for your company,
which you can hire as slavers.Hardy people of the eastern deserts.
When befriended, these people can supply your company with leads for quests from faraway lands.Mysterious people hailing from beyond the southern seas.
Many are gifted in <<rep setup.trait.magic_light>>, and when befriended
can share their secrets to heal your injured slavers faster.The furry tribes of the <<lore region_vale>>.
Many are excellent carpenters who when befriended would be willing to sell their
furniture wares at your fort. Rumors have it that befriending them enough attract
more skillful carpenters, who can make wondrous furniture...The catfolk of the western forests. Most have lost their fully furry ancestries,
and mostly just sport cat ears and cat tails.
Many can be found peddling in sex toys, and if you befriend them, they might be
willing to sell their wares at your fort.
Rumors have it that they sell the rarest of their toys to their most staunch allies...Intelligent and smart, these sharp-eared people lives in the western forests
together with the nekos.
They are often gifted alchemists, and when befriended might be willing to peddle
the rarest of their potions in your fort...A group of green-skinned brutes living on the eastern deserts.
Orc smiths are famous for having crafted the sturdiest of armors,
and they can be enticed to sell their wares if you befriend them enough.The mighty kingdom of dragonkins in the southern seas.
Not many can befriend these aloof but honorable race, but for those who managed
to do so, they find this exotic species to make very good scouts for rare quests.Residents of the land beyond the mist, they are notorious for leading a perpetually
debauched life.
Befriending them will not be easy at all, but for those that managed such an impossible
endeavor, they are said to be granted wondrous boons in their lives.The general lawbreakers, perfect company for a slaving company such as yours.
If befriending, they will surely be glad to offer your company some of their
freshly captured slaves for sale.The largest banking institution in the region, headquartered at the <<lore location_npc>>.
They are said to offer easy money for those few they consider allies.<<set setup.job = {}>>
<<run new setup.Job('slaver', 'Slaver')>>
<<run new setup.Job('slave', 'Slave')>>
<<run new setup.Job('unemployed', 'Not in company')>><<set setup.qdiff = {}>>
<<run setup.QuestDifficulty.generate()>>/* This is just for legacy purposes. They are not used anymore since content creator was implemented. */
<<set setup.qs = {}>>
<<set setup.qs.job_slaver = setup.qres.Job(setup.job.slaver)>>
<<set setup.qs.job_slave = setup.qres.Job(setup.job.slave)>>
<<set setup.qs.trait_vagina = setup.qres.Trait(setup.trait.vagina_tight)>>
<<set setup.qs.trait_dick = setup.qres.Trait(setup.trait.dick_tiny)>>
<<set setup.qs.trait_breast = setup.qres.Trait(setup.trait.breast_tiny)>>
<<set setup.qs.trait_balls = setup.qres.Trait(setup.trait.balls_tiny)>>
<<set setup.qs.trait_gender_male = setup.qres.Trait(setup.trait.gender_male)>>
<<set setup.qs.trait_gender_female = setup.qres.Trait(setup.trait.gender_female)>><<set setup.skill = []>>
/* 0-4 */
<<run new setup.Skill(
'combat',
'Combat',
'The skill of fighting other humanlikes. ' +
'Helpful on missions where you are expected to fight other humanlikes.',
)>>
<<run new setup.Skill(
'brawn',
'Brawn',
'The measure of physical strength. ' +
'Helpful on missions requiring physical feats, and also helps combat to some extent.',
)>>
<<run new setup.Skill(
'survival',
'Survival',
'Skills for surviving, navigating, and conquering the wilds. ' +
'Helpful for scouting missions, as well as missions that venture far into the wilds.',
)>>
<<run new setup.Skill(
'intrigue',
'Intrigue',
'The art of planning, scheming, and manipulating the stage from the shadows. ' +
'Helpful for missions involving stealth, subterfuge, and infiltrations.',
)>>
<<run new setup.Skill(
'slaving',
'Slaving',
'The skill of efficiently breaking slaves. ' +
'Helpful for training slaves.',
)>>
/* 5-9 */
<<run new setup.Skill(
'knowledge',
'Knowledge',
'The understanding of the world. ' +
'Helpful for most missions, as well as missions requiring expert knowledge.',
)>>
<<run new setup.Skill(
'social',
'Social',
'The skill of manipulating others into doing your bidding with words. ' +
'Helpful for diplomacy missions, as well as missions involving negotiations.',
)>>
<<run new setup.Skill(
'aid',
'Aid',
'The skill of healing and restoring spirit. ' +
'Helpful for rescue as well as missions involving long rounds of combat.',
)>>
<<run new setup.Skill(
'arcane',
'Arcane',
'The understanding of the otherworldly. ' +
'Helpful for mysterious missions.',
)>>
<<run new setup.Skill(
'sex',
'Sex',
'The ancient art of sex. ' +
'Helpful for sexual missions, as well as training slaves to some extent.',
)>><<set setup.title = {}>>
/* base titles */
<<run new setup.Title(
'leader', /* key */
'Leader of the Company', /* name */
'A title held by the leader of this company, you', /* name */
'is the leader of this company', /* unit description */
0, /* slave value */
{
combat: 1,
brawn: 1,
survival: 1,
intrigue: 1,
slaving: 1,
knowledge: 1,
social: 1,
aid: 1,
arcane: 1,
sex: 1,
},
)>>
<<run new setup.Title(
'bodyswapped', /* key */
'Bodyswap Survivor', /* name */
'Has undergone a bodyswap at some point in their life', /* name */
'is occupying a body not necessarily their own', /* unit description */
0, /* slave value */
{
},
)>><<run new setup.Interaction(
'unit_abuse',
'Abuse',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionAbuse',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
<<if !_bedchamber>>
your
<<else>>
your private
<</if>>
<<titlefull _u>>
<<name _u>> over so you can abuse $i.him.
You get things started with an open-handed slap across the
face<<if _blind>>; thanks to the blindfold, $i.he never saw it coming<</if>>.
As $i.he reels in shock and pain, you follow up with
<<if _u.isHasDick()>>
a vicious slap to $i.his <<udick _u>>,
<<elseif _u.isHasVagina()>>
a vicious slap to $i.his exposed clit,
<<else>>
a vicious jerk on $i.his <<unipples _u>>,
<</if>>
which causes $i.him to collapse to the $i.floor in agony.
<<if !_unaked>>
You tell $i.him $i.he has ten seconds to get naked.
<</if>>
<<ustriptorso _u>>
<<ustriplegs _u>>
<<if _verymaso>>
The slap seems to have excited $i.him, seeing $i.his
hard nipples <<if _u.isHasDick()>>and erect cock<<elseif _u.isHasVagina()>>and wet pussy<</if>>,
and $i.his <<ueyes _u>> practically begging for more.
<<elseif _maso>>
$i.He seems to be a bit expectant of what is to come.
<</if>>
<<if !_hasdick>>
<<if !_unaked>>While $i.he strips, you<<else>>You<</if>> don a cruelly large strap-on, earning
<<elseif _hasvagina>>
<<if !_unaked>>While $i.he strips, your<<else>>Your<</if>> stiffening cock rises,
revealing your pussy and earning
<<if _verymaso>>
a sultry look
<<elseif _maso>>
a shy look
<<else>>
a frightened glance
<</if>>
from your victim.
<</if>>
You order $i.him to present
<<if _u.isHasVagina()>> $i.his holes <<else>> $i.his hole<</if>>
to you
and spank $i.him brutally
<<if _maso>>
making $i.his
<<if _u.isHasVagina()>>
pussy
<<elseif _u.isHasDick()>>
dick
<<else>>
nipple
<</if>>
throb
<</if>>
<<if _notrain>>
until $i.he complies.
<<elseif _basic>>
as $i.he slowly complies.
<<else>>
as $i.he rushes to comply.
<</if>>
$i.His <<uass _u>>
growing red under the spanking.
<<if _chastity>>
You rip $i.his dick chastity off $i.him,
though $i.he knows not to be relieved.
$i.His cock is now vulnerable, not free.
<</if>>
<<set _analrape = false>>
<<if _u.isHasTrait(setup.trait.vagina_tight)>>
<<ustripvagina _u>>
The bitch's pussy is tight,
so you ram
<<if !_hasdick>>the strap-on<<else>>your dick<</if>>
into $i.him without preamble and fuck $i.him hard and fast.
<<if _hasvagina && _hasvagina>>
Fortunately for $i.him, this gets you so wet that some of your pussyjuice makes
it down onto your shaft and serves as improvised lube.
<</if>>
$i.His cunt spasms with the pain of the rape.
You cum in no time.
<<elseif _u.isHasTrait(setup.trait.anus_tight)>>
<<ustripanus _u>>
The bitch's butt is tight, so you ram
<<if !_hasdick>>the strap-on<<else>>your dick<</if>>
into $i.him without lubricant and sodomize $i.him as hard as you can without
damaging your property.
<<if _hasvagina && _hasvagina>>
Fortunately for $i.him,
this gets you so wet that some of your pussyjuice makes it down
onto your shaft and serves as improvised lube.
<</if>>
$i.His asshole spasms with the pain of the rape.
You cum explosively.
<<set _analrape = true>>
<<elseif _u.isHasDick() && _u.isHasBalls()>>
You ram
<<if !_hasdick>>the strap-on<<else>>your dick<</if>>
into $i.his butt without lubricant.
As $i.he flinches you announce that $i.he'll be taking part
in giving $i.himself anal pain.
$i.He humps into you lamely,
so you administer a truly agonizing slap to $i.his <<uballs _u>>
<<if _hasdick>> that makes $i.his anal ring stiffen deliciously around your dick<</if>>.
To avoid further punishment
$i.he fucks $i.himself against you almost hard enough
to hurt $i.himself.
<<if _hasvagina && _hasvagina>>
Fortunately for $i.him, this gets you so wet that some of
your pussyjuice makes it down onto your shaft and
serves as improvised lube.
<</if>>
You orgasm explosively.
<<set _analrape = true>>
<<else>>
$i.He's got no special physical targets for abuse,
so you just rape $i.him hard and fast,
raining stinging slaps down on $i.him as you do.
$i.He cries and whimpers; you finish with an explosive orgasm.
<</if>>
This leaves $i.him sobbing on the floor
<<if !_hasdick>>
as you shuck off the strap-on and drop it on $i.his face<<else>>
with cum dripping out of $i.him<</if>>.
<<if _analrape>>
The anal rape leaves $i.him with a sore butthole.
<</if>>
<<if _maso>>
$i.He secretly got off on the pain and humiliation.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_caress',
'Caress',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionCaress',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<set _hasbreasts = $unit.player.isHasBreasts()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _mindbroken = _u.isMindbroken()>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<set _gagged = _u.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and commands
your <<titlefull _u>> <<= _u.getName()>>
to approach you.
<<include 'InteractionKissApproach'>>
You delicately lift $i.his <<uhead _u>>
and touch your fingertips to $i.his chin,
tenderly brushing along the line of $i.his <<umouth _u>>
with the your thumb.
Then, you gently tilt $i.his <<uface _u>> back and lightly touch $i.his lips
with your fingertips.
You use your fingers and thumbs to slowly slide along $i.his mouth,
$i.his chin, $i.his cheeks then around $i.his face.
You use a deft touch to thoroughly explore the shape of
$i.his cheekbones.
Grazing $i.his temple and brushing $i.his forehead
simultaneously, you smoothly motion along $i.his
eyelids and nose and you tenderly stroke $i.his face with both
hands as you take $i.his head
lightly and trace around it, gently massaging
as you go.
You work your way down, slowly and gradually,
along $i.his <<uneck _u>> with one <<uhand $unit.player>>,
then the other,
briefly pausing before continuing your path down to $i.his shoulders
and<<if !_mindbroken>> $i.he starts to gasp as<<else>> starts to shudder as<</if>>
you slide your <<uhands $unit.player>> down $i.his side,
across $i.his
<<if _u.getWings()>>
<<uwings _u>>
<<else>>
back
<</if>>
and along $i.his belly taking every moment to savour
the contours of $i.his <<ubody _u>>
before going back up again to $i.his face.
<<if _mindbroken>>
$i.His posture doesn't change.
$i.He initially only reacts slightly
to your physical touch but then stops reacting completely.
When you stop, $i.his <<ueyes _u>>
track the movements of your <<uhands $unit.player>> briefly but then stare
blankly ahead of $i.his, awaiting further use of $i.his <<ubody _u>>.
<<elseif _friendship >= 800>>
$i.His eyes gradually close and
$i.he slowly leans $i.his head back,
relaxing as $i.he feels your caress.
$i.He gently gasps as $i.he feels your warm <<uarms _u>>.
When you finally stop gently caressing $i.him,
$i.his <<ueyes _u>>
remain closed and $i.his <<umouth _u>>
still in a rapturous shape for a moment before $i.he slowly opens
$i.his eyes and smiles at you,
$i.he has an eager look on $i.his <<uface _u>>.
A <<uhand _u>> reaches dumbly up to $i.his face mimicking your last movements.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"I love you", $i.he says dreamily.
<</if>>
$i.He looks as though $i.he wants much more than your mere caress.
<<elseif _u.isHasTrait(setup.trait.training_dominance_advanced) && _maintraining.getTags().includes('trdominance')>>
As you start to touch $i.his
<<uface _u>>, $i.he smiles at you and takes your <<uhand $unit.player>> in <<theirs _u>>,
following its movements.
$i.He tries hard to stop $i.himself from losing $i.himself in your masterful <<uhands $unit.player>>.
$i.He takes $i.his tendency towards sexual dominance right up to
the edge of insubordination, when $i.he starts to caress your <<uface _u>> in turn.
When you finally stop, $i.his eyes are closed and $i.he's smiling.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", $i.he says cheerfully.
<</if>>
$i.He looks at you, $i.his <<ueyes _u>> almost begging you to give $i.his more than your mere caress.
<<elseif _hasdick && _u.isHasTrait(setup.trait.training_oral_advanced) && _maintraining.getTags().includes('troral')>>
$i.He stiffens at your touch but slowly
relaxes to your fingers on $i.his face.
As you move your fingers along $i.his lips,
$i.he reacts almost as though $i.he's receiving oral.
$i.He starts to gently suck your fingers, moaning into your <<uhand $unit.player>> and pressing
$i.his <<ubody _u>> lewdly against your <<ubreast $unit.player>>.
<<if !_chastity>>
$i.He achieves a weak orgasm before you stop caressing $i.him.
<</if>>
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", $i.he says lustfully.
<</if>>
$i.He looks at you as if $i.he wants more than your <<uhands $unit.player>> touching $i.him.
<<elseif _friendship >= 500>>
$i.He accepts your touch with devotion,
leaning $i.his head back at your gentle caress along $i.his face.
$i.He leans $i.his <<ubody _u>> forward,
pressing $i.himself against you,
and you feel the intense heat from $i.his <<ubody _u>> against your <<ubreast $unit.player>>.
$i.He gradually closes $i.his <<ueyes _u>>
and when you finally stop, $i.he runs
$i.his <<uhand _u>> delightfully across $i.his face where you last touched $i.his,
an euphoric look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"I love you", $i.he says jubilantly.
<</if>>
$i.He looks at you longingly, almost as if $i.he's bursting
to say that $i.he wants more than your mere caress.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He accepts your touch willingly.
As you are so close to $i.him,
you sense considerable turmoil in the $i.man;
$i.he's doing $i.his duty as a slave by complying with your wishes,
and is probably struggling with the mixture of resistance,
obedience and perhaps even devotion forced to the forefront of
$i.his mind by your touch across $i.his face.
When you finally move your <<uhand $unit.player>> away,
$i.his <<ueyes _u>>
gaze into yours searchingly,
looking for answers that are not there.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
$i.He asks hesitantly, "I-is that it?".
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
$i.He shakes at your touch fearfully.
As you move your <<uhand $unit.player>> along $i.his unresisting face,
$i.his eagerness to avoid punishment leads $i.his
to stiffen, $i.his nervousness is made apparent.
You continue stroking $i.his cheek,
enjoying $i.his fear, and the physical intimacy slowly
does its work. $i.He starts to relax, $i.his resistance easing
and $i.his eyes start to close.
When finally move your <<uhand $unit.player>> away, $i.he looks at you for a long moment,
$i.his <<ueyes _u>>
darting up at you, before visibly catching $i.himself with
a reminder that $i.he's a slave and you're $i.his owner.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
$i.He asks hesitantly, "I-is that it?".
<</if>>
<<elseif _friendship <= -100>>
$i.He is nearly frozen with fear,
and does not resist as you start to caress $i.his face.
In fact, $i.he barely reacts at all.
$i.He stares at you as you move your fingers across
$i.his stiff face, but it's like touching a statue.
$i.He is so filled with terror that $i.he remains
stiff even as it becomes clear to $i.his you're not going to hurt $i.him.
When you bore of touching the $i.man and move your <<uhand $unit.player>> away,
$i.he stares at you in utter incomprehension.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
$i.He asks nervously, "I-is that it?".
<</if>>
Then $i.he cringes.
<<else>>
$i.He reflexively turns away from you, but you catch $i.his <<uhead _u>>
with one <<uhand $unit.player>> and slowly but gently move your other <<uhand $unit.player>> along $i.his face.
Spluttering, $i.he leans backwards, but
you tip forward with $i.him and pin $i.him against the walls of the $i.locgeneral,
not stopping your gentle touch on $i.his head.
$i.He tries to wriggle out of your grasp desperately, but
$i.his struggles slowly subside as $i.he
realizes that you're not taking this any farther.
When you bore of it and move your <<uhand $unit.player>> away, $i.he
stares at you in utter incomprehension.
His eyes demand an answer: is that it?
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_embrace',
'Embrace',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionEmbrace',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<set _hasbreasts = $unit.player.isHasBreasts()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _mindbroken = _u.isMindbroken()>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<set _gagged = _u.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and command
your <<titlefull _u>>
<<= _u.getName()>>
to approach you.
<<include 'InteractionKissApproach'>>
You walk around $i.him and put your <<uhands $unit.player>> around $i.his <<ubody _u>>,
to gently pull $i.him close towards you
and then wrap your arms around $i.his shoulders.
When you press your hips against <<theirs _u>>,
<<if _basic>>letting $i.him lean while taking the weight of $i.him against you<<else>>
$i.he tries to lean away from you, pushing against your <<uarms _u>><</if>>.
You lovingly squeeze $i.him in your <<ubody $unit.player>> within the long, cradling embrace of your <<uarms _u>>.
<<if _u.isHasTrait(setup.trait.breast_tiny)>>
You feel $i.his erect nipples against your
<<uarms $unit.player>>
as you move your arms down around $i.his <<ubreast _u>>.
<<else>>
You move your arms down around $i.his <<ubreast _u>>
<<if _u.isHasTrait(setup.trait.muscle_strong)>> and feel $i.his rippling muscles<</if>>.
<</if>>
<<if _basic>>
You take your time to stay in this position, feeling $i.his
heart beat against you.
$i.He starts to breathe faster before you keep one arm wrapped around
$i.him as you move to $i.his front.
<<else>>
As you move to $i.his front, with one arm still around $i.him,
$i.he again tries to break away but you keep $i.him held tightly and
you whisper the alternatives to $i.him, reminding $i.him.
<</if>>
You wrap your arms around $i.his back
as you press $i.his <<ubreast _u>> against your
<<ubreast $unit.player>>.
<<if _mindbroken>>
Her posture doesn't change.
$i.He initially only reacts slightly to your physical touch but eventually
$i.he relaxes in the warmth of the your embrace against $i.him.
You know that this may only be a physiological reaction,
nothing more. For a brief moment you think you
detect a spark of life in $i.his dull eyes
but just as quickly, it is gone.
When you stop, $i.his <<ueyes _u>> track the movements of your <<uhands $unit.player>>
briefly but then $i.he stares blankly ahead of $i.him,
not understanding what is happening.
<<elseif _friendship >= 800>>
In the warmth of your embrace,
$i.he turns towards you,
$i.his passionate <<ueyes _u>> staring intently at your <<uface $unit.player>>.
$i.He leans closer to you and kisses you as you hold $i.him.
Her heart beats faster and then gradually slows as $i.he grows accustomed
to your <<ubody $unit.player>> against $i.his <<ubody _u>>.
Eventually, $i.he relaxes totally and $i.his eyes gradually close,
melting in your <<uarms $unit.player>>.
When you finally stop and relax your embrace,
$i.his eyes remain closed and $i.his <<umouth _u>> still in a
rapturous shape for a moment before $i.he slowly opens
$i.his eyes and smiles at you with a blissful look on $i.him <<uface _u>>.
$i.His <<uhand _u>> reaches to your <<uarms $unit.player>> and $i.he strokes them longingly.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"I love you", $i.he says dreamily.
<</if>>
$i.He looks at you,
almost begging you with $i.him eyes that $i.he wants much more than a mere embrace.
<<elseif _u.isHasTrait(setup.trait.training_dominance_advanced) && _maintraining.getTags().includes('trdominance')>>
In your soft, warm embrace,
$i.he tries hard to stop $i.himself from losing $i.himself in your arms.
$i.He starts to embracing you in $i.him <<uarms _u>> as well.
When you gently squeeze $i.him in your <<uarms $unit.player>>,
$i.he breathes more heavily and starts to lovingly squeeze you as well,
$i.his tendency towards sexual dominance encouraging $i.him to
compete with you in embraces against each other.
When you finally stop and relax your embrace, $i.his
eyes are closed and $i.he's smiling blissfully.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", $i.he says cheerfully.
<</if>>
$i.He eagerly looks at you, $i.his eyes almost seem to say that
$i.he wants you to give $i.him more than a mere hug.
<<elseif _friendship >= 500>>
$i.He sighs devotedly in your <<uarms $unit.player>>
and slowly relaxes.
$i.He turns towards you, $i.his doting <<ueyes _u>>
staring intently at your <<uface $unit.player>>.
You feel $i.his heart beating faster against your <<ubreast $unit.player>>
as you softly squeeze your arms tighter.
$i.His <<uhands _u>> reach to your <<uarms $unit.player>>
and $i.he strokes them longingly as you squeeze.
$i.He gradually closes $i.his eyes as $i.he leans $i.his <<ubody _u>> against yours,
melting in your warm embrace,
and you feel the intense heat from $i.his <<ubody _u>> against your <<ubreast $unit.player>>.
When you finally stop, $i.he reaches to your <<uface $unit.player>>
with $i.his <<uhand _u>> and gently strokes your cheek, a euphoric
look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"I love you", $i.he says elatedly.
<</if>>
$i.He looks at you longingly, almost as if $i.he's bursting to say
that $i.he wants more than a mere embrace.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He willingly gives $i.himself up to
your embracing arms.
As you are so close to $i.him,
you sense considerable uneasiness in the $i.man;
$i.he's doing $i.him duty as a slave by complying with your wishes,
and is probably struggling with the mixture of resistance, obedience and perhaps
even devotion forced to the forefront of $i.his mind by your
soft embrace against $i.his <<ubody _u>>.
$i.He gradually closes $i.his eyes in the feeling of your gentle <<uarms $unit.player>>.
When you finally stop and relax your embrace,
$i.his <<ueyes _u>> open to gaze puzzlingly at you.
Even though $i.he has accepted life as a sex slave,
$i.he looks as though $i.he is unsure of what to make of
this non-sexual physical contact.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He asks hesitantly, "I-is that it?".
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
$i.He shakes at your touch fearfully.
As you softly press $i.his trembling body against you,
$i.his eagerness to avoid punishment leads $i.him
to stiffen in your <<uarms $unit.player>>.
While $i.he continues to shudder,
you continue embracing $i.him,
enjoying $i.his fear, and the physical intimacy slowly does its work.
$i.He starts to relax, $i.his resistance easing and $i.his eyes start to close.
When you relax your arms for a moment,
$i.he opens $i.him eyes to look at you for a long moment,
$i.him eyes darting up to your <<uface $unit.player>>,
before visibly catching $i.himself with a reminder that $i.he's a slave and you're $i.him owner.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He asks hesitantly, "I-is that it?".
<</if>>
<<elseif _friendship <= -100>>
$i.He is nearly frozen with fear,
and does not resist as you start to squeeze your <<uarms $unit.player>>
around $i.him.
In fact, $i.he barely reacts at all.
$i.He stares at your arms as they continue squeezing, but
it's like touching a statue.
$i.He is so filled with terror that $i.he
remains stiff even as it becomes clear to $i.him
you're not going to hurt $i.him.
When you bore of embracing the still
$i.man
and release $i.him,
$i.he stares at you in utter incomprehension.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He asks nervously, "I-is that it?".
<</if>>
Then $i.he cringes, unsure of what you are going to do next.
<<else>>
$i.He reflexively tries to break free from your <<uarms $unit.player>>,
but you keep $i.him wrapped in them.
Shuddering, $i.he desperately leans away from you,
but you tip forward with $i.him and pin $i.him against the walls of the $i.locgeneral,
continuing your hold on $i.him.
$i.He tries to wriggle out of your grasp desperately, but
$i.his struggles slowly subside as $i.he
realizes that you're not taking this any farther.
When you bore of it and release $i.him,
$i.he stares at you in utter incomprehension.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He splutters, "Is that it?".
<</if>>
$i.He shakes uncontrollably, apprehensive at what you are going to do next.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fist_ass',
'Fist ass',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFistAss',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_anal_advanced),
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and called
your <<titlefull _u>>
<<= _u.getName()>> over, telling $i.him that you are planning to use
$i.his <<uanusall _u>>.
<<ustripanus _u>>
You tell $i.him to grab $i.his ankles.
$i.He complies,
relaxing $i.his
<<uanus _u>>
in the expectation of
<<if _hasdick>> your cock<<else>>a strap-on<</if>>,
but starts with surprise when she feels two warm,
lubricated fingers slide into $i.his rectum.
<<if _u.isHasTrait(setup.trait.anus_gape)>>
$i.He moans when you add a third, and grunts when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point,
thumb included, $i.he understands what's coming and relaxes completely.
The wide part of your <<uhand $unit.player>>, at the knuckles, squeezes
into $i.him without much trouble,
and $i.he lets out a huge sigh.
When you start to fuck $i.him, though, $i.he collapses to $i.him knees,
begging you to fist $i.his hole without mercy
$i.He starts to frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>jerk off<</if>>.
<<if _chastity>>
$i.His chastity device prevents $i.him from reaching climax.
<<else>>
$i.He manages to climax promptly,
$i.his overstimulated sphincter helping, no doubt.
<</if>>
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>, gasping.
You haul $i.him so $i.he can
<<if _hasdick>>
suck you off
<<if _hasvagina>>
and
<</if>>
<</if>>
<<if _hasvagina>>
eat you out
<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
<</if>>
drooling and groaning,
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun,
but by the time you finish $i.he's already
<<if _chastity>>
masturbating
<<else>>
rubbing $i.his chastity device
<</if>>
again.
<<elseif _u.isHasTrait(setup.trait.anus_loose)>>
$i.He grunts when you add a third, and begins to beg when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point,
thumb included, $i.he understands what's coming and does $i.his best to relax.
The wide part of your <<uhand $unit.player>>, at the knuckles, squeezes into $i.him
after some effort on your part and squealing on $i.his part.
When you withdraw it and press it back in, slowly
starting to fist fuck $i.him ass, though, $i.he collapses to $i.his knees,
sobbing in a mixture of pain and pleasure.
$i.He starts to frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>jerk off<</if>>.
<<if _chastity>>
$i.His chastity device prevents $i.him from reaching climax.
<<else>>
$i.He manages to climax eventually.
<</if>>
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>, gasping.
You haul $i.him so $i.he can
<<if _hasdick>>
suck you off
<<if _hasvagina>>
and
<</if>>
<</if>>
<<if _hasvagina>>
eat you out
<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
<</if>>
drooling and weeping,
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun,
but by the time you finish $i.he's
<<if _chastity>>
tentatively masturbating
<<else>>
rubbing $i.his chastity device
<</if>>
again.
<<else>>
$i.He squeals when you add a third,
and begins to shamelessly beg for mercy when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point, thumb included,
$i.he understands what's coming and collapses to $i.his knees,
begging you not to be gentle and not ruin $i.his favorite hole.
$i.He starts to frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>jerk off<</if>>.
As $i.he works $i.his sphincter relaxes bit by bit,
and you advance your fist up $i.his butt.
$i.He screams in surprise and relief
when your knuckles finally make it
<<if _chastity>>
in.
<<else>>
in, and achieves a crying orgasm shortly thereafter.
<</if>>
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>,
moaning incoherently.
You haul $i.him so $i.he can
<<if _hasdick>>
suck you off
<<if _hasvagina>>
and
<</if>>
<</if>>
<<if _hasvagina>>
eat you out
<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
crying
<<else>>
sobbing
<</if>>
quietly in pain and disarray,
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun,
and by the time you finish $i.he hasn't yet worked up
the courage to touch $i.his backdoor.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fist_vagina',
'Fist vagina',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFistVagina',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.Trait(setup.trait.training_vagina_advanced),
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and called
your <<titlefull _u>>
<<= _u.getName()>> over, telling $i.him that you are planning to use
$i.his <<uvaginaall _u>>.
<<ustripvagina _u>>
You slide up behind $i.him and run a possessive
hand down to finger $i.his pussylips.
She compliantly cocks $i.his hips backward for you,
and is surprised to find a couple of warm, lubricated fingers
rather than
<<if _hasdick>>your cock<<else>>a strap-on<</if>>
sliding into $i.his ready cunt.
<<if _u.isHasTrait(setup.trait.vagina_gape)>>
$i.He moans when you add a third,
and grunts when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point, thumb included, $i.he understands
what's coming and relaxes completely.
The wide part of your <<uhand $unit.player>>, at the knuckles, squeezes into $i.him without much trouble,
and $i.he lets out a huge sigh.
When you start to fuck $i.his huge cunt with your <<uhand $unit.player>>, though,
$i.he collapses to $i.his knees, whining and begging nonverbally.
$i.he starts to frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>
jerk off
<</if>>
$i.He manages to climax promptly,
$i.his big vagina squeezing your <<uarms $unit.player>> strongly.
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>, gasping,
the collapse giving you a good view into $i.his open, pink-walled channel.
You haul $i.him back so $i.he can
<<if _hasdick>> suck you off <<if _hasvagina>>and<</if>><</if>>
<<if _hasvagina>>eat you out<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
<</if>>
drooling and groaning,
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun, but by the time you finish
$i.he's replaced your <<uhand $unit.player>> with $i.his own.
<<elseif _u.isHasTrait(setup.trait.vagina_loose)>>
$i.He grunts when you add a third, and begins to beg when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point,
thumb included,
$i.he understands what's coming and hurriedly gets down on $i.his knees to
present a more comfortable angle.
The wide part of your <<uhand $unit.player>>, at the knuckles,
squeezes into $i.him after some effort on your part and squealing on $i.his part.
$i.He starts to frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>jerk off<</if>>.
<<if _chastity>>
$i.His chastity device prevents $i.him from reaching climax.
<<else>>
$i.He manages to climax eventually.
<</if>>
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>,
gasping, the collapse giving you a good view into $i.his currently-gaping, pink-walled channel.
You haul $i.him so $i.he can
<<if _hasdick>>
suck you off
<<if _hasvagina>>
and
<</if>>
<</if>>
<<if _hasvagina>>
eat you out
<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
<</if>>
drooling and weeping,
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun,
but by the time you finish $i.he's
<<if _chastity>>
tentatively masturbating
<<else>>
rubbing $i.his chastity device
<</if>>
again.
<<else>>
$i.He squeals when you add a third,
and begins to shamelessly beg for mercy when you insert a fourth.
When $i.he feels you form your <<uhand $unit.player>> into a point,
thumb included, $i.he understands what's coming and collapses to $i.his knees,
begging you to be gentle.
$i.he frantically
<<if _chastity>>
rub $i.his taint
<<elseif !_u.isHasDick()>>
rub $i.himself
<<else>>jerk off<</if>>,
hoping to relax a little.
As $i.he works $i.his pussy relaxes bit by bit,
and you advance your fist into $i.his womanhood.
$i.He screams in surprise and relief when your knuckles finally make it
<<if _chastity>>
in, and achieves a crying orgasm shortly thereafter.
<<else>>
in.
<</if>>
$i.He slumps to the ground when you withdraw your <<uhand $unit.player>>,
moaning incoherently,
the collapse giving you a good view into $i.him currently-gaping, pink-walled channel.
You haul $i.him around so $i.he can
<<if _hasdick>>
suck you off
<<if _hasvagina>>
and
<</if>>
<</if>>
<<if _hasvagina>>
eat you out
<</if>>.
$i.He complies,
<<if _u.isHasTrait(setup.trait.per_submissive)>>
submissively
<</if>>
crying quietly with overstimulation,
all pretense of
all pretense of <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>> gone.
It doesn't take long, since that was quite a lot of fun,
but by the time you finish $i.he's gingerly massaging $i.his loosened cunt.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fondle_butt',
'Fondle butt',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFondleButt',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can fondle $i.his butt as well as $i.his <<uanusall _u>>.
<<ustripanus _u>>
<<if _u.isMindbroken()>>
You instruct $i.him to present $i.his buttocks
and anus but $i.he remains still and unresponsive.
Talking to a broken mind is pointless.
You reach around and grab $i.his buttocks
buttocks before rubbing along them,
feeling the shape of $i.his ass with your fingers and squeezing gently.
$i.He reacts to your initial touch as you rub fingers around $i.his <<uanus _u>>,
but you understand it is only physiological.
You continue to move around $i.his posterior gently reaching to touch
your fingertips against $i.his sphincter while rubbing $i.his ass at the same time.
You circle around $i.his anus but $i.he remains still.
You keep squeezing $i.his buttocks tenderly -
first one, then the other and then both but $i.he is like a doll in your grasp.
You pull $i.his <<ubody _u>> closer towards you by $i.his buttocks,
turn $i.him around and bend $i.him over by $i.location.
You look at $i.his rear while you squeeze $i.his cheeks and rub them with your firm <<uhands $unit.player>>.
You explore the contours of $i.his posterior with both your eyes and <<uhands $unit.player>>,
then look at $i.his <<uanus _u>>
as you trace it with your fingers and thumb.
Eventually, you decide to stop but $i.he
remains in position over by $i.location until you stand $i.him up yourself.
<<elseif _u.isMasochistic()>>
$i.He approaches you eagerly and waves $i.his butt,
then presents $i.his anus in front of you,
spreading $i.his butt cheeks towards you with
$i.his <<uarms _u>> before turning to face you.
You reach around and firmly grab $i.his
buttocks with both <<uhands $unit.player>>.
$i.He gasps as you smack both of $i.his cheeks,
you feel the shape of $i.his ass with your fingers and squeeze hard.
$i.He moans with arousal as you spank $i.his
buttocks.
$i.He looks longingly into your eyes as you continue to move around
$i.his posterior,
pinching with your fingers and slapping with your palms before reaching
to touch your fingertips against $i.his sphincter.
$i.He moans and quivers slightly when you you rub fingers around
$i.his <<uanus _u>>.
$i.He starts to wiggle $i.his ass while you circle around $i.his anus,
not breaking contact with $i.him with your fingers.
You keep squeezing $i.his buttocks firmly - first one, then the other
and then finally both.
$i.He can't resist gyrating $i.his hips in arousal while in your grasp.
You strongly pull $i.his <<ubody _u>>
closer towards you by $i.his buttocks,
turn $i.him around and push $i.him
down to bend $i.him over by $i.location.
$i.He pretends to be unwilling but cannot disguise
$i.his obvious joy, being a masochist as $i.he is.
You see that $i.his rear has reddened in your rough play
and you continue to squeeze $i.his cheeks hard and spank them with your firm <<uhands $unit.player>>.
$i.He moans harder at you squeezing along the contours of $i.his
posterior with both your <<uhands $unit.player>> and at $i.his butthole as you push against
it with your fingers and thumb.
Eventually you decide to stop and $i.he squeals with delight after you give $i.his
buttocks a few hard smacks for good measure.
$i.His <<uface _u>> is in ecstasy as $i.he stands and turns to face you,
gently rubbing the red spots on $i.his buttocks and looking at you hungrily as if $i.he wants more.
<<elseif _u.isHasTrait(setup.trait.training_none)>>
You instruct $i.him to present $i.his buttocks and anus.
Opposed to the thought of your <<uhands $unit.player>> groping $i.his,
$i.he tries to step back,
but you catch $i.him and pull $i.his <<ubody _u>>
closer to you as you reach around and grab $i.his
buttocks.
$i.He tries to grab your wrists to keep them away but $i.he cannot resist for long.
You start rubbing along $i.his cheeks,
feeling the shape of $i.his ass with your fingers and squeezing gently.
$i.He tries to break out of your grasp as you rub fingers around $i.his <<uanus _u>>.
$i.He writhes as you continue to move around $i.his posterior gently reaching to touch your
fingertips against $i.his sphincter while rubbing $i.his ass at the same time.
$i.He struggles to stay still while you circle around $i.his anus,
not breaking contact with $i.him with your fingers.
You look at $i.his <<uface _u>> and $i.he has shut $i.his <<ueyes _u>>,
trying not to think about what's happening to $i.his butt.
This only encourages you to continue.
You keep squeezing $i.his buttocks tenderly -
first one, then the other and then finally both and
$i.he can't help but quiver while in your grasp.
You pull $i.his <<ubody _u>> closer towards you by $i.his buttocks,
turn $i.him around and push $i.him down,
bending $i.him over by $i.location while $i.he tries to push away.
You look at $i.his rear while you squeeze $i.his cheeks and rub
them with your firm <<uhands $unit.player>>.
You wander along the outline of $i.his posterior with both your eyes and <<uhands $unit.player>>,
then look at $i.his <<uanus _u>>
butthole as you trace it with your fingers and thumb.
Eventually, you decide to stop.
$i.He slowly stands and looks in your <<ueyes $unit.player>>,
as though almost demanding answers.
$i.He looks apprehensive about what you will do next.
<<elseif _u.isHasTraitExact(setup.trait.training_obedience_basic) && _u.isHasDick()>>
You instruct $i.him to present $i.his anus.
$i.He complies without comment, standing in front of you.
You reach around and grab $i.his
buttocks.
$i.His <<udick _u>>
cannot stop twitching as you start rubbing along $i.his cheeks,
feeling the shape of $i.his ass with your fingers and squeezing gently.
You rub your fingers around $i.his <<uanus _u>>.
$i.He writhes as you continue to move around $i.his posterior
gently reaching to touch your fingertips against $i.his sphincter
while rubbing $i.his ass at the same time.
$i.He struggles to stay still while you circle around $i.his anus with your fingers.
You look at $i.his <<uface _u>> and $i.he has shut $i.his <<ueyes _u>>,
trying not to get aroused by your touch on $i.his butt.
This only encourages you to continue.
You keep squeezing $i.his buttocks tenderly - first one,
then the other and then finally both and
$i.he can't help but quiver while in your grasp.
You pull $i.his <<ubody _u>> closer towards you by $i.his buttocks,
turn $i.him around and push $i.him down, bending $i.him over by $i.location.
You look at $i.his rear while you squeeze $i.his cheeks and rub them with your firm <<uhands $unit.player>>.
You wander along the outline of $i.his posterior with both your eyes and <<uhands $unit.player>>,
then look at $i.his <<uanus _u>>
as you trace it with your fingers and thumb.
Eventually, you decide to stop and $i.he looks up at you quizzically,
unsure about what you will do next.
<<elseif _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
You instruct $i.his to present $i.his
anus.
$i.He hesitates but eventually stands in front of you showing
$i.his buttocks before presenting $i.his <<uanus _u>>
to you and turning to face you.
You reach around and grab $i.his
buttocks.
You start rubbing along $i.his cheeks,
feeling the shape of $i.his ass with your fingers and
squeezing gently.
As you rub your fingers around $i.his anus,
$i.he starts to relax.
$i.He quivers as you continue to move around $i.his posterior gently
reaching to touch your fingertips against $i.his sphincter
while rubbing $i.his ass at the same time.
$i.He purses $i.his lips while you circle around $i.his anus
with your fingers.
You look at $i.his <<uface _u>> and is looking back at you doe-eyed,
trying but failing not to get aroused by your soft touch on $i.his butt.
You keep squeezing $i.his buttocks tenderly -
first one, then the other and then finally both and $i.he
can't help but let out a moan while in your grasp.
You pull $i.his <<ubody _u>> closer towards you by $i.his buttocks,
turn $i.him around and push $i.him down, bending $i.him over your desk.
You look at $i.his rear while you squeeze $i.his cheeks and rub them with your firm <<uhands $unit.player>>.
You wander along the outline of $i.his posterior with both your eyes and <<uhands $unit.player>>,
then look at $i.his butthole as you trace it with your fingers and thumb.
Eventually, you decide to stop and $i.he looks up into your eyes
longingly, as if $i.he wants more.
<<else>>
You instruct $i.him to present $i.his anus.
$i.He eagerly stands in front of you showing $i.his buttocks
before happily presenting $i.his <<uanus _u>> to you,
spreading $i.his butt cheeks and turning to face you.
You reach around and grab $i.his buttocks.
You start rubbing along $i.his cheeks,
feeling the shape of $i.his ass with your fingers and squeezing gently.
As you rub your fingers around $i.his anus,
$i.he sighs audibly.
$i.He moans as you continue to move around
$i.his posterior gently reaching to touch your fingertips against $i.his sphincter while rubbing
$i.his ass at the same time.
$i.He quivers while you circle around $i.his anus with your fingers.
You look at $i.his <<uface _u>> and is looking back at you longingly,
getting aroused by your continued touch on $i.his butt.
You keep squeezing $i.his buttocks tenderly - first one, then the other
and then finally both and $i.he can't help but let out a moan while in your grasp.
You pull $i.his <<ubody _u>> closer towards you by $i.his buttocks,
turn $i.him around and push $i.him down, bending $i.him over by $i.location.
You look at $i.his rear while you squeeze $i.his cheeks and rub them with your firm <<uhands $unit.player>>.
You wander along the outline of $i.his posterior with both your eyes and <<uhands $unit.player>>,
then look at $i.his butthole as you trace it with your fingers and thumb.
Eventually, you decide to stop and $i.he looks up into your eyes ecstatically,
as $i.he stands, eager for more.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fondle_chests',
'Fondle chest',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFondleChests',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<set _hasbreasts = $unit.player.isHasBreasts()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _mindbroken = _u.isMindbroken()>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<set _gagged = _u.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can fondle $i.his <<ubreastall _u>>.
<<ustriptorso _u>>
<<ustripnipple _u>>
<<set _unippleequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.nipple)>>
<<if _u.isMindbroken()>>
Like a doll,
$i.he dumbly remains still,
watching you place your <<uhands $unit.player>> on $i.his <<ubreast _u>> without any real interest.
You place your <<uhands $unit.player>> on $i.his
<<if _u.isHasTrait(setup.trait.breast_titanic)>>
monster tits, bouncing their weighty mass in your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_huge)>>
huge tits, bouncing them up and down in your <<uhands $unit.player>>,
while simultaneously rubbing $i.his nipples with your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_large)>>
large tits, jiggling them enticingly with your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_medium)>>
cute breasts, cupping them and gently playing with $i.his
<<unipples _u>> between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_tiny)>>
flat breasts, gently playing with $i.his hard, erect nipples between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.muscle_extremelystrong)>>
monster pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to play with $i.his nipples,
<<elseif _u.isHasTrait(setup.trait.muscle_verystrong)>>
extremely muscular pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to $i.his nipples
<<elseif _u.isHasTrait(setup.trait.muscle_strong)>>
muscular pecs, feeling and tracing its contour before sliding your <<uhands $unit.player>> to $i.his nipples
<<else>>
flat chests, gently playing with $i.his hard nipples between your fingers and thumbs,
<</if>>
teasing them and pulling them gently towards you.
Moving your <<uhead $unit.player>> close to $i.his <<ubreasts _u>>,
you nuzzle on a nipple with your lips and even lick
it with your tongue.
Then you alternate, nibbling with your teeth on the other nipple.
You squeeze the tips of $i.his nipples
with your thumbs and fingers and tweak them in your fingertips,
then you dab $i.his nipples with your thumbs,
flicking them in different directions. $i.
He moans at the continued stimulation of $i.his <<ubreasts _u>> and nipples,
but you know that this is nothing but purely physiological response of
$i.his <<ubody _u>>.
When you finally stop,
$i.he does nothing but
remains in position over by $i.location until you stand send your <<uadjphys _u>> toy back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_dominance_advanced) && _maintraining.getTags().includes('trdominance')>>
$i.He eagerly comes over to you, puffing $i.his <<ubreast _u>> out at you.
When you place your <<uhands $unit.player>> on $i.his chests,
she places $i.his <<uhands _u>> on your <<ubreast $unit.player>> in turn,
$i.his tendency towards sexual dominance encouraging $i.his to compete with you in
fondling each other.
You both alternate between taking your <<umouth $unit.player>> to $i.his
<<unipples _u>> and $i.his <<umouth _u>> to yours,
gently nuzzling and nibbling while simultaneously fondling each other all the while.
Both of you continue to passionately lick, nibble, stroke and fondle one other until tiredly,
she slows down.
When you eventually stop, she looks up at you happily.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", she says tiredly.
<</if>>
$i.He looks at you with $i.his <<ueyes _u>>, smiling.
<<elseif _u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist')>>
$i.He hurriedly comes over to you,
to stand between you and $i.location.
You lean over while $i.he lies down upon it, face up, with $i.his
<<ubreasts _u>> facing upwards to the air.
$i.He gasps as you slap your <<uhands $unit.player>> on $i.his
<<if _u.isHasTrait(setup.trait.breast_titanic)>>
monster tits, bouncing their weighty mass
roughly with all your might before sliding your <<uhands $unit.player>> to
$i.his nipples,
<<elseif _u.isHasTrait(setup.trait.breast_huge)>>
huge tits, bouncing them roughly up and down in your <<uhands $unit.player>>,
while simultaneously flicking $i.his nipples hard
with your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_large)>>
large tits, jiggling them enticingly with your <<uhands $unit.player>>
<<elseif _u.isHasTrait(setup.trait.breast_medium)>>
cute breasts, cupping them and roughly playing with $i.his
<<unipples _u>> between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_tiny)>>
flat breasts, roughly playing with $i.his hard, erect nipples between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.muscle_extremelystrong)>>
monster pecs, feeling its shape and hardness and roughly playing with them before sliding your <<uhands $unit.player>> to play with $i.his nipples,
<<elseif _u.isHasTrait(setup.trait.muscle_verystrong)>>
extremely muscular pecs, feeling its shape and hardness and roughly playing with them before sliding your <<uhands $unit.player>> to $i.his nipples
<<elseif _u.isHasTrait(setup.trait.muscle_strong)>>
muscular pecs, feeling and tracing its contour and roughly playing with them before sliding your <<uhands $unit.player>> to $i.his nipples
<<else>>
flat chests, roughly playing with $i.his hard nipples between your fingers and thumbs,
<</if>>
teasing them and firmly pulling them in all directions.
Moving your <<uhead $unit.player>> close to $i.his <<ubreasts _u>>,
you put your lips on a nipple and close your lips firmly around it to pull strongly on it.
Then you alternate, bite hard with your teeth on the other.
You firmly squeeze the tips of $i.his <<unipples _u>>
with your thumbs and fingers and tweak them in your fingertips,
then you push $i.his nipples with your thumbs,
flicking them hard in different directions.
$i.He moans passionately at the continued punishment of $i.his <<ubreast _u>> and nipples.
Your rough play leaves red marks on $i.his <<ubreasts _u>> and nipples and $i.he
becomes even more aroused.
When you finally stop $i.he rubs the marks on $i.his <<ubreasts _u>> with $i.his <<uarms _u>>,
an ecstatic look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"Please punish me more", $i.he says quietly.
<</if>>
$i.He looks at you longingly, hungry for more.
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic) && _u.isHasTrait(setup.trait.per_submissive)>>
$i.He eagerly comes over to you,
to stand between you and $i.location.
You lean over while $i.he submissively
lies down upon it,
face up,
with $i.his <<ubreast _u>> facing upwards to the air.
You place your <<uhands $unit.player>> on $i.his
<<if _u.isHasTrait(setup.trait.breast_titanic)>>
monster tits, bouncing their weighty mass in your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_huge)>>
huge tits, bouncing them up and down in your <<uhands $unit.player>>,
while simultaneously rubbing $i.his nipples with your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_large)>>
large tits, jiggling them enticingly with your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_medium)>>
cute breasts, cupping them and gently playing with $i.his
<<unipples _u>> between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_tiny)>>
flat breasts, gently playing with $i.his hard, erect nipples between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.muscle_extremelystrong)>>
monster pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to play with $i.his nipples,
<<elseif _u.isHasTrait(setup.trait.muscle_verystrong)>>
extremely muscular pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to $i.his nipples
<<elseif _u.isHasTrait(setup.trait.muscle_strong)>>
muscular pecs, feeling and tracing its contour before sliding your <<uhands $unit.player>> to $i.his nipples
<<else>>
flat chests, gently playing with $i.his hard nipples between your fingers and thumbs,
<</if>>
teasing them and pulling them gently towards you.
Moving your <<uhead $unit.player>> close to $i.his <<ubreasts _u>>,
you nuzzle on a nipple with your lips and even lick
it delicately with your tongue.
Then you alternate, gently nibbling with your teeth on the other nipple.
You squeeze the tips of $i.his nipples
with your thumbs and fingers and tweak them in your fingertips,
then you dab $i.his nipples with your thumbs,
flicking them in different directions.
$i.He moans passionately at the continued stimulation of $i.his <<ubreasts _u>>
and nipples.
When you finally stop, $i.he reaches up to your <<uface $unit.player>> with $i.his <<uhand _u>>
and lovingly strokes it, a blissful look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"Please don't stop", $i.he says quietly.
<</if>>
$i.He looks at you longingly, eager for more.
<<elseif _friendship >= 500>>
$i.He devotedly comes over to you,
to stand between you and $i.location.
Her doting <<ueyes _u>>
looking in yours.
You place your <<uhands $unit.player>> on $i.his
<<if _u.isHasTrait(setup.trait.breast_titanic)>>
monster tits, bouncing their weighty mass in your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_huge)>>
huge tits, bouncing them up and down in your <<uhands $unit.player>>,
while simultaneously rubbing $i.his nipples with your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_large)>>
large tits, jiggling them enticingly with your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_medium)>>
cute breasts, cupping them and gently playing with $i.his
<<unipples _u>> between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_tiny)>>
flat breasts, gently playing with $i.his hard, erect nipples between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.muscle_extremelystrong)>>
monster pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to play with $i.his nipples,
<<elseif _u.isHasTrait(setup.trait.muscle_verystrong)>>
extremely muscular pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to $i.his nipples
<<elseif _u.isHasTrait(setup.trait.muscle_strong)>>
muscular pecs, feeling and tracing its contour before sliding your <<uhands $unit.player>> to $i.his nipples
<<else>>
flat chests, gently playing with $i.his hard nipples between your fingers and thumbs,
<</if>>
teasing them and pulling them gently towards you.
Moving your <<uhead $unit.player>> close to $i.his <<ubreast _u>>,
you nuzzle on a nipple with your lips and even lick it
delicately with your tongue.
Then you alternate, gently nibbling with your teeth on the
other nipple.
You squeeze the tips of $i.his <<unipples _u>>
with your thumbs and fingers and tweak them in your fingertips,
then you dab $i.his nipples with your thumbs, flicking
them in different directions.
$i.He moans passionately at the continued stimulation
of $i.his <<ubreasts _u>> and nipples.
When you finally stop, $i.he reaches up to your <<uface $unit.player>>
with $i.his <<uhand _u>> and lovingly strokes it, a blissful look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"I love you", $i.he says euphorically.
<</if>>
$i.He looks at you longingly, eager for more.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He willingly gives $i.himself up to you.
You place your <<uhands $unit.player>> on $i.his
<<if _u.isHasTrait(setup.trait.breast_titanic)>>
monster tits, bouncing their weighty mass in your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_huge)>>
huge tits, bouncing them up and down in your <<uhands $unit.player>>,
while simultaneously rubbing $i.his nipples with your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_large)>>
large tits, jiggling them enticingly with your <<uhands $unit.player>>,
<<elseif _u.isHasTrait(setup.trait.breast_medium)>>
cute breasts, cupping them and gently playing with $i.his
<<unipples _u>> between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.breast_tiny)>>
flat breasts, gently playing with $i.his hard, erect nipples between your fingers and thumbs,
<<elseif _u.isHasTrait(setup.trait.muscle_extremelystrong)>>
monster pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to play with $i.his nipples,
<<elseif _u.isHasTrait(setup.trait.muscle_verystrong)>>
extremely muscular pecs, feeling its shape and hardness before sliding your <<uhands $unit.player>> to $i.his nipples
<<elseif _u.isHasTrait(setup.trait.muscle_strong)>>
muscular pecs, feeling and tracing its contour before sliding your <<uhands $unit.player>> to $i.his nipples
<<else>>
flat chests, gently playing with $i.his hard nipples between your fingers and thumbs,
<</if>>
teasing them and pulling them towards you.
Moving your <<uhead $unit.player>>
close to $i.his <<ubreasts _u>>, you nuzzle on a
nipple with your lips and even lick it delicately with your tongue.
Then you alternate, gently nibbling with your teeth on the other nipple.
You squeeze the tips of $i.his nipples with
your thumbs and fingers and tweak them in your fingertips,
then you dab $i.his nipples with your thumbs,
flicking them in different directions.
You sense considerable uneasiness in the $i.man;
$i.he's doing $i.his duty as a slave by complying with your wishes,
and is probably struggling with the mixture of resistance, obedience
and perhaps even devotion forced to the forefront of $i.his mind
by your <<uhands $unit.player>> on $i.his <<ubreasts _u>>.
$i.He gradually loses $i.himself in the feeling of your gentle <<uhands $unit.player>>.
When you finally stop, $i.he gazes puzzlingly at you.
Even though $i.he has accepted life as a sex slave,
$i.he looks as though $i.he is unsure of what to make of this.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He asks hesitantly, "I-is that it?".
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
$i.He shakes at your touch fearfully.
As you softly place your <<uhands $unit.player>> on $i.his <<ubreast _u>>,
$i.his eagerness to avoid punishment leads $i.him
to stiffen as you start to massage them.
$i.He finally starts to relax as you continue to
massage $i.his <<ubreasts _u>> with your <<uarms $unit.player>>,
playing with $i.his <<unipples _u>> so that they
become hard in between your fingers and thumbs.
You squeeze the tips of $i.his nipples with your
thumbs and fingers and tweak them in your fingertips, then you
dab $i.his nipples with your thumbs,
flicking them in different directions.
<<if _u.isHasTrait(setup.trait.breast_tiny)>>
When you
firmly pull $i.his nipples milk streams out of them and $i.he lets out a gasp.
<</if>>
Her body softens as $i.his eyes dart up to your face,
before visibly catching $i.himself with a reminder that $i.he's a slave and you're $i.his owner.
When you finally stop, $i.he shivers but says nothing,
uneasy at what you are going to do next.
<<elseif _friendship <= -100>>
$i.He is nearly frozen with fear, and does not resist as you start to massage $i.his
<<ubreast _u>>
In fact, $i.he barely reacts at all.
$i.He stares at you, but $i.he remains motionless.
$i.He is so filled with terror that $i.he remains stiff even
as it becomes clear to $i.his you're not going to hurt $i.him.
$i.He trembles as you continue to massage $i.his <<ubreasts _u>>
with your <<uarms $unit.player>>,
playing with $i.his <<unipples _u>> so that they become hard in between your fingers and thumbs.
You squeeze the tips of $i.his nipples with your thumbs and
fingers and tweak them in your fingertips,
then you dab $i.his nipples with your thumbs,
flicking them in different directions.
When you firmly pull $i.his nipples,<<if _u.isHasTrait(setup.trait.breast_tiny)>>
milk streams out of them and<</if>> $i.he gasps audibly,
unable to contain $i.himself at your relentless assault upon $i.his areola.
When you put your mouth on $i.his <<ubreasts _u>>
to nibble on $i.his nipples,
$i.he bites $i.his lip, desperately trying to hide $i.his
arousal at $i.his stimulated nipples.
When you finally stop, $i.he shakes uncontrollably
but says nothing, apprehensive at what you are going to do next.
<<else>>
$i.He tries to refuse you,
so you push $i.him down on $i.location and squeeze $i.his
<<ubreasts _u>> in your <<uarms $unit.player>>.
$i.He tries to push you off $i.his <<ubreasts _u>>.
but you continue to massage them,
playing with $i.his <<unipples _u>> so that they become hard in between your
fingers and thumbs.
You squeeze the tips of $i.his nipples with your thumbs and
fingers and tweak them in your fingertips, then you dab $i.his
nipples with your thumbs, flicking them in different directions. When you firmly pull
$i.his nipples,<<if _u.isHasTrait(setup.trait.breast_tiny)>>
milk streams out of them and<</if>>
$i.he gasps audibly, unable to contain $i.himself at
your relentless assault upon $i.his areola.
When you put your mouth on $i.his <<ubreasts _u>> to nibble on $i.his nipples,
$i.he bites $i.his lip, desperately trying to hide $i.his arousal at
$i.his stimulated nipples. When you finally stop,
$i.he shakes uncontrollably, apprehensive at what you are going to do next.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fondle_breasts',
'Fondle dick',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFondleDick',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_dick,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<set _hasbreasts = $unit.player.isHasBreasts()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _mindbroken = _u.isMindbroken()>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<set _uballs = _u.isHasBalls()>>
<<loadinteractioncommon _u>>
<<if _chastity>>
Remove <<= $u.getName()>>'s chastity if you want to fondle $i.his dick.
<<else>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can fondle $i.his <<udickall _u>><<if _uballs>> and <<uballs _u>><</if>>.
<<ustripdick _u>>
<<set _udickequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.genital)>>
<<if _mindbroken>>
Like a toy,
$i.he dumbly remains still,
watching your <<uhands $unit.player>> move towards $i.his <<ubody _u>> without any real interest.
You gently trace your fingers along $i.his <<udick _u>>
before taking it gently in one <<uhand $unit.player>> and tenderly stroking your <<uhand $unit.player>> along its shaft
<<if _uballs>>
, while simultaneously cupping $i.hirs <<uballs _u>>
<</if>>.
You firmly wrap your fingers,
thumb and palm around $i.his dick,
rhythmically stroking along with both <<uhands $unit.player>>,
starting slow but gradually increasing the speed of your movements.
You occasionally squeeze the tip and head of
$i.his dick between your fingers and thumb.
$i.His prick stiffens like a rod
in your <<uhands $unit.player>> and you continue your expert strokes
along the erect shaft but,
except for the cockmilk leaking out of
$i.his dick, $i.he does not respond.
Since $i.he is mindbroken,
$i.his responses to you are purely physiological and your actions
have no affect on $i.him mentally.
You place your <<uadjphys _u>> toy back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic) && _u.isHasTrait(setup.trait.per_submissive)>>
$i.He comes submissively over,
smiling a little submissive smile,
and points $i.his dick towards you.
You gently trace your fingers along $i.his <<udick _u>>
before taking it gently in one <<uhand $unit.player>> and tenderly stroking your <<uhand $unit.player>> along its shaft
<<if _uballs>>
, while simultaneously cupping $i.his <<uballs _u>>
<</if>>.
You firmly wrap your fingers, thumb and palm around $i.his dick,
rhythmically stroking along with both <<uhands $unit.player>>, starting slow
but gradually increasing the speed of your movements.
You occasionally squeeze the tip and head of $i.his
dick between your fingers and thumb.
$i.His prick stiffens like a rod in your <<uhands $unit.player>>
and you continue your expert strokes along the erect shaft.
Soon, $i.his movements indicate that $i.he is orgasming.
$i.He shudders and leaks $i.him cockmilk as $i.he orgasms in your <<uhands $unit.player>>.
You made $i.him lick $i.his own cum clean from your <<uhand $unit.player>> before you send your
<<uadjphys _u>> slave back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist')>>
$i.He hurriedly comes over to you, to stand between you and $i.location.
You lean over while $i.he lies down upon it,
face up, with $i.his dick pointed towards you. $i.He gasps when you slap $i.his <<udick _u>>
with your <<uhand $unit.player>>.
You firmly grab it and tightly squeeze it
with your fingers, stroking your <<uhand $unit.player>> along its
<<if _uballs>>
shaft,
while simultaneously slapping $i.his <<uballs _u>>
with your other <<uhand $unit.player>>.
You pulled $i.his balls uncomfortably from its resting position, earning
you an ecstatic moan from your masochistic slave.
<<else>>
shaft.
<</if>>
You firmly wrap your fingers,
thumb and palm around $i.his dick,
roughly stroking along with both <<uhands $unit.player>>,
starting slow but gradually increasing the speed of your movements.
You occasionally slap and swat $i.his dick, as well as
squeezing and pinching the tip and head of
$i.his dick between your fingers and thumb.
$i.His prick stiffens like a rod in your <<uhands $unit.player>>
and you continue your expert manhandling of the erect shaft.
Your rough play leaves red marks on $i.his <<ubreasts _u>>
and nipples and $i.he becomes even more aroused.
Soon, $i.his movements indicate that $i.he is orgasming.
$i.He shudders and leaks $i.his cockmilk as $i.he orgasms
in your <<uhands $unit.player>>.
You made $i.him lick $i.his own cum clean from your <<uhand $unit.player>> before you send your
<<uadjphys _u>> slave back to $i.his
resting place, the $i.slavebed in the $i.room.
$i.He rubs the marks on $i.his dick and balls with $i.his <<uhands _u>>,
an ecstatic look on $i.his <<uface _u>>.
$i.He looks at you longingly, hungry for more.
<<elseif _notrain>>
$i.He clearly dislikes the thought of getting $i.his dick fondled by you.
$i.His lower lip quivers with trepidation as
$i.he watches your <<uhands $unit.player>> move towards $i.him.
$i.He has no choice but to obey if $i.he wants to avoid punishment.
$i.He gasps and shakes as you gently trace along $i.his <<udick _u>>
before taking it gently in one <<uhand $unit.player>> and tenderly stroking your <<uhand $unit.player>> along its
<<if _uballs>>
shaft, while simultaneously cupping $i.his <<uballs _u>>.
<<else>>
shaft.
<</if>>
You firmly wrap your fingers,
thumb and palm around $i.his dick,
rhythmically stroking along with both <<uhands $unit.player>>,
starting slow but gradually increasing the speed of your movements.
You occasionally squeeze the tip and head of $i.his
dick between your fingers and thumb.
$i.His prick stiffens like a rod in your <<uhand $unit.player>> and you
continue your expert strokes along the erect shaft.
$i.He grabs your wrist with $i.his <<uhands _u>>
and tries to stop it from moving but is unable
to and despite $i.his resistant pulling against you.
$i.He bites $i.his lip but $i.he cannot help but moan.
Soon $i.he shudders and leaks $i.his cockmilk as $i.he orgasms in your <<uhands $unit.player>>.
$i.He looks at you shamefully as you stop moving your <<uhands $unit.player>> and send your
<<uadjphys _u>> slave back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _basic>>
$i.He obeys silently,
standing in front of you as you move your <<uhands $unit.player>> towards $i.him.
You gently trace your fingers along $i.his <<udick _u>>
before taking it gently in one <<uhand $unit.player>> and tenderly stroking your <<uhand $unit.player>> along its
<<if _uballs>>
shaft, while simultaneously cupping $i.his <<uballs _u>>.
<<else>>
shaft.
<</if>>
You firmly wrap your fingers, thumb and palm around $i.his dick,
rhythmically stroking along with both <<uhands $unit.player>>, starting
slow but gradually increasing the speed of your movements.
You occasionally squeeze the tip and head of $i.his
dick between your fingers and thumb.
$i.His prick stiffens like a rod in your <<uhands $unit.player>>
and you continue your expert strokes along the erect shaft.
$i.He looks into your eyes furtively while $i.he grabs
your wrists with $i.his <<uhands _u>>, moving to match your <<uhand $unit.player>> movements.
$i.He moans and shudders, leaking $i.his cockmilk as
$i.he orgasms in your <<uhands $unit.player>>.
You made $i.him lick $i.his own cum clean from your <<uhand $unit.player>>.
$i.He dutifully looks at you as you stop moving your <<uhands $unit.player>> and send you
<<uadjphys _u>> slave back to $i.his
resting place, the $i.slavebed in the $i.room.
<<else>>
$i.He devotedly comes over and gives you an impassioned kiss.
$i.He smiles and points $i.his dick towards you.
You gently trace your fingers along $i.his <<udick _u>>
before taking it gently in one <<uhand $unit.player>> and tenderly stroking your <<uhand $unit.player>> along its
<<if _uballs>>
shaft, while simultaneously cupping $i.his <<uballs _u>>.
<<else>>
shaft.
<</if>>
You firmly wrap your fingers, thumb and palm around
$i.his dick,
rhythmically stroking along with both <<uhands $unit.player>>,
starting slow but gradually increasing the speed of your movements.
You occasionally squeeze the tip and head of $i.his
dick between your fingers and thumb.
$i.His prick stiffens like a rod in your <<uhands $unit.player>> and you
continue your expert strokes along the erect shaft.
$i.He begs you not to stop. Soon, $i.he moans and $i.his
movements indicate that $i.he is about to orgasm.
$i.He shudders and leaks $i.his cockmilk as $i.he orgasms in your <<uhands $unit.player>>.
$i.He eagerly licks $i.his own cum clean from your <<uhand $unit.player>>.
$i.He looks at you passionately as you stop moving your <<uhands $unit.player>> send your
<<uadjphys _u>> slave back to $i.his
resting place, the $i.slavebed in the $i.room.
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fondle_vagina',
'Fondle vagina',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFondleVagina',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can fondle $i.his <<uvaginaall _u>>.
<<ustripvagina _u>>
<<if _u.isMindbroken()>>
Like a doll,
$i.he dumbly remains still,
watching your <<uhands $unit.player>> move towards $i.him without any real interest.
You gently trace along $i.his labia
with your outstretched fingers, strumming up and down the edges of $i.his pussylips,
then softly rub your fingers along the inner walls with a tender touch,
starting slow but gradually increasing the speed of your movements.
You occasionally flick $i.his clit
and rub it with your fingertips as your <<uhand $unit.player>> nears it.
Except for the pussy juices trickling down $i.his <<ulegs _u>>,
$i.he does not respond.
Since $i.he is mindbroken,
$i.his responses to you are purely physiological and your actions have no affect on $i.his mentally.
You leave your <<uadjphys _u>> toy back in $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic) && _u.isHasTrait(setup.trait.per_submissive)>>
$i.He comes submissively over,
smiling a little submissive smile,
and points $i.his pussy towards you.
You gently trace along $i.his labia
with your outstretched fingers,
strumming up and down the edges of $i.his pussylips,
then softly rub your fingers along the inner walls with a tender touch,
starting slow but gradually increasing the speed of your movements.
You occasionally flick $i.his clit
and rub it with your fingertips as your <<uhand $unit.player>> nears it.
$i.He begs you not to stop as $i.he looks into your <<ueyes $unit.player>>
expectantly as $i.he shudders in an orgasm.
<<elseif _u.isHasTrait(setup.trait.training_none)>>
$i.He tries to refuse,
so you push the disobedient slave down over the
$i.bed
as you move your <<uhands $unit.player>> towards $i.him.
You gently trace along $i.his labia
with your outstretched fingers, strumming up and down the edges of $i.his pussylips,
then softly rub your fingers along the inner walls with a tender touch,
starting slow but gradually increasing the speed of your movements.
$i.He grabs your wrist to try to stop you but $i.he is unable to.
You occasionally flick $i.his clit
and rub it with your fingertips as your <<uhand $unit.player>> nears it,
despite $i.his resistant pulling against you.
$i.He bites $i.his lip but $i.he cannot help but moan
and $i.he shudders in an orgasm. $i.He looks at you shamefully as you stop moving your <<uhand $unit.player>>.
<<elseif _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
$i.He obeys silently, standing in front of you as you move your <<uhands $unit.player>> towards $i.him.
You gently trace along $i.his labia
with your outstretched fingers,
strumming up and down the edges of $i.his pussylips,
then softly rub your fingers along the inner walls with a tender touch,
starting slow but gradually increasing the speed of your movements.
You occasionally flick $i.his clit
and rub it with your fingertips as your <<uhand $unit.player>> nears it.
$i.He looks into your eyes furtively while $i.he grabs your wrist
with $i.his <<uhand _u>> and $i.he squeezes $i.his <<ulegs _u>> togetther as $i.he moans
and shudders in an orgasm. $i.He dutifully looks at you as you stop moving your <<uhand $unit.player>>.
<<else>>
$i.He devotedly comes over and gives you an impassioned kiss.
$i.He smiles and points $i.his pussy towards you.
You gently trace along $i.his labia
with your outstretched fingers, strumming up and down the edges of $i.his pussylips,
then softly rub your fingers along the inner walls with a tender touch,
starting slow but gradually increasing the speed of your movements.
You occasionally flick $i.his clit
and rub it with your fingertips as your <<uhand $unit.player>> nears it.
$i.He squeezes $i.his <<ulegs _u>> lightly against your <<uhand $unit.player>> as
$i.he moans and shudders in orgasmic bliss.
$i.He looks at you passionately as you stop moving your <<uhand $unit.player>>.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fuck_anus',
'Fuck ass',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFuckAnus',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
over so you can fuck $i.his <<uanusall _u>>.
<<ustripanus _u>>
<<if setup.UnitTitle.getMainTraining(_u).getTags().includes('pony') ||
setup.UnitTitle.getMainTraining(_u).getTags().includes('pet')>>
$i.His training dictates that $i.he must crawl along on all fours, which makes $i.his anus readily available.
<</if>>
<<if _u.isMindbroken()>>
You instruct $i.him to present $i.his anus.
$i.He dully kneels and spreads $i.his buttocks<<if !_hasdick>>as you don a strap-on<</if>>.
You spit on $i.his hole and ram <<if !_hasdick>>it<<else>>your <<udick $unit.player>><</if>>
up $i.his butt.
$i.His butthole spasms as you assrape $i.him,
<<if !_hasdick>>an amusing sight<<else>>squeezing your dick nicely<</if>>.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
Automatic responses give $i.him an erection,
which $i.his chastity makes so uncomfortable that $i.he spasms.
This cycle continues repeatedly, $i.his rectum squeezing unconsciously each time.
<<else>>
Despite $i.his mental deficiency,
the prostate stimulation gives $i.him an erection anyway.
<</if>>
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_none)>>
You instruct $i.him to present $i.him anus<<if !_hasdick>> as you don a strap-on<</if>>.
Horrified, $i.he tries to back away, but you catch
$i.him and throw $i.him on $i.location.
$i.He tries to shield $i.his asshole,
but you pin $i.his <<uarms _u>> behind
$i.him with one <<uhand $unit.player>>,
spit on $i.his hole,
and ram your <<if !_hasdick>>fake dick<<else>><<udick $unit.player>><</if>>
up $i.his butt with the other <<uhand $unit.player>>.
$i.His butthole spasms as you assrape $i.him,
<<if !_hasdick>>an amusing sight<<else>>squeezing your dick nicely<</if>>.
<<if _u.isHasDick()>>
Despite $i.his unwillingness to be sodomized, the prostate stimulation
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
starts to give $i.him an erection,
which $i.his dick chastity makes horribly uncomfortable.
$i.He bucks with the pain,
$i.his asshole spasming delightfully.
<<else>>
gives $i.him an erection.
$i.He's mortified that $i.he would get hard while being anally raped.
<</if>>
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_anal_basic) || _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He kneels on the couch
with $i.his butt facing you, back strongly arched to angle $i.his rectum for
more comfortable anal coupling
<<if !_hasdick>>; you don a strap-on and rub a little lubricant into $i.his rear<</if>>.
You take your time and fuck $i.his butthole for a good long while.
<<if _u.isHasTraitExact(setup.trait.anus_tight)>>
$i.His ass is so tight that $i.he has to concentrate on relaxing for you.
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
$i.His experienced ass feels great.
<<else>>
$i.His asspussy is so loose you can pound it as hard as you like.
<</if>>
$i.He moans as $i.he rubs $i.his <<ubody _u>> and his
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
caged dick, and brings $i.himself to orgasm before you.
<<set _orgasmed = true>>
<<else>>
hardon, which prevents $i.him from reaching orgasm before you.
<<set _orgasmed = false>>
<</if>>
<<else>>
clit, and brings $i.himself to orgasm before you.
<<set _orgasmed = true>>
<</if>>
<<if !_hasdick>>
The sight of $i.him gasping and shaking $i.his way through
<<if _orgasmed>>
an anal orgasm
<<else>>
what would normally be an orgasm without the chastity device,
<</if>>
brings you to climax yourself,
and you shove yourself against $i.his <<ubody _u>>
with enough force to give the slave's sensitized hole a final brutal stretching.
<<else>>
$i.His orgasmic rectal spasms squeeze your cock and you blow your load inside $i.his ass.
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic) && !_u.isHasVagina() && _u.isHasTraitExact(setup.trait.anus_tight)>>
You instruct $i.him to present $i.him anus<<if !_hasdick>> as you don a strap-on<</if>>.
$i.He knows a male slave takes it up the butt,
and lies on the couch next to your desk with $i.his <<ulegs _u>> in the air,
spreading $i.his buttocks with $i.his <<uarms _u>>.
You take your time and fuck $i.his butthole for a good long while
<<if _u.isHasDick() && !_u.isHasTrait(setup.trait.eq_chastity)>>
as $i.his erect <<udick _u>> waves in the air.
This gives you enough time to stroke $i.him until
$i.he gets aroused despite $i.his discomfort with anal.
$i.He doesn't orgasm, but $i.he's getting accustomed to $i.his asshole being used as a sexual organ.
<</if>>
<<else>>
You instruct $i.him to present $i.him anus<<if !_hasdick>> as you don a strap-on<</if>>.
$i.He hesitates but eventually lies on $i.location with $i.his <<ulegs _u>>
in the air, spreading $i.his buttocks with $i.him <<uarms _u>>.
You take your time and fuck $i.his butthole for a good long while.
<<if _u.isHasTraitExact(setup.trait.anus_tight)>>
$i.His ass is so tight that $i.he winces with anal pain
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
$i.His experienced ass takes your <<if !_hasdick>>fake dick<<else>>cock<</if>> without trouble
<<else>>
$i.His asspussy is so loose you can pound it as hard as you like
<</if>>
<<if _u.isHasDick()>>
as $i.his erect dick waves in the air.
<<else>>
as it substitutes for $i.his pussy.
<</if>>
$i.He gets aroused despite $i.his discomfort with anal, though $i.he doesn't orgasm.
<</if>>
<<if _hasdick>>
<<if _u.isHasTraitExact(setup.trait.anus_gape)>>
Your cum falls out of $i.his gaping hole.
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
Cum flows out of $i.his gaped butthole.
<<else>>
$i.His still-tight ass keeps your load inside $i.him.
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fuck_butt',
'Fuck both holes',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFuckButt',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can use
<<if _u.isHasVagina()>>
$i.his holes.
<<else>>
$i.his <<uanusall _u>>.
<</if>>
<<ustripanus _u>>
<<ustripvagina _u>>
<<if _u.isMindbroken()>>
Since $i.his mind is gone,
$i.his <<ubody _u>> is all yours to use as a <<racelow _u>> sex doll.
You throw $i.him over the couch and amuse yourself with
$i.him for a while;
$i.his <<ubody _u>> retains its instinctual responses, at least.
You finish inside $i.his <<uanus _u>> and brought your toy back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He kneels on the floor
so you can take $i.him at will<<if !$unit.player.isHasDick()>>, and don a strap-on<</if>>.
You finger $i.his <<uanus _u>> while
<<if _u.isHasVagina()>>
fucking $i.his pussy
<<else>>
frotting $i.him
<</if>>
for a bit and then switch to $i.his now-ready anus.
<<if _u.isHasTraitExact(setup.trait.anus_tight)>>
$i.His ass is so tight that you have to work yourself in.
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
Your <<if $unit.player.isHasDick()>><<udick $unit.player>><<else>>fake cock<</if>> slides easily up $i.his ass.
<<else>>
You slide into $i.his already-gaping asspussy with ease.
<</if>>
You fuck $i.him there for a while before repeatedly
pulling out and stuffing yourself back in.
$i.He moans each time you fill a waiting hole.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
Whenever $i.he starts to get hard,
$i.his dick chastity gives $i.him an awful twinge of pain.
You do your best to be up $i.his butt when this happens so you can
experience the resulting spasm.
<<else>>
Every time you penetrate, $i.his erect <<udick _u>>
jerks up and slaps $i.his stomach.
<</if>>
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
You throw $i.him across the back of $i.location with $i.his <<uanus _u>>
in the air<<if !$unit.player.isHasDick()>>, and don a strap-on<</if>>.
You finger $i.his <<uanus _u>>
while
<<if _u.isHasVagina()>>fucking $i.his pussy<<else>>frotting $i.his thighs<</if>>
for a bit and then switch to $i.his now-ready anus.
<<if _u.isHasTraitExact(setup.trait.anus_tight)>>
$i.His ass is so tight that you have to work yourself in.
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
Your <<if $unit.player.isHasDick()>><<udick $unit.player>><<else>>fake cock<</if>> slides easily up $i.his ass.
<<else>>
You slide into $i.his already-gaping asspussy with ease.
<</if>>
$i.He gasps as you penetrate $i.his rectum,
but you timed the switch so that $i.he was on the verge of orgasm,
and $i.he comes immediately.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
$i.He managed to stay soft within $i.his dick chastity,
but $i.he dribbled a lot of precum onto the
$i.bed.
You make $i.him lick it up, and $i.he obeys, shuddering with unsatisfied arousal.
<<else>>
$i.His <<udick _u>> spatters the $i.bed with cum, and you make $i.him lick it all up.
<</if>>
<</if>>
<<else>>
<<if !$unit.player.isHasDick()>>
You don a cruelly large strap-on, and you do it so $i.he can see it.
<</if>>
$i.He tries to refuse you, so you throw $i.him across the back of $i.location with
$i.his <<racelow _u>> ass in the air.
You finger $i.his <<uanus _u>>
<<if _u.isHasVagina()>>
while fucking $i.his pussy
<<else>>
while frotting $i.his thighs
<</if>>
for a bit and then switch to $i.his now-ready anus.
$i.He sobs as you penetrate $i.his rectum.
<<if _u.isHasDick()>>
Despite $i.his unwillingness to be sodomized, the prostate stimulation
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
starts to give $i.him an erection,
which $i.his dick chastity makes horribly uncomfortable.
$i.He bucks with the pain, $i.his asshole spasming delightfully.
<<else>>
gives $i.him an erection. $i.He's mortified that $i.he would get hard while being anally raped.
<</if>>
<</if>>
<</if>>
<<if $unit.player.isHasDick()>>
<<if _u.isHasTraitExact(setup.trait.anus_gape)>>
$i.His gaping hole drips your cum right out again.
<<elseif _u.isHasTraitExact(setup.trait.anus_loose)>>
Cum drips out of $i.him loose hole.
<<else>>
$i.His still-tight ass keeps your load inside $i.him.
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fuck_lips',
'Fuck mouth',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFuckLips',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over so $i.he can
<<if _hasdick>>
blow you with $i.his
<<else>>
please your pussy with $i.his
<</if>>
<<umouthall _u>>.
<<ustripmouth _u>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<if _u.isMindbroken()>>
As $i.he is mindbroken, $i.he does not respond to your command to approach you.
<<if _hasdick>>
You had no choice but to grab $i.him
and push $i.him down to $i.his knees with $i.his <<uhead _u>>
against $i.location so you can give $i.him a good hard throat fuck.
You cum down $i.his throat but $i.his mental psyche remains unchanged.
You put your toy back in $i.his
resting place, the $i.slavebed in the $i.room.
<<else>>
You had no choice but to grab $i.him
and throw $i.him onto $i.location face up,
and then kneel on $i.him with your <<ulegs $unit.player>> on either side of
$i.his crying <<ubody _u>>,
so your pussylips are hard against $i.his mouth.
$i.He mechanically eats you out, more out of breathing reflex than eagerness.
You grind down, taking pleasure from your <<uadjphys _u>> toy.
<</if>>
<<elseif _hasdick && _u.isHasTrait(setup.trait.training_oral_advanced) && _maintraining.getTags().includes('troral')>>
$i.He comes over eagerly, with hunger in $i.his <<ueyes _u>>.
$i.He gets to $i.his knees,
hurriedly takes you into $i.his <<umouth _u>>,
and gives the blowjob $i.his all.
As a <<titlelow _u>>,
$i.he's almost desperate to get your cum into $i.his <<umouth _u>> and
<<if _chastity>>
(since $i.his cock is off limits)
frantically rubs $i.his <<unipples _u>>
and asspussy
<<else>>
jacks $i.himself off
<</if>>
in anticipation.
<<if $unit.player.isHasVagina()>>
You have more than one variety of deliciousness for $i.him,
and $i.he's careful not to neglect your wet cunt.
<</if>>
<<if _u.isHasDick() && !_chastity>>
When you finish,
$i.he sits back with an ecstatic look on $i.his
<<uface _u>>
and lets your cum rest in $i.his mouth as $i.he climaxes into $i.his
<<uarms _u>>.
$i.He pours $i.his own cum from $i.his <<uhand _u>>
into $i.his mouth so it can mingle with yours.
<<else>>
When you finish, $i.he sits back with an ecstatic look on $i.his face and lets your cum rest in $i.his mouth as $i.he climaxes.
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_none)>>
$i.He tries to back away, so you
<<if _hasdick>>
<<if _umouthequip && (_umouthequip.getTags().includes('ringgag') || _umouthequip.getTags().includes('dildogag'))>>
grab $i.him; $i.his <<umouth _u>> is already held invitingly open by
$i.his gag,
and $i.he's prevented from biting.
<<else>>
grab $i.him and force a ring gag into $i.his <<umouth _u>>.
Once you have the straps secured behind $i.his head,
$i.he's prevented from biting.
<</if>>
You push $i.him down to $i.his knees with $i.his <<uhead _u>>
against $i.location so you can give $i.him a good hard throat fuck.
When you cum down $i.his throat $i.he retches through $i.his tears.
<<if _hasvagina>>
$i.He has a mere moment
to get $i.his breath back
before you press your pussy against $i.his unwilling mouth.
<</if>>
<<else>>
seize $i.him and throw $i.him onto $i.location face up,
and then kneel on $i.him with your <<ulegs $unit.player>> on either side of
$i.his crying <<ubody _u>>,
so your pussylips are hard against $i.his mouth.
$i.He desperately eats you out, trying to get you off as fast as possible so
$i.he can get a bit more air,
but you grind down without mercy, taking your pleasure.
<</if>>
<<elseif _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
$i.He comes over reluctantly and begins to
<<if _hasdick>>
give you a blowjob.
Deciding that $i.he isn't showing the necessary enthusiasm,
you hold $i.his <<uhead _u>>
and fuck $i.his <<uface _u>> instead
<<if _hasvagina>>, occasionally jerking your dick free to shove your pussy against $i.his face instead
<</if>>.
$i.He does $i.his best to follow your motions but
still splutters and gags.
You pull free to cum across $i.his face.
<<else>>
eat you out.
Deciding that $i.he isn't showing the necessary enthusiasm,
you hold $i.his head and grind your pussy against $i.his
<<uface _u>> instead.
$i.He does $i.his best to follow your motions but still splutters
and gasps for air.
You climax quickly and haul $i.him to $i.his feet,
kissing the bewildered $i.boy full on the mouth.
You can taste yourself on $i.his lips.
<</if>>
<<else>>
$i.He licks $i.his lips and looks you in the eyes as
$i.he gets to $i.his knees. $i.He
<<if _hasdick>>
gives you a long, deep blowjob.
$i.He massages your balls<<if _hasvagina>> and pussy<</if>>
with one <<uhand _u>> and
$i.his <<ubreast _u>> with the other, giving you a show.
$i.He sucks your head until you
<<set _cumchoose = random(1, 3)>>
<<if _cumchoose == 1>>
climax,
letting your cock pop free of $i.his <<umouth _u>> to shoot pearly
cum all across $i.his <<uface _u>>.
You order $i.him to lick clean all your cum off his face and the $i.floor.
<<elseif _cumchoose == 2>>
climax deep inside $i.his <<umouth _u>>, gushing all the cum directly down
$i.his throat and into $i.his stomach.
<<else>>
climax inside $i.his <<umouth _u>>. $i.He obediently swallows all your cum.
<</if>>
<<else>>
eats you out like $i.he's starving,
moaning into your pussy to show off
$i.his arousal and add to your pleasure.
$i.He massages your perineum with one <<uhand _u>> and
$i.his <<ubreast _u>>
with the other, giving you a show.
$i.He slowly concentrates more and more attention on your
clit until you climax convulsively.
You pull $i.him to $i.his feet,
kissing the compliant $i.boy full on the mouth.
You can taste yourself on $i.his lips.
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_fuck_relation',
'Incestuous fuck',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFuckRelation',
[], /* Cost */
[ /* Requirements */
],
[
setup.qs.job_slave,
setup.qres.HasFamilyWithJob(setup.job.slave),
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set _slavelist = $company.player.getUnits({job: setup.job.slave, not_injured: true, home: true, usable_by_you: true})>>
<<set _slavelist = $family.getFamilyList($g.target).filter(a => _slavelist.includes(a.unit))>>
<<if _slavelist.length>>
Use <<rep $g.target>> with:
<div id='divholder'>
<<for _islave, _slave range _slavelist>>
<<capture _slave>>
<<utheirrel $g.target _slave.unit>>
<<rep _slave.unit>>
<<link '(use)'>>
<<replace '#divholder'>>
<<set _victim = _slave.unit>>
<<include 'InteractionFuckRelationDo'>>
<</replace>>
<</link>>
<br/>
<</capture>>
<</for>>
</div>
<<else>>
There are no available enslaved family member of <<rep $g.target>> to use with.
<</if>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _v = _victim>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<set _chastity = _victim.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_victim, setup.equipmentslot.mouth)>>
<<set _gagged = _victim.isHasTrait(setup.trait.eq_gagged)>>
<<set _uadvanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _vadvanced = _v.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _ubasic = _u.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _vbasic = _victim.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _udick = _u.isHasDick()>>
<<set _vdick = _victim.isHasDick()>>
<<set _us = $family.getRelation(_victim, _u)>>
<<set _vs = $family.getRelation(_u, _v)>>
<<loadinteractioncommon _u>>
You descend down to your $i.locgeneral and grabbed two of your slaves
<<= _u.getName()>> and <<= _victim.getName()>>.
<<if _ubasic && _vbasic && _udick && _vdick && _hasdick>>
There are three stiff pricks available.
You order <<= _u.getName()>> to bottom.
<<They _u>> lies on the $i.floor, spreads <<their _u>>
buttocks,
relaxes <<their _u>> <<uanus _u>>,
and then begs <<their _u>> <<rep _us>>
to buttfuck <<them _u>>.
<<= _v.getName()>> does,
slipping <<their _v>> <<udick _v>> into
<<their _v>> <<rep _vs>> ass.
<<They _v>> then stops and waits for you to buttfuck
<<them _v>> in turn.
It isn't a particularly convenient way to fuck,
but it's got the virtue of being uncommon.
<<= _v.getName()>>, both fucking and getting fucked,
comes in <<their _v>> <<rep _vs>>'s rectum first.
They switch places so <<= _u.getName()>> can have a turn in the middle,
leaving you to finish into <<= _u.getName()>>'s already cum-soaked hole.
<<elseif _ubasic && !_vbasic>>
<<= _u.getName()>> is a lot more ready and willing for this than
<<their _u>> <<rep _us>>
<<= _v.getName()>>, so
<<if !_hasdick>>while getting into a strap-on,<</if>>
you sit <<them _u>> on the $i.location and make
<<= _v.getName()>> sit on <<their _v>> lap, facing <<them _u>>.
In this position,
<<= _u.getName()>> can reach around and spread
<<their _u>> <<rep _us>>'s buttocks for her, controlling
<<them _v>> all the while in case <<they _v>> has hesitations about this.
<<= _v.getName()>> knows that <<they _v>>'s trapped,
and lets <<their _v>> <<rep _vs>> hold <<their _v>> ass wide so you can use <<them _v>>.
They're face to face, and it's not hard to tell that
<<= _v.getName()>> is glaring daggers at <<= _u.getName()>>.
You reward <<= _u.getName()>> for her obedience and punish
<<= _v.getName()>> for her resistance by forcing <<them _v>>
to suck <<= _u.getName()>> off while you finish using <<= _v.getName()>>.
<<elseif _vbasic && !_ubasic>>
<<set _victim = _u>>
<<set _u = _v>>
<<include 'InteractionFuckRelationDo'>>
<<elseif _uadvanced && _vadvanced && _us.getTags().includes('twin')>>
<<= _u.getName()>> and <<= _v.getName()>>
are such devoted sex slaves that they've long since lost
any hesitations about their partnership, and generally approach
sex as though their bodies were interchangeable.
(This means that they almost never masturbate, for one thing,
preferring to have sex with each other, instead.)
Caressing and manhandling each other,
they eagerly kneel before your chair and give you
simultaneous oral sex,
making an effort to play with their symmetry.
They kiss around your <<if !_hasdick>>pussy<<else>>cock,
making a complete seal around you with their lips<</if>>,
one on each side.
Then they jump up on your desk and press their
<<if _udick && _vdick>>
cocks
<<elseif _udick || _vdick>>
cock and pussy
<<else>>pussies
<</if>>
against one another<<if !_hasdick>> while you don a strap-on<</if>>,
spreading their legs to offer you everything. You switch
back and forth, with the twin you're not in rubbing and grinding against their sister,
until both of <<= _u.getName()>> and <<= _v.getName()>> are lying on the desk<<if _hasdick>>
with cum dripping out of them<</if>>,
making out tiredly.
<<elseif _ubasic && _vbasic && _us.getTags().includes('sibling')>>
You call <<= _u.getName()>>'s
<<rep _us>> <<= _v.getName()>> in for some incestuous fun,
but see no reason to wait for <<them _v>>.
When <<they _v>> arrives, it's to the sight of
<<= _u.getName()>> sitting on the $i.bed with <<their _u>> legs spread with you
<<uadv $unit.player>>
<<if _u.isHasVagina()>>
fucking <<their _u>> pussy<<else>>using <<their _u>> asshole<</if>>
<<if !_hasdick>>with a strap-on<</if>>.
You pull out and order <<= _v.getName()>> to orally service <<their _v>> <<rep _vs>>.
<<They _v>> gets down before the spreadeagled slave <<girl _u>> to get to work.
After watching <<= _u.getName()>> enjoy the attention for a while, you move
behind the busy <<= _v.getName()>> and pull <<them _v>> into a good position
so you can fuck <<them _v>> while <<they _v>> sucks.
After a few thrusts, <<= _u.getName()>>'s <<ueyes _u>> roll back.
<<They _u>> gestures that it feels really good when you make <<their _u>> <<rep _us>> moan into <<them _u>>.
<<elseif _uadvanced && _vbasic>>
<<= _u.getName()>> is enthusiastic when <<they _u>> hears you order
<<= _v.getName()>> to come over. <<Their _u>> total immersion in sexual slavery has
clearly uncovered a willingness to get very close to <<their _u>> <<rep _us>>.
You<<if !_hasdick>> don a strap-on,<</if>> lie on the $i.floor and
instruct <<= _v.getName()>> to ride you. <<They _v>> complies, and finds <<their _v>> <<rep _vs>>
<<= _u.getName()>> <<if _vdick>>stroking <<their _v>> <<udick _v>> while <<they _v>> humps
<<their _v>> butt up and down on your
<<else>>
licking <<their _v>> anus while <<they _v>> humps <<themself _v>> up and down on your
<</if>>
<<if _hasdick>>cock<<else>>fake cock<</if>>.
Your use of <<= _v.getName()>>'s <<ubody _v>> is the focus.
<<They _v>> finds <<themself _v>> caught up in a miasma of sexual pleasure and perversion,
moaning and blushing as your
<<if !_hasdick>>strap-on and fingers<<else>>cock<</if>> and
<<= _u.getName()>>'s mouth tour <<their _v>> body.
When you finish in <<their _v>> <<if _vdick>>asshole,
<<their _v>> <<rep _vs>> hastens to lavish attention on <<their _u>> <<rep _us>>'s
well fucked, cum filled butt.<<else>>pussy,
<<their _v>> <<rep _vs>> hastens to lavish attention on <<their _u>> <<rep _us>>'s
well fucked, cum filled cunt.<</if>>
<<elseif _ubasic && _vbasic>>
<<= _u.getName()>> gives you a little smile when
<<they _u>> hears you wish to fuck <<them _u>> and <<their _u>> <<rep _us>>
<<= _v.getName()>><<if !_hasdick>> and sees your strap-on<</if>>.
On your direction, <<= _u.getName()>> sits on the $i.location.
When <<= _v.getName()>> enters,
<<their _v>> <<rep _vs>> spreads <<their _u>> arms and tells <<them _v>> to sit on <<their _u>> lap.
<<= _v.getName()>> gets the idea and straddles <<them _u>> so they're face to face.
You take <<= _v.getName()>> from behind;
<<they _v>> gasps as <<they _v>> feels <<their _v>> <<rep _vs>>'s <<uhands _u>> stimulate
<<them _v>> from the front.
They make out shamelessly while you take your pleasure.
When you finish, <<= _u.getName()>> lies down on the couch so
<<= _v.getName()>> can ride <<their _u>>
<<uface _u>>.
As <<they _u>> sucks the cum out of <<their _u>> <<rep _u>>'s sopping fuckhole,
<<= _v.getName()>> sucks you hard again.
In the mood for something harder this time, you jam yourself
into the <<= _u.getName()>>.
<<= _v.getName()>> gets off <<= _u.getName()>>'s face so <<they _v>> can offer
<<themself _v>> for fondling and manhandling while you pound
<<= _u.getName()>>. After you're done,
<<= _v.getName()>> returns <<their _v>> <<rep _vs>>'s affection and gives
<<them _u>> some gentle oral as the slave lies there exhausted.
<<else>>
Since between them they aren't able to enthusiastically perform an incestuous threesome,
you simply line <<= _u.getName()>> and <<= _v.getName()>> up next to one another
on a $i.location,<<if !_hasdick>> don a strap-on,<</if>>
and fuck the available holes at will.
Whenever a hole begins to pall you just switch to another.
<<= _u.getName()>> tries hard to ignore the fact that
<<they _u>>'s getting fucked next to <<their _u>> <<rep _us>>,
and <<= _v.getName()>> pretends the cock getting shoved into <<them _v>>
isn't slick from <<their _v>> <<rep _vs>>'s fuckhole.
<</if>>
/*
<<elseif ((_activeSlaveRel is "friend") or (_activeSlaveRel is "best friend")) and ($activeSlave.devotion > 20) and ($partner.devotion > 20)>>
$activeSlave.slaveName and $partner.slaveName line up next to one another on the couch next to your desk<<if ($PC.dick is 0)>> while you don a strap-on,<</if>> and offer you their holes. They're just friends, but they're sex slaves and they see nothing wrong with enjoying sex with you, together. They keep up a constant stream of giggling, gasping, and smiling as each of them in turn feels a cock, warm and wet from her friend's body, transferred into her. Each of them does her best to help the other do well, even manually stimulating her friend when necessary<<if ($PC.boobs gt 0)>> and spinning around to lavish attention on your nipples<</if>>.
<<BothVCheck>>
<<PartnerVCheck>>
<<elseif ((_activeSlaveRel is "friend with benefits") or (_activeSlaveRel is "lover") or (_activeSlaveRel is "slave wife")) and ($activeSlave.devotion > 20) and ($partner.devotion > 20)>>
$activeSlave.slaveName and $partner.slaveName eagerly repair to the couch and arrange themselves face to face so they can make out and enjoy each other's bodies as you enjoy theirs. You decide not to set up an elaborate threesome, and just <<if ($PC.dick is 0)>>engage in a little tribadism with<<else>>fuck<</if>> whatever hole catches your eye next. They rarely break their intimate kissing, forming between the two of them a loving entity on the couch with all sorts of interesting parts to experience. They're sex slaves, and you're fucking them, but they're also lovers who are very comfortable in each others' arms, kissing, fondling each other, and <<if ($PC.dick is 0)>>enjoying your pussy loving<<else>>taking your dick<</if>>.
<<BothVCheck>>
<<PartnerVCheck>>
<<else>>
Since between them they aren't able to enthusiastically perform a threesome, you simply line $activeSlave.slaveName and $partner.slaveName up next to one another on the couch next to your desk, and fuck <<if $seeRace is 1>>$activeSlave.race holes <</if>>at will. Whenever a hole begins to pall you just switch to another. $activeSlave.slaveName tries hard to ignore the fact that she's getting fucked next to her _partnerRel, and $partner.slaveName pretends the <<if ($PC.dick is 0)>>strap-on<<else>>cock<</if>> getting shoved into her isn't slick from her _activeSlaveRel's fuckhole.
<<BothVCheck>>
<<PartnerVCheck>>
<</if>>
*/<<run new setup.Interaction(
'unit_fuck_vagina',
'Fuck vagina',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionFuckVagina',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can use $i.his <<uvaginaall _u>>.
<<ustripvagina _u>>
<<set _fPosition = random(1,100)>>
You decide to fuck $i.him
<<if (_fPosition <= 20)>>
in the missionary position.
You tell $i.him to lie down on $i.location.
<<elseif (_fPosition <= 40)>>
doggy-style.
You tell $i.him to get on $i.location on $i.his <<uarms _u>> and knees.
<<elseif (_fPosition <= 60)>>
in the cowgirl position.
You lie on $i.location and tell $i.him to straddle you, facing towards you.
<<elseif (_fPosition <= 80)>>
in the reverse cowgirl position.
You lie on $i.location and tell $i.him to straddle you facing away from you.
<<else>>
in the wheelbarrow position.
You tell $i.him to get on $i.location, stand next to $i.him and lift $i.his <<ulegs _u>> up
into the air.
<</if>>
<<set _fSpeed = random(1,100)>>
<<if _u.isMindbroken()>>
Since $i.his mind is gone,
$i.his <<ubody _u>> is all yours to use as a <<racelow _u>> sex doll.
You throw $i.him over the couch and amuse yourself with
$i.him for a while;
$i.his <<ubody _u>> retains its instinctual responses, at least.
You finish inside $i.him and brought your <<uadjphys _u>> toy back to $i.his
resting place, the $i.slavebed in the $i.room.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<if $unit.player.isHasDick()>>
<<set _sub = _u.isHasTrait(setup.trait.per_submissive)>>
$i.He comes over,
smiling <<if _sub>>a little submissive smile<</if>>, and spreads $i.himself for you.
You take $i.him on $i.location after $i.he gets into position.
<<if (_fPosition <= 20)>>
$i.He hugs $i.him <<ubody _u>> to you and $i.his <<ubreast _u>> press against your <<ubreast $unit.player>>;
<<elseif (_fPosition <= 40)>>
$i.He arches $i.his back as you continue to pound $i.him;
<<elseif (_fPosition <= 60)>>
$i.He puts $i.his <<uhands _u>> on your <<ubreast $unit.player>> and leans forward as you continue to thrust upwards;
<<elseif (_fPosition <= 80)>>
$i.He puts $i.his <<uhands _u>> on your <<ubreast $unit.player>> and starts to lean back as you continue to thrust upwards;
<<else>>
$i.He begins to tire as you keep pounding;
<</if>>
you can feel $i.his heart beating hard.
<<if $unit.player.isHasDick() && _sub>>
As the sex reaches its climax, $i.he begs you to cum inside $i.his unworthy body.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
$i.He does $i.his submissive best to stay completely soft within $i.his dick chastity.
<<else>>
As a submissive $i.he spares no attention for $i.his own orgasm, so $i.his rock hard erection swings untended.
<</if>>
<</if>>
<<if $unit.player.isHasVagina()>>
When you finally climax, you pull out and press your wet cunt
against $i.his <<umouth _u>>,
letting $i.him lavish attention on you that brings you to another quick orgasm.
<</if>>
<<else>>
As the sex reaches its climax, $i.his kisses grow urgent and passionate.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
$i.He enjoys $i.himself,
even though $i.his dick chastity keeps $i.him
soft by making the beginnings of erection very uncomfortable.
<<else>>
When you orgasm together,
$i.his erect <<udick _u>> squirts cum up towards $i.his tits while your dick fills $i.him with cum.
<</if>>
<</if>>
<<if $unit.player.isHasVagina()>>
You got so wet fucking $i.him that when you climax,
you stand up; $i.he knows what that means, and hurries to eat you out.
The oral attention brings you to a quick aftershock orgasm.
<</if>>
<</if>>
<<else>>
You pat the tops of your thighs,
and $i.he skips over smiling and gives you a quick kiss.
Without breaking the lip lock,
$i.he sits down, wrapping $i.him <<ulegs _u>> around you.
Your <<uhands $unit.player>> reach around $i.him and seize $i.his buttocks,
drawing $i.him in even closer so that the warmth between $i.his legs
is pressed hard against your pussy,
and you can play with $i.his asshole.
$i.He grinds enthusiastically against you, moaning into your <<umouth $unit.player>>
with pleasure.
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_none)>>
$i.He tries to refuse, so you
<<if $unit.player.isHasDick()>>
bend the disobedient slave over $i.location and take
$i.him hard from behind.
<<if _u.isHasBreasts()>>
$i.His <<ubreast _u>>
<<if _u.isHasDick()>>and <<udick _u>><</if>>
slide back and forth across the desk.
<</if>>
You give $i.his buttocks
some nice hard swats as you pound $i.him.
$i.He grunts and moans but knows better than to try to get away.
<<if _u.isHasDick()>>
Despite $i.his unwillingness to be raped, the stimulation
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
starts to give $i.him an erection,
which $i.his dick chastity makes horribly uncomfortable.
$i.He bucks with the pain, $i.his hole spasming delightfully.
<<else>>
gives $i.him an erection.
$i.He's mortified that $i.he would get hard while being raped.
<</if>>
<</if>>
<<if $unit.player.isHasVagina()>>
After your first orgasm,
you pull out and grind your pussy against
$i.his <<uface _u>> for another climax,
enjoying the stimulation of $i.his muffled crying.
<</if>>
<<else>>
stand and seize $i.him,
shoving $i.him down to sit in your chair.
You jump atop $i.his hips,
pinning $i.him down into the chair with your legs and pressing your pussy hard
against $i.his groin.
$i.He struggles and whimpers,
but you give $i.him a hard warning slap to the cheek and kiss $i.his unwilling <<umouth _u>>,
forcing your tongue past $i.his lips as you grind against $i.him.
<</if>>
<<else>>
<<if $unit.player.isHasDick()>>
$i.He obeys,
lying on $i.location with $i.his <<ulegs _u>> spread.
You kneel on the ground and enter $i.him,
a <<uhand $unit.player>> on each of $i.his <<ulegs _u>> to give you a good grip.
<<if _fSpeed > 75>>The pounding is hard and fast
<<elseif _fSpeed > 50>>You pound $i.him firmly and vigorously
<<elseif _fSpeed > 25>>You fuck $i.him steadily and controlled
<<else>>You fuck $i.him slowly and tenderly
<</if>>, and $i.he gasps and
<<if _fSpeed > 50>>whines
<<else>>moans<</if>>.
You reach a <<uhand $unit.player>> down to maul $i.his <<ubreast _u>>.
<<if _u.isHasDick()>>
<<if _u.isHasTrait(setup.trait.eq_chastity)>>
$i.He enjoys $i.himself,
even though $i.his dick chastity keeps $i.him soft by making the beginnings
of erection very uncomfortable.
<<else>>
$i.He bites $i.his lip and moans as $i.he climaxes.
You fill $i.his squeezing fuckhole with your cum.
$i.He already dribbled $i.his own load all over $i.his stomach.
<</if>>
<</if>>
<<if $unit.player.isHasVagina()>>
You got so wet fucking $i.him that when you climax,
you stand up and let $i.him clean your pussy with $i.his <<umouth _u>>.
The oral attention brings you to a quick aftershock orgasm.
<</if>>
<<else>>
You pat the tops of your thighs,
and $i.he obediently comes over to sit atop them,
wrapping $i.him <<ulegs _u>> around you.
Your <<uhands $unit.player>> reach around $i.him and seize $i.his buttocks,
drawing $i.him in even closer so that the warmth between $i.his <<ulegs _u>>
is pressed hard against your pussy.
$i.He grinds dutifully against you,
only pausing for a moment when $i.he finds your insistent tongue probing past $i.his lips.
<</if>>
<</if>>
<<if $unit.player.isHasDick()>>
<<if _u.isHasTraitExact(setup.trait.vagina_gape)>>
Cum drips out of $i.his fucked-out hole.
<<elseif _u.isHasTraitExact(setup.trait.vagina_loose)>>
Cum drips out of $i.his stretched vagina.
<<else>>
$i.His still-tight vagina keeps your load inside $i.him.
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_kiss',
'Kiss',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionKiss',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<if _u.isMindbroken()>>
$i.He complies mechanically.
$i.He remembers that when
your commands are not obeyed, there is punishment.
<<elseif _friendship >= 900>>
$i.He hurriedly complies,
happy to be near the object of $i.his longing.
Once she's close, you take a moment to gaze deeply into
$i.his <<ueyes _u>>.
$i.He finds the intense look from the <<man $unit.player>> $i.he loves overwhelming,
and $i.his eyes flick downward after a moment.
$i.He blushes furiously.
<<elseif _friendship >= 750>>
$i.He hurriedly complies, happy to be near you.
Once $i.he's close, you take a moment to gaze deeply into $i.his <<ueyes _u>>.
$i.He finds the intense look from $i.his beloved owner disconcerting,
and $i.his eyes flick downward after a moment. $i.He blushes furiously.
<<elseif _friendship >= 500>>
$i.He hurriedly complies, happy to be near you.
Once $i.he's close, you take a moment to gaze deeply into $i.his <<ueyes _u>>.
$i.He finds the intense attention from $i.his owner disconcerting,
and $i.he looks down after a moment, blushing.
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He hurriedly complies,
happy to be near you.
Once $i.he's close,
you take a moment to gaze deeply into $i.his <<ueyes _u>>.
$i.He finds the intense attention from $i.his owner worrying,
and $i.he looks down after a moment, blushing nervously.
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
$i.He visibly considers disobedience,
but decides that complying with such an apparently harmless order
is safe, for now.
Once $i.he's close, you take a moment to gaze deeply into $i.his
<<ueyes _u>>.
$i.He finds the intense attention from $i.his owner worrying,
and $i.he looks down after a moment,
$i.his lower lip trembling with nervousness.
<<elseif _friendship <= -100>>
The command terrifies $i.him,
but $i.he's more frightened still of the
consequences of disobedience, and $i.he complies.
Once $i.he's close, you take a moment to gaze deeply
into $i.his <<ueyes _u>>.
After a mere instant of locked gazes,
$i.he looks down fearfully, and begins to shake with terror,
tears leaking silently down $i.his cheeks.
<<else>>
$i.He pauses, obviously considering whether to resist,
but eventually decides to save $i.his strength
to fight more onerous orders,
and gives in.
Once $i.he's close, you take a moment to gaze deeply into
$i.his <<ueyes _u>>.
$i.He stares back, but after a few moments $i.he loses the contest of wills and looks down.
<</if>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _gagged = _u.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _u>>
You tell
your <<titlefull _u>>
<<= _u.getName()>> to
<<if _umouthequip>>
remove $i.his <<rep _umouthequip>> and approach you.
<<else>>
approach you.
<</if>>
<<ustripmouth _u>>
<<include 'InteractionKissApproach'>>
You extend you <<uarms $unit.player>> and graze your fingertips along the line of $i.his cheekbone.
Then, you gently raise $i.his <<uface _u>> and kiss $i.him
right on $i.his lips.
<<if _u.isMindbroken()>>
$i.His <<umouth _u>> opens to accept the kiss,
and is compliant with your questing tongue.
$i.His posture remains completely unchanged.
Being kissed affects $i.him as little as being penetrated,
being struck, or being loved:
not at all.
When you pull away, $i.his <<ueyes _u>>
track you carefully, awaiting further use of $i.his <<ubody _u>>.
<<elseif _friendship >= 800>>
$i.His <<umouth _u>> accepts yours with love,
matching itself perfectly to your insistent lips and tongue.
$i.He melts into you,
sighing ever so gently.
When you finally break the kiss,
$i.his mouth freezes in the shape it was in when last your lips touched,
and a momentary look of longing crosses $i.his <<uface _u>>.
A <<uhand _u>> reaches dumbly up to $i.his mouth to trace $i.his lips where yours last touched.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He confesses $i.his love to you dreamily.
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_dominance_advanced) && _maintraining.getTags().includes('trdominance')>>
$i.He giggles into you and kisses you back with vigor,
$i.his <<uhead _u>> pressing insistently forward.
The two of you make out rather aggressively
$i.He takes $i.his tendency towards sexual dominance right
up to the edge of insubordination,
$i.his active tongue only retreating when yours presses against it.
When you finally shove $i.his away,
$i.he's breathing hard through $i.his grin.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", $i.he says cheerfully.
<</if>>
<<elseif _hasdick && _u.isHasTrait(setup.trait.training_oral_advanced) && _maintraining.getTags().includes('troral')>>
$i.He stiffens with arousal.
$i.His sexuality is complex, focusing on cum,
but with a heavy layer of oral fixation.
As your tongue plunders $i.his mouth,
$i.he reacts almost as though $i.he's receiving oral,
whimpering and moaning into you and pressing $i.his <<ubody _u>> lewdly against your
<<ubreast $unit.player>>.
$i.He achieves a weak orgasm before you tire of making out with $i.him.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
"That was fun", $i.he says lustfully.
<</if>>
<<elseif _friendship >= 500>>
$i.His <<umouth _u>> accepts yours with devotion,
matching itself carefully to your insistent lips and tongue.
$i.He presses $i.his <<ubody _u>> against you,
$i.his warmth wonderful against your <<ubreast _u>>.
When you finally break the kiss, $i.he runs $i.his tongue rapturously across
$i.his moistened lips and then runs a finger across them as well,
an openly sexual look on $i.his <<uface _u>>.
<<if _gagged>>
It looks as if $i.he has something to say, but $i.his gag prevents $i.him from saying it.
<<else>>
He confesses $i.his love to you dreamily.
<</if>>
<<elseif _u.isHasTrait(setup.trait.training_obedience_advanced)>>
$i.He accepts the kiss willingly.
As you are so close to $i.him,
you sense considerable turmoil in the $i.man;
$i.he's doing $i.his duty as a slave by complying
with your wishes,
and is probably struggling with the mixture of resistance,
obedience and perhaps even devotion forced
to the forefront of $i.his mind by your lips and tongue.
When you finally break the kiss, $i.his <<ueyes _u>>
gaze into yours searchingly, looking for answers
that are not there.
<<elseif _u.isHasTrait(setup.trait.training_obedience_basic)>>
$i.He accepts the kiss fearfully.
As you kiss $i.his unresisting <<umouth _u>>,
$i.his eagerness to avoid punishment leads
$i.him to kiss you back,
though nervousness makes $i.his mechanical.
You kiss $i.him harder, enjoying $i.his fear,
and the physical intimacy slowly does its work.
$i.He becomes softer and more natural,
$i.his resistance easing.
When you pull away from $i.him for a moment,
$i.he looks at you for a long moment,
$i.his mouth still hanging open, before visibly
catching $i.himself with a reminder that $i.he's
a slave and you're $i.his owner.
<<elseif _friendship <= -100>>
$i.He is nearly frozen with fear,
and does not resist as you kiss $i.him.
In fact, $i.he barely reacts at all.
$i.He opens $i.his <<umouth _u>> mechanically in response to your
insistent tongue, but it's like kissing a doll.
$i.He is so filled with terror that $i.he remains stiff even
as it becomes clear to $i.his you're not going to hurt $i.him.
When you bore of making out with the poor $i.woman and pull away,
$i.he stares at you in utter incomprehension.
<<else>>
$i.He reflexively turns $i.his <<uhead _u>> away from you,
but you catch $i.his jaw and kiss $i.him harder.
Spluttering, $i.he flees backwards,
but you tip forward with $i.his and pin $i.him against the wall,
plundering $i.his <<umouth _u>> without mercy.
$i.He wriggles desperately, but $i.his struggles slowly subside
as $i.he realizes that you're not taking this any farther.
When you bore of it and pull away, $i.he stares at you in utter incomprehension.
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_titfuck',
'Titfuck',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionTitfuck',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qs.trait_breast,
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<set _hasbreasts = $unit.player.isHasBreasts()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.mouth)>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<set _mindbroken = _u.isMindbroken()>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
<<include 'InteractionKissApproach'>>
You descend into your $i.locgeneral and grabbed
your <<titlefull _u>>
<<= _u.getName()>> over
so you can play with $i.his <<ubreastall _u>>.
<<if _u.isHasTrait(setup.trait.training_oral_advanced) && _maintraining.getTags().includes('troral')>>
<<if _chastity>>
$i.He comes over eagerly,
with hunger in $i.his <<ueyes _u>>.
$i.He gives you a titjob with $i.his lubricated cleavage while you sit at your desk.
As a cumslut $i.he's almost desperate to get your cum into
$i.his <<umouth _u>> and rubs a
nipple with one <<uhand _u>> and $i.his anal opening with the other,
since $i.he can't touch $i.him cock.
The situation brings $i.him some pleasure,
but the first twitches of $i.his cock against $i.his chastity cage
are so uncomfortable that $i.he subsides into busy
mechanical dick sucking.
$i.He writhes uncomfortably, frustrated beyond belief.
<<set _done = true>>
<<elseif _hasdick>>
<<if _u.isHasDick()>>
$i.He comes over eagerly, with hunger in $i.his <<ueyes _u>>.
$i.He gives you a titjob with $i.his lubricated cleavage
while you sit at your desk. As a cumslut
$i.he's almost desperate to get your cum into $i.his
<<umouth _u>> and jacks $i.himself off in anticipation.
When you finish, $i.he sits back with an ecstatic look on $i.his
face and lets your cum rest in $i.his mouth as $i.he climaxes into $i.his <<uarms _u>>.
$i.He pours $i.his own cum from $i.his <<uhand _u>> into $i.his mouth so it can mingle with yours.
<<set _done = true>>
<<else>>
$i.He comes over eagerly, with hunger in $i.his <<ueyes _u>>.
$i.He gives you a titjob with $i.his lubricated cleavage while you sit at your desk.
As a cumslut $i.he's almost desperate to get your cum into $i.his
<<umouth _u>>
and rubs $i.himself in anticipation.
When you finish, $i.he <<if _hasvagina>>quickly swallows and
then runs $i.his hot tongue down to your wet pussy, eagerly
licking your juices<<else>>
sits back with an ecstatic look on $i.his face and
lets your cum rest in $i.his mouth as $i.he climaxes<</if>>.
<<set _done = true>>
<</if>>
<<else>>
<<set _done = false>>
<</if>>
<</if>>
<<if !_done>>
<<if _notrain>>
$i.He tries to refuse you, so you throw $i.him down on $i.location and
<<if _hasdick>>
squeeze lubricant between $i.his <<ubreast _u>>.
You straddle $i.his <<utorso _u>>,
hold $i.his boobs together, and fuck $i.his cleavage
<<if _hasvagina>>,
grinding your hips down against $i.him to stimulate your pussy
<</if>>.
Your cum splashes $i.his crying face.
<<elseif _hasbreasts>>
squirt lubricant all over $i.his <<ubreast _u>>.
Then, you lie down atop $i.him with your <<ubreast $unit.player>>
meshing with <<theirs _u>> and begin to slide up and down,
stimulating your nipples wonderfully.
$i.He tries to turn $i.his head away,
but you reach up to force $i.his unwilling <<umouth _u>>
to accept your insistent tongue.
<<else>>
straddle $i.his <<uface _u>>,
grinding your pussy against $i.his unwilling <<umouth _u>>.
You begin to grope $i.his <<ubreasts _u>> and pinch $i.his <<unipple _u>> to hardness,
and when $i.he's slow at eating you out, you twist them cruelly.
The pain makes $i.him squeal into your pussy,
a lovely sensation, so you manhandle $i.him without mercy until
you climax against $i.his gasping face.
<</if>>
<<elseif _basic>>
$i.He lies on $i.location
<<if _hasdick>>
and rubs lube over $i.his <<ubreast _u>>
so you can fuck $i.his tits.
You straddle $i.his torso,
hold $i.his boobs together,
and fuck $i.his cleavage.
Your cum covers $i.his reluctant face<<if _hasvagina>>,
and you hike yourself up a little higher to grind your pussy against $i.his <<umouth _u>><</if>>.
<<elseif _hasbreasts>>
and rubs lube over $i.his <<ubreast _u>>.
Then, you lie down atop $i.him with your breasts
meshing with <<theirs _u>> and begin to slide up and down,
titillating your nipples wonderfully.
$i.He cannot ignore the slippery stimulation $i.his nipples are receiving,
and you find $i.his <<umouth _u>>
quite willing to receive your insistent tongue.
<<else>>
, and you've straddled $i.his <<uface _u>>
before $i.he can do anything more.
You begin to grope $i.his <<ubreast _u>> and pinch $i.his <<unipple _u>> to hardness as
$i.he eats you out,
your ministrations producing moans that feel
quite nice against your clit.
You maul $i.his boobs without mercy as you reach your climax,
leaving $i.him to massage $i.his breasts gingerly as you get off $i.him.
<</if>>
<<else>>
<<if _hasdick>>
$i.He massages and toys with $i.his
chest for your benefit,
languidly rubbing lubricant over not only
$i.his cleavage but $i.his entire chest,
making sure every inch of $i.his <<ubreast _u>>
are nice and shiny.
$i.He gives you a titjob with $i.his lubricated cleavage
while you sit at $i.location<<if _hasvagina>>, doing $i.his
best to run $i.his hard nipples between
your pussylips whenever $i.he can<</if>>.
Your cum covers $i.his <<uface _u>>,
and $i.he carefully licks it all off while continuing to play with $i.his erect nipples.
<<elseif _hasbreasts>>
$i.He rubs lube over $i.his <<ubreast _u>>,
flirting with you and sticking out $i.his chest,
before lying down on $i.location.
You lie down atop $i.him with your <<ubreast $unit.player>>
meshing with <<theirs _u>> and begin to slide up and down,
titillating your nipples wonderfully. You find
$i.his <<umouth _u>> quite willing to receive your insistent tongue,
and while you make out,
$i.he slips a <<uhand _u>> down between your <<ulegs $unit.player>> to give you a handjob, too.
<<else>>
$i.He flirts with you and sticks out $i.his chest before lying down on $i.location.
You've straddled $i.his face before $i.he can do anything more,
and $i.he begins to eat you out with enthusiasm.
You begin to grope $i.his <<ubreast _u>>
and pinch $i.his nipples to hardness as $i.he gives you oral,
your ministrations producing moans that feel quite nice against your clit.
You maul $i.his boobs without mercy as you reach your climax, but $i.he loves it all.
<</if>>
<</if>>
<</if>>
<<unset $i>><<run new setup.Interaction(
'unit_together_anal',
'Anally DP a slave',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionTogetherAnal',
[], /* Cost */
[
setup.qres.HasSlave(),
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.per_submissive),
setup.qres.NoTrait(setup.trait.per_chaste),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set _slavelist = $company.player.getUnits({job: setup.job.slave, not_injured: true, home: true}).filter(unit => unit.isHasTrait(setup.trait.training_anal_basic))>>
<<set _slavelist = _slavelist.filter(unit => unit.isUsableBy($unit.player) || unit.isUsableBy($g.target))>>
<<if _slavelist.length>>
Which slave would you suggest to <<rep $g.target>> to double penetrate together?
<div id='divholder'>
<<for _islave, _slave range _slavelist>>
<<capture _slave>>
<<rep _slave>>
<<link '(use)'>>
<<replace '#divholder'>>
<<set _victim = _slave>>
<<include 'InteractionTogetherAnalDo'>>
<</replace>>
<</link>>
<br/>
<</capture>>
<</for>>
</div>
<<else>>
There are no available anally-trained slave for you to double-penetrate with a slaver.
<</if>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<set _chastity = _victim.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_victim, setup.equipmentslot.mouth)>>
<<set _gagged = _victim.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _victim>>
<<if $unit.player.getLover() == _u>>
You came over to where your lover <<rep _u>> is.
<<lovertextshort $unit.player>>
You then invited
<<else>>
You invited
<</if>>
your <<repfull _u>> for some fun with an obedient slave over by the $i.locgeneral.
<<include 'InteractionTogetherPunishRelation'>>
You go first and call your <<titlefull _victim>> <<= _victim.getName()>>
over.
<<ustripanus _victim>>
You tell $i2.him $i2.he's got a nice asspussy,
and grope $i2.him thoroughly,
cupping $i2.his buttocks with one <<uhand _u>> and squeezing
a <<ubreast _victim>> with the other.
$i2.He looks
ready and willing,
and angles $i2.himself just right, and you administer a light slap to
$i2.his <<uass _victim>>.
You
<<if !_hasdick>> dons a strap-on and<</if>>
clambers up onto the $i.location.
Since saliva is plenty of lube for <<= _victim.getName()>>'s experienced ass,
you
<<if _gagged>>
unbuckled <<their _victim>> <<rep _umouthequip>> and
<</if>>
points a meaningful finger at <<if !_hasdick>>the phallus<<else>>your cock<</if>>,
and <<= _victim.getName()>> begins to suck it enthusiastically, trying to get it as
wet as possible for the sake of $i2.his butt.
<br/>
<br/>
$i2.He whimpers into your
<<if !_hasdick>>dildo<<else>>dick<</if>> in $i2.his mouth as $i2.he feels $i2.his
<<if _chastity>>
chastity cage
<<elseif _victim.isHasDick()>>
hard cock
<<else>>
mons
<</if>>
graze the $i.bed, and then stiffens as you continue.
You guides your
<<if !_hasdick>>
strap-on<<else>>cock<</if>>
inside the compliant
slave, who begins to ride it,
enjoying both the
<<if _victim.isHasDick()>>
prostate<<else>>anal<</if>>
stimulation and the feeling of $i2.his
<<if _victim.isHasDick()>>
<<if _chastity>>
erection trapped between $i2.him and
<<else>>
dick trapped between $i2.him and
<</if>>
<<else>>pussy pressed against<</if>>
your <<ubody $unit.player>>.
You macks the humping
$i2.man's butt
to get $i2.him to stop,
and slides an index finger up $i2.his ass
alongside your <<if !_hasdick>>phallus<<else>>cock<</if>>.
<<= _victim.getName()>> shudders, and then begins to whine as $i2.he
pulls $i2.his sphincter wider.
<br><br>
You tell $i2.him that $i2.his ass is so nice you feel like sharing it.
$i2.He's not quite sure how to respond,
and before $i2.he can figure it out, your
<<repfull _u>> finally finished $i1.his business and entered the $i.room.
<<if $unit.player.getLover() == _u>>
<<They _u>> sneaks you a quick peck before taking
<<else>>
<<= _u.getName()>> takes
<</if>>
in the situation at a glance and seeing the depravity,
<<if _u.isHasDick()>>
immediately gets an erection
<<else>>
flushed with arousal<</if>>.
The slave begs incoherently as <<= _u.getName()>><<if !_u.isHasDick()>>, donning a strap-on,<</if>>
press their <<if _u.isHasDick()>><<udick _u>><<else>>phallus<</if>>
against your finger.
Its not clear whether <<= _victim.getName()>> is begging
<<= _u.getName()>> to dual penetrate $i2.his <<uanus _victim>>,
or begging you not to,
but whichever it is,
you withdraws your finger to give space for
<<= _u.getName()>> to shove $i1.himself inside.
<<= _victim.getName()>> jerks
with discomfort and gasps repeatedly
as the two of you begin to double penetrate $i2.him.
Both you and <<= _u.getName()>> pound <<= _victim.getName()>> quite hard.
When you've both had your fun, extracted yourselves,
and let the exhausted, gaped bitch collapse onto the floor.
<<if $unit.player.getLover() == _u>>
<<= _u.getName()>> turns over to you and blew a kiss towards you.
<<else>>
<<= _u.getName()>> gives you a naughty slap on your shoulders.
<</if>>
"That was fun", $i1.he says.
"Shall we flip $i2.him over and go again?", followed by a
quiet wail from the floor.
<<unset $i1>>
<<unset $i2>><<set _relation = $family.getRelation(_victim, _u)>>
<<if _relation>>
<<if _u.getSpeech() == setup.speech.friendly>>
You can see a slight reluctance in <<= _u.getName()>>'s eyes
to use <<their _u>> <<rep _relation>> sexually.
<<elseif _u.getSpeech() == setup.speech.cool>>
<<= _u.getName()>> shows complete indifference in being offered
the slave that was once <<their _u>> <<rep _relation>>.
<<elseif _u.getSpeech() == setup.speech.proud>>
<<= _u.getName()>> seems to be delighted to show <<their _u>> <<rep _relation>> their proper place in the world.
<<else>>
<<= _u.getName()>> enjoys the perversity of having to use <<their _u>> <<rep _relation>> as a slave.
<</if>>
<</if>><<if $unit.player.getLover() == _u>>
<<lovertextshort $unit.player>>.
That was enjoyable, but you are still in a mood for some more fun.
You suggested to your <<repfull _u>> for some additional fun time in $i.locgeneral together.
<<else>>
Approaching your <<repfull _u>> for some fun,
$i1.he grins slowly and happily walks to go to the $i.locgeneral together.
<</if>>
<<include 'InteractionTogetherPunishRelation'>>
There, <<= _u.getName()>> commands for your
<<titlefull _victim>> <<= _victim.getName()>> to approach.
<<if _u.isHasDick()>>
<<else>>
while <<= _u.getName()>> slowly reaches into $i1.his pant pockets.
<</if>>
You inform the slave that you and <<= _u.getName()>> will punish
$i2.him together.
<<= _victim.getName()>>'s eyes widen as <<= _u.getName()>>
<<if _u.isHasDick()>>
readies his <<udick _u>>.
<<else>>
fishes a massive strap out of $i1.his bag.
<</if>>
The surprise turns to fear
as <<= _u.getName()>> begins to slap it against
<<= _victim.getName()>>'s buttocks as you
pull her down on all fours.
<<ustripanus _u>>
<<= _u.getName()>> clearly wants $i2.his ass, so you
<<if !_hasdick>>
ride $i2.his face
<<else>>
facefuck $i2.him
<</if>>
roughly as <<= _victim.getName()>> takes a painful anal raping from
<<if _u.isHasDick()>>
<<= _u.getName()>>'s dick.
<<else>>
the huge dildo.
<</if>>
<<ustripmouth _u>>
<<= _u.getName()>> nods at you while you <<uadjper _u>>ly extracts squeals from
<<= _victim.getName()>>
that feel especially delicious
<<if !_hasdick>> against your cunt<<else>>along your dick<</if>>.
<<= _victim.getName()>> collapses
after a long punishment <<if _hasdick>>spitroast<<else>>fuck<</if>> and ends up as sore <<uadjphys _victim>> toy.
<<if $unit.player.getLover() == _u>>
You stored the toy away, before going back to continue your lovemaking with your
<<urace _u>> lover.
<</if>><<if $unit.player.getLover() == _u>>
<<lovertextshort $unit.player>>.
That was enjoyable, but you are still in a mood for some more fun.
You suggested to your <<repfull _u>> for some additional fun time in $i.locgeneral together.
<<else>>
Approaching <<rep _u>> for some fun,
$i1.he grins slowly and happily walks to go to the $i.locgeneral together.
<</if>>
<<include 'InteractionTogetherPunishRelation'>>
There, <<= _u.getName()>> commands for your
<<titlefull _victim>> <<= _victim.getName()>> to approach
<<if !_u.isHasDick()>>
while <<they _u>> dons a strap-on
<</if>>.
<<ustripmouth _victim>>
Without warning, <<= _u.getName()>> <<uadv _u>> shoved <<their _u>>
<<if _u.isHasDick()>>
<<udick _u>>
<<else>>
strap-on
<</if>>
down <<= _victim.getName()>>'s throat ---
with <<= _victim.getName()>>'s <<uhead _victim>> between
<<their _u>> legs,
<<= _u.getName()>> is clearly enjoying <<himself _u>>.
Not wanting to lose out the action, you ask <<= _u.getName()>> to continue while sitting
on the $i.bed.
Getting the idea,
without ever letting <<= _victim.getName()>>'s <<uhead _victim>> out from between <<their _u>>
<<ulegs _u>>, <<= _u.getName()>> dragged the struggling <<= _victim.getName()>> with
<<them _u>>.
You
<<if !_hasdick>>pull on a strap-on, and then<</if>>
seize <<= _victim.getName()>>'s hips and hoist them into the air, giving her a horrible second of anticipation.
<<uyoustripanus _victim>>
You proceed to manhandle <<if !_hasdick>>the cruelly large phallus<<else>>your <<udick $unit.player>><</if>>
into place.
<<They _victim>> gives a strangled squeal of protest at the feeling of you pushing your way
inexorably up <<their _victim>> poor <<uanus _victim>>, making
<<= _u.getName()>> jerk with surprise at the sensation of <<= _victim.getName()>> howling into
<<their _u>> <<if _u.isHasDick()>>crotch<<else>>strap<</if>>.
You and <<= _u.getName()>> continues for twenty minutes
<<if $unit.player.getLover() == _u>>
(interpersed with lovemaking between the two of you)
<</if>>
before leaving
the slave quiescent on the $i.floor of the $i.room.
After <<= _u.getName()>> locked the $i.room door back,
<<they _u>>
<<if $unit.player.getLover() == _u>>
<<uadv _u>> gave you an appreciative kiss.
<<else>>
<<uadv _u>> gave you a high-five.
<</if>><<run new setup.Interaction(
'unit_together_punish',
'Punish a disobedient slave',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionTogetherPunish',
[], /* Cost */
[
setup.qres.HasSlave(),
], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.per_submissive),
setup.qres.NoTrait(setup.trait.per_chaste),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set _slavelist = $company.player.getUnits({job: setup.job.slave, not_injured: true, home: true}).filter(unit => unit.isHasTrait(setup.trait.training_none))>>
<<set _slavelist = _slavelist.filter(unit => unit.isUsableBy($unit.player) || unit.isUsableBy($g.target))>>
<<if _slavelist.length>>
Which slave would you suggest to <<rep $g.target>> to punish together?
<div id='divholder'>
<<for _islave, _slave range _slavelist>>
<<capture _slave>>
<<rep _slave>>
<<link '(punish)'>>
<<replace '#divholder'>>
<<set _victim = _slave>>
<<include 'InteractionTogetherPunishDo'>>
<</replace>>
<</link>>
<br/>
<</capture>>
<</for>>
</div>
<<else>>
There are no available disobedient slave for you to punish.
<</if>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_victim, setup.equipmentslot.mouth)>>
<<set _gagged = _victim.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _victim>>
<<if Math.random() < 0.5>>
<<include 'InteractionTogetherPunishSpitroast'>>
<<else>>
<<include 'InteractionTogetherPunishSpitroast2'>>
<</if>><<if $unit.player.getLover() == _u>>
<<lovertextshort $unit.player>>.
That was enjoyable, but you are still in a mood for some more fun.
You suggested to your <<repfull _u>> for some additional fun time in $i.locgeneral together.
<<else>>
Approaching your <<repfull _u>> for some fun,
$i1.he grins slowly and happily walks to go to the $i.locgeneral together.
<</if>>
<<include 'InteractionTogetherPunishRelation'>>
Once you arrived at the $i.room,
you enter and approached the slave <<rep _v>>,
while <<name _u>> lays on the $i.bed.
You point meaningfully at your
<<if _hasdick>>
stiff prick,
and the obedient slave clambers
up to suck you off.
When you're close, you surprise <<them _v>>
by pulling your cock out of <<their _v>> <<umouth _v>> and blowing your load onto <<name _u>>'s <<ubreasts _u>>.
<<else>>
hot cunt, and the obedient slave
clambers up to eat you out.
You surprise <<them _v>> by taking your time,
drawing out the oral session with the ulterior motive of getting as much saliva and pussyjuice
onto the $i.bed as possible, with some landing on <<name _u>>'s <<ubreasts _u>>.
<</if>>
"Clean me off, " <<name _u>>
demands, winking broadly at you.
The slave hurriedly repositions <<themself _v>> to lick up the
<<if _hasdick>>ejaculate<<else>>girlcum<</if>>
from <<name _u>>'s <<ubreasts _u>>.
<br><br>
While <<name _u>> is enjoying the sensation of a slave licking up <<their _u>> <<ubody _u>> clean,
the slave is now positioned into a crouch with <<their _v>> ass pointed at you,
<<if _v.isHasTrait('anus_gape')>>
<<their _v>> big asspussy practically begging for a pounding.
<<elseif _v.isHasTrait('anus_loose')>>
<<their _v>> nice asshole practically begging for a good hard fucking.
<<else>>
<<their _v>> tight little rosebud completely vulnerable.
<</if>>
As you <<if _hasdick>>stroke yourself rapidly back to full mast<<else>>don a strap-on<</if>>,
<<name _u>> opines helpfully, "Hey <<name _v>>!
You're about to get buttfucked!"
The slave reacts by obediently reaching back to spread <<their _v>> buttocks,
and relaxes <<their _v>> <<uanus _v>>,
but <<name _u>> ruins <<their _v>> attempt at graceful anal submission.
"<<name $unit.player>>, <<they _v>>'s bluuuushing," <<they _u>>
says tauntingly, and the slave stiffens with renewed embarrassment,
not to mention discomfort, as you penetrate <<them _v>>.
<<They _v>> keeps licking away,
cleaning up the mess you made over <<name _u>>'s <<ubody _u>>,
as <<name _u>> enjoys the slave's pleasuring tongue.
<<if $unit.player.getLover() == _u>>
Partway through, <<name _u>> sticks out a <<uhand _u>> for a high-five from you,
producing a gurgle of indignation as <<their _v>> owners high-five over <<their _v>> back.
<<else>>
Partway through, <<name _u>> leaned over to your side, which you reciprocate with a kiss.
You can hear a gurgle of indignation from <<name _v>> as <<their _v>> owners make love over <<their _v>> back.
<</if>><<run new setup.Interaction(
'unit_together_use',
'Use an obedient slave',
'FCdev (Free Cities)', /* author */
[], /* tags */
'InteractionTogetherUse',
[], /* Cost */
[
setup.qres.HasSlave(),
], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.per_submissive),
setup.qres.NoTrait(setup.trait.per_chaste),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set _slavelist = $company.player.getUnits({job: setup.job.slave, not_injured: true, home: true}).filter(unit => unit.isHasTrait(setup.trait.training_obedience_basic))>>
<<set _slavelist = _slavelist.filter(unit => unit.isUsableBy($unit.player) || unit.isUsableBy($g.target))>>
<<if _slavelist.length>>
Which slave would you suggest to <<rep $g.target>> to use together?
<div id='divholder'>
<<for _islave, _slave range _slavelist>>
<<capture _slave>>
<<rep _slave>>
<<link '(use)'>>
<<replace '#divholder'>>
<<set _victim = _slave>>
<<include 'InteractionTogetherUseDo'>>
<</replace>>
<</link>>
<br/>
<</capture>>
<</for>>
</div>
<<else>>
There are no available obedient slave for you and <<rep $g.target>> to use.
<</if>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_victim, setup.equipmentslot.mouth)>>
<<set _gagged = _victim.isHasTrait(setup.trait.eq_gagged)>>
<<loadinteractioncommon _victim>>
<<set _v = _victim>>
<<include 'InteractionTogetherUseLickCum'>><<run new setup.Interaction(
'assrape_on_the_bed', /* key */
"Assrape on the bed", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_assrape_on_the_bed',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.SlaveUsableByYou(),
setup.qres.SlaveOwnedByYou(), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
Entering your $i.room, illuminated by the $i.lighting is your slave
<<rep _u>> waiting obediently with $i.his <<ubody _u>> laid across the $i.bed.
When $i.he sees
<<if !_hasdick>>the big strap-on you're wearing<<else>>the kind of sex you're
in the mood for<</if>>,
$i.he turns over and pushes $i.his <<uface _u>> down into the sheets.
<<ustriplegs _u>>
<<ustripanus _u>>
$i.He pulls $i.his knees under $i.himself and reaches back to pull $i.his
buttocks apart, relaxing and then clenching $i.his <<uanus _u>>
invitingly.
$i.He starts
<<if !_u.isCanTalk()>>
to point an inviting finger at $i.his backdoor,
<<else>>to beg "Please assrape me, M-" into the sheets,<</if>>
but you interrupt $i.him by shoving $i.him forward so that $i.he's all the way facedown on the $i.bed.
$i.He knows how you like it and starts to wriggle, struggle,
and whine as you roughly sodomize $i.him, <<if !_hasdick>>the strap-on<<else>>your cock<</if>>
ramming straight up $i.his ass despite the uncomfortable angle.
$i.He continues to wrestle with you, sometimes even managing to dislodge
<<if !_hasdick>>the strap-on<<else>>your <<udick _u>><</if>>,
allowing you the <<if !_hasdick>>cruel delight<<else>>delicious sensation<</if>>
of pushing it back up $i.his butt each time.
Despite the pretense $i.his enjoyment is obvious;
<<if _chastity>>despite $i.his chastity caged cock,
$i.he's grinding against you as eagerly as a <<uman _u>> making love with $i.his
<<if _u.isMale()>>dick<<else>>pussy<</if>>.<<elseif _u.isHasDick()>>$i.he
can't stop $i.himself from humping $i.his rock-hard cock against
the sheets below $i.him.<<else>>$i.he can't
stop $i.himself from humping $i.his erect clit against the sheets below $i.him.
<</if>>
<<if _u.isCanOrgasm()>>
$i.He finally orgasms, sobbing with overstimulation when you
<<else>>
You
<</if>>
pound $i.him for a while longer before
<<if !_hasdick>>
finding your own climax<<else>>
shooting rope after rope of cum into $i.him<</if>>.
$i.He quickly cleans you with $i.his <<umouth _u>> and heads to clean $i.himself.<<run new setup.Interaction(
'double_penetrate_with_the_fuckmachine', /* key */
"Double penetrate with the Fuckmachine", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_double_penetrate_with_the_fuckmachine',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.Trait(setup.trait.training_anal_basic),
setup.qres.SlaveBedchamberHasFurniture(setup.item.f_object_master_fuckmachine), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
You enter the $i.locgeneral,
which
<<if $i.owner == $unit.player>> you own\
<<else>>is owned by <<rep $i.owner>>\
<</if>>.
Within the room is a rare and highly valuable "decoration" dubbed the $i.object.
From the outside, it simply looks like a dildo sticking out on a stick.
But apparently the device has been enchanted and when the time is right, the enchantment
can move the dildo up and down. If placed inside a slave's hole, it could make for an amusing sight.
<br/>
<br/>
Seeing the obedient and anally trained slave <<name _u>> in the room, a depraved idea comes into your mind.
You indicate the $i.object in the corner of the room, and the slave
obediently hurries over to it.
It's vertical, and $i.he hops up on it, positioning $i.his <<uanus _u>> over its
large dildo. It inserts itself
gently but firmly and then stops,
the panting slave's
<<ulegs _u>>
quivering a little from supporting $i.his body in its perch atop the machine,
and from the fullness of $i.his anus.
$i.He knows this is going to be challenging, and is breathing deeply,
doing $i.his best to stay relaxed.
You cannot resist slapping your <<if _hasdick>><<udick $unit.player>> lightly<<else>>lubricated strap-on<</if>>
against $i.his cheek,
producing a groan of apprehension.
<br><br>
You push $i.him gently backward,
letting $i.him get accustomed to the new angle.
<<if _u.isHasTrait('breast_titanic')>>
$i.His monstrous tits spread to either side of $i.his
now upright torso,
and you take a moment to play with them as $i.he prepares $i.himself.<</if>>
<<if _u.isHasVagina()>>
$i.He gasps as $i.he feels <<if _hasdick>>your hot dickhead<<else>>the slick head of your strap-on<</if>>
part $i.his pussylips, no doubt feeling full already.
When you're all the way in, $i.object begins to magically operate the dildo in $i.his butt ---
fucking $i.him harder and harder.
The all-encompassing feeling of fullness as $i.his cunt and ass
are fucked to the very limit of their capacities
<<else>>
$i.He gasps as $i.he feels you push a finger up $i.his
already-full butt and pull $i.his sphincter a bit wider.
You withdraw it and replace it with <<if _hasdick>>your <<udick $unit.player>><<else>>your strap-on<</if>>;
the slave writhes involuntarily, $i.his <<ubody _u>> trying to refuse the invasion of yet another phallus.
When you're all the way in, the $i.object's dildo alongside your <<if _hasdick>>dick<<else>>strap<</if>>
in $i.his butt begins to work its magic to fuck $i.him, harder and harder.
The all-encompassing feeling of fullness as $i.his ass is fucked to the very limit of its capacity
<</if>>
quickly drives all <<if _u.isFemale()>>feminine grace<<else>>masculinity<</if>>, presence of mind, or really,
conscious thought out of the poor slave.
After begging for mercy for a short while, $i.he lapses into
animal groans, drooling and leaking tears out the corner of $i.his <<ueyes _u>>
as you and the unfeeling $i.object fuck $i.him into insensibility.
When you climax, the $i.object magically ejaculates, filling the slave's anus with warm fluid.
<br><br>
By this point $i.he's so helpless that you gently lift $i.him off the $i.object
and carry $i.him to the $i.slavebed.
You set $i.him down there, and you contemplated asking
<<set _doctor = $dutylist.getUnit('DutyDoctor')>>
<<if _doctor>>your doctor <<rep _doctor>>
<<else>>a doctor
<</if>>
to breathe life back into your exhausted fuckpuppet.<<run new setup.Interaction(
'double_penetrate_with_the_owner', /* key */
"Double penetrate with the owner", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_double_penetrate_with_the_owner',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Not(setup.qres.SlaveOwnedByYou()),
setup.qres.Owner(setup.qres.Trait(setup.trait.dick_tiny)), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _v = _u.getBedchamber().getSlaver()>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _v>>
<<loadinteractioncommon _u>>
As you enter the $i.room,
its owner and your
<<repfull _v>> is in the middle of
fucking <<rep _u>> with $i2.his <<udick _v>>.
The slave is
<<if !_v.isHasTrait('dick_medium')>>
enjoying $i1.himself even though the dick in $i2.his
<<if _u.isHasVagina()>>pussy<<else>>ass<</if>>
is a little disappointing<<elseif !_v.isHasTrait('dick_large')>>enjoying the sex<<else>>
enjoying the big dick, even if she does wince from time to time<</if>>.
<<if _v.isHasTrait('balls_large')>>
As <<name _v>> pounds, $i2.his big balls
slap against $i2.his slave.<<else>>
As <<name _v>> pounds, $i2.his balls tighten, preparing to empty themselves.<</if>>
Since <<name _u>> is busy riding <<name _v>>'s <<udick _v>>,
it's a trivial matter to<<if !_hasdick>> don a strap-on,<</if>>
come up behind them, and insert yourself
<<if _u.isHasVagina()>>
into <<name _u>> unused anus.
<<else>>
into <<name _u>> crowded anus, double penetrating $i1.his <<uanus _u>>.
<</if>>
<<name _u>>
<<if !_v.isHasTrait('dick_medium')>>
gasps as your <<if !_hasdick>>strap-on complements the small dick<<else>><<udick $unit.player>> complements
the small one<</if>>
in $i1.his <<if _u.isHasVagina()>>pussy<<else>>anus<</if>>
<<elseif !_v.isHasTrait('dick_huge')>>shrieks as
$i1.he feels $i1.his <<if _u.isHasVagina()>>holes<<else>>anus<</if>> stretched by
<<if !_hasdick>>a strap-on and a cock<<else>>two cocks<</if>><<else>>struggles and begs
for mercy as $i1.his <<if _u.isHasVagina()>>holes are<<else>>anus is<</if>> brutally stretched<</if>>.
The poor slave rides out the sexual storm as you and
$i1.his owner <<name _v>> fuck $i1.him<<if _hasvagina>>,
your pussy sliding against the base of <<name _v>> thrusting shaft<</if>>.
<<if _v.isHasTrait('per_lustful')>>
The lustful slaver
<<name _v>> flirts outrageously with you over the slave's shoulder whenever $i2.he can.
<</if>>
Eventually both of you finish,
<<if _hasdick>>
cumming in unison explosively inside the slave's
<<if _u.isHasVagina()>>holes<<else>>anus<</if>>.
<<else>>
with <<name _v>> cumming explosively inside the slave's
<<if _u.isHasVagina()>>pussy<<else>>anus<</if>> while you climax.
<</if>>
<<if $unit.player.getLover() == _v>>
With the slave fully spent, you and your lover spent a moment in each other's
arms, having enjoyed the double penetration quite a bit.
<</if>><<run new setup.Interaction(
'fuck_the_mindbroken_slave', /* key */
"Fuck the mindbroken slave", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_fuck_the_mindbroken_slave',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.Trait(setup.trait.training_mindbreak), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<loadinteractioncommon _u>>
You went into the $i.locgeneral and called
your <<titlefull _u>>
<<name _u>> over.
As <<name _u>> is mindbroken, $i.he did not respond to you and you have
no choice but to approach the slave yourself.
You<<if !_hasdick>> don a strap-on and<</if>>
slide your <<uhands $unit.player>> around $i.his
waist, feeling the warmth of $i.his skin,
and gently step forward until $i.he's
between you and the $i.room's walls.
$i.He is silently obedient, not reacting at all other than to obey your
direction as to where $i.he should go.
<<ustripanus _u>>
When $i.he feels
<<if !_hasdick>>the phallus<<else>>your hardening <<udick $unit.player>><</if>>
pressing against $i.him, $i.he
<<if !_u.isHasTrait('height_short')>>
unconsciously bends forward a little and cocks $i.his hips to position $i.himself<<else>>
rises up on the balls of $i.his <<ufeet _u>> to bring $i.his short body up to the right height<</if>>
for anal. $i.He relaxes $i.his <<uanus _u>>
completely, making entry easy.
Your <<uhands $unit.player>> rove, teasing $i.his <<unipples _u>>,
<<if _u.isHasTrait('breast_huge')>>
hefting $i.his heavy tits<<elseif _u.isHasTrait('breast_small')>>squeezing $i.his healthy breasts<<else>>
pressing $i.his <<ubreast _u>><</if>>. $i.His <<uface _u>> is complacent and unaffected even as
$i.his <<ubody _u>> responds,
<<if _u.isHasTrait('eq_chastity')>>
since $i.his body is used to its caged cock being neglected in favor of $i.his asspussy
<<elseif _u.isHasTrait('dick_huge')>>$i.his giant penis pressing and bending against the walls
<<elseif _u.isHasTrait('dick_medium')>>$i.his penis pressing hard against the walls
<<elseif _u.isHasDick()>>$i.his pathetic hardon barely protruding from between $i.his thighs
<<else>>$i.his pussy warm and wet under a brush from your fingers<</if>>.
Even $i.his eventual orgasm is entirely mechanical,
a simple tightening of $i.his <<uanus _u>>,
a gasp of air into $i.his lungs, and a slight shiver.
There is a flaw at the corner of $i.his <<umouth _u>> that might be transitory pleasure,
but a look into $i.his <<ueyes _u>> confirms that it is not so.
<<unset $i>><<run new setup.Interaction(
'gentle_sex', /* key */
"Gentle sex", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_gentle_sex',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.SlaveUsableByYou(),
setup.qres.SlaveOwnedByYou(),
setup.qres.FriendshipWithYouAtLeast(500), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
Entering your $i.location, you command your devoted slave <<rep _u>> to prepare
$i.his holes.
<<ustripanus _u>>
<<ustripvagina _u>>
Being a devoted slave, $i.he almost sobs with joy as
<<if !_hasdick>>
your strap-on enters<<else>>you enter<</if>> $i.him.
The two of you have
<<if !_u.isHasVagina()>>
gentle anal sex
<<else>>
passionate oral, vanilla, and finally anal sex<</if>>
for the rest of the day.
As you move from position to position,
$i.he twists to face you whenever $i.he can.
When $i.he manages it,
$i.he kisses you when $i.he can reach your lips,
and $i.he
<<if _u.isCanSee()>>
stares deeply into your <<ueyes $unit.player>><<else>>meets your <<uface $unit.player>> with
$i.his own blindfolded face<</if>> when $i.he cannot.<<run new setup.Interaction(
'join_their_owner_in_punishing_the_slave', /* key */
"Join their owner in punishing the slave", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_join_their_owner_in_punishing_the_slave',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.Not(setup.qres.SlaveOwnedByYou()),
setup.qres.Owner(setup.qres.NoTrait(setup.trait.per_kind)),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _u = $g.target>>
<<set _v = _u.getBedchamber().getSlaver()>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _v>>
<<loadinteractioncommon _u>>
As you enter $i.location, you are greeted with your <<repfull _v>> disciplining
$i2.his private slave <<rep _u>> because <<upunishreason _u>>.
<<name _v>> has <<them _u>> bent over with $i1.his buttocks bare,
and is administering a punishing spanking with $i2.his <<uhands _v>>.
<<name _u>>'s skin is starting to show the force of the beating,
and $i1.he's begging desperately for mercy.
<br><br>
<<name _v>> meanwhile, is
<<if _v.isHasTrait('per_cruel')>>
obviously enjoying
<</if>>
torturing the poor slave for $i1.his failings.
$i2.He's
<<if _v.isHasDick()>>
jacking off furiously
<<else>>rubbing $i2.his sopping pussy<</if>>
with $i2.his other <<uhand _v>>, getting close to orgasm as the slave begs and moans.
<<if $unit.player.getLover() == _v>>
As the torture continues, you occassionally lean closer towards your lover and
sneaked a kiss or two, enjoying the contrast between the loving and the abuse.
<</if>>
With a knowing nod, <<name _v>> continues with the spanking while you approach the slave.
<<name _u>> has one anguished second to realize what's
happening before you shove yourself
<<if !_hasdick>>against $i1.his <<umouth _u>><<else>>down $i1.his throat<</if>>.
$i1.He gags reflexively, jerking back,
only to jerk forward again in automatic pain avoidance when
<<name _v>> hits $i1.his
already-sore buttocks yet again.
$i1.He's broken enough to understand that $i1.he
needs to relax and let $i1.himself be abused, but $i1.his <<ubody _u>>'s reflexive responses deny
$i1.him the relief that might give.
<<if _v.isHasTrait('per_cruel')>>
The
sadistic
owner <<name _v>> comes twice
before you do from watching the cruelty unfolds,
a deliciously aggressive expression on $i2.his face.
<</if>>
After some more tug of war between you and <<name _v>>,
<<if _hasdick>>
you came down <<name _u>>'s throat.
<<else>>
you climaxed.
<</if>>
Poor <<name _u>>
staggers off coughing, promising to be good.<<run new setup.Interaction(
'make_love_on_the_bed', /* key */
"Make love on the bed", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_make_love_on_the_bed',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.SlaveUsableByYou(),
setup.qres.SlaveOwnedByYou(),
setup.qres.FriendshipWithYouAtLeast(500),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
Entering your $i.room, illuminated by the $i.lighting is your slave
<<rep _u>> waiting obediently with $i.his <<ubody _u>> laid across the $i.bed.
When $i.he sees the kind of lovemaking you're in the mood for,
$i.he spreads $i.him <<uarms _u>> for you, smiling gently.
$i.He kisses you lovingly,
<<if !_u.isCanTalk()>>taking your hand in $i.his and drawing a heart on your palm with one finger.
<<else>>
"I love you."
<</if>>
<<if _hasvagina>>$i.He lies on $i.his side and raises one leg
for you so you can straddle the other,
sliding up to press your pussy against $i.his submissive groin.
You grind against $i.him; the stimulation is so strong that $i.he
writhes into the sheets, panting and whining.
<<if _hasdick>>Your stiff dick, unused for once, slides deliciously between your warm
bodies.
<</if>>
<<else>>
<<if _u.isHasVagina()>>
$i.His pussy is warm and very wet,
making penetration easy;
$i.he gasps and arches $i.his back,
clasping you between $i.his <<ulegs _u>> as $i.his <<ueyes _u>> look deep into yours.
<<else>>$i.His butt is relaxed and welcoming,
and $i.he holds $i.his legs back to take missionary anal loving as
$i.his <<ueyes _u>> look deep into yours.
<</if>>
<</if>>
You both know each other quite well,
and maintain the gentle communion for a long time.
When $i.he senses your climax building, $i.he lets $i.himself climb
to orgasm with you, holding
<<if !_hasdick>>your hips in $i.his <<uhands _u>><<else>>
you in $i.his <<uarms _u>><</if>>.
$i.He quickly cleans you with $i.his <<umouth _u>> and heads out to cleam $i.himself.<<run new setup.Interaction(
'play_with_the_slave', /* key */
"Play with the slave", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_play_with_the_slave',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.SlaveUsableByYou(),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
Entering the $i.room, you see the slave <<rep _u>>
resting obediently at the $i.slavebed.
You get into the $i.bed and crook a finger, silently ordering $i1.him to join you.
<<ustriptorso _u>>
<<ustriplegs _u>>
$i.He then bounces over,
<<if _chastity>>
$i.his posture communicating the arousal that $i.his caged cock cannot
<<elseif _u.isHasTrait('dick_huge')>>$i.his massive cock rock hard
<<elseif _u.isHasTrait('dick_medium')>>$i.his erection standing out stiffly
<<elseif _u.isHasDick()>>$i.his tiny little dick poking out stiffly
<<else>>
$i.his pussylips shining with arousal
<</if>>.
As $i.he climbs into the $i.bed you take
$i.his <<uhand _u>> and guide $i.him into your lap,
facing away from you.
$i.He sighs happily and snuggles $.his
<<uback _u>>
into your <<ubreast $unit.player>>.
You
<<if _u.isHasTrait('breast_huge')>>
run your hands across $i.his massive chest
<<elseif _u.isHasTrait('breast_large')>>
heft $i.his heavy breasts<<elseif _u.isHasBreasts()>>
massage $i.his pretty chest
<<else>>
fondle $i.his <<ubreast _u>>
<</if>> and tease $i.his
<<unipples _u>>,
as $i.he shimmies $i.himself back
<<if !_hasdick>>
so $i.his warmth is against yours, your <<ulegs $unit.player>> spreading $i.his<<else>>
onto you so your cock is lodged between $i.his<</if>>
buttocks.
When $i.he's close to orgasm from all the stimulation,
$i.he reflexively squeezes
<<if !_hasdick>>
your <<ubody $unit.player>> between $i.his <<ulegs _u>><<else>>
your <<udick $unit.player>> between $i.his asscheeks<</if>>,
bringing you to climax.
At the feeling of your <<if !_hasdick>>juices<<else>>warm cum<</if>>
between $i.his thighs, $i.he tips over the edge and
<<if _chastity>>
shivers with orgasm, ejaculate dribbling out of $i.his chastity cage
<<elseif _u.isHasTrait('balls_huge')>>
making a massive mess all over $i.himself from $i.his own <<uballs _u>>
<<elseif _u.isHasTrait('balls_medium')>>adding $i.his own load to the mess
<<elseif _u.isHasBalls()>>adding $i.his own pathetic load to the mess
<<else>>quivers in your grasp, gasping, before relaxing back into you in a puddle of satisfaction<</if>>.<<run new setup.Interaction(
'rough_sex', /* key */
"Rough sex", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_rough_sex',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.SlaveUsableByYou(),
setup.qres.SlaveOwnedByYou(),
setup.qres.FriendshipWithYouAtMost(-500), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
Entering your $i.location, you command your devoted slave <<rep _u>> to prepare
$i.his holes.
<<ustripanus _u>>
You order $i.him to kneel. $i.He looks at you with fear,
which is confirmed when
you<<if !_hasdick>> don a strap-on and<</if>>
<<if _hasvagina>>use a couple of fingers to collect some of your pussyjuice for improvised
lube<<else>>spit on $i.his butthole<</if>>.
With only a little <<if _hasvagina>>juice<<else>>saliva<</if>> as lubrication,
you brutally sodomize $i.him, fucking $i.his ass to
the limit of what you can get away with without damaging $i.him.
<<if _u.getMainTraining().getTags().includes('tranal')>>
$i.He loves anal so much that
after a while pleasure overwhelms pain to the extent that $i.he manages a
sobbing orgasm<<else>>
$i.He gets the message: $i.he's your property and
$i.his desires are entirely subject to your will.
<</if>><<run new setup.Interaction(
'torture_chastitied_dick', /* key */
"Torture chastitied dick", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_torture_chastitied_dick',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.Trait(setup.trait.eq_chastity), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
With a cruel smirk, you go to the $i.locgeneral
and command your slave <<rep _u>> to approach.
As <<name _u>> approached, you can see
<<their _u>> <<udickall _u>>.
<<if _u.isHasTrait('balls_large')>>
An overfull pair of huge balls hang heavily under them, begging for the release that never came.
<<else>>
An overfull pair of balls hang under them, begging for the release that never came.
<</if>>
And you have no plans to empty them anytime soon.
<br/>
<br/>
You walk around to stand behind the slave.
$i.He knows $i.he's fucked, and starts to shake with fear.
You put a foot on $i.his ass and shove $i.him down
to lie flat on the floor,
and then straddle $i.him,
shoving <<if _hasdick>>your cock up $i.his butt<<else>>one more finger than she can comfortably take up $i.his
butt<</if>>.
$i.He tries to beg for mercy, but you give $i.him a warning slap,
and $i.he shuts up.
Despite your roughness, $i.he's so horny that $i.he starts to get hard.
You can't see or feel this directly, of course, but it's easy to tell from $i.his
desperate sobbing and involuntary writhing, and the lovely spasming of $i.his anal sphincter.
$i.His tears dry up as $i.he builds towards a climax; orgasm might be an
uncomfortable experience for $i.him, but it will buy $i.him a few minutes free of discomfort.
<br><br>
But she's to be disappointed.
You <<if _hasdick>>worm a <<uhand $unit.player>> down between $i.his ass and your stomach,
and shove a finger up inside $i.him, alongside your dick<<else>>
use the <<uhand $unit.player>> that isn't fucking $i.him to pull one of $i.his arms around behind $i.him
into a painful joint lock<</if>>.
<<if _u.isMasochistic()>>
You intended to use the sudden pain to ruin $i.his building orgasm, which backfired
as you suddenly remembered the masochistic tendency of the slave.
<<name _u>> came hard and painfully from the pain, earning <<them _u>> a brief moment of
relief.
<<else>>
The pain ruins $i.his building orgasm,
and $i.he cries with frustration and despair as $i.he realizes that $i.he won't be getting off today.
You force $i.him to experience this horrible near-release twice more,
bringing $i.him to a terribly uncomfortable state of arousal and then using
sudden pain to destroy any chance $i.he has of getting relief.
<</if>>
All the wriggling and jerking around is good for you, though.<<run new setup.Interaction(
'use_both_bedchamber_slaves', /* key */
"Use both bedchamber slaves", /* Title */
'FCdev (Free Cities)', /* author */
[ ], /* tags */
'Interaction_use_both_bedchamber_slaves',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.SlaveBedchamberFullUsableByYou(),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>>You decide to move closer to slide behind <<name _u>>.
<<They _u>> anticipates you, and is already sliding
<<themself _u>> partway out of <<utheirrel _u _v>> <<name _v>>
and cocking <<their _u>> hips to spread <<their _u>>
buttocks as wide as <<they _u>> can without letting <<name _v>>'s <<umouth _v>> free.
Up on the $i.bed <<they _u>>'s at just the right height, and
<<they _u>> winks <<their _u>>
<<uanus _u>>
invitingly.
<<if !_hasdick>>You pull on a strap-on and push it<<else>>You push yourself<</if>>
home with some force, your slave's state of arousal leaving <<their _u>> ass very relaxed and welcoming;
the thrust shoves <<them _u>> forward to hilt <<themself _u>> in <<name _v>>.
You reach around and
<<if _u.isHasTrait('breast_large')>>heft <<name _u>>'s heavy boobs
<<elseif _u.isHasTrait('breast_small')>>
tease <<name _u>>'s healthy breasts
<<else>>
fondle <<name _u>>'s <<ubreasts _u>>
<</if>>,
nibbling <<their _u>> <<uneck _u>>,
and generally torturing $i1.him with stimulation.
<<if _bedchamber.getOption('orgasm') == 'no' || _uchastity>>
$i1.He is not allowed to climax, but even so you can see $i1.him shudder to keep $i1.himself from climaxing.
<<else>>
$i1.He eventually climaxes for $i1.his <<master $unit.player>>.
<</if>>
When $i1.he does, you extract yourself and pull $i1.him unceremoniously
off <<name _v>>, and swap $i1.his position with <<name _u>> so that
<<name _v>> now penetrates <<name _u>>.
In turn, you slide your
<<if _hasvagina>>
strap-on
<<else>>
dick
<</if>>
up <<name _v>>'s butt.
You swap again and again, while climaxing from time to time
<<if _bedchamber.getOption('orgasm') == 'no' || _uchastity>>
while torturing the slaves with denial
<<else>>
together with the slaves
<</if>>
until you eventually run out of energy.<<name _v>>'s <<ueyes _v>> widen when you push $i2.him upright
for a moment and slide in under $i2.him, but $i2.he wraps $i2.his
lips around your
<<if !_hasdick>>clit<<else>><<udick $unit.player>><</if>>
<<if _hasvagina>>
and starts stroking your pussy
<</if>>
eagerly enough, even as
<<name _u>>
goes back to sodomizing $i2.him.
<<name _v>> gets enough of a
buttfuck from <<utheirrel _v _u>> <<name _u>> that $i2.he whimpers quietly into your
<<if _hasvagina>>pussy<<else>>dick<</if>>,
a nice feeling.
The blowjob is
<<if _v.isHasTrait('training_oral_master')>>masterful, despite the distraction
<<elseif _v.isHasTrait('training_oral_advanced')>>serviceable, despite the distraction
<<elseif _v.isHasTrait('training_oral_basic')>>serviceable, despite the distraction
<<else>>only mediocre, but serviceable enough
<</if>>, so you let $i2.him work for a
while before gently shoving $i2.him off the side of the bed and telling <<them _v>> to get to
the back of <<name _u>>.
As <<name _v>> in turn penetrates your slave <<name _u>> <<uanus _u>>, you
<<if _hasdick>>insert your cock into<<else>>deliver your pussy to<</if>>
<<name _u>>'s mouth.
As you repeat the process over and over,
you climax on occasion, but are enjoying
yourself so immensely that you let the slaves continue the rotation until you're
entirely spent, and they're entirely exhausted.<<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _bedchamber = $g.target.getBedchamber()>>
<<set _u = $g.target>>
<<if _u == _bedchamber.getSlaves()[0]>>
<<set _v = _bedchamber.getSlaves()[1]>>
<<else>>
<<set _v = _bedchamber.getSlaves()[0]>>
<</if>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _v>>
<<set _uchastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _vchastity = _v.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_v, setup.equipmentslot.mouth)>>
<<set _gagged = _v.isHasTrait(setup.trait.eq_gagged)>>
<<set _uadvanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _vadvanced = _v.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _ubasic = _u.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _vbasic = _v.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _udick = _u.isHasDick()>>
<<set _vdick = _v.isHasDick()>>
<<set _us = $family.getRelation(_v, _u)>>
<<set _vs = $family.getRelation(_u, _v)>>
<<set _uf = $friendship.getFriendship($unit.player, _u)>>
<<set _vf = $friendship.getFriendship($unit.player, _v)>>
<<loadinteractioncommon _u>>
When you enter the $i.room, you are greeted with a scene.
Your obedient slave <<rep _u>> had to turn to greet you as you entered,
since $i1.he was facing away from the entry,
and the reason why is rather obvious.
Up near the opposite wall,
<<utheirrel _u _v>> <<rep _v>>
is on the $i.floor with $i2.his face down and $i2.his ass up.
<<name _v>>'s <<uanus _v>>
is
<<if _u.isHasDick() && !_uchastity>>
filled by <<name _u>>'s <<udick _u>>
<<else>>
filled by a
<<if _v.isHasTrait('anus_gape')>>
huge
<<elseif _v.isHasTrait('anus_loose')>>
big
<<else>>
moderate
<</if>>
strap-on worn by <<name _u>>
<</if>>
<<if _u.isHasTrait('breast_titanic')>>
whose tits are so unreasonably large they're resting on
<<name _v>>'s <<ubody _v>>.
<<else>>
who is propped up against <<name _v>>'s butt.
<</if>>
<<if _bedchamber.getOption('orgasm') == 'no'>>
They are not allowed to orgasm, so <<name _u>> is careful to slow
down the thrusting whenever a climax is coming.
<</if>>
Seeing you coming, <<name _u>>
paused $i1.his thrusting to
<<if _bedchamber.getOption('speech') == 'full'>>
greet you cheerfully.
<<else>>
greet you cheerfully (using body language).
<</if>>
<<if _uf < -500>>
$i1.Their cheerful attitude is obviously forced by obedience rather than devotion.
<</if>>
<br/>
<br/>
<<if Math.random() < 0.5>>
<<include 'Interaction_use_both_bedchamber_slaves_buttfuck'>>
<<else>>
<<include 'Interaction_use_both_bedchamber_slaves_oral'>>
<</if>><<run new setup.Interaction(
'use_both_obedient_bedchamber_slaves', /* key */
"Use both obedient bedchamber slaves", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_use_both_obedient_bedchamber_slaves',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.BedchamberOtherSlave(setup.qres.Trait(setup.trait.training_obedience_advanced)),
setup.qres.SlaveBedchamberFullUsableByYou(), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i1 = {}>>
<<set $i2 = {}>>
<<set $i = {}>>
<<set _bedchamber = $g.target.getBedchamber()>>
<<set _u = $g.target>>
<<if _u == _bedchamber.getSlaves()[0]>>
<<set _v = _bedchamber.getSlaves()[1]>>
<<else>>
<<set _v = _bedchamber.getSlaves()[0]>>
<</if>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i1 _u>>
<<pronounload $i2 _v>>
<<set _uchastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _vchastity = _v.isHasTrait(setup.trait.eq_chastity)>>
<<set _umouthequip = setup.Text.Unit.Equipment.getEquipmentAt(_v, setup.equipmentslot.mouth)>>
<<set _gagged = _v.isHasTrait(setup.trait.eq_gagged)>>
<<set _uadvanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _vadvanced = _v.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _ubasic = _u.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _vbasic = _v.isHasTrait(setup.trait.training_obedience_basic)>>
<<set _udick = _u.isHasDick()>>
<<set _vdick = _v.isHasDick()>>
<<set _us = $family.getRelation(_v, _u)>>
<<set _vs = $family.getRelation(_u, _v)>>
<<set _uf = $friendship.getFriendship($unit.player, _u)>>
<<set _vf = $friendship.getFriendship($unit.player, _v)>>
<<loadinteractioncommon _u>>
The two slaves assigned to $i.location have been highly trained to be obedient.
With a quick flick of your fingers,
<<rep _u>> and <<utheirrel _u _v>> <<rep _v>>
scampers quickly to your side.
<<if _hasdick>>
A simple pointing at your <<udick $unit.player>>is all it takes for the slaves to start
sucking on your cock.
<<ustripmouth _u>>
<<ustripmouth _v>>
<<name _u>>
<<if setup.UnitTitle.getMainTraining(_u).getTags().includes('troral')>>
rapturously<<else>>industriously<</if>>
sucking your dick as it rapidly hardens in $i1.his mouth.
Meanwhile, <<name _v>> is
<<if setup.UnitTitle.getMainTraining(_v).getTags().includes('troral')>>
hungrily<<else>>gently<</if>> sucking your nuts.
The two slaves have crowded close together,
and not just so they can both have access to your cock and balls. They're
<<if _u.isHasDick() && _v.isHasDick()>>jerking each other off<<else>>manually
stimulating each other<</if>> as they work.
<<else>>
A simple pointing at your <<ubreast $unit.player>>is all it takes for the slave to come over
to you.
Each slave is gently sucking one of your hardening nipples,
and one hand from each slave is moving delicately across your womanhood,
kindling a fire in your lower belly.
They're cuddled up closely under your <<uarms _u>>,
with a warm body pressed against each side of you.
You can feel their <<ubreast _u>> against your ribcage and the heat between their legs
against your thighs. You feel absolutely buried in the attentive slaves.
<</if>>
<br/>
<br/>
<<if $unit.player.getSpeech() != setup.speech.debauched && ($unit.player.getSpeech() == setup.speech.friendly || Math.random() < 0.5)>>
<<if _hasdick>>
You begin to thrust gently into <<name _u>>'s <<umouth _u>>.
The slaves moan into you and
<<if _u.isHasDick() && _v.isHasDick()>>
start jerking each other off harder, making lewd noises and humping each other's hands
<<else>>
really start giving each other proper handjobs, jerking around lewdly as their arousal builds<</if>>.
When you climax, they do, too, one after the other.
They quickly switch mouth positions and suck you back to full mast.
<<else>>
You reach down and run a possessive <<uhand $unit.player>> across each slave's scalp, neck, and back,
eliciting shivers. Then, you gently hook them under the armpits and
pull them up a bit, without breaking their lip locks with your nipples,
or forcing them to stop playing with your cunt.
Each slave ends curled up, mostly facedown, with their mouths still sucking on your
<<ubreasts $unit.player>>
and their free hands trapped between their legs.
They get the message and begin to look after themselves, too;
their resultant moaning against your nipples grows when you reach down
and start teasing their butts.
The three of you climax more or less together,
and you bounce up with undiminished arousal.
<</if>>
<br/>
<br/>
You order the slaves to present their buttholes for you.
The slaves comply, bent over the $i.bed with their buttocks spread.
<<if _hasdick>>
You select <<name _v>> and slide your <<udick $unit.player>> up $i2.his
<<if _v.isHasTrait('anus_gape')>>
welcoming asspussy
<<elseif _v.isHasTrait('anus_loose')>>
soft butthole
<<else>>
tight anus
<</if>>,
sodomizing $i2.him.
You later push <<name _u>> down next to <<utheirrel _u _v>> <<name _v>> and switch assholes.
<<else>>
You select <<name _v>> ame and straddle $i2.his <<uface _v>>,
letting $i2.him eat you out, before taking $i2.his face in your <<uhands $unit.player>> and kiss $i2.him deeply,
favoring $i2.him with the sensation of kissing $i2.his <<master $unit.player>>
<<if _v.isCanOrgasm()>>while $i2.she orgasm<</if>>.
<</if>>
The fucktoys are left satisfied as
you finally leave the $i.room.
<<else>>
<<if _hasdick>>
<<name _u>> feels a <<uhand $unit.player>> snake
behind $i1.his <<uhead _u>> and relaxes $i1.his throat,
knowing what's coming.
You fuck the bitch's <<umouth _u>> hard,
and since the pounding pulls your balls out of <<name _v>>'s mouth,
you yank $i2.him up towards you so you can maul $i2.his <<ubreasts _v>>.
The compliant slave thrusts out $i2.his chest,
presenting $i2.his
<<if _v.isHasBreasts()>>
tits
<<else>>
nipples
<</if>>
for use as toys, and then gasps as you pinch, squeeze, and twist.
You blow your load down <<name _u>>'s throat
<<else>>
You shove <<name _u>> down towards your pussy and grab $i1.his hair.
$i1.He takes a deep breath, knowing what's coming.
You grind your cunt against the bitch's mouth hard,
and since there's no room for <<name _v>>'s <<uhand _v>> there any more,
you yank $i2.him up towards you so you can maul $i2.his <<ubreasts _v>>.
The compliant slave thrusts out $i2.his chest,
presenting $i2.his
<<if _v.isHasBreasts()>>
tits
<<else>>
nipples
<</if>>
for use as toys, and then gasps as you pinch, squeeze, and twist.
You climax against <<name _u>>'s face
<</if>>
and bounce up to fuck the slaves.
<br><br>
<<if _hasdick>>
You grab <<name _u>> and shove $i1.him into a corner of the room
<<if _u.isHasTrait('breast_huge')>>
$i1.his huge tits slapping painfully against the walls<</if>>.
<<if _hasdick>>
$i1.He does $i1.his best to angle $i1.his hips for you as you push your cock up $i1.his ass and
give $i1.him a good hard reaming.
<<name _v>> soon
finds $i2.himself taking <<name _u>>'s place,
smashed into the corner with your dick pistoning in and out of $i2.his rectum.
<<else>>
$i1.He does $i1.his best to angle $i1.his hips for you as you fingerfuck $i1.his butthole,
forcing complete submission out of the compliant <<girl _u>>.
<<name _v>> soon
finds $i2.himself taking <<name _u>>'s place,
smashed into the corner with your fingers pistoning in and out of $i2.his rectum.
<</if>>
After a while, you drop both slaves on the $i.floor, and order them to present
their buttholes to you.
<br/>
<br/>
<<if !_hasdick>>
<<name _u>> gets to $i1.his feet and helpfully holds up a strap-on questioningly;
you shake your head and point to another, larger one.
<<name _u>> helps you into it, and you ram it up $i1.his <<uanus _u>> experimentally,
nodding in satisfaction when the big phallus forces a pained gasp out of $i1.him.
<</if>>
After a short while, the two used slaves are bent over the $i.bed with their buttocks spread.
They're perfectly still, awaiting your pleasure.
You select <<name _v>> and ram your dick up $i2.his
<<if _v.isHasTrait('anus_gape')>>
welcoming asspussy
<<elseif _v.isHasTrait('anus_loose')>>
soft butthole
<<else>>
tight anus
<</if>>,
assraping $i2.him without mercy.
You later push <<name _u>> down next to <<name _v>> and switch assholes.
When <<name _u>> has been buttfucked into helplessness,
you throw $i1.him away like the <<urace _u>> sex toy $i1.he is and pound
<<name _v>> senseless,
careful to frequently pull far enough out that the slaves have to take the pain of initial penetration again.
<<else>>
After a short while, the two used slaves are bent over the bed with their buttocks spread.
They're perfectly still, awaiting your pleasure.
You select <<name _v>> and ram your strap-on up $i2.his
<<if _v.isHasTrait('anus_gape')>>
welcoming asspussy
<<elseif _v.isHasTrait('anus_loose')>>
soft butthole
<<else>>
tight anus
<</if>>,
assraping $i2.him without mercy.
You later push <<name _u>> down next to <<name _v>> and switch assholes.
When <<name _u>> has been buttfucked into helplessness,
you throw $i1.him away like the <<urace _u>> sex toy $i1.he is and pound
<<name _v>> senseless,
careful to frequently pull far enough out that the slaves have to take the pain of initial penetration again.
<</if>>
When you finally leave the $i.room,
both slaves are lying like discarded tissues on the $i.bed,
facedown with their buttocks spread to relieve their sore assholes.
This will surely remind the fucktoys of who they are.
<</if>><<run new setup.Interaction(
'give_oral', /* key */
"Give Oral", /* Title */
"Quiver", /* Author */
[ ], /* tags */
'Interaction_give_oral',
[ /* costs */
],
[ /* prerequisites */
setup.qres.Player(setup.qres.NoTrait(setup.trait.per_dominant)),
],
[ /* unit requirements */
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.dick_tiny),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _p = $unit.player>>
<<pronounload $i _u>>
<<loadinteractioncommon _u>>
<p>
Seeking to raise $i.his moral, you approach one of your slavers and invite $i.him for some special service.
<<titlefull _u>> <<name _u>> follows you to a secluded part of the fort,
where $i.he wastes no time stripping down $i.his lower half and revealing $i.his <<udick _u>>.
<<if _u.isHasTrait('per_dominant') && _p.isHasTrait('per_submissive')>>
Clearly having expected this, $i.he simply waits, <<uarms _u>> folded and <<udick _u>> out and fully erect.
</p>
<p>
Hesitantly, you drop down onto your knees before the powerful <<urace _u>>, at which point $i.he casually reaches out and grabs your <<uhead _p>> with both <<uhands _u>>. For a heartbeat, $i.he doesn't move, simply waiting to see how you react, then, as you make no move to challenge $i.his actions, $i.he pulls you forward, taking complete control over your movements as $i.he guides your face toward $i.his crotch.
</p>
<p>
Taking one <<uhand _u>> away from your <<uhead _p>>, $i.he hold you in place with the other as $i.he grabs $i.his engorged cock and begins lightly slapping you across the face with it. Quickly smearing a thin coat of pre all over your <<uface _p>>, you can't help but pant with excitement as $i.his demeaning actions trigger your submissive instincts.
</p>
<p>
Once your face is flushed red with embarrassment? Excitement? Both? $i.he ceases with the cock battering. Using $i.his free <<uhand _u>>, $i.he pulls your <<umouth _p>> open, and forces you to stick your tongue out in a lewd expression. Then, $i.he positions $i.his member right in front of your face and waits.
</p>
<p>
A moment passes, then another, you glance up at the <<urace _u>>'s face, then back down at the hot throbbing tip of $i.his meatstick, right in front of you. Up and back again, you look for a sign as to what $i.he is going to do to you next. Getting frustrated you eventually let out a pleading whimper and look back up at the slaver. <<name _u>> grins back at you, then thrusts forward a tiny movement, immediately bringing the tip of $i.his <<udick _u>> into contact with your questing tongue. In a moment of clarity, you realise that all this time, your rebellious tongue has been unconsciously stretching out, trying to reach the hot treat before you. Worse, the slaver wasn't doing anything because $i.he was busy enjoying the show.
</p>
<p>
The feeling of embarrassment that begins to surge through you is fortunately drowned out when the <<titlefull _u>> <<name _u>> finally give you what you've been waiting for. Thrusting forward $i.he buries $i.his entire length down your gullet. The brutal treatment finally pushes your submissive tendencies over the edge and you reach climax.
</p>
<p>
<<if _p.isHasVagina()>>
Your already soaked pussy floods with girlcum as you helplessly squirt, ruining yet another pair of panties and leaving clear evidence for all to see how excited this treatment left you.
<<elseif _p.isHasDick()>>
With a few meaningless thrusts into the air, you release your own pathetic ropes of cum, impotently sullying your <<uequipslot _p 'legs'>>
as the far more dominant slaver treats you like $i.his bitch.
<</if>>
Almost as though rewarding you for cumming for $i.him, <<= _u.getName()>> once again grabs hold of both sides of your <<uhead _p>>, holding you in place as $i.he unleashes wave after wave a thick musky seed into your throat.
</p>
<p>
Having been thoroughly shown your place, you stay obedient, gulping $i.his jizz like it's a sweet nectar bestowed by the gods themselves. Once $i.he is down, and releases you, you open wide, showing the cum free insides of your <<umouth _p>>, before thanking $i.him for the treat.
</p>
<p>
<<titlefull _u>> <<name _u>> just snorts in amusement, before reminding you that obedient bitches look better in slave collars.
</p>
<p>
Despite yourself you blush, for a dangerous moment almost considering it.
</p>
<<elseif _u.isHasTrait(setup.trait.per_dominant)>>
<p>
Eyes gleaming with excitement, $i.he reaches out to grab your head, intent of taking control of the situation. Responding quickly, you bat the offending <<uhand _u>> away, delivering a stern reminder that what is about to happen is already a privilege, and $i.he shouldn't push $i.his luck.
</p>
<p>
Nevertheless, you drop to your knees in front of the impatient slaver, bringing your <<uface _p>> level with $i.his <<udick _u>>.
</p>
<p>
Letting loose a hot, excited breath, you give the tip a quick experimental lick, prompting an approving grunt from <<name _u>>. Emboldened by $i.his reaction you lean forward, wrapping your lips around the <<urace _u>>'s shaft, and give $i.him a flirtatious wink, before you begin in earnest. As your lips push up around $i.his length, you can feel $i.his throbbing excitement building within the wet confines of your <<umouth _p>>.
</p>
<p>
/* has dick = has balls */
Reaching up, you catch $i.his balls in your grasp and gently begin to massage them.
As you pull your head back, you suck hard, creating a vacuum inside your <<umouth _p>>, forcing your lips to seal tight against $i.his cock and dragging your mouth into an erotic blowjob face.
</p>
<p>
Once you reach the tip, $i.he lets out a groan, causing you to glace up and lock eyes with $i.him for a second. You feel a shiver despite yourself at the dominant expression on $i.his face as he glairs down at you. Using your current task as a convenient excuse, you break eye contact by surging forward again, taking the entirety of $i.his <<udick _u>> at once, until your nose is squashed against the <<urace _u>> groin.
</p>
<p>
As if on cue, <<= _u.getName()>> reaches $i.his limit, unleashing $i.his load right down your gullet. Wave after wave of sticky hot cum pour into your stomach, with the remained washing back into your <<umouth _p>>, flooding your tastebuds with $i.his flavour.
</p>
<p>
Once it if done, your stand back up, whip the remnants of $i.his seed away with a cloth, and tell the slaver to get back to work.
</p>
<<else>>
<p>
In spite of $i.his quick acceptance of your offer, the slaver still seems surprised that you are doing this. And ends up simply waiting for you to make the first move.
</p>
<p>
Giving the <<urace _u>> a flirtatious wink, before slipping down onto the forts paved stone floor in front of $i.him, you settle yourself and comfortably as you can before getting started. Electing to start slowly, you reach out and grasp $i.his half erect cock with one <<uhand _u>>, casually stroking it to hardness while over your head, the slaver murmurs in disbelief at $i.his good fortune. As $i.he enjoys your attentions, $i.he raises a <<uhand _u>>, drops it back to his side, before raising it again, seemingly confused as to what to do in this situation. To help $i.him out, you reach up with your free <<uhand _p>>, and push the slaver back until he is pressed against the chamber wall, then while still softly stroking, urge $i.him to sit back and let you take care of everything.
</p>
<p>
Wordless, <<= _u.getName()>> obeys, leaning back, arms to the side as $i.he lets you take control of the situation.
</p>
<p>
With the distraction of your chosen partners indecisiveness delt with, you decide to move things along. Craning forward, you slide your <<uface _p>> along the underside of the <<urace _u>>'s <<udick _u>>. Pausing for a moment, you catch $i.his gaze, and flutter your lashes at him, before slipping your tongue out, giving $i.his cock a long lick from base to tip<<if _p.isHasTrait('mouth_demon')>>
with your elongated demonic tongue<</if>>.
Once there, you reverse the movement, this time focusing on the side of $i.his hot twitching dick and you slide your tongue up its length. Repeating the action, you pull back again, teasing the <<urace _u>> into a twitching mess of arousal.
</p>
<p>
Deciding it is time to draw things to a close, you give the <<udick _u>> one final lick before pulling back and repositioning yourself. Then without a breath of warning for the flushed and ill prepared slaver, you push forward, swallowing $i.his penis to the base in a single movement. Caught off guard, <<= _u.getName()>> gives a surprised squeal, then loses control, $i.his <<udick _u>> pumping as $i.he releases into your waiting mouth. Feeling generous, you stay in place, swallowing the first, then the second wave, before pulling back and allowing the rest to splatter on the floor.
</p>
<p>
Waiting not a moment, you stand, wipe your mouth clean, and order the slaver to clean up the mess before you turn and leave to focus on your daily duties.
</p>
<</if>><<run new setup.Interaction(
'unit_banter_slaver_positive',
'Build friendship',
'darko', /* author */
[], /* tags */
'InteractionBanterSlaverPositive',
[setup.qc.MoneyMult(-0.3)], /* Cost */
[], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.NotYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>>
<<run new setup.Interaction(
'unit_banter_slaver_negative',
'Build rivalry',
'darko', /* author */
[], /* tags */
'InteractionBanterSlaverNegative',
[setup.qc.MoneyMult(-0.3)], /* Cost */
[], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.NotYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>>
<<run new setup.Interaction(
'unit_banter_slave_positive',
'Care for slave',
'darko', /* author */
[], /* tags */
'InteractionBanterSlavePositive',
[setup.qc.MoneyMult(-0.3)], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.NotYou(),
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>>
<<run new setup.Interaction(
'unit_banter_slave_negative',
'Mistreat slave',
'darko', /* author */
[], /* tags */
'InteractionBanterSlaveNegative',
[setup.qc.MoneyMult(-0.3)], /* Cost */
[], /* Requirements */
[
setup.qs.job_slave,
setup.qres.NotYou(),
setup.qres.SlaveUsableByYou(),
], /* Target requirements */
[], /* Effects */
0, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><<set _friendship = $friendship.getFriendship($unit.player, $g.target)>>
<<if _friendship >= setup.BANTER_INTERACTION_MAX_FRIENDSHIP>>
/* just show friendship text */
<<set _banter = new setup.BanterInstance($unit.player, $g.target, 1)>>
<<bantertext _banter>>
<<message '(?)'>>
Your friendship with <<rep $g.target>> is already too high and cannot be boosted further with this interaction.
It has to be increased naturally now over time.
<</message>>
<<else>>
<<set _banter = setup.BanterHelper._computeBanter($unit.player, $g.target, /* forced_sign = */ 1)>>
<<bantercard _banter>>
<</if>><<set _friendship = $friendship.getFriendship($unit.player, $g.target)>>
<<if _friendship <= setup.BANTER_INTERACTION_MIN_FRIENDSHIP>>
/* just show friendship text */
<<set _banter = new setup.BanterInstance($unit.player, $g.target, -1)>>
<<bantertext _banter>>
<<message '(?)'>>
Your rivalry with <<rep $g.target>> is already too high and cannot be boosted further with this interaction.
It has to be increased naturally now over time.
<</message>>
<<else>>
<<set _banter = setup.BanterHelper._computeBanter($unit.player, $g.target, /* forced_sign = */ -1)>>
<<bantercard _banter>>
<</if>><<set _friendship = $friendship.getFriendship($unit.player, $g.target)>>
<<if _friendship >= setup.BANTER_INTERACTION_MAX_FRIENDSHIP>>
/* just show friendship text */
<<set _banter = new setup.BanterInstance($unit.player, $g.target, 1)>>
<<bantertext _banter>>
<<message '(?)'>>
<<rep $g.target>> devotion to you is already too high and cannot be boosted furthe
with this interaction. It has to be increased naturally now over time.
<</message>>
<<else>>
<<set _banter = setup.BanterHelper._computeBanter($unit.player, $g.target, /* forced_sign = */ 1)>>
<<bantercard _banter>>
<</if>><<set _friendship = $friendship.getFriendship($unit.player, $g.target)>>
<<if _friendship <= setup.BANTER_INTERACTION_MIN_FRIENDSHIP>>
/* just show friendship text */
<<set _banter = new setup.BanterInstance($unit.player, $g.target, -1)>>
<<bantertext _banter>>
<<message '(?)'>>
<<rep $g.target>> fear towards you is already too high
and cannot be boosted further with this interaction.
It has to be increased naturally now over time.
<</message>>
<<else>>
<<set _banter = setup.BanterHelper._computeBanter($unit.player, $g.target, /* forced_sign = */ -1)>>
<<bantercard _banter>>
<</if>><<run new setup.Interaction(
'unit_remove_knight_in_training',
'Retract knight training',
'darko', /* author */
[], /* tags */
'InteractionRemoveKnightInTraining',
[], /* Cost */
[], /* Requirements */
[
setup.qs.job_slaver,
setup.qres.HasTitle('quest_knight_in_training'),
setup.qres.Available(),
], /* Target requirements */
[ /* Effects */
setup.qc.RemoveTitle('target', 'quest_knight_in_training'),
],
1, /* cooldown in weeks */
setup.interactionpool.unit, /* interaction pool this belongs to */
)>><p>
You convinced <<rep $g.target>> to drop his knight-in-training title and return
to being a normal slaver.
</p><<run new setup.Interaction(
'bodyshift', /* key */
"Bodyshift", /* Title */
"darko", /* Author */
[ /* tags */
],
'Interaction_bodyshift',
[ /* costs */
],
[ /* restrictions */
],
[ /* unit requirements */
setup.qres.Bodyshifter(),
],
[ /* outcomes */
setup.qc.Bodyshift('target'),
setup.qc.Leave('target', "is exhausted from bodyshifting", 1),
],
0,
setup.interactionpool.unit,
)>><p>
<<= setup.Text.Unit.Bodyswap.bodyswap($g.target,
$bodyshift.getBody($g.target))>>
</p>
<p>
Your <<repfull $g.target>> is exhausted from the bodyshifting and will rest for the rest of this week.
</p><<run new setup.Interaction(
'break_up_with_your_lover', /* key */
"Break up with your lover", /* Title */
"darko", /* Author */
[ /* tags */
],
'Interaction_break_up_with_your_lover',
[ /* costs */
],
[ /* restrictions */
],
[ /* unit requirements */
setup.qres.YourLover(),
],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><p>
Are you sure you want to break up with your lover <<rep $g.target>>?
</p>
<div>
<<linkreplace 'Yes'>>
<<run setup.qc.BreakupWithYou('target').apply($gQuest)>>
<p>
You have broken up with your <<urace $g.target>> lover, or now ex-lover <<rep $g.target>>. The break-up stings, and will haunt your thoughts for the coming days. But you know your that ex-lover <<rep $g.target>> will also suffer the same pain, and you take a little solace in that.
</p>
<</linkreplace>>
</div><<run new setup.Interaction(
'canopy_bed_bondage_play', /* key */
"Canopy-bed bondage play", /* Title */
"darko", /* Author */
[ ], /* tags */
'Interaction_canopy_bed_bondage_play',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.SlaveBedchamberHasFurniture(setup.item.f_slaverbed_master), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
You enter the $i.locgeneral,
which <<if $i.owner == $unit.player>> you own<<else>>is owned by <<rep $i.owner>><</if>>.
The centerpiece of the room is a rare furniture, a speciality of a certain famous
werewolf carpenter: the $i.bed.
Eager to try out the new canopied bed, you call over the obedient slave
<<name _u>> over.
The slave submissively complies as you fasten their limbs to the posts of the bed,
spreading <<them _u>> helplessly in a standing spread-eagled position.
With <<their _u>> body fully exposed, you <<uadv $unit.player>> move your
<<uhands $unit.player>> all over <<their _u>> <<ubody _u>>, starting with <<their _u>>
hair, while moving down towards <<their _u>> <<ubreasts _u>> before fondling
<<their _u>> <<ugenital _u>>.
After a while, you undo the slave's bindings to the posts, to the exhausted relief of the
slave, which you respond to with a sadistic grin.
<br/>
<br/>
To the slave's horrors, you again commands the slave to approach the post. You again
secure the slave's body to the posts of the canopy-bed, but upside down this time so that
<<their _u>> <<umouth _u>> is conveniently located at your hip-level.
<<ustriplegs $unit.player>>
<<if $unit.player.isHasDick()>>
Stroking your <<udick $unit.player>> to erection,
<<else>>
Donning your strap-on,
<</if>>
you ram it straight into the unprepared slave's mouth,
holding onto their <<ulegs _u>> as handlebars for the rough throatfuck.
You explosively cum directly into the struggling slave's throat, before
finishing with cleaning your dick by using the slave's cheeks as makeshift napkin.<<run new setup.Interaction(
'make_a_slave_custard', /* key */
"Make a slave custard", /* Title */
"FCdev (Free Cities)", /* Author */
[ ], /* tags */
'Interaction_make_a_slave_custard',
[ /* costs */
],
[ /* prerequisites */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.SlaveBedchamberHasFurniture(setup.item.f_drinktray_master), ],
[ /* outcomes */
],
0,
setup.interactionpool.unit,
)>><<set $i = {}>>
<<set _u = $g.target>>
<<set _hasdick = $unit.player.isHasDick()>>
<<set _hasvagina = $unit.player.isHasVagina()>>
<<pronounload $i _u>>
<<set _maintraining = setup.UnitTitle.getMainTraining(_u)>>
<<set _chastity = _u.isHasTrait(setup.trait.eq_chastity)>>
<<set _blind = _u.isHasTrait(setup.trait.eq_blind)>>
<<set _utorsoequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.torso)>>
<<set _ulegsequip = setup.Text.Unit.Equipment.getEquipmentAt(_u, setup.equipmentslot.legs)>>
<<set _unaked = setup.Text.Unit.Equipment.isNaked(_u)>>
<<set _verymaso = (_u.isHasTrait(setup.trait.training_masochist_advanced) && _maintraining.getTags().includes('trmasochist'))>>
<<set _maso = (_u.isHasTrait(setup.trait.training_masochist_basic) && _maintraining.getTags().includes('trmasochist'))>>
<<set _advanced = _u.isHasTrait(setup.trait.training_obedience_advanced)>>
<<set _basic = _u.isHasTraitExact(setup.trait.training_obedience_basic)>>
<<set _notrain = _u.isHasTrait(setup.trait.training_none)>>
<<loadinteractioncommon _u>>
You enter the $i.locgeneral,
which
<<if $i.owner == $unit.player>> you own<<else>>is owned by <<rep $i.owner>><</if>>.
Within the room lies an artifact of the Kingdom of Tor: the $i.drinktray.
As if mocking its origin, the $i.drinktray is currently used as the slave's water bowl, where they must lap up the water from within the chalice on all fours.
<br/>
<br/>
Today, you have the degenerate idea of using the chalice for something else. Grabbing the chalice, you call over the slave <<rep _u>> over, and command <<them _u>> to be on all fours on the $i.floor.
You then place the $i.drinktray under <<their _u>>
<<if _u.isHasDick()>><<udick _u>><<else>><<ubreasts _u>><</if>>, before
beginning to milk <<them _u>> hard and rough.
As the slave moans from the rough treatment, <<if _u.isHasDick()>>fresh ejaculate
<<else>>fresh milk<</if>> begin to pour from their <<ugenital _u>> into the chalice. The process was long, but after
<<if _u.isHasDick()>>the tenth consecutive orgasm<<else>>an hour of milking<</if>>,
the $i.drinktray is now brimming full with <<if _u.isHasDick()>>cum<<else>>milk<</if>>.
You left the exhausted <<urace _u>> slave to recover in the room as you go out to the fort kitchens to decorate the chalice with a cherry.
<br/>
<br/>
<<if $unit.player.isSubmissive()>>
You have known that you always have a submissive side all this time, and this time it won out. Seeing the completed "slave custard" in the chalice, you can't help but wanting to give it some taste. As you gulp down the decorated
<<if _u.isHasDick()>>cum<<else>>milk<</if>> desserts you fantasize as if this is the produce of some harsh <<master _u>> that is forcing you to drink their bodily fluids down your throat. By the time you regain your composure, the chalice is already completely empty with you gulping down every single drop of your imaginary <<master _u>>'s <<if _u.isHasDick()>>cum<<else>>milk<</if>>.
<<else>>
Coming back to the bedchamber, you see <<rep _u>> still recovering in their sleeping spot: the $i.slavebed. You declare that you bring refreshments to help them recover, before placing the chalice back at the floor. The slave obediently crawled over to the chalice before lapping up every single drop of <<their _u>> own <<if _u.isHasDick()>>cum<<else>>milk<</if>>, appreciating the cherry you have decidedly put on top of the custard. Seeing such a degenerate scene pushed you over the edge,
<<if _hasdick>>
spraying your cum over the slave and <<their _u>> custard.
<<else>>
climaxing.
<</if>>
You command the slave to clean you up using <<their _u>> tongue afterwards, before moving on with your day.
<</if>><<run new setup.Interaction(
'make_your_lover', /* key */
"Make your lover", /* Title */
"darko", /* Author */
[ /* tags */
],
'Interaction_make_your_lover',
[ /* costs */
],
[ /* restrictions */
],
[ /* unit requirements */
setup.qres.CanBeLoverWithYou(),
],
[ /* outcomes */
setup.qc.HookupWithYou('target'),
],
0,
setup.interactionpool.unit,
)>><p>
You <<uadv $unit.player>> approached <<rep $g.target>> with the singular goal of making <<them $g.target>> into your lover.
You have been eyeing the <<uadjgood $g.target>> <<urace $g.target>> for a while now, lusting over <<their $g.target>> <<ubody $g.target>>, and you are unable to resist your impulses any longer. It is now or never!
</p>
<p>
To your great relief, <<they $g.target>> accepted your proposal! The two of you are lovers now, and this fact shall soon be known throughout the entire fort. But for now, you can't wait to retreat back to
<<set _bc = $unit.player.getOwnedBedchambers()>>
<<if _bc.length>>
your <<rep _bc[0]>>
<<else>>
your bedroom
<</if>>
for some loving with your one and only <<rep $g.target>>...
</p><<set setup.interaction = {}>>
<<set setup.interactionpool = {}>>
<<run new setup.InteractionPool('unit')>>
<<include 'InitInteractionPoolUnit'>>
<<set _passages = Story.lookup('tags', 'interaction')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>/* both slave and slaver interaction */
<<include 'InteractionBanterSetup'>>
/* slave interactions */
<<include 'InteractionFuckVaginaSetup'>>
<<include 'InteractionFuckButtSetup'>>
<<include 'InteractionFuckAnusSetup'>>
<<include 'InteractionFuckLipsSetup'>>
<<include 'InteractionTitfuckSetup'>>
<<include 'InteractionCaressSetup'>>
<<include 'InteractionEmbraceSetup'>>
<<include 'InteractionKissSetup'>>
<<include 'InteractionFondleButtSetup'>>
<<include 'InteractionFondleVaginaSetup'>>
<<include 'InteractionFondleChestsSetup'>>
<<include 'InteractionFondleDickSetup'>>
<<include 'InteractionAbuseSetup'>>
<<include 'InteractionFistAssSetup'>>
<<include 'InteractionFistVaginaSetup'>>
/* multiple slaves interaction */
<<include 'InteractionFuckRelationSetup'>>
/* slaver interactions */
<<include 'InteractionTogetherPunishSetup'>>
<<include 'InteractionTogetherAnalSetup'>><<focwidget 'loadinteractioncommon'>>
<<set _bedchamber = $args[0].getBedchamber()>>
<<if _bedchamber>>
<<set $i.bedchamber = _bedchamber>>
<<set $i.owner = _bedchamber.getSlaver()>>
<<set $i.bed = _bedchamber.getFurniture(setup.furnitureslot.slaverbed).rep()>>
<<set $i.slavebed = _bedchamber.getFurniture(setup.furnitureslot.slavebed).rep()>>
<<set $i.location = `the ${$i.bed} in ${_bedchamber.rep()}`>>
<<set $i.locgeneral = _bedchamber.rep() >>
<<set $i.room = _bedchamber.rep() >>
<<set $i.drinktray = _bedchamber.getFurniture(setup.furnitureslot.drinktray).rep()>>
<<set $i.floor = _bedchamber.getFurniture(setup.furnitureslot.tile).rep()>>
<<set $i.lighting = _bedchamber.getFurniture(setup.furnitureslot.lighting).rep()>>
<<set $i.object = _bedchamber.getFurniture(setup.furnitureslot.object)>>
<<if $i.object.getTags().includes('basic')>>
<<set $i.object = null>>
<<else>>
<<set $i.object = $i.object.rep()>>
<</if>>
<<else>>
<<set $i.bedchamber = null>>
<<set $i.owner = null>>
<<set $i.bed = 'bench'>>
<<set $i.slavebed = 'bench'>>
<<set $i.location = 'the bench in one of the dungeon cells'>>
<<set $i.locgeneral = 'dungeons'>>
<<set $i.drinktray = 'floor'>>
<<set $i.floor = 'floor'>>
<<set $i.room = 'dungeon cell'>>
<<set $i.lighting = 'candle'>>
<<set $i.object = null>>
<</if>>
<</focwidget>><<set setup.item = {}>>
<<set setup.itempool = {}>>
/* reset */
<<include InitUsableItem>>
<<include InitUsableFreeItem>>
<<include InitNotUsableItem>>
<<include InitQuestItem>>
<<include InitTechnologyItem>>
<<run new setup.ItemPool(
'all',
{
reset_potion: 0.004,
blank_potion: 0.004,
hate_potion: 0.004,
love_potion: 0.004,
love_potion_true: 0.001,
forget_potion: 0.004,
potion_boon: 0.004,
mindmend_potion: 0.004,
potion_isolation: 0.004,
potion_tight: 0.004,
potion_transformation: 0.001,
potion_submissive_cure: 0.002,
potion_slavertraining: 0.004,
healing_potion: 1.0,
healing_potion_greater: 0.3,
level_up_potion_basic: 0.1,
potion_trauma_reduce: 0.1,
}
)>>
<<run new setup.ItemPool(
'all_normal',
{
healing_potion: 1.0,
healing_potion_greater: 0.3,
level_up_potion_basic: 0.1,
potion_trauma_reduce: 0.1,
}
)>>
<<run new setup.ItemPool(
'all_good',
{
reset_potion: 0.004,
blank_potion: 0.004,
hate_potion: 0.002,
love_potion: 0.002,
love_potion_true: 0.001,
forget_potion: 0.004,
potion_isolation: 0.004,
potion_tight: 0.004,
mindmend_potion: 0.002,
potion_boon: 0.004,
potion_transformation: 0.001,
potion_submissive_cure: 0.002,
potion_slavertraining: 0.004,
}
)>><<run new setup.ItemNotUsable(
'reset_potion',
'Potion of Youth',
"Said to recover the youth of whoever drinks the potion. Can be used in treatments to reset a unit's level. Said to be found somewhere hidden in a grove in the western forests...",
Math.round(18 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'blank_potion',
'Potion of Blankness',
"Said to render whoever drinks it into a blank malleable state of mind. Can be used in treatments to reset a slave's trainings.",
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'mindmend_potion',
'Potion of Mind Mending',
"Said to be able to restore mind functions to even the most broken of units. Can be used in treatments to remove mindbrokennes.",
Math.round(24 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'hate_potion',
'Potion of Rivalry',
"They say hatred tasted like spoiled milk, but you didn't expect it to be so literal. Can be used in treatments to (forcefully) increase rivalry between two units.",
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'love_potion',
'Potion of Friendship',
"The color swirls and shifts randomly, just like how friendship works. Can be used in treatments to (forcefully) increase friendship between two units.",
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'love_potion_true',
'Potion of Love',
"Smells sweetinengly sick... and also a faint smell of cum? Can be used in treatments to (forcefully) increase friendship between two units.",
Math.round(36 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'forget_potion',
'Potion of Amnesia',
"Have you ever wanted to forget something so badly? Can be used in treatments to make a unit forget another unit, resetting their friendship to 0.",
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'potion_transformation',
'Potion of Chimeratic Transformation',
"A strangely pungent half liquid half solid. You can occasionally make out strange phallic shapes forming inside the bottle? Can be used in treatments to grant a completely random non-demonic body part to a unit.",
Math.round(48 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'potion_slavertraining',
'Potion of Suggestion',
"This yellow-colored potion swirls unnaturally, drawing your attention to its center? With the right technology, can be used in to convert a slave into a slaver without side-effects.",
Math.round(18 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'potion_isolation',
'Potion of Isolation',
"This green-tinted potion smells refreshing -- like a lone, deserted island. With the right technology, can be used in a treatment to remove a unit's background or skill, freeing up space for a new one.",
Math.round(24 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>>
<<run new setup.ItemNotUsable(
'potion_tight',
'Potion of Orifice Tightening',
"The slightest hint of smell coming out of this white-colored potion makes your chest tighten. With the right technology, can be used in a procedure to restore anus or vagina to almost virgin-like tightness.",
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
)>><<run new setup.ItemUsable(
'potion_submissive_cure',
'Change-of-Heart Potion',
"A very rare potion, it is said that certain correctional facility uses this potion liberally to alter the prisoner's minds. Gives a quest that can remove the " + setup.trait.per_submissive.rep() + "trait from a slaver",
Math.round(48 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.per_submissive]),
setup.qres.NoQuest('slaver_training__submission_cure'),
],
[ /* effects */
setup.qc.QuestDirect('slaver_training__submission_cure'),
],
)>><<run new setup.ItemUnitUsable(
'healing_potion',
'Potion of Healing',
`Reduces the injury of a unit by one week`,
Math.round(1.5 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.IsInjured(),
],
[ /* effects */
setup.qc.Heal('unit', 1),
],
)>>
<<run new setup.ItemUnitUsable(
'healing_potion_greater',
'Potion of Greater Healing',
`Reduces the injury of a unit by two weeks`,
Math.round(2.5 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.IsInjured(),
],
[ /* effects */
setup.qc.Heal('unit', 2),
],
)>>
<<run new setup.ItemUnitUsable(
'level_up_potion_basic',
'Potion of Level Up',
`Increases the level of a unit by 1. Usable only on units with level lower than ${setup.LEVEL_PLATEAU}`,
Math.round(2 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.LevelAtMost(setup.LEVEL_PLATEAU - 1),
],
[ /* effects */
setup.qc.levelUp('unit'),
],
)>>
<<run new setup.ItemUnitUsable(
'potion_trauma_reduce',
'Potion of Trauma Cure',
`Reduces a unit's trauma duration by 2 weeks`,
Math.round(3 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.AnyTrait(setup.TraitHelper.TRAUMA),
],
[ /* effects */
setup.qc.TraumaHeal('unit', 2),
],
)>>
<<run new setup.ItemUnitUsable(
'potion_boon',
'Potion of Virtue',
`Grant a unit a boon for 10 weeks`,
Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
[ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
[ /* effects */
setup.qc.BoonizeRandom('unit', 10),
],
)>><<set setup.itemclass = {}>>
/* Actually a misnomer. Covers all items that has a single unit as its target */
<<run new setup.ItemClass('usableitem', 'Usable Item (Single unit)')>>
/* Covers all usable items with no target */
<<run new setup.ItemClass('usablefreeitem', 'Usable Item (No target)')>>
/* Covers all not usable items, but can be consumed by quests */
<<run new setup.ItemClass('notusableitem', 'Consumable Item')>>
/* Furnitures */
<<run new setup.ItemClass('furniture', 'Furniture')>>
/* Items involved in a quest */
<<run new setup.ItemClass('questitem', 'Quest Item')>>
/* Technologies that unlocks something */
<<run new setup.ItemClass('technologyitem', 'Technology')>>/* key items involved in quests */
<<run new setup.ItemQuest(
'quest_for_science_list',
'Inventor item list',
'A list of items to procure for the inventor in the<<lore location_lucgate>>. First, a thick sturdy box from the <<lore region_vale>>. Second, the "Sine Pregnol" fruit from the forests. Finally, a long thin pole of conducting iron from the deserts.',
)>>
<<run new setup.ItemQuest(
'quest_for_science_box',
'Thick sturdy box',
"An empty box made of strong materials, capable of withstanding intense pressure. The first item on the list given by the inventor in the<<lore location_lucgate>>.",
)>>
<<run new setup.ItemQuest(
'quest_for_science_fruit',
'Sine Pregnol fruit',
"A rare fruit in the western forests. It is flexible and rubbery, with an oddly familiar shape. The third item on the list given by the inventor in the<<lore location_lucgate>>.",
)>>
<<run new setup.ItemQuest(
'quest_for_science_stick',
'Long strong pole of iron',
"A long pole of conducting iron. The third item on the list given by the inventor in the<<lore location_lucgate>>.",
)>><<run new setup.ItemTechnology(
'water_technology',
'Technology: Flesh Shaping Advanced',
"Secret technology that allows you to modify yours and your slavers' physical attributes to some extent. Said to be found deep within the sea..."
)>>
<<run new setup.ItemTechnology(
'transformation_technology',
'Technology: Transformation',
"The secret of the gods that govern how bodies are formed. May be revealed upon the destiny completion of a certain fated adventurer...",
)>>
<<run new setup.ItemTechnology(
'dark_technology',
'Technology: Dark Bargain',
"Bargain with one of the demonic princes which allows you to safely corrupt yourself and your slavers safely in exchange for sending a slave to serve the prince forever. It will be extremely risky, but portals to the world beyond the mist is said to exist somewhere in the desert..."
)>>
<<run new setup.ItemTechnology(
'rear_technology',
'Technology: The Rear Deal',
"Secret techniques on how to artificially tighten used anus and vagina, or to loosen them. Rumors said that a certain nobleman in the city is in possession of this invaluable technology..."
)>>
<<run new setup.ItemTechnology(
'wings_technology',
'Technology: Way of the Wings',
"Old teachings of the dragonkins on the workings of theirs and demonic wings. A tightly guarded secret of the dragonkins who live somewhere in the southern seas."
)>>
<<run new setup.ItemTechnology(
'brainwash_technology',
'Technology: Brainwashing',
"The secrets of extending subconcious manipulation to the concious mind. They say that a certain mansion in the eastern desert is staffed entirely with brainwashed orcs...",
)>>
<<run new setup.ItemTechnology(
'isolation_technology',
'Technology: Memory Isolation',
"Gives you better understanding of the brain, allowing you to magically freeze parts of it. It is said that the <<rep $company.neko>> liberally uses on their employees...",
)>>
<<run new setup.ItemTechnology(
'love_technology',
'Technology: Cupid Arrow',
"A set of bow and arrow said to be able to pierce any maiden's heart. An emperor in the land beyond the southern seas is known to give them out for the loveliest of couple...",
)>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.armory)>>
<<if _room>>
<<set _storage = _room.getLevel() - 1>>
<<else>>
<<set _storage = 0>>
<</if>>
<<set _max = $armory.getMaxEquipmentSets()>>
<<set _sets = $armory.getEquipmentSets()>>
<h2><<= _room.getTitleRep()>></h2>
You enter the armory.
<<if _storage>>
It has been expanded with <<= _storage>> storages.
<</if>>
Currently, you have <<successtext _sets.length>>
equipment sets, out of a maximum of
<<= _max>> sets.
<<if _sets.length == _max>>
It might be a good idea to keep a few vacant spots, in case you obtain
some new equipment sets from quests.
You can obtain more slots by upgrading your <<rep _room>>.
<</if>>
<br/>
<<focmove "(See spare equipment list)" "ArmoryEquipment">>
<<if $armory.isCanAddNewEquipmentSet()>>
<<link '(Add new equipment set)'>>
<<run $armory.newEquipmentSet()>>
<<focgoto 'Armory'>>
<</link>>
<</if>>
<<filterall 'equipmentset' _sets>>
<<if $menufilter.get('equipmentset', 'display') == 'compact'>>
<<displaymenuitem _displayobj.getMenu()>>
<<else>>
<<equipmentsetcard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _slot = setup.equipmentslot[$gEquipmentSlot_key]>>
<<set _equipmentset = $equipmentset[$gEquipmentSet_key]>>
<p>
Equip <<rep _slot>> on <<rep _equipmentset>>:
</p>
<<focmove 'Cancel' 'Armory'>>
<br/>
<<for _ieq, _eqobj range $armory.getEquipments({equipment_slot: _slot})>>
<<set _eq = _eqobj[0]>>
<<capture _eq>>
<<rep _eq>>
<<set _linktext = `Equip ${_eq.getName()}`>>
<<link _linktext>>
<<run $armory.assignEquipment(_eq, _equipmentset)>>
<<focgoto 'Armory'>>
<</link>>
<br/>
<</capture>>
<</for>><<set $gMenuVisible = true>>
<h3>Equipments List</h3>
<p>
You check the list of all equipments that are not currently being attached
to any of the sets:
</p>
<<focmove "Go back" "Armory">>
<br/>
<<set _display = $armory.getEquipments()>>
<<set _forfilter = _display.map(a => a[0])>>
<<filterall 'equipment' _forfilter _display>>
<<if $menufilter.get('equipment', 'display') == 'compact'>>
<<rep _displayobj[0]>>
x<<= _displayobj[1]>>
<<equipmentcardactions _displayobj[0]>>
<<else>>
<<equipmentcard _displayobj[0]>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set $gEquipmentSet = $equipmentset[$gEquipmentSet_key]>>
<<set _unitlist = State.variables.company.player.getUnits()>>
<<set _unitlist = _unitlist.filter(unit => !unit.isCannotWear($gEquipmentSet))>>
<p>Choose unit to equip <<= $gEquipmentSet.rep() >> on</p>
<<if $gEquipmentSet.getSluttiness() >= setup.EQUIPMENT_SLAVER_SLUTTY_LIMIT_NORMAL>>
<p>
This equipment sluttiness rating of <<= $gEquipmentSet.getSluttiness()>> is <<dangertext 'too slutty'>>
to be worn by normal slavers. Consider reducing it by attaching a non-slutty legs and torso equipment.
Note that being naked is considered slutty ---
considering attaching <<rep setup.equipment.pants>> and <<rep setup.equipment.shirt>>,
which should be freely available.
Note that slavers with
<<rep setup.trait.per_lustful>><<rep setup.trait.per_sexaddict>> can wear sluttier clothings,
while slavers with <<rep setup.trait.per_chaste>> cannot wear even slightly slutty clothings.
</p>
<</if>>
<<selectunit _unitlist 'ArmoryDoEquip'>><<set $gEquipmentSet = $equipmentset[$gEquipmentSet_key]>>
<<run $gEquipmentSet.equip(State.variables.unit[$gUnitSelected_key])>>
<<unset $gUnitSelected_key>>
<<focgoto "Armory">><<set $gMenuVisible = false>>
/* Assumes $gEquipmentSet_key is set */
<<set _set = $equipmentset[$gEquipmentSet_key]>>
Change <<rep _set>>'s name to
<<textbox "_set.name" _set.name autofocus>>
<br/>
<<focreturn 'Done'>><<set $gMenuVisible = false>>
<<set _equipmentset = $equipmentset[$gEquipmentSet_key]>>
<<link '(Done)'>>
<<run _equipmentset.recheckEligibility()>>
<<focgoto 'Armory'>>
<</link>>
<<equipmentsetcard _equipmentset 'editequip'>><<set $gMenuVisible = true>>
<<set _bedchamberx = $bedchamber[$gBedchamber_key]>>
You enter <<= _bedchamberx.getName()>>.
<<bedchambercard _bedchamberx>>
<<focmove '(Exit room)' 'BedchamberList'>>
<<capture _bedchamberx>>
<<link '(Rename)'>>
<<focgoto 'BedchamberRename'>>
<</link>>
<<link '(Change owner)'>>
<<focgoto 'BedchamberOwnerChange'>>
<</link>>
<<if _bedchamberx.getSlaver() == $unit.player>>
<<link '(Change rules)'>>
<<focgoto 'BedchamberOptionsChange'>>
<</link>>
<</if>>
<</capture>>
<<if _bedchamberx.isPrivate() && _bedchamberx.getSlaver() != $unit.player>>
<<rep _bedchamberx.getSlaver()>> <<dangertextlite 'disallowed'>> you from using <<their _bedchamberx.getSlaver()>> slaves.
<<else>>
<<set _slaves = _bedchamberx.getSlaves()>>
<<for _islave, _slave range _slaves>>
<<capture _slave>>
<<set _text = `(Interact with ${_slave.getName()})`>>
<<message _text>>
<<interactionpool setup.interactionpool.unit _slave>>
<</message>>
<</capture>>
<</for>>
<</if>>
<<set _bedchamber = _bedchamberx>>
<<include 'BedchamberDescription'>><<set $gMenuVisible = false>>
<<set _bedchamberx = $bedchamber[$gBedchamber_key]>>
Change <<rep _bedchamberx>>'s name to:
<<textbox "_bedchamberx.name" _bedchamberx.getName()>>.
<br/>
<<focreturn 'Done'>><<set $gMenuVisible = false>>
<<set _bedchamberx = $bedchamber[$gBedchamber_key]>>
Change <<rep _bedchamberx>>'s owner from <<= _bedchamberx.getSlaver().rep()>> to:
<<focreturn '(Cancel)'>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slaver})>>
<<set _unitlist = _unitlist.filter(unit => unit != _bedchamberx.getSlaver())>>
<<focwidget 'rostershowaction'>>
<<foclink '(Select this unit)' 'BedchamberEnter'>>
<<run _bedchamberx.setSlaver($args[0])>>
<</foclink>>
<</focwidget>>
<<rostershow _unitlist>><<set $gMenuVisible = false>>
<<set _bedchamberx = $bedchamber[$gBedchamber_key]>>
Change <<rep _bedchamberx>>'s rules to: (click to change)
<<for _optionkey, _optionobj range setup.BEDCHAMBER_OPTIONS>>
<br/>
<<set _varname = `_bedchamberx.option_map.${_optionkey}`>>
<<set _options = {}>>
<<for _iobj, _obj range _optionobj>>
<<set _options[_obj.text] = _iobj>>
<</for>>
<<capture _varname, _options>>
<<cycle _varname autoselect>>
<<optionsfrom _options>>
<</cycle>>
<</capture>>
<</for>>
<br/>
<br/>
<<focreturn '(Done)'>><<set _owner = _bedchamber.getSlaver()>>
<<set _slaves = _bedchamber.getSlaves()>>
<<set _isyou = (_owner == $unit.player)>>
<p>
This <<rep _bedchamber>>
belongs to
<<if _isyou>>
you.
<<else>>
<<rep _owner>>
<</if>>
<<if !_slaves.length>>
There are currently <<dangertextlite 'no slaves'>> in the room.
<<else>>
There are <<successtext _slaves.length>> slaves in this room, to be used
by
<<if _isyou>> you as you see fit.
<<else>>
<<= _owner.getName()>> as <<they _owner>> see fit.
<</if>>
<<for _islave, _slave range _slaves>>
<<set _training = setup.UnitTitle.getMainTraining(_slave)>>
<<set _description = setup.Text.Unit.Trait.description(_slave, _training)>>
<<rep _slave>> is currently wearing <<uequipment _slave>>, and <<= _description>>.
<<set _relation = $family.getRelation(_slave, _owner)>>
<<if _relation>>
This slave is <<= _owner.getName()>>'s <<rep _relation>>.
<<if _owner.getSpeech() == setup.speech.friendly>>
<<= _owner.getName()>> tries <<their _owner>> best to be nice to <<their _owner>> <<rep _relation>>.
<<elseif _owner.getSpeech() == setup.speech.cool>>
<<= _owner.getName()>> uses <<their _owner>> <<rep _relation>> like any other slave for <<their _owner>> own enjoyment.
<<elseif _owner.getSpeech() == setup.speech.proud>>
<<= _owner.getName()>> enjoys teaching <<their _owner>> <<rep _relation>> their proper place in the world.
<<else>>
<<= _owner.getName()>> enjoys the perversity of having <<their _owner>> <<rep _relation>> as a personal slave.
<</if>>
<</if>>
<</for>>
<<if _slaves.length == 2>>
<<set _relation = $family.getRelation(_slaves[0], _slaves[1])>>
<<if _relation>>
<<= _slaves[0].getName()>> is <<= _slaves[1].getName()>>'s <<rep _relation>>
<<if _relation.getTags().includes('incest')>>
, making sex between them hotly incestuous
<<if !_isyou>>
<<if _owner.getSpeech() == setup.speech.debauched || _owner.getSpeech() == setup.speech.witty>>
to the delight of <<= _owner.getName()>>.
<</if>>
<<else>>.
<</if>>
<<else>>.
<</if>>
<</if>>
<</if>>
<</if>>
</p>
<<set _busyslaves = _bedchamber.getAssignedSlaves().filter(unit => !unit.isAvailable())>>
<<if _busyslaves.length>>
<p>
<<for _busyslave range _busyslaves>>
Your <<repfull _busyslave>> is assigned to this bedchamber, but is currently
unavailable for use.
<</for>>
</p>
<</if>>
<p>
<<if _slaves.length>>
<<if _isyou>>You have<<else>><<rep _owner>> has<</if>> written some rules that the slaves
are forced to follow.
<<if _bedchamber.getOption('walk') == 'crawl'>>
The slaves are not allowed to stand on equal footing with
<<if _isyou>>you<<else>>the slaver<</if>> and are forced to crawl on all fours at all times.
<<if _slaves[0].isHasTrait(setup.trait.eq_restrained)>>
It's not like they have a choice either, given the
restraints that <<= _slaves[0].rep()>> is wearing.
<</if>>
<<elseif _bedchamber.getOption('walk') == 'walk'>>
The slaves are allowed to move by walking like a normal humanlike.
<<if _slaves[0].isHasTrait(setup.trait.eq_restrained)>>
Although given the
restraints that <<= _slaves[0].rep()>> is wearing, walking is a difficult task.
<</if>>
<</if>>
<<if _bedchamber.getOption('orgasm') == 'no'>>
None of the slaves are ever allowed to orgasm.
<<if _slaves[0].isHasTrait(setup.trait.eq_chastity)>>
A somewhat redundant rule given the state of <<= _slaves[0].rep()>>'s <<udickall _slaves[0]>>.
<</if>>
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_chastity)>>
The rule has little effect on <<= _slaves[1].rep()>> and <<udickall _slaves[1]>>.
<</if>>
<<elseif _bedchamber.getOption('orgasm') == 'yes'>>
Occasionally, <<if _isyou>>you allow<<else>><<rep _owner>> allows<</if>> the slaves to climax.
<<if _slaves[0].isHasTrait(setup.trait.eq_chastity)>>
It's a rare occasion however, and most of the time
<<= _slaves[0].rep()>> displays their <<udickall _slaves[0]>>.
<</if>>
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_chastity)>>
Even so, <<= _slaves[1].rep()>> rarely reaches orgasm --- the reason is obvious when you look at <<their _slaves[1]>> <<udickall _slaves[1]>>.
<</if>>
<</if>>
<<if _bedchamber.getOption('speech') == 'full'>>
The slaves are allowed to communicate like a human being
<<if _slaves[0].isHasTrait(setup.trait.eq_gagged)>>
during the rare moments when <<= _slaves[0].rep()>>'s
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[0], setup.equipmentslot.mouth)>>
are taken off
<</if>>.
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_gagged)>>
The priviledge is somewhat lost to <<= _slaves[1].rep()>> whose <<umouth _slaves[1]>>
remains gagged with
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[1], setup.equipmentslot.mouth)>>
most of the time.
<</if>>
<<elseif _bedchamber.getOption('speech') == 'animal'>>
The slaves are only allowed to communicate using animal-like sounds, like barks and moos.
<<if _slaves[0].isHasTrait(setup.trait.eq_gagged)>>
Even then, <<= _slaves[0].rep()>> can only do it
during the rare moments when <<= _slaves[0].rep()>>'s
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[0], setup.equipmentslot.mouth)>>
are taken off.
<</if>>
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_gagged)>>
The degrading priviledge is somewhat lost to <<= _slaves[1].rep()>> whose <<umouth _slaves[1]>>
remains gagged with
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[1], setup.equipmentslot.mouth)>>
most of the time.
<</if>>
<<elseif _bedchamber.getOption('speech') == 'none'>>
The slaves are not allowed to make any sound, and must remain quiet most of the time lest
they receive harsh punishment.
<<if _slaves[0].isHasTrait(setup.trait.eq_gagged)>>
As an extra insurance, <<= _slaves[0].rep()>>'s <<umouth $slaves[0]>>
is stuffed with
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[0], setup.equipmentslot.mouth)>>
most of the time.
<</if>>
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_gagged)>>
<<= _slaves[1].rep()>> also wears
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slaves[1], setup.equipmentslot.mouth)>>
for most of the time to ensure compliance with the rules.
<</if>>
<</if>>
<<if !_bedchamber.isPrivate()>>
<<if _isyou>>
You have
<<else>>
<<name _owner>> has
<</if>>
generously allowed your private slaves to be used by your other slavers.
<<else>>
<<if _isyou>>
You have
<<else>>
<<name _owner>> has
<</if>>
strictly disallowed anyone else to use the slaves.
<</if>>
<<else>>
There are no slaves around to be forced to follow
<<if _isyou>>your<<else>><<rep _owner>>'s<</if>> rules.
<</if>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.slaverbed)>>
The centerpiece of the room is the <<rep _f>>, where
<<if _isyou>>you can make use of your slaves.<<else>>
<<rep _owner>> can make use of <<their _owner>> slaves.
<</if>>
<<if !_slaves.length>>There are none right now, however.<</if>>
<<if _f == setup.item.f_slaverbed_master>>
The grand tribally-decorated canopy bed sets the posh mood of the room.
<<elseif _f.getTags().includes('basic')>>
It is rather shoddy --- perhaps a better bed would be much better.
<<elseif _f.getTags().includes('normal')>>
The wooden bed is sturdy enough to withstand most uses.
<<elseif _f.getTags().includes('good')>>
The luxurious bed commands attention.
<<else>>
master bed placeholder.
<</if>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.slavebed)>>
On its feet is the <<rep _f>>, where the slaves sleep.
<<if _f.getTags().includes('basic')>>
If you are feeling generous, you can replace it with something nicer.
<<elseif _f.getTags().includes('normal')>>
The slaves are locked inside every night.
<<elseif _f.getTags().includes('good')>>
As nice as the cages are, the slaves are still confined inside every night.
<<else>>
master slave bed placeholder.
<</if>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.foodtray)>>
The slaves<<if !_slaves.length>>, were there to be any,<</if>>
<<if _bedchamber.getOption('food') == 'normal'>>
are given standard food to eat on the
<<elseif _bedchamber.getOption('food') == 'cum'>>
can only eat food that has been tainted with cum on the
<<elseif _bedchamber.getOption('food') == 'milk'>>
can only eat food that has been mixed with humanlik cum on the
<</if>>
<<rep _f>>.
<<if _slaves.length && _bedchamber.getOption('food') == 'cum'>>
<<if _slaves[0].isHasDick()>>
Sometimes, <<= _slaves[0].rep()>> mixed <<their _slaves[0]>> own cum into
<<their _slaves[0]>> own food.
<<elseif _slaves.length > 1 && _slaves[1].isHasDick()>>
Sometimes, <<= _slaves[1].rep()>> mixed <<their _slaves[1]>> own cum into
<<their _slaves[1]>> own food.
<</if>>
<</if>>
<<if _f == setup.item.f_foodtray_normal_hermit>>
The wooden bowl looks old and decrepit, making it only slightly better for the slaves to eat from
compared to the floor. It occassionally glows a dim purple glow when the lights are
out<<if _slaves.length>>, often unnerving the slaves<</if>>.
<<elseif _f.getTags().includes('basic')>>
Perhaps you can find a more proper place for the slaves to eat.
<<elseif _f.getTags().includes('normal')>>
Some of your slavers find it cute to watch slaves eating from their doggy bowls.
<<elseif _f.getTags().includes('good')>>
The slaves are taught to slurp whatever food is in their bowl clean lest they face punishment.
<<else>>
master food tray placeholder.
<</if>>
<<if _owner.isHasDick() && _slaves.length && _owner.Seed('slavecum') % 3 == 0>>
<<if _isyou>>
You
<<else>>
<<rep _owner>>
<</if>>
sometimes provide fresh desserts to the slaves and allow them to suck
the cream directly from
<<if _isyou>>
your
<<else>>
<<their _owner>>
<</if>>
"eclair".
<</if>>
<<set _f2 = _f>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.drinktray)>>
The slaves nourishes their thirst by drinking from the <<rep _f>>.
<<if _slaves.length && !$settings.bannedtags.watersport && _owner.Seed('piss') % 5 == 0>>
Sometimes,
<<if _isyou>>
you adds a little of your
<<else>>
<<rep _owner>> adds a little
<</if>>
piss to spice up their drink.
<</if>>
<<if _f == setup.item.f_drinktray_master>>
The luxurious chalice is placed on the floor, forcing the slaves to crawl on
all four to lap the water from the chalice.
<<elseif _f.getTags().includes('basic')>>
It's probably better for their health if you give them something better to drink from.
<<elseif _f.getTags().includes('normal')>>
They have to go on all fours to lap up the water from the bowl.
<<elseif _f.getTags().includes('good')>>
They have to go on all fours to lap up the water from the bowl.
<<else>>
master slave bed placeholder.
<</if>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.reward)>>
<<if _f.getTags().includes('basic')>>
The room is not equipped with any amusements for the slaves.
<<else>>
To amuse the slaves when their owners are not in the room,
the room is equipped with <<rep _f>>.
<</if>>
<<if _f.getTags().includes('basic')>>
They should focus all their attention servicing
<<if _isyou>>
you.
<<else>>
<<rep _owner>>.
<</if>>
<<elseif _f.getTags().includes('normal')>>
The slaves can be taught to play fetch with the ball
<<if _bedchamber.getOption('walk') == 'crawl'>>
, on all fours, of course
<</if>>.
<<elseif _f.getTags().includes('good')>>
The climbing wall is perfect for the pets living in the room.
<<else>>
master reward placeholder.
<</if>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.punishment)>>
<<if _slaves.length>>
When the slaves misbehaves,
<<else>>
<<if _isyou>>
You have
<<else>>
<<rep _owner>> has
<</if>>
planned what to do when a slave misbehaves. When they misbehave,
<</if>>
they will be punished using
<<if _f.getTags().includes('basic')>>
nothing but bare <<uhands $unit.player>>.
<<else>>
<<rep _f>>.
<</if>>
<<if _f.getTags().includes('basic')>>
The slave will be continuously spanked until they rear form a delicious red.
Perhaps you could buy a tool to make the job easier.
<<elseif _f.getTags().includes('normal')>>
Secured and tied, the slave will be mercilessly whipped until they learn from their
mistake.
<<elseif _f.getTags().includes('good')>>
Secured on the cross, the slave will be tormented until they learn from their mistake.
<<else>>
master punishment placeholder.
<</if>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.lighting)>>
The room is illuminated by the <<rep _f>>.
<<if _f.getTags().includes('basic')>>
It is not very bright, and perhaps a better lighting would be much nicer.
<<elseif _f.getTags().includes('normal')>>
It sufficiently lights up the room allowing the slaves to be used day and night.
<<elseif _f.getTags().includes('good')>>
The elven chandelier hangs beautifully from the top, illuminating the room,
and also double as a place to hang the slaves from.
<<else>>
master lighting placeholder.
<</if>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.tile)>>
<<if _f.getTags().includes('basic')>>
Nothing is covering the worn-out floor.
<<else>>
The floor is covered with <<rep _f>>.
<</if>>
<<if _f.getTags().includes('basic')>>
Perhaps it would be nicer if there are something to cover the cracks and dust on the floor.
<<elseif _f.getTags().includes('normal')>>
The rug makes a great place for the slaves to play rough at.
<<elseif _f.getTags().includes('good')>>
The beautiful rug lifts the overall beauty of the room.
<<else>>
master tile placeholder.
<</if>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.object)>>
<<if _f.getTags().includes('basic')>>
There are no decorative furniture placed on the floor.
<<else>>
On the corner of the room is a decorative <<rep _f>>.
<</if>>
<<if _f == setup.item.f_object_master_fuckmachine>>
It is still right now, but you know that with the right stimulus the large dildo sticking out of it
can be made to move deliciously inside a slave's body.
<<elseif _f.getTags().includes('basic')>>
Some statues would do wonder for the room.
<<elseif _f.getTags().includes('normal')>>
The statue casts an eerie gaze on your slavers when
<<if _isyou>>you are<<else>><<rep _owner>> is<</if>> not in the room.
<<elseif _f.getTags().includes('good')>>
The statue is a work of art, greatly increasing the appeal of the room.
<<else>>
master object placeholder.
<</if>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.wall)>>
<<if _f.getTags().includes('basic')>>
Nothing is covering the worn out walls of the room.
<<else>>
The walls of the room is decorated with <<rep _f>>.
<</if>>
<<if _f.getTags().includes('basic')>>
Perhaps something could help cover the worn-outness of the walls.
<<elseif _f.getTags().includes('normal')>>
The cheap painting does its job well enough diverting attention from the
worn-down areas of the walls.
<<elseif _f.getTags().includes('good')>>
The beautiful painting lifts the spirit of anyone who gaze upon it.
<<else>>
master wall placeholder.
<</if>>
</p>
<p>
<<if _slaves.length>>
<<if _isyou>>
<<for _islave, _slave range _slaves>>
<<if _islave>>Next, you turn your attention to <<rep _slave>>.<</if>>
You command <<rep _slave>> to
<<if _bedchamber.getOption('walk') == 'crawl'>>
crawl over to you like a dog, since <<they _slave>> is not allowed to walk.
<<else>>
approach you.
<</if>>
<<if _slave.isHasDick()>>
<<ustripdick _slave>>
<<if _bedchamber.getOption('orgasm') == 'yes'>>
<<if Math.random() < 0.5>>
You fondle <<their _slave>> <<uballs _slave>>, eliciting moans from the slave.
<<else>>
You fondle <<their _slave>> leaking <<udick _slave>>, eliciting moans from the slave.
<</if>>
<<else>>
You fondle <<their _slave>> overly full <<uballs _slave>>, which is practically begging for release.
<</if>>
<<if _slave.isHasTrait(setup.trait.eq_chastity)>>
You locked <<their _slave>> <<udick _slave>> back in the chastity cage.
<</if>>
<<else>>
<<if _bedchamber.getOption('orgasm') == 'yes'>>
You fondle <<their _slave>> wet pussy and play with <<their _slave>> clit.
<<else>>
You fondle <<their _slave>> wet pussy and play with <<their _slave>> clit, which is practically begging for climax after so much time in denial.
<</if>>
<</if>>
<<if _slave.isHasTrait(setup.trait.eq_gagged)>>
<<They _slave>> moaned through <<their _slave>>
<<= setup.Text.Unit.Equipment.getEquipmentAt(_slave, setup.equipmentslot.mouth)>>
as you continue to manhandle <<them _slave>>.
<<elseif _bedchamber.getOption('speech') == 'full'>>
<<They _slave>> moaned verbally as you continue to manhandle <<them _slave>>.
<<elseif _bedchamber.getOption('speech') == 'animal'>>
<<They _slave>> gave <<their _slave>> best impression of a cow moo as
you continue to manhandle <<them _slave>>.
<<elseif _bedchamber.getOption('speech') == 'none'>>
<<They _slave>> tried <<their _slave>> best avoiding making any sound
as continue to manhandle <<them _slave>>.
<</if>>
<</for>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.foodtray)>>
Finally, it is time to feed your slaves.
You place their food on the <<rep _f>>
<<if _bedchamber.getOption('food') == 'normal'>>
, a nutritious mixture of ingredients to keep them healthy.
Your slaves giddily lap up the food.
<<elseif _bedchamber.getOption('food') == 'cum'>>
<<if $unit.player.isHasDick()>>
. Shoving your <<udick $unit.player>> into <<= _slaves[0].rep()>>'s mouth,
you quicky orgasmed ---
you spray your cum over the slaves' food to make it edible for your slaves.
<<elseif _slaves[0].isHasDick()>>
. You proceed to milk <<rep _slaves[0]>>'s <<udick _slaves[0]>>
and spray the cum over the food.
<<else>>
. You opened the bottle of cum you brought to the room and emptied it on
the <<rep _f>>.
<</if>>
Your slaves lap up the cum-soaked food as their only option to not starve.
<<elseif _bedchamber.getOption('food') == 'milk'>>
<<if _slaves[0].isHasBreasts()>>
. You proceed to milk <<rep _slaves[0]>>'s <<ubreast _slaves[0]>>
and spill the milk over the food.
<<else>>
. You opened the bottle of humanlike milk you brought to the room and emptied it on
the <<rep _f>>.
<</if>>
Your slaves lap up the milk-soaked food as their only option to not starve.
<</if>>
<<else>>
<<rep _owner>> often play with <<their _owner>> slaves in the room.
<<if _bedchamber.getOption('walk') == 'crawl'>>
Sometimes, <<rep _owner>> plays catch with <<their _owner>> slaves who are
forced to crawl on all fours and grab the thrown ball.
<</if>>
<<set _slave = _slaves[0]>>
<<if _bedchamber.getOption('orgasm') == 'yes'>>
<<rep _owner>> often came together with <<their _owner>> slaves,
resting all together on the
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.slaverbed)>>
<<rep _f>>.
<<else>>
<<rep _owner>> enjoys tormenting <<their _owner>> slaves' genitals,
who are forbidden to orgasm.
<</if>>
<<if _bedchamber.getOption('food') == 'normal'>>
<<rep _owner>> likes to keep <<their _owner>> slaves healthy by feeding
them with standard nutritious diet.
<<elseif _bedchamber.getOption('food') == 'cum'>>
<<rep _owner>> keeps <<their _owner>> slaves in strict cum-added diet,
<<if _slave.isHasDick()>>
using the slaves' own dick to produce the cum.
<<elseif _owner.isHasDick()>>
often adding <<their _owner>> own cum to the slaves' diet.
<<else>>
borrowing the cum from elsewhere.
<</if>>
<<elseif _bedchamber.getOption('food') == 'milk'>>
<<rep _owner>> keeps <<their _owner>> slaves in strict milk-added diet,
<<if _slave.isHasBreasts()>>
using the slaves' own udders to produce the milk.
<<else>>
obtaining the humanlike milk from elsewhere.
<</if>>
<</if>>
<</if>>
<<else>>
<<if _isyou>>
You cannot wait until you get some slaves to play with here.
<<else>>
<<rep _owner>> is eagerly waiting for <<their _owner>> own personal slaves to play with.
<</if>>
<</if>>
</p>
<<if !_isyou && _owner.isHasTrait('per_cruel') && _slaves.length>>
<<set _text = `(Watch ${_owner.getName()} cruelly uses a slave)`>>
<<capture _owner, _slaves>>
<<message _text>>
<<set _u = _owner>>
<<set _victim = setup.rngLib.choiceRandom(_slaves)>>
<<include 'BedchamberCruelSlaver'>>
<</message>>
<</capture>>
<</if>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.bedchamberwing)>>
<<if _room>>
<<set _storage = _room.getLevel() - 1>>
<<else>>
<<set _storage = 0>>
<</if>>
<<set _bedchambers = $bedchamberlist.getBedchambers()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the northern wing of your fort, which has been designated as a luxurious
abode for yourself and your slavers.
<<if _storage>>
It has been expanded and currently contains <<successtext _bedchambers.length>> private chambers.
<<else>>
It only has one private chambers right now. You could expand it by upgrading the
<<rep _room>>.
<</if>>
</p>
<<for _ibedchamber, _bedchamber range _bedchambers>>
<<capture _bedchamber>>
<<focbutton 'Enter' 'BedchamberEnter'>>
<<set $gBedchamber_key = _bedchamber.key>>
<</focbutton>>
<</capture>>
<<= _bedchamber.getSlaver().rep()>> owns
<<rep _bedchamber>>
with <<= _bedchamber.getSlaves().length>> slaves
<br/>
<</for>>/* By FCDev from Free Cities game */
<<set $i = {}>>
<<set $i1 = {}>>
<<set $i2 = {}>>
<<pronounload $i1 _u>>
<<pronounload $i2 _victim>>
<<set _v = _victim>>
<<loadinteractioncommon _u>>
You watch as <<rep _u>> approached one of <<their _u>> private slaves <<rep _v>>.
Poor <<name _v>> cringes at <<name _u>> predatory expression,
but the cruel slaver doesn't pounce at once.
Instead, $i1.he starts to walk around <<name _v>>, whose
<<ubody _v>> is nude for bed,
groping and prodding $i2.him as <<name _v>> shivers with fear.
Finally <<name _u>> sidles up behind <<name _v>> snaking $i1.his <<uarms _u>>
around <<name _v>>'s
waist to cup $i2.his
<<if _v.isHasDick()>><<udick _v>><<else>>pussy<</if>>
possessively with one <<uhand _u>>.
<<name _v>> closes $i2.his <<ueyes _v>>.
<br><br>
<<name _u>> chuckles into <<name _v>>'s <<uears _v>>, crooning,
"<<uinsultrape _u _v>>"
$i1.He grinds against the wilting <<name _v>>, and then continues,
"I felt your butt clench just now."
$i1.He gives <<name _v>>'s <<if _v.isHasBalls()>>balls a gentle squeeze<<elseif _v.isHasDick()>>
dick a gentle tug<<else>>pussylips a gentle massage<</if>>.
"It's going to hurt, you little bitch.
I'm going to hold you down and shove my
<<if _u.isHasDick()>>cockhead<<else>>strap-on<</if>>
right up against this tight little hole."
$i1.He gropes the quivering slave's anus.
"You're going to do your best to relax like a good little <<girl _v>>.
But it's going to be so big.
It's going to burn.
And then you're going to panic, and struggle,
and I'm going to hold you down and rape your butt while you scream and cry."
<br><br>
/*
<<name _v>>
keeps $i2.his eyes clamped shut and $i2.his <<uhands _v>> down at $i2.his sides,
balled into fists,
but $i2.his self-control finally cracks and $i2.he lets out a great gasping sob before bursting into tears.
*/
<<name _u>> suddenly shove <<name _v>> towards the $i.bed.
$i2.He crashes facedown into the $i.bed, already sobbing in terror.
$i1.He places a <<uhand _u>> on $i2.his back to hold $i2.him down and then use the other to
apply some lube to $i1.his <<if _u.isHasDick()>>penis<<else>>strap-on<</if>> before
pressing it against the quivering slave's anus.
$i2.He shakes with anguish, causing <<if _u.isHasDick()>><<name _u>>'s cock to rub deliciously
<<else>>the strap-on to slide amusingly<</if>> up and down $i2.his asscrack.
<<name _v>> desperately takes in a huge breath.
Here <<name _u>> begin to apply inexorable pressure.
<<name _v>> manages one more deep breath, but it becomes a squeal of
anguish and $i2.he tries frantically to burrow into the $i.bed, away from the penetrating
<<if _u.isHasDick()>>cock<<else>>strap-on<</if>>.
In the end, <<name _v>> is a mess, but hurries fearfully to obey <<name _u>>'s instructions
to go clean <<themselves _v>>.
<<questauthorcardtext 'FCDev (Free Cities)'>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.dutyroom)>>
<<set _trainer = $dutylist.getDuty('DutyTrainer')>>
<h2><<= _room.getTitleRep() >></h2>
<p>
This simple but functional room has a large board
at the back of the room, containing duty assignments for the week.
<<if !_trainer>>
Once you unlock the Drill Sergeant duty from the
<<rep setup.buildingtemplate.traininggrounds>>, then
slavers on duties will gain experience each week.
<<else>>
<<set _unit = _trainer.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
From the window you can see
your <<rep _trainer>> <<rep _unit>> instilling discipline
to your on-duty slavers,
<<= setup.Text.Duty.competence(_trainer)>>.
This will give all on-duty slavers some experience
each week.
<<elseif _unit>>
Normally, youur <<rep _trainer>> <<rep _unit>> is busy instilling discipline
to the rest of your slavers. But <<they _unit>> is unavailable right now.
<<else>>
You can see your <<rep setup.buildingtemplate.traininggrounds>> from the windows of this room,
but it is empty right now. You should assign a <<rep _trainer>> so that your home slavers
can get experience.
<</if>>
<</if>>
Would you like to make changes to the unit duty assignments?
</p>
<<set _dutylist = $dutylist.getDuties()>>
<<filterall 'duty' _dutylist>>
<<if $menufilter.get('duty', 'display') == 'compact'>>
<<rep _displayobj>>:
<<if _displayobj.getAssignedUnit()>>
<<rep _displayobj.getAssignedUnit()>>
<<dutystatus _displayobj>>
<<capture _displayobj>>
<<link '(Remove from duty)' >>
<<run _displayobj.unassignUnit()>>
<<focgoto 'DutyList'>>
<</link>>
<</capture>>
<<else>>
<<dangertextlite 'None assigned'>>
<<capture _displayobj>>
<<focbutton 'Assign' 'DutyListAssign'>>
<<set $gDuty_key = _displayobj.key>>
<</focbutton>>
<</capture>>
<</if>>
<br/>
<<else>>
<<dutycard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _duty = $duty[$gDuty_key] >>
Select unit to be assigned to <<rep _duty>>.
<<focreturn '(Cancel)'>>
<<set _unitlist = State.variables.company.player.getUnits()>>
<<set _unitlist = _unitlist.filter(unit => _duty.isCanUnitAssign(unit))>>
<<focwidget 'rostershowaction'>>
<<foctimed 0s t8n>>
<<set _unittext = `Select`>>
<<focbutton _unittext 'DutyList'>>
<<set $gUnitSelected_key = $args[0].key>>
<<set _duty = $duty[$gDuty_key] >>
<<run _duty.assignUnit($args[0])>>
<<run setup.notify(`${$args[0].rep()} now assigned for ${_duty.rep()}.`)>>
<</focbutton>>
<<set _skills = $duty[$gDuty_key].getRelevantSkills()>>
<<for _iskill, _skill range _skills>>
<<if $args[0].getSkillFocuses().includes(setup.skill[_iskill])>>
<<rep setup.skill[_iskill]>>
<</if>>
<</for>>
<<set _traits = $duty[$gDuty_key].getRelevantTraits()>>
<<for _traitkey, _chance range _traits>>
<<if $args[0].isHasTraitExact(setup.trait[_traitkey])>>
<<if _chance > 0>>
<<rep setup.trait[_traitkey]>>
<<else>>
<<negtraitcard setup.trait[_traitkey]>>
<</if>>
<</if>>
<</for>>
<<if ['util', 'scout'].includes($duty[$gDuty_key].TYPE)>>
(Trigger chance: <<= (100 * $duty[$gDuty_key].computeChanceForUnit($args[0])).toFixed(2)>>%)
<<elseif $duty[$gDuty_key].TYPE == 'prestige'>>
<<set _prestige = $duty[$gDuty_key].computeChanceForUnit($args[0])>>
<<prestige _prestige>>
<</if>>
<</foctimed>>
<</focwidget>>
<<rostershow _unitlist>><<set $gMenuVisible = true>>
<<focwidget 'loadbuildings'>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.constructionoffice)>>
<h2><<= _room.getTitleRep()>></h2>
You enter the <<rep _room>> of your fort <<= $fort.player.rep() >>.
Various blueprints for both future and existing improvements are posted along the walls of this office,
as well as upgrades for your fort.
<<set _fort = $fort.player.getBuilding(setup.buildingtemplate.fort)>>
<<set _level = _fort.getLevel()>>
<<if _level == 1>>
It is still the same ruined fortress you first resided in.
<<elseif _level <= 5>>
You have done your first couple of upgrades on your fort, making it slightly more livable.
<<elseif _level <= 10>>
You have cleared the rubbles surrounding the center part of the fort.
<<elseif _level <= 20>>
Most of the smaller rubbles have been cleared out, and your fort is starting to look livable.
<<elseif _level <= 30>>
Most of the rubbles have been cleared from your fort, and it's starting to look presentable.
<<elseif _level <= 40>>
You have starting to fix some of the broken infrastructures in the fort back to working condition.
<<elseif _level <= 50>>
All of the rubbles have been cleared from your fort, restoring it to its previous state.
<<elseif _level <= 60>>
Repairs are made on the fort's secondary level, adding available space to your fort.
<<elseif _level <= 70>>
Some of the fort's structures have collapsed, and rebuilding efforts are underway for these sections.
<<elseif _level <= 80>>
The collapsed regions of the fort have almost entirely been repaired, restoring the fort to what it was once.
<<elseif _level <= 90>>
New structures are starting to be erected to make space for more improvements.
<<elseif _level <= 100>>
New structures decorated your fort, increasing space available.
<<elseif _level <= 120>>
You are starting to build your fort into the surrounding lands, incurring great costs.
<<elseif _level <= 140>>
Your fort has expanded beyond its original scope, and expansion is still ongoing.
<<elseif _level <= 160>>
Palisades are rebuild as you expand your fort's region beyond what it originally started with.
<<elseif _level <= 180>>
Your fort now spans a large region including a large open field where your slavers can relax together.
<<elseif _level <= 200>>
Small settlements start to spring around your gigantic fort.
<<elseif _level <= 220>>
Your fort is effectively a small village by this point.
<<elseif _level <= 240>>
A bustling town surrounds your fort
<<elseif _level < 250>>
Your fort is almost at the maximum possible size, with townfolks busily attending their business all around.
<<else>>
Your fort is fully upgraded. Together with the surrounding settlement, it truly deserve to be called a proper city.
<</if>>
Currently, this fort has <<successtext $fort.player.getBuildings().length>>
<<message '(+)'>>
<<for _ibuilding, _building range $fort.player.getBuildings()>>
<<rep _building>>
<</for>>
<</message>>
improvements
and <<successtext $fort.player.getUpgrades()>> upgrades
out of a maximum
of <<successtext $fort.player.getMaxBuildings()>> total improvements and upgrades.
<<message '(Help)'>>
Improvements are the main way you progress in the game.
Each time the <<rep setup.buildingtemplate.fort>> is upgraded, one extra improvement slot is added,
which can then be used by building a new improvement.
Many of the improvement unlocks a new menu on the left sidebar --- which unlocks a new part
of the game.
<</message>>
<br/>
<<if $fort.player.isHasBuildingSpace() >>
<<focbutton "Build New" "FortBuild">><</focbutton>>
<<else>>
There are currently <<dangertextlite 'no space'>> to build or upgrade more improvements in your fort.
If you want to <<focmove "build" "FortBuild">> or upgrade more improvements, you have to expand the available space by
repairing parts of the fort. (This can be done by upgrading the
<<= setup.buildingtemplate.fort.rep() >>
improvement.)
<</if>>
<<set _forfilter = $fort.player.getBuildings()>>
<div>
<<filtertagtoolbar 'buildinginstance' _forfilter>>
<<filterall 'buildinginstance' _forfilter>>
<<if $menufilter.get('buildinginstance', 'display') == 'compact'>>
<<= setup.TagHelper.getTagsRep('buildinginstance', _displayobj.getTemplate().getTags())>>
<<rep _displayobj>>
<<buildingcardupgradelink _displayobj>>
<<else>>
<<buildingcard _displayobj>>
<</if>>
<</filterall>>
</div>
<</focwidget>>
<<focwidget 'refreshbuildings'>>
<<replace '#buildingholder'>>
<<loadbuildings>>
<</replace>>
<<refreshmenu>>
<</focwidget>>
<div id='buildingholder'>
<<loadbuildings>>
</div><<focwidget 'loadbuildingtemplates'>>
<h2>Build an improvement</h2>
<<focmove "(Return)" "Fort">>
<br/>
<<if !$fort.player.isHasBuildingSpace() >>
There are currently <<dangertextlite 'no space'>> to build more improvements in your fort.
If you want to build more improvements, you have to expand the available space by
repairing parts of the fort. (This can be done by upgrading the
<<= setup.buildingtemplate.fort.rep() >>
improvement.)
<</if>>
<<set _forfilter = Object.values(setup.buildingtemplate).filter(a => !a.isHidden())>>
<<run _forfilter.sort((a, b) => {
var ba = a.isBuildable(0);
var bb = b.isBuildable(0);
if (ba && !bb) {return -1;}
if (bb && !ba) {return 1;}
return 0;
})>>
<div>
<<filtertagtoolbar 'buildingtemplate' _forfilter>>
<<filterall 'buildingtemplate' _forfilter>>
<<if $menufilter.get('buildingtemplate', 'display') == 'compact'>>
<<buildingtemplatecardbuildlink _displayobj 0>>
<<= setup.TagHelper.getTagsRep('buildingtemplate', _displayobj.getTags())>>
<<rep _displayobj>>
(Cost: <<costcard _template.getCost(0) >>)
<<else>>
<<buildingtemplatecard _displayobj>>
<</if>>
<</filterall>>
</div>
<</focwidget>>
<div id='buildingtemplateholder'>
<<loadbuildingtemplates>>
</div>
<<focwidget 'refreshbuildings'>>
<<replace '#buildingtemplateholder'>>
<<loadbuildingtemplates>>
<</replace>>
<<refreshmenu>>
<</focwidget>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.grandhall)>>
<<set _veteranroom = $fort.player.getBuilding(setup.buildingtemplate.veteranhall)>>
<<set _viceleader = $dutylist.getDuty('DutyViceLeader')>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the grand hall of your fort. The room is the centerpiece of your fort,
and this is where you gather your slavers for important occassions.
A
<<message 'map of the region'>>
<<worldmap>>
<</message>>
is displayed on the walls (Click to show).
<<if _viceleader>>
<<set _unit = _viceleader.getAssignedUnit()>>
<<if _unit>>
Your <<rep _viceleader>> <<rep _unit>> can often be seen being busy
around here.
<<if !_unit.isAvailable()>>
But you know <<they _unit>> is not available for the job right now.
<</if>>
<<else>>
The room overseeing your grand hall has been made into an office
for your <<rep _viceleader>>, although it is empty right now.
<</if>>
<</if>>
<<if _veteranroom>>You have renovated the floor above your grand hall as
a <<rep _veteranroom>>, which displays the various achivements of your company.<</if>>
</p>
<p>
You are:
<<unitcard $unit.player 1>>
</p>
<p>
You lead the following company:
<<companycard $company.player 1>>
</p>
<p>
You have been leading this company for <<= $calendar.getWeek()>> weeks, and hopefully many more to come!
Currently, you have <<money $company.player.getMoney()>> and
<<prestige $company.player.getPrestige()>>.
Your company consists of
<<= $company.player.getUnits({job: setup.job.slaver}).length>> slavers
and
<<= $company.player.getUnits({job: setup.job.slave}).length>> slaves.
</p>
<<if !_veteranroom>>
Build the <<rep setup.buildingtemplate.veteranhall>> to see your company statistics.
<<else>>
<p>
<b>Money and prestige.</b>
Currently, you have <<money $company.player.getMoney()>> and <<prestige $company.player.getPrestige()>>.
The maximum amount of money your company ever have is <<money $statistics.get('money_max')>>,
while the maximum prestige your company ever have is <<prestige $statistics.get('prestige_max')>>.
The maximum money gained all at once is <<money $statistics.get('money_max_gain')>>,
while the maximum money lost at once is <<set _loss = $statistics.get('money_max_lose')>>
<<moneyloss _loss>>.
</p>
<p>
<b>Quest and mail.</b>
<<set _crit = $statistics.get('quest_crit')>>
<<set _success = $statistics.get('quest_success')>>
<<set _failure = $statistics.get('quest_failure')>>
<<set _disaster = $statistics.get('quest_disaster')>>
You have obtained total <<= $statistics.get('quest_obtained')>> quests,
including <<= $statistics.get('quest_obtained_veteran')>> veteran quests.
Amongs these, you took <<= _crit + _success + _failure + _disaster>> of them,
including <<= $statistics.get('quest_done_veteran')>> veteran quests.
<<= _crit>> ended in critical success, <<= _success>> in success, <<= _failure>> in failure, and
<<= _disaster>> in disaster.
The maximum number of quests you ever have simultaneously in your office is
<<= $statistics.get('quest_max_simultaneous_have') >>.
The highest level of a quest your company ever get is
<<= $statistics.get('quest_max_get_level')>>.
while for quests you took it's
<<= $statistics.get('quest_max_took_level')>>.
You have obtained total <<= $statistics.get('opportunity_obtained')>> mails
and you answered <<= $statistics.get('opportunity_answered')>> of them.
<<set _events = $statistics.get('events')>>
<<if _events>>
Your company has been beset by <<= _events>> events.
<</if>>
</p>
<p>
<b>Slavers and slaves.</b>
You have hired total <<= $statistics.get('slavers_hired')>> slavers
and <<= $statistics.get('slaves_hired')>> slaves.
At one point, you have maximum
<<= $statistics.get('slavers_max')>> slavers and
<<= $statistics.get('slaves_max')>> slaves.
Throughout your career,
you have lost
<<= $statistics.get('slavers_lost')>> slavers and
lost/sold
<<= $statistics.get('slaves_lost')>> slaves.
The total number of slavers that ever appear in the <<rep setup.buildingtemplate.prospectshall>>
is
<<= $statistics.get('slavers_offered')>>, while
the total number of slaves that ever appear in the <<rep setup.buildingtemplate.slavepens>>
is
<<= $statistics.get('slaves_offered')>>.
You have interacted
<<= $statistics.get('interactions_slaver')>>
times with a slaver, and
<<= $statistics.get('interactions_slave')>>
with a slave.
Throughout your company, you and your slavers have bantered
<<= $statistics.get('banters')>>
times between each other.
Throughout your career,
<<= $statistics.get('corruptions_slaver')>>
and
<<= $statistics.get('corruptions_slave')>>
corruption attempts have been made on your slavers and slaves, respectively.
Meanwhile,
<<= $statistics.get('purifications_slaver')>>
and
<<= $statistics.get('purifications_slave')>>
purification attempts have been made on your slavers and slaves, respectively.
</p>
<p>
<b>Inventory.</b>
You have obtained
<<= $statistics.get('items_obtained')>> items,
among those
<<= $statistics.get('items_bought')>> were bought from the
<<rep setup.buildingtemplate.apothecary>>,
who has offered you total
<<= $statistics.get('items_offered')>> items for sale.
You have lost
<<= $statistics.get('items_lost')>> items, including selling
<<= $statistics.get('items_sold')>> of those.
You have bought
<<= $statistics.get('equipment_bought')>> equipments from the
<<rep setup.buildingtemplate.forge>> and
<<rep setup.buildingtemplate.sexshop>>, which combined has offered you
<<= $statistics.get('equipment_offered')>> equipments for sale.
</p>
<p>
<b>Fort.</b>
You have built <<= $statistics.get('buildings_built')>> improvements and
upgraded an improvement <<= $statistics.get('buildings_upgraded')>> times.
</p>
<p>
<b>Slave order and contact.</b>
You have obtained total <<= $statistics.get('slave_order_obtained')>> slave orders and
fulfilled <<= $statistics.get('slave_order_fulfilled')>> of them.
You have grossed
<<money $statistics.get('slave_order_money_sum')>> from slave orders,
and the maximum of money you get from one slave order is
<<money $statistics.get('slave_order_money_max')>>.
The most valuable slave you sold in a slave order is worth
<<money $statistics.get('slave_order_slave_value_max')>>.
You have obtained total
<<= $statistics.get('contact_obtained')>> contacts.
</p>
<p>
<b>Injuries.</b>
Throughout your company's history,
your slavers have been injured
<<= $statistics.get('injury_slaver_count')>>
times for a total of
<<= $statistics.get('injury_slaver_week_sum')>> weeks,
and your slaves have been injured
<<= $statistics.get('injury_slave_count')>>
times for a total of
<<= $statistics.get('injury_slave_week_sum')>> weeks.
The longest injury sustained by a slaver lasts for
<<= $statistics.get('injury_slaver_week_max')>> weeks, while on slaves it's
<<= $statistics.get('injury_slave_week_max')>> weeks.
The largest number of slavers that are injured at the same time is
<<= $statistics.get('injury_slaver_simultaneous')>>,
while for slaves it's
<<= $statistics.get('injury_slave_simultaneous')>>.
</p>
<p>
<b>Traumas and boons.</b>
Trauma is an unavoidable part of a slaver's career.
Your slavers have been traumatized
<<= $statistics.get('trauma_count')>>
times for a total of
<<= $statistics.get('trauma_week_sum')>> weeks.
The longest time a slaver has been traumatized is
<<= $statistics.get('trauma_week_max')>> weeks.
On the other hand,
your slavers have received a boon
<<= $statistics.get('boon_count')>>
times for a total of
<<= $statistics.get('boon_week_sum')>> weeks.
The longest time a slaver receives a boon for is
<<= $statistics.get('boon_week_max')>> weeks.
</p>
<</if>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.recreationwing)>>
<<set _pimp = $dutylist.getDuty('DutyPimp')>>
<<set _entertainment = $dutylist.getDuty('DutyEntertainmentSlave')>>
<<set _analfuckhole = $dutylist.getDuty('DutyAnalFuckholeSlave')>>
<<set _vaginafuckhole = $dutylist.getDuty('DutyVaginaFuckholeSlave')>>
<<set _oralfuckhole = $dutylist.getDuty('DutyOralFuckholeSlave')>>
<<set _server = $dutylist.getDuty('DutyServerSlave')>>
<<set _toilet = $dutylist.getDuty('DutyToiletSlave')>>
<<set _maid = $dutylist.getDuty('DutyMaidSlave')>>
<<set _furniture = $dutylist.getDuty('DutyFurnitureSlave')>>
<<set _punchingbag = $dutylist.getDuty('DutyPunchingBagSlave')>>
<<set _dog = $dutylist.getDuty('DutyDogSlave')>>
<<set _decoration = $dutylist.getDuty('DutyDecorationSlave')>>
<<set _pony = $dutylist.getDuty('DutyPonySlave')>>
<<set _dominatrix = $dutylist.getDuty('DutyDominatrixSlave')>>
<<set _theatre = $dutylist.getDuty('DutyTheatreSlave')>>
<<set _cumcow = $dutylist.getDuty('DutyCumCowSlave')>>
<<set _milkcow = $dutylist.getDuty('DutyMilkCowSlave')>>
<<set _duties = [_entertainment, _analfuckhole, _vaginafuckhole, _oralfuckhole,
_server, _toilet, _maid, _furniture, _punchingbag, _dog,
_decoration, _pony, _dominatrix, _theatre, _cumcow, _milkcow]>>
<h2><<= _room.getTitleRep()>></h2>
<p>
The right wing of your fort has been transformed into an entertainment complex where you
can host guests and visitors alike.
<<set _level = _room.getLevel()>>
<<if _level == 1>>
The area is clearly a make-shift entertainment complex, and further renovations are still required.
<<elseif _level == 2>>
The area is pretty bare-bones right now, but serves its purpose.
<<elseif _level == 3>>
It is a pretty decent entertainment complex, kept relatively clean compared to the other areas of the fort.
<<elseif _level == 4>>
You tried your best to make your entertainment complex clean and presentable, and it's starting to show.
<<elseif _level == 5>>
Unlike the rest of your fort, the entertainment complex looks clean and presentable.
<<elseif _level == 6>>
The entertainment complex is kept clean and well-maintained, impressing their visitors.
<<elseif _level == 7>>
The recreation wing is fully decorated, with erotic paintings displayed along the walls.
<<elseif _level == 8>>
The recreation wing stood out from your fort as if it's a completely different area.
<<elseif _level == 9>>
Your entertainment complex is very well-maintained and fully decorated, impressing slavers and visitors alike.
<<elseif _level == 10>>
Your recreation wing is a gorgeous complex, lulling all its visitors into erotic bliss.
<<elseif _level == 11>>
Your entertainment complex is regionally well-known as a luxurious place of debauchery.
<<else>>
Your recreation wing is famous in the entire region as one of the most beautiful places to visit.
<</if>>
<<if _pimp>>
<<set _unit = _pimp.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You see your <<repfull _unit>> making <<their _unit>> best efforts to entice
the visitors to try out some of the available slaves,
<<= setup.Text.Duty.competence(_pimp)>>.
<<elseif _unit>>
Your <<repfull _unit>> can usually be found here whoring out your slavers,
but <<they _unit>> is unavailable right now.
<<else>>
One of the rooms have been designated as an office for your
<<rep _pimp>>, who can make money out of the visitors to this part of your fort.
It is empty at the moment.
<</if>>
<</if>>
</p>
<p>
<<if _entertainment>>
<<set _unit = _entertainment.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _entertainment>> <<rep _unit>>
is busy trying to entertain visitors in the reception hall,
be it offering refreshments or a welcome fuck.
<<= setup.Text.Duty.slavevalue(_entertainment)>> accept <<their _unit>> hospitality.
/* unlock scenes here */
<<if _unit.isHasTrait('training_obedience_advanced')>>
<<They _unit>> dutifully performs their job, servicing newcomer after newcomer
with all their assets.
<<else>>
You can obviously see the resentment in <<their _unit>> eyes being forced
to degrade <<themselves _unit>> for your profit, but <<their _unit>> training
holds for now.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The reception area is empty right now, lacking an assigned slave as
an <<rep _entertainment>>.
<</if>>
<</if>>
</p>
<p>
<<if _vaginafuckhole>>
<<set _unit = _vaginafuckhole.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _vaginafuckhole>> <<rep _unit>> is located
in the <<rep setup.buildingtemplate.vaginafuckhole>> just next to the
reception area.
<<= setup.Text.Duty.slavevalue(_vaginafuckhole)>> uses <<their _unit>> offered <<uvagina _unit>>.
/* unlock scenes here */
<<if _unit.isHasTrait('training_vagina_master')>>
Moving closer, you can see that the slave is in a state of bliss after each customer,
and never fails to orgasm each time.
<<elseif _unit.isHasTrait('training_vagina_advanced')>>
When <<they _unit>> noticed you coming, <<they _unit>> wiggles
<<their _unit>> buttocks submissively as if inviting you to enter and use <<their _unit>> vagina, just
as <<they _unit>> have been trained to behave.
<<else>>
Customers occasionally leave negative feedback that <<= _unit.getName()>> is not
as enthusiastic as <<they _unit>> should be, and needs further training.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The <<rep setup.buildingtemplate.vaginafuckhole>> is located right next to your reception area.
It can be staffed with a <<rep _vaginafuckhole>> to attract customers.
<</if>>
<</if>>
</p>
<p>
<<if _analfuckhole>>
<<set _unit = _analfuckhole.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
In an adjacent <<rep setup.buildingtemplate.analfuckhole>>,
your <<rep _analfuckhole>> <<rep _unit>> works diligently
using <<their _unit>> asshole to please customers.
<<= setup.Text.Duty.slavevalue(_analfuckhole)>> enjoys <<their _unit>> anus.
/* unlock scenes here */
As you walk past,
<<if _unit.isHasTrait('training_anal_master')>>
you can see <<= _unit.getName()>> being double penetrated by two customers.
<<elseif _unit.isHasTrait('training_anal_advanced')>>
you can see <<= _unit.getName()>> getting pounded by a customer wearing a strap-on.
<<else>>
you can see <<= _unit.getName()>> reluctantly servicing a customer.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
Also adjacent to the reception area is the <<rep setup.buildingtemplate.analfuckhole>>,
where you can assign a slave as an <<rep _analfuckhole>>.
<</if>>
<</if>>
</p>
<p>
<<if _oralfuckhole>>
<<set _unit = _oralfuckhole.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Moaning and gagging sounds can often be heard from the
<<rep setup.buildingtemplate.oralfuckhole>> as
<<rep _unit>> is made available as an
<<rep _oralfuckhole>>.
<<= setup.Text.Duty.slavevalue(_oralfuckhole)>> loves to face-fuck <<them _unit>>.
/* unlock scenes here */
<<if _unit.isHasTrait('training_oral_master')>>
Nobody is using the masterful slut right now and while <<they _unit>> has gobbled oh so many cums,
<<they _unit>> is always hungry for more.
<<if $unit.player.isHasDick()>>
<<capture _unit>>
<<message '(use the slave)'>>
<<set _u = _unit>>
<<include 'DutyOralFuckHoleMolest'>>
<</message>>
<</capture>>
<</if>>
<<elseif _unit.isHasTrait('training_oral_advanced')>>
You can see a pair of customers currently using <<their _unit>> mouth right now.
<<else>>
<<They _unit>> is still learning how to do the job properly and still needs some rest
between servicing customers.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The <<rep setup.buildingtemplate.oralfuckhole>> is available for customers
who prefer oral action, but it is unstaffed right now.
You could assign a slave to the <<rep _oralfuckhole>> duty to staff it.
<</if>>
<</if>>
</p>
<p>
<<if _server>>
<<set _unit = _server.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Many customers are visiting the bar, in which
<<rep _unit>> performs <<their _unit>> duties as a <<rep _server>>.
<<= setup.Text.Duty.slavevalue(_server)>> wants being edged by <<= _unit.getName()>>.
<<if _unit.isHasTrait('training_edging_master')>>
<<capture _unit>>
<<message '(use the slave)'>>
<<set _u = _unit>>
<<include 'DutyServerMolest'>>
<</message>>
<</capture>>
<<else>>
As your patrons enjoyed their drinks, <<= _unit.getName()>> went under the table
to service their
genitals<<if !_unit.isHasTrait('training_edging_advanced')>>, albeit reluctantly<</if>>.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
If you fancy a drink, the entrace of the
<<rep setup.buildingtemplate.bar>> is clearly marked behind the reception area.
You can additionally staff it with a <<rep _server>> later.
<</if>>
<</if>>
</p>
<p>
<<if _toilet && !$settings.bannedtags.watersport>>
<<set _unit = _toilet.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
The restrooms are hidden somewhere to the back, where your slavers and guests
can relieve themselves.
Your <<rep _toilet>> <<rep _unit>> is also installed here.
<<= setup.Text.Duty.slavevalue(_toilet)>> gives them something else to drink.
/* unlock scenes here */
<<if _unit.isHasTrait('training_toilet_master')>>
<<They _unit>> hungrily drinks down all the fluids thrown at <<them _unit>>
and would actually beg for it if <<their _unit>> <<umouth _unit>> wasn't gagged.
<<elseif _unit.isHasTrait('training_toilet_advanced')>>
<<They _unit>> dutifully drinks down all the fluids thrown at <<them _unit>>, which speaks
volumes of the effectiveness of <<their _unit>> trainings.
<<else>>
<<They _unit>> occasionally retches when a particularly musky customer decides to use
<<them _unit>>.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
In the first glance, nothing stands out about the restroom in the recreation wing.
But if you look carefully there is a designated area where you can install a slave as
a <<rep _toilet>>.
<</if>>
<</if>>
</p>
<p>
<<if _maid>>
<<set _unit = _maid.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You spot
your <<rep _maid>> <<rep _unit>>
busily scrubbing the dirty floor.
<<= setup.Text.Duty.slavevalue(_maid)>> wants to use <<them _unit>> in between <<their _unit>> cleaning duties.
<<They _unit>> is down on all fours using both <<uhands _unit>> to work a scrub-brush back and forth,
<<if setup.Text.Unit.Equipment.isGenitalCovered(_unit)>>
their covered <<uass _unit>> bobs back and forth high in the air under <<their _unit>> clothes.
You wonder if it'll be better to leave it unclothed.
<<else>>
and
nothing is covering <<their _unit>> genitals as they scrub.
<<Their _unit>> bare <<uass _unit>> bobs back and forth as <<they _unit>>
scrubs as if <<they _unit>> were doing it doggy-style with an invisible man.
<</if>>
/* unlock scenes here */
<<if _unit.isHasTrait('training_domestic_master')>>
Since <<they _unit>> is an obedient slave, you can
<<capture _unit>>
<<message 'have some fun with the slave.'>>
<<set _u = _unit>>
<<include 'DutyMaidMolest'>>
<</message>>
<</capture>>
<<elseif _unit.isHasTrait('training_domestic_advanced')>>
<<else>>
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
You can spot some dirt and dust in some places in the recreation wing.
It might be a good idea to assign a <<rep _maid>>.
<</if>>
<</if>>
</p>
<p>
<<if _furniture>>
<<set _unit = _furniture.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You see your
<<rep _furniture>> <<rep _unit>> in the <<rep setup.buildingtemplate.courtyard>>.
<<= setup.Text.Duty.slavevalue(_furniture)>> objectifies <<them _unit>>.
/* unlock scenes here */
<<if _unit.isHasTrait('training_endurance_master')>>
Two customers are sitting on <<their _unit>> warm <<ubody _unit>> right now,
and <<they _unit>> remains frighteningly still in the position.
<<capture _unit>>
<<message 'You can bring the slave to your office for the day.'>>
<<set _u = _unit>>
<<include 'DutyFurnitureMolest'>>
<</message>>
<</capture>>
<<elseif _unit.isHasTrait('training_endurance_advanced')>>
A customer is using <<their _unit>> warm <<ubody _unit>> as a footsool right now.
<<else>>
<<They _unit>> is acting as a decorative statue right now, although you can see the
occassional twitches and discomfort in <<their _unit>> face.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The recreation wing <<rep setup.buildingtemplate.courtyard>> is an open space, but there isn't much going on right now.
You could assign a slave here as an <<rep _furniture>> to improve the place's prestige.
<</if>>
<</if>>
</p>
<p>
<<if _punchingbag>>
<<set _unit = _punchingbag.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Moaning sounds can be heard over from the <<rep setup.buildingtemplate.gym>>.
<<rep _punchingbag>> <<rep _unit>> is being used as a living
punching bag by several customers.
<<= setup.Text.Duty.slavevalue(_punchingbag)>> abuse <<them _unit>>.
<<if _unit.isHasTrait('training_masochist_master')>>
Given <<their _unit>> affinity for masochism, <<they _unit>> loves every moment of it.
<<elseif _unit.isHasTrait('training_masochist_advanced')>>
<<They _unit>> has undergone extensive masochism training and is able to like the feeling of constant pain.
<<else>>
Occassionally <<they _unit>> shamelessly begs for mercy --- a clear indicator that further training is required.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
A <<rep setup.buildingtemplate.gym>> has been built in the second floor to allow your slavers as well as customers to
work out.
There is nothing of interest there right now --- you can assign a warm body as a
<<rep _punchingbag>> to further spice the gym.
<</if>>
<</if>>
</p>
<p>
<<if _dog>>
<<set _unit = _dog.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You can heard muffled barks coming from
the <<rep setup.buildingtemplate.kennel>>.
Several customers are seen playing fetch with <<rep _dog>> <<rep _unit>>.
<<= setup.Text.Duty.slavevalue(_dog)>> wants to give the good dog a bone.
<<if _unit.isHasTrait('training_pet_master')>>
As you entered, you watched customers nod in approval as your
dog licks their own <<ugenital _unit>> between sessions.
<<elseif _unit.isHasTrait('training_pet_advanced')>>
As you entered you watched several customers give the good dog a belly scratch,
which is then followed up by playing "boner".
<<else>>
<<They _unit>> still occasionally breaks character, which ruins the immersion.
You think further training might be beneficial.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The <<rep setup.buildingtemplate.kennel>> is located in the basement.
It is empty right now, lacking a <<rep _dog>> for customers to play with.
<</if>>
<</if>>
</p>
<p>
<<if _decoration>>
<<set _unit = _decoration.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep setup.buildingtemplate.museum>> displays various exhibits, including a
human exhibit featuring your <<rep _decoration>> <<rep _unit>>.
<<= setup.Text.Duty.slavevalue(_decoration)>> admires <<their _unit>> <<ubody _unit>>.
/* unlock scenes here */
<<They _unit>>
<<if _unit.isHasTrait('training_horny_master')>>
has no problem keeping <<their _unit>>
<<if _unit.isHasDick()>> <<udick _unit>> hard <<else>> <<uvagina _unit>> wet<</if>>
all the time.
<<elseif _unit.isHasTrait('training_horny_advanced')>>
will immediately make <<their _unit>>
<<if _unit.isHasDick()>> <<udick _unit>> hard <<else>> <<uvagina _unit>> wet<</if>>
when a customer enters the exhibit.
<<else>>
can make <<their _unit>>
<<if _unit.isHasDick()>> <<udick _unit>> hard <<else>> <<uvagina _unit>> wet<</if>>
on command from the customers.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
A public <<rep setup.buildingtemplate.museum>> is open in your recreation wing.
There are various exhibits shown there, but the human exhibit is currently closed.
You can assign a <<rep _decoration>> to work there.
<</if>>
<</if>>
</p>
<p>
<<if _pony>>
<<set _unit = _pony.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You can see visitors in the <<rep setup.buildingtemplate.stables>> area
adjacent to your recreation wing.
Some customers are riding a cart pulled by
your <<rep _pony>> <<rep _unit>>.
<<= setup.Text.Duty.slavevalue(_pony)>> enjoys <<their _unit>> <<ubody _unit>> pulling carts.
/* unlock scenes here */
<<if _unit.isHasTrait('training_pony_master')>>
<<rep _unit>> works relentlessly pulling carts all day long without
signs of exhaustion, truly a mark of a masterful pony slave.
<<elseif _unit.isHasTrait('training_pony_advanced')>>
<<rep _unit>> never shows any signs of tiring as <<they _unit>> pull carts with visitors inside.
<<else>>
<<rep _unit>> often slows down, which earns <<them _unit>> whippings from the visitors in the cart.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
Outside on a field adjacent to your recreation wing is the
<<rep setup.buildingtemplate.stables>>, where you keep your ponies.
It is empty right now, lacking any <<rep _pony>>.
<</if>>
<</if>>
</p>
<p>
<<if _dominatrix>>
<<set _unit = _dominatrix.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _dominatrix>> <<rep _unit>>
works in the <<rep setup.buildingtemplate.stage>> dominating customers.
<<= setup.Text.Duty.slavevalue(_dominatrix)>> loves being dominated by <<= _unit.getName()>>.
/* unlock scenes here */
<<if _unit.isHasTrait('training_dominance_master')>>
<<= _unit.getName()>> loves every moment of it too, whipping <<their _unit>> customers with passion
while ensuring their customers love it too.
<<elseif _unit.isHasTrait('training_dominance_advanced')>>
<<= _unit.getName()>> likes every moment of it too, from the look of <<their _unit>> face.
<<else>>
<<= _unit.getName()>> enjoys the break of being allowed to dominate others.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
The <<rep setup.buildingtemplate.stage>> is located in one of the basement rooms.
Nothing is on show right now, since you don't have
a <<rep _dominatrix>>.
<</if>>
<</if>>
</p>
<p>
<<if _theatre>>
<<set _unit = _theatre.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
In the <<rep setup.buildingtemplate.theatre>>,
your <<rep _theatre>> <<rep _unit>>
is busy giving surprise shows to the customers.
<<= setup.Text.Duty.slavevalue(_theatre)>> enjoy the sight of the sissy.
/* unlock scenes here */
<<if _unit.isHasTrait('training_sissy_master')>>
Without the signs, nobody would ever suspect that <<= _unit.getName()>> was once a man,
<<their _unit>> useless dick never becoming erect no matter what.
<<elseif _unit.isHasTrait('training_sissy_advanced')>>
Many enjoy the sight of <<= _unit.getName()>> doing debauched acts while <<their _unit>>
useless dick never becoming erect.
<<else>>
<<= _unit.getName()>> has learned that their dick is now useless, but it still occasionally
twitches during particularly raunchy shows.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
A little separate hut has been designated as the <<rep setup.buildingtemplate.theatre>>.
There is nothing going on there right now. Maybe you could assign a <<rep _theatre>>.
<</if>>
<</if>>
</p>
<p>
<<if _cumcow>>
For customers who prefer fresh cockmilk on tap, they can enter the
<<rep setup.buildingtemplate.tavern>>.
<<set _unit = _cumcow.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
The <<udick _unit>> of your <<rep _cumcow>> <<rep _unit>>
is available to use for their protein intakes.
<<= setup.Text.Duty.slavevalue(_cumcow)>> likes the taste of the cockmilk.
/* unlock scenes here */
<<if _unit.isHasTrait('balls_huge')>>
<<They _unit>> provides a huge amount of cum, enough to satisfy most customers.
<<elseif _unit.isHasTrait('balls_medium')>>
<<They _unit>> provide a decent amount of cum, to the delight of many customers.
<<else>>
Unfortunately, <<their _unit>> cum production is on the lower side, often leaving customers unsatisfied.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
It is closed now however,
until you have a <<rep _cumcow>>.
<</if>>
<</if>>
</p>
<p>
<<if _milkcow>>
<<set _unit = _milkcow.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _milkcow>> <<rep _unit>>
can be seen wondering in the <<rep setup.buildingtemplate.pasture>>.
<<= setup.Text.Duty.slavevalue(_milkcow)>> enjoys the taste of <<their _unit>> fresh milk.
<<if _unit.isHasTrait('breast_huge')>>
<<They _unit>> produces a huge amount of milk, enough to satisfy most of the customers.
<<capture _unit>>
<<message '(milk the cow)'>>
<<set _u = _unit>>
<<include 'DutyMilkCowMolest'>>
<</message>>
<</capture>>
<<elseif _unit.isHasTrait('breast_medium')>>
<<They _unit>> produces a decent amount of fresh milk for your customers to enjoy.
<<else>>
Unfortunately <<their _unit>> production is so low that it is not enough at all to satisfy the customers.
<</if>>
<<elseif _unit>>
While your <<repfull _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
Behind the recreation wing is an
open <<rep setup.buildingtemplate.pasture>> for your
<<rep _milkcow>> to graze on, when you assign a slave to the duty.
<</if>>
<</if>>
</p><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.hospital)>>
<<set _patients = $company.player.getUnits({injured: true})>>
<<set _doctor = $dutylist.getDuty('DutyDoctor')>>
<<set _mystic = $dutylist.getDuty('DutyMystic')>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the hospital in your fort.
<<if _doctor>>
<<set _unit = _doctor.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
<<rep _unit>> works as your <<rep _doctor>>,
<<= setup.Text.Duty.competence(_doctor)>>.
<<if _patients.length>>
/* check for doctor molestation event */
<<set _victimlist = $company.player.getUnits({job: setup.job.slave, injured: true})>>
<<if _victimlist.length && (_unit.isHasTrait(setup.trait.per_lustful) || _unit.isHasTrait(setup.trait.per_active) || _unit.isHasTrait(setup.trait.per_dominant))>>
<<set _victim = setup.rngLib.choiceRandom(_victimlist)>>
You don't see your doctor anywhere,
<<capture _victim, _unit>>
<<message "you can search for the doctor if you'd like">>
<<set _u = _unit>>
<<include 'DutyDoctorMolest'>>
<</message>>
<</capture>>
<<else>>
He greets you briefly before returning back to attend <<their _unit>> patients.
<</if>>
<<else>>
Your doctor has no patients right now, and <<they _unit>> seems to be busy relaxing.
<</if>>
<<elseif _unit>>
Your <<repfull _unit>> is usually holed up here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
There is an unoccupied doctor office inside your hospital for your <<rep _doctor>>.
<</if>>
<</if>>
<<if _patients.length>>
There are currently <<successtext _patients.length>> patients
recovering here.
<</if>>
<<if _mystic>>
<<set _unit = _mystic.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
In a room next to your hospital,
<<rep _unit>> busily perform his duties as your <<rep _doctor>>,
including making charms for luck,
<<= setup.Text.Duty.competence(_mystic)>>.
<<elseif _unit>>
Your <<repfull _unit>> is usually holed up here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
The room next to your hospital has been transformed into a ritual room for
your <<rep _mystic>>. It is empty right now.
<</if>>
<</if>>
<<set _favor = $favor.getFavor($company.humansea)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
The <<rep $company.humansea>> often send their best
healers here, to help heal your slavers' injuries.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
The <<rep $company.humansea>> sometimes send their skilled
healers here, to help heal your slavers' injuries.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
The <<rep $company.humansea>> sometimes send their
healers here, to help heal your slavers' injuries.
<</if>>
<<set _favor = $favor.getFavor($company.demon)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
Slavers in your employ often
gain sudden dark inspiration, no doubt thanks to your excellent
relations with <<rep $company.demon>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Slavers in your employ occassionally
gain sudden dark inspiration, which is thanks to your friendly
relations with <<rep $company.demon>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Every now and then, slavers in your employ
gain sudden dark inspiration, probably thanks to your warm
relations with <<rep $company.demon>>.
<</if>>
Is there anything you need to do here today?
</p>
<<for _iunit, _unit range _patients>>
<<unitcard _unit >>
<</for>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.warehouse)>>
<<set _items = $inventory.getItems()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter your warehouse, which currently holds the following items.
</p>
<<set _display = State.variables.inventory.getItems()>>
<<set _forfilter = _display.map(a => a.item)>>
<<filterall 'item' _forfilter _display>>
<<if $menufilter.get('item', 'display') == 'compact'>>
<<rep _displayobj.item>>
x<<= _displayobj.quantity >>
<<itemcardactions _displayobj.item>>
<<else>>
<<itemcard _displayobj.item _displayobj.quantity>>
<</if>>
<</filterall>><<set _target = setup.item[$gUseItem_key]>>
Use <<rep _target>> on whom?
<<set _unitlist = State.variables.company.player.getUnits()>>
<<set _unitlist = _unitlist.filter(unit => _target.isUsableOn(unit) && unit.isHome())>>
<<selectunit _unitlist 'ItemUnitUsableUseOn'>><<set _unit = State.variables.unit[$gUnitSelected_key]>>
<<set _target = setup.item[$gUseItem_key]>>
<<unset $gUnitSelected_key>>
<<unset $gUseItem_key>>
<<run _target.use(_unit)>>
<<run setup.notify(`Used ${_target.rep()} on ${_unit.rep()}.`)>>
<<focgoto "Inventory">><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.library)>>
<h2><<= _room.getTitleRep()>></h2>
<<set _u = setup.getUnitRandom({job: setup.job.slaver, available: true})>>
<<if Math.random() < 0.3>><<set _u = null>><</if>>
<p>
You enter the grand library of your fort.
It is furnished full with books, whose origin you never actually know.
The <<message 'map of the region'>>
<<worldmap>>
<</message>> is framed on one of the walls.
<<if _u>>
Your <<repfull _u>> is here right now.
<<if _u.isHasTrait('per_studious')>>
Not really surprising given <<their _u>> diligent nature.
<<elseif _u.isHasTrait('per_curious')>>
The inquisitive slaver always enjoy a good read or two.
<<elseif _u.isHasTrait('per_smart')>>
No doubt <<their _u>> frequent trip to the library is contributing to <<their _u>>
intelligence.
<<elseif _u.isHasTrait('per_slow')>>
It seems that despite being a little slow, <<they _u>> is clearly trying to improve.
<<elseif _u.isHasTrait('per_active')>>
A surprising fact -- you have never known the active slaver to enjoy reading books.
<<elseif _u.isHasTrait('per_stubborn')>>
You sighed, knowing that sooner or later the stubborn slaver will give up reading the book and throw it away.
<<elseif _u.isHasTrait('per_evil')>>
<<They _u>>'s probably reading a book about world domination on two.
<<elseif _u.isHasTrait('per_dreamy')>>
From the drool coming from <<their _u>> <<umouth _u>>, the air-headed slaver
seems to enjoy a good day-dream.
<<else>>
You walked quietly to try and not disturb the slaver's reading.
<</if>>
<<else>>
Nobody is in the library right now.
<</if>>
You picked an empty seat and begin to plan what you would like to read today.
</p>
<<set _forfilter = Object.values(setup.lore).filter(a => a.isVisible())>>
<<filterall 'lore' _forfilter>>
<<if $menufilter.get('lore', 'display') == 'compact'>>
<<rep _displayobj>>
<<else>>
<<lorecard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.mailroom)>>
<<set _opportunities = $opportunitylist.getOpportunities()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You came in to see if you have any new mails.
<<if _opportunities.length>>
Currently, there are <<successtext _opportunities.length>> opportunities for you to take action on.
<<else>>
There are no opportunities pending your action right now.
<</if>>
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
<<if _viceleader>>
Your vice-leader <<rep _viceleader>> is also here.
<<focmove 'Manage auto-answer settings' 'OpportunityAutoAnswer'>>
<</if>>
</p>
<<filterall 'opportunity' _opportunities>>
<<opportunitycard _displayobj>>
<</filterall>><<set $gPassage = 'OpportunityOptionSelectedContinue'>>
<<if $gMenuVisible>>
<<link "Continue">>
<<if $opportunitylist.getOpportunities().length>>
<<focgoto 'OpportunityList'>>
<<else>>
<<focgoto 'QuestHub'>>
<</if>>
<</link>>
<</if>><<if $gSelectedPassage>>
<<set $gOpportunity = $opportunityinstance[$gOpportunity_key]>>
<<unset $gOpportunity_key>>
<<questvarload $gOpportunity>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include $gSelectedPassage>>
<</capture>>
<<unset $gSelectedPassage>>
<<include 'OpportunityOptionSelectedContinue'>>
<<else>>
<<if $opportunitylist.getOpportunities().length>>
<<set $gPassage = 'OpportunityList'>>
<<include "OpportunityList">>
<<else>>
<<set $gPassage = 'QuestHub'>>
<<include "QuestHub">>
<</if>>
<</if>><<set $gMenuVisible = true>>
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
You went over to <<rep _viceleader>>'s desk. The following is the list of all
mails that <<rep _viceleader>> will automatically responds to.
You can make changes to it, if you wish.
<br/>
<<focmove 'Return' 'OpportunityList'>>
<<for _iopportunity, _opportunity range $opportunitylist.getOpportunityAutoAnswers()>>
<br/>
<<nameof _opportunity[0]>>: Respond with
<<include _opportunity[0].getOptions()[_opportunity[1]][0]>>
<<capture _iopportunity, _opportunity>>
<<link '(remove auto-answer)'>>
<<run $opportunitylist.removeAutoAnswer(_opportunity[0])>>
<<focgoto>>
<</link>>
<</capture>>
<</for>><<if !$gPassage>>
<<set $gPassage = 'QuestHub'>>
<</if>>
<div id='allcontainer'>
<<include $gPassage>>
</div><<focwidget 'marketobjectaction'>>
<<if $market[$gMarket_key].isCanBuyObject($args[0])>>
<<focbutton 'Get'>>
<<run $market[$gMarket_key].buyObject($args[0])>>
<<refreshmarket>>
<</focbutton>>
<<else>>
<<dangertextlite 'Cannot get'>>
<</if>>
<<set _price = $args[0].getPrice()>>
<<if _price>>
<<money $args[0].getPrice()>>
<<else>>
<<successtextlite 'FREE'>>
<</if>>
<</focwidget>>
<<focwidget 'marketobjectexpire'>>
<<if $args[0].isInfinite()>>
<span data-tooltip="There are no limit to how many times you can buy this item">
<<successtextlite "Infinite">>
</span>
<<else>>
Expires in: <<= $args[0].getExpiresIn()>> weeks
<<if $gMarket_candelete>>
<<link '(remove)'>>
<<run $market[$gMarket_key].removeObjectAndCheckDelete($args[0])>>
<<refreshmarket>>
<</link>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'marketobjectcard'>>
<div class='marketobjectcard'>
<<marketobjectaction $args[0]>>
<span class="toprightspan">
<<marketobjectexpire $args[0]>>
</span>
<<marketobjectdisplay $args[0].getObject()>>
</div>
<</focwidget>>
<<focwidget 'loadmarket'>>
<<set _marketobjects = $market[$gMarket_key].getMarketObjects()>>
<<if $market[$gMarket_key] instanceof setup.MarketEquipment >>
<<set _menu = 'equipmentmarket'>>
<<elseif $market[$gMarket_key] instanceof setup.MarketItem >>
<<set _menu = 'itemmarket'>>
<<elseif $market[$gMarket_key] instanceof setup.MarketUnit >>
<<set _menu = 'unitmarket'>>
<<else>>
<<run throw `Unrecognized market type`>>
<</if>>
<<set _display = $market[$gMarket_key].getMarketObjects()>>
<<if $market[$gMarket_key] instanceof setup.MarketItem >>
<<set _availability = $menufilter.get(_menu, 'availability')>>
<<if _availability == 'limited'>>
<<set _display = _display.filter(a => !a.isInfinite())>>
<<elseif _availability == 'unlimited'>>
<<set _display = _display.filter(a => a.isInfinite())>>
<</if>>
<</if>>
<<set _forfilter = _display.map(a => a.getObject())>>
<<set _market_display_settings = $menufilter.get(_menu, 'display')>>
<<filterall _menu _forfilter _display>>
<<if _market_display_settings == 'compact'>>
<<marketobjectaction _displayobj>>
<<rep _displayobj.getObject()>>
|
<<marketobjectexpire _displayobj>>
<<else>>
<<marketobjectcard _displayobj>>
<</if>>
<</filterall>>
<</focwidget>>
<div id='marketholder'>
<<loadmarket>>
</div>
<<focwidget 'refreshmarket'>>
<<replace '#marketholder'>>
<<loadmarket>>
<</replace>>
<<refreshmenu>>
<</focwidget>><<set $gMenuVisible = true>>
<<focwidget marketobjectdisplay>>
<<equipmentcard $args[0] 1>>
<</focwidget>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.forge)>>
<<set _objects = $market.combatequipmentmarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
A small area next to the exit of your grand hall where blacksmiths and tailors
peddle their goods.
If you come here looking for equipments to buy, you have come to the right place.
<<if _objects.length>>
You found <<successtext _objects.length>> equipments for sale right now in the market.
<<else>>
Unfortunately, nobody seems to sell any equipment right now.
You can wait until next week for more items for sale.
<</if>>
<<set _favor = $favor.getFavor($company.orc)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
You have somehow allied with the rough tumble orcs of <<rep $company.orc>>.
As a result, some of their master smiths can often be seen here,
grumpily selling their finest armors to you and your slavers, including
the incredibly rare <<rep setup.equipment.combat_arms_master>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
You have maintained a friendly relations with the rough tumble orcs of <<rep $company.orc>>.
Some of their smiths often come to your fort to sell their wares here.
Very rarely their master smiths also come to sell the rarest armors to your market.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
You have maintained a warm relations with the rough tumble orcs of <<rep $company.orc>>.
Their smiths freely sell their work in your fort, for you and your slavers to buy.
<</if>>
</p>
<<set $gMarket_key = $market.combatequipmentmarket.key >>
<<set $gMarket_candelete = true>>
<<include 'MarketBoilerplate'>><<set $gMenuVisible = true>>
<<focwidget marketobjectdisplay>>
<<itemcard $args[0] 0 1>>
<</focwidget>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.apothecary)>>
<<set _objects = $market.itemmarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You have transformed the small clearing behind your grand hall into a bustling
market. Various people sell their goods here to the slavers and visitors.
You came here looking for items to buy.
<<if _objects.length>>
You found <<successtext _objects.length>> items for sale right now in the market.
<<else>>
Unfortunately, nobody seems to sell any item that is useful for you right now.
You can wait until next week for more items for sale.
<</if>>
<<set _favor = $favor.getFavor($company.elf)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
The <<rep $company.elf>> views your company as one of its allies.
They often send their finest alchemist to your company, to peddle
the rare and wondrous <<rep setup.item.blank_potion>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
The <<rep $company.elf>> views your company as one of its friends.
Elven alchemists can often be seen in the market, selling their potions.
They even occassionally (but very rarely) carry very high-valued potions in their inventory.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
The <<rep $company.elf>> views your company warmly.
They trusted you enough to send some of their alchemists to the markets,
to sell their potions for you and your slavers.
<</if>>
<<set _favor = $favor.getFavor($company.werewolf)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
Your company has allied with the <<rep $company.werewolf>>. Occassionally,
master carpenters from the werewolves' camp can be seen peddling their rare
<<rep setup.item.f_slaverbed_master>> in the markets.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Your company has very good relations with the <<rep $company.werewolf>>.
They peddle their furniture here in your fort, and very rarely they carry
something with a much higher quality than normal.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Your company has maintained warm relations with the <<rep $company.werewolf>>.
They peddle their furniture here in your fort, for you to buy to decorate your bedchambers.
<</if>>
</p>
<<set $gMarket_key = $market.itemmarket.key >>
<<set $gMarket_candelete = true>>
<<include 'MarketBoilerplate'>><<set $gMenuVisible = true>>
<<focwidget marketobjectdisplay>>
<<equipmentcard $args[0] 1>>
<</focwidget>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.sexshop)>>
<<set _objects = $market.sexequipmentmarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>The sex shop is located next to the dungeons in your fort.
You enter its gaudily decorated entrance, looking to expand your collection of
sex toys.
<<if $fort.player.getBuilding(setup.buildingtemplate.sexshoppet)>>
A separate room has "Pet Shop" as a banner --- but you know its not
selling your average pet amenities.
<</if>>
<<if $fort.player.getBuilding(setup.buildingtemplate.sexshoppony)>>
There is also a dedicated vendor that claims to sell horse riding equipments,
but given that he is located here, you know better what he actually sells.
<</if>>
<<if _objects.length>>
There are <<successtext _objects.length>> items for sale right now.
<<else>>
Currently, there are no items for sale. You can wait until next week
for more items to be sold here.
<</if>>
<<set _favor = $favor.getFavor($company.neko)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
Because of your excellent relationship with the <<rep $company.neko>>,
occassionally a master crafter can be seen in here,
selling an extremely rare <<rep setup.equipment.buttplug_master >>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
The friendly relationship you maintained with <<rep $company.neko>> encourages
their crafters to open shop in your fort.
Very rarely, some very rare sex equipment can even be found here.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
The <<rep $company.neko>> trusted your company enough to send some of its
crafters to peddle their goods here.
<</if>>
</p>
<<set $gMarket_key = $market.sexequipmentmarket.key >>
<<set $gMarket_candelete = true>>
<<include 'MarketBoilerplate'>><<set $gMenuVisible = true>>
<<focwidget marketobjectdisplay>>
<<unitcard $args[0]>>
<</focwidget>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.slavepens)>>
<<set _slaves = $market.slavemarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>The slave pens is located just right outside your fort.
<<if _slaves.length>>
There are <<successtext _slaves.length>> slaves chained to the pens right now.
<<if $company.player.canAddUnitWithJob(setup.job.slave)>>
You can take some of them as your slaves.
If you decide not to, some of them might be gone by the next week.
<<else>>
You <<dangertextlite 'do not have any more space'>> for a slave in your company right now.
Consider expanding your dungeons by building more cells.
<</if>>
<<else>>
It is empty at the moment.
When your slavers capture some slaves during a quest, or when someone
bring some slaves for you to buy, they will be placed here.
You can then decide whether to take them as your slaves.
<</if>>
<<set _favor = $favor.getFavor($company.outlaws)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
A slave trader can be seen resting in a nearby hut.
Thanks to your excellent relations with <<rep $company.outlaws>>, a steady
supply of slaves is being delivered to the pits each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
A slave trader can be seen resting in a nearby hut.
Thanks to your good relations with <<rep $company.outlaws>>,
some freshly caught slaves are being delivered to the pits each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Since the <<rep $company.outlaws>> view your company in a good light,
they usually send a freshly-caught slave here each week for you to purchase, if you choose.
<</if>>
</p>
<<set $gMarket_key = $market.slavemarket.key >>
<<set $gMarket_candelete = true>>
<<include 'MarketBoilerplate'>><<set $gMenuVisible = true>>
<<focwidget marketobjectdisplay>>
<<unitcard $args[0]>>
<</focwidget>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.prospectshall)>>
<<set _prospects = $market.slavermarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>You exit the main building of your fort, and enter the prospects hall just outside
of the fort.
<<if _prospects.length>>
There are <<successtext _prospects.length>> potential slavers here at the moment.
<<if $company.player.canAddUnitWithJob(setup.job.slaver)>>
You can hire them, or if you decide not to hire them, they will leave in a few weeks.
<<else>>
You <<dangertextlite 'do not have any more space'>> for a slaver in your company right now. It might be
a good idea to furnish some new rooms for some more slaver space.
<</if>>
<<else>>
It is empty at the moment. It might be a good idea to search for potential slavers. They
will then appear here, for you to hire if you wish.
<</if>>
<<set _favor = $favor.getFavor($company.humankingdom)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
Your company is very famous in the <<rep $company.humankingdom>>, and a steady stream
of hopefuls comes to the prospect hall each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Your company is well-known in the <<rep $company.humankingdom>>, and usually one or two
hopeful slavers come to the prospects hall for you to recruit.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Your company is well-known within certain circles in the <<rep $company.humankingdom>>,
which usually attracts a slaver hopeful to this place each week.
<</if>>
</p>
<<set $gMarket_key = $market.slavermarket.key >>
<<set $gMarket_candelete = true>>
<<include 'MarketBoilerplate'>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.marketingoffice)>>
<<set _orders = $slaveorderlist.getSlaveOrders()>>
<<set _marketer = $dutylist.getDuty('DutyMarketer')>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter your desk in the room you designate as the marketing office.
<<if _marketer>>
<<set _unit = _marketer.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _marketer>> <<rep _unit>> is busy finding new purchase orders for slaves,
<<= setup.Text.Duty.competence(_marketer)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Next to your desk is an empty desk for your <<rep _marketer>>.
<</if>>
<</if>>
<<if _orders.length >>
Papers describing full slave specifications for various slave orders
are scattered on your desk.
It is time to get to work.
<<else>>
The desk is empty right now, and there is not much work.
Maybe it's time to find some new orders?
<</if>>
</p>
<<for _iso, _so range $slaveorderlist.getSlaveOrders()>>
<<capture _iso, _so>>
<<slaveordercard _so _iso 0>>
<</capture>>
<</for>><<set $gMenuVisible = false>>
<<set _slave_order = $slaveorderlist.getSlaveOrders()[$gSlaveOrder_i]>>
<<set _slave_order_fulfill_slave_order = _slave_order>>
/* Special case for slave orders: use all units, not just units in your company. */
<<set _unitlist = Object.values($unit)>>
<<set _unitlist = _unitlist.filter(unit => _slave_order.isCanFulfill(unit))>>
Choose unit to fulfill order <<=_slave_order.rep() >>
<<focreturn '(Cancel)'>>
<<focwidget 'rostershowaction'>>
<<foctimed 0s t8n>>
<<criteriatraitlist $args[0] _slave_order_fulfill_slave_order.getCriteria()>>
<<focbutton 'Select' 'SlaveOrderFulfillDo'>>
<<set $gUnitSelected_key = $args[0].key>>
<</focbutton>>
<<set _price = _slave_order_fulfill_slave_order.getFulfillPrice($args[0])>>
<<money _price>>
<</foctimed>>
<</focwidget>>
<<rostershow _unitlist 'unitso'>><<set _slave_order = $slaveorderlist.getSlaveOrders()[$gSlaveOrder_i]>>
<<set _unit = $unit[$gUnitSelected_key]>>
<<run _slave_order.fulfill(_unit)>>
The transaction has been completed.
<<rep _unit>> has been sold and will begin <<their _unit>> new life,
while your company gain some money for the trouble.
<br/>
<<set $gPassage = 'SlaveOrderList'>>
<<focmove "Continue" "SlaveOrderList">><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.messengerpost)>>
<<set _contacts = $contactlist.getContacts()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the small building right at the entrance of your fort.
It is here that you receive messages and order messengers to come and
deliver your messages.
<<if _contacts.length >>
You check on your list of contacts and see if there is anything you'd like to do.
<<else>>
As you have no contacts right now, there is nothing to be done here.
<</if>>
</p>
<<for _icontact, _contact range _contacts>>
<<contactcard _contact>>
<</for>><<set $gMenuVisible = false>>
No valid set of units found.
<<message '(?)'>>
Some quests requires a specific slavers to participate in.
For example, it may require a slaver with the <<rep setup.trait.skill_flight>> trait.
You can check these requirements by clicking the (full unit details) link
in the quest.
<</message>>
<br/>
<br/>
<<focmove 'Go back' 'QuestHub'>>/* team formed. */
<<set _finassignment = {}>>
<<set _team = new setup.Team('Ad-hoc Team', true)>>
<<run State.variables.company.player.addTeam(_team)>>
<<for _actorname, _unitkey range $gAdhocQuestActorMap>>
<<set _unit = $unit[_unitkey]>>
<<set _finassignment[_actorname] = _unit>>
<<run _team.addUnit(_unit)>>
<</for>>
<<run _quest.assignTeam(_team, _finassignment)>>
<<unset $gAdhocUnitUsed>>
<<unset $gAdhocQuestActorMap>>
<<unset $gAdhocQuest_key>>
<<focgoto 'QuestHub'>><<set _quest = $questinstance[$gAdhocQuest_key]>>
<<set _criterias = _quest.getTemplate().getUnitCriterias()>>
<<for _ixcriteria, _xcriteria range _criterias>>
<<set _criteria = _xcriteria.criteria>>
<<set _actorname = _ixcriteria>>
<<set _difficulty = _quest.getTemplate().getDifficulty()>>
<<set _units = _criteria.getEligibleUnitsSorted(_difficulty)>>
<<set _unit = null>>
<<for _iccunit, _ccunit range _units>>
<<if !_unit && !(_ccunit.key in $gAdhocUnitUsed)>>
<<if $settings.autoassignbreakteams || !_ccunit.getTeam()>>
<<if !_ccunit.isBusy()>>
<<set _unit = _ccunit>>
<</if>>
<</if>>
<</if>>
<</for>>
<<if _unit>>
<<set $gAdhocUnitUsed[_unit.key] = true>>
<<set $gAdhocQuestActorMap[_actorname] = _unit.key>>
<</if>>
<</for>>
<<if Object.keys($gAdhocUnitUsed).length < Object.keys(_criterias).length>>
<<focgoto 'QuestAdhocNoAssignment'>>
<<else>>
<<include 'QuestAdhocFinalizeAssign'>>
<</if>><<set $gMenuVisible = false>>
/* bypass foctimed */
<<set _foctimed_is_tooltip = true>>
<<set _quest = $questinstance[$gAdhocQuest_key]>>
<<link 'Cancel'>>
<<unset $gAdhocUnitUsed>>
<<unset $gAdhocQuestActorMap>>
<<unset $gAdhocQuest_key>>
<<unset $gAdhocQuestCriteriaOpenActor>>
<<focgoto 'QuestHub'>>
<</link>>
<<questcard _quest 1>>
<<set _criterias = _quest.getTemplate().getUnitCriterias()>>
/* Find out which one to open by default */
<<if !$gAdhocQuestCriteriaOpenActor>>
<<for _actorname, _criteria range _criterias>>
<<if !$gAdhocQuestActorMap[_actorname]>>
<<set $gAdhocQuestCriteriaOpenActor = _actorname>>
<<break>>
<</if>>
<</for>>
<</if>>
/* Show one by one */
<<for _actorname, _criteriaobj range _criterias>>
<<set _criteria = _criteriaobj.criteria>>
<div class='actorcard'>
<<set _actorunit = $gAdhocQuestActorMap[_actorname]>>
/* Show name and unit */
<<nameof _criteria>>
<<if _actorunit>>
: <<rep $unit[_actorunit]>> <<= _criteria.repActor($unit[_actorunit], _quest.getTemplate().getDifficulty())>>
<</if>>
<<if !_actorunit || $gAdhocQuestCriteriaOpenActor == _actorname>>
| <<criteriacard _criteria>>
<</if>>
<<if $gAdhocQuestCriteriaOpenActor == _actorname>>
/* Show list of units to assign to this criteria */
<<set _qacriteria = _criteria>>
<<set _qaactorname = _actorname>>
<<capture _qaactorname, _qacriteria>>
<div><b>Select unit for</b> <<nameof _qacriteria>>:</div>
<<set _units = _criteria.getEligibleUnits(_quest).filter(unit => unit.key != $gAdhocQuestActorMap[_qaactorname])>>
<<run _units.sort(setup.MenuFilter.unitQuestCompareScoreSort('computeScore'))>>
<<filterall 'unitquest' _units>>
<<button 'Select'>>
<<run setup.QuestAssignHelper.assignUnit(_qaactorname, _displayobj, _qacriteria)>>
<<unset $gAdhocQuestCriteriaOpenActor>>
<<focgoto>>
<</button>>
<<if _displayobj.key in $gAdhocUnitUsed>>
<span data-tooltip="Unit already going on this quest!">
<<= setup.repImgIcon(setup.Unit.DANGER_IMAGE_URL)>>
</span>
<<else>>
<<= _displayobj.repBusyState(true)>>
<</if>>
Lv. <<= _displayobj.getLevel()>>
<<rep _displayobj>>
<<if _displayobj.getTeam()>>
of <<rep _displayobj.getTeam()>>
<</if>>
<<= _qacriteria.repActor(_displayobj, $questinstance[$gAdhocQuest_key].getTemplate().getDifficulty())>>
<</filterall>>
<</capture>>
<<else>>
/* Show button */
<<if _actorname != $gAdhocQuestCriteriaOpenActor>>
<span class='toprightspan'>
<<if _actorunit>>
<<set _buttontext = 'Change'>>
<<else>>
<<set _buttontext = 'Select unit'>>
<</if>>
<<capture _actorname>>
<div class='button-full-container'>
<<button _buttontext>>
<<set $gAdhocQuestCriteriaOpenActor = _actorname>>
<<focgoto>>
<</button>>
</div>
<</capture>>
</span>
<</if>>
<</if>>
</div>
<</for>>
<div>
<<if setup.QuestAssignHelper.isAllActorsFilled()>>
<div>
<<= setup.QuestAssignHelper.computeSuccessObjRep()>>
</div>
<<button 'Done'>>
<<run setup.QuestAssignHelper.finalize()>>
<<unset $gAdhocUnitUsed>>
<<unset $gAdhocQuestActorMap>>
<<unset $gAdhocQuest_key>>
<<unset $gAdhocQuestCriteriaOpenActor>>
<<focgoto 'QuestHub'>>
<</button>>
<</if>>
<<foclink '(cancel)' 'QuestHub'>>
<<unset $gAdhocUnitUsed>>
<<unset $gAdhocQuestActorMap>>
<<unset $gAdhocQuest_key>>
<<unset $gAdhocQuestCriteriaOpenActor>>
<<focgoto 'QuestHub'>>
<</foclink>>
</div>
<<unset _foctimed_is_tooltip = true>><<set _quests = $company.player.getQuests()>>
<p>
You enter your office, where you work to assign slaver teams to quests.
There are currently <<successtext _quests.length >> quests that
your company can take.
<<set _vale = $dutylist.getDuty('DutyScoutVale')>>
<<set _forest = $dutylist.getDuty('DutyScoutForest')>>
<<set _city = $dutylist.getDuty('DutyScoutCity')>>
<<set _desert = $dutylist.getDuty('DutyScoutDesert')>>
<<set _sea = $dutylist.getDuty('DutyScoutSea')>>
<<if _vale || _forest || _city || _desert || _sea>>
<<capture _vale, _forest, _city, _desert, _sea>>
<<message 'You can check on your scouts.'>>
<<if _vale>>
<<set _unit = _vale.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _vale>> <<rep _unit>> is busy venturing across the <<lore region_vale>> looking for opportunities,
<<= setup.Text.Duty.competence(_vale)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Your outpost for <<rep _vale>> is empty right now.
<</if>>
<</if>>
<<if _forest>>
<<set _unit = _forest.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
As your <<rep _forest>>, <<rep _unit>> is somewhere over by the western forests looking for quests,
<<= setup.Text.Duty.competence(_forest)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Your outpost for <<rep _forest>> is empty right now.
<</if>>
<</if>>
<<if _city>>
<<set _unit = _city.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
<<rep _unit>> is busy going back and forth between your fort and the<<lore location_lucgate>>
as you <<rep _city>>,
<<= setup.Text.Duty.competence(_city)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Your outpost for <<rep _city>> is empty right now.
<</if>>
<</if>>
<<if _desert>>
<<set _unit = _desert.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Your <<rep _desert>> <<rep _unit>>
often travel for weeks end to the eastern deserts looking for leads,
<<= setup.Text.Duty.competence(_desert)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Your outpost for <<rep _desert>> is empty right now.
<</if>>
<</if>>
<<if _sea>>
<<set _unit = _sea.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You sometimes heard back from
your <<rep _sea>> <<rep _unit>> sailing on the southern seas,
<<= setup.Text.Duty.competence(_sea)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Your outpost for <<rep _sea>> is empty right now.
<</if>>
<</if>>
<</message>>
<</capture>>
<</if>>
<<set _favor = $favor.getFavor($company.humanvale)>>
<<set _favor2 = $favor.getFavor($company.humandesert)>>
<<set _favor3 = $favor.getFavor($company.dragonkin)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0] ||
_favor2 >= setup.FAVOR_EFFECT_THRESHOLDS[0] ||
_favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Thanks to your relationship with them, you receive quest leads from
<<message "other companies">>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
You receive many nearby quest leads from the <<rep $company.humanvale>>
each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
You receive several nearby quest leads from the <<rep $company.humanvale>>
each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
You receive a few nearby quest leads from the <<rep $company.humanvale>>
each week.
<</if>>
<<if _favor2 >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
The <<rep $company.humandesert>> people send you several leads for quests in faraway lands each week.
<<elseif _favor2 >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
The <<rep $company.humandesert>> people send you a couple leads for quests in faraway lands each week.
<<elseif _favor2 >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
The <<rep $company.humandesert>> people send you a lead for quest in faraway lands each week.
<</if>>
<<if _favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
Thanks to your excellent relations with the <<rep $company.dragonkin>>,
you receive several rare quest leads from the dragonkin's flying scouts each week.
<<elseif _favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Thanks to your good relations with the <<rep $company.dragonkin>>,
you receive a rare quest lead from the dragonkin's flying scouts each week.
<<elseif _favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Thanks to your warm relations with the <<rep $company.dragonkin>>,
you occassionally receive a rare quest lead from the dragonkin's flying scouts each week.
<</if>>
<</message>>
each week.
<</if>>
<<if _quests.length>>
You take a look at the details of these quests...
<<else>>
<<if $fort.player.isHasBuilding(setup.buildingtemplate.scouthut)>>
Maybe you should go look for more quests.
<<else>>
First, you should go to the <<successtext 'Slaver'>> menu on the left to change yours or your
slaver's skill focuses, which determines the skills they gain on level up.
You should also build a <<rep setup.buildingtemplate.scouthut>> now via the <<successtext 'Build'>> menu on the left.
<</if>>
<</if>>
<<message '(Help)'>>
In order to complete quests, you assign a team of slavers to the quests.
The
(<<successtext 'xx'>> / <<successtextlite 'xx'>> / <<dangertextlite 'xx'>> / <<dangertext 'xx'>>)
are the <<successtext 'critical success'>> / <<successtextlite 'success'>> /
<<dangertextlite 'failure'>> / <<dangertext 'disaster'>> chances when you assign
each team to the quest.
Each quest consist of several roles, which dictates what kind of slavers are
most suited to doing the quest.
Each role has several skills that are preferred (e.g.,
[
<<rep setup.skill.combat>><<rep setup.skill.combat>><<rep setup.skill.survival>>
]), as well as several critical and disaster traits.
Having a slaver with a high matching skill will increase the success chances.
Having a slaver with matching critical traits will increase the critical chance, while
having slavers with matching disaster traits will increase the disaster chance.
)
The game will show these matches by glowing them, e.g.,
[
<<skillcardglowkey setup.skill.brawn.key>><<skillcardglowkey setup.skill.brawn.key>><<rep setup.skill.arcane>>
] indicates that the slaver assigned to this role has <<rep setup.skill.brawn>> as one of their skill focuses,
(Note that skill focus does not necessarily mean the unit has high point in those skill!)
while
<<= setup.trait.per_nimble.rep() >> <<negtraitcard setup.trait.muscle_strong>>
means that the slaver matches the critical trait <<rep setup.trait.per_nimble>>,
but also matches the disaster trait <<= setup.trait.muscle_strong.rep() >>
(notice the red cross on top of the disaster trait).
<</message>>
</p><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.questoffice)>>
<<if $fort.player.isHasBuilding(setup.buildingtemplate.grandhall)>>
<div>
<<message '(Observe your office)'>>
<div class='helpcard'>
<h2><<= _room.getTitleRep()>></h2>
<<include 'QuestHubFlavor'>>
</div>
<</message>>
</div>
<<else>>
<h2><<= _room.getTitleRep()>></h2>
<<include 'QuestHubFlavor'>>
<</if>>
<<focwidget 'loadquests'>>
<<set _quests = $company.player.getQuests()>>
<div>
<<filtertagtoolbar 'quest' _quests>>
<<filterall 'quest' _quests>>
<<if $menufilter.get('quest', 'display') == 'compact'>>
<<questcardcompact _displayobj>>
<<elseif $menufilter.get('quest', 'display') == 'short'>>
<<questcardcompact _displayobj>>
<<else>>
<<questcard _displayobj>>
<</if>>
<</filterall>>
</div>
<</focwidget>>
<<focwidget 'refreshquests'>>
<<replace '#questholder'>>
<<loadquests>>
<</replace>>
<<refreshmenu>>
<</focwidget>>
<div id='questholder'>
<<loadquests>>
</div><<set _manager = $dutylist.getUnit('relationshipmanager')>>
<<if _manager>>
<p>
Your relationship manager is able to maintain favors with maximum
<<= $favor.getMaxManagedCompanies()>> companies right now.
This number is based on <<rep _manager>>'s affinity for the job.
<<set _managed = $favor.getManagedCompanies()>>
<<if _managed.length>>
<<They _unit>> is currently managing the favors of the following companies:
<<for _company range _managed>><<rep _company>> <</for>>.
To do so, <<rep _unit>> requires an upkeep of
<<money $favor.getRelationshipManagerUpkeep()>> each week.
<<if _managed.length < $favor.getMaxManagedCompanies()>>
<<They _unit>> can still manage more companies, and you can assign more, although
this will increase <<their _unit>> upkeep costs.
<</if>>
<<else>>
<<They _unit>> is <<dangertext 'not currently managing favor with any company'>>.
You should assign some companies to manage.
<</if>>
<<if $gMenuVisible>>
<<focmove '(change managed companies)' 'RelationsOfficeManagedCompanies'>>
<</if>>
</p>
<</if>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.relationsoffice)>>
<<set _manager = $dutylist.getDuty('DutyRelationshipManager')>>
<<set _officer = $dutylist.getDuty('DutyDamageControlOfficer')>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the relations office.
<<if _manager>>
There is a separate desk for your <<rep _manager>>.
<<set _unit = _manager.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
<<rep _unit>> busily works there currying favor with other companies,
<<= setup.Text.Duty.competence(_manager)>>.
<<include 'RelationshipManagerDescribe'>>
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
It is unoccupied right now.
<</if>>
<</if>>
<<if _officer>>
An adjacent room has been renovated into an office for your
<<rep _officer>>.
<<set _unit = _officer.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You can see <<rep _unit>> inside busily making plausible excuses for your company's atrocities.
<<= _unit.getName()>> diligently works,
<<= setup.Text.Duty.competence(_officer)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
Nobody is in the office right now.
<</if>>
<</if>>
<<set _favor = $favor.getFavor($company.bank)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
The <<rep $company.bank>> recognizes your company as one of its few allies,
and generously send your company a small interest each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Your company has been formally recognized as a friend by the <<rep $company.bank>>,
who expressed their friendship with a gift of money each week.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
The <<rep $company.bank>> views your company favorably, and gifted your company
with some money each week as good will.
<</if>>
You find an empty desk to work at, sit there and begin your work here.
</p>
<<set _companies = Object.values($company).filter(c => c != $company.player && $favor.isCompanyKnown(c))>>
<<run _companies.sort((a, b) => { return a.getName().localeCompare(b.getName()) })>>
<<filterall 'company' _companies>>
<<if $menufilter.get('company', 'display') == 'compact'>>
<<rep _displayobj>>
<<companyfavorcard _displayobj 1>>
<<companyirecard _displayobj>>
<<companyfavortoprightcard _displayobj>>
<<else>>
<<companycard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _manager = $dutylist.getDuty('DutyRelationshipManager')>>
<p>
Select the companies
for your <<rep _manager>> to manage their favors.
When managed, their favors will no longer decay when below
<<successtextlite "75.0">> favor. Their decay will also be much slower when the favor
is above <<successtextlite "75.0">>.
</p>
<p>
<<set _max = $favor.getMaxManagedCompanies()>>
<<set _unit = _manager.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
<<rep _unit>> is your <<rep _manager>>.
<<They _unit>> is able to manage <<= _max>> companies right now.
That means only the first <<= _max>> of the companies below will have their relationship decay
reduced.
<<They _unit>> requires an upkeep of <<money $favor.getRelationshipManagerUpkeep()>> per week.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
You do not have any slaver assigned to <<rep _manager>> right now.
<</if>>
</p>
<div>
<<focmove '(Finish changing managed companies)' 'RelationsOffice'>>
</div>
<<set _allmanaged = $favor.getAllManagedCompanies()>>
<<for _icompany, _company range _allmanaged>>
<div>
<<if _icompany >= _max>>
<<dangertextlite '[Inactive]'>>
<<message '(?)'>>
Your <<rep _manager>> can only manage <<= _max>> companies.
<</message>>
<</if>>
<<rep _company>>
<<capture _company>>
<<link '(remove)'>>
<<run $favor.removeManagedCompany(_company)>>
<<focgoto>>
<</link>>
<</capture>>
</div>
<</for>>
<<if _allmanaged.length < _max >>
<div>
<<message '(Manage new company)'>>
<<for _company range $company>>
<<if _company != $company.player && !_allmanaged.includes(_company) && $favor.isCompanyKnown(_company)>>
<div>
<<capture _company>>
<<focbutton 'Manage'>>
<<run $favor.addManagedCompany(_company)>>
<<focgoto>>
<</focbutton>>
<</capture>>
<<rep _company>>
</div>
<</if>>
<</for>>
<</message>>
</div>
<</if>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.dungeons)>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slave})>>
<<if !_room>>
<<set _cells = 0>>
<<else>>
<<set _cells = _room.getLevel() - 1>>
<</if>>
<<set _maxslaves = State.variables.company.player.getMaxUnitOfJob(setup.job.slave)>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You descend into your dungeons.
<<if _cells>>
It has been extended with <<= _cells>> additional cells.
<</if>>
It currently holds <<successtext _unitlist.length>> slaves out of a maximum of
<<= _maxslaves>> slaves.
<<if _unitlist.length >= _maxslaves>>
If you want to keep more slaves, consider constructing more dungeon cell improvements.
<</if>>
</p>
<<focwidget 'rostershowaction'>>
<<focbutton 'Interact' 'UnitDetail'>>
<<set $gUnit_key = $args[0].key>>
<<set $gUnitDetailReturnPassage = $gPassage>>
<</focbutton>>
<<if $fort.player.isTrainingUnlocked($args[0])>>
<<focbutton 'Action' 'UnitActionChoose'>>
<<set $gUnitSelected_key = $args[0].key>>
<</focbutton>>
<</if>>
<</focwidget>>
<<rostershow _unitlist>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.lodgings)>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slaver})>>
<<set _maxslavers = State.variables.company.player.getMaxUnitOfJob(setup.job.slaver)>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the west wing of your fort, which is the de facto lodgings area of your fort.
<<if _room && _room.getLevel() > 1>>
It has been extended with <<= _room.getLevel() - 1>> additional rooms.
<</if>>
There are currently <<successtext _unitlist.length>> slavers residing here out of
a maximum of <<= _maxslavers>> slavers.
<<if _unitlist.length >= _maxslavers>>
If you want to hire more slavers, consider furnishing more rooms by upgrading
your <<rep setup.buildingtemplate.lodgings>>.
<</if>>
You remember that you can interact with your slavers if you ever want to change their skill focuses,
which determines which skill they gain on level up.
</p>
<<focwidget 'rostershowaction'>>
<<focbutton 'Interact' 'UnitDetail'>>
<<set $gUnit_key = $args[0].key>>
<<set $gUnitDetailReturnPassage = $gPassage>>
<</focbutton>>
<<if $fort.player.isTrainingUnlocked($args[0])>>
<<focbutton 'Action' 'UnitActionChoose'>>
<<set $gUnitSelected_key = $args[0].key>>
<</focbutton>>
<</if>>
<<link "(Change skill focuses)" >>
<<set $gUnit_skill_focus_change_key = $args[0].key>>
<<focgoto 'UnitChangeSkillFocus'>>
<</link>>
<<if $titlelist.getAllTitles($args[0]).length > setup.TITLE_MAX_ASSIGNED>>
<<link "(Change titles)" >>
<<set $gUnit_key = $args[0].key>>
<<focgoto 'UnitChangeTitles'>>
<</link>>
<</if>>
<</focwidget>>
<<rostershow _unitlist>><<link "(Go back)">>
<<if $gUnitDetailReturnPassage>>
<<focgoto $gUnitDetailReturnPassage>>
<<unset $gUnitDetailReturnPassage>>
<<else>>
<<if $unit[$gUnit_key].isSlaver()>>
<<focgoto 'Lodgings'>>
<<else>>
<<focgoto 'Dungeons'>>
<</if>>
<</if>>
<</link>><<set $gMenuVisible = true>>
/* Assumes $gUnit_key is set */
<<include 'UnitDetailBackButton'>>
<br/>
<br/>
<<if $unit[$gUnit_key] == $unit.player>>
You inspect yourself in the mirror.
<<else>>
You called <<nameof $unit[$gUnit_key]>> over.
<</if>>
/*
<<set _origin = $unit[$gUnit_key].getOrigin()>>
<<if _origin>>
<p>
Before <<if $unit[$gUnit_key].getJob() == setup.job.slave>>being enslaved by<<else>>joining<</if>>
your company, <<rep $unit[$gUnit_key]>> <<= _origin>>.
</p>
<</if>>
*/
<<foclink '(Action)' 'UnitActionChoose'>>
<<set $gUnitSelected_key = $gUnit_key>>
<</foclink>>
<<link "(Change nickname)">>
<<set $gUnit_key=$gUnit_key>>
<<focgoto 'UnitChangeName'>>
<</link>>
<<link "(Change portrait)">>
<<await setup.Dialogs.openUnitImagePicker($unit[$gUnit_key])>>
<!--<<run $unitimage.resetImage($unit[$gUnit_key], true)>>-->
<<refreshable-refresh '#unit-description-image'>>
<</await>>
<</link>>
<<if $unit[$gUnit_key].isHome() && !$unit[$gUnit_key].getTeam() && $unit[$gUnit_key] != $unit.player && ($unit[$gUnit_key].isSlave() || $company.player.getSlavers().length > 5)>>
<<message '(Dismiss unit)'>>
<<set _linktext = `Click here: remove permanently ${$unit[$gUnit_key].getName()} from company`>>
<<link _linktext>>
<<run $unit[$gUnit_key].addHistory('is dismissed from the company.')>>
<<run $company.player.removeUnit($unit[$gUnit_key])>>
<<run setup.unitgroup.none.addUnit($unit[$gUnit_key])>>
<<focgoto 'QuestHub'>>
<</link>>
<</message>>
<<else>>
<<if $unit[$gUnit_key] == $unit.player>>
You cannot dismiss yourself.
<<else>>
Unit cannot be dismissed <<message '(?)'>>
There are several reasons why you cannot dismiss a unit.
The most common reason is because the unit is not in your fort at the moment.
You also cannot dismiss a unit that belongs to a team.
Finally, you cannot have less than 5 slavers in your fort.
<</message>>
<</if>>
<</if>>
<p class="hide-unit-card-image">
<<unitcard $unit[$gUnit_key]>>
</p>
<p>
<<interactionpool setup.interactionpool.unit $unit[$gUnit_key]>>
</p>
<hr/>
<p>
<<unitdescription $unit[$gUnit_key]>>
</p>
<hr/>
<p>
<<set _equipment_set = $unit[$gUnit_key].getEquipmentSet()>>
<<if _equipment_set>>
<<name $unit[$gUnit_key]>> is currently wearing <<rep _equipment_set>>:
<<equipmentsetcard _equipment_set 'editequip'>>
<<else>>
<<if $unit[$gUnit_key].isSlave()>>
<<name $unit[$gUnit_key]>> is currently naked:
<<else>>
<<name $unit[$gUnit_key]>> is currently wearing <<their $unit[$gUnit_key]>> own clothes:
<</if>>
<<set _equipment_set = setup.EquipmentSet.getDefaultEquipmentSet($unit[$gUnit_key])>>
<<equipmentsetcard _equipment_set>>
<</if>>
</p>
<hr/>
<<include 'UnitDetailBackButton'>><<set $gMenuVisible = false>>
/* Assumes $gUnit_key is set */
<<set _gUnit_skill_focus_target_15723 = State.variables.unit[$gUnit_skill_focus_change_key]>>
Change
<<=_gUnit_skill_focus_target_15723.rep() >>'s skill focuses.
<<message '(?)'>>
Skill focus is the priority skill that the unit will try to focus on.
If a skill is one of the skill focuses, then it is guaranteed to gain at least one point per
level up, but can sometimes gain more than one:
Each skill focus grants a <<= (setup.SKILL_FOCUS_MULTI_INCREASE_CHANCE * 100).toFixed(0)>>% chance
the skill will get another extra point at level up.
You can select the same skills multiple times as a skill focus, which will increase the chance further.
For example,
[<<rep setup.skill.brawn>><<rep setup.skill.brawn>><<rep setup.skill.arcane>>]
means the unit will always gain <<rep setup.skill.brawn>><<rep setup.skill.arcane>> on level up.
It has roughly
<<message '(?)'>>
Each skill focus chance is calculated independently. So
[<<rep setup.skill.brawn>><<rep setup.skill.brawn>><<rep setup.skill.arcane>>]
means that there are two chances, each with
<<= (setup.SKILL_FOCUS_MULTI_INCREASE_CHANCE * 100).toFixed(0)>>% probability,
that the unit will get an extra <<rep setup.skill.brawn>> point.
This means there is a small chance the unit will get
<<rep setup.skill.brawn>><<rep setup.skill.brawn>><<rep setup.skill.brawn>> during one level up.
<</message>>
<<= (2 * setup.SKILL_FOCUS_MULTI_INCREASE_CHANCE * 100).toFixed(0)>>% chance to get
an extra <<rep setup.skill.brawn>> point, and
<<= (setup.SKILL_FOCUS_MULTI_INCREASE_CHANCE * 100).toFixed(0)>>% chance to get
an extra <<rep setup.skill.arcane>> point.
The order of the skill focuses does not matter.
<</message>>
<<unitcard _gUnit_skill_focus_target_15723 1>>
Display:
<<if $gUnitSkillFocusChangeDisplay>>
<<link 'Simple'>>
<<set $gUnitSkillFocusChangeDisplay = null>>
<<focgoto>>
<</link>>
<<else>>
Simple
<</if>>
|
<<if $gUnitSkillFocusChangeDisplay == 'full'>>
Full
<<else>>
<<link 'Full'>>
<<set $gUnitSkillFocusChangeDisplay = 'full'>>
<<focgoto>>
<</link>>
<</if>>
<<set _skill_base_15723 = _gUnit_skill_focus_target_15723.getSkillsBase()>>
<<set _skill_add_15723 = _gUnit_skill_focus_target_15723.getSkillsAdd()>>
<<set _skill_mod_15723 = _gUnit_skill_focus_target_15723.getSkillModifiers()>>
<<for _ifocus_15723, _focus_15723 range _gUnit_skill_focus_target_15723.getSkillFocuses(true) >>
<p>
Change focus (#<<= _ifocus_15723+1>>) from
<<= setup.SkillHelper.explainSkillWithAdditive(
_skill_base_15723[_focus_15723.key],
_skill_add_15723[_focus_15723.key],
_skill_mod_15723[_focus_15723.key],
_focus_15723)>>
to:
<br/>
<<for _iskill_15723, _skill_15723 range setup.skill>>
<<capture _ifocus_15723, _skill_15723>>
<<if $gUnitSkillFocusChangeDisplay == 'full'>>
[<<= setup.SkillHelper.explainSkillWithAdditive(
_skill_base_15723[_skill_15723.key],
_skill_add_15723[_skill_15723.key],
_skill_mod_15723[_focus_15723.key],
_skill_15723)>>
<<link _skill_15723.getName()>>
<<set _gUnit_skill_focus_target_15723.setSkillFocus(_ifocus_15723, _skill_15723)>>
<<focgoto>>
<</link>>
]
<<else>>
<<link _skill_15723.getImageRep()>>
<<set _gUnit_skill_focus_target_15723.setSkillFocus(_ifocus_15723, _skill_15723)>>
<<focgoto>>
<</link>>
<</if>>
<</capture>>
<</for>>
</p>
<</for>>
<<focreturn 'Done'>><<set $gMenuVisible = false>>
/* Assumes $gUnit_key is set */
<<set _unit = $unit[$gUnit_key]>>
Change <<rep _unit>>'s nickname to
<<textbox "_unit.nickname" _unit.getName() autofocus>>
<br/>
<<focreturn 'Done'>><<set $gMenuVisible = false>>
/* Assumes $gUnit_key is set */
<<set _gUnit = State.variables.unit[$gUnit_key]>>
Change
<<rep _gUnit >>'s titles.
<<message '(?)'>>
While a unit can have multiple titles, they can only have at most two active at any time.
These active titles will be the only titles that confer their benefits (e.g.,
skills).
The unit is still considered to have all the other titles --- they just won't affect gameplay.
<</message>>
<<unitcard _gUnit 1>>
<<set _last = $titlelist.getLastTitle(_gUnit)>>
<<if _last>>
Last obtained title:
<<message '(?)'>>
Last obtained title is always included as one of the unit's titles, regardless of whether
it is chosen below or not.
<</message>>
<<rep _last>>
<br/>
<br/>
<</if>>
<<for _title range $titlelist.getAssignedTitles(_gUnit, true)>>
<<rep _title>>
<<capture _title, _gUnit>>
<<message '(Change title)'>>
|
<<for _replace range $titlelist.getAllTitles(_gUnit)>>
<<if !$titlelist.getAssignedTitles(_gUnit, true).includes(_replace)>>
<<capture _gUnit, _title, _replace>>
<<rep _replace>>
<<link '(select)'>>
<<run $titlelist.unassignTitle(_gUnit, _title)>>
<<run $titlelist.assignTitle(_gUnit, _replace)>>
<<focgoto>>
<</link>>
|
<</capture>>
<</if>>
<</for>>
<</message>>
<</capture>>
<br/>
<</for>>
<<focreturn 'Done'>><h2>Select event to try</h2>
<<focmove '(Return)' 'SettingsMenu'>>
[[(Test All)|EventDebugAll]]
<br/>
<<set _events = setup.event>>
<<for _ieventt, _eventt range _events>>
<<capture _eventt>>
<<nameof _eventt >>
<<link '(debug this)' 'EventDebugChoose'>>
<<set $qDebugEventTemplate_key = _eventt.key>>
<</link>>
<br/>
<</capture>>
<</for>><<set _eventt = setup.event[$qDebugEventTemplate_key]>>
<<nameof _eventt>>
<br/>
<<link '(debug try)' 'EventDebugDo'>>
<<set $qDebugEventTemplate_key = _eventt.key>>
<</link>><<set _eventt = setup.event[$qDebugEventTemplate_key]>>
<<set _event = _eventt.debugMakeInstance()>>
<<back>>
<br/>
<<if $devtooltype>>
<<successtext 'The event you have made is now in the game.'>>
You can load your existing save file <<dangertext 'FROM THIS SCREEN'>>, if you want to try
playing with the event you just add in a real game.
<br/>
<</if>>
<<= _event.getName()>>:
<<capture _event>>
<div class='eventcard'>
<<questvarload _event>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _event.getEvent().getPassage()>>
<<questauthorcard _event.getEvent()>>
<</capture>>
</div>
<<run $eventpool._finalizeEvent(_event)>>
<</capture>><<set _events = setup.event>>
<<for _ieventt, _eventt range _events>>
<<set $qDebugEventTemplate_key = _eventt.key>>
<<nameof _eventt>>
<br/>
<<include 'EventDebugDo'>>
<<loadnotification>>
<br/>
<</for>><h2>Adjust your favor with other companies</h2>
<<focmove 'Done' 'SettingsMenu'>>
<<for _icompany, _company range $company>>
<<if _company != $company.player>>
<br/>
You have <<successtextlite $favor.getFavorDisplay(_company)>> favor with <<rep _company>>.
<<capture _company>>
<<link '(+1)'>>
<<run $favor.adjustFavor(_company, 10)>>
<<focgoto>>
<</link>>
<<link '(+5)'>>
<<run $favor.adjustFavor(_company, 50)>>
<<focgoto>>
<</link>>
<<link '(+20)'>>
<<run $favor.adjustFavor(_company, 200)>>
<<focgoto>>
<</link>>
<<link '(-1)'>>
<<run $favor.adjustFavor(_company, -10)>>
<<focgoto>>
<</link>>
<<link '(-5)'>>
<<run $favor.adjustFavor(_company, -50)>>
<<focgoto>>
<</link>>
<<link '(-20)'>>
<<run $favor.adjustFavor(_company, -200)>>
<<focgoto>>
<</link>>
<</capture>>
<</if>>
<</for>><h2>Adjust your ire with other companies</h2>
<<focmove 'Done' 'SettingsMenu'>>
<<for _icompany, _company range $company>>
<<if _company != $company.player>>
<br/>
You have <<dangertextlite $ire.getIre(_company)>> ire with <<rep _company>>.
<<capture _company>>
<<link '(+1)'>>
<<run $ire.adjustIre(_company, 1)>>
<<focgoto>>
<</link>>
<<link '(+5)'>>
<<run $ire.adjustIre(_company, 5)>>
<<focgoto>>
<</link>>
<<link '(+20)'>>
<<run $ire.adjustIre(_company, 20)>>
<<focgoto>>
<</link>>
<<link '(-1)'>>
<<run $ire.adjustIre(_company, -1)>>
<<focgoto>>
<</link>>
<<link '(-5)'>>
<<run $ire.adjustIre(_company, -5)>>
<<focgoto>>
<</link>>
<<link '(-20)'>>
<<run $ire.adjustIre(_company, -20)>>
<<focgoto>>
<</link>>
<</capture>>
<</if>>
<</for>><<focreturn 'Back'>>
<h2>Select questpool</h2>
<<for _ipool, _pool range setup.questpool>>
<<capture _pool>>
<<set _linktext = `${_pool.getName()}`>>
<<message _linktext>>
<<set _generatable = _pool._getAllCandidates()>>
<<run _generatable.sort((a, b) => a[0].getDifficulty().getLevel() - b[0].getDifficulty().getLevel())>>
<<for _ican, _can range _generatable>>
<br/>
<<= _can[1]>>: (<<= _can[0].getDifficulty().rep()>>) <<= _can[0].getName() >>
<</for>>
<</message>>
<</capture>>
<br/>
<</for>><h2>Select interaction to try</h2>
<<focmove '(Return)' 'SettingsMenu'>>
[[(Test all)|InteractionDebugAll]]
<br/>
<<set _interactions = setup.interaction>>
<<for _iinteractiont, _interactiont range _interactions>>
<<capture _interactiont>>
<<nameof _interactiont >>
<<link '(debug this)' 'InteractionDebugChoose'>>
<<set $qDebugInteractionTemplate_key = _interactiont.key>>
<</link>>
<br/>
<</capture>>
<</for>><<set _interactiont = setup.interaction[$qDebugInteractionTemplate_key]>>
<<nameof _interactiont>>
<br/>
<<link '(debug try)' 'InteractionDebugDo'>>
<<set $qDebugInteractionTemplate_key = _interactiont.key>>
<</link>><<set _interactiont = setup.interaction[$qDebugInteractionTemplate_key]>>
<<set _interaction = _interactiont.debugMakeInstance()>>
<<back>>
<br/>
<<if $devtooltype>>
<<successtext 'The interaction you have made is now in the game.'>>
You can load your existing save file <<dangertext 'FROM THIS SCREEN'>>, if you want to try
playing with the interaction you just add in a real game.
<br/>
<</if>>
<<= _interaction.getName()>> tested on <<= _interaction.getUnit().rep()>>.
You are <<= $unit.player.rep()>>.
<br/>
<<capture _interaction>>
<<questvarload _interaction>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _interaction.getInteraction().getPassage()>>
<<questauthorcard _interaction.getInteraction()>>
<<run _interaction.applyRewards()>>
<</capture>>
<</capture>><<set _interactions = setup.interaction>>
<<for _iinteractiont, _interactiont range _interactions>>
<<set $qDebugInteractionTemplate_key = _interactiont.key>>
<<nameof _interactiont >>
<br/>
<<include 'InteractionDebugDo'>>
<<loadnotification>>
<br/>
<</for>><h2>Select item to add to inventory</h2>
<<focmove 'Done' 'Inventory'>>
<<for _iitem, _item range setup.item>>
<br/>
<<capture _item>>
<<rep _item>>
<<link '(Add)'>>
<<run $inventory.addItem(_item)>>
<</link>>
<</capture>>
<</for>><h2>Select equipment to add to armory</h2>
<<focmove 'Done' 'Armory'>>
<<for _iequipment, _equipment range setup.equipment>>
<br/>
<<capture _equipment>>
<<rep _equipment>>
<<link '(Add)'>>
<<run $armory.addEquipment(_equipment)>>
<</link>>
<</capture>>
<</for>><h2>Select opportunity to try</h2>
<<focreturn '(Return)'>>
[[(Test All)|'OpportunityTestAll']]
<<include 'LoadDevWidgets'>>
<<devchooseopportunity 'OpportunityDebugChosen'>><<set $qDebugOpportunityTemplate_key= _opportunitychosen.key>>
<<goto 'OpportunityDebugChoose'>><<set _opportunityt = setup.opportunitytemplate[$qDebugOpportunityTemplate_key]>>
<<link '(Test All)' 'OpportunityTestAllOne'>>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<</link>>
<br/>
<<link '(make instance)' 'OpportunityList'>>
<<run setup.QuestPool.instantiateOpportunity(_opportunityt)>>
<</link>>
<br/>
<<message'(is the opportunity scout-able?)'>>
<<if $settings.isBanned(_opportunityt.getTags())>>
Opportunity contains some tag that is banned in the Settings.
<br/>
<</if>>
<<for _iprereq, _prereq range _opportunityt.getPrerequisites()>>
<<if !_prereq.isOk(_opportunityt)>>
<<dangertext 'Missing prerequisite'>>: <<= _prereq.explain(_opportunityt)>>
<br/>
<<else>>
Prerequisite satisfied: <<= _prereq.explain(_opportunityt)>>
<br/>
<</if>>
<</for>>
<<if _opportunityt.isCanGenerate()>>
<<successtext 'YES'>>
<<else>>
<<dangertext 'NO'>>
<</if>>
<</message>>
<br/>
<<message '(Test description)'>>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<<include 'OpportunityTestDescription'>>
<</message>>
<br/>
<<for _ioption, _option range _opportunityt.getOptions()>>
<<capture _ioption, _option>>
<<include _option[0] >>
<<link '(Debug this)' 'OpportunityTestOption'>>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<<set $gDebugOpportunityOption = _ioption>>
<</link>>
<br/>
<</capture>>
<</for>><<set _opportunitys = setup.opportunitytemplate>>
<<for _iopportunityt, _opportunityt range _opportunitys>>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<<include 'OpportunityTestAllOne'>>
<</for>><<back 'Return'>>
<<set _opportunityt = setup.opportunitytemplate[$qDebugOpportunityTemplate_key]>>
<h3><<nameof _opportunityt>></h3>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<<include 'OpportunityTestDescription'>>
<br/>
<<for _ioption, _option range _opportunityt.getOptions()>>
<h4>
<<include _option[0] >>
</h4>
<<set $qDebugOpportunityTemplate_key = _opportunityt.key>>
<<set $gDebugOpportunityOption = _ioption>>
<<include 'OpportunityTestOption'>>
<br/>
<</for>><<back 'Return'>>
<<set _opportunityt = setup.opportunitytemplate[$qDebugOpportunityTemplate_key]>>
<<set _option = $gDebugOpportunityOption>>
<<set _instance = _opportunityt.debugMakeInstance()>>
<<run $opportunitylist.addOpportunity(_instance)>>
<<set _passage = _instance.selectOption(_option)>>
<<if _passage>>
<div class='eventcard'>
<<questvarload _instance>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _passage>>
<<questauthorcard _instance.getTemplate()>>
<</capture>>
</div>
<</if>>
<<loadnotification>><<set _opportunityt = setup.opportunitytemplate[$qDebugOpportunityTemplate_key]>>
<<set _instance = _opportunityt.debugMakeInstance()>>
<div class='companycard'>
<<questvarload _instance>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _opportunityt.getDescriptionPassage()>>
<<questauthorcard _opportunityt>>
<</capture>>
</div><h2>Select quest to try</h2>
<<focreturn '(Return)'>>
[[(Test All)|'QuestDebugTestAll']]
<<include 'LoadDevWidgets'>>
<<devchoosequest 'QuestDebugChosen'>><<set $qDebugQuestTemplate_key= _questchosen.key>>
<<goto 'QuestDebugChoose'>><<set _quests = setup.questtemplate>>
<<for _iquestt, _questt range _quests>>
<<for _iresult, _result range ['crit', 'success', 'failure', 'disaster']>>
<h3><<nameof _questt>></h3>
<<set _quest = _questt.debugMakeFilledInstance(_result)>>
<<set _outcome_passage = _quest.getOutcomeObject()[0]>>
<<questvarload _quest>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _questt.getDescriptionPassage()>>
<<questauthorcard _questt>>
<</capture>>
<<questvarload _quest>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _outcome_passage>>
<</capture>>
<<run _quest.finalize()>>
<</for>>
<</for>><<set _questt = setup.questtemplate[$qDebugQuestTemplate_key]>>
<<nameof _questt>>
<br/>
<<link '(CLICK HERE TO TEST YOUR QUEST RESULTS)' 'QuestDebugAll'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>>
<br/>
<<link '(make instance)'>>
<<run setup.QuestPool.instantiateQuest(_questt)>>
<<focgoto 'QuestHub'>>
<</link>>
<br/>
<<message'(is the quest scout-able?)'>>
<<if $settings.isBanned(_questt.getTags())>>
Quest contains some tag that is banned in the Settings.
<br/>
<</if>>
<<for _iprereq, _prereq range _questt.getPrerequisites()>>
<<if !_prereq.isOk(_questt)>>
<<dangertext 'Missing prerequisite'>>: <<= _prereq.explain(_questt)>>
<br/>
<<else>>
Prerequisite satisfied: <<= _prereq.explain(_questt)>>
<br/>
<</if>>
<</for>>
<<if _questt.isCanGenerate()>>
<<successtext 'YES'>>
<<else>>
<<dangertext 'NO'>>
<</if>>
<</message>>
<br/>
<<link '(FORCE make instance)'>>
<<set _quest = _questt.debugMakeInstance()>>
<<run $company.player.addQuest(_quest)>>
<<focgoto 'QuestHub'>>
<</link>>
<br/>
<<link '(debug description)' 'QuestDebugDescDo'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>>
<br/>
<<link '(debug crit result)' 'QuestDebugDo'>>
<<set $qDebugQuestResult = 'crit'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>>
<br/>
<<link '(debug success result)' 'QuestDebugDo'>>
<<set $qDebugQuestResult = 'success'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>>
<br/>
<<link '(debug failure result)' 'QuestDebugDo'>>
<<set $qDebugQuestResult = 'failure'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>>
<br/>
<<link '(debug disaster result)' 'QuestDebugDo'>>
<<set $qDebugQuestResult = 'disaster'>>
<<set $qDebugQuestTemplate_key = _questt.key>>
<</link>><<set _questt = setup.questtemplate[$qDebugQuestTemplate_key]>>
<<set _quest = _questt.debugMakeFilledInstance($qDebugQuestResult)>>
<h2><<nameof _quest>> has finished</h2>
<<set _classname = `questcard${_quest.outcome}`>>
<<set _cardclass = _quest.getTemplate().getCardClass()>>
<<run _classname += ' ' + _cardclass + ' card'>>
<div @class='_classname'>
<<set _outcome_passage = _quest.getOutcomeObject()[0]>>
<<questvarload _quest>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _outcome_passage>>
<<questauthorcard _questt>>
<</capture>>
</div>
<<if _quest.outcome == 'crit'>>
<<successtext 'Critical Success'>>
<<elseif _quest.outcome == 'success'>>
<<successtextlite 'Success'>>
<<elseif _quest.outcome == 'failure'>>
<<dangertextlite 'Failure'>>
<<elseif _quest.outcome == 'disaster'>>
<<dangertext 'Critical Failure'>>
<</if>>
by <<=_quest.getTeam().name>>
<<run _quest.finalize()>><<back>>
<br/>
<<if $devtooltype>>
<<successtext 'The quest you have made is now in the game.'>>
You can load your existing save file <<dangertext 'FROM THIS SCREEN'>>, if you want to try
playing with the quest you just add in a real game. (It will still need to be scouted first though!)
<br/>
<</if>>
<<include QuestDebugDescDo>>
<<loadnotification>>
<<for _iresult, _result range ['crit', 'success', 'failure', 'disaster']>>
<<set $qDebugQuestResult = _result>>
<<include QuestDebugDo>>
<<loadnotification>>
<</for>><<set _questt = setup.questtemplate[$qDebugQuestTemplate_key]>>
<<set _quest = _questt.debugMakeFilledInstance('success')>>
<h2><<nameof _quest>></h2>
<<set _classname = `questcard`>>
<div @class='_classname'>
<<questvarload _quest>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _questt.getDescriptionPassage()>>
<<questauthorcard _questt>>
<</capture>>
</div><div>
Your exported save file is below. Copy it and save it somewhere.
<<focmove "(Click here to import a save)" "ImportSaveText">>
<<focmove "(Return)" "SettingsMenu">>
</div>
<textarea autofocus="autofocus" onfocus="this.select()">
<<printtext setup.SaveUtil.getSaveAsText()>>
</textarea><div>
Copy your <<focmove "exported" "ExportSaveText">> save into the text box below,
and then click
<<focbutton "Load Save">>
<<run setup.SaveUtil.importSaveFromText(_importedsave, "")>>
<</focbutton>>.
<<focmove "(Cancel)" "SettingsMenu">>
</div>
<<textarea "_importedsave" "">><<checkbox '$settings.autosave' false true autocheck>> Autosave
<<message '(?)'>>
Will <<dangertext 'override'>> the two bottom saves without warning.
Slightly slows down the END WEEK processing time.
<</message>>
/* Events are always on now. This is because they will affect balance */
/*
<br/>
<<checkbox '$settings.events' false true autocheck>>
Random events <<message '(?)'>>
If checked, then RANDOM events are enabled.
Scheduled events will always appear.
(Warning: there are <<dangertext 'very few'>> events right now, so it is reccommended to turn this off.)
<</message>>
*/
/*
<br/>
<<checkbox '$settings.showauthors' false true autocheck>> Show authors
<<message '(?)'>>
If checked, then quest, event, and opportunity authors
are displayed.
<</message>>
*/
<br/>
<<checkbox '$settings.hidequestdescription' false true autocheck>> Summarize quest result descriptions
<<message '(?)'>>
If checked, then quest
results <<successtextlite 'descriptions'>> are summarized, and must be toggled to be viewed.
<</message>>
<br/>
<<checkbox '$settings.hidequestoutcome' false true autocheck>> Summarize quest/event outcomes
<<message '(?)'>>
If checked, then quest and event
results <<successtextlite 'in-game outcomes'>> are summarized, and must be toggled to be viewed.
<</message>>
<br/>
<<checkbox '$settings.hideeventdescription' false true autocheck>> Summarize events
<<message '(?)'>>
If checked, then event text are summarized and must be toggled to view
(Warning: there are VERY FEW events right now, so it is reccommended to turn this off.)
<</message>>
<br/>
<<checkbox '$settings.summarizeunitskills' false true autocheck>> Summarize unit skills
<<message '(?)'>>
If checked, then unit skills are displayed as their total sum,
instead of xx + xx.
E.g., instead of 11 <<successtextlite '+ 4'>> <<rep setup.skill.combat>>,
it will display as
<span data-tooltip="11 + 4"><<successtextlite '15'>></span> <<rep setup.skill.combat>>.
(You can hover over it to see the "11 + 4").
<</message>>
<br/>
<<checkbox '$settings.autoassignbreakteams' false true autocheck>> Auto assign break normal teams
<<message '(?)'>>
If checked, then using Adhoc auto assign on quests will pick units from other teams,
effectively breaking them down.
<</message>>
<br/>
<<checkbox '$settings.hideskintraits' false true autocheck>> Hide skin traits
<<message '(?)'>>
If checked, skin traits such as
<<rep setup.trait.body_werewolf>> or <<rep setup.trait.ears_elf>> are hidden
in unit cards.
<</message>>
<br/>
<<checkbox '$settings.animatedtooltips' false true autocheck>> Animated tooltips
<<message '(?)'>>
If checked, tooltips will fade in, and appear after some small delay.
If unchecked, tooltips will instantly show up, with no delay.
<</message>>
<br/>
<<checkbox '$settings.unitactionautoassign' false true autocheck>> Auto-assign units for unit actions
<<message '(?)'>>
If checked, quests generated from unit action will be auto-assigned a team when you select it.
<</message>>
<br/>
<<checkbox '$settings.challengemode' false true autocheck>> Challenge mode
<<message '(?)'>>
If checked, slavers are paid ten times their normal wages.
<<dangertext 'NOT RECOMMENDED!'>>
<</message>>
<div>
<<set _options = {}>>
<<for _key, _value range setup.Settings.LOVERS_RESTRICTIONS>>
<<set _options[_value] = _key>>
<</for>>
What pair of units can become lovers? Click to change:
<<cycle '$settings.loversrestriction' autoselect>>
<<optionsfrom _options>>
<</cycle>>
<<message '(?)'>>
This will determine what kind of pairs of unit can form love relationships between them.
<</message>>
</div><h2>Save Game / Settings</h2>
<<include 'SettingsBase'>>
<<set _preferenceoption = {}>>
<<for _keypref, _pref range setup.SETTINGS_GENDER_PREFERENCE>>
<<set _preferenceoption[_pref.name] = _keypref>>
<</for>>
<p>
Gender preferences (click to change):
<br/>
Slave: <<cycle '$settings.gender_preference.slave' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
<br/>
Slaver: <<cycle '$settings.gender_preference.slaver' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
<br/>
Other: <<cycle '$settings.other_gender_preference' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</p>
<div><<focmove "Set Content Filter" "BannedTagMenu">></div>
<div><<focmove "Edit Image Packs" "ImagePacksMenu">></div>
<div>
<<focmove "Export Save" "ExportSaveText">> /
<<focmove "Import Save" "ImportSaveText">>
<<message "(?)">>
This menu allows you to export and import your save as a plain text.
This is useful for mobile users whose devices does not support the "Save to Disk" and
"Load to Disk" options in the game, for whom these buttons will not be visible.
<</message>>
</div>
<br/>
<<checkbox '$gDebug' false true autocheck>> Debug Mode
<<if $gDebug>>
<br/>
<<focmove '(Test quests)' 'QuestDebug'>>
<<focmove '(See scoutable quests)' 'GeneratableDebug'>>
<br/>
<<focmove '(Test opportunities)' 'OpportunityDebug'>>
<br/>
<<focmove '(Test interactions)' 'InteractionDebug'>>
<br/>
<<focmove '(Test events)' 'EventDebug'>>
<br/>
<<focmove '(Test: get item)' 'ItemDebug'>>
<br/>
<<focmove '(Test: get equipment)' 'EquipmentDebug'>>
<br/>
<<link '(Test: get 100,000 money)'>>
<<run $company.player.addMoney(100000)>>
<<focgoto>>
<</link>>
<br/>
<<focmove '(Test: increase / decrease favor)' 'FavorDebug'>>
<br/>
<<focmove '(Test: increase / decrease ire)' 'IreDebug'>>
<br/>
<<focmove '(Test: adjust unit)' 'UnitDebug'>>
<</if>><h2>Content Filter</h2>
You can turn off content here, which means that the associated quest/opportunities will
not be generated. Check all the tags that you want to <<dangertext 'ban'>>:
<<include 'ShowBannedTags'>>
<div>
<<return 'Done'>>
</div><<for _itag range setup.TagHelper.getAllTagsOfType('quest', 'fetish')>>
<<capture _itag>>
<div>
<<set _varname = `$settings.bannedtags.${_itag}`>>
<<checkbox _varname false true autocheck>> <<= setup.TagHelper.tagRepLong('quest', _itag) >>
</div>
<</capture>>
<</for>><h2>Image Packs</h2>
<p><b>Note:</b> image pack settings are shared by all saves</p>
<<if setup.globalsettings.disabledefaultimagepack>>
The default portrait pack is <<dangertext 'disabled'>> right now.
<<link '(enable the default portrait pack)'>>
<<set setup.globalsettings.disabledefaultimagepack = false>>
<<await setup.UnitImage.initializeImageTable()>>
<<focgoto>>
<</await>>
<</link>>
<<else>>
The default portrait pack is <<successtext 'enabled'>> right now.
<<link '(disable the default portrait pack)'>>
<<set setup.globalsettings.disabledefaultimagepack = true>>
<<await setup.UnitImage.initializeImageTable()>>
<<focgoto>>
<</await>>
<</link>>
<</if>>
<p>
<<message '(add new image pack)' '(cancel)'>>
<div>
<p>
Enter the image pack name or url
<<message '(?)'>>
If the image pack is not a URL, then put the image pack in the "imagepack" directory. For example, you it should look like "imagepack/myimagepack". Then put "myimagepack" here. If it's a URL, then just put the entire URL.
As an example, try putting "example" below to load the example imagepack, which should be located at "imagepack/example" by default. [[How to create a new image pack|https://gitgud.io/darkofocdarko/foc/-/blob/master/docs/images.md#creating-your-own-image-pack]]
<</message>>
</p>
<p>
<<textbox '_newimagepack' "">>
</p>
<p>
<<link '(add this image pack)'>>
<<if _newimagepack.trim()>>
<<run setup.globalsettings.imagepacks = [ ...(setup.globalsettings.imagepacks || []), _newimagepack.trim() ]>>
<<await setup.UnitImage.initializeImageTable()>>
<<focgoto>>
<</await>>
<</if>>
<</link>>
</p>
<hr/>
</div>
<</message>>
<<if setup.FileUtil.supportsDirectoryPicker()>>
<<message '(auto-install packs in game folder)'>>
<<await setup.FileUtil.autodetectImagePacks()>>
<<await setup.UnitImage.initializeImageTable()>>
<<focgoto>>
<</await>>
<</await>>
<</message>>
<</if>>
</p>
<<for _imagepack range (setup.globalsettings.imagepacks || [])>>
<<capture _imagepack>>
<<set _meta = setup.UnitImage.getImagePackMetadata(_imagepack)>>
<div class="slavecard">
<div style="float: right">
<<link '(remove)'>>
<<run setup.globalsettings.imagepacks = (setup.globalsettings.imagepacks || []).filter(a => a !== _imagepack)>>
<<await setup.UnitImage.initializeImageTable()>>
<<focgoto>>
<</await>>
<</link>>
</div>
<div>
<<if _meta>>
<b><<=_meta.title || 'Unnamed pack'>></b> by <i><<=_meta.author || 'unknown author'>></i> (<<=_meta.numimages>> image<<=_meta.numimages === 1 ? '' : 's'>>)
<<else>>
<span style="color: red">Unable to load image pack</span>
<</if>>
</div>
<div>
<small>
Location:
<span style="color: darkkhaki"><<= setup.isAbsoluteUrl(_imagepack) ? _imagepack : setup.UnitImage.IMAGEPACK_DIR_NAME + "/" + _imagepack>></span>
</small>
</div>
<<if _meta>>
<p><<=_meta.description || ''>></p>
<</if>>
</div>
<</capture>>
<</for>>
<<if !(setup.globalsettings.imagepacks || []).length>>
<small> No packs installed</small>
<</if>>
<p>
<<focreturn 'Done'>>
</p><h2>Choose unit to debug</h2>
<<focmove 'Cancel' 'SettingsMenu'>>
<<focwidget 'rostershowaction'>>
<<link '(Select this unit)'>>
<<set $gUnit_key = $args[0].key>>
<<focgoto 'UnitDebugDo'>>
<</link>>
<</focwidget>>
<<rostershow $company.player.getUnits()>>/* NOTE: this can be called from both content creator and main mode */
<<set _unit = $unit[$gUnit_key]>>
Change <<rep _unit>>.
<<if $devtooltype>>
<<link '(Done)'>>
<<devgotoreturn>>
<</link>>
<<else>>
<<focreturn '(Done)'>>
<</if>>
<div>
<<message '(Injure by one week)'>>
<<run $hospital.injureUnit(_unit, 1)>>
<<focgoto>>
<</message>>
<<message '(Heal by one week)'>>
<<run $hospital.healUnit(_unit, 1)>>
<<focgoto>>
<</message>>
<<message '(Corrupt)'>>
<<run _unit.corrupt()>>
<<focgoto>>
<</message>>
<<message '(Purify)'>>
<<run _unit.purify()>>
<<focgoto>>
<</message>>
</div>
<br/>
<div>
<<capture _unit>>
<<message '(Add title)'>>
<<for _title range setup.title>>
<<rep _title>>
<<capture _title>>
<<link '(select this)'>>
<<run $titlelist.addTitle(_unit, _title)>>
<<focgoto>>
<</link>>
<</capture>>
<br/>
<</for>>
<</message>>
<<message '(Remove title)'>>
<<for _title range $titlelist.getAllTitles(_unit)>>
<<rep _title>>
<<capture _title>>
<<link '(select this)'>>
<<run $titlelist.removeTitle(_unit, _title)>>
<<focgoto>>
<</link>>
<</capture>>
<</for>>
<</message>>
<</capture>>
</div>
<br/>
<div>
<<message '(Set skills)'>>
<<for _iskill, _skill range setup.skill>>
<<set _var = `_unit.skills[${_iskill}]`>>
<<capture _iskill>>
<<rep _skill>>:
<<numberbox _var _unit.skills[_iskill]>>
<br/>
<</capture>>
<</for>>
<</message>>
<<message '(Set level)'>>
<<numberbox "_unit.level" _unit.level>>
<</message>>
<<message '(Set name)'>>
<<textbox "_first_name" _unit.first_name>>
<<textbox "_surname" _unit.surname>>
<<link '(Done)'>>
<<run _unit.setName(_first_name, _surname)>>
<<focgoto>>
<</link>>
<</message>>
</div>
<br/>
Remove trait: |
<br/>
<<for _itrait, _trait range _unit.getTraits(true)>>
<<rep _trait>>
<<capture _trait>>
<<link '(X)'>>
<<run _unit.removeTraitExact(_trait)>>
<<focgoto>>
<</link>>
<</capture>>
|
<</for>>
<br/>
<br/>
Add trait:
<br/>
|
<<set _exists = _unit.getTraits(true)>>
<<for _itrait, _trait range setup.trait>>
<<rep _trait>>
<<if _exists.includes(_trait)>>
(+)
<<else>>
<<capture _trait>>
<<link '(+)'>>
<<run _unit.addTrait(_trait, null, true)>>
<<focgoto>>
<</link>>
<</capture>>
<</if>>
|
<</for>>
<br/>
<br/><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.missioncontrol)>>
<<set _teams = $company.player.getTeams()>>
<<if _room>>
<<set _lockers = _room.getLevel() - 1>>
<<else>>
<<set _lockers = 0>>
<</if>>
<<set _rescuer = $dutylist.getDuty('DutyRescuer')>>
<<set _insurer = $dutylist.getDuty('DutyInsurer')>>
<h2><<= _room.getTitleRep()>></h2>
You enter the mission control room, where you can manage your teams.
<<if _rescuer>>
<<set _unit = _rescuer.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You noticed your <<rep _rescuer>> <<rep _unit>> sitting on
<<their _unit>> desk busy looking for your lost slavers,
<<= setup.Text.Duty.competence(_rescuer)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
A room has been set aside for your <<rep _rescuer>> to work,
but it's empty now.
<</if>>
<</if>>
<<if _insurer>>
<<set _unit = _insurer.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You can see numerous contingency plans
scribbled all over your
<<rep _insurer>> <<rep _unit>>'s desk.
The <<man _unit>> <<themself _unit>> is nowhere to be seen however,
probably busy trying to secure all the necessary precautions,
<<= setup.Text.Duty.competence(_insurer)>>.
<<elseif _unit>>
Your <<repfull _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
The workstation for your <<rep _insurer>> is currently unoccupied.
<</if>>
<</if>>
<<if _lockers>>
The mission control room has been upgraded <<= _lockers>> times.
<</if>>
Currently, you have
<<= _teams.filter(team => !team.isAdhoc()).length>> permanent teams and
<<= _teams.filter(team => team.isAdhoc()).length>> ad-hoc teams.
You can have at most
<<successtext $company.player.getMaxTeams()>> permanent teams,
and you can send at most
<<successtext $company.player.getMaxActiveTeams()>> different teams concurrently on a quest.
If you want to increase these,
you can upgrade your <<rep _room>>.
You proceed to sit on a desk and manage your teams.
<<message '(Help)'>>
<div class='helpcard'>
<div>
<b>Teams</b> is an optional feature that can be used to arrange your units.
<br/>
<br/>
You can arrange your units into teams here. If you do, then in the quest menu, you can
have a preview on the success chances of each team when assigned to the quests.
This way, you can make certain group of units to always go together in a quest,
which can make them gain friendship with another faster than otherwise.
<br/>
<br/>
The downside is that teams reduces the flexibility you can have when assigning units to quests.
Ultimately whether or not you use teams is up to your preferred playing style.
</div>
</div>
<</message>>
<br/>
<<if $company.player.isCanAddTeam()>>
<<message '(Add new team)'>>
Give the team a name:
<<message '(?)'>>
The name can be changed later on if you change your mind.
<</message>>
<<textbox "_newteamname" "Team Name">>
<<focbutton 'Add'>>
<<set _team = new setup.Team(_newteamname, false)>>
<<run $company.player.addTeam(_team)>>
<<focgoto>>
<</focbutton>>
<</message>>
<br/>
<</if>>
<<for _iteam, _team range State.variables.company.player.getTeams()>>
<<capture _team>>
<<teamcard _team>>
<</capture>>
<</for>><<set $gMenuVisible = false>>
<<set $gTeamSelected = State.variables.team[$gTeamSelected_key]>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slaver, no_team: true, home: true})>>
Choose a slaver to be added to <<= $gTeamSelected.rep()>>
<<selectunit _unitlist 'TeamAddUnitDo'>><<set $gMenuVisible = false>>
<<set $gTeamSelected = State.variables.team[$gTeamSelected_key]>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slave, no_team: true, home: true})>>
Choose slave to be added to <<= $gTeamSelected.rep()>>
<<selectunit _unitlist 'TeamAddUnitDo'>><<set $gTeamSelected = State.variables.team[$gTeamSelected_key]>>
<<set _unit = $unit[$gUnitSelected_key]>>
<<run $gTeamSelected.addUnit(_unit)>>
<<run setup.notify(`${_unit.rep()} joins ${$gTeamSelected.rep()}.`)>>
<<focgoto 'TeamManagement'>><<set $gMenuVisible = false>>
/* Assumes $gTeam_key is set */
<<set $gTeam = State.variables.team[$gTeam_key]>>
Change <<=$gTeam.name>>'s name to <<textbox "$gTeam.name" $gTeam.name autofocus>>
<<focreturn Done>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.trainingchamber)>>
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slave, available: true})>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the slave training chamber.
Looking at all the surrounding devices, you wonder if any particularly
naughty slave require special treatment today.
</p>
<<focwidget 'rostershowaction'>>
<<focbutton 'Train' 'TrainingChoose'>>
<<set $gUnitSelected_key = $args[0].key>>
<</focbutton>>
<</focwidget>>
<<rostershow _unitlist>><<set $gMenuVisible = false>>
<<set _unit = $unit[$gUnitSelected_key]>>
What would you like to do for <<rep _unit>>?
<<unitactionlist setup.unitaction _unit>><<set _unit = $unit[$gUnitSelected_key]>>
<<set _unittraining = $gTrainingSelected>>
<<unset $gTrainingSelected>>
<<unset $gUnitSelected_key>>
<<run _unittraining.generateQuest(_unit)>>
<<focgoto 'QuestHub'>><<set $gMenuVisible = false>>
<<if $calendar.getWeek() == 1 && !$gDebug>>
<<if $company.player.isCanDeployTeam()>>
<<run setup.notify(`You should assign a team for the Establish Base quest.`)>>
<<include "QuestHub">>
<<else>>
<<include 'WeekendCleanup'>>
<</if>>
<<elseif $calendar.getWeek() == 2>>
<<if !$fort.player.isHasBuilding(setup.buildingtemplate.scouthut)>>
<<set _text = `<<dangertext 'You must'>> build the <<rep setup.buildingtemplate.scouthut>> by the second week for continuing.`>>
<<run setup.notify(_text)>>
<<include "QuestHub">>
<<else>>
<<include 'WeekendCleanup'>>
<</if>>
<<else>>
<<include 'WeekendCleanup'>>
<</if>><<set $gWeekendNotifications = []>>
<<include 'DoBanters'>>
<<include 'PayWages'>>
<<include 'AdvanceQuests'>>
<<include 'AdvanceOthers'>>
<br/>
<<run $gWeekendNotifications = $gWeekendNotifications.concat($notification.popAll())>>
<<include 'FinishQuests'>><<for _imarket, _market range $market>>
<<run _market.advanceWeek()>>
<</for>>
<<run $slaveorderlist.advanceWeek() >>
<<run $contactlist.advanceWeek() >>
<<run $eventpool.advanceWeek() >>
<<run $opportunitylist.advanceWeek() >>
<<run setup.Interaction.advanceWeek()>>
<<run $dutylist.advanceWeek()>>
<<run $leave.advanceWeek()>>
<<run $hospital.advanceWeek() >>
<<run $trauma.advanceWeek()>>
<<run $favor.advanceWeek()>><<set _totalwage = State.variables.company.player.getTotalWages()>>
<<run State.variables.company.player.substractMoney(_totalwage)>>
Paid <<moneyloss _totalwage>> in wages.<<include 'ExpireQuests'>>
<<run $questgen.generate()>>
<<run $varstore.advanceWeek()>>
<<run $calendar.advanceWeek()>>
<<run $unitimage.advanceWeek()>>
/* Alchemist shop potions */
<<run setup.MarketItem.advanceWeek()>>
<<run $opportunitylist.autoAnswer()>>
<<run $gWeekendNotifications = $gWeekendNotifications.concat($notification.popAll())>>
<<include "AutoSave">><<set _opportunities = $opportunitylist.getOpportunities()>>
<<if $fort.player.isHasBuilding(setup.buildingtemplate.mailroom) && _opportunities.length>>
<<set $gNextpassage = "OpportunityList">>
<<else>>
<<set $gNextpassage = "QuestHub">>
<</if>>
<<include 'ReadyNextWeek'>><<set $gPassage = 'ReadyNextWeekPastSave'>>
<<if $settings.autosave>>
<<set _companyname = $company.player.getName()>>
<<set _week = $calendar.getWeek()>>
<<run Save.slots.save(6 + (_week % 2), `Autosave Wk ${_week}: ${_companyname}`)>>
<</if>>
<<include 'ReadyNextWeekPastSave'>><br/>
<span id='continuebtn'>
<<focmove 'Continue [Space]' $gNextpassage>>
</span>
<<if $gWeekendNotifications>>
<<notificationscard $gWeekendNotifications>>
<<unset $gWeekendNotifications>>
<</if>><<set _banters = []>>
<<for _iunit, _unit range $company.player.getUnits({job: setup.job.slaver})>>
<<run _banters.push(setup.BanterHelper.doBanter(_unit))>>
<</for>>
<<if $fort.player.isHasBuilding(setup.buildingtemplate.moraleoffice)>>
<<refreshable id="endweek-banters">>
<<set _linktext = setup.globalsettings.endweek_hide_banters ? 'View Banters' : 'Hide Banters'>>
<<link _linktext>>
<<set setup.globalsettings.endweek_hide_banters = !setup.globalsettings.endweek_hide_banters>>
<<refreshable-refresh '#endweek-banters'>>
<</link>>
<<if !setup.globalsettings.endweek_hide_banters>>
<<for _ibanter, _banter range _banters>>
<<if _banter>>
<div>
<<bantercard _banter>>
</div>
<</if>>
<</for>>
<</if>>
<</refreshable>>
<br/>
<</if>>
<<run $friendship.advanceWeek()>><<set _ievent = 1>>
<<set _event = $eventpool.getEventInstance()>>
<<for _event>>
An event occured: <<nameof _event>>
<<capture _event>>
<<set _id = `diveventid_${_ievent}`>>
<<set _ievent = _ievent + 1>>
<<set _selector = `#${_id}`>>
<<capture _selector>>
<<link '(full event results)'>>
<<toggleclass _selector 'hiddendiv'>>
<</link>>
<</capture>>
<<if $settings.hideeventdescription>>
<<set _classname = 'hiddendiv eventcard'>>
<<else>>
<<set _classname = 'eventcard'>>
<</if>>
<div @id="_id" @class='_classname'>
<<questvarload _event>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _event.getEvent().getPassage()>>
<</capture>>
<<run $eventpool._finalizeEvent(_event)>>
<<run _notifs = $notification.popAll()>>
<<run $gWeekendNotifications = $gWeekendNotifications.concat(_notifs)>>
<<if _notifs.length>>
<<if $settings.hidequestoutcome>>
<<capture _notifs>>
<<message '(Outcomes)'>>
<<notificationscard _notifs>>
<</message>>
<</capture>>
<<else>>
<<notificationscard _notifs>>
<</if>>
<</if>>
<<questauthorcard _event.getEvent()>>
</div>
<</capture>>
<br/>
<<set _event = $eventpool.getEventInstance()>>
<</for>>
<<include 'PrepareNextWeek'>><<for _iquest, _quest range State.variables.company.player.getQuests()>>
<<run _quest.advanceQuestOneWeek()>>
<</for>><<set _quest = State.variables.company.player.getFinishedQuestIfAny()>>
<<if _quest>>
<<run _quest.rollOutcome()>>
<<= _quest.getTemplate().getDifficulty().rep()>>
<<nameof _quest>>:
<<if _quest.outcome == 'crit'>>
<<successtext 'Critical Success'>>
<<elseif _quest.outcome == 'success'>>
<<successtextlite 'Success'>>
<<elseif _quest.outcome == 'failure'>>
<<dangertextlite 'Failure'>>
<<message '(?)'>>
Unlike most other games, Failure in this game can be beneficial.
Your slavers learn much better from failures, and as a result they gain
a large amount of experience from failures, which can help them level up faster.
<</message>>
<<elseif _quest.outcome == 'disaster'>>
<<dangertext 'Critical Failure'>>
<<message '(?)'>>
While disaster usually entails some bad consequences, it also have
its benefits.
Your slavers learn a huge lot from life-threatening situations,
and as a result they gain a massive amount of experience from disasters.
What does not kill you make you stronger!
<</message>>
<</if>>
by <<=_quest.getTeam().rep()>>
<<set _outcome_passage = _quest.getOutcomeObject()[0]>>
<<set _id = `divid_${_quest.key}`>>
<<set _selector = `#${_id}`>>
<<capture _selector>>
<<link '(full quest results)'>>
<<toggleclass _selector 'hiddendiv'>>
<</link>>
<</capture>>
<<if $settings.hidequestdescription>>
<<set _classname = `hiddendiv questcard${_quest.outcome}`>>
<<else>>
<<set _classname = `questcard${_quest.outcome}`>>
<</if>>
<<set _cardclass = _quest.getTemplate().getCardClass()>>
<<run _classname += ' ' + _cardclass + ' card'>>
<div @id="_id" @class='_classname'>
<<questvarload _quest>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _outcome_passage>>
<</capture>>
<<run _quest.finalize()>>
<<run _notifs = $notification.popAll()>>
<<run $gWeekendNotifications = $gWeekendNotifications.concat(_notifs)>>
<<if _notifs.length>>
<<if $settings.hidequestoutcome>>
<<capture _notifs>>
<<message '(Outcomes)'>>
<<notificationscard _notifs>>
<</message>>
<</capture>>
<<else>>
<<notificationscard _notifs>>
<</if>>
<</if>>
<<questauthorcard _quest.getTemplate()>>
</div>
<br/>
<<include 'FinishQuests'>>
<<else>>
<<include 'DoEvents'>>
<</if>><<set _expired = $company.player.expireQuests()>>
<<if _expired.length>>
<<set _text = `${_expired.length} quests`>>
<<capture _expired>>
<<message _text>>
<<for _iexpire, _expire range _expired>>
Quest <<rep _expire>> expired.
<br/>
<</for>>
<</message>>
<</capture>>
<<dangertextlite 'expired'>>...
<</if>><<set setup.lore = []>>
<<set _passages = Story.lookup('tags', 'lore')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<run new setup.Lore(
'concept_mist', /* key */
'The Mist', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The mortal plane is not the only plane in existence -- many other planes exist,
with wondrous creatures living inside them.
While it is very rare, beings can often be found transported through the many planes
through temporary gateways connecting these worlds.
Among these gateways, one is always shaped as a dark purlish mist, which common people
tend to simply call "The Mist".
It is said that The Mist connects our plane to the demon plane, allowing demons to
occassionally cross to our plane.
</p>
<p>
While The Mist very rarely forms in the mortal plane, it is said that The Mist
is concentrated on some parts of the <<lore region_desert>>...
</p><<run new setup.Lore(
'continent_main', /* key */
'Mestia', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The continent where your fort is located at. Its central location hosts
many different biomes, from cold tundras on the north, scorching deserts to the east,
and dense forests to the west.
</p><<run new setup.Lore(
'location_fort', /* key */
'Your Fort', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
Your home.
</p><<run new setup.Lore(
'location_lucgate', /* key */
'City of Lucgate', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
The City of Lucgate is the capital city of <<rep $company.humankingdom>>,
and the largest city in <<lore continent_main>>.
</p><<run new setup.Lore(
'location_qarma', /* key */
'City of Qarma', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
The largest city in the eastern deserts, many call this dusty place a home.
Every since the <<rep $company.humankingdom>> banned slavery, the city economy
has boomed with the influx of slaves coming from all around the place.
</p><<run new setup.Lore(
'location_npc', /* key */
'Neko Port City', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
The Neko Port City, often abbreviated as NPC, is the largest settlement in the western forests.
As its name suggest, it is a large fort city in the <<lore location_pawninsula>>,
and many traders call this port a home.
</p><<run new setup.Lore(
'location_pawninsula', /* key */
'Pawninsula', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
A small peninsula located on the western <<lore continent_main>>.
The <<lore location_npc>> is located here.
</p><<run new setup.Lore(
'magic_water', /* key */
'Magic: Water', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_water>> water magic governs all things wet and cold.
Beginners are capable of forming water as well as ice by condensing the surrounding vapor in
the air.
While
masters of this craft <<rep setup.trait.magic_water_master>> are capable of basically the same
set of abilities, they are able to use it much more creatively.
These masters understand that flesh consists mostly of water, and they can use their water
mastery to bend them at will, reshaping flesh to whatever form they can imagine.
</p>
<p>
If one were to look for masters of this magic, a good advise would be to look to the north.
The people living in the <<lore region_vale>> are well-used to the cold weather, which gives
them great affinity for this domain of magic.
Be it within the <<rep setup.trait.race_humanvale>> villages or
the <<rep setup.trait.race_werewolf>> encampments, you are bound to find one capable of bending
water to their will.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_fire>>.
</p><<run new setup.Lore(
'magic_fire', /* key */
'Magic: Fire', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_fire>> fire magic governs heat and explosions.
Practitioners of this craft is able to conjure from the smallest flickers of flames into large fireballs
capable of laying waste anything in its path.
But these practitioners are not called masters until they are able to form a different, purer
type of flame.
Those gifted in <<rep setup.trait.magic_fire_master>> is able to conjure purifying flames,
which can negate and counteract the demonic corruptions plaguing the land.
These people often use their gifts by travelling the land as purifiers, offering their
purifying services for a token fee to the needy.
</p>
<p>
Since this domain governs heat, it is only natural that the people living in the scorching deserts
of the east are particularly suited with this type of magic.
Whether its the <<rep setup.trait.race_humandesert>> living in the desert cities, or the
<<rep setup.trait.race_orc>> living in the encampments to the east, you are bound to encounter
a formidable fire wizard sooner or later in the deserts.
And you will certainly need their help, for the desert is littered with
the <<lore concept_mist>> which connects this world with the corrupted demonic world.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_water>>.
</p><<run new setup.Lore(
'magic_wind', /* key */
'Magic: Wind', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_wind>> wind magic governs speed and velocity.
In the most basic form, this magic allows its wielders to manipulate the speed of air,
forming strong gust of winds out of seemingly nowhere.
Particularly gifted individuals
<<rep setup.trait.magic_wind_master>>
are further capable of manipulating electricity -- sending jolts of shocks from their fingertips
to unsuspecting victims.
Among many occupations, these skills are highly valued within the slaving circles, for they are very
effective in breaking slaves.
</p>
<p>
The residents of the <<rep $company.humankingdom>> have been historically been gifted with this domain
of magic. While their gift has diminished over the decades, you can still occassionally spot talented
<<rep setup.trait.race_humankingdom>> amongst those living in the <<lore location_lucgate>>,
who surely will make a fine slaver should they wish to join your company.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_earth>>.
</p><<run new setup.Lore(
'magic_earth', /* key */
'Magic: Earth', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_earth>> earth magic governs the ground and everything that thrives
on it.
This domain of magic is often used to accelerate the growth of crops, and is valued highly
within the settlements in the western forests for its ability to manipulate plants.
When fully mastered, <<rep setup.trait.magic_earth_master>> allows its wielder to freely manipulate
the shape of both the earth, and things that grow from the earth. The most infamous use perhaps is
forming tentacles out of both the ground and the vines that rapidly grow on it.
If you seek a master of sexual depravity, look no further than wielders of advanced earth magic.
</p>
<p>
In ancient times, the <<rep setup.trait.race_elf>> and the <<lore race_tigerkin>> uses their vast
mastery over this domain of magic in everyday life.
The current modern <<rep setup.trait.race_elf>> and <<rep setup.trait.race_neko>> still retain some
of these mastery, and many gifted individuals can often be found if one were to venture into the
vast forests.
</p>
<p>
It is also said that mastery over the earth domain grants its wielder ability to create portals,
which was the main transportation mechanism used by the ancient elves. But this form of magic has
been lost for centuries.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_wind>>.
</p><<run new setup.Lore(
'magic_light', /* key */
'Magic: Light', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_light>> light magic is said to be the purest domain of magic,
governing both everything and nothing at the same time.
While its nature remains a mystery to scholars, they all agree that those gifted in light magic
becomes unnaturally good at healing minor wounds.
When fully mastered, the wielders of <<rep setup.trait.magic_light_master>>
can even heal major and life-threatening wounds, as well as treating the mind.
</p>
<p>
There are very few people living in <<lore continent_main>> gifted in this domain of magic.
But it is said that beyond the <<lore region_sea>>, many
<<rep setup.trait.race_humansea>> and <<rep setup.trait.race_dragonkin>> are gifted with this
specialized and pure form of magic. If one were to look for wielders of this magic,
the best advise is to look to the south, although it will no doubt be a dangerous trip.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_dark>>.
</p><<run new setup.Lore(
'magic_dark', /* key */
'Magic: Dark', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
The domain of <<rep setup.trait.magic_dark>> dark magic lends its wielder control
over darkness, invisibility, as well as stealthiness.
Thieves and scoundrels gifted in this domain are highly dangerous, and many master
thieves have been found to dabble in this domain of magic.
But the true worth of this magic lies in its mastery <<rep setup.trait.magic_dark_master>>,
where it grants its wielder the ability to corrupt others.
Talk of <<rep setup.trait.magic_dark_master>> is often considered taboo, and the <<rep $company.humankingdom>>
has criminalized this particular craft.
</p>
<p>
Fortunately, very few mortals are gifted in this domain of magic.
But if one were to look beyond this plane, and into the next, they will find that the
<<rep setup.trait.race_demon>> living beyond the <<lore concept_mist>> are often
gifted in this domain of magic.
It is said that the connection between this world and the next is often very thin in the
<<lore region_desert>>, which may be your best guess of where you could possibly found
a slaver gifted in this domain.
</p>
<p>
This domain is the opposite of <<rep setup.trait.magic_light>>.
</p><<run new setup.Lore(
'race_goblin', /* key */
'Goblins', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
Said to be the offshoots of orcs, these diminutive, green-skinned
creatures usually occupy the mountain ranges to the north-east.
Somehow, they often lack in females, and is said to abduct the females
of other species out of necessity to breed and sustain their numbers.
</p><<run new setup.Lore(
'race_tigerkin', /* key */
'Tigerkin', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
Ancestors of the <<rep setup.trait.race_neko>>, these fully furry-bodies tiger
anthros once inhabit the western forests alongside the elves.
But crossbreeding has diminished their furry bodies into what is the
modern neko, leaving only their ears, tails, and occassionally eyes
as a reminder of their ancestry.
</p><<run new setup.Lore(
'region_vale', /* key */
'Northern Vales', /* name */
[ /* tags */
'region',
],
[ /* visibility requirements */
],
)>><p>
The unnamed swathing fields reaching up into the cold mountains of the north.
The northerners and the werewolf folks live in this area.
</p><<run new setup.Lore(
'region_forest', /* key */
'Western Forests', /* name */
[ /* tags */
'region',
],
[ /* visibility requirements */
],
)>><p>
The dense forests west of the <<lore region_city>>, and south from your fort.
It is inhabited by the elven and neko people.
</p><<run new setup.Lore(
'region_city', /* key */
'City of Lucgate', /* name */
[ /* tags */
'region',
],
[ /* visibility requirements */
],
)>><p>
The most populated city in <<lore continent_main>>.
This city is mostly populated by the kingdomfolks,
and is governed by royalties from the <<rep $company.humankingdom>>.
</p><<run new setup.Lore(
'region_desert', /* key */
'Eastern Deserts', /* name */
[ /* tags */
'region',
],
[ /* visibility requirements */
],
)>><p>
The scorching deserts of the east. Some hardy
desertfolks as well as the orcs call the hellish place a home.
<<lore concept_mist>> is often thin here, inviting demons from beyond to cross to the mortal plane.
</p><<run new setup.Lore(
'region_sea', /* key */
'Southern Seas', /* name */
[ /* tags */
'region',
],
[ /* visibility requirements */
],
)>><p>
The vast seas south of <<lore continent_main>>.
The land beyond hold many mysteries.
</p><<if $notification>>
<div id='notiffooter'>
<<loadnotification>>
</div>
<</if>>
<div class='warningsdiv'>
</div>
<<focwidget 'warning'>>
<<replace '.warningsdiv'>>
<<dangertext $args[0]>>
<</replace>>
<<run alert($args[0])>>
<</focwidget>>/* hack for back button to work again */
<<if State.activeIndex > 0 && State.history[State.activeIndex-1].variables.gPassage == 'WeekEnd'>>
<<set State.history[State.activeIndex-1].variables.gPassage = State.history[State.activeIndex-1].variables.gOldPassage>>
<</if>>
<<if $devtooltype>>
<<include 'LoadDevWidgets'>>
<</if>>
<<focwidget 'loadnotification'>>
<<notificationscard $notification.popAll()>>
<</focwidget>>
<<if $notification>>
<<run $notification.deleteAll()>>
<div id='notifheader'>
<<loadnotification>>
</div>
<</if>>
<div class='warningsdiv'>
</div><<if !setup.INIT_DONE>>
<<silently>>
<<include 'InitSetup'>>
<</silently>>
<<run $notification.popAll()>>
<</if>><<focwidget 'loadmenu'>>
<<if $gMenuVisible>>
<<set _dom = setup.DOM.Card.mainmenu()>>
<<attach _dom>>
<</if>>
<</focwidget>>
<div id='menudiv'>
<<loadmenu>>
</div>/* Used for titlebar */
<<if $calendar>>
<<= State.variables.company.player.getName()>> / Week <<= $calendar.getWeek() >>
<<else>>
Fort of Chains <<= setup.VERSION.join('.')>>
<</if>>Fort of Chains <<= setup.VERSION.join('.')>>
<<if $calendar >>
<br/>
<<= State.variables.company.player.getName()>> / Week <<= $calendar.getWeek() >>
<br/>
<<focwidget 'loadmenutopdata'>>
<div>
<<money $company.player.getMoney()>> / Prestige: <<= State.variables.company.player.getPrestige() >>
</div>
<<if $gMenuVisible>>
<div id='endweekdiv'>
<<if $opportunitylist.isHaveMustAnswerOpportunities()>>
<<focmove 'ANSWER MAIL' 'OpportunityList'>>
<<message '(?)'>>
You have some <<dangertext 'Important'>> mail that have to be answered
before you can end week.
<</message>>
<<else>>
<span id='continuebtn'>
<<set _text = 'END WEEK'>>
<<set _deployable = $company.player.getDeployableTeams()>>
<<if _deployable > 0>>
<<linkreplace _text>>
<span id='continuebtn'>
<<link 'REALLY END WEEK?'>>
<<focsavestategoto 'WeekEnd'>>
<</link>>
</span>
<</linkreplace>>
<<else>>
<<link _text>>
<<focsavestategoto 'WeekEnd'>>
<</link>>
<</if>>
</span>
<<if _deployable > 0>>
<<set _text = `[${_deployable}]`>>
<<dangertext _text>>
<small>
<<message '(?)'>>
You can still send <<= _deployable>> more teams on quests.
<</message>>
</small>
<</if>>
<</if>>
</div>
<</if>>
<</focwidget>>
<<focwidget 'refreshmenu'>>
<<replace "#menutopdata">>
<<loadmenutopdata>>
<</replace>>
<<replace "#notifheader">>
<<loadnotification>>
<</replace>>
<<replace "#notiffooter">>
<</replace>>
<<replace "#menudiv">>
<<loadmenu>>
<</replace>>
<</focwidget>>
<span id='menutopdata'>
<<loadmenutopdata>>
</span>
<</if>><<set setup.VERSION = [1, 3, 1, 12]>><<run new setup.OpportunityTemplate(
'coming_of_age', /* key */
"Coming of Age", /* Title */
"Alberich", /* Author */
[ 'special', 'fort', 'unit', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_coming_of_age',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_coming_of_age_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slaver('child', "was the child of one of your slavers who has all grown up", undefined),
],
], [
'Opportunity_coming_of_age_1',
'Opportunity_coming_of_age_1_flavor',
[ /* costs */
setup.qc.Money(-1000), ],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'child': null},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _mom = $family.getUnitRelation($g.child, setup.familyrelation.mother)>>
<<set _dad = $family.getUnitRelation($g.child, setup.familyrelation.father)>>
<<set _u = setup.getAnySlaver()>>
<p>
Today marks the 18-th birthday of <<rep $g.child>>, which if you recall correctly was the <<daughter $g.child>> of
<<if _mom && _mom.isSlaver()>>
your <<repfull _mom>>.
<<else>>
a former slaver in your employ.
<</if>>
Now comes the day where you need to decide what to do with the <<lass $g.child>>.
You could try asking <<repfull _u>> for advice, but on a second thought these personal matters are best resolved
with your own hands.
</p>RecruitReleaseYou released the child into the wilds, giving <<them $g.child>> some starting money.<<run new setup.OpportunityTemplate(
'enlightenment_of_the_soul___prelude', /* key */
"Enlightenment of the Soul - Prelude", /* Title */
"Alberich", /* Author */
[
'city',
'breeding',
'special',
'veteran',
'trait',
], /* tags */
4, /* opportunity expiration weeks */
'Opportunity_enlightenment_of_the_soul___prelude',
setup.qdiff.hard40, /* difficulty */
[ /* options */
[
'Opportunity_enlightenment_of_the_soul___prelude_0',
'Opportunity_enlightenment_of_the_soul___prelude_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_enlightenment_of_the_soul_cooldown', "1", 30),
],
], [
'Opportunity_enlightenment_of_the_soul___prelude_1',
'Opportunity_enlightenment_of_the_soul___prelude_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.Trait(setup.trait.gender_male)),
],
[ /* outcomes */
setup.qc.VarSet('quest_enlightenment_of_the_soul_cooldown', "1", 30),
],
], [
'Opportunity_enlightenment_of_the_soul___prelude_2',
'Opportunity_enlightenment_of_the_soul___prelude_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Trait(setup.trait.dick_tiny),
]),
],
[ /* outcomes */
setup.qc.VarSet('quest_enlightenment_of_the_soul_cooldown', "1", 30),
],
], [
'Opportunity_enlightenment_of_the_soul___prelude_3',
'Opportunity_enlightenment_of_the_soul___prelude_3_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitleGlobal('quest_enlightenment_2_graduate_1'),
setup.qc.VarSet('quest_enlightenment_of_the_mind_cooldown', "1", 100),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.VarNull('quest_enlightenment_of_the_soul_cooldown'),
setup.qres.HasUnitWithTitle('quest_enlightenment_2_graduate_1', {
job_key: "slaver",
}), ],
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1',
'pupil': [
setup.qres.HasTitle('quest_enlightenment_2_graduate_1'),
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><div class='lettercard'>
<p>
Honored <b>Guardian</b> of an Esteemed Student of Light!
</p>
<p>
The Women's Academy of Light is honored to inform you that your pure-hearted, diligent <b>Ward</b>, <<rep $g.pupil>>, has passed through the first two Gates of Enlightenment. Her wits and diligence have brought her Enlightenment of the Mind. No puzzle proved too perplexing; no study session too soporific; no reading too recondite. Yet she excelled herself further in achieving Enlightenment of the Heart. Facing her inner fiends, she fought through her frailties, vanquished her vices, and towered over her temptations. None but the worthiest could come as far as she has . . .
</p>
</div>
<i>The bow is drawn</i>, you think. <i>Make with the shaft. How much are you setting me back this time?</i>
<div class='lettercard'>
<p>
. . . and now the trustees and officers of the Academy, in conclave assembled, are in agreement that she stands proudly in the ranks of those few, alone among the mortal races, who are fit to enter the final phase of training, pay the final prices, and emerge as True Mistresses of Light . . .
</p>
</div>
<p>
<i>In other words</i>, you think, <i>she's got a “guardian” who keeps coming up with those 10,000 gold piece tuition payments. Might as well come to it. What “price” are we talking here? </i>
</p>
<div class='lettercard'>
<p>
The final phase, the Enlightenment of the Soul, is the longest and the most rewarding for your worthy <b>Ward</b>. She must undergo the most profound transformation a woman can know, and as an essential part of her final enlightenment, she must endure the most joyful event each woman can imagine. She must give birth!
</p>
</div>
<p>
<i>That . . . I was not expecting.</i> You hardly know what to think as you continue.
</p>
<div class='lettercard'>
<p>
A certain warmth has grown between <<rep $g.pupil>> and her pupilmaster, <<rep $g.master>>, who would be proud to father her child, thereby blessing her, himself, the Academy, and the world. But the values and standards of the Academy forbid any improper insistence, and as a protective <b>Guardian</b> you may ease yourself of any concerns touching that point. If <<rep $g.pupil>> has already a loyal husband or sweetheart, she may arrive for the final course already with child, and receive the most tender care as well as the finest and most rigorous instruction, always with due consideration for her condition.
</p>
<p>
During the forty weeks of the course, <<rep $g.pupil>> will also enjoy the opportunity to defray the costs of her education by performing healing services in the Kingdom of Tor, combining practical Art with instructive Lore that will enrich her remaining days. Thus, the Academy need request the merest pittance for processing and expenses, in the amount of ten thousand gold pieces, true crown weight . . .
</p>
</div>
<p>
<i>I knew it!</i> you think in cynical triumph.
</p>
<div class='lettercard'>
<p>
. . . after which you will enjoy a lifetime of pride, knowing that the <b>Ward</b> you have nurtured is now an accomplished Mistress of the Light. Please remit all fees at the beginning of the course . . .
</p>
</div>
<p>
Well, now, what to do?
</p>Let the Pupilmaster impregnate herYour original idea was simpler: she should just blow somebody and get the spellbook without all this “purificiation” nonsense. When the long-winded poetry's done, this is just a slower version of the same.
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<set _child = setup.UnitBirth.generateChild($g.master, $g.pupil, _preference)>>
<<run setup.qc.QuestDirect('enlightenment_of_the_soul', {child: 'child'}).apply(
setup.costUnitHelper(_child)
)>>Impregnate her yourselfWith all <i>you've</i> been paying, and all the time off she's had for these courses, the least she can do is let you enjoy her sweetness for a little while.
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<set _child = setup.UnitBirth.generateChild($unit.player, $g.pupil, _preference)>>
<<run setup.qc.Event('enlightenment_of_the_soul___interlude', 0, {child: 'child'}).apply(
setup.costUnitHelper(_child)
)>>Choose another slaver to father a child on her<<set $gMenuVisible = false>>
You know someone who'd be perfect for the job. Or maybe someone you want to reward for good service. He'll probably like both you and her better at the end of the transaction . . .
<<set _unitlist = State.variables.company.player.getUnits({job: setup.job.slave})>>
<<set _unitlist = _unitlist.filter(unit => unit != $unit.player && unit.isHasDick())>>
<<focwidget 'rostershowaction'>>
<<link '(Select)'>>
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<set _child = setup.UnitBirth.generateChild($args[0], $g.pupil, _preference)>>
<<run setup.qc.Event('enlightenment_of_the_soul___interlude2', 0, {child: 'child'}).apply(
setup.costUnitHelper(_child)
)>>
<<focgoto 'OpportunityList'>>
<</link>>
<</focwidget>>
<<rostershow _unitlist>>Tear this stupid letter to shreds.Enough is enough! <<rep $g.pupil>> is one of your slavers, not some perpetual student you're supporting.<<run new setup.OpportunityTemplate(
'rival_interaction', /* key */
"Rival Interaction", /* Title */
"Kyiper", /* Author */
[ 'fort', 'special', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_rival_interaction',
setup.qdiff.normal20, /* difficulty */
[ /* options */
[
'Opportunity_rival_interaction_0',
'Opportunity_rival_interaction_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('you', 2), ],
], [
'Opportunity_rival_interaction_1',
'Opportunity_rival_interaction_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], [
'Opportunity_rival_interaction_2',
'Opportunity_rival_interaction_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'rival': [],
'you': [
setup.qres.You(),
], },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
While out and about on your rounds in the fort, you notice your <<ufriend $unit.player $g.rival>> <<rep $g.rival>> approaching you. Without warning, <<they $g.rival>> slip past you and smack your ass; and then just continue on like nothing happened! As <<they $g.rival>> continue to walk past, you can hear a chuckle or two coming from the slavers<<if $company.player.getUnits({job: setup.job.slave}).length>> and slaves<</if>> who happened to be nearby.
</p>
<p>
As <<rep $g.rival>> continued to <<uadv $g.rival>> walked away, you contemplate to yourself what would be the best course of action.
<<if $unit.player.isHasTrait('per_submissive') || $unit.player.isHasTrait('per_masochistic')>>
Or that's what you would like to think —- but your
<<if $unit.player.isHasDick()>>erect <<udick $unit.player>>
<<else>>wet pussy<</if>>
tells a very different tale...
<<else>>
You could just walk away, after all there are plenty of more important things for you to solve. Alternatively, you could try to "return the favor" to the slaver, but this will require you to be sufficiently high in <<rep setup.skill.intrigue>>. Finally, if you are confident in your <<rep setup.skill.combat>> skill, there is always the option of teaching your <<ufriend $unit.player $g.rival>> in the good ol' fashioned way...
<</if>>
</p>Walk on like nothing happened<<if $unit.player.isHasTrait('per_submissive') || $unit.player.isHasTrait('per_masochistic')>>
<p>
You decided to walk away. In the coming days the thought of having <<rep $g.rival>> spank you harder occassionally comes into your <<if $unit.player.isHasTrait('per_masochistic')>>masochistic<<else>>submissive<</if>> mind, which never fails to get you <<wet $unit.player>>
and unfocused for your tasks...
</p>
<<else>>
<p>
You decided to walk on for now, but you make sure to keep in mind to assign <<rep $g.rival>> into the most dangerous missions in the days to come... Still, the audacity of <<rep $g.rival>> remains in the forefront of your thoughts in the days to come, which occassionaly disrupt you from your tasks.
</p>
<</if>>Spank them back<<set _res = setup.Skill.skillCheckCompare($unit.player, $g.rival, setup.skill.intrigue)>>
/* submissive PC can't win */
<<if $g.you.isSubmissive() || $g.you.isMasochistic()>>
<<set _res = -1>>
<</if>>
<p>
That <<uadjbad $g.rival>> <<ufriend $g.you $g.rival>> of yours <<rep $g.rival>> must be thinking <<they $g.rival>> could just come smack your ass in front of everyone like that.
As a leader of this fort, this is not something you should just take lying down. You look back at the slaver and resolved to get <<them $g.rival>> back for this attempt.
</p>
<<if _res > 0>>
<p>
You move quickly, before <<they $g.rival>> are able to stop you, and deliver a good, hard, authoritative smack back to that ass of <<them $g.rival>>. As your <<uhand $g.you>> connects to <<their $g.rival>> flesh with a loud clap to get the attention of the nearby slavers, <<they $g.rival>> yelp out and spin around.
<<if $g.you.isHasTrait('muscle_strong')>>
You made sure to fully use your muscles to deliver the spank: extra hard, as they say!
<<else>>
You may have smacked <<their $g.rival>> ass a little too hard though.
<</if>>
Despite still defiantly looking at you,
your <<uadjgood $g.rival>> <<ufriend $g.you $g.rival>> decided the best way to proceed is to heal <<their $g.rival>> existing wounds first, before limping back to the lodgings area, no doubt to come up with another plan to get back at you. Still, it feels good to smack your <<ufriend $g.you $g.rival>> like that for once.
</p>
<<run $trauma.boonize($g.you, 2)>>
<<else>>
<p>
You run up to smack <<their $g.rival>> ass back. Just as your <<uhand $g.you>> about to connect to <<their $g.rival>> ass, <<they $g.rival>> turns around and skillfully catches your <<uhand $g.you>>, while grabbing the other and holds your wrists together.
</p>
<p>
"Well that was rude.", <<they $g.rival>> says with a cocky grin,
and raises your <<uhands $g.you>> up so that you are standing there at <<their $g.rival>> mercy.
<<if $unit.player.isSubmissive()>>
<<They $g.rival>> chuckles and turns you around, ass towards <<them $g.rival>>, and delivers a few more smacks on your ass as punishment for trying to get back at <<them $g.rival>> while a few of your slavers watch. $i.he spanks you and makes your whole body recoil from the spanks<<if $g.you.isHasBreasts()>>, making sure that there's jiggle to your tits when you do<</if>>.
<<They $g.rival>> is merciful though; only after ten spanks does <<they $g.rival>> let you go again with a stern warning that you aren't to touch <<they $g.rival>> ass again, even wagging his finger at you like you are a disobedient child. It's demeaning being talked to like this, but deep down you know this is what your little submissive mind has always wanted...
<<run $trauma.boonize($g.you, 3)>>
<<else>>
Still, <<they $g.rival>> knows challenging the top dog of the company could put <<their $g.rival>> life in danger, and <<they $g.rival>> lets you go and continue <<their $g.rival>> day.
You rubbed your ass a little, knowing that while the pain there is temporary, the pain in your pride will take longer to heal.
<<run $trauma.traumatize($g.you, 3)>>
<</if>>
</p>
<</if>>Teach them a lesson<<set _res = setup.Skill.skillCheckCompare($unit.player, $g.rival, setup.skill.combat)>>
/* submissive PC can't win */
<<if $g.you.isSubmissive() || $g.you.isMasochistic()>>
<<set _res = Math.min(_res, -1)>>
<</if>>
<p>
Puffing out your chest, you start at the dumbass that just picked a fight with you. You silently marched towards <<them $g.rival>>,
your stare straight.
<<if $g.you.isSubmissive() || $g.you.isMasochistic()>>
Your intention appears clear to anyone who is watching, although deep down you know in your <<if $g.you.isMasochistic()>>masochistic<<else>>submissive<</if>> mind you are aiming for something completely different...
<</if>>
You take a swing directly at <<their $g.rival>> <<ubody $g.rival>>.
</p>
<<if _res == 2>> /* non-sub PC wins hard */
<p>
The swing hits square at <<their $g.rival>> back, send him spiraling down the ground. Your other slavers watching held their breaths as you checked on <<rep $g.rival>>, ensuring that <<they $g.rival>> is still alive after that. This injures <<rep $g.rival>>, but this should be a clear message for everyone not to ever mess with you. And damn, that felt good.
</p>
<<run $trauma.boonize($g.you, 3)>>
<<run $hospital.injureUnit($g.rival, 1)>>
<<elseif _res == 1>> /* non sub PC wins barely */
<p>
Your <<ufriend $g.you $g.rival>> hear you approaching, and turned around in a defensive position.
Narrowly <<they $g.rival>> avoided the blow, which would have taken <<them $g.rival>> down quickly. But you follow up with a flurry of attacks —- including a cheeky revenge slap on <<their $g.rival>> ass. Against your masterful (at least compared to <<them $g.rival>>) strikes, your <<ufriend $g.you $g.rival>> were unable to fully defend against those. The dust eventually settled, with <<rep $g.rival>> flat on the ground. This injures <<rep $g.rival>>, but this should be a clear message for everyone not to ever mess with you. And damn, that felt good.
</p>
<<run $trauma.boonize($g.you, 2)>>
<<run $hospital.injureUnit($g.rival, 1)>>
<<else>>
<<if !$g.you.isSubmissive() && !$g.you.isMasochistic()>> /* non sub PC "loses" */
<p>
You growl at the <<uadjbad $g.rival>> slaver and turn to face <<them $g.rival>>. Thanks to your audible growl however, <<they $g.rival>> turned around, ready for whatever you were planning to bring to <<them $g.rival>>. Crack a <<uadjgood $g.rival>> grin, <<they $g.rival>> cracked their knuckles in preparation for a good fight. You go and attempt a swing on their body, but <<they $g.rival>> ducks and launched a counter-attacks, getting you in the ribs. Not before you kick <<them $g.rival>> back in retaliation, however!
</p>
<p>
The fight goes on for some time, with neither of you gaining an upper hand.
<<set _vice = $dutylist.getUnit('DutyViceLeader')>>
Eventually
<<if _vice && _vice != $g.rival>>
your vice leader <<rep _vice>>
<<else>>
the other slavers in the fort
<</if>>
break the fight up between the both of you before any of you sustain meaningful damage. Though you were not able to get them back for their folly; you did show that you will at least defend yourself, and hopefully this lesson will not be lost on your <<ufriend $g.you $g.rival>>'s thick skull.
</p>
<<elseif !$g.rival.isDominant()>> /* sub PC loses to a non dominant slaver */
<p>
The gauntlet is thrown and you go to fight against your <<ufriend $g.you $g.rival>> to avenge your pride; but it soon becomes obvious that you are not a match for <<them $g.rival>>. Deep in your <<if $g.you.isMasochistic()>>masochistic<<else>>submissive<</if>> mind, you wonder if this is really due to you lacking the skill to win, or your mind playing a little mind game with your body. But either way, for every punch, kick, spank, and slap you get in, they get just as many. And every hit excites you, making you less and less focused on the fight. Sensing an opening, <<rep $g.rival>> slammed you face first into the dirt, ass up, and get a good slap to the ass.
</p>
<p>
Putting <<their $g.rival>> knee on your back, the slaver pinned you there, while removing your and giving several spanks to your ass as your face is in the dirt.
After <<they $g.rival>> have spanked you into the ground, <<they $g.rival>> gets off of your back, but grabs both of your wrists and pulls you up like a suspended doll. You get turned around, like you are on display for the slavers. Your helpless form and red ass shown to them, as well as your shameless <<if $g.you.isHasDick()>>erection<<else>>wet pussy<</if>>.
Thankfully; there's not much after that. <<They $g.rival>> takes mercy on you and lets you go with a stern warning not to try that again... accompanied by another slap to your ass.
</p>
<p>
After such a disgraceful display surely everyone in the fort will be painfully aware of your
not-so-secret
<<if $unit.player.isSubmissive()>>submissive<<else>>masochistic<</if>> tendencies...
</p>
<<run $trauma.boonize($g.rival, 2)>>
<<run $trauma.boonize($g.you, 1)>>
<<else>> /* sub PC loses to dominant rival */
<p>
With your <<if $g.you.isMasochistic()>>masochistic<<else>>submissive<</if>> mind taking control, there was really no other outcome of the fight other than being thrown around and humiliated. You keep getting up after being thrown into the dirt, being more excited each time as your <<ufriend $g.you $g.rival>> rival continues to toy with you.
</p>
<p>
<<rep $g.rival>> takes your <<uhands $g.you>> together and strips you simply; taking your pants while your <<uarms $g.you>> are bound. Ignoring your strugges, <<they $g.rival>> stripped all of your other clothings as well, including your underwear. Stripped down naked, you are taken over by your slaver's knee for 'punishment time'.
</p>
<p>
The first spank hurt. So did the tenth. And by the time they get to fifty; it stings so bad you may or may not be a crying mess.
<<if $unit.player.isMasochistic()>>
(Although you secretly orgasmed for that.)
<</if>>
You may also be a begging mess, as well...
</p>
<p>
Taking your whip, <<rep $g.rival>> takes you for a little walk around the fort. <<They $g.rival>> binds your wrists and makes good use of your whip, having your back and backside tanned if you ever try to speed up. It's a slow... torturous walk around, and you aren't allowed to hide your shame either. And the crack of the whip just grabs more and more attention too.
</p>
<p>
And right when you think that you are finishing the lap around the fort... you're taken for another lap. And this time, each time you get whipped, you are supposed to apologize to <<them $g.rival>> and promise not to impede <<their $g.rival>> right to your ass whenever <<they $g.rival>> wish... and you're going to continue doing laps until you say it for a full round.
</p>
<p>
But finally, at the end... you are granted your clothes and your whip back. Once you agree to get on your knees to accept them in front of your other slavers. Seeing you being so utterly degraded by your <<ufriend $g.you $g.rival>> <<rep $g.rival>> is going to be something very difficult to live down...
</p>
<p>
If you ever want to live that down, that is.
</p>
<<run $trauma.boonize($g.rival, 3)>>
<<run $trauma.boonize($g.you, 3)>>
<</if>>
<</if>><<run new setup.Title(
"quest_the_abominable_valeman_abominable_valeman", /* key */
"Abominable Valeman", /* name */
"A local legend of the North", /* description */
"was a local legend that menaced the towns of the <<lore region_vale>>", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"abominable_valeman",
"valeman",
[ /* pools */
[setup.unitpool.race_werewolf_male, 0.3125],
[setup.unitpool.race_werewolf_female, 0.3125],
[setup.unitpool.race_humanvale_male, 0.15625],
[setup.unitpool.race_humanvale_female, 0.15625],
[setup.unitpool.race_neko_male, 0.03125],
[setup.unitpool.race_neko_female, 0.03125],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.Nickname('unit', 'The Abominable Valeman'),
setup.qc.BgTraitReset('unit', setup.trait.bg_wildman),
setup.qc.TraitReplace('unit', setup.trait.per_independent),
setup.qc.Trait('unit', setup.trait.muscle_verystrong),
setup.qc.Trait('unit', setup.trait.height_giant),
setup.qc.Trait('unit', setup.trait.height_giant),
],
)>>
<<run new setup.UnitGroup(
"raider_valeman",
"raiderman",
[ /* pools */
[setup.unitpool.race_werewolf_male, 0.3125],
[setup.unitpool.race_werewolf_female, 0.3125],
[setup.unitpool.race_humanvale_male, 0.15625],
[setup.unitpool.race_humanvale_female, 0.15625],
[setup.unitpool.race_neko_male, 0.03125],
[setup.unitpool.race_neko_female, 0.03125],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_nomad),
setup.qc.Trait('unit', setup.trait.height_giant),
setup.qc.TraitReplace('unit', setup.trait.per_independent),
],
)>>
<<set _desc1 = "raided livestock in the <<lore region_vale>>">>
<<run new setup.OpportunityTemplate(
'the_abominable_valeman', /* key */
"The Abominable Valeman", /* Title */
"", /* Author */
[ /* tags */
'vale',
'unit',
],
1, /* expiration weeks */
'Opportunity_the_abominable_valeman',
setup.qdiff.easy5, /* difficulty */
[ /* options */
[
'Opportunity_the_abominable_valeman_0',
'Opportunity_the_abominable_valeman_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.NoUnitWithTitle('quest_the_abominable_valeman_abominable_valeman', {
}),setup.qc.DoAll([
setup.qc.AddTitle('valeman', 'quest_the_abominable_valeman_abominable_valeman'),
setup.qc.Slaver('valeman', _desc1, true)
], undefined),
setup.qc.Slaver('raiderman', _desc1, undefined)),
],
],
[
'Opportunity_the_abominable_valeman_1',
'Opportunity_the_abominable_valeman_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.NoUnitWithTitle('quest_the_abominable_valeman_abominable_valeman', {
}),setup.qc.DoAll([
setup.qc.AddTitle('valeman', 'quest_the_abominable_valeman_abominable_valeman'),
setup.qc.Slave('valeman', _desc1, undefined)
], undefined),
setup.qc.Slave('raiderman', _desc1, undefined)),
],
],
[
'Opportunity_the_abominable_valeman_2',
'Opportunity_the_abominable_valeman_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'valeman': 'abominable_valeman',
'raiderman': 'raider_valeman',
'fighter': [
],
'hunter': [
],
'tracker': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
After the slavers depart the village, the snowfall eases up to barely a dusting, then stops entirely. Looking back at the mountains, <<rep $g.tracker>> notices a barely-visible gap in the rocks, potentially the den of whatever beast the slavers were actually supposed to be searching for. Curiously, the other tracks they encountered while tracking the bear seemed to be heading in this general direction as well.
</p>
<<set _abom = setup.getUnit({title:'quest_the_abominable_valeman_abominable_valeman'})>>
<<if _abom>>
<<set _vman = $g.raiderman>>
<p>
Recalling a past quest, <<they $g.tracker>> leads <<rep $g.fighter>> and <<rep $g.hunter>> up the mountainside, to the entrance of <<rep _abom>>'s old den. The entrance shows signs of recent use, with a set of absolutely humongous footprints leading to and from the entrance. <<rep $g.tracker>> and <<rep $g.hunter>> share a concerned glance at each other, but <<rep $g.fighter>> <<uadv $g.fighter>> steps ahead of them and into the dark.
</p>
<p>
The amount of fresh detritis suggests that something, or someone has been here recently. So it isn't a total surprise when <<they $g.fighter>> stumbles across a starved-looking, but unusually large
<<if _vman.isHasTrait('race_werewolf')>>
werewolf,
<<elseif _vman.isHasTrait('race_humanvale')>>
human, wrapped in furs,
<<elseif _vman.isHasTrait('race_neko')>>
lynx-eared neko,
<</if>>
muttering in their sleep. <<rep $g.hunter>> vaguely recalls bumping into <<them _vman>> at the town's farmers market a couple days ago. Beside <<them _vman>> are the ashes of an old campfire, as well as several sheep tied up in the corner. It seems as though the new "Abominable Valeman" is just a <<urace _vman>> that has been rustling up peoples' livestock. Recalling the valeman's name to be <<rep _vman>>, <<rep $g.hunter>> confers with the other slavers, and they decide to:
</p>
<<else>>
<<set _vman = $g.valeman>>
<p>
On a hunch, <<they $g.tracker>> leads <<rep $g.fighter>> and <<rep $g.hunter>> up the mountainside, where there is indeed a cave. The entrance shows signs of recent use, with a set of absolutely humongous footprints leading to and from the entrance. <<rep $g.tracker>> and <<rep $g.hunter>> share a concerned glance at each other, but <<rep $g.fighter>> <<uadv $g.fighter>> steps ahead of them and into the dark.
</p>
<p>
What <<they $g.fighter>> finds is a surprise to everyone: an incredibly large
<<if _vman.isHasTrait('race_werewolf')>>
werewolf,
<<elseif _vman.isHasTrait('race_humanvale')>>
human, wrapped in furs,
<<elseif _vman.isHasTrait('race_neko')>>
lynx-eared neko,
<</if>>
sleeping on the cave floor. Beside <<them _vman>> are the ashes of an old campfire, as well as a mound of sheep bones picked clean of meat, most likely the remains of the stolen livestock. It seems the "Abominable Valeman" was actually a <<urace _vman>> who raided these villages for food. Seeing <<rep _vman>> in a helpless position, the slavers decide to:
</p>
<</if>>Recruit <<them _vman>><p>
Certainly, someone with this much expertise in raiding villages would be welcome in the fort. Stepping back out of the cave, <<rep $g.tracker>> digs out a hunk of cured meat rations that the slavers had just purchased from the village. <<rep $g.hunter>> watches in quiet trepidation as <<rep _vman>> sniffs at the air and begins to awaken at the scent of food.
</p>
<p>
Eying <<rep $g.tracker>> suspiciously, <<rep _vman>> is initially wary upon seeing intruders in <<their _vman>> home, but the offering of food is too good to pass up. The slavers sit in silence as <<rep _vman>> digs into <<their _vman>> meal. Once <<they _vman>> is finished, <<rep $g.tracker>> <<uadv $g.tracker>> explains that they want to invite <<them _vman>> to join <<rep $company.player>>. The negotiations are terse and unproductive until <<rep $g.tracker>> makes a promise to pay for <<rep _vman>>'s food and board, at which point <<their _vman>> eyes light up and <<they _vman>> agree without reservations.
</p>Enslave <<them _vman>><p>
Sizing up <<rep _vman>>'s monstrous frame, the slavers decide that <<they _vman>> would make an excellent slave. While <<they _vman>> is asleep, <<rep $g.fighter>> discreetly signals <<rep $g.hunter>> and <<rep $g.tracker>> over, and they quickly bind and gag <<them _vman>>. <<rep _vman>> wakes up in a fury, but can do nothing but wriggle like an irate, oversized worm while <<rep $g.fighter>> hauls <<their _vman>> struggling <<if _vman.isHasTrait('race_werewolf')>>
furry
<<else>>
fur-wrapped
<</if>> body down the mountainside.
</p>
<p>
<<rep $g.fighter>> <<uadv $g.fighter>> complains about the smell of <<if _vman.isHasTrait('race_werewolf')>>
wet dog
<<elseif _vman.isHasTrait('race_humanvale')>>
sweaty human
<<elseif _vman.isHasTrait('race_neko')>>
unwashed cat fur
<</if>> the whole way back to the fort.
</p>Turn <<them _vman>> in<p>
The slavers come to a consensus that <<rep _vman>> is too much trouble to even try to keep around. <<rep $g.hunter>> quietly leads <<rep $g.fighter>> and <<rep $g.tracker>> back out of the cave, where they make haste back to the <<if _vman.isHasTrait('race_werewolf')>>
human
<<run setup.qc.Favor('humanvale', 300).apply($gQuest)>>
<<elseif _vman.isHasTrait('race_humanvale')>>
werewolf
<<run setup.qc.Favor('werewolf', 300).apply($gQuest)>>
<<else>>
<run setup.qc.Favor('humanvale', 150).apply($gQuest)>>
<run setup.qc.Favor('werewolf', 150).apply($gQuest)>>
<</if>> village and alert the townsfolk of the <<their _vman>> presence. Armed with this information, the townsfolk rapidly assemble a mob, storm the cave, and seize <<rep _vman>>.
</p>
<p>
The townsfolk completely forgive the slavers' earlier deception, and instead decide to butcher some sheep to hold a feast in their honor.
</p><<run new setup.OpportunityTemplate(
'damsel_in_distress', /* key */
'Damsel in Distress', /* name */
'darko', /* author */
['city', 'unit', 'trait', ], /* tags */
1, /* deadline weeks, */
'OpportunityDamselInDistress',
setup.qdiff.hardest40, /* difficulty */
[
[
'OpportunityDamselInDistressOptionSave',
null,
[],
[],
[setup.qc.QuestDirect('damsel_in_distress_save')],
],
[
'OpportunityDamselInDistressOptionKidnap',
null,
[],
[],
[setup.qc.QuestDirect('damsel_in_distress_kidnap')],
],
],
[[setup.questpool.city, 75],],
[
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('damsel_in_distress_save'),
setup.qres.NoQuest('damsel_in_distress_kidnap'),
setup.qres.HasUnitWithTitle('quest_knight_in_training', {job_key: 'slaver'}),
],
)>><p>
A letter has come addressed to the knight-in-training in your company.
The innocent daughter of a noble family in the kingdom has been kidnapped,
and your knight-in-training is urged to save her at the earliest opportunity.
If done properly, this could be the chance to prove themself that your knight-in-training
has been waiting for.
Or alternatively, an innocent noble daughter must fetch a nice price on a market...
</p>Save the noble daughter.Enslave the noble daughter.<<run new setup.OpportunityTemplate(
'flesh_shaper_temple', /* key */
'Flesh Shaper Temple', /* name */
'darko', /* author */
['vale', 'transformation', 'unit', 'money', ], /* tags */
2, /* deadline weeks, */
'OpportunityFleshShaperTemple', /* passage */
setup.qdiff.hard19, /* difficulty */
[ /* choices */
[
'OpportunityFleshShaperTempleOptionRaid',
null,
[],
[],
[setup.qc.QuestDirect('flesh_shaper_temple_raid')],
],
[
'OpportunityFleshShaperTempleOptionKidnap',
null,
[],
[setup.qres.Building(setup.buildingtemplate.slavepens)],
[setup.qc.QuestDirect('flesh_shaper_temple_kidnap')],
],
[
'OpportunityFleshShaperTempleOptionRecruit',
null,
[],
[
setup.qres.Building(setup.buildingtemplate.prospectshall),
setup.qres.HasSlave(),
],
[setup.qc.QuestDirect('flesh_shaper_temple_recruit')],
],
],
[[setup.questpool.vale, 70],], /* questpool */
[ /* requirement */
setup.qres.Building(setup.buildingtemplate.prospectshall),
setup.qres.Building(setup.buildingtemplate.dungeons),
setup.qres.Building(setup.buildingtemplate.trainingchamber),
],
)>><p>
The people in the northern settlements are faced with harsh winter and cold temperature.
These give them an affinity for ice and water, which when mastered, would eventually
allows them control over altering one's body's composition.
Some of the more superstitious folks turns to worship human bodies themselves,
and these people are usually called the flesh-shapers.
</p>
<p>
There are numerous flesh-shaping temples on the <<lore region_vale>>, each having several
priests and apprentices who are adept in the art of <<lore magic_water>>.
There are a number of options you can take.
The simplest option is to raid one of them, which should yield you a good amount of gold.
Next, you could also attempt to kidnap some of these priests, which should prove a highly
valuable slave once trained properly.
Finally, you can attempt to barter one of your slaves to recruit one of these priests.
Surely having a slaver capable of flesh shaping will be useful for your career.
</p>Raid the temple.Kidnap the priest.Give a slave to recruit the priest.<<run new setup.OpportunityTemplate(
'fuckhole_fair', /* key */
'Fuckhole Fair Offer', /* name */
'darko', /* author */
['vale', 'money', 'order', ], /* tags */
1, /* deadline weeks, */
'OpportunityFuckholeFair', /* passage */
setup.qdiff.normal12, /* difficulty */
[ /* choices */
[
'OpportunityFuckholeFairOptionSlaveOrder',
null,
[],
[setup.qres.Building(setup.buildingtemplate.marketingoffice)],
[
setup.qc.SlaveOrderFuckholeFair(),
],
],
[
'OpportunityFuckholeFairOptionContact',
null,
[],
[setup.qres.Building(setup.buildingtemplate.messengerpost)],
[
setup.qc.Contact(setup.contacttemplate.fuckholefair),
],
],
],
[], /* questpool */
[], /* requirements */
)>><p>
Your contact given as a reward from your slave performance in fuckhole fair.
Grants you money each week for 10 weeks.
</p><p>
As a reward for your slave's stellar performance in the fuckhole fair,
you are offered a choice between a contact or a slave order.
</p>Gain slave order.Gain contact.<<run new setup.OpportunityTemplate(
'human_vs_were', /* key */
'Human vs Werewolf', /* name */
'darko', /* author */
['anthro', 'vale', 'unit', 'favor', ], /* tags */
1, /* deadline weeks, */
'OpportunityHumanVsWere',
setup.qdiff.normal14, /* difficulty */
[
[
'OpportunityHumanVsWereOptionDefense',
null,
[],
[],
[setup.qc.QuestDirect('human_vs_were_defense')],
],
[
'OpportunityHumanVsWereOptionOffense',
null,
[],
[],
[setup.qc.QuestDirect('human_vs_were_offense')],
],
],
[[setup.questpool.vale, 50],],
[],
)>><p>
You have been informed that the werewolves of the vale are planning
to launch an assault on one of the settlements there.
This presents an opportunity for you. First, you can inform the villagers
and stand together with them in defense --- the villager will surely be grateful
and may offer you a reward.
Or, you can wait until the attack begins and kidnap some villager during the chaos.
</p>Kidnap villagers.Defend with the villagers.<<run new setup.OpportunityTemplate(
'milk_factory', /* key */
'Factory Facts', /* name */
'darko', /* author */
['city', 'money', 'unit',], /* tags */
1, /* deadline weeks, */
'OpportunityMilkFactory', /* passage */
setup.qdiff.normal29, /* difficulty */
[ /* choices */
[
'OpportunityMilkFactoryOptionRaid',
null,
[],
[],
[setup.qc.QuestDirect('milk_factory_raid')],
],
[
'OpportunityMilkFactoryOptionKidnapMale',
null,
[],
[setup.qres.Building(setup.buildingtemplate.slavepens)],
[setup.qc.QuestDirect('milk_factory_kidnap_male')],
],
[
'OpportunityMilkFactoryOptionKidnapFemale',
null,
[],
[setup.qres.Building(setup.buildingtemplate.slavepens)],
[setup.qc.QuestDirect('milk_factory_kidnap_female')],
],
[
'OpportunityMilkFactoryOptionOfferEmployees',
null,
[],
[],
[setup.qc.QuestDirect('factoryopen_position')],
],
],
[[setup.questpool.city, 25],], /* questpool */
[ /* requirement */
],
)>><p>
The Kingdom of Tor outlawed slavery over ten years ago. But that does not mean
all slaves were immediately freed. Some unscrupulous owner proceed to sell them
immediately to the undercity, who proceed to place them in one of their factories.
</p>
<p>
Little is known about what is produced within those factories, but witnesses often
report weird noises and industrial chugging noises coming out of the factory.
In the coming weeks, one of these factories will undergo renovation, which potentially
allows some of your slavers to sneak in and obtain some of the factory slaves for yourselves.
Or alternatively, the rumors said that the factory is always looking for more "employees"...
</p>Infiltrate the factory, stealing whatever valuable you can.Infiltrate the factory to kidnap one of the male workers.Infiltrate the factory to kidnap one of the female workers.Offer some of your slaves as "employees"<<run new setup.OpportunityTemplate(
'a_most_dangerous_animal__a_modest_offer', /* key */
"A Most Dangerous Animal: A Modest Offer", /* Title */
"darko", /* Author */
[ 'vale', 'order',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_a_most_dangerous_animal__a_modest_offer',
setup.qdiff.hard14, /* difficulty */
[ /* options */
[
'Opportunity_a_most_dangerous_animal__a_modest_offer_0',
'Opportunity_a_most_dangerous_animal__a_modest_offer_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyUnitValue("slave", 1.4, 15000),
setup.qc.MissingUnitForever('slave'), ],
], [
'Opportunity_a_most_dangerous_animal__a_modest_offer_1',
'Opportunity_a_most_dangerous_animal__a_modest_offer_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'slave': [], },
)>><<set _v = Math.min(15000, Math.round($g.slave.getSlaveValue() * 1.4))>>
<p>
During a quest in the last week, a noble has taken a liking to one of their catches during the great hunt —- your slave <<rep $g.slave>>. The gamemaster is offering you up to <<money _v>> for the slave, should you wish to sell <<them $g.slave>>.
(The price will be slightly lower if your player character's level is low.)
</p>Sell the slave<p>
The exchange done, the gamemaster herds their new <<if $g.slave.isHasTrait('training_none')>>disobedient<<else>>meek<</if>> animal <<rep $g.slave>> while you <<uadv $unit.player>> count your new money.
</p>Decline the offer<p>
You decided that <<rep $g.slave>> is worth more than the gamemaster's offer, and decided to decline the offer.
</p><<run new setup.Title(
"aspect_of_chivalry", /* key */
"Aspect of Chivalry", /* name */
"Known to upheld honor and morality (at some point in their life)", /* description */
"was known to uphold honor and morality at some point in their career", /* unit text */
0, /* slave value */
{ /* skill additives */
social: 2,
},
)
>>
<<run new setup.UnitGroup(
'opportunity_aspect_of_chivalry1',
"Princess from the Aspect of Chivalry",
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_royal),
setup.qc.Trait('unit', setup.trait.face_beautiful),
setup.qc.TraitReplace('unit', setup.trait.per_smart),
setup.qc.Trait('unit', setup.trait.per_kind), ],
)>>
<<run new setup.OpportunityTemplate(
'aspect_of_chivalry', /* key */
"Aspect of Chivalry", /* Title */
"darko", /* Author */
[ 'veteran', 'desert', 'special', 'money', 'unit', 'unknown',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_aspect_of_chivalry',
setup.qdiff.hardest53, /* difficulty */
[ /* options */
[
'Opportunity_aspect_of_chivalry_0',
'Opportunity_aspect_of_chivalry_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'),
setup.qc.MoneyCustom(10000), ],
], [
'Opportunity_aspect_of_chivalry_1',
'Opportunity_aspect_of_chivalry_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('knight', setup.qres.HasTitle('aspect_of_chivalry')), ],
[ /* outcomes */
setup.qc.RemoveTitle('knight', 'aspect_of_chivalry'),
setup.qc.Slave('slave', "was a princess of a faraway country in the eastern deserts captured by an evil wizard, then captured by an evil slaver company", undefined),
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
], [
'Opportunity_aspect_of_chivalry_2',
'Opportunity_aspect_of_chivalry_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.BoonizeRandom('knight', 15),
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.NoTraits([setup.trait.per_cruel, setup.trait.per_evil, setup.trait.magic_dark, setup.trait.magic_dark_master], true)),
setup.qc.DoAll([
setup.qc.RemoveTitleGlobal('aspect_of_chivalry'),
setup.qc.AddTitle('knight', 'aspect_of_chivalry')
]),
setup.qc.Nothing()),
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'slave': 'opportunity_aspect_of_chivalry1',
'knight': [], },
[ /* expiration outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
true, /* is must be answered */
)>><p>
To your surprise, the <<princess $g.slave>> is much more shrewd than your slavers initially give <<them $g.slave>> credit for. During the chaos of the fight, <<they $g.slave>> managed to made <<their $g.slave>> way to the stables and grabbed a nearby horse. But <<they $g.slave>> did not immediately escape —- rather, <<they $g.slave>> come to parley first with your slavers, to see if <<their $g.slave>> intentions are pure. Any hint of impurity and the <<princess $g.slave>> will ride the horse to the land yore escaping your slavers.
</p>
<p>
Your slavers have a number of options here. The first option is to simply bargain with the <<princess $g.slave>> — Your slavers will deliver the <<princess $g.slave>> back home safe for a reasonable ransom. The <<princess $g.slave>> will surely see the benefit of this deal, and will most likely agree to it.
</p>
<p>
With a particularly chivalrious knight, you could try to persuade the <<princess $g.slave>> to come over with you. Once <<they $g.slave>> let <<their $g.slave>> guard down, however, your slavers will immediately seize <<them $g.slave>> and tied <<them $g.slave>> good, to be brought home and trained. This will for sure sully the knight's reputation, as well as your reputation with <<rep $company.humandesert>>.
<<if $g.knight.isHasTitle(setup.title.aspect_of_chivalry)>>
While <<rep $g.knight>> is a little <<uadjbad $g.knight>>, <<they $g.knight>> proved their valor some time ago by letting the <<princess $g.knight>> go in a similar situation for free. <<They $g.knight>> could make this plan work, although this will surely sully <<their $g.knight>> mood.
<<else>>
Looking at the assigned knight <<rep $g.knight>> however, you doubt any chivalrious thought ever cross the <<uadjbad $g.knight>> <<urace $g.knight>>'s mind.
<</if>>
</p>
<p>
Finally there is always the option of escorting the <<princess $g.slave>> home safe without pay. But why would ever you do this? Out of the goodness of <<rep $g.knight>>'s heart, perhaps? You actually doubt any of your slavers still have them.
</p>
<<set _u = setup.getUnit({job: setup.job.slaver, title: 'aspect_of_chivalry'})>>
<<if _u && _u != $g.knight>>
<p>
<<dangertext 'Warning'>>: Choosing the third option will remove <<rep setup.title.aspect_of_chivalry>> from <<rep _u>>!
</p>
<</if>>Escort for pay<p>
The trip was simple and eventless — although the <<princess $g.slave>> kept <<their $g.slave>> distance from your slavers throughout the trip. Once your slavers arrived at the <<princess $g.slave>> home, they are paid the promised escort fee, a whopping <<money 10000>>. Their job done, led by <<rep $g.knight>>, your slavers marched back home.
</p>Enslave<p>
Somehow, the <<uadjbad $g.knight>> slaver is known to be chivalrious in character. The <<princess $g.slave>> apparently know it too, and decided to put <<their $g.slave>> trust in the supposed knight. As the <<princess $g.slave>> lower <<their $g.slave>> guard, once <<they $g.slave>> no longer sleep with one eye open your slavers got to work. During <<their $g.slave>>, your slavers secured the <<princess $g.slave>> limbs. Awaking from the disturbance, the last thing the <<princess $g.slave>> saw was the supposed knight <<rep $g.knight>> personally putting a blindfold and a gag on the poor struggling <<princess $g.slave>> with a <<uadjper $g.knight>> smile.
</p>
<p>
There is little doubt that whatever chivalrious reputation <<rep $g.knight>> had built so far, it is all ruined.
</p>Escort for free<p>
Oh well, why not. Every once and a while you and your slavers have to do a good deed, so today seems to be the <<princess $g.slave>>'s lucky day. Led by <<rep $g.knight>>, your slavers escorted the <<princess $g.slave>> through the sand dunes back to <<their $g.slave>> country.
</p>
<p>
Refusing any pay, your slavers were treated to a banquet at the palace. <<rep $g.knight>> seemed to enjoy <<themself $g.knight>> quite a bit!
<<if $g.knight.isHasTrait('per_cruel')>>
<<set _trait = setup.trait.per_cruel>>
<<elseif $g.knight.isHasTrait('per_evil')>>
<<set _trait = setup.trait.per_evil>>
<<elseif $g.knight.isHasTrait('magic_dark')>>
<<set _trait = setup.trait.magic_dark>>
<<else>>
<<set _trait = null>>
<</if>>
<<if !_trait>>
Soon after, the <<princess $g.knight>> made sure that <<rep $g.knight>>'s chivalry is known far and wide for defeating an evil wizard and saving a helpless <<princess $g.knight>> from a land afar.
<<else>>
Unfortunately, <<rep $g.knight>> showed
<<if _trait == setup.trait.magic_dark>>
mastery over <<rep setup.trait.magic_dark>> during the banquet.
<<elseif _trait == setup.trait.per_evil>>
<<their $g.knight>> horrifyingly evil personality during a drunkon stupor.
<<else>>
<<their $g.knight>> cruelty when a maid accidentally spilled a drink on <<their $g.knight>> <<uequipslot $g.knight 'legs'>>.
<</if>>
Seeing this, the <<princess $g.slave>> dropped all of <<their $g.slave>> plans of rewarding the slaver with good words.
<</if>>
</p><<run new setup.Title(
"aspect_of_experience", /* key */
"Aspect of Experience", /* name */
"Known far and wide for their vast experience (or at least they once were)", /* description */
"was known far and wide to possess a vast amount of experience, at least at some point in their life", /* unit text */
0, /* slave value */
{ /* skill additives */
sex: 2,
},
)
>>
<<run new setup.UnitGroup(
'opportunity_aspect_of_experience1',
"Aspect of Experience: Chief",
[
[setup.unitpool.race_humanvale_male, 0.5],
[setup.unitpool.race_humanvale_female, 0.5], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_wiseman), ],
)>>
<<run new setup.OpportunityTemplate(
'aspect_of_experience', /* key */
"Aspect of Experience", /* Title */
"darko", /* Author */
[ 'vale', 'veteran', 'special', 'order', 'unknown',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_aspect_of_experience',
setup.qdiff.hardest51, /* difficulty */
[ /* options */
[
'Opportunity_aspect_of_experience_0',
'Opportunity_aspect_of_experience_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'),
setup.qc.Money(12000),
setup.qc.MissingUnitForever('slave'), ],
], [
'Opportunity_aspect_of_experience_1',
'Opportunity_aspect_of_experience_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SlaveOrderAspectOfExperience(),
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'), ],
], [
'Opportunity_aspect_of_experience_2',
'Opportunity_aspect_of_experience_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'),
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.AnyTrait([setup.trait.join_senior, setup.trait.bg_slaver, setup.trait.bg_whore, setup.trait.bg_demon])),
setup.qc.DoAll([
setup.qc.RemoveTitleGlobal('aspect_of_experience'),
setup.qc.AddTitle('knight', 'aspect_of_experience'),
setup.qc.BoonizeRandom('knight', 30)
]),
setup.qc.DoAll([
setup.qc.BoonizeRandom('knight', 30),
setup.qc.BoonizeRandom('knight', 30),
setup.qc.BoonizeRandom('knight', 30)
])), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'knight': [
],
'slave': [
],
'chief': 'opportunity_aspect_of_experience1', },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Having spent weeks so thoroughly entertained by <<rep $g.knight>>'s surprisingly experienced handling of the slave <<rep $g.slave>>, the chief's now very worldly mind is very open on what kind of rewards your slavers can walk away with.
</p>
<p>
As the first option, the chief generously offered a flat amount of <<money 12000>> to buy <<rep $g.slave>> permanently, to be reassigned as the first member as <<their $g.chief>> no doubt growing harem.
<<if $g.slave.getSlaveValue() < 6000>>
Looking at the slave, you probably won't be able to get a better deal anywhere else.
<<elseif $g.slave.getSlaveValue() < 12000>>
It's a decent price, although it's understandable if you want to hold on to <<rep $g.slave>> to be sold elsewhere later.
<<else>>
Understandably the new chief-slaver still does not understand the true value of the slave, and accepting this deal will no doubt undersells <<rep $g.slave>> for <<their $g.slave>> true worth.
<</if>>
</p>
<p>
Alternatively, if you are not willing to part with <<rep $g.slave>>, offers to buy a slave as similar as possible to <<rep $g.slave>> from your company. <<They $g.chief>> no doubt will pay very well for such an oddly specific request.
</p>
<p>
Finally, there is always the option of taking the chief's original offer of making <<rep $g.knight>> learn as much as <<they $g.knight>> can from the chief. Surely such knowledge will prove invaluable in the future? After all, what greater gift is there than knowledge?
</p>
<<set _u = setup.getUnit({job: setup.job.slaver, title: 'aspect_of_experience'})>>
<<if _u && _u != $g.knight>>
<p>
<<dangertext 'Warning'>>: Choosing the third option will remove <<rep setup.title.aspect_of_experience>> from <<rep _u>>!
</p>
<</if>>Just sell the slave<p>
The deal made, <<rep $g.knight>> casted on last <<uadjgood $g.knight>> glance at <<rep $g.slave>> before the overjoyed chief put a permanent collar around <<rep $g.slave>>'s neck, no doubt eager to introduce to <<name $g.slave>> the benefits of becoming a chieftain's personal slave.
Your slavers try not to dwell too much on the loss of <<rep $g.slave>> and assure themselves that the huge bag of money they returned with is much more than enough as a compensation for <<rep $g.slave>>.
</p>Get that slave order<p>
<<rep $g.knight>> finalized the slave order with the chieftain. The slave order detailed the almost likeliness of <<rep $g.slave>>, but with one key difference: the unit must be of a different race, no doubt to satisfy some perverse pleasure of the once-prude chieftain... Perhaps the <<uadjgood $g.knight>> slaver <<rep $g.knight>> was a bit too successful in introducing the experienced chief to the world of carnal pleasure...
</p>Listen to the stories??? Why would you do this<p>
Ah yes, the teaching of the chieftain. What other reward would you want? Money? Slaves? Nothing could certainly compare with the chieftain's experience, or so <<rep $g.knight>> thought.
</p>
<p>
The coming days pass in a blur as <<rep $g.knight>> spent every waking moment sitting in front of the chief, who has returned (at least for the time being) to their previous occupation of a wise<<man $g.chief>>. <<rep $g.knight>> <<uadv $g.knight>> listened to the lengthy stories from the chief, detailing the exploits, hardships, and other histories of the surrounding tribes.
</p>
<<if $g.knight.isHasTrait('join_senior') ||
$g.knight.isHasTrait('bg_slaver') ||
$g.knight.isHasTrait('bg_whore') ||
$g.knight.isHasTrait('bg_demon')>>
<p>
<<if $g.knight.isHasTrait('bg_demon')>>
Having a demonic background, <<rep $g.knight>> is no stranger to the art of slaving and is greatly experienced in it.
<<elseif $g.knight.isHasTrait('bg_whore')>>
Coming from a whorehouse, <<rep $g.knight>> surely qualifies
as an "experienced" slaver.
<<elseif $g.knight.isHasTrait('bg_slaver')>>
Having been a slaver long before joining your company,
<<rep $g.knight>> no doubt qualifies as an experienced slaver.
<<else>>
Having been with your company for over two years, there is no doubt that <<rep $g.knight>> is an experienced slaver.
<</if>>
Their experiences combined with the new wealth of stories from the chief makes <<rep $g.knight>> appears much more experienced than before to anyone else, worthy of the title
<<rep setup.title.aspect_of_experience>>.
</p>
<<else>>
<p>
Lacking much experience in slaving, having not coming from any of slaving related backgrounds
<<rep setup.trait.bg_demon>><<rep setup.trait.bg_slaver>><<rep setup.trait.bg_whore>><<rep setup.trait.join_senior>>,
there were only so much that <<rep $g.knight>> thick <<uhead $g.knight>> could absorb from the stories. Still, the stories were inspiring and you can definitely see a lighter step from <<rep $g.knight>> in the coming days.
</p>
<</if>><<run new setup.Title(
"aspect_of_wisdom", /* key */
"Aspect of Wisdom", /* name */
"Known to possess great wisdom (at some point in their life)", /* description */
"was known to possess wisdom much beyond their peers at some point in their career", /* unit text */
0, /* slave value */
{ /* skill additives */
knowledge: 2,},
)
>>
<<run new setup.OpportunityTemplate(
'aspect_of_wisdom', /* key */
"Aspect of Wisdom", /* Title */
"darko", /* Author */
[ 'veteran', 'forest', 'special', 'item', 'unknown',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_aspect_of_wisdom',
setup.qdiff.harder52, /* difficulty */
[ /* options */
[
'Opportunity_aspect_of_wisdom_0',
'Opportunity_aspect_of_wisdom_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Equipment(setup.equipmentpool.knowledge_good),
setup.qc.Money(2500),
setup.qc.RemoveTitle('knight', 'aspect_of_wisdom'), ],
], [
'Opportunity_aspect_of_wisdom_1',
'Opportunity_aspect_of_wisdom_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitleGlobal('aspect_of_wisdom'),
setup.qc.AddTitle('knight', 'aspect_of_wisdom'),
setup.qc.BoonizeRandom('knight', 10), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'knight': [
], },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Someway, somehow, <<rep $g.knight>> turned to be virtuous enough to lead your slavers to the long-lost library of A'ssera. Standing on the gates of the library, your slavers must now decide what to do.
</p>
<p>
As the first option, ancient and pristine libraries such as these surely hold artifacts hidden within. Your slavers could probably grab some of the more valuable ones to bring home.
</p>
<p>
Alternatively, you could ask your slavers especially <<rep $g.knight>> to.... err, study in the library. After all, is there any greater treasure than wisdom? Money can't buy wisdom, after all...
</p>
<<set _u = setup.getUnit({job: setup.job.slaver, title: 'aspect_of_wisdom'})>>
<<if _u && _u != $g.knight>>
<p>
<<dangertext 'Warning'>>: Choosing the second option will remove <<rep setup.title.aspect_of_wisdom>> from <<rep _u>>!
</p>
<</if>>Steal some artifacts<p>
With some hesitation, <<rep $g.knight>> led your slavers to scour through the bookcases of the library, in search of artifacts. After a few scattered bookcases, they found an ancient corridor hidden behind one of the book cases. The corridor ends with a treasure chest, containing a valuable and rare piece of sage's clothes, together with some random baubles.
</p>
<p>
Mysteriously, as your slavers left the library, the books and bookcases magically sorted themselves back into proper position, as if nothing had happened before...
</p>Study the books<p>
Your slavers spent a week studying the trove of knowledge.
While most of them probably did not learn anything interesting,
<<rep $g.knight>> seems different.
The normally <<uadjper $g.knight>> <<urace $g.knight>> now speaks
as if possessed by a wise sage, spouting advice upon advice.
Eventually the "wisdom-ish" trance stopped, and <<rep $g.knight>> returned
to their normal <<uadjgood $g.knight>> self.
</p>
<p>
Still, <<rep $g.knight>> somehow has gained a reputation for being quite wise now.
Only time will tell whether or not this will prove useful...
</p><<run new setup.OpportunityTemplate(
'at_what_cost', /* key */
"At What Cost", /* Title */
"darko", /* Author */
[ /* tags */
'sea', 'special', 'unknown',
],
1, /* expiration weeks */
'Opportunity_at_what_cost',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_at_what_cost_0',
'Opportunity_at_what_cost_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTraitsRandom('you', [setup.trait.per_slow, setup.trait.per_submissive, setup.trait.per_masochistic, setup.trait.bg_slave], 1, false, true),
setup.qc.FreePlayer(),
],
],
[
'Opportunity_at_what_cost_1',
'Opportunity_at_what_cost_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveRandomTraitWithTag('you', 'bg'),
setup.qc.FreePlayer(),
],
],
[
'Opportunity_at_what_cost_2',
'Opportunity_at_what_cost_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('you', 101),
setup.qc.Injury('you', 50),
setup.qc.FreePlayer(),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': null,
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Due to recent events, you have found yourself in an unfortunate predicament. You are currently en-route to board a ship, no doubt to be sold as a valuable slave in some distant land across the sea. If you want to escape, you have to act fast, and now!
</p>
<p>
Being a senior slaver yourself, you know that such an escape will be almost impossible, if you are not bold.
<<if $g.you.isHasTrait('per_submissive')>>
(Not to mention that little submissive part of you that keep telling you to resign to your fate.)
<<elseif $g.you.isHasTrait('per_dominant')>>
But boldness has always been a part of your dominant mind.
<<else>>
You have to muster all the strength you can gather.
<</if>>
But more importantly, you will certainly need to make a choice, to sacrifice a part of you in order to make the escape possible.
</p>
<p>
You can sacrifice your sanity, which will surely has a permanent impact on your psyche...
</p>
<p>
You can sacrifice your memory, which will likely make you forgot certain skills you have in the past...
</p>
<p>
Or you can sacrifice your body and mind, which will cripple you for a year or two, but with no other permanent effect...
</p>
<p>
Either way, you have to make a decision now and fast!
</p>At the cost of your sanity<p>
You decided to feign to the slavers that you have given up on escaping, and adopted the mindset of a slave. The ruse eventually paid off, as the slavers undoed your bindings seeing the compliant slave that they think you have became. You managed to escape during a night, without looking back.
</p>
<p>
Still, you can't help but feel that some part of this slave mindset will haunt you for the rest of your days...
</p>At the cost of your memory<p>
You decided to feign to the slavers that your mind has been broken. You spend several days drooling like a mindbroken slave, unfocused at everything. The ruse eventually paid off, as the slavers undoed your bindings seeing the mindbroken slave that they think you have became. You managed to escape during a night, without looking back.
</p>
<p>
Still, you are deeply affected by the ruse, and you can feel some part of your memory flew away, like it was never there to begin with...
</p>At the cost of your body and minnd<p>
You decided to rebel against the slavers, fighting them and injuring some of them in the struggle. In retaliation, the slavers exacted their revenge on you, leaving you gasping and severely beaten by the end of the ordeal. Seeing no more value in the broken slave that you have become, the slavers dumped you in one of the villages along the way.
</p>
<p>
You were able to make it back to your company with your mind mostly intact, but with heavy injuries and a trauma to haunt you for a year or two...
</p><<run new setup.Title(
"quest_time_traveler_0", /* key */
"Time Traveler", /* name */
"Did not come from this timeline", /* description */
"did not originate from this timeline", /* unit text */
10000, /* slave value */
{ /* skill additives */
arcane: 4,},
)
>>
<<run new setup.OpportunityTemplate(
'branching_timeline', /* key */
"Branching Timeline", /* Title */
"darko", /* Author */
[ /* tags */
'unit',
'special',
'fort',
],
1, /* expiration weeks */
'Opportunity_branching_timeline',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_branching_timeline_0',
'Opportunity_branching_timeline_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTitle('child', 'quest_time_traveler_0'),
setup.qc.Slaver('child', "was your child who got pulled from the future in an errant ritual", undefined),
setup.qc.VarRemove('future_assassin_progress'),
setup.qc.VarSet('future_assassin_cooldown', '1', 400),
setup.qc.RemoveTagGlobal('future_assassin_parent'),
],
],
[
'Opportunity_branching_timeline_1',
'Opportunity_branching_timeline_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTitle('child', 'quest_time_traveler_0'),
setup.qc.Slave('child', "waswas your child who got pulled from the future in an errant ritual", undefined),
setup.qc.VarRemove('future_assassin_progress'),
setup.qc.VarSet('future_assassin_cooldown', '1', 400),
setup.qc.RemoveTagGlobal('future_assassin_parent'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'child': 'all',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Finally, you have to decide what to do with <<rep $g.child>>, your future <<daughter $g.child>> from an alternate timeline...
</p>Recruit<p>
And so it ends.
You welcome your surprise <<daughter $g.child>> into your <<uarms $unit.player>>. <<They $g.child>> is your <<daughter $g.child>> both by blood and not by blood, but you will cherish <<them $g.child>> all the same.
</p>
<p>
With you and your <<daughter $g.child>> in the company, nothing could stand in its way!
</p>Enslave<p>
And so it ends. Your <<daughter $g.child>> (but not really) is gagged and sent to the slave pens, for you to decide what to do later. A time traveler will surely fetch a nice price in the market, if anything.
</p><<run new setup.OpportunityTemplate(
'branching_timeline__decision', /* key */
"Branching Timeline: Decision", /* Title */
"darko", /* Author */
[ /* tags */
'special',
'unknown',
],
1, /* expiration weeks */
'Opportunity_branching_timeline__decision',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_branching_timeline__decision_0',
'Opportunity_branching_timeline__decision_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.FriendshipWithYou('parent', 500),
setup.qc.Opportunity('branching_timeline', {
child: "child",
}),
],
],
[
'Opportunity_branching_timeline__decision_1',
'Opportunity_branching_timeline__decision_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.LoverExist()),
],
[ /* outcomes */
setup.qc.Opportunity('branching_timeline', {
child: "child",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'child': [
],
'parent': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
You have captured the assailant who once assaulted your lover.
While the threat is over, one last question looms in your head.
If what the assailant is claiming is true, then if you continue to love
someone but <<rep $g.parent>>, then <<they $g.child>> will cease to exist.
</p>
<p>
Would you choose love or the life of a stranger?
</p>Become lovers with <<if $g.parent>><<name $g.parent>><</if>><<set _u = $unit.player.getLover()>>
<<if _u == $g.parent>>
<p>
Well.. you are already lovers with <<rep $g.parent>> already. There is nothing to do here, and <<rep $g.child>> can continue to exist regardless of your choice.
</p>
<<elseif _u>>
<p>
Taking pity on the poor time traveler, you have decided to hook up with <<rep $g.parent>> instead. You said one last goodbye to your now ex-lover <<rep _u>>, before tentatively testing your new lover's embrace.
</p>
<</if>>
<<run setup.qc.HookupWithYou('parent').apply($gQuest)>>
<p>
Locked in an awkward embrace, you try your best to appear comfortable gazing at your new lover's <<ueyes $g.parent>>. Sure, this entire lover thing might be a thing of convenience just to ensure that <<rep $g.child>> continue to exist, but you have no doubt that given time, you can certainly develop affection towards <<rep $g.parent>>. ...or you can simply change your mind later — that's possible too.
</p>
<p>
You still have to decide what to do with the time-traveler.
</p>Stay with your lover<<set _u = $unit.player.getLover()>>
<<if _u == $g.parent>>
<p>
Well.. you are already lovers with <<rep $g.parent>> already. There is nothing to do here, and <<rep $g.child>> can continue to exist regardless of your choice.
</p>
<<elseif !_u>>
<<else>>
<p>
Between the choice of love and a stranger, you ultimately choose love. After all, what is a stronger force than love? Just thinking about <<rep _u>> makes your heart feels giddy, and the world would not be the same without the <<urace _u>> by your side.
</p>
<p>
Seeing your decision, <<rep $g.child>> resigned to <<their $g.child>> fate. Soon enough, <<their $g.child>> body begins to glow white — but not disappearing! In fact, as you and your <<repfull _u>> continue to be locked in a tight embrace, your <<daughter _u>> visibly transform before you.
</p>
<<set _father = $unit.player>>
<<set _mother = _u>>
<<if !_father.isHasDick()>>
<<set _mother = $unit.player>>
<<set _father = _u>>
<</if>>
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<if Math.random() < 0.5>>
<<set _preference = $settings.getGenderPreference(setup.job.slave)>>
<</if>>
<<set _w = setup.UnitBirth.generateChild(_father, _mother, _preference)>>
<p>
<<= setup.Text.Unit.Bodyswap.bodyswap($g.child, _w)>>
</p>
<<run setup.qcImpl.Bodyswap.doBodySwap($g.child, _w)>>
<<run _w.delete()>>
<p>
The transformation ended, <<rep $g.child>> appearance has drastically changed. The <<urace $g.child>> lost all resemblance to <<rep $g.parent>>, and instead resembles much of you and your lover. It seems that the prophecy was incorrect — <<they $g.child>> would not be disappear, but would instead align <<themself $g.child>> to fit with the new timeline. <<rep _u>> tentatively touched <<their _u>> <<daughter $g.child>>'s face while you decide what to do now...
</p>
<</if>><<run new setup.OpportunityTemplate(
'capital_of_slaves', /* key */
"Capital of Slaves", /* Title */
"darko", /* Author */
[ 'desert', 'unit', 'order',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_capital_of_slaves',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_capital_of_slaves_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('capital_of_slaves__browse_wares'), ],
], [
'Opportunity_capital_of_slaves_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('capital_of_slaves__sell_wares'), ],
], [
'Opportunity_capital_of_slaves_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('capital_of_slaves__steal_wares'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('capital_of_slaves__browse_wares'),
setup.qres.NoQuest('capital_of_slaves__sell_wares'),
setup.qres.NoQuest('capital_of_slaves__steal_wares'), ],
)>><p>
The largest city in the desert, the <<lore location_qarma>>, houses the perhaps largest slave market in the region. All kinds of slaves are available in the market —- from nearby ex-raiders who were turned slaves, to exotic travelers unlucky enough to be sold in the market.</p>
<p>
You have an opportunity to send a group of slavers to visit the market, and there are several options you can take. The safest option is to simply browse the wares, and noting particularly interesting slaves to purchase. Another option is to sell your own slaves in the market —- the market is highly competitive however and you won't get too great of a price, but it very easy to get plenty of the orders. The last option is to attempt to sneak in at night and steal some of the slaves —- this will net you quite a bit of slaves but it will be very dangerous for your slavers should they fail.</p>Browse WaresSell WaresSteal Wares<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_showdown___approach2', /* key */
"Choose Your Own Adventure: The Showdown - Approach", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_showdown___approach',
setup.qdiff.hardest39, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_showdown___approach2_0',
'Opportunity_choose_your_own_adventure__the_showdown___approach_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_caution', 'caution', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '7', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_showdown___approach2_1',
'Opportunity_choose_your_own_adventure__the_showdown___approach_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_caution', 'courage', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '7', -1),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_showdown___approach', /* key */
"Choose Your Own Adventure: The Showdown - Approach", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_showdown___approach',
setup.qdiff.hardest39, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_showdown___approach_0',
'Opportunity_choose_your_own_adventure__the_showdown___approach_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_caution', 'caution', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '7', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_showdown___approach_1',
'Opportunity_choose_your_own_adventure__the_showdown___approach_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_caution', 'courage', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '7', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Opportunity_choose_your_own_adventure__the_showdownCommon1'>>
<p>
As the sun rises, the <<= $varstore.get('choose_your_own_adventure_lovers')>> are prepared to finish their duties.
They headed to the site with...
</p><<include 'Opportunity_choose_your_own_adventure__the_interlude___bondCommon'>>
<p>
Fully equipped
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
head to toe with armor,
<<else>>
with magical robes and artefacts,
<</if>>
the pair of siblings went to the desert with the help of the same mercenary company they have been patroning. They travelled for days, each day reaching closer and closer to their destination.
And finally, the destination is just one more day of travel.</p>
<<set $g = {
hero1: setup.unitgroup.quest_choose_your_own_adventure_hero1.getOnlyUnit(),
hero2: setup.unitgroup.quest_choose_your_own_adventure_hero2.getOnlyUnit(),
}>>
<p>
In this final decisive day, the party decided to camp in
<<if $varstore.get('choose_your_own_adventure_oasis') == 'oasis'>>
an oasis teeming with life.
<<else>>
a secluded cavern shielding them from harsh desert winds.
<</if>>
As the mercenaries rest, the two
<<= $varstore.get('choose_your_own_adventure_lovers')>> are restless, nervous for the upcoming fight.
They then seek each other's company for the night,
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
enjoying one last moment in each other's embrace.
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
Stripped of their armor,
<<else>>
Stripped of their robes,
<</if>>
<<= $g.hero1.getName()>> touched <<their $g.hero1>>
<<ugenital $g.hero1>> against <<= $g.hero2.getName()>>'s <<ugenital $g.hero2>>, enjoying the sensation of rubbing against each other.
As the night goes, they explore each other's body further and further, putting their tongue in places where it should have never gone to.
<<if $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>
All pretense of disgust from the incestuous relationship completely gone.
<</if>>
Lust and desire overcame them, and the nervousness was soon a thing of the past as they fell asleep
<<if $g.hero1.isHasVagina()>>
with their breasts pushing against each other.
<<else>>
with <<= $g.hero1.getName()>>'s <<udick $g.hero1>> inside
<<= $g.hero2.getName()>>.
<</if>>
<<elseif $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
dropping their rivalry for one fateful and calm night. They shared good memories and drink away the bad, and in time they forgot about the nervousness and fell asleep next to each other.
<<else>>
enjoying the company of their most trusted friend. They shared good memories and drink away the bad, and in time they forgot about the nervousness and fell asleep next to each other.
<</if>>
<<if $varstore.get('choose_your_own_adventure_oasis') == 'oasis'>>
They sleep peacefully next to the calm oasis of the desert.
<<else>>
They sleep peacefully protected from the harsh desert winds by the cavern walls.
<</if>>
</p><<include 'Opportunity_choose_your_own_adventure__the_showdownCommon1'>>
<p>
As the sun rises, the <<= $varstore.get('choose_your_own_adventure_lovers')>> are prepared to finish their duties.
They headed to the site with
<<= $varstore.get('choose_your_own_adventure_caution')>> until they eventually arrive at the site:
a foreboding crater with dark clouds looming eternally over it...
</p><<include 'Opportunity_choose_your_own_adventure__the_showdownCommon2'>>
<p>
The book suddenly vanished right as you finish reading the chapter, leaving no hint on what's to come.
</p>Caution (Default)CautionCourageCourage (Default)<<run new setup.OpportunityTemplate(
'choose_your_own_adventure_', /* key */
"Choose Your Own Adventure!", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure_',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__0',
'Opportunity_choose_your_own_adventure__0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_beginning___relation2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_beginning___relation),
])
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.Cooldown(10),
setup.qres.OpportunityUnique(),
setup.qres.VarNull('choose_your_own_adventure_progress'),
setup.qres.Building(setup.buildingtemplate.mailroom),
],
)>><p>
A book has mysteriously appeared on your desk. On the cover is written "Choose Your Own Adventure" with a very sloppy and barely legible handwriting. The book looks slightly creepy, but you can sense that it is inviting you to read it...
</p>Open Chapter 1...<p>
You opened the book. Another sloppy handwriting fills the first page, which explains how the book works. Apparently it is a magical "Choose Your Own Adventure" book, where you decide what the heroes of the book do. You do so by making changes to the book as you go.
</p>
<p>
You can try to read the book, if you'd like?
</p><<run new setup.OpportunityTemplate(
'choose_your_own_adventure__chapter_2', /* key */
"Choose Your Own Adventure: Chapter 2", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__chapter_2',
setup.qdiff.normal19, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__chapter_2_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_powerup___goal2'),
setup.qc.Opportunity('choose_your_own_adventure__the_powerup___goal'),
]),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '2'), ],
)>><p>
Remember the book with the sloppy "Choose Your Own Adventure" written over its cover you encountered in your office some time ago? Well... it's back, and apparently thicker than before with Chapter 2 all ready to be read. You can continue reading it, if you wish...
</p>Open Chapter 2...<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__chapter_3', /* key */
"Choose Your Own Adventure: Chapter 3", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__chapter_3',
setup.qdiff.normal29, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__chapter_3_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_interlude___bond3'),
setup.qc.Opportunity('choose_your_own_adventure__the_interlude___bond2'),
setup.qc.Opportunity('choose_your_own_adventure__the_interlude___bond'),
]),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '4'), ],
)>><p>
Without fanfare, a dark covered book pops up out of thin air in front of you at your desk.
It's the same book as before, what's with the sloppy "Choose Your Own Adventure" written over its cover. It seems to have a newly written Chapter 3 inside...
</p>Open Chapter 3...<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__chapter_4', /* key */
"Choose Your Own Adventure: Chapter 4", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', ], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__chapter_4',
setup.qdiff.hardest39, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__chapter_4_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_showdown___rest2'),
setup.qc.Opportunity('choose_your_own_adventure__the_showdown___rest'),
]),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '6'), ],
)>><p>
A dark foreboding book calmly sits on your desk as you enter your office today. By now, you are already accustomed to the book —- the one with the sloppy "Choose Your Own Adventure" written over its cover. A new Chapter 4 promises the finale that you have been waiting for...
</p>Open Chapter 4...<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__final_chapter_true_end', /* key */
"Choose Your Own Adventure: Final Chapter", /* Title */
"darko", /* Author */
[ 'special', 'fort', 'unknown', 'veteran', ], /* tags */
setup.INFINITY, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__final_chapter',
setup.qdiff.extreme49, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__final_chapter2_0',
'Opportunity_choose_your_own_adventure__final_chapter_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('heroic_end'), ],
], [
'Opportunity_choose_your_own_adventure__final_chapter2_1',
'Opportunity_choose_your_own_adventure__final_chapter_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '9', -1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.VarEqual('choose_your_own_adventure_progress', '8'),
setup.qres.VarLte('choose_your_own_adventure_changes', '2'),
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('heroic_end'),
setup.qres.Building(setup.buildingtemplate.veteranhall), ],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__final_chapter', /* key */
"Choose Your Own Adventure: Final Chapter", /* Title */
"darko", /* Author */
[ 'fort', 'unknown', 'veteran', ], /* tags */
setup.INFINITY, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__final_chapter',
setup.qdiff.extreme49, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__final_chapter_0',
'Opportunity_choose_your_own_adventure__final_chapter_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('heroic_end'), ],
], [
'Opportunity_choose_your_own_adventure__final_chapter_1',
'Opportunity_choose_your_own_adventure__final_chapter_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Never('As you move your arms to write on the book, darkness surrounds your fingers causing you to pull away. It seems that the book has become too corrupted from your tampering with it so far.'), ],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '9', -1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.VarEqual('choose_your_own_adventure_progress', '8'),
setup.qres.VarGte('choose_your_own_adventure_changes', '3'),
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('heroic_end'),
setup.qres.Building(setup.buildingtemplate.veteranhall), ],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Once again the book bearing the sloppy written "Choose Your Own Adventure" appears on your desk.
By now it proves to be an enjoyable read for you and happily await its return.
You recall that so far, you have made <<= $varstore.get('choose_your_own_adventure_changes')>> modifications to the story,
<<if $varstore.get('choose_your_own_adventure_changes') > 2>>
a quite significant number of changes, which greatly alters the
<<= $varstore.get('choose_your_own_adventure_siblings')>>'s
fate.
<<else>>
a modest amount of changes, barely tampering with the
<<= $varstore.get('choose_your_own_adventure_siblings')>>'s fate.
<</if>>
</p>
<p>
You open what seems to be the final chapter of the book, Chapter 5, and begin to read...
</p>
<<include 'Opportunity_choose_your_own_adventure__final_chapterCommon'>>
<p>To...
</p>
<p>
<<if $varstore.get('choose_your_own_adventure_changes') > 2>>
As usual, you would like to make changes to the story —- after all, the default choice of "Ending you" is certainly not good for you!
But this time, as you moved your <<uhands $unit.player>> into the book, dark tendrils begin to shoot ouf of the book, preventing you from making any changes to it.
Your attempt to force through the darkness only reward you with great pain. As it stood right now, the book is written to tell of your demise, the king of evil masquerading as a mercenary leader.
It seems your actions of tampering with the book has its price, as the book now too has a strong grip upon your soul just like it has upon the
<<= $varstore.get('choose_your_own_adventure_lovers')>>.
There is no other choice for you but to proceed reading...
<<else>>
As usual, you would like to make changes to the story —- after all, the default choice of "Ending you" is certainly not good for you!
But this time, as you moved your <<uhands $unit.player>> into the book, dark tendrils begin to shoot ouf of the book. But they seems to remain ethereal, unable to affect your body. It seems that because you have tampered minorly with the book so far, it does not have a strong grip upon your soul, and at this very important moment, you are still able to make changes to the book.
You are now given the option to alter the end of the book,
to carve yourself a better ending.
<</if>>
</p>End You (Default)End You (Default)<<include 'Opportunity_choose_your_own_adventure__the_showdownCommon2'>>
<p>
The fight was fierce, as a demonic horde suddenly spawned from all around the crater, surrounding the
<<= $varstore.get('choose_your_own_adventure_lovers')>> and the mercenaries. While they fend off the invading horse, the leader of the demons appeared before them.
With the mercenaries backing them, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
carefully
<<else>>
bravely<</if>>
came into blows with the demon leader.
</p>
<p>
After a long and fierce battle, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
were victorious. The
<<= $varstore.get('choose_your_own_adventure_lovers')>>
stood there, unmoving, staring at the corpse that was once their arch enemy.
But deep down they know their resolve has been shaken, for the demon taunted them during the fight with nothing but facts, a fact that deeply pierce their souls.
Was the demon truly the one responsible for the destruction of their village?
</p>
<p>
They thought back to beginnings of their journey, where they were just an ordinary pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
living peacefully on the village with nothing for want until the fateful day that their village got raided to the ground and they
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
swore revenge.
<<else>>
look for peace.
<</if>>
Who was it that they met that day, after the burning, walking non-chalantly from the fire?
</p>
<p>
Who was it? Who was it that seems to always know where they need to go —- who was able to locate the almost impossibly hidden sage in the forest, who was able to scour through the sea of junk in search of the rare good equipment, and who was able to guide through the desert without fail to a conveniently located crater?
</p>
<p>
There can be only one way for the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
to truly get their
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
revenge.
<<else>>
peace.
<</if>>
For the last they again take up their
<<if $varstore.get('choose_your_own_adventure_strength')>>
sword
<<else>>
staff
<</if>>
and begin their final quest.
</p><<include 'Opportunity_choose_your_own_adventure__final_chapterCommon'>>
<p>
To end you.
</p>
<p>
This time, the book never disappear, seemingly having fulfilled its purpose to entertain its demonic master. But you know that a certain doom is looming upon your company, and sooner or later you must act.
</p>???Find Out the Truth<<include 'Opportunity_choose_your_own_adventure__final_chapterCommon'>>
<p>
To find out the real truth.
</p>
<p>
The truth is hiding out there somewhere. To amuse themselves, the demon must be watching all these unfold from somewhere. There must be another piece to this story that never fits in. You can try to figure this piece out, and surely there you too will meet again
with the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
to finish this once and for all.
</p>
<p>
The book never disappears this time.
</p><<run new setup.OpportunityTemplate(
'choose_your_own_adventure__path_of_divergence___revenge2', /* key */
"Choose Your Own Adventure: The Beginning - Purpose of Life", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge2_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender2'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender3'),
]),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_revenge', 'revenge', -1), ],
], [
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge2_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender2'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender3'),
]),
setup.qc.VarSet('choose_your_own_adventure_revenge', 'peace', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__path_of_divergence___revenge', /* key */
"Choose Your Own Adventure: The Beginning - Purpose of Life", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender2'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender3'),
]),
setup.qc.VarSet('choose_your_own_adventure_revenge', 'revenge', -1), ],
], [
'Opportunity_choose_your_own_adventure__path_of_divergence___revenge_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender2'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___gender3'),
]),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_revenge', 'peace', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Once upon a time, within the <<lore region_vale>> of yore live
a pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>.
Together with their families, they live a peaceful live with the rest of the village. But one day,
raiders from the mountain came without warning, burning the village and raping all the women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> were outside when the raid happens, and were spared from the attack, but when they came back, all they held dear had been lost.
With nothing left in their name, they swore to...
</p>Get Revenge (Default)Get RevengeFind PeaceFind Peace (Default)<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_beginning___gender3', /* key */
"Choose Your Own Adventure: The Beginning - Gender", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_beginning___gender',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_beginning___gender3_0',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_male'});
}),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender3_1',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender3_2',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_female'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_beginning___gender2', /* key */
"Choose Your Own Adventure: The Beginning - Gender", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_beginning___gender',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_beginning___gender2_0',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_male'});
}),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender2_1',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender2_2',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_female'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_beginning___gender', /* key */
"Choose Your Own Adventure: The Beginning - Gender", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_beginning___gender',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_beginning___gender_0',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_male'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender_1',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_male'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___gender_2',
'Opportunity_choose_your_own_adventure__the_beginning___gender_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
setup.unitgroup.quest_choose_your_own_adventure_hero1.getUnit({retries: 50, trait_key: 'gender_female'});
setup.unitgroup.quest_choose_your_own_adventure_hero2.getUnit({retries: 50, trait_key: 'gender_female'});
}),
setup.qc.VarSet('choose_your_own_adventure_progress', '1', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Once upon a time, within the <<lore region_vale>> of yore live
a pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>.
Together with their families, they live a peaceful live with the rest of the village. But one day,
raiders from the mountain came without warning, burning the village and raping all the women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> were outside when the raid happens, and were spared from the attack, but when they came back, all they held dear had been lost.
With nothing left in their name, they swore to
<<if $varstore.get('choose_your_own_adventure_revenge') == "revenge">>
avenge
<<else>>
find peace for
<</if>>
the ones they have lost.
Thus begins this tale of...
</p>Two men (Default)Two menTwo men<p>
Once upon a time, within the <<lore region_vale>> of yore live
a pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>.
Together with their families, they live a peaceful live with the rest of the village. But one day,
raiders from the mountain came without warning, burning the village and raping all the women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> were outside when the raid happens, and were spared from the attack, but when they came back, all they held dear had been lost.
With nothing left in their name, they swore to
<<if $varstore.get('choose_your_own_adventure_revenge') == "revenge">>
avenge
<<else>>
find peace
<</if>>
for the ones they have lost.
Thus begins this tale of
<<set _hero1 = setup.unitgroup.quest_choose_your_own_adventure_hero1.getOnlyUnit()>>
<<set _hero2 = setup.unitgroup.quest_choose_your_own_adventure_hero2.getOnlyUnit()>>
<<if _hero1.getGender() != _hero2.getGender()>>
a man and a woman
<<elseif _hero1.isFemale()>>
two women
<<else>>
two men
<</if>>
on their journey of a lifetime.
</p><<include 'Opportunity_choose_your_own_adventure__the_beginning__storyCommon'>>
<p>
As soon as you finish, the book vanishes in a black poof. What a strange book...
</p>A man and a womanA man and a woman (Default)A man and a womanTwo womenTwo womenTwo women (Default)<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_beginning___relation2', /* key */
"Choose Your Own Adventure: The Beginning - Relation", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_beginning___relation',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_beginning___relation2_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge),
]),
setup.qc.VarSet('choose_your_own_adventure_siblings', 'friends', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___relation2_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge),
]),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_siblings', 'siblings', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_beginning___relation', /* key */
"Choose Your Own Adventure: The Beginning - Relation", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_beginning___relation',
setup.qdiff.normal9, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_beginning___relation_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge),
]),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_siblings', 'friends', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_beginning___relation_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__path_of_divergence___revenge),
]),
setup.qc.VarSet('choose_your_own_adventure_siblings', 'siblings', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Once upon a time, within the <<lore region_vale>> of yore live
a pair of...
</p>Childhood friendsChildhood friends (Default)Siblings (Default)Siblings<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_interlude___bond2', /* key */
"Choose Your Own Adventure: The Interlude - Bond", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_interlude___bond',
setup.qdiff.normal29, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_interlude___bond2_0',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'friends', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond2_1',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'rivals', -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond2_2',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'lovers', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_interlude___bond3', /* key */
"Choose Your Own Adventure: The Interlude - Bond", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_interlude___bond',
setup.qdiff.normal29, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_interlude___bond3_0',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'friends', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond3_1',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'rivals', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond3_2',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'lovers', -1),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_interlude___bond', /* key */
"Choose Your Own Adventure: The Interlude - Bond", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_interlude___bond',
setup.qdiff.normal29, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_interlude___bond_0',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'friends', -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond_1',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'rivals', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], [
'Opportunity_choose_your_own_adventure__the_interlude___bond_2',
'Opportunity_choose_your_own_adventure__the_interlude___bond_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '5', -1),
setup.qc.VarSet('choose_your_own_adventure_lovers', 'lovers', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Opportunity_choose_your_own_adventure__the_powerup__storyCommon'>>
<p>
Once they accumulated enough money, with the help of a kind mercenary company, the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
were able to locate the sage living deep within the forests.
The sage tutors them in
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
combat, strengthening them into vicious fighters.
<<else>>
magic, empowering them into powerful wizards.
<</if>>
</p>
<p>
The training were tough, often bringing them to the brink of exhaustion.
But the <<= $varstore.get('choose_your_own_adventure_siblings')>> have each other to lean to, and over the course of their training,
their bond grows into...
</p><<include 'Opportunity_choose_your_own_adventure__the_powerup__storyCommon'>>
<p>
Once they accumulated enough money, with the help of a kind mercenary company, the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
were able to locate the sage living deep within the forests.
The sage tutors them in
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
combat, strengthening them into vicious fighters.
<<else>>
magic, empowering them into powerful wizards.
<</if>>
</p>
<p>
The training were tough, often bringing them to the brink of exhaustion.
But the <<= $varstore.get('choose_your_own_adventure_siblings')>> have each other to lean to, and over the course of their training,
their bond grows into
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
a passionate love. During the nights they often tumble under the blankets, one flesh upon another interlocked intimately.
<<if $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>
They know this is an incestuous relationship, but they are all they have left and love is just a natural feeling for them now.
<<else>>
Having known each other for a long time, the feeling they got upon exploring each other's body was exceedingly good.
<</if>>
<<elseif $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
a competitive rivalry. They often goad each other during training sessions, and they improve significantly from the competition.
<<else>>
an unbreakable friendship. Their friendship is all they have left from their village, and it will continue to grow along their journey.
<</if>>
</p>
<p>
During a fateful night, they had a vision of a demon lord playing with what seems to be a miniature version of their village. The dream keeps getting stronger and stronger and now they believe that the misfortune inflicted upon their village is the work of a demon.
</p>
<p>
Having completed their training, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
bid farewell to the sage and
continues their journey for
<<= $varstore.get('choose_your_own_adventure_revenge')>>.
Their new goal now is to venture into the deserts in search of the demon, and slay it for good.
But first, they need to make a stop along the way to the city, and equip themselves as best as they can...
</p><<include 'Opportunity_choose_your_own_adventure__the_interlude___bondCommon'>>
<p>
You are no longer surprised when the book disappears into a black puff.
</p>Unbreakable Friendship (Default)Unbreakable FriendshipUnbreakable FriendshipCompetitive RivalryCompetitive Rivalry (Default)Competitive RivalryPassionate LovePassionate LovePassionate Love (Default)<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_powerup___goal2', /* key */
"Choose Your Own Adventure: The Powerup - Goal", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_powerup___goal',
setup.qdiff.normal19, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_powerup___goal2_0',
'Opportunity_choose_your_own_adventure__the_powerup___goal_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_strength', 'strength', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '3', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_powerup___goal2_1',
'Opportunity_choose_your_own_adventure__the_powerup___goal_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_strength', 'intelligence', -1),
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '3', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_powerup___goal', /* key */
"Choose Your Own Adventure: The Powerup - Goal", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_powerup___goal',
setup.qdiff.normal19, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_powerup___goal_0',
'Opportunity_choose_your_own_adventure__the_powerup___goal_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_strength', 'strength', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '3', -1), ],
], [
'Opportunity_choose_your_own_adventure__the_powerup___goal_1',
'Opportunity_choose_your_own_adventure__the_powerup___goal_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_strength', 'intelligence', -1),
setup.qc.VarSet('choose_your_own_adventure_progress', '3', -1), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Opportunity_choose_your_own_adventure__the_beginning__storyCommon'>>
<p>
Weeks passed, and the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
managed to make their living off slaying minor beasts and completing bounties. But it was not just for getting enough money to get by —- they are hoping to accumulate some money in order to patron a wise sage deep inside the forests. They believe that the sage shall grant them the...
</p>StrengthStrength (Default)<<include 'Opportunity_choose_your_own_adventure__the_beginning__storyCommon'>>
<p>
Weeks passed, and the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
managed to make their living off slaying minor beasts and completing bounties. But it was not just for getting enough money to get by —- they are hoping to accumulate some money in order to patron a wise sage deep inside the forests. They believe that the sage shall grant them the
<<= $varstore.get('choose_your_own_adventure_strength')>>
they need in their quest for
<<= $varstore.get('choose_your_own_adventure_revenge')>>.
</p><<include 'Opportunity_choose_your_own_adventure__the_powerup__storyCommon'>>
<p>
Even more weeks pass by, and they have accumulated enough money to hire the service they need to locate the sage...
</p>
<p>
Again, once you complete reading the chapter the book vanishes into a black puff.
</p>Intelligence (Default)Intelligence<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_showdown___rest2', /* key */
"Choose Your Own Adventure: The Showdown - Rest", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_showdown___rest',
setup.qdiff.hardest39, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_showdown___rest2_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_oasis', 'oasis', -1),
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach),
]),
],
], [
'Opportunity_choose_your_own_adventure__the_showdown___rest2_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_oasis', 'caverns', -1),
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach),
]),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__the_showdown___rest', /* key */
"Choose Your Own Adventure: The Showdown - Rest", /* Title */
"darko", /* Author */
[ 'fort', 'unknown',], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__the_showdown___rest',
setup.qdiff.hardest39, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__the_showdown___rest_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarAdd('choose_your_own_adventure_changes', 1, -1),
setup.qc.VarSet('choose_your_own_adventure_oasis', 'oasis', -1),
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach),
]),
],
], [
'Opportunity_choose_your_own_adventure__the_showdown___rest_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_oasis', 'caverns', -1),
setup.qc.OneRandom([
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach2),
setup.qc.Opportunity(setup.opportunitytemplate.choose_your_own_adventure__the_showdown___approach),
]),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Opportunity_choose_your_own_adventure__the_interlude___bondCommon'>>
<p>
Fully equipped
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
head to toe with armor,
<<else>>
with magical robes and artefacts,
<</if>>
the pair of siblings went to the desert with the help of the same mercenary company they have been patroning. They travelled for days, each day reaching closer and closer to their destination.
And finally, the destination is just one more day of travel.</p>
<p>
In this final decisive day, the party decided to camp in the ...
</p>OasisOasis (Default)Caverns (Default)Caverns<<set _rewardcommon = [
setup.qc.VarRemove('choose_your_own_adventure_progress'),
setup.qc.VarRemove('choose_your_own_adventure_caution'),
setup.qc.VarRemove('choose_your_own_adventure_oasis'),
setup.qc.VarRemove('choose_your_own_adventure_lovers'),
setup.qc.VarRemove('choose_your_own_adventure_strength'),
setup.qc.VarRemove('choose_your_own_adventure_revenge'),
setup.qc.VarRemove('choose_your_own_adventure_siblings'),
setup.qc.VarRemove('choose_your_own_adventure_changes'),
]>>
<<run new setup.OpportunityTemplate(
'choose_your_own_adventure__true_end', /* key */
"Choose Your Own Adventure: True End", /* Title */
"darko", /* Author */
[ 'special', 'fort', 'unknown',], /* tags */
setup.INFINITY, /* opportunity expiration weeks */
'Opportunity_choose_your_own_adventure__true_end',
setup.qdiff.easiest1, /* difficulty */
[ /* options */
[
'Opportunity_choose_your_own_adventure__true_end_0',
'Opportunity_choose_your_own_adventure__true_end_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Function(() => {
_hero1 = {
getActorUnit: () => setup.unitgroup.quest_choose_your_own_adventure_hero1.getOnlyUnit()
};
_hero2 = {
getActorUnit: () => setup.unitgroup.quest_choose_your_own_adventure_hero2.getOnlyUnit()
};
if (State.variables.varstore.get('choose_your_own_adventure_lovers') == 'lovers') {
setup.qc.Hookup('hero1', 'hero2').apply(setup.costUnitHelperDict({
hero1: _hero1.getActorUnit(),
hero2: _hero2.getActorUnit(),
}))
};
setup.qc.Slaver('hero1', "was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined).apply(_hero1);
setup.qc.Slaver('hero2', "was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined).apply(_hero2);
setup.qc.RemoveFromUnitGroup('hero1').apply(_hero1);
setup.qc.RemoveFromUnitGroup('hero2').apply(_hero2);
})
].concat(_rewardcommon),
],
[
'Opportunity_choose_your_own_adventure__true_end_1',
'Opportunity_choose_your_own_adventure__true_end_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
_rewardcommon.concat([ /* outcomes */
setup.qc.Function(() => {
_demon = {
getActorUnit: () => setup.unitgroup.quest_what_it_means_to_be_a_hero1.getUnit()
};
setup.qc.Slave('hero1', "was a demon lord who toyed with mortals using a modified necronomicon", undefined).apply(
_demon
);
_hero1 = {
getActorUnit: () => setup.unitgroup.quest_choose_your_own_adventure_hero1.getOnlyUnit()
};
_hero2 = {
getActorUnit: () => setup.unitgroup.quest_choose_your_own_adventure_hero2.getOnlyUnit()
};
setup.qc.RemoveFromUnitGroup('hero1').apply(_hero1);
setup.qc.RemoveFromUnitGroup('hero2').apply(_hero2);
})
]),
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Opportunity_choose_your_own_adventure__final_chapterCommon'>>
<p>
To find out the truth.
</p>
<p>
The
<<= $varstore.get('choose_your_own_adventure_lovers')>>
tore out their pendant, a supposed "gift" from the sage that literally
watches over them.
They
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
angrily
<<else>>
resolvedly
<</if>>
went to the forest in search of the "sage". Upon seeing them,
the sage morphed into their true form: a pureblood demon who delights
in nothing but seeing mortals squirm.
</p>
<p>
With the help of the trusty mercenary company, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
managed to defeat the evil demon.
The mastermind behind the book adventure has been defeated, and is now at their mercy.
But the mercenary company implored them to spare the demon, for reasons unknown.
Having been greatly indebted to them, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
defers the final judgment to the mercenary company leader, but with a twist.
They offer you, the leader of the mercenary company above, a choice.
Should you slay the demon, they shall agree to join your company.
</p>
<p>
How will you remember this story to end?
Will you slay the demon and recruit the
<<= $varstore.get('choose_your_own_adventure_lovers')>>, or will you keep the demon and let the
<<= $varstore.get('choose_your_own_adventure_lovers')>> go?
</p>Slay the Demon<p>
The deed is done. The demon lays dead as their corpse vanishes into thin air.
</p>
<p>
Their journey finally at an end, and they are eager to begin their new life —- as your slavers if you deem them fit for the job.
</p>Take "Pity" on the Demon<p>
As you inform them of your decisions, they take it with great difficulty, but did not complain.
</p>
<p>
Some time later, you receive a farewell letter from them as they voyage outside into the sea, to never be seen again by your company.
You read the letter with nostalgia as you pet your new demonic slave, who will surely fetch a large sum in the market should you wish to sell them.
</p><<run new setup.OpportunityTemplate(
'desert_purifiers', /* key */
'Desert Purifiers', /* Title */
'darko', /* Author */
[ 'desert', 'trait', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_desert_purifiers',
setup.qdiff.normal41, /* difficulty */
[ /* options */
[
'Opportunity_desert_purifiers_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('desert_purifiers_patron2'), ],
],
[
'Opportunity_desert_purifiers_1',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]), ],
[ /* outcomes */
setup.qc.QuestDirect('desert_purifiers_enslave'), ],
],
[
'Opportunity_desert_purifiers_2',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]), ],
[ /* outcomes */
setup.qc.QuestDirect('desert_purifiers_recruit'), ],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, 80],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('desert_purifiers_enslave'),
setup.qres.NoQuest('desert_purifiers_patron2'), ],
)>><p>
The denizens of the eastern desert are often gifted with the aspect of fire. While the orcs use this gift to raid the settlements, there are few extremely blessed individuals whose mastery over fire allows them summon purifying fire. These people are often sought after for their purifying flames are thought to bless whoever is bathed in them.
</p>
<p>
You have caught wind of a group of purifiers journeying through the eastern desert. This is a rare opportunity for you —- you can try to purify some of your slavers for free using their services, or if you are feeling brave you can attempt to try and enslave the lead purifier.
Such attempt would require you to send a slaver gifted in the dark arts, and even then it is surely going to be a dangerous affair.
</p>PatronEnslaveRecruit<<run new setup.OpportunityTemplate(
'equivalent_exchange', /* key */
"Equivalent Exchange", /* Title */
"darko", /* Author */
[ /* tags */
'city', 'special', 'order', 'unknown',
],
1, /* expiration weeks */
'Opportunity_equivalent_exchange',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_equivalent_exchange_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SlaveOrderEquivalentExchange(),
],
],
[
'Opportunity_equivalent_exchange_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyUnitValue("you", -5, 100000),
setup.qc.FreePlayer(),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': null,
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
You have found yourself in quite a predicament. With your wrists shackled behind you, you are face-to-face with your prospective owner. The man described in great details about your future "trainings", to make you into a perfectly pliable, compliant, and valuable slave.
</p>
<p>
Fortunately for you, the man turns out to be a businessman above a slaver. Seeing how you lead such a successful band of outlaws, your "master" offered you a trade. Your freedom, in exchange for a replacement for you. But the replacement must be at least twice as valuable as you are, and for some interesting reason must also be completely untrained.
</p>
<p>
...or alternatively, you can also simply pay a ransom. An exorbitant ransom, five times your actual worth as a slave. A paltry sum of
<<set _sum = $unit.player.getSlaveValue() * 5>>
<<money _sum>>.
</p>
<p>
Time to decide which option you should write in a letter to your company. Don't delay though, for surely your master will continue on with your "trainings" if you delay...
</p>Trade with a valuable and untrained slavePay your exorbitant ransom<<run new setup.OpportunityTemplate(
'flickering_flame', /* key */
"Flickering Flame", /* Title */
"darko", /* Author */
[ /* tags */
'unknown',
'fort',
],
1, /* expiration weeks */
'Opportunity_flickering_flame',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_flickering_flame_0',
'Opportunity_flickering_flame_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.HookupWithYou('lover'),
],
],
[
'Opportunity_flickering_flame_1',
'Opportunity_flickering_flame_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('lover', 10),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
'lover': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
In the recent days, you and your <<repfull $g.lover>> has become rather close. You have always considered the <<urace $g.lover>> slaver as your friend, but you never realized how much the <<uadjgood $g.lover>> slaver has lusted over you in the last few weeks.
</p>
<p>
It culminated today when you found <<rep $g.lover>> waiting for you inside your office.
<<if $g.lover.getSpeech() == setup.speech.friendly || $g.lover.getSpeech() == setup.speech.witty>>
<<They $g.lover>> gently grabbed your <<uhands $unit.player>>, while whispering to your <<uears $unit.player>> <<their $g.lover>> undying devotion to you, before asking you to become <<their $g.lover>> lover.
<<elseif $g.lover.getSpeech() == setup.speech.bold || $g.lover.getSpeech() == setup.speech.cool>>
<<They $g.lover>> wordlessly grabbed your <<uhands $unit.player>>, stoically pronouncing <<their $g.lover>> devotion to you, and asking you to become <<their $g.lover>> lover.
<<elseif $g.lover.getSpeech() == setup.speech.debauched>>
<<They $g.lover>> suddenly grabbed you by your waist, putting you in an awkward position, with <<their $g.lover>> lips almost touching yours. <<They $g.lover>> then profess their lust for your <<ubody $unit.player>>, before asking you to become <<their $g.lover>> lover.
<</if>>
</p>
<p>
How will you respond?
</p>Accept<p>
Upon hearing the words coming out from your mouth, your <<repfull $g.lover>>
<<if $g.lover.getSpeech() == setup.speech.friendly>>
joyfully closed the distance between you and gently kissed your mouth. For a long moment both of you are locked tight in an embrace, time slowing down all around you.
<<elseif $g.lover.getSpeech() == setup.speech.bold>>
can't help but smirked a little, before
<<if $g.lover.isFemale()>>
leaping into your embrace.
<<else>>
pulling you deep for a possessive embrace.
<</if>>
The embrace lasts for a good warm moment, both in your heart and in your <<ugenital $unit.player>>.
<<elseif $g.lover.getSpeech() == setup.speech.cool>>
stoically closed the distance between you and without saying a word kissed your mouth. This is perhaps the most animated your cool slaver has ever been in <<their $g.lover>> life.
<<elseif $g.lover.getSpeech() == setup.speech.witty>>
visibly raised a surprised eyebrow, before regaining <<their $g.lover>> composure and gave your acceptance a witty reply. But before you are allowed to respond, you find <<them $g.lover>> very close to you before stealing your lips for a kiss.
<<elseif $g.lover.getSpeech() == setup.speech.debauched>>
laughed maniacally before leaping towards you and giving you the deepest kiss you have ever experienced in your life. It will be quite an adventure having made the debauched slaver into your lover, one you are very much looking forward to.
<</if>>
</p>
<p>
You have never wanted the night to come as quickly as it is in that moment!
</p>Reject<p>
Unfortunately, you have no interest in the <<man $g.lover>>. <<rep $g.lover>> looks absolutely devastated by the refusal, and left your office without saying a word. <<They $g.lover>> will surely be traumatized by this, but nothing time cannot heal.
</p><<run new setup.OpportunityTemplate(
'for_science__box_payment', /* key */
"For Science: Box Payment", /* Title */
"darko", /* Author */
[ 'veteran', 'vale', 'item', 'special',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_for_science__box_payment',
setup.qdiff.normal43, /* difficulty */
[ /* options */
[
'Opportunity_for_science__box_payment_0',
null,
[ /* costs */
setup.qc.Money(-12000), ],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.quest_for_science_box), ],
], [
'Opportunity_for_science__box_payment_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('for_science__box_payment__labor'), ],
], [
'Opportunity_for_science__box_payment_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('for_science_slaveorder', 1, -1),
setup.qc.SlaveOrderFlex(
'For Science: Box Payment', /* name */
'humanvale', /* company */
12, /* expires in */
1000, /* base price */
0, /* trait multi */
0, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.race_humankingdom,
setup.trait.race_humanvale,
setup.trait.race_humandesert,
setup.trait.race_humansea,
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.race_werewolf,
setup.trait.race_orc
], 0, 0, 1),
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.training_obedience_advanced,
setup.trait.training_endurance_basic,
setup.trait.training_domestic_basic,
setup.trait.training_oral_basic,
setup.trait.training_dominance_basic,
setup.trait.training_masochist_basic,
setup.trait.training_pet_basic,
setup.trait.training_pony_basic,
setup.trait.training_horny_basic,
setup.trait.training_edging_basic
], 0, 0, 1),
],
[ /* fulfilled outcomes */
setup.qc.VarRemove('for_science_slaveorder'),
setup.qc.Item(setup.item.quest_for_science_box),
],
[ /* unfulfilled outcomes */
setup.qc.VarRemove('for_science_slaveorder'),
],
), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Apparently, there is a catch to obtain the
<<rep setup.item.quest_for_science_box>>.
The box is made out of incredibly expensive materials, and the smith isn't going to want to part with it for free.
You'll have to pay with one option or another, and the smith has kindly gave you three options.
</p>
<p>
First, you can always just pay the expensive price yourself.
Second, the smith has plenty of orders in the coming season, and is wanting for seasonal help. You could dedicate a team of slavers to help the smith for this period, but this will surely take a long while and it won't be an easy task for the slavers either.
Finally, you could offer a more permanent solution to the smith's manpower problem by offering them a slave...
</p>Just payPay with laborPay with a slave<<run new setup.OpportunityTemplate(
'for_science__mad_science', /* key */
"For Science: Mad Science", /* Title */
"darko", /* Author */
[ 'veteran', 'city', 'money', 'item', 'unknown', 'special',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_for_science__mad_science',
setup.qdiff.harder64, /* difficulty */
[ /* options */
[
'Opportunity_for_science__mad_science_0',
'Opportunity_for_science__mad_science_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyCustom(75000),
],
], [
'Opportunity_for_science__mad_science_1',
'Opportunity_for_science__mad_science_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.f_object_master_fuckmachine), ],
], [
'Opportunity_for_science__mad_science_2',
'Opportunity_for_science__mad_science_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlave(), ],
[ /* outcomes */
setup.qc.Function(() => {
var slaves = State.variables.company.player.getUnits({job: setup.job.slave});
for (var i = 0; i < slaves.length; ++i) {
var slave = slaves[i];
slave.addTrait(setup.trait.anus_gape, null, true);
if (slave.isHasVagina()) slave.addTrait(setup.trait.vagina_gape, null, true);
}
}),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'inventor': 'quest_for_science1', },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
It is done. You have received the payment for your slavers' efforts these past few months. The <<rep setup.item.f_object_master_fuckmachine>> is yours, to use as you see fit. But what use do you have for such a high-tech machine?
</p>
<p>
You can auction it, which will fetch you so much more money than if you were to later sell it at your <<rep setup.buildingtemplate.bazaar>>.
<<set _vice = $dutylist.getUnit('DutyViceLeader')>>
<<if _vice>>
Per your vice leader <<rep _vice>> calculation, auctioning it will net you at least a whopping <<money 70000>>.
<<else>>
If only you have a vice leader that can advise you how much you would get...
<</if>>
</p>
<p>
You can keep it as a rare furniture for one of your bedchambers.
</p>
<p>
Or if you're feeling particularly degenerate, you can use it to gape all of your slaves... The fuckmachine will probably break down though from such abuse, and will be worth nothing afterwards. But your slaves will surely all ended up with permanently gaping holes.
</p>Auction it<p>
It is done. The <<rep setup.item.f_object_master_fuckmachine>> has been sold in one of the hottest auctions ever, with a very loud sequence of bids until a high noble decided to splurge a silly amount of gold for it.
</p>
<p>
Whatever the noble plans with the <<rep setup.item.f_object_master_fuckmachine>>, you don't really care as you swim in your newfound gold. Perhaps you can ask the inventor <<name $g.inventor>> for another adventure...
</p>Keep it<p>
Even with so much money being dangled in front of you, you've decided to keep the prestigious machine for your own company. The <<rep setup.item.f_object_master_fuckmachine>> is now ready in your fort, to be installed in some lucky fellow's bedchamber.
</p>Machine rape your slaves<<set _slaves = $company.player.getUnits({job: setup.job.slave})>>
<p>
In a true act of degeneracy, you decided to use the machine to rape all of your slaves —- no exceptions.
You form your slaves into a line, with
the unlucky slave <<rep _slaves[0]>> in front of the line. You command <<them _slaves[0]>> to approach you, before unveiling the <<rep setup.item.f_object_master_fuckmachine>>. The slaves immediately quiver in fear of what you are about to do to them, and they do not have to imagine as you grabbed <<rep _slaves[0]>> and forcefully place <<them _slaves[0]>> atop the dildo sitting quietly on the machine.
</p>
<p>
Sensing the inviting <<uhole _slaves[0]>> above it, the machine magically started its raping procedure, moving its large dildo up and down
<<if _slaves[0].isHasVagina()>>
both of the slave's holes until they become a permanent gape.
<<else>>
the slave's anus until it becomes a permanent gape.
<</if>>
After a while, the machine finally released the spent <<rep _slaves[0]>> as you order the next slave into the machine.
</p>
<p>
Screams can be heard from all around your fort as the machine continues its relentless rape on your slaves. Once all the slaves are done and gaping, the machine finally broke down, as if sensing that its duties are over.
</p><<run new setup.OpportunityTemplate(
'for_science__the_harvest', /* key */
"For Science: The Harvest", /* Title */
"darko", /* Author */
[ 'veteran', 'forest', 'item', 'special',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_for_science__the_harvest',
setup.qdiff.harder46, /* difficulty */
[ /* options */
[
'Opportunity_for_science__the_harvest_0',
'Opportunity_for_science__the_harvest_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.quest_for_science_fruit),
setup.qc.AddTraitsRandom('offering', [setup.trait.per_sexaddict, setup.trait.per_submissive, setup.trait.per_lunatic, setup.trait.per_masochistic], 1, false), ],
], [
'Opportunity_for_science__the_harvest_1',
'Opportunity_for_science__the_harvest_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.quest_for_science_fruit),
setup.qc.IfThenElse(
setup.qres.Actor('offering', setup.qres.Trait(setup.trait.vagina_tight)),
setup.qc.Trait('offering', setup.trait.vagina_gape),
setup.qc.Trait('offering', setup.trait.anus_gape)), ],
], [
'Opportunity_for_science__the_harvest_2',
'Opportunity_for_science__the_harvest_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.quest_for_science_fruit),
setup.qc.Corrupt('offering'),
setup.qc.Corrupt('offering'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'offering': [
],
'wizard': [
],
'biologist': [
], },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
The <<rep setup.item.quest_for_science_fruit>> is almost within your slavers' grasp.
All that your slavers need to do is to harvest it but alas, from the information they gathered crosschecked with <<rep $g.biologist>>'s vast knowledge, it seems harvesting it will not be an easy task. The fruit will simply rot once harvested, unless a specific ritual is performed.
You have to make decision for them.
</p>
<p>
The first option is to conduct the so-called "Gag Ritual", where <<rep $g.offering>> must caress and service the shapely fruit as if it is a god's dick. While that sounds harmless, the ritual will apparently permanently alters <<rep $g.offering>> mind, likely changing <<their $g.offering>> personality into something more slave-like.
</p>
<p>
The second option is conduct the "Gape Ritual", where your "offering" <<rep $g.offering>> must now instead offer <<their $g.offering>> <<if $g.offering.isHasVagina()>>pussy<<else>><<uanus $g.offering>><</if>> to the fruit, and then inserting the fruit deep within the offered hole. Rumors said that such stimulation will induce incredible growth on the fruit, no doubt gaping <<rep $g.offering>>'s hole if it was not already gaped to begin with.
</p>
<p>
Alternatively there's always the option to summon demonic entities and ask them for help, using <<rep $g.offering>> as an offering. For such a simple task they will unlikely take <<rep $g.offering>> forever, but <<rep $g.offering>> will almost guaranteed to end up more corrupted than before. <<if $g.offering.isHasTrait('corruptedfull')>>Considering <<rep $g.offering>> is already fully corrupted, this might be your best bet here.<</if>>
</p>Gag ritual<p>
After <<rep $g.biologist>> <<uadv $g.biologist>> double-checked all the ritual preparations, your slavers placed their teammate <<rep $g.offering>> on the altar and <<rep $g.wizard>> began chanting.
Soon after the curious tree descended its branch down towards <<rep $g.offering>>, leaving the fruit hanging right above <<rep $g.offering>>'s <<umouth $g.offering>>.
<<if $g.offering.isHasTrait('per_chaste')>>
Being the chaste slaver that <<they $g.offering>> is,
<<rep $g.offering>> half-heartedly suck on the fruit.
<<elseif $g.offering.isHasTrait('per_lustful')>>
<<rep $g.offering>> gave <<their $g.offering>> all sucking on the fruit, making your other slavers wonder if <<rep $g.offering>> has always been this slutty.
<<else>>
<<rep $g.offering>> mechanically sucks on the fruit, trying to imagine that the fruit is their lover's genital.
<</if>>
The fruit grows inside <<rep $g.offering>>'s mouth, eventually choking <<rep $g.offering>>, whose gag reflex kicked in and vomited the fruit, before gasping in pain. Plucked from its tree, but satisfied with the performance, the fruit rolled down innocently to <<rep $g.wizard>>'s feet, which <<they $g.wizard>> then <<uadv $g.wizard>> picked up. All in all, a successful ritual, although your slavers did notice that <<rep $g.offering>> becomes sluttier than before...
</p>Gape ritual<p>
After <<rep $g.biologist>> <<uadv $g.biologist>> double-checked all the ritual preparations, <<rep $g.offering>> <<uadv $g.offering>> laid on the altar, with <<their $g.offering>> butt high in the air and their face touching the altar. <<rep $g.wizard>> began chanting, and soon after the curious tree
descended its branch down towards <<rep $g.offering>>, leaving the fruit hanging right above <<rep $g.offering>>'s
<<uhole $g.offering>>.
<<if $g.offering.isHasTrait('per_chaste')>>
The chaste slaver <<rep $g.offering>> tried to remain as still as possible, not thinking about the assault <<they $g.offering>> are going to experience very soon.
<<elseif $g.offering.isHasTrait('per_lustful')>>
Looking at <<their $g.offering>> face in the face of imminent penetration, your slavers almost forgot that <<rep $g.offering>> is a slaver, not a slave.
<<else>>
<<rep $g.offering>> steeled <<themself $g.offering>> for the incoming rape.
<</if>>
Touching their buttcheeks, the fruit proceed to penetrate <<rep $g.offering>>'s <<uhole $g.offering>>, earning a shriek followed by a moan from the slaver.
As the rape continues, the fruit grows in size,
<<if $g.offering.isHasTrait('vagina_gape')>>
which managed to stretch <<their $g.offering>> already gaping vagina to the limits.
<<elseif $g.offering.isHasTrait('vagina_loose')>>
their formerly loose vagina now a permanently gaped hole.
<<elseif $g.offering.isHasTrait('vagina_tight')>>
painfully loosening <<their $g.offering>> formerly very tight vagina.
<<elseif $g.offering.isHasTrait('anus_gape')>>
which managed to stretch <<their $g.offering>> already gaping anus to the limits.
<<elseif $g.offering.isHasTrait('anus_loose')>>
their formerly loose anus now a permanently gaped hole.
<<else>>
painfully loosening <<their $g.offering>> formerly very tight anus.
<</if>>
The fruit keeps growing in size until eventually it snapped from the tree, lodged deeply within <<rep $g.offering>>'s <<uhole $g.offering>>, who has become a mess.
<<rep $g.wizard>> tended to <<rep $g.offering>> while
<<rep $g.biologist>> helped to carefully dislodge the fruit from their <<uhole $g.offering>>, taking care not to damage it.
All in all, a successful ritual.
</p>Demonic ritual<p>
Not wanting to partake in either depraved rituals, you opted to direct your slavers to harness demonic powers instead. Using <<rep $g.offering>> as an offering,
<<rep $g.wizard>> chanted dark incantations
<<if $g.wizard.isHasTrait('magic_dark')>>
using their mastery over <<rep setup.trait.magic_dark>>. A portal then appears,
<<else>>
<<run $company.player.substractMoney(1000)>>
using an demonic amulet they managed to procure for <<money 1000>>.
The amulet then shatters,
<</if>>
and from within a demon appeared to grant your slavers wish, in exchange for a brief moment with <<rep $g.offering>>.
As the demon fucked <<rep $g.offering>> senseless, your slavers can see clearly the corruption spreading into <<rep $g.offering>>. Once the payment is concluded, the demon using <<their $g.offering>> powerful magic snapped the tree branch in two, before handing over the fruit to your slavers with a mischievous smile and disappearing.
All things considered, this was a successful ritual.
</p><<run new setup.OpportunityTemplate(
'for_science__the_trial', /* key */
"For Science: The Trial", /* Title */
"darko", /* Author */
[ 'veteran', 'desert', 'item', 'special',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_for_science__the_trial',
setup.qdiff.harder49, /* difficulty */
[ /* options */
[
'Opportunity_for_science__the_trial_0',
'Opportunity_for_science__the_trial_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Injury('tank', 12),
setup.qc.Injury('healer', 10),
setup.qc.Injury('dps', 12),
setup.qc.Item(setup.item.quest_for_science_stick), ],
], [
'Opportunity_for_science__the_trial_1',
'Opportunity_for_science__the_trial_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Injury('dps', 7),
setup.qc.Injury('tank', 6),
setup.qc.Injury('healer', 7),
setup.qc.Item(setup.item.quest_for_science_stick),
setup.qc.TraumatizeRandom('dps', 20),
setup.qc.TraumatizeRandom('tank', 19),
setup.qc.TraumatizeRandom('healer', 21), ],
], [
'Opportunity_for_science__the_trial_2',
'Opportunity_for_science__the_trial_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Item(setup.item.quest_for_science_stick),
setup.qc.TraumatizeRandom('dps', 32),
setup.qc.TraumatizeRandom('tank', 34),
setup.qc.TraumatizeRandom('healer', 33), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'dps': [
],
'tank': [
],
'healer': [
], },
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
The orcs are simple folks —- according to their legends, only those foolish or brave enough are worthy to claim the pole of heavens (which to your slavers' understanding is just a <<rep setup.item.quest_for_science_stick>>). Your slavers are given a choice to prove their worth.
</p>
<p>
The first option is to go through the Trial of Combat. They must survive the onslaught of orcish gladiators coming their way until all the village is defeated. Given their skills, this is completely within your slaver's prowess, but they will no doubt sustain great injuries after.</p>
<p>
The second option is to undergo the Trial by Fire. Here, your slavers must withstand fiery abuse inflicted upon the orcs for an hour straight. Which is simple enough, but will surely inflict some injury as well as some trauma to your slavers.
</p>
<p>
Finally, there is the Trial of Darkness, where your slavers must venture alone to the caverns north of the village in search of the pole of heavens (which they will awkwardly hide somewhere there). While this sounds easy enough, legends say that the caverns are cursed, and whoever enter will be greatly traumatized by the experience...
</p>Trial by Combat<p>
Choosing the Trial of Combat, <<rep $g.tank>> prepares <<their $g.tank>> <<ubodyall $g.tank>>.
<<rep $g.healer>> stands at the ready to undo the damage as much as possible, while <<rep $g.dps>> <<uadv $g.dps>> sharpens <<their $g.dps>> <<uweapon $g.dps>> for the upcoming onslaught.
</p>
<p>
When the horn is blown, the first wave of orcish warriors came upon your slavers. Still full of energy, <<rep $g.tank>> managed to fend the bulk of the forces while <<rep $g.dps>> <<uadv $g.dps>> dispatched them one by one, until the first wave is defeated. But your slavers know that there are many waves to come, and this is only just the beginning.
</p>
<p>
At some point, your slavers lost count on the number of waves they have defeated. Wounded (but not dead) bodies are scattered on the battlefield, and your slavers have been badly injured by stray hits. The final fight is against the chieftain themself, who charged at your slavers with the <<rep setup.item.quest_for_science_stick>>, pointing it menacingly at <<rep $g.tank>>. With the last of <<their $g.tank>> energy, supported by <<rep $g.healer>> depleted magic reserve, <<rep $g.tank>> fend off one final attack before collapsing to the ground. But it was not in vain, as <<rep $g.dps>> managed to use the opening to launch a sneak attack on the chieftain, who is knocked out in one blow.
With the battle won, <<rep $g.dps>> collapsed to the ground from exhaustion, leaving only the healer <<rep $g.healer>> to take in the victory. <<They $g.healer>> grabbed the <<rep setup.item.quest_for_science_stick>> off the chieftain's arms, and heave both slavers back to recover before heading home to the fort.
</p>Trial by Fire<p>
The Trial of Fire begins by having all three of your slavers tied to a pole in the middle of the encampment. As the chieftain raised a blazing torch on your slavers,
<<rep $g.tank>>
<<if $g.tank.isMasochistic()>>
can't contain his masochistic excitement at the upcoming pain.
<<elseif $g.tank.isHasTrait('per_brave')>>
bravely steels <<themself $g.tank>> for the incoming pain.
<<elseif $g.tank.isHasTrait('per_cautious')>>
looks skyward trying not to imagine the pain.
<<else>>
<<uadv $g.tank>> steels <<themself $g.tank>> for the upcoming pain.
<</if>>
The orcs sears your slavers, not enough to cause permanent damage, but enough to injure and inflict as much pain as possible to your slavers. The hour felt like an eternity as your slavers were sear again and again, in the attempt to prove their worth. After the grueling hour, the orcs untied your slavers, all collapsed to the ground with injuries and trauma. Still, seeing the braveries of your slavers, the chieftain kept the promise and handed over the "pole of heavens" to your slavers' well deserved hands.
</p>Trial by Darkness<p>
As your slavers chose the Trial of Darkness, you can see an orc servant scuttles outside the camp, no doubt to hide the <<rep setup.item.quest_for_science_stick>> somewhere inside the caverns.
The next day, your slavers departed for the caverns, led
<<uadv $g.tank>> by <<rep $g.tank>>.
</p>
<p>
It was unclear what transpire inside the caverns, but when your slavers returned with the <<rep setup.item.quest_for_science_stick>>, their eyes are blank and lifeless. They remained motionless for an hour, until an escort from the orc encampment found them there and brought them back to the encampment. Your slavers eventually recovered enough of their wits to went back to the fort, but the experience have greatly traumatized them.
</p><<run new setup.OpportunityTemplate(
'gorgon_cave', /* key */
"Hydra Cave", /* Title */
"darko", /* Author */
[ 'forest', 'item', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_gorgon_cave',
setup.qdiff.hard36, /* difficulty */
[ /* options */
[
'Opportunity_gorgon_cave_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('gorgon_cave__raid'), ],
], [
'Opportunity_gorgon_cave_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('gorgon_cave__recruit'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 85],
],
[ /* restrictions to generate */
setup.qres.NoQuest('gorgon_cave__recruit'),
setup.qres.NoQuest('gorgon_cave__raid'),
setup.qres.OpportunityUnique(), ],
)>><p>
The domain of <<lore magic_earth>> grants their wielder control over, among other things, accelerated growth of plants and control over the earth. An exceptionally gifted wielder can use the magic to form tentacle aberrations, be it from clay or from vines.</p>
<p>
There are rumors of a particularly powerful wizard living in the forests whose mastery over
the earth domain is so vast that he made multiple tentacled guardians to watch over
their lair. It is believed that those guardians make the lair extremely dangerous,
but behind them lies the wizard's harem and arcane treasures.</p>
<p>
You could try to send a group of slavers to this caverns.
There is always a simple option of attempting to raid the caverns —- rumors has it that the wizard has multiple
powerful artifacts at their disposal ripe for stealing.
But while slaves and treasures are always good, there is also another option of attempting to contact the wizard and recruit them to your company. Such mastery over the earth domain will surely prove useful in the slaving career.</p>RaidRecruit<<run new setup.OpportunityTemplate(
'isolate_memory', /* key */
"Isolate Memory", /* Title */
"darko", /* Author */
[ /* tags */
'fort', 'trait',
],
1, /* expiration weeks */
'Opportunity_isolate_memory',
setup.qdiff.normal51, /* difficulty */
[ /* options */
[
'Opportunity_isolate_memory_0',
'Opportunity_isolate_memory_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'target': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
The treatment was a success. <<rep $g.target>> now lies in wait in the <<rep setup.buildingtemplate.treatmentroomisolation>>, awaiting your decision which of <<their $g.target>> memory to suppress.
</p>Choose memory to isolate<<set $gMenuVisible = false>>
<p>
Choose which trait from <<rep $g.target>> to remove.
Alternatively, you can
<<foclink 'change your mind and cancel' 'OpportunityList'>>
<<unset $gIsolateMemoryUnitKey>>
<</foclink>>,
although you will forfeit the
<<rep setup.item.potion_isolation>> that you've spent on the training.
</p>
<<set $gIsolateMemoryUnitKey = $g.target.key>>
<<set _traits = $unit[$gIsolateMemoryUnitKey].getTraits(true).filter(
trait => trait.getTags().includes('skill') || trait.getTags().includes('bg'))>>
<<if !_traits.length>>
<div>
<<rep $g.target>>'s memory is already as blank as it can get. No available trait to remove.
</div>
<<else>>
<<for _trait range _traits>>
<<capture _trait>>
<div>
<<rep _trait>>
<<focbutton 'Remove' 'OpportunityList'>>
<<run $unit[$gIsolateMemoryUnitKey].removeTraitExact(_trait)>>
<<unset $gIsolateMemoryUnitKey>>
<</focbutton>>
</div>
<</capture>>
<</for>>
<</if>><<run new setup.OpportunityTemplate(
'light_in_darkness', /* key */
"Light in Darkness", /* Title */
"darko", /* Author */
[ 'city', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_light_in_darkness',
setup.qdiff.hard35, /* difficulty */
[ /* options */
[
'Opportunity_light_in_darkness_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('light_in_the_darkness__enslave'), ],
], [
'Opportunity_light_in_darkness_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('light_in_the_darkness__recruit'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 70],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('light_in_the_darkness__recruit'),
setup.qres.NoQuest('light_in_the_darkness__enslave'), ],
)>><p>
You have received news that an upcoming slave auction at the undercity of Lucgate will feature a very special slave: an exotic specimen from the southern seas gifted in the domain of the light. The price will be astronomical and there is no way that buying them would be profitable for your company —- but there is an option of you sending your slavers over to kidnap the goods. However, this will surely be dangerous, and who knows what might happen to your slavers if they were caught...</p>
<p>
You also need to decide what to do with the goods once you smuggle them out. You can certainly make use of such a highly prized slave, but there is also an option of convincing them to join as a slaver.</p>EnslaveRecruit<<run new setup.OpportunityTemplate(
'loan_tiger', /* key */
"Loan Tiger", /* Title */
"darko", /* Author */
[ 'special', 'fort', 'money',
], /* tags */
4, /* opportunity expiration weeks */
'Opportunity_loan_tiger',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_loan_tiger_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Money(10000),
setup.qc.Event('loan_tiger__payment', 52),
],
], [
'Opportunity_loan_tiger_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], [
'Opportunity_loan_tiger_2',
'Opportunity_loan_tiger_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _tiger = setup.unitgroup.quest_event_loan_tiger1.getUnit()>>
<p>Recently, you have been visited by a well-dressed neko <<name _tiger>>, who represents the <<rep $company.bank>> of the <<lore location_npc>>.
They offered you a loan document, trusting that your company could pay back the amount it loans to you.
You take a look at the document —- it offers you money for a very simple term. <<money 10000>> hard cash now, but you will have to pay <<money 15000>> in a year.</p>
<p>
You could accept the deal as it is —- all things considered, it is not a bad deal at all. There is also always the option to simply decline.
The final option is to try to send a strongly worded letter and negotiate for a better deal. This is a one-time chance only —- if you succeed, you may get a better deal. But if you fail, you will not be able to take any loan at all. The probability of success is equal to your (2<<rep setup.skill.intrigue>> + <<rep setup.skill.social>>)%.
</p>AcceptDeclineNegotiate<<set _chance = ($unit.player.getSkill(setup.skill.intrigue) * 2 + $unit.player.getSkill(setup.skill.social)) / 100.0>>
<<if _chance > Math.random()>>
The bank agrees to the offer and offers you <<money 12500>> instead of <<money 10000>>, while asking the same <<money 15000>> pay in a year.
<<run $company.player.addMoney(12500)>>
<<run setup.qc.Event(setup.event.loan_tiger__payment, 52).apply()>>
<<else>>
Unfortunately, the bank did not agree to give you a better deal.
<</if>><<run new setup.OpportunityTemplate(
'mist_merge', /* key */
'Mist Merge', /* Title */
'darko', /* Author */
[ 'desert', 'favor', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_mist_merge',
setup.qdiff.hardest45, /* difficulty */
[ /* options */
[
'Opportunity_mist_merge_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('mist_merge_disrupt2'), ],
], [
'Opportunity_mist_merge_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('mist_merge_complete23'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 50],
],
[ /* restrictions to generate */
setup.qres.NoQuest('mist_merge_complete23'),
setup.qres.NoQuest('mist_merge_disrupt2'),
setup.qres.OpportunityUnique(), ],
)>><p>Residents from beyond the mist often attempt to cross to this world, but few succeed. A direct trip is extremely dangerous for the demons, and the preferrred method seems to be of possession. With a proper sacrifice and high level <<lore magic_dark>>, one could invite one of the mist residents to come to this world and enter the sacrifice's mind. The sacrifice's mind will be locked securely deep within their body while the demon will have full control over the body, potentially forever.</p>
<p>An eastern settlement has come asking for your company's help thwarting an upcoming mist ritual held near their village. But you know better —- this must be the work of a powerful wizard trying to control a demon over to their side using the ritual above.</p>
<p>
You could do as the village ask and send your best purifiers to thwart the ritual and keep the village safe. This will surely earn the gratitude of the settlement. On the other hand, demons summoned this way are incredibly powerful. You could try to send your slavers to help the wizard in exchange for recruiting one of the possessed person as a slaver. Although if the ritual fails, the consequences will be disastrous.</p>DisruptComplete<<run new setup.OpportunityTemplate(
'pet_shopping', /* key */
"Pet Shopping", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
'money',
'item',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_pet_shopping',
setup.qdiff.hardest43, /* difficulty */
[ /* options */
[
'Opportunity_pet_shopping_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__personality), ],
], [
'Opportunity_pet_shopping_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('pet_shop_of_woes'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 50],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('pet_shop_of_wonders'),
setup.qres.NoQuest('pet_shop_of_wonders_female'),
setup.qres.NoQuest('pet_shop_of_woes'),
setup.qres.Building(setup.buildingtemplate.veteranhall), ],
)>><p>
The citizens of the<<lore location_lucgate>> loves to keep pets of every kind —- dogs, cats, ravens, fish, you name it! In the undercity, humans also make prized pets, and there are several shops which specialized in selling them if you know where to look. These shops can usually pre-train their slaves to cater to whatever their customers desire —- their warehouse fully stocked with humanlike pets of every background.
</p>
<p>
Normally, buying such a pre-trained and made-to-order slaves are exorbitantly expensive. However, one of the most famous pet shops is having a very large promotion, dropping the price to a mere <<money 3000>>. Since the pet comes pre-trained, you can even make a profit from buying the pet, and selling it back!
</p>
<p>
If you are interested in buying such a slave, you can start by filling up the form specifying the details of the slave you desire. Otherwise, you also heard that the pet shop is currently accepting part-time slavers due to high demand. You could send a group of slavers to work there and who knows, you may obtain rare pet equipments if they work sufficiently well.
</p>Buy Yourself a PetSend a Group of Interns<<run new setup.OpportunityTemplate(
'pet_shopping__asset_size', /* key */
"Pet Shopping: Asset Size", /* Title */
"darko", /* Author */
[ 'city', 'veteran', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_pet_shopping__asset_size',
setup.qdiff.hardest43, /* difficulty */
[ /* options */
[
'Opportunity_pet_shopping__asset_size_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_asset_size', 'compact', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__gender),
],
], [
'Opportunity_pet_shopping__asset_size_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_asset_size', 'tasteful', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__gender),
],
], [
'Opportunity_pet_shopping__asset_size_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_asset_size', 'bountiful', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__gender),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Your order is almost complete! Please select which asset size you would like your pet to have.</p>CompactTastefulBountiful<<run new setup.OpportunityTemplate(
'pet_shopping__gender', /* key */
"Pet Shopping: Gender", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_pet_shopping__gender',
setup.qdiff.hardest43, /* difficulty */
[ /* options */
[
'Opportunity_pet_shopping__gender_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('pet_shop_of_wonders'), ],
], [
'Opportunity_pet_shopping__gender_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('pet_shop_of_wonders_female'), ],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Finally, choose your new pet's gender.
</p>MaleFemale<<run new setup.OpportunityTemplate(
'pet_shopping__personality', /* key */
"Pet Shopping: Personality", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_pet_shopping__personality',
setup.qdiff.hardest43, /* difficulty */
[ /* options */
[
'Opportunity_pet_shopping__personality_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_personality', 'watchful', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__talent), ],
], [
'Opportunity_pet_shopping__personality_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_personality', 'lusty', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__talent), ],
], [
'Opportunity_pet_shopping__personality_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_personality', 'loyal', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__talent), ],
], [
'Opportunity_pet_shopping__personality_3',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_personality', 'curious', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__talent), ],
], [
'Opportunity_pet_shopping__personality_4',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_personality', 'naughty', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__talent), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Thank you for shopping with us! What kind of pet are you looking for today?
</p>WatchfulLustyLoyalCuriousNaughty<<run new setup.OpportunityTemplate(
'pet_shopping__talent', /* key */
"Pet Shopping: Talent", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_pet_shopping__talent',
setup.qdiff.hardest43, /* difficulty */
[ /* options */
[
'Opportunity_pet_shopping__talent_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_talent', 'strength', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__asset_size), ],
], [
'Opportunity_pet_shopping__talent_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_talent', 'beauty', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__asset_size), ],
], [
'Opportunity_pet_shopping__talent_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('pet_shop_talent', 'intelligence', 15),
setup.qc.Opportunity(setup.opportunitytemplate.pet_shopping__asset_size), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
We still need some more information about your perfect pet. Which of these attribute do you value the most out of your pet?</p>StrengthBeautyIntelligence<<run new setup.OpportunityTemplate(
'safari_zone', /* key */
'Safari Zone', /* Title */
'darko', /* Author */
[ 'forest', 'order', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_safari_zone',
setup.qdiff.normal21, /* difficulty */
[ /* options */
[
'Opportunity_safari_zone_0',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.marketingoffice),
],
[ /* outcomes */
setup.qc.QuestDirect('safari_zone_sell_slaves'), ],
], [
'Opportunity_safari_zone_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('safari_zone_illegal_hunt2'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.dungeons),
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('safari_zone_sell_slaves'),
setup.qres.NoQuest('safari_zone_illegal_hunt2'), ],
)>><p>
Within the western forests closest to the<<lore location_lucgate>>, there is an oddly fenced area managed by a slaving enterprise. This fenced area forms the so-called "Safari Zone". During certain months, very wealthy clients can go to the safari zone and purchase a safari pass which lasts for an hour, complete with a tranquilizer dart. Once inside, they are free to shoot as many of the animals as possible within an hour —- all the animals bagged can be brought home.</p>
<p>
Only, the "animals" are not your usual fare of animals. Instead of deers and other wildlife, the Safari Zone prouds itself on its stable of humanlikes. These humanlikes are usually slaves who are stripped naked of any and all clothings, and let loose in the forest. They are promised their freedom if they remain uncaught until the end of the hunting season, which further motivates the slaves. The Safari Zone proud themselves on having a large stable of animals, from easy to catch ones into high valued ones like former mercenaries.</p>
<p>
You have the rare opportunity of going into the Safari Zone —- not as a paying customer of course, but either as a slaver company offering to sell slaves to them, or, to sneak inside the Safari Zone and grab a slave of your own.</p>Sell SlavesHunt Illegally<<run new setup.OpportunityTemplate(
'shepherd_of_men', /* key */
'Shepherd of Men', /* Title */
'darko', /* author */
[ 'desert', 'unit', 'money',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_shepherd_of_men',
setup.qdiff.harder38, /* difficulty */
[ /* options */
[
'Opportunity_shepherd_of_men_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('shepherd_of_men_raid'), ],
], [
'Opportunity_shepherd_of_men_1',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.dungeons), ],
[ /* outcomes */
setup.qc.QuestDirect('shepherd_of_men_steal'), ],
], [
'Opportunity_shepherd_of_men_2',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.dungeons), ],
[ /* outcomes */
setup.qc.QuestDirect('shepherd_of_men_capture'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 30],
],
[ /* restrictions to generate */
],
)>><p>
There are many people who makes a living as a shepherd in the eastern deserts. These people raise livestock and usually have to travel great distances to let them feed. Various type of livestock are raised: sheep, goat, camels, and occasionally people.
</p>
<p>
You have learned of a particular people-farm who apparently captured unwary travelers and trained them to be a durable slave.
This presents an opportunity to you: your company can always use a pre-trained slave. Or, you can simply raid the farm for as many goods as possible. There is also the option of enslaving the lead shepherd, but such endeavor must prove extremely dangerous.
</p>Raid the farmSteal a slaveCapture the shepherd (DANGEROUS)<<run new setup.OpportunityTemplate(
'the_half_werewolf', /* key */
"The Half-Werewolf", /* Title */
"darko", /* Author */
[ /* tags */
'vale', 'unknown', 'special',
],
1, /* expiration weeks */
'Opportunity_the_half_werewolf',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_half_werewolf_0',
'Opportunity_the_half_werewolf_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MissingUnitForever('wanderer'),
],
],
[
'Opportunity_the_half_werewolf_1',
'Opportunity_the_half_werewolf_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitle('wanderer', 'quest_mysterious_wanderer_0'),
setup.qc.AddTitle('wanderer', 'quest_shapeshifter__werewolf_1'),
setup.qc.AddHistory('wanderer', "finally found a company who is willing to accept them for what they are"),
setup.qc.Trait('weremale', setup.trait.muscle_verystrong),
setup.qc.Trait('werefemale', setup.trait.muscle_verystrong),
setup.qc.IfThenElse(
setup.qres.Actor('wanderer', setup.qres.Trait(setup.trait.gender_male)),
setup.qc.DoAll([
setup.qc.SetBodyshifter('wanderer', 'weremale')
], undefined),
setup.qc.DoAll([
setup.qc.SetBodyshifter('wanderer', 'werefemale')
], undefined)
),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'wanderer': [
],
'weremale': 'werewolfmale',
'werefemale': 'werewolffemale',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
You have uncovered <<rep $g.wanderer>>'s secret: <<they $g.wanderer>> is in actuality, a
half-man half-werewolf that some sees as unnatural. <<Their $g.wanderer>> heritage had
shunned the poor <<man $g.wanderer>> from the company of both the northerner and the werewolf.
Would you be so heartless as turn <<them $g.wanderer>> away as well?
</p>Turn the wanderer away<p>
As <<rep $g.wanderer>> left your fort, <<they $g.wanderer>> gave one last tentative glance towards you before leaving the fort for good. When not even the company of slavers would even accept a <<man $g.wanderer>> such as <<them $g.wanderer>>, who would?
</p>Accept the wanderer for what they are<p>
<<rep $g.wanderer>> did not respond when you said you are happy to accept <<them $g.wanderer>> for what <<they $g.wanderer>> is. You have to repeat it a few more times before the slack-jawed slaver
<<if $g.wanderer.isHasTrait('per_serious')>>
stoically
<<else>>
tearfully
<</if>>
asked whether you are sure about the decision. A lifetime of being shunned had turned the slaver hopeless to find a company that would accept <<them $g.wanderer>>, even though <<their $g.wanderer>> heritage was in no part <<their $g.wanderer>> own fault.
</p>
<p>
With this,
<<their $g.wanderer>> journey has come to an end, it seems, and in the strangest of company: the company of slavers. No longer <<they $g.wanderer>> need to excuse <<themself $g.wanderer>> during the full moon nights. A happy ending all around, including for you who gain a most talented slaver. Perhaps you could ask the <<uadjgood $g.wanderer>> slaver to transform if it suits your company better...
</p>
<p>
<<successtext 'Note'>>: <<rep $g.wanderer>> can actually shapeshift in the game! Try it out
by interacting with <<rep $g.wanderer>>, and then choosing the <<successtextlite 'Bodyshift'>> interaction.
</p><<run new setup.OpportunityTemplate(
'the_quest_for_excalibur', /* key */
"The Quest for Excalibur", /* Title */
"darko", /* Author */
[ 'veteran', 'fort', 'special', 'unknown',
], /* tags */
setup.INFINITY, /* opportunity expiration weeks */
'Opportunity_the_quest_for_excalibur',
setup.qdiff.extreme69, /* difficulty */
[ /* options */
[
'Opportunity_the_quest_for_excalibur_0',
'Opportunity_the_quest_for_excalibur_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('treasury_assault_finale', {'knight': 'knight'},),
],
],
[
'Opportunity_the_quest_for_excalibur_1',
'Opportunity_the_quest_for_excalibur_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dark_excalibur', {'knight': 'knight'}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'knight': [
], },
[ /* expiration outcomes */
],
)>><p>
The Excalibur sword lies on your desk, while your <<repfull $g.knight>> is currently staying fully bound in one of the dungeon cells. You need to make a decision how to save your <<urace $g.knight>> slaver from the influence of the sword.
</p>
<<set _u = setup.getDutySlaver('viceleader', 'rescuer')>>
<p>
You can try to return the sword back to its vault — with the sword faraway from its wielder, hopefully <<rep $g.knight>> will return back to <<their $g.knight>> <<uadjgood $g.knight>> self. Alternatively, your <<repfull _u>> suggested a very different idea: corrupt the sword entirely until it becomes evil. Surely it will then align with your company's adventures, and will no longer cause problems with <<rep $g.knight>>, although corrupting such a powerful artifact will surely be <<dangertext 'extremely'>> dangerous...
</p>Return Excalibur to the Kingdom of Tor treasury<<include 'Quest_treasury_assault_finale'>>Corrupt the sword (<<dangertext 'WARNING'>>: very dangerous!)<<include 'Quest_dark_excalibur'>><<run new setup.OpportunityTemplate(
'the_serial_bodyswapper__reward', /* key */
"The Serial Bodyswapper: Reward", /* Title */
"darko", /* Author */
[ 'desert', 'special', 'unit', 'trait',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_the_serial_bodyswapper__reward',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_serial_bodyswapper__reward_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity(setup.opportunitytemplate.the_serial_bodyswapper__ritual_runaway),
setup.qc.VarSet('nightshifter_slaver', 0, 1), ],
], [
'Opportunity_the_serial_bodyswapper__reward_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity(setup.opportunitytemplate.the_serial_bodyswapper__ritual_runaway),
setup.qc.VarSet('nightshifter_slaver', 1, 1), ],
], [
'Opportunity_the_serial_bodyswapper__reward_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity(setup.opportunitytemplate.the_serial_bodyswapper__ritual_runaway),
setup.qc.VarSet('nightshifter_slaver', 2, 1), ],
], [
'Opportunity_the_serial_bodyswapper__reward_3',
'Opportunity_the_serial_bodyswapper__reward_3Do',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<set _ids = $varstore.get('nightshifter_eligibles')>>
<<set _f = null>>
<<if _ids[0] in $unit && $unit[_ids[0]].isSlaver()>>
<<set _f = $unit[_ids[0]]>>
<</if>>
<<set _e = null>>
<<if _ids[1] in $unit && $unit[_ids[1]].isSlaver()>>
<<set _e = $unit[_ids[1]]>>
<</if>>
<<set _d = null>>
<<if _ids[2] in $unit && $unit[_ids[2]].isSlaver()>>
<<set _d = $unit[_ids[2]]>>
<</if>>
<p>
Your slavers have the opportunity to reenact for one last time the bodyswapping
ritual in the stronghold of the serial bodyswapper.
<<if !_f && !_e && !_d>>
But no units are eligible.
<<else>>
The eligible slavers are:
<<if _f>>(1) the fighter <<rep _f>><</if>>
<<if _e>>(2) the exploder <<rep _e>><</if>>
<<if _d>>(3) the distractor <<rep _d>><</if>>.
<</if>>
They can swap bodies with one of the bodyswapper's slaves:
<<set _s1 = setup.unitgroup.quest_the_serial_bodyswapper1.getUnit()>>
<<set _s2 = setup.unitgroup.quest_the_serial_bodyswapper2.getUnit()>>
<<set _s3 = setup.unitgroup.quest_night_shift231.getUnit()>>
<<rep _s1>>, <<rep _s2>>, or <<rep _s3>>.
But you can only do this once, and if you choose to bodyswap, the ritual
will surely attract unwanted attention from the surroundings, making it impossible
for your slavers to take these slaves home.
The alternative is to forget about the bodyswap and just take all three of these mindbroken slaves
home.
</p><<if _f>>
Bodyswap the fighter <<rep _f>>
<<else>>
<<dangertext 'NOT ELIGIBLE'>>
<</if>><<if _e>>
Bodyswap the exploder <<= _e.rep()>>
<<else>>
<<dangertext 'NOT ELIGIBLE'>>
<</if>><<if _d>>
Bodyswap the distractor <<rep _d>>
<<else>>
<<dangertext 'NOT ELIGIBLE'>>
<</if>>Just take the slaves<<set _s1 = setup.unitgroup.quest_the_serial_bodyswapper1.getUnit()>>
<<set _s2 = setup.unitgroup.quest_the_serial_bodyswapper2.getUnit()>>
<<set _s3 = setup.unitgroup.quest_night_shift231.getUnit()>>
<p>
You have chosen to make your slavers simply take the three slaves home and forget
about the bodyswapping ritual altogether.
</p>
<<for _islave, _slave range [_s1, _s2, _s3]>>
<<run setup.qc.Slave('unit', 'was a living body storage of the serial bodyswapper').apply({
getActorUnit: () => _slave
})>>
<</for>><<run new setup.OpportunityTemplate(
'the_serial_bodyswapper__ritual_runaway', /* key */
"The Serial Bodyswapper: Choose Slave", /* Title */
"darko", /* Author */
[ 'transformation',
'desert',
'trait',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_the_serial_bodyswapper__ritual_runaway',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_serial_bodyswapper__ritual_runaway_0',
'Opportunity_the_serial_bodyswapper__ritual_runaway_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], [
'Opportunity_the_serial_bodyswapper__ritual_runaway_1',
'Opportunity_the_serial_bodyswapper__ritual_runaway_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], [
'Opportunity_the_serial_bodyswapper__ritual_runaway_2',
'Opportunity_the_serial_bodyswapper__ritual_runaway_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<set _u = null>>
<<set _fk = $varstore.get('nightshifter_eligibles')[$varstore.get('nightshifter_slaver')]>>
<<if _fk in $unit>>
<<set _u = $unit[_fk]>>
<</if>>
<p>
<<if !_u || !_u.isSlaver()>>
The target for the bodyswap is <<dangertext 'missing'>> from your company.
<<else>>
<<set _s1 = setup.unitgroup.quest_the_serial_bodyswapper1.getUnit()>>
<<set _s2 = setup.unitgroup.quest_the_serial_bodyswapper2.getUnit()>>
<<set _s3 = setup.unitgroup.quest_night_shift231.getUnit()>>
The three available slaves for bodyswapping are <<rep _s1>>, <<rep _s2>>, and <<rep _s3>>.
Which slave should <<rep _u>> swap bodies with?
<</if>>
</p><<set _slaver = null>>
<<set _fk = $varstore.get('nightshifter_eligibles')[$varstore.get('nightshifter_slaver')]>>
<<if _fk in $unit>>
<<set _slaver = $unit[_fk]>>
<</if>>
<<if _slaver>>
<p>
The preparations ready, <<rep _slaver>> moves into the bodyswapping circle. Familiar arcane energy envelops the slaver who physically transformed before your slavers' eyes.
<<ubodyswap _slaver _slave>>
The bodyswapping complete, your slavers escape the place before the ritual attracts unwanted attention.
</p>
<<else>>
As the target is no longer in your company, nothing happened.
<</if>>
<<if _slaver>>
<<run setup.qc.Bodyswap('slaver', 'slave').apply({
getActorUnit: (job) => State.temporary[job]
})>>
<</if>><<set _s1 = setup.unitgroup.quest_the_serial_bodyswapper1.getUnit()>>
Choose <<rep _s1>><<set _slave = setup.unitgroup.quest_the_serial_bodyswapper1.getUnit()>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>><<set _s2 = setup.unitgroup.quest_the_serial_bodyswapper2.getUnit()>>
Choose <<rep _s2>><<set _slave = setup.unitgroup.quest_the_serial_bodyswapper2.getUnit()>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>><<set _s3 = setup.unitgroup.quest_night_shift231.getUnit()>>
Choose <<rep _s3>><<set _slave = setup.unitgroup.quest_night_shift231.getUnit()>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>><<run new setup.OpportunityTemplate(
'the_seven_deadly_transformation__virtue_or_sin', /* key */
"The Seven Deadly Transformation: Virtue or Sin", /* Title */
"darko", /* Author */
[ 'transformation',
'veteran',
'sea',
'special',
'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_the_seven_deadly_transformation__virtue_or_sin',
setup.qdiff.hell62, /* difficulty */
[ /* options */
[
'Opportunity_the_seven_deadly_transformation__virtue_or_sin_0',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.NoItem(setup.item.transformation_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
setup.qres.HasUnitWithTitle('seven_deadly_transformation', {job_key: 'slave'}), ],
[ /* outcomes */
setup.qc.QuestDirect('the_seven_deadly_transformation__pride2'), ],
], [
'Opportunity_the_seven_deadly_transformation__virtue_or_sin_1',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire]),
setup.qres.HasUnitWithTitle('seven_deadly_transformation', {job_key: 'slave'}), ],
[ /* outcomes */
setup.qc.QuestDirect('the_seven_deadly_transformation__beginnings'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('the_seven_deadly_transformation__pride2'),
setup.qres.NoQuest('the_seven_deadly_transformation__beginnings'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.TraitExact(setup.trait.tail_werewolf),
setup.qres.TraitExact(setup.trait.eyes_neko),
setup.qres.TraitExact(setup.trait.ears_elf),
setup.qres.TraitExact(setup.trait.mouth_orc),
setup.qres.TraitExact(setup.trait.body_dragonkin),
setup.qres.TraitExact(setup.trait.legs_demon),
setup.qres.TraitExact(setup.trait.tail_werewolf),
setup.qres.Not(setup.qres.TraitExact(setup.trait.arms_werewolf)),
setup.qres.Not(setup.qres.TraitExact(setup.trait.arms_neko)),
setup.qres.Not(setup.qres.TraitExact(setup.trait.arms_demon)),
setup.qres.Not(setup.qres.TraitExact(setup.trait.arms_dragonkin)),
])
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this opportunity, this opportunity is no longer able to be completed.">>
<<else>>
<p>
Having completed all the necessary steps to fulfill <<their _headunit>> destiny, your company has gained clear understanding of what kind of destiny awaited <<rep _headunit>> —- the trials represented the seven great sins: Sloth - represented by their human-like arms, Gluttony - represented by their werewolf tail, Lust - represented by their addled neko eyes, Greed - represented by their twitching elven ears, Wrath - represented by their orcish tusks, Envy - represented by their painful hooves, and Pride - represented by their dragon-like scales. This can only means that the destiny that awaited <<rep _headunit>> is to be an exalted plaything of one of the demon lords of the mist, who loves nothing more than the most debauched and rare of specimens.
</p>
<p>
With a slaver gifted in corruption, it would be possible to deliver the fully corrupted slave yourself to the demon lord. The ritual must take place on a specific island on the southern seas, and furthemore it will be both lengthy and incredibly dangerous. But if done properly, the demon lord might be willing to instill some of the otherwordly technology upon your unworthy company.
<p>
Choosing to complete the ritual will surely condemn <<rep _headunit>> to an eternity of being the demon lord's plaything. Having to spend all <<their _headunit>> time in service to the demon lord's debauched fantasies, it would be impossible for you to meet the slave again. But the reward is great.
</p>
<p>
However, there is hope if you instead foolishly wish to save the slave. If you somehow grow attached to such a mere slave, you could try to contact some of the strongest purifiers living off the southern seas for the slight chance that they will be able to lift the curse out of <<rep _headunit>> forever, freeing <<them _headunit>> from the terrible fate that awaited them. There is no doubt that such purification ritual will also have a profound effect on the slave's body, possibly reverting some of the bodily transformation that has been inflicted upon <<them _headunit>>. If you choose this option and still wish to obtain the demon's technology, then you must find another fated adventurer and begin anew..., so why would anyone choose this option?
</p>
<</if>>Seal the DealSave the Slave<<run new setup.OpportunityTemplate(
'tower_of_roses__point_of_love', /* key */
"Tower of Roses: Point of Love", /* Title */
"darko", /* Author */
[ 'forest', 'special', 'unit',
], /* tags */
1, /* opportunity expiration weeks */
'Opportunity_tower_of_roses__point_of_love',
setup.qdiff.harder37, /* difficulty */
[ /* options */
[
'Opportunity_tower_of_roses__point_of_love_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('tower_of_roses__true_love'), ],
], [
'Opportunity_tower_of_roses__point_of_love_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('tower_of_roses__fatal_attraction'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('tower_of_roses__fatal_attraction'),
setup.qres.NoQuest('tower_of_roses__true_love'),
setup.qres.HasUnitWithTitle('tower_of_roses_admirer', {job_key: 'slaver'}),
setup.qres.VarGte('tower_of_roses_affection', 100), ],
)>><<set _headunit = setup.getUnit({title: "tower_of_roses_admirer", job: setup.job.slaver})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slaver important for this quest, this quest is no longer able to be completed.">>
<<else>>
<<set _prince = setup.unitgroup.quest_tower_of_roses1.getUnit()>>
<p>
Your slaver <<rep _headunit>> received a letter from an elven <<prince _prince>> in the western forests, asking <<them _headunit>> to come privately on a full moon night to <<their _prince>> tower. It seems that <<rep _headunit>>'s efforts have borne fruit, and the <<prince _prince>> is now deeply infatuated with your slaver. Now you have to decide what to do.
</p>
<p>
The first option is to actually go actually fulfill the <<prince _prince>>'s dream and send <<them _prince>> their
<<if _headunit.isHasDick()>>knight in shining armor<<else>>knight in sexy armor<</if>>. Of course, your slaver isn't going to leave your company and instead <<rep _headunit>> will try to recruit <<them _prince>> into the company, which will be the difficult part. Still, <<rep _headunit>> looks enthusiastic with this option —- it seems the love goes both ways.
</p>
<p>
Alternatively, you could use <<rep _headunit>> to enslave the poor <<prince _headunit>>. Of course, <<rep _headunit>> will probably get depressed by this turn of event should you go through with it, but it's surely a small price for such a valuable slave?
</p>
<</if>>Love WinsKidnap<<set setup.opportunitytemplate = {}>>
/* vale */
<<include 'OpportunitySetupHumanVsWere'>>
<<include 'OpportunitySetupFleshShaperTemple'>>
/* city */
<<include 'OpportunitySetupMilkFactory'>>
<<include 'OpportunitySetupDamselInDistress'>>
<<include 'OpportunitySetup_light_in_darkness'>>
<<include 'OpportunitySetup_pet_shopping__gender'>>
<<include 'OpportunitySetup_pet_shopping__asset_size'>>
<<include 'OpportunitySetup_pet_shopping__talent'>>
<<include 'OpportunitySetup_pet_shopping__personality'>>
<<include 'OpportunitySetup_pet_shopping'>>
/* forest */
<<include 'OpportunitySetup_safari_zone'>>
<<include 'OpportunitySetup_gorgon_cave'>>
<<include 'OpportunitySetup_tower_of_roses__point_of_love'>>
/* desert */
<<include 'OpportunitySetup_shepherd_of_men'>>
<<include 'OpportunitySetup_desert_purifiers'>>
<<include 'OpportunitySetup_mist_merge'>>
<<include 'OpportunitySetup_capital_of_slaves'>>
/* sea */
<<include 'OpportunitySetup_the_seven_deadly_transformation__virtue_or_sin'>>
/* choose your own adventure questline */
<<include 'OpportunitySetup_choose_your_own_adventure__path_of_divergence___revenge'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_beginning___gender'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_beginning___relation'>>
<<include 'OpportunitySetup_choose_your_own_adventure_'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_powerup___goal'>>
<<include 'OpportunitySetup_choose_your_own_adventure__chapter_2'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_interlude___bond'>>
<<include 'OpportunitySetup_choose_your_own_adventure__chapter_3'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_showdown___approach'>>
<<include 'OpportunitySetup_choose_your_own_adventure__the_showdown___rest'>>
<<include 'OpportunitySetup_choose_your_own_adventure__chapter_4'>>
<<include 'OpportunitySetup_choose_your_own_adventure__final_chapter'>>
<<include 'OpportunitySetup_choose_your_own_adventure__true_end'>>
/* loan tiger */
<<include 'OpportunitySetup_loan_tiger'>>
/* serial bodyswapper */
<<include 'OpportunitySetup_the_serial_bodyswapper__ritual_runaway'>>
<<include 'OpportunitySetup_the_serial_bodyswapper__reward'>>
/* Other quests */
<<include 'OpportunitySetup_a_most_dangerous_animal__a_modest_offer'>>
<<set _passages = Story.lookup('tags', 'opportunity')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<focwidget marketobjectdisplay>>
<<unitcard $args[0]>>
<</focwidget>>
<<set _prospects = $market.initslavermarket.getMarketObjects()>>
<<focwidget 'loadflavortext'>>
To establish your company, you have joined forces with four other slavers that you have
befriended along the way.
So far your company consists of:
<<for _iunit, _unit range $company.player.getUnits()>>
<<rep _unit>>
<</for>>
<</focwidget>>
<p id='flavortextholder'>
<<loadflavortext>>
</p>
<h3>Choose your starting slavers</h3>
<<set $gMarket_key = $market.initslavermarket.key >>
<<set $gMarket_candelete = false>>
<<include 'MarketBoilerplate'>>
<<focwidget 'refreshmarket'>>
<<if $company.player.getUnits().length >= 5>>
<<set _units = $company.player.getUnits()>>
<<run setup.QuestPool.instantiateQuest(setup.questtemplate.establish_base)>>
<<goto 'PrologueIntro'>>
<<else>>
<<replace '#marketholder'>>
<<loadmarket>>
<</replace>>
<<replace '#flavortextholder'>>
<<loadflavortext>>
<</replace>>
<<refreshmenu>>
<</if>>
<</focwidget>><<include 'AutoSave'>><p>
You did it! You have found an old abandoned fort to establish as the base of operation
for your company: <<rep $company.player>>.
</p>
<p>
The fort is in a sorry state however, and there is much to be done before you can even
begin operation as a proper slaver band.
The first improvement you should construct is the
<<rep setup.buildingtemplate.scouthut>>, which allows your group of slavers
to take on more quests on the wild.
Next, you need to build the <<rep setup.buildingtemplate.dungeons>> to house your slaves, and
<<rep setup.buildingtemplate.slavepens>> to temporarily keep incoming slaves.
You also need to expand the <<rep setup.buildingtemplate.lodgings>> if you ever want to hire more slavers.
All in all, aim to build the <<rep setup.buildingtemplate.grandhall>> as soon as possible.
(Also, make sure to check the Settings menu to change your game's preferences.)
</p>
<p>
You open the gates to your new fort and begin your new career...
</p>
<<focmove "Continue" "AutoSave">>Your company name is <<textbox "$company.player.name" $company.player.getName()>>
<<set $i = {}>>
<br/>
Your first name is <<textbox "$i.firstname" "Thomas" autofocus>>.
<br/>
Your last name is <<textbox "$i.lastname" "Foster">>.
<<set $i.trait_keys = []>>
<<set _preferenceoption = {}>>
<<for _keypref, _pref range setup.SETTINGS_GENDER_PREFERENCE>>
<<set _preferenceoption[_pref.name] = _keypref>>
<</for>>
<p>
Gender preferences (click to change, can also be changed later in the game):
<br/>
Slave: <<cycle '$settings.gender_preference.slave' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
<br/>
Slaver: <<cycle '$settings.gender_preference.slaver' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
<br/>
Other: <<cycle '$settings.other_gender_preference' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</p>
<p>
Check all the tags that you want to <<dangertext 'ban'>>:
<<include 'ShowBannedTags'>>
</p>
<p>
You can <<message 'change other game settings too.'>>
<<include 'SettingsBase'>>
<</message>>
</p>
You are (Choose one to continue.):
<<link '(Male)' 'PrologueChoose'>>
<<set $i.gender_key = setup.trait.gender_male.key>>
<</link>>
<<link '(Female)' 'PrologueChoose'>>
<<set $i.gender_key = setup.trait.gender_female.key>>
<</link>>You can either continue to fully customize your player character, or start with a
predefined one:
<<include 'ProloguePicked'>>
<br/>
<br/>
[[Fully Customize!|PrologueRace]]
<br/>
<<rep setup.skill.combat>>-oriented
<<link 'brave desertfolk knight capable of using both arms equally well' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_humandesert'>>
<<set $i.trait_keys = [
'bg_knight',
'per_brave',
'skill_ambidextrous',
]>>
<</link>>
<br/>
<<rep setup.skill.brawn>>-oriented
<<link 'tough orc blacksmith with an intimidating posture' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_orc'>>
<<set $i.trait_keys = [
'bg_metalworker',
'per_tough',
'skill_intimidating',
]>>
<</link>>
<br/>
<<rep setup.skill.survival>>-oriented
<<link 'loner dragonkin wildman capable of flight' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_dragonkin'>>
<<set $i.trait_keys = [
'bg_wildman',
'per_loner',
'wings_dragonkin',
]>>
<</link>>
<br/>
<<rep setup.skill.intrigue>>-oriented
<<link 'deceitful human assassin with many connections' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_humankingdom'>>
<<set $i.trait_keys = [
'bg_assassin',
'per_deceitful',
'skill_connected',
]>>
<</link>>
<br/>
<<rep setup.skill.slaving>>-oriented
<<link 'dominant engineer from a faraway land beyond the southern seas with a hypnotizing gaze' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_humansea'>>
<<set $i.trait_keys = [
'bg_engineer',
'per_dominant',
'skill_hypnotic',
]>>
<</link>>
<br/>
<<rep setup.skill.knowledge>>-oriented
<<link 'logical northerner scholar with a creative mind' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_humanvale'>>
<<set $i.trait_keys = [
'bg_scholar',
'per_logical',
'skill_creative',
]>>
<</link>>
<br/>
<<rep setup.skill.social>>-oriented
<<link 'kind neko noble with a divine voice' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_neko'>>
<<set $i.trait_keys = [
'bg_noble',
'per_kind',
'skill_entertain',
]>>
<</link>>
<br/>
<<rep setup.skill.aid>>-oriented
<<link 'playful elven healer with vast knowledge on how to mix potions' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_elf'>>
<<set $i.trait_keys = [
'bg_healer',
'per_playful',
'skill_alchemy',
]>>
<</link>>
<br/>
<<rep setup.skill.arcane>>-oriented
<<link 'diligent human mystic gifted in the domain of the light magic' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_humankingdom'>>
<<set $i.trait_keys = [
'bg_mystic',
'per_studious',
'magic_light',
]>>
<</link>>
<br/>
<<rep setup.skill.sex>>-oriented
<<link 'lustful werewolf courtesan capable of communicating with animals' 'PrologueGenerateChar'>>
<<set $i.race_key = 'race_werewolf'>>
<<set $i.trait_keys = [
'bg_courtesan',
'per_lustful',
'skill_animal',
]>>
<</link>><<message '(click to see your choices so far)'>>
<<rep setup.trait[$i.gender_key]>>
<<if $i.race_key>> <<rep setup.trait[$i.race_key]>> <</if>>
<<for _itrait, _trait range $i.trait_keys>> <<rep setup.trait[_trait]>> <</for>>
<</message>>You are:
<<include 'ProloguePicked'>>
<<for _irace, _race range setup.TraitHelper.getAllTraitsOfTags(['race'])>>
<<if _race != setup.trait.race_demon>>
<<capture _race>>
<br/>
<<set _text = `${setup.Article(_race.getName(), true)}`>>
<<rep _race>>
<<link _text 'PrologueGenitals1'>>
<<run $i.race_key = _race.key>>
<</link>>
<</capture>>
<</if>>
<</for>>You have:
<<include 'ProloguePicked'>>
<<if $i.gender_key == 'gender_female'>>
<<set _tag = 'breast'>>
<<else>>
<<set _tag = 'dick'>>
<</if>>
<<for _igenital, _genital range setup.TraitHelper.getAllTraitsOfTags([_tag])>>
<<if _genital.getTags().includes('rare') || _genital.getTags().includes('medium') || _genital.getTags().includes('common')>>
<<capture _genital>>
<br/>
<<set _text = `${setup.Article(_genital.getName(), true)}`>>
<<rep _genital>>
<<link _text 'PrologueGenitals2'>>
<<run $i.trait_keys.push(_genital.key)>>
<</link>>:
<<= _genital.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</for>>You have:
<<include 'ProloguePicked'>>
<<if $i.gender_key == 'gender_female'>>
<<set _tag = 'vagina'>>
<<else>>
<<set _tag = 'balls'>>
<</if>>
<<for _igenital, _genital range setup.TraitHelper.getAllTraitsOfTags([_tag])>>
<<if _genital.getTags().includes('rare') || _genital.getTags().includes('medium') || _genital.getTags().includes('common')>>
<<capture _genital>>
<br/>
<<set _text = `${setup.Article(_genital.getName(), true)}`>>
<<rep _genital>>
<<link _text 'PrologueGenitals3'>>
<<run $i.trait_keys.push(_genital.key)>>
<</link>>:
<<= _genital.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</for>>You have:
<<include 'ProloguePicked'>>
<<for _igenital, _genital range setup.TraitHelper.getAllTraitsOfTags(['anus'])>>
<<if _genital.getTags().includes('rare') || _genital.getTags().includes('medium') || _genital.getTags().includes('common')>>
<<capture _genital>>
<br/>
<<set _text = `${setup.Article(_genital.getName(), true)}`>>
<<rep _genital>>
<<link _text 'PrologueBg'>>
<<run $i.trait_keys.push(_genital.key)>>
<</link>>:
<<= _genital.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</for>>Before being the leader of a slaving company, you were:
<<message '(Help)'>>
If you are confused by the number of options available, it is suggested
to pick the background in which you are most comfortably roleplaying at.
While background has effect on skills, it is ultimately minor and the game
is designed to be playable with any combination of starting decisions.
<</message>>
<<include 'ProloguePicked'>>
<<for _ibackground, _background range setup.TraitHelper.getAllTraitsOfTags(['bg'])>>
<<if _background.getTags().includes('common') ||
_background.getTags().includes('medium') ||
_background.getTags().includes('rare')>>
<<capture _background>>
<br/>
<<set _text = `${setup.Article(_background.getName(), true)}`>>
<<rep _background>>
<<link _text 'PrologueTrait'>>
<<run $i.trait_keys.push(_background.key)>>
<</link>>:
<<= _background.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</for>>Your most defining trait is that you are
(Choose one.):
<<include 'ProloguePicked'>>
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['per'])>>
<<if _trait.getTags().includes('common') ||
_trait.getTags().includes('medium') ||
_trait.getTags().includes('rare')>>
<<if _trait != setup.trait.per_slow && _trait != setup.trait.per_smart>>
<<capture _trait>>
<br/>
<<set _text = `${_trait.getName()}`>>
<<rep _trait>>
<<link _text 'PrologueSkill'>>
<<run $i.trait_keys.push(_trait.key)>>
<</link>>:
<<= _trait.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</if>>
<</for>>Your are skilled in:
(Note: If you choose the
<<rep setup.trait.magic_fire>><<rep setup.trait.magic_water>><<rep setup.trait.magic_wind>><<rep setup.trait.magic_earth>><<rep setup.trait.magic_light>><<rep setup.trait.magic_dark>>
traits, they can be upgraded to a stronger version later in the game.)
<<include 'ProloguePicked'>>
<<for _itrait, _trait range setup.TraitHelper.getAllTraitsOfTags(['skill'])>>
<<if _trait.getTags().includes('common') ||
_trait.getTags().includes('medium') ||
_trait.getTags().includes('rare')>>
<<capture _trait>>
<br/>
<<set _text = `${_trait.getName()}`>>
<<rep _trait>>
<<link _text 'PrologueGenerateChar'>>
<<run $i.trait_keys.push(_trait.key)>>
<</link>>:
<<= _trait.getDescriptionDisplay()>>
<</capture>>
<</if>>
<</for>>
<<if $i.race_key == 'race_elf' || $i.race_key == 'race_dragonkin'>>
<br/>
<<set _text = `${setup.trait.skill_flight.getName()}`>>
<<rep setup.trait.skill_flight>>
<<link _text 'PrologueGenerateChar'>>
<<switch $i.race_key>>
<<case 'race_elf'>>
<<run $i.trait_keys.push('wings_elf')>>
<<case 'race_dragonkin'>>
<<run $i.trait_keys.push('wings_dragonkin')>>
<</switch>>
<</link>>:
<<= setup.trait.skill_flight.getDescriptionDisplay()>>
(This option is available to you because you are <<rep setup.trait[$i.race_key]>>)
<</if>><<set _unitgroup = setup.unitgroup[$i.race_key.substring(5)]>>
This is your unit:
/*
(Note that the skill focuses i.e., the three icons next to your name
like
<<rep setup.skill.combat>><<rep setup.skill.brawn>><<rep setup.skill.intrigue>>
can be changed anytime later in the game. You can also change your player's portrait later.):
*/
<<focwidget 'generatechar'>>
<<set _unit = _unitgroup.getUnit({trait_key: $i.gender_key, retries: 1000})>>
/* remove background and skills */
<<run _unit.removeTraitsWithTag('bg')>>
<<run _unit.removeTraitsWithTag('skill')>>
<<run _unit.removeTraitExact(setup.trait.wings_elf)>>
<<run _unit.removeTraitExact(setup.trait.wings_dragonkin)>>
/* add traits */
<<for _itraitkey, _traitkey range $i.trait_keys>>
<<run _unit.addTrait(setup.trait[_traitkey], /* trait group = */ null, /* is replace = */ true)>>
<</for>>
/* reset innate traits */
<<run _unit.resetInnateTraits()>>
/* set name */
<<run _unit.setName($i.firstname, $i.lastname)>>
<<replace '#genunitdiv'>>
<<unitcard _unit>>
<</replace>>
<</focwidget>>
<div id='genunitdiv'></div>
<<focwidget 'refreshgenerate'>>
<<run _unit.delete()>>
<<generatechar>>
<</focwidget>>
<<link '(regenerate unit)'>>
<<refreshgenerate>>
<</link>>
<<link "(randomize portrait)">>
<<run $unitimage.resetImage(_unit, true)>>
<<replace '#genunitdiv'>>
<<unitcard _unit>>
<</replace>>
<</link>>
<<message '(custom portrait)'>>
Put your image in the
<<successtext "dist/img/customunit">> folder.
Then, enter the filename in the text box following this.
For example, if you put in
<<successtextlite 'dist/img/customunit/girl.png'>> file,
then enter in the following <<successtextlite 'girl.png'>>.
Leave blank to use the default automatically-generated image.
<br/>
<<textbox "_unit.custom_image_name" _unit.custom_image_name>>
<<link 'Apply'>>
<<replace '#genunitdiv'>>
<<unitcard _unit>>
<</replace>>
<</link>>
<</message>>
<<foctimed 0s>>
<<generatechar>>
<</foctimed>>
<br/>
<br/>
<<link '[select this unit as your character]' 'PrologueCompanyGen'>>
<<unset $i>>
<<run delete $unit[_unit.key]>>
<<set _unit.key = 'player'>>
<<set $unit.player = _unit>>
<<run $titlelist.addTitle($unit.player, setup.title.leader)>>
<<run _unit.initSkillFocuses()>>
<<run $company.player.addUnit($unit.player, setup.job.slaver)>>
<<run $unit.player.levelUp()>>
<<run $unit.player.levelUp()>>
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<for _i to 0; _i lt 16; _i++>>
<<run new setup.MarketObject(
setup.unitgroup.all.getUnit(_preference),
0,
1,
$market.initslavermarket
)>>
<</for>>
<<run $notification.popAll()>>
<</link>><<set _criteriadeliverer = new setup.UnitCriteria(
null, /* key */
'Deliverer', /* name */
[
setup.trait.bg_slaver,
setup.trait.bg_whore,
setup.trait.per_independent,
setup.trait.per_attentive,
],
[
setup.trait.per_dreamy,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.NoTrait(setup.trait.per_chaste),
],
{
slaving: 1,
social: 1,
sex: 1,
}
)>>
<<set _criteriamerchandise = new setup.UnitCriteria(
null, /* key */
'Merchandise', /* name */
[
setup.trait.bg_artisan,
setup.trait.bg_whore,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_empath,
setup.trait.per_attentive,
setup.trait.per_calm,
setup.trait.per_playful,
setup.trait.per_studious,
setup.trait.training_oral_basic,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master,
setup.trait.training_vagina_basic,
setup.trait.training_vagina_advanced,
setup.trait.training_vagina_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_slow,
setup.trait.per_chaste,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.AnyTrait([setup.trait.training_obedience_basic, setup.trait.training_obedience_advanced, setup.trait.training_obedience_master]),
],
{
}
)>>
<<run new setup.QuestTemplate(
'caged_tomato', /* key */
"Caged Tomato", /* Title */
"Alberich", /* Author */
[ 'city', 'order'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'deliverer': [_criteriadeliverer, 3],
'merchandise': _criteriamerchandise, },
{ /* actors */
'buddy': setup.unitgroup.city_allmale, },
[ /* costs */
],
'Quest_caged_tomato',
setup.qdiff.normal25, /* difficulty */
[ /* outcomes */
[
'Quest_caged_tomatoCrit',
[
setup.qc.MoneyUnitValue("merchandise", 1.4, 20000),
setup.qc.MissingUnitForever('merchandise'),
setup.qc.Favor('humankingdom', 100), ],
], [
'Quest_caged_tomatoCrit',
[
setup.qc.MoneyUnitValue("merchandise", 1.1, 20000),
setup.qc.Favor('humankingdom', 100),
setup.qc.MissingUnitForever('merchandise'), ],
], [
'Quest_caged_tomatoCrit',
[
setup.qc.MissingUnitRebuy('merchandise', 1), ],
], [
'Quest_caged_tomatoCrit',
[
setup.qc.MissingUnitRebuy('merchandise', 1),
setup.qc.MoneyCustom(-1000), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 60],
],
[ /* restrictions to generate */
setup.qres.HasSlaverWithTraits([setup.trait.gender_female]),
setup.qres.HasSlaveWithTraits([setup.trait.gender_female]),
],
)>><p>A specialty buyer in the<<lore location_lucgate>> has placed an order to satisfy needs he can't placate with anyone else. He offers enough to get your attention.</p>
<p>For this mission you'll need two human females: the merchandise herself, and a trusted slaver to deliver the merchandise after training her up to standards.</p>
<p>
<<dangertext 'Warning'>>: The slave will most likely be gone forever! But if you succeed you will recover more than her market value.
</p>
<p>
(<<successtextlite "Author's note">>: This story is either an affectionate parody or a shameless corruption of the tales of <a href="http://gutenberg.net.au/ebooks11/1100651h.html">Damon Runyon</a>.)
</p><p>
(<<successtextlite "Author's note">>: This story is told from the viewpoint of a third party, rather than your slave or slavers.
</p>
<p> I am strolling through the merchants' quarter in Lucgate pondering how I am to scare up a little argent to lay on a combat between two barnyard avians that takes place that evening, and to which my old pal <<rep $g.buddy>> invites me, when a pretty young damsel I never see before addresses me as if we are more than a little friendly:
</p>
<p>
“Hey, stud!”
</p>
<p>
In sober fact I am nowise as young as I am previously, and if you want to make a stud out of me, your best bet is to nail me up inside a wall and put some plaster on top, but I do not elect to share this information with the pretty young damsel. Instead I politely suggest that I am by no means overflowing with argent, and that she would do better to find such a guy as can purchase the wares she wishes to lay on the market. But she only laughs.
</p>
<p>
“I do not want you to pay me,” she says. “In fact, I am thinking to pay <i>you</i>.”
</p>
<p>
Now this proposition is as fishy as a seagull's breath, but I have a line from the rooster's beak on this avian contest I mention earlier, where the Grey is sure to murder the Roundhead if no one spikes his feed. A little clinky will go a long way with me at this time. So I ask for further particulars.
</p>
<p>
This young damsel introduces herself as <<rep $g.deliverer>>, from the well established firm of <<rep $company.player>>. It happens I am familiar with this <<rep $company.player>>, as it is notorious as a dealer in caged tomatoes, and caged tomatoes are somewhat less than lawful in His Majesty's Dominions. But I do not wish to see one rooster half-kill another to no purpose, and from where I stand there will be no purpose to it if I do not have some clinky riding on the contest, so I listen for more.
</p>
<p>
It seems this <<rep $g.deliverer>> wants to pay me good coin to provide some services in the male-only line, without the benefit of my garments. And as I look her up and down and wonder whether she is blind or infirm, she shushes me with one hand and says it is not for her, but for another damsel entirely, by the name of <<rep $g.merchandise>>. Now I shudder at the thought of what an old crow I am being solicited to be conjugal with, or what non-human species she may belong to, and whether this species eats its mates after mating, but I think again of the Grey getting his spurs into the Roundhead without earning me a copper. So I proceed with <<rep $g.deliverer>> to a quiet little room where the transaction is to take place.
</p>
<p>
To my amazement this <<rep $g.merchandise>> turns out to be both young and comely, and as <<uadj $g.merchandise>> as you please. From the way she follows orders from <<rep $g.deliverer>>, she is a caged tomato from <<rep $company.player>>'s private greenhouse, and not a paying customer at all, but I do not think this is a time to advance unwanted inquiries or be hung up on legal formalities. At a word of command, <<rep $g.merchandise>> peels and falls back on the bed and invites me to be served a single old-fashioned. Now I am not at this time well provided with female company, especially on an unpaid basis, but I do not need to be told how to be served a single old-fashioned. I am soon enough unclad and on top and inside, and <<rep $g.deliverer>> is cheering us on as we go at it the way male and female parties have been going at it since before the first bed is built, and maybe earlier.
</p>
<p>
In due course I deliver the goods, give <<rep $g.merchandise>> a peck on the check, and prepare to receive my pay and be off to lay heavy bets on the Grey. But it seems this is not at all the plan as <<rep $g.deliverer>> conceives it. She says my pay is not yet half earned, and while we can have a pause for refreshments, there is no point to me or <<rep $g.merchandise>> getting any garments on just yet.
</p>
<p>
I once spend time with a young lady who thinks a guy my age is something like a Royal Engineer with a ballista, who can change elevation, hold fire, pull the trigger, and reload on command, and she feels entitled to show some resentment when this proves not to be the case. When I see her next, she is with a much younger guy who is commencing to tire of her company, and when I see her last, she is with a large tabby cat. But she does not pay out good argent in time of urgent need, the way this <<rep $g.deliverer>> does, so I keep my reminiscences to myself and plunge once more into the fray. <<rep $g.deliverer>> is still watching our every move, but to make us feel more at ease she peels off her own garments first.
</p>
<p>
Young <<rep $g.merchandise>> gets her chest close to mine, gets to work <<uadv $g.merchandise>>, provides some better-than-good touching and guzzling, then kisses her way down south and gives me the full service with her tasty young pink-lipped bazoo. I will say, this <<rep $company.player>> trains its merchandise very well, because she only has to pump away for ten minutes or so, gulp me halfway down the way her breakfast goes, and I manage to deliver the goods for the <i>second</i> time for the <i>first</i> time since His Majesty's coronation ball, and on the afternoon I speak of His Majesty has been on the throne quite some time.
</p>
<p>
Now I feel sure I can take my wages and be on my way. But <<rep $g.deliverer>> tells me the deal does not work this way. I can rest a few minutes, but more is required of me. So the three of us relax a few minutes in the altogether, and then <<rep $g.merchandise>> guides me back to the bed, picks up a jar of ointment, and proceeds to administer the old rub-a-dub-dub.
</p>
<p>
Now when I am a good bit younger than I am at this time, I am a past master at the old rub-a-dub-dub, and think nothing of rub-a-dub-dubbing four or five times in a row. But a lot of water has gone under a lot of bridges since then, and you start to wonder where pleasure ends and pain begins.
</p>
<p>
The well <<rep $g.merchandise>> is drawing from is not producing much water, but <<rep $g.deliverer>> keeps <<rep $g.merchandise>> drawing, and she gets to her work <<uadv $g.merchandise>>. As the painful proceedings continue, <<rep $g.deliverer>> enjoys the sight more and more, and while she never lays a finger on either one of us, she lays two or three fingers on herself, and makes a little music to accompany what we do, so that I wonder if she is on <<rep $company.player>>'s business or just having a good time. Before all is done, the well itself runs dry, and to know when <<rep $g.merchandise>> brings me over the edge again, you have to either listen to my breathing or else take my word for it.
</p>
<p>
No ordeal can last forever, and even executions end eventually, as my dear old dad always says before he is executed himself. <<rep $g.deliverer>> is satisfied, <<rep $g.merchandise>> is allowed to rest, I get my purse of coins, I get properly clothed, and I am ready to stagger out of there. “I do not,” I say to <<rep $g.deliverer>>, “wish to seem ungrateful, but I cannot help but wonder why you pick a guy my age for an exercise like this. His Majesty's dominion is full of spring chickens who can rub-a-dub-dub five times in a row, and who would volunteer for an afternoon like this without charging a copper.”
</p>
<p>
“Oh,” she explains, “that is the whole point of the exercise. Young <<rep $g.merchandise>> there is being sold to an aged relic who is past his prime when you are knee high to a wombat's wedding tackle. But the silly old coot does not wish to admit this, and is ready to pay good coin of the realm for a skilled operator who can bring him over the finish when he can barely start, and make him think he has all the juice he ever has, which the old folks at court say is never much to begin with, at that. So I am training <<rep $g.merchandise>> here to bring out the last drop from an older chap in a state of exhaustion, and I must say you are a great training aid. This is one part conjugal arts to two parts gravedigging.”
</p>
<p>
I am commencing to think that what she proposes is less gravedigging than necromancy, and to feel more than a little sorry for the caged tomato assigned to this task. Part of me wishes to speak up and offer my next month's wages to take her off the old relic's hands myself, even adding in my sure winnings from when the Grey gives what-for to the Roundhead. But another part of me reflects that if I do this I am putting myself in for months or years of what I barely survive today, which will mean an early grave for sure, so I keep my tongue where it will do the least harm.
</p>
<p>
So I make my way home with my pouch of coin and collapse into bed again, this time from pure exhaustion. And I suppose it is inevitable that I miss the fight between the barnyard avians that gets me into this ordeal in the first place, and have to listen to my old pal <<rep $g.buddy>>, who cannot shut up about it all the next morning.
</p>
<p>
“It is as I tell you,” he says. “You really should listen to me and lay some clinky argent on the line. The Grey charges in early, scores a quick slash with his spurs, and the rest of the night is pure torture for the Roundhead. I am sure his fighting career is over and I doubt he can look a hen in the face ever again. You never see a cock so worn out.”
</p>
<p>
“Yes I do,” I say, but I decline to elaborate.
</p>
<<if $gOutcome == 'crit'>>
<p>I afterwards hear that the sale goes off without a hitch, <<rep $company.player>> obtains a large bonus from the customer, and <<rep $g.merchandise>> is such a hit the old coot marries her and she inherits his fortune after he dies happy three weeks later. Rumor has it she buys a large supply of whips and chains, hires a few unscrupulous adventurers, and sets herself up in business as a dealer in caged tomatoes.</p>
<<elseif $gOutcome == 'success'>>
<p>I afterwards hear that the sale goes off without a hitch, and <<rep $g.merchandise>> is such a hit the old coot marries her and she inherits his fortune after he dies happy three weeks later. Rumor has it she buys a large supply of whips and chains, hires a few unscrupulous adventurers, and sets herself up in business as a dealer in caged tomatoes.</p>
<<elseif $gOutcome == 'failure'>>
<p>I afterwards hear things do not go so well for <<rep $company.player>>. The customer dies from exhaustion the first night, as I can warn him if he thinks to ask my advice. Word gets around that the young lady is nothing but a caged tomato, the purchase price never makes it out of town, and <<rep $g.deliverer>> has to take it on the wing to avoid an unpleasant scene.</p>
<<elseif $gOutcome == 'disaster'>>
<p>I afterwards hear things do not go so well for <<rep $company.player>>. The customer dies from exhaustion the first night, as I can warn him if he thinks to ask my advice. Word gets around that the young lady is nothing but a caged tomato, the purchase price never makes it out of town, and <<rep $g.deliverer>> has to pay a substantial bribe to keep herself on the right side of the cage.</p>
<</if>><<set _criteriapupil = new setup.UnitCriteria(
null, /* key */
'Pupil', /* name */
[
setup.trait.bg_mythical,
setup.trait.bg_wiseman,
setup.trait.bg_mystic,
setup.trait.bg_monk,
setup.trait.bg_priest,
setup.trait.bg_healer,
setup.trait.bg_apprentice,
setup.trait.bg_scholar,
setup.trait.per_chaste,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
],
[
setup.trait.bg_demon,
setup.trait.bg_assassin,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_raider,
setup.trait.bg_pirate,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_mercenary,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Trait(setup.trait.gender_female),
setup.qres.HasTitle('quest_enlightenment_1_graduate_0'),
setup.qres.Trait(setup.trait.magic_light),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'enlightenment_of_the_heart', /* key */
"Enlightenment of the Heart", /* Title */
"Alberich", /* Author */
[
'veteran', 'trait', 'prep'
], /* tags */
2, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'pupil': [_criteriapupil, 3]},
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1', },
[ /* costs */
setup.qc.Money(-10000), ],
'Quest_enlightenment_of_the_heart',
setup.qdiff.hardest43, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.AddTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.TraitRemove('pupil', setup.trait.per_evil),
setup.qc.MoneyCustom(5000),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 2, true), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.AddTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.TraitRemove('pupil', setup.trait.per_evil),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 1, true), ],
], [
'Quest_enlightenment_of_the_heartFailure',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.TraitRemove('pupil', setup.trait.per_chaste), ],
], [
'Quest_enlightenment_of_the_heartDisaster',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.MissingUnit('pupil'),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_honorable, setup.trait.per_calm], 2, true),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 30],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.HasUnitWithTitle('quest_enlightenment_1_graduate_0', {
job_key: "slaver",
}),
],
[ /* expiration outcomes */
],
)>><p>
One of your diligent slavers has successfully graduated the first phase of Master training at the Women's Academy of Light.
<<set _vice = $dutylist.getUnit('ViceLeader')>>
<<if _vice>> Your vice leader, <<rep _vice>>, brings you
<<else>> You have now received <</if>>
a letter from the Academy, singing her praises as if to a proud
<<if $unit.player.isMale()>>father <<else>> mother <</if>>.
</p>
<p>
As the letter explains in lengthy, florid prose, the young lady shows true promise, talent, and devotion, as needed to enter the ranks of those who know the Inner Light, and bring its blessings to the world. In surmounting the difficulties attendant on the course, and achieving Enlightenment of the Mind, she has overcome all obstacles, penetrated all riddles, taken a whetstone to her wits, and thus armed herself on the way to obtaining all mysteries, all secrets, of the Light Mage's knowledge. Now is her mind ready to mount the stair to the next level of readiness, to obtain true riches from the Academy's treasury of knowledge, and earn the admiration of all.
</p>
<p>
<i>The way these people write</i>, you think, <i>are we sure they're not from the Academy of Wind?</i>
</p>
<p>
Now, the letter goes on to say, to approach ever nearer the goal, it is necessary that her enlightened mind be combined with a purified heart . . .
</p>
<p>
<i><b>My</b> slavers?</i> you think. <i> A purified heart? A heart at all? Am I throwing my money away here?</i>
</p>
<p>
. . . and the necessary spiritual exercises may be had at the Women's Academy of Light, in return for an entirely reasonable tuition, barely a pittance in comparison with the wisdom and world-healing lore that soon will be hers . . .
</p>
<p>
<I>Nuts</i>, you think. <i>Can't she just blow somebody and get the spell book already?</i>
</p>
<p>
The letter reveals no such option; if you wish your slaver to continue at the academy, it's another ten thousand for tuition. </p><p>
<<rep $g.pupil>> returns to the unimposing stone building in Lucgate, which still houses the Women's Academy of Light. Again she is greeted by the handsome, warm, but proper <<rep $g.master>>. For now only one other student is present. They take their purifying baths, change into white academic robes, and enjoy just one simple meal together. After that the two are not to see each other for the rest of the training. The spiritual exercises of the heart work best when the pupil is isolated, but for the objects of her meditation and her spiritual guide—in this case, <<rep $g.master>> himself.
</p>
<p>
The prior course was austere, but this one is more so. <<rep $g.pupil>> is straitly given in charge that she is not to eat one bite more than she is given at meals, and those are to be light and infrequent. At breakfast she is to drink an alchemical draught designed to intensify her feelings. She is to sleep not one minute more than she is allowed by her guide, and he will allow far less than she is accustomed to. She is not to allow herself any sexual release, not so much as a single erotic touch, and any violation of this order will be grounds for immediate expulsion. Her mind is to be bent entirely to the themes and meditations of the exercises, and each day she is to write in a diary and confess to <<rep $g.master>> all her failings in her devotion to this.
</p>
<p>
Each day opens with a meditation on the Pure Light. But the main business of the first week is an examination of <<rep $g.pupil>>'s own life and failings, each exercise a meditation, and each meditation an hour. She is to consider the Tale of the Sun Child, and all occasions when she has done harm to a being no less harmless; and the Verse of the Dark River, and how each of her meanest deeds has reverberated to the harm of the world. Tale follows tale and reflection follows reflection.
</p>
<p>
She is required to meditate on tales of mindless creatures that, by their natures, do harm, show no gratitude, and know no other way.
<<if $g.pupil.isHasTrait('race_neko')>> She is forced to dwell on her own birth as a Neko, on the cruel and predatory ways of cats and cat-like beings, their readiness to torment their prey before devouring it, and the presence of such fantasies in her own dark dreams. She cannot but deeply question whether such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_werewolf')>> She is forced to dwell on her own whelping as a werewolf, on the heartless pack-hunting ways of her lupine sires that sometimes fill her dreams. She cannot but deeply question whether a born predator with the smell of blood in its nostrils could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_orc')>> She is forced to dwell on her birth and nature as an orc, one of that notorious race of debauched green-skinned rapists, on how her very existence must surely rely on more forced ravishing than gentle lovemaking, and the way her kind ravage the countryside and terrorize all others. Could a sprig from such a fleshly, degenerate race know the ways of Light and bring healing to the world?
<<elseif $g.pupil.isHasTrait('race_dragonkin')>> She is forced to dwell on her ovoviviparous hatching as a dragonkin, ultimate spawn of those haughty, winged tyrants who know the rest of the world only as prey and a source of plunder, and who bring fear and strange desire rather than love or happiness. She must confront herself and ask how such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_demon')>> She is forced to dwell her own corrupt spawning as a demon beyond the mists, fashioned from birth to tempt and corrupt, not to guide and to soothe, and to work subversion and pain, not wisdom and healing, and to bring the pleasure that leads to pain and ruin. She must face the absurdity that such a being, from its arrival a foul seed in the clean soil of this world, might even <i>touch</i> the Pure Light, let alone master its ways and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_elf')>> She is forced to dwell on her long life and upbringing as an elf, one of those haughty, aloof woodfolk who cannot flit through the trees in search of prey without admiring their own fleetness, and sneering at the grossness of every other kind; for whom a reflective forest pool is an irresistible temptation to boundless self-admiration. In their disdain for every other kind, did not the ancient elves subject their neko foes to a most disgraceful living death in the Field of Moai? And the nature of those sadistic monsters, who left those poor catfolk as eternal statues with dildos up their backsides, is surely the nature of <<rep $g.pupil>> herself, who yet imagines that she can summon the pure light, and bring healing to the world.
<<else>> She is forced to dwell on her birth as a <i>human</i>, the race that must have invented every evil on the earth, that has never ceased killing and enslaving its own kind and every other. When her kind are not sweating their lives away or plotting to do each other harm, they dull themselves with drink or debauchery or amuse themselves with the most degenerate games. Why, there are some who have never owned a slave in their lives, yet would like to <i>imagine</i> themselves as chiefs of a band of slavers. In their daydreams they cruelly capture, train, and market their fellow beings amidst a life of lechery and libertine adventures, dreamed up by the sickest minds human “civilization” can produce. No race capable of such pastimes could be trusted with anything good, and how can she, one of them, hope to know the ways of Light and bring healing to the world? <</if>>
</p>
<p>
The thoughts are depressing and disturbing, exactly as they are meant to be. Yet the next exercises are worse. By now her head is swimming with fatigue and hunger, and she must meditate on tales of bad character, the lazy wife whose children went hungry, the foul-mouthed magistrate who worked the greatest injustice from a simple fit of bad temper. She is encouraged to focus on pictures from these tales, and see the petty spitefulness of the characters in their painted faces, and where it leads. As the tales continue, each more than the last seems written to stir the deepest distress and self-loathing within <<rep $g.pupil>>—not just for her corrupt origins, but for the ugliness within her, that has grown since the first day she could think. Her smallest transgressions, her most persistent vices, fill her mind for the hours of the exercises, and mortify her.
<<if $g.pupil.isHasTrait('per_lunatic')>> She must confront her own lunacy—and in her woozy, hungry, sleep-deprived clarity, must ask herself whether she is retreating from the realities of her own badness into the comforting fog of a madwoman's dreaming. <</if>>
<<if $g.pupil.isHasTrait('per_lustful')>> She must face her own unbridled lusts, and as the deprivations of the flesh take hold of her, must face the truth that the creatures she seeks to sate her lusts on have hearts as well as bodies, and to simply take them at pleasure and for pleasure is to do countless invisible injuries. <</if>>
<<if $g.pupil.isHasTrait('per_aggressive')>> She must face her own wrathful ways, and see the pain even a single angry word can cause. As a poet once said: “Drop an unkind word — or careless—in a minute you forget / But there's little waves a flowing, and there's ripples circling yet / And perhaps in some sad heart a mighty wave of tears you've stirred / And disturbed a life was happy, ere you dropped that unkind word.” And how many such words she has flung left and right, simply because there was hate in her heart that wanted out, though she never imagined where it might lead. <</if>>
<<if $g.pupil.isHasTrait('per_cruel')>> She must face the cruelty in her heart and in her ways, and the pleasure she has taken from the pain and humiliation of others, and see how that passion to beat others down and make them cringe and suffer brings only base and fleeting pleasure to some, with lasting misery for others. <</if>>
<<if $g.pupil.isHasTrait('per_cruel') && $g.pupil.isHasTrait('per_evil')>> Indeed, she must come to understand the outright sadism that has animated her outwardly lovely frame, and the pain those well-fashioned hands have inflicted for the sake of her lubricious wishes, and what it has meant for the objects of that pain, of whom she was thoughtless as she sought only her own desires. <</if>> */
<<if $g.pupil.isHasTrait('per_masochistic')>> Indeed, she must come to understand the pleasure she has drawn from her own pain, and from encouraging others to inflict it, and so to bring out the worst in themselves—a worst they may inflict on others who do not so wish it. Her own sexual desires may have brought much unwelcome pain to others, and she must be mindful of consequences. <</if>>
<<if $g.pupil.isHasTrait('per_deceitful')>> She must face her long career of deception and lies, and reflect on how lies multiply and feed on each other, leading to misery and mistrust, and the fog of lies like hers brings a Cloud of Corrupton upon the earth, one that the Pure Light is meant to piece, but she herself is its greatest enemy. <</if>>
<<if $g.pupil.isHasTrait('per_evil')>> Above all things, she must confront the core of <i>evil</i> within herself, and the parasitic ways of those who extract tribute from the world, not because others are fools or weaklings, but because they are trying to live by a decency she has not known and has never tried to comprehend. <</if>>
</p>
<p>
And still the first week is not done, and the worst has not passed. As her unsated hunger, her unfulfilled need for sleep, and her unquenchable and increasing need for sexual release continue, her daily confessions of stray thoughts grow more tearful, and the images on which she must meditate grow worse. She must bend her mind to tales of those whose lives and livelihoods are an offense to their fellow beings, and who live to hurt and live by hurt. And she can only see herself in them, and ask what her life has been.
</p>
<p>
<<if $g.pupil.isHasTrait('bg_noble')>> Has she not been a noble, supposedly the mainstay and fighting bulwark of any kingdom, yet too often simply a pampered parasite, extracting her living and pleasures from the sweat of honest folk? Precious little nobility in that. <</if>>
<<if $g.pupil.isHasTrait('bg_mercenary')>> Has she not been a mercenary, playing the savage game of war and contributing to the misery of the world, not for king and country or loyalty and defense, but simply for a bag of short-lived coin? The money goes fast, and the dead do not return. <</if>>
<<if $g.pupil.isHasTrait('bg_pirate')>> Has she not been a pirate, venturing where honest folk brave the waves for trade, and plundering what they have earned and destroying what they have built, on no higher ground than the fear she and her mates could instill? The romance is for fools and children. The reality is cruelty piled on cruelty. <</if>>
<<if $g.pupil.isHasTrait('bg_raider')>> Has she not been a raider, a pirate of the land, ravaging and burning and bringing pain and poverty, creating nothing and destroying all, simply to keep her wretched life moving forward? Toenail fungus has a more beautiful life. <</if>>
<<if $g.pupil.isHasTrait('bg_thug')>> Has she not been a thug, pushing her way into the lives of those who wish only to live and find a little happiness, and beating her living out of their fear and humiliation? Those who do that inflict a thousand little deaths on their weak and wretched victims. Pond scum brings more beauty to the world. <</if>>
<<if $g.pupil.isHasTrait('bg_informer')>> Has she not been an informer, trading on the trust of others, that sweetest prize of life, and <i>betraying</i> it for nothing better than bread? It's hard to see how such a creature could live with herself . <</if>>
<<if $g.pupil.isHasTrait('bg_thief')>> Has she not been a thief, seeing around her a world of honest tradesmen and lawful owners, ones who work and craft and obey while planning a little security and luxury for themselves, and then simply <i>taking</i> what they have rightly earned, while offering herself the flimsiest excuses for what she did to them? Worse than worthless. <</if>>
<<if $g.pupil.isHasTrait('bg_whore')>> Has she not been a whore, selling her lubricious services to all and sundry without asking why, helping wayward husbands to break honest wives' hearts, or tempting the poor and lonely to squander their little all for a moment's pleasure, all built on lies and illusions of love? Disgusting. <</if>>
<<if $g.pupil.isHasTrait('bg_unemployed')>> Has she not been a shiftless tramp, a pointless parasite, eating the bread made and earned by the honest, and imagining this was freedom? Maggots contribute more to the world. <</if>>
<<if $g.pupil.isHasTrait('bg_assassin')>> Has she not been a cutthroat, an assassin, a murderess-for-hire, robbing others of the precious gift of life itself, without even the boldness to face them as the mercenaries do? Better things than <i>she</i> is may be found dripping from a donkey's dong. <</if>>
Worst of all, and worst of all creatures, she has lived as a <i>slaver</i>, and not just any slaver, but a slaver with that repulsive company of <<rep $company.player>>, those foulest of flesh-traders, caring nothing for the liberty of their fellow-beings, nor even for their lives except as pieces of merchandise. That <<rep $unit.player>> is simply a tyrant on the largest scale <<they $unit.player>> can manage, and such a creature, or anyone who could serve such a creature, lives and is a constant offense before the Light. If ever the world produced a child of Belial, it is <<rep $g.pupil>>.
</p>
<p>
At the end of the week, <<rep $g.pupil>>'s evening confessions are increasingly tearful, and in her confused, deprived state, she is not only wondering whether she may be fit to receive and transmit the Pure Light. She is wondering whether she is fit to live and breathe at all. The first morning of the second week finds her kneeling in a bare meditation chamber, lit only by a beam of pure sunlight through a clear window, her face streaming with tears, and her heart filled only with a wish to be cleansed of all the horrors of the previous week.
</p>
<p>
And then—at least in part—her wishes are granted. This week, her meditations are focused not merely on tales, but on optical apparatus, arrangements of lenses and prims that focus light both natural and magical, so that she may see how the aberrations distort the image, but a well-ground lens can focus the light far more than anything in Nature, and bring the smallest details into the sharpest relief. A prism is not just a source of beauty, but a metaphor for splitting the essential from the nonessential, and seeing what needs to be seen.
</p>
<p>
The deprivations <<rep $g.pupil>> suffers may be worse than the first week, but they do not seem so, as she masters—at least for now—the worst of her fleshly needs. Her daily confessions of aberrant thoughts become sparser and less tearful, as she comes to see she can perfect herself, and focus on the ideals before her.
</p>
<p>
She is allowed to remember the better parts of her character now, to integrate them into her new and nobler self, one that is worthy to wear the robe of a master healer.
<<if $g.pupil.isHasTrait('per_chaste')>> After all, she has shown restraint in controlling her lustful desires, however desirable she might be, and so kept herself from breaking hearts and causing much harm. <</if>>
<<if $g.pupil.isHasTrait('per_generous')>> It must be said, her nature has always been generous and free-handed, and maybe her small acts of kindness have brought more happiness than she knew. <</if>>
<<if $g.pupil.isHasTrait('per_calm')>> It has to be allowed, she has always been an island of patience and calm when others around her were roiled, and has nipped many a pointless feud in the bud with her quietude and willingness to listen. <</if>>
<<if $g.pupil.isHasTrait('per_humble')>> Her sincere desire for simplicity has sometimes let her bring peace to others. <</if>>
<<if $g.pupil.isHasTrait('per_logical')>> Her logical ways, her ability to “see reason” when others cannot, has sometimes done them a world of good. <</if>>
<<if $g.pupil.isHasTrait('per_empath')>> Her natural empathy, her ability to see into the hearts of others and feel what they feel, has sometimes brought them happiness or at least relief from their sorrows. <</if>>
<<if $g.pupil.isHasTrait('per_loyal')>> There must be some good inside anyone as naturally loyal as <<rep $g.pupil>>, even if that loyalty is sometimes misplaced. <</if>>
<<if $g.pupil.isHasTrait('per_honest') || $g.pupil.isHasTrait('per_honorable')>> Whatever else may be said, <<rep $g.pupil>> is a woman of her word, and people know they can trust her. <</if>>
<<if $g.pupil.isHasTrait('per_kind')>> Above all, at heart, <<rep $g.pupil>> is a kindly soul, who draws more pleasure from another's smile than from anything else in life.<</if>>
Her best traits may not manifest every day, but they are there, and she sees them more clearly now.
</p>
<p>
In time, <<rep $g.pupil>> is allowed to see that <i>she</i>, even as she is, has worth; just as the ones she must heal, whoever and whatever they may be, have worth; and the best and the worst may become more whole in body and in mind. And thus she achieves Enlightenment of the Heart, at least enough to raise her another step on the way to Mastery.
</p>
<p>
On the final day, she enjoys a simple, communal meal with her spiritual guide, <<rep $g.master>>, and her one fellow pupil. The latter, a young lady from the vale, glows with a new inner beauty, and <<rep $g.pupil>> realizes she is seeing a reflection of her own enlightened, ennobled face. And her master and guide, her beautiful, beautiful master and guide, now brings effusive praise and even embraces her chastely. Both pupils have withstood the darkness and conquered it, and taken a step further into the Light. </p>
<<if $gOutcome == 'crit'>> <p> <<rep $g.pupil>> herself has overcome more ill than any other student this year. On <<rep $g.master>> 's recommendation, the <i>curia honoris</i> of the Women's Academy of Light has chosen to award her the Laurel of Lustration, which will not only mean a beautifully calligraphed certificate, but a partial deferment of her tuition. Which will at least please that suspicious skinflint <<rep $unit.player>>. </p> <</if>>
<p> <<rep $g.pupil>> sleeps her last night at the Academy in great peace.
<<set _pimp = $dutylist.getUnit('DutyPimp')>>
<<set _marketer = $dutylist.getUnit('DutyMarketer')>>
<<set _viceleader=$dutylist.getUnit('ViceLeader')>>
<<set _trainer=$dutylist.getUnit('Trainer')>>
And then she returns to those roustabout slavers at <<rep $company.player>>, where the whips are always cracking, the slaves are constantly begging for mercy, and the filthy money from the flesh trade is forever changing hands. </p>
<<if _pimp>> <p>The company's lascivious pimp, <<rep _pimp>>, sees her in the courtyard and calls out. “Ahoy, sweet cheeks, want some time with the duty slaves? It's on the house for your homecoming. 'least if we all get to watch, it is. <<They _pimp>> leers and winks. </p> <</if>>
<<if _marketer>> <p> <<rep _marketer>>, the company's grasping marketer, waves hello at her homecoming. “Say,” <<they _marketer>> says, “while you were leaving the city, did you spot any down-and-outs with red hair and a good pair of melons? I've got some specialty orders that'd make it worth our while.” </p> <</if>>
<<if _trainer>> <p> On her way to the main offices, <<rep $g.pupil>> passes <<rep _trainer>>, that martinet of a slavers' drill sergeant. “Hope you're rested!” <<they _trainer>> barks sharply. “This week's focus exercise is the weighted strapon thrust! For the ladies anyway. And slackers get the receiving end, you get me?” <<They _trainer>> does a rude pelvic swivel and cackles. </p> <</if>>
<<if _viceleader>> <p> At the main offices, the vice leader, <<rep _viceleader>>, welcomes her back and fills her in on the current training schedule. “I hope you haven't forgotten how to do Obedience: Basic,” <<they _viceleader>> says. “We may be needing an extra pair of hands to administer a few swats.” <<They _viceleader>> mimes a blow. </p> <</if>>
<<if $gOutcome == 'crit'>> <p> <<rep $g.pupil>> 's Certificate of Purification does indeed look nice on <<rep $unit.player>> 's wall, something <<they $unit.player>> can point to when wooing new buyers and dealers. </p> <</if>>
<p>
It's good to be home.
</p><p>
<<rep $g.pupil>> returns to the unimposing stone building in Lucgate, which still houses the Women's Academy of Light. Again she is greeted by the handsome, warm, but proper <<rep $g.master>>. For now only one other student is present. They take their purifying baths, change into white academic robes, and enjoy just one simple meal together. After that the two are not to see each other for the rest of the training. The spiritual exercises of the heart work best when the pupil is isolated, but for the objects of her meditation and her spiritual guide—in this case, <<rep $g.master>> himself.
</p>
<p>
The prior course was austere, but this one is more so. <<rep $g.pupil>> is straitly given in charge that she is not to eat one bite more than she is given at meals, and those are to be light and infrequent. At breakfast she is to drink an alchemical draught designed to intensify her feelings. She is to sleep not one minute more than she is allowed by her guide, and he will allow far less than she is accustomed to. She is not to allow herself any sexual release, not so much as a single erotic touch, and any violation of this order will be grounds for immediate expulsion. Her mind is to be bent entirely to the themes and meditations of the exercises, and each day she is to write in a diary and confess to <<rep $g.master>> all her failings in her devotion to this.
</p>
<p>
Each day opens with a meditation on the Pure Light. But the main business of the first week is an examination of <<rep $g.pupil>> 's own life and failings, each exercise a meditation, and each meditation an hour. She is to consider the Tale of the Sun Child, and all occasions when she has done harm to a being no less harmless; and the Verse of the Dark River, and how each of her meanest deeds has reverberated to the harm of the world. Tale follows tale and reflection follows reflection.
</p>
<p>
She is required to meditate on tales of mindless creatures that, by their natures, do harm, show no gratitude, and know no other way.
<<if $g.pupil.isHasTrait('race_neko')>> She is forced to dwell on her own birth as a Neko, on the cruel and predatory ways of cats and cat-like beings, their readiness to torment their prey before devouring it, and the presence of such fantasies in her own dark dreams. She cannot but deeply question whether such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_werewolf')>> She is forced to dwell on her own whelping as a werewolf, on the heartless pack-hunting ways of her lupine sires that sometimes fill her dreams. She cannot but deeply question whether a born predator with the smell of blood in its nostrils could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_orc')>> She is forced to dwell on her birth and nature as an orc, one of that notorious race of debauched green-skinned rapists, on how her very existence must surely rely on more forced ravishing than gentle lovemaking, and the way her kind ravage the countryside and terrorize all others. Could a sprig from such a fleshly, degenerate race know the ways of Light and bring healing to the world?
<<elseif $g.pupil.isHasTrait('race_dragonkin')>> She is forced to dwell on her ovoviviparous hatching as a dragonkin, ultimate spawn of those haughty, winged tyrants who know the rest of the world only as prey and a source of plunder, and who bring fear and strange desire rather than love or happiness. She must confront herself and ask how such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_demon')>> She is forced to dwell her own corrupt spawning as a demon beyond the mists, fashioned from birth to tempt and corrupt, not to guide and to soothe, and to work subversion and pain, not wisdom and healing, and to bring the pleasure that leads to pain and ruin. She must face the absurdity that such a being, from its arrival a foul seed in the clean soil of this world, might even <i>touch</i> the Pure Light, let alone master its ways and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_elf')>> She is forced to dwell on her long life and upbringing as an elf, one of those haughty, aloof woodfolk who cannot flit through the trees in search of prey without admiring their own fleetness, and sneering at the grossness of every other kind; for whom a reflective forest pool is an irresistible temptation to boundless self-admiration. In their disdain for every other kind, did not the ancient elves subject their neko foes to a most disgraceful living death in the Field of Moai? And the nature of those sadistic monsters, who left those poor catfolk as eternal statues with dildos up their backsides, is surely the nature of <<rep $g.pupil>> herself, who yet imagines that she can summon the pure light, and bring healing to the world.
<<else>> She is forced to dwell on her birth as a <i>human</i>, the race that must have invented every evil on the earth, that has never ceased killing and enslaving its own kind and every other. When her kind are not sweating their lives away or plotting to do each other harm, they dull themselves with drink or debauchery or amuse themselves with the most degenerate games. Why, there are some who have never owned a slave in their lives, yet would like to <i>imagine</i> themselves as chiefs of a band of slavers. In their daydreams they cruelly capture, train, and market their fellow beings amidst a life of lechery and libertine adventures, dreamed up by the sickest minds human “civilization” can produce. No race capable of such pastimes could be trusted with anything good, and how can she, one of them, hope to know the ways of Light and bring healing to the world? <</if>>
</p>
<p>
The thoughts are depressing and disturbing, exactly as they are meant to be. Yet the next exercises are worse. By now her head is swimming with fatigue and hunger, and her desire for her handsome pupilmaster is growing, to the point she is starting to draw suggestive pictures in her diary. </p>
<p>
She must meditate on tales of bad character, the lazy wife whose children went hungry, the foul-mouthed magistrate who worked the greatest injustice from a simple fit of bad temper. She is encouraged to focus on pictures from these tales, and see the petty spitefulness of the characters in their painted faces, and where it leads. As the tales continue, each more than the last seems written to stir the deepest distress and self-loathing within <<rep $g.pupil>>—not just for her corrupt origins, but for the ugliness within her, that has grown since the first day she could think. Her smallest transgressions, her most persistent vices, fill her mind for the hours of the exercises, and mortify her.
<<if $g.pupil.isHasTrait('per_lunatic')>> She must confront her own lunacy—and in her woozy, hungry, sleep-deprived clarity, must ask herself whether she is retreating from the realities of her own badness into the comforting fog of a madwoman's dreaming. <</if>>
<<if $g.pupil.isHasTrait('per_lustful')>> She must face her own unbridled lusts, and as the deprivations of the flesh take hold of her, must face the truth that the creatures she seeks to sate her lusts on have hearts as well as bodies, and to simply take them at pleasure and for pleasure is to do countless invisible injuries. <</if>>
<<if $g.pupil.isHasTrait('per_aggressive')>> She must face her own wrathful ways, and see the pain even a single angry word can cause. As a poet once said: “Drop an unkind word — or careless—in a minute you forget / But there's little waves a flowing, and there's ripples circling yet / And perhaps in some sad heart a mighty wave of tears you've stirred / And disturbed a life was happy, ere you dropped that unkind word.” And how many such words she has flung left and right, simply because there was hate in her heart that wanted out, though she never imagined where it might lead. <</if>>
<<if $g.pupil.isHasTrait('per_cruel')>> She must face the cruelty in her heart and in her ways, and the pleasure she has taken from the pain and humiliation of others, and see how that passion to beat others down and make them cringe and suffer brings only base and fleeting pleasure to some, with lasting misery for others. <</if>>
<<if $g.pupil.isHasTrait('per_cruel') && $g.pupil.isHasTrait('per_evil')>> Indeed, she must come to understand the outright sadism that has animated her outwardly lovely frame, and the pain those well-fashioned hands have inflicted for the sake of her lubricious wishes, and what it has meant for the objects of that pain, of whom she was thoughtless as she sought only her own desires. <</if>>
<<if $g.pupil.isHasTrait('per_masochistic')>> Indeed, she must come to understand the pleasure she has drawn from her own pain, and from encouraging others to inflict it, and so to bring out the worst in themselves—a worst they may inflict on others who do not so wish it. Her own sexual desires may have brought much unwelcome pain to others, and she must be mindful of consequences. <</if>>
<<if $g.pupil.isHasTrait('per_deceitful')>> She must face her long career of deception and lies, and reflect on how lies multiply and feed on each other, leading to misery and mistrust, and the fog of lies like hers brings a Cloud of Corrupton upon the earth, one that the Pure Light is meant to piece, but she herself is its greatest enemy. <</if>>
<<if $g.pupil.isHasTrait('per_evil')>> Above all things, she must confront the core of <i>evil</i> within herself, and the parasitic ways of those who extract tribute from the world, not because others are fools or weaklings, but because they are trying to live by a decency she has not known and has never tried to comprehend. <</if>>
</p>
<p>
And still the first week is not done, and the worst has not passed. As her unsated hunger, her unfulfilled need for sleep, her unquenchable and increasing need for sexual release continue, her diary, which should be full of contrition and self-correction, is instead full of increasingly erotic drawings, most involving herself and <<rep $g.master>>. Her daily confessions of stray thoughts grow more tearful, to the point of agony and past it.
</p>
<p>
“Oh, Pupilmaster <<rep $g.master>>, I am on fire…I cannot shake these lustful daydreams. I try to force them away, but they come back and back again.” She squirms and looks up at him with big, hungry eyes.
</p>
<p>
“You must,” he says. “and you can. They aren't so hard to understand. Where do these thoughts seem to focus?”
</p>
<p>
“On you,” she says, wider-eyed still. “I know I should be focused on my transgressions, but all I can think of is you. See!” She promptly hands him her diary. He pages through it, seeing the proper thoughts replaced by increasingly graphic drawings. As the pictures grow more explicit, his face shows disturbance—and his body shows desire.
</p>
<p>
He looks up sharply from a particularly well-executed coupling, surrounded with words and arrows that would explain to the dullest child just what <<rep $g.pupil>> wants done to her, and by whom. He tries to speak but can barely find his breath. “Think of your purification. Think of the art, of the light…”
</p>
<p>
She seizes his hands, stopping his breath completely with the intensity of her desire. “I can't – Pupilmaster, help me! – <<rep $g.master>>, help me! I don't <i>want</i> purification, I want…I want… <i>copulation!</i> I don't <i>want</i> to be healed, I want to be fixed, I don't <i>want</i> a shaft of true light, I want another shaft, I want <i>your</i> shaft, and <i>I want it right now! </i>
</p>
<p>
There is not much more – she is tearing off her robe, and he is trying to restrain her, but in going for her wrists he finds her <<ubreasts $g.pupil>>, and in minutes all forbearance is forgotten as he plunges into her <<uvagina $g.pupil>>, ending the agony of abstention in a minute of sweet delight. He is, after all, only human.
<<if $g.master.isHasTrait('race_elf') || $g.master.isHasTrait('race_neko') || $g.master.isHasTrait('race_dragonkin') || $g.master.isHasTrait('race_werewolf') || $g.master.isHasTrait('race_orc')>> Or <i>mortal</i>, anyway.
<<elseif $g.master.isHasTrait('race_demon')>>Or, rather, he isn't human, but a demon, and whatever the Discipline of Light has taught him, <<rep $g.pupil>> has brought out his inner nature, in all its monstrous lasciviousness. Beyond the mists, Lust ravages Seduction, and it takes more than a change of locale and a few mental tricks to change the nature of things. <</if>>
</p>
<p>
Pupilmaster <<rep $g.master>> can't bring himself to expel <<rep $g.pupil>> after the pleasure they've shared. But his superiors in the Academy find out quickly. They can and do discharge <i>him</i> and expel her in the bargain. If <<rep $unit.player>> ever gets another invitation, some other master will administer the instruction, and they would probably prefer that some other student receive it. But the tuition is extremely non-refundable. </p><p>
<<rep $g.pupil>> returns to the unimposing stone building in Lucgate, which still houses the Women's Academy of Light. Again she is greeted by the handsome, warm, but proper <<rep $g.master>>. For now only one other student is present. They take their purifying baths, change into white academic robes, and enjoy just one simple meal together. After that the two are not to see each other for the rest of the training. The spiritual exercises of the heart work best when the pupil is isolated, but for the objects of her meditation and her spiritual guide—in this case, <<rep $g.master>> himself.
</p>
<p>
The prior course was austere, but this one is more so. <<rep $g.pupil>> is straitly given in charge that she is not to eat one bite more than she is given at meals, and those are to be light and infrequent. At breakfast she is to drink an alchemical draught designed to intensify her feelings. She is to sleep not one minute more than she is allowed by her guide, and he will allow far less than she is accustomed to. She is not to allow herself any sexual release, not so much as a single erotic touch, and any violation of this order will be grounds for immediate expulsion. Her mind is to be bent entirely to the themes and meditations of the exercises, and each day she is to write in a diary and confess to <<rep $g.master>> all her failings in her devotion to this.
</p>
<p>
Each day opens with a meditation on the Pure Light. But the main business of the first week is an examination of <<rep $g.pupil>> 's own life and failings, each exercise a meditation, and each meditation an hour. She is to consider the Tale of the Sun Child, and all occasions when she has done harm to a being no less harmless; and the Verse of the Dark River, and how each of her meanest deeds has reverberated to the harm of the world. Tale follows tale and reflection follows reflection.
</p>
<p>
She is required to meditate on tales of mindless creatures that, by their natures, do harm, show no gratitude, and know no other way.
<<if $g.pupil.isHasTrait('race_neko')>> She is forced to dwell on her own birth as a Neko, on the cruel and predatory ways of cats and cat-like beings, their readiness to torment their prey before devouring it, and the presence of such fantasies in her own dark dreams. She cannot but deeply question whether such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_werewolf')>> She is forced to dwell on her own whelping as a werewolf, on the heartless pack-hunting ways of her lupine sires that sometimes fill her dreams. She cannot but deeply question whether a born predator with the smell of blood in its nostrils could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_orc')>> She is forced to dwell on her birth and nature as an orc, one of that notorious race of debauched green-skinned rapists, on how her very existence must surely rely on more forced ravishing than gentle lovemaking, and the way her kind ravage the countryside and terrorize all others. Could a sprig from such a fleshly, degenerate race know the ways of Light and bring healing to the world?
<<elseif $g.pupil.isHasTrait('race_dragonkin')>> She is forced to dwell on her ovoviviparous hatching as a dragonkin, ultimate spawn of those haughty, winged tyrants who know the rest of the world only as prey and a source of plunder, and who bring fear and strange desire rather than love or happiness. She must confront herself and ask how such a being could know the ways of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_demon')>> She is forced to dwell her own corrupt spawning as a demon beyond the mists, fashioned from birth to tempt and corrupt, not to guide and to soothe, and to work subversion and pain, not wisdom and healing, and to bring the pleasure that leads to pain and ruin. She must face the absurdity that such a being, from its arrival a foul seed in the clean soil of this world, might even <i>touch</i> the Pure Light, let alone master its ways and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_elf')>> She is forced to dwell on her long life and upbringing as an elf, one of those haughty, aloof woodfolk who cannot flit through the trees in search of prey without admiring their own fleetness, and sneering at the grossness of every other kind; for whom a reflective forest pool is an irresistible temptation to boundless self-admiration. In their disdain for every other kind, did not the ancient elves subject their neko foes to a most disgraceful living death in the Field of Moai? And the nature of those sadistic monsters, who left those poor catfolk as eternal statues with dildos up their backsides, is surely the nature of <<rep $g.pupil>> herself, who yet imagines that she can summon the pure light, and bring healing to the world.
<<else>> She is forced to dwell on her birth as a <i>human</i>, the race that must have invented every evil on the earth, that has never ceased killing and enslaving its own kind and every other. When her kind are not sweating their lives away or plotting to do each other harm, they dull themselves with drink or debauchery or amuse themselves with the most degenerate games. Why, there are some who have never owned a slave in their lives, yet would like to <i>imagine</i> themselves as chiefs of a band of slavers. In their daydreams they cruelly capture, train, and market their fellow beings amidst a life of lechery and libertine adventures, dreamed up by the sickest minds human “civilization” can produce. No race capable of such pastimes could be trusted with anything good, and how can she, one of them, hope to know the ways of Light and bring healing to the world? <</if>>
</p>
<p>
The thoughts are depressing and disturbing, exactly as they are meant to be. Yet the next exercises are worse. By now her head is swimming with fatigue and hunger, and she must meditate on tales of bad character, the lazy wife whose children went hungry, the foul-mouthed magistrate who worked the greatest injustice from a simple fit of bad temper. She is encouraged to focus on pictures from these tales, and see the petty spitefulness of the characters in their painted faces, and where it leads. As the tales continue, each more than the last seems written to stir the deepest distress and self-loathing within <<rep $g.pupil>>—not just for her corrupt origins, but for the ugliness within her, that has grown since the first day she could think. Her smallest transgressions, her most persistent vices, fill her mind for the hours of the exercises, and mortify her.
<<if $g.pupil.isHasTrait('per_lunatic')>> She must confront her own lunacy—and in her woozy, hungry, sleep-deprived clarity, must ask herself whether she is retreating from the realities of her own badness into the comforting fog of a madwoman's dreaming. <</if>>
<<if $g.pupil.isHasTrait('per_lustful')>> She must face her own unbridled lusts, and as the deprivations of the flesh take hold of her, must face the truth that the creatures she seeks to sate her lusts on have hearts as well as bodies, and to simply take them at pleasure and for pleasure is to do countless invisible injuries. <</if>>
<<if $g.pupil.isHasTrait('per_aggressive')>> She must face her own wrathful ways, and see the pain even a single angry word can cause. As a poet once said: “Drop an unkind word — or careless—in a minute you forget / But there's little waves a flowing, and there's ripples circling yet / And perhaps in some sad heart a mighty wave of tears you've stirred / And disturbed a life was happy, ere you dropped that unkind word.” And how many such words she has flung left and right, simply because there was hate in her heart that wanted out, though she never imagined where it might lead. <</if>>
<<if $g.pupil.isHasTrait('per_cruel')>> She must face the cruelty in her heart and in her ways, and the pleasure she has taken from the pain and humiliation of others, and see how that passion to beat others down and make them cringe and suffer brings only base and fleeting pleasure to some, with lasting misery for others. <</if>>
<<if $g.pupil.isHasTrait('per_cruel') && $g.pupil.isHasTrait('per_evil')>> Indeed, she must come to understand the outright sadism that has animated her outwardly lovely frame, and the pain those well-fashioned hands have inflicted for the sake of her lubricious wishes, and what it has meant for the objects of that pain, of whom she was thoughtless as she sought only her own desires. <</if>>
<<if $g.pupil.isHasTrait('per_masochistic')>> Indeed, she must come to understand the pleasure she has drawn from her own pain, and from encouraging others to inflict it, and so to bring out the worst in themselves—a worst they may inflict on others who do not so wish it. Her own sexual desires may have brought much unwelcome pain to others, and she must be mindful of consequences. <</if>>
<<if $g.pupil.isHasTrait('per_deceitful')>> She must face her long career of deception and lies, and reflect on how lies multiply and feed on each other, leading to misery and mistrust, and the fog of lies like hers brings a Cloud of Corrupton upon the earth, one that the Pure Light is meant to piece, but she herself is its greatest enemy. <</if>>
<<if $g.pupil.isHasTrait('per_evil')>> Above all things, she must confront the core of <i>evil</i> within herself, and the parasitic ways of those who extract tribute from the world, not because others are fools or weaklings, but because they are trying to live by a decency she has not known and has never tried to comprehend. <</if>>
</p>
<p>
And still the first week is not done, and the worst has not passed. As her unsated hunger, her unfulfilled need for sleep, and her unquenchable and increasing need for sexual release continue, her daily confessions of stray thoughts grow more tearful, and the images on which she must meditate grow worse. She must bend her mind to tales of those whose lives and livelihoods are an offense to their fellow beings, and who live to hurt and live by hurt. And she can only see herself in them, and ask what her life has been.
</p>
<p>
<<if $g.pupil.isHasTrait('bg_noble')>> Has she not been a noble, supposedly the mainstay and fighting bulwark of any kingdom, yet too often simply a pampered parasite, extracting her living and pleasures from the sweat of honest folk? Precious little nobility in that. <</if>>
<<if $g.pupil.isHasTrait('bg_mercenary')>> Has she not been a mercenary, playing the savage game of war and contributing to the misery of the world, not for king and country or loyalty and defense, but simply for a bag of short-lived coin? The money goes fast, and the dead do not return. <</if>>
<<if $g.pupil.isHasTrait('bg_pirate')>> Has she not been a pirate, venturing where honest folk brave the waves for trade, and plundering what they have earned and destroying what they have built, on no higher ground than the fear she and her mates could instill? The romance is for fools and children. The reality is cruelty piled on cruelty. <</if>>
<<if $g.pupil.isHasTrait('bg_raider')>> Has she not been a raider, a pirate of the land, ravaging and burning and bringing pain and poverty, creating nothing and destroying all, simply to keep her wretched life moving forward? Toenail fungus has a more beautiful life. <</if>>
<<if $g.pupil.isHasTrait('bg_thug')>> Has she not been a thug, pushing her way into the lives of those who wish only to live and find a little happiness, and beating her living out of their fear and humiliation? Those who do that inflict a thousand little deaths on their weak and wretched victims. Pond scum brings more beauty to the world. <</if>>
<<if $g.pupil.isHasTrait('bg_informer')>> Has she not been an informer, trading on the trust of others, that sweetest prize of life, and <i>betraying</i> it for nothing better than bread? It's hard to see how such a creature could live with herself . <</if>>
<<if $g.pupil.isHasTrait('bg_thief')>> Has she not been a thief, seeing around her a world of honest tradesmen and lawful owners, ones who work and craft and obey while planning a little security and luxury for themselves, and then simply <i>taking</i> what they have rightly earned, while offering herself the flimsiest excuses for what she did to them? Worse than worthless. <</if>>
<<if $g.pupil.isHasTrait('bg_whore')>> Has she not been a whore, selling her lubricious services to all and sundry without asking why, helping wayward husbands to break honest wives' hearts, or tempting the poor and lonely to squander their little all for a moment's pleasure, all built on lies and illusions of love? Disgusting. <</if>>
<<if $g.pupil.isHasTrait('bg_unemployed')>> Has she not been a shiftless tramp, a pointless parasite, eating the bread made and earned by the honest, and imagining this was freedom? Maggots contribute more to the world. <</if>>
<<if $g.pupil.isHasTrait('bg_assassin')>> Has she not been a cutthroat, an assassin, a murderess-for-hire, robbing others of the precious gift of life itself, without even the boldness to face them as the mercenaries do? Better things than <i>she</i> is may be found dripping from a donkey's dong. <</if>>
Worst of all, and worst of all creatures, she has lived as a <i>slaver</i>, and not just any slaver, but a slaver with that repulsive company of <<rep $company.player>>, those foulest of flesh-traders, caring nothing for the liberty of their fellow-beings, nor even for their lives except as pieces of merchandise. That <<rep $unit.player>> is simply a tyrant on the largest scale <<they $unit.player>> can manage, and such a creature, or anyone who could serve such a creature, lives and is a constant offense before the Light. If ever the world produced a child of Belial, it is <<rep $g.pupil>>.
</p>
<p>
At the end of the week, <<rep $g.pupil>>'s evening confessions are increasingly tearful, and in her confused, deprived state, she is not only wondering whether she may be fit to receive and transmit the Pure Light. She is wondering whether she is fit to live and breathe at all. The first morning of the second week finds her kneeling in a bare meditation chamber, lit only by a beam of pure sunlight through a clear window, her face streaming with tears, and her heart filled only with a wish to be cleansed of all the horrors of the previous week.
</p>
<p>
<<rep $g.master>> approaches her with a kindly look. “You have done well, my child, better than you know.”
</p>
<p>
“I haven't,” responds <<rep $g.pupil>>. “I've polluted the academy with my presence and desecrated the Pure Light with even my slight practice of it . . . .”
</p>
<p>
“But this is the feeling every initiate must come to,” says the Pupilmaster, “so that she may enter into a better Way with a purer heart.”
</p>
<p>
“You don't understand,” she replies. “Do you know who sent me here? That <<uadjper $unit.player>>, <<uadjper $unit.player>>, flesh-trading pervert-monster <<rep $unit.player>>, from that beastly den of ruffians, <<rep $company.player>>! I was studying <<lore magic_light>> to help <i>them</i>, so they could recover from their dreadful adventures, and heal the scars on their poor victims and fetch them a higher price . . .” – and here she breaks down in shame and guilt.
</p>
<p>
You can guess the rest. She quits the slaving trade that very day, and after a whirlwind romance marries her Pupilmaster. They dedicate their lives to happiness and charity until misfortune overtakes them, perhaps as divine recompense for her past bad deeds. But this is far from your knowing. All <i>you</i> know, for now at least, is that you're out some 20,000 gold pieces in tuition, and have nothing to show for it.
</p><<run new setup.Title(
"quest_enlightenment_1_graduate_0", /* key */
"Enlightenment 1 Graduate", /* name */
"Enlightenment Graduate - Level 1", /* description */
"has graduated level 1 — Enlightenment of the Mind — training from the Women\'s Academy of Light", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_enlightenment_2_graduate_1", /* key */
"Enlightenment 2 graduate", /* name */
"Enlightenment 2 graduate", /* description */
"has completed level 2 graduate training from the Women\'s Academy of Light", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
'quest_enlightenment_of_the_mind1',
"Master",
[
[setup.unitpool.race_humankingdom_male, 0.1],
[setup.unitpool.race_humanvale_male, 0.1],
[setup.unitpool.race_humandesert_male, 0.1],
[setup.unitpool.race_humansea_male, 0.1],
[setup.unitpool.race_elf_male, 0.1],
[setup.unitpool.race_neko_male, 0.1],
[setup.unitpool.race_werewolf_male, 0.1],
[setup.unitpool.race_orc_male, 0.1],
[setup.unitpool.race_dragonkin_male, 0.1],
[setup.unitpool.race_demon_male, 0.1], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_apprentice),
setup.qc.TraitsReplace('unit', [setup.trait.gender_male, setup.trait.per_smart, setup.trait.magic_light_master, setup.trait.face_attractive, setup.trait.skill_alchemy]), ],
)>>
<<set _criteriapupil = new setup.UnitCriteria(
null, /* key */
'Pupil', /* name */
[
setup.trait.bg_mythical,
setup.trait.bg_wiseman,
setup.trait.bg_mystic,
setup.trait.bg_priest,
setup.trait.bg_apprentice,
setup.trait.bg_healer,
setup.trait.per_smart,
setup.trait.per_chaste,
setup.trait.per_studious,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_curious,
setup.trait.per_cautious,
setup.trait.per_humble,
setup.trait.per_loner,
],
[
setup.trait.bg_demon,
setup.trait.bg_raider,
setup.trait.bg_pirate,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.per_dreamy,
setup.trait.per_slow,
setup.trait.per_gregarious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_female),
setup.qres.TraitExact(setup.trait.magic_light),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'enlightenment_of_the_mind', /* key */
"Enlightenment of the Mind", /* Title */
"Alberich", /* Author */
[ 'breeding',
'city',
'veteran',
'trait',
'prep'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'pupil': [_criteriapupil, 3],
},
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1', },
[ /* costs */
setup.qc.Money(-15000),
],
'Quest_enlightenment_of_the_mind',
setup.qdiff.hard40, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_mindCrit',
[
setup.qc.AddTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.TraitRemove('pupil', setup.trait.per_slow),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_smart, setup.trait.per_curious, setup.trait.per_studious], 1, false), ],
], [
'Quest_enlightenment_of_the_mindCrit',
[
setup.qc.AddTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.TraitRemove('pupil', setup.trait.per_slow), ],
], [
'Quest_enlightenment_of_the_mindFailure',
[
setup.qc.EmptyUnitGroup('quest_enlightenment_of_the_mind1'),
setup.qc.TraumatizeRandom('pupil', 6),
setup.qc.TraitRemove('pupil', setup.trait.per_slow), ],
], [
'Quest_enlightenment_of_the_mindFailure',
[
setup.qc.EmptyUnitGroup('quest_enlightenment_of_the_mind1'),
setup.qc.TraumatizeRandom('pupil', 12),
setup.qc.TraumatizeRandom('pupil', 12),
setup.qc.TraitRemove('pupil', setup.trait.per_slow), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 30],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.NoUnitWithTitle('quest_enlightenment_1_graduate_0'),
setup.qres.NoUnitWithTitle('quest_enlightenment_2_graduate_1'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.TraitExact(setup.trait.magic_light),
setup.qres.TraitExact(setup.trait.gender_female),
]),
setup.qres.VarNull('quest_enlightenment_of_the_mind_cooldown'),
],
[ /* expiration outcomes */
],
)>><<set _Mystic = $dutylist.getUnit('DutyMystic')>>
<p>
Magi who study <<lore magic_light>> bright light to the world, reduce suffering, and smooth over its rough patches. They can sanitize infections, close wounds, and soothe pain. They can also heal unsightly whip welts and the results of sexual torture, which are such a fizzle at auction time. Initiates in this art are fairly uncommon. Masters are depressingly rare.
</p>
<p>
<<if _Mystic>> Your staff mystic, <<rep _Mystic>>, has now learned
<<else>> You have received a mysterious letter from <</if>>
a Women's Academy of Light in Lucgate, which promises to bring a journeyman light mage through the stages of enlightenment to Mastery of the Art. This particular academy is for female students only, and no males are allowed on the premises, except the instructors.
</p>
<p>
(Of course, there are others in this world who can bodyswap men and women, but the Academy knows nothing of that.)
</p>
<p>
The course is in three phases, and the first focuses on the mental abilities of the initiate. They succeed best who have wisdom and self-restraint. Tuition is costly and places are limited. If you mean to act, act now! </p><<run setup.qc.RemoveFromUnitGroup('master').apply($gQuest)>>
<<set $g.master = setup.unitgroup.quest_enlightenment_of_the_mind1.getUnit({
retries: 100,
trait_key: $g.pupil.getRace().key,
})>><<include 'Quest_enlightenment_of_the_mindCrit_regenerateMaster'>>
<p>
<<rep $g.pupil>> reports to the address in Lucgate, an unimposing stone building in a quiet part of town. Inside, she is greeted by Pupilmaster <<rep $g.master>>, the only male in the place, who gratefully accepts her tuition and introduces her to a small body of fellow students. The students wear only the academic robes provided by the academy. They eat and drink together and sleep on the premises, which they are not to leave during instruction. The rest of their time is to be taken up with study and contemplation.
</p>
<p>
After a sober but convivial meal on the first evening, <<rep $g.pupil>>'s studies begin. Pupilmaster <<rep $g.master>> is a kindly but proper tutor, and while a certain warmth grows between them, he makes no effort to press things beyond their proper bounds.
</p>
<p>
<<if $g.pupil.isHasTrait('per_lustful') >> <<rep $g.pupil>>, lustful lass that she is, drops a hint or two towards her handsome teacher, but if he notices, he pretends not to. <i>Why stick with female students, then?</i> she wonders. <i>Unless it's because that's what he doesn't like.</i>. She simply has to console herself in her room after studies—at least until she makes it home to <<rep $company.player>>, where sins of the flesh are a way of life and an article of commerce.<</if>>
</p>
<p>
About half of the training is specific to healing and to the nature of <<lore magic_light>>; the rest is training for the intellect, with puzzles and memory games to ensure that the student can “refract the power in the proper spectrum” and “snatch the motes as she sees them.”
</p>
<p>
And it must be said the training is effective. At the end of the two weeks, <<rep $g.pupil>> feels sharper and clearer of mind, and is sure that no mental slowcoach is graduating this phase. She has learned many new facts concerning the anatomy and illnesses of the various races her world knows, and the ways in which <<lore magic_light>> may be used to heal and soothe them. But, as <<rep $g.master>> explains, there is more to mastery of <<lore magic_light>> than knowledge of the Power of Light and the incantations that bring it forth. One must be subtly transformed in heart and in soul, and that will be the subject of future courses.
</p>
<<if $g.pupil.isHasTrait('per_lustful') >> <p> <<rep $g.pupil>> hopes that doesn't mean forgetting how to take a simple hint and get down to some fun, but she reflects on the less advanced lightmages she has known, including herself, and doesn't think <i>that</i> could be it. </p> <</if>><<include 'Quest_enlightenment_of_the_mindCrit_regenerateMaster'>>
<p>
<<rep $g.pupil>> reports to the address in Lucgate, an unimposing stone building in a quiet part of town. Inside, she is greeted by Pupilmaster <<rep $g.master>>, the only male in the place, who gratefully accepts her tuition and introduces her to a small body of fellow students. The students wear only the threadbare academic robes provided by the Academy. They eat and drink together and sleep on the premises, which are extremely sparse and which they are not to leave during instruction. The rest of their time is to be taken up with study and contemplation.
</p>
<p>
The first evening, after bathing and changing, the three young ladies join Pupilmaster <<rep $g.master>> for their first evening meal together, a simple repast of bread, wine, and spiced meats. <<rep $g.pupil>> opens the talk with some of the wounds she has healed in the past and the Parable of the Primal Sunbeam, but the others do not seem able to contribute much.
</p>
<p>
Indeed, the other pupils do not seem educated at all, and <<rep $g.master>> turns the subject to alchemy, which he seems to understand better than <<lore magic_light>>. <<rep $g.pupil>> finds this curious, but it hardly seems to matter. It's late—isn't it?—and she is feeling <i>so</i> tired . . . .
</p>
<p>
. . .
</p>
<p>
. . .
</p>
<p>
. . .
</p>
<p>
. . . she awakens some days later, sore and disarrayed, and quite alone. Her head is swimming and there's a throbbing pain behind her eyes. The room is dark but for a little sunlight streaming through a shuttered window, but she lifts her hands and summons a small sphere of magic light, so she can take stock of her situation.
</p>
<p>
She's been lying on a lumpy straw mattress on the floor of the now-abandoned and –unfurnished building. She is quite naked, and the tattered remains of her “academic robe” were serving as her only blanket. The soreness in her intimate parts, the musty smell, and the white stains on the mattress, the robe, and her body, tell her all too well how she has been used in her drugged state.
</p>
<p>
Revulsion overcomes her.
<<if $g.pupil.isHasTrait('per_lustful') >> Emotionally, she is torn between anger and regret—if they'd just known how to <i>ask</i> a girl, she might have some memories to go with the experience. As it is she'd like to get them into the slave dungeons of <<rep $company.player>> and teach them a thing or two.
<<elseif $g.pupil.isHasTrait('per_chaste')>> Her usual disgust at being part of any sex act is simply tripled by this violation. If she could get hold of those scum, she'd tear their fucking hearts out, or better still give them a special place in the slave dungeons of <<rep $company.player>>. Yes, she could volunteer for their obedience training <i>personally</i>, and if they seemed a little slow to learn, << you>> would understand the need for a little extra “correction.”
<<else>> In time, horror gives way to resignation—there is going to be no way to track down these scum and give them what they deserve, namely a preferred place in the slave dungeons of <<rep $company.player>>, where they can learn how these things <i>should</i> be done.<</if>>
</p>
<p>
When she gets control of herself, she pulls on what's left of the robe and gives the room a more careful search. And there is one thing peeking out from the edge of the mattress: a letter on the stationery of the Academy of Light, addressed to herself.
</p>
<div class='lettercard'>
<p>
“My Dear <<name $g.pupil>>,
</p>
<p>
“As you have probably guessed, the actual Academy of Light moved out of this building some weeks ago. 'twas an inspired wheeze of ours to rent it ourselves, and see if we could lure in a delicious young light mage for some profitable 'fun.' Your charming <<ubreasts $g.pupil>>, your secret <<uanus $g.pupil>>, your tasty <<umouth $g.pupil>>, and above all your luscious <<uvagina $g.pupil>>—we and our customers enjoyed them all.
</p>
<p>
“'tis a shame you are unlikely to recall how 'inspired' you were while you were in our power. That particular combination of hypnotic drugs, knockout drops, and aphrodisiacs is stronger than we knew.
</p>
<p>
“Of course, we are keeping your tuition, as well as the profits we earned, but let it not be said we've cheated anyone. We promised you Enlightenment of the Mind, and if you consider the lessons you've just learned, you will see you have not been cheated.
</p>
<p>
“Don't you see? You're smarter already!”
</p>
</div><<set _criteriapupil = new setup.UnitCriteria(
null, /* key */
'Pupil', /* name */
[
setup.trait.bg_mythical,
setup.trait.bg_wiseman,
setup.trait.bg_mystic,
setup.trait.bg_monk,
setup.trait.bg_priest,
setup.trait.bg_healer,
setup.trait.bg_apprentice,
setup.trait.bg_scholar,
setup.trait.per_chaste,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
],
[
setup.trait.bg_demon,
setup.trait.bg_assassin,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_raider,
setup.trait.bg_pirate,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_mercenary,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Trait(setup.trait.gender_female),
setup.qres.HasTitle('quest_enlightenment_2_graduate_1'),
setup.qres.Trait(setup.trait.magic_light),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'enlightenment_of_the_soul', /* key */
"Enlightenment of the Soul", /* Title */
"Alberich", /* Author */
[ 'veteran', 'special', 'trait', 'prep'
], /* tags */
40, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'pupil': [_criteriapupil, 3],
},
{ /* actors */
'child': null,
'master': 'quest_enlightenment_of_the_mind1', },
[ /* costs */
setup.qc.Money(-10000), ],
'Quest_enlightenment_of_the_soul',
setup.qdiff.hardest45, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.Event('coming_of_age', 938, {child: 'child',}),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 2, true),
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.TraitReplace('pupil', setup.trait.magic_light_master),
setup.qc.levelUp('pupil'),
setup.qc.AddHistory('pupil', "completes all three phases of Enlightenment at the Women's Academy of Light."), ],
], [
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.Event('coming_of_age', 938, {child: 'child',}),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 1, true),
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.TraitReplace('pupil', setup.trait.magic_light_master),
setup.qc.AddHistory('pupil', "completes all three phases of Enlightenment at the Women's Academy of Light."), ],
], [
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.VarSet('quest_enlightenment_of_the_mind_cooldown', "1", 100),
setup.qc.MissingUnit('pupil'),
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_generous, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_honest, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 1, false),
setup.qc.TraitReplace('pupil', setup.trait.magic_light_master),
setup.qc.Ire('humankingdom', 1),
setup.qc.AddHistory('pupil', "completes all three levels of Enlightenment at the Women's Academy of Light."),
setup.qc.AddHistory('pupil', ", under the influence of Enlightenment, quits the slaving life and marries her Pupilmaster and raises her child, until and unless nameless disaster tears her from them."), ],
], [
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.VarSet('quest_enlightenment_of_the_mind_cooldown', "1", 100),
setup.qc.MissingUnitForever('pupil'),
setup.qc.Ire('humankingdom', 5),
setup.qc.MoneyCustom(-5000), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.HasUnitWithTitle('quest_enlightenment_2_graduate_1', {
job_key: "slaver",
}),
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_enlightenment_2_graduate_1'),
],
)>><<set _u = setup.getUnit({title: "quest_enlightenment_2_graduate_1"})>>
<<if _u>>
<p>You've answered the letter and made your decision. Your
<<repfull _u>> is to spent forty weeks at the Women's Academy of Light, give birth to a child, and achieve Enlightenment of the Soul. Armed with the mastery of <<lore magic_light>> this brings, she is then to return to <<rep $company.player>> and support your foul dealings in the flesh trade. What could possibly go wrong? </p>
<p>
<<dangertext 'Warning'>>: Ignoring this quest will cause all of <<rep _u>> prior trainings to be reverted!
</p>
<<else>>
<<dangertext 'This quest is no longer able to be completed'>> due to you missing a critical unit
important for this quest.
<</if>><<set _p = $g.pupil>>
<<set _m = $g.master>>
<<set _father = $family.getUnitRelation($g.child, 'father')>>
<p> For the third and final time, <<rep _p>> makes her way to the Women's Academy of Light, with the right paperwork to show she is entitled to receive the third stage of instruction and enlightenment. As part of this process, she must give birth, but the answer to that is well in hand.</p>
<<if _father && _father.isSlaver()>>
<p> An examination by a fellow student confirms what <<rep _p>> 's paperwork declares: she has arrived with child and is ready to proceed with her final enlightenment and training. If <<rep _m>> is disappointed, he does not show it. </p>
<<else>>
<p> As on her previous sojourns, she begins with a bath, a change into a white academic robe, and a light meal with her Pupilmaster, <<rep _m>>, and the few other students who are attending for other degrees of enlightenment. Her paperwork reveals what she need not say aloud: that the Pupilmaster himself is to put her into the Happy State she needs to complete the course. The first night, she is to rest from her travels. The second night, as another staff member explains to her, is set aside for the Event. The second night comes. </p>
<<if _p.isHasTrait('race_dragonkin')>>
<p> <<rep _p>> steps into the central courtyard, where <<rep _m>> awaits her. He is fully unclothed already, and she casts her own robes aside confidently. They are dragonkin, they are alone, and ancient instincts guide them in ways no outsider knows. </p>
<p>They approach each other slowly, their flexible necks swiveling as they look each other over. Both pairs of wings snap out to full span as they circle each other in silence. Their tails lash and their wings beat occasionally, and the circle becomes smaller as they draw ever closer. </p>
<p> When they're within two armspans, the female, <<rep _p>>, tosses her head up in a gesture that says, <i>You may approach.</i> <<rep _m>> takes two confident strides forward and takes her hands in his. Their dragonfaces dart inquisitively towards each other, snuffling and inhaling the strange pheromones of their kind. A change in scent signals them to the a higher level of desire, as they pull each other closer and begin to touch each other's bodies in ways any lovers might understand. Their tails snake around and begin to touch as well, teasing and stroking but not yet intertwining. Sometimes one tail will begin to curl and pump against the other, miming wild copulation. Their wings remain outstretched. They beat only occasionally. </p>
<p> The lovers' dragonsnouts are close and their tongues flick out, tantalizing each other. As <<rep _p>>'s arousal grows, she bends her head to one side, and <<rep _m>> takes it as a signal to coil his own head alongside of hers, and begin rubbing the sides and top of her head with his cheeks and chin. In so doing he stimulates contact points known only to their kind, and inspires a slowly rising, powerful, chemical thrum of excitement that electrifies her whole body and makes her most intimate parts fairly gush with lubrication. </p>
<p> When the excitement reaches its highest pitch, her tail twines itself around his, signaling that she is at last ready to be penetrated. He draws her close, and they entwine their necks, fingers, and legs as well as tails, as if they hoped to become one in body as well as in purpose, and he slowly pushes his well-formed member into her well-moistened gateway, which parts easily for him in her state of native excitement. Their wings beat in unison now—too slowly for flight—and the pace of their coupling begins slow and stately. Over two hours they remain joined. Throughout that time their movements grow slowly faster, as do the strokes of their wings, and at the end their pace is frantic as the wingbeats kick up a storm of dust and the flexible hips of the couple sinuate furiously into each other. Both climax in a hissing gasp, and his fertilizing seed pours into her for a full five minutes as they stand fixed and motionless, still wholly intertwined. </p>
<p>In time, he withdraws, they dress, and she makes her way back to her chamber. No words need be spoken; both are filled with drakish pride at their deed, and no reassurances are required.</p>
<<elseif _p.isHasTrait('race_neko')>>
<p> The courtyard of the Academy has been reserved for the two neko this evening, and is lit only by starlight. In anticipation of their lovenight, the garden has been planted with shrubs and herbs from the Western Forest that call to the innermost desires of the lithe, predatory, cat-like beings. When <<rep _p>> arrives, <<rep _m>> has already shed his garments, and she does not hesitate to shrug out of her academic robe. School's out for tonight. </p>
<p> The two naked neko circle each other at a distance, admiring each other's forms with their glowing night-eyes. <<rep _p>> sometimes twirls, letting <<rep _m>> get a good look at her whole form, and her sharp, panther-like ears pick up his growl of appreciation. Playfully he rushes at her, she dodges, and they take up some time with these little play-chases. Soon enough, though, she remains with her back to him, her tail uplifted in excitement, and she turns her head back with a shy smile that says <i>come to me</i>. </p>
<p> As he draws hear, she turns to face him more fully, and they nuzzle each other's noses and begin to touch. Neko, like humans, are freed from the tyranny of the estrus cycle, but the right scents and touches can induce a state like it. <<rep _m>> exudes those scents and knows those touches. In time <<rep _p>> is gripped with an overpowering instinct, and she drops to paws and knees, rests her cheek on the backs of her paws, curls her tail over her back, and presents herself to be mated. </p>
<p> <<rep _m>> takes the back of her neck in his jaws, and with a perfect instinct penetrates her well-wetted gateway. Their first copulation lasts only a few moments—but it is only the first. Each time they couple furiously for a short time, and when the instinct tells <<rep _p>> to stop, she snarls, curls her head back, and begins to bite at him until he pulls away, and they slink away to rest. But soon enough she is presenting herself again and soon enough they are coupling again. Between rests they couple at least thirty times that evening, and both revel in several climaxes. After the last they lie panting with satisfaction, sure that they have achieved their purpose. </p>
<p> The two neko sleep near each other in the garden, and return to their chambers only close to dawn. </p>
<<elseif _p.isHasTrait('race_werewolf')>>
<p>After nightfall, <<rep _p>> proceeds to the courtyard of the Academy, where she and <<rep _m>> are to be undisturbed for the night. The two werewolves face each other proudly, and throw aside their academic robes to face each other's nakedness. </p>
<p> The night is dark but for starlight, but they hardly need sight when they have scent and touch. They come close and touch and nuzzle each others long wolf-faces, and in time <<rep _p>>'s body exudes a scent that <<rep _m>> cannot ignore. When the time seems right, she turns to face away, crouches, and lifts her tail. </p>
<p> With an appreciative growl, <<rep _m>> grips her hips and slides his way into her, emitting a lubricant of his own to mingle with hers. Gently at first, then faster, they begin to mate, and as his excitement grows, his wolfcock swells until it is well locked inside her, and there is nothing that will part them until the deed is done. Yet he is gifted with the flexibility of all of his race, which allows the pair to change positions while mating without even a moment's withdrawal. When she feels like it, she cocks a leg, swivels her hips, and he's on top of her face to face, doing it “like the humans do,” but with her legs curled up as she pants with pleasure. </p>
<p>Later as they mate, they to turn tail to tail and buttock to buttock, with his flexible wolfcock still locked inside her and still knowing pleasure. <i>In extremis</i>, if a werewolf camp is attacked by raiders or slavers, a mating pair can assume this position, seize up their weapons, and defend themselves while continuing to mate. Werewolf legend says a child born to such a coupling will be a great warrior and a wolf of fortune, but only the most foolish or mad werewolves ever try to bring this about on purpose.</p>
<p>The two stay locked together for an hour, and <<rep _m>> orgasms twice, once halfway through and once near the end. Only then does his member begin to soften, and they are able to draw apart, both of them panting and grinning, and full of animal pride at the deed they've just done. Afterwards, they curl up on the ground and sleep in each other's scents, padding back contentedly to their separate beds only at daybreak. If their naked pride offends the modesty of any pupil or staff member, that pupil or staff member is keeping it to herself. </p>
<<elseif _p.isHasTrait('race_orc')>>
<p> <<rep _p>> awaits <<rep _m>> in her chamber, and she does not have to wait very long. On her previous sojourns he has been her gentle, patient, but firm mentor, and guide in the ways of magic. Tonight he is a proud orc male, with a female to breed, and tonight she is ready to receive. He strides into her simple room confidently as if he'd just led a successful raid on her village. He puts a hand behind her head and strokes her coarse hair possessively. Tonight she is <i>his</i> and she knows it. Forcefully he tears open their robes and throws them aside 'til they are naked as a pair of beasts. </p>
<p>The tusked faces of orcs are not made for kissing, and their tough hides are not made for delicate touches, though they can learn these things from lovers (or in the training chambers of <<rep $company.player>>). But both sexes can take brute, raw sex for hours on end, and their bodies and minds can recover from a ravishing as if it were no more than a hard sprint. And what <<rep _m>> is dishing out tonight is not really rape anyway. It would just look like that to an untutored observer. </p>
<p> <<rep _m>> pumps and grunts away for an hour, hard enough to bring <<rep _p>> to two orcish climaxes, and to strain the sturdy construction of her bed. At the end he unleashes a massive load of semen, the musty smell recalling the Orcish Festivals of their youth. Their mouths both curl into grins of satisfaction as they know they've accomplished their purpose. In time, they dress and return to their rooms. They need no pillow talk. </p>
<<elseif _p.isHasTrait('race_demon')>>
<p> The two enlightened demons meet in the Academy's courtyard after midnight, to spawn their child on the dewy grass. They both know what they have come for, but to begin with they do not speak. A female demon like <<rep _p>> is made to seduce mortals and carry them beyond the mists, where a male demon like <<rep _m>> is made to ravish them until they scream, then ravish them some more. They do not carry instincts for creating life, but when they wish, they can. Tonight they do. </p>
<p> <<rep _p>> walks past <<rep _m>> as if he were a stranger, but turning her head with a look that says, <i>You may have a chance. Try me if you dare.</i> <<rep _m>> boldly reaches out and touches her shoulder. She draws back, but not far, and does not flinch. He approaches again and takes another touch. Again she pulls away, but her eyes do not say she minded. The dance of seduction continues in silence—with a human victim, there would be words; with two of their kind, there is no need. <p>
<p> At one point her face mimes imperious disgust, and she points to a flower high on a wall, with a sweeping gesture that says, <i>Run over there and pick it for me.</i> He shakes his head and steps closer again. She repeats the gesture with more insistence. He grins wickedly, seizes her hips, throws her over his shoulder, and carries her to the wall. He lifts her in a way that says, <i>Pick it yourself.</i> Trembling with desire, she does. When he sets her down, he has shed his robe. She presents him with the flower and demurely drops her own garment. He flings the flower aside and steps forward to take possession of her pink blossom. </p>
<p>Their demonic wings snap out as they seize each other savagely, then the wings wave softly as their touches become more subtle. Their pointed tongues emerge and begin a subtle dance of their own, sliding and touching. Still kissing, they kneel, facing each other, and explore each other's bodies with fingers and tongues. In time, with a beat of his wings, <<rep _m>> launches himself backwards and lands on his muscular buttocks, his legs widespread and his demonic member jutting forward like a pike. Seeing no need to wait, <<rep _p>> settles herself between his legs, facing him still, supports herself with both hands, and moves forward to meet him. Soon they are joined. Raising her nether cheeks from the ground, she rocks and grinds, and both pairs of wings rattle as she brings them both to climax. </p>
<p> Their grins of pride would frighten small children. Happily, none are nearby, though one will soon be growing inside <<rep _p>>. They detach, disentangle, and get to their feet. Romantic gestures, such as lying in each other's arms, are not needed. They appreciate each other's forms as they re-dress and make their separate ways to bed. </p>
<<elseif _p.isHasTrait('race_elf')>>
<p> Loosening her academic robe, <<rep _p>> moves silkily to the courtyard, where <<rep _m>> awaits her, dressed also lightly. A small table holds glasses and a beaker of sweet nectar, whose subtle odors are well known to the elven initiate. </p>
<p>Amongst themselves, the fair folk of the forest favor long courtships, as if they had long lives to spend and few distractions within them. The nectar is designed to short-cut the process, and its ingredients include a small hint of the essence of the infamous Fruit of Sluttiness. A full draught of that essence would make a lifelong sex fiend of <<rep _p>>. <<if _p.isHasTrait('per_lustful')>> (Or at least it would if she wasn't one already . . .) <</if>> But a tiny hint in a well-crafted nectar, imbibed on a sweet night like tonight, will convert <<rep _m>> from a well-liked, handsome pupilmaster to a successful suitor, on the night they are to consummate their desire.</p>
<p>They sit together and sip in silence, enjoying a fresh night breeze—the site of the academy is well chosen, and tonight no foul winds blow from within the city itself. And they talk of simple things, and of mystical things, and of their times together so far, for it is not the way of their kind to show urgency on such nights as these. In time the talk turns to kissing, and the kissing is long and lingering with slow and delicate touches, as though they had a lifetime, and a long lifetime at that, to spend. </p>
<p>In time <<rep _m>> leads <<rep _p>> to a comfortable cot, and they make love through the night, as unhurried as a true elfin courtship, and his touches bring her long, trembling climaxes several times that night. Only in hours before daybreak does he take a seat on the cot, as she rests herself on his thighs, and with a friendly guiding hand lets him ease himself inside her. Their hips move gently as their lips meet tenderly, and both slowly mount the heights of passion one last time. As she feels his release she knows their purpose has succeeded, and she will be the mother of his child, as seems more right than anything else she has ever been. </p>
<p>The two lie in each other's arms until the sun is halfway to its zenith, talking of little things and great ones, and sometimes touching and kissing and thinking of their child. The academy staff understand and do not disturb them. At last they return to their chambers for some much-needed rest. The next day they return to their duties. </p>
<<else>>
<p> <<rep _m>> and <<rep _p>> meet in the courtyard that evening. It has been cleared for them, and a table is set up with a pitcher of delicious
<<if _p.isHasTrait('race_humandesert')>> date-palm wine
<<elseif _p.isHasTrait('race_humansea')>> coconut liquor
<<else>> wine
<</if>>
from their native land. Behind a screen, a harpist and a flautist play a soothing air to set the mood as they sit, drink, and talk. They do have so much to talk about, their times together so far, their recent lives (<<rep _p>> is circumspect about her slaving career), their memories of the old country. The subtext of what tonight is for remains below the surface—at least at first.
<p>
<<if _p.isHasTrait('per_dominant')>>
Then <<rep _p>> 's decisive nature takes over. She takes <<rep _m>> by the hand and says simply, “Let's.” She leads him to her chamber where the deed is to be done.
<<elseif _p.isHasTrait('per_aggressive')>>
Then <<rep _p>> aggressively decides to make the first move. She takes <<rep _m>> by the arm and says she has better ideas for the night than small talk. She leads him swiftly to her chamber.
<<else>>
In time, the conversation turns to children, and the right way to raise them, and from there, as naturally as you'd please, to the child they mean to have together. As it continues, <<rep _m>> looks a question at <<rep _p>>, whose eyes look back a <i>yes</i>, so he takes her by the hand and leads her to her chamber.
<</if>>
</p>
<p> Once behind her door, the pair lock each other in a tight embrace and an amorous kiss, which goes on quite some while. <<rep _m>> leads <<rep _p>> to her bed, where the touches and kisses continue.
<<if _p.isHasTrait('per_dominant')>>
This is not the night to play mistress-and-slave, but <<rep _p>> feels most comfortable taking the lead role, and <<rep _m>> is willing to accommodate. She forces him back on the bed and straddles him. Between hard kisses she gets them both undressed, and firmly guides his hands to the spots that arouse her most.
<<elseif _p.isHasTrait('per_submissive')>>
This is not the night to play master-and-slave, but <<rep _p>> likes a man who takes charge, and her body language tells him as much. With sure, confident hands, he strips them both to the skin. Then he presses her back onto the bed and under him, and they continue their lovemaking.
<<elseif _p.isHasTrait('per_lustful')>>
Desire seizes control of <<rep _p>>, and she practically tears the clothes off both of them in her eagerness to know him fully.
<<elseif _p.isHasTrait('per_lunatic')>>
<<rep _p>> 's eyes light up with blue fire and she goes mad with desire, practically tearing the clothes off both of them in her eagerness to get close. <<rep _m>> is startled by the suddenness of the change, but doesn't take long to get used to it.
<<else>>
The two are soon nude, and touching each other tenderly.
<</if>>
<<if _p.isHasTrait('per_playful') || _p.isHasTrait('per_active')>> Playfully and energetically, she puts him on his back and gives attention with her mouth and hands to his body. At one point she gives him oral pleasure, making eye contact to let him know how much she's enjoying it, but she doesn't bring him all the way over. She has other needs for his vital juices tonight.
<<elseif _p.isHasTrait('per_calm') >> Filled with calm and tranquility, she naturally puts him at his ease, and they make unhurried love, leaving no doubt that their evening will come to a happy conclusion.
<<elseif _p.isHasTrait('per_empath') || _p.isHasTrait('per_attentive')>>
<<rep _p>> has a natural gift for knowing what a lover wants, and tonight it is her pleasure to give it to him.
<<else>>
An hour of sweet touches passes between them.
<</if>> </p>
<<if _p.isHasTrait('per_cruel')>>
On a sudden impulse, <<rep _p>> grins fiercely into <<rep _m>> 's face. Stretching out on her back, she draws <<rep _m>> into her and encourages him to take her fast and hard. Giving in to her sadistic tendencies, she rakes his back with her nails, leaving scars that will endure for a week unless he heals them.
<<elseif _p.isHasTrait('per_lustful')>>
<<rep _p>>'s lusty body thrills with increasing excitement until she can take no more waiting. With hungry eyes she pulls him on top of her and draws him inside, grinding her hips below his and encouraging him at his work.
<<elseif _p.isHasTrait('per_dominant')>>
When she decides she wants him inside her, <<rep _p>> sees no reason to wait or hesitate. She rolls him onto his back, rubs her warm wetness against his shaft, and slides him inside. She begins to ride him at the pace she likes best, and quite simply to have her way with her loyal mentor, who for now is acting at <i>her</i> direction.
<<else>> In time, they find themselves back to front, as he caresses her <<ubreasts _p>>, nibbles at her shoulder, and warms her body with his. Then they curl their legs and he penetrates her from behind, slowly pushing his full length into her and beginning to thrust with gentle motions.
<</if>>
Together <<rep _m>> and <<rep _p>> climb the heights of passion, and in the explosion of his pleasure she knows they have achieved their aim. They snuggle for a while in her bed. Then he leaves her to return to his own while she falls asleep contentedly. </p>
<</if>>
<</if>>
<p> After that, the weeks and months proceed swiftly, for they are the busiest of <<rep _p>>'s life. Sometimes she must study and perform optical experiments with magic light. Sometimes she must medidate, and summon the Pure Light to infuse her. Often she must go into the city to assist with healing missions, or receive afflicted citizens in the Academy's infirmary. The practical experience melds with her book-studies of anatomy and disease, and raises her skill as a healer. The long hours give her little time to think of the life she is to return to, but she finds that long hours of service are fulfilling in ways most slavers never dream. </p>
<p>And all the while she lives this round of study and work and contemplation and magical practice, <<if _p.isHasTrait('race_dragonkin')>> the egg containing her child <<else>> her child <</if>> grows within her, increasing her happiness and contentment. Her new skills include spells and techniques for easing sickness and pain, so that the worst of the nausea and backaches other mothers suffer are spared her. But this does not make her life easy; it simply frees her up for more duties. While her mind and hands are kept busy, <<rep _m>> and the Academy staff are solicitous of her needs, and ensure that she is well nourished and has the rest she needs. When she is not engaged with study or healing she does not have to do a thing for herself, and this is an exceeding pleasing if profoundly simple life. </p>
<p>
Towards the end of the course, the day comes, and <<rep _p>> gives birth to an exceptionally beautiful child. <<if _p.isHasTrait('race_dragonkin')>> Her body reabsorbs the remains of the ruptured egg that held it all this time. <</if>> As before, she is well attended by Academy healers and students well versed in childbirth, and her own magecraft ensures that the pain is not overwhelming as she passes her beautiful burden into the world. As she holds her child, her body is suffused for a moment with the Pure Light, and she knows she has mastered the Art she came to master. </p>
<p>
<<if $gOutcome == 'failure'>>
Looking down at her child, she realizes a new truth about herself: she cannot possibly go back to slaving. You receive a “Dear <<rep $unit.player>>” letter, explaining that you will never see her again, but that she means to marry her loving pupilmaster, <<rep _m>>, raise her new child, and renounce slavery forever. Whether that resolve <i>really</i> sticks, you suspect, will depend on whether she meets with some future disaster, as so often happens to wayward slavers who try to make amends.
<<elseif $gOutcome == 'disaster'>>
Looking down at her child, she is overcome with emotion and realizes a new truth about herself: she cannot possibly go back to slaving, in any capacity whatsoever. She must instead dedicate her life to the extirpation of slavery and all those who practice it, or at least giving the support of her knowledge and magecraft to those who do. After her course ends, she not only refuses to return to <<rep $company.player>>, but tells the authorities many uncomfortable details about your secret routes to carry out slaving missions and the corruptible guards and officials you have subverted.
<<set _cityscout = $dutylist.getUnit('DutyScoutCity')>>
<<if _cityscout>>
Your City Scout, <<rep _cityscout>>, has <<their _cityscout>> work cut out for <<them _cityscout>> over the next few weeks, and has to work overtime and pay heavy bribes (all coming out of <i>your</i> treasury) to restore things to something like normal, and even so you have lost some well-earned reputation with the men of Tor. So much for enlightenment!
<<else>>
You and your staff have your work cut out for you over the next few weeks, and have to work overtime and pay heavy bribes to restore things to something like normal, and even so you have lost some well-earned reputation with the men of Tor. So much for enlightenment!
<</if>>
<<else>> (More details concerning this child, including important decisions she must make concerning its future, will appear as an encounter after this quest.)
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>> <p> The remaining brief time is sweet and restful; <<rep _p>> is given no duty she cannot handle, though the duties themselves are as sweet as the newborn she keeps so near.
</p>
<p>
Only with sadness does she realize the time has come to return to <<rep $company.player>>, and that the plans she has made for the little one do not permit her to bring it to a slaving fort. But she knows that those plans are for the best. For her the time has come to put her new knowledge, gained through an all-pervading Enlightenment, back to the uses you have planned: to heal slaves and slavers, to combat corruption and insanity so as to raise the value of their flesh, and to fatten your coffers with ill-gotten gold. </p>
<p> There's nothing wrong with <i>that</i>, is there? </p>
<</if>><<run new setup.UnitGroup(
'quest_gift_of_the_magi1',
"Hermit",
[
[setup.unitpool.race_humanvale_male, 0.5],
[setup.unitpool.race_humankingdom_male, 0.5], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_wiseman),
setup.qc.TraitsReplace('unit', [setup.trait.bg_wildman, setup.trait.bg_unemployed, setup.trait.magic_dark_master, setup.trait.per_loner]), ],
)>>
<<set _criteriafiremagus = new setup.UnitCriteria(
null, /* key */
'Fire Magus', /* name */
[
setup.trait.bg_wiseman,
setup.trait.per_smart,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
setup.trait.magic_fire_master,
],
[
setup.trait.bg_unemployed,
setup.trait.per_slow,
setup.trait.per_thrifty,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Trait(setup.trait.magic_fire),
],
{
survival: 1,
arcane: 2,
}
)>>
<<set _criteriawindmagus = new setup.UnitCriteria(
null, /* key */
'Wind Magus', /* name */
[
setup.trait.bg_wiseman,
setup.trait.per_smart,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_unemployed,
setup.trait.per_slow,
setup.trait.per_thrifty,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Trait(setup.trait.magic_wind),
],
{
survival: 1,
arcane: 2,
}
)>>
<<set _criteriawatermagus = new setup.UnitCriteria(
null, /* key */
'Water Magus', /* name */
[
setup.trait.bg_wiseman,
setup.trait.per_smart,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_honest,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
setup.trait.magic_water_master,
],
[
setup.trait.bg_unemployed,
setup.trait.per_slow,
setup.trait.per_thrifty,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_deceitful,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Trait(setup.trait.magic_water),
],
{
survival: 1,
arcane: 2,
}
)>>
<<set _criterialoveslave = new setup.UnitCriteria(
null, /* key */
'Love-Slave', /* name */
[
setup.trait.bg_whore,
setup.trait.bg_maid,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.training_vagina_advanced,
setup.trait.training_anal_advanced,
setup.trait.training_oral_advanced,
setup.trait.training_horny_advanced,
setup.trait.per_studious,
setup.trait.per_submissive,
setup.trait.per_cautious,
setup.trait.bg_slave,
],
[
setup.trait.bg_royal,
setup.trait.bg_unemployed,
setup.trait.muscle_extremelyweak,
setup.trait.muscle_veryweak,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.per_dominant,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.SlaveValueAtLeast(30000),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea, setup.trait.race_elf]),
setup.qres.NoTraits([setup.trait.face_hideous, setup.trait.face_ugly, setup.trait.corrupted, setup.trait.corruptedfull], true),
setup.qres.Trait(setup.trait.training_domestic_master),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'gift_of_the_magi', /* key */
"Gift of the Magi", /* Title */
"Alberich", /* Author */
[ 'desert',
'veteran',
'order'
], /* tags */
6, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'firemagus': _criteriafiremagus,
'windmagus': _criteriawindmagus,
'watermagus': _criteriawatermagus,
'loveslave': _criterialoveslave, },
{ /* actors */
'hermit': 'quest_gift_of_the_magi1',
},
[ /* costs */
setup.qc.Money(-20000), ],
'Quest_gift_of_the_magi',
setup.qdiff.hardest54, /* difficulty */
[ /* outcomes */
[
'Quest_gift_of_the_magiCrit',
[
setup.qc.Item(setup.item.f_foodtray_normal_hermit),
setup.qc.MissingUnitForever('loveslave'),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Friendship('firemagus', 'windmagus', 750),
setup.qc.Friendship('windmagus', 'watermagus', 750),
setup.qc.Friendship('firemagus', 'watermagus', 750),
setup.qc.MoneyUnitValue("loveslave", 1, 50000),
setup.qc.MoneyCustom(20000), ],
], [
'Quest_gift_of_the_magiCrit',
[
setup.qc.MoneyCustom(35000),
setup.qc.MissingUnitForever('loveslave'),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Friendship('firemagus', 'windmagus', 500),
setup.qc.Friendship('windmagus', 'watermagus', 500),
setup.qc.Friendship('firemagus', 'watermagus', 500), ],
], [
'Quest_gift_of_the_magiFailure',
[
setup.qc.TraumatizeRandom('firemagus', 5),
setup.qc.TraumatizeRandom('windmagus', 5),
setup.qc.TraumatizeRandom('watermagus', 5),
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.OneRandom([
setup.qc.AddTraitsRandom('firemagus',
[setup.trait.per_attentive, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
setup.qc.AddTraitsRandom('windmagus',
[setup.trait.per_attentive, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
setup.qc.AddTraitsRandom('watermagus',
[setup.trait.per_attentive, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
]),
],
], [
'Quest_gift_of_the_magiFailure',
[
setup.qc.TraumatizeRandom('firemagus', 7),
setup.qc.TraumatizeRandom('windmagus', 7),
setup.qc.TraumatizeRandom('watermagus', 7),
setup.qc.MissingUnit('loveslave'),
setup.qc.OneRandom([
setup.qc.AddTraitsRandom('watermagus',
[setup.trait.per_attentive, setup.trait.per_humble, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
setup.qc.AddTraitsRandom('firemagus',
[setup.trait.per_attentive, setup.trait.per_humble, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
setup.qc.AddTraitsRandom('windmagus',
[setup.trait.per_attentive, setup.trait.per_humble, setup.trait.per_cautious, setup.trait.per_calm], 1, false),
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, 50],
],
[ /* restrictions to generate */
setup.qres.Cooldown(52),
setup.qres.QuestUnique(),
setup.qres.HasSlaveWithTraits([setup.trait.gender_female]),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _ScoutDesert = $dutylist.getUnit('DutyScoutDesert')>>
<<set _Marketer = $dutylist.getUnit('DutyMarketer')>>
<<set _Mystic = $dutylist.getUnit('DutyMystic')>>
<<set _listener = setup.getUnit({job: setup.job.slaver, random: true})>>
<<if !_listener>><<set _listener = 'someone'>><<else>><<set _listener = _listener.rep()>><</if>>
<<set _randommage = _listener>>
<<for _iunit, _unit range State.variables.company.player.getUnits({job: setup.job.slaver})>>
<<if _unit.getTraitWithTag('magic')>>
<<set _randommage = _unit.rep()>>
<</if>>
<</for>>
<p>Beyond the Eastern Wasteland dwells Kurdwisec, an eccentric monarch who is rarely a good customer for slave-dealers. His coin is as good as anyone's and he has plenty of it, but his tastes are too outlandish. He tends to place orders for races that don't exist, skin tones not found in nature, and sexual accomplishments that are physically impossible. As far as <i>you</i> know. And he always wants them at strange, portentous times set by his court astrologers, so that there's never time to even try to fill his freakish requests.
</p>
<p>
Now, for once, you have received advance warning of what he is after, and you may even have a way to get your hands on it. Your slavers always have their ears open, and
<<if _ScoutDesert>> your sharp-eyed Eastern Wastelands Scout, <<rep _ScoutDesert>>, who's always on the lookout for opportunities,
<<elseif _Marketer>> your sharp-eared marketer, <<rep _Marketer>>, who's always seeking special deals for you,
<<else>> <<= _listener>> somehow <</if>>
has learned of Kurdwisec's latest whim.
</p>
<p>
In a season's time there will come a great festival of gift-giving and generosity, and Kurdwisec wants to celebrate by acquiring a special new concubine. She must be lovely beyond words. She must meet his requirements as to race—humans or elves only (and for him, that is unusually flexible). She must meet his exacting standards of domestic and sexual skill, such as would make her among the most valuable of slaves anywhere in the world. This will make her expensive to train, but the payoff will be worth it: Kurdwisec will pay five times her market value. Such is the Spirit of Generosity that will fill his heart at this festival.
</p>
<p>
Oh, there is one other thing. Her skin and organs must be nearly transparent, so that the marrow of her bones is visible when she's nude.
</p>
<p>
Resisting the urge to tear up the report and give
<<if _ScoutDesert>> <<rep _ScoutDesert>>
<<elseif _Marketer>> <<rep _Marketer>>
<<else>> <<= _listener>> <</if>>
a good flogging, and perhaps a free session of Masochist Training: Basic, you ask
<<if _Mystic>> your staff mystic, <<rep _Mystic>>,
<<else>> <<= _randommage>>, one of the mages in your company, <</if>>
to perform some magical research, and learn if there's any way to create one of these transparent creatures. To your surprise, there is! With the Tiara of Moonlight and a circle of magi learned in water, wind, and fire, a woman may be transformed into just what King Kurdwisec is seeking.
</p>
<p>
So where, you ask, do I find a Tiara of Moonlight? It seems there actually is one in the Eastern Wasteland. It is in the hands of one of your rival slavers, one who often takes part in the Gift Exchanges in the<<lore location_lucgate>>. All your slaver-magi have to do is find out what your rival wants most in the world, bring it to him as a gift, receive the tiara in return, transform the slave, bring her to the East, and return with enormous profits.
</p>
<p>
The wisest and most free-handed of your magi will make the best messengers and gift-givers. Meanness and recklessness are for other seasons. Of course, wise and generous magi are not that common in slaving companies, so you may just have to use what you have . . . </p>
<p>
<<dangertext 'Warning'>>: The slave will most likely be gone forever!
</p><<set _ScoutDesert = $dutylist.getUnit('DutyScoutDesert')>>
<<set _Marketer = $dutylist.getUnit('DutyMarketer')>>
<p> You entrust your three magi with your carefully-trained and pearl-precious love-slave, and a large expense account. They are to find out what your rival wants most, acquire it by means fair or foul, trade it for the Tiara of Moonlight, transform <<rep $g.loveslave>> into the translucent jewel King Kurdwisec is after, take her to the east, sell her for five times what she's worth, then return to you with the profits. And no stealing! (. . . <i>more than usual</i>, you think cynically to yourself.)
</p>
<p>
The first stage of the quest proves easy. Thanks to some diligent
<<if _ScoutDesert>> detective work by your Eastern Wastelands Scout, <<rep _ScoutDesert>>,
<<elseif _Marketer>> market research by your Marketer, <<rep _Marketer>>,
<<else>> investigation by your three magi, <</if>>
your agents learn what your rival slaver has been seeking for months without success: the sensuous garments of a succubus! The specific garments he wants are stitched with mystic symbols in the lace, from which a circle of magi may invoke surprising effects if they know the right rituals.
</p>
<p>
Filled with a Spirit of Adventure, your magi travel to the <<lore region_vale>> to visit a famous seer (whom you may have visited before, in a quest for Future Sight). After taking a large slice of your magi's operating funds, the seer goes into a night-long trance, with much writhing and crying out, as happens when one seeks hidden knowledge of the ways of demons.
<<if $g.watermagus.isHasTrait('per_attentive')>> Your sharp-eyed water mage, <<rep $g.watermagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.
<<elseif $g.firemagus.isHasTrait('per_attentive')>> Your sharp-eyed fire mage, <<rep $g.firemagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.
<<elseif $g.windmagus.isHasTrait('per_attentive')>> Your sharp-eyed wind mage, <<rep $g.windmagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.<</if>>
</p>
<p>
At dawn, the seer awakens and gives you the answer: Your magi must go to the Eastern Wastelands, and seek <<rep $g.hermit>>, the Hermit of the Crags. He and he alone can provide you what you need.
</p>
<p>
As they begin their journey, your magi ask each other pertinent questions. What on earth can we offer a hermit, who cuts himself off from the fleshly life we know best? And what's a dirty old hermit doing with sexy women's underclothes from Beyond the Mist?
</p>
<p>
The second question brings up disturbing images, so your magi concentrate on the first, and purchase such items and charms as might win the strange man's favor. They travel to the desolate mountain country where <<rep $g.hermit>> makes his abode. His wild dwelling is accessible only by sailing up a dangerous river, where strong currents, whirlpools, and shoals discourage all but the hardiest visitors.
</p>
<p>
This your magi can handle. A Spirit of Determination animates them. They purchase a sturdy sailing boat. <<rep $g.watermagus>> crouches in front, <<uadv $g.watermagus>> commanding the waters to still and the whirlpools to cease, to grant them safe passage. <<rep $g.windmagus>> stands behind the mast, arms outspread, <<uadv $g.windmagus>> commanding a stiff breeze to fill the sail and overcome the currents. <<rep $g.firemagus>> sits in the rear, manning the tiller and eyeballing <<rep $g.watermagus>> and <<rep $g.windmagus>>'s cute asses.
</p>
<p>
After a long and treacherous river journey, the three magi moor their craft, only to find their way blocked by a thorny hedge that a squad of foresters could not clear in a month. And now it is <<rep $g.firemagus>>'s turn to step forward and <<uadv $g.firemagus>> burn their way through it, while the other magi walk behind and use their gifts to prevent the fire from spreading. And check out <i> <<their $g.firemagus>> </i> cute ass.
</p>
<p>
The hermit's refuge is as rustic and its location as desolate as the magi might have guessed. <<rep $g.hermit>> himself is a shaggy-bearded personage of indeterminate age—he is wild and wears rough-spun clothes, but his hair has not gone gray. He is surprisingly businesslike in asking the three travelers why they have sought him; they find it best to be equally straightforward in telling him they seek the mystic lingerie of a succubus. It was never going to be an easy subject to introduce into the conversation; it is just as well to have it out at once.
</p>
<p>
It soon becomes clear that <<rep $g.hermit>> is a man of simple needs, and the material gifts the magi have brought are of no interest to him. In a Spirit of Compromise, they try offering applications of their sorcerous gifts, using the charms they have also purchased.
</p>
<p>
“I,” says <<rep $g.watermagus>> <<uadv $g.watermagus>>, “could divine the location of water, and make you a magic well that never runs dry. You'd never have to catch rainwater or go down to the river for water again!”
</p>
<p>
“I kinder like goin' down to the river,” says the Hermit. “Gets me out in the open air, and I get to see the sunlight dancin' on the waves. No thankye, Tess.”
</p>
<p>
“I,” says <<rep $g.firemagus>> <<uadv $g.firemagus>>, “could conjure you an eternal flame, to cook your meals and keep you warm in the winter. You'd never have to cut firewood again!”
</p>
<p>
“I kinder like cuttin' firewood,” replies the hermit. “Gets the blood flowin' in my arms, and that cool mountain air just opens up m'pipes and reminds me how good it is to be alive! No dice, Jo.”
</p>
<p>
“Well,” says <<rep $g.windmagus>> <<uadv $g.windmagus>>, “at the Academy of Wind, we know a binding spell that can be set as a trap. Students use it as a prank on the instructors if they get too full of themselves. I could create a magic trap that would bring you food easily for the rest of your days.”
</p>
<p>
“I kinder like fishin' and trappin' my own food,” says the hermit. “Keeps me closer to nature and all, and helps me remember where we all come from once and are a-goin' again before 'tis all done. It's spiritual, y'know? But I tell ye, Maria, there <i>is</i> somethin' sweet you could blow me, that would sweeten me up just fine along the lines of what you're lookin' for.”
</p>
<p>
“And what is that?”
</p>
<p>
“Well, what I want is that love-slave you've got chained up down in your boat!”
</p>
<p>
Your magi are filled with consternation. If they aren't careful, they could lose the whole point of the mission; but if they <i>are</i> too careful, they won't gain that point either. And the seer was clear on this: this hermit is the only way to the prize. They try reasoned argument.
</p>
<p>
“Now, ah, what would you be wanting with someone like her?”
</p>
<p>
“Ah, heh heh heh heh,” laughs the hermit, “just you think about it a minute, an' I think you'll catch on. It gets lonesome up here, know what I mean?”
</p>
<p>
“Well, if you get, ah, lonesome, and you want company, why don't you move back into town? We've got money—we could set you up in a house, next door to a brothel if you like, and fix it so you'd never be without company. Or we could even send you a new mistress every year, so you'd never get bored!”
</p>
<p>
“Nothin' doin', strangers,” says <<rep $g.hermit>>. “Y'see, when you're one o' them masters of <<lore magic_dark>>, like I am, they don't like you too much in town. Any kid gets sick, any sheep dies, anybody's roof falls in, they all commence to thinkin' you put a curse on 'em, and where does that get ye? They all <i>talk</i> and look at you funny. Now, sure, I can call me up a succubus when the urge is on me. That's how I got them funny smallclothes you're so hot to get your hands on. But they ain't much for conversatin', their pillow talk is all about torturin' folks, they're always naggin' you to barter your soul for somethin', and on top o' that your dick comes out smellin' like sulfur. You get tired of it. I want me a proper girl, and that one you got looks perfect.”
</p>
<p>
“But <<rep $g.loveslave>>,” your slavers protest, “she's been trained for a <i>different</i> life . . . for the life of a perfumed emperor's palace! She's been taught to attend His Imperial Majesty's table, prepare his meals, make his beds, and perform all the domestic tasks a palace of thousands might require!”
</p>
<p>
“Perfect!” cries the hermit delightedly. “She can dish up m'vittles and sweep up m'floor! Can she do anal? How 'bout edgin'?”
</p>
<p>
The rustic dweller proves as stubborn as twenty mules, and it's clear he won't back down from his one unwavering demand. A Spirit of Wisdom settles upon your magi, and they realize they must give in. Any question of taking the treasure by stealth or force runs up against his knowledge of <<lore magic_dark>>—they might be facing more demons than they could handle, especially if the stranger gets reckless in his summonings. (He might get more than <i>he</i> can handle, too, but how would that help them?) With the succubus garments, they can acquire the tiara, and the girl could always be replaced—if not immediately, then in time for next year's festival. Surely, they say among themselves, <<rep $unit.player>> will understand.
</p>
<p>
When <<rep $g.hermit>> sees they've acquiesced to his demands, he grins magnanimously.
'Just to show ye there's no hard feelin's,' he says, 'I'll throw this in for free!'"
and then he throws them his used wooden food bowl. Your magi thank him bemusedly, sensing strange
magic coming out of the decrepit-looking bowl.
</p>
<p>
And so the deal is made, your magi leave <<rep $g.loveslave>> with her exuberant new owner, they receive a carefully wrapped set of infernal lacy garments, and using their boat they begin the journey to the arranged meetingplace on the border of Tor. </p>
<<if $gOutcome == 'crit'>>
<p>On the journey outward, <<rep $g.watermagus>> notices an old tin pan lying by the side of the river, and that gives her an inspiration. A close examination reveals just what <<they $g.watermagus>> was hoping for: these waters contain gold dust, and a patient prospector could extract considerable wealth from them with time and patience. Your magi do not have time, but they can spare a day. With a ritual of <<lore magic_water>> and a charm <<they $g.watermagus>>'d brought for the hermit, the water mage is able to extract a considerable sum in gold dust from these waters, to help to defray the cost of the journey. </p>
<</if>>
<<if $g.windmagus.isFemale and $g.windmagus.isHasTrait('per_lustful')>> <p> On their third night, they stay in a surprisingly clean inn. After her bath, <<rep $g.windmagus>> finds herself drawn to the package of succubi garments, and as soon as the others are asleep, she steals and opens the package, and quietly pulls them over her naked skin. The feel of the fabric fills her with sensuous longing, and soon she is slowly caressing her <<ubody $g.windmagus>> and <<ubreasts $g.windmagus>>. Her moans grow louder than she intends, her companions are awakened, and the rest of the night is a three-way orgy nobody planned and nobody regrets. </p>
<<elseif $g.firemagus.isFemale and $g.firemagus.isHasTrait('per_lustful')>> <p> On their third night, they stay in a surprisingly clean inn. After her bath, <<rep $g.firemagus>> finds herself drawn to the package of succubi garments, and as soon as the others are asleep, she steals and opens the package, and quietly pulls them over her naked skin. The feel of the fabric fills her with sensuous longing, and soon she is slowly caressing her <<ubody $g.firemagus>> and <<ubreasts $g.firemagus>>. Her moans grow louder than she intends, her companions are awakened, and the rest of the night is a three-way orgy nobody planned and nobody regrets. </p>
<<elseif $g.watermagus.isFemale and $g.watermagus.isHasTrait('per_lustful')>> <p> On their third night, they stay in a surprisingly clean inn. After her bath, <<rep $g.watermagus>> finds herself drawn to the package of succubi garments, and as soon as the others are asleep, she steals and opens the package, and quietly pulls them over her naked skin. The feel of the fabric fills her with sensuous longing, and soon she is slowly caressing her <<ubody $g.watermagus>> and <<ubreasts $g.watermagus>>. Her moans grow louder than she intends, her companions are awakened, and the rest of the night is a three-way orgy nobody planned and nobody regrets. </p> <</if>>
<p>Your slavers proceed to the rendezvous with your rival's representatives. No further adventures befall them. And so in time, six magi meet in a well appointed ritual chamber, three from <<rep $company.player>> and three from your sometime rivals, but today gathered in mutual exchange and generosity. Your rival's water mage opens an ebony casket and lifts out the Tiara of Moonlight—which indeed seems to be made of pure moonlight, shining and fragile, only touchable with the enchanted gloves she's wearing. Their fire mage speaks.
</p>
<p>
“Let us have the girl you brought,” says he, “and we six can perform the Ritual of Translucence.”
</p>
<p>
A little shamefaced, your own fire mage, <<rep $g.firemagus>>, admits that you no longer have the girl; you had to sell her to obtain the succubus garments their own master seeks. “But,” <<they $g.firemagus>> says, “we can take the Tiara and perform the ritual ourselves on another girl later.”
</p>
<p>
“I fear you cannot,” replies their wind mage. “The tiara is difficult to transport. It will dissolve into nothing if you take it too far from here. It really is made of moonlight, you see. Also, the ritual can only be done when the stars are right, as they are tonight; and they are unlikely to align again for another year or more.”
</p>
<p>
Your slaver-magi suppress disappointed scowls. “That leaves the question,” says one, “of what to do with these succubi garments.”
</p>
<p>
<<if $g.firemagus.isHasTrait('per_generous') || $g.firemagus.isHasTrait('per_honorable')>> <<rep $g.firemagus>> speaks up. “A promise is a promise,” says <<they $g.firemagus>>. “These exchanges were always meant as mutual gifts, not as a sale contract. We promised these items to your master, and he ought to have them, with no questions about what he wants them for.” Slaver or no, there always was a spark of something good, or at least honorable, in <<rep $g.firemagus>>. The others agree.
<<elseif $g.watermagus.isHasTrait('per_generous') || $g.watermagus.isHasTrait('per_honorable')>> <<rep $g.watermagus>> speaks up. “A promise is a promise,” says <<they $g.watermagus>>. “These exchanges were always meant as mutual gifts, not as a sale contract. We promised these items to your master, and he ought to have them, with no questions about what he wants them for.” Slaver or no, there always was a spark of something good, or at least honorable, in <<rep $g.watermagus>>. The others agree.
<<elseif $g.windmagus.isHasTrait('per_generous') || $g.windmagus.isHasTrait('per_honorable')>> <<rep $g.firemagus>> speaks up. “A promise is a promise,” says <<they $g.windmagus>>. “These exchanges were always meant as mutual gifts, not as a sale contract. We promised these items to your master, and he ought to have them, with no questions about what he wants them for.” Slaver or no, there always was a spark of something good, or at least honorable, in <<rep $g.windmagus>>. The others agree.
<<else>> Perhaps there is something to these gift-giving festivals, or the Spirit of Giving, for your slavers find themselves agreeing to give the “gifts” they promised, even if the tiara is now useless to them. <</if>>
</p>
<p>
And now it is time for your rivals' magi to look embarrassed. Shuffling his feet, their fire mage explains. “The truth is, our master wanted those garments for a special ritual, to convert an enchanted silver statue into a Golem of Sensuality. But he never told us this until very recently. And he had pawned the Tiara last spring to fund another venture. And so . . .”
</p>
<p>
<<rep $g.firemagus>> completes the sentence for him. “. . . and so you sold the statute to redeem the tiara, and now these succubi garments are as useless to you as the tiara is to us.”
</p>
<p>
The rival magi all nod. “But at least we brought wine,” says their water mage, and soon all six are sitting around, taking pulls from their varicolored bottles, and commiserating. And if these bottles are spiked with friendship potions, and your magi do not know, where is the harm in that?
</p>
<p>
“Why, <i>why</i>, could our master not trust us?” laments their water mage. “We could've found a solution, if we'd only known the true state of things.”
</p>
<p>
“You think that's bad?” says <<rep $g.watermagus>>. “You should try working for <<rep $unit.player>>. No matter how much treasure we bring back from a successful quest, <<they $unit.player>> <i>always</i> swears we stole half of it!”
</p>
<p>
<<if $g.windmagus.isHasTrait('bg_thief') || $g.windmagus.isHasTrait('per_deceitful') || $g.windmagus.isHasTrait('per_evil')>> “Upon my honor,” says <<rep $g.windmagus>>, “I never stole more than a third, and I'll blow away the one who says otherwise.”
<<elseif $g.firemagus.isHasTrait('bg_thief') || $g.firemagus.isHasTrait('per_deceitful') || $g.firemagus.isHasTrait('per_evil')>> “Upon my honor,” says <<rep $g.firemagus>>, “I never stole more than a third, and I'll ignite the one who says otherwise.”
<<elseif $g.watermagus.isHasTrait('bg_thief') || $g.watermagus.isHasTrait('per_deceitful') || $g.watermagus.isHasTrait('per_evil')>> After a pause and some significant looks from <<their $g.watermagus>> colleagues, <<they $g.watermagus>> continues, “Why, upon my honor, I never stole more than a third, and I'll drown the one who says otherwise.” <</if>>
</p>
<p>
Nodding in sympathy, the six magi trade tales of their clueless bosses and foolish colleagues, as skilled professionals have always done and always will do. A Spirit of Amity descends upon them all, and they agree to divide the succubus garments between them. At daybreak, they bid each other a friendly farewell, and all kiss a gold ring held up by your rival's wind mage. Ancient lore says it may bring them better fortune.
</p>
<p>
And it seems to have worked, for on the way home, your slaving magi are attacked by a band of orcs, whom they defeat easily. <<rep $g.windmagus>> blows a storm of dust in their faces while the others guard <<their $g.windmagus>> flanks, and the orcs who fail to flee are quickly bound by <<their $g.windmagus>> binding spell—the one that is so effective when used on annoying professors at the Academy of Wind. The survivors are easily chained up and sold to a passing caravan.
<<if $gOutcome == 'crit'>>
In a stroke of good fortune, <<rep $g.firemagus>> locates the orcs' buried loot as well. Between this, the sale of the orcs, and the river-gold they found before, your slavers are able to defray the costs of this mission. Not that you have to forgive them for failing to carry it out.
<<else>>
The sale of the orcs helps to defray the cost of the expedition, though with the loss of <<rep $g.loveslave>> the enterprise is still a monetary loss. <</if>>
</p>
<p>
But whatever this adventure has meant in terms of money, the magi have gained a measure of friendship and regard for each other, and what treasure is greater than that?</p><<set _ScoutDesert = $dutylist.getUnit('DutyScoutDesert')>>
<<set _Marketer = $dutylist.getUnit('DutyMarketer')>>
<p> You entrust your three magi with your carefully-trained and pearl-precious love-slave, and a large expense account. They are to find out what your rival wants most, acquire it by means fair or foul, trade it for the Tiara of Moonlight, transform <<rep $g.loveslave>> into the translucent jewel King Kurdwisec is after, take her to the east, sell her for five times what she's worth, then return to you with the profits. And no stealing! (. . . <i>more than usual</i>, you think cynically to yourself.)
</p>
<p>
The first stage of the quest proves easy. Thanks to some diligent
<<if _ScoutDesert>> detective work by your Eastern Wastelands Scout, <<rep _ScoutDesert>>,
<<elseif _Marketer>> market research by your Marketer, <<rep _Marketer>>,
<<else>> investigation by your three magi, <</if>>
your agents learn what your rival slaver has been seeking for months without success: the sensuous garments of a succubus! The specific garments he wants are stitched with mystic symbols in the lace, from which a circle of magi may invoke surprising effects if they know the right rituals.
</p>
<p>
Filled with a Spirit of Adventure, your magi travel to the <<lore region_vale>> to visit a famous seer (whom you may have visited before, in a quest for Future Sight). After taking a large slice of your magi's operating funds, the seer goes into a night-long trance, with much writhing and crying out, as happens when one seeks hidden knowledge of the ways of demons.
<<if $g.watermagus.isHasTrait('per_attentive')>> Your sharp-eyed water mage, <<rep $g.watermagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.
<<elseif $g.firemagus.isHasTrait('per_attentive')>> Your sharp-eyed fire mage, <<rep $g.firemagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.
<<elseif $g.windmagus.isHasTrait('per_attentive')>> Your sharp-eyed wind mage, <<rep $g.windmagus>>, notices that the seer also achieves a raging boner, as happens when one seeks hidden knowledge of the ways of succubi.<</if>>
</p>
<p>
At dawn, the seer awakens and gives you the answer: Your magi must go to the Eastern Wastelands, and seek <<rep $g.hermit>>, the Hermit of the Crags. He and he alone can provide you what you need.
</p>
<p>
As they begin their journey, your magi ask each other pertinent questions. What on earth can we offer a hermit, who cuts himself off from the fleshly life we know best? And what's a dirty old hermit doing with sexy women's underclothes from Beyond the Mist?
</p>
<p>
The second question brings up disturbing images, so your magi concentrate on the first, and purchase such items and charms as might win the strange man's favor. They travel to the desolate mountain country where <<rep $g.hermit>> makes his abode. His wild dwelling is accessible only by sailing up a dangerous river, where strong currents, whirlpools, and shoals discourage all but the hardiest visitors.
</p>
<p>
This your magi can handle. A Spirit of Determination animates them. They purchase a sturdy sailing boat. <<rep $g.watermagus>> crouches in front, <<uadv $g.watermagus>> commanding the waters to still and the whirlpools to cease, to grant them safe passage. <<rep $g.windmagus>> stands behind the mast, arms outspread, <<uadv $g.windmagus>> commanding a stiff breeze to fill the sail and overcome the currents. <<rep $g.firemagus>> sits in the rear, manning the tiller and eyeballing <<rep $g.watermagus>> and <<rep $g.windmagus>>'s cute asses.
</p>
<p>
After a long and treacherous river journey, the three magi moor their craft, only to find their way blocked by a thorny hedge that a squad of foresters could not clear in a month. And now it is <<rep $g.firemagus>>'s turn to step forward and <<uadv $g.firemagus>> burn their way through it, while the other magi walk behind and use their gifts to prevent the fire from spreading. And check out <i> <<their $g.firemagus>> </i> cute ass.
</p>
<p>
The hermit's refuge is as rustic and its location as desolate as the magi might have guessed. <<rep $g.hermit>> himself is a shaggy-bearded personage of indeterminate age—he is wild and wears rough-spun clothes, but his hair has not gone gray. He is surprisingly businesslike in asking the three travelers why they have sought him; they find it best to be equally straightforward in telling him they seek the mystic lingerie of a succubus. It was never going to be an easy subject to introduce into the conversation; it is just as well to have it out at once.
</p>
<p>
It soon becomes clear that <<rep $g.hermit>> is a man of simple needs, and the material gifts the magi have brought are of no interest to him. In a Spirit of Compromise, they try offering applications of their sorcerous gifts, using the charms they have also purchased.
</p>
<p>
“I,” says <<rep $g.watermagus>> <<uadv $g.watermagus>>, “could divine the location of water, and make you a magic well that never runs dry. You'd never have to catch rainwater or go down to the river for water again!”
</p>
<p>
“I kinder like goin' down to the river,” says the Hermit. “Gets me out in the open air, and I get to see the sunlight dancin' on the waves. No thankye, Tess.”
</p>
<p>
“I,” says <<rep $g.firemagus>> <<uadv $g.firemagus>>, “could conjure you an eternal flame, to cook your meals and keep you warm in the winter. You'd never have to cut firewood again!”
</p>
<p>
“I kinder like cuttin' firewood,” replies the hermit. “Gets the blood flowin' in my arms, and that cool mountain air just opens up m'pipes and reminds me how good it is to be alive! No dice, Jo.”
</p>
<p>
“Well,” says <<rep $g.windmagus>> <<uadv $g.windmagus>>, “at the Academy of Wind, we know a binding spell that can be set as a trap. Students use it as a prank on the instructors if they get too full of themselves. I could create a magic trap that would bring you food easily for the rest of your days.”
</p>
<p>
“I kinder like fishin' and trappin' my own food,” says the hermit. “Keeps me closer to nature and all, and helps me remember where we all come from once and are a-goin' again before 'tis all done. It's spiritual, y'know? But I tell ye, Maria, there <i>is</i> somethin' sweet you could blow me, that would sweeten me up just fine along the lines of what you're lookin' for.”
</p>
<p>
“And what is that?”
</p>
<p>
“Well, what I want is that love-slave you've got chained up down in your boat!”
</p>
<p>Your magi are filled with consternation. If they aren't careful, they could lose the whole point of the mission; but if they <i>are</i> too careful, they won't gain that point either. And the seer was clear on this: this hermit is the only way to the prize. </p>
<p>
<<if $g.watermagus.isHasTrait('per_thrifty')>> <<rep $g.watermagus>> sees no reason to even consider giving up such a valuable property for something they can take by force. And <<they $g.watermagus>> didn't like being called “Tess,” anyway.
<<elseif $g.firemagus.isHasTrait('per_thrifty')>> <<rep $g.firemagus>> sees no reason to even consider giving up such a valuable property for something they can take by force. And <<they $g.firemagus>> didn't like being called “Jo,” anyway.
<<elseif $g.windmagus.isHasTrait('per_thrifty')>> <<rep $g.windmagus>> sees no reason to even consider giving up such a valuable property for something they can take by force. And <<they $g.windmagus>> didn't like being called “Maria,” anyway. <</if>>
<<if $g.firemagus.isHasTrait('per_proud') || $g.firemagus.isHasTrait('per_aggressive')>> <<rep $g.firemagus>>, finds <<their $g.firemagus>> heart full of fire. <<They $g.firemagus>> has had quite enough with this foolish prattle. Why, in the name of the inferno, should they be negotiating with this irritating fool, when they are mighty wizards and ruthless slavers who can <i>take</i> what they please? <<Their $g.firemagus>> hands blaze with magic as <<they $g.firemagus>> prepares to intimidate, or incinerate, the foolish hermit.
<<elseif $g.windmagus.isHasTrait('per_proud') || $g.windmagus.isHasTrait('per_aggressive')>> <<rep $g.windmagus>> has had enough of this windy fool. <<They $g.windmagus>> raises <<their $g.windmagus>> left hand and summons the beginnings of a magic blast. “I've got something I can blow you,” says <<they $g.windmagus>>, “and I don't mean <<rep $g.loveslave>>'s lips. So give us what we're after.”
<<elseif $g.watermagus.isHasTrait('per_proud') || $g.watermagus.isHasTrait('per_aggressive')>> <<rep $g.watermagus>> is flooded with rage and frustration at this unwashed fool, who thinks he's in a position to make demands. He's lonely? He can cry them a river. They're slavers, not charity workers. <<rep $g.watermagus>> raises <<their $g.watermagus>> hands, forming mystic spheres of water. “I think you need a bath,” says <<they $g.watermagus>>. “Give us what we want <i>now</i>, and maybe we'll leave you a shack to dry off in.”
<<else>> Afterwards, you never find out just who said the word that started the fight. But obviously, your magi think it best to forget negotiating with this strange unknown nobody, to summon the arcane forces at their disposal, to forget the Spirit of Giving, and to do some Taking instead. <</if>>
</p>
<p>
That is when your magi learn the perils of challenging a stranger. <<rep $g.hermit>>'s eyes light up strangely and he speaks a Word of Summoning that springs a long-baited trap. <i><<lore magic_dark>>?</i>, they don't have time to think, <i>The seer never said anything about <<lore magic_dark>>!</i>
</p>
<p>
Three huge demons—demons of wind, rain, and fire—spring up from the earth and tower over the magi. Knowing what's coming, the hermit-mage holds his breath and claps his hands over his ears while grinning wryly. Not knowing, your slavers learn, as the wind demon whirls around, bends at the waist, and unleashes a deafening, cataclysmic carbon disulfide fart. Your choking, gagging agents can't manage a spell as the water demon grabs his thorny, inhuman cock and does something truly unspeakable, and expressly against the Law of Arms.
</p>
<p>
Eventually, your slavers do make their escape.
<<if $gOutcome == 'failure'>> One of them gets away through the hermit's hovel, and manages to snag a single piece of the succubus' sexy garments—not enough for the ritual, but good for a souvenir. (Once it's laundered, anyway.) <</if>>
Later on, between them, they take a solemn oath that no one, not even you, is going to hear the rest of what they went through. Fortunate indeed they are to have gotten out of it alive—though perhaps <<rep $g.hermit>> was not really interested in killing them anyway. Any stories they spread will only discourage further visitors, and that is just how he likes it.
</p>
<<if $gOutcome == 'disaster'>> <p>As they stagger wearily to the river for a boat-borne escape, your slavers suffer an additional woe. <<rep $g.loveslave>> has escaped. Later they wonder if she found her way up to the hermit's refuge—it would be her best chance of survival in this desolate wilderness—and whether the two found happiness there. She would've had extreme luxury but no freedom; now she has extreme freedom with no luxury. Which is best, maybe someday she'll say.</p> <</if>>
<p>
Once they're at a safe distance, <<rep $g.firemagus>> consents to burn their clothes, and <<rep $g.watermagus>> gives them all a thorough bath. Glistening and nude, they sail on a ways, not speaking and barely thinking, using a wind raised by <<rep $g.windmagus>>.
<<if $gOutcome == 'failure'>> <<rep $g.loveslave>> keeps her eyes lowered, and keeps any irreverent thoughts to herself. In this, perhaps, she shows more wisdom than any of her masters have shown this voyage.<</if>>
</p>
<p>
Eventually the party makes it back to town, gets a change of clothes, and prepares to return to <<rep $company.player>>. Facing you will not be easy, as their mission must be counted a failure. And yet the future is not hopeless. There will be other years, other festivals, maybe other hermits. And your magi still have their lives and have gained a measure of wisdom. And is that not the greatest treasure of all? </p><<set _criteriayourself = new setup.UnitCriteria(
null, /* key */
'Yourself', /* name */
[
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.bg_merchant,
setup.trait.bg_slave,
setup.trait.per_loyal,
setup.trait.per_aggressive,
setup.trait.per_honorable,
setup.trait.per_stubborn,
],
[
setup.trait.per_cautious,
setup.trait.per_humble,
],
[
setup.qres.You(),
],
{
survival: 1,
knowledge: 1,
social: 1,
}
)>>
<<set _criterianavigator = new setup.UnitCriteria(
null, /* key */
'Navigator', /* name */
[
setup.trait.per_attentive,
setup.trait.per_smart,
setup.trait.per_cautious,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.race_humansea,
],
[
setup.trait.per_dreamy,
setup.trait.race_humandesert,
setup.trait.race_orc,
setup.trait.per_lunatic,
setup.trait.per_slow,
setup.trait.race_neko,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
knowledge: 2,
}
)>>
<<set _criteriaseafighter = new setup.UnitCriteria(
null, /* key */
'Sea Fighter', /* name */
[
setup.trait.race_humansea,
setup.trait.race_dragonkin,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.per_active,
setup.trait.per_aggressive,
setup.trait.per_brave,
setup.trait.per_lunatic,
setup.trait.per_nimble,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.trait.race_neko,
setup.trait.muscle_extremelyweak,
setup.trait.muscle_veryweak,
setup.trait.muscle_weak,
setup.trait.per_slow,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'seaborne_rescue___it_has_to_be_you', /* key */
"Seaborne Rescue - It Has to Be You", /* Title */
"Alberich", /* Author */
[ 'special',
'sea',
'veteran',
'unit',
'prep'
], /* tags */
6, /* weeks */
6, /* expiration weeks */
{ /* roles */
'yourself': _criteriayourself,
'navigator': _criterianavigator,
'seafighter': _criteriaseafighter, },
{ /* actors */
'slaver': setup.unitgroup.missingslavers,
'captain': setup.unitgroup.sea_allmale, },
[ /* costs */
setup.qc.MoneyCustom(-15000),
],
'Quest_seaborne_rescue___it_has_to_be_you',
setup.qdiff.hardest45, /* difficulty */
[ /* outcomes */
[
'Quest_seaborne_rescue___it_has_to_be_youCrit',
[
setup.qc.Slaver('slaver', "", false),
setup.qc.RemoveFromUnitGroup('slaver'),
setup.qc.Trait('slaver', setup.trait.bg_pirate),
setup.qc.Trait('slaver', setup.trait.bg_seaman),
setup.qc.AddHistory('slaver', "takes over and commands a band of pirates."),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouNouveauRichePirate(),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouNouveauRichePirate(),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouEasyToPleasePirate(),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouAssPirate(),
],
], [
'Quest_seaborne_rescue___it_has_to_be_youSuccess',
[
setup.qc.Slaver('slaver', "", false),
setup.qc.RemoveFromUnitGroup('slaver'),
setup.qc.Trait('slaver', setup.trait.vagina_loose),
setup.qc.Trait('slaver', setup.trait.anus_loose),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouDemon(),
setup.qc.SlaveOrderSeaborneRescueItHasToBeYouSlave(),
],
], [
'Quest_seaborne_rescue___it_has_to_be_youFailure',
[
setup.qc.Injury('yourself', 2), ],
], [
'Quest_seaborne_rescue___it_has_to_be_youDisaster',
[
setup.qc.Injury('yourself', 4),
setup.qc.Injury('seafighter', 4),
setup.qc.MissingUnit('navigator'),
setup.qc.Trait('navigator', setup.trait.bg_seaman),
setup.qc.AddHistory('navigator', "gets shanghaied to serve as navigator aboard a pirate vessel."),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.rescue, 1],
],
[ /* restrictions to generate */
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
setup.qres.QuestUnique(), ],
)>><p>
<<set _rescuer = $dutylist.getUnit('DutyRescuer')>>
The destinies of missing slavers are eccentric and unpredictable. The slaver you lost while exploring the deep seas might turn up beyond the mists; the slaver you lost to guardsmen in the Kingdom of Tor might turn up in the slave pens of one of your rivals.
<<if _rescuer>>
Your Rescuer, <<rep _rescuer>>,
<<else>>
Your former rescuer
<</if>>
has to watch for leads from every quarter. It's tedious, often frustrating work, but it's important.
</p>
<p>
Now
<<if _rescuer>>
<<rep _rescuer>>
<<else>>
your former rescuer
<</if>>
has picked up a firm rumor from the low-lives in the seaside taverns: A notorious pirate captain in the far south seas has taken to capturing slavers, and turning them into cabin boys or other members of his crew. A less firm rumor suggest that one of <i>your</i> missing slavers is now among them!
</p>
<p>
It's a long, dangerous, and expensive voyage, but perhaps you can set your underling free. You'll need to charter a ship and a band of cutthroats, and that'll cost you, but perhaps it's worth it to show how far you'll go to get a good slaver back. And as a practiced dealer in the flesh of your fellow-beings, you just might turn a profit on this job anyway.
</p>
<p>
Oh yes, “you” means “you.” You've got to carry enough funds to charter the ship and hire the cutthroats. You don't know why those thieving good-for-nothings under your command haven't retired yet on all the gold they've embezzled from you on past missions, but there's no way you're letting them that far off the leash with a treasury this size. Besides, this job requires some hiring decisions that you don't trust others to make. And sometimes it's good to set an example. When you've faced down pirates in the Southern Seas, those mollycoddles on your staff will have to stop complaining about having to chase down werewolves in the <<lore region_vale>> or dodge a few guards in Lucgate.
</p>
<p>
Besides yourself, you'll need a navigator with all the information
<<if _rescuer>>
<<rep _rescuer>>
<<else>>
your former rescuer
<</if>>
could scrounge—you can't trust a hireling with that—and a good fighter with sea legs for the rough stuff.
</p><p>You reach the Southern Isles without incident, charter the ship, and crawl through waterfront dives looking for a crew and for word of your target—the notorious Captain <<rep $g.captain>>. You strike it lucky. One of your new hires used to sail with Captain <<rep $g.captain>>, and knows what waters he'll frequent this time of year, harrying merchants who follow the prevailing winds. If you trick your new ship out like a merchantman, you'll be a likely target, and meet Captain <<rep $g.captain>> for sure. Then it's up to <<rep $g.seafighter>> and your new crew of cutthroats to persuade him to back off and return your slaver—or else attack him and take your slaver back by force.
<<if $g.seafighter.isHasTrait(setup.trait.per_lunatic)>> <<rep $g.seafighter>>'s eyes light up insanely at the thought. <</if>>
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> clenches <<their $g.seafighter>> fist in anticipation. <</if>>
</p>
<p>
You set sail <<uadv $unit.player>> with a strong gale behind you. <<rep $g.navigator>> expertly guides you into Captain <<rep $g.captain>>'s preferred waters.
<<if $g.navigator.isHasTrait('race_neko')>> The salt spray irritates your Neko navigator <<rep $g.navigator>> (you know how cats hate getting wet). <</if>>
<<rep $g.seafighter>> passes the time training and drilling the cutthroats, preparing them for the worst.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> They soon learn to fear <<their $g.seafighter>> wrath more than any enemy they might face. <</if>>
The search is long and tedious.
<<if $unit.player.isHasTrait(setup.trait.per_loyal)>> But your loyalty to your missing underling drives you on. <</if>>
<<if $unit.player.isHasTrait('per_stubborn')>> Sheer stubbornness keeps you going. You aren't giving up! <</if>>
And eventually you strike luck. </p>
<p>
What you find is not the infamous ship of Captain <<rep $g.captain>>, but a mostly-wrecked ship fighting its way desperately back to port. It seems they've been attacked and thoroughly plundered by pirates, and from the description of the enemy's ship, their attacker must have been Captain <<rep $g.captain>> himself! Exhausted from the ordeal, the surviving merchant sailors have no strength to resist your questioning. No, they didn't take note of which way he was sailing.
</p>
<p>
<<if $g.navigator.isHasTrait('per_smart')>> <<rep $g.navigator>> is sharp enough to ask <<else>> You ask>> <</if>>
what cargo they lost. And there, at long last, you get the lead you need. Amidst their other odds and ends, the crew of this derelict had the only true map to the treasure of <i>another</i> infamous pirate. They were hoping to sell it to treasure hunters, but now it's in the hands of Captain <<rep $g.captain>>, and there can be no doubt what he'll do. One of the crew remembers the name of the island, and
<<if $g.navigator.isHasTrait('per_smart')>> <<rep $g.navigator>>, with <<their $g.navigator>> excellent memory, recalls <<else>> questioning among your own crew reveals <</if>>
its location.
<<if $unit.player.isHasTrait(setup.trait.per_kind)>> You are nice enough to reward this helpful crew with provisions and repairs. <</if>>
</p>
<p>
Leaving the derelict to its fate, you set sail for the island, and over a headland you see the topsails of Captain <<rep $g.captain>>'s infamous ship. You find a suitable anchorage and disembark with your own crew of cutthroats.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> exhorts them to be ready to kill if they dare to resist your demands, and you'll sail off with two ships instead of one.
<</if>>
</p>
<p>
The island jungle is hot and the march is hard.
<<if $unit.player.isHasTrait('per_stubborn')>> But you are relentless, and infuse the rest of the crew with your relentlessness. <</if>>
<<if $g.navigator.isHasTrait('per_attentive')>> Your sharp-eyed navigator, <<rep $g.navigator>>, lights upon signs of Captain <<rep $g.captain>>'s progress across the island, and leads the way as you follow his track.
<<elseif $unit.player.isHasTrait('per_attentive')>> Your sharp eyes light upon signs of Captain <<rep $g.captain>>'s progress across the island, and you lead the way yourself as you follow his track
<<else>> Eventually, you find Captain <<rep $g.captain>>'s track, and follow it to his destination. <</if>>
</p>
<p>
Near nightfall, you hear raucous, bawdy singing in triumph, and think Captain <<rep $g.captain>> must have found his treasure after all. You send navigator out to scout, but the pirates' sharp-eyed sentry spots your scout, and surprise is out of the question. You and your cutthroats come storming out of the trees to see the other crew forming up in a defensive ring. The moment of truth has come. The forces look evenly matched. Captain <<rep $g.captain>> has a fearsome reputation.
</p>
<p>
“Ahoy!” you call out. “My name is <<= $unit.player.rep()>> from <<rep $company.player>>, the most fearsome slavers afloat, and you've got someone of mine! I want <<rep $g.slaver>> back and I'm ready to deal or to fight for <<them $g.slaver>>. Your choice! I'll only deal with your captain, so let him stand forth and face me!”
</p>
<p>
“Oh, is that so?” says a voice from inside the pirates' ring.
<<if $g.slaver.isHasTrait(setup.trait.gender_female)>> A <i>female</i> voice. But that can't be— Captain <<rep $g.captain>> is definitely male, according to those oh-so-accurate rumors you've been following. The voice continues. <</if>>
“Stand aside boys, and let's see what we're dealing with.” The pirates make a hole, and their leader steps forth—not the notorious Captain <<rep $g.captain>> at all, but <<rep $g.slaver>> <<themself $g.slaver>>!
</p>
<p>
You and your associates go bug-eyed. The meeting turns friendly, and in less than an hour, the two crews are carousing and drinking on the beach, while you, <<rep $g.navigator>>,<<rep $g.seafighter>>, and <<rep $g.slaver>> are sitting around a fire and catching up. How did <<rep $g.slaver>> get where <<they $g.seafighter>> is?
</p>
<p>
“Well,” <<they $g.slaver>> says, “you remember when you lost me, right? You don't want to know what happened after that, and you <i>really</i> don't want to know what happened after that. You probably <i>do</i> want to know what happened next, 'cause it's really naughty, but it's not your business. And before you know it, I was on the waterfront being shanghaied by these animals. Well, Captain <<rep $g.captain>> died of eating bad fish a few weeks later, and it's their custom to elect the next captain out of the crew. And, not to put too fine a point on it, I won!”
</p>
<p>
“How?”
</p>
<p>
“Well, I mean <I>look</i> at me!
<<if $g.slaver.isHasTrait('race_werewolf')>>I growled at 'em, in my wolfish way. <i>Grrr!</i> <</if>>
<<if $g.slaver.isHasTrait('race_demon')>>People don't like to say “no” to a demon. <</if>>
<<if $g.slaver.isHasTrait('race_dragonkin')>>People don't like to say “no” to a dragon. Or meddle in their affairs, if you know what I mean. <</if>>
<<if $g.slaver.isHasTrait('race_orc')>>I gave 'em a traditional glare of orc-ugly. That's very persuasive, among my people. <</if>>
<<if $g.slaver.isHasTrait('face_attractive')>>I was too cute to refuse. <</if>>
<<if $g.slaver.isHasTrait('face_beautiful')>>I was too <i>gorgeous</i> to refuse. <</if>>
“
</p>
<p>
“Anything else?”
</p>
<p>
“Well, you have to consider my abilities. I mean, <i>you</i> know how valuable I am, seeing how you came to rescue me and all.
<<if $g.slaver.isHasTrait('bg_pirate')>>I knew as much about the pirates' life as any of 'em. <</if>>
<<if $g.slaver.isHasTrait('bg_seaman')>>I could handle a ship as well with the best of 'em. <</if>>
<<if $g.slaver.isHasTrait('magic_wind')>> And, well, you know, if you have a wind wizard on a sailing ship, give <<them $g.slaver>> what <<they $g.slaver>> wants and you've got an edge in battle. <<elseif $g.slaver.isHasTrait('magic_fire')>> And, well, you know, if you have a flame wizard on a wooden sailing ship…you either make <<them $g.slaver>> captain or get rid of <<them $g.slaver>> quick. <</if>>
<<if $g.slaver.isHasTrait('per_smart')>>I'd already shown I was sharp on tactics. <</if>>
<<if $g.slaver.isHasTrait('per_attentive')>>On our last raid, I'd found loot that everyone else missed. <</if>>
<<if $g.slaver.isHasTrait('per_gregarious')>>I was pretty popular with the guys. <</if>>
<<if $g.slaver.isHasTrait('per_loyal')>>I'd shown I was a team player. <</if>>
<<if $g.slaver.isHasTrait('per_empath')>> And I showed I had a good sense of the crew's moods. <</if>>
<<if $g.slaver.isHasTrait('per_studious')>> My diligence won me some support—a captain can't be lazy, not if he wants to last long. <</if>>
<<if $g.slaver.isHasTrait('per_nimble')>> I'd shown that I could am quick in the heat of battle. <</if>>
<<if $g.slaver.isHasTrait('per_generous')>> I promised to be free-handed with the booty when it came time to split. <</if>>
<<if $g.slaver.isHasTrait('per_dominant')>> They could see I'd have a firm hand with discipline, which you need on a crew like this. <<elseif $g.slaver.isHasTrait('bg_slaver')>> They could see I had a firm whip hand, if you know what I mean, and you need that to keep a crew like this in line. <</if>>
<<if $g.slaver.isHasTrait('per_aggressive')>> They liked my aggressiveness. <</if>>
<<if $g.slaver.isHasTrait('per_brave')>> Also, I'd been kind of reckless in our last couple of fights, so they figured either I'd lead them on to victory, or else get myself killed and leave that much bigger a share for them. <</if>>
“
</p>
<p>
“I can see that'd matter, but anything else?”
</p>
<p>
“
<<if $g.slaver.isHasTrait('muscle_strong')>>I challenged the other contenders to arm wrestle, and won that handily. <</if>>
<<if $g.slaver.isHasTrait('dick_large')>>I challenged the other contenders to a dick-measuring contest, and won <i>that</i> handily. These pirates are superstitious about things like that. <</if>>
<<if $g.slaver.isHasTrait('per_lustful')>> I was the first to mate with the first mate, so I had an extra voice on my side.
<<elseif $g.slaver.isHasTrait('bg_courtesan') || $g.slaver.isHasTrait('bg_whore')>> I wasn't afraid to sleep my way to the top, or at least to a few extra votes. <</if>>
<<if $g.slaver.isHasTrait('per_deceitful')>> And I suppose you could say I did spread a few stories about my likely opponents…one or two of them ended up marooned, but it was all in a good cause, really. <</if>>
<<if $g.slaver.isHasTrait('per_evil')>> And I <i>suppose</i> it's just as well no one knows <I>how</i> Captain <<rep $g.captain>>'s bad fish got so bad, after all. Rest his soul! <</if>>
Why would you need anything more?” That's all you're getting out of <<rep $g.slaver>>.
</p>
<p>
“So what's next for you?”
</p>
<p>
“Oh,” says <<rep $g.slaver>>, “my pirate days are over. This treasure's enough to put these fish-fuckers on a yearlong drunk, so we're breaking up the crew. As captain I only get a double share, but for me there's more to life than hangovers. So….got room for a slaver?”
It's clear enough you won't be getting any share of the pirates' treasure. But they won't all be spending it on rum. Some of them appreciate the finer things in life, like housemaids and human footstools and catamites and concubines. So you might be getting an order or two out of this after all.</p><p>You reach the Southern Isles without incident, charter the ship, and crawl through waterfront dives looking for a crew and for word of your target—the notorious Captain <<rep $g.captain>>. You strike it lucky. One of your new hires used to sail with Captain <<rep $g.captain>>, and knows what waters he'll frequent this time of year, harrying merchants who follow the prevailing winds. If you trick your new ship out like a merchantman, you'll be a likely target, and meet Captain <<rep $g.captain>> for sure. Then it's up to <<rep $g.seafighter>> and your new crew of cutthroats to persuade him to back off and return your slaver—or else attack him and take your slaver back by force.
<<if $g.seafighter.isHasTrait(setup.trait.per_lunatic)>> <<rep $g.seafighter>>'s eyes light up insanely at the thought. <</if>>
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> clenches <<their $g.seafighter>> fist in anticipation. <</if>>
</p>
<p>
You set sail <<uadv $unit.player>> with a strong gale behind you. <<rep $g.navigator>> expertly guides you into Captain <<rep $g.captain>>'s preferred waters.
<<if $g.navigator.isHasTrait('race_neko')>> The salt spray irritates your Neko navigator <<rep $g.navigator>> (you know how cats hate getting wet). <</if>>
<<rep $g.seafighter>> passes the time training and drilling the cutthroats, preparing them for the worst.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> They soon learn to fear <<their $g.seafighter>> wrath more than any enemy they might face. <</if>>
The search is long and tedious.
<<if $unit.player.isHasTrait(setup.trait.per_loyal)>> But your loyalty to your missing underling drives you on. <</if>>
<<if $unit.player.isHasTrait('per_stubborn')>> Sheer stubbornness keeps you going. You aren't giving up! <</if>>
And eventually you strike luck.
</p>
<p>
As you round a headland near a hidden cove, you see another ship bearing down on you with the wind at its back, flying the notorious flag of Captain <<rep $g.captain>> himself! You, your slaver, and your cutthroats prepare to take the fight to them. Your ships crash together, they grapple you, and soon swarm over the side and into the fray. It's cutlass to cutlass and cutthroat to cutthroat.
</p>
<p>
<<rep $g.seafighter>> leads your band <<if $g.seafighter.isHasTrait('per_nimble')>>, leaping acrobatically from your ship to the enemy's,<</if>> and cuts through two of the enemy before meeting a fearsome sight: Captain <<rep $g.captain>>'s dragonkin first mate.
<<if $g.seafighter.isHasTrait('per_brave')>>Most warriors would be daunted at <<their $g.seafighter>> awful visage, but <<rep $g.seafighter>> steels <<their $g.seafighter>> nerves and moves steadily forward <<elseif $g.seafighter.isHasTrait('per_lunatic')>> Heedless of the dreadful prospect, <<rep $g.seafighter>> charges forward like a berserker. <</if>>.
<<if $g.seafighter.isHasTrait('race_neko')>> With a pointy-toothed grin, the dragonkin kicks a swab-bucket at the Neko warrior, splashing <<them $g.seafighter>> with soapy water and causing <<them $g.seafighter>> to yowl with rage at getting so wet. <</if>>
</p>
<p>
The monstrous pirate spreads his wings and takes to the air, hoping to gain the advantage.
<<if $g.seafighter.isHasTrait('magic_wind')>> But <<rep $g.seafighter>> makes a mystic sign, inhales hard, and literally sucks out the wind from beneath the mate's wings! He crashes back to the deck, to the wind-wizard's grim satisfaction. <<elseif $g.seafighter.isHasTrait('per_nimble') and $g.seafighter.isHasTrait('bg_seaman')>> But <<rep $g.seafighter>> performs an amazing feat of sailorcraft, leaping nimbly into the rigging, seizing a cable, wrapping it around the dragonkin's wings, and tying them together with a perfect clove hitch! <<else>> But <<rep $g.seafighter>> wounds the mate's left wing before he has time to accomplish this. <</if>> They will fight on even ground.
<<if $g.seafighter.isHasTrait('muscle_verystrong')>> They rush together and <<rep $g.seafighter>> is disarmed immediately, but <<they $g.seafighter>> performs a feat very few would dare: <<they $g.seafighter>> seizes the dragonkin's arms and wrestles it to the ground. The mate submits. <<else>> In the clash of weapons and the snapping of teeth, for all the dragonkin's ferocity, it is <<rep $g.seafighter>> who prevails. The mate's down, badly wounded. <</if>>
</p>
<p>
You yourself have no time to cheer this on, for you find yourself facing Captain <<rep $g.captain>>'s demon boatswain. And there's no one to help you but you yourself.
<<if $unit.player.isHasTrait('magic_light')>>Raising a hand and calling out a word of command, you overcome the fiend's power of darkness with your own magic light, and blind him. <<elseif $unit.player.isHasTrait('bg_priest')>> You sing the first line of a holy hymn that you remember from your priestly background—now who'd've thought you'd ever find <i>that</i> handy?—and he clutches both hands over his ears. <<else>> Wielding a whip, you curl it around the monster's throat as if you were training him in autoerotic asphyxiation for a “specialty” buyer.<</if>>.
Taking advantage of his momentary discomfiture, you chain him like a slave, and
<<if $unit.player.isHasTrait('per_cruel')>> subject him to sexual torture. <<elseif $unit.player.isHasTrait('dick_huge')>> bugger him with a dick so large it makes even <i>him</i> scream. <<else>> subject him to the first phase of Obedience Training: Basic. <</if>>.
</p>
<p>
With his two most fearsome servants down, Captain <<rep $g.captain>> bellows out an order – “Halt! Hold hard! BELAY!” That roar is hard to ignore. The fighters on both sides back off, and you find yourself facing Captain <<rep $g.captain>> himself across the deck. He's drawn a flaming sword—a dangerous thing on wooden ships—and is livid with rage and consternation.
</p>
<p>
“I can burn us both to the waterline, and I have the explosives to blow us both to pieces,” says Captain <<rep $g.captain>>. “But I don't comprehend you. You're not a merchant, you're not a pirate, and you're not a pirate hunter. I know them all. So what in the seven deeps of Hell are we fighting about?”
</p>
<p>
“You've got something of mine,” you reply. “In your crew. I want <<rep $g.slaver>>.”
</p>
<p>
“Is <i>that</i> all?” he roars. “That good-for-nothing
<<if $g.slaver.isHasTrait('gender_male')>>cabin boy <<else>> piratical maid-of-all-work<</if>>?
Take <<them $g.slaver>>. <i>Take</i> <<them $g.slaver>>! Only go!”
</p>
<p>
He roars orders, and your former slaver is soon hauled up…looking somewhat the worse for wear from the last time you saw <<them $g.slaver>>, but well-exercised and ready to return to a life of slaving. “It's back to slaving for you,” you say. <<rep $g.slaver>> saunters over to your side of the deck as if <<they $g.slaver>> knew all along you'd have to come for <<them $g.slaver>>.
</p>
<p>
“Hold on,” says Captain <<rep $g.captain>>. “You're slavers?”
</p>
<p>
“Yes,” you reply. “I'm you from the ancient and honorable company of <<rep $company.player>>.”
</p>
<p>
“Well,” he says, looking disgustedly over the remains of his crew, “we might have an order or two for you.” He sends for ink and paper. “In particular, I could use an untamed demon to make up for the one you just tamed.”
</p>
<p>
As you sail away, over a glass of spirits you <<uadv $unit.player>> ask slaver how <<they $g.slaver>> came to be where <<they $g.slaver>> was. “Well,” <<they $g.slaver>> says, “you remember when you lost me, right? You don't want to know what happened after that, and you <i>really</i> don't want to know what happened after that. You probably <i>do</i> want to know what happened next, 'cause it's really naughty, but it's not your business. And before you know it, I was on the waterfront being shanghaied by these animals. And soon enough they were using me for every little thing on board—washing dishes, serving out the grub, sewing on buttons, that sort of thing.”
</p>
<p>
<<rep $g.slaver>> doesn't admit to any lewd services, and you don't see a reason to press.
<<set _doctor = $dutylist.getUnit('DutyDoctor')>>
<<if _doctor and $g.slaver.isHasTrait(setup.trait.gender_male)>> But later, at <<rep $g.slaver>>'s next physical, <<rep _doctor>> notices that his rear orifice looks more well-used now. <<elseif _doctor and $g.slaver.isHasTrait(setup.trait.gender_female)>> But later, at <<rep $g.slaver>>'s next physical, <<rep _doctor>> notices that her orifices looks more well-used now.<</if>>
The destinies of missing slavers are eccentric and unpredictable.
</p>
<p>
What matters now is that you're back together, and you an order or two that might help defray the cost of the voyage. It's time to steer homewards! </p><p>You reach the Southern Isles without incident, charter the ship, and crawl through waterfront dives looking for a crew and for word of your target—the notorious Captain <<rep $g.captain>>. You strike it lucky. One of your new hires used to sail with Captain <<rep $g.captain>>, and knows what waters he'll frequent this time of year, harrying merchants who follow the prevailing winds. If you trick your new ship out like a merchantman, you'll be a likely target, and meet Captain <<rep $g.captain>> for sure. Then it's up to <<rep $g.seafighter>> and your new crew of cutthroats to persuade him to back off and return your slaver—or else attack him and take your slaver back by force.
<<if $g.seafighter.isHasTrait(setup.trait.per_lunatic)>> <<rep $g.seafighter>>'s eyes light up insanely at the thought. <</if>>
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> clenches <<their $g.seafighter>> fist in anticipation. <</if>>
</p>
<p>
You set sail <<uadv $unit.player>> with a strong gale behind you. <<rep $g.navigator>> expertly guides you into Captain <<rep $g.captain>>'s preferred waters.
<<if $g.navigator.isHasTrait('race_neko')>> The salt spray irritates your Neko navigator <<rep $g.navigator>> (you know how cats hate getting wet). <</if>>
<<rep $g.seafighter>> passes the time training and drilling the cutthroats, preparing them for the worst.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> They soon learn to fear <<their $g.seafighter>> wrath more than any enemy they might face. <</if>>
The search is long and tedious.
<<if $unit.player.isHasTrait(setup.trait.per_loyal)>> But your loyalty to your missing underling drives you on. <</if>>
<<if $unit.player.isHasTrait('per_stubborn')>> Sheer stubbornness keeps you going. You aren't giving up! <</if>>
And eventually you strike luck.
</p>
<p>
As you round a headland near a hidden cove, you see another ship bearing down on you with the wind at its back, flying the notorious flag of Captain <<rep $g.captain>> himself! You, your slaver, and your cutthroats prepare to take the fight to them. Your ships crash together, they grapple you, and soon swarm over the side and into the fray. It's cutlass to cutlass and cutthroat to cutthroat.
</p>
<p>
<<rep $g.seafighter>> leads your band <<if $g.seafighter.isHasTrait('per_nimble')>>, leaping acrobatically from your ship to the enemy's,<</if>> and cuts through two of the enemy before meeting a fearsome sight: Captain <<rep $g.captain>>'s dragonkin first mate.
<<if $g.seafighter.isHasTrait('per_brave')>>Most warriors would be daunted at <<their $g.seafighter>> awful visage, but <<rep $g.seafighter>> steels <<their $g.seafighter>> nerves and moves steadily forward <<elseif $g.seafighter.isHasTrait('per_lunatic')>> Heedless of the dreadful prospect, <<rep $g.seafighter>> charges forward like a berserker. <</if>>.
<<if $g.seafighter.isHasTrait('race_neko')>> With a pointy-toothed grin, the dragonkin kicks a swab-bucket at the Neko warrior, splashing <<them $g.seafighter>> with soapy water and causing <<them $g.seafighter>> to yowl with rage at getting so wet. <</if>>
</p>
<p>
The monstrous pirate spreads his wings and takes to the air, hoping to gain the advantage.
<<if $g.seafighter.isHasTrait('magic_wind')>> But <<rep $g.seafighter>> makes a mystic sign, inhales hard, and literally sucks out the wind from beneath the mate's wings! He crashes back to the deck, to the wind-wizard's grim satisfaction. <<elseif $g.seafighter.isHasTrait('per_nimble') and $g.seafighter.isHasTrait('bg_seaman')>> But <<rep $g.seafighter>> performs an amazing feat of sailorcraft, leaping nimbly into the rigging, seizing a cable, wrapping it around the dragonkin's wings, and tying them together with a perfect clove hitch! <<else>> But <<rep $g.seafighter>> wounds the mate's left wing before he has time to accomplish this. <</if>> They will fight on even ground.
<<if $g.seafighter.isHasTrait('muscle_verystrong')>> They rush together and <<rep $g.seafighter>> is disarmed immediately, but <<they $g.seafighter>> performs a feat very few would dare: <<they $g.seafighter>> seizes the dragonkin's arms and wrestles it to the ground. The mate submits. <<else>> In the clash of weapons and the snapping of teeth, for all the dragonkin's ferocity, it is <<rep $g.seafighter>> who prevails. The mate's down, badly wounded. <</if>> <<rep $g.seafighter>> puts <<uaweapon $g.seafighter>> to the throat of the dragonkin. This proves useful, because things have not been going so well for you.
</p>
<p>
The ship-to-ship crossing was harder for you—the gap was wide and the rigging was awkwardly placed. <<if $unit.player.isHasTrait('per_cautious')>> Also, you were a little too cautious in making the leap. Your careful nature has saved your head many a time, but this time it made you hesitate. <<elseif $unit.player.isHasTrait('per_kind')>> And something peaceful within your nature rebelled at the thought of jumping into the carnage and clash of steel, and you hesitated for a vital moment. <</if>>
When you made it, you were immediately pounced upon by Captain's notorious demon first mate. Both of you lose your weapons and you begin to wrestle.
</p>
<p>
You strive with might and main. <<if $unit.player.isHasTrait('per_stubborn')>>Stubbornly you fight, refusing to yield.<</if>> <<if $unit.player.isHasTrait('muscle_verystrong')>> With your great strength, you actually get on top of the muscular demon and gain the upper hand. <</if>> But then the demon plays a dirty trick. He kicks off his shoes, claws off his trousers with his rear claws, and then proceeds to slash at you with his thorny demon dick! You're badly wounded and the demon puts his natural “weapon” to your throat.
</p>
<p>
Impasse. Captain <<rep $g.captain>> doesn't want to lose his rare dragonkin mate. Your side doesn't want to lose its paymaster. So Captain <<rep $g.captain>> bellows out an order – “Halt! Hold hard! BELAY!”
</p>
<p>
“Good idea!” you gasp out. The fighting stops. Now you can parley.
</p>
<p>
“So,” says Captain <<rep $g.captain>>, “You're not a merchant, you're not a pirate, and you're not a pirate hunter. I know them all. So what in the seven deeps of Hell are we fighting about?”
</p>
<p>
“You've got something of mine,” you reply. “In your crew. I want <<rep $g.slaver>>.”
</p>
<p>
Captain <<rep $g.captain>> turns purple and rends the air with oaths. “That bastard! That sea urchin fucking sea slug licker! That catamite to a dolphin! That snot-sucking minnow bait! I'll put my anchor up his ass and get him a blowjob from a moray!” There's a great deal more in this vein. For your own part, you are puzzled. <<if $g.slaver.isHasTrait(setup.trait.gender_female)>> <<rep $g.slaver>> isn't a “he.” <<else>> Sure, you're convinced <<rep $g.slaver>> is another sticky-fingered embezzler just like the rest of them, and you'd've given up this wicked slaving life by now if you had half the gold those thieving ingrates had stolen from you, but he isn't <i>that</i> bad. <</if>> Seeing your look of genuine and extreme puzzlement, Captain <<rep $g.captain>> calms himself and proceeds to explain.
</p>
<p>
“A few months ago,” he said, “one of those slug-sucking nobles of Tor had a dinner service shipped to him by sea. And I stole it. Because that's what I do! Wouldn't pay a decent ransom, but he wouldn't shut up about it, either. His gold-chased dinner plates. His soup spoons engraved with the family crest. And above all, his chased platinum salvers. Oh, how much he hated losing those salvers. Engravings by the leading artisans of Krell. Each one chronicled a noble deed of his ancestors, or the history of Tor. His initials in the ancient calligraphy of the capital. He. Wouldn't. Shut. Up. About. His. Fucking. <i>Salvers!</i> And oh-how-terrible it was that dirty old Captain <i>Me</i> had captured 'em, and how the King should be mobilizing his whole navy to get them back!”
</p>
<p>
You look quizzically at this ranting performance.
</p>
<p>
“<i>So</i>, continues Captain <<rep $g.captain>>, “some groggy dumbshit in a two-copper dockside whorehouse starts a rumor that I've been capturing <I>slavers</i>! And now every flesh-peddler from here to the Eastern Wastes is looking for me, trying to get back some good-for-nothing ass-beater that <i>I</i> wouldn't use for ballast!”
</p>
<p>
An hour later, you are sailing away <<uadv $unit.player>>, perhaps a little sadder and a little wiser.
<<set _rescuer = $dutylist.getUnit('DutyRescuer')>>
But when you get back to <<rep $company.player>>,
<<if _rescuer>>
<<rep _rescuer>>
<<else>>
your former rescuer
<</if>>
is going start vetting the rumors a little better. Or
<<if _rescuer>>
<<they _rescuer>>
<<else>>
the former rescuer
<</if>>
is going to be a <i>lot</i> sadder and a <i>lot</i> wiser. Teaching lessons is a specialty in your trade.
</p><p>You reach the Southern Isles without incident, charter the ship, and crawl through waterfront dives looking for a crew and for word of your target—the notorious Captain <<rep $g.captain>>. You strike it lucky. One of your new hires used to sail with Captain <<rep $g.captain>>, and knows what waters he'll frequent this time of year, harrying merchants who follow the prevailing winds. If you trick your new ship out like a merchantman, you'll be a likely target, and meet Captain <<rep $g.captain>> for sure. Then it's up to <<rep $g.seafighter>> and your new crew of cutthroats to persuade him to back off and return your slaver—or else attack him and take your slaver back by force.
<<if $g.seafighter.isHasTrait(setup.trait.per_lunatic)>> <<rep $g.seafighter>>'s eyes light up insanely at the thought. <</if>>
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> clenches <<their $g.seafighter>> fist in anticipation. <</if>>
</p>
<p>
You set sail <<uadv $unit.player>> with a strong gale behind you. <<rep $g.navigator>> expertly guides you into Captain <<rep $g.captain>>'s preferred waters.
<<if $g.navigator.isHasTrait('race_neko')>> The salt spray irritates your Neko navigator <<rep $g.navigator>> (you know how cats hate getting wet). <</if>>
<<rep $g.seafighter>> passes the time training and drilling the cutthroats, preparing them for the worst.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> They soon learn to fear <<their $g.seafighter>> wrath more than any enemy they might face. <</if>>
The search is long and tedious.
<<if $unit.player.isHasTrait(setup.trait.per_loyal)>> But your loyalty to your missing underling drives you on. <</if>>
<<if $unit.player.isHasTrait('per_stubborn')>> Sheer stubbornness keeps you going. You aren't giving up! <</if>>
And eventually you strike luck. </p>
<p>
What you find is not the infamous ship of Captain <<rep $g.captain>>, but a mostly-wrecked ship fighting its way desperately back to port. It seems they've been attacked and thoroughly plundered by pirates, and from the description of the enemy's ship, their attacker must have been Captain <<rep $g.captain>> himself! Exhausted from the ordeal, the surviving merchant sailors have no strength to resist your questioning. No, they didn't take note of which way he was sailing.
</p>
<p>
<<if $g.navigator.isHasTrait('per_smart')>> <<rep $g.navigator>> is sharp enough to ask <<else>> You ask>> <</if>>
what cargo they lost. And there, at long last, you get the lead you need. Amidst their other odds and ends, the crew of this derelict had the only true map to the treasure of <i>another</i> infamous pirate. They were hoping to sell it to treasure hunters, but now it's in the hands of Captain <<rep $g.captain>>, and there can be no doubt what he'll do. One of the crew remembers the name of the island, and
<<if $g.navigator.isHasTrait('per_smart')>>
<<rep $g.navigator>>, with
<<their $g.navigator>> excellent memory, recalls
<<else>> questioning among your own crew reveals <</if>>
its location.
<<if $unit.player.isHasTrait(setup.trait.per_kind)>> You are nice enough to reward this helpful crew with provisions and repairs. <</if>>
One crewman, a superstitious exotic from the Southern Isles, feels no gratitude to you for sparing his life and leaving him to fight his way back to shore on a still-badly-damaged ship. As you sail off, he draws out a crudely-carved fetish and prays down fearsome curses on your head, and the heads of all your crew.
</p>
<p>
Oblivious to this, you set sail for the island, and over a headland you see the topsails of Captain <<rep $g.captain>>'s infamous ship. You find a suitable anchorage and disembark with your own crew of cutthroats.
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> exhorts them to be ready to kill if they dare to resist your demands, and you'll sail off with two ships instead of one. <</if>>
</p>
<p>
The island jungle is hot and the march is hard.
<<if $unit.player.isHasTrait('per_stubborn')>> But you are relentless, and infuse the rest of the crew with your relentlessness. <</if>>
<<if $g.navigator.isHasTrait('per_attentive')>> Your sharp-eyed navigator, <<rep $g.navigator>>, lights upon signs of Captain <<rep $g.captain>>'s progress across the island, and leads the way as you follow his track.
<<elseif $unit.player.isHasTrait('per_attentive')>> Your sharp eyes light upon signs of Captain <<rep $g.captain>>'s progress across the island, and you lead the way yourself as you follow his track
<<else>> Eventually, you find Captain <<rep $g.captain>>'s track, and follow it to his destination. <</if>>
</p>
<p>
Near nightfall, you hear raucous, bawdy singing in triumph, and think Captain <<rep $g.captain>> must have found his treasure after all. You send navigator out to scout, but the pirates' sharp-eyed sentry spots your scout, and surprise is out of the question. You and your cutthroats come storming out of the trees to see the other crew forming up in a defensive ring. The moment of truth has come. The forces look evenly matched. Captain <<rep $g.captain>> has a fearsome reputation.
</p>
<p>
“Ahoy!” you call out. “My name is <<= $unit.player.rep()>> from <<rep $company.player>>, the most fearsome slavers afloat, and you've got someone of mine! I want <<rep $g.slaver>> back and I'm ready to deal or to fight for <<them $g.slaver>>. Your choice! I'll only deal with your captain, so let him stand forth and face me!”
</p>
<p>
“Oh, is that so?” says a voice from inside the pirates' ring. “Stand aside boys, and let's see what we're dealing with.” The ring breaks open, and Captain <<rep $g.captain>> himself steps out, flanked by his dragonkin first mate and his demon boatswain. “Now, what would you be wanting with <<rep $g.slaver>>?”
</p>
<p>
“He's one of my slavers,” you say, “and I want him back. I can pay you with gold, or with steel.”
<<if $g.seafighter.isHasTrait(setup.trait.per_aggressive)>> <<rep $g.seafighter>> grips <<their $g.seafighter>> <<uweapon $g.seafighter>> in anticipation. <</if>>
<<if $g.seafighter.isHasTrait(setup.trait.per_lunatic)>> <<rep $g.seafighter>> is practically drooling with insane savagery at the upcoming battle. <</if>>
</p>
<p>
“I don't think so,” says Captain <<rep $g.captain>>, spitting. “I think maybe I'll make some new additions to my crew, or to my stores of shark bait.”
</p>
<p>
It's going to be a fight then. You nod to <<rep $g.seafighter>>. “Right,” <<they $g.seafighter >> says. “To them, lads!”
</p>
<p>
“What lads?” asks Captain <<rep $g.captain>>, cocking an eyebrow innocently.
</p>
<p>
You look behind you. It's too true. A moment ago, there was a line of steely-eyed murder backing you up. Now it's assholes and elbows, all going the wrong way.
</p>
<p>
Grinning <<uadv $g.captain >>, Captain <<rep $g.captain>> looks over your forlorn trio. “From your look,” he says to <<rep $g.navigator>>, “I'd say you're a navigator. I've got room on my crew for a navigator. Or shark bait. Your choice.” In moments, the deal is sealed, the articles are signed, and Captain <<rep $g.captain>> has a new navigator.
</p>
<p>
“Now,” drawls Captain <<rep $g.captain>>, “seeing as you're so <<uadj $unit.player>> and your friend there's so <<uadj $g.seafighter>>, I think I'll…” But there's no one to continue to. You've heard the old jokes about “death, sodomy, or death-by-sodomy,” and you're not sticking around to hear the options. You and <<rep $g.seafighter>> are pelting away as fast as you can. And here Captain <<rep $g.captain>>'s success helps you. His pirates have been celebrating their great find with rum and debauchery, and while they wouldn't mind a little close-hand throat-cutting, they're not up to a race. His winged officers take to the skies in pursuit, but their flying is more than a little unsteady. You make the trees and you don't stop.
</p>
<p>
You and <<rep $g.seafighter>> reach the beach where your cutthroats are swarming back onto your chartered ship. Freedom's just in your grasp when Captain <<rep $g.captain>>'s dragonkin first mate lands feet-first on the sand to cut off your retreat. Snapping his jaws and swinging a cutlass, he prepares to cut you to pieces. You and <<rep $g.seafighter>> are exhausted from your flight, but the mate is woozy with booze and dizzy from a mid-air collision with the demon boatswain. A bleary, staggering melee results, at the end of which both you and seafighter are bleeding out on the sand, and the dragonkin mate's flapping unsteadily away.
</p>
<p>
Your crew has the “decency” to carry your near-lifeless remains back to the ship, on the understanding that you'll keep a few facts to yourself. You'll make it back to <<rep $company.player>> eventually, but will need more time to recuperate. There's only one thought to comfort you:
</p>
<p>
You know what a bunch of thieving, faithless, treacherous embezzlers your slavers have always been. If Captain's really got <i>two</i> of them on his crew, he'll be broke next year for sure. And <i>they'll</i> be anywhere from beyond the mist to under the sea to down the tavern to up the Queen of Tor's ass.
<<set _rescuer = $dutylist.getUnit('DutyRescuer')>>
<<if _rescuer>>
<<rep _rescuer>>
<<else>>
Your former rescuer
<</if>>
will just have to keep
<<if _rescuer>>
<<their _rescuer>>
<<else>>
their
<</if>>
eyes open. The destinies of missing slavers are eccentric and unpredictable. </p><<set _criteriadiscipliner = new setup.UnitCriteria(
null, /* key */
'Anti-Submission Trainer', /* name */
[
setup.trait.bg_thug,
setup.trait.bg_slaver,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_attentive,
setup.trait.per_aggressive,
setup.trait.per_serious,
setup.trait.skill_hypnotic,
],
[
setup.trait.per_dreamy,
setup.trait.bg_slave,
setup.trait.muscle_extremelyweak,
setup.trait.muscle_veryweak,
setup.trait.per_generous,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_empath,
],
[
setup.qres.NoTrait(setup.trait.per_submissive),
setup.qres.Job(setup.job.slaver),
],
{
slaving: 4.5,
}
)>>
<<set _criteriatrainee = new setup.UnitCriteria(
null, /* key */
'Trainee-Patient', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.bg_noble,
setup.trait.bg_slaver,
setup.trait.bg_pirate,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_aggressive,
setup.trait.per_aggressive,
setup.trait.per_brave,
setup.trait.per_cruel,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_tough,
setup.trait.per_proud,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_slave,
setup.trait.bg_maid,
setup.trait.bg_whore,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_loyal,
setup.trait.per_empath,
setup.trait.per_calm,
],
[
setup.qres.Trait(setup.trait.per_submissive),
setup.qres.Job(setup.job.slaver),
],
{
slaving: 4.5,
}
)>>
<<run new setup.QuestTemplate(
'slaver_training__submission_cure', /* key */
"Slaver Training: Submission Cure", /* Title */
"Alberich", /* Author */
[
'fort', 'trait'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'discipliner': _criteriadiscipliner,
'trainee': _criteriatrainee, },
{ /* actors */
},
[ /* costs */
setup.qc.Money(-1000),
],
'Quest_slaver_training__submission_cure',
setup.qdiff.harder44, /* difficulty */
[ /* outcomes */
[
'Quest_slaver_training__submission_cureCrit',
[
setup.qc.TraitReplace('trainee', setup.trait.per_dominant), ],
], [
'Quest_slaver_training__submission_cureCrit',
[
setup.qc.TraitRemove('trainee', setup.trait.per_submissive),
],
], [
'Quest_slaver_training__submission_cureFailure',
[
setup.qc.Equipment(setup.equipmentpool.sex),
],
], [
'Quest_slaver_training__submission_cureDisaster',
[
setup.qc.MissingUnit('trainee'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
Submissiveness is not a survival trait in your business. The cruel and the kind, the friendly and the distant, the noble and the peasant, may come to wield the whip if destiny takes them that way. But a natural “bottom” is not an obvious choice for the slavers' life.
</p>
<p>
Now a highly unusual slaver leader might find a use for a subbie on staff, but most want nothing to do with them, except as inmates of the slave pens. And it seems you have at least one submissive slaver on your staff now. The question is whether you want to do anything about it.
</p>
<p>
<<set _trainer = $dutylist.getUnit('DutyTrainer')>>
<<if _trainer>>
Your Drill Sergeant, <<rep _trainer>>,
<<else>>
Your former drill sergeant
<</if>>
has recently acquired a book of slaving technique and believes
<<if _trainer>>
<<they _trainer>> has
<<else>>
they have
<</if>>
the answer.
The exercise is radical and there are no guarantees it'll work, but if you're willing to invest
some coin
and assign a slaver to do the training,
<<if _trainer>>
<<rep _trainer>>
<<else>>
your former drill sergeant
<</if>>
is ready to instruct (or be)
that trainer.
</p>
<p>
A strong slaver is best for the task, and a background in hypnosis is a plus. You will also need a special potion...
</p><<set _potion = setup.item.potion_submissive_cure.rep()>>
<<set _trainer = $dutylist.getUnit('DutyTrainer')>>
<p>As <<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>> explained it to you, the theory is simple enough. Begin to give the submissive the domination he craves. Push it further than he wants. Push it <i>much</i> further than he wants. Dominate and abuse, and force a reaction. Use potions and hypnotic techniques to enhance the effects of the abuse, and (hopefully) the slaver's reaction to it. This exercise is called “conversion by chastisement” or—<<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>>'s preferred term—“club away the sub.”
</p>
<p>
You assign <<rep $g.trainee>> to your training hall for the week. <<They $g.trainee>> had a light breakfast (liberally infused with the <<= _potion>>) and a bath, but no hints as to what <<they $g.trainee>>'s facing from <<their $g.trainee>> assigned trainer.
</p>
<p>
If you respected your slavers' privacy, you would leave what happens between trainer and trainee. Since you don't, you've got a convenient spy hole, where
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
<<if $unit.player.isHome()>> you
<<elseif _viceleader>> your vice leader (since you are away)
<<else>> one of your more discreet slavers (since you are away) <</if>>
can check in on things.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<They _viceleader>> decides
<<else>> Your spy decides <</if>>
to watch the opening moments of the training.
</p>
<p>
<<rep $g.trainee>> is fifteen minutes early, and finds the room without furniture, with only a few of the supplies from Domestic Training: Basic scattered around. There are no restraints in sight, but that is as it should be—the point is that <<rep $g.trainee>> is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<rep $g.trainee>> is a little nervous when <<rep $g.discipliner>> is late. This too is as it should be. <<rep $g.discipliner>> is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> is at maximum nervousness and is trying to find a way to get comfortable.
</p>
<p>
“What are <i>you</i> doing here?” barks <<rep $g.discipliner>>, striding in with purpose.
</p>
<p>
“I'm here for training,” <<they $g.trainee>> replies meekly. “By order of <<rep $unit.player>>.”
</p>
<p>
<<rep $g.discipliner>> fetches <<rep $g.trainee>> a sharp slap in the face. “Training, my ass! Training is for slavers and you aren't fit to be one. You're <i>here</i> to do what I <i>say</i> and to do it <i>when I say it</i>. That clear, bitch?” <<rep $g.trainee>> hesitates and gets another slap. “I <i>said</i>, is that <i>clear</i>, bitch?”
</p>
<p>
<<if $unit.player.isHome()>> You
<<elseif _viceleader>> <<rep _viceleader>>
<<else>> Your spy<</if>>
can't hear <<rep $g.trainee>>'s mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<rep $g.discipliner>> 's next order is unambiguous. “Then how <i>dare</i> you come in here dressed up like a slaver, as if <i>you</i> could beat a tough buck into submission? Get out of those clothes <i>now</i> and we'll see what you've got.”
</p>
<p>
<<rep $g.trainee>> hastens to obey. <<ustriptorso $g.trainee>> <<ustriplegs $g.trainee>> <<Their $g.trainee>> face says <<they $g.trainee>>'s confused;
<<if $g.trainee.isHasDick()>> his erection says he's aroused. <<else>> her tight nipples say she's aroused. <</if>>
<<if $g.trainee.isHasTrait('dick_large')>> <<rep $g.discipliner>> eyes him critically as his underwear comes off. “Pathetic,” <<they $g.discipliner>> says. “The gods give you a halfway decent dong, and you could be a master in the bedroom easy if you had any heart to go with it.”
<<elseif !$g.trainee.isHasTrait('dick_medium')>> <<rep $g.discipliner>> laughs aloud at <<rep $g.trainee>>'s miniscule cock. “No wonder you're such a bitch,” <<they $g.discipliner>> says. “No woman's even going to <i>feel</i> that thing. Pathetic.” <</if>>
</p>
<p>
<<rep $g.discipliner>> 's work is cut out for <<them $g.discipliner>>.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<rep _viceleader>> decides
<<else>> Your spy decides <</if>>
to leave <<them $g.discipliner>> to it.
</p>
<p>
A little while later,
<<if $unit.player.isHome()>> you check back.
<<elseif _viceleader>> <<rep _viceleader>> checks back.
<<else>> your spy checks back. <</if>>
It's a key moment, maybe. <<rep $g.trainee>> is on <<their $g.trainee>> hands and knees and from the looks of things <<they $g.trainee>>'s been scrubbing the floor. From the sound of things <<they $g.trainee>>'s voiced some suspicions about the need for this training, and in particular about whether you know and would approve.
</p>
<p>
“Don't you <i>dare</i> talk to me about <<rep $unit.player>>!” snaps <<rep $g.discipliner>> . “You owe me for that.” <<rep $g.discipliner>> hikes a booted foot on top of a stirrup in the floor. “You crawl over here and you kiss my foot, and I mean <i>now</i>!”
</p>
<p>
<<rep $g.trainee>> obeys, but <<their $g.trainee>> face is showing doubt and <<their $g.trainee>> movements show hesitation. <<rep $g.discipliner>> , of course, showers <<them $g.trainee>> with further abuse, then twists <<their $g.discipliner>> foot around so the sole is in <<rep $g.trainee>> 's face. “I don't mean a little peck on the top,” <<they $g.discipliner>> barks. “I mean the bottom. <i>Lick</i> it. <i>Neck</i> with it. Make <i>love</i> to it. I've been out walking in the stables today, and the stuff I stepped in there is worth more than you!”
</p>
<p>
<<rep $g.trainee>> scuttles back a few paces, at long last showing defiance. <<They $g.trainee>>'s still crouching and <<they $g.trainee>> isn't loud, but <<their $g.trainee>> word is plain: “No.”
</p>
<p>
“WHAT???” <<rep $g.discipliner>> strides forward and plants the bottom of <<their $g.discipliner>> boot in <<rep $g.trainee>> 's face. <<rep $g.trainee>> doesn't lick. <<They $g.trainee>> grabs the boot, heaves, and sends <<rep $g.discipliner>> sprawling. Soon they're back on their feet in a screaming match.
</p>
<p>
“<<rep $unit.player>> didn't order this,” yells <<rep $g.trainee>> , “and even if <<they $unit.player>> did, I'm – not – <i>doing it!</i>”
<<if $unit.player.isHome()>> You leave
<<elseif _viceleader>> <<rep _viceleader>> leaves
<<else>> Your spy leaves <</if>>
them to that. The kids are so cute playing together. It'll be healthy to get it out of their systems.
</p>
<p>
Later on,
<<if $unit.player.isHome()>> you check back
<<elseif _viceleader>> <<rep _viceleader>> checks back
<<else>> your spy checks back<</if>>
through the spy hole. <<rep $g.trainee>> and <<rep $g.discipliner>> have switched from invective to actual wrestling.
</p>
<p>
<<if $g.trainee.isHasTrait('per_proud')>> <<rep $g.trainee>> 's natural pride has overcome <<their $g.trainee>> submissiveness, and <<they $g.trainee>> is determined to do <<rep $g.discipliner>> as much harm as possible.<</if>>
<<if $g.trainee.isHasTrait('per_aggressive')>>The encounter has tapped a deep well of aggression in <<rep $g.trainee>>, which leads <<them $g.trainee>> to fight hard and forget all about submitting.<</if>>
<<if $g.trainee.isHasTrait('per_tough') || $g.trainee.isHasTrait('per_stubborn')>> <<rep $g.trainee>> has discovered reserves of determination <<they $g.trainee>> didn't know <<they $g.trainee>> had. <</if>>.
<<if $g.trainee.isHasTrait('muscle_strong')>> <<rep $g.trainee>> 's strength and determination are telling, and <<they $g.trainee>> wrestles <<rep $g.discipliner>> into a submission hold.
<<else>> <<rep $g.trainee>> seems to be forcing <<rep $g.discipliner>> into a submission hold…though to the watcher's practiced eye, it seems <<rep $g.discipliner>> is secretly letting <<they $g.trainee>> do it. <</if>>.
</p>
<p>
Just as it seems <<rep $g.trainee>> is going to break <<rep $g.discipliner>> 's neck or tear <<their $g.discipliner>> guts out bare-handed,
<<if $g.discipliner.isHasTrait('skill_hypnotic')>> <<rep $g.discipliner>> quietly speaks a codeword that's been conditioned into <<rep $g.trainee>> 's psyche.
<<else>> <<rep $g.discipliner>> slips out a one-use amulet that <<they $g.discipliner>> bought with the training funds. <<They $g.discipliner>> presses it into the back of <<rep $g.trainee>> 's neck. <</if>>
<<rep $g.trainee>> goes limp. Using the suggestive state induced by
<<if $g.discipliner.isHasTrait('skill_hypnotic')>> <<their $g.discipliner>> hypnotic skills, the <<= _potion>>, and the excitement of the encounter,
<<else>> the amulet, the <<= _potion>>, and the excitement of the encounter,<</if>>
<<rep $g.discipliner>> begins to whisper into <<rep $g.trainee>> 's ear, while stroking <<their $g.trainee>>'s nude <<ubody $g.trainee>> and keeping <<them $g.trainee>> relaxed.
<<if $unit.player.isHome()>> You assume
<<elseif _viceleader>> <<rep _viceleader>> assumes
<<else>> your spy assumes<</if>>
the words must be in praise of the new, domineering attitude you want your slaver to have.
</p>
<p>
<<rep $g.discipliner>> looks excited as <<they $g.discipliner>> pours the words into <<rep $g.trainee>>'s ears with increasing enthusiasm.
<<if $g.trainee.isHasDick()>> <<rep $g.trainee>> gets aroused, and <<rep $g.discipliner>> begins to fondle his <<ugenital $g.trainee>> while whispering the words of domination. As <<their $g.discipliner>> hands move faster, the watcher can almost read <<their $g.discipliner>>'s lips, “They're-all-your-bitches-they're-all-your-<i>bitches!</i>” <<rep $g.trainee>>, still in a semiconscious state, orgasms messily all over his belly and <<rep $g.discipliner>> 's <<uadj $g.discipliner>> hand. <<rep $g.discipliner>> <</if>>
<<if $g.trainee.isHasDick() and $g.discipliner.isHasTrait('per_lustful')>> licks it up. <<elseif $g.trainee.isHasDick()>> cleans it up primly. <</if>>
<<if $g.trainee.isHasVagina()>> <<rep $g.trainee>> moans with arousal, and <<rep $g.discipliner>> teases her nipples and belly with <<their $g.discipliner>> fingertips as <<they $g.discipliner>> continues to whisper words of domination in her ears. <<rep $g.discipliner>>'s face glows with enthusiasm as <<they $g.discipliner>> explains the true state of things—<<rep $g.trainee>> is <i>never</i> to take that kind of abuse from anyone again, but she's to dish it out good and hard on those worthless chattels who don't do as they're told. She writhes with pleasure as <<they $g.discipliner>> continues, and fondles her to a shuddering orgasm.
<</if>>
</p>
<p>
The training appears to have succeeded. If <<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant<</if>>'s book was telling the truth, this should have severed all thoughts of submission from all feelings of pleasure.
<<if $gOutcome == 'crit'>>You suspect it has gone further and associated pleasure with domination, making <<rep $g.trainee>> into a proper domineering slaver.<</if>>
<<They $g.trainee>> is cured, all right.
</p><<set _potion = setup.item.potion_submissive_cure.rep()>>
<<set _trainer = $dutylist.getUnit('DutyTrainer')>>
<p>As <<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>> explained it to you, the theory is simple enough. Begin to give the submissive the domination he craves. Push it further than he wants. Push it <i>much</i> further than he wants. Dominate and abuse, and force a reaction. Use potions and hypnotic techniques to enhance the effects of the abuse, and (hopefully) the slaver's reaction to it. This exercise is called “conversion by chastisement” or—<<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>>'s preferred term—“club away the sub.”
</p>
<p>
You assign <<rep $g.trainee>> to your training hall for the week. <<They $g.trainee>> had a light breakfast (liberally infused with the hypnotic <<= _potion>>) and a bath, but no hints as to what <<they $g.trainee>>'s facing from <<their $g.trainee>> assigned trainer.
</p>
<p>
If you respected your slavers' privacy, you would leave what happens between trainer and trainee. Since you don't, you've got a convenient spy hole, where
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
<<if $unit.player.isHome()>> you
<<elseif _viceleader>> your vice leader (since you are busy)
<<else>> one of your more discreet slavers (since you are busy) <</if>>
can check in on things.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<They _viceleader>> decides
<<else>> Your spy decides <</if>>
to watch the opening moments of the training.
</p>
<p>
<<rep $g.trainee>> is fifteen minutes early, and finds the room without furniture, with only a few of the supplies from Domestic Training: Basic scattered around. There are no restraints in sight, but that is as it should be—the point is that <<rep $g.trainee>> is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<rep $g.trainee>> is a little nervous when <<rep $g.discipliner>> is late. This too is as it should be. <<rep $g.discipliner>> is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> is at maximum nervousness and is trying to find a way to get comfortable.
</p>
<p>
“What are <i>you</i> doing here?” barks <<rep $g.discipliner>>, striding in with purpose.
</p>
<p>
“I'm here for training,” <<they $g.trainee>> replies meekly. “By order of <<rep $unit.player>>.”
</p>
<p>
<<rep $g.discipliner>> fetches <<rep $g.trainee>> a sharp slap in the face. “Training, my ass! Training is for slavers and you aren't fit to be one. You're <i>here</i> to do what I <i>say</i> and to do it <i>when I say it</i>. That clear, bitch?” <<rep $g.trainee>> hesitates and gets another slap. “I <i>said</i>, is that <i>clear</i>, bitch?”
</p>
<p>
<<if $unit.player.isHome()>> You
<<elseif _viceleader>> <<rep _viceleader>>
<<else>> Your spy<</if>>
can't hear <<rep $g.trainee>>'s mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<rep $g.discipliner>> 's next order is unambiguous. “Then how <i>dare</i> you come in here dressed up like a slaver, as if <i>you</i> could beat a tough buck into submission? Get out of those clothes <i>now</i> and we'll see what you've got.”
</p>
<p>
<<rep $g.trainee>> hastens to obey. <<ustriptorso $g.trainee>> <<ustriplegs $g.trainee>> <<Their $g.trainee>> face says <<they $g.trainee>>'s confused;
<<if $g.trainee.isHasDick()>> his erection says he's aroused <<else>> her tight nipples say she's aroused. <</if>>
<<if $g.trainee.isHasTrait('dick_large')>> <<rep $g.discipliner>> eyes him critically as his underwear comes off. “Pathetic,” <<they $g.discipliner>> says. “The gods give you a halfway decent dong, and you could be a master in the bedroom easy if you had any heart to go with it.”
<<elseif !$g.trainee.isHasTrait('dick_medium')>> <<rep $g.discipliner>> laughs aloud at <<rep $g.trainee>>'s miniscule cock. “No wonder you're such a bitch,” <<they $g.discipliner>> says. “No woman's even going to <i>feel</i> that thing. Pathetic.” <</if>>
</p>
<p>
<<rep $g.discipliner>> 's work is cut out for <<them $g.discipliner>>.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<rep _viceleader>> decides
<<else>> Your spy decides <</if>>
to leave <<them $g.discipliner>> to it.
</p>
<p>
A little while later,
<<if $unit.player.isHome()>> you check back.
<<elseif _viceleader>> <<rep _viceleader>> checks back.
<<else>> your spy checks back. <</if>>
It's a key moment, maybe. <<rep $g.trainee>> is on <<their $g.trainee>> hands and knees and from the looks of things <<they $g.trainee>>'s been scrubbing the floor. From the sound of things <<they $g.trainee>>'s voiced some suspicions about the need for this training, and in particular about whether you know and would approve.
</p>
<p>
“Don't you <i>dare</i> talk to me about <<rep $unit.player>>!” snaps <<rep $g.discipliner>> . “You owe me for that.” <<rep $g.discipliner>> hikes a booted foot on top of a stirrup in the floor. “You crawl over here and you kiss my foot, and I mean <i>now</i>!”
</p>
<p>
<<rep $g.trainee>> obeys, but <<their $g.trainee>> face is showing doubt and <<their $g.trainee>> movements show hesitation. <<rep $g.discipliner>> , of course, showers <<them $g.trainee>> with further abuse, then twists <<their $g.discipliner>> foot around so the sole is in <<rep $g.trainee>> 's face. “I don't mean a little peck on the top,” <<they $g.discipliner>> barks. “I mean the bottom. <i>Lick</i> it. <i>Neck</i> with it. Make <i>love</i> to it. I've been out walking in the stables today, and the stuff I stepped in there is worth more than you!”
</p>
<p>
<<rep $g.trainee>> looks up, and
<<if $unit.player.isHome()>>you
<<elseif _viceleader>> <<rep _viceleader>>
<<else>> your spy<</if>>
can see that the moment of truth has come. <i>This</i> is the point the training has been leading towards. <i>This</i> is when <<rep $g.trainee>> must look deep within, and see what <<they $g.trainee>> is really made of, the stuff of slavers or the stuff of slaves. <i>This</i> is the moment to assert <<themselves $g.trainee>> once and for all, to rise and fulfill <<their $g.trainee>> true destiny. Yes, now, <i>right</i> now, is the time for <<rep $g.trainee>> to see that <<they $g.trainee>>'s taken all <<they $g.trainee>> can stand, and that <<they $g.trainee>> <b>cannot and will not stand any more!</b>
</p>
<p>
Or not. “Yes, <<mistress $g.discipliner>>,” says <<rep $g.trainee>> meekly. <<rep $g.discipliner>> pushes <<them $g.trainee>> onto the floor with <<their $g.discipliner>> boot, so that <<they $g.discipliner>> is stepping on <<their $g.trainee>> face, while <<rep $g.trainee>> pushes <<their $g.trainee>> tongue out to lick the grimy, dirty boots, while weeping tears of gratitude at this chance to serve the <<mistress $g.discipliner>>.
</p>
<p>
Apparently, there is more work to be done.
</p>
<p>
<<if $unit.player.isHome()>>You peep in
<<elseif _viceleader>> <<rep _viceleader>>peeps in
<<else>>your spy peeps in<</if>>
on the training later, and things have grown more disturbing.
<<if $settings.bannedtags.watersport>> What you see turns you slightly queasy, and is best not described here.
<<else>> <<rep $g.discipliner>> 's got <<rep $g.trainee>> face-down on the floor, and is showering him with invective. “I'll show you what <i>you're</i> good for,” sneers <<rep $g.discipliner>> , kicking off <<their $g.discipliner>> pants. Squatting over <<rep $g.trainee>> 's bare back, <<rep $g.discipliner>> unleashes a stream of hot piss. To your intense disappointment, <<rep $g.trainee>> 's face is somewhere between puzzlement and pleasure. <<rep $g.discipliner>> takes a few steps back, grabs <<rep $g.trainee>> by the ankles, and drags <<them $g.trainee>> back 'til <<their $g.trainee>> face is close to the spillover. “Now lap it up like a dog, you bitch, and no hesitating!” With a “yes, <<mistress $g.discipliner>>,” <<rep $g.trainee>> obeys eagerly, but not eagerly enough, and gets a corrective kick. You shake your head and turn away.
<</if>>
You can hear further talk, with plenty of orders and curses from <<rep $g.discipliner>>, and plenty of “yes, <<mistress $g.discipliner>>,” “yes, <<mistress $g.discipliner>>,” “thank you <<mistress $g.discipliner>> from <<rep $g.trainee>>,” sometimes followed by a sharp, “speak when you're spoken to!” These are not the sounds of a successful conversion.
</p>
<p>
Later on,
<<if $unit.player.isHome()>>you spy through a peephole into <<rep $g.trainee>>'s quarters, and see
<<elseif _viceleader>> <<rep _viceleader>> spies through a peephole into <<rep $g.trainee>>'s quarters, and sees
<<else>>your spy spies through a peephole into <<rep $g.trainee>>'s quarters, and sees<</if>>
that <<they $g.trainee>> is nude, with a blissful face, and is stroking <<themselves $g.trainee>> while whispering, “yes, <<mistress $g.discipliner>>, yes, <<mistress $g.discipliner>>, yes, <<mistress $g.discipliner>>…” <<They $g.trainee>> reverently draws out a secret box from under <<their $g.trainee>> bed, lays it on top of the bed, kneels before it, opens it, and to
<<if $unit.player.isHome()>>your
<<elseif _viceleader>> <<rep _viceleader>>'s
<<else>>your spy's <</if>>
consternation, has drawn out a slutty, silky whore's garment, and begins sniffing it, rubbing it against <<their $g.trainee>>'s face, and stroking both the garment and <<themselves $g.trainee>>.
</p>
<p>
Well, you can confiscate <i>that</i> contraband later on. As for <<rep $g.trainee>>, you'll have to try this again—or give the cure up as a lost cause.
</p><<set _potion = setup.item.potion_submissive_cure.rep()>>
<<set _trainer = $dutylist.getUnit('DutyTrainer')>>
<p>As <<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>> explained it to you, the theory is simple enough. Begin to give the submissive the domination he craves. Push it further than he wants. Push it <i>much</i> further than he wants. Dominate and abuse, and force a reaction. Use potions and hypnotic techniques to enhance the effects of the abuse, and (hopefully) the slaver's reaction to it. This exercise is called “conversion by chastisement” or—<<if _trainer>> <<rep _trainer>> <<else>> your former Drill Sergeant <</if>>'s preferred term—“club away the sub.”
</p>
<p>
You assign <<rep $g.trainee>> to your training hall for the week. <<They $g.trainee>> had a light breakfast (liberally infused with the hypnotic <<= _potion>>) and a bath, but no hints as to what <<they $g.trainee>>'s facing from <<their $g.trainee>> assigned trainer.
</p>
<p>
If you respected your slavers' privacy, you would leave what happens between trainer and trainee. Since you don't, you've got a convenient spy hole, where
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
<<if $unit.player.isHome()>> you
<<elseif _viceleader>> your vice leader (since you are busy)
<<else>> one of your more discreet slavers (since you are busy) <</if>>
can check in on things.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<They _viceleader>> decides
<<else>> Your spy decides <</if>>
to watch the opening moments of the training.
</p>
<p>
<<rep $g.trainee>> is fifteen minutes early, and finds the room without furniture, with only a few of the supplies from Domestic Training: Basic scattered around. There are no restraints in sight, but that is as it should be—the point is that <<rep $g.trainee>> is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<rep $g.trainee>> is a little nervous when <<rep $g.discipliner>> is late. This too is as it should be. <<rep $g.discipliner>> is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> is at maximum nervousness and is trying to find a way to get comfortable.
</p>
<p>
“What are <i>you</i> doing here?” barks <<rep $g.discipliner>>, striding in with purpose.
</p>
<p>
“I'm here for training,” <<they $g.trainee>> replies meekly. “By order of <<rep $unit.player>>.”
</p>
<p>
<<rep $g.discipliner>> fetches <<rep $g.trainee>> a sharp slap in the face. “Training, my ass! Training is for slavers and you aren't fit to be one. You're <i>here</i> to do what I <i>say</i> and to do it <i>when I say it</i>. That clear, bitch?” <<rep $g.trainee>> hesitates and gets another slap. “I <i>said</i>, is that <i>clear</i>, bitch?”
</p>
<p>
<<if $unit.player.isHome()>> You
<<elseif _viceleader>> <<rep _viceleader>>
<<else>> Your spy<</if>>
can't hear <<rep $g.trainee>>'s mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<rep $g.discipliner>> 's next order is unambiguous. “Then how <i>dare</i> you come in here dressed up like a slaver, as if <i>you</i> could beat a tough buck into submission? Get out of those clothes <i>now</i> and we'll see what you've got.”
</p>
<p>
<<rep $g.trainee>> hastens to obey. <<ustriptorso $g.trainee>> <<ustriplegs $g.trainee>> <<Their $g.trainee>> face says <<they $g.trainee>>'s confused;
<<if $g.trainee.isHasDick()>> his erection says he's aroused <<else>> her tight nipples say she's aroused. <</if>>
<<if $g.trainee.isHasTrait('dick_large')>> <<rep $g.discipliner>> eyes him critically as his underwear comes off. “Pathetic,” <<they $g.discipliner>> says. “The gods give you a halfway decent dong, and you could be a master in the bedroom easy if you had any heart to go with it.”
<<elseif !$g.trainee.isHasTrait('dick_medium')>> <<rep $g.discipliner>> laughs aloud at <<rep $g.trainee>>'s miniscule cock. “No wonder you're such a bitch,” <<they $g.discipliner>> says. “No woman's even going to <i>feel</i> that thing. Pathetic.” <</if>>
</p>
<p>
<<rep $g.discipliner>> 's work is cut out for <<them $g.discipliner>>.
<<if $unit.player.isHome()>> You decide
<<elseif _viceleader>> <<rep _viceleader>> decides
<<else>> Your spy decides <</if>>
to leave <<them $g.discipliner>> to it.
</p>
<p>
A little while later,
<<if $unit.player.isHome()>> you check back.
<<elseif _viceleader>> <<rep _viceleader>> checks back.
<<else>> your spy checks back. <</if>>
It's a key moment, maybe. <<rep $g.trainee>> is on <<their $g.trainee>> hands and knees and from the looks of things <<they $g.trainee>>'s been scrubbing the floor. From the sound of things <<they $g.trainee>>'s voiced some suspicions about the need for this training, and in particular about whether you know and would approve.
</p>
<p>
“Don't you <i>dare</i> talk to me about <<rep $unit.player>>!” snaps <<rep $g.discipliner>> . “You owe me for that.” <<rep $g.discipliner>> hikes a booted foot on top of a stirrup in the floor. “You crawl over here and you kiss my foot, and I mean <i>now</i>!”
</p>
<p>
<<rep $g.trainee>> obeys, but <<their $g.trainee>> face is showing doubt and <<their $g.trainee>> movements show hesitation. <<rep $g.discipliner>> , of course, showers <<them $g.trainee>> with further abuse, then twists <<their $g.discipliner>> foot around so the sole is in <<rep $g.trainee>> 's face. “I don't mean a little peck on the top,” <<they $g.discipliner>> barks. “I mean the bottom. <i>Lick</i> it. <i>Neck</i> with it. Make <i>love</i> to it. I've been out walking in the stables today, and the stuff I stepped in there is worth more than you!”
</p>
<p>
<<rep $g.trainee>> looks up, and
<<if $unit.player.isHome()>>you
<<elseif _viceleader>> <<rep _viceleader>>
<<else>> your spy<</if>>
can see that the moment of truth has come. <i>This</i> is the point the training has been leading towards. <i>This</i> is when <<rep $g.trainee>> must look deep within, and see what <<they $g.trainee>> is really made of, the stuff of slavers or the stuff of slaves. <i>This</i> is the moment to assert <<themselves $g.trainee>> once and for all, to rise and fulfill <<their $g.trainee>> true destiny. Yes, now, <i>right</i> now, is the time for <<rep $g.trainee>> to see that <<they $g.trainee>>'s taken all <<they $g.trainee>> can stand, and that <<they $g.trainee>> <b>cannot and will not stand any more!</b>
</p>
<p>
Or not. “Yes, <<mistress $g.discipliner>>,” says <<rep $g.trainee>> meekly. <<rep $g.discipliner>> pushes <<them $g.trainee>> onto the floor with <<their $g.discipliner>> boot, so that <<they $g.discipliner>> is stepping on <<their $g.trainee>> face, while <<rep $g.trainee>> pushes <<their $g.trainee>> tongue out to lick the grimy, dirty boots, while weeping tears of gratitude at this chance to serve the <<mistress $g.discipliner>>.
</p>
<p>
Apparently, there is more work to be done.
</p>
<p>
<<if $unit.player.isHome()>>You peep in
<<elseif _viceleader>> <<rep _viceleader>>peeps in
<<else>>your spy peeps in<</if>>
on the training later, and things have grown more disturbing.
<<if $settings.bannedtags.watersport>> What you see turns you slightly queasy, and is best not described here.
<<else>> <<rep $g.discipliner>> 's got <<rep $g.trainee>> face-down on the floor, and is showering him with invective. “I'll show you what <i>you're</i> good for,” sneers <<rep $g.discipliner>> , kicking off <<their $g.discipliner>> pants. Squatting over <<rep $g.trainee>> 's bare back, <<rep $g.discipliner>> unleashes a stream of hot piss. To your intense disappointment, <<rep $g.trainee>> 's face is somewhere between puzzlement and pleasure. <<rep $g.discipliner>> takes a few steps back, grabs <<rep $g.trainee>> by the ankles, and drags <<they $g.trainee>> back 'til <<their $g.trainee>> face is close to the spillover. “Now lap it up like a dog, you bitch, and no hesitating!” With a “yes, <<mistress $g.discipliner>>,” <<rep $g.trainee>> obeys eagerly, but not eagerly enough, and gets a corrective kick. You shake your head and turn away.
<</if>>
You can hear further talk, with plenty of orders and curses from <<rep $g.discipliner>>, and plenty of “yes, <<mistress $g.discipliner>>,” “yes, <<mistress $g.discipliner>>,” “thank you <<mistress $g.discipliner>> from <<rep $g.trainee>>,” sometimes followed by a sharp, “speak when you're spoken to!” These are not the sounds of a successful conversion.
</p>
<p>
Later on,
<<if $unit.player.isHome()>>You check <<rep $g.trainee>> 's room, and see
<<elseif _viceleader>> <<rep _viceleader>> <<rep $g.trainee>> 's room, and sees
<<else>>your spy checks <<rep $g.trainee>> 's room, and sees<</if>>
that <<they $g.trainee>> is gone. You instigate a search, but all anyone finds is a short note. “<<rep $g.discipliner>> is right. I don't belong among slavers. I am off to find a <<mistress $g.discipliner>> to fulfill my true destiny. Farewell.”
</p>
<p>
Well, a rescuer may turn <<rep $g.trainee>> up later, and see what <<their $g.trainee>> attitude is after a few weeks in some other slaver's hands. Or in a crazy noble pervert's harem, or beyond the mists, or wherever else <<rep $g.trainee>> may turn up. Then you can decide if you're willing to bother with <<rep $g.trainee>>.
</p><<set _criteriamarriagebroker = new setup.UnitCriteria(
null, /* key */
'Marriage Broker', /* name */
[
setup.trait.race_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.per_deceitful,
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_logical,
setup.trait.per_curious,
setup.trait.per_calm,
setup.trait.skill_connected,
setup.trait.bg_merchant,
],
[
setup.trait.bg_farmer,
setup.trait.bg_pirate,
setup.trait.bg_laborer,
setup.trait.bg_wildman,
setup.trait.bg_raider,
setup.trait.bg_foodworker,
setup.trait.per_honest,
setup.trait.per_honorable,
setup.trait.per_generous,
setup.trait.per_kind,
setup.trait.corrupted,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.TraitExact(setup.trait.gender_male),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable]),
setup.qres.NoTrait(setup.trait.eq_gagged),
setup.qres.NoTrait(setup.trait.eq_blind),
setup.qres.NoTrait(setup.trait.eq_collar),
setup.qres.NoTrait(setup.trait.eq_restrained),
setup.qres.NoTrait(setup.trait.eq_pony),
setup.qres.NoTrait(setup.trait.eq_pet),
setup.qres.NoTrait(setup.trait.corruptedfull),
],
{
intrigue: 1,
social: 2,
}
)>>
<<set _criterialadyinwaiting = new setup.UnitCriteria(
null, /* key */
'Lady-in-Waiting', /* name */
[
setup.trait.race_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.per_calm,
setup.trait.per_cautious,
setup.trait.per_deceitful,
setup.trait.per_stubborn,
setup.trait.per_studious,
setup.trait.skill_connected,
setup.trait.per_serious,
],
[
setup.trait.race_humanvale,
setup.trait.race_humandesert,
setup.trait.race_humansea,
setup.trait.bg_farmer,
setup.trait.bg_pirate,
setup.trait.bg_hunter,
setup.trait.bg_laborer,
setup.trait.bg_merchant,
setup.trait.bg_wildman,
setup.trait.bg_raider,
setup.trait.bg_foodworker,
setup.trait.bg_slaver,
setup.trait.bg_artisan,
setup.trait.bg_seaman,
setup.trait.bg_unemployed,
setup.trait.bg_woodsman,
setup.trait.bg_clerk,
setup.trait.bg_thug,
setup.trait.bg_maid,
setup.trait.corrupted,
setup.trait.per_honest,
setup.trait.per_honorable,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable]),
setup.qres.NoTrait(setup.trait.corruptedfull),
setup.qres.NoTrait(setup.trait.skill_flight),
setup.qres.NoTrait(setup.trait.eq_gagged),
setup.qres.NoTrait(setup.trait.eq_blind),
setup.qres.NoTrait(setup.trait.eq_collar),
setup.qres.NoTrait(setup.trait.eq_restrained),
setup.qres.NoTrait(setup.trait.eq_pony),
setup.qres.NoTrait(setup.trait.eq_pet),
setup.qres.NoTrait(setup.trait.eq_slutty),
setup.qres.NoTrait(setup.trait.eq_veryslutty),
],
{
intrigue: 2,
social: 1,
}
)>>
<<set _criteriavirtuedefender = new setup.UnitCriteria(
null, /* key */
"Defender of the Bride's Virtue", /* name */
[
setup.trait.bg_knight,
setup.trait.per_chaste,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.bg_soldier,
setup.trait.per_aggressive,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_stubborn,
setup.trait.skill_connected,
],
[
setup.trait.bg_raider,
setup.trait.bg_farmer,
setup.trait.bg_slave,
setup.trait.bg_pirate,
setup.trait.bg_hunter,
setup.trait.bg_laborer,
setup.trait.bg_wildman,
setup.trait.bg_foodworker,
setup.trait.bg_slaver,
setup.trait.bg_unemployed,
setup.trait.bg_artisan,
setup.trait.bg_seaman,
setup.trait.bg_woodsman,
setup.trait.bg_clerk,
setup.trait.bg_thug,
setup.trait.bg_maid,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.Trait(setup.trait.gender_male),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable]),
setup.qres.NoTrait(setup.trait.eq_slutty),
setup.qres.NoTrait(setup.trait.eq_veryslutty),
setup.qres.NoTrait(setup.trait.corruptedfull),
setup.qres.NoTrait(setup.trait.skill_flight),
setup.qres.NoTrait(setup.trait.eq_gagged),
setup.qres.NoTrait(setup.trait.eq_blind),
setup.qres.NoTrait(setup.trait.eq_collar),
setup.qres.NoTrait(setup.trait.eq_restrained),
setup.qres.NoTrait(setup.trait.eq_pony),
setup.qres.NoTrait(setup.trait.eq_pet),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriablushingbride = new setup.UnitCriteria(
null, /* key */
'Blushing Bride', /* name */
[
setup.trait.race_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_deceitful,
setup.trait.skill_connected,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_cruel,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.per_aggressive,
setup.trait.training_oral_basic,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master,
setup.trait.training_anal_basic,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
setup.trait.training_dominance_basic,
setup.trait.training_dominance_advanced,
setup.trait.training_dominance_master,
setup.trait.training_masochist_basic,
setup.trait.training_masochist_advanced,
setup.trait.training_masochist_master,
setup.trait.training_toilet_basic,
setup.trait.training_toilet_advanced,
setup.trait.training_toilet_master,
setup.trait.training_horny_basic,
setup.trait.training_horny_advanced,
setup.trait.training_horny_master,
],
[
setup.trait.race_humanvale,
setup.trait.race_humandesert,
setup.trait.race_humansea,
setup.trait.bg_farmer,
setup.trait.bg_pirate,
setup.trait.bg_laborer,
setup.trait.bg_wildman,
setup.trait.bg_nomad,
setup.trait.bg_foodworker,
setup.trait.bg_slaver,
setup.trait.bg_unemployed,
setup.trait.bg_artisan,
setup.trait.bg_seaman,
setup.trait.bg_woodsman,
setup.trait.bg_clerk,
setup.trait.bg_thug,
setup.trait.bg_maid,
setup.trait.per_honest,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.race_humankingdom, setup.trait.race_humanvale, setup.trait.race_humandesert, setup.trait.race_humansea]),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.TraitExact(setup.trait.vagina_tight),
setup.qres.Trait(setup.trait.eq_veryvaluable),
setup.qres.NoTrait(setup.trait.corrupted),
setup.qres.NoTrait(setup.trait.eq_slutty),
setup.qres.NoTrait(setup.trait.eq_veryslutty),
setup.qres.NoTrait(setup.trait.eq_gagged),
setup.qres.NoTrait(setup.trait.eq_blind),
setup.qres.NoTrait(setup.trait.eq_collar),
setup.qres.NoTrait(setup.trait.eq_restrained),
setup.qres.NoTrait(setup.trait.eq_plug_anus),
setup.qres.NoTrait(setup.trait.eq_plug_vagina),
setup.qres.NoTrait(setup.trait.eq_pony),
setup.qres.NoTrait(setup.trait.eq_pet),
setup.qres.NoTrait(setup.trait.face_ugly),
setup.qres.NoTrait(setup.trait.training_vagina_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_sergeant_s_wedding___poetic_justice', /* key */
"The Sergeant's Wedding - Poetic Justice", /* Title */
"Alberich", /* Author */
[ 'city', 'veteran', 'order', 'favor',
], /* tags */
4, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'marriagebroker': _criteriamarriagebroker,
'ladyinwaiting': _criterialadyinwaiting,
'virtuedefender': _criteriavirtuedefender,
'blushingbride': _criteriablushingbride, },
{ /* actors */
'sgtelke': setup.unitgroup.humankingdommale, },
[ /* costs */
],
'Quest_the_sergeant_s_wedding___poetic_justice',
setup.qdiff.harder40, /* difficulty */
[ /* outcomes */
[
'Quest_the_sergeant_s_wedding___poetic_justiceCrit',
[
setup.qc.MissingUnitForever('blushingbride'),
setup.qc.MoneyCrit(),
setup.qc.Favor('humankingdom', 200),
setup.qc.MoneyUnitValue("blushingbride", 2, 100000), ],
], [
'Quest_the_sergeant_s_wedding___poetic_justiceSuccess',
[
setup.qc.MissingUnitForever('blushingbride'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 100),
setup.qc.MoneyUnitValue("blushingbride", 1.2, 100000), ],
], [
'Quest_the_sergeant_s_wedding___poetic_justiceFailure',
[
setup.qc.MissingUnitRebuy('blushingbride', 0.25),
setup.qc.Injury('marriagebroker', 1),
setup.qc.Injury('virtuedefender', 2),
setup.qc.Injury('blushingbride', 1), ],
], [
'Quest_the_sergeant_s_wedding___poetic_justiceDisaster',
[
setup.qc.Injury('marriagebroker', 2),
setup.qc.Injury('virtuedefender', 3),
setup.qc.Injury('blushingbride', 1),
setup.qc.TraitIncreaseExisting('ladyinwaiting', setup.trait.vagina_gape),
setup.qc.TraitReplace('ladyinwaiting', setup.trait.per_sexaddict),
setup.qc.Trait('ladyinwaiting', setup.trait.bg_slave),
setup.qc.MissingUnit('ladyinwaiting'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 50],
],
[ /* restrictions to generate */
/* setup.qres.HasSlaveWithTraits([setup.trait.training_pet_basic]), */
setup.qres.HasSlaveWithTraits([setup.trait.gender_female]),
setup.qres.HasSlaverWithTraits([setup.trait.gender_female]),
setup.qres.HasSlaverWithTraits([setup.trait.gender_male]),
setup.qres.QuestUnique(),
setup.qres.FavorAtLeast('humankingdom', 300),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
)>><p>
The most hated sergeant in the Kingdom's army wants to crown his career of villainy by marrying his way into the lower nobility.
His enemies, including most of his own soldiers, want him to fail. They have the backing of certain nobles, who don't want this low-bred scoundrel joining their ranks. You're known in Tor and may be just the slaver they need.
</p>
<p>
The sergeant's saved enough from a lifetime of grifting and embezzling to convince one of the poorer noble families to let him have one of their daughters. Working within the law, there isn't much his enemies can do. But slavers like you don't work within the law, not in the Kingdom of Tor. If you'll help them, they'll foil his scheme and obtain poetic justice. And you'll make a tidy profit while having a bit of fun.
</p>
<p>
The sergeant's supposed to meet with a respectable marriage broker, so he can parlay a lifetime of ill-gotten gain into an advantageous match. Instead, unbeknownst to him, he'll met a smooth-talking slaver in fine clothes, ready to set him up for life. His blushing bride won't be (as he thinks) the scion of a poor but proud noble family. She'll be a well-used creature from your slave pens.
</p>
<p>
Naturally, the bride must be human and preferably a native of the Kingdom, dressed in her finest, entirely well-mannered, and wholly respectable on the surface. She must be tight enough "up front" to pass for a virgin. But outside of that, the more debauched she is, the better your backers will like it. If she has bad qualities that come out later in the marriage, that's fine, too.
</p>
<p>
Of course, you will be losing the slave, but you'll be more than compensated for her value if everything goes well. And your noble backers will not forget.
</p>
<p>
(Note: There is a small amount of optional watersports content, but you won't see it unless you use a slave trained in that specialty. Which you don't have to do to succeed in this quest.)
</p><p>
The marriage negotiations go off without a hitch. Of course, the "lady's" "noble" "kin" won't be seen talking marriage with a common soldier, so they've employed a respectable marriage broker. The broker looks just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<rep $g.sgtelke>> doesn't know that.</p>
<p>
Sgt. <<rep $g.sgtelke>> is as greedy, grasping, and unscrupulous a bounder as ever slimed the rungs of the social ladder he's hoping to climb. <<rep $g.marriagebroker>> plays his role to the hilt, professionally distant and cold, albeit <<uadjper $g.marriagebroker >>. A dowry is of course out of the question, but if the good Sgt. <<rep $g.sgtelke>> could provide a suitable sum, part of it can be returned to him as "dowry" for appearance's sake. The gentleman will naturally understand the lady's family's straitened circumstances....
</p>
<p>
Sgt. <<rep $g.sgtelke>> is taken in completely, eager as he is to slither his way into the upper reaches of society, and get his <<udick $g.sgtelke >> into one of their virgin daughters. The money changes hands. A respectable physician examines <<rep $g.blushingbride>>—under the watchful eyes of her severely respectable lady-in-waiting, <<rep $g.ladyinwaiting>>, and within earshot of her noble but discreet bodyguard, <<rep $g.virtuedefender>>—and pronounces her "intact."
</p>
<p>
And now comes the day of the wedding itself. The lower-upper classes are turning out for the occasion. So are Sgt. <<rep $g.sgtelke>>'s own soldiers, or at least the ones who are in on the prank. It's bad luck for the groom to see the bride before the ceremony, so your slavers retire to a nearby private lodging with <<rep $g.blushingbride>> and over a dozen of the soldiers and nobles who funded the scheme. And there your slavers give proof of your company's good faith.
</p>
<p>
On a command from <<rep $g.marriagebroker>>, <<rep $g.blushingbride>> demurely strips down for the intimate crowd, and proceeds to debase herself in the ways she knows best. First <<rep $g.virtuedefender>> lubes up his <<udick $g.virtuedefender >> and slides it into her <<uanus $g.blushingbride>> while <<rep $g.ladyinwaiting>> kneads her <<ubreast $g.blushingbride >> and she squeals <<uadv $g.blushingbride >>. Then the spectators join in, using and abusing every opening she's got except the "intact" one. </p>
<p>
<<if $g.blushingbride.isHasTraitExact('training_oral_basic')>>She mechanically sucks off every cock in sight.<</if>>
<<if $g.blushingbride.isHasTraitExact('training_oral_advanced')>>She sucks off every cock in sight with practiced skill, wiping her lips daintily and smiling up at the gentlemen. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_oral_master')>>Like the world-class professional she is, she wraps her lips around every cock she can get near, and gulps down cum as if it were water. Daintily wiping her lips, she looks around for more. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_basic')>>A burly corporal spits on his palm, wipes his cock wet, and goes for her ass. She takes it gamely with only a few winces of pain. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_advanced')>>A burly corporal spits on his palm, wipes his cock wet, and goes for her ass. She takes it with a smile, and encourages him to speed up. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_master')>>She may be a lowly slave, but she is the queen of anal artists. Presenting her nether cheeks to the crowd, she calls them in for an anal gangbang, and cheers them on as they fill her up. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_basic')>>At one point, she talks dirty to the crowd and masturbates to a quick orgasm. They clap. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_advanced')>> At one point, <<rep $g.ladyinwaiting>> commands <<rep $g.blushingbride>> to show off her ability to lube up at a moment's notice. Then she strokes her to orgasm in thirty seconds flat while the spectators applaud. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_master')>> At one point, <<rep $g.ladyinwaiting>> commands <<rep $g.blushingbride>> to show off her ability to lube up at a moment's notice. Then <<rep $g.blushingbride>> strokes herself to multiple orgasms, writhing and talking filthy while the spectators laugh and cheer. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_basic')>>Whenever she fails for a moment at a degrading task, <<rep $g.ladyinwaiting>> turns her over her knee and gives her a good spanking. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_advanced')>>Whenever she fails for a moment at a degrading task, <<rep $g.ladyinwaiting>> turns her over her knee and gives her a good spanking. She cries for more. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_master')>>Encouraged by <<rep $g.ladyinwaiting>>, she degrades herself in words and begs the crowd to spank and beat her. The more they do, the more she wants, until her body is red from blows. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_basic')>>A private who's had a bit too much beer excuses himself to the latrine. <<rep $g.ladyinwaiting>> stops him, and encourages him to go in <<rep $g.blushingbride>>'s open mouth instead. She swallows the piss without complaint. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_advanced')>> A private who's had a bit too much beer excuses himself to the latrine. <<rep $g.blushingbride>> whistles him over, and offers her mouth for the purpose. When he's done, she licks her lips and smiles up at him. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_master')>> <<rep $g.ladyinwaiting>> sees some soldiers slipping out to the latrine. "Not so fast boys," she says. "Latrine's over here!" Soon <<rep $g.blushingbride>> is gulping down all the piss she can, and what she can't swallow spills all over her body. She touches herself briefly and orgasms loudly from the feel and the smell. <</if>>
A few of the more refined spectators don't want "sloppy twelfths." They stroke themselves violently and splatter <<rep $g.blushingbride>> with their juices until she's left kneeling before them all and looking just like what she is: a wholly-debauched, degraded though <<uadjper $g.blushingbride >>, cum-drenched slave, and a fitting match for Sgt. <<rep $g.sgtelke>> in the eyes of all.
</p>
<p>
After this fitting pre-nuptial ceremony, the spectators make their way to the temple and <<rep $g.ladyinwaiting>> gives <<rep $g.blushingbride>> a careful bath and coiffure. Flanked by her "lady-in-waiting" and the "defender of her virtue," <<rep $g.blushingbride>> makes her way to the altar while <<rep $g.marriagebroker>> joins the audience. The nobles are tittering behind their silk handkerchiefs while the soldiers are keeping their best parade-ground faces as the priest joints these two saintly-faced hypocrites in holy matrimony. It's as the poet said —
</p>
<p>
Bowin' like a lady,<br>
Blushin' like a lad —<br>
'Oo would say to see 'em<br>
Both is rotten bad?<br>
<br>
Cheer for the Sergeant's weddin' —<br>
Give 'em one cheer more!<br>
Grey gun-'orses in the lando,<br>
An' a rogue is married to, etc.<br>
</p>
<p>He wanted a title, and now he's got two: "fool" and "cuckold." And now he learns the worst of married life in the tender arms of <<rep $g.blushingbride>>.
<<if $g.blushingbride.isHasTraitExact('per_aggressive')>>She takes out her natural aggression on her husband in a thousand tiny ways.<</if>>
<<if $g.blushingbride.isHasTraitExact('per_deceitful')>>As a practiced decever, she takes lovers at will. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_proud')>>Her bad-tempered ways don't leave him in peace for long. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_stubborn')>>Her mulish temper makes every little domestic dispute into a shouting match or a day of cold silence. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_dominant')>>She's determined to "rule the roost" and turn her man into a hen-pecked shadow. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_lunatic')>>Being absolutely crazy, she swings from clinging affection to paranoid screaming without a moment's notice, and when her husband's trying to sleep, she's writhing in mad dreams or howling at the moon. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_cruel') && $g.blushingbride.isHasTrait('per_evil')>>His sufferings only make her smile. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_cruel')>>If he ever tries to complain, she simply mocks him for it. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_evil')>>It's as if she enjoys causing her husband as much misery as possible, for no better reason than that she likes it. <</if>>
<<if $g.blushingbride.isHasTraitExact('skill_connected')>>Adding insult to injury, she's got the social connections to paint <i>him</i> as the villain to all their neighbors and betters. <</if>> Truly they are a couple that deserve each other. The thought may warm your heart, if you've got one.
</p>
<p>
It's time for your slavers to leave before Sgt. <<rep $g.sgtelke>> finds out what a favor they've done him. Of course they can't be thanked or acknowledged in public, but they bring back enough bonus money to show you there's still gratitude in this unfeeling world. Probably your slavers kept a bit of that "gratitude" for themselves, but they still bring more than you'd've gotten for <<rep $g.blushingbride>> in most markets.
</p><p>
The marriage negotiations go smoothly. Of course, the "lady's" "noble" "kin" won't be seen talking marriage with a common soldier, so they've employed a respectable marriage broker. The broker looks just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<rep $g.sgtelke>> doesn't know that.</p>
<p>Sgt. <<rep $g.sgtelke>> finds the arrangement distasteful, but <<rep $g.marriagebroker>> <<uadv $g.marriagebroker >> puts off his objections and keeps the negotiations on track. Naturally there will be no dowry. If the "lady's" "kin" weren't impecunious, they'd never consider a match like this. But if Sgt. <<rep $g.sgtelke>> will hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake.
</p>
<p>
Sgt. <<rep $g.sgtelke>> scowls and screws up his face at this, but in the end his greed and lust overcome his objections. The money changes hands. A respectable physician examines <<rep $g.blushingbride>>—under the watchful eyes of her severely respectable lady-in-waiting, <<rep $g.ladyinwaiting>>, and within earshot of her noble but discreet bodyguard, <<rep $g.virtuedefender>>—and pronounces her "intact."
</p>
<p>
And now comes the day of the wedding itself. The lower-upper classes are turning out for the occasion. So are Sgt. <<rep $g.sgtelke>>'s own soldiers, or at least the ones who are in on the prank. Flanked by her "lady-in-waiting" and the "defender of her virtue," <<rep $g.blushingbride>> makes her way to the altar while <<rep $g.marriagebroker>> joins the audience. The nobles are tittering behind their silk handkerchiefs while the soldiers are keeping their best parade-ground faces as the priest joints these two saintly-faced hypocrites in holy matrimony. It's as the poet said —
</p>
<p>
Bowin' like a lady,<br>
Blushin' like a lad —<br>
'Oo would say to see 'em<br>
Both is rotten bad?<br>
<br>
Cheer for the Sergeant's weddin' —<br>
Give 'em one cheer more!<br>
Grey gun-'orses in the lando,<br>
An' a rogue is married to, etc.<br>
</p>
<p>
Poetic justice has been done. Sgt. <<rep $g.sgtelke>> wanted a title, and now he's got two: "fool" and "cuckold." And now he learns the worst of married life in the tender arms of <<rep $g.blushingbride>>.
<<if $g.blushingbride.isHasTraitExact('per_aggressive')>>She takes out her natural aggression on her husband in a thousand tiny ways.<</if>>
<<if $g.blushingbride.isHasTraitExact('per_deceitful')>>As a practiced 'lovers 'at will. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_proud')>>Her bad-tempered ways don't leave him in peace for long. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_stubborn')>>Her mulish temper makes every little domestic dispute into a shouting match or a day of cold silence. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_dominant')>>She's determined to "rule the roost" and turn her man into a hen-pecked shadow. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_lunatic')>>Being absolutely crazy, she swings from clinging affection to paranoid screaming without a moment's notice, and when her husband's trying to sleep, she's writhing in mad dreams or howling at the moon. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_cruel') && $g.blushingbride.isHasTrait('per_evil')>>His sufferings only make her smile. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_cruel')>>If he ever tries to complain, she simply mocks him for it. <</if>>
<<if $g.blushingbride.isHasTraitExact('per_evil')>>It's as if she enjoys causing her husband as much misery as possible, for no better reason than that she likes it. <</if>>
<<if $g.blushingbride.isHasTraitExact('skill_connected')>>Adding insult to injury, she's got the social connections to paint <i>him</i> as the villain to all their neighbors and betters. <</if>> Truly they are a couple that deserve each other. The thought may warm your heart, if you've got one.
</p>
<p>Your slavers don't stick around to see how much good they've done. They return home, and hand over more than a fair market price for <<rep $g.blushingbride>>, though you privately wonder how much more there was.</p><p>
The marriage negotiations don't go as smoothly as they should. Of course, the "lady's" "noble" "kin" won't be seen talking marriage with a common soldier, so they've employed a respectable marriage broker. The broker looks just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<rep $g.sgtelke>> doesn't know that.</p>
<p> Sgt. <<rep $g.sgtelke>> finds the arrangement distasteful, and <<rep $g.marriagebroker>> has trouble keeping the negotiations on track. There is to be no dowry. If the "lady's" "kin" weren't impecunious, they'd never consider a match like this. But if Sgt. <<rep $g.sgtelke>> will hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake. Sgt. <<rep $g.sgtelke>> <<uadv $g.sgtelke >> storms out of the room at that one.
</p>
<p>
Eventually, greed overcomes wisdom, he comes back, and the deal is done. The money changes hands. A respectable physician examines <<rep $g.blushingbride>>—under the watchful eyes of her severely respectable lady-in-waiting, <<rep $g.ladyinwaiting>>, and within earshot of her noble but discreet bodyguard, <<rep $g.virtuedefender>>. Her "front door" is immaculate...but he's a little too thorough in examining her <<utorso $g.blushingbride >>, her <<uface $g.blushingbride >>, and her <<uanus $g.blushingbride >>. The marks of her abuse are subtle, but maybe not subtle enough.
<<if $g.blushingbride.isHasTraitExact('training_anal_basic')>>Her experienced ass draws his suspicions. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_advanced')>>Her well-used ass draws his intense suspicions. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_master')>>Her ass has seen more sausage than the local beer garden. The respectable physician can't help but notice.<</if>>
The physician looks sharply at <<rep $g.ladyinwaiting>> and begins to ask pointed questions, which the "lady-in-waiting" deflects <<uadv $g.ladyinwaiting >>, but it's clear he's not going to decare <<rep $g.blushingbride>> intact. It's even clearer he's going to start talking. It's time for your slavers and the "blushing bride" to get out of town.
</p>
<p>
As they flee, your slavers are set upon by Sgt. <<rep $g.sgtelke>> himself and a squad of soldiers who weren't in on the scheme. <<rep $g.virtuedefender>> is supposed to cover the retreat of the others, and he does so quite <<uadv $g.virtuedefender>>, at least until he's wounded and takes the "better part of valor" himself...
</p>
<p>
In the end, your slavers all flee pell-mell, with no thought for their "precious" cargo and precious little for each other. All three are wounded and <<rep $g.blushingbride>> is lost completely—she can't run in her finery. Or maybe she prefers the mercy of the Kingdom's soldiers to the mercy of your slave pens. (Perish the thought!)
</p>
<p>
Your noble backers are disappointed, but also cool under pressure. They don't want any member of your little conspiracy staying behind and answering questions. They'll get <<rep $g.blushingbride>> back to you for a fraction of her market value. Just don't ask them how. Dealing with slavers is a crime, you know.
</p><p>
The marriage negotiations don't go as smoothly as they should. Of course, the "lady's" "noble" "kin" won't be seen talking marriage with a common soldier, so they've employed a respectable marriage broker. The broker looks just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<rep $g.sgtelke>> doesn't know that.</p>
<p>Sgt. <<rep $g.sgtelke>> finds the arrangement distasteful, and <<rep $g.marriagebroker>> has trouble keeping the negotiations on track. There is to be no dowry. If the "lady's" "kin" weren't impecunious, they'd never consider a match like this. But if Sgt. <<rep $g.sgtelke>> will hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake. Sgt. <<rep $g.sgtelke>> agrees in the end, and <i>appears</i> to be taken in.
</p>
<p>
The contract is made. The money changes hands. A respectable physician examines <<rep $g.blushingbride>>—under the watchful eyes of her severely respectable lady-in-waiting, <<rep $g.ladyinwaiting>>, and within earshot of her noble but discreet bodyguard, <<rep $g.virtuedefender>>—and pronounces her "intact." The wedding is on track.
</p>
<p>
And now comes the day of the wedding itself. The lower-upper classes are turning out for the occasion. So are Sgt. <<rep $g.sgtelke>>'s own soldiers, or at least the ones who are in on the prank. It's bad luck for the groom to see the bride before the ceremony, so your slavers retire to a nearby private lodging with <<rep $g.blushingbride>> and about a dozen of the soldiers and nobles who funded the scheme. And there your slavers give proof of your company's good faith.
</p>
<p>
On a command from <<rep $g.marriagebroker>>, <<rep $g.blushingbride>> demurely strips down for the intimate crowd, and proceeds to debase herself in the ways she knows best. First <<rep $g.virtuedefender>> slams his <<udick $g.virtuedefender >> into her <<uanus $g.blushingbride >> while <<rep $g.ladyinwaiting>> kneads her <<ubreast $g.blushingbride >> and she squeals <<uadv $g.blushingbride>>. Then the dozen spectators join in, using and abusing every opening she's got except the "intact" one. </p>
<p>
<<if $g.blushingbride.isHasTraitExact('training_oral_basic')>>She mechanically sucks off every cock in sight.<</if>>
<<if $g.blushingbride.isHasTraitExact('training_oral_advanced')>>She sucks off every cock in sight with practiced skill, wiping her lips daintily and smiling up at the gentlemen. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_oral_master')>>Like the world-class professional she is, she wraps her lips around every cock she can get near, and gulps down cum as if it were water. Daintily wiping her lips, she looks for more. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_basic')>>A burly corporal spits on his palm, wipes his cock wet, and goes for her ass. She takes it gamely with only a few winces of pain. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_advanced')>>A burly corporal spits on his palm, wipes his cock wet, and goes for her ass. She takes it with a smile, and encourages him to fuck her harder. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_anal_master')>>She may be a lowly slave, but she is the queen of anal artists. Presenting her nether cheeks to the crowd, she calls them in for an anal gangbang, and cheers them on as they fill her up. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_basic')>>At one point, she talks dirty to the crowd and masturbates to a quick orgasm. They clap. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_advanced')>> At one point, <<rep $g.ladyinwaiting>> commands <<rep $g.blushingbride>> to show off her ability to lube up at a moment's notice. Then she strokes her to orgasm in thirty seconds flat while the spectators applaud. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_horny_master')>> At one point, <<rep $g.ladyinwaiting>> commands <<rep $g.blushingbride>> to show off her ability to lube up at a moment's notice. Then <<rep $g.blushingbride>> strokes herself to multiple orgasms, writhing and talking filthy while the spectators laugh and cheer. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_basic')>>Whenever she fails for a moment at a degrading task, <<rep $g.ladyinwaiting>> turns her over her knee and gives her a good spanking. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_advanced')>>Whenever she fails for a moment at a degrading task, <<rep $g.ladyinwaiting>> turns her over her knee and gives her a good spanking. She cries for more. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_masochist_master')>>Encouraged by <<rep $g.ladyinwaiting>>, she degrades herself in words and begs the crowd to spank and beat her. The more they do, the more she wants, until her body is red from blows. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_basic')>>A private who's had a bit too much beer excuses himself to the latrine. <<rep $g.ladyinwaiting>> stops him, and encourages him to go in <<rep $g.blushingbride>>'s open mouth instead. She swallows the piss without complaint. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_advanced')>> A private who's had a bit too much beer excuses himself to the latrine. <<rep $g.blushingbride>> whistles him over, and offers her mouth for the purpose. When he's done, she licks her lips and smiles up at him. <</if>>
<<if $g.blushingbride.isHasTraitExact('training_toilet_master')>> <<rep $g.ladyinwaiting>> sees some soldiers slipping out to the latrine. "Not so fast boys," she says. "Latrine's over here!" Soon <<rep $g.blushingbride>> is gulping down all the piss she can, and what she can't swallow spills all over her body. She touches herself quickly and orgasms loudly from the feel and the smell. <</if>>
A few of the more refined spectators don't want "sloppy twelfths." They stroke themselves violently and splatter <<rep $g.blushingbride>> with their juices until she's left kneeling before them all and looking just like what she is: a wholly-degraded, degenerate though <<uadjper $g.blushingbride >>, cum-drenched slave, and a fitting match for Sgt. <<rep $g.sgtelke>> in the eyes of all.
</p>
<p>
Except, that is, for Sgt. <<rep $g.sgtelke>> himself, who at that moment bursts into the room with a squad of troops loyal only to him. <i>How</i> he found out, your slavers don't know, or at least they don't report it. Maybe <<rep $g.marriagebroker>> wasn't quite as smooth as he thought, or <<rep $g.ladyinwaiting>> wasn't as prim and demure as <i>she</i> thought. Or one of your conspirators looked foreign, or betrayed signs of a lower-class upbringing. Or maybe the respectable physician was wiser than he seemed.
</p>
<p>
Whatever the reason, Sgt. <<rep $g.sgtelke>> has penetrated your schemes, and your slavers don't hesitate. Self-preservation is the order of the day. <<rep $g.virtuedefender>> is the first to move, and the first to trip over his own disarrayed clothes. He's wounded before he can get up, but that only speeds his flight. <<rep $g.marriagebroker>> gets out the window right behind him, and they desperately break through the surrounding cordon of troops. They haven't a moment to think of the "ladies."
</p>
<p>
<<rep $g.blushingbride>> and <<rep $g.ladyinwaiting>> are embarrassingly <i>dishabille</i> at the moment of attack. <<rep $g.ladyinwaiting>> kicks Sgt. <<rep $g.sgtelke>> in his <<uballs $g.sgtelke >>, so his loyal troops pile on her 'til she can't move. <<rep $g.blushingbride>> is so slick with cum that the guards can't get a handhold. She slips through them and out the window like a greased pig, catches up with her wounded masters, and gallops off with them back into slavery.
</p>
<p>
Sgt. <<rep $g.sgtelke>> is incandescent. He wants <<rep $g.ladyinwaiting>> tortured into confessing the names of her co-conspirators, then gang-raped, tortured, and executed for her affront to his honor. The co-conspirators (who don't think Sgt. <<rep $g.sgtelke>> has any honor to begin with) want her to disappear. So they do the best they can—which is to sell her to one of your competitors, who ships her off to his private island for some Advanced Debauchery Training.
</p>
<p>
A good Rescuer will doubtless find <<rep $g.ladyinwaiting>> in due course (just build a rescuer office if you don't have one, and assign a slaver to the task). But by the time you get her back, she'll have been conditioned to want more sex and wear raunchier clothing than any self-respecting slaver would ever be seen in. Do you really want her back under those conditions?
</p><<run new setup.QuestTemplate(
'raid_elven_forest', /* key */
'Raid: Elven Forest', /* Title */
'Atacama', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'elves': setup.unitgroup.elf, },
[ /* costs */
],
'Quest_raid_elven_forest',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_raid_elven_forestCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Slave('elves', 'was a free elf who had the misfortune of being captured by your company', undefined),
setup.qc.Favor('outlaws', 25),
setup.qc.Ire('elf', 1), ],
], [
'Quest_raid_elven_forestSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('outlaws', 25),
setup.qc.Ire('elf', 1), ],
], [
'Quest_raid_elven_forestFailure',
[
],
], [
'Quest_raid_elven_forestDisaster',
[
setup.qc.Injury('raider1', 2),
setup.qc.Injury('raider2', 2), ],
], ],
[
[setup.questpool.forest, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The western forests are inhabited by both nekos and elves, which lives in different parts
of the forest.
While most of the nekos are living together in tribes, some of the elves prefer to lead
a solitary life.
It would be an easy endeavor if you want to send a group of slavers into the elven forest
and see if they can raid some of these lone elves.
</p><p>
Your slavers, led by <<rep $g.raider1>>,
found a residence in the forest with no one home and <<uadv $g.raider1>>
ransacked the place for all
belongings of value. As they were about to leave, the resident returned,
unaware, and they were taken captive as well, adding to your haul for this trip.
</p><p>
Your slavers, led by <<rep $g.raider1>>, found a residence in the forest with no one home and
<<uadv $g.raider1>>
ransacked the place for all belongings of value.
</p><p>
Despite spending a week in the forest looking for valuables to liberate from residents, your party found nothing and returned empty-handed.
</p><p>
The residence which appeared ripe for your home invasion turned out to be inhabited by a powerful elven ranger, who fought hard and repelled your party. Upon retreating, the elf continued to harry your group from afar with arrows and traps, resulting in injuries to two of your members.
</p><<run new setup.UnitGroup(
'quest_goblin_resque2',
"quest_broken_by_goblins",
[
[setup.unitpool.race_humankingdom_female, 0.03058571647040832],
[setup.unitpool.race_humanvale_female, 0.012234286588163328],
[setup.unitpool.race_humandesert_female, 0.006117143294081664],
[setup.unitpool.race_humansea_female, 0.0012234286588163328],
[setup.unitpool.race_neko_female, 0.012234286588163328],
[setup.unitpool.race_werewolf_female, 0.003058571647040832],
[setup.unitpool.race_elf_female, 0.012234286588163328],
[setup.unitpool.race_orc_female, 0.004587857470561248],
[setup.unitpool.race_dragonkin_female, 0.00009175714941122497],
[setup.unitpool.race_demon_female, 0.00006117143294081663],
[setup.unitpool.race_humankingdom_female, 0.9175714941122496], ],
0, /* reuse chance */
[
setup.qc.Trait('unit', setup.trait.training_mindbreak),
setup.qc.TraitReplace('unit', setup.trait.vagina_gape), ],
)>>
<<run new setup.QuestTemplate(
'goblin_resque2', /* key */
"Goblin Resque", /* Title */
"Dporentel", /* Author */
[ 'femaleonly', 'breeding',
'city', 'unit', 'favor',
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fighter': setup.qu.fighter,
'spotter': setup.qu.spotter,
'healer': setup.qu.support, },
{ /* actors */
'toy1': 'quest_goblin_resque2',
'toy2': 'quest_goblin_resque2', },
[ /* costs */
],
'Quest_goblin_resque2',
setup.qdiff.normal30, /* difficulty */
[ /* outcomes */
[
'Quest_goblin_resque2Crit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('humankingdom', 50),
setup.qc.Injury('toy1', 4),
setup.qc.Injury('toy2', 4),
setup.qc.Slave('toy1', "was captured by goblins and used for breeding", undefined),
setup.qc.Slave('toy2', "was captured by goblins and used for breeding", undefined), ],
], [
'Quest_goblin_resque2Crit',
[
setup.qc.MoneyCustom(500),
setup.qc.Favor('humankingdom', 50),
setup.qc.Injury('toy1', 4),
setup.qc.Slave('toy1', "was captured by goblins and used for breeding", undefined), ],
], [
'Quest_goblin_resque2Crit',
[
setup.qc.Injury('fighter', 1),
setup.qc.Injury('spotter', 1),
setup.qc.Injury('healer', 1),
setup.qc.Favor('humankingdom', 50), ],
], [
'Quest_goblin_resque2Disaster',
[
setup.qc.Injury('fighter', 3),
setup.qc.Injury('spotter', 3),
setup.qc.Injury('healer', 3), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.hospital), ],
[ /* expiration outcomes */
],
)>><p>
Your company does not usually do rescue missions.
But rescuing people from the so-called <<lore race_goblin>> dens is a different deal.
You see, these green squats are widely known to capture any women
that are unfortunate enough to wander into their territory.
The girls are used for breeding until they are no longer functional,
as these distant relatives of the orc race themselves are almost always lacking in females.
</p>
<p>
It seems some goblins are migrating right now, and many groups
formed (temporary?) dens in areas close to the city recently.
You could try to send an extermination squad of your slavers to clear out
a couple of these dens under the guise of trying to rid the world of evil.
You are sure to encounter some girls inside —- Your company can certainly
put them under new management
without telling the city-folk anything.
Truly a win-win situation.
</p><p>
The cave den your slavers cleared out seemed abandoned at first,
but still-armed traps inside told a different story.
It seems to be a decoy den that was made to hide the actual den where the goodies are located.
Fortunately,
<<rep $g.spotter>>'s attention to detail allowed the group to
eventually find a secret tunnel, which led to the actual den.
</p>
<p>
The fight inside was fierce.
Narrow corridors combined with an overwhelming amount of opponents tested the limits of
<<rep $g.fighter>>'s combat skills, but <<they $g.fighter>> managed to <<uadv $g.fighter>>
vanquish all the rodents.
</p>
<p>
The captured girls are located in the final, innermost chamber of the den:
the ominously-named breeding chamber.
It was a large room with bodies lining the walls,
most too broken to be profitable to capture<<if $gOutcome == 'crit'>>, with the exception of one that
seemed alright<</if>>. The
<<if $gOutcome == 'crit'>>only other<<elseif $gOutcome == 'success' || $gOutcome == 'failure'>>only<</if>>
girl whose condition seemed fixable was strapped to a large (at least for a goblin)
brute. The girl is seemingly being used as armor for the brute sitting on something resembling a
throne in the center of the chamber.
The threat of needlessly hurting the merchandise made this fight significantly
harder than it should've been,
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>but your group managed to prevail and
defeat the brute without inflicting any heavy damage to the girl.
<<elseif $gOutcome == 'failure'>>
and unfortunately several stray hits met the "armor" girl, ultimately defeating both
the brute and rendering the girl useless.
<</if>>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
With the fight over, the team surveyed the battlescene. All in all,
they remained unscathed, surely no small thanks to <<rep $g.healer>>'s hard work.
Their prize amounts to
<<if $gOutcome == 'crit'>>two girls: <<rep $g.toy1>> and <<rep $g.toy2>><<elseif $gOutcome == 'success'>>one girl: <<rep $g.toy1>><</if>>.
The girl<<if $gOutcome == 'crit'>>s<</if>> will surely need a lot of time to recover from their ordeal
before you can put them to better use.
<<elseif $gOutcome == 'failure'>>
But the victory did not come free.
The group suffered some injuries during the fight, and even worse, they
weren't able to bring back any usable merchandise.
Still though, they vanquished a den of evil, and saved many, many girls from terrible fate
of being anchored and used as goblin's breeding bitches.
Surely such a good deed warms your slavers' hearts?
Not to mention the grateful female citizens that hopefully will spread the good word about your company.
<</if>>
</p><p>
Your slavers were greeted with a giant fireball right to the face when they tried to enter the cave.
It turns out that goblins can wield magic too, and with terrifying efficiency.
They did manage to run away as soon as they understood the dangers,
but the damn big fireball seriously wounded your slavers in the process.
If not for <<rep $g.healer>>'s medical talents, they'd all be steak by now.
</p><<run new setup.Title(
"quest_mermaid_hunter_0", /* key */
"Mermaid Hunter", /* name */
"Has committed to tracking down and enslaving a mermaid.", /* description */
"Mermaid Hunter", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'bait', /* name */
[
setup.trait.per_gregarious,
setup.trait.per_active,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.bg_noble,
setup.trait.bg_seaman,
setup.trait.bg_whore,
setup.trait.bg_courtesan,
setup.trait.per_playful,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.skill_connected,
],
[
setup.trait.per_loner,
setup.trait.per_calm,
setup.trait.per_submissive,
setup.trait.per_humble,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
setup.trait.bg_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_male),
setup.qres.AnyTrait([setup.trait.face_attractive, setup.trait.face_beautiful, setup.trait.bg_royal, setup.trait.bg_knight]),
],
{
intrigue: 1,
social: 1,
sex: 1,
}
)>>
<<set _criteriarod = new setup.UnitCriteria(
null, /* key */
'fisher', /* name */
[
setup.trait.bg_seaman,
setup.trait.bg_pirate,
setup.trait.bg_wildman,
setup.trait.per_humble,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_gregarious,
],
[
setup.trait.per_gregarious,
setup.trait.per_active,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.per_calm),
],
{
brawn: 1,
survival: 1,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'netting_the_mermaid__the_pink_pearl', /* key */
"Netting the Mermaid: The Pink Pearl", /* Title */
"Thavil", /* Author */
[ /* tags */
'money',
'sea',
'unit',
],
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'navigator': [ setup.qu.navigator, 1],
'slaver': [ _criteriaslaver, 1],
'rod': [ _criteriarod, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_netting_the_mermaid__the_pink_pearl',
setup.qdiff.normal45, /* difficulty */
[ /* outcomes */
[
'Quest_netting_the_mermaid__the_pink_pearlCrit',
[
setup.qc.MoneyCrit(),
setup.qc.AddTitle('navigator', 'quest_mermaid_hunter_0'),
setup.qc.AddTitle('slaver', 'quest_mermaid_hunter_0'),
setup.qc.AddTitle('rod', 'quest_mermaid_hunter_0'),
],
],
[
'Quest_netting_the_mermaid__the_pink_pearlCrit',
[
setup.qc.MoneyNormal(),
setup.qc.AddTitle('navigator', 'quest_mermaid_hunter_0'),
setup.qc.AddTitle('slaver', 'quest_mermaid_hunter_0'),
setup.qc.AddTitle('rod', 'quest_mermaid_hunter_0'),
],
],
[
'Quest_netting_the_mermaid__the_pink_pearlCrit',
[
],
],
[
'Quest_netting_the_mermaid__the_pink_pearlCrit',
[
setup.qc.Injury('navigator', 3),
setup.qc.Injury('rod', 3),
setup.qc.TraumatizeRandom('slaver', 9),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, 100],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
There are always rumours of strange and exotic races existing just over the
horizon. Each of which has tantalizing and lucrative market potential.
Imagine being the first to bring a grove of dryad slaves to market? To pluck
an angel from the skies? But none has the enduring appeal as the ancient
mariner's tale of the Mermaid.</p>
<p>
Of course, you are a rational and jaded slaver, not given to flights of
fantasy. But as you have deepened your contact with the peoples of the
Southern Seas, the stories of these mermaids keep popping up. Along with gold
coins before your eyes. In particular, there are stories of beautiful
silver-skinned mermaids with pink pearls for nipples, often frequenting a
certain atoll in the southern isles.
</p>
<p>
You decide that the benefits outweigh the risks of wasted time, and so decide
to send a team to explore this rumour, and if possible, to capture an actual
mermaid. Oh yes, it will be a valuable hold worthy of even Kurdwisec's grand lunacy.
</p>
<p>
<<dangertextlite 'Warning'>>: This is a special challenge that will pit the
same team of slavers across multiple challenges.
</p><p>
The team rents a schooner and set forth for the atoll.
<<if $gOutcome == 'disaster'>>
<<rep $g.navigator>> suffers a sprained wrist injury as <<they $g.navigator>>
struggles to bring the ship safely through a storm.
<<elseif $gOutcome == 'failure'>>
The weather is not always their friend, and <<rep $g.navigator>> barely escapes
injury as they struggle to bring the ship safely through a storm.
<<else>>
The weather is not always their friend, but <<rep $g.navigator>>'s experience and solid instincts will surely see the team through to the atoll safely.
<</if>>
On the trip, <<name $g.slaver>> and <<utheirrel $g.slaver $g.rod>> <<name $g.rod>>
have ample time to go over a plan.
<<name $g.slaver>> will slip into the water and splash around. If they attract sharks,
<<name $g.rod>> will quickly haul them up, but if a mermaid appears and seems interested,
then <<name $g.slaver>> will attempt to woo her.
Meanwhile <<name $g.navigator>> will bring the ship about and <<name $g.rod>> will
prepare to scoop the mermaid into the schooner.
</p>
<p>
When the ship approaches the atoll, the slavers can barely believe their
luck. A trio of mermaids are plainly visible, sunning themselves on rocks
just off shore. they are sleek, feral creatures, but wearing beautiful
jewelry of shell and pearl, and utterly enchanting. <<name $g.slaver>> slips
in to the water and swims towards the mermaids, <<uadv $g.slaver>> calling out.
</p>
<p>
The three mermaids seem interested, and slide nimbly into the water to
investigate. One gets close enough for <<name $g.slaver>> to snatch hold, and
your <<repfull $g.rod>> nearly has a hook in place to snatch her up and into the
boat.
<<if $g.slaver.isHasTrait('per_lustful')>>
<<name $g.slaver>> is taken in by the mermaid's bountiful body and enticing form,
filling <<their $g.slaver>> lusty mind with dirty thoughts.
<<else>>
<<name $g.slaver>> is taken in by the mermaid's gleaming and expressive
eyes, the mysterious yet enticing form, and her easy grace.
Perhaps there is
<</if>>
more than a day's work to be found here?
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
That's when one of the other mermaids springs out of the water and hauls the hook
sharply out of <<name $g.rod>>'s <<uhand $g.rod>>, and another begins to pull <<name $g.slaver>> under.
Thinking quickly, <<name $g.slaver>> manages to grab a kiss from the flummoxed mermaid who had
approached <<them $g.slaver>>, and snatch the beautiful pearl necklace off of her neck.
<<name $g.rod>> hauls the impudent lothario up and into the boat.
</p>
<p>
Soon the mermaids are thumping on the hull of the boat in outrage, and
<<name $g.navigator>> exercises the better part of valor, swiftly turning the
ship around for home. On the way, it becomes clear that the necklace's pearl pendant is
enchanted in some way, and might hold the key to finally reeling in the mermaid.
The rest of the necklace's shells prove quite valuable for resale, and the
group returns, thinking about next steps.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
That's when one of the other mermaids springs out of the water and hauls the
hook sharply out of <<name $g.rod>>'s <<uhand $g.rod>>, and another begins to pull <<name
$g.slaver>> under. Concerned for their lives, <<name $g.rod>> quickly hauls
<<name $g.slaver>> up and into the boat.
</p>
<p>
Although the group is returning to port empty-handed, they feel that they may
have learned something that will help them succeed in a future attempt.
</p>
<<else>>
<p>
That's when one of the other mermaids springs out of the water and hauls the
hook sharply out of <<name $g.rod>>'s <<uhand $g.rod>>,
smashing your <<repfull $g.rod>>
across <<their $g.rod>> <<uface $g.rod>> with it as she does so.
The playful mermaid who had seemed so
smitten with <<name $g.slaver>> lunges in for a kiss... a kiss that seems to
draw some of the very essence from <<them $g.slaver>>.
<<name $g.rod>>
recovers from the head blow to haul <<name $g.slaver>> up and into the boat,
and they beat a hasty retreat.
</p>
<p>
Although the group is returning to port empty-handed, they feel that they may
have learned something that will help them succeed in a future attempt.
</p>
<</if>>
<<run new setup.QuestTemplate(
'food_for_the_pack', /* key */
"Food for the Pack", /* Title */
"Zerutti", /* Author */
[ /* tags */
'anthro',
'vale',
'money',
],
1, /* weeks */
4, /* expiration weeks */
{ /* roles */
'tracker': [ setup.qu.trapper, 1],
'hunter1': [ setup.qu.hunter, 1],
'hunter2': [ setup.qu.hunter, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_food_for_the_pack',
setup.qdiff.easier2, /* difficulty */
[ /* outcomes */
[
'Quest_food_for_the_packCrit',
[
setup.qc.MoneyCustom(2400),
setup.qc.Favor('werewolf', 30),
],
],
[
'Quest_food_for_the_packCrit',
[
setup.qc.MoneyCustom(1200),
setup.qc.Favor('werewolf', 15),
],
],
[
'Quest_food_for_the_packCrit',
[
],
],
[
'Quest_food_for_the_packCrit',
[
setup.qc.Injury('tracker', 1),
setup.qc.Injury('hunter1', 1),
setup.qc.Injury('hunter2', 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, 5],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>>
<p>
In the <<lore region_vale>>, there exists the werewolf tribes that have called the vale their home long before the humans have settled into the land. They are known to be territorial and vicious by their own bestial nature, but that is simply only one facet of their being. They are a proud species with strong ties to their packs with a certain kind of honesty that is seldom seen in the more civilized species. If one weren't concerned with their fangs and their claws, one could almost call it naivety.
</p>
<p>
It is with this certain kind of 'honesty' that you managed to befriend a contact within the werewolf tribes. They have informed you that the growing cold war between the humans and the werewolves have been heating up lately and the more able of them to keep the balance. That has taken away the manpower away from the hunting parties and they desire your assistance in shoring up the numbers.
</p>
<p>
In consideration, this is hardly a difficult request. Your slavers should not have any problems in hunting game animals, given their usual activities. If they did, well, maybe you should start looking for new recruits.
</p>
<p>
<<if $g.hunter1.isHasTrait('bg_hunter')>>
Recalling <<rep $g.hunter1>>'s past as a hunter, you made the wise decision to send the slaver
out on this quest. The <<urace $g.hunter1>> quite enjoyed the prospect of returning to <<their $g.hunter1>>
pastime.
<<run setup.qc.MoneyCustom(500).apply($gQuest)>>
On the other hand, while
<<elseif $g.hunter1.isHasTrait('per_proud')>>
<<rep $g.hunter1>> pride is slightly damaged at the idea of such a remedial job and while
<<run setup.qc.TraumatizeRandom('hunter1', 2).apply($gQuest)>>
<<elseif $g.hunter1.isHasTrait('per_humble')>>
<<rep $g.hunter1>> humbly accepted the meager job, but <<their $g.hunter1>> teammates are less accepting of it.
While
<<elseif $g.hunter1.isHasTrait('per_calm')>>
<<rep $g.hunter1>> stoically nod at the idea of such easy job. But while
<<elseif $g.hunter1.isHasTrait('per_kind')>>
<<rep $g.hunter1>> looks a little down from having to do such a bloody job. While
<<run setup.qc.TraumatizeRandom('hunter1', 4).apply($gQuest)>>
<<else>>
<<rep $g.hunter1>> had <<uadv $g.hunter1>> scoffed at the idea of such a remedial job and while
<</if>>
<<rep $g.hunter2>> and <<utheirrel $g.hunter2 $g.tracker>> <<rep $g.tracker>> did not outwardly protest,
the looks on their faces were enough to hint at their displeasure.
</p>
<<if $gOutcome == 'crit'>>
<p>
Still, it looked as if they made the best out of their situation. When they returned, they were chatting up a storm with the rest of the hunting party, trading stories and hunting tips quite amicably. They had exceeded their quota twofold and was invited to the celebration feast afterward. Your contact sent in a bonus to the offered payment as well as a promise to put in a good word for you to the other chieftains.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Still, they did the job as requested. When they returned, <<rep $g.hunter1>> and <<rep $g.hunter2>> immediately ran off to the taverns as <<rep $g.tracker>> reported back (grumbling the entire time as they drew the short straw) to you with the payment for the work done. Your contact perfunctory thanked you for the job and stated that they will put you in consideration for any more work that the tribes need assistance with.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The hunting was a failure. Apparently <<rep $g.tracker>> made the wrong call and had the party circling around for a trail for quite some time. While they were able to collect some game, it was not enough to meet the tribes' quota.
</p>
<p>
Your contact refused payment for the work and you could only grimace at the time wasted.
</p>
<<else>>
<p>
When your slavers returned, they returned bruised and battered. From what you understand, <<rep $g.hunter1>> was overexcited in following up a trail. He ran into a family of bears who then attacked the hunting party. The party was injured and had to flee back to the tribes to recover.
</p>
<p>
Your contact was sympathetic enough to not blame <<rep $g.hunter1>> for the botched job, but he did refuse payment. You felt exasperated at the time wasted and the fact that your slavers would have to be laid up for a week.
</p>
<</if>>
<<run new setup.UnitGroup(
"peasant_stock_piling_0",
"Dishonest Guard",
[ /* pools */
[setup.unitpool.race_humanvale_male, 0.5],
[setup.unitpool.race_humanvale_female, 0.5],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier),
setup.qc.TraitsReplace('unit', [setup.trait.per_deceitful]),
],
)>>
<<run new setup.QuestTemplate(
'peasant_stock_piling_', /* key */
"Peasant Stock(piling)", /* Title */
"Zerutti", /* Author */
[ /* tags */
'anthro',
'vale',
'money',
],
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': [ setup.qu.conartist, 1],
'merc1': [ setup.qu.raider, 1],
'merc2': [ setup.qu.slavecapturer, 1],
},
{ /* actors */
'victim': 'peasant_stock_piling_0',
},
[ /* costs */
],
'Quest_peasant_stock_piling_',
setup.qdiff.easy6, /* difficulty */
[ /* outcomes */
[
'Quest_peasant_stock_piling_Crit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('werewolf', 50),
setup.qc.Ire('humanvale', 1),
setup.qc.Slave('victim', "was the irresponsible guard who told their village\'s secret to the slavers", undefined),
],
],
[
'Quest_peasant_stock_piling_Success',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('werewolf', 50),
setup.qc.Ire('humanvale', 1),
],
],
[
'Quest_peasant_stock_piling_Failure',
[
setup.qc.Injury('negotiator', 1),
setup.qc.Injury('merc1', 2),
],
],
[
'Quest_peasant_stock_piling_Disaster',
[
setup.qc.Injury('negotiator', 3),
setup.qc.Injury('merc1', 4),
setup.qc.Injury('merc2', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>An offer has arrived on your table from one of the more militant werewolf tribes.
From what you have gathered, this particular tribe does not grow their numbers the 'traditional' way of breeding and instead use their gift of lycanthropy to infect humans.
Once infected, these humans are no longer able to return back to their old ways of life and can only fall in with the tribe that has turned them where, in time, they will begin to adapt themselves to the tribe's culture. </p>
<<set _u = setup.getAnySlaver()>>
<p>
As you are in the slaving business, you can't really argue with the method. In fact, you wonder what are their methods for disciplining disloyal tribe members. Maybe you can exchange notes.
You can also see your <<repfull _u>>
<<if _u.getSpeech() == setup.speech.kind>>
scowling at the thought.
<<else>>
nodding in appreciation.
<</if>>
</p>
<p>It has come to that time of the year again for the tribe's raiding parties into the settlements. The tribe is requesting your assistance in raiding a village and capturing some of the peasants.</p><p>Your <<repfull $g.negotiator>> is a great con artist,
their exemplary skill set had the militia guard near-singing the protocols in place of
what the village is supposed to do in times of attack.</p>
<p>With that information on hand, it was simple for <<rep $g.merc1>> to plan the distraction for the militia while <<rep $g.merc2>> <<uadv $g.merc2>> led the majority of the werewolves to capture the surprised defenseless non-fighters of the villagers in their predesignated hiding space.</p>
<p>As the raiding party slipped away, <<rep $g.merc1>> and <<utheirrel $g.merc1 $g.merc2>>
<<rep $g.merc2>> were surprised to see an extra listless face in the new captures.
When pressed, <<rep $g.negotiator>> just <<uadv $g.negotiator>> smirked and said that they weren't done with the guard just yet.</p><p>As for plans go, it wasn't the worst. <<rep $g.merc1>> <<uadv $g.merc1>> led the raiders in a
frontal assault against the village in the dead of night.
They had captured a good number of villagers before the militia showed up.
<<rep $g.negotiator>> had <<uadv $g.negotiator>> pointed out that the fires that they started won't put themselves out
and the militia should be more worried to save the people that they can
instead of worrying about the slavers and the werewolves.</p>
<p>After a moment of hesitation but finding sense in <<rep $g.negotiator>>'s words, the militia pulled back giving the raiding party time to escape.</p><p>As for plans go, it wasn't the worst. <<rep $g.merc1>> <<uadv $g.merc1>> led the raiders in a
frontal assault against the village in the dead of night.
They had captured a good number of villagers before the militia showed up.
<<rep $g.negotiator>> had <<uadv $g.negotiator>> pointed out that the fires that they started won't put themselves out
and the militia should be more worried to save the people that they can
instead of worrying about the slavers and the werewolves.</p>
<p>After a moment of hesitation, the militia decided that putting an end to your company's evil
career is worth more than the lives of few peasants. They attacked <<rep $g.negotiator>>, but luckily,
<<utheirrel $g.negotiator $g.merc1>> <<rep $g.merc1>>
<<if $g.merc1.isHasTrait('per_nimble')>>
swiftly acted
<<else>>
took the blunt of the blows
<</if>>
and managed to pull your
<<repfull $g.negotiator>> out of there.
However, the raiding was overall a failure.
The number of werewolves lost in the party exceeded the captured peasants. You had to decline payment in order to keep the tribe content.</p><p>All it took was the first scream.</p>
<p>The militia mobilized faster than expected and the whole raid was botched. To make up for the failure, your slavers offered to take up the rear-guard to give time for the wolves to retreat and they took up the brunt of the aggression from the chasing militia.</p>
<p>While it had stymied the werewolves' anger at your slavers,
it also meant that your slavers would be spending the next few weeks in recovery.</p><<run new setup.QuestTemplate(
'bounty_hunt__bear', /* key */
"Bounty Hunt: Bear", /* Title */
"", /* Author */
[ /* tags */
'vale',
'money',
],
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fighter': [ setup.qu.fighter, 1],
'hunter': [ setup.qu.hunter, 1],
'tracker': [ setup.qu.scout_vale, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_bounty_hunt__bear',
setup.qdiff.easy5, /* difficulty */
[ /* outcomes */
[
'Quest_bounty_hunt__bearCrit',
[
setup.qc.MoneyCrit(),
setup.qc.DoAll([
setup.qc.Opportunity('the_abominable_valeman', {
fighter: "fighter",
hunter: "hunter",
tracker: "tracker",
})
], 0.02),
],
],
[
'Quest_bounty_hunt__bearSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'Quest_bounty_hunt__bearFailure',
[
],
],
[
'Quest_bounty_hunt__bearFailure',
[
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
Tall tales spread quickly around the campfire, especially in cold winters of the <<lore region_vale>>. In their mead-halls and tribal gatherings, people speak of living snowstorms, deadly tickling spirits, the risen dead, and man-eating monsters that consumes the flesh of unfortunates.
</p>
<p>
Recently, a
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
has placed an open bounty on one such monster that has been plaguing their town: The "Abominable Valeman". An elusive, gigantic, hairy creature that comes down from the mountain to steal their livestock during snowstorms. You might not be able to hunt down a myth, but you can probably cash in on the bounty by catching a bear.
</p><p>
The light snowfall does little to conceal fresh tracks made in powder snow, and <<rep $g.tracker>> makes the best of the opportunity to quickly locate a grizzly bear. Strangely enough, <<rep $g.tracker>> notices another, non-bear set of tracks intersecting with the ones <<they $g.tracker>> is following, but doesn't stop to investigate. The tracking takes only a couple hours, and <<rep $g.tracker>> <<uadv $g.tracker>> signals to <<rep $g.fighter>> and <<rep $g.hunter>> that their quarry has been found.
</p>
<p>
With ample time to aim, <<rep $g.hunter>> lands several beautiful bowshots on the bear's vitals, causing it to stumble about drunkenly. <<rep $g.fighter>> only needs to take a single strike of <<their $g.fighter>> <<uweapon $g.fighter>> to put the wounded beast down.
</p>
<p>
The
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
believes the bear to be the "Abominable Valeman", and rewards the slavers handsomely for the grizzly's high quality pelt on top of the regular bounty.
</p><p>
Upon stepping out of the village into a light morning snowfall, <<rep $g.hunter>> notices a long furrow in some of the deeper snow and points it out. <<rep $g.tracker>> confirms them to be bear tracks, but perhaps from last night or yesterday. Since the trail is a bit old, it takes <<rep $g.tracker>> several hours to catch up to the bear. By then, the sky is darkening with storm clouds.
</p>
<p>
With the wind picking up and whistling around <<their $g.hunter>> <<uears $g.hunter>>, <<rep $g.hunter>> peppers the bear with arrows, stinging it into a blind rage. <<rep $g.fighter>> <<uadv $g.fighter>> interposes <<themselves $g.hunter>> between the grizzly and the archer, and connects with several <<uweapon $g.fighter>> blows to finish it off. With <<rep $g.fighter>> loading the corpse up onto a sled, the slavers arrive back at town only minutes before a blizzard does.
</p>
<p>
The
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
accepts the bear as the "Abominable Valeman", and thanks the slavers for solving the town's problem.
</p><p>
Unfortunately, what was a light snowfall when the slavers were leaving the village rapidly escalates into a swirling blizzard.
</p>
<<if $gOutcome == 'failure'>>
<p>
Unable to track in these conditions, <<rep $g.tracker>> grabs <<rep $g.fighter>> and <<rep $g.hunter>> and heads them all back to the village. The rancher is disappointed at their early return, but not upset, given the blizzard outside. The storm doesn't let up for several days, and the slavers stay out their welcome in the village, but find no bear and recieve no payment.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<rep $g.tracker>>'s calls to <<rep $g.fighter>> and <<rep $g.hunter>> are lost to the roaring wind, and the slavers quickly become disoriented and separated. When the snowfall ceases for long enough for the slavers to stumble back to each other, they discover <<switch $gQuest.getSeed() % 3>>
<<case 0>>
<<rep $g.fighter>>
<<run setup.qc.Injury('fighter', 6).apply($gQuest)>>
<<case 1>>
<<rep $g.hunter>>
<<run setup.qc.Injury('hunter', 6).apply($gQuest)>>
<<default>>
<<rep $g.tracker>>
<<run setup.qc.Injury('tracker', 6).apply($gQuest)>>
<</switch>> slumped against a tree, bleeding from several bear-claw wounds.
</p>
<</if>><<set _criteriabrewer = new setup.UnitCriteria(
null, /* key */
'Brew Inspector', /* name */
[
setup.trait.bg_foodworker,
setup.trait.per_thrifty,
setup.trait.per_curious,
setup.trait.per_attentive,
setup.trait.skill_alchemy,
],
[
setup.trait.per_dreamy,
setup.trait.per_generous,
setup.trait.per_aggressive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.eq_gagged,
setup.trait.mouth_demon,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1,
knowledge: 2,
}
)>>
<<set _criteriamonk1 = new setup.UnitCriteria(
null, /* key */
'False Monk', /* name */
[
setup.trait.bg_monk,
setup.trait.per_chaste,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.trait.race_demon,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_playful,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 2,
intrigue: 1,
}
)>>
<<set _criteriamonk2 = new setup.UnitCriteria(
null, /* key */
'False Monk', /* name */
[
setup.trait.bg_monk,
setup.trait.per_chaste,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.trait.race_demon,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_playful,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 2,
intrigue: 1,
}
)>>
<<run new setup.QuestTemplate(
'monk_business', /* key */
"Monk Business", /* Title */
"", /* Author */
['vale', 'money' /* tags */
],
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'brewer': [ _criteriabrewer, 1],
'monk1': [ _criteriamonk1, 1],
'monk2': [ _criteriamonk2, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_monk_business',
setup.qdiff.easy8, /* difficulty */
[ /* outcomes */
[
'Quest_monk_businessCrit',
[
setup.qc.BoonizeRandom('brewer', 2),
setup.qc.BoonizeRandom('monk1', 2),
setup.qc.BoonizeRandom('monk2', 2),
setup.qc.MoneyNormal(),
],
],
[
'Quest_monk_businessCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'Quest_monk_businessFailure',
[
],
],
[
'Quest_monk_businessDisaster',
[
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.TraumatizeRandom('brewer', 3),
setup.qc.TraumatizeRandom('monk1', 3),
setup.qc.TraumatizeRandom('monk2', 3)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('brewer', 5),
setup.qc.TraumatizeRandom('monk1', 3),
setup.qc.TraumatizeRandom('monk2', 1)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('monk1', 5),
setup.qc.TraumatizeRandom('monk2', 3),
setup.qc.TraumatizeRandom('brewer', 1)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('monk2', 5),
setup.qc.TraumatizeRandom('brewer', 3),
setup.qc.TraumatizeRandom('monk1', 1)
], undefined)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The monks of the north have been known to say that the coldest winters hide the warmest hearts. Nestled deep within the <<lore region_vale>> are monastic orders, some of the very few charitable organizations in the world. The poor, deformed, and even irredeemably corrupted can find a home as a monk.
</p>
<p>
These monasteries don't exist off of the goodwill of others alone, and often operate quite profitable breweries.
You've been observing one in particular, and they have monks from another monastery pick up and distribute their beer every month.
If a group of slavers could pose as their regular contact, you might be able to make off with their booze.
</p><p>
Upon arrival at the brewery, <<rep $g.monk1>> knocked and introduced <<themselves $g.monk1>> and <<rep $g.monk2>> as fellow monks.
While <<rep $g.monk1>> ingratiated <<themselves $g.monk1>> with the local monks, a senior monk led <<rep $g.brewer>> and <<rep $g.monk2>> to a cellar storeroom.
<<rep $g.brewer>> <<uadv $g.brewer>> sampled the merchandise, then <<they $g.brewer>> picked out some barrels for <<rep $g.monk2>> to haul up to the slavers' wagon.
The senior monk called down <<rep $g.monk1>> and some of the brewery's monks to assist, and they had the wagon packed in short order.
</p>
<<if $gOutcome == 'crit'>>
<p>
By the time night fell, <<rep $g.monk1>>, <<rep $g.monk2>>, and <<rep $g.brewer>> were seated around a cozy campfire, leagues away from the monastery they had hoodwinked. <<rep $g.monk2>> unstoppered the bunghole on one of the casks and poured everyone a cup. Or two, or maybe three...
</p>
<p>
By morning, <<rep $g.monk2>> was nursing a splitting headache. Worth it?
</p>
<<else>>
<p>
A few minutes after the slavers took to the road, they passed opposite several travelers with an empty wagon, heading towards the monastery.
Just minutes after that, <<rep $g.monk2>> heard irate shouts from that direction. Fearing that they had been discovered by the real traders, your slavers drove the wagon down the road and fled, barely stopping to rest until they reached the fort.
</p>
<p>
Success never tasted so malty.
Too bad <<rep $g.brewer>> had to share it with the rest of the fort.
</p>
<</if>><p>
The pickup was quick and easy, with no questions asked.
<<rep $g.brewer>> only needed to knock on the front door and ask for "the regular", and one of the junior monks led the slavers to a storeroom by the gates.
Once inside, <<rep $g.brewer>> stood about <<uadv $g.brewer>> while the monk helped <<rep $g.monk1>> and <<rep $g.monk2>> load up their wagon with casks.
And with barely a word said, the slavers were out of the monastery with the beer.
</p>
<p>
To celebrate having swindled the monks, <<rep $g.monk2>> cracked open one of the casks of hooch and poured everyone a cup.
As <<they $g.brewer>> gagged at the thin and acrid taste, <<they $g.brewer>> got the feeling that they were not the only swindlers in this corner of the vale.
</p><p>
On the journey to the monastery, the slavers passed opposite several travelers with a cargo-laded wagon.
<<rep $g.monk1>> greeted the wagoner briefly as they trundled down the other side of the road.
Thinking nothing of it, they arrived at the monastic brewery a day later, ready to cheat, lie, and steal for profit.
</p>
<p>
As misfortune would have it, the travelers that <<rep $g.monk1>> had greeted were the monks that the slavers were attempting to impersonate.
As soon as <<rep $g.brewer>> introduced <<rep $g.monk1>> and <<rep $g.monk2>> as traders from the other monastery, they were met with unfriendly stares.
Every last monk fell silent as a stone and refused to even speak to your slavers, no matter how many times <<rep $g.monk2>> tried to ask about the beer delivery.
</p>
<p>
With no other options, your slavers returned to the fort with nothing but shame.
</p><<set _prankster = new setup.UnitCriteria(
null, /* key */
'Prankster', /* title */
[
setup.trait.per_gregarious,
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_deceitful,
setup.trait.per_lunatic,
setup.trait.per_playful,
setup.trait.magic_wind,
setup.trait.skill_entertain,
], /* critical traits */
[
setup.trait.per_loner,
setup.trait.per_honorable,
setup.trait.per_kind,
setup.trait.per_honest,
setup.trait.per_masochistic,
setup.trait.per_proud,
setup.trait.per_serious,
setup.trait.magic_earth,
], /* disaster traits */
[
setup.qs.job_slaver
], /* requirement */
{ /* skill effects, sum to 3.0 */
arcane: 2.0,
intrigue: 1.0,
}
)>>
<<set _desc1 = 'was a dropout from the Academy of Wind who you convinced to join your company as a slaver'>>
<<set _desc2 = 'was a student in the Academy of Wind who you enslave as part of an elaborate prank'>>
<<run new setup.QuestTemplate(
'academy_of_wind', /* key */
'Academy of Wind', /* Title */
'darko', /* author */
['city', 'unit'], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'recruiter': setup.qu.recruiter,
'prankster1': _prankster,
'prankster2': _prankster,
},
{ /* actors */
'dropout': setup.unitgroup.quest_humankingdom_all_windstudent,
'victim': setup.unitgroup.quest_humankingdom_all_windstudent,
},
[ /* costs */
],
'QuestAcademyOfWind', /* passage description */
setup.qdiff.hard32, /* difficulty */
[ /* outcomes */
[
'QuestAcademyOfWindCrit',
[
setup.qc.Slaver('dropout', _desc1),
setup.qc.Slave('victim', _desc2),
setup.qc.MoneyCrit(0.5),
],
],
[
'QuestAcademyOfWindSuccess',
[
setup.qc.Slaver('dropout', _desc1),
setup.qc.MoneyNormal(0.5),
],
],
[
'QuestAcademyOfWindFailure',
[
],
],
[
'QuestAcademyOfWindDisaster',
[
setup.qc.Trait('prankster1', setup.trait.per_submissive),
],
],
],
[[setup.questpool.city, 50],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.prospectshall)
], /* prerequisites to generate */
)>><p>
The Academy of Wind is perhaps the most well known magic institute throughout the continent.
The Academy accepts students of any background that displays aptitude for <<lore magic_wind>>, although
the vast majority of them are the citizens of the wind-attuned Kingdom of Tor.
Graduates of the academy are highly sought after, and many important positions in the kingdom
are filled by them.
</p>
<p>
You have just learned that one of the academy's students were just expelled.
According to the rumors, <<their $g.dropout>> natural aptitude for <<lore magic_wind>> were
the subject of jealousy from <<their $g.dropout>> peers, which ultimately results in other
students bribing the academy's higher ups to drop <<them $g.dropout>>.
Having an ex-member of the academy of wind as a slaver is perhaps a too tempting of an idea,
that it might be worth to try and seek this dropout and offer <<them $g.dropout>> revenge in exchange for
joining your company.
</p><p>
With some difficulty, <<rep $g.recruiter>> managed to <<uadv $g.recruiter>> find <<rep $g.dropout>> apparently already
planning his own somewhat shoddy revenge plan against <<their $g.dropout>> former classmates.
With your slavers ingenuity, the plan was fully developed into a truly degenerate of a plan.
</p>
<p>
The next day, your slavers sneaked into <<rep $g.victim>>'s room in the academy, and
dropped the surprise package in front of her door.
The surprise package was in fact, one of the spellbooks that <<rep $g.dropout>> have written.
Upon returning to <<their $g.victim>> room, <<rep $g.victim>> found the book and,
hungry for power as <<they $g.victim>> are, excitedly went to <<their $g.victim>> room to study the book.
But the book has been tampered with --- as <<rep $g.victim>> became engrossed more and more on the book,
<<they $g.victim>> failed to realize that the book has been modified into a long incantation of the spell
of self-binding. Within moments from finishing the book, otherwordly tendrils snapped from nowhere and
coiled around <<rep $g.victim>>'s unsuspecting body, securing <<their $g.victim>> limbs behind their body
in a hog-tied position. The coils also wrapped tightly around
<<their $g.victim>> <<if $g.victim.isHasTrait(setup.trait.breast_tiny)>>breast<<else>>chest<</if>>
and stomatch, forcing <<rep $g.victim>> to lay helpless on the floor.
<<if $g.victim.isHasTrait(setup.trait.dick_tiny)>>
Another set of coil wraps harshly around the base of their dick, forcing their dick to be erect
but preventing <<them $g.victim>> from actually cumming.
<<else>>
Another set of coil wraps harshly around her vagina, giving continuous pressure while preventing
<<them $g.victim>> from receiving pleasure.
<</if>>
As a final touch, <<their $g.victim>> mouth was fitted with a knot-gag, rendering everything
<<they $g.victim>> say into guttural moans.
</p>
<p>
Later that night, your slavers returned to <<rep $g.victim>> room together with
<<rep $g.dropout>>. <<rep $g.victim>> was at first almost relieved to see someone entering
her room, only to recognize <<rep $g.dropout>> in horror.
Having <<their $g.dropout>> revenge in spades, you and your slavers returned to your fort
happily with a new slaver <<rep $g.dropout>> in tow and a new
and magical slave to break. All in a good day of work.
</p><p>
With some difficulty, <<rep $g.recruiter>>
to find <<rep $g.dropout>> apparently already
planning his own somewhat shoddy revenge plan against <<their $g.dropout>> former classmates.
The plan was already complete by the time your slavers come, and <<rep $g.dropout>> agrees
to join your company if your slavers helped <<them $g.dropout>> with the plan.
</p>
<p>
The plan was simple --- to humiliate <<rep $g.victim>> in front of as many people as they can.
The centerpoint of the Academy of Wind is the statue of their founder, posed with one arm pointing
to the sky.
In the fateful day, as <<rep $g.victim>> were passing through the centerpoint,
<<rep $g.dropout>> and your slavers were ready with the prepared wind spell.
Within seconds, a large gust of wind appeared on the academy, catching <<rep $g.victim>> in the
middle of it.
Caught by surprise, <<rep $g.victim>> could do nothing but watch in horror as <<they $g.victim>>
were lifted up in the air and gently place her right above the statue.
As <<rep $g.dropout>> explained to <<them $g.victim>> what was about to happen, the wind spell
ended, impaling <<rep $g.victim>>'s rear straight into the statue's pointing arm, impaling it straight
up into <<them $g.victim>>.
<<rep $g.dropout>> and your slavers quickly make their exit to watch from afar.
</p>
<p>
Confident that revenge has been served, <<rep $g.dropout>> happily joins your slaving company
with the promise of gold and flesh. Who knows, perhaps one day <<rep $g.victim>> will end up as
one of our slaves.
</p><p>
Unfortunately, your slaver was not able to locate <<rep $g.dropout>> in the vast city of
Lucgate. Checking the local tavern, inn, or even asking around the academy did not yield
any result.
</p><p>
With some difficulty, your slavers managed to find <<rep $g.dropout>> apparently already
planning his own somewhat shoddy revenge plan against <<their $g.dropout>> former classmates.
The plan was already complete by the time your slavers come, and <<rep $g.dropout>> agrees
to join your company if your slavers helped <<them $g.dropout>> with the plan.
</p>
<p>
The next day, your slavers sneaked into <<rep $g.victim>>'s room in the academy, and
dropped the surprise package in front of her door.
The surprise package was in fact, one of the spellbooks that <<rep $g.dropout>> have written.
Taken by curiosity of magic, however, <<rep $g.prankster1>> felt there would be no harm
to read a part of the book.
But it turns out to be a big mistake.
Within moments otherwordly tendrils snapped from nowhere and
coiled around both <<rep $g.prankster1>> and <<rep $g.prankster2>> unsuspecting bodies,
securing their limbs behind their body
in a hog-tied position and immobilizing them completely.
Apparently, <<rep $g.dropout>> has also paid special attention to the victim's special parts,
which are bound by even tighter coil to make them erect but unable to reach climax.
As a final touch, their mouths were also rendered useless by being fitted with a large knot-gag.
</p>
<p>
Your slavers had to endure hours of being tied in such position before eventually being found
by the academy staff in the morning.
While uninjured, this experience has deeply changed your slavers, awakening some kind of
submissive behaviors in them.
</p><<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.magic_earth,
setup.trait.per_lunatic,
setup.trait.per_nimble,
setup.trait.per_loner,
], /* critical traits */
[
setup.trait.race_humankingdom,
setup.trait.per_lustful,
setup.trait.per_masochistic,
setup.trait.balls_large,
setup.trait.breast_large,
setup.trait.magic_wind,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_slime', /* key */
'Bounty Hunt: Slime', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
},
[ /* costs */
],
'QuestBountyHuntSlime', /* passage description */
setup.qdiff.normal26, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntSlimeCrit',
[
setup.qc.MoneyCrit(),
],
],
[
'QuestBountyHuntSlimeSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestBountyHuntSlimeFailure',
[
],
],
[
'QuestBountyHuntSlimeDisaster',
[
setup.qc.Injury('merc1', 4),
setup.qc.Injury('merc2', 4),
setup.qc.Injury('negotiator', 4),
],
],
],
[[setup.questpool.city, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The<<lore location_lucgate>> has a massive underground waterworks.
While most of it are kept functional, some deeper parts of the waterworks
were here since ancient times, and is said to be inhabited by
otherworldly creatures.
One of the most infamous amongst these creatures are the slimes,
who is said to feed upon the "output" of other creatures.
</p>
<p>
One of the alchemist in the city is requiring a vial of the slime's
body for her research.
She is offering great reward for adventurers brave enough to best
these creatures.
If your slavers are up for it, this might make a decent job.
</p><p>
Your slavers happened upon a slime mating with an unlucky victim, a resident
of the undercity of Lucgate.
By pure chance, once the slime is defeated, your slaver happens to put a rare
component out of the slime into the vial --- a half processed cum out of the
victim mixed with the slime's natural aphrodisiac.
<<rep $g.negotiator>> managed to use this rare material to
<<uadv $g.negotiator>> negotiate a better pay with
the alchemist, who happily pays double the price that was originally agreed
on. Nobody knows the ultimate fate of the slime's victim...
</p><p>
Having no visible face, one could never know how ready such a slime is for a fight.
But your slavers turn out to be more than a match for such a slime, and managed
to dispatch it cleanly without any problem.
Your slavers then put samples from the slime into the vial, although it smells
weird and a little bit kinky.
<<rep $g.negotiator>> <<uadv $g.negotiator>> wonder what kind of potion the alchemist needs such an ingredient for.
</p><p>
Unfortunately, the slime in the middle of the fight managed to slide into the gutter and disappear.
Your slavers did not manage to find another slime and hence had to return empty-handed.
</p><p>
Either deliberately or not, your slavers ended up losing and submitting to the slime,
who completely drains both the balls and the breasts of your slavers again and again
for a few hours.
It will require several weeks for them to recover mentally from such trauma.
</p><<set _robber = new setup.UnitCriteria(
null, /* key */
'Fake Crimson Robber', /* title */
[
setup.trait.per_gregarious,
setup.trait.per_deceitful,
setup.trait.per_brave,
setup.trait.per_nimble,
setup.trait.per_calm,
setup.trait.magic_wind,
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.skill_entertain,
setup.trait.skill_flight,
setup.trait.eq_valuable,
setup.trait.face_attractive,
], /* critical traits */
[
setup.trait.per_loner,
setup.trait.per_honest,
setup.trait.per_deceitful,
setup.trait.per_masochistic,
setup.trait.per_aggressive,
setup.trait.magic_earth,
setup.trait.skill_connected,
setup.trait.face_ugly,
setup.trait.skill_intimidating,
], /* disaster traits */
[
setup.qs.job_slaver
], /* requirement */
{ /* skill effects, sum to 3.0 */
social: 2.0,
survival: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'crimson_robber', /* key */
'Crimson Robber', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'robber': _robber,
'love': setup.qu.loveinterest,
'thief': setup.qu.thief,
},
{ /* actors */
},
[ /* costs */
],
'QuestCrimsonRobber', /* passage description */
setup.qdiff.normal31, /* difficulty */
[ /* outcomes */
[
'QuestCrimsonRobberCrit',
[
setup.qc.MoneyCrit(),
],
],
[
'QuestCrimsonRobberSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestCrimsonRobberFailure',
[
],
],
[
'QuestCrimsonRobberDisaster',
[
setup.qc.Injury('robber', 4),
],
],
],
[[setup.questpool.city, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The market square of the<<lore location_lucgate>> is a bustling place, with vendors
everywhere peddling their goods. Normally, with the exception of small time
pickpockets, the area is relatively safe and it would be impossible for your
slavers to raid the place.
But recently, there has been rumours of a particularly sexy and eye-catching
robber doing daylight robberies, but the culprit is so charming that the victim
usually willingly give everything they have to them.
Due to such bold tactic of robbing in the middle of the day and the reddish
costume they reportedly wear, the citizen have given the robber the nickname
"Crimson Robber".
Reports are inconsistent whether the Crimson Robber is a handsome and well-built
young lad, or a sexy cat burglar in a tight red suit.
</p>
<p>
Whether the rumours are true or not, there is an opportunity here for your
slavers to make use. Specifically, you could try to dress up one of your
slavers to look like the Crimson Robber in an attempt to distract the marketplace's
people. Meanwhile, one of the slavers will gather up valuables during the distraction.
To make the show more convincing, we can try adding a love interest to the mix ---
one of our own pretending to be a normal peddler that happens to be robbed by
the Crimson Robber only to fall in love.
Surely such a clever plan must work, no?
</p><p>
Your slavers are ready for the mission.
<<if $g.robber.isHasTrait(setup.trait.gender_male)>>
Donning a crimson cape and a red hunter's gear, <<rep $g.robber>> is truly the
embodiment of a shining <<uadjphys $g.robber>>
young robber.
<<else>>
Donning a full-body suit leaving only the cleavage open, <<rep $g.robber>> is sure
to dazzle all the people of the market.
<</if>>
Meanwhile, <<rep $g.love>> have <<uadv $g.love>> practiced <<their $g.love>> fake accent
and the attempt to fake loving at first sight.
<<rep $g.thief>> also stands at the ready to <<uadv $g.thief>> rob the people during the commotion.
With all the preparation set, time for the stage to open...
</p><<include 'QuestCrimsonRobberCommon'>>
<p>
In the middle of the market,
<<rep $g.love>>, who was carrying a bucket of roses, was "accidentally"
bumped by a stranger, who is then revealed to be the Crimson Robber himself.
<<rep $g.robber>> then, in a <<uadjper $g.robber>> tone, demands everything that <<rep $g.love>> have,
including her heart.
Surrounded by roses, they make a convincing pair, with mobs of merchants leaving their stalls to watch
the show unfold.
Meanwhile, <<rep $g.thief>> have no problem at all securing goods from the stall,
and making the exit before anyone notice.
</p>
<p>
Some time later, you receive a large package of flowers in front of your fort, together
with a large amount of gold.
It is unclear who could have sent such a gift.
</p><<include 'QuestCrimsonRobberCommon'>>
<p>
In the middle of the market, <<rep $g.robber>> suddenly appeared (after hiding)
and demanded <<rep $g.love>>'s attention and money.
While the acting lacks character, the outfits were apparently enough to draw
the curious crowd into watching the scene unfold.
There were quite a number of merchants who left their stands unattended,
making <<rep $g.thief>>'s of securing the goods easy.
Before the guards were called in, all of your slavers escaped from the market,
leaving nobody any wiser.
</p><<include 'QuestCrimsonRobberCommon'>>
<p>
In the middle of the market, <<rep $g.robber>> awkwardly accosted
<<rep $g.love>> and threatened for money.
With such an amateur act, nobody believed that this is the true Crimson Robber
and the guards are called.
Your slavers had no choice but to hurry back home to avoid being captured.
Perhaps slavers are not meant for acting.
</p><<include 'QuestCrimsonRobberCommon'>>
<p>
<<rep $g.robber>> attempted to climb the fountain in the middle to
make the declaration only to fall horribly during the climb, injuring <<their $g.robber>>'s
head. Luckily, nobody suspected any foul play, but the plan had to be called off.
</p><<set _knight = setup.CriteriaHelper.Restrictions(
[
setup.qres.HasTitle('quest_knight_in_training'),
],
setup.qu.knight,
)>>
<<run new setup.QuestTemplate(
'damsel_in_distress_kidnap', /* key */
'Damsel in Distress: Kidnap', /* Title */
'darko', /* author */
['city', 'femaleonly', 'unit', 'prep'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': _knight,
'squire1': setup.qu.squire,
'squire2': setup.qu.squire,
},
{ /* actors */
'innocent': setup.unitgroup.quest_humankingdom_nobledaughter,
'ravaged': setup.unitgroup.quest_humankingdom_nobledaughter_ravaged,
},
[ /* costs */
],
'QuestDamselInDistressKidnap', /* passage description */
setup.qdiff.hardest40, /* difficulty */
[ /* outcomes */
[
'QuestDamselInDistressKidnapCrit',
[
setup.qc.Slave('innocent'),
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
setup.qc.MoneyCrit(),
setup.qc.Ire('humankingdom', 5),
],
],
[
'QuestDamselInDistressKidnapSuccess',
[
setup.qc.Slave('ravaged'),
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
setup.qc.MoneySmall(),
setup.qc.Ire('humankingdom', 5),
],
],
[
'QuestDamselInDistressKidnapFailure',
[
setup.qc.Injury('knight', 2),
setup.qc.Injury('squire1', 2),
setup.qc.Injury('squire2', 2),
],
],
[
'QuestDamselInDistressKidnapDisaster',
[
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
],
],
],
[ /* quest pool and rarity */
],
[
], /* prerequisites to generate */
)>><p>
A letter has come addressed to the knight-in-training in your company.
An innocent daughter of a noble family in the kingdom has been kidnapped,
and your knight-in-training is urged to kidnap her at the earliest opportunity.
If done properly, this could be the chance to prove themself that your knight-in-training
has been waiting for.
Or alternatively, an innocent noble daughter must fetch a nice price on a market...
</p>
<p>
For better or worse, you have decided to attempt to kidnap the noble daughter.
</p><p>
According to the intel gathered, the daughter is being kidnapped by a famous bandit
king --- basically another slaving company such as yours.
Hence, locating the daughter will not be too much issue --- the issue is getting to her
before the bandits break her beyond saving, which will surely drop the price of such
an exquisite little slave.
Time is hence of the essence.
</p><<include 'QuestDamselInDistressKidnapCommon'>>
<p>
<<rep $g.knight>> and <<their $g.knight>> "squires" <<uadv $g.knight>> scoured the taverns
efficiently for particular defensive weakness of the bandit's fort.
Of course, they do so in the facade of saving here, where in reality their true aim
is something else.
A few bribe here and there, and a few "knightly charm" employed
and the tavern wenches easily started talking about a possible escape tunnel
next to the river near the fort.
Armed with this knowledge, your slavers embarked on the journey and arrived at the fort.
There, they sneaked through the escape tunnel while managing to avoid the attention of
any of the inhabitants of the slavers.
Finally, they found the daughter apparently still unconscious from the kidnapping,
tied up inside a cage.
While a locked cage usually present problem for do-gooder knights such as... not yourself,
it is not an issue at all for your experienced slavers as they lockpicked the lock and smuggle
the daughter out of the fort, only for her to be locked away again this time in a more secure cage
and by more experienced slavers.
</p>
<p>
Somehow, the<<lore location_lucgate>> hears of your doings, and any pretense of <<rep $g.knight>>
knight adventure is surely cut short.
</p><<include 'QuestDamselInDistressKidnapCommon'>>
<p>
<<rep $g.knight>> and <<their $g.knight>> squire <<uadv $g.knight>> decided that the fastest approach
must be to strike headlong into the enemy fort.
And they did just that --- the enemies were no match for <<rep $g.knight>> prowess
in fighting.
The leader of the bandit camp, however, seeing that his work is ruined,
went to the hostage room to fume his stress over to the noble daughter before escaping.
By the time your slavers managed to locate the noble daughter,
she has a blank look after being so violently used by the bandits --- her once attractive
face is no longer there.
Still, she's alive, and that's what matters to your slavers as they unlocked her cage
and brought her to her new home.
She can recover there before resuming her training, this time in the hands of a more
delicate and experienced slavers.
</p>
<p>
Somehow, the<<lore location_lucgate>> hears of your doings, and any pretense of <<rep $g.knight>>
knight adventure is surely cut short.
</p><p>
<<rep $g.knight>> and <<their $g.knight>> decided that the fastest approach
must be to strike headlong into the enemy fort.
But little that they know that the fort's surrounding has been filled with deadly traps
--- your slavers fell (literally) victim into those traps and had no choice but to
come back injured. If there is any good that come out of this, its that the<<lore location_lucgate>>
will never know of your true intentions, and <<rep $g.knight>> can keep <<their $g.knight>>
title of knight-in-training for now.
</p><p>
<<rep $g.knight>> and <<their $g.knight>> "squires" scoured the taverns
efficiently for particular defensive weakness of the bandit's fort.
But all that information only shrunk <<rep $g.knight>>'s resolve,
for the tavern patrons describe the enemy as a mighty barbarian king and describe
what would happen to those that oppose him.
In the end, <<rep $g.knight>> decided to cancel the rescue attempt, which must
look absolutely poor on his knightly resume.
</p><<run new setup.Title(
'quest_knight_in_training_complete', /* key */
'Knight of Tor', /* name */
'Has been knighted by the Kingdom of Tor', /* name */
'has been properly knighted by the Kingdom of Tor for saving a damsel in distress', /* unit description */
3000, /* slave value */
{
combat: 3,
aid: 2,
},
)>>
<<set _knight = setup.CriteriaHelper.Restrictions(
[
setup.qres.HasTitle('quest_knight_in_training'),
],
setup.qu.knight,
)>>
<<run new setup.QuestTemplate(
'damsel_in_distress_save', /* key */
'Damsel in Distress: Save', /* Title */
'darko', /* author */
['city', 'money', 'prep', 'favor', ], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': _knight,
'squire1': setup.qu.squire,
'squire2': setup.qu.squire,
},
{ /* actors */
},
[ /* costs */
],
'QuestDamselInDistressSave', /* passage description */
setup.qdiff.extreme40, /* difficulty */
[ /* outcomes */
[
'QuestDamselInDistressSaveCrit',
[
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
setup.qc.AddTitle('knight', 'quest_knight_in_training_complete'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 200),
],
],
[
'QuestDamselInDistressSaveSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 100),
],
],
[
'QuestDamselInDistressSaveFailure',
[
setup.qc.Injury('knight', 2),
setup.qc.Injury('squire1', 2),
setup.qc.Injury('squire2', 2),
],
],
[
'QuestDamselInDistressSaveDisaster',
[
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
],
],
],
[ /* quest pool and rarity */
],
[
], /* prerequisites to generate */
)>><p>
A letter has come addressed to the knight-in-training in your company.
The innocent daughter of a noble family in the kingdom has been kidnapped,
and your knight-in-training is urged to save her at the earliest opportunity.
If done properly, this could be the chance to prove themself that your knight-in-training
has been waiting for.
Or alternatively, an innocent noble daughter must fetch a nice price on a market...
</p>
<p>
For better or worse, you have decided to attempt to save the noble daughter.
</p><p>
According to the intel gathered, the daughter is being kidnapped by a famous bandit
king --- basically another slaving company such as yours.
Hence, getting back the daughter will not be too much issue --- the issue is getting to her
before the bandits break her beyond saving, which will not reflect well on your knight-in-training.
Time is hence of the essence.
</p><<include 'QuestDamselInDistressSaveCommon'>>
<p>
<<rep $g.knight>> and <<their $g.knight>> "squires" <<uadv $g.knight>> scoured the taverns
efficiently for particular defensive weakness of the bandit's fort.
A few bribe here and there, and a few "knightly charm" employed
and the tavern wenches easily started talking about a possible escape tunnel
next to the river near the fort.
Armed with this knowledge, your slavers embarked on the journey and arrived at the fort.
There, they sneaked through the escape tunnel while managing to avoid the attention of
any of the inhabitants of the slavers.
Finally, they found the daughter apparently still unconscious from the kidnapping,
tied up inside a cage.
While a locked cage usually present problem for do-gooder knights such as... not yourself,
it is not an issue at all for your experienced slavers as they lockpicked the lock and smuggle
the daughter out of the fort.
</p>
<p>
Back in the<<lore location_lucgate>>, your slavers were hailed as heroes for bringing back the daughter
with her innocense intack, and the father of her family promised to ensure that <<rep $g.knight>>
receives the recognition that <<they $g.knight>> deserve.
</p><<include 'QuestDamselInDistressSaveCommon'>>
<p>
<<rep $g.knight>> and <<their $g.knight>> squire <<uadv $g.knight>> decided that the fastest approach
must be to strike headlong into the enemy fort.
And they did just that --- the enemies were no match for <<rep $g.knight>> prowess
in fighting.
The leader of the bandit camp, however, seeing that his work is ruined,
went to the hostage room to fume his stress over to the noble daughter before escaping.
By the time your slavers managed to locate the noble daughter,
she has a blank look after being so violently used by the bandits.
Still, she's alive, and that's what matters to your slavers as they unlocked her cage
and brought her home.
Your slavers pondered a little about using such a high pedigree slave, but your
knight-in-training feels that is not a very knightly act.
</p>
<p>
Back in the<<lore location_lucgate>>,
the father of the noble daughter's family urged your slavers to come in quietly.
He apologized profusely before saying that he is unable to endorse <<rep $g.knight>>'s
promotion into a knight, lest his daughter's fate be known to public eyes.
He pleads to your slavers and gave them money in return, which your slavers
grudgingly accepts.
</p><p>
<<rep $g.knight>> and <<their $g.knight>> decided that the fastest approach
must be to strike headlong into the enemy fort.
But little that they know that the fort's surrounding has been filled with deadly traps
--- your slavers fell (literally) victim into those traps and had no choice but to
come back injured.
</p><p>
<<rep $g.knight>> and <<their $g.knight>> "squires" scoured the taverns
efficiently for particular defensive weakness of the bandit's fort.
But all that <<rep $g.knight>> only shrunk <<their $g.knight>> resolve,
for the tavern patrons describe the enemy as a mighty barbarian king and describe
what would happen to those that oppose him.
In the end, <<rep $g.knight>> decided to cancel the rescue attempt, which must
look absolutely poor on his knightly resume.
</p><<run new setup.Title(
'quest_electricmaster_the_electrician', /* key */
'Electrician', /* name */
'An infamous slave master from the city gifted with control over electricity', /* name */
'used their control over electricity to train their slaves', /* unit description */
5000, /* slave value */
{
slaving: 4,
knowledge: 1,
arcane: 2,
},
)>>
<<run new setup.UnitGroup(
'quest_electricmaster_electrician',
'The Electrician himself',
setup.unitgroup.city_all.getUnitPools(),
1,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.Trait('unit', setup.trait.bg_engineer),
setup.qc.TraitReplace('unit', setup.trait.per_dominant),
setup.qc.TraitReplace('unit', setup.trait.magic_wind_master),
setup.qc.Nickname('unit', 'The Electrician'),
],
)>>
<<run new setup.UnitGroup(
'quest_electricmaster_slave',
'Slaves of the Electrician',
setup.unitgroup.city_all.getUnitPools(),
1,
[
setup.qc.TraitReplace('unit', setup.trait.per_submissive),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
],
)>>
<<set _electrician = new setup.UnitCriteria(
null, /* key */
'Electrician', /* title */
[
setup.trait.bg_engineer,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.per_lunatic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth_master,
setup.trait.skill_creative,
setup.trait.height_short,
], /* critical traits */
[
setup.trait.per_dreamy,
setup.trait.bg_slave,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.per_evil,
setup.trait.per_chaste,
setup.trait.per_brave,
setup.trait.per_curious,
setup.trait.per_playful,
setup.trait.muscle_strong,
setup.trait.dick_large,
setup.trait.balls_large,
setup.trait.breast_large,
setup.trait.face_attractive,
setup.trait.skill_entertain,
].concat(setup.TraitHelper.EQUIPMENT_SLUTTY), /* disaster traits */
[
setup.qs.job_slaver,
], /* requirement */
{ /* skill effects, sum to 3.0 */
knowledge: 1.0,
intrigue: 1.0,
slaving: 1.0,
}
)>>
<<set _infiltrator = setup.CriteriaHelper.Restrictions(
[
setup.qres.NoTitle('quest_electricmaster_the_electrician'),
],
setup.qu.infiltrator,
)>>
<<set _electrician2 = setup.CriteriaHelper.Restrictions(
[
setup.qres.NoTitle('quest_electricmaster_the_electrician'),
],
_electrician,
)>>
<<set _desc1 = 'was a master of <<lore magic_wind>> known to most circles as "The Electrician"'>>
<<set _desc2 = 'was one of the slaves fully broken by "The Electrician" who you stole from their mansion'>>
/* version before clearing crit */
<<run new setup.QuestTemplate(
'electric_master', /* key */
'Electric Master', /* Title */
'darko', /* author */
['city', 'money', 'unit'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'electrician': [_electrician, 2],
'infiltrator1': [setup.qu.infiltrator, 0.5],
'infiltrator2': [setup.qu.infiltrator, 0.5],
},
{ /* actors */
'lord': setup.unitgroup.quest_electricmaster_electrician,
'slave': setup.unitgroup.quest_electricmaster_slave,
},
[ /* costs */
],
'QuestElectricMaster', /* passage description */
setup.qdiff.extreme39, /* difficulty */
[ /* outcomes */
[
'QuestElectricMasterCrit',
[
setup.qc.AddTitle('lord', 'quest_electricmaster_the_electrician'),
setup.qc.Slaver('lord', _desc1),
setup.qc.RemoveFromUnitGroup('lord'),
],
],
[
'QuestElectricMasterSuccess',
[
setup.qc.Slave('slave', _desc2),
setup.qc.MoneyNormal(),
],
],
[
'QuestElectricMasterFailure',
[
setup.qc.Injury('electrician', 4),
],
],
[
'QuestElectricMasterDisaster',
[
setup.qc.MissingSlaver('electrician'),
],
],
],
[[setup.questpool.city, 80],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.prospectshall),
setup.qres.NoUnitWithTitle('quest_electricmaster_the_electrician'),
setup.qres.NoQuest('electric_master_clearcrit'),
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>>
/* version after clearing crit */
<<run new setup.QuestTemplate(
'electric_master_clearcrit', /* key */
'Electric Master', /* Title */
'darko', /* author */
['city', 'money', 'unit'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'electrician': [_electrician2, 2],
'infiltrator1': [_infiltrator, 0.5],
'infiltrator2': [_infiltrator, 0.5],
},
{ /* actors */
'slave': setup.unitgroup.quest_electricmaster_slave,
},
[ /* costs */
],
'QuestElectricMaster2', /* passage description */
setup.qdiff.hardest39, /* difficulty */
[ /* outcomes */
[
'QuestElectricMasterCrit2',
[
setup.qc.MoneyCrit(1.2),
],
],
[
'QuestElectricMasterSuccess',
[
setup.qc.Slave('slave', _desc2),
setup.qc.MoneyNormal(),
],
],
[
'QuestElectricMasterFailure',
[
setup.qc.Injury('electrician', 4),
],
],
[
'QuestElectricMasterDisaster',
[
setup.qc.MissingSlaver('electrician'),
],
],
],
[[setup.questpool.city, 80],], /* quest pool and rarity */
[
setup.qres.HasUnitWithTitle('quest_electricmaster_the_electrician', {job_key: 'slaver'}),
setup.qres.NoQuest('electric_master'),
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
The denizens of the Kingdom of Tor are known for their affinity to wind.
When fully mastered, wind wizards can alter the properties of wind into electricity,
zapping anyone they deem fit.
While electric magic can certainly be put to military use,
it is also remarkably effective as a mean to train slaves.
</p>
<p>
In the upper area of the<<lore location_lucgate>>, there is a known lord that people
colloqually refer to as "The Electrician". The lord is apparently gifted with the <<lore magic_wind>>,
and has been using it to train his staffs into fully servile people.
It is said that the mansions hold great riches as well as obedient slaves for people
foolish enough to enter.
Rumors has it that the Electrician took delight in breaking the hardest people to break,
and actually invited people to try and survive the attempt of robbing his mansion.
</p>
<p>
<<dangertext 'WARNING'>>: This is a dangerous quest.
</p><p>
The denizens of the Kingdom of Tor are known for their affinity to wind.
When fully mastered, wind wizards can alter the properties of wind into electricity,
zapping anyone they deem fit.
While electric magic can certainly be put to military use,
it is also remarkably effective as a mean to train slaves.
</p>
<<set _lord = setup.getUnit({job: setup.job.slaver, title:'quest_electricmaster_the_electrician'})>>
<p>
<<if _lord>>
While you have recruited <<rep _lord>> to your company, <<they _lord>> gives consent if you still
want to raid the mansion.
<<else>>
You recall that your slavers has been there before.
<</if>>
But all the automated defenses of the mansion are still active, as well as the prizes lying there.
You can raid the place again, if you are willing to risk the dangers.
</p>
<p>
<<dangertext 'WARNING'>>: This is a dangerous quest.
</p><p>
Given the layout of the mansion, there are no other choice for a plan
but to have <<rep $g.electrician>> <<uadv $g.electrician>> lead the charge
while <<rep $g.infiltrator1>> and <<rep $g.infiltrator2>> trail behind.
The rumors prove true, as soon as they break into the mansion, they discovered
that it is fully booby-trapped. Various electric traps are scattered throughout the
mansion, and it is up to your slavers to try to disarm and navigate through the maze.
Given the amount of electric devices scattered along the walkway alone, your slavers
can only imagine what kind of depravity can be found inside the rooms.
</p><<include 'QuestElectricMasterCommon'>>
<p>
Fortunately, <<rep $g.electrician>> was more than adept at <<their $g.electrician>> job.
<<They $g.electrician>> managed to find and disarm the traps one by one, as your slavers
climbed the mansion little by little, trying to ignore all the various naked "guards" being "posted" in various
locations and poses, as well as the sudden screams coming from the lower floors.
</p>
<p>
Eventually, they arrive at the topmost floor. In front of them is a door made of strong oaken wood,
which your slavers proceed to open.
In the small room behind the door, sit a <<man $g.lord>> with <<their $g.lord>> back facing your slavers.
<<man $g.lord>> then slowly turned to face your slavers, --- this must be the <<man $g.lord>>
known as "The Electrician".
Suddenly, an electric cage dropped onto your slavers from the ceiling, trapping them.
But "The Electrician" appears to be impressed by your slavers prowess to get to this room.
Citing boredom, <<they $g.electrician>> asks to join your company for a change of scenery, and arrange for <<their $g.electrician>> mansions to
be attended by <<their $g.electrician>> employees for the time being.
</p><<include 'QuestElectricMasterCommon'>>
<p>
Fortunately, <<rep $g.electrician>> was more than adept at <<their $g.electrician>> job.
<<They $g.electrician>> managed to find and disarm the traps one by one, as your slavers
climbed the mansion little by little, trying to ignore all the various naked "guards" being "posted" in various
locations and poses, as well as the sudden screams coming from the lower floors.
</p>
<p>
Eventually, they arrive at the basement, where they found a stash of treasure hidden in one of the rooms.
They took the treasure out and sell them for a large profit, except maybe a naughty trinket or two that
your slavers secretly took.
</p><p>
There were so many of the traps that your slavers had to move very slowly to make progress.
Eventually, they spotted a suspicious looking door, and headed there.
Behind the door, they found a slave whose nipples and genitals are all hooked to a strange
looking device.
Suddenly, an electric jolt came from the device, causing the slave to moan in pain and ecstacy.
The slave is not actually bound, so this must be highly trained slave to be able to endure such
shock without trying to run away.
Your slavers decided that the slave would make a decent enough prize for the trip, and decided
to let this room be their final destination for this trip.
Perhaps next time your slavers would be able to go further.
</p><p>
Unfortunately, <<rep $g.electrician>> was sloppy in <<their $g.electrician>> job and
managed to trigger one of the traps.
<<rep $g.electrician>> was zapped, which caused <<them $g.electrician>> to stumble into another dildo-shaped trap that
zaps <<them $g.electrician>> directly in <<their $g.electrician>> ass.
The combination of sudden pain and pleasure caused <<rep $g.electrician>>, and your slavers
had no choice but to retreat from this foolish endeavor.
</p><p>
Your slavers managed to make a progress until they reached the dining room.
Then suddenly, an unnoticed trap unleashed an electric dildo up to
<<rep $g.electrician>>'s ass, and impaled <<them $g.electrician>> upwards.
Together with the scream, the dining room door then closed, leaving your slavers nowhere
to run away.
</p>
<p>
Then one of the guards slowly walks down the staircase and greets them
as "The Electrician"'s head guard.
They proceeds to manhandle <<rep $g.electrician>>, fondling <<their $g.electrician>> genitals
and body to make sure it's up to their lord's specifications of a "guard".
Satisfied, they then ordered your other slavers to leave, which your other slavers had no choice
but to meekly agree.
</p>
<p>
<<rep $g.electrician>> did not return to your fort, and <<their $g.electrician>> fate is unknown.
Perhaps <<they $g.electrician>> would live a life as one of the many toys in the Electrician's mansion, or perhaps
you'll see <<them $g.electrician>> again one day.
</p><<run new setup.QuestTemplate(
'fateful_auction', /* key */
'Fateful Auction', /* Title */
'darko', /* author */
[
'special', 'unit'
], /* tags */
1, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'bidder1': setup.qu.bidder,
'bidder2': setup.qu.bidder,
'escort': setup.qu.escort,
},
{ /* actors */
'target': setup.unitgroup.missingslavers,
},
[ /* costs */
setup.qc.MoneyNormal(-0.5),
],
'QuestFatefulAuction', /* passage description */
setup.qdiff.easy35, /* difficulty */
[ /* outcomes */
[
'QuestFatefulAuctionCrit',
[
setup.qc.Slaver('target'),
setup.qc.RemoveFromUnitGroup('target'),
],
],
[
'QuestFatefulAuctionSuccess',
[
setup.qc.TraumatizeRandom('target', setup.TRAUMA_MEDIUM),
setup.qc.TraumatizeRandom('target', setup.TRAUMA_MEDIUM),
setup.qc.Slaver('target'),
setup.qc.RemoveFromUnitGroup('target'),
],
],
[
'QuestFatefulAuctionFailure',
[
setup.qc.Trait('target', setup.trait.per_masochistic),
setup.ch.gapeanus('target'),
setup.ch.gapevagina('target'),
setup.qc.Slaver('target'),
],
],
[
'QuestFatefulAuctionDisaster',
[
setup.qc.RemoveFromUnitGroup('target'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.rescue, 30],
],
[ /* prerequisites to generate */
setup.qres.QuestUnique(),
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
],
)>><p>
You have been invited to an underground slave auction in the<<lore location_lucgate>>.
Only this time, you are invited as a bidder, instead of a seller.
Normally, such offer would not interest you or your company, but on a closer
look at the slaves being offered, you notice something very interesting.
<<rep $g.target>> is one of the items on sale --- surely you remember
<<rep $g.target>>? <<They $g.target>> was one of your slavers who
tragically disappeared some time ago.</p>
<p>
You spread the great news to all members of your company. They are all
cheering for you to send a team into this important mission.
This could be your chance to rescue <<rep $g.target>> from slavery!
</p><p>
Your slavers enthusiastically went to the<<lore location_lucgate>>, with the sole goal
of rescuing their former friend.
But first, they need to be able to present themselves for the auction.
<<rep $g.escort>> will <<uadv $g.escort>> lead them into the auction, and hopefully
<<rep $g.escort>>'s grace will be enough to convince the guards to let
you in. Once they are in, they will also need to ensure that they win
the bid for <<rep $g.target>>
</p>
<p>
Your slavers lie in wait as one by one, other slaves are being auctioned.
There were the standard fare of human slaves freshly captured from the
vale, and occasionally rather exotic slaves such as a former orc
warlord from the eastern desert.
Until finally, <<rep $g.target>> is being auctioned.
</p><<include 'QuestFatefulAuctionCommon'>>
<p>
Via careful bidding, <<rep $g.bidder1>> and <<rep $g.bidder2>> were able
to outbid all the other competitors to win <<rep $g.target>> back.
Upon seeing <<their $g.target>> buyer, <<rep $g.target>> was completely
taken by surprise, and soon a tearful reunion took place in the auction hall.
Together, they came back victorious into your fort.
</p>
<p>
Luckily, it seems that the experience of being a slave did not affect <<rep $g.target>>.
<<They $g.target>> is as fit both mentally and physically as <<they $g.target>> was before.
</p><<include 'QuestFatefulAuctionCommon'>>
<p>
<<rep $g.bidder1>> and <<rep $g.bidder2>> were able
to outbid all the other competitors to win <<rep $g.target>> back.
But upon seeing <<them $g.target>>, your slavers realize that being a slave
has taken a permanent toll on <<rep $g.target>>.
Soon a tearful reunion both of joy and regret took place in the auction hall.
Together, they came back to your fort.
</p><<include 'QuestFatefulAuctionCommon'>>
<p>
<<rep $g.bidder1>> and <<rep $g.bidder2>> were able
to outbid all the other competitors to win <<rep $g.target>> back.
But upon seeing <<them $g.target>>, your slavers realize that being a slave
has taken a massive toll on <<=$g.target.rep()>>.
Soon a tearful reunion both of joy and regret took place in the auction hall.
Together, they came back to your fort.
</p><<include 'QuestFatefulAuctionCommon'>>
<p>
<<rep $g.bidder1>> and <<rep $g.bidder2>> betted sloppily during the auction.
At the end, they were unable to outbid a competitor, who bought <<rep $g.target>>
to disappear in his farm and never to be seen again.
</p><<run new setup.QuestTemplate(
'fine_dining', /* key */
'Fine Dining', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator1': setup.qu.negotiator,
'negotiator2': setup.qu.negotiator,
'trainer': setup.qu.slavetrainer,
'chair': setup.qu.slavefurniture,
},
{ /* actors */
},
[ /* costs */
],
'QuestFineDining', /* passage description */
setup.qdiff.normal38, /* difficulty */
[ /* outcomes */
[
'QuestFineDiningCrit',
[
setup.qc.MoneyCrit(1.4),
],
],
[
'QuestFineDiningSuccess',
[
setup.qc.MoneyNormal(1.4),
],
],
[
'QuestFineDiningFailure',
[
],
],
[
'QuestFineDiningDisaster',
[
setup.qc.Injury('chair', 5),
setup.qc.Trait('chair', null, setup.trait.training_endurance_master.getTraitGroup()),
],
],
],
[[setup.questpool.city, 50],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_endurance_basic]),
], /* prerequisites to generate */
)>><p>
There exists a luxurious area even in the undercity of Lucgate.
Of particular interest is an established high-end dining facility, which is often
used as a meetingplace to conduct business.
However, the dining facility is unlike any others --- all of its furniture
are actually slaves who has been trained to live as furnitures.
The patrons are encouraged to bring their own furniture to the dining facility.
</p>
<p>
An aspiring businesswoman has approached your company, asking for an escort to
guard her during the meeting.
She promises more pay than usual, but you must supply the furniture to bring along.
You can send your slavers are an appropriately trained slave to the meeting, if you choose.
</p><p>
Your slavers trained <<rep $g.chair>> as best as they can and prepare themselves for the meeting.
Even while donning their best outfits, your outfit still look awkwardly out of place in the restaurant.
<<if $settings.getGenderPreference(setup.job.slaver).trait_key == 'male'>>
A naked muscularly built waiter
<<else>>
A naked hugely endowed milf
<</if>>
greets you as your hostess --- it appears the establishment even studied their customers to pick the hostess,
as you can observe that the businesswoman is slightly flustered.
The establishment uses slaves liberally as decoration --- one of them is hanged on a wall fully displaying
her genitals as decorations, while another is serving as a mat while licking all boots stepping on the slave.
The hostess escorted
your slavers and their client and finally they take a seat on the chair-slaves surrounding a round table.
They then await for their business partners to come to the negotiation while partaking the sight of the establishment.
</p><<include "QuestFineDiningCommon">>
<p>
With the help of <<rep $g.negotiator1>> and <<rep $g.negotiator2>>, the meeting was conducted in a highly
satisfactory manner. Throughout the negotiation, your slavers were able to concentrate despite the constant
sucking by complimentary under-the-table set of oral slaves.
The meeting conducted, the businesswoman promises to send your company great rewards for such a splendid escort.
</p>
<p>
Once the meeting is over,
<<rep $g.trainer>> beams <<uadv $g.trainer>> on <<rep $g.chair>>'s mangificent endurance display during
the entire commotion, acting as a chair almost flawlessly.
As a reward, your slavers allows <<rep $g.chair>> to go under the table to suck on some of the willing
clients for a while before returning home.
</p><<include "QuestFineDiningCommon">>
<p>
With the help of <<rep $g.negotiator1>> and <<rep $g.negotiator2>>, the meeting was conducted
in an alright manner.
There were few mishaps here and there, but overall your slavers were able to guide the exchange to a favorable
end.
When asked why, your slavers apparently blamed the overly enthusiastic slaves hidden under the table that
continuously service the customers.
Still, the meeting went well enough that the businesslady promises to send the promised reward later.
</p>
<p>
Once the meeting is over,
<<rep $g.chair>> who was used as a chair throughout the meeting appears almost exhausted.
Petting the slave, your slavers then <<uadv $g.trainer>> reward <<them $g.chair>> by allowing the pet to
either suck their dicks or lick their holes.
</p><<include "QuestFineDiningCommon">>
<p>
Unfortunately, the meeting did not go as planned, and both parties furiously exit the establishment
earlier than planned.
The promised reward were never sent, and your slavers had to return back to your compound with nothing
to show for it. For such terrible performance your slave
<<rep $g.chair>> was punished by being edged for 4 continuous hours before being allowed to crawl back
home.
</p><<include "QuestFineDiningCommon">>
<p>
Howeve, in the middle of the meeting, <<rep $g.chair>>, who was being used as a chair by your slave,
collapsed from exhaustion and causing a distraction in the meeting.
The collapse brought a domino effect which ultimately render the negotiation in a complete failure.
The businesswoman scoffs at your slavers and exit without the reward.
</p>
<p><<rep $g.chair>>'s endurance training seems to have been lost and the training has to be repeated,
after <<they $g.chair>> fully recover from <<their $g.chair>> injuries.
</p><<set _santa = new setup.UnitCriteria(
null, /* key */
'Santa', /* title */
[
setup.trait.per_cruel,
setup.trait.per_generous,
setup.trait.per_playful,
setup.trait.skill_flight,
], /* critical traits */
[
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_thrifty,
setup.trait.per_serious,
setup.trait.muscle_weak,
setup.trait.magic_dark,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
brawn: 2.0,
social: 1.0,
}
)>>
<<set _elf = new setup.UnitCriteria(
null, /* key */
"Santa's Elf", /* title */
[
setup.trait.race_elf,
setup.trait.per_generous,
setup.trait.per_honest,
], /* critical traits */
[
setup.trait.race_humankingdom,
setup.trait.race_humansea,
setup.trait.race_humandesert,
setup.trait.race_humanvale,
setup.trait.per_deceitful,
setup.trait.per_thrifty,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
intrigue: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'gift_exchange', /* key */
'Gift Exchange', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'santa': [_santa, 2],
'elf1': [_elf, 0.5],
'elf2': [_elf, 0.5],
'present': setup.qu.slavegeneric,
},
{ /* actors */
'gift': setup.unitgroup.quest_all_noble,
},
[ /* costs */
],
'QuestGiftExchange', /* passage description */
setup.qdiff.hard31, /* difficulty */
[ /* outcomes */
[
'QuestGiftExchangeCrit',
[
setup.qc.MissingSlave('present'),
setup.qc.Slave('gift'),
setup.qc.MoneyCrit(),
],
],
[
'QuestGiftExchangeSuccess',
[
setup.qc.MissingSlave('present'),
setup.qc.MoneyNormal(2.5),
],
],
[
'QuestGiftExchangeFailure',
[
setup.qc.MissingSlave('present'),
setup.qc.MoneyNormal(0.5),
],
],
[
'QuestGiftExchangeDisaster',
[
setup.qc.MissingSlave('present'),
setup.qc.MoneyNormal(-1),
],
],
],
[[setup.questpool.city, 50],], /* quest pool and rarity */
[
setup.qres.HasSlave(),
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
On the night of certain months, there is a tradition in the<<lore location_lucgate>>
where people blindly exchange gifts with strangers.
While traditionally people exchange standard gifts such as food or
cooking tools, some particularly adventurous circle of people in the city
use the opportunity to exchange slaves packed prettily in a box.
You have been invited into such an exchange --- if you are willing to part
with one of your slaves, the reward could be very worth the price.
</p>
<p>
<<dangertext 'WARNING'>>: The slave you sent on this quest will be gone forever,
shipped as a gift to some unknown conoisseur...
</p><p>
<<rep $g.present>> was fully bound and blindfolded from head to toe,
before being inserted to a holey box and tied nicely with a ribbon.
<<They $g.present>> is then shipped by your slavers to be the new plaything
of some lucky owner.
A few weeks after the shipment, you receive a huge package in front of your
fort door.
</p><<include 'QuestGiftExchangeCommon'>>
<p>You checked and examine the box.
There was no sender on the box, the only note being "Use Well!".
Sensing danger, you order your other slavers to prepare besides you as
you open the box.</p>
<p>
As you start to unwrap the box, a sudden move from the box caught you by surprise.
Could there be some kind of trap inside? You open it further when you start to hear
moaning and breathing sounds coming from inside. This makes you and your slavers
eager to unwrap it faster before all the wrapping are undone and your present
lies in bondage before you --- fully blindfolded and bound while all of its holes are
plugged by festive-looking sex toys.
Such a noble specimen of a surprise!
</p><<include 'QuestGiftExchangeCommon'>>
<p>You checked and examine the box,.
There was no sender on the box, the only note being "Use Well!".
Sensing danger, you order your other slavers to prepare besides you as
you open the box.</p>
<p>
You unwrap the box slowly but carefully, not wishing whatever danger inside to
catch you by surprise.
But there was no such surprise --- at the end, the grand golden statue of
yourself stands before you in its full glory.
You cannot fathom how such statue of your liking can come to exist,
given that you have never really showed your face to any of the game's participants.
While you've contemplated keeping the statue in your office, you feel the money
you can get by smelting the statue and selling the gold might be of more interest
to your business at the moment.
</p><<include 'QuestGiftExchangeCommon'>>
<p>You checked and examine the box,.
There was no sender on the box, the only note being "Use Well!".
Sensing danger, you order your other slavers to prepare besides you as
you open the box.</p>
<p>
You unwrap the box slowly but carefully, not wishing whatever danger inside to
catch you by surprise.
But inside the box was another box, and inside it was another box,
until in the middle of those boxes were a small lump of gold,
which is clearly not enough to compensate for <<rep $g.present>>'s value.
You ponder who could have dared to send such a measly gift in this dangerous game,
as there are rumors that people whose gift are subpar tend to receive misfortune
in the days come.
</p><<include 'QuestGiftExchangeCommon'>>
<p>You checked and examine the box,.
There was no sender on the box, the only note being "Use Well!".
Sensing danger, you order your other slavers to prepare besides you as
you open the box.</p>
<p>
You unwrap the box slowly, but you accidentaly shaked the box, which
then proceeds to violently explodes.
Miraculously, you and your slavers are unharmed, but a significant
damage has been done to your fort, which costs money to repair.
</p>
<p>
Perhaps sending such a subpar slave as <<rep $g.present>> was not a good idea after all.
</p><<run new setup.QuestTemplate(
'head_hunter', /* key */
'Head Hunter', /* Title */
'darko', /* author */
['city', 'order'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'whoreblowjob': setup.qu.whoreblowjob,
'slavetrader': setup.qu.slavetrader,
'slavetrainer': setup.qu.slavetrainer,
},
{ /* actors */
},
[ /* costs */
],
'QuestHeadHunter', /* passage description */
setup.qdiff.normal34, /* difficulty */
[ /* outcomes */
[
'QuestHeadHunterCrit',
[
setup.qc.SlaveOrderHeadHunter(/* is crit = */ true),
],
],
[
'QuestHeadHunterSuccess',
[
setup.qc.SlaveOrderHeadHunter(),
],
],
[
'QuestHeadHunterFailure',
[
setup.qc.SlaveOrderHeadHunter(setup.qdiff.easy29),
],
],
[
'QuestHeadHunterDisaster',
[
setup.qc.SlaveOrderHeadHunter(setup.qdiff.easiest29),
],
],
],
[[setup.questpool.city, 50],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.marketingoffice),
], /* prerequisites to generate */
)>><p>
Among the many guilds in the<<lore location_lucgate>>, the Head-Hunter guild is famous for being
filthy rich.
The Head-Hunter guild, despite their name, works on the entertainment field,
supplying entertainment for various higher-end nobles as well as well paying merchants.
Entering the head-hunter guild as an entertainer is a dream of many, but they are notoriously
picky about picking their employees.
</p>
<p>
...or that's what seems to be on the surface. In fact, the many "employees" of the
Head-Hunter guilds are in all technical terms slaves to the higher circle of the guild.
The "entertainment" they provide are usually lending these employees to the guests to use
as they see fit --- however, they won't be called Head-Hunter without actually specializing
their employees in the art of giving head.
</p>
<p>
If your slavers can convince the boss that you can headhunt for more "employees",
there is a potentially great money to be made.
To prove your capability of finding slaves that gives good head, the standard demand
is for one of your slavers to actually able to give a good head, so bringing one rather slutty
slaver is a requirement.
You must be careful with this quest, however, for deals
involving the head-hunters are not so easily broken. If you are offering your services,
you are committing to actually sending the specific slave that they will be requesting.</p><p>
Upon entering the office and talking to the reception, they escorted
<<rep $g.whoreblowjob>> for <<their $g.whoreblowjob>> "interview", while the
rest of your slavers wait.
Some time later, your slavers were called upstairs to talk with one of the
higher ups.
They enter his office, a sparsely decorated office with the desk as the centerpiece.
The higher up are dressed formally seated on the desk and seemingly busy with an endless
amount of paperwork. Upon seeing your slavers, he greets them, but your slavers can't
shake the feeling that there is something off about his demeanor.
Indeed, as your slavers grow closer, they can hear some kind of sucking noises coming from
under the desk.
But they know better than to ask.
</p><<include 'QuestHeadHunterCommon'>>
<p>
Apparently, he offers your company a really good deal for a slave.
<<rep $g.whoreblowjob>> apparently did a wonderful job with <<their $g.whoreblowjob>>
"interview", which impresses him greatly.
Once the negotiations are over and your slavers escorted to the exit, they regroup with
a <<rep $g.whoreblowjob>> who looks worse for wear, but <<uadv $g.whoreblowjob>> refused to talk about the interview.
</p><<include 'QuestHeadHunterCommon'>>
<p>
He bargained with your slavers which eventually reached an adequate deal for selling a slave.
Throughout the bargaining process, the sucking noises never stop, but your slavers did their
best to put it at the back of their mind.
Once the negotiations are over and your slavers escorted to the exit, they regroup with
a <<rep $g.whoreblowjob>> who looks worse for wear, but <<uadv $g.whoreblowjob>> refused to talk about the interview.
</p><<include 'QuestHeadHunterCommon'>>
<p>
He deal a hard bargain with your slavers which eventually results in a sub-par deal for selling a slave.
Still, it is in your best interest for your company to fulfill the deal, or else you need to actually
pay for wasting his time.
Once the negotiations are over and your slavers escorted to the exit, they regroup with
a <<rep $g.whoreblowjob>> who looks worse for wear, but <<uadv $g.whoreblowjob>> refused to talk about the interview.
</p><<include 'QuestHeadHunterCommon'>>
<p>
He dealt a really hard bargain with your slavers which eventually results in a
terrible par deal for your company.
In addition to the sucking noises, apparently they could also hear zapping noises,
and what appears to be a displeased grunt, but they know better than to clarify.
Still, it is in your best interest for your company to fulfill the deal, or else you need to actually
pay for wasting his time.
Once the negotiations are over and your slavers escorted to the exit, they regroup with
a <<rep $g.whoreblowjob>> who looks worse for wear, but refused to talk about the interview.
Still, based on the new bruises on <<rep $g.whoreblowjob>>, your slavers do not have to think
too hard to know what actually happened.
</p><<set _desc = 'was a human cow installed in one of the factories in the undercity of Lucgate'>>
<<set _infiltrator = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* title */
[
setup.trait.bg_thief,
setup.trait.magic_wind,
setup.trait.per_nimble,
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.per_loner,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.race_humankingdom,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.per_gregarious,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
intrigue: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'milk_factory_kidnap_female', /* key */
'Factory: Kidnap Female Specimen', /* Title */
'darko', /* author */
['city', 'unit', 'femaleonly'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
'cow': setup.unitgroup.quest_humankingdom_cow_female,
'bigcow': setup.unitgroup.quest_humankingdom_cow_female_titanic,
},
[ /* costs */
],
'QuestMilkFactoryKidnapFemale', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryKidnapFemaleCrit',
[
setup.qc.Slave('bigcow', _desc),
],
],
[
'QuestMilkFactoryKidnapFemaleSuccess',
[
setup.qc.Slave('cow', _desc),
],
],
[
'QuestMilkFactoryKidnapFemaleFailure',
[
],
],
[
'QuestMilkFactoryKidnapFemaleDisaster',
[
setup.qc.Injury('seducer', 4),
setup.ch.gapeanus('seducer'),
setup.ch.gapevagina('seducer'),
],
],
],
[], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to attempt to steal some of the female slaves.
You can follow-up on this idea by sending a team of slavers there.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>
Your slavers, remembering their original goal, scoured the slaves looking for any
particularly valuable slave. They found a slave with breasts so gigantic it
cannot be natural ---
using the control panel, they released the slave from the machine --- they dildo
gag for the first time in years were pulled out of their mouths, while
from beneath their rear two huge dildos were retracted down, leaving both their anus and vagina gaping.
Your slavers then grab the collapsed slave and with some effort managed to smuggle
her out. <<rep $g.bigcow>> eventually arrive at your fort, ready to serve her new
purpose from hollowed-up milk slave into whatever you feel is appropriate for her.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>
Your slavers, remembering their original goal, scoured the slaves looking for any
particularly valuable slave. They found a slave with adequately large breasts.
Using the control panel, they released the slave from the machine --- they dildo
gag for the first time in years were pulled out of their mouths, while
from beneath their rear two huge dildos were retracted down, leaving both their anus and their vagina gaping.
Your slavers then grab the collapsed slave and with some effort managed to smuggle
her out. <<rep $g.cow>> eventually arrive at your fort, ready to serve her new
purpose from hollowed-up milk slave into whatever you feel is appropriate for her.
</p><p>
Unfortunately, <<rep $g.seducer>> were not able to fully distract the guard.
When <<rep $g.infil1>> and <<rep $g.infil2>> tried to sneak into the factory,
the guard took notice and your slavers have no choice but to retreat back to where
they came.
</p><p>
<<rep $g.seducer>> attempted to distract the guard, while
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
But the guard has different idea --- after inviting <<rep $g.seducer>> inside,
the guard knocks <<them $g.seducer>> out, and install <<them $g.seducer>> on one
of the many milking machines in the factory.
Ultimately,
<<rep $g.infil1>> and <<rep $g.infil2>> to their surprise found
<<rep $g.seducer>> installed on one of the machines ---
moaning in pain from the huge dildo assaulting <<their $g.seducer>> ass.
Your slavers managed to free <<rep $g.seducer>> and considering the danger,
decided to leave without doing anything else.
<<rep $g.seducer>> will need some time to rest from such ordeal.
</p><<set _desc = 'was a human cow installed in one of the factories in the undercity of Lucgate'>>
<<set _infiltrator = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* title */
[
setup.trait.bg_thief,
setup.trait.magic_wind,
setup.trait.per_nimble,
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.per_loner,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.race_humankingdom,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.per_gregarious,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
intrigue: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'milk_factory_kidnap_male', /* key */
'Factory: Kidnap Male Specimen', /* Title */
'darko', /* author */
['city', 'unit', 'maleonly'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
'cow': setup.unitgroup.quest_humankingdom_cow_male,
'bigcow': setup.unitgroup.quest_humankingdom_cow_male_titanic,
},
[ /* costs */
],
'QuestMilkFactoryKidnapMale', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryKidnapMaleCrit',
[
setup.qc.Slave('bigcow', _desc),
],
],
[
'QuestMilkFactoryKidnapMaleSuccess',
[
setup.qc.Slave('cow', _desc),
],
],
[
'QuestMilkFactoryKidnapMaleFailure',
[
],
],
[
'QuestMilkFactoryKidnapMaleDisaster',
[
setup.qc.Injury('seducer', 4),
setup.ch.gapeanus('seducer'),
setup.ch.gapevagina('seducer'),
],
],
],
[], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to attempt to steal some of the male slaves.
You can follow-up on this idea by sending a team of slavers there.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>
Your slavers, remembering their original goal, scoured the slaves looking for any
particularly valuable slave. They found a slave with dick and balls so gigantic it
cannot be natural ---
using the control panel, they released the slave from the machine --- they dildo
gag for the first time in years were pulled out of their mouths, while
from beneath their ass a huge dildo were retracted down, leaving their anus gaping.
Your slavers then grab the collapsed slave and with some effort managed to smuggle
him out. <<rep $g.bigcow>> eventually arrive at your fort, ready to serve his new
purpose from hollowed-up milk slave into whatever you feel is appropriate for him.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>
Your slavers, remembering their original goal, scoured the slaves looking for any
particularly valuable slave. They found a slave with adequately large dick and balls.
Using the control panel, they released the slave from the machine --- they dildo
gag for the first time in years were pulled out of their mouths, while
from beneath their ass a huge dildo were retracted down, leaving their anus gaping.
Your slavers then grab the collapsed slave and with some effort managed to smuggle
him out. <<rep $g.cow>> eventually arrive at your fort, ready to serve his new
purpose from hollowed-up milk slave into whatever you feel is appropriate for him.
</p><p>
Unfortunately, <<rep $g.seducer>> were not able to fully distract the guard.
When <<rep $g.infil1>> and <<rep $g.infil2>> tried to sneak into the factory,
the guard took notice and your slavers have no choice but to retreat back to where
they came.
</p><p>
<<rep $g.seducer>> attempted to distract the guard, while
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
But the guard has different idea --- after inviting <<rep $g.seducer>> inside,
the guard knocks <<them $g.seducer>> out, and install <<them $g.seducer>> on one
of the many milking machines in the factory.
Ultimately,
<<rep $g.infil1>> and <<rep $g.infil2>> to their surprise found
<<rep $g.seducer>> installed on one of the machines ---
moaning in pain from the huge dildo assaulting <<their $g.seducer>> ass.
Your slavers managed to free <<rep $g.seducer>> and considering the danger,
decided to leave without doing anything else.
<<rep $g.seducer>> will need some time to rest from such ordeal.
</p><<set _infiltrator = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* title */
[
setup.trait.bg_thief,
setup.trait.magic_wind,
setup.trait.per_nimble,
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.per_loner,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.race_humankingdom,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.per_gregarious,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
intrigue: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'milk_factory_raid', /* key */
'Factory: Raid', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
},
[ /* costs */
],
'QuestMilkFactoryRaid', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryRaidCrit',
[
setup.qc.MoneyCrit(),
],
],
[
'QuestMilkFactoryRaidSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestMilkFactoryRaidFailure',
[
],
],
[
'QuestMilkFactoryRaidDisaster',
[
setup.qc.Injury('seducer', 4),
setup.ch.gapeanus('seducer'),
setup.ch.gapevagina('seducer'),
],
],
],
[], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to infiltrate the factory and steal whatever valuables you can get.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>With raiding as their primary goal, your slavers looked around for expensive-looking
objects to steal.
There, they located a newly installed slave who still retained their sanity.
Released from the bondage, the slave cough and gag only for your slavers to regag the slave
before smuggling them out.
They sold the slave in the undercity before returning to your fort with tidy amount of profit.
</p><p>
While <<rep $g.seducer>>
<<uadv $g.seducer>>
distracted the guard,
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
The room they first entered contained samples of the factory's product:
a sealed bottle containing white liquid labeled milk.
It seems that the popular Fresh-Milk brand milk is produced here.
Remembering their goal, they choose the most suspicious-looking corridor
to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seems to be humans, each seated on
a chair. Their nipples are all covered by what seems to be suction pipe,
while their mouths are filled with a large dildo-shaped pipe extending down
their throat.
The dicks of the male slaves are all covered in some kind of suction pump.
As your slavers went by, one of these pumps suddenly activate and you can see
white liquid being absorbed from the slave's dick into the pipe.
Meanwhile, the pipes continuously suck the female slaves' breasts.
</p>
<p>With raiding as their primary goal, your slavers looked around for expensive-looking
objects to steal.
They settled with stealing as many of the industrial equipment as possible, which
should fetch a decent sum in the market in the city.
Of course, they need to be careful with the buyer lest they question where your slavers
got their hands on such specific machineries.
</p><p>
Unfortunately, <<rep $g.seducer>> were not able to fully distract the guard.
When <<rep $g.infil1>> and <<rep $g.infil2>> tried to sneak into the factory,
the guard took notice and your slavers have no choice but to retreat back to where
they came.
</p><p>
<<rep $g.seducer>> attempted to distract the guard, while
<<rep $g.infil1>> and <<rep $g.infil2>> sneaked into the factory.
But the guard has different idea --- after inviting <<rep $g.seducer>> inside,
the guard knocks <<them $g.seducer>> out, and install <<them $g.seducer>> on one
of the many milking machines in the factory.
Ultimately,
<<rep $g.infil1>> and <<rep $g.infil2>> to their surprise found
<<rep $g.seducer>> installed on one of the machines ---
moaning in pain from the huge dildo assaulting <<their $g.seducer>> ass.
Your slavers managed to free <<rep $g.seducer>> and considering the danger,
decided to leave without doing anything else.
<<rep $g.seducer>> will need some time to rest from such ordeal.
</p><<run new setup.QuestTemplate(
'pet_contest', /* key */
'Pet Contest', /* Title */
'darko', /* author */
['city', 'item', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'head': setup.qu.training_head,
'trainer1': setup.qu.slavetrainer,
'trainer2': setup.qu.slavetrainer,
'pet': [setup.qu.slavepet, 2],
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.25),
],
'QuestPetContest', /* passage description */
setup.qdiff.hard35, /* difficulty */
[ /* outcomes */
[
'QuestPetContestCrit',
[
setup.qc.Equipment(setup.equipmentpool.pet_good),
setup.qc.MoneyNormal(1.0),
],
],
[
'QuestPetContestSuccess',
[
setup.qc.MoneyNormal(1.4),
],
],
[
'QuestPetContestFailure',
[
],
],
[
'QuestPetContestDisaster',
[
setup.qc.Injury('pet', 2),
setup.qc.Trait('pet', null, setup.trait.training_pet_master.getTraitGroup()),
],
],
],
[[setup.questpool.city, 50],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_pet_basic]),
], /* prerequisites to generate */
)>><p>
The Kingdom of Tor has forbidden people slavery in any form since over ten years ago.
But before, slaves were everywhere in the kingdom. Back then, having a humanlike pet
was considered one of the many signs of leading a luxurious life.
Once the slave ban were passed, humanlike pets were immediately outlawed, but that does
not mean that these pets were completely gone.
Nowadays, some citizens are keeping humanlike pet as a secret, and underground pet contests
are held often.
</p>
<p>
As a proud owner of a humanlike pet, you have been invited to join one of such contests.
The contest will showcase these pets their pet-like abilities from the basic ones
such as playing fetch, up into the harder tasks such as their ability to take bone down
their throat while wagging their tail enthusiastically.
The grand prize is a tantalizing golden pet gear which you can never obtain anywhere else.
But competition is sure to be fierce, so make sure to bring your best pet!
</p><p>
Your pet <<rep $g.pet>> had barked, played fetch, choked on a bone and licked the judges' boots clean.
<<if $g.pet.isHasTrait(setup.trait.per_nimble)>>It even at some point managed to choke on its own bone.<</if>>
The judges were completely impressed by your pet and at the end of the contest, your pet was selected
as the winner of the competition! You proudly bring your pet <<rep $g.pet>> on all fours to sit
on the podium, while <<rep $g.head>>
<<uadv $g.head>>
collect the grand prize, a golden pet gear suitable for high-class
pets, alongside a generous amount of money.
The pets standing in the podium were made available for public use for an hour, before they returned to their
owners and return home together.
Back at the fort, you pet <<rep $g.pet>>'s head before sending it back to its kennel.
</p><p>
Your pet <<rep $g.pet>> had barked, played fetch, choked on a bone and licked the judges' boots clean,
but there was a hint of reluctance there that is visible to both your slavers and the judges.
As a result, your pet did not manage to win the contest.
Still, at the end of such contest, your slavers made your pet available for general use, which obtains
it a lot of tips<<if $g.pet.isHasTrait(setup.trait.eq_plug_anus) || $g.pet.isHasTrait(setup.trait.eq_plug_vagina)>>, especially from the adventurous young man who tried to double penetrate your pet's
hole with the plug still inside<</if>>.
Back at the fort, you pet <<rep $g.pet>>'s head before sending it back to its kennel.
</p><p>
Your pet <<rep $g.pet>> had barked, played fetch, choked on a bone and licked the judges' boots clean,
but there was a clear reluctance during the act that are obvious to both your slavers and the judges.
As a result, your slavers were humiliated and forced to return with your pet
back to the fort early.
Such behavior from a pet surely deserve corrective punishment, and it is up to you how to deliver it.
Perhaps substituting cum for its food for a week would do.
</p><p>
Unfortunately, your pet were the target of another rowdy's pet attack. The big pet orc wearing a chastity belt
assaulted your pet out of nowhere, leaving your pet injured and shaken from the experience.
The pet orc's owner is nowhere to be seen --- perhaps it is a stray?
</p><<run new setup.Title(
'quest_knight_in_training', /* key */
'Knight-in-Training', /* name */
'Undergoing training to become a proper knight: chivalrious, upstanding, and just', /* name */
'is currently training to be a chivalrious and upstanding knight', /* unit description */
0, /* slave value */
{},
)>>
<<run new setup.Title(
'quest_knight_in_training_squire', /* key */
'Squire', /* name */
'Was in service to a knight at some point in their past', /* name */
'was in service to a knight at some point in their life', /* unit description */
1000, /* slave value */
{},
)>>
<<set _knight = new setup.UnitCriteria(
null, /* key */
'Knight', /* title */
[
setup.trait.bg_knight,
setup.trait.per_brave,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.race_orc,
setup.trait.race_werewolf,
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.race_demon,
setup.trait.per_cautious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_deceitful,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_alchemy,
setup.trait.skill_flight,
setup.trait.corrupted,
setup.trait.corruptedfull,
], /* disaster traits */
[
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.bg_knight),
setup.qres.NoTitle('quest_knight_in_training_complete'),
], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'to_be_a_knight', /* key */
'To Be a Knight', /* Title */
'darko', /* author */
['city', 'unknown',], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'knight': _knight,
'squire1': setup.qu.squire,
'squire2': setup.qu.squire,
},
{ /* actors */
},
[ /* costs */
],
'QuestToBeAKnight', /* passage description */
setup.qdiff.hard33, /* difficulty */
[ /* outcomes */
[
'QuestToBeAKnightCrit',
[
setup.qc.AddTitle('knight', 'quest_knight_in_training'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 150),
],
],
[
'QuestToBeAKnightSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestToBeAKnightFailure',
[
setup.qc.Injury('knight', 2),
],
],
[
'QuestToBeAKnightDisaster',
[
setup.qc.Injury('knight', 4),
],
],
],
[[setup.questpool.city, 80],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('quest_knight_in_training'),
], /* prerequisites to generate */
)>><p>
One of the most respected job in the Kingdom of Tor is to be a knight in service
to the crowns. Unlike most other kingdoms, these knights usually live their own lives
except on some occasions where their service are required.
While usually these knights are chosen from soldiers with long service history,
during times of need, the kingdom may occasionally call upon the populace to elect
new knights.
</p>
<p>
One such occasion is currently happening, and the town crier repeatedly
informs everyone that the winner of an upcoming joust would be selected as
a knight candidate. It could be an amusing joke to have one of your slavers
be chosen as a knight candidate --- still, it might be worth the attempt.
You would need to send one of your slavers as the main competitor, with two other
slavers serving as their "squires".
</p><p>
Your slavers took a week training for the competition --- after all, <<rep $g.knight>>
was not really used to riding a horse.
The next week, your slavers were as ready as they could possibly be for the joust.
Your slavers, being considered outsiders, were given the last seed in the tournament,
meaning they had the bad luck to face a former champion in their first round.
</p><<include 'QuestToBeAKnightCommon'>>
<p>
<<rep $g.knight>>
<<uadv $g.knight>>
readies <<their $g.knight>> horse and the lance lent by the competition,
while <<their $g.knight>> foe stands on the opposite side of the field.
They wait for the signal before charging in, and the result went out in a flash of
blood and screm.
<<rep $g.knight>> were able to knock out the foe in one clean hit, earning
<<them $g.knight>> the adorations of the viewers.
The rest of the competitors prove to be pushovers for <<rep $g.knight>>, and
<<rep $g.knight>> was crowned champions. It could be just <<rep $g.knight>>'s
imaginations, but there were a ghost of a beautiful young lady who kept watching <<rep $g.knight>>
from afar. Maybe they will meet again sometime, perhaps in a more secluded place.
</p>
<p>
<<rep $g.knight>> accepts <<their $g.knight>> price, which is actually not a full knight title,
but the honor of becoming a knight-in-training. Once <<they $g.knight>> manage to prove <<themselves $g.knight>>
shall the full title of a knight be granted.
</p><p>
<<rep $g.knight>>
<<uadv $g.knight>>
readies <<their $g.knight>> horse and the lance lent by the competition,
while <<their $g.knight>> foe stands on the opposite side of the field.
They wait for the signal before charging in, and the result went out in a flash of
blood and screm.
But it turned out that both <<rep $g.knight>> and <<their $g.knight>> foe was
knocked out, earning the match a draw.
Unfortunately, the tournament rules out that in such case, the higher seed shall be
declared the winner, which ends <<rep $g.knight>>'s hopeful knight career abruptly early.
</p>
<p>
At the end of the joust, the honorable foe who ended up winning the competition
appeared before <<rep $g.knight>>, apologized and gave <<rep $g.knight>> some money
for the dishonor.
</p><p>
<<rep $g.knight>>
<<uadv $g.knight>>
readies <<their $g.knight>> horse and the lance lent by the competition,
while <<their $g.knight>> foe stands on the opposite side of the field.
They wait for the signal before charging in, and the result went out in a flash of
blood and screm.
Once the dust settled, the only one remained seated on their horse is the opponent,
as <<rep $g.knight>> was knocked out cleanly from their horse.
This unfortunately ends <<rep $g.knight>>'s hopeful knight career abruptly early,
not even reaching the stage where wenches come in!
<<rep $g.knight>> sustained minor injuries which need some time to heal.
</p><p>
<<rep $g.knight>>
<<uadv $g.knight>>
readies <<their $g.knight>> horse and the lance lent by the competition,
while <<their $g.knight>> foe stands on the opposite side of the field.
They wait for the signal before charging in, and the result went out in a flash of
blood and screm.
A loud crack followed by a thump and the unconscious body of <<rep $g.knight>> marks
the opponent as the clear victor.
<<rep $g.squire1>> and <<rep $g.squire2>> hurriedly attend to <<rep $g.knight>>'s
side, which managed to save <<their $g.knight>> life. Still, the injury was terrible,
and <<rep $g.knight>> would need a lot of time to recover.
</p><<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.race_humankingdom,
setup.trait.race_humanvale,
setup.trait.race_humandesert,
setup.trait.race_humansea,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.race_orc,
setup.trait.race_werewolf,
],
setup.qu.trader,
)
)>>
<<run new setup.QuestTemplate(
'trading_mission_city', /* key */
'Trading Mission: City of Lucgate', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
3, /* quest expiration weeks */
{ /* roles */
'trader1': _trader,
'trader2': _trader,
'negotiator': setup.qu.negotiator,
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.5),
],
'QuestTradingMissionCity', /* passage description */
setup.qdiff.easy28, /* difficulty */
[ /* outcomes */
[
'QuestTradingMissionCityCrit',
[
setup.qc.MoneyNormal(3),
setup.qc.Favor('humankingdom', 50),
],
],
[
'QuestTradingMissionCitySuccess',
[
setup.qc.MoneyNormal(1.75),
],
],
[
'QuestTradingMissionCityFailure',
[
setup.qc.MoneyNormal(0.1),
],
],
[
'QuestTradingMissionCityDisaster',
[
setup.qc.Injury('negotiator', 2),
setup.qc.Injury('trader1', 2),
setup.qc.Injury('trader2', 2),
],
],
],
[[setup.questpool.city, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The<<lore location_lucgate>> is the capital city of the Kingdom of Tor. It is burstling
with activities, ranging from standard trading to sex activities.
Goods from outside the city are always in high demand within the walls of the city.
If you are not averse to it, your company can actually do honest work here,
perhaps a welcome break from all the degenerate activities you usually partake
in.
</p>
<p>
Since the kingdom has outlawed slavery for over ten years,
you would need one of the slavers to smooth it out with the guards and allow
them to get inside the walls.</p><p>
<<rep $g.negotiator>> has no issue at all
<<uadv $g.negotiator>>
convincing the guards that
<<= $gTeam.rep()>> are honest traders, and even managed to convince
the guards to let them in without the standard bribe.
This allows your slavers to repeatedly enter and exit the city,
netting you a large amount of profit.
</p><p>
With some proper use of misplaced purse, <<rep $g.negotiator>>
were able to
<<uadv $g.negotiator>>
convince the guards to let
<<= $gTeam.rep()>> in.
Still, the bribe were expensive, and your slavers only manage to
get a standard amount of profit from the trade.
</p><p>
<<rep $g.negotiator>>
were able to
<<uadv $g.negotiator>>
convince the guards to let
<<= $gTeam.rep()>> in, but only after paying an astronomical amount of bribe.
The team were unable to recoup the losses, and returned home to the fort
with only a meager portion of the investment.
</p><p>
When <<rep $g.negotiator>> was in the middle of negotiating an entrance,
<<rep $g.trader1>> made an unfortunate joke that ousted them as members of
a slaver company. <<= $gTeam.rep()>> had to fight their way out of the guards
to return back into your fort.
</p><<run new setup.QuestTemplate(
'whore_of_ministration', /* key */
'Whore of Ministration', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'healer1': setup.qu.healer,
'healer2': setup.qu.healer,
'guard': setup.qu.guard,
},
{ /* actors */
'healslut': setup.unitgroup.quest_humankingdom_all_healslut,
},
[ /* costs */
],
'QuestWhoreOfMinistration', /* passage description */
setup.qdiff.harder34, /* difficulty */
[ /* outcomes */
[
'QuestWhoreOfMinistrationCrit',
[
setup.qc.Slave(
'healslut',
'was a healer in a city clinic who enjoyed the art of healing a little too much and got carried away, literally'),
setup.qc.MoneyNormal(),
],
],
[
'QuestWhoreOfMinistrationSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestWhoreOfMinistrationFailure',
[
],
],
[
'QuestWhoreOfMinistrationDisaster',
[
setup.qc.MoneyNormal(-1),
setup.qc.Injury('guard', 2),
],
],
],
[[setup.questpool.city, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
There are various clinics spread out throughout the<<lore location_lucgate>>,
acting as its primary healthcare services.
There, healers work tirelessly to aid the citizens of the city.
Occasionally, during some outbreaks these clinics are overflowing with patients,
and some donators would generously pay outsiders to help with these clinics.
</p>
<p>
Your slavers just heard that there is an opportunity for your slavers to help with
the clinic on one part of the city.
While normally healing is the opposite of your field of work, the pay is decent
and you have heard rumors that this particular clinic occasionally employs
unorthodox healing method to soothe their patients.
It might be worth to send your slavers on this mission, if only for the money,
but there is a chance for something more.
</p><p>
Your slavers have arrived at the clinic. At a first glance, it appears to be
an ordinary clinic, if not overcrowded by patients.
But once inside, they discovered several private restoration rooms reserved
for the biggest donators of the clinic.
</p><<include "QuestWhoreOfMinistrationCommon">>
<p>
Your slavers competence means that they were able to attend to their duties
relatively easily, and in their spare time, they make it their mission to
observe what happens behind these rooms.
Until one day, the opportunity presented itself, as one night they hear strange
noises coming from the main clinic building. Through the window, they observe
one of the more recognizable healer in the clinic, <<rep $g.healslut>>, busily
impaling <<themself $g.healslut>> on one of <<their $g.healslut>> patients.
They recognized <<rep $g.healslut>> as apparently one of the more senior
and respected healers around the clinic, who is famous for the positive feedbacks
<<their $g.healslut>> patients gave after each treatment.
</p>
<p>
Armed with this information, your slavers attempted
<<uadv $g.guard>>
to blackmail <<rep $g.healslut>>
with this information, only for <<rep $g.healslut>> to actually visible came from
the experience.
In fact, it was ultimately at <<their $g.healslut>> request that your slavers ended up
putting a slave collar around <<rep $g.healslut>>'s neck, a truly natural submissive
healslut who will do anything to make <<their $g.healslut>> patient feel better.
</p><<include "QuestWhoreOfMinistrationCommon">>
<p>
But there were too many patients that your slavers got their hands full
with their duties. They have no choice but to keep ignoring the strange
moaning and splurching sounds they keep hearing every night.
Ehh..., It's probably nothing but animal noises.
</p>
<p>
At the end of the week your slavers were completely exhausted, but healing
makes a somewhat welcome change from their usual tasks, at least for
their conscience.
Your slavers
<<uadv $g.guard>>
took the payment and went home.
</p><p>
Unfortunately, <<rep $g.healer1>> and <<rep $g.healer2>> were so
incompetent at their jobs that the head healer <<rep $g.healslut>> were
furious with them and kicked them out of the clinic.
There shall be no money paid for you today.
</p><p>
Unfortunately, one of your slavers accidentally injure an important client
during a procedure, which apparently enraged their closest members.
<<rep $g.guard>> had to defend your slavers from them, and meanwhile
your slavers were charged some money for the damage.
</p><<run new setup.QuestTemplate(
'whore_square', /* key */
'The Whoring Square', /* Title */
'darko', /* author */
['city', 'money', 'trait'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'slavetrader': setup.qu.slavetrader,
'guard1': setup.qu.guard,
'guard2': setup.qu.guard,
'slave': setup.qu.slave,
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.25),
],
'QuestWhoreSquare', /* passage description */
setup.qdiff.normal30, /* difficulty */
[ /* outcomes */
[
'QuestWhoreSquareCrit',
[
setup.qc.Trait('slave', setup.trait.training_obedience_basic),
setup.qc.MoneyUnitValue('slave', 0.5, 5500),
],
],
[
'QuestWhoreSquareSuccess',
[
setup.qc.Trait('slave', setup.trait.training_obedience_basic),
setup.qc.MoneyUnitValue('slave', 0.3, 3000),
],
],
[
'QuestWhoreSquareFailure',
[
setup.qc.MoneyUnitValue('slave', 0.1, 2000),
],
],
[
'QuestWhoreSquareDisaster',
[
setup.qc.MoneyUnitValue('slave', 0.05, 2000),
setup.qc.Injury('slave', 5),
],
],
],
[[setup.questpool.city, 1],], /* quest pool and rarity */
[
setup.qres.HasSlave(),
], /* prerequisites to generate */
)>><p>
While slavery has been outlawed in the Kingdom of Tor, it is still very much alive
in the undercity of the<<lore location_lucgate>>.
A particular centerpiece of this place is an establishment called The Whoring Square ---
while standard undercity brothels offer slaves who permanently work there,
The Whoring Square instead setups booths where clients can offer to purchase a booth
to attempt to sell their slaves' services there.
Some clients like to use this to punish their slaves --- nothing breaks a slave faster
than being forced to service unknown and unsatiable list of customers.
Some others enjoy the tips that the patrons gave to their slaves, which is almost always
covers the booth rent fee.
You have heard that The Whoring Square is looking for tenants right now. You can send a
team of slavers together with a highly valuable slave for profit, if you choose.
The more valuable the slave, the higher the potential profit.
</p><p>
Your booth is located in a corner. The booth itself is simple, just four set of manacles to chain
each of your slave's limbs to the ground.
There are multiple possible chains to choose, which you can adjust based on the preferred position of the slave.
</p>
<p>
While setting up your slave, your slavers cant help but look around the establishment.
Various other tenants are offering slaves --- some of the slaves were positioned in a sitting position
for giving blowjobs, others were chained in a doggy position to be used as a fuckhole.
While waiting for the establishment to open, the neighboring tenant offers your slavers their slave for use,
if they desire.
<<message "Partake">>
The tenant introduced the slave, the aptly named "Cumslut" whose real named had been stamped away.
Apparently, cumslot was a warrior of the northern region who had accumulated quite a bit of bounty before
being captured. But according to the tenant, the northern warriors are very easy to break --- in fact,
he claimed to have broken this slave within only eight hours of torture. The slave is brought here as punishment
for responding to their origin name --- the punishment being that the slave must service customers enough as cum
will be his only nourishment during the slave's stay here.
The slave is positioned in a kneeling position, with mouth ring-gagged to constantly let dick in.
Your slavers eagerly fed such a willing slave --- willing given that it has no other choice if the slave
does not want to starve. Your slavers begin to consider if such punishment would be effective to use on your slaves...
<</message>>
</p><<include "QuestWhoreSquareCommon">>
<p>
At the end of the week, <<rep $g.slave>> were covered in semen and completely exhausted from
being used by much more customers than you would have expected.
The experience would have broken any slave, if it has not broken already.
All in all, they left quite a large amount of tips, given the quality of your slave.
</p><<include "QuestWhoreSquareCommon">>
<p>
By the end of the week, <<rep $g.slave>> was covered in quite a bit of semen,
<<if $g.slave.isHasTrait(setup.trait.dick_tiny)>>both from the client's cum
and his own cum when he is milked during the downtime
<<else>>
from the clients' cums.
<</if>>
The experience would have broken any slave, if it has not broken already.
All in all, your slavers managed to gather quite a few tips.
</p><<include "QuestWhoreSquareCommon">>
<p>
Unfortunately, your neighbor's eloquent story about their slave swayed
most of the customers in your area to their slave.
Your slave <<rep $g.slave>> were only able to attract a few customers,
including one particularly well-dressed client who has a specific fetish for
your slave's race.
</p><p>
Unfortunately, a particularly rowdy customer accidentally used your slave
too hard and left <<them $g.slave>> injured.
Your slavers had no choice but to unshackle <<rep $g.slave>> and bring
<<them $g.slave>> home to recover, before retrying again.
</p><<run new setup.UnitGroup(
'quest_community_service1',
"Beggar",
[
[setup.unitpool.race_humankingdom_male, 0.5],
[setup.unitpool.race_humankingdom_female, 0.5], ],
0,
[
setup.qc.RemoveTraitsWithTag('unit', 'skill'),
setup.qc.BgTraitReset('unit', setup.trait.bg_unemployed), ],
)>>
<<run new setup.QuestTemplate(
'community_service', /* key */
"Community Service", /* Title */
"darko", /* Author */
[ 'city', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'brawler1': setup.qu.brawler,
'brawler2': setup.qu.brawler,
'seducer': setup.qu.seducer, },
{ /* actors */
'beggar': setup.unitgroup.quest_community_service1,
'beggar2': setup.unitgroup.quest_community_service1, },
[ /* costs */
],
'Quest_community_service',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_community_serviceCrit',
[
setup.qc.Slave('beggar', 'was a beggar in the<<lore location_lucgate>> that you hired as a slave', undefined),
setup.qc.Slave('beggar2', 'was a beggar in the<<lore location_lucgate>> that you hired as a slave', undefined), ],
], [
'Quest_community_serviceSuccess',
[
setup.qc.Slave('beggar', 'was a beggar in the<<lore location_lucgate>> that you hired as a slave', undefined), ],
], [
'Quest_community_serviceFailure',
[
],
], [
'Quest_community_serviceDisaster',
[
setup.qc.MoneyNormal(-1), ],
], ],
[
[setup.questpool.city, 1],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.dungeons), ], /* restrictions to generate */
)>><p>
The kingdom humans are perhaps the most populous people in the region. People from all sort of occupations live in the<<lore location_lucgate>>, from high nobles to lowly beggars.
</p>
<p>
Occasionally, your company receive slave orders for a human kingdom. One of the easiest way to obtain such a slave is by going into the<<lore location_lucgate>>, and "hire" one of the numerous beggars living off the streets. Nobody will miss them, and maybe they can be a productive member of the society as your slave.
</p><p>
It was relatively easy to pick a somewhat healthy beggar. With the promise of easy money,
<<rep $g.seducer>> managed to <<uadv $g.seducer>> brought two beggars outside the city for <<rep $g.brawler1>> and <<rep $g.brawler2>> to "rough up" before making them join your company as slaves.
</p><p>
It was relatively easy to pick a somewhat healthy beggar.
With the promise of easy money, <<rep $g.seducer>> managed to <<uadv $g.seducer>>
brought a beggar to outside the city for <<rep $g.brawler1>> and <<rep $g.brawler2>> to "rough up" before making <<them $g.beggar>> join your company as a slave.
</p><p>
Unfortunately, <<rep $g.seducer>> were not charismatic enough to attract even beggars to come with <<them $g.seducer>> outside. After wasting a week in the city without gain, they decided to go home.
</p><p>
<<rep $g.seducer>> managed to catch the attention of the guards who recognized <<them $g.seducer>> as part of a slaving company. Your slavers had to fight to get out of the city and returned home injured.
</p><<set _so = setup.qc.SlaveOrderFlex(
'Factory Order Slave', /* name */
'independent', /* company */
8, /* expires in */
1000, /* base price */
1000, /* trait multi */
0, /* value multi */
[ /* crit traits */
setup.trait.training_mindbreak,
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.NoTraits([setup.trait.breast_tiny, setup.trait.balls_tiny, setup.trait.dick_tiny], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
)>>
<<run new setup.QuestTemplate(
'factoryopen_position', /* key */
"Factory: Open Position", /* Title */
"darko", /* Author */
[ 'city', 'order'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'trainer': setup.qu.slavetrainer,
'informer': setup.qu.informer, },
{ /* actors */
'host': 'city_all', },
[ /* costs */
],
'Quest_factory__open_position',
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'Quest_factory__open_positionCrit',
[
_so,
_so,
_so,
_so,
_so,
_so,
_so,
_so,
],
], [
'Quest_factory__open_positionCrit',
[
_so,
_so,
_so,
_so,
],
], [
'Quest_factory__open_positionCrit',
[
_so,
],
], [
'Quest_factory__open_positionDisaster',
[
setup.qc.MissingUnit('informer'),
setup.qc.TraitIncreaseExisting('negotiator', setup.trait.dick_large),
setup.qc.TraitIncreaseExisting('negotiator', setup.trait.balls_large),
setup.qc.TraitIncreaseExisting('negotiator', setup.trait.breast_large),
setup.qc.TraitIncreaseExisting('negotiator', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('negotiator', setup.trait.anus_gape), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to try and sell your slaves to the factory.
</p><p>
After several days working <<their $g.informer>> way up the hierarchy of criminals, <<rep $g.informer>> finally managed to arrange a meeting with the factory's supervisor. The supervisor is a thin, practical <<woman $g.host>>, who gets immediately down... to business.
</p>
<p>
After quite a tense but productive exchange of information,
<<rep $g.negotiator>> <<uadv $g.negotiator>> stroke
<<if $gOutcome == 'crit'>>
an amazing deal. The factory agrees to contract your company to add up to eight new sla-, <<they $g.host>> mean employees, to the factory. For some reason, though, the supervisor emphasizes that the slaves
<<elseif $gOutcome == 'success'>>
a great deal. The factory agrees to give your company a contract where you can supply them with at most four new sla, <<they $g.host>> mean employees, yes, to the factory. For some reason, though, the supervisor emphasizes that the slaves
<<else>>
a pathetic deal, with the supervisor only trusting your company enough to arrange for one potential sla, <<they $g.host>> mean employee. For some reason, though, the supervisor emphasizes that the slave
<</if>>
must have an... "asset"... that is... not too small, so that they can contribute productively to the factory.
<<rep $g.trainer>> <<uadv $g.trainer>> swore the supervisor threw <<them $g.trainer>> some sideway glances along the discussion.
</p>
<p>
Once your slavers went back home with the contract, upon closer inspection of it you found another odd criteria —- the factory is willing to pay more for a <<rep setup.trait.training_mindbreak>> slave. Very odd, but this is also probably your best location to sell your <<rep setup.trait.training_mindbreak>> slaves, if you have any.
</p><p>
The last your slavers hear from <<rep $g.informer>>, <<they $g.informer>> is busy trying to work up in the hierarchy of the factory. Your slavers never hear back from the <<man $g.informer>> —- and the only sound coming from the factory is the constant chugging sound.
</p>
<p>
<<uneedrescue $g.informer>>, although you suspect you may not be able to recognize <<they $g.informer>> again...
</p><<run new setup.UnitGroup(
'quest_for_science1',
"Fuckmachine Inventor",
[
[setup.unitpool.race_humankingdom_male, 0.01529285823520416],
[setup.unitpool.race_humanvale_male, 0.006117143294081664],
[setup.unitpool.race_humandesert_male, 0.003058571647040832],
[setup.unitpool.race_humansea_male, 0.0006117143294081664],
[setup.unitpool.race_neko_male, 0.006117143294081664],
[setup.unitpool.race_werewolf_male, 0.001529285823520416],
[setup.unitpool.race_elf_male, 0.006117143294081664],
[setup.unitpool.race_orc_male, 0.002293928735280624],
[setup.unitpool.race_dragonkin_male, 0.00004587857470561248],
[setup.unitpool.race_demon_male, 0.00003058571647040832],
[setup.unitpool.race_humankingdom_female, 0.01529285823520416],
[setup.unitpool.race_humanvale_female, 0.006117143294081664],
[setup.unitpool.race_humandesert_female, 0.003058571647040832],
[setup.unitpool.race_humansea_female, 0.0006117143294081664],
[setup.unitpool.race_neko_female, 0.006117143294081664],
[setup.unitpool.race_werewolf_female, 0.001529285823520416],
[setup.unitpool.race_elf_female, 0.006117143294081664],
[setup.unitpool.race_orc_female, 0.002293928735280624],
[setup.unitpool.race_dragonkin_female, 0.00004587857470561248],
[setup.unitpool.race_demon_female, 0.00003058571647040832],
[setup.unitpool.race_humankingdom_male, 0.4587857470561248],
[setup.unitpool.race_humankingdom_female, 0.4587857470561248], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_scholar),
setup.qc.Trait('unit', setup.trait.per_lunatic), ],
)>>
<<run new setup.QuestTemplate(
'for_science', /* key */
"For Science", /* Title */
"darko", /* Author */
[ 'veteran',
'city', 'money'
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scientist': setup.qu.scientist,
'merc': setup.qu.mercenary,
'convincer': setup.qu.convincer, },
{ /* actors */
'inventor': 'quest_for_science1',
'assistant': 'city_all', },
[ /* costs */
],
'Quest_for_science',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_for_scienceCrit',
[
setup.qc.Item(setup.item.quest_for_science_list),
setup.qc.MoneyCrit(), ],
], [
'Quest_for_scienceCrit',
[
setup.qc.Item(setup.item.quest_for_science_list),
setup.qc.MoneyNormal(), ],
], [
'Quest_for_scienceFailure',
[
],
], [
'Quest_for_scienceDisaster',
[
setup.qc.Injury('scientist', 2),
setup.qc.Injury('merc', 3),
setup.qc.Injury('convincer', 2), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.NoItem(setup.item.quest_for_science_list),
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall), ],
[ /* expiration outcomes */
],
)>><p>
A famous scientist in the<<lore location_lucgate>>, Dr. <<rep $g.inventor>>, is looking for brave adventurers to help <<their $g.inventor>> experiment. <<They $g.inventor>> promises a large sum of money, which is definitely good, but what caught your attention is that the professor is also willing to give out <<their $g.inventor>> resulting invention as a bonus to the adventurers. This might be your chance to get your grubby hands on some very rare item, although you get a feeling that there the item might not be what you might expected...
</p>
<p>
Your attempt to dig more information only result in vague information such as something "long", "hard", and "thick"...
</p><p>
Your band of slavers arrived at the professor's laboratory.
It is filled to the brim with strange mechanical objects your slavers have never seen before, and <<rep $g.scientist>> is in awe. They then met with the professor who is surrounded by <<their $g.inventor>> assistant. "You're late" —- <<they $g.inventor>> said without even looking at your slavers. Instead, an assistant of <<them $g.inventor>> —- a young springly <<girl $g.assistant>> introduced <<themself $g.assistant>> before getting straight into business of checking whether your mercenary company is up for the job.
</p>
<p>
Fortunately, <<rep $g.scientist>>'s intellect, <<rep $g.merc>>'s brawn, and <<rep $g.convincer>> wit were more than enough to convince the assistant <<girl $g.assistant>> that your company is the real deal. Impressed, <<they $g.assistant>> handed over a bag of money ("down payment", as she put it) to your slavers, as well as the
<<rep setup.item.quest_for_science_list >>:
a list of items your slavers need to retrieve for the professor.
</p>
<p>
The first item looks easy enough —- a thick box strong enough to withstand tear and wear. There should be plenty of crafters in the northern settlements selling these boxes, although for a completely different purpose.
</p>
<p>
Second on the list is a rare fruit growing somewhere in the western forests called "Sine Pregnol". None of your slavers have any idea what it means, not even <<rep $g.scientist>>. Still, they can probably found out about it later by asking the settlements in the western forests.
</p>
<p>
Finally, the last item on the list is a strong and long pole of conducting iron. Conducting iron can usually be found in the eastern deserts, although they are usually brittle and short in length. Finding a long and strong one would indeed be a challenge.
</p>
<p>
Having explained to your slavers what needs to be done, your slavers were escorted outside of the laboratory by the nice assistant <<girl $g.assistant>>.
"Happy hunting!", <<they $g.assistant>> said cheerfully as your slavers part ways.
</p><p>
Your band of slavers arrived at the professor's laboratory.
It is filled to the brim with strange mechanical objects your slavers have never seen before, and <<rep $g.scientist>> is in awe. They then met with the professor who is surrounded by <<their $g.inventor>> assistant. "You're late" —- <<they $g.inventor>> said without even looking at your slavers. Instead, an assistant of <<them $g.inventor>> —- a young springly <<girl $g.assistant>> introduced <<themself $g.assistant>> before getting straight into business of checking whether your mercenary company is up for the job.
</p>
<p>
Unfortunately, the assistant <<girl $g.assistant>> were not at all impressed by your slavers. <<rep $g.scientist>> were unable to answer the difficult question posed by <<them $g.assistant>>, nor <<rep $g.convincer>> were able to outmaneuver <<their $g.assistant>> wit. Your slavers were not able to secure the deal, and had to return back home without the contract.
</p><p>
Your band of slavers arrived at the professor's laboratory.
It is filled to the brim with strange mechanical objects your slavers have never seen before, and <<rep $g.scientist>> is in awe. They then met with the professor who is surrounded by <<their $g.inventor>> assistant. "You're late" —- <<they $g.inventor>> said without even looking at your slavers. Instead, an assistant of <<them $g.inventor>> —- a young springly <<girl $g.assistant>> introduced <<themself $g.assistant>> before getting straight into business of checking whether your mercenary company is up for the job.
</p>
<p>
Unfortunately, your slavers were not the only mercenary company that day. Another more capable one was also there attending the interview, and they demonstrated their skills on your slavers. At the end of the interview, your slavers were thoroughly defeated and suffered some minor injuries without getting the contract.
</p><<run new setup.QuestTemplate(
'for_science__eureka_', /* key */
"For Science: Eureka!", /* Title */
"darko", /* Author */
[
'city',
'veteran',
'special',
'item'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scientist': setup.qu.scientist,
'crafter': setup.qu.crafter,
'wizard': setup.qu.arcanewindveteran, },
{ /* actors */
'inventor': 'quest_for_science1', },
[ /* costs */
],
'Quest_for_science__eureka_',
setup.qdiff.harder54, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__eureka_Crit',
[
setup.qc.LoseItem(setup.item.quest_for_science_list),
setup.qc.LoseItem(setup.item.quest_for_science_box),
setup.qc.LoseItem(setup.item.quest_for_science_fruit),
setup.qc.LoseItem(setup.item.quest_for_science_stick),
setup.qc.Opportunity('for_science__mad_science'),
setup.qc.BoonizeRandom('scientist', 30),
setup.qc.BoonizeRandom('crafter', 15),
setup.qc.BoonizeRandom('wizard', 15), ],
], [
'Quest_for_science__eureka_Crit',
[
setup.qc.LoseItem(setup.item.quest_for_science_list),
setup.qc.LoseItem(setup.item.quest_for_science_box),
setup.qc.LoseItem(setup.item.quest_for_science_fruit),
setup.qc.LoseItem(setup.item.quest_for_science_stick),
setup.qc.Opportunity('for_science__mad_science'), ],
], [
'Quest_for_science__eureka_Failure',
[
setup.qc.OneRandom([
setup.qc.LoseItem(setup.item.quest_for_science_box),
setup.qc.LoseItem(setup.item.quest_for_science_fruit),
setup.qc.LoseItem(setup.item.quest_for_science_stick)
]),
setup.qc.Injury('scientist', 2),
setup.qc.Injury('crafter', 3),
setup.qc.Injury('wizard', 1), ],
], [
'Quest_for_science__eureka_Failure',
[
setup.qc.Injury('scientist', 3),
setup.qc.Injury('crafter', 1),
setup.qc.Injury('wizard', 2),
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.LoseItem(setup.item.quest_for_science_box),
setup.qc.LoseItem(setup.item.quest_for_science_fruit)
]),
setup.qc.DoAll([
setup.qc.LoseItem(setup.item.quest_for_science_box),
setup.qc.LoseItem(setup.item.quest_for_science_stick)
]),
setup.qc.DoAll([
setup.qc.LoseItem(setup.item.quest_for_science_fruit),
setup.qc.LoseItem(setup.item.quest_for_science_stick)
])
]), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('for_science__mad_science'),
setup.qres.HasItem(setup.item.quest_for_science_box),
setup.qres.HasItem(setup.item.quest_for_science_fruit),
setup.qres.HasItem(setup.item.quest_for_science_stick), ],
[ /* expiration outcomes */
],
)>><p>
Somehow, one way or another you have completed collecting all the items requested by the inventor <<name $g.inventor>>:
A sturdy <<rep setup.item.quest_for_science_box>>,
A hard and rubbery <<rep setup.item.quest_for_science_fruit>>, and
<<rep setup.item.quest_for_science_stick>>.
It is now time to return to the inventor <<name $g.inventor>> and claim your bounty, although seeing these items makes you think, what kind of invention is <<they $g.inventor>> creating with these?
Not to mention the inventor has specifically asked you bring along a slaver gifted in <<rep setup.trait.magic_wind>>.
</p><p>
<<rep $g.scientist>> watched as the inventor assembled the items into a contraption —- first, the thick, hard, and rubbery
<<rep setup.item.quest_for_science_fruit>> is affixed to one end of the stick, forming a spear with a dildo for its tiphead.
The other end of the stick is then inserted into
the
<<rep setup.item.quest_for_science_box>> —- a dildo post, if you may.
The finished product is then brought to another room, where to your slavers' surprise, is covered by magical circle.
</p>
<p>
Apparently, the inventor is a powerful wizard, gifted in <<rep setup.trait.magic_wind_master>>.
<<if $g.wizard.isHasTrait('magic_wind_master')>>
Assisted by your similarly-gifted slaver <<rep $g.wizard>>,
<<else>>
Assisted by your slightly-less-gifted slaver <<rep $g.wizard>>,
<</if>>
they imbued magic into the previously unliving box, trapping great amount of energy inside the sturdy little box. With a good supply of energy, your slavers finally understand the purpose of the machine as the thick long pole starts to magically move on its own, up and down, up and down, as if it is fucking an invisible <<man $g.inventor>>. The aptly named <<rep setup.item.f_object_master_fuckmachine>> is now complete, and is ripe for studies in the coming weeks.
</p>
<p>
The weeks passed in a blur as your slavers <<uadv $g.scientist>> helped the inventor study the strange machinery as much as they can —- asking questions such as "How much does the power last?", "Does it have any military uses?", "Can the pole conduct electricity?", and so on.
After four long weeks, the inventor has completed <<their $g.inventor>> research on the fascinating little object, and gifted your slavers with the <<rep setup.item.f_object_master_fuckmachine>> itself.
</p>
<p>
You are left with a choice —- you can of course keep the <<rep setup.item.f_object_master_fuckmachine>> for yourself.
But there are surely plenty others who would be willing to part with a ridiculous amount of money for such a strange and mysterious contraption.
</p>
<<if $gOutcome == 'crit'>>
<p>
Having worked so closely with a renowned inventor greatly inspired your slavers in the coming weeks.
</p>
<</if>><p>
The inventor <<name $g.inventor>> pointed out that
<<if $gOutcome == 'failure'>>
one
<<else>>
two
<</if>>
of the items your slavers had collected is defective. Your slavers can't remember exactly if it was the not-so-sturdy box, the half rotten fruit, or the pole with visible crack, but either way they'd have to gather the item again to finish the task.
</p><<set _ifthenelse = setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_lovers', 'lovers'),
setup.qc.DoAll([
setup.qc.Friendship('hero1', 'hero2', 1000),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_lustful),
setup.qc.TraitReplace('hero1', setup.trait.per_active),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_playful),
setup.qc.TraitReplace('hero1', setup.trait.per_gregarious),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_lustful),
setup.qc.TraitReplace('hero2', setup.trait.per_active),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_playful),
setup.qc.TraitReplace('hero2', setup.trait.per_gregarious),
]),
]),
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_lovers', 'rivals'),
setup.qc.DoAll([
setup.qc.Friendship('hero1', 'hero2', -1000),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_chaste),
setup.qc.TraitReplace('hero1', setup.trait.per_loner),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_serious),
setup.qc.TraitReplace('hero1', setup.trait.per_independent),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_chaste),
setup.qc.TraitReplace('hero2', setup.trait.per_loner),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_serious),
setup.qc.TraitReplace('hero2', setup.trait.per_independent),
]),
]),
setup.qc.DoAll([
setup.qc.Friendship('hero1', 'hero2', 1000),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_loyal),
setup.qc.TraitReplace('hero1', setup.trait.per_kind),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_honorable),
setup.qc.TraitReplace('hero1', setup.trait.per_honest),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_loyal),
setup.qc.TraitReplace('hero2', setup.trait.per_kind),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_honorable),
setup.qc.TraitReplace('hero2', setup.trait.per_honest),
]),
]),
),
)>>
<<run new setup.QuestTemplate(
'heroic_passion', /* key */
"Heroic Passion", /* Title */
"darko", /* Author */
[ 'city', 'money', 'unknown'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'appraiser1': setup.qu.appraiser,
'appraiser2': setup.qu.appraiser,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2,
},
[ /* costs */
],
'Quest_heroic_passion',
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_passionCrit',
[
_ifthenelse,
setup.qc.MoneyCrit(),
setup.qc.VarSet('choose_your_own_adventure_progress', '6', -1),
setup.qc.Equipment(setup.equipmentpool.all_combat), ],
], [
'Quest_heroic_passionSuccess',
[
_ifthenelse,
setup.qc.MoneyNormal(),
setup.qc.VarSet('choose_your_own_adventure_progress', '6', -1),
setup.qc.Equipment(setup.equipmentpool.all_combat), ],
], [
'Quest_heroic_passionFailure',
[
],
], [
'Quest_heroic_passionDisaster',
[
setup.qc.MoneyCustom(-1500), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 0],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '5'), ],
)>><p>
Having seemingly finished with their training in the forests,
the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
<<= $g.hero1.getName()>> and <<= $g.hero2.getName()>>
once again arrives at your fort's doorsteps. During their training, they appear to have found the source of their village's demise —- a demonic lord who loves nothing but toy with humans. To
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
exact their revenge,
<<else>>
make sure the tragedy never happens again to anyone,
<</if>>
they are planning to brave the dangers of the eastern deserts. But first, they need good equipment in the<<lore location_lucgate>>.
</p>
<p>
They are hoping to borrow a couple of your people to help them find and appraise the various equipments on sale in the city.
Again, your slavers are promised rewards for helping them.
</p>
<p>
This cannot be coincidence yet again, can it? To make sure, you ask your slavers to check whether the pair of <<= $varstore.get('choose_your_own_adventure_siblings')>>
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
<<if $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>
are actually incestuous lovers now. You wonder if your slavers will even believe that these innocent siblings are lovers now.
<<else>>
are actually lovers now.
<</if>>
<<elseif $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
are actually rivals now.
<<else>>
have formed deep friendship with each other.
<</if>>
</p><p>
Your slavers met the
<<= $varstore.get('choose_your_own_adventure_siblings')>> at the outskirts of the village.
They look quite different now that they have finished their training ---
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
with muscles around their body
<<else>>
with a magical aura surround their body
<</if>>
and a matching pendant --- a gift from the sage to watch over them.
Your slavers and the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
spent days in the city, looking at various equipments on sale.
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
Swords, axes, lances, plate armors, all sort of equipment to protect a fighter's body.
<<else>>
Wands, robes, hats, all sort of equipments to enhance one's mind.
<</if>>
Amidst a slew of low-quality items, <<rep $g.appraiser1>> <<uadv $g.appraiser1>> browsed through the wares and found good quality items hidden beneath the sea of junk.
Your slavers even got something for your own company.
In the end, your slavers were paid the money they were promised by the ecstatic
<<= $varstore.get('choose_your_own_adventure_siblings')>>.
</p>
<p>
Per your order, during the time they spend in the city inn, they often sneak into the
<<= $varstore.get('choose_your_own_adventure_siblings')>>'s
room and try to see what's happening inside.
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
Indeed, they often see the two
<<= $varstore.get('choose_your_own_adventure_siblings')>>
compassionately kissing each other with abandon.
<<if $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>
An incestuous relationship, to your slavers' delight.
<</if>>
Over the next few days, your slaver continued "per your orders" to watch over them,
enjoying the sight of the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
exploring the world of sex with the help of each other's naked body.
<<elseif $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
Whenever they peek inside, they often see the two arguing against each other, and trying to prove to each other that they
are the better
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
fighter.
<<else>>
wizard.
<</if>>
Over the time they spent in the city, your slavers were convinced that the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
have now considered each other their true rivals, just like you predicted.
<<else>>
Whenever they peek inside, they see the two compassionately talking with each other, just like best friends.
Over the time they spent in the city, your slavers were convinced that the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
have gained each other's full trust, just like you predicted.
<</if>>
</p><<include 'Quest_heroic_passionCrit'>><p>
The market is flooded with junk of various kinds, and your slavers were unable to find any equipment worth using in the sea of junk. They were too busy searching for wares to check whether the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
are actually
<<= $varstore.get('choose_your_own_adventure_lovers')>>
now.
</p><p>
Your slavers got scammed by an unscrupulous merchant who sell fake weapons repainted to look brand new, and paid a great sum of money for the fake. They were too busy searching for wares to check whether the
<<= $varstore.get('choose_your_own_adventure_siblings')>>
are actually
<<= $varstore.get('choose_your_own_adventure_lovers')>>
now.
</p><<run new setup.QuestTemplate(
'inheritance_lottery', /* key */
"Inheritance Lottery", /* Title */
"darko", /* Author */
[ 'city', 'money', 'special'
], /* tags */
1, /* weeks */
50, /* quest expiration weeks */
{ /* roles */
'bureaucrat1': setup.qu.bureaucrat,
'bureaucrat2': setup.qu.bureaucrat,
'guard': setup.qu.guard, },
{ /* actors */
},
[ /* costs */
],
'Quest_inheritance_lottery',
setup.qdiff.easier40, /* difficulty */
[ /* outcomes */
[
'Quest_inheritance_lotteryCrit',
[
setup.qc.MoneyCustom(25000), ],
], [
'Quest_inheritance_lotterySuccess',
[
setup.qc.MoneyCustom(15000), ],
], [
'Quest_inheritance_lotteryFailure',
[
setup.qc.MoneyCustom(7500), ],
], [
'Quest_inheritance_lotteryDisaster',
[
setup.qc.MoneyCustom(2500), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 99],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Cooldown(20), ],
)>><p>
This quest is <<successtext 'incredibly RARE'>>.
</p>
<p>
By pure chance, your name happens to be the same name as an inheritor of a plot of land in the<<lore location_lucgate>>. Apparently, a letter was found addressed to you that the<<lore location_lucgate>> would appropriate the inheritance unless the inheritor came up and sort the bureaucracy mess up.
</p>
<p>
Given your occupation, it would be impossible for you to make use of the land into something productive. However, with a suitable group of slavers, it might just be possible to make them sort out the bureaucracy mess and sell the land for a lot, a huge sum of money.
</p><p>
<<rep $g.bureaucrat1>> <<uadv $g.bureaucrat1>> shifted through the bureaucratic mess and your slaving team were able to appropriate the land for yourself. They quickly found a prospective buyer, who splurged a lot of money for the plot of land.
Your slavers returned home carrying a crate bursting with gold coins.
</p><p>
<<rep $g.bureaucrat1>> <<uadv $g.bureaucrat1>> shifted through the bureaucratic mess and your slaving team were able to appropriate the land for yourself. They quickly found a prospective buyer, who bought the plot of land at a reasonable price.
Your slavers returned home carrying a crate nearly full of gold coins.
</p><p>
<<rep $g.bureaucrat1>> <<uadv $g.bureaucrat1>> shifted through the bureaucratic mess and your slaving team managed to appropriate the land for yourself in the brink of time.
There were no time left however to search for prospective buyer and ended up selling the land at a sub-standard price.
It was still a decent sum though —- much more than what your slavers normally make, and they came home carrying the bulk of the gold.
</p><p>
<<rep $g.bureaucrat1>> barely managed to sort the bureaucratic mess. Your slavers ended up having to bribe the officials to hasten the process with a lot of gold —- while they still profit from selling the plot of land, the net profit came up somewhat smaller than they expected.</p><<run new setup.QuestTemplate(
'light_in_the_darkness__enslave', /* key */
"Light in Darkness: Enslave", /* Title */
"darko", /* Author */
[ 'city', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'trainer': setup.qu.slavetrainer, },
{ /* actors */
'light': setup.unitgroup.quest_light_in_the_darkness__recruit1, },
[ /* costs */
],
'Quest_light_in_the_darkness__enslave',
setup.qdiff.hard35, /* difficulty */
[ /* outcomes */
[
'Quest_light_in_the_darkness__enslaveCrit',
[
setup.qc.Slave('light', "was a captured traveler from the south who is gifted in healing", false),
setup.qc.MoneyNormal(), ],
], [
'Quest_light_in_the_darkness__enslaveSuccess',
[
setup.qc.Slave('light', "was a captured traveler from the south who is gifted in healing", false), ],
], [
'Quest_light_in_the_darkness__enslaveFailure',
[
],
], [
'Quest_light_in_the_darkness__enslaveDisaster',
[
setup.qc.MissingUnitRebuy('infiltrator1', 1),
setup.qc.MissingUnitRebuy('infiltrator2', 1),
],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
You have received news that an upcoming slave auction at the undercity of Lucgate will feature a very special slave: an exotic specimen from the southern seas gifted in the domain of the light. The price will be astronomical and there is no way that buying them would be profitable for your company —- but there is an option of you sending your slavers over to kidnap the goods. However, this will surely be dangerous, and who knows what might happen to your slavers if they were caught...</p>
<p>
You also need to decide what to do with the goods once you smuggle them out. You can certainly make use of such a highly prized slave, but there is also an option of convincing them to join as a slaver.</p>
<p>You have decided to enslave <<them $g.light>></p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. After scouring through naked bodies plugged in all various ways, they finally found what they are looking for: an exotic-looking slave who must be the slave they are looking for.
With their prize in tow, your slavers make for the exit before any of the guards came in to check, while nabbing several valuables on the way out.
</p>
<p>
Later, you have heard about the auction being cancelled due to "security reasons". Satisfied, you pet your new slave's head <<rep $g.light>> and started to plan <<their $g.light>> future as a slave.</p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. After scouring through naked bodies plugged in all various ways, they finally found what they are looking for: an exotic-looking slave who must be the slave they are looking for.
But they managed to attract the attention of a guard, and your slavers had to hastily make to the exit with the slave in tow.
</p>
<p>
Later, you have heard about the auction being cancelled due to "security reasons". Satisfied, you pet your new slave's head <<rep $g.light>> and started to plan <<their $g.light>> future as a slave.</p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. But even after scouring through naked bodies plugged in all various ways, they were not able to find any exotic looking for. Instead, they managed to attract the attention of a guard, and your slavers had to hastily make to the exit with nothing to steal.
</p>
<p>
Later, you have heard about the slave being auctioned at an exorbitant prize to serve as a trophy to some rich noble.
You can hope for another chance if such a slave ever come by again in an auction.</p><p>
Unfortunately,
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>> were captured during their infiltration of the warehouse. Ironically, they ended up being one of the goods for auction and you have the option to repurchase them if you wish to get them back.</p><<run new setup.UnitGroup(
'quest_light_in_the_darkness__recruit1',
"Light",
[
[setup.unitpool.race_humansea_male, 0.5],
[setup.unitpool.race_humansea_female, 0.5], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.magic_light), ],
)>>
<<run new setup.QuestTemplate(
'light_in_the_darkness__recruit', /* key */
"Light in Darkness: Recruit", /* Title */
"darko", /* Author */
[ 'city', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'recruiter': setup.qu.recruiter, },
{ /* actors */
'light': setup.unitgroup.quest_light_in_the_darkness__recruit1, },
[ /* costs */
],
'Quest_light_in_the_darkness__recruit',
setup.qdiff.hard35, /* difficulty */
[ /* outcomes */
[
'Quest_light_in_the_darkness__recruitCrit',
[
setup.qc.Slaver('light', "was a captured traveler from the south who is gifted in healing", false),
setup.qc.MoneyNormal(), ],
], [
'Quest_light_in_the_darkness__recruitSuccess',
[
setup.qc.Slaver('light', "was a captured traveler from the south who is gifted in healing", false), ],
], [
'Quest_light_in_the_darkness__recruitFailure',
[
],
], [
'Quest_light_in_the_darkness__recruitDisaster',
[
setup.qc.MissingUnitRebuy('infiltrator1', 1),
setup.qc.MissingUnitRebuy('infiltrator2', 1),
],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
You have received news that an upcoming slave auction at the undercity of Lucgate will feature a very special slave: an exotic specimen from the southern seas gifted in the domain of the light. The price will be astronomical and there is no way that buying them would be profitable for your company —- but there is an option of you sending your slavers over to kidnap the goods. However, this will surely be dangerous, and who knows what might happen to your slavers if they were caught...</p>
<p>
You also need to decide what to do with the goods once you smuggle them out. You can certainly make use of such a highly prized slave, but there is also an option of convincing them to join as a slaver.</p>
<p>You have decided to recruit <<them $g.light>></p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. After scouring through naked bodies plugged in all various ways, they finally found what they are looking for: an exotic-looking slave who must be the slave they are looking for.
With their prize in tow, your slavers make for the exit before any of the guards came in to check, while nabbing several valuables on the way out.
</p>
<p>
<<rep $g.recruiter>> managed to succesfully convince <<rep $g.light>> to join your company
as a slaver. <<rep $g.light>> now awaits your decision if you wish to finalize the hiring.
</p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. After scouring through naked bodies plugged in all various ways, they finally found what they are looking for: an exotic-looking slave who must be the slave they are looking for.
But they managed to attract the attention of a guard, and your slavers had to hastily make to the exit with the slave in tow.
</p>
<p>
<<rep $g.recruiter>> managed to succesfully convince <<rep $g.light>> to join your company
as a slaver. <<rep $g.light>> now awaits your decision if you wish to finalize the hiring.
</p><p>
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages containing various human cargos in full bondage were stacked on top of each other, and the place is eerily quiet except for several moaning sounds. But even after scouring through naked bodies plugged in all various ways, they were not able to find any exotic looking for. Instead, they managed to attract the attention of a guard, and your slavers had to hastily make to the exit with nothing to steal.
</p>
<p>
Later, you have heard about the slave being auctioned at an exorbitant prize to serve as a trophy to some rich noble.
You can hope for another chance if such a slaver ever come by again in an auction.</p><p>
Unfortunately,
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>> were captured during their infiltration of the warehouse. Ironically, they ended up being one of the goods for auction and you have the option to repurchase them if you wish to get them back.</p><<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Studious Slaver', /* name */
[
setup.trait.bg_apprentice,
setup.trait.bg_scholar,
setup.trait.per_smart,
setup.trait.per_calm,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.per_loyal,
setup.trait.join_senior,
],
[
setup.trait.bg_slave,
setup.trait.bg_unemployed,
setup.trait.per_slow,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_independent,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('loyalty_reward'),
],
{
knowledge: 2,
social: 1,
}
)>>
<<set _criteriawriter = new setup.UnitCriteria(
null, /* key */
'Writer', /* name */
[
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.skill_entertain,
setup.trait.skill_creative,
],
[
setup.trait.per_lunatic,
setup.trait.per_active,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
knowledge: 3,
}
)>>
<<set _criterianegotiator = new setup.UnitCriteria(
null, /* key */
'Negotiator', /* name */
[
setup.trait.per_deceitful,
setup.trait.per_calm,
setup.trait.per_logical,
],
[
setup.trait.per_honest,
setup.trait.per_aggressive,
setup.trait.per_empath,
setup.trait.skill_intimidating,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
social: 3,
}
)>>
<<run new setup.QuestTemplate(
'loyalty_s_venture', /* key */
"Loyalty\'s Venture", /* Title */
"darko", /* Author */
[ 'city', 'prep', 'unknown'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'slaver': _criteriaslaver,
'writer': _criteriawriter,
'negotiator': _criterianegotiator, },
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-1500), ],
'Quest_loyalty_s_venture',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_loyalty_s_ventureCrit',
[
setup.qc.AddTag('slaver', 'loyalty_reward_final'),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.ItemPool(setup.itempool.all_normal),
setup.qc.Equipment(setup.equipmentpool.all_sex),
setup.qc.BoonizeRandom('slaver', 30),
setup.qc.VarSet('loyalty_reward_cd', '1', 8),
],
], [
'Quest_loyalty_s_ventureCrit',
[
setup.qc.AddTag('slaver', 'loyalty_reward_final'),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.BoonizeRandom('slaver', 20),
setup.qc.VarSet('loyalty_reward_cd', '1', 8),
],
], [
'Quest_loyalty_s_ventureCrit',
[
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.VarSet('loyalty_reward_cd', '1', 3),
],
], [
'Quest_loyalty_s_ventureCrit',
[
setup.qc.Injury('slaver', 4),
setup.qc.Injury('writer', 3),
setup.qc.Injury('negotiator', 2),
setup.qc.RemoveTitleGlobal('loyalty_reward'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
[setup.questpool.forest, 1],
[setup.questpool.city, 1],
[setup.questpool.desert, 1],
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarNull('loyalty_reward_cd'),
setup.qres.Building(setup.buildingtemplate.scoutoffice),
setup.qres.HasUnitWithTitle('loyalty_reward', {job: 'slaver'}),
setup.qres.NoUnitWithTag('loyalty_reward_final'), ],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({job: setup.job.slaver, title: 'loyalty_reward'})>>
<<if !_unit>>
<<dangertext 'This quest is no longer able to be completed.'>>
<<else>>
<p>
<<rep _unit>> has asked you to borrow some money. According to the <<uadjper _unit>> slaver, <<they _unit>> found a great deal in the<<lore location_lucgate>> and can make you some money with the small investment. Normally, you would put your trust in <<them _unit>>, as <<rep _unit>> has served you and your company for quite a while now. But something is odd about his overall demeanor this time.
</p>
<p>
Still, money is money and there is no harm in sending <<them _unit>> on such an easy opportunity. You'd best accompany <<them _unit>> with a negotiator to get the best bang for the buck.
</p>
<</if>><p>
<<rep $g.slaver>> has returned together with <<utheirrel $g.slaver $g.negotiator>> <<rep $g.negotiator>> and <<rep $g.writer>>.
<<if $gOutcome == 'crit'>>
They grinned as they brought back quite a selection of items, surely worth over the money borrow from you.
<<if $unit.player.isHasTrait('per_attentive')>>
Still, you are perceptive enough to note that they are hiding something from you.
<<else>>
Certainly a good selection of items. Still, something feels off here.
<</if>>
<<elseif $gOutcome == 'success'>>
They brought an item they bought with the money, but it is obvious that the item is not worth near the amount of money they borrow. Something is suspicious here.
<<elseif $gOutcome == 'failure'>>
They brought an item they bought with the money, but it is obvious that the item is not worth near the amount of money they borrow. From the dejected look on the slavers and especially on <<rep $g.slaver>>, you could only guess what happened.
<<else>>
They returned injured, with their money gone. It is not hard to imagine what happened to your slavers during their short trip.
<</if>>
Either way, your slavers look exhausted from the trip. Maybe this once you'll not press your slavers too much, and let them get their well-deserved rest. A little money lost here, but at least your slavers are all intact. That's what matters most, isn't it?
</p>
<<if $gOutcome == 'disaster'>>
<p>
In the coming days, you noted that <<rep $g.slaver>> looked particularly dejected, as if the bandit attack on their team had shattered some particular dream they were building.
</p>
<</if>>
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<p>
In the coming days, you noted that <<rep $g.slaver>> is acting a little strange. The usually <<uadjper $g.slaver>> is now often holed up in <<their $g.slaver>> room. You decided to make a note of this for now.
</p>
<</if>><<run new setup.QuestTemplate(
'pet_shop_of_woes', /* key */
"Pet Shopping: Internship", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'item'
], /* tags */
4, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'trainer1': setup.qu.slavetrainer,
'trainer2': setup.qu.slavetrainer,
'salesman': setup.qu.salesman, },
{ /* actors */
'pet': setup.unitgroup.quest_pet_shop_of_wonders1, },
[ /* costs */
],
'Quest_pet_shop_of_woes',
setup.qdiff.harder43, /* difficulty */
[ /* outcomes */
[
'Quest_pet_shop_of_woesCrit',
[
setup.qc.Equipment(setup.equipmentpool.pet_good),
setup.qc.Equipment(setup.equipmentpool.pet_good),
setup.qc.MoneyCustom(2000), ],
], [
'Quest_pet_shop_of_woesSuccess',
[
setup.qc.Equipment(setup.equipmentpool.pet_good),
setup.qc.MoneyCustom(1000), ],
], [
'Quest_pet_shop_of_woesFailure',
[
setup.qc.MissingUnitRecapture('salesman', 'capturedmedium'),
],
], [
'Quest_pet_shop_of_woesDisaster',
[
setup.qc.MissingUnit('salesman'),
setup.qc.SlaveMarker('pet'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_pet_shopping'>>
<p>
You have decided to send a team of slavers as "interns".
</p><p>
The pet shop was disguised as an ordinary pet shop —- the front counter contains dogs, cats, and other ordinary and cute pets for sale. Having come to work, your slavers were escored to an employee-only area.
</p>
<p>
<<rep $g.salesman>> is immediately put to work for helping customers choose their perfect pet. Meanwhile, <<rep $g.trainer1>> and <<rep $g.trainer2>> were tasked with training a newly captured slave, a former raider as they said, into the perfect pet. Fortunately, the shop already have a standard training procedure to help your slavers with the training.
</p>
<p>
With the help of various training equipment including blindfolds, gags, chastity belt, as well as plenty of leashes, your slavers slowly transformed the initially unwilling slave until finally at the end of the month, the slave would willingly come and lick your slaver's feet clean while having their butt stuffed with a large tailplug.
</p><<include 'Quest_pet_shop_of_woesCommon'>>
<p>
Your slavers training went above and beyond and the pet would now qualify as a masterful pet slut. For such impressive work, your slavers were given double the promised reward —- two golden pet gears suitable for high class pets. The pet your slavers had fully trained will live a fulfilling live in the kennel provided by its prospective <<master $unit.player>>.
</p><<include 'Quest_pet_shop_of_woesCommon'>>
<p>
Their internship ended, your slavers were given the promised reward —- a golden pet gear suitable for high class pets, for the good work they have done. The pet they trained will live a fulfilling live in the feet of its new <<master $unit.player>>.
</p><p>
The pet shop was disguised as an ordinary pet shop —- the front counter contains dogs, cats, and other ordinary and cute pets for sale. Having come to work, your slavers were escored to an employee-only area.
</p>
<p>
<<rep $g.salesman>> is immediately put to work for helping customers choose their perfect pet. Meanwhile, <<rep $g.trainer1>> and <<rep $g.trainer2>> were tasked with training a newly captured slave, a former raider as they said, into the perfect pet. Fortunately, the shop already have a standard training procedure to help your slavers with the training.
</p>
<p>
Either because the slave was truly unruly, or because of your slavers' incompentence, the slave continues to defies order until after weeks passed. Seeing the upcoming failure, your slavers were kicked out of the team while the shop salvages the broken wreck of the slave by turning the slave into a prospective pony slave instead.
</p>
<p>
For such awful work your slavers were not paid a single penny for their hard work,
while <<rep $g.salesman>> is taken as recompense.
<<urescuenow $g.salesman>>, before <<they $g.salesman>> is fully trained as just another nameless pet...
</p><p>
The pet shop was disguised as an ordinary pet shop —- the front counter contains dogs, cats, and other ordinary and cute pets for sale. Having come to work, your slavers were escored to an employee-only area.
</p>
<p>
<<rep $g.salesman>> is immediately put to work for helping customers choose their perfect pet. Meanwhile, <<rep $g.trainer1>> and <<rep $g.trainer2>> were tasked with training a newly captured slave, a former raider as they said, into the perfect pet. Fortunately, the shop already have a standard training procedure to help your slavers with the training.
</p>
<p>
It was unclear how, but during the training the prospective pet snapped and its mind broke. Your slavers were held accountable and <<rep $g.salesman>> were taken by the shop as a payment for the damages, to be trained as the pet replacement.</p><<set _processing = [
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_pet_advanced),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_personality', 'watchful'),
setup.qc.DoAll([
setup.qc.TraitReplace('unit', setup.trait.per_aggressive),
setup.qc.TraitReplace('unit', setup.trait.per_attentive),
setup.qc.TraitReplace('unit', setup.trait.per_serious),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_personality', 'lusty'),
setup.qc.DoAll([
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict),
setup.qc.TraitReplace('unit', setup.trait.per_empath),
setup.qc.TraitReplace('unit', setup.trait.per_active),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_personality', 'loyal'),
setup.qc.DoAll([
setup.qc.TraitReplace('unit', setup.trait.per_loyal),
setup.qc.TraitReplace('unit', setup.trait.per_brave),
setup.qc.TraitReplace('unit', setup.trait.per_studious),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_personality', 'curious'),
setup.qc.DoAll([
setup.qc.TraitReplace('unit', setup.trait.per_curious),
setup.qc.TraitReplace('unit', setup.trait.per_logical),
setup.qc.TraitReplace('unit', setup.trait.per_playful),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_personality', 'naughty'),
setup.qc.DoAll([
setup.qc.TraitReplace('unit', setup.trait.per_evil),
setup.qc.TraitReplace('unit', setup.trait.per_independent),
setup.qc.TraitReplace('unit', setup.trait.per_nimble),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_talent', 'strength'),
setup.qc.TraitReplace('unit', setup.trait.muscle_verystrong),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_talent', 'beauty'),
setup.qc.TraitReplace('unit', setup.trait.face_beautiful),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_talent', 'intelligence'),
setup.qc.TraitReplace('unit', setup.trait.per_smart),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_asset_size', 'compact'),
setup.qc.DoAll([
setup.qc.TraitDecrease('unit', setup.trait.dick_small),
setup.qc.TraitDecrease('unit', setup.trait.dick_small),
setup.qc.TraitDecrease('unit', setup.trait.dick_small),
setup.qc.TraitDecrease('unit', setup.trait.balls_small),
setup.qc.TraitDecrease('unit', setup.trait.balls_small),
setup.qc.TraitDecrease('unit', setup.trait.balls_small),
setup.qc.TraitDecrease('unit', setup.trait.breast_small),
setup.qc.TraitDecrease('unit', setup.trait.breast_small),
setup.qc.TraitDecrease('unit', setup.trait.breast_small),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_asset_size', 'tasteful'),
setup.qc.DoAll([
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_medium),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_medium),
setup.qc.TraitDecrease('unit', setup.trait.dick_medium),
setup.qc.TraitDecrease('unit', setup.trait.dick_medium),
setup.qc.TraitDecrease('unit', setup.trait.dick_medium),
setup.qc.TraitDecrease('unit', setup.trait.balls_medium),
setup.qc.TraitDecrease('unit', setup.trait.balls_medium),
setup.qc.TraitDecrease('unit', setup.trait.balls_medium),
setup.qc.TraitDecrease('unit', setup.trait.breast_medium),
setup.qc.TraitDecrease('unit', setup.trait.breast_medium),
setup.qc.TraitDecrease('unit', setup.trait.breast_medium),
]),
),
setup.qc.IfThenElse(
setup.qres.VarEqual('pet_shop_asset_size', 'bountiful'),
setup.qc.DoAll([
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_large),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_large),
]),
),
]>>
<<run new setup.UnitGroup(
'quest_pet_shop_of_wonders1',
"Pet (Male)",
[
[setup.unitpool.race_humankingdom_male, 0.16339869281045746],
[setup.unitpool.race_humanvale_male, 0.16339869281045746],
[setup.unitpool.race_humandesert_male, 0.040849673202614366],
[setup.unitpool.race_humansea_male, 0.008169934640522875],
[setup.unitpool.race_neko_male, 0.040849673202614366],
[setup.unitpool.race_werewolf_male, 0.01633986928104575],
[setup.unitpool.race_elf_male, 0.040849673202614366],
[setup.unitpool.race_orc_male, 0.02450980392156862],
[setup.unitpool.race_dragonkin_male, 0.0008169934640522874],
[setup.unitpool.race_demon_male, 0.0008169934640522874],
],
0, /* reuse chance */
_processing,
)>>
<<run new setup.UnitGroup(
'quest_pet_shop_of_wonders1_female',
"Pet (Female)",
[
[setup.unitpool.race_humankingdom_female, 0.16339869281045746],
[setup.unitpool.race_humanvale_female, 0.16339869281045746],
[setup.unitpool.race_humandesert_female, 0.040849673202614366],
[setup.unitpool.race_humansea_female, 0.008169934640522875],
[setup.unitpool.race_neko_female, 0.040849673202614366],
[setup.unitpool.race_werewolf_female, 0.01633986928104575],
[setup.unitpool.race_elf_female, 0.040849673202614366],
[setup.unitpool.race_orc_female, 0.02450980392156862],
[setup.unitpool.race_dragonkin_female, 0.0008169934640522874],
[setup.unitpool.race_demon_female, 0.0008169934640522874], ],
0, /* reuse chance */
_processing,
)>>
<<run new setup.QuestTemplate(
'pet_shop_of_wonders', /* key */
"Pet Shopping: Dream Purchase", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
], /* tags */
4, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'appraiser': setup.qu.slaveappraiser,
'buyer1': setup.qu.negotiator,
'buyer2': setup.qu.negotiator, },
{ /* actors */
'pet': setup.unitgroup.quest_pet_shop_of_wonders1, },
[ /* costs */
setup.qc.MoneyCustom(-3000), ],
'Quest_pet_shop_of_wonders_male',
setup.qdiff.hardest43, /* difficulty */
[ /* outcomes */
[
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.Equipment(setup.equipmentpool.pet_good), ],
], [
'Quest_pet_shop_of_wondersSuccess',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined), ],
], [
'Quest_pet_shop_of_wondersFailure',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.MissingUnitRecapture('buyer1', 'capturedmedium'),
],
], [
'Quest_pet_shop_of_wondersDisaster',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.MissingUnit('buyer1'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>>
<<run new setup.QuestTemplate(
'pet_shop_of_wonders_female', /* key */
"Pet Shopping: Dream Purchase", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
'femaleonly'
], /* tags */
4, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'appraiser': setup.qu.slaveappraiser,
'buyer1': setup.qu.negotiator,
'buyer2': setup.qu.negotiator, },
{ /* actors */
'pet': setup.unitgroup.quest_pet_shop_of_wonders1_female, },
[ /* costs */
setup.qc.MoneyCustom(-3000), ],
'Quest_pet_shop_of_wonders_female',
setup.qdiff.hardest43, /* difficulty */
[ /* outcomes */
[
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.Equipment(setup.equipmentpool.pet_good), ],
], [
'Quest_pet_shop_of_wondersSuccess',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined), ],
], [
'Quest_pet_shop_of_wondersFailure',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.MissingUnitRecapture('buyer1', 'capturedmedium'),
],
], [
'Quest_pet_shop_of_wondersDisaster',
[
setup.qc.Slave('pet', 'was bought pre-trained and customized from a famous "pet shop" in the city', undefined),
setup.qc.MissingUnit('buyer1'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_pet_shopping'>>
<p>
You have decided to order a
male
<<= $varstore.get('pet_shop_personality')>> pet
with great
<<= $varstore.get('pet_shop_talent')>> and
<<= $varstore.get('pet_shop_asset_size')>> assets.
</p><<include 'Opportunity_pet_shopping'>>
<p>
You have decided to order a
female
<<= $varstore.get('pet_shop_personality')>> pet
with great
<<= $varstore.get('pet_shop_talent')>> and
<<= $varstore.get('pet_shop_asset_size')>> assets.
</p><<include 'Quest_pet_shop_of_wondersSuccess'>>
<p>
The shop throw in a complimentary bonus to your slavers: a golden pet gear suitable for such highly trained slave.</p><p>
The pet shop was disguised as an ordinary pet shop —- the front counter contains dogs, cats, and other ordinary and cute pets for sale. Having an appointment, your slavers is escorted to the main atrium of their warehouse...
</p>
<p>
While the warehouse looks unimpressive from the outside, the interior is nothing but high class. The floors are scrubbed clean and the interior is fully decorated. Your slavers are escorted to one of the rooms containing a single draped cage.
</p>
<p>
Inside the cage, you found a slave who immediately stands to attention and presents <<their $g.pet>> best begging posture to your slavers —- it appears to be fully trained. After <<rep $g.appraiser>> <<uadv $g.appraiser>> fully check the slave's personalities, body shape, making sure they are up to your specifications. Satisfied, your slavers concluded the deal before going home with a new valuable and eager pet in tow.
</p><<include 'Quest_pet_shop_of_wondersSuccess'>>
<p>
Unknown to the other slavers, <<rep $g.buyer1>> out of curiosity ventured into the other parts of the warehouse.
It was the last time your slavers ever saw <<rep $g.buyer1>> during the quest.
<<urescuenow $g.buyer1>>.
</p><<include 'Quest_pet_shop_of_wondersSuccess'>>
<p>
It is unclear how it happened but <<rep $g.buyer1>> never got back from the trip into the warehouse. Perhaps you will see <<them $g.buyer1>> again, or perhaps <<they $g.buyer1>> will live a happy live as a loyal pet to some other owner...</p><<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head Maid / Butler', /* name */
[
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.per_lunatic,
setup.trait.per_dominant,
setup.trait.skill_hypnotic,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
],
[
setup.trait.per_masochistic,
setup.trait.muscle_weak,
setup.trait.face_ugly,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.skill_flight,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('seasonal_cleaning_head'),
],
{
social: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'seasonalcleaning_', /* key */
'Seasonal "Cleaning"', /* Title */
"darko", /* Author */
[ 'city', 'money', 'prep'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'head': [_criteriahead, 2],
'maid1': [setup.qu.maid, 0.5],
'maid2': [setup.qu.maid, 2], },
{ /* actors */
'rich': setup.unitgroup.quest_seasonal_cleaning1, },
[ /* costs */
],
'Quest_seasonal__cleaning_',
setup.qdiff.hard38, /* difficulty */
[ /* outcomes */
[
'Quest_seasonal__cleaning_Crit',
[
setup.qc.MoneyCrit(),
setup.qc.AddTitle('head', 'seasonal_cleaning_head_full'),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head'), ],
], [
'Quest_seasonal__cleaning_Success',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_seasonal__cleaning_Failure',
[
setup.qc.MoneyNormal(),
setup.qc.TraumatizeRandom('head', 5),
setup.qc.TraumatizeRandom('maid1', 5),
setup.qc.TraumatizeRandom('maid2', 5), ],
], [
'Quest_seasonal__cleaning_Disaster',
[
setup.qc.SlaveMarker('rich'),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('seasonal_cleaning_head_full'),
setup.qres.HasUnitWithTitle('seasonal_cleaning_head', {job_key: 'slaver'}), ],
)>><<set _headunit = $company.player.getUnits({title: "seasonal_cleaning_head"})>>
<<if !_headunit.length>>
<<dangertext "Due to your company missing a slaver important for this quest, this job is no longer able to be completed.">>
<<else>>
<<set _headunit = _headunit[0]>>
<p>
Some time ago, your company took a cleaning job from a well known noble in the city, <<rep $g.rich>>. According to the letter you receive, the noble was apparently very happy with the overall job, and asks for another round of seasonal cleaning. <<They $g.rich>> promises to pay even more this time, but under the condition that the exemplary <<maid _headunit>> <<rep _headunit>> would join the team.
</p>
<p>
It seems particularly odd and dangerous that such a noble would request one of your slavers by name, but when asked about it,
<<rep _headunit>> actually seems eager to go and "finish what <<they _headunit>> have started". Still, the noble promises great amount of reward and it would be remiss to miss out on such an easy opportunity.
</p>
<</if>><p>
Just like before, <<rep $g.rich>> asked <<rep $g.head>> for <<their $g.head>> personal attention in the bedchamber.
Your other slavers never noticed the lusty and needed face that <<rep $g.rich>> made when near <<rep $g.head>> —- or was it never there before? But either way, this time, <<rep $g.head>> took control and demanded various increasingly degenerate things from the noble in order for the noble to get "rewarded" by a private session in the bedchamber. By the end of the job, <<rep $g.head>> had fully trained the noble in various degenerate acts, be it to present itself at command, or even to lick their <<ufeet $g.head>>, all for a chance to get rewarded by a chance to <<if $g.head.isHasDick()>>blow <<their $g.rich>> <<master $g.head>>'s dick<<else>>lick <<their $g.rich>> <<master $g.head>>'s pussy<</if>>
</p>
<p>
<<rep $g.head>> <<uadv $g.head>> extorted a huge sum of money from <<rep $g.rich>>, before leaving the noble to clean up after the new mess. You get the feeling that you'll hear back from the noble again.
</p><p>
While <<rep $g.maid1>> and <<rep $g.maid2>> <<uadv $g.maid1>> cleaned the mansion,
just like before <<rep $g.rich>> often went missing during their stay in the mansion. Only it's more obvious this time where they go, with occasional humping and moaning noises coming up from the bedchamber. There was still a great deal to clean so your slavers decided not to dwell too much on it and just try to finish the somewhat mundane job and get the promised reward.
</p><p>
The amount of work in the mansion were so much more than your slavers had anticipated, and <<rep $g.head>> had no time to advance their intimacy with the <<lord $g.rich>> of the mansion. Numerous questionable stains of various smells litter the entire mansion, be it on the sofas in the living room, the piano, or even from inside the extinguished fireplace.
</p>
<p>
Your slavers managed to finish the job, but they are clearly shaken by the experience.
</p><p>
Unfortunately, <<rep $g.head>> tried to take it too far with <<rep $g.rich>>. When <<rep $g.head>> attempted to make <<rep $g.rich>> lick <<their $g.head>> feet, something in the noble snapped and immediately ordered all your slavers to get out of the vicinity. While no immediate harm happened, it is unlikely that the noble would request specifically for <<rep $g.head>> again, and your slavers' schemes must restart from the beginning.
</p><<run new setup.Title(
'seasonal_cleaning_head', /* key */
"A Noble's Trustee", /* name */
'A trustee of a certain lonely noble in the city', /* name */
'has gained the trust of a certain lonely noble in the city',
0, /* slave value */
{
social: 1,
},
)>>
<<run new setup.Title(
'seasonal_cleaning_head_full', /* key */
"A Noble's Master", /* name */
'Has full control over certain submissive noble in the city', /* name */
'has effectively enslaved a certain submissive noble in the city',
0, /* slave value */
{
social: 2,
knowledge: 1,
},
)>>
<<run new setup.UnitGroup(
'quest_seasonal_cleaning1',
"Inheritor",
[
[setup.unitpool.race_humankingdom_male, 0.5],
[setup.unitpool.race_humankingdom_female, 0.5], ],
1,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitReplace('unit', setup.trait.per_chaste),
setup.qc.TraitReplace('unit', setup.trait.per_loner), ],
)>>
<<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head Maid / Butler', /* name */
[
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.per_lunatic,
setup.trait.per_dominant,
setup.trait.skill_hypnotic,
setup.trait.eq_valuable,
setup.trait.eq_slutty,
],
[
setup.trait.per_masochistic,
setup.trait.muscle_weak,
setup.trait.face_ugly,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.skill_flight,
],
[
setup.qres.Job(setup.job.slaver),
],
{
aid: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'seasonal_cleaning', /* key */
"Seasonal Cleaning", /* Title */
"darko", /* Author */
[ 'city', 'money'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'head': _criteriahead,
'maid1': setup.qu.maid,
'maid2': setup.qu.maid, },
{ /* actors */
'rich': setup.unitgroup.quest_seasonal_cleaning1, },
[ /* costs */
],
'Quest_seasonal_cleaning',
setup.qdiff.hard32, /* difficulty */
[ /* outcomes */
[
'Quest_seasonal_cleaningCrit',
[
setup.qc.MoneyCrit(),
setup.qc.AddTitle('head', 'seasonal_cleaning_head'), ],
], [
'Quest_seasonal_cleaningSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_seasonal_cleaningFailure',
[
setup.qc.MoneyNormal(),
setup.qc.TraumatizeRandom('head', 5),
setup.qc.TraumatizeRandom('maid1', 5),
setup.qc.TraumatizeRandom('maid2', 5), ],
], [
'Quest_seasonal_cleaningDisaster',
[
setup.qc.MoneyNormal(),
setup.qc.TraumatizeRandom('head', 10),
setup.qc.TraumatizeRandom('maid1', 10),
setup.qc.SlaveMarker('rich'),
setup.qc.TraumatizeRandom('maid2', 10), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('seasonal_cleaning_head'),
setup.qres.NoUnitWithTitle('seasonal_cleaning_head_full'), ],
)>><p>
The nobles of the Kingdom of Tor live in grand mansions staffed full with maids of various origins. Occasionally, these mansion hires part-time maids to help clean up after particularly debauched use of the mansion. These jobs often pay well, and well deserved considering the various kinds of mess they have to clean.
</p>
<p>
These kinds of job usually do not interest your company at all, but one such offer came from a particularly well known noble <<rep $g.rich>>. <<They $g.rich>> is the sole inheritor of an estate, and to the best of your knowledge <<they $g.rich>> has no other relative nor <<they $g.rich>> is married. In fact, if the rumor were to be believed, the main reason <<rep $g.rich>> looks for maid is to search for a life-long companion to serve <<them $g.rich>> both formally and informally.
</p>
<p>
If you have a particularly convincing slaver, you could try to send them on this job. Given the prudeness of the noble, the most likely scenario is that nothing happens and your slavers got paid for their job. But with a particularly convincing and sexy slaver, who knows what might happen...
</p><p>
Throughout their stay in the mansion, <<rep $g.head>> somehow managed to secure the attention of the mansion's <<lord $g.rich>>. Oftentimes, <<rep $g.rich>> would request for <<rep $g.head>> to privately clean <<their $g.rich>> bedchamber, and the two would disappear for hours to come. When asked about it, <<rep $g.rich>> <<uadv $g.rich>> refused to answer, but promises that the company would benefit greatly from whatever is happening there. Only time will tell if this promise will actually come to fruition in the future...
</p>
<p>
Still, there are much work to be done cleaning all the questionable stains left on the sofas and the floor. With the help of your experienced slavers the work was done efficiently leaving the mansion back to a pristine state. For such splendid work your slavers were paid greatly by the <<lord $g.rich>>.
</p><p>
The amount of work in the mansion were so much more than your slavers had anticipated, and <<rep $g.head>> had no time to attempt to seduce or even befriend the <<lord $g.rich>> of the mansion. Numerous questionable stains of various smells litter the entire mansion, be it on the sofas in the living room, the piano, or even from inside the extinguished fireplace.
</p>
<p>
Using their knowledge and wit your slavers managed to
<<uadv $g.head>> clean up all the mess, while trying their best not to imagine how these stains came to be in the first place.
</p>
<p>
Your slaver were paid well for the job, although a little disappointed for not being able to execute the degenerate plan of yours. Perhaps there will be another chance.
</p><p>
The amount of work in the mansion were so much more than your slavers had anticipated, and <<rep $g.head>> had no time to attempt to seduce or even befriend the <<lord $g.rich>> of the mansion. Numerous questionable stains of various smells litter the entire mansion, be it on the sofas in the living room, the piano, or even from inside the extinguished fireplace.
</p>
<p>
Your slavers managed to finish the job, but they are clearly shaken by the experience.
</p><p>
The amount of work in the mansion were so much more than your slavers had anticipated, and <<rep $g.head>> had no time to attempt to seduce or even befriend the <<lord $g.rich>> of the mansion. Numerous questionable stains of various smells litter the entire mansion, be it on the sofas in the living room, the piano, or even from inside the extinguished fireplace.
</p>
<p>
Your slavers did not have to imagine hard what happened as one of the guests appeared to have not left. Given no choice, your slavers were made to service the guest. In the end, although your slavers were paid well for the job, they are clearly shaken by the entire ordeal.
</p><<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head "Maid / Butler"', /* name */
[
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.per_lunatic,
setup.trait.per_dominant,
setup.trait.skill_hypnotic,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
setup.trait.magic_wind,
],
[
setup.trait.muscle_weak,
setup.trait.face_ugly,
setup.trait.per_masochistic,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.magic_earth,
setup.trait.skill_flight,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('seasonal_cleaning_head_full'),
],
{
slaving: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'seasonal_training', /* key */
"Seasonal Training", /* Title */
"darko", /* Author */
[ 'city', 'money', 'item', 'prep'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'head': [_criteriahead, 2.5],
'maid1': [setup.qu.maid, 0.25],
'maid2': [setup.qu.maid, 0.25],
},
{ /* actors */
'rich': setup.unitgroup.quest_seasonal_cleaning1, },
[ /* costs */
],
'Quest_seasonal_training',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_seasonal_trainingCrit',
[
setup.qc.Equipment(setup.equipmentpool.social_good),
setup.qc.MoneyNormal(), ],
], [
'Quest_seasonal_trainingSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_seasonal_trainingFailure',
[
setup.qc.MoneyNormal(),
setup.qc.Injury('head', 4), ],
], [
'Quest_seasonal_trainingDisaster',
[
setup.qc.SlaveMarker('rich'),
setup.qc.AddTitle('head', 'seasonal_cleaning_head'),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head_full'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('seasonal_cleaning_head_full', {job_key: 'slaver'}), ],
)>><<set _headunit = $company.player.getUnits({title: "seasonal_cleaning_head_full"})>>
<<if !_headunit.length>>
<<dangertext "Due to your company missing a slaver important for this quest, this job is no longer able to be completed.">>
<<else>>
<<set _headunit = _headunit[0]>>
<p>
Your company receives yet another letter from the city noble <<rep $g.rich>> who has been effectively enslaved by your slaver <<rep _headunit>>.
This time, there were no longer any pretense of cleaning service — the slave begs in the letter for <<their $g.rich>> master to <<uadv _headunit>> punish them.</p>
<p>
<<rep _headunit>> will surely be eager to play with <<their _headunit>> misbehaving slave, and can certainly extort the slave for even more money and perhaps a little souvenir while <<they _headunit>>'s at it. All in all, <<rep _headunit>> did a wonderful job in converting the formerly chaste and lonely noble into what <<they $g.rich>> is right now.
</p>
<</if>><p>
When your slavers arrived, <<rep $g.rich>> immediately prostrate <<themselves $g.rich>> in front of <<their $g.rich>> master. Grinning <<uadv $g.head>>, your slaver <<rep $g.head>> immediately brought the noble-turned-slave into their private dungeon in the mansion while the rest of your slavers enjoyed the various amenities in the mansion. Soon enough sounds of whipping and moaning filled the dungeons, with <<rep $g.rich>> being in ecstacy from receiving so much attention from <<their $g.rich>> <<master $g.head>>.
</p>
<p>
By the end of the week, your slavers emphasizes the current state of affair by making their employer serve as the mansion's
<<maid $g.rich>>, wiping <<their $g.rich>> own and your slavers' mess with both a rag and their tongue. Your slavers made sure to instill further obedience to the slave before leaving the mansion together with one of <<their $g.rich>> clothes as souvenir.
</p><p>
Your slavers arrived with a bang as <<rep $g.head>> immediately commanded <<rep $g.rich>> to approach. Seeing the obedience training has started to waver, <<rep $g.head>> spent no time wasted and immediately brough the noble-turned-slave into <<their $g.rich>> own dungeon complex to be retrained.
In the coming days, sounds of whipping, moaning, and begging filled the dungeons, with <<rep $g.rich>> being in a combined sensation of pleasure and pain administered <<uadv $g.head>> by their <<master $g.head>>. Meanwhile your other slavers enjoyed the various amenities of the mansion including the former bedroom of the slave.
</p>
<p>
By the end of the week, <<rep $g.head>> was confident that the slave obedience training will hold until they meet again. Your slavers extorted a large amount of money which the slave obediently agree. <<rep $g.head>> <<if !$g.head.isHasDick()>>, donning a strap-on<</if>> gave the slave one last proper throat fuck
before leaving the mansion.</p><p>
Your slavers arrived with a bang as <<rep $g.head>> immediately commanded <<rep $g.rich>> to approach. Seeing the obedience training has started to waver, <<rep $g.head>> spent no time wasted and immediately brough the noble-turned-slave into <<their $g.rich>> own dungeon complex to be retrained.
But <<rep $g.head>> accidentally injured themselves during one of the training sessions —- still, the training was completed in time.
Your other slavers had to carry <<rep $g.head>> back home together with the money they extorted from the noble.</p><p>
Unfortunately, <<rep $g.head>> tried to take it too far with <<rep $g.rich>>. When <<rep $g.head>> attempted to make <<rep $g.rich>>
<<if $g.rich.isHasDick()>>suck on their down dick<<else>>
lick their own pussy<</if>>, something in the noble snapped and immediately ordered all your slavers to get out of the vicinity. <<rep $g.head>> was shocked that the noble still have so much fight left and was already outside the mansion by the time <<they $g.head>> recovered from the shock. Still, it's impossible for the noble to completely rebound from your slaver's masterful training, and this is most likely just a temporary setback.
</p><<run new setup.QuestTemplate(
'snake_oil_salesman', /* key */
"Snake Oil Salesman", /* Title */
"darko", /* Author */
[ 'city', 'money'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'salesman': setup.qu.salesman,
'conner': setup.qu.conartist,
'crier': setup.qu.attentionseeker,
'cow': setup.qu.slavecow, },
{ /* actors */
'alchemist': setup.unitgroup.all, },
[ /* costs */
],
'Quest_snake_oil_salesman',
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'Quest_snake_oil_salesmanCrit',
[
setup.qc.MoneyCrit(),
setup.qc.ItemPool(setup.itempool.all_normal), ],
], [
'Quest_snake_oil_salesmanSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Item(setup.item.healing_potion), ],
], [
'Quest_snake_oil_salesmanFailure',
[
],
], [
'Quest_snake_oil_salesmanDisaster',
[
setup.qc.Injury('salesman', 2),
setup.qc.Injury('conner', 2),
setup.qc.Injury('crier', 2),
setup.qc.Ire('humankingdom', 2),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
],
)>><p>
The cityfolks are rather superstitious —- a trait many immoral merchants have taken advantage off. Hogwashes from land afar sell for very high prices in the city, promising eternal youth, beauty, or even a personal harem in the afterlife.
</p>
<p>
Your slavers have an idea to bring one of your liquid-producing slaves and attempt to sell the fresh produce as a miracle elixir. They will first need to craft themselves a large empty barrel to contain the slave, and connect their dick or breast into a pump directly fed into the tap attached to the barrel. To motivate the slave, a dildo or two will be stuffed into their unused holes —- and certain hidden locations in the barrel will be made hollow to allow punishing an unruly slave. Once the barrel is crafted all your slavers need to do it to stuff a slave in, carry everything to the city in the cover of the night, and open an unofficial stall somewhere in a hidden corner in the city.
</p>
<p>
Of course, since slavery is banned in the city, your slavers must be absolutely careful not to spoil the source of the elixir.
</p><p>
<<rep $g.conner>> managed to <<uadv $g.conner>> demonstrate the effectiveness of your <<titlefull $g.cow>> <<rep $g.cow>>'s
<<if $g.cow.isHasDick()>>cum<<else>>milk<</if>>, disguised as a "purified milk", for curing various ailments such as minor injuries to even huffing cough in front of a crowd gathered by <<rep $g.crier>>. The cityfolks all rushed in to purchase your produce from <<rep $g.salesman>> before it quickly run out —- they even attracted the city's alchemist who's interested in the concoction, and traded <<their $g.alchemist>> own potion for the miracle elixir.
</p>
<p>
At the end of the day, your slavers closed shop not forgetting to take <<rep $g.cow>> out of <<their $g.cow>> barrel for a well deserved rest. <<rep $g.conner>> was perhaps too successful in <<their $g.conner>> job that <<rep $g.salesman>> and <<rep $g.crier>> can't resist to make <<rep $g.cow>> produce one more round of <<if $g.cow.isHasDick()>>cum from <<their $g.cow>> well-abused <<udick $g.cow>><<else>>milk from their well abused <<ubreast $g.cow>><</if>>, this time for their own consumption.</p><p>
<<rep $g.conner>> <<uadv $g.conner>> demonstrated the effectiveness of your <<titlefull $g.cow>> <<rep $g.cow>>'s
<<if $g.cow.isHasBalls()>>cum<<else>>milk<</if>>, disguised as a "purified milk", for curing various ailments such as minor injuries to even huffing cough in front of a crowd gathered by <<rep $g.crier>>. It was not the best performance, but apparently it was enough to draw sufficient number of cityfolks to buy the hard-earned produce of <<rep $g.cow>>'s well abused
<<if $g.cow.isHasBalls()>><<uballs $g.cow>><<else>><<ubreast $g.cow>><</if>>. One customer traded their own <<rep setup.item.healing_potion>> for your special elixir.
</p>
<p>
At the end of the day, your slavers closed shop not forgetting to take <<rep $g.cow>> out of <<their $g.cow>> barrel for a well deserved rest. <<rep $g.crier>> <<uadv $g.crier>> petted <<rep $g.cow>>'s head while <<rep $g.salesman>> <<uadv $g.salesman>> counted their profits.</p><p>
<<rep $g.conner>> <<uadv $g.conner>> demonstrated the effectiveness of your <<titlefull $g.cow>> <<rep $g.cow>>'s
<<if $g.cow.isHasBalls()>>cum<<else>>milk<</if>>, disguised as a "purified milk", for curing various ailments such as minor injuries to even huffing cough in front of a crowd gathered by <<rep $g.crier>>. But unfortunately, the royal alchemist happens to be in the vicinity, and declared your stand as a hogwash. With the declaration, nobody gave patronage to your slavers, and they were not able to sell any drop of <<rep $g.cow>>'s full
<<if $g.cow.isHasBalls()>><<uballs $g.cow>><<else>><<ubreast $g.cow>><</if>>.
</p><p>
Unfortunately, the barrel was not designed sturdily and it somehow broke into two in the middle of the sales. Revealing the slave inside, your slavers had to risk their limbs in order to escape from the city guards with the slave intact.
</p><<run new setup.QuestTemplate(
'the_bodyswap_experiment', /* key */
"The Bodyswap Experiment", /* Title */
"darko", /* Author */
[ 'city', 'trait', 'transformation'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'slave': setup.qu.slave,
'scientist1': setup.qu.scientist,
'scientist2': setup.qu.scientist,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'swapper': setup.unitgroup.all, },
[ /* costs */
],
'Quest_the_bodyswap_experiment',
setup.qdiff.harder35, /* difficulty */
[ /* outcomes */
[
'Quest_the_bodyswap_experimentCrit',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.Slave('swapper', "was a test subject in an underground laboratory who swapped bodies with one of your slaves", undefined),
setup.qc.MoneyCustom(2000), ],
], [
'Quest_the_bodyswap_experimentSuccess',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.MoneyCustom(2000),
setup.qc.Injury('slave', 2), ],
], [
'Quest_the_bodyswap_experimentFailure',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.MoneyCustom(1000), ],
], [
'Quest_the_bodyswap_experimentDisaster',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.AddRandomTraitWithTags('slave', ['per']),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(), ],
)>><p>
A laboratory in the undercity of Lucgate is looking for a "volunteer" to participate in one of their experiments. This time, they are looking to try out the new bodyswapping machine they have constructed with half magic and half science. Allegedly, this machine is capable of swapping the bodies of two creatures, each retaining their own memories and personalities.
</p>
<p>
Of course, there is a good reason why they are paying well for such job. The bodyswapping mechanism is still in early prototype, and who knows what kind of side effect it could have on the participants. You can force one of your slaves as an unwilling participate, if you choose to gather the money. You will never know who the slave will swap bodies with, however.
</p><p>
The bodyswapper looks innocuous from the outside —- two simple tubes each with a chair inside, connected
with a pipe.
Your slaver <<rep $g.scientist1>> <<uadv $g.scientist1>> strapped your slave <<rep $g.slave>> tight on the chair, making sure to gag the slave to keep silence in the laboratory.
On the other tube is another slave that is also being tied tight into the chair.
Once both slaves are in place, with a few click of buttons the doors of the tubes are slowly closing, closing the slaves together with their muffles inside.
</p><<include 'Quest_the_bodyswap_experimentCommon'>>
<p>
With few more presses of the buttons, the tubes start to glow strange colors. The scientists as well as your slavers watched the experiment goes for quite a while until the glowing subsides.
Your slavers can see a slight transparent smoke coming from both tubes, but it does not seem to be anything significant.
</p>
<p>
The tubes slowly opens revealing their participants whose bodies are completely switched —- on the tube that used to house <<rep $g.slave>> is now <<rep $g.swapper>>'s body, and vice versa. The slaves are barely conscious having undergone such a painful procedure, but open questioning it was clear that the bodyswapping was successful. The scientists celebrated with your slavers.
</p>
<p>
Your slavers were paid the promised amount, as well as given the now useless slave <<rep $g.swapper>>, who now occupies <<rep $g.slave>>'s original body, as a complimentary gift.
Your slavers can't wait to explore the new bodies of their toys.
</p><<include 'Quest_the_bodyswap_experimentCommon'>>
<p>
With few more presses of the buttons, the tubes start to glow strange colors. The scientists as well as your slavers watched the experiment goes for quite a while until the glowing subsides.
Your slavers can see a black-ish smoke coming from both tubes, certainly does not look like anything good!
</p>
<p>
The tube slowly opens revealing their participants whose bodies are completely switched —- on the tube that used to house <<rep $g.slave>> is now <<rep $g.swapper>>'s body, and vice versa. But both slaves are unconscious —- it seems the procedure was so taxing on their bodies that the two slaves passed out from the pain. Once they regained consciousness, via questioning it was clear that the bodyswapping was successful, albeit injuring the participants. The scientists celebrated modestly with your slavers.
</p>
<p>
At the end of the celebration, your slavers were paid the promised amount, as well as returned <<rep $g.slave>> who now occupied
<<= $g.swapper.getName()>>'s previous body.
Your slavers can't wait to explore the new body of their toy.
</p><<include 'Quest_the_bodyswap_experimentCommon'>>
<p>
With few more presses of the buttons, the tubes start to glow strange colors. The scientists as well as your slavers watched the experiment goes for quite a while. But then a loud explosion can be heard from the tube that's holding your slave <<rep $g.slave>> —- when the door suddenly open, your slave has occupied a new, but corrupted body.
</p>
<p>
It appears that although the bodyswap was successful, the procedure somehow misfired and corrupted their participants. This is clearly a computation fault in the scientists side —- thanking your slavers they immediately get back to work. Your slavers took their pay and the transformed, bodyswapped wreck of a slave and took everything home.</p><<include 'Quest_the_bodyswap_experimentCommon'>>
<p>
With few more presses of the buttons, the tubes start to glow strange colors. The scientists as well as your slavers watched the experiment goes for quite a while until the glowing subsides.
Your slavers can see a purple-ish smoke coming from both tubes, certainly does not look like anything good!
</p>
<p>
The tube slowly opens revealing their participants whose bodies are completely switched —- on the tube that used to house <<rep $g.slave>> is now <<rep $g.swapper>>'s body, and vice versa. Both slaves seems to be in a daze —- upon examination, it seems that not only their bodies have been swapped —- their personalities have mixed in too. This is clearly not within the desired specification of the bodyswap, and the scientists had nothing to celebrate for. Your slavers were paid the promised amount and sent home together with the bodyswapped and personality-altered wreck of a slave.</p><<run new setup.Title(
'the_noble_games', /* key */
"The Noble Games Participant", /* name */
'Currently participating in the Noble Games', /* name */
'is a current participant of the Noble Games',
0, /* slave value */
{},
)>>
<<run new setup.QuestTemplate(
'the_noble_games', /* key */
"The Noble Games: Subterfuge", /* Title */
"darko", /* Author */
[ 'city', 'money'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'thief': setup.qu.thief,
'planner': setup.qu.planner,
'slave': setup.qu.slaveobedient,
'briber': setup.qu.briber, },
{ /* actors */
},
[ /* costs */
],
'Quest_the_noble_games',
setup.qdiff.hard34, /* difficulty */
[ /* outcomes */
[
'Quest_the_noble_gamesCrit',
[
setup.qc.VarSet('the_noble_games_progress', '1', -1),
setup.qc.AddTitle('thief', 'the_noble_games'),
setup.qc.AddTitle('planner', 'the_noble_games'),
setup.qc.AddTitle('slave', 'the_noble_games'),
setup.qc.AddTitle('briber', 'the_noble_games'),
setup.qc.MoneyCrit(), ],
], [
'Quest_the_noble_gamesCrit',
[
setup.qc.VarSet('the_noble_games_progress', '1', -1),
setup.qc.AddTitle('thief', 'the_noble_games'),
setup.qc.AddTitle('planner', 'the_noble_games'),
setup.qc.AddTitle('slave', 'the_noble_games'),
setup.qc.AddTitle('briber', 'the_noble_games'),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_noble_gamesFailure',
[
setup.qc.Injury('thief', 2),
setup.qc.Injury('planner', 1),
setup.qc.Injury('briber', 2), ],
], [
'Quest_the_noble_gamesDisaster',
[
setup.qc.MissingUnit('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarNull('the_noble_games_progress'),
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('the_noble_games'),
],
)>><p>
Among the degenerate rich living in the <<lore location_lucgate>>, there is an infamous games played among them dubbed "The Noble Games". This is a series of games hosted by a high noble, where the participants demonstrate their prowess in various disciplines, rather unorthodoxly. The winner is promised a most salivating reward: a personal furniture directly from the noble's bedchamber itself. Even if you don't plan to decorate your room, it will fetch for quite a large sum of money.
</p>
<p>
A new game has just started, and somehow you were able to gather information about it. Apparently, the first game in this competition will test the participant's wits —- in order to win the first game, participants must smuggle something interesting into a particular address in the city. It is up to the participant's imagination what kind of contraband they want to smuggle in, but whatever the contraband is, it will be returned to the participant if they win the game.
</p>
<p>
Being a slaver company, there is only one contraband that you can reasonably put in: a highly trained slave. Smuggling a slave into a slaver-averse city full of guards will be a challenge though, let alone smuggling the slave directly into the address. Still, if you are willing to risk it, it's best to send a team of three: a briber to make the guards look the other way, a planner to plan your slavers' way in, and finally a thief to infiltrate the mansion and drop the package in.
</p>
<p>
<<dangertextlite 'Warning'>>: This is a special challenge that will pit the same team of slavers across multiple challenges. Make sure to send a well-rounded team! Note that the slave you send on this mission will not be gone... probably.
</p><p>
With <<their $g.planner>> preparations ready, your slavers are ready to execute the plan drawn <<uadv $g.planner>> by <<rep $g.planner>>. <<rep $g.briber>> bribed your slavers way all through the mansion, with the guards having to awkwardly look to the other side as your slavers brought in a cart containing an totally normal sack of "grains". Eventually, your slavers arrived safely at the address, on which a grand mansion stood.
</p>
<p>
<<rep $g.thief>> <<uadv $g.thief>> got to work by throwing a grappling hook over to the open window on the second floor. With the help of your other slavers, <<rep $g.thief>> managed to transport the
<<if $g.slave.isHasTraitExact('training_obedience_basic')>>struggling<<else>>compliant<</if>> slave into the mansion. <<rep $g.thief>> proceed to dodge the various traps and contraptions blocking <<their $g.thief>> way up and <<they $g.thief>> made it to the innermost chambers.
</p>
<p>
<<if $gOutcome == 'crit'>>
From the pristine look of the chamber, it seems that your slavers were the first one to arrive. Your slavers gagged and bound the poor slave <<rep $g.slave>>, making sure <<they $g.slave>> can't produce any meaningful sound to alert the guards. Once they do, they help themselves to the valuables in the room, which is understood as the extra prize for being the first to complete the first game.
<<else>>
Apparently your slavers were not the first to complete this game, as several out of place objects and slaves are placed eye-catchingly in the room. It seems some other participants also have the same ideas of smuggling in a slave. Still, your slavers are confident that the quality of <<rep $g.slave>> will carry them through.
<</if>>
</p>
<p>
A few days later, you receive a congratulary mail somehow delivered into your fort, together with <<rep $g.slave>> nicely packaged with a ribbon. It seems your slavers were successful in completing the first part of the game.
</p><p>
<<rep $g.briber>> put <<their $g.briber>> trust in the wrong guards as one of the guards pretended to accept the bribe, only to chase after the slavers later down in the city. Your slavers had to risk going a dangerous alley to escape the chase, getting injured in the process.
</p>
<p>
Perhaps there will be another opportunity for another Noble Games.
</p><p>
<<rep $g.briber>> put <<their $g.briber>> trust in the wrong guards as one of the guards pretended to accept the bribe, only to chase after the slavers later down in the city. Your slavers had no choice but to leave their cargo in the city as they escape the city.
</p>
<p>
Perhaps there will be another opportunity for another Noble Games.
</p><<run new setup.UnitGroup(
'quest_the_noble_games21',
"Opponent Knight",
[
[setup.unitpool.race_humankingdom_male, 0.01529285823520416],
[setup.unitpool.race_humanvale_male, 0.006117143294081664],
[setup.unitpool.race_humandesert_male, 0.003058571647040832],
[setup.unitpool.race_humansea_male, 0.0006117143294081664],
[setup.unitpool.race_neko_male, 0.006117143294081664],
[setup.unitpool.race_werewolf_male, 0.001529285823520416],
[setup.unitpool.race_elf_male, 0.006117143294081664],
[setup.unitpool.race_orc_male, 0.002293928735280624],
[setup.unitpool.race_dragonkin_male, 0.00004587857470561248],
[setup.unitpool.race_demon_male, 0.00003058571647040832],
[setup.unitpool.race_humankingdom_female, 0.01529285823520416],
[setup.unitpool.race_humanvale_female, 0.006117143294081664],
[setup.unitpool.race_humandesert_female, 0.003058571647040832],
[setup.unitpool.race_humansea_female, 0.0006117143294081664],
[setup.unitpool.race_neko_female, 0.006117143294081664],
[setup.unitpool.race_werewolf_female, 0.001529285823520416],
[setup.unitpool.race_elf_female, 0.006117143294081664],
[setup.unitpool.race_orc_female, 0.002293928735280624],
[setup.unitpool.race_dragonkin_female, 0.00004587857470561248],
[setup.unitpool.race_demon_female, 0.00003058571647040832],
[setup.unitpool.race_humankingdom_male, 0.4587857470561248],
[setup.unitpool.race_humankingdom_female, 0.4587857470561248], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_adventurer), ],
)>>
<<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Knight', /* name */
[
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.bg_knight,
setup.trait.per_chaste,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_submissive,
setup.trait.per_logical,
setup.trait.per_evil,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.muscle_extremelyweak,
setup.trait.muscle_veryweak,
setup.trait.muscle_weak,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
combat: 3,
}
)>>
<<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Scout', /* name */
[
setup.trait.eyes_neko,
setup.trait.eyes_dragonkin,
setup.trait.per_attentive,
setup.trait.per_aggressive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_calm,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
survival: 3,
}
)>>
<<set _criteriasparrer = new setup.UnitCriteria(
null, /* key */
'Sparrer', /* name */
[
setup.trait.per_tough,
setup.trait.per_stubborn,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.height_giant,
],
[
setup.trait.per_masochistic,
setup.trait.per_nimble,
setup.trait.per_curious,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.height_dwarf,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
brawn: 3,
}
)>>
<<set _criteriapony = new setup.UnitCriteria(
null, /* key */
'Pony', /* name */
[
setup.trait.per_tough,
setup.trait.per_active,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_pony,
setup.trait.training_pony_basic,
setup.trait.training_pony_advanced,
setup.trait.training_pony_master,
],
[
setup.trait.per_chaste,
setup.trait.per_nimble,
setup.trait.per_studious,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.training_mindbreak,
setup.trait.training_none,
setup.trait.training_obedience_basic,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('the_noble_games'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_noble_games2', /* key */
"The Noble Games: Martial", /* Title */
"darko", /* Author */
[ 'city', 'prep'
], /* tags */
1, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'knight': _criteriaknight,
'scout': _criteriascout,
'sparrer': _criteriasparrer,
'pony': _criteriapony, },
{ /* actors */
'enemy': 'quest_the_noble_games21', },
[ /* costs */
],
'Quest_the_noble_games2',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_the_noble_games2Crit',
[
setup.qc.VarSet('the_noble_games_progress', '2', -1),
setup.qc.Slave('enemy', "was a participant in the Noble Games who lost to your slavers in one of the games", undefined),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_noble_games2Crit',
[
setup.qc.VarSet('the_noble_games_progress', '2', -1),
setup.qc.Slave('enemy', "was a participant in the Noble Games who lost to your slavers in one of the games", undefined), ],
], [
'Quest_the_noble_games2Failure',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.Injury('knight', 12), ],
], [
'Quest_the_noble_games2Failure',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.MissingUnitRecapture('knight', 'capturedmedium'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('the_noble_games_progress', '1'), ],
[ /* expiration outcomes */
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'), ],
)>><p>
You, or rather your slavers received an invitation to the second bout of the Noble Games. This time, it is going to be held in a secret mansion outside of the<<lore location_lucgate>>, with vast lush fields. The participants are expected to show their martial prowess this time, culminating in a one-on-one fight atop a horseback.
</p>
<p>
You will need to select one of your slavers to champion the team —- but only those who completed the previous game before can participate in this phase of the game. Then, the other slavers should be there to support the champion, by scouting the enemy and helping the champion train.
</p>
<p>
<<dangertextlite 'Warning'>>: Failure to complete this mission will forfeit your slavers from the Noble Games, and it has to be reattempted from the beginning.
</p><<set _pony = $g.pony.isHasTrait('training_pony_basic') && $g.pony.isHasTrait('eq_pony')>>
<p>
<<rep $g.knight>> <<uadv $g.knight>> trained with <<rep $g.sparrer>> in preparation for the upcoming fight, while your slaver <<rep $g.scout>> head over to the enemy team to scout the opponent. The opponent seems like a <<uadj $g.enemy>> <<man $g.enemy>>, with a well-trained <<ubody $g.enemy>>. The fight won't be easy, especially since it will be done on a horseback —-
<<if $g.knight.isHasTrait('bg_knight')>>given <<rep $g.knight>> past, however, it should not be an issue.
<<else>>
which <<rep $g.knight>> is not at all accustomed to.
<</if>>
<<if _pony>>
However, looking at the geared-up <<rep $g.pony>> your slavers had another idea...
<<else>>
The lack of horse is also a problem, and your slavers had to pay <<money 1000>> to rent a suitable one.
<<run $company.player.substractMoney(1000)>>
<</if>>
</p>
<p>
The day has come for the fight. The opponent <<rep $g.enemy>> come in riding on a white horse, seemingly ready for the fight. Meanwhile,
<<if _pony>>
<<rep $g.knight>> stried into the battlefield atop <<their $g.knight>> specially trained pony: <<rep $g.pony>>. The slave struggled under the weight of the armor, but <<their $g.pony>> training holds true and were able to carry your slaver into the battlefield. This show earned the glare of the enemy <<rep $g.enemy>>, who got provoked into charging your slaver without waiting for the bout to begin.
<<else>>
your own slaver <<rep $g.knight>> is no less ready, <<uadv $g.knight>> striding into the battlefield atop the borrowed horse.
As <<rep $g.knight>> prepared for a fight, the enemy, immediately charged, oblivious to the manners of an honorable fight. It seems your slavers are in luck —- the enemy did not come from a noble background and has no clue about combat etiquette.
<</if>>
Such an unhonorable behavior raised the ire of the Noble Game's host, who immediately disqualifies the enemy for the treachery. Stripped from <<their $g.enemy>> armor, the host handed <<them $g.enemy>> over to your slavers to use as your slavers see fit, as punishment for the unhonorable behavior.
</p>
<p>
Having <<their $g.knight>> opponent disqualified, your slavers advanced to the final round of the Noble Games. While holding the leash of their new slaves, your slavers went back home to the fort. They now await the invitation for the last bout of the games with caution, unsure what the last game would entail.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers also pawned most of the new slave's previous belonging, earning your company some money.
</p>
<</if>><<set _pony = $g.pony.isHasTrait('training_pony_basic') && $g.pony.isHasTrait('eq_pony')>>
<p>
<<rep $g.knight>> <<uadv $g.knight>> trained with <<rep $g.sparrer>> in preparation for the upcoming fight, while your slaver <<rep $g.scout>> head over to the enemy team to scout the opponent. The opponent seems like a <<uadj $g.enemy>> <<man $g.enemy>>, with a well-trained <<ubody $g.enemy>>. The fight won't be easy, especially since it will be done on a horseback —-
<<if $g.knight.isHasTrait('bg_knight')>>given <<rep $g.knight>> past, however, it should not be an issue.
<<else>>
which <<rep $g.knight>> is not at all accustomed to.
<</if>>
<<if _pony>>
However, looking at the geared-up <<rep $g.pony>> your slavers had another idea...
<<else>>
The lack of horse is also a problem, and your slavers had to pay <<money 1000>> to rent a suitable one.
<<run $company.player.substractMoney(1000)>>
<</if>>
</p>
<p>
The day has come for the fight. The opponent <<rep $g.enemy>> come in riding on a white horse, seemingly ready for the fight. Meanwhile,
<<if _pony>>
<<rep $g.knight>> stried into the battlefield atop <<their $g.knight>> specially trained pony: <<rep $g.pony>>. The slave struggled under the weight of the armor, but <<their $g.pony>> training holds true and were able to carry your slaver into the battlefield.
<<else>>
your own slaver <<rep $g.knight>> is no less ready, <<uadv $g.knight>> striding into the battlefield atop the borrowed horse.
<</if>>
Unfortunately, after being your slavers for a while, <<rep $g.knight>> has completely forgotten about combat etiquette. Without warning, your slaver charged into the enemy, which immediately raised the ire of the game's host. Your slaver was immediately disqualified from the game —- worse, as punishment, <<rep $g.knight>> was stripped out of <<their $g.knight>> clothes and handed over to the enemy, to use as <<they $g.enemy>> see fit. Last your slavers saw, <<rep $g.knight>> was forced to deepthroat <<their $g.knight>> former opponent, still in full armor (except the pants, of course).
</p>
<p>
<<if $gOutcome == 'failure'>>
Fortunately, the enemy was not into slavery, and after a while <<they $g.enemy>> gracefully returned the used and abused <<rep $g.knight>> back to your slavers. <<rep $g.knight>> will need some time to recover from this shame.
<<else>>
<<rep $g.knight>> were never returned back to your slavers.
<<urescuenow $g.knight>>.
<</if>>
</p><<set _criteriaescort = new setup.UnitCriteria(
null, /* key */
'High-Class Escort', /* name */
[
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.eq_veryslutty,
setup.trait.eq_veryvaluable,
],
[
setup.trait.breast_tiny,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.race_orc,
setup.trait.dick_tiny,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.face_ugly,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
sex: 3,
}
)>>
<<set _criteriamaid = new setup.UnitCriteria(
null, /* key */
'Maid / Butler', /* name */
[
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_studious,
setup.trait.skill_ambidextrous,
],
[
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.skill_connected,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
aid: 3,
}
)>>
<<set _criteriaalchemist = new setup.UnitCriteria(
null, /* key */
'Alchemist', /* name */
[
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.skill_alchemy,
],
[
setup.trait.per_stubborn,
setup.trait.per_active,
setup.trait.per_sexaddict,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('the_noble_games'),
],
{
arcane: 3,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Slave (Obedient)', /* name */
[
setup.trait.per_submissive,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.training_obedience_master,
setup.trait.training_endurance_master,
setup.trait.training_domestic_master,
setup.trait.training_oral_master,
setup.trait.training_vagina_master,
setup.trait.training_anal_master,
setup.trait.training_dominance_master,
setup.trait.training_masochist_master,
setup.trait.training_sissy_master,
setup.trait.training_pet_master,
setup.trait.training_pony_master,
setup.trait.training_toilet_master,
setup.trait.training_horny_master,
setup.trait.training_edging_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dominant,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.HasTitle('the_noble_games'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_noble_games__bed_arts', /* key */
"The Noble Games: Bed Arts", /* Title */
"darko", /* Author */
[ 'city', 'item', 'prep'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'escort': _criteriaescort,
'maid': _criteriamaid,
'alchemist': _criteriaalchemist,
'slave': _criteriaslave, },
{ /* actors */
'target': 'humankingdom', },
[ /* costs */
],
'Quest_the_noble_games__bed_arts',
setup.qdiff.harder40, /* difficulty */
[ /* outcomes */
[
'Quest_the_noble_games__bed_artsCrit',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.ItemPool(setup.itempool.furniture_good),
setup.qc.BoonizeRandom('escort', 12),
setup.qc.BoonizeRandom('maid', 14),
setup.qc.BoonizeRandom('alchemist', 11), ],
], [
'Quest_the_noble_games__bed_artsCrit',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.ItemPool(setup.itempool.furniture_good), ],
], [
'Quest_the_noble_games__bed_artsFailure',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'), ],
], [
'Quest_the_noble_games__bed_artsDisaster',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.Corrupt('escort'),
setup.qc.Corrupt('maid'),
setup.qc.Corrupt('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('the_noble_games_progress', '2'), ],
[ /* expiration outcomes */
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'), ],
)>><p>
After passing through the last two games in the Noble Games, your slavers have finally received the invitation for the final bout of the games. A room has been reserved for your slavers in a high-class inn in the<<lore location_lucgate>>, where they must transform it into a place of such degeneracy to please the host of the game. It is up to the participant's creativity how degenerate they want the situation to be.
</p>
<p>
With the grand prize (being a rare furniture) so close within your grasp, you cannot afford to mess up now. Standard sex would probably not please the host, so you got creative. A sex slave, first and foremost, to be spreadeagled on the bed. An alchemist should concoct a magical potion, with a hint of demonic taint, to transform the room's air into an aura of debauchery. There should also be a maid, to complete the illusion of a grand demonic mansion, and most importantly a high class whore, to engage in depraved by cultured sex with the bound slave.
</p><p>
After successfully smuggling the slave into the room, your slavers began their preparation. First, <<rep $g.alchemist>> scouted the room for the location of the scrying magic, from which the host will watch the scene unfolds. Finding that, your slavers arranged the slave <<rep $g.slave>> at the best possible angle to be viewed from the scryer, displaying <<their $g.slave>> genitals and <<unipplesall $g.slave>>. <<rep $g.maid>> <<uadv $g.maid>> cleans all traces of dust from the room, while <<rep $g.escort>> prepares <<their $g.escort>> <<ubody $g.escort>> for the what is surely going to be a long night.
</p>
<p>
First, your slavers pour the potion concocted
<<if $g.alchemist.isHasTrait('skill_alchemy')>>
professionally
<<else>>
amateurishly
<</if>>
by <<rep $g.alchemist>> all along <<rep $g.slave>>'s <<ubody $g.slave>>. The slave writhes in pain as the potion begin its work, severing the barrier between this realm and the mist and forming miniscule portals, enough to transfer the demonic air but not much else.
With the room turning purple, <<rep $g.maid>> gets ready to play <<their $g.maid>> role as a mansion's devoted maid while <<rep $g.escort>> starts to <<uadv $g.escort>> strip <<their $g.escort>>
<<uequipment $g.escort>> sensuously. <<rep $g.escort>> sways <<their $g.escort>> <<ubody $g.escort>> as <<they $g.escort>> approach the gagged and bound <<rep $g.slave>>. <<They $g.escort>> crawled on top of the slave,
pressing <<their $g.slave>> armpits on top of the slave's gags.
While maintaining that the slave must breateh through the smell of <<their $g.slave>> armpits, <<rep $g.escort>> moves <<their $g.escort>> <<uhands $g.escort>> across <<rep $g.slave>>'s <<ubody $g.slave>>, fondling all the sensitive parts, while
<<if $g.escort.isHasVagina()>>using the other hand to rub <<their $g.escort>> pussy.<<else>>using the other hand to jerk their <<udick $g.escort>>. <</if>>
Feeling aroused, <<if !$g.escort.isHasDick()>><<they $g.escort>> grabbed a nearby strap-on<<else>><<they $g.escort>> jerk themself to full erection<</if>> and prepare it in front of the slave's <<uhole $g.slave>>. With a body heightened in sensitivity (thanks to the potion's effect), <<rep $g.slave>> moans incoherently as <<rep $g.escort>> begins to insert <<their $g.escort>>
<<if !$g.escort.isHasDick()>>fake<</if>> dick into the available hole, <<if $g.escort.isHasDick()>>until it is balls-deep.<<else>>until the strap on is fully inserted.<</if>>
<<rep $g.escort>> climaxes soon after,
<<if $g.slave.isHasTrait('eq_chastity')>>
as if mocking the slave's caged cock.
<<else>>
which is followed by the slave soon after.
<</if>>
</p>
<p>
The games concluded, your slavers returned home as you await news of their performance. Few days later, a large shipment has arrived in your fort, containing a rare noble furniture inside.
It seems your slavers have impressed the host greatly with their debauchery, and won the games. Enjoy your prize!
</p><p>
Your slavers tried their best to appear as lascivious as possible in the room, but it seems that the host was not impressed at all by the half-hearted performances of your slavers and their slave.
Your slavers' team ended up not victorious, with the grand prize eluding your grasps. Maybe you can try again with a different team next time.
</p><p>
The potion concocted by <<rep $g.alchemist>> for the games turned out to be too potent —- when applied to the slave's body, instead of letting just the demonic air in, it also let the corruption flowed. Soon after your slave's and slavers' bodies were corrupted, transforming before their very eyes.
This caused your slavers to panic, losing all arousal during the intercourse. It is not a surprise they ended up losing the competition at the final and most crucial stage.
</p><<run new setup.QuestTemplate(
'the_rear_deal', /* key */
"The Rear Deal", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'upgrade',
'item',
], /* tags */
1, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'negotiator1': setup.qu.negotiator,
'negotiator2': setup.qu.negotiator,
'slavetrainer': setup.qu.slavetrainer, },
{ /* actors */
},
[ /* costs */
],
'Quest_the_rear_deal',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_rear_dealCrit',
[
setup.qc.VarSet('the_rear_deal_active', 1, -1),
setup.qc.SlaveOrderTheRearDeal(),
],
], [
'Quest_the_rear_dealCrit',
[
setup.qc.VarSet('the_rear_deal_active', 1, -1),
setup.qc.SlaveOrderTheRearDeal(),
],
], [
'Quest_the_rear_dealCrit',
[
setup.qc.VarSet('the_rear_deal_active', 1, -1),
setup.qc.SlaveOrderTheRearDeal(),
],
], [
'Quest_the_rear_dealCrit',
[
setup.qc.VarSet('the_rear_deal_active', 1, -1),
setup.qc.SlaveOrderTheRearDeal(),
],
], ],
[
[setup.questpool.city, 1],
], /* quest pool and rarity */
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.VarNull('the_rear_deal_active'),
setup.qres.Cooldown(8),
],
)>><p>
<<if $inventory.isHasItem(setup.item.rear_technology)>>
The rich nobleman in the <<lore location_lucgate>> has once again asked for a slave trained to a very
demanding specification. The promised reward this time is five bottles of <<rep setup.item.potion_tight>>,
which you can certainly make good use of. Do you have what it takes to complete the quest?
<<else>>
You have recently heard that a rich nobleman in the <<lore location_lucgate>> is in possession of an extremely rare artifact: <<rep setup.item.rear_technology>>. This technology is said to allow
the use of the rare and elusive potion <<rep setup.item.potion_tight>>, which can then be used to
restore the tightness a slave's rear holes at will.
Surely getting such an important and crucial technology cannot be easy,
so why does this quest appears to be so easy?
<</if>>
</p><p>
After intense negotiations, your slaver managed to drove a hard bargain —
<<if $inventory.isHasItem(setup.item.rear_technology)>>
five bottles of <<rep setup.item.potion_tight>>
<<else>>
<<rep setup.item.rear_technology>>
<</if>>
in exchange for the perfectly trained slave exactly to the noble's specifications. The slave must be delivered in a timely manner too, or the entire deal is forfeit.
Once <<rep $g.negotiator1>> delivered <<their $g.negotiator1>> full report to you,
you started to wonder if your <<uadjgood $g.slavetrainer>> slave trainer <<rep $g.slavetrainer>> has
what it takes to undergo such a difficult training...
Either way,
<<if $inventory.isHasItem(setup.item.rear_technology)>>
you better get to work if you want to get your grubby <<uhands $unit.player>> on that <<rep setup.item.potion_tight>>s.
<<else>>
the fate of this artifact is now in your <<uhands $unit.player>>.
<</if>>
</p>
<p>
<<dangertext 'Please note'>>: This quest can only reappear once every two months.
</p><<run new setup.Title(
'training_as_a_service', /* key */
"To-Be-Trained", /* name */
'A slave lent to your company for training', /* name */
'is being lent to your company to be properly trained as a slave',
0, /* slave value */
{},
)>>
<<run new setup.QuestTemplate(
'training_as_a_service', /* key */
"Training as a Service", /* Title */
"darko", /* Author */
[ 'city', 'unit', 'order'
], /* tags */
1, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'salesman': setup.qu.salesman,
'trainer': setup.qu.slavetrainer,
'informer': setup.qu.informer,
'slave': setup.qu.slaveobedient, },
{ /* actors */
'trainee1': setup.unitgroup.all,
'trainee2': setup.unitgroup.all,
'client': setup.unitgroup.all, },
[ /* costs */
],
'Quest_training_as_a_service',
setup.qdiff.normal33, /* difficulty */
[ /* outcomes */
[
'Quest_training_as_a_serviceCrit',
[
setup.qc.SlaveOrderTrainingAsAService(),
setup.qc.SlaveOrderTrainingAsAService(),
setup.qc.AddTitle('trainee1', 'training_as_a_service'),
setup.qc.AddTitle('trainee2', 'training_as_a_service'),
setup.qc.Slave('trainee1', "was a freshly caught slave that your company has taken to train for a client", undefined),
setup.qc.Slave('trainee2', "was a freshly caught slave that your company has taken to train for a client", undefined), ],
], [
'Quest_training_as_a_serviceSuccess',
[
setup.qc.SlaveOrderTrainingAsAService(),
setup.qc.AddTitle('trainee1', 'training_as_a_service'),
setup.qc.Slave('trainee1', "was a freshly caught slave that your company has taken to train for a client", undefined), ],
], [
'Quest_training_as_a_serviceFailure',
[
],
], [
'Quest_training_as_a_serviceDisaster',
[
setup.qc.Injury('salesman', 4),
setup.qc.Injury('trainer', 4),
setup.qc.Injury('informer', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('training_as_a_service'), ],
)>><p>
Since the abolishment of slavery in the Kingdom of Tor 10 years prior,
the demand for slave training services has understandably declined. This leads to many slave training schools to close their doors, making it difficult for patrons who wish to have their slaves trained.
</p>
<p>
As a slaving company, this becomes an opportunity for you. You can try to send a group of slavers to find prospective buyers for slave training services. Most likely, they will supply your company with a defiant slave that you must train. The more trainings you dish out, the better the pay, but there is likely a strict time limit on how long you can train the slaves for. If your company is up for the job, this could be a profitable endeavor.
</p><p>
<<rep $g.informer>> managed to find your company a client,
a grizzled <<lady $g.client>> who were just gifted two fresh slaves by <<their $g.client>> friend, completely untrained.
</p>
<p>
To prove your company's worth,
<<rep $g.trainer>> <<uadv $g.trainer>> demonstrated masterful slaving technique on the slaves, which impresses the <<lady $g.client>>. <<rep $g.salesman>> negotiated a good deal for the trainings —- you are to dish whatever training you want on the two slaves, who must both be returned strictly within 8 weeks. The client has a preference for certain trainings, which will give greater rewards should they be fulfilled.
</p><p>
<<rep $g.informer>> managed to find your company a client,
a young <<lady $g.client>> who just acquired their first ever slave and is completely clueless about how to train the disobedient slave.
</p>
<p>
To prove your company's worth,
<<rep $g.trainer>> <<uadv $g.trainer>> demonstrated basic slaving technique on the slave, which impresses the <<lady $g.client>>. <<rep $g.salesman>> negotiated a good deal for the training —- you are to dish whatever training you want on the slave, who must be returned strictly within 8 weeks. The client has a preference for certain trainings, which will give greater rewards should they be fulfilled.
</p><p>
<<rep $g.informer>> were unable to find potential clients for your slavers. After one week of fruitless searching, your slavers returned to your fort empty-handed.
</p><p>
The undercity of Lucgate proves a dangerous place as your slavers were ambushed by thugs during their search for a client and returned home injured.
</p><<run new setup.QuestTemplate(
'treasury_assault_finale', /* key */
"Treasury Assault Finale", /* Title */
"darko", /* Author */
[
'veteran',
'city',
'special',
'unknown'
], /* tags */
4, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'disarmer': setup.qu.trapper,
'thief': setup.qu.thief,
'seducer': setup.qu.seducer, },
{ /* actors */
'knight': [],
},
[ /* costs */
],
'Quest_treasury_assault_finale',
setup.qdiff.hardest66, /* difficulty */
[ /* outcomes */
[
'Quest_treasury_assault_finaleCrit',
[
setup.qc.Item(setup.item.f_drinktray_master),
setup.qc.MoneyNormal(),
setup.qc.Event('the_quest_for_excalibur__epilogue', 12), ],
], [
'Quest_treasury_assault_finaleCrit',
[
setup.qc.Item(setup.item.f_drinktray_master),
setup.qc.Event('the_quest_for_excalibur__epilogue', 12), ],
], [
'Quest_treasury_assault_finaleCrit',
[
setup.qc.Item(setup.item.f_drinktray_master),
setup.qc.Ire('humankingdom', 15),
setup.qc.Injury('disarmer', 4),
setup.qc.Injury('thief', 2),
setup.qc.Event('the_quest_for_excalibur__epilogue', 12), ],
], [
'Quest_treasury_assault_finaleCrit',
[
setup.qc.Item(setup.item.f_drinktray_master),
setup.qc.Ire('humankingdom', 30),
setup.qc.Injury('disarmer', 4),
setup.qc.Injury('thief', 2),
setup.qc.Event('the_quest_for_excalibur__epilogue', 12), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
You have decided to return the Excalibur back to the treasure of Lucgate, with the hope that it will
cure your <<repfull $g.knight>>'s possession by the cursed sword.
Hopefully by the end of the trial <<rep $g.knight>> will be back to <<their $g.knight>> <<uadjgood $g.knight>> self.
</p>
<p>
To return the Excalibur back to the coffers of Lucgate, your slavers ironically had to redo a mission they did a long time ago: infiltrate the doffers of the<<lore location_lucgate>>. This time, however, there are no master thief to aid them in the efforts, and hence your slavers must rely on themselves and their considerable skills. This will be an ultimate challenge for your slavers to overcome in this quest for Excalibur. Who knows, maybe there are still some things worth stealing in the treasury...
</p><p>
Bringing the Excalibur back to town, your slavers surveyed the castle in the coming days.
After determining the best plan of action, your slavers waited until one particular night where many of the guards are having an induction party. When the day come, your slavers are ready. <<rep $g.seducer>> masterfully seduced the remaining guards of the treasury, pointing towards <<their $g.seducer>> <<ugenital $g.seducer>> sensuously while simultaneously drawing all the guards' attention towards <<their $g.seducer>> bare <<ubreasts $g.seducer>>.
</p>
<p>
The distraction was sufficient to allow you <<repfull $g.thief>> and <<utheirrel $g.thief $g.disarmer>> <<rep $g.disarmer>> to sneak into the treasury. Thanks to the previous theft, the security inside the treasury is tighter than ever, with magical traps of various kinds.
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
It was no trouble for <<rep $g.disarmer>>'s experienced <<uhands $g.disarmer>> however, and the <<urace $g.disarmer>> <<uadv $g.disarmer>> disarmed most of the traps, allowing your slavers to infiltrate quietly. Finally,
<<else>>
<<rep $g.disarmer>> however is not skillful enough to dodge all the traps, and triggered some in the process. Still,
<</if>>
your slavers made it to the inner chamber where the Excalibur is supposed to sit.
</p>
<p>
<<rep $g.thief>> softly placed the sword back on the pedestal, while quietly thinking to <<themself $g.thief>> what a shame it is to leave such a valuable item alone.
But as if rewarding your slavers for their efforts, suddenly a hidden door opened from the inner sanctum, revealing to your slavers a legendary artifact: <<rep setup.item.f_drinktray_master>><<if $gOutcome == 'crit'>>, as well as a load of treasure<</if>>.
Your slavers took the rewards back to the entrance, and escaped into the dead of the night.
</p>
<p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
Your slaver's infiltration was a massive success. Under <<rep $g.seducer>>'s masterful allure, and <<rep $g.disarmer>>'s trapping skills, none of the guards were able to identify any of the thieves. Your reputation with the <<rep $company.humankingdom>> did not take a dive even after such a brazen thievery.
<<else>>
Unfortunately, your slavers were not skilled enough to draw no undue attention.
The magical trap that <<rep $g.disarmer>> triggered was apparently an identifying trap, and somehow your company was identified as the mastermind behind the said theft.
<<if $gOutcome == 'disaster'>>
Worse, <<rep $g.seducer>> failed to detect the faked allure from one of the guards, who carefully monitor your slaver and deduced <<their $g.seducer>> identity.
<</if>>
Your company's relations with <<rep $company.humankingdom>> suffers massively as a result, and you can expect retaliation soon...
<</if>>
</p>
<p>
A few days later, <<rep $g.knight>> has finally returned to normal.
No more crusade this crusade that, the <<urace $g.knight>> slaver is back to their
<<uadjgood $g.knight>> self.
Interestingly, <<they $g.knight>> retain no memory of the entire sequence of events,
but still best not to keep the slaver anywhere near the cursed sword in the future.
</p>
<p>
The <<rep setup.item.f_drinktray_master>> sits beautifully on your desk, waiting for whatever it is you plan for the artifact. Perhaps you can sell it, or place it in your own bedchamber.
</p><<run new setup.UnitGroup(
'quest_treasury_assault1',
"Vault Treasure",
[
[setup.unitpool.race_humansea_male, 0.5],
[setup.unitpool.race_humansea_female, 0.5], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitsReplace('unit', [setup.trait.training_obedience_advanced, setup.trait.training_endurance_advanced]), ],
)>>
<<run new setup.QuestTemplate(
'treasury_assault', /* key */
"Treasury Assault", /* Title */
"darko", /* Author */
[ 'veteran',
'city',
'money',
'item'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'disarmer': setup.qu.trapper,
'thief': setup.qu.thief,
'seducer': setup.qu.seducer, },
{ /* actors */
'treasure': 'quest_treasury_assault1', },
[ /* costs */
],
'Quest_treasury_assault',
setup.qdiff.hardest42, /* difficulty */
[ /* outcomes */
[
'Quest_treasury_assaultCrit',
[
setup.qc.Ire('humankingdom', 2),
setup.qc.Event('excalibur_missing_sword', 3),
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
setup.qc.Slave('treasure', "was a living treasure in the vaults of Lucgate", undefined),
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
setup.qc.VarSet('quest_excalibur', '1', -1),
setup.qc.MoneyCustom(3000), ],
], [
'Quest_treasury_assaultCrit',
[
setup.qc.Ire('humankingdom', 2),
setup.qc.Event('excalibur_missing_sword', 3),
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
setup.qc.VarSet('quest_excalibur', '1', -1),
setup.qc.MoneyCustom(3000), ],
], [
'Quest_treasury_assaultFailure',
[
setup.qc.Ire('humankingdom', 2),
setup.qc.VarSet('quest_excalibur', '-1', 4),
setup.qc.MissingUnitRecapture('disarmer', 'capturedmedium'), ],
], [
'Quest_treasury_assaultFailure',
[
setup.qc.Ire('humankingdom', 2),
setup.qc.VarSet('quest_excalibur', '-1', 4),
setup.qc.MissingUnitRecapture('disarmer', 'capturedmedium'),
setup.qc.MissingUnitRecapture('thief', 'capturedmedium'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.VarNull('quest_excalibur'), ],
[ /* expiration outcomes */
setup.qc.VarSet('quest_excalibur', '-1', 4), ],
)>><p>
The Castle of Lucgate stands in the center of the magnificent city, towering over all the other buildings. While the castle itself is a magnificent building, you are most interested in the treasury. It is said that great riches and valuable treasures are kept there, although it is surely going to be heavily guarded.
</p>
<p>
It would normally be impossible for your slavers to infiltrate the heavily guarded treasury.
<<set _u = setup.getAnySlaver()>>
However, your <<repfull _u>>
<<uadv _u>> informed you that an anonymous master thief is going to attempt a heist soon. It might then be possible for your slavers to steal some of the treasury items while the guards are distracted by the master thief, if the rumors prove true...
</p>
<p>
A seducer, to keep the remaining guards distracted, and two infiltrators to sneak into the treasure and steal whatever nearby items they could get their grubby hands on. Rumors said that the treasure is abound with traps, so better make sure one of them is adept at disarming traps. Truly a by-the-book approach to thievery!
</p><p>
At the supposed date of the heist, donning their best camouflage, your slavers waited near one of the palisades of the castle.
After hours of waiting, a shouting was heard from the other side of the castle. It seems your slaver picked the right position, as guards from the area they are in rushedly moved to the other side of the castle. <<rep $g.seducer>> swayed their <<ubody $g.seducer>> sensuously towards the remaining guards, confusing the poor soldiers who are sure to get their pay deducted once the rest of your slavers finish their business here.
</p>
<p>
Using the distraction and the commotion, <<rep $g.thief>> and <<utheirrel $g.thief $g.disarmer>> <<rep $g.disarmer>> sneaked into the treasury.
<<if $g.disarmer.isHasTrait('per_attentive')>>
Using their perceptiveness,
<<else>>
Slowly,
<</if>>
<<rep $g.disarmer>> spotted and disarmed the traps littering the place one by one as they advanced slowly in the treasury.
<<if $gOutcome == 'crit'>>
<<rep $g.thief>> <<uadv $g.thief>> spotted a hidden door in one of the corridors, which they proceed to enter.
Behind, the door, a wealth of rare equipments are scattered on the ground, but that's not what is grabbing your slaver's attention.
Suspended in the air in the middle of a room is a naked slave, fully bound and hung like a chandelier.
<<if $g.treasure.isHasDick()>>
<<Their $g.treasure>> dick is forced hard by the tight cock ring <<they $g.treasure>> is forced to wear, while
<<else>>
<<Their $g.treasure>> breasts pointed downwards weighted by heavy-looking balls, while
<</if>>
<<their $g.treasure>> mouth forced open with a ring gag, in which inserted a formidable-looking dildo.
But what's most impressive of all is that your slavers can see that the slave remains sane despite all these — truly a remarkable species of a properly-trained furniture slave. After grabbing a few of the scattered equipments, <<rep $g.thief>> undoed the slave's binding just enough to get <<them $g.treasure>> off the ceiling, but not enough to let <<them $g.treasure>> do any meaningful movement.
<<if $g.treasure.isHasDick()>>
<<rep $g.disarmer>> playfully teased the slave's hard <<udick $g.treasure>> while they escape from the treasury with their treasures.
<<else>>
According to <<rep $g.disarmer>>, there was no time to undo the slave's nipple weights and so the slave had to endure the weights bouncing up and down, pulling <<their $g.treasure>> nipples painfully as your slavers escaped the treasure with their treasures.
<</if>>
<<else>>
Not wanting to take any risks, your slavers entered the first room they encountered. A host of equipments lay in the room, for your slavers' taking. Choosing the best ones, your slavers escaped the treasure quickly before the rest of the guards are alarmed by their presence.
<</if>>
</p>
<p>
Once outside, <<rep $g.thief>> <<uadv $g.thief>> signalled the end to <<rep $g.seducer>>, who was still busy distracting the guards by hinting on <<their $g.seducer>> <<ugenital $g.seducer>>. Safe and sound, your slavers returned back home with their treasures.
</p>
<p>
Rumors said that the master thief's heist was successful, although the Kingdom of Tor denies all accounts of a breach to their most guarded treasury...
</p><p>
At the supposed date of the heist, donning their best camouflage, your slavers waited near one of the palisades of the castle.
After hours and hours of waiting, the supposed heist never seems to occur. Tired of waiting, <<rep $g.disarmer>> <<uadv $g.disarmer>>
<<if $g.disarmer.getSpeech() != setup.speech.friendly>>
asked
<<else>>
ordered
<</if>>
<<rep $g.seducer>> to distract the guards.
<<rep $g.seducer>> did <<their $g.seducer>> best to distract the guards, but there were just too many of them.
</p>
<p>
<<if $gOutcome == 'failure'>>
<<rep $g.disarmer>> sneaking attempt were unsuccessful as a guard was alarmed. While attempting to escape, <<rep $g.disarmer>> triggered one of the treasury's traps — a hornet nest fell straight on <<their $g.disarmer>> head, covering <<their $g.disarmer>> head and stopping <<their $g.disarmer>> escape. With no way to help the <<uadjbad $g.disarmer>> <<urace $g.disarmer>>, the other slavers decided to escape the place without the reckless slaver.
<<urescuenow $g.disarmer>>.
<<else>>
<<rep $g.disarmer>> and <<rep $g.thief>> managed to sneak into the treasury, but <<rep $g.seducer>> was simply unable to seduce all 100 of the guards guarding the treasury. <<rep $g.disarmer>> and <<rep $g.thief>> were trapped, with no way to escape as the guards continued their patrol around the area. There was no other choice but for <<rep $g.seducer>> to reluctantly abandon <<their $g.seducer>> teammates and returned to your fort alone.
Still, <<rep $g.seducer>> managed to find some information should you with to rescue the reckless slavers.
<</if>>
</p><<run new setup.QuestTemplate(
'slavecorrupt_all', /* id */
'Slave Corruption: Any', /* Title */
'darko', /* author */
[
'fort',
'transformation'
], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptAll', /* description */
setup.qdiff.normal40,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee'),
setup.qc.Corrupt('trainee'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee'),
],
],
[
'SlaveCorruptAllFailure',
[
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.TraumatizeRandom('head', setup.TRAUMA_SHORT),
setup.qc.TraumatizeRandom('assistant1', setup.TRAUMA_SHORT),
setup.qc.TraumatizeRandom('assistant2', setup.TRAUMA_SHORT),
],
],
],
[],
[],
)>><p>
Corrupt a slave randomly. For such a random result it is not necessary to offer a slave as an offering.
</p><p>
The corruption went much better than expected, with the dark powers look favorable on your company.
</p><p>
The corruption attempt was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The power behind the mist were not pleased with the corruption attempt, and showed your slavers
abhorrent visions which traumatized them greatly.
</p><<run new setup.QuestTemplate(
'slavecorrupt_arms', /* id */
'Slave Corruption: Arms', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptArms', /* description */
setup.qdiff.hardest41,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'arms'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'arms'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's arms.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_body', /* id */
'Slave Corruption: Body', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptBody', /* description */
setup.qdiff.hardest42,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'body'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'body'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's body.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_dick', /* id */
'Slave Corruption: Dick', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptDick', /* description */
setup.qdiff.hardest43,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'dickshape'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'dickshape'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's dick.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_ears', /* id */
'Slave Corruption: Ears', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptEars', /* description */
setup.qdiff.hardest44,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'ears'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'ears'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's ears.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_eyes', /* id */
'Slave Corruption: Eyes', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptEyes', /* description */
setup.qdiff.hardest45,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'eyes'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'eyes'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's eyes.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_legs', /* id */
'Slave Corruption: Legs', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptLegs', /* description */
setup.qdiff.hardest46,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'legs'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'legs'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's legs.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_mouth', /* id */
'Slave Corruption: Mouth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptMouth', /* description */
setup.qdiff.hardest47,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'mouth'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'mouth'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's mouth.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_tail', /* id */
'Slave Corruption: Tail', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptTail', /* description */
setup.qdiff.hardest48,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'tail'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'tail'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's tail.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavecorrupt_wings', /* id */
'Slave Corruption: Wings', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaveCorruptWings', /* description */
setup.qdiff.hell55,
[
[
'SlaveCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'wings'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaveCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'wings'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaveCorruptAllDisaster',
[
setup.qc.MissingUnit('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slave's wings. Wing corruption is significantly harder than other corruptions.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_all', /* id */
'Slaver Corruption: Any', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptAll', /* description */
setup.qdiff.hard50,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee'),
setup.qc.Corrupt('trainee'),
setup.qc.Corrupt('trainee'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver safely.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><p>
The corruption went much better than expected, with the dark powers look favorable on your company.
<<rep $g.offering>> was lost forever to the mist.
</p><p>
The corruption attempt was successful.
<<rep $g.offering>> was lost forever to the mist.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
<<rep $g.offering>> was lost forever to the mist.
</p><p>
The power behind the mist were not pleased with the corruption attempt. It attempted to take both
<<rep $g.trainee>> and <<rep $g.offering>> as punishment, but the prince you've bargained
with prevented <<rep $g.trainee>> from being taken.
</p><<run new setup.QuestTemplate(
'slavercorrupt_arms', /* id */
'Slaver Corruption: Arms', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptArms', /* description */
setup.qdiff.extreme51,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'arms'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'arms'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's arms.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_body', /* id */
'Slaver Corruption: Body', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptBody', /* description */
setup.qdiff.extreme52,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'body'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'body'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's body.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_dick', /* id */
'Slaver Corruption: Dick', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptDick', /* description */
setup.qdiff.extreme53,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'dickshape'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'dickshape'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's dick.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_ears', /* id */
'Slaver Corruption: Ears', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptEars', /* description */
setup.qdiff.extreme54,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'ears'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'ears'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's ears.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_eyes', /* id */
'Slaver Corruption: Eyes', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptEyes', /* description */
setup.qdiff.extreme55,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'eyes'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'eyes'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's eyes.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_legs', /* id */
'Slaver Corruption: Legs', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptLegs', /* description */
setup.qdiff.extreme55,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'legs'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'legs'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's legs.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_mouth', /* id */
'Slaver Corruption: Mouth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptMouth', /* description */
setup.qdiff.extreme56,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'mouth'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'mouth'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's mouth.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_tail', /* id */
'Slaver Corruption: Tail', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptTail', /* description */
setup.qdiff.extreme57,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'tail'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'tail'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's tail.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<run new setup.QuestTemplate(
'slavercorrupt_wings', /* id */
'Slaver Corruption: Wings', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
8, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.corruption_head,
'assistant1': setup.qu.corruption_assistant,
'assistant2': setup.qu.corruption_assistant,
'offering': setup.qu.offeringslave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SlaverCorruptWings', /* description */
setup.qdiff.abyss60,
[
[
'SlaverCorruptAllCrit',
[
setup.qc.Corrupt('trainee', 'wings'),
setup.qc.MissingUnitForever('offering'),
]
],
[
'SlaverCorruptAllSuccess',
[
setup.qc.Corrupt('trainee', 'wings'),
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllFailure',
[
setup.qc.MissingUnitForever('offering'),
],
],
[
'SlaverCorruptAllDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.MissingUnitForever('offering'),
],
],
],
[],
[],
)>><p>
Corrupt a slaver's wings. Wing corruption is significantly harder than other corruptions.
</p>
<p>
<<dangertext 'WARNING'>>: the offered slave will be lost forever as they are offered to the powers beyond the mist...
</p><<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.race_orc,
setup.trait.magic_water,
setup.trait.per_chaste,
setup.trait.per_smart,
], /* critical traits */
[
setup.trait.race_elf,
setup.trait.race_humandesert,
setup.trait.per_submissive,
setup.trait.per_lustful,
setup.trait.per_slow,
setup.trait.per_masochistic,
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.magic_fire,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_minotaur', /* key */
'Bounty Hunt: Minotaur', /* Title */
'darko', /* author */
['desert', 'money', 'favor',], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
},
[ /* costs */
],
'QuestBountyHuntMinotaur', /* passage description */
setup.qdiff.normal36, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntMinotaurCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humandesert', 10),
],
],
[
'QuestBountyHuntMinotaurSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humandesert', 10),
],
],
[
'QuestBountyHuntMinotaurFailure',
[
],
],
[
'QuestBountyHuntMinotaurDisaster',
[
setup.qc.Injury('merc1', 2),
setup.qc.Injury('merc2', 2),
setup.qc.Injury('negotiator', 2),
setup.qc.Trait('merc1', setup.trait.anus_gape),
setup.qc.IfActorSatisfyThen(
'merc1',
setup.qs.trait_vagina,
setup.qc.Trait('merc1', setup.trait.vagina_gape)),
setup.qc.Trait('merc2', setup.trait.anus_gape),
setup.qc.IfActorSatisfyThen(
'merc2',
setup.qs.trait_vagina,
setup.qc.Trait('merc2', setup.trait.vagina_gape)),
],
],
],
[[setup.questpool.desert, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
There are rumors of half-man half-bull creatures living on the eastern
deserts.
Although they have the looks of a human, their brain consists of nothing
but plunging their massive rod into the next victim.
Such fast breeding creature poses a threat onto the nearby settlements, and occasionally
bounties are posted to hunt them.
</p><p>
Your slavers managed to
<<uadv $g.merc1>>
slay or otherwise shoo away these minotaurs from the lands
used by the settlers, either via dumb luck or pure skill.
Either way for such splendid work the settlements are more than happy to pay your
slavers an extra bonus.
</p><p>
Happening upon such a minotaur assaulting an unlucky traveler, your slavers
was momentarily
mesmerized by the size of the minotaur's dick, before
<<uadv $g.merc1>>
recalling
their original mission and proceed to slay the beast.
The traveler was certainly grateful but that was not really the reason why
they saved her.
</p><p>
Unfortunately, your slavers were lost in the vast eastern desert. With no minotaur
in sight they gave up after a week and returned to your fort.
</p><p>
Happening upon such a minotaur assaulting an unlucky traveler, your slavers
was completely mesmerized by the size of the minotaur's dick.
As the slavers all fell in their own fantasies they did not realize when the
minotaur, having completely filled the unlucky traveler, turned its gaze
into your slavers and proceed to breed them one by one.
Your slavers would need some time to recover from such ordeal, although to be
fair it's probably their own fault.
</p><<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.race_humandesert,
setup.trait.race_orc,
setup.trait.magic_fire,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_werewolf,
setup.trait.race_humanvale,
setup.trait.magic_water,
],
setup.qu.trader,
)
)>>
<<run new setup.QuestTemplate(
'delivery_service', /* key */
'Delivery Service', /* Title */
'darko', /* author */
['desert', 'money'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trader1': _trader,
'trader2': _trader,
'trainer': setup.qu.slavetrainer,
'pony': [setup.qu.slavepony, 2],
},
{ /* actors */
},
[ /* costs */
],
'QuestDeliveryService', /* passage description */
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'QuestDeliveryServiceCrit',
[
setup.qc.Equipment(setup.equipmentpool.pony_good),
setup.qc.MoneyNormal(1.0),
],
],
[
'QuestDeliveryServiceSuccess',
[
setup.qc.MoneyNormal(1.4),
],
],
[
'QuestDeliveryServiceFailure',
[
],
],
[
'QuestDeliveryServiceDisaster',
[
setup.qc.Injury('pony', 4),
setup.qc.Trait('pony', null, setup.trait.training_pony_master.getTraitGroup()),
],
],
],
[[setup.questpool.desert, 20],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_pony_basic]),
], /* prerequisites to generate */
)>><p>
The eastern nomads are known for their prowess and taming and riding horses.
Amongs the multiple clans in the east, there is one in particular which specializes
in training people as ponies. These clans raised their ponies to be a hardy,
bulky, and obedient steed and relies largely on them for their transportation and work.
The steeds in those villages can usually be seen in the village center either being
parked or being used to move some goods --- but these steeds are always wearing their
standard pony gear --- bit gag, pony plug, and arm/leg hooves.
Some more kinky owners like to decorate their ponies too with nipple clamps and chastity
devices.
</p>
<p>
A client has come forward to you asking to help deliver an important cargo to the leader
of the clan.
He specifically want your slavers to deliver the cargo using one of your pony slaves,
to show goodwill.
You can take the offer and give your ponies some fresh air,
but a journey to the eastern desert must surely take a while.
</p><p>
Your slavers and their pony slave arrived at the nomad camp earlier than expected.
They
<<uadv $g.trader1>>
delivered the cargo to the leader of the encampment, who appreciated the gesture of sending it
via a well-bred pony slave.
As a bonus reward, your slavers were given a particularly kinky pony gear courtesy of the settlement,
which can be used as a reward or punishment for your pony slave.
Before heading back, your slavers spend some time looking around the camp, and observing some the camp's
pony trainers training their newer ponies to properly trot.
</p><p>
Your slavers and their pony slave arrived at the nomad camp as scheduled.
The leader of the encampment were happy to receive the cargo
<<uadv $g.trader1>>
delivered in a way that fully respects
their traditions, and sends his good regards to your client.
Before heading back, your slavers spend some time looking around the camp, and observing some the camp's
pony trainers training their newer ponies to properly trot.
</p><p>
Unfortunately, by the time your slavers and <<rep $g.pony>> arrived at the camp,
the nomads had already moved on to a different location. It seems that <<rep $g.pony>>
was just not fast enough. You make notes to punish the slave later.
</p><p>
Unfortunately, <<rep $g.pony>> collapsed from exhaustion in the middle of the trip,
and your slavers had no choice but to bring <<them $g.pony>> back home to recover.
Perhaps <<their $g.pony>> pony training requires a refresher.
</p><<set _criterianegotiator = new setup.UnitCriteria(
null, /* key */
'Abyssal Negotiator', /* name */
[
setup.trait.per_calm,
setup.trait.per_logical,
setup.trait.bg_mystic,
setup.trait.per_lunatic,
setup.trait.per_aggressive,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_lustful,
setup.trait.per_generous,
setup.trait.per_kind,
setup.trait.per_honest,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_bargainatany_price', /* key */
'A Bargain at any Price', /* Title */
'darko', /* Author */
[ 'desert', 'veteran', 'danger', 'upgrade'
], /* tags */
4, /* weeks */
20, /* quest expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'negotiator': _criterianegotiator,
'bimbo': setup.qu.bimbo,
'offering': setup.qu.slavegeneric, },
{ /* actors */
},
[ /* costs */
],
'Quest_a_bargainatany_price',
setup.qdiff.hell53, /* difficulty */
[ /* outcomes */
[
'Quest_a_bargainatany_priceCrit',
[
setup.qc.Item(setup.item.dark_technology),
setup.qc.MissingUnitForever('offering'),
setup.qc.MoneyNormal(), ],
], [
'Quest_a_bargainatany_priceSuccess',
[
setup.qc.Item(setup.item.dark_technology),
setup.qc.MissingUnitForever('offering'),
setup.qc.MoneySmall(),
setup.qc.Corrupt('bimbo'), ],
], [
'Quest_a_bargainatany_priceFailure',
[
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('offering'),
setup.qc.Corrupt('offering'), ],
], [
'Quest_a_bargainatany_priceDisaster',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.MissingUnit('bimbo'), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.dark_technology), ], /* restrictions to generate */
)>><p>
There are rumors that the mist to the other side of the world is thin at some remote parts of the eastern deserts. In these places, it is theoretically possible to communicate with the forces beyond. While the risk is profound, the benefits are usually things that normally cannot be obtained in this world.
</p>
<p>
You can try to send a group of slavers to barter a slave in exchange for forbidden knowledge. As a backup, one of your slavers should also be ready to be the demon's plaything. The journey will be long and dangerous, but it promises knowledge far beyond anything in this world.</p><p>
Having journeyed for a week straight, your slavers arrived at the target place. The mist is very thick in the location, and your slavers swear they can hear otherworldly moans, giant breasts and overflowing milk from all around the area. Within moments, your slavers somehow managed to find themselves in an entirely different location —- what they could aptly describe as hell.</p>
<p>
Apparently, a minor prince of beyond the mist took interest in your slavers' wares, and also in <<rep $g.bimbo>>. The prince offered to open negotiation in exchange for "fair use" of both <<rep $g.offering>> and <<rep $g.bimbo>>. Your slavers reluctantly agreed to the deal.</p>
<p>It turned out that your slavers had nothing to worry about as <<rep $g.negotiator>> somehow
<<uadv $g.negotiator>>
managed to close negotiation extremely early, exchanging <<rep $g.offering>> for a piece of corruption knowledge. <<rep $g.bimbo>> were returned to you before <<they $g.bimbo>> took any permanent damage from being used in such otherworldly location.</p>
<p>Your slavers then found themselves back at the desert 2 weeks later. After recuperating in a nearby settlement, they headed home victorious, with forbidden knowledge in hand.</p>
<p>
<<rep $g.offering>> fate is unknown, but there are plenty left to imagination what could happen to slaves in such a debauched palace.</p><p>
Having journeyed for a week straight, your slavers arrived at the target place. The mist is very thick in the location, and your slavers swear they can hear otherworldly moans, giant breasts and overflowing milk from all around the area. Within moments, your slavers somehow managed to find themselves in an entirely different location —- what they could aptly describe as hell.</p>
<p>
Apparently, a minor prince of beyond the mist took interest in your slavers' wares, and also in <<rep $g.bimbo>>. The prince offered to open negotiation in exchange for "fair use" of both <<rep $g.offering>> and <<rep $g.bimbo>>. Your slavers reluctantly agreed to the deal.</p>
<p>The prince prolonged the negotiations as much as he can while his many clones are perusing your wares. Ultimately, through <<rep $g.negotiator>>'s deft negotiation skills, they
<<uadv $g.negotiator>>
reached an agreement where <<rep $g.offering>> is permanently exchanged for a small piece of corruption knowledge.
<<rep $g.bimbo>> were returned to you after much use, which will leave permanent marks on <<them $g.bimbo>>.</p>
<p>Your slavers then found themselves back at the desert 2 weeks later. After recuperating in a nearby settlement, they headed home victorious, with forbidden knowledge in hand.</p>
<p>
<<rep $g.offering>> fate is unknown, but there are plenty left to imagination what could happen to slaves in such a debauched palace.</p><p>
Having journeyed for a week straight, your slavers arrived at the target place. The mist is very thick in the location, and your slavers swear they can hear otherworldly moans, giant breasts and overflowing milk from all around the area. Within moments, your slavers somehow managed to find themselves in an entirely different location —- what they could aptly describe as hell.</p>
<p>
Apparently, a minor prince of beyond the mist took interest in your slavers' wares, and also in <<rep $g.bimbo>>. The prince offered to open negotiation in exchange for "fair use" of both <<rep $g.offering>> and <<rep $g.bimbo>>. Your slavers reluctantly agreed to the deal.</p>
<p>The prince prolonged the negotiations as much as he can while his many clones are perusing your wares. And even then, the negotiation ends in a failure. When <<rep $g.negotiator>>
<<uadv $g.negotiator>>
raised the prince's irk, your slavers found themselves back at the desert 2 weeks later, together with a cum-soaked <<rep $g.offering>> and <<rep $g.bimbo>>. After so much use in such an otherworldly location, both has been corrupted beyond recognition. After recuperating in a nearby settlement, your slavers headed home defeated.</p><p>
Having journeyed for a week straight, your slavers arrived at the target place. The mist is very thick in the location, and your slavers swear they can hear otherworldly moans, giant breasts and overflowing milk from all around the area. Within moments, your slavers somehow managed to find themselves in an entirely different location —- what they could aptly describe as hell.</p>
<p>
Apparently, a minor prince of beyond the mist took interest in your slavers' wares, and also in <<rep $g.bimbo>>. The prince offered to open negotiation in exchange for "fair use" of both <<rep $g.offering>> and <<rep $g.bimbo>>. Your slavers reluctantly agreed to the deal.</p>
<p>Unfortunately, your slavers took a wrong deal which sealed
the fates of both <<rep $g.negotiator>> and <<rep $g.bimbo>> without gaining anything in return.
The prince gave no chance to regain them back as <<rep $g.negotiator>> and <<rep $g.trainer>> were immediately sent back to the desert. Having no way to contact their missing ally again, they headed home, utterly defeated.</p>
<p>
The fates of
<<rep $g.offering>> and <<rep $g.bimbo>> are unknown, but there are plenty left to imagination what could happen to slaves in such a debauched palace.</p><<run new setup.UnitGroup(
"blacksmith_orders0",
"Desert Blacksmith",
[ /* pools */
[setup.unitpool.race_humankingdom_male, 0.5],
[setup.unitpool.race_humankingdom_female, 0.5],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_metalworker),
],
)>>
<<set _criteriataster = new setup.UnitCriteria(
null, /* key */
'Sword Taster', /* name */
[
setup.trait.skill_ambidextrous,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_gregarious,
setup.trait.per_nimble,
setup.trait.bg_noble,
setup.trait.bg_royal,
],
[
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
setup.trait.muscle_extremelyweak,
setup.trait.bg_slave,
setup.trait.per_slow,
setup.trait.per_honest,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.join_junior,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'blacksmith_orders', /* key */
"Blacksmith Orders", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'item',
],
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'apprentice1': [ setup.qu.blacksmith, 1],
'apprentice2': [ setup.qu.blacksmith, 1],
'taster': [ _criteriataster, 1],
},
{ /* actors */
'smith': 'blacksmith_orders0',
},
[ /* costs */
setup.qc.MoneyCustom(-2000),
],
'Quest_blacksmith_orders',
setup.qdiff.hard38, /* difficulty */
[ /* outcomes */
[
'Quest_blacksmith_ordersCrit',
[
setup.qc.VarSet('blacksmith_apprenticing_cooldown', '1', 40),
setup.qc.Leave('taster', "continues to help out a master blacksmith for a while longer in exchange for a valuable weapon", 3),
],
],
[
'Quest_blacksmith_ordersCrit',
[
setup.qc.VarSet('blacksmith_apprenticing_cooldown', '1', 40),
setup.qc.Injury('taster', 2),
setup.qc.Injury('apprentice1', 1),
],
],
[
'Quest_blacksmith_ordersFailure',
[
setup.qc.VarSet('blacksmith_apprenticing_cooldown', '1', 40),
setup.qc.Injury('apprentice1', 3),
setup.qc.Injury('apprentice2', 2),
setup.qc.Injury('taster', 6),
],
],
[
'Quest_blacksmith_ordersDisaster',
[
setup.qc.VarSet('blacksmith_apprenticing_cooldown', '1', 40),
setup.qc.Leave('apprentice1', "is working overtime with a certain master blacksmith as recompense for their incompetence", 4),
setup.qc.Leave('apprentice2', "is working overtime with a certain master blacksmith as recompense for their incompetence", 4),
setup.qc.Leave('taster', "is working overtime with a certain master blacksmith as recompense for their incompetence", 7),
setup.qc.TraumatizeRandom('apprentice1', 20),
setup.qc.TraumatizeRandom('apprentice2', 17),
setup.qc.TraumatizeRandom('taster', 18),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarNull('blacksmith_apprenticing_cooldown'),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
As you enter your office today, your <<repfull _u>> stood there waiting with a letter in hand. Apparently, a famous blacksmith in the eastern deserts is hiring seasonal apprentices to help with the increased demands for <<their $g.smith>> services.
An opening is posted for two blacksmith apprentices and one "sword taster", which is the eastern words for someone who can test out the weapons that <<they $g.smith>> forged.
Of course, for such priviledge of serving a wonderful master in <<themselves $g.smith>>, the smith demands the apprentices to pay for actually working under <<them $g.smith>>. But <<they $g.smith>> promises to offer <<them $g.smith>> one of <<their $g.smith>> famous works.
</p>
<p>
You can try to send a group of slavers to help out the haughty blacksmith. But you have the feeling that whoever you send as the sword taster must be particularly good at something, or it would all become a simple waste of time...
</p><p>
The weeks were spent with <<rep $g.apprentice1>> and <<utheirrel $g.apprentice1 $g.apprentice2>> <<rep $g.apprentice2>> <<uadv $g.apprentice1>> toiling away in the forge with the master blacksmith, tossing <<rep $g.taster>> freshly hammered swords, axes, and various weapons to test out. The amount of order were unbelievable, and the occassional order for exotic sex toys were a welcome break for your slavers' continuous toil. In the end, however, your slavers were able to complete the demanding task.
</p>
<p>
While your slavers were exhausted to the brink, the master blacksmith <<themself $g.smith>> does not look any worse for wear after the ordeal. <<They $g.smith>> commended <<rep $g.apprentice1>> and <<rep $g.apprentice2>> for the time they spent working <<uadv $g.apprentice2>> before turning <<their $g.smith>> <<ueyes $g.smith>> to <<rep $g.taster>> to discuss the rewards.
</p>
<<set _idiot = false>>
<<if $g.taster.isHasTrait('skill_ambidextrous')>>
<p>
Throughout the week, <<rep $g.taster>>'s talent in ambidexterity has earned many favor from the smith — the talented slaver were able to <<uadv $g.taster>> tested multiple weapons at the same time. The master smith gave <<rep $g.taster>> a most suitable reward: the <<rep setup.equipment.weapon_dualdagger>>, a prized and deadly weapon which can only be exclusively wielded by <<rep setup.trait.skill_ambidextrous>> slavers.
</p>
<<set _weapon = setup.equipment.weapon_dualdagger>>
<<elseif $g.taster.isHasTrait('bg_noble') or $g.taster.isHasTrait('bg_royal') or
$g.taster.isHasTrait('per_gregarious') or $g.taster.isHasTrait('per_nimble')
>>
<p>
<<if $g.taster.isHasTrait('bg_noble') or $g.taster.isHasTrait('bg_royal')>>
Given <<their $g.taster>> nobility background,
<<elseif $g.taster.isHasTrait('per_gregarious')>>
Given <<their $g.taster>> affinity for rescuing damsels,
<<else>>
Given <<their $g.taster>> agility,
<</if>>
<<rep $g.taster>> were able to demonstrate masterful use of many finesse weapon throughout the apprenticeship. This was apparently a welcome change for the smith, who were all too used to work with brutish thugs.
Apparently impressed by the <<urace $g.taster>>'s work, <<they $g.smith>> gave your <<repfull $g.taster>> a most suitable weapon in the form of <<rep setup.equipment.weapon_rapier>>, which will surely boosts both the combat prowess and the social standing of your slaver.
</p>
<<set _weapon = setup.equipment.weapon_rapier>>
<<elseif $g.taster.isHasTrait('muscle_strong')>>
<p>
<<rep $g.taster>> might not be a finesse fighter, but <<they $g.taster>> made it up in strength. Weapons big and large were able to be tested efficiently by your <<repfull $g.taster>>. This did not go unnoticed by the masterful smith, who gave your slaver a simple weapon suited for the brutish slaver: a <<rep setup.equipment.weapon_broadsword>>. A big bad sword to accompany your slaver in their future career.
</p>
<<set _weapon = setup.equipment.weapon_broadsword>>
<<else>>
<p>
<<rep $g.taster>> tried their hardest, but there wasn't really much that stood out from your slaver. At the end, <<rep $g.apprentice1>> and <<utheirrel $g.apprentice1 $g.apprentice2>> brought a... <<rep setup.equipment.weapon_log>> home? It took you few hours arguing with the slavers before you managed to convince them that they have been duped by the metalworker, apparently thank to <<their $g.smith>> dissatisfaction with <<rep $g.taster>>. Still, the smith did not lie, and the log bears an inscription of <<their $g.smith>> work. It could end up worth of some value to certain collectors.
</p>
<<set _weapon = setup.equipment.weapon_log>>
<<set _idiot = true>>
<</if>>
<<run setup.qc.EquipmentDirect(_weapon).apply()>>
<<if $gOutcome == 'crit'>>
<<run setup.qc.EquipmentDirect(_weapon).apply()>>
<</if>>
<<if $gOutcome == 'crit'>>
<<if _idiot>>
<p>
As an added embarrassment, they did not bring one, but two of the <<rep setup.equipment.weapon_log>>. And that's in exchange for another few weeks of <<rep $g.taster>> toiling away under the smith's care. But at this point both you and your slavers know it is not for anything related to work anymore...
</p>
<<run setup.qc.TraumatizeRandom('unit', 15).apply(setup.costUnitHelper($g.taster))>>
<<else>>
<p>
Thanks to <<rep $g.taster>>'s superb work (and your other slavers too, you guess), your slavers returned not with one, but with two copies of <<rep _weapon>>. But this is in exchange for having <<rep $g.taster>> continue to toil away for a little more weeks under the metalworker. Your slavers took the deal, as you would too under the circumstances. Two copies of this masterful weapon will surely prove handy for your company.
</p>
<</if>>
<</if>><p>
The weeks were spent with <<rep $g.apprentice1>> and <<utheirrel $g.apprentice1 $g.apprentice2>> <<rep $g.apprentice2>> <<uadv $g.apprentice1>> toiling away in the forge with the master blacksmith, tossing <<rep $g.taster>> freshly hammered swords, axes, and various weapons to test out. The amount of order were unbelievable, and unfortunately your slavers broke under all the pressure. Their efficiency thus dropped significantly, earning the ire of the smith. In the end, your slavers returned to your company with nothing but bruises from the work.
</p><p>
The weeks were spent with <<rep $g.apprentice1>> and <<utheirrel $g.apprentice1 $g.apprentice2>> <<rep $g.apprentice2>> <<uadv $g.apprentice1>> toiling away in the forge with the master blacksmith, tossing <<rep $g.taster>> freshly hammered swords, axes, and various weapons to test out. The amount of order were unbelievable, and your slavers were unable to cope at all with the pressure. They started to make mistakes — costly ones too, which the smith understandably is unhappy about.
</p>
<p>
Your slavers did not return by the appointed end of the contract, but you receive a letter saying that they will be paying for their debt with their bodies and mind in the coming weeks. Whatever that means, it does not sound good.
</p><<run new setup.QuestTemplate(
'capital_of_slaves__browse_wares', /* key */
"Capital of Slaves: Browse Wares", /* Title */
"darko", /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'appraiser1': setup.qu.slaveappraiser,
'appraiser2': setup.qu.slaveappraiser,
'trader': setup.qu.slavetrader, },
{ /* actors */
'slave1': setup.unitgroup.desert_all,
'slave2': setup.unitgroup.desert_all,
'slave3': setup.unitgroup.desert_all,
'slave4': setup.unitgroup.desert_all,
'slave5': setup.unitgroup.desert_all,
'slave6': setup.unitgroup.all,
'slave7': setup.unitgroup.all,
'slave8': setup.unitgroup.all,
'slave9': setup.unitgroup.desert_all,
'slave10': setup.unitgroup.humansea, },
[ /* costs */
],
'Quest_capital_of_slaves__browse_wares',
setup.qdiff.easy40, /* difficulty */
[ /* outcomes */
[
'Quest_capital_of_slaves__browse_waresCrit',
[
setup.qc.Trait('slave1', setup.trait.training_obedience_basic),
setup.qc.Trait('slave3', setup.trait.training_obedience_basic),
setup.qc.Trait('slave7', setup.trait.training_obedience_basic),
setup.qc.Slave('slave10', '', true),
setup.qc.Slave('slave1', '', true),
setup.qc.Slave('slave2', '', true),
setup.qc.Slave('slave3', '', true),
setup.qc.Slave('slave4', '', true),
setup.qc.Slave('slave5', '', true),
setup.qc.Slave('slave6', '', true),
setup.qc.Slave('slave7', '', true),
setup.qc.Slave('slave8', '', true),
setup.qc.Slave('slave9', '', true), ],
], [
'Quest_capital_of_slaves__browse_waresSuccess',
[
setup.qc.Trait('slave1', setup.trait.training_obedience_basic),
setup.qc.Trait('slave3', setup.trait.training_obedience_basic),
setup.qc.Slave('slave1', '', true),
setup.qc.Slave('slave2', '', true),
setup.qc.Slave('slave3', '', true),
setup.qc.Slave('slave6', '', true),
setup.qc.Slave('slave7', '', true), ],
], [
'Quest_capital_of_slaves__browse_waresFailure',
[
setup.qc.Slave('slave1', '', true),
setup.qc.Slave('slave2', '', true), ],
], [
'Quest_capital_of_slaves__browse_waresDisaster',
[
],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The largest city in the desert, the <<lore location_qarma>>, houses the perhaps largest slave market in the region. All kinds of slaves are available in the market —- from nearby ex-raiders who were turned slaves, to exotic travelers unlucky enough to be sold in the market.</p>
<p>
You have an opportunity to send a group of slavers to visit the market, and there are several options you can take. The safest option is to simply browse the wares, and noting particularly interesting slaves to purchase. Another option is to sell your own slaves in the market —- the market is highly competitive however and you won't get too great of a price, but it very easy to get plenty of the orders. The last option is to attempt to sneak in at night and steal some of the slaves —- this will net you quite a bit of slaves but it will be very dangerous for your slavers should they fail.</p>
<p>You have chosen to take the safest route and send a group of slavers to browse the wares.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a muscularly built ex-raider who is being continuously whipped to showcase his endurance, to a lady with breasts so large she cannot move on her own. <<rep $g.appraiser1>> and <<rep $g.appraiser2>>
<<uadv $g.appraiser1>>
worked their best to appraise the slaves under the hot sun of Qaram and they were so successful that they returned with 10 decently-priced candidates for you to browse including one particularly rare slave.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a muscularly built ex-raider who is being continuously whipped to showcase his endurance, to a lady with breasts so large she cannot move on her own. <<rep $g.appraiser1>> and <<rep $g.appraiser2>>
<<uadv $g.appraiser1>>
worked their best to appraise the slaves under the hot sun of Qaram and returned with 5 decently-priced candidates for you to browse.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a muscularly built ex-raider who is being continuously whipped to showcase his endurance, to a lady with breasts so large she cannot move on her own. Unfortunately your slavers were incompetent and <<rep $g.appraiser1>> and <<rep $g.appraiser2>> were only able to find 2 decently priced slaves for you to browse.</p><p>
Unfortunately your slavers were mistaken for raiders and were denied entry to the city. They have no choice but to went back home, two weeks wasted.</p><<run new setup.QuestTemplate(
'capital_of_slaves__sell_wares', /* key */
"Capital of Slaves: Sell Wares", /* Title */
"darko", /* Author */
[ 'desert', 'order'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'trader1': setup.qu.slavetrader,
'trader2': setup.qu.slavetrader, },
{ /* actors */
},
[ /* costs */
],
'Quest_capital_of_slaves__sell_wares',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_capital_of_slaves__sell_waresCrit',
[
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
],
], [
'Quest_capital_of_slaves__sell_waresSuccess',
[
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
],
], [
'Quest_capital_of_slaves__sell_waresFailure',
[
setup.qc.SlaveOrderCapitalOfSlaves(),
],
], [
'Quest_capital_of_slaves__sell_waresDisaster',
[
setup.qc.Injury('trainer', 2),
setup.qc.Injury('trader1', 2),
setup.qc.Injury('trader2', 2), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The largest city in the desert, the <<lore location_qarma>>, houses the perhaps largest slave market in the region. All kinds of slaves are available in the market —- from nearby ex-raiders who were turned slaves, to exotic travelers unlucky enough to be sold in the market.</p>
<p>
You have an opportunity to send a group of slavers to visit the market, and there are several options you can take. The safest option is to simply browse the wares, and noting particularly interesting slaves to purchase. Another option is to sell your own slaves in the market —- the market is highly competitive however and you won't get too great of a price, but it very easy to get plenty of the orders. The last option is to attempt to sneak in at night and steal some of the slaves —- this will net you quite a bit of slaves but it will be very dangerous for your slavers should they fail.</p>
<p>You have chosen to attempt to get slave orders for your company.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a broad-shouldered ex soldier who is being hanged and sold as a decoration, to a lady with a gaping vagina so wide it could probably fit two arms at once. <<rep $g.trader1>> and <<rep $g.trader2>> managed to
<<uadv $g.trader1>>
secure several deals with some of the traders who are looking for new wares to spice up their stalls. The slaves are preferred to be pre-trained, however, and would dock some pay if the slave came untrained.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a broad-shouldered ex soldier who is being hanged and sold as a decoration, to a lady with a gaping vagina so wide it could probably fit two arms at once. <<rep $g.trader1>> and <<rep $g.trader2>> managed to
<<uadv $g.trader1>>
secure two deals with some of the traders who are looking for new wares to spice up their stalls. The slaves are preferred to be pre-trained, however, and would dock some pay if the slave came untrained.</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves are on full display everywhere —- from a broad-shouldered ex soldier who is being hanged and sold as a decoration, to a lady with a gaping vagina so wide it could probably fit two arms at once. Unfortunately, your slavers were too engaged in windowshopping and almost completely forgot to do their job of finding slave orders, which results in only one slave order returned to you.</p><p>
Unfortunately your slavers were mistaken for raiders and were denied entry to the city. They have no choice but to went back home, two weeks wasted.</p><<run new setup.UnitGroup(
'quest_capital_of_slaves__steal_wares1',
"Trained Eastern Slave",
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.training_obedience_basic), ],
)>>
<<run new setup.QuestTemplate(
'capital_of_slaves__steal_wares', /* key */
"Capital of Slaves: Steal Wares", /* Title */
"darko", /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'thief2': setup.qu.thief,
'thief1': setup.qu.thief,
'muscle': setup.qu.carrier, },
{ /* actors */
'slave1': setup.unitgroup.desert_all,
'slave2': setup.unitgroup.quest_capital_of_slaves__steal_wares1,
'slave3': setup.unitgroup.humansea, },
[ /* costs */
],
'Quest_capital_of_slaves__steal_wares',
setup.qdiff.hard40, /* difficulty */
[ /* outcomes */
[
'Quest_capital_of_slaves__steal_waresCrit',
[
setup.qc.Slave('slave1', "", false),
setup.qc.Slave('slave2', "", false),
setup.qc.Slave('slave3', "", false), ],
], [
'Quest_capital_of_slaves__steal_waresSuccess',
[
setup.qc.Slave('slave1', "", false),
setup.qc.Slave('slave2', "", false), ],
], [
'Quest_capital_of_slaves__steal_waresFailure',
[
setup.qc.Injury('thief2', 2),
setup.qc.Injury('thief1', 2),
setup.qc.Injury('muscle', 2), ],
], [
'Quest_capital_of_slaves__steal_waresDisaster',
[
setup.qc.MissingUnitRebuy('thief2', 1),
setup.qc.MissingUnitRebuy('thief1', 1),
],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The largest city in the desert, the <<lore location_qarma>>, houses the perhaps largest slave market in the region. All kinds of slaves are available in the market —- from nearby ex-raiders who were turned slaves, to exotic travelers unlucky enough to be sold in the market.</p>
<p>
You have an opportunity to send a group of slavers to visit the market, and there are several options you can take. The safest option is to simply browse the wares, and noting particularly interesting slaves to purchase. Another option is to sell your own slaves in the market —- the market is highly competitive however and you won't get too great of a price, but it very easy to get plenty of the orders. The last option is to attempt to sneak in at night and steal some of the slaves —- this will net you quite a bit of slaves but it will be very dangerous for your slavers should they fail.</p>
<p>You have chosen to try and sneak in to the market at night in an attempt to score yourself some slaves.</p><p>
The slave market of Qarma has a very different looks at night. There are plenty of crates covered in drapes and moans can occasionally be heard from them. But it is mostly quiet, as slave owners are required to gag their slaves overnight to maintain silence in the city. Some slave owners even use the night as an opportunity to further train their slaves —- be it to enlarge their orifices by overnight rape or by putting several slaves together in hope of increasing their arouseness level.
</p>
<p>
After sneaking through the market, your slavers managed to find a particular cage containing three interlocked slaves with the slaves forced to eat each other's genitals. <<rep $g.thief1>>
<<uadv $g.thief1>>
made quick work of the lock before <<rep $g.muscle>> carried the slaves safely outside the city and ultimately back into your camp.
</p><p>
The slave market of Qarma has a very different looks at night. There are plenty of crates covered in drapes and moans can occasionally be heard from them. But it is mostly quiet, as slave owners are required to gag their slaves overnight to maintain silence in the city. Some slave owners even use the night as an opportunity to further train their slaves —- be it to enlarge their orifices by overnight rape or by putting several slaves together in hope of increasing their arouseness level.
</p>
<p>
Your slavers were anxious and
<<uadv $g.thief1>>
grabbed the nearest possible crate which happens to contain two slaves making love with each other. They unlock the crate and kidnapped its content out of the city before anyone noticed.
</p><p>
Unfortunately, your slavers were spotted by guards as they attempted to sneak into the city and was shot with arrows. Injured, your slavers decided the best way to proceed was to retreat home.
</p><p>
That night, <<rep $g.thief1>> and <<rep $g.thief2>> never made it out. You later received a brochure about a slave sale in the capital of slaves and were not surprised to see them being sold next to the slaves they were supposed to steal. It is still not too late for you to buy their freedoms back, but it will cost quite a bit.
</p><<run new setup.UnitGroup(
'quest_capturethe_protagonist1',
'leader',
[
[setup.unitpool.race_humankingdom_male, 0.16339869281045746],
[setup.unitpool.race_humanvale_male, 0.16339869281045746],
[setup.unitpool.race_humandesert_male, 0.040849673202614366],
[setup.unitpool.race_humansea_male, 0.008169934640522875],
[setup.unitpool.race_neko_male, 0.040849673202614366],
[setup.unitpool.race_werewolf_male, 0.01633986928104575],
[setup.unitpool.race_elf_male, 0.040849673202614366],
[setup.unitpool.race_orc_male, 0.02450980392156862],
[setup.unitpool.race_dragonkin_male, 0.0008169934640522874],
[setup.unitpool.race_demon_male, 0.0008169934640522874],
[setup.unitpool.race_humankingdom_female, 0.16339869281045746],
[setup.unitpool.race_humanvale_female, 0.16339869281045746],
[setup.unitpool.race_humandesert_female, 0.040849673202614366],
[setup.unitpool.race_humansea_female, 0.008169934640522875],
[setup.unitpool.race_neko_female, 0.040849673202614366],
[setup.unitpool.race_werewolf_female, 0.01633986928104575],
[setup.unitpool.race_elf_female, 0.040849673202614366],
[setup.unitpool.race_orc_female, 0.02450980392156862],
[setup.unitpool.race_dragonkin_female, 0.0008169934640522874],
[setup.unitpool.race_demon_female, 0.0008169934640522874], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_adventurer),
setup.qc.TraitReplace('unit', setup.trait.skill_ambidextrous),
setup.qc.TraitReplace('unit', setup.trait.per_smart), ],
)>>
<<run new setup.QuestTemplate(
'capturethe_protagonist', /* key */
'Capture the Protagonist', /* Title */
'darko', /* Author */
[ 'desert', 'item', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'tank': setup.qu.tank,
'dps': setup.qu.dps,
'healer': setup.qu.healer, },
{ /* actors */
'leader': setup.unitgroup.quest_capturethe_protagonist1, },
[ /* costs */
],
'Quest_capturethe_protagonist',
setup.qdiff.hardest44, /* difficulty */
[ /* outcomes */
[
'Quest_capturethe_protagonistCrit',
[
setup.qc.Slave('leader', 'was a leader of an adventurer group who sacrificed himself in order to let their comrades escape'),
setup.qc.Equipment(setup.equipmentpool.combat_good), ],
],
[
'Quest_capturethe_protagonistSuccess',
[
setup.qc.Equipment(setup.equipmentpool.combat),
setup.qc.Equipment(setup.equipmentpool.survival),
setup.qc.Equipment(setup.equipmentpool.aid), ],
],
[
'Quest_capturethe_protagonistFailure',
[
setup.qc.Injury('tank', 4),
setup.qc.Injury('dps', 3),
setup.qc.Injury('healer', 2), ],
],
[
'Quest_capturethe_protagonistDisaster',
[
setup.qc.OneRandom([
setup.qc.MissingUnit('tank'),
setup.qc.MissingUnit('dps'),
setup.qc.MissingUnit('healer'),
]),
setup.qc.Injury('dps', 4),
setup.qc.Injury('healer', 3),
setup.qc.Injury('tank', 4),
],
],
],
[
[setup.questpool.desert, 65],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The eastern deserts are full of the unknown and unexplored ruins. This makes it a prime destination for adventuring companies, and many adventurer groups set out to the desert in search of fame and treasure.
</p>
<p>
You have heard of a relatively new but particularly well equipped adventuring company who just went into the desert. The trail is still fresh, and if you want you can send a group of slavers to try and trail them, in hope of stealing their gear and pawning them off. If you are lucky, you might even caught yourself some new rare breed of slave.
</p>
<p>
To match these adventurers in combat, you will need a typical adventurer team. A tank, to bait their attackers, a healer to keep the tank healthy, and a damager to incapacitate the enemy.</p><p>
Your slavers were able to pick up the trail easily by asking the nearby settlements. After a few days of traversing the trail, they found the adventurers resting near an empty oasis. Your slavers waited until night fall before launching a sudden attack on the encampment. The adventurers, being new, were caught completely off guard and were not able to put up any fight at all. But the leader of the adventurer company selflessly bought the adventurers some time for everyone else but <<them $g.leader>> to escape.</p>
<p>
Your slavers
<<uadv $g.tank>>
subdued <<rep $g.leader>>, strip <<them $g.leader>> naked, and bound <<their $g.leader>> limbs tightly, to be carried home as a prize. Not to forget, they loot the campsite first finding several valuable items to pawn and a usable armor.
</p><p>
Your slavers were able to pick up the trail easily by asking the nearby settlements. After a few days of traversing the trail, they found the adventurers resting near an empty oasis. Your slavers waited until night fall before
<<uadv $g.tank>>
launching a sudden attack on the encampment. Despite some of them being naked with their genitals flopping around, the adventurers were able to put up a decent fight, until at one point their hedge wizard were able to cast a teleportation spell, teleporting the adventurers to safety. With nobody around the campsite anymore, your slavers go to work and stripped the encampment clear. They sell most of the valuables before coming back with the money and a particular piece of gear that they decided to keep.
</p><p>
Your slavers were able to pick up the trail easily by asking the nearby settlements. After a few days of traversing the trail, they found the adventurers resting near an empty oasis. But the adventurers managed to spot your slavers, and a decisive battle ensues. <<rep $g.tank>> tried <<their $g.tank>> best to withstand all the enemy attacks while <<rep $g.healer>> heals from behind to the best of <<their $g.healer>> ability, but it was not enough. A stray arrow caught <<rep $g.healer>> in its wake and soon enough your slaver's formation were thrown into disarray. Seeing no hope to recover, your slavers immediately retreated back to safety. Fortunately for them, the adventurers did not give chase, and your slavers were free to recover form their injuries back at the fort.</p>
<p>
Your slavers waited until night fall before launching a sudden attack on the encampment. Despite some of them being naked with their genitals flopping around, the adventurers were able to put up a decent fight, until at one point their hedge wizard were able to cast a teleportation spell, teleporting the adventurers to safety. With nobody around the campsite anymore, your slavers go to work and stripped the encampment clear. They sell most of the valuables before coming back with the money and a particular piece of gear that they decided to keep.</p><p>
Your slavers were able to pick up the trail easily by asking the nearby settlements. After a few days of traversing the trail, they found the adventurers resting near an empty oasis. But the adventurers managed to spot your slavers, and a decisive battle ensues.</p>
<p>Your slavers stood no chance as their firepower quickly overwhelmed <<rep $g.tank>>'s defenses. Soon enough all three of your slavers were at the adventurer's mercy, who decided to strip them naked and use them as sexual playthings. After few nights being used as toys, they released your slavers except one that the adventurers decided to keep as a pet and a mascot.</p><<run new setup.UnitGroup(
'quest_chivalrious_rescue2',
"Wizard",
[
[setup.unitpool.race_humankingdom_male, 0.01529285823520416],
[setup.unitpool.race_humanvale_male, 0.006117143294081664],
[setup.unitpool.race_humandesert_male, 0.003058571647040832],
[setup.unitpool.race_humansea_male, 0.0006117143294081664],
[setup.unitpool.race_neko_male, 0.006117143294081664],
[setup.unitpool.race_werewolf_male, 0.001529285823520416],
[setup.unitpool.race_elf_male, 0.006117143294081664],
[setup.unitpool.race_orc_male, 0.002293928735280624],
[setup.unitpool.race_dragonkin_male, 0.00004587857470561248],
[setup.unitpool.race_demon_male, 0.00003058571647040832],
[setup.unitpool.race_humankingdom_female, 0.01529285823520416],
[setup.unitpool.race_humanvale_female, 0.006117143294081664],
[setup.unitpool.race_humandesert_female, 0.003058571647040832],
[setup.unitpool.race_humansea_female, 0.0006117143294081664],
[setup.unitpool.race_neko_female, 0.006117143294081664],
[setup.unitpool.race_werewolf_female, 0.001529285823520416],
[setup.unitpool.race_elf_female, 0.006117143294081664],
[setup.unitpool.race_orc_female, 0.002293928735280624],
[setup.unitpool.race_dragonkin_female, 0.00004587857470561248],
[setup.unitpool.race_demon_female, 0.00003058571647040832],
[setup.unitpool.race_orc_male, 0.2293928735280624],
[setup.unitpool.race_humandesert_male, 0.2293928735280624],
[setup.unitpool.race_orc_female, 0.2293928735280624],
[setup.unitpool.race_humandesert_female, 0.2293928735280624], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.TraitsReplace('unit', [setup.trait.magic_dark]), ],
)>>
<<run new setup.QuestTemplate(
'chivalrious_rescue', /* key */
"Chivalrous Rescue", /* Title */
"darko", /* Author */
[ 'veteran',
'desert',
'unit',
'danger'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': setup.qu.knight,
'purifier': setup.qu.purifier,
'archer': setup.qu.archer, },
{ /* actors */
'wizard': 'quest_chivalrious_rescue2',
'slave': 'opportunity_aspect_of_chivalry1', },
[ /* costs */
],
'Quest_chivalrious_rescue',
setup.qdiff.extreme53, /* difficulty */
[ /* outcomes */
[
'Quest_chivalrious_rescueCrit',
[
setup.qc.Opportunity('aspect_of_chivalry', {'knight': 'knight'}),
setup.qc.Slave('wizard', "was a dark wizard in the eastern deserts who kidnapped royalties for fun", undefined), ],
], [
'Quest_chivalrious_rescueCrit',
[
setup.qc.OneRandom([
setup.qc.Corrupt('knight'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('archer')
]),
setup.qc.Opportunity('aspect_of_chivalry', {'knight': 'knight'}),
],
], [
'Quest_chivalrious_rescueCrit',
[
setup.qc.Favor('humandesert', 100),
setup.qc.Corrupt('knight'),
setup.qc.Corrupt('archer'),
setup.qc.MissingUnit('purifier'),
setup.qc.Corrupt('purifier'),
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
], [
'Quest_chivalrious_rescueCrit',
[
setup.qc.Favor('humandesert', 50),
setup.qc.MissingUnitRecapture('knight', 'capturedhard'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('archer'),
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.Cooldown(12), ],
[ /* expiration outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_chivalry1'), ],
)>><p>
A <<princess $g.slave>> of a faraway kingdom has been kidnapped by an evil wizard, and held captive in <<their $g.wizard>> tower. The tower is conveniently located at the eastern deserts, which allows you to assault the tower and rescue the <<princess $g.slave>>. Of course, "rescuing" in your terms mean "taking-<<them $g.slave>>-back-into-your-fort-to-be-trained", and a royal slave would certainly fetch a nice price in the slave markets.
</p>
<p>
The only complication is the wizard standing between you and the <<princess $g.slave>>.
From your experiences, fights against dark wizards are highly dangerous — but you have the advantage here. Since you know the enemy, you can send a specialized group of slavers to handle the surely powerful wizard. A purifier, to counteract all the wizard's spells. A knight, to boldly charge and distract the wizard. And finally, an archer, to deliver the finishing blow to the wizard.
</p>
<p>
You probably need to think hard which of your slavers should fulfill the role of the knight. After all, when a princess and a knight is on a quest together... magic could happen!
</p><p>
The tower was as foreboding as others tell — a nondescript tower in the middle of the desert surrounded by dark chaotic clouds.
<<if $g.purifier.isHasTrait('magic_fire')>>
Your <<rep setup.trait.magic_fire>>-attuned purifier can sense evil energies swirling from around the tower.
<<else>>
Since your purifier lacks <<rep setup.trait.magic_fire>>, <<they $g.purifier>> can't tell how dangerous the clouds are.
<</if>>
From the bottom of the floor, they could make a small window on top of the tower, and what appears to be a
<<if $g.slave.isFemale()>>
gorgeous
<<else>>
dashing
<</if>>
young <<woman $g.slave>> — surely the kidnapped <<princess $g.slave>>. Cliche, keeping the hostage at top of the tower while the wizard does whatever evil work at the bottom.
</p>
<p>
Your slavers had a job to do, and hence they march towards the tower. Led by <<rep $g.knight>>, they <<uadv $g.knight>> charged into the door of the tower. <<rep $g.knight>> had the first strike, but <<their $g.knight>> attack was fended off by shadow blades that appeared out of nowhere. Soon enough,
darkness surrounds the fort as black evil tendrils sprout from all over the tower.
<<if $g.purifier.isHasTrait('magic_fire')>>
<<rep $g.purifier>> channeled <<their $g.purifier>> <<rep setup.trait.magic_fire>> magic in an attempt to cleanse as many of the tentacles as <<they $g.purifier>> can.
<<else>>
Lacking <<rep setup.trait.magic_fire>>, <<rep $g.purifier>> used the seals they brought before the journey to ward off as much corruption as <<they $g.purifier>> can.
<<run $g.purifier.corrupt()>>
<</if>>
Like a knight of legend, <<rep $g.knight>> did not back down and launched another attack on the dark wizard.
</p>
<p>
With the slavers in a stalemate, none giving each other any opportunity for a finishing blow, your remaining slaver <<rep $g.archer>> quietly waited from afar.
<<if $g.archer.isHasTrait('per_calm')>>
<<They $g.archer>> patiently waited until an opening present itself, and <<they $g.archer>> walked through the opening into the tower.
<<else>>
But patience were not one of <<their $g.archer>> virtues, and eventually <<they $g.archer>> charged in into the tendrils, slightly corrupting the <<man $g.archer>>.
<<run $g.archer.corrupt()>>
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
Once inside, <<rep $g.archer>> <<uadv $g.archer>> launched a surprise shot at the wizard, catching the engaged wizard off guard.
<<if $gOutcome == 'crit'>>
<<rep $g.knight>> seized the opportunity to knock the wizard unconscious.
<<else>>
Wounded, the wizard cast an explosion spell blasting away all your slavers while <<they $g.wizard>> escaped in a black poof.
<</if>>
With the caster gone, the surrounding darkness dissipates, leaving the tower intact.
</p>
<p>
<<if $gOutcome == 'crit'>>
After securing the wizard to be brought home and trained as a proper slave, your slavers
<<else>>
Your slavers
<</if>>
must now decide what to do with the princess...
</p>
<<else>>
<p>
Once inside, <<rep $g.archer>> <<uadv $g.archer>> launched a surprise shot at the wizard. Unfortunately, the shot missed at such a crucial moment. Sensing a third party at play, the wizard immediately unleashed a spell <<they $g.wizard>> had been preparing.
<<if $gOutcome == 'failure'>>
The spell completely engulfed your slaver <<rep $g.purifier>> in darkness, until they all dissipates leaving no trace of <<rep $g.purifier>>.
Seeing their purifier gone, your slavers made the right but heartless decision to flee.
<<else>>
The spell engulfed the knight <<rep $g.knight>> in blackness, leaving <<rep $g.knight>> struggling to free themselves. As the binding kept <<rep $g.knight>> in place, your other slavers were blasted away far from the tower with another spell.
<</if>>
</p>
<p>
You doubt you'll ever see the <<princess $g.slave>> ever again after such a massive failure.
<<if $gOutcome == 'failure'>>
<<uneedrescue $g.purifier>> before the darkness fully consumes <<them $g.purifier>>.
<<else>>
<<urescuenow $g.knight>> before <<they $g.knight>> is transformed into the wizard's plaything.
<</if>>
</p>
<</if>><<run new setup.UnitGroup(
'quest_desert_purifiers_enslave',
'Purifier',
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_healer),
setup.qc.TraitReplace('unit', setup.trait.face_attractive),
setup.qc.TraitReplace('unit', setup.trait.magic_fire_master),
setup.qc.TraitReplace('unit', setup.trait.per_kind), ],
)>>
<<run new setup.QuestTemplate(
'desert_purifiers_enslave', /* key */
'Desert Purifiers: Enslave', /* Title */
'darko', /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'corruptor': setup.qu.corruptor,
'warrior1': setup.qu.dark_warrior,
'warrior2': setup.qu.dark_warrior, },
{ /* actors */
'guard': setup.unitgroup.desert_all,
'purifier': setup.unitgroup.quest_desert_purifiers_enslave, },
[ /* costs */
],
'Quest_desert_purifiers_enslave',
setup.qdiff.harder41, /* difficulty */
[ /* outcomes */
[
'Quest_desert_purifiers_enslaveCrit',
[
setup.qc.Slave('purifier', 'was a purifier living on the eastern desert who you managed to enslave'),
],
], [
'Quest_desert_purifiers_enslaveSuccess',
[
setup.qc.Slave('guard', 'was a patron of the desert purifier'),
],
], [
'Quest_desert_purifiers_enslaveFailure',
[
setup.qc.Purify('corruptor'),
setup.qc.Purify('warrior1'),
setup.qc.Purify('warrior2'), ],
], [
'Quest_desert_purifiers_enslaveDisaster',
[
setup.qc.Purify('corruptor'),
setup.qc.Purify('warrior1'),
setup.qc.Purify('corruptor'),
setup.qc.Purify('warrior1'),
setup.qc.MoneyCrit(-1),
setup.qc.Purify('warrior2'),
setup.qc.Purify('warrior2'), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The denizens of the eastern desert are often gifted with the aspect of fire. While the orcs use this gift to raid the settlements, there are few extremely blessed individuals whose mastery over fire allows them summon purifying fire. These people are often sought after for their purifying flames are thought to bless whoever is bathed in them.
</p>
<p>
You have caught wind of a group of purifiers journeying through the eastern desert. This is a rare opportunity for you —- you can try to purify some of your slavers for free using their services, or if you are feeling brave you can attempt to try and enslave the lead purifier, a
<<if $g.purifier.isFemale()>> gorgeous young healer
<<else>>
handsome young fellow
<</if>>. Such attempt would require you to send a slaver gifted in the dark arts, and even then it is surely going to be a dangerous affair.
</p>
<p>
You have foolishly chosen to try and enslave a purifier.
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers waited until nightfall before <<rep $g.corruptor>>
<<uadv $g.corruptor>>
begins <<their $g.corruptor>> dark work and within moments, dark corrupted tendrils shot out of the grounds throughout the encampment.
The purifier were not defenseless however and <<their $g.purifier>> many followers soon attempted to fight through the corruptions. But <<rep $g.warrior1>> and <<rep $g.warrior2>> managed to turn the tide of battle in your favor and soon enough <<rep $g.corruptor>> has all the time in the world to enter and capture <<rep $g.purifier>>.</p>
<p>By the time your slavers leave moaning sounds can be heard throughout the encampment as the purifier's followers were ravaged thoroughly by the many corrupted tendrils spawning throughout the encampment.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers waited until nightfall before <<rep $g.corruptor>>
<<uadv $g.corruptor>>
begins <<their $g.corruptor>> dark work. Soon after, dark corrupted warriors spawn out of nowhere and invaded the encampment. Your slavers watch as the camp followers were bound by demonic aura and fucked mercilessly by the demons.</p>
<p>
The lead demon, having seen the <<if $g.purifier.isFemale()>> beauty <<else>> handsome <</if>> purifier, decided to take the purifier as its payment for the services. <<rep $g.corruptor>> were unable to do anything as <<rep $g.purifier>> were taken as a cock sheathe by the demon and disappeared together through the mist. When the morning come, the encampment were a mess of bodies of bodily fluids.</p>
<p>
Having no option but to leave without the purifier, your slavers picked a still usable camp followers of the purifier and take <<=$g.guard.rep()>> home as a consolation prize after looting the prize.
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. However, your slavers caught glimpse of <<rep $g.purifier>> and somehow <<their $g.purifier>> <<if $g.purifier.isFemale()>>beauty<<else>>handsomeness<</if>> managed to disarm your slavers of all their evil intentions. With their intentions gone, your slavers decided to come in peace to the encampment. <<rep $g.purifier>> decided to bless your slavers for such forthcomingness, and your slavers later returned back home less corrupt than before.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. However, your slavers caught glimpse of <<rep $g.purifier>> and somehow <<their $g.purifier>> <<if $g.purifier.isFemale()>>beauty<<else>>handsomeness<</if>> managed to completely disarm your slavers of all their evil intentions. Within moment your slavers prostrate themselves in front of <<rep $g.purifier>>, leaving tithes and promising more tithe in the future. <<rep $g.purifier>> blessed them for their generosity, and ultimately your slavers came back home less corrupt than ever and with a mounting amount of debt.</p><<run new setup.QuestTemplate(
'desert_purifiers_patron2', /* key */
'Desert Purifiers: Patron', /* Title */
'darko', /* Author */
[ 'desert', 'trait'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'repentant1': setup.qu.repentant,
'repentant2': setup.qu.repentant,
'repentant3': setup.qu.repentant, },
{ /* actors */
'purifier': setup.unitgroup.humandesert, },
[ /* costs */
setup.qc.MoneyNormal(-1), ],
'Quest_desert_purifiers_patron2',
setup.qdiff.easy41, /* difficulty */
[ /* outcomes */
[
'Quest_desert_purifiers_patron2Crit',
[
setup.qc.Purify('repentant1'),
setup.qc.Purify('repentant1'),
setup.qc.Purify('repentant2'),
setup.qc.Purify('repentant2'),
setup.qc.Purify('repentant3'),
setup.qc.Purify('repentant3'),
setup.qc.Purify('repentant1'),
setup.qc.Purify('repentant2'),
setup.qc.Purify('repentant3'), ],
], [
'Quest_desert_purifiers_patron2Success',
[
setup.qc.Purify('repentant1'),
setup.qc.Purify('repentant2'),
setup.qc.Purify('repentant3'),
setup.qc.Purify('repentant1'), ],
], [
'Quest_desert_purifiers_patron2Failure',
[
setup.qc.MoneyNormal(1), ],
], [
'Quest_desert_purifiers_patron2Disaster',
[
setup.qc.Corrupt('repentant1'),
setup.qc.Corrupt('repentant2'),
setup.qc.Corrupt('repentant3'),
setup.qc.Corrupt('repentant1'),
setup.qc.Corrupt('repentant2'),
setup.qc.Corrupt('repentant3'), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The denizens of the eastern desert are often gifted with the aspect of fire. While the orcs use this gift to raid the settlements, there are few extremely blessed individuals whose mastery over fire allows them summon purifying fire. These people are often sought after for their purifying flames are thought to bless whoever is bathed in them.
</p>
<p>
You have caught wind of a group of purifiers journeying through the eastern desert. This is a rare opportunity for you —- you can try to purify some of your slavers for free using their services, or if you are feeling brave you can attempt to try and enslave the lead purifier, a
<<if $g.purifier.isFemale()>> gorgeous young healer
<<else>>
handsome young fellow
<</if>>. Such attempt would require you to send a slaver gifted in the dark arts, and even then it is surely going to be a dangerous affair.
</p>
<p>
You have chosen to patron the purifiers and cleanse your slavers.
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers arrived at the compound and managed to negotiate a very good amount of purifier work for the amount of money they bring. <<rep $g.purifier>>
chanted all the required magic and within moments corruptions were purified from your slavers, leaving their bodies devoid of any corruption.
Your slavers had small talks with the rest of <<their $g.purifier>> camp followers before heading back home feeling renewed with positive energy.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers arrived at the compound and somehow they found that the purifiers were able to discern their backgrounds as slavers. Still, they are low on funds and after much negotiations they agreed to do some work for the amount of money they bring. <<rep $g.purifier>> chanted all the required magic and within moments some corruptions were purified from your slavers, leaving their bodies more pure. Your slavers were not welcome in the camp and were forced to leave once the ritual is over, but they got their money's worth.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers arrived at the compound and somehow they found that the purifiers were able to discern their backgrounds as slavers. The lead purifier were so stubborn on this fact that your slavers were not at all accepted anywhere near the camp. They contemplated assaulting the camp but without enough preparation, assaulting such a well-defended camp is going to be suicide.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. Your slavers arrived at the compound and somehow they found that the purifiers were able to discern their backgrounds as slavers. Still, they are low on funds and after much negotiations they agreed to do some work for the amount of money they bring. But during the purification ritual, otherwordly tendrils suddenly appear out of nowhere and ravaged the bodies of both your slavers and the purifier's compound. Soon, the place was turned into a place of debauchery with demons and raiders walking around the place as your slavers were continuously molested by incoming tendrils. They saw what becomes of the purifier as <<they $g.purifier>> were crawling next to <<their $g.purifier>> new master demon who decided that <<=$g.purifier.rep()>> would make a neat pet. After a night of debauchery, morning came and your slavers, upon gaining their consciousness back, hurried back and escape the compound before anything worse happened to them. Still, the experience had changed them permanently and they are more corrupt than ever now.</p><<run new setup.UnitGroup(
'quest_desert_purifiers_apprentice',
'Purifier Apprentice',
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_apprentice),
setup.qc.TraitReplace('unit', setup.trait.magic_fire),
],
)>>
<<run new setup.QuestTemplate(
'desert_purifiers_recruit', /* key */
'Desert Purifiers: Recruit', /* Title */
'darko', /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'corruptor': setup.qu.corruptor,
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
},
{ /* actors */
'purifier': setup.unitgroup.quest_desert_purifiers_enslave,
'student': setup.unitgroup.quest_desert_purifiers_apprentice,
},
[ /* costs */
],
'Quest_desert_purifiers_recruit',
setup.qdiff.hardest41, /* difficulty */
[ /* outcomes */
[
'Quest_desert_purifiers_recruitCrit',
[
setup.qc.Corrupt('purifier'),
setup.qc.TraitReplace('purifier', setup.trait.per_evil),
setup.qc.Slaver('purifier', 'was a kind purifier living on the eastern desert who you corrupted in order to recruit'),
setup.qc.MoneyNormal(0.5)
],
], [
'Quest_desert_purifiers_recruitSuccess',
[
setup.qc.Corrupt('student'),
setup.qc.TraitReplace('student', setup.trait.per_evil),
setup.qc.Slaver('student', 'was the apprentice of a purifier living off the desert who you corrupted in order to recruit'),
setup.qc.MoneyNormal(0.5)
],
], [
'Quest_desert_purifiers_recruitFailure',
[
setup.qc.Purify('corruptor'),
setup.qc.Purify('recruiter1'),
setup.qc.Purify('recruiter2'), ],
], [
'Quest_desert_purifiers_recruitDisaster',
[
setup.qc.Purify('corruptor'),
setup.qc.Purify('recruiter1'),
setup.qc.Purify('corruptor'),
setup.qc.Purify('recruiter1'),
setup.qc.MoneyCrit(-1),
setup.qc.Purify('recruiter2'),
setup.qc.Purify('recruiter2'), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The denizens of the eastern desert are often gifted with the aspect of fire. While the orcs use this gift to raid the settlements, there are few extremely blessed individuals whose mastery over fire allows them summon purifying fire. These people are often sought after for their purifying flames are thought to bless whoever is bathed in them.
</p>
<p>
You have caught wind of a group of purifiers journeying through the eastern desert. This is a rare
opportunity for you —- you can try to purify some of your slavers for free using their services,
or if you are feeling brave you can attempt to try and enslave or recruit the lead purifier, a
<<if $g.purifier.isFemale()>> gorgeous young healer
<<else>>
handsome young fellow
<</if>>. Such attempt would require you to send a slaver gifted in the dark arts, and even then it is surely going to be a dangerous affair.
</p>
<p>
You have chosen to forcefully recruit a purifier.
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements.
Your slavers arrived at the compound pretending to be patrons, and negotiated with the purifier for a
personal session.
Once alone, <<rep $g.corruptor>>
<<uadv $g.corruptor>>
worked <<their $g.corruptor>> magic and corrupted
<<rep $g.corruptor>> once pure mind into a twisted personality which is a far cry from what it was.
At the end of the session, <<rep $g.purifier>> wholeheartedly agree to join your company
as a slaver, abandoning <<their $g.purifier>> previous life and companions.
You have certainly recruited a powerful slaver, but at what cost?
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements.
Your slavers arrived at the compound pretending to be patrons, and waited until the lead
purifier is alone
But they were unable to manipulate the encampment to find the right opportunity, and your slavers
settled with corrupting <<they $g.purifier>>'s student instead.
The once innocent apprentice was
<<uadv $g.corruptor>>
twisted by <<rep $g.corruptor>>'s magic into
an evil devilish person who then wholeheartedly agree to join your company as a slaver.
A fire-proficient slaver such as <<rep $g.student>> will surely prove useful in your company.
</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements.
However, your slavers caught glimpse of <<rep $g.purifier>> and somehow <<their $g.purifier>> <<if $g.purifier.isFemale()>>beauty<<else>>handsomeness<</if>> managed to disarm your slavers of all their evil intentions. With their intentions gone, your slavers decided to come in peace to the encampment. <<rep $g.purifier>> decided to bless your slavers for such forthcomingness, and your slavers later returned back home less corrupt than before.</p><p>
The purifier has settled camp near an oasis and provided services to surrounding settlements. However, your slavers caught glimpse of <<rep $g.purifier>> and somehow <<their $g.purifier>> <<if $g.purifier.isFemale()>>beauty<<else>>handsomeness<</if>> managed to completely disarm your slavers of all their evil intentions. Within moment your slavers prostrate themselves in front of <<rep $g.purifier>>, leaving tithes and promising more tithe in the future. <<rep $g.purifier>> blessed them for their generosity, and ultimately your slavers came back home less corrupt than ever and with a mounting amount of debt.</p><<run new setup.QuestTemplate(
'for_science__something_long', /* key */
"For Science: Something Long", /* Title */
"darko", /* Author */
[ 'veteran',
'desert',
'danger'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'tank': setup.qu.tank,
'dps': setup.qu.dps,
'healer': setup.qu.healer, },
{ /* actors */
'chieftain': 'orc', },
[ /* costs */
],
'Quest_for_science__something_long',
setup.qdiff.hardest49, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__something_longCrit',
[
setup.qc.Equipment(setup.equipmentpool.brawn_good),
setup.qc.Opportunity('for_science__the_trial', {
dps: 'dps',
tank: 'tank',
healer: 'healer',
}),
],
], [
'Quest_for_science__something_longCrit',
[
setup.qc.Opportunity('for_science__the_trial', {
dps: 'dps',
tank: 'tank',
healer: 'healer',
}),
],
], [
'Quest_for_science__something_longFailure',
[
setup.qc.Injury('tank', 8),
setup.qc.Injury('dps', 9),
setup.qc.Injury('healer', 8), ],
], [
'Quest_for_science__something_longDisaster',
[
setup.qc.MissingUnit('tank'),
setup.qc.Injury('dps', 4),
setup.qc.Injury('healer', 5), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.HasItem(setup.item.quest_for_science_list),
setup.qres.NoItem(setup.item.quest_for_science_stick),
setup.qres.NoOpportunity('for_science__the_trial'), ],
[ /* expiration outcomes */
],
)>><p>
During your continued search for the <<rep setup.item.quest_for_science_list>> requested by the inventor, you have learned about a certain orcish encampment living near the mountains in the eastern deserts. It is said that they bestow the pole of heavens into adventurers brave enough (or foolish enough) to face their trials. This "pole", from your investigation, is apparently a perfect fit for the <<rep setup.item.quest_for_science_stick>>, the third item in the list.</p>
<p>
Venturing to the eastern deserts is dangerous, and even more so directly into an orcish encampment. You must provide a well-prepared team for this mission —- a tank, to protect your team, a healer, to sustain, and a rogue, to dispatch their enemies. But they must be prepared for injuries, for whatever this "trial" is, it does not sound good.
</p><p>
Your slavers journeyed to the northern side of the desert, where the camp dwells between the desert and the mountains. Dispatching thugs along the way, they finally arrived at the encampment, to meet with the chieftain. <<rep $g.tank>> <<uadv $g.tank>> discussed with the chieftain about obtaining the pole being displayed inside the tent —- the pole of heavens, as they put it. The discussion went surprisingly easy —- all your slavers have to do is prove their worth by completing one of their trials.
</p>
<p>
Your slavers awaited your decision on which trial they should take part in.
</p>
<<if $gOutcome == 'crit'>>
<p>
As a welcoming gift, your slavers were given a piece of gladiator outfit, an expensive and rare gift that you should use carefully.
</p>
<</if>><p>
An errant sandstorm led your slavers away from their destination, leaving them wounded and exhausted in the middle of nowhere. It took them several days to finally found a settlement to rest, before returning back home with heavy injuries.
</p><p>
Your slavers were ambushed by a large group of other slaver group. When there was seemingly to hope to escape capture, <<rep $g.tank>> <<uadv $g.tank>> threw <<themself $g.tank>> into the enemy to buy the rest of the team a time to escape.
<<rep $g.dps>> and <<rep $g.healer>> <<uadv $g.dps>> escaped, and they won't forget <<rep $g.tank>>'s sacrifice anytime soon.
</p>
<<set _rescuer = $dutylist.getUnit('DutyRescuer')>>
<<if _rescuer>>
<p>
Hearing the news of <<utheirrel _rescuer $g.tank>> <<rep $g.tank>> disappearance,
<<rep _rescuer>> sighs and begin to work.
</p>
<<else>>
<p>
If you want to save <<rep $g.tank>>, perhaps you can consider hiring a rescuer...
</p>
<</if>><<run new setup.QuestTemplate(
'from_beyond', /* key */
'From Beyond', /* Title */
'darko', /* Author */
[
'special',
'unit',
'danger'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'warrior1': setup.qu.light_warrior,
'warrior2': setup.qu.light_warrior,
'purifier': setup.qu.purifier, },
{ /* actors */
'slaver': setup.unitgroup.missingslavers, },
[ /* costs */
],
'Quest_from_beyond',
setup.qdiff.hard40, /* difficulty */
[ /* outcomes */
[
'Quest_from_beyondCrit',
[
setup.qc.Slaver('slaver', '', false),
setup.qc.RemoveFromUnitGroup('slaver'),
setup.qc.MoneyNormal(), ],
], [
'Quest_from_beyondSuccess',
[
setup.qc.Slaver('slaver', '', false),
setup.qc.RemoveFromUnitGroup('slaver'),
setup.qc.OneRandom([
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'),
setup.qc.Corrupt('purifier'),
]),
setup.qc.MoneyNormal(), ],
], [
'Quest_from_beyondFailure',
[
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'),
setup.qc.Corrupt('purifier'),
setup.qc.Injury('warrior1', 2),
setup.qc.Injury('warrior2', 2), ],
], [
'Quest_from_beyondDisaster',
[
setup.qc.OneRandom([
setup.qc.MissingUnit('warrior1'),
setup.qc.MissingUnit('warrior2'),
setup.qc.MissingUnit('purifier'),
]),
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'),
setup.qc.Corrupt('purifier'),
setup.qc.Injury('warrior1', 3),
setup.qc.Injury('warrior2', 3),
setup.qc.Injury('purifier', 3), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.rescue, 30],
],
[
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
The bridge between this world and the beyond is often thin around the eastern deserts. While normally this would not be of any interest to you, there are rumors that <<rep $g.slaver>>, one of your former slavers, can occasionally be heard moaning from one of these areas.
</p>
<p>
You have heard that one of these areas have gone so unstable that the mist almost opened a gateway into the land beyond the mist. It might be possible for a group of purifiers to attempt to cross the mist just for a little while in a daring rescue mission for <<rep $g.slaver>>. Of course, any trinkets they get along the way would also be extremely valuable back in this world. However, such trip is very dangerous and you must be prepared for your slavers to came back corrupted.
</p><p>
Led by <<rep $g.purifier>>, your slavers
<<uadv $g.purifier>>
braced through the narrow gap in the mist into the debauched land beyond. Ignoring all the demons and slaves around them, your slavers moved with a singular purpose of location <<rep $g.slaver>>. Scouring room through room, looking at all the broken slaves caged inside tiny compartments, they finally found <<rep $g.slaver>> being mercilessly fucked by a large demon. <<rep $g.warrior1>> and <<rep $g.warrior2>> swiftly subdued the demon while <<rep $g.purifier>> saved <<rep $g.slaver>> before together your slavers exited the mist. All in all, it was a successful mission, and despite having such a harrowing experince, your slavers somehow managed to keep <<rep $g.slaver>> relatively unchanged from the last time you saw <<them $g.slaver>>.</p><p>
Led by <<rep $g.purifier>>, your slavers
<<uadv $g.purifier>>
braced through the narrow gap in the mist into the debauched land beyond.
They are greeted by a vision of such debauchery that they stood in their tracks for a while, before resuming their mission to locate and save <<rep $g.slaver>>. Going from room through room ignoring the hugely breasted demon torturing what appears to be an orc slave, they finally found <<rep $g.slaver>> being milked dry above a nasty looking ritual chamber. Your slavers attempted to undo <<rep $g.slaver>>'s binding, but then a slew of demons appear and throwing into them various dark spells. <<rep $g.purifier>> tried <<their $g.purifier>> best to shield against the spells until finally <<rep $g.slaver>> were freed. Together, your slavers run back to the entrance and escaped through the same gap they used earlier.</p>
<p>
The experience of being a demon plaything has physically changed <<rep $g.slaver>> —- even some of your slavers were also affected during their time there. They can be purified later, if the opportunity arises.</p><p>
Led by <<rep $g.purifier>>, your slavers
<<uadv $g.purifier>>
braced through the narrow gap in the mist into the debauched land beyond.
Immediately they were greeted with a vision so debauched that your slavers were mesmerized in their tracks, forgotting their original mission. By the time they regained their senses, <<rep $g.purifier>> were already tied up in one of the cages while <<rep $g.warrior1>> and <<rep $g.warrior2>> were being used by two demonic guards. Immediately, your slavers attempted to break free and escape the place before worse befall them. They sustained some injuries and even got slightly corrupted, but they were able to escape the place safely back into the deserts.</p>
<p>
During their time beyond the mist, they found no signs of <<rep $g.slaver>></p><p>
Led by <<rep $g.purifier>>, your slavers
<<uadv $g.purifier>>
braced through the narrow gap in the mist into the debauched land beyond.
Immediately they were greeted with a vision so debauched that your slavers were mesmerized in their tracks, forgotting their original mission. By the time they regained their senses, <<rep $g.purifier>> were already tied up in one of the cages while <<rep $g.warrior1>> and <<rep $g.warrior2>> were being used by two demonic guards. Immediately, your slavers attempted to break free and escape the place before worse befall them. They sustained some injuries and even got slightly corrupted, but they were able to escape the place safely back into the deserts, or so they thought until they realize that one of them is missing.</p>
<p>
During their time beyond the mist, they found no signs of <<rep $g.slaver>></p><<set _ifthenelse1 = setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_caution', 'caution'),
setup.qc.DoAll([
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_cautious),
setup.qc.TraitReplace('hero1', setup.trait.per_calm),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_cautious),
setup.qc.TraitReplace('hero2', setup.trait.per_calm),
]),
]),
setup.qc.DoAll([
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_brave),
setup.qc.TraitReplace('hero1', setup.trait.per_aggressive),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_brave),
setup.qc.TraitReplace('hero2', setup.trait.per_aggressive),
]),
]),
)>>
<<set _ifthenelse2 = setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_oasis', 'oasis'),
setup.qc.DoAll([
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_nimble),
setup.qc.TraitReplace('hero1', setup.trait.per_curious),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_nimble),
setup.qc.TraitReplace('hero2', setup.trait.per_curious),
]),
]),
setup.qc.DoAll([
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.per_tough),
setup.qc.TraitReplace('hero1', setup.trait.per_stubborn),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.per_tough),
setup.qc.TraitReplace('hero2', setup.trait.per_stubborn),
]),
]),
)>>
<<run new setup.QuestTemplate(
'heroic_showdown', /* key */
"Heroic Showdown", /* Title */
"darko", /* Author */
[ 'desert', 'danger'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'healer': setup.qu.healer,
'tank': setup.qu.tank,
'dps': setup.qu.dps, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2,
'demon': setup.unitgroup.demon, },
[ /* costs */
],
'Quest_heroic_showdown',
setup.qdiff.harder39, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_showdownCrit',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.MoneyCrit(),
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1), ],
], [
'Quest_heroic_showdownSuccess',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.Corrupt('tank'),
setup.qc.MoneyCustom(4000),
setup.qc.Injury('tank', 1), ],
], [
'Quest_heroic_showdownFailure',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.MoneyCustom(3000),
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.Injury('healer', 4),
setup.qc.Injury('tank', 4),
setup.qc.Injury('dps', 4),
setup.qc.Corrupt('healer'),
setup.qc.Corrupt('tank'),
setup.qc.Corrupt('dps'), ],
], [
'Quest_heroic_showdownDisaster',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.Injury('healer', 8),
setup.qc.Injury('tank', 8),
setup.qc.Injury('dps', 8),
setup.qc.Corrupt('healer'),
setup.qc.Corrupt('tank'),
setup.qc.Corrupt('dps'),
setup.qc.MoneyCustom(3000), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 0],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '7'), ],
)>><p>
The pair of
<<= $varstore.get('choose_your_own_adventure_lovers')>>
have once again came to your fort, but this time, it is with grim determination to end their journey once and for all.
Within the deserts, they have located a breach in the mist where they are certain that the demon is waiting for them there.
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
The time has come for them to exact their revenge.
<<else>>
The time has come for them to end the tragedy once and for all.
<</if>>
But they are not foolish enough to go alone —- they are approaching your company to ask for a backup help, and promises great reward.
</p>
<p>
Fighting demons won't be easy, but fortunately you had plenty of time to prepare thanks to the book. The finale of the story is finally here, and it is up to you to help close the chapter.
</p><p>
Your slavers journeyed with the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
for several days until finally, they are almost at their destination.
After resting peacefully
in
<<if $varstore.get('choose_your_own_adventure_oasis') == 'oasis'>>
an oasis,
<<else>>
a desert caverns,
<</if>>
your slavers arrived with the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
together at the site, a crater with dark cloud and lightning looming over the place. It looks ominous and foreboding —- a clear indicator that your slavers are in the right place.
Led by the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
<<rep $g.tank>> <<uadv $g.tank>> led your band of slavers down towards the crater
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
cautiously.
<<else>>
courageously.
<</if>>
</p>
<p>
Their descend were not peaceful, as demonic creatures suddenly appear out of nowhere and start attacking them.
<<rep $g.tank>> <<uadv $g.tank>> protected <<their $g.tank>> team members while <<rep $g.dps>> <<uadv $g.dps>> dispatched a creature, and then two, and more.
Meanwhile, the <<= $varstore.get('choose_your_own_adventure_lovers')>>
<<if $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
each fought on their own, turning the battle into a competition of who can dispatch the most.
<<else>>
fought with their backs on each other, fighting not as two people, but as one.
<</if>>
</p>
<p>
After the fierce fight, your slavers and the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
arrived at the center of the crater, where a sizable rift awaits. It is then that they hear footsteps coming from beyond, and lo and behold, <<if $g.demon.isFemale()>>a naked and incredibly voluptuous succubus<<else>>a naked and extremely well hung incubus<</if>> walked out of the portal seemingly with no care in the world.
</p>
<p>
Upon seeing the demon,
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
your slavers can see vindictive rage and anger burning in the
<<= $varstore.get('choose_your_own_adventure_lovers')>>' eyes,
<<else>>
your slavers can see decisive resolution in the faces of the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
<</if>>
knowing their journey is at an end.
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
Raising their sword,
<<else>>
Casting their spell,
<</if>>
they immediately attacked the demon, who swatted the
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
weapon
<<else>>
spell
<</if>>
seemingly with no problem at all.
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
Crying a battle cry,
<<else>>
Vowing solemnly,
<</if>>
the <<= $varstore.get('choose_your_own_adventure_lovers')>>
begin their attack in the fullest,
while your slavers fought off the demonic minions appearing out of nowhere around the craters.
</p>
<p>
The fight was long and bloody, but by pure chance a stray spell hit the demon stunning <<them $g.demon>> for a while. That short time was all the time needed for <<= $g.hero1.getName()>> and <<= $g.hero2.getName()>> to simultaneously
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
impale their weapons into the demon, killing <<them $g.demon>>.
<<else>>
impale the demon with a magical spear, killing <<them $g.demon>>.
<</if>>
As if knowing that the fight is over, the sky suddenly cleared up, and the demonic minions retreated from the fight.
</p>
<p>
Having their duties over, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
stood silently over the demon corpse, unmoving, seemingly thinking
about all the adventures they have had leading to this end.
Meanwhile, your slavers gathered the pay they were promised. Not wanting to disturb the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
they left without saying goodbye and headed home to your fort.
The pair of <<= $varstore.get('choose_your_own_adventure_lovers')>> never once look at your slavers.
</p>
<p>
Your slavers never noticed that the demon taunted the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
during the fight, shaking their convictions to the core.
</p><<include 'Quest_heroic_showdownCrit'>>
<p>Your slavers sustained minor injuries during the terrible fight.</p><<include 'Quest_heroic_showdownCrit'>>
<p>Your slavers sustained great injuries during the corrupted fight.</p><<include 'Quest_heroic_showdownCrit'>>
<p>Your slavers barely made it out of the fight, and they have been corrupted by it.</p><<run new setup.UnitGroup(
'quest_loot_the_loot1',
"Human (Desert): All gender",
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.per_evil),
setup.qc.BgTraitReset('unit', setup.trait.bg_raider), ],
)>>
<<run new setup.UnitGroup(
'quest_loot_the_loot2',
"Villager",
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.RemoveTraitsWithTag('unit', 'skill'),
],
)>>
<<run new setup.QuestTemplate(
'loot_the_loot', /* key */
"Loot the Loot", /* Title */
"darko", /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scavenger1': setup.qu.scavenger,
'scavenger2': setup.qu.scavenger,
'carrier': setup.qu.carrier, },
{ /* actors */
'raider': setup.unitgroup.quest_loot_the_loot1,
'villager': setup.unitgroup.quest_loot_the_loot2, },
[ /* costs */
],
'Quest_loot_the_loot',
setup.qdiff.normal37, /* difficulty */
[ /* outcomes */
[
'Quest_loot_the_lootCrit',
[
setup.qc.Slave('raider', 'was a raider who got injured during a raid and abandoned by their raidmates', undefined),
setup.qc.MoneyCrit(0.8), ],
], [
'Quest_loot_the_lootSuccess',
[
setup.qc.Slave('villager', 'was a villager in a desert settlement which got attacked, survived only to be captured by your company', undefined),
setup.qc.MoneyNormal(0.8), ],
], [
'Quest_loot_the_lootFailure',
[
setup.qc.Injury('carrier', 1),
setup.qc.Injury('scavenger1', 1),
setup.qc.Injury('scavenger2', 1), ],
], [
'Quest_loot_the_lootDisaster',
[
setup.qc.Injury('scavenger1', 4),
setup.qc.Injury('scavenger2', 4),
setup.qc.Injury('carrier', 4), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The eastern settlements are often raided due to their lack of defense and abundance of raiding. You have learned about one such unfortunate settlements which just got freshly raided. It is highly likely that the raiders were unable to fully loot the settlement, and this would make an easy picking for your slavers if you are looking for a cheap human slave or some valuables. The raiders probably already took most of the valuable slaves though, so whatever slave you found is likely to be of lower quality.
</p><p>
Your slaver found one of the raiders who were injured during the raid and had to recover first in the ruins of the settlement. <<They $g.raider>> were unable to fight back when your slavers
<<uadv $g.scavenger1>>
decided that the raider makes a much better slave than the rest of the settlement's survivors.</p><p>The raiders were not at all thorough with the place — it seems they indulged too much in using the villagers sexually and were sloppy during the looting.
Your slavers
<<uadv $g.scavenger1>>
managed to pick the locks and loot some of the still-locked containers in the settlement. They also found an unfortunate villager who they deem sufficiently fit as a slave and brought back home.
</p><p>
Unfortunately, it seems the ruins of the settlement were almost picked clean by the raiders. On the way back, they were attacked by several desert scorpions causing your slavers minor injuries.</p><p>
The raiders apparently was hiding in the village, knowing full well that it will attract scavengers, which they hoped to enslave. Still, your slavers were not defenseless, and after a ruthless fight managed to retreat to safety with heavy injuries.</p><<set _criteriaorc = new setup.UnitCriteria(
null, /* key */
'Orc Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
setup.qres.Trait(setup.trait.race_orc),
setup.qres.AnyTrait([
setup.trait.muscle_verystrong,
setup.trait.dick_titanic,
setup.trait.balls_titanic,
setup.trait.breast_titanic,
setup.trait.height_giant,
]),
],
{
}
)>>
<<run new setup.UnitGroup(
'quest_mansion_of_hypnotism_master',
"Master",
[
[setup.unitpool.race_humandesert_male, 0.1],
[setup.unitpool.race_humandesert_female, 0.1],
],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_boss),
setup.qc.TraitsReplace('unit', [setup.trait.skill_hypnotic]), ],
)>>
<<run new setup.QuestTemplate(
'mansion_of_hypnotism', /* key */
"Mansion of Hypnotism", /* Title */
"darko", /* Author */
[ 'desert',
'veteran',
'upgrade'
], /* tags */
4, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'hypnotist': setup.qu.hypnotist_veteran,
'assistant': setup.qu.hypnotist,
'trainer': setup.qu.slavetrainer,
'orc': _criteriaorc, },
{ /* actors */
'master': 'quest_mansion_of_hypnotism_master',
'slave': setup.unitgroup.orc, },
[ /* costs */
],
'Quest_mansion_of_hypnotism',
setup.qdiff.hardest50, /* difficulty */
[ /* outcomes */
[
'Quest_mansion_of_hypnotismCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Item(setup.item.brainwash_technology),
setup.qc.Item(setup.item.potion_slavertraining),
setup.qc.MissingUnit('orc'),
],
], [
'Quest_mansion_of_hypnotismSuccess',
[
setup.qc.MissingUnit('orc'),
setup.qc.Item(setup.item.potion_slavertraining),
setup.qc.Item(setup.item.brainwash_technology),
],
], [
'Quest_mansion_of_hypnotismFailure',
[
setup.qc.Trait('orc', setup.trait.training_mindbreak),
setup.qc.TraumatizeRandom('hypnotist', 12),
setup.qc.TraumatizeRandom('assistant', 8),
setup.qc.TraumatizeRandom('trainer', 6), ],
], [
'Quest_mansion_of_hypnotismDisaster',
[
setup.qc.MissingUnit('orc'),
setup.qc.TraumatizeRandom('hypnotist', 18),
setup.qc.TraumatizeRandom('assistant', 15),
setup.qc.TraumatizeRandom('trainer', 12),
setup.qc.SlaverMarker('master'),
setup.qc.SlaveMarker('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.brainwash_technology), ],
)>><p>Hypnotism - the act of influencing the subconcious mind. Contrary to popular belief, it does not work the way most people think —- hypnotism only work when the subject has a subconscious desire to get hypnotized. It does not work to make others do whatever the hypnotizer desires — there is a very strong limit to this ability, rendering it useless for anything but party tricks.
</p>
<p>
You have caught wind of a rumor that someone is living in a mansion secluded somewhere in the eastern deserts, staffed exclusively with brainwashed orcs. Apparently, the <<master $g.master>> of the mansion is somehow capable of using hypnotism to alter the conscious minds of these orcs. There is no doubt that the <<master $g.master>> is using some kind of artifact to be able to achieve this improbable feat.
</p>
<p>
It is far too dangerous to attempt to steal this artifact —- the orcs are still orcs and capable of mauling your slavers to smitherens. A better idea is to befriend the perhaps lonely <<master $g.master>> —- you can try sending a slaver skilled in <<rep setup.trait.skill_hypnotic>>, together with an untrained
and positively voluptuous <<rep setup.trait.race_orc>> slave and demonstrate to the <<master $g.master>> your slaver's capability of hypnotism. Perhaps <<they $g.master>> would be willing to share their secrets with a friend of similar background.
</p>
<p>
<<dangertext 'WARNING:'>> the slave you send on this mission is likely to end up as one of the <<master $g.master>>'s servant and be gone forever from your company...
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstrated <<their $g.hypnotist>> well practiced hypnotism on the slave.
Within moments, <<rep $g.orc>> fell into a trance, although not much else. The <<master $g.master>> offered to then take over, and your slavers were in awe as the <<uadjper $g.orc>> slave fell deeper and deeper into trance until <<they $g.orc>> snapped, and took whatever instructions the <<master $g.master>> gave. As a gesture of goodwill, <<they $g.master>> shared the secret of
<<rep setup.item.brainwash_technology>> with your slavers,
as well as a <<rep setup.item.potion_slavertraining>> to aid your slavers in mastering their newfound
knowledge.
</p>
<p>
Your slavers spent few days enjoying the hospitality of the master while perusing all the various orc slaves available in the mansion.
Your former slave <<rep $g.orc>> settled nicely in the mansion, serving as the <<master $g.master>>'s personal
<<if $g.master.isFemale()>>rear-eater<<else>>cumdump<</if>>. Before leaving, the master gave your slavers some lavish gifts, which they bring back home.
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstrated <<their $g.hypnotist>> well practiced hypnotism on the slave.
Within moments, <<rep $g.orc>> fell into a trance, although not much else. The <<master $g.master>> offered to then take over, and your slavers were in awe as the <<uadjper $g.orc>> slave fell deeper and deeper into trance until <<they $g.orc>> snapped, and took whatever instructions the <<master $g.master>> gave. As a gesture of goodwill, <<they $g.master>> shared the secret of
<<rep setup.item.brainwash_technology>> with your slavers,
as well as a <<rep setup.item.potion_slavertraining>> to aid your slavers in mastering their newfound
knowledge.</p>
<p>
Your slavers spent few days enjoying the hospitality of the master while perusing all the various orc slaves available in the mansion.
Your former slave <<rep $g.orc>> settled nicely in the mansion, serving as the <<master $g.master>>'s personal
<<if $g.master.isFemale()>>rear-eater<<else>>cumdump<</if>>.
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstratd <<their $g.hypnotist>> hypnotism on the slave. But something went wrong and <<rep $g.hypnotist>>'s hold over the slave was broken. Unimpressed, the <<master $g.master>> took over and put the slave <<themself $g.master>> into a deep trance, while simultaneously hypnotizing all your slavers as well. By the time they came by, they found themselves stranded in the desert with a mindbroken <<rep $g.orc>>. They went home, apparently traumatized by the experience.
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstrated <<their $g.hypnotist>> well practiced hypnotism on the slave. But something went wrong and <<rep $g.hypnotist>>'s hold over the slave was broken. Unimpressed, the <<master $g.master>> took over and put the slave <<themself $g.master>> into a deep trance, while simultaneously hypnotizing all your slavers as well. By the time they came by, they found themselves stranded in the desert with <<rep $g.orc>> nowhere in sight. They went home, apparently greatly traumatized by the experience.
</p><<set _criteriaorc = new setup.UnitCriteria(
null, /* key */
'Orc Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
setup.qres.Trait(setup.trait.race_orc),
setup.qres.AnyTrait([
setup.trait.muscle_verystrong,
setup.trait.dick_titanic,
setup.trait.balls_titanic,
setup.trait.breast_titanic,
setup.trait.height_giant,
]),
],
{
}
)>>
<<run new setup.QuestTemplate(
'mansion_of_hypnotism2', /* key */
"Mansion of Hypnotism", /* Title */
"darko", /* Author */
[ 'desert',
'veteran',
'item',
], /* tags */
4, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'hypnotist': setup.qu.hypnotist_veteran,
'assistant': setup.qu.hypnotist,
'trainer': setup.qu.slavetrainer,
'orc': _criteriaorc, },
{ /* actors */
'master': 'quest_mansion_of_hypnotism_master',
'slave': setup.unitgroup.orc, },
[ /* costs */
],
'Quest_mansion_of_hypnotism2',
setup.qdiff.hardest50, /* difficulty */
[ /* outcomes */
[
'Quest_mansion_of_hypnotismCrit2',
[
setup.qc.MoneyNormal(),
setup.qc.Item(setup.item.potion_slavertraining),
setup.qc.MissingUnit('orc'),
],
], [
'Quest_mansion_of_hypnotismCrit2',
[
setup.qc.MissingUnit('orc'),
setup.qc.Item(setup.item.potion_slavertraining),
],
], [
'Quest_mansion_of_hypnotismFailure2',
[
setup.qc.Trait('orc', setup.trait.training_mindbreak),
setup.qc.TraumatizeRandom('hypnotist', 12),
setup.qc.TraumatizeRandom('assistant', 8),
setup.qc.TraumatizeRandom('trainer', 6), ],
], [
'Quest_mansion_of_hypnotismDisaster2',
[
setup.qc.MissingUnit('orc'),
setup.qc.TraumatizeRandom('hypnotist', 18),
setup.qc.TraumatizeRandom('assistant', 15),
setup.qc.TraumatizeRandom('trainer', 12),
setup.qc.SlaverMarker('master'),
setup.qc.SlaveMarker('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 60],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.HasItem(setup.item.brainwash_technology), ],
)>><p>Hypnotism - the act of influencing the subconcious mind. Contrary to popular belief, it does not work the way most people think —- hypnotism only work when the subject has a subconscious desire to get hypnotized. It does not work to make others do whatever the hypnotizer desires — there is a very strong limit to this ability, rendering it useless for anything but party tricks.
</p>
<p>
Some time ago, your slavers have somehow befriended a certain <<master $g.master>> living in a secluded
mansion in the middle of nowhere at the eastern deserts.
The grand mansion is staffed entirely with brainwashed orcs.
While the <<master $g.master>> was kind enough to share <<rep setup.item.brainwash_technology>>
with your slavers, they still need
the rare <<rep setup.item.potion_slavertraining>> to actually make use of the knowledge.
</p>
<p>
If you run out of <<rep setup.item.potion_slavertraining>>, you can try to again send a slaver
skilled in <<rep setup.trait.skill_hypnotic>> to keep the lonely <<master $g.master>> company.
Of course, you also need to bring the same specimen as last time: a completely untrained
and positively voluptuous <<rep setup.trait.race_orc>> slave, for your slaver to demonstrate to the
<<master $g.master>> their capability of hypnotism.
</p>
<p>
<<dangertext 'WARNING:'>> the slave you send on this mission is likely to end up as one of the <<master $g.master>>'s servant and be gone forever from your company...
</p><p>
Same as last time, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> — the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
When <<they $g.master>> see your slavers again, <<they $g.master>> visible relaxes
and invited your slavers for a pleasant dinner. Over the next few days, the <<master $g.master>>
of the mansion enjoyed the company of your slavers, before finally introducing <<their $g.master>> name:
<<name $g.master>>.
Of course,
the bound and gagged <<rep $g.orc>> were subjected to various acts of hypnotism
both from <<rep $g.hypnotist>> and the <<master $g.master>>, often during the wonderful tea-time.
</p>
<p>
As your slaver's time come to an end,
the <<master $g.master>> again generously shared a bottle of
<<rep setup.item.potion_slavertraining>> to aid your slavers in their work home.
Your former slave <<rep $g.orc>> settled nicely in the mansion, serving as the <<master $g.master>>'s personal
<<if $g.master.isFemale()>>rear-eater<<else>>cumdump<</if>>.
<<if $gOutcome == 'crit'>>
Before leaving, the master gave your slavers some lavish gifts, which they bring back home.
<</if>>
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstratd <<their $g.hypnotist>> hypnotism on the slave. But something went wrong and <<rep $g.hypnotist>>'s hold over the slave was broken. Unimpressed, the <<master $g.master>> took over and put the slave <<themself $g.master>> into a deep trance, while simultaneously hypnotizing all your slavers as well. By the time they came by, they found themselves stranded in the desert with a mindbroken <<rep $g.orc>>. They went home, apparently traumatized by the experience.
</p><p>
Arriving at the mansion, your slavers was greeted by a
<<if $g.slave.isFemale()>>
freakishly voluptouous orc dressed in a skimpy maid outfit.
<<else>>
freakishly muscular dressed in overly tight butler outfit.
<</if>>
With none of the usual orcish slang, <<they $g.slave>> escorted your slavers to meet the <<master $g.master>> —- the <<man $g.master>> radiates mystery with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was apparently indeed rather lonely, and greatly appreciate the shared interest in hypnotism. When <<they $g.master>> asked for a demonstration,
your slaver immediately set the bound and gagged <<rep $g.orc>> down and <<rep $g.hypnotist>> <<uadv $g.hypnotist>> demonstrated <<their $g.hypnotist>> well practiced hypnotism on the slave. But something went wrong and <<rep $g.hypnotist>>'s hold over the slave was broken. Unimpressed, the <<master $g.master>> took over and put the slave <<themself $g.master>> into a deep trance, while simultaneously hypnotizing all your slavers as well. By the time they came by, they found themselves stranded in the desert with <<rep $g.orc>> nowhere in sight. They went home, apparently greatly traumatized by the experience.
</p><<run new setup.QuestTemplate(
'milking_season', /* key */
'Harvesting Season', /* Title */
'darko', /* Author */
[ 'desert', 'money', 'item'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'milker1': setup.qu.milker,
'milker2': setup.qu.milker,
'negotiator': setup.qu.negotiator, },
{ /* actors */
},
[ /* costs */
],
'Quest_milking_season',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_milking_seasonCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Equipment(setup.equipmentpool.survival_good), ],
], [
'Quest_milking_seasonSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_milking_seasonFailure',
[
],
], [
'Quest_milking_seasonDisaster',
[
setup.qc.MissingUnitRecapture('negotiator', 'capturedmedium'),
setup.qc.MoneyNormal(), ],
], ],
[
[setup.questpool.desert, 30],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Amongst the various clothing materials available in the continent, the soft yet durable silk is one of the rarest materials. Clothings made from silk is especially suitable for ranger-related duties. It is said to be produced over at farms in the eastern desert, through secret technique passed from generation to generation. There are very few people who are privy to how these silks were produced.
</p>
<p>
Every now and then, during harvesting seasons, these farms may open up opportunities for part-timers to help them harvest the silks. For such a standard work, the pay is unusually high, and there is potential bonus of getting one of the silk-weaved clothes. You can try to send a group of slavers to help with this menial but potentially very rewarding task.
</p><p>Your slavers arrived at the farm, whose outwards appearance betrays no hint of what lies beyond. An old-looking barn just like any other farm, but one thing stood out —- located in the middle of a desert, there would be no place to plant crops.</p>
<p>The farm operators explained to your slavers what had to be done. There are silk cocoons that they need to harvest at the back. These cocoons are only harvested once per month, and so during harvesting seasons such as this the amount work is high enough to warrant extra labor.</p>
<p>
Hence your slavers went to the back barn, and began their work. They managed to harvest high quality silk, which earns your company an extra reward. Your slavers then went back to fort, succeeding in their tasks.</p>
<p>Having read such an undetailed report, you later ask your slavers for more information. Your slaver
were being extremely vague about what exactly the harvesting procedure is, but apparently you managed to gather that in the back barn there are numerous cocoons all hanging from the ceilings wrapped in what appears to be silk. Each cocoon has a tap that your slavers has to harvest, but the quality apparently differs based on how experienced your slavers are. They
<<uadv $g.negotiator>>
refused to say more about the subject, including the details of these cocoons. Having see no benefit in pursuing further, given the quality of their job you dropped the subject and moved on to your work.</p><p>Your slavers arrived at the farm, whose outwards appearance betrays no hint of what lies beyond. An old-looking barn just like any other farm, but one thing stood out —- located in the middle of a desert, there would be no place to plant crops.</p>
<p>The farm operators explained to your slavers what had to be done. There are silk cocoons that they need to harvest at the back. These cocoons are only harvested once per month, and so during harvesting seasons such as this the amount work is high enough to warrant extra labor.</p>
<p>
Hence your slavers went to the back barn, and began their work. They managed to harvest decent quality silk, which was sufficient for the employers. Your slavers then went back to fort, succeeding in their tasks.</p>
<p>Having read such an undetailed report, you later ask your slavers for more information. Your slavers
<<uadv $g.negotiator>>
refused to talk more, but you get the feeling that something in the barn has unnerved your slavers. You decided not to push the issue and move on.</p><p>Unfortunately, by the time your slavers arrived at the farm, the harvest season was already over. Your slavers had no choice but to went back to the farm, but they swear there is something completely off about these silks, looking at the jars of white silk around the farm.</p><p>Your slavers arrived at the farm, whose outwards appearance betrays no hint of what lies beyond. An old-looking barn just like any other farm, but one thing stood out —- located in the middle of a desert, there would be no place to plant crops.</p>
<p>The farm operators explained to your slavers what had to be done. They then ushered <<rep $g.milker1>> and <<rep $g.milker2>> to being their works while <<rep $g.negotiator>> stayed to negotiate the pay.</p>
<p>
By the time your slavers has finished the work and came back, <<rep $g.negotiator>> were nowhere to be found. Somehow, <<rep $g.milker1>> and <<rep $g.milker2>> did not feel any need at all to investigate, and meekly accepted their pay and moved on.</p>
<p>
While you have no idea what fate could possible await <<rep $g.negotiator>>, given the mystery of the farm's growing set of cocoons and their "tap", there is little left to imagination what happened to <<rep $g.negotiator>>...</p><<run new setup.UnitGroup(
'quest_mist_merge_complete232',
'Half Possessed',
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.TraitReplace('unit', setup.trait.per_lunatic),
setup.qc.TraitReplace('unit', setup.trait.magic_dark), ],
)>>
<<run new setup.UnitGroup(
'quest_mist_merge_complete233',
'Full Possession',
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.ResetInnateTraits('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_titanic),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_titanic),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_titanic),
setup.qc.TraitReplace('unit', setup.trait.magic_dark_master),
setup.qc.TraitReplace('unit', setup.trait.per_lunatic),
setup.qc.GenName('unit', [setup.trait.race_demon]), ],
)>>
<<run new setup.QuestTemplate(
'mist_merge_complete23', /* key */
'Mist Merge: Complete', /* Title */
'darko', /* Author */
[ 'desert', 'unit', 'danger'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'corruptor2': setup.qu.corruption_assistant,
'corruptor1': setup.qu.corruption_assistant,
'guard': setup.qu.dark_warrior, },
{ /* actors */
'halfpossessed': setup.unitgroup.quest_mist_merge_complete232,
'fullpossess': setup.unitgroup.quest_mist_merge_complete233, },
[ /* costs */
],
'Quest_mist_merge_complete23',
setup.qdiff.extreme45, /* difficulty */
[ /* outcomes */
[
'Quest_mist_merge_complete23Crit',
[
setup.qc.Slaver('fullpossess', 'was fully possessed by a demon from beyond the mist, leaving their original thought locked deep down inside their mind', false),
setup.qc.MoneyNormal(),
],
], [
'Quest_mist_merge_complete23Success',
[
setup.qc.Slaver('halfpossessed', 'was half-possessed by a demon allowing them control over the mind but erasing all their previous personality', false),
setup.qc.MoneySmall(),
setup.qc.Corrupt('corruptor1'), ],
], [
'Quest_mist_merge_complete23Failure',
[
setup.qc.Corrupt('corruptor1'),
setup.qc.Corrupt('corruptor2'), ],
], [
'Quest_mist_merge_complete23Disaster',
[
setup.qc.MissingUnit('guard'), ],
], ],
[
], /* quest pool and rarity */
[
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>Residents from beyond the mist often attempt to cross to this world, but few succeed. A direct trip is extremely dangerous for the demons, and the preferrred method seems to be of possession. With a proper sacrifice and high level <<lore magic_dark>>, one could invite one of the mist residents to come to this world and enter the sacrifice's mind. The sacrifice's mind will be locked securely deep within their body while the demon will have full control over the body, potentially forever.</p>
<p>An eastern settlement has come asking for your company's help thwarting an upcoming mist ritual held near their village. But you know better —- this must be the work of a powerful wizard trying to control a demon over to their side using the ritual above.</p>
<p>
You could do as the village ask and send your best purifiers to thwart the ritual and keep the village safe. This will surely earn the gratitude of the settlement. On the other hand, demons summoned this way are incredibly powerful. You could try to send your slavers to help the wizard in exchange for recruiting one of the possessed person as a slaver. Although if the ritual fails, the consequences will be disastrous.</p>
<p>
You have chosen to aid with the ritual in hope of recruiting a possessed person.</p><p>With the aid of your slavers, the wizard were able to complete the ritual. The slave —- now known as <<rep $g.fullpossess>>, greets both of you sultry and thanked you for summoning <<them $g.fullpossess>>. In front of your eyes, you could see the changes made to the once slave body —- the assets are definitely larger but the features are also more demonic in nature.</p>
<p>After the wizard obtained the knowledge he seeks from the demon, the demon is free to wander, and
<<rep $g.corruptor1>>
<<uadv $g.corruptor1>>
recruited the curious demon into your company. The presence of such powerful creature in your company will surely be useful.</p><p>The wizard accepted your slaver's offers. But even with the help of <<rep $g.corruptor1>> and <<rep $g.corruptor2>>, there were too many factors to consider that the ritual somehow ended short. It seems that only half of the demon's essence managed to get transferred to <<rep $g.halfpossessed>>, which means <<they $g.halfpossessed >> still retain control of their body, but their personality is completely erased and replaced by that of the demon. It was then really easy for <<rep $g.corruptor1>> to
<<uadv $g.corruptor1>>
invite <<rep $g.halfpossessed>> to join your company, given <<their $g.halfpossessed>> new predisposition towards lunacy.
</p><p>The wizard accepted your slaver's offers. But even with the combined knowledge of your slavers and the wizards, a sudden burst of otherworldly tentacles marked the failure of the ritual.
The tentacles ravaged every orifice it can catch, corrupting both the wizard and your slavers. Fortunately for you, your slavers were not the main target of the tentacles, as they were only assisting the wizard. But the wizard was twisted beyond recognition. Not wanting to anger whatever power is currently ravaging the wizard, your slavers made the wise decision to escape the place quickly.</p><p>The wizard accepted your slaver's offers. But your slavers messed up the ritual badly and switched the corruption target from <<= $g.halfpossessed.getName()>> to <<rep $g.guard>>, which caused <<rep $g.guard>> to writhe and moan in a combination of agony and ecstacy. Unable to do anything, your slavers watched as <<rep $g.guard>>'s body twisted, wings growing out of <<their $g.guard>> back while a new dick grows under their pants. In the end, <<rep $g.guard>> was completely possessed by the demonic creature, which is all according to the wizard's plans, but certainly not yours. To make matters worse, the demon refused to join your company, for they already have all of <<rep $g.guard>> memory with them.</p><<run new setup.UnitGroup(
'quest_mist_merge_disrupt21',
'wizardcorrupted',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict), ],
)>>
<<run new setup.UnitGroup(
'quest_mist_merge_disrupt23',
'mindbroken',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak), ],
)>>
<<run new setup.QuestTemplate(
'mist_merge_disrupt2', /* key */
'Mist Merge: Disrupt', /* Title */
'darko', /* Author */
[ 'desert', 'unknown', 'favor',
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'purifier1': setup.qu.purifier,
'purifier2': setup.qu.purifier,
'warrior': setup.qu.light_warrior, },
{ /* actors */
'corrupted': setup.unitgroup.quest_mist_merge_disrupt21,
'mindbroken': setup.unitgroup.quest_mist_merge_disrupt23, },
[ /* costs */
],
'Quest_mist_merge_disrupt2',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_mist_merge_disrupt2Crit',
[
setup.qc.Slave('corrupted', 'was a wizard attempting to summon a demon but was subdued by your company'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humandesert', 100),
],
], [
'Quest_mist_merge_disrupt2Success',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humandesert', 50), ],
], [
'Quest_mist_merge_disrupt2Failure',
[
setup.qc.Injury('warrior', 2),
setup.qc.Corrupt('purifier1'),
setup.qc.Corrupt('purifier2'), ],
], [
'Quest_mist_merge_disrupt2Disaster',
[
setup.qc.Corrupt('purifier1'),
setup.qc.Corrupt('purifier2'),
setup.qc.Corrupt('warrior'),
setup.qc.Corrupt('purifier1'),
setup.qc.Corrupt('purifier2'),
setup.qc.Corrupt('warrior'),
setup.qc.Injury('purifier1', 2),
setup.qc.Injury('purifier2', 2),
setup.qc.Injury('warrior', 2), ],
], ],
[
], /* quest pool and rarity */
[
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>Residents from beyond the mist often attempt to cross to this world, but few succeed. A direct trip is extremely dangerous for the demons, and the preferrred method seems to be of possession. With a proper sacrifice and high level <<lore magic_dark>>, one could invite one of the mist residents to come to this world and enter the sacrifice's mind. The sacrifice's mind will be locked securely deep within their body while the demon will have full control over the body, potentially forever.</p>
<p>An eastern settlement has come asking for your company's help thwarting an upcoming mist ritual held near their village. But you know better —- this must be the work of a powerful wizard trying to control a demon over to their side using the ritual above.</p>
<p>
You could do as the village ask and send your best purifiers to thwart the ritual and keep the village safe. This will surely earn the gratitude of the settlement. On the other hand, demons summoned this way are incredibly powerful. You could try to send your slavers to help the wizard in exchange for recruiting one of the possessed person as a slaver. Although if the ritual fails, the consequences will be disastrous.</p>
<p>
You have chosen to disrupt the ritual.</p><p>
Your slavers arrived at the nick of time as you see the victim's body starting to get ravaged by demonic magic.
<<rep $g.warrior>> swiftly subdued the wizard while <<rep $g.purifier1>> and <<rep $g.purifier2>> <<uadv $g.purifier1>>
get to work and attempted to undo the corruption.
The higher powers answered to their prayers and the corruptions were all transferred into the wizard. With the victim released from the spell, your slavers breathe a sigh of relief as the ritual was completely cancelled, leaving only the corrupted body of the wizard as proof that it ever took place. After looting the tower clean, your slavers proudly take <<rep $g.corrupted>> as a trophy home of their succesfull purification attempt.
</p><p>
By the time your slavers arrived, the ritual has already been completed, as you see the wizard conversing with what appears to be a demon. As you arrive, the demon disappeared into bats while the wizard, using their newly acquired spell, teleported away. Your slavers were disappointed in such a result, but at least they are free to
<<uadv $g.purifier1>>
loot the place and pray that the demon won't cause havoc in the vicinity.
</p><p>
By the time your slavers arrived, the ritual has already been completed, as you see the wizard conversing with what appears to be a demon. Upon noticing your slavers, the demon charged in. <<rep $g.warrior>> did <<their $g.warrior>> best protecting your other slavers as <<rep $g.purifier1>> and <<rep $g.purifier2>> attempted to cast whatever purification magic they can. But the demon was too much for your slavers, and it injured <<rep $g.warrior>> before proceeding to corrupt your purifiers. Your slavers headed home defeated, injured and in some cases transformed.
</p><p>
By the time your slavers arrived, the ritual has already been completed, as you see the wizard conversing with what appears to be a demon. Upon noticing your slavers, the demon charged in. <<rep $g.warrior>> did <<their $g.warrior>> best protecting your other slavers as <<rep $g.purifier1>> and <<rep $g.purifier2>> attempted to cast whatever purification magic they can. But the demon was too much for your slavers, and it injured <<rep $g.warrior>> before proceeding to ravage all of your slavers. By the end of the debauchery, your slavers had been completely corrupted, but at the very least they still retained their minds.
</p><<run new setup.QuestTemplate(
'mobile_brothel', /* key */
'Mobile Brothel', /* Title */
'darko', /* Author */
[ 'desert', 'order'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer1': setup.qu.slavetrainer,
'trader': setup.qu.slavetrader,
'guard': setup.qu.guard, },
{ /* actors */
'puller': setup.unitgroup.desert_all,
'show': setup.unitgroup.desert_all,
'madam': setup.unitgroup.all, },
[ /* costs */
],
'Quest_mobile_brothel',
setup.qdiff.hard40, /* difficulty */
[ /* outcomes */
[
'Quest_mobile_brothelCrit',
[
setup.qc.SlaveOrderMobileBrothel(1.8),
],
], [
'Quest_mobile_brothelSuccess',
[
setup.qc.SlaveOrderMobileBrothel(1.3),
],
], [
'Quest_mobile_brothelFailure',
[
setup.qc.MoneyNormal(-0.1),
],
], [
'Quest_mobile_brothelDisaster',
[
setup.qc.MoneyNormal(-1),
setup.qc.SlaveMarker('puller'),
setup.qc.SlaveMarker('show'),
setup.qc.SlaverMarker('madam'), ],
], ],
[
[setup.questpool.desert, 50],
], /* quest pool and rarity */
[
setup.qres.Cooldown(8),
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.marketingoffice), ], /* restrictions to generate */
)>><p>
The eastern desert has few permanent settlements —- which means that whoring business is difficult to perform. But there are rumors that certain brothels operate in the desert by having a strong slave carry a carriage containing whores between settlements. Settlers can then pay money to use the carriage's contents, which usually consists of slutty slaves.</p>
<p>
Amongst these troupe, there is a particularly picky troupe famous for bringing high quality sluts. While you or your slavers entertained the idea of using their services, you are more interested in seeing if they are interested in buying slaves. Rumor is that they pay very good money for high quality slaves, which are difficult to obtain there. To secure such a deal, it is necessary to bring your best goods to showcase as an example, so that they can see the proficiency of your company in raising slaves.</p><p>
Your slavers spotted the caravan travelling across the desert. The first thing they see of course is the
muscular slave almost entirely naked pulling a carriage covered in drapes.
<<if $g.puller.isHasVagina()>>
Her breasts and vagina are both pierced and connected with a chain to a collar on her neck.
<<else>>
His cock and nipples are pierced with a thick ring, who are connected with a chain to his neck.
<</if>>
Hanging from the chain is some kind of round metal weight, that swings back and forth with every step that <<they $g.puller>> take.
</p>
<p>
Seeing such depravity your slavers is completely sure that the <<mistress $g.madam>> is the target they have been looking for. When your slavers approached, with a practiced bow <<rep $g.madam>> greets your slavers and proceed to use <<their $g.madam>> practiced sale pitch to offer <<their $g.madam>> slaves for your slavers perusal.</p>
<p>
Your slavers managed to focus however, and ignore the <<girl $g.show>>s inside the cage. Instead, they managed to negotiate with the <<mistress $g.madam>>, who is more than happy to add more quality slaves to <<their $g.madam>> troupe's hideout somewhere in the desert. <<rep $g.trader>> managed to negotiate an excellent deal that would yield your company a lot of money should the right slave be sold.</p>
<p>
As a complimentary service, <<rep $g.madam>> allows your slaves to use <<their $g.madam>> slaves before going back.
Your slaves did not hesitate to use the high quality slaves in the carriage, and even the muscular and heavily pierced pony slave was available to use, which some your slavers also <<uadv $g.guard>> use.</p><p>
Your slavers spotted the caravan travelling across the desert. The first thing they see of course is the
muscular slave almost entirely naked pulling a carriage covered in drapes.
<<if $g.puller.isHasVagina()>>
Her breasts and vagina are both pierced and connected with a chain to a collar on her neck.
<<else>>
His cock and nipples are pierced with a thick ring, who are connected with a chain to his neck.
<</if>>
Hanging from the chain is some kind of round metal weight, that swings back and forth with every step that <<they $g.puller>> take.
</p>
<p>
Seeing such depravity your slavers is completely sure that the <<mistress $g.madam>> is the target they have been looking for. When your slavers approached, with a practiced bow <<rep $g.madam>> greets your slavers and proceed to use <<their $g.madam>> practiced sale pitch to offer <<their $g.madam>> slaves for your slavers perusal.</p>
<p>
Your slavers managed to focus however, and managed to ignore the <<girl $g.show>>s inside the cage.
They managed to negotiate a fair deal with the <<mistress $g.madam>>. With both parties happy with the deal, your slavers returned home with a new slave order while <<rep $g.madam>> continues <<their $g.madam>> journey whipping <<their $g.madam>> strong pony slave along the way.</p>
<p>
Unknown to you, your slavers actually <<uadv $g.guard>> managed to scrounge up some money to make use of the high quality slave the <<mistress $g.madam>> had to offer.</p><p>
Your slavers spotted the caravan travelling across the desert. The first thing they see of course is the
muscular slave almost entirely naked pulling a carriage covered in drapes.
<<if $g.puller.isHasVagina()>>
Her breasts and vagina are both pierced and connected with a chain to a collar on her neck.
<<else>>
His cock and nipples are pierced with a thick ring, who are connected with a chain to his neck.
<</if>>
Hanging from the chain is some kind of round metal weight, that swings back and forth with every step that <<they $g.puller>> take.
</p>
<p>
Seeing such depravity your slavers is completely sure that the <<mistress $g.madam>> is the target they have been looking for. When your slavers approached, with a practiced bow <<rep $g.madam>> greets your slavers and proceed to use <<their $g.madam>> practiced sale pitch to offer <<their $g.madam>> slaves for your slavers perusal.</p>
<p>
Your slavers managed to focus however, and managed to ignore the <<girl $g.show>>s inside the cage.
The try to negotiate a deal to sell your slaves to <<their $g.madam>> troupe, but the <<mistress $g.madam>> was less than impressed by both your slavers and the sample they bring. Ultimately, your slavers were unable to make a deal with <<them $g.madam>>, and was forced to come back empty-handed.
</p><p>
Your slavers spotted the caravan travelling across the desert. The first thing they see of course is the
muscular slave almost entirely naked pulling a carriage covered in drapes.
<<if $g.puller.isHasVagina()>>
Her breasts and vagina are both pierced and connected with a chain to a collar on her neck.
<<else>>
His cock and nipples are pierced with a thick ring, who are connected with a chain to his neck.
<</if>>
Hanging from the chain is some kind of round metal weight, that swings back and forth with every step that <<they $g.puller>> take.
</p>
<p>
Seeing such depravity your slavers is completely sure that the <<mistress $g.madam>> is the target they have been looking for. When your slavers approached, with a practiced bow <<rep $g.madam>> greets your slavers and proceed to use <<their $g.madam>> practiced sale pitch to offer <<their $g.madam>> slaves for your slavers perusal.</p>
<p>
Your slavers managed to focus however, and managed to ignore the <<girl $g.show>>s inside the cage.
The try to negotiate a deal to sell your slaves to <<their $g.madam>> troupe, but the <<mistress $g.madam>> was less than impressed by both your slavers and the sample they bring. Ultimately, your slavers were unable to make a deal with <<them $g.madam>>, and was forced to come back empty-handed.
</p>
<p>
Worse, your slavers at the end were unable to resist the full temptation of the <<mistress $g.madam>>'s slaves and decided to use the company's money to fund their degenerate acts of pleasure upon the slaves. At least its worth it to them?</p><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'Yourself', /* name */
[
setup.trait.per_smart,
setup.trait.per_deceitful,
setup.trait.skill_hypnotic,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_slow,
setup.trait.per_honest,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.You(),
],
{
intrigue: 1.5,
slaving: 1.5,
}
)>>
<<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Skill Learner', /* name */
[
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_loyal,
setup.trait.join_senior,
],
[
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_independent,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('loyalty_reward'),
],
{
intrigue: 1.5,
slaving: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'mutual_loyalty', /* key */
"Mutual Loyalty", /* Title */
"darko", /* Author */
[ 'desert', 'money', 'prep'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'slaver': _criteriaslaver,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'target': 'humandesert', },
[ /* costs */
],
'Quest_mutual_loyalty',
setup.qdiff.normal36, /* difficulty */
[ /* outcomes */
[
'Quest_mutual_loyaltyCrit',
[
setup.qc.RemoveTitleGlobal('loyalty_reward'),
setup.qc.RemoveTagGlobal('loyalty_reward_final'),
setup.qc.MoneyNormal(),
setup.qc.Slave('target', "was the child of a leader of a certain desert settlement", undefined),
setup.qc.BoonizeRandom('you', 10),
setup.qc.BoonizeRandom('slaver', 30), ],
], [
'Quest_mutual_loyaltyCrit',
[
setup.qc.RemoveTitleGlobal('loyalty_reward'),
setup.qc.RemoveTagGlobal('loyalty_reward_final'),
setup.qc.MoneyNormal(),
setup.qc.BoonizeRandom('you', 10),
setup.qc.BoonizeRandom('slaver', 30), ],
], [
'Quest_mutual_loyaltyFailure',
[
setup.qc.VarSet('loyalty_reward_cd', '1', 8), ],
], [
'Quest_mutual_loyaltyDisaster',
[
setup.qc.RemoveTagGlobal('loyalty_reward_final'),
setup.qc.VarSet('loyalty_reward_cd', '1', 5),
setup.qc.TraumatizeRandom('slaver', 15), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarNull('loyalty_reward_cd'),
setup.qres.HasUnitWithTagAndJob('loyalty_reward_final', setup.job.slaver), ],
[ /* expiration outcomes */
setup.qc.VarSet('loyalty_reward_cd', '1', 5), ],
)>><<set _unit = setup.getUnit({job: setup.job.slaver, title: 'loyalty_reward'})>>
<<if !_unit>>
<<dangertext 'This quest is no longer able to be completed.'>>
<<else>>
<p>
You have received a quest from one of the numerous desert settlements. Apparently two neighboring settlements are having a dispute and it's almost reaching breaking point. One of the settlements had offered your company great rewards, in exchange for kidnapping the <<daughter $g.target>> of the other chieftain. The <<daughter $g.target>> is going to be used as a bargaining chip, to end the dispute in their favor.
</p>
<p>
This kind of task is best done with a small team. A negotiator is good for ensuring that your company get paid well. Two slavers will then need to infiltrate the other settlement, and wait for an opportunity to kidnap the unsuspecting <<daughter $g.target>>. These slavers will need to employ their skills and creativity to execute the job without a hitch.
</p>
<p>
Hearing this opportunity, one of your slavers <<rep _unit>> is offering to go on the mission, and also asking you to go along as well. <<rep _unit>> has been with you for quite a while now, and by now you're already very familiar with the slaver — while <<they _unit>> can sometimes be a little bit <<uadjbad _unit>>, <<they _unit>> is also <<uadjgood _unit>>. It is quite odd though for <<them _unit>> to offer <<themself _unit>> for this mission, and even more asking you personally to accompany <<them _unit>>.
</p>
<p>
For all you know this could be a trap to your leadership. But knowing <<rep _unit>>, would you think so?
</p>
<</if>>/* Calculate which skill to get */
<<set _modifiers = $g.slaver.getSkillModifiers(true)>>
<<set _modlist = []>>
<<for _imodifier, _modifier range _modifiers>>
<<run _modlist.push([_imodifier, _modifier])>>
<</for>>
<<run _modlist.sort((a, b) => b[1] - a[1])>>
<<set _skill = _modlist[1][0]>>
<<if _skill == setup.skill.survival.key || _skill == setup.skill.arcane.key>>
<<set _skill = _modlist[2][0]>>
<</if>>
<<if _skill == setup.skill.survival.key || _skill == setup.skill.arcane.key>>
<<set _skill = _modlist[0][0]>>
<</if>>
<<set _skill = setup.skill[_skill]>>
<<if _skill == setup.skill.combat>>
<<set _trait = setup.trait.skill_ambidextrous>>
<<elseif _skill == setup.skill.brawn>>
<<set _trait = setup.trait.skill_intimidating>>
<<elseif _skill == setup.skill.survival>>
<<run alert('??? survival skill is not obtainable. Please report bug with your save')>>
<<elseif _skill == setup.skill.intrigue>>
<<set _trait = setup.trait.skill_connected>>
<<elseif _skill == setup.skill.slaving>>
<<set _trait = setup.trait.skill_hypnotic>>
<<elseif _skill == setup.skill.knowledge>>
<<set _trait = setup.trait.skill_creative>>
<<elseif _skill == setup.skill.social>>
<<set _trait = setup.trait.skill_entertain>>
<<elseif _skill == setup.skill.aid>>
<<set _trait = setup.trait.skill_alchemy>>
<<elseif _skill == setup.skill.arcane>>
<<run alert('??? arcane skill is not obtainable. Please report bug with your save')>>
<<elseif _skill == setup.skill.sex>>
<<set _trait = setup.trait.skill_animal>>
<<else>>
<<run alert('unknown skill')>>
<</if>>
<p>
The <<daughter $g.target>> of the chieftain is holed up deep inside the city, in the main tent of the encampment. Infiltrating it will not be easy.
</p>
<p>
First, you need to distract the guards watching over the main tent.
As you contemplate your options, your slaver <<rep $g.slaver>>
tapped on you the shoulders. <<uadv $g.slaver>>, <<they $g.slaver>> asked you to leave the problem to <<them $g.slaver>>. Putting your trust in the <<uadjgood $g.slaver>> slaver, you watch as <<they $g.slaver>>
<<if _trait == setup.trait.skill_ambidextrous>>
unsheathe a pair of daggers from their waist, and proceed to masterfully wield both one in each hand. In a flash, both guards are knocked out —- as the dust clears the shadow of <<rep $g.slaver>> stood behind them. You never noticed <<rep $g.slaver>>'s talent in dual wielding, was <<they $g.slaver>> always able to do this?
<<elseif _trait == setup.trait.skill_intimidating>>
walked menacingly towards the guards, instilling great fear upon the guards who fled in terror. You never noted <<rep $g.slaver>> as an intimidating slaver —- did <<they $g.slaver>> hid this skill all this time?
<<elseif _trait == setup.trait.skill_connected>>
walked calmly towards the guards, who are apparently already bought by the connected slaver. You never noticed <<rep $g.slaver>> being particularly savvy in making connections —- did it change somehow?
<<elseif _trait == setup.trait.skill_hypnotic>>
walked towards the guards, who immediately rose in suspicion. But the suspicion is short lived as you visibly see them relaxing in the hypnotic slaver's presence. It makes you wonder — was <<rep $g.slaver>> always this hypnotic?
<<elseif _trait == setup.trait.skill_creative>>
crafted a makeshift explosive from nearby materials and placed them just on the outskirts of the tent. From a distance, <<rep $g.slaver>> detonated the explosives, distracting the guards for a good while. The creativity makes you wonder if <<rep $g.slaver>> has always been this creative.
<<elseif _trait == setup.trait.skill_entertain>>
retreated to the oasis. Soon after you hear <<rep $g.slaver>>'s unmistakable voice, singing a tune. You never realized how beautiful <<rep $g.slaver>>'s voice is, or has it always been this good?
<<elseif _trait == setup.trait.skill_alchemy>>
concocted a sleeping potion which they then disguise as a booze. The guards suspected nothing as <<rep $g.slaver>> offered the tired guards some refreshments. Which makes you think — has <<rep $g.slaver>> always been this skilled in alchemy?
<<elseif _trait == setup.trait.skill_animal>>
roused the settlement's animals to create a commotion. The rampaging animals drew the attention of the guards. You never know <<rep $g.slaver>> had a way with animals — did <<they $g.slaver>> always have this skill?
<<else>>
<<run alert('unrecognized trait. please report bug to the devs')>>
<</if>>
</p>
<p>
With <<rep $g.slaver>> busy distracting the guard, you seize the opportunity to personally enter the main tent. You are lucky as you found the <<daughter $g.target>> apparently in a massive hangover from an overnight party. You easily subdued the dazed <<girl $g.target>> before tying <<them $g.target>> up and smuggling <<them $g.target>> out of the encampment.
</p>
<p>
Rendezvousing with <<rep $g.slaver>> later, you delivered the package to your client personally.
<<if $gOutcome == 'crit'>>
But it turns out that the client does not need the <<girl $g.target>> anymore —- you are still getting paid, but you can also take the <<girl $g.target>> as a bonus slave.
<<else>>
The man greedily took possession of the bound <<girl $g.target>>, and handed over your company the promised pay.
<</if>>
With the quest payment settled, you could not help but noticed that <<rep $g.slaver>> looks particularly cheerful after the quest. "How did you like it, boss?", asked the <<uadjper $g.slaver>> slaver, probably about <<their $g.slaver>> performance earlier. Apparently, <<they $g.slaver>> somehow learned (probably from the loose lips of your other slavers!) that you were behind <<their $g.slaver>> surprise vacation some time ago.
The vacation inspired the <<uadjgood $g.slaver>> <<urace $g.slaver>> to learn a new skill to be more useful to you and your company — the money <<they $g.slaver>> "borrowed" some time ago? It was for buying a manual of <<rep _trait>>. Ever since the slaver had been hard at work studying, and today the results speak for themselves. <<rep $g.slaver>> now fully mastered <<rep _trait>>.
</p>
<<run $g.slaver.addTrait(_trait)>>
<p>
This occupation of being a slaver is not one that usually bring warmth to your heart, but maybe exceptions do occur.
</p><p>
Unfortunately, you and your <<ufriend $unit.player $g.slaver>> never got the chance to do the job as the dispute was somehow already settled by the time you and your slavers arrived at the settlement.
You can hear <<rep $g.slaver>> cursed under their breath as you go back to your fort. You reassured <<them $g.slaver>> that another chance will surely appear, for whatever it is that <<they $g.slaver>> had obviously planned for you.
</p><p>
The <<daughter $g.target>> of the chieftain is holed up deep inside the city, in the main tent of the encampment. Infiltrating it will not be easy.
</p>
<p>
First, you need to distract the guards watching over the main tent.
As you contemplate your options, your slaver <<rep $g.slaver>>
tapped on you the shoulders. <<uadv $g.slaver>>, <<they $g.slaver>> asked you to leave the problem to <<them $g.slaver>>. But putting your trust in the <<uadjbad $g.slaver>> slaver turns out to be a mistake. Soon enough, the guards appear to have been alerted to your presence. You and your slavers had no choice but to escape the encampment.
</p>
<p>
<<rep $g.slaver>> looks particularly dejected after the turn of events. Whatever <<they $g.slaver>> were planning on doing seems to have failed, which impacted the slaver greatly.
</p><<run new setup.QuestTemplate(
'night_shift2', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert', 'transformation',
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'slave': setup.unitgroup.all,
'thief': setup.unitgroup.all,
'lord': setup.unitgroup.all, },
[ /* costs */
],
'Quest_night_shift2',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_night_shift2Crit',
[
setup.qc.MoneyCrit(), ],
], [
'Quest_night_shift2Crit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_night_shift2Failure',
[
setup.qc.TraumatizeRandom('defender', 12),
setup.qc.TraumatizeRandom('trapper', 10),
setup.qc.TraumatizeRandom('shadow', 9), ],
], [
'Quest_night_shift2Disaster',
[
setup.qc.MoneyNormal(),
setup.qc.MissingUnit('shadow'),
setup.qc.SlaveMarker('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 40],
],
[ /* restrictions to generate */
setup.qres.VarLte('nightshifter', 2),
setup.qres.NoQuest('night_shift'),
setup.qres.NoQuest('night_shift2'),
setup.qres.NoQuest('night_shift23'),
],
)>><p>
There has been a series of homebreaking in the eastern deserts in the last few weeks. The stories differ from household to household —- some say the thieves stole valuables like regular thieves, while some other say they only steal family heirloom or even the victim's virgin
<<daughter $g.slave>>. One thing in common though —- all the victim receives some sort of calling card days before the heist, be it delivered under the doors of their house or more romantically shot with an arrow through their windows.
</p>
<p>
One of the richer houses in the region has just received one such calling cards,
<<if $gQuest.getSeed() % 3 == 0>>
apparently dropped from the chimney of their mansion.
<<elseif $gQuest.getSeed() % 3 == 1>>
found inside their mailbox one day.
<<else>>
found sticking out from behind their clothes.
<</if>>
Fearing for their property and their <<daughter $g.slave>>, they are hiring for extra guards to secure their mansion in the coming days.
</p>
<p>
You could send a group of slavers to take up the job, if you wish. It should be a relatively safe affair, but with anything desert there is no such hard guarantee...
</p><p>
Simple problem requires simple solution: <<rep $g.defender>> will <<uadv $g.defender>> keep watch over the <<daughter $g.slave>> while <<rep $g.trapper>> and <<rep $g.shadow>> secured the house, blocking all possible entrances and reinforcing the weakpoints whenever they can. Once the preparations are complete, they waited for the attack...
</p>
<<if $gOutcome == 'crit'>>
<p>
A week later, in the dead of the night, <<rep $g.defender>> heard
a shuffling sound coming from the upper floors.
<<rep $g.shadow>> immediately got to work, <<uadv $g.shadow>> tracing the sound to its origin. There, stuck in the chimney is a <<urace $g.thief>> apparently stuck in a trap laid by <<rep $g.trapper>>.
Your slavers smirked at the thief's predicament, but all things considered it was well deserved for a fool foolish enough to infiltrate a heavily guarded mansion.
</p>
<p>
With the threat neutralized, the <<lord $g.lord>> of the mansion congratulated your slavers on a job well done and rewarded them greatly.
<<They $g.lord>> hurriedly shoo away your slavers afterwards —- no doubt in order to exact unspeakable punishments the wannabe thief for disturbing <<them $g.lord>> so.
</p>
<<elseif $gOutcome == 'success'>>
<p>
A week later, in the dead of the night, <<rep $g.defender>> heard
a shuffling sound coming from one of the upper bedrooms.
<<rep $g.defender>> together with <<rep $g.thief>> raced in to the room, apparently the room of the <<lord $g.lord>>'s <<daughter $g.slave>>, and saw <<rep $g.shadow>> and another hired mercenary engaged in a fight with a <<urace $g.thief>> thief.
With your slavers joining in, there was no hope that the chance is going to be able to escape, and <<they $g.thief>> is quickly subdued.
But as your slaver smugly gaze upon their handiwork, the mercenary boldly claimed to have done all the work to the <<lord $g.lord>> of the mansion.
As a result your slavers were only paid the usual pittance while the mercenary took the lion's share, as all the hirelings were quickly expelled from the house. No doubt it was so that the <<lord $g.lord>> can begin <<their $g.lord>> debauched plans for the unfortunate <<daughter $g.slave>> thief as punishment for <<their $g.thief>> nerve.
</p>
<</if>>
<p>
Another unfortunate household receive another calling card in the next few days, which makes <<rep $g.trapper>> wonders if <<they $g.trapper>> caught the right thief...
</p><p>
The usual occupation of your slavers is to enslave and raid, not to protect. As a result they are kinda clueless for these protection missions, and nobody ever noticed when the <<daughter $g.slave>> of the <<lord $g.lord>> of the mansion went missing one night. All that's left is an empty bed on the second floor of the mansion and the wind coming out from the open window.
</p>
<p>
Angered by their incompetence, your slavers and the rest of the hirelings were punished in unspeakable ways by the <<lord $g.lord>> of the mansion, which greatly traumatized them.
</p>
<p>
<<rep $g.shadow>> noticed that there was no signs of struggle in the room, and that the window were open outwards, not inwards...
</p><p>
The usual occupation of your slavers is to enslave and raid, not to protect. As a result they are kinda clueless for these protection missions. In fact, they performed the job so poorly that it took <<rep $g.defender>> and <<rep $g.trapper>> to realize that
<<rep $g.shadow>> had went missing.
<<if $g.shadow.getGender() == $g.slave.getGender()>>
<<rep $g.shadow>> was apparently mistaken for the <<daughter $g.slave>> of the <<lord $g.lord>>, and seems to have been kidnapped on <<their $g.slave>> behalf.
<<else>>
It is unclear how <<rep $g.shadow>> went missing, but perhaps seeing how tightly guarded the mansion is the thief must have given up on kidnapping the <<daughter $g.slave>> and made do with <<rep $g.shadow>> instead.
<</if>>
If there is a positive thing to come out from this, it's that your slavers actually successfully guarded the <<daughter $g.slave>> and paid for the services. But is the cost worth it?
</p>
<p>
You will never know what fate awaited <<rep $g.shadow>> in the near future, but perhaps you can see <<them $g.shadow>> again...
</p><<run new setup.QuestTemplate(
'night_shift', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert', 'transformation',
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'slave': setup.unitgroup.all, },
[ /* costs */
],
'Quest_night_shift',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_night_shiftCrit',
[
setup.qc.MoneyCrit(), ],
], [
'Quest_night_shiftCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_night_shiftFailure',
[
setup.qc.MoneyCustom(-1500), ],
], [
'Quest_night_shiftDisaster',
[
setup.qc.MoneyCustom(-3000),
setup.qc.SlaveMarker('slave'),
setup.qc.TraumatizeRandom('defender', 4),
setup.qc.TraumatizeRandom('trapper', 4),
setup.qc.TraumatizeRandom('shadow', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 40],
],
[ /* restrictions to generate */
setup.qres.VarLte('nightshifter', 2),
setup.qres.NoQuest('night_shift'),
setup.qres.NoQuest('night_shift2'),
setup.qres.NoQuest('night_shift23'),
],
)>><p>
There has been a series of homebreaking in the eastern deserts in the last few weeks. The stories differ from household to household —- some say the thieves stole valuables like regular thieves, while some other say they only steal family heirloom or even the victim's virgin
<<daughter $g.slave>>. One thing in common though —- all the victim receives some sort of calling card days before the heist, be it delivered under the doors of their house or more romantically shot with an arrow through their windows.
</p>
<p>
One of the richer houses in the region has just received one such calling cards,
<<if $gQuest.getSeed() % 3 == 0>>
apparently dropped from the chimney of their mansion.
<<elseif $gQuest.getSeed() % 3 == 1>>
found inside their mailbox one day.
<<else>>
found sticking out from behind their clothes.
<</if>>
Fearing for their property and their <<daughter $g.slave>>, they are hiring for extra guards to secure their mansion in the coming days.
</p>
<p>
You could send a group of slavers to take up the job, if you wish. It should be a relatively safe affair, but with anything desert there is no such hard guarantee...
</p><p>
Simple problem requires simple solution: <<rep $g.defender>> will <<uadv $g.defender>> keep watch over the <<daughter $g.slave>> while <<rep $g.trapper>> and <<rep $g.shadow>> secured the house, blocking all possible entrances and reinforcing the weakpoints whenever they can. Once the preparations are complete, they waited for the attack...
</p>
<<if $gOutcome == 'crit'>>
<p>
Few days later, during one of their night shifts, they hear a loud crashing sound from the second floor. <<rep $g.trapper>> rushed upstairs and saw a dark shade apparently kneeling in pain from their own entrance. With them all open, <<rep $g.defender>> easily captured the inexperienced thief in a painful-looking headlock. The crash woke up all the residents of the mansions, including the head of the mansion. Seeing the thief securely subdued by your slavers, the head of the mansion lavished praises upon your slavers before sending them back to your fort with plenty of money in a hurry —- no doubt in order to punish the wannabe thief in unspeakable ways...
</p>
<p>
Your slavers wander whether this the same thief with the rumored one, or just a plain coincidence that the thief decided to rob this very mansion. Either way, they got what they deserve, trying to rob a mansion on high-alert.
</p>
<<else>>
<p>
After a couple of days, your slavers were woken up in the middle of the night by a loud thud. Led by <<rep $g.trapper>>, your slavers rushed upstairs and saw one of the other mercenaries securing what seems to be a wannabe-thief to the ground. The thud wakes up all the residents of the mansion —- seeing the thief captured by the mercenary, the head of the mansion lavished praises upon the mercenary. Your slavers services were deemed no longer necessary, and were given the promised pay in a hurryyour slavers before sending them back to your fort with plenty of money in a hurry —- no doubt in order to punish the wannabe thief in unspeakable ways...
</p>
<</if>>
<p>
Another unfortunate household receive another calling card in the next few days.
</p><p>
Your slavers were somewhat clueless in this kind of mission where they have to protect instead of steal. None of your slavers, especially not <<rep $g.shadow>>, managed to noticed when a thief broke in during the dead of the night and steal one of the paintings off the second floor.
The head of the mansion were furious with the mercenaries they hire, and ordered all of them to reimburse the losses.
Your slavers were not given much choice in the matter and had to contribute some payment for the damages.
</p><p>
Your slavers were somewhat clueless in this kind of mission where they have to protect instead of steal. None of your slavers, especially not <<rep $g.shadow>>, managed to noticed when a thief broke in during the dead of the night and steal one of the paintings off the second floor. Worse, the painting was in the very same room that they were supposed to guard. With no excuses to be had the slavers were forced to pay an exorbitant amount for the damages.
</p>
<p>
You have your suspicion that your slavers <<uadv $g.shadow>> slept through the night they were supposed to watch over. You remind yourself to deliver a strongly-put speech with them later.
</p><<run new setup.UnitGroup(
'quest_night_shift231',
"shifter2",
[
[setup.unitpool.race_humankingdom_male, 0.16339869281045746],
[setup.unitpool.race_humanvale_male, 0.16339869281045746],
[setup.unitpool.race_humandesert_male, 0.040849673202614366],
[setup.unitpool.race_humansea_male, 0.008169934640522875],
[setup.unitpool.race_neko_male, 0.040849673202614366],
[setup.unitpool.race_werewolf_male, 0.01633986928104575],
[setup.unitpool.race_elf_male, 0.040849673202614366],
[setup.unitpool.race_orc_male, 0.02450980392156862],
[setup.unitpool.race_dragonkin_male, 0.0008169934640522874],
[setup.unitpool.race_demon_male, 0.0008169934640522874],
[setup.unitpool.race_humankingdom_female, 0.16339869281045746],
[setup.unitpool.race_humanvale_female, 0.16339869281045746],
[setup.unitpool.race_humandesert_female, 0.040849673202614366],
[setup.unitpool.race_humansea_female, 0.008169934640522875],
[setup.unitpool.race_neko_female, 0.040849673202614366],
[setup.unitpool.race_werewolf_female, 0.01633986928104575],
[setup.unitpool.race_elf_female, 0.040849673202614366],
[setup.unitpool.race_orc_female, 0.02450980392156862],
[setup.unitpool.race_dragonkin_female, 0.0008169934640522874],
[setup.unitpool.race_demon_female, 0.0008169934640522874], ],
1, /* reuse chance */
[
setup.qc.Trait('unit', setup.trait.training_mindbreak), ],
)>>
<<run new setup.QuestTemplate(
'night_shift23', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert',
'transformation',
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'thief': setup.unitgroup.all,
'lord': setup.unitgroup.all,
'slave': setup.unitgroup.desert_all,
'shifter2': setup.unitgroup.quest_night_shift231, },
[ /* costs */
],
'Quest_night_shift23',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_night_shift23Crit',
[
setup.qc.VarAdd('nightshifter', 2, -1),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.MoneyCrit(), ],
], [
'Quest_night_shift23Crit',
[
setup.qc.VarAdd('nightshifter', 1, -1),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.SlaveMarker('thief'),
setup.qc.Bodyswap('thief', 'slave'),
setup.qc.Slave('slave', "was a victim of the serial bodyswapper", undefined), ],
], [
'Quest_night_shift23Failure',
[
setup.qc.VarRemove('nightshifter'),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.TraumatizeRandom('defender', 10),
setup.qc.TraumatizeRandom('trapper', 10),
setup.qc.TraumatizeRandom('shadow', 10), ],
], [
'Quest_night_shift23Disaster',
[
setup.qc.SlaveMarker('slave'),
setup.qc.SlaverMarker('shifter2'),
setup.qc.Corrupt('shifter2'),
setup.qc.Corrupt('shifter2'),
setup.qc.VarAdd('nightshifter', 3, -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('nightshifter_bodyswap', 'defender'),
setup.qc.Bodyswap('defender', 'shifter2'),
setup.qc.IfThenElse(
setup.qres.VarEqual('nightshifter_bodyswap', 'shadow'),
setup.qc.Bodyswap('shadow', 'shifter2'),
setup.qc.Bodyswap('trapper', 'shifter2'))), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 20],
],
[ /* restrictions to generate */
setup.qres.VarLte('nightshifter', 2),
setup.qres.NoQuest('night_shift'),
setup.qres.NoQuest('night_shift2'),
setup.qres.NoQuest('night_shift23'),
],
)>><p>
There has been a series of homebreaking in the eastern deserts in the last few weeks. The stories differ from household to household —- some say the thieves stole valuables like regular thieves, while some other say they only steal family heirloom or even the victim's virgin
<<daughter $g.slave>>. One thing in common though —- all the victim receives some sort of calling card days before the heist, be it delivered under the doors of their house or more romantically shot with an arrow through their windows.
</p>
<p>
One of the richer houses in the region has just received one such calling cards,
<<if $gQuest.getSeed() % 3 == 0>>
apparently dropped from the chimney of their mansion.
<<elseif $gQuest.getSeed() % 3 == 1>>
found inside their mailbox one day.
<<else>>
found sticking out from behind their clothes.
<</if>>
Fearing for their property and their <<daughter $g.slave>>, they are hiring for extra guards to secure their mansion in the coming days.
</p>
<p>
You could send a group of slavers to take up the job, if you wish. It should be a relatively safe affair, but with anything desert there is no such hard guarantee...
</p><p>
Simple problem requires simple solution: <<rep $g.defender>> will <<uadv $g.defender>> keep watch over the <<daughter $g.slave>> while <<rep $g.trapper>> and <<rep $g.shadow>> secured the house, blocking all possible entrances and reinforcing the weakpoints whenever they can. Once the preparations are complete, they waited for the attack...
</p>
<<set _ns = $varstore.get('nightshifter') || 0>>
<<if $gOutcome == 'crit'>>
<<set _ns = _ns + 2>>
<<else>>
<<set _ns = _ns + 1>>
<</if>>
<<if _ns >= 3>>
<p>
Your slavers waited and waited, but nothing ever happened. In sudden realization, <<rep $g.shadow>> suggested to remain alert, as this remind <<them $g.shadow>> of the previous quests where the <<daughter $g.slave>> will somehow transform within a night.
Their vigilance was rewarded as after two weeks, during one of the nights <<rep $g.shadow>> spotted a faint purple glow from the second floor bedroom —- the one where the <<lord $g.lord>>'s <<daughter $g.slave>> is supposed to rest.
</p>
<p>
Your slavers hurriedly rush to the room and met with the most debauched of scenes as the <<daughter $g.slave>> physical body is being transformed before their eyes.
<<ubodyswap $g.slave $g.thief>>
</p>
<p>
But something is off with the transformation —- until <<rep $g.shadow>> perceptively recalled one of the earlier quests they have done. Apparently, the poor <<girl $g.slave>> transformed into the victim of the first nightshifting!
This can only mean that this is not actually a transformation —- rather, it is a bodyswapping ritual somehow performed remotely!
They are now convinced that this serial bodyswapping all came from the same perpetrator —- somewhere out there in the desert.
</p>
<p>
Still, they were powerless to stop the transformation and were not able to do nothing but enjoy the magical transformation of the poor
<<daughter $g.slave>>. But your slavers by now should have enough information to track down the perpetrator, and end the serial bodyswapping for good.
</p>
<<else>>
<p>
Your slavers waited and waited, but nothing ever happened. After two weeks of nothing, they let their guard down. It was then that one day, the <<daughter $g.slave>> of the mansion woke up completely transformed from head to toe, a far cry from the <<if $g.slave.isFemale()>>pretty young lady<<else>>dashing young man<</if>> <<they $g.slave>> once were.
</p>
<<if $varstore.get('nightshifter')>>
<p>
Your slavers realized this is very similar to what happened last time in a similar quest. They are starting to suspect that this is done by the same perpetrator —- a serial transformer that transforms their victim at night. Perhaps they can remember this fact some other time and remain vigilant throughout the night.
The deed has been done for now, however. They <<lord $g.lord>> of the mansion is surely going to be displeased at this turn of events...
</p>
<<else>>
<p>
Your slavers were completely clueless as how this strange transformation could have happened over night.
Still, there were few clues they could gather from the scenes that might help with future events, but for now, their mission is a failure.
</p>
<</if>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Fortunately for you, the <<lord $g.lord>> of the mansion is a <<man $g.lord>> with a big heart. <<They $g.lord>> do not care about the appearance of their <<daughter $g.slave>>, as long as <<they $g.slave>> <<if $g.slave.getGender() != $g.shifter2.getGender()>>(or <<they $g.shifter2>> now?) <</if>> remains with <<them $g.lord>>. Your slavers were paid for their services, even though they didn't actually do anything. But <<rep $g.defender>> wasn't about to complain about free money!
</p>
<<else>>
<p>
As expected, the <<lord $g.lord>> were completely upset by what <<they $g.lord>> perceive as a big loss of <<their $g.lord>> investment. <<They $g.lord>> kicked your slavers out of the mansion together with the former (apparently adopted) <<daughter $g.slave>> of the <<lord $g.lord>>.
With nowhere to go, your slavers offered the <<daughter $g.slave>> to come with them, which <<they $g.lord>> agree to not knowing what kind of fate awaits <<them $g.slave>> in your fort...
</p>
<</if>><p>
Your slavers are raiders and slavers, not protectors of the innocent. They have difficulty trying to understand what they are supposed to do in this kind of mission where their goal is to protect, not destroy.
</p>
<p>
Ultimately, during one of their guard shifts, somehow the <<daughter $g.slave>> of the mansion got fully transformed overnight —- the once
<<if $g.slave.isFemale()>>pretty young girl<<else>>
dashing young man<</if>> is now but a shadow of <<their $g.slave>> former self.
Your slavers were found the same day completely dazed in their guard stations —- apparently lightly affected by the same attack that transformed the poor <<daughter $g.slave>>.
Fortunately for you, their physical appearances appear intact. But they have lost all memories regarding the perpetrator and will need a few weeks to recover from the mental trauma.
</p>/* Choose the bodyswap target here */
<<if Math.random() < 0.333>>
<<run $varstore.set('nightshifter_bodyswap', 'defender', 1)>>
<<set _u = $g.defender>>
<<elseif Math.random() < 0.5>>
<<run $varstore.set('nightshifter_bodyswap', 'shadow', 1)>>
<<set _u = $g.shadow>>
<<else>>
<<run $varstore.set('nightshifter_bodyswap', 'trapper', 1)>>
<<set _u = $g.trapper>>
<</if>>
<<run $varstore.set('nightshifter_bodyswapped', _u.key, -1)>>
<p>
Your slavers stood watch as best as they can, but nothing happened within the first two weeks. They grow complacent —- and it is during this very time that one night,
<<rep _u>> accidentally stepped into the center of an ominous-looking purple magical circle appearing out of nowhere.
Your other slavers watched helplessly as
<<rep _u>>'s <<ubody _u>> was assaulted by the spell and
transformed before their eyes.
<<ubodyswap _u $g.shifter2>>
</p>
<p>
Fortunately, <<rep _u>> is surprisingly not mentally affected by the ordeal —- in fact, being the direct target of the
transformation spell gave
<<them _u>> the exact location where the spell was being cast from. <<rep _u>> licked their (new) lips as
<<they _u>> plan their revenge once <<they _u>> get <<their _u>> new
<<uarms _u>> around the perpetrator.
Perhaps <<their _u>> own <<ubody _u>> is still there to reclaim back.
</p><<run new setup.UnitGroup(
'quest_orcish_bait1',
'Orc Raider',
[
[setup.unitpool.race_orc_male, 0.5],
[setup.unitpool.race_orc_female, 0.5], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_raider), ],
)>>
<<set _criteriacapturer = new setup.UnitCriteria(
null, /* key */
'Orc Capturer', /* name */
[
setup.trait.race_orc,
setup.trait.race_demon,
setup.trait.muscle_verystrong,
setup.trait.per_lunatic,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.magic_fire,
setup.trait.skill_hypnotic,
],
[
setup.trait.race_humankingdom,
setup.trait.race_humanvale,
setup.trait.race_humansea,
setup.trait.muscle_weak,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.magic_water,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
slaving: 2,
}
)>>
<<run new setup.QuestTemplate(
'orcish_bait', /* key */
'Orcish Bait', /* Title */
'darko', /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'support': setup.qu.defendersupport,
'capturer': _criteriacapturer, },
{ /* actors */
'orc': setup.unitgroup.quest_orcish_bait1, },
[ /* costs */
],
'Quest_orcish_bait',
setup.qdiff.normal38, /* difficulty */
[ /* outcomes */
[
'Quest_orcish_baitCrit',
[
setup.qc.MoneyCrit(0.85),
setup.qc.Slave('orc', 'was part of an orc raiding party'), ],
], [
'Quest_orcish_baitSuccess',
[
setup.qc.MoneyNormal(0.8),
setup.qc.Slave('orc', 'was part of an orc raiding party'), ],
], [
'Quest_orcish_baitFailure',
[
setup.qc.Injury('defender', 1),
setup.qc.Injury('support', 2), ],
], [
'Quest_orcish_baitDisaster',
[
setup.qc.Injury('defender', 6),
setup.qc.Injury('capturer', 6),
setup.qc.Injury('support', 3), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The orcs living on the eastern desert are known to be strong but dumb. This property makes them the ideal slave for some nobles, and demand for orc slaves are always steady in the market.
If one wants to obtain such a slave, they can always try to raid an orc encampment. But raiding the encampment is too risky —- your slavers would face the blunt of the orc's combined strength.
</p>
<p>
A better idea is to wait for the orcs to raid an encampment, and capture of them during the raid.
As a bonus, if you successfully repelled the attack, you might even earn the gratitude of the settlement. You have heard about an imminent attack on one of such settlements, and you can send your slavers on this mission.
</p><p>
Led by <<rep $g.defender>>, your slavers
<<uadv $g.defender>>
stood in defense with the encampment, and together they managed to completely repel the invasion. Your slavers were showered with gifts from the settlement for saving them from being orcish playthings, which is honestly a fate worse than death. Your slavers returned home victorious, with both money and a new slave picked up from one of the knocked out orc warriors.
</p><p>
Your slavers waited in the encampment for the fateful day where they saw the horde of orcs attacking the camp. Seeing no hope of actually defeating all of them, your slavers got to work and
managed to isolate one of the orc raiders. <<rep $g.defender>> swiftly knocked the orc out for <<rep $g.capturer>> to <<uadv $g.capturer>> tie. Orc slaves are known to be rowdy, so <<rep $g.capturer>> made extra sure to insert various toys into the orc's orifices, to keep <<them $g.orc>> busy throughout the journey. Having their target in tow, your slavers went back home with their new slave leaving the encampment to their fate.</p><p>
Your slavers waited in the encampment for the fateful day where they saw the horde of orcs attacking the camp. Seeing no hope of actually defeating all of them, your slavers got to work and attempted to isolate one of the orc raiders. But the fight dragged on and soon your slavers were caught in the middle of the skirmish. After getting injured, your slavers decided that further attempts would be foolish and retreated from the fight, with only injuries to show.
</p><p>
Your slavers were sloppy in their work and managed to get themselves stuck in the middle of the fight. <<rep $g.defender>> were severely injured in a fight with a monstrously burly of an orc and your slavers had to risk their lives to save <<rep $g.defender>> and retreated back home.
</p><<run new setup.UnitGroup(
'quest_orcish_festival1',
'Residents of the Western Forests: All gender',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.training_obedience_basic),
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape), ],
)>>
<<run new setup.QuestTemplate(
'orcish_festival', /* key */
'Orcish Festival', /* Title */
'darko', /* Author */
[ 'desert', 'favor',
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'whore': setup.qu.bimbo,
'guard': setup.qu.guard,
'slave': setup.qu.slavegeneric, },
{ /* actors */
'gift': setup.unitgroup.quest_orcish_festival1, },
[ /* costs */
],
'Quest_orcish_festival',
setup.qdiff.easier39, /* difficulty */
[ /* outcomes */
[
'Quest_orcish_festivalCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('orc', 100), ],
], [
'Quest_orcish_festivalSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('orc', 100),
setup.qc.Injury('slave', 1), ],
], [
'Quest_orcish_festivalFailure',
[
setup.qc.Favor('orc', 100),
setup.qc.Injury('slave', 3), ],
], [
'Quest_orcish_festivalDisaster',
[
setup.qc.Injury('slave', 5), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
setup.qres.HasSlave(), ], /* restrictions to generate */
)>><p>
The orc tribes of the eastern deserts believe in honoring their ancestors through nights of debauchery. During these nights, slaves in the slave dumps are made available for all orcs to use, and debauchery competitions are often held. Winners of these competitions receive the personal blessings of the leader of orcs, King Arthush the Mighty.
</p>
<p>
Outsiders are also welcome to partake in these sacred festivals. If you want to participate, you would need to supply a slave, and a performer that can debauch themselves. You'd also want to have a guard just in case, and a slave trainer to keep your slave in check. While the monetary reward is mediocre, earning the orc tribe's favor might be useful someday.
</p><p>
The festival was a merry ground with all sort of fucking be it regular fucking, throat fucking or even tit fucking in some cases all done in public by a large number of participants. While most are orcs, your slavers noticed the occasional elf and even a werewolf amongst both the fucker and the fucked. In front of such a hot scene, your slavers can't help but get aroused themselves, but they still remain focused at the task at hand.
</p>
<p>
<<rep $g.whore>> <<uadv $g.whore>> held such a performance by using, abusing, and at some point even being abused by <<rep $g.slave>> that all the orcs in the encampment were enraptured (with most blowing their load in the throats of whatever nearby slave available).
At the end of the debauched festival, the king of orcs himself congratulated <<rep $g.trainer>>, who he must thought the owner of both <<rep $g.slave>> and also <<rep $g.whore>>. Later, <<rep $g.whore>> felt strange glares from around the encampment, and to avoid danger your slavers exited the encampment later that night safely back to your fort.
</p><p>
The festival was a merry ground with all sort of fucking be it regular fucking, throat fucking or even tit fucking in some cases all done in public by a large number of participants. While most are orcs, your slavers noticed the occasional elf and even a werewolf amongst both the fucker and the fucked. In front of such a hot scene, your slavers can't help but get aroused themselves, but they still remain focused at the task at hand.
</p>
<p>
Under <<rep $g.trainer>>'s watchful gaze, <<rep $g.slave>> and even at some point <<rep $g.whore>> <<uadv $g.whore>> debauched themselves sufficiently to earn the orc's attention.
At the end of the debauched festival, your slavers have managed to earn the respect of some of the orcs, who even proposed for your slavers to try some of their freshly trained slaves. After few nights of debauchery, your slavers felt they have achieved what they set to do here and collared back <<rep $g.slave>> home, who will need to recover from the rough use.
</p><p>
The festival was a merry ground with all sort of fucking be it regular fucking, throat fucking or even tit fucking in some cases all done in public by a large number of participants. While most are orcs, your slavers noticed the occasional elf and even a werewolf amongst both the fucker and the fucked. In front of such a hot scene, your slavers can't help but get aroused themselves, but they still remain focused at the task at hand.
</p>
<p>
Under <<rep $g.trainer>>'s watchful gaze, <<rep $g.slave>> tried <<their $g.slave>> best to debauch <<themself $g.slave>>. But it was obviously not a heartfelt performance, and soon enough <<rep $g.slave>> got injured from rough use, or at least managed to convince your slavers so. Your slavers had to return earlier than scheduled, but at least the orcs still seem pleased at the efforts your company is making.</p><p>
The festival was a merry ground with all sort of fucking be it regular fucking, throat fucking or even tit fucking in some cases all done in public by a large number of participants. While most are orcs, your slavers noticed the occasional elf and even a werewolf amongst both the fucker and the fucked. In front of such a hot scene, your slavers can't help but get aroused themselves, but they still remain focused at the task at hand.
</p>
<p>
Unfortunately, <<rep $g.trainer>> were not at all able to withstand the heavy abuse of the festival and soon went into a daze. The slave being useless, your slavers had no choice but to quit the festival and head home defeated.</p><<run new setup.QuestTemplate(
'raid_desert_settlement', /* key */
'Raid: Desert Settlement', /* Title */
'darko', /* Author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'villager': setup.unitgroup.humandesert, },
[ /* costs */
],
'Quest_raid_desert_settlement',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_raid_desert_settlementCrit',
[
setup.qc.MoneyCustom(4000),
setup.qc.Ire('humandesert', 2),
setup.qc.Slave('villager', 'was a humble villager in an eastern settlement'), ],
], [
'Quest_raid_desert_settlementSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.MoneyCustom(500),
setup.qc.Ire('humandesert', 1),
],
], [
'Quest_raid_desert_settlementFailure',
[
setup.qc.Injury('raider1', 1),
setup.qc.Injury('raider2', 1), ],
], [
'Quest_raid_desert_settlementDisaster',
[
setup.qc.Injury('raider1', 3),
setup.qc.Injury('raider2', 3), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Most of the settlements in the eastern desert does not settle in one place permanently. Once they have used up resources near their settlemen, they choose a different location to settle to. This makes their settlements an easy target for raiders, since they are unable to erect permanent defenses to deter raiders. You can send a group of slavers to attempt to raid one of these settlements, if you are in need of money.</p><p>
Led by <<rep $g.raider1>>, your slavers
<<uadv $g.raider1>>
raided the settlement and was met with little resistance. They gather up all the loot from the huts and also bringing the chieftain's <<daughter $g.villager>> home as a trophy.</p><p>
Led by <<rep $g.raider1>>, your slavers
<<uadv $g.raider1>>
raided the settlement and was met with little resistance. They gather up all the loot from the huts including a particularly pricey piece of rug.</p><p>
Unfortunately, the settlement has already moved to a different location by the time your slavers arrived. They were unable to track where the new settlement is located.</p><p>
Your slavers attempted to raid the settlement but they were instead met with fierce resistance. In their attempt to retreat, <<rep $g.raider1>> was injured.
</p><<run new setup.QuestTemplate(
'raid_the_mist', /* key */
"Raid the Mist", /* Title */
"darko", /* Author */
[ 'desert',
'veteran',
'unit',
'danger'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'gatekeeper': setup.qu.corruptor,
'warrior1': setup.qu.dark_warrior,
'warrior2': setup.qu.light_warrior, },
{ /* actors */
'slave': setup.unitgroup.demon,
'slaver': setup.unitgroup.demon, },
[ /* costs */
],
'Quest_raid_the_mist',
setup.qdiff.extreme69, /* difficulty */
[ /* outcomes */
[
'Quest_raid_the_mistCrit',
[
setup.qc.Slave('slave', "was a demon your slavers somehow abducted from beyond the mist", false),
setup.qc.Slaver('slaver', "was a demon from beyond the mist who took interest in your slavers and followed them out", false), ],
], [
'Quest_raid_the_mistSuccess',
[
setup.qc.Slave('slave', "was a demon your slavers somehow abducted from beyond the mist", false),
setup.qc.Corrupt('warrior1'), ],
], [
'Quest_raid_the_mistFailure',
[
setup.qc.Injury('warrior1', 3),
setup.qc.Injury('warrior2', 2),
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'), ],
], [
'Quest_raid_the_mistDisaster',
[
setup.qc.MissingUnit('warrior1'),
setup.qc.MissingUnit('warrior2'), ],
], ],
[
[setup.questpool.desert, 50],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall), ], /* restrictions to generate */
)>><p>
The mist is thick in some places in the desert. With a powerful dark mage, it is possible to open the rift apart and let people pass through into beyond the mist. But why would someone ever risk doing that? The stuffs the demons would do to whoever trapped there is beyond degrading, still, there is the potential of acquiring some valuable demonic slave if one were crazy enough to attempt the venture... Although be prepared for heavy losses.
</p><p>
Once your slavers arrived at the area, <<rep $g.warrior1>> and <<rep $g.warrior2>>
<<uadv $g.warrior1>>
put their trusts in <<rep $g.gatekeeper>>, as <<rep $g.gatekeeper>> opens the gate to beyond the mist and must keep it open until your slavers finished their duties. Once inside, <<rep $g.warrior1>> and <<rep $g.warrior2>> kept their focuses despite the numerous distractions presented to them be it voluptuous nightmarish boob appearing from nowhere or a literal dick fountain. Ultimately they found a suitable looking demon in the middle of using a slave that they managed to somehow subdued and carry back into the gate.</p>
<p>
Once back at the desert with the new potential demonic slave, your slavers were completely caught by surprise as they were greeted by <<rep $g.slaver>>, who apparently followed <<rep $g.warrior1>> and <<rep $g.warrior2>> out of the gate. Your slavers prepared to fight but instead <<rep $g.slaver>> claimed to offer no harm and only wished to join your company to satisfy <<their $g.slaver>> curiosity.</p><p>
Once your slavers arrived at the area, <<rep $g.warrior1>> and <<rep $g.warrior2>>
<<uadv $g.warrior1>>
put their trusts in <<rep $g.gatekeeper>>, as <<rep $g.gatekeeper>> opens the gate to beyond the mist and must keep it open until your slavers finished their duties. Once inside, <<rep $g.warrior1>> and <<rep $g.warrior2>> managed to mostly keep their focuses despite the numerous distractions presented to them be it voluptuous nightmarish boob appearing from nowhere or a literal dick fountain. Ultimately they found a suitable looking demon that they somehow subdued, although not with a cost as <<rep $g.warrior1>> were caught in a corruption spell. Still, your slavers managed to carry back their prize into the gate right before <<rep $g.gatekeeper>>'s spell fizzled out and the gate closes.</p><p>
Once your slavers arrived at the area, <<rep $g.warrior1>> and <<rep $g.warrior2>>
<<uadv $g.warrior1>>
put their trusts in <<rep $g.gatekeeper>>, as <<rep $g.gatekeeper>> opens the gate to beyond the mist and must keep it open until your slavers finished their duties. But they were not ready for the sights they encounter inside —- the numerous slaves with clearly unnaturally large assets being ridden like packmules by a group of demons in an apparently called "milk-race". Dumbstruck, your slavers failed to notice the corruption spell cast on them by a nearby demon —- regaining their focus, your slavers decided escape is the only possible option and managed to exit back to the gate sustaining heavy injuries.</p><p>
Once your slavers arrived at the area, <<rep $g.warrior1>> and <<rep $g.warrior2>>
<<uadv $g.warrior1>>
put their trusts in <<rep $g.gatekeeper>>, as <<rep $g.gatekeeper>> opens the gate to beyond the mist and must keep it open until your slavers finished their duties. But the trust were misplaced as <<rep $g.gatekeeper>> were immediately assaulted by demons coming out of the same gate <<they $g.gatekeeper>> opened, breaking <<their $g.gatekeeper>>'s concentration and closing the gate prematurely. <<rep $g.warrior1>> and <<rep $g.warrior2>> were trapped inside the mist, with no way out.</p><<run new setup.UnitGroup(
'quest_rescuefor_profit1',
'mindbroken slave',
[
[setup.unitpool.race_humandesert_male, 0.5],
[setup.unitpool.race_humandesert_female, 0.5], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak), ],
)>>
<<run new setup.QuestTemplate(
'rescuefor_profit', /* key */
'Rescue for Profit', /* Title */
'darko', /* Author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'thief': setup.qu.thief, },
{ /* actors */
'slave': setup.unitgroup.quest_rescuefor_profit1, },
[ /* costs */
],
'Quest_rescuefor_profit',
setup.qdiff.hard43, /* difficulty */
[ /* outcomes */
[
'Quest_rescuefor_profitCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humandesert', 25),
setup.qc.Ire('orc', 1),
],
], [
'Quest_rescuefor_profitSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humandesert', 25),
setup.qc.Ire('orc', 1),
],
], [
'Quest_rescuefor_profitFailure',
[
setup.qc.Slave('slave', 'was a villager in the eastern desert captured by an orc encampment and used beyond repair'),
setup.qc.MoneyNormal(-0.5), ],
], [
'Quest_rescuefor_profitDisaster',
[
setup.qc.Corrupt('infiltrator1'),
setup.qc.Corrupt('infiltrator2'),
setup.qc.Corrupt('infiltrator1'),
setup.qc.Corrupt('infiltrator2'),
setup.qc.Corrupt('infiltrator1'),
setup.qc.Corrupt('infiltrator2'),
], ],
],
[
[setup.questpool.desert, 25],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
One of the villages on the eastern settlement is offering bounty for the safe return of their leader's <<daughter $g.slave>>.
While saving others is basically the opposite of your company's work, the bounty is offering a lucrative amount of money. In addition, occasional honest work such as this is always a good opportunity to gain closer relationship with these settlements. If you are willing, you can try to send a group of slavers to rescue the <<daughter $g.slave>>.</p><p>
Led by <<rep $g.infiltrator1>>,
your slavers <<uadv $g.infiltrator1>>
sneaked into the orc's encampment succesfully. The place is covered in a permanent smell of alcohol and cum, as there are cumstains and spilled alcohol everywhere. Most of the orcs are already asleep from the debauchery in the previous night —- some still have their dicks up some slave's ass. Your slavers get to work and scour the camp looking for <<rep $g.slave>>.
</p>
<p>
Your slavers ultimately found <<rep $g.slave>> caged at the back of the encampment. It seems that they are lucky to have arrived so soon, as <<rep $g.slave>> seems to still appear unmolested, at least as they eye can see. <<rep $g.thief>> hurriedly picked the cage's lock and your slavers together with <<rep $g.slave>> escaped the place.</p>
<p>
Normally, this is where your slavers would present the new slave collar to their prospective slave, but this is a rescue mission for once, and they returned <<rep $g.slave>> back to <<their $g.slave>> village. The grateful village elder showered your slavers with gift, as well as promise to tell their neighbors about the good deeds of your company.</p><p>
Led by <<rep $g.infiltrator1>>,
your slavers <<uadv $g.infiltrator1>>
sneaked into the orc's encampment succesfully. The place is covered in a permanent smell of alcohol and cum, as there are cumstains and spilled alcohol everywhere. Most of the orcs are already asleep from the debauchery in the previous night —- some still have their dicks up some slave's ass. Your slavers get to work and scour the camp looking for <<rep $g.slave>>.
</p>
<p>
Your slavers ultimately found <<rep $g.slave>> chained to a post at the end of the encampment. It seems that the camp leader kept <<rep $g.slave>> as their own personal slave, so compared to the utterly broken slaves scattered throughout the encampment, <<rep $g.slave>> is still moderately sane. Your slaver quickly unchained <<rep $g.slave>>, and to prevent <<them $g.slave>> from making noises, aptly gagged the slave and smuggle <<them $g.slave>> out.
</p>
<p>
Normally, this is where your slavers would present the new slave collar to their prospective slave, but this is a rescue mission for once, and they returned <<rep $g.slave>> back to <<their $g.slave>> village. The village elder were shocked at the state of <<rep $g.slave>>, who is almost completely broken. Still, promise is a promise and he gave your slavers the promised rewards.
</p><p>Your slavers sneaked into the orc's encampment succesfully. The place is covered in a permanent smell of alcohol and cum, as there are cumstains and spilled alcohol everywhere. Most of the orcs are already asleep from the debauchery in the previous night —- some still have their dicks up some slave's ass. Your slavers get to work and scour the camp looking for <<rep $g.slave>>.
</p>
<p>
Your slavers ultimately found <<rep $g.slave>> at one of the "slave dumps" —- a lovingly named place where the orcs store slaves after heavy use to recover. With effort, they managed to pull <<rep $g.slave>> out of the pile. The cum-soaked <<rep $g.slave>> appears to have been completely broken —- <<their $g.slave>> gaze never fixed. Still, a job is a job and your slavers smuggle the slave out of the encampment.</p>
<p>
Normally, this is where your slavers would present the new slave collar to their prospective slave, but this is a rescue mission for once, and they returned <<rep $g.slave>> back to <<their $g.slave>> village. But the village elder, in what seems to be a denial, refused to acknowledge <<rep $g.slave>> as his <<daughter $g.slave>>. After a long argument your slavers were kicked out of the settlement together with <<rep $g.slave>>. Your slavers gave up getting the reward and decided that <<rep $g.slave>> might make a sufficient reward instead.</p><p>Your slavers were captured when attempting to sneak into the orc's camp.
A massive escape ensued, and while <<rep $g.infiltrator1>> and <<rep $g.thief>>
were lucky to escape, <<rep $g.infiltrator2>> were not as lucky.
The orcs descend upon <<rep $g.infiltrator2>> and grabbed <<them $g.infiltrator2>>
by the legs, before throwing and caging <<them $g.infiltrator2>> in the slave dump together with other
broken slaves. Your slavers had to risk their live and their purity to save <<them $g.infiltrator2>>.</p>
/*
<p>
It is not hard to imagine what fate awaits <<rep $g.infiltrator2>> —- as a plaything in an orc encampment —- but perhaps you'll see <<them $g.infiltrator2>> again one day.
</p>
*/<<run new setup.QuestTemplate(
'ruin_raider2', /* key */
'Ruin Raider', /* Title */
'darko', /* Author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
2, /* quest expiration weeks */
{ /* roles */
'explorer1': setup.qu.explorer,
'explorer2': setup.qu.explorer,
'scout': setup.qu.scout_desert, },
{ /* actors */
},
[ /* costs */
],
'Quest_ruin_raider2',
setup.qdiff.harder44, /* difficulty */
[ /* outcomes */
[
'Quest_ruin_raider2Crit',
[
setup.qc.MoneyNormal(),
setup.qc.Equipment(setup.equipmentpool.sextoy_good), ],
], [
'Quest_ruin_raider2Success',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_ruin_raider2Failure',
[
setup.qc.Injury('explorer1', 2),
setup.qc.Injury('explorer2', 2),
setup.qc.Injury('scout', 2), ],
], [
'Quest_ruin_raider2Disaster',
[
setup.qc.MissingUnit('explorer1'), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>The eastern deserts are littered with various ruins from times past. These ruins often went unexcavated protected by the shifting sands. There are many who made their living from finding hidden treasures in such ruins, but there are equally many who ends their journey crushed by some trap in such ruins.
</p>
<p>
You have a lead on a possible such ruins. If you want to follow up on this lead, you'd have to act fast before the shifting sands bury the ruins back to where it was.
</p><p>
Your slavers arrived at what appears to be the ruins of a temple. The temple are surrounded by various golden engravings on all sides, depicting various raunchy sexual act. One side seems the depict the various methods perceived in order to maximize the chance of a mail heir, including impregnating multiple women all at the same climax. The other side depicts various methods of sexual torture to break the most resilient of prisoners. There are depictions of men and women chained to the same dildo which pushes both at the same time the harder they struggle, while another has multiple weights attached to their genitals and nipples while being whipped mercilessly.
</p>
<p>
Your slavers
<<uadv $g.explorer1>>
proceed to undo these engravings and gather up the usable gold. At the top of the altar, they found an ancient sex toy made of pure gold, which they decide to keep for the company.
</p><p>
Your slavers arrived at what appears to be an ancient trading hall. It seems that these halls once trade various goods and also slaves. There are various ancient pots which your slaver took, and also numerous shackles all over the wall and the ceiling.
Your slavers can only imagine what this place must have looked like back then with every shackle filled by a slave for sale, while they
<<uadv $g.explorer1>> loot the place clean.
</p><p>
Your slavers arrived at what appears to be a tomb. But due to excitement, your slavers were not carefully treading which results in both <<rep $g.explorer1>> and <<rep $g.explorer2>> being smacked in the face by a trap. Your slavers had no choice but to head back and tend to their injuries, instead of risking going in further.</p><p>
Your slavers arrived at what appears to be the royal palace. Thinking that it is such an easy place to loot, they rushed in only to be met by a falling pit trap. <<rep $g.explorer1>> slipped and fell down into the darkness, and it is unknown what fate awaits <<them $g.explorer1>> or if you'll ever see <<them $g.explorer1>> again.
</p><<run new setup.UnitGroup(
'quest_shepherd_of_men_capture1',
'Shepherd',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.Injury('unit', 1),
setup.qc.TraitReplace('unit', setup.trait.per_dominant),
setup.qc.TraitReplace('unit', setup.trait.per_cruel),
setup.qc.TraitReplace('unit', setup.trait.skill_intimidating), ],
)>>
<<set _criteriaraider1 = new setup.UnitCriteria(
null, /* key */
'Specialist Raider', /* name */
[
setup.trait.per_aggressive,
setup.trait.magic_fire,
setup.trait.skill_ambidextrous,
setup.trait.bg_slaver,
setup.trait.per_lunatic,
setup.trait.per_independent,
setup.trait.per_proud,
setup.trait.per_evil,
setup.trait.eq_veryvaluable,
],
[
setup.trait.per_humble,
setup.trait.bg_slave,
setup.trait.eq_restrained,
setup.trait.magic_water,
setup.trait.per_calm,
setup.trait.per_masochistic,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_empath,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
slaving: 1,
}
)>>
<<set _criteriaraider2 = new setup.UnitCriteria(
null, /* key */
'Specialist Raider', /* name */
[
setup.trait.per_aggressive,
setup.trait.magic_fire,
setup.trait.skill_ambidextrous,
setup.trait.bg_slaver,
setup.trait.per_lunatic,
setup.trait.per_independent,
setup.trait.per_proud,
setup.trait.per_evil,
setup.trait.eq_veryvaluable,
],
[
setup.trait.per_humble,
setup.trait.bg_slave,
setup.trait.eq_restrained,
setup.trait.magic_water,
setup.trait.per_calm,
setup.trait.per_masochistic,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_empath,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'shepherd_of_men_capture', /* key */
'Shepherd of Men: Capture', /* Title */
'darko', /* author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': _criteriaraider1,
'raider2': _criteriaraider2,
'support': setup.qu.raidersupport, },
{ /* actors */
'shepherd': setup.unitgroup.quest_shepherd_of_men_capture1, },
[ /* costs */
],
'Quest_shepherd_of_men_capture',
setup.qdiff.hell38, /* difficulty */
[ /* outcomes */
[
'Quest_shepherd_of_men_captureCrit',
[
setup.qc.Slave('shepherd', 'was the leader of a group of people farmers on the eastern deserts'),
setup.qc.MoneyNormal(), ],
], [
'Quest_shepherd_of_men_captureSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_shepherd_of_men_captureFailure',
[
setup.qc.Injury('raider1', 2),
setup.qc.Injury('raider2', 2),
setup.qc.Injury('support', 2), ],
], [
'Quest_shepherd_of_men_captureDisaster',
[
setup.qc.Injury('raider1', 4),
setup.qc.Injury('raider2', 4),
setup.qc.MissingUnit('support'), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are many people who makes a living as a shepherd in the eastern deserts. These people raise livestock and usually have to travel great distances to let them feed. Various type of livestock are raised: sheep, goat, camels, and occasionally people.
</p>
<p>
You have learned of a particular people-farm who apparently captured unwary travelers and trained them to be a durable slave.
This presents an opportunity to you: your company can always use a pre-trained slave. Or, you can simply raid the farm for as many goods as possible. There is also the option of enslaving the lead shepherd, but such endeavor must prove extremely dangerous.
</p>
<p>
You have chosen the most dangerous option by attempting capture the head shepherd.
</p><p>
Your slavers waited until the week where most of the guards are off duty. Even then, the cabin housing the leader of these men —- known as the head shepherd —- are still heavily guarded.
Nonetheless, your slavers begin their assault. <<rep $g.raider1>> and <<rep $g.raider2>>
<<uadv $g.raider1>>
fought like villains of legend while <<rep $g.support>> kept them healthy throughout the fight.
</p>
<p>
After a long struggle, your slavers were victorious, and they proceed to assault the cabin.
The head slaver was apparently asleep throughout the entire commotion, and your slavers packed all the valuables in the cabin as well as the main trophy —- the shepher <<themself $g.shepherd>>, and head home victorious.
</p><p>
Your slavers waited until the week where most of the guards are off duty. Even then, the cabin housing the leader of these men —- known as the head shepherd —- are still heavily guarded.
Nonetheless, your slavers begin their assault. <<rep $g.raider1>> and <<rep $g.raider2>>
<<uadv $g.raider1>>
fought the battle fiercely while <<rep $g.support>> kept healing their wounds throughout the fight.
</p>
<p>
The head shepherd were apparently awake throughout the fight and seeing as his guards starting to lose, <<they $g.shepherd>> made <<their $g.shepherd>> escape. By the time your slavers were victorious, the shepherd were already gone from the cabin. Still, it's not a complete defeat, as your slavers were able to ransack most of the cabin which contains some profits from the farm.</p><p>
Your slavers waited until the week where most of the guards are off duty. Even then, the cabin housing the leader of these men —- known as the head shepherd —- are still heavily guarded.
Nonetheless, your slavers begin their assault. <<rep $g.raider1>> and <<rep $g.raider2>>
<<uadv $g.raider1>>
fought the battle fiercely while <<rep $g.support>> kept healing their wounds throughout the fight.
</p>
<p>
Unfortunately, the head shepherd decided to join the battle. <<They $g.shepherd>> fought like a madman injuring your slavers, which ultimately result in your slavers retreating to safety.
While the mission ended up in failure, at least you still have your slavers back home.</p><p>
Your slavers waited until the week where most of the guards are off duty. Even then, the cabin housing the leader of these men —- known as the head shepherd —- are still heavily guarded.
Nonetheless, your slavers begin their assault. <<rep $g.raider1>> and <<rep $g.raider2>> fought the battle fiercely while <<rep $g.support>> kept healing their wounds throughout the fight.
</p>
<p>
Unfortunately, the head shepherd decided to join the battle. <<They $g.shepherd>> fought like a madman. Ultimately, this results in your slavers losing and were forced to retreat. <<rep $g.support>> sacrificed <<themself $g.support>> to allow <<rep $g.raider1>> and <<rep $g.raider2>> to retreat. Back at the fort, your slavers mood are down having to witness one of their allies be captured without being able to do anything about that.</p>
<p>
You can only guess what fate awaits <<rep $g.support>>, but given the nature of the farm it should not be too hard of a guess.
</p><<run new setup.QuestTemplate(
'shepherd_of_men_raid', /* key */
'Shepherd of Men: Raid', /* Title */
'darko', /* author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
},
[ /* costs */
],
'Quest_shepherd_of_men_raid',
setup.qdiff.normal38, /* difficulty */
[ /* outcomes */
[
'Quest_shepherd_of_men_raidCrit',
[
setup.qc.MoneyCrit(0.75),
setup.qc.Equipment(setup.equipmentpool.restraint), ],
], [
'Quest_shepherd_of_men_raidSuccess',
[
setup.qc.MoneyNormal(),
],
], [
'Quest_shepherd_of_men_raidFailure',
[
setup.qc.Injury('raider1', 1), ],
], [
'Quest_shepherd_of_men_raidDisaster',
[
setup.qc.Injury('raider1', 4),
setup.qc.Injury('raider2', 3),
setup.qc.Injury('support', 4), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are many people who makes a living as a shepherd in the eastern deserts. These people raise livestock and usually have to travel great distances to let them feed. Various type of livestock are raised: sheep, goat, camels, and occasionally people.
</p>
<p>
You have learned of a particular people-farm who apparently captured unwary travelers and trained them to be a durable slave.
This presents an opportunity to you: your company can always use a pre-trained slave. Or, you can simply raid the farm for as many goods as possible. There is also the option of enslaving the lead shepherd, but such endeavor must prove extremely dangerous.
</p>
<p>
You have chosen the safest option which is to raid the farm.
</p><p>Your slavers have decided to target the supply cottage, which is significantly less guarded than the others. The guards stood no chance as your slavers jumped from the darkness and assaulted the guards. Your slavers quickly loot the entire cottage as well as some of the bondage currently being used on an unfortunate slave before escaping into the night.</p><p>Your slavers have decided to target one of the smaller huts, which is less guarded than the others. With number advantage on your side, the guards were quickly dispatched, allowing your slavers to loot the hut before the commotion draws in the rest of the guards.</p><p>Your slaver chose the wrong building to assault as it turns out that the building is more well guarded than your slavers thought. Your slavers decided to escape instead of fighting, and as a result the only casualty is slight injuries on <<rep $g.raider1>>.</p><p>Either due to ignorance or blind pride, your slavers somehow chose to attack the guard barracks, which of course meant they were soundly beaten by the sheer number of the guards and forced to retreat with heavy injuries.</p><<run new setup.UnitGroup(
'quest_shepherd_of_men_steal1',
'Animals',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.training_obedience_basic),
setup.qc.TraitReplace('unit', setup.trait.training_endurance_basic), ],
)>>
<<run new setup.QuestTemplate(
'shepherd_of_men_steal', /* key */
'Shepherd of Men: Steal', /* Title */
'darko', /* author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'thief1': setup.qu.thief,
'thief2': setup.qu.thief,
'appraiser': setup.qu.slaveappraiser, },
{ /* actors */
'animal': setup.unitgroup.quest_shepherd_of_men_steal1, },
[ /* costs */
],
'Quest_shepherd_of_men_steal',
setup.qdiff.hard38, /* difficulty */
[ /* outcomes */
[
'Quest_shepherd_of_men_stealCrit',
[
setup.qc.MoneyCrit(0.75),
setup.qc.Slave('animal', 'was captured and trained at a slave farm'), ],
], [
'Quest_shepherd_of_men_stealSuccess',
[
setup.qc.MoneySmall(),
setup.qc.Slave('animal', 'was captured and trained at a slave farm'), ],
], [
'Quest_shepherd_of_men_stealFailure',
[
setup.qc.Injury('thief1', 2),
setup.qc.Injury('thief2', 2), ],
], [
'Quest_shepherd_of_men_stealDisaster',
[
setup.qc.MissingUnit('thief1'),
setup.qc.Injury('thief2', 4), ],
], ],
[
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.dungeons), ], /* restrictions to generate */
)>><p>
There are many people who makes a living as a shepherd in the eastern deserts. These people raise livestock and usually have to travel great distances to let them feed. Various type of livestock are raised: sheep, goat, camels, and occasionally people.
</p>
<p>
You have learned of a particular people-farm who apparently captured unwary travelers and trained them to be a durable slave.
This presents an opportunity to you: your company can always use a pre-trained slave. Or, you can simply raid the farm for as many goods as possible. There is also the option of enslaving the lead shepherd, but such endeavor must prove extremely dangerous.
</p>
<p>
You have chosen to simply steal one of the pre-trained slaves.
</p><p>
Your slavers sneaked into the well-guarded farm in the middle of the night. They found an unguarded barn, which your slavers enter.
The slaves are all placed in their respective booths, each have their hands restrained to the back and ankles chained to the corners of their booths, while their necks are securely locked in stock. <<rep $g.thief1>> and <<rep $g.thief2>> have all the time in the world to loot the barn clean while <<rep $g.appraiser>> manhandles and appraises the slaves to pick a particularly well-behaving slave to bring back home.</p><p>
Your slavers sneaked into the well-guarded farm in the middle of the night. There were guards watching every barn, and your slavers had to be careful to not alert the guards. Eventually, they found a barn whose back entrance is unguarded, which your slavers enter.
They were not given much choice but to unlock the closest slave in the barn from <<their $g.animal >> night bondage and kidnap <<them $g.animal>> home.</p><p>
Your slavers sneaked into the well-guarded farm in the middle of the night. But <<rep $g.thief1>> accidentally alerted one of the guards, which means your slavers had no choice but to run as fast as they can. Your slavers were slightly injured during the chase, which is not too bad considering the other options are much worse.
</p><p>
Your slavers sneaked into the well-guarded farm in the middle of the night. But <<rep $g.thief1>> accidentally alerted one of the bulkier guards, who immediately immobilized <<= $g.thief>>. Your other slavers, being completely outnumbered, had no choice but to abandon <<rep $g.thief1>> to <<their $g.thief1 >> fate...
</p>
<p>
You can only guess what fate awaits <<rep $g.thief1>>, but given the nature of the farm it should not be too hard of a guess.
</p><<run new setup.UnitGroup(
'quest_the_serial_bodyswapper1',
"shifter1",
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
1, /* reuse chance */
[
setup.qc.Trait('unit', setup.trait.training_mindbreak), ],
)>> <<run new setup.UnitGroup(
'quest_the_serial_bodyswapper2',
"shifter3",
[
[setup.unitpool.race_humansea_male, 0.5],
[setup.unitpool.race_humansea_female, 0.5], ],
1, /* reuse chance */
[
setup.qc.Trait('unit', setup.trait.training_mindbreak), ],
)>> <<run new setup.UnitGroup(
'quest_the_serial_bodyswapper3',
"Serial Bodyswapper",
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_orc_male, 0.2268602540834846],
[setup.unitpool.race_humandesert_male, 0.2268602540834846],
[setup.unitpool.race_orc_female, 0.2268602540834846],
[setup.unitpool.race_humandesert_female, 0.2268602540834846], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.TraitReplace('unit', setup.trait.magic_water_master), ],
)>> <<run new setup.UnitGroup(
'quest_the_serial_bodyswapper4',
"Swap victim",
[
[setup.unitpool.race_humankingdom_male, 0.16339869281045746],
[setup.unitpool.race_humanvale_male, 0.16339869281045746],
[setup.unitpool.race_humandesert_male, 0.040849673202614366],
[setup.unitpool.race_humansea_male, 0.008169934640522875],
[setup.unitpool.race_neko_male, 0.040849673202614366],
[setup.unitpool.race_werewolf_male, 0.01633986928104575],
[setup.unitpool.race_elf_male, 0.040849673202614366],
[setup.unitpool.race_orc_male, 0.02450980392156862],
[setup.unitpool.race_dragonkin_male, 0.0008169934640522874],
[setup.unitpool.race_demon_male, 0.0008169934640522874],
[setup.unitpool.race_humankingdom_female, 0.16339869281045746],
[setup.unitpool.race_humanvale_female, 0.16339869281045746],
[setup.unitpool.race_humandesert_female, 0.040849673202614366],
[setup.unitpool.race_humansea_female, 0.008169934640522875],
[setup.unitpool.race_neko_female, 0.040849673202614366],
[setup.unitpool.race_werewolf_female, 0.01633986928104575],
[setup.unitpool.race_elf_female, 0.040849673202614366],
[setup.unitpool.race_orc_female, 0.02450980392156862],
[setup.unitpool.race_dragonkin_female, 0.0008169934640522874],
[setup.unitpool.race_demon_female, 0.0008169934640522874], ],
0, /* reuse chance */
[
setup.qc.AddRandomBodypart('unit', false), ],
)>>
<<set _criteriadistractor = new setup.UnitCriteria(
null, /* key */
'Distractor', /* name */
[
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.breast_tiny,
setup.trait.balls_tiny,
setup.trait.dick_tiny,
setup.trait.per_chaste,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.face_ugly,
setup.trait.face_hideous,
],
[
setup.qres.Job(setup.job.slaver),
],
{
arcane: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'the_serial_bodyswapper', /* key */
"The Serial Bodyswapper", /* Title */
"darko", /* Author */
[
'desert',
'transformation',
'special',
'veteran',
'unknown'
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fighter': setup.qu.fighter,
'exploder': setup.qu.arcanefire,
'distractor': _criteriadistractor, },
{ /* actors */
'shifter2': setup.unitgroup.quest_night_shift231,
'shifter1': setup.unitgroup.quest_the_serial_bodyswapper1,
'shifter3': setup.unitgroup.quest_the_serial_bodyswapper2,
'thief': setup.unitgroup.quest_the_serial_bodyswapper3,
'victim': setup.unitgroup.quest_the_serial_bodyswapper4, },
[ /* costs */
],
'Quest_the_serial_bodyswapper',
setup.qdiff.hardest47, /* difficulty */
[ /* outcomes */
[
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.VarAdd('nightshifter', 10, 20),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.Event('bodyswap_epilogue', 1),
setup.qc.Bodyswap('thief', 'victim'),
setup.qc.Opportunity('the_serial_bodyswapper__reward'),
setup.qc.Slave('thief', "was a serial bodyswapper notorious for using long-range bodyswapping magic to \"kidnap\" the bodies of their victims", undefined), ],
], [
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.VarAdd('nightshifter', 10, 20),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.Opportunity('the_serial_bodyswapper__reward'),
setup.qc.Event('bodyswap_epilogue', 1),
],
], [
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.VarAdd('nightshifter', 10, 20),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.Opportunity('the_serial_bodyswapper__reward'),
setup.qc.Event('bodyswap_epilogue', 1),
setup.qc.Bodyswap('fighter', 'shifter1'), ],
], [
'Quest_the_serial_bodyswapperDisaster',
[
setup.qc.VarAdd('nightshifter', 10, 20),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.SlaveMarker('victim'),
setup.qc.SlaveMarker('shifter1'),
setup.qc.SlaveMarker('shifter2'),
setup.qc.SlaveMarker('shifter3'),
setup.qc.RemoveFromUnitGroup('shifter1'),
setup.qc.RemoveFromUnitGroup('shifter2'),
setup.qc.RemoveFromUnitGroup('shifter3'),
setup.qc.MissingUnit('fighter'),
setup.qc.Bodyswap('fighter', 'thief'),
setup.qc.Injury('exploder', 8),
setup.qc.Injury('distractor', 9), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarGte('nightshifter', 3),
setup.qres.VarLte('nightshifter', 10),
],
)>><<set _u = null>>
<<set _ukey = $varstore.get('nightshifter_bodyswapped')>>
<<if _ukey && _ukey in $unit>>
<<set _u = $unit[_ukey]>>
<</if>>
<p>
Remember the serial bodyswapper that went rampant in the eastern desert, doing remote body-swap rituals over unsuspecting victims
<<if _u>> including <<rep _u>><</if>>? Well, your slavers have finally managed to pinpoint the exact location of <<their $g.thief>> den —- in the middle of nowhere in the desert, behind a large unmarked stone wall next to an oasis. <<if _u && _u.isSlaver()>>
<<rep _u>> licks <<their _u>> lips as revenge is finally within <<their _u>> grasp.
<</if>>
</p>
<p>
You can try to stop this bodyswapping crime for good by sending a group of slavers to the location. You need one slaver, preferably one proficient in <<rep setup.trait.magic_fire>>, to blow up the entrance. Once the entrance is open, you need a slaver proficient in fighting to lead the way down. Finally, one of your slavers need to distract the bodyswapper while the rest attempt to subdue <<them $g.thief>>.
</p>
<<if _u && _u.isSlaver()>>
<p>If <<rep _u>> wants <<their _u>> body back, <<they _u>> should definitely go on this quest...</p>
<</if>><<set _u = null>>
<<set _ukey = $varstore.get('nightshifter_bodyswapped')>>
<<if _ukey && _ukey in $unit>>
<<set _u = $unit[_ukey]>>
<</if>>
<p>
Your slavers wisely spend a week first practicing before charging headlong into the stronghold.
<<if $g.exploder.isHasTrait('magic_fire')>>
<<rep $g.exploder>> practiced <<their $g.exploder>> strongest explosion spells in preparation for blasting the door.
<<else>>
<<rep $g.exploder>> scoured nearby settlements in search for explosives to detonate the door.
<</if>>
Meanwhile, <<rep $g.fighter>> <<uadv $g.fighter>> practiced their fighting techniques while <<rep $g.distractor>> did <<their $g.distractor>> to, uh, appear distracting.
</p>
<p>
Once their preparations are complete, your slavers head into the oasis <<uadv $g.fighter>>.
When they arrived at a stone that looks suspiciously like a door, <<rep $g.exploder>> immediately get to work.
<<if $g.exploder.isHasTrait('magic_fire')>>
From a safe distance, <<rep $g.exploder>> casts a large explosion spell which punched a big hole into the wall safely.
<<else>>
<<rep $g.exploder>> placed all the explosives <<they $g.exploder>> gathered and explode them at the same time, which injures <<them $g.exploder>> a little.
<<run $hospital.injureUnit($g.exploder, 2)>>.
<</if>>
With the entrance wide open, <<rep $g.fighter>> <<uadv $g.fighter>> lead the team down the hallways.
</p>
<p>
The stronghold is surprisingly small. After passing what seems to be a laboratory next to a bedroom, they arrived at a small ominous clearing. A large purple magical circle fills the entire room, and at its center is
a hooded <<urace $g.thief>> deep in incantation. Your slavers can see as <<their $g.thief>> body morphed before the eyes —- it seems they are in luck: the serial bodyswapper seems to be too deep in their spell to notice the loud explosion from earlier.
</p>
<<if $gOutcome == 'crit'>>
<p>
With the serial bodyswapper deep in ritual, <<rep $g.fighter>> led your team of slavers to charge.
Surprised and greatly distracted by <<rep $g.distractor>> swaying <<ubody $g.distractor>>, the serial bodyswapper lost control of <<their $g.thief>> spell, causing it to misfire. Before your slavers' eyes <<their $g.thief>> body distorted unnaturally which looks extremely painful. Either way it makes your slavers' job very easy as they tied up, gag, and secured the pained bodyswapper, to be brought back home to your fort as a trophy slave.
<<if _u && _u.isSlaver()>>
<<rep _u>> will finally get <<their _u>> <<uhands _u>> on the bodyswapper for the well-deserved revenge.
<</if>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
With the serial bodyswapper deep in ritual, <<rep $g.fighter>> led your team of slavers to charge.
But despite being surprised and distracted by <<rep $g.distractor>> swaying <<ubody $g.distractor>>,
the serial bodyswapper managed to alter the spell <<they $g.thief>> are casting into a flooding spell.
Torrents of water came out of nowhere flooding the entire chamber, pushing your slavers back from approaching the bodyswapper-wizard. It seems your slavers have underestimated the magical prowess of the bodyswapper. By the time they managed to break through the magical flood the bodyswapper was nowhere to be seen.
</p>
<<else>>
<p>
But it seems the bodyswapper was ready for a fight —- as soon as your slavers approached, a familiar purple circle glows brightly under <<rep $g.fighter>> —- instantly transforming <<them $g.fighter>> before your slavers' eyes.
<<ubodyswap $g.fighter $g.shifter1>>
When your slavers are distracted by the transformation, the bodyswapper-wizard made <<their $g.thief>> escape from the place.
</p>
<</if>>
<p>
With their owner gone, your slavers spent some time exploring the fort. In the dungeons they found several slaves seemingly already mindbroken for a long time. It seems that the serial bodyswapper bought cheap slaves from the slave market and used these fucktoys as <<their $g.thief>> living "body storage", to store the bodies that <<they $g.thief>> like.
<<if $gOutcome == 'failure'>>
<<rep $g.fighter>> noticed one of the slaves are actually wearing <<their $g.fighter>> body, which gives <<them $g.fighter>> hope that perhaps <<they $g.fighter>> can reclaim <<their $g.fighter>> original body.
<</if>>
<<if _u && _u.isSlaver()>>
One of the slaves bore the former body of <<rep _u>>, to your slavers' surprise.
<</if>>
</p>
<p>
After a more thorough search of the place, they found the tome detailing the full bodyswapping ritual. While it requires an expertise outside the capabilities of anyone in your fort, the stronghold currently have a fully-prepared circle ready for the ritual. It would be possible to use it to bodyswap one of the participants of this quest with one of the mindbroken slaves. This ritual will surely draw unwanted attention however and it is unlikely you can reclaim the slaves for your own. Alternatively, you can always use more slaves in your roster...
<<if $gOutcome == 'failure'>>
Still, this may be the only chance for <<rep $g.fighter>> to reclaim <<their $g.fighter>> original body.
<</if>>
</p>
<<run $varstore.set('nightshifter_eligibles', [$g.fighter.key, $g.exploder.key, $g.distractor.key], 2)>><<set _u = null>>
<<set _ukey = $varstore.get('nightshifter_bodyswapped')>>
<<if _ukey && _ukey in $unit>>
<<set _u = $unit[_ukey]>>
<</if>>
<p>
Your slavers made the rash decision to immediately rush into the bodyshaper's den —- urged by <<rep $g.fighter>> in order to prevent further bodyswapping from happening.
<<if $g.exploder.isHasTrait('magic_fire')>>
<<rep $g.exploder>> messily casts a large explosion spell which punched a big hole into the wall but also emitting a very loud noise.
<<else>>
<<rep $g.exploder>> placed all the explosives <<they $g.exploder>> gathered and explode them at the same time, which injures <<them $g.exploder>> as well as making a very loud noise.
<<run $hospital.injureUnit($g.exploder, 3)>>
<</if>>
With the entrance wide open, <<rep $g.fighter>> <<uadv $g.fighter>> lead the team down the hallways.
</p>
<p>
Your slavers are then ambushed by the waiting bodyswapper, who are aware of their intrusion because of..., well, pick your choice between the giant hole in their stronghold or the big ass explosion happening earlier. Either way there was no chance in hell your slavers were able to escape the magic of this powerful bodyswapper-wizard, and they were immobilized easily as the bodyswapper works <<their $g.thief>> <<lore magic_water>>. Immobilized, they are helpless to prevent the advancing hands of the bodyswapper as <<they $g.thief>> manhandled your slavers to choose which fresh body <<they $g.thief>> would like most to swap with. After settling with <<rep $g.fighter>>'s <<ubody $g.fighter>>, your other slavers were blasted away with magic far outside from the stronghold, and they suffer great injuries as a result.
</p>
<p>
<<rep $g.fighter>>'s fate is to be bodyswapped again and again and be used as the bodyswapper's personal body storage. You might be able to rescue <<them $g.fighter>> later with a rescuer, but <<they $g.fighter>> probably would have occupied a completely different body by then...
</p>
<<if _u && _u.isSlaver()>>
Thanks to your slaver's rash decisions <<rep _u>>'s original body is lost forever...
<</if>><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__wrath', /* key */
"The Seven Deadly Transformation: Wrath", /* Title */
"darko", /* Author */
[ 'transformation',
'desert',
'trait',
'prep'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'pimp': setup.qu.pimp,
'guard': setup.qu.guard, },
{ /* actors */
'orc': setup.unitgroup.orc, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__wrath',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__wrathCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_masochist_basic),
setup.qc.TraitReplace('fated', setup.trait.mouth_orc),
setup.qc.MoneyCustom(4000), ],
], [
'Quest_the_seven_deadly_transformation__wrathSuccess',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_masochist_basic),
setup.qc.TraitReplace('fated', setup.trait.mouth_orc),
setup.qc.MoneyCustom(1500), ],
], [
'Quest_the_seven_deadly_transformation__wrathFailure',
[
setup.qc.Injury('fated', 2),
setup.qc.Injury('guard', 4),
setup.qc.Injury('trainer', 2),
setup.qc.Injury('pimp', 2), ],
], [
'Quest_the_seven_deadly_transformation__wrathDisaster',
[
setup.qc.Injury('guard', 8),
setup.qc.Injury('trainer', 6),
setup.qc.Injury('pimp', 6),
setup.qc.SlaveMarker('orc'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.mouth_orc),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
Recently, you have read in your library about the "Trial of Wrath" —- which requires its participant to join and survive the initiation rite of the orcish tribe. Hearing this, you can't help but wonder if this trial is one of the challenges that your slave <<rep _headunit>> must overcome to fulfill <<their _headunit>> destiny. Still, even if it were true, this won't be an easy one to overcome.
</p>
<p>
It would be impossible to subject <<rep _headunit>> to the rite, for the rite is only done for new members of the orcish tribe. But perhaps you can ask some of the tribes for how the rite is done, which can help you perform the rite on the slave. You can try to send a group of slavers over to the desert to find relatively calm orc encampment, and see what they can find there.
</p>
<p>
Or it could be a complete miss, and this "Trial of Wrath" has nothing to do at all with <<rep _headunit>>'s destiny.
</p>
<</if>><<include 'Quest_the_seven_deadly_transformation__wrathSuccess'>><p>
Your slavers managed to find one small orcish encampment who mostly lives off trading. <<rep $g.pimp>> managed to <<uadv $g.pimp>> represent your team well —- acting as <<rep $g.fated>>'s pimp. Once inside, <<rep $g.fated>> were immediately rented by some of the orcs, while <<rep $g.guard>> busily search for relevant information. They gather much information about the rite, including all the spanking and whipping that surprisingly comes with it.
</p>
<p>
In fact, apparently one of the orcs have just come at age, and would be subjected to the rite later that night. Your slavers were invited to watch, which they gladly agree. That night, your slavers watched as the new orc member were chained to a post and then whipped and flogged by their fellow orcs —- you can't help but notice that the orc's
<<if $g.orc.isHasDick()>>dick<<else>>pussy<</if>> remains <<wet $g.orc>> all that time.
This looks simple enough —- your slavers eagerly tried this out on <<rep $g.fated>>, who they tied to a tree. They synchronise their whipping and spanking with the ritual —- soon enough, <<rep $g.fated>> started to glow red and tusks starting to form around <<their $g.fated>> mouth. By the end of the ritual, while the glowing faded, <<rep $g.fated>>'s entire body is red from the whipping. <<They $g.fated>> sported new orc-looking tusks jutting out of their mouth —- surely signifying the success of the ritual.</p>
<p>
The next day, your slavers bid farewell to the nice orcs while
<<rep $g.pimp>> <<uadv $g.pimp>> collected the money obtained from whoring <<rep $g.fated>> out.
</p><p>
Unfortunately, your slavers were not able to find a particularly friendly orcish encampment. When your slavers tried to insist on one of the encampments, the guards attacked your slavers, leaving them a little injured.
</p><p>
When your slavers attempted to parley with the guards of one of the orcish encampment, they were ambushed by some orcish ambusher lying in wait. Your slavers somehow managed to escape the situation, albeit sustaining heavy injuries.
</p><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__envy', /* key */
"The Seven Deadly Transformation: Envy", /* Title */
"darko", /* Author */
[ 'transformation',
'desert',
'trait',
'prep'
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'wizard': setup.qu.arcanedark,
'warrior': setup.qu.dark_warrior, },
{ /* actors */
'demon': setup.unitgroup.demon, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__envy',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__envyCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_edging_basic),
setup.qc.TraitReplace('fated', setup.trait.legs_demon),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_seven_deadly_transformation__envySuccess',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_edging_basic),
setup.qc.TraitReplace('fated', setup.trait.legs_demon), ],
], [
'Quest_the_seven_deadly_transformation__envyFailure',
[
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('warrior'), ],
], [
'Quest_the_seven_deadly_transformation__envyDisaster',
[
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('warrior'),
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('warrior'),
setup.qc.SlaverMarker('demon'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.desert, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.legs_demon),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
In the recent days, your slave <<rep _headunit>> is often found staring blankly eastwards towards the eastern deserts, as if something was calling <<them _headunit>>. <<ustripmouth _headunit>> When you asked <<them _headunit>> about it, <<they _headunit>> <<uadv _headunit>> indicates that <<they _headunit>> keep hearing seductively disturbing voices in their head coming from somewhere in the eastern desert.
</p>
<p>
Normally, such kind of suffering is part of a slave's live. But since <<rep _headunit>> is rather special, this could prove to be something more than just nightmares —- perhaps it is another aspect of <<their _headunit>> preordained destiny? Either way, you could try to send a group of slavers together with the slave eastwards to the desert. Judging by the description, it looks like something demonic is at play, so it would be wise to bring slavers experienced in the dark arts along.
</p>
<p>
Or it could be that the slave's mind is simply dissolving from too much abuse.
</p>
<</if>><<include 'Quest_the_seven_deadly_transformation__envySuccess'>>
<p>
Your slavers <<uadv $g.trainer>> managed to stole some treasure from the land beyond the mist, which will fetch for a good price.
</p><p>Your slavers scoured the eastern desert for the potential source of the nightmares plaguing <<rep $g.fated>> —- the slave's
<<if $g.fated.isHasDick()>>dick twitches<<else>>clit twitches<</if>> whenever they are closing into the source. Using it as some sort of dowsing rod, your slavers managed to pinpoint what appears to be the source of the nightmare —- a large breach in a densely-misted area near an oasis.
</p>
<p>
After <<rep $g.wizard>> <<uadv $g.wizard>> stabilizes the gate, the rest of the team went inside into the breach —- as is norm for the land beyond the mist, they are met with the most debauched of scenes. Naked bodies of various races are on display along the fleshy walls, most has one or more of their slave holes filled either by a demon fucking them senseless or just as decoration. Before your slavers fully get their bearing back, they are greeted by the realm's <<lady $g.demon>>, <<if $g.demon.isHasDick()>>a buff and ridiculously well-endowed incubus
<<else>>
a ridiculously well-endowed succubus with an hourglass figure
<</if>> who proceed to claim a special connection with <<rep $g.fated>>.
When <<rep $g.fated>>'s body begin to glow purple, your slavers offered the slave (temporarily, they hope) to the <<succubus $g.fated>>. For such offer the <<incubus $g.fated>> gladly lent some of <<their $g.fated>> toys for your slavers to peruse, while <<they $g.fated>> work with your slave <<rep $g.fated>>.
</p>
<p>
To fulfill the envy aspect, the <<incubus $g.fated>> first placed a cruel chastity device covering the entirety of your slave's <<ugenital $g.fated>>. In the coming days, <<rep $g.fated>> were then forced to service many, many other <<if $g.fated.isHasDick()>>cocks, many repeatedly came with abandon in <<their $g.fated>> mouth.<<else>>pussies, plenty of whose juice were absorbed into <<their $g.fated>> mouth.<</if>> All were done without ever allowing <<rep $g.fated>> to climax. When the slave was returned back to your slavers, they noticed that the slave's legs have somehow been transformed into a painful pair of demonic hooves with a faint purple glow.
</p>
<p>
The debaucheries ended, your slavers safely returned back to the desert to the great relief of <<rep $g.wizard>> who have waited <<uadv $g.wizard>> in the desert for days, all while keeping the breach stable.
</p><p>Your slavers scoured the eastern desert for the potential source of the nightmares plaguing <<rep $g.fated>> —- the slave's
<<if $g.fated.isHasDick()>>dick twitches<<else>>clit twitches<</if>> whenever they are closing into the source. Using it as some sort of dowsing rod, your slavers managed to pinpoint what appears to be the source of the nightmare —- a large breach in a densely-misted area near an oasis.
</p>
<p>
After <<rep $g.wizard>> <<uadv $g.wizard>> attempted to stabilizes the gate, the rest of the team went inside into the breach. But <<rep $g.wizard>>'s attempt were messy, and a massive corrupted blowback repelled your slavers and the slave back into the desert. While they seems to sustain no injuries, the demonic blowback has permanently corrupted parts of their bodies.
</p><p>Your slavers scoured the eastern desert for the potential source of the nightmares plaguing <<rep $g.fated>> —- the slave's
<<if $g.fated.isHasDick()>>dick twitches<<else>>clit twitches<</if>> whenever they are closing into the source. Using it as some sort of dowsing rod, your slavers managed to pinpoint what appears to be the source of the nightmare —- a large breach in a densely-misted area near an oasis.
</p>
<p>
After <<rep $g.wizard>> <<uadv $g.wizard>> attempted to stabilizes the gate, the rest of the team went inside into the breach. But <<rep $g.wizard>>'s attempt were messy, and a massive corrupted blowback repelled your slavers and the slave back into the desert. While they seems to sustain no injuries, the demonic blowback has greatly corrupted parts of their bodies.
</p><<set _criteriatrader1 = new setup.UnitCriteria(
null, /* key */
'Trader (Desert)', /* name */
[
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.magic_fire,
setup.trait.per_tough,
setup.trait.race_orc,
setup.trait.race_humandesert,
],
[
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_nimble,
setup.trait.race_humanvale,
setup.trait.race_werewolf,
setup.trait.magic_water,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
knowledge: 1,
social: 1,
}
)>>
<<set _criteriatrader2 = new setup.UnitCriteria(
null, /* key */
'Trader (Desert)', /* name */
[
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.magic_fire,
setup.trait.per_tough,
setup.trait.race_orc,
setup.trait.race_humandesert,
],
[
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_nimble,
setup.trait.race_humanvale,
setup.trait.race_werewolf,
setup.trait.magic_water,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
knowledge: 1,
social: 1,
}
)>>
<<run new setup.QuestTemplate(
'trading_mission_desert', /* key */
'Trading Mission: Desert', /* Title */
'darko', /* Author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
2, /* expiration weeks */
{ /* roles */
'trader1': _criteriatrader1,
'trader2': _criteriatrader2,
'guard': setup.qu.guard, },
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.5), ],
'Quest_trading_mission_desert',
setup.qdiff.normal39, /* difficulty */
[ /* outcomes */
[
'Quest_trading_mission_desertCrit',
[
setup.qc.MoneyNormal(3.2),
],
], [
'Quest_trading_mission_desertSuccess',
[
setup.qc.MoneyNormal(1.75), ],
], [
'Quest_trading_mission_desertFailure',
[
setup.qc.Injury('guard', 2), ],
], [
'Quest_trading_mission_desertDisaster',
[
setup.qc.MoneyNormal(-1), ],
], ],
[
[setup.questpool.desert, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The eastern deserts may seem inhabitable, with its scorching heat and lack of vegetation, but the hardy people of the desert called it home. Most of them are nomads who opportunistically move locations in search of oasis and vegetations for their animals. These nomads are often lacking in basic necessities that are commonly found in other places, and would greatly trade for these necessities.
</p>
<p>
You can send a group of slavers to attempt to trade with these nomads. However, as with anything desert, this might turn out to be a rather dangerous trip.</p><p>
<<rep $g.trader1>>
<<uadv $g.trader1>>
managed to exchange what is basic necessities for the company with various valuable rugs and trinkets from the east. These were then sold at a high price netting your company a huge amount of profit.
</p><p>
There were a few ambushes here and there, but <<rep $g.guard>> were able to
<<uadv $g.guard>>
fend all of them off to safely escort your traders to the eastern settlement.
They made a tidy amount of profit by exchanging what they consider exotic food with jewelries.
</p><p>
Unfortunately, your caravan were waylaid by desert bandits who stole all of their goods. They had no choice but to return to the fort with <<rep $g.guard>>'s wounds to show for it.
</p><p>
Your slavers got swindled by a particularly rowdy desert merchant. Somehow, your company now owes them a significant amount of money.
</p><<run new setup.QuestTemplate(
'cunning_escapade', /* key */
"Cunning Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'kidnapper': setup.qu.kidnapper,
'schemer': setup.qu.schemer,
'distractor': setup.qu.seducer, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
], },
[ /* costs */
],
'Quest_cunning_escapade',
setup.qdiff.normal45, /* difficulty */
[ /* outcomes */
[
'Quest_cunning_escapadeCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_cunning_escapadeCrit',
[
],
], [
'Quest_cunning_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapemedium'), ],
], [
'Quest_cunning_escapadeDisaster',
[
setup.qc.MissingUnitRecapture('slave', 'escapehard'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapemedium, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('escaped_slave'),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.NoTrait(setup.trait.training_obedience_advanced)
]), ],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('slave'), ],
)>><p>
One of your slaves <<rep $g.slave>> had boldly escaped from your fort. To retake back the pride of your company, you can try to recapture the slave and let <<them $g.slave>> know that their fate is forever to be a property of others. But to make matters complicated, <<rep $g.slave>> had apparently escaped into the<<lore location_lucgate>>, who bars their gate from slavers such as yours.
</p>
<p>
If you want to recapture the slave, you have to be discreet. A slaver gifted in the seduction arts to sway the guards while two of your other slavers sneak into the city. There, they must locate the errant slave, kidnap <<them $g.slave>>, and smuggle <<them $g.slave>> to outside the city gates.
</p>
<p>
Or you can just forget about the slave and pride whatnot...
</p>
<p>
<<dangertext 'Warning'>>: If you let this quest expire or if you remove the quest, <<rep $g.slave>> will be gone forever...
</p><p>
None can resist as <<rep $g.distractor>> <<uadv $g.distractor>> <<their $g.distractor>> <<ubody $g.distractor>> offering <<rep $g.kidnapper>> and <<rep $g.schemer>> plenty of time to sneak in.
Once inside, they managed to locate <<rep $g.slave>> apparently buying food in a market. Your slavers tailed the former slave until <<they $g.slave>> went into an empty alley. With nobody around, your slavers ambushed the unsuspecting victim, hogtied <<them $g.slave>> to be brought back home via the sewers.
</p>
<<if $gOutcome == 'crit'>>
<p>
While inside, your slavers also managed to sneak into one of the wealthy citizen's house and grabbed some valuable jewelries to pawn.
</p>
<</if>><p>
Unfortunately no amount of swaying hip from <<rep $g.distractor>> were enough to (literally) move the guards away. Your slavers had no choice but to give up in their endeavors, but at least you know that the slave won't go anywhere and you can try again.
</p><p>
None can resist as <<rep $g.distractor>> <<uadv $g.distractor>> <<their $g.distractor>> <<ubody $g.distractor>> offering <<rep $g.kidnapper>> and <<rep $g.schemer>> plenty of time to sneak in.
Once inside, they managed to locate <<rep $g.slave>> apparently buying food in a market. But <<rep $g.kidnapper>> slipped and was spotted by <<rep $g.slave>>, who immediately alerted the guards of the slavers infiltrating the city. Your slavers were forced to retreat as the city went into high alert.
</p>
<p>
Unfortunately now <<rep $g.slave>> is aware that you are actively pursuing <<them $g.slave>>, and will likely make it more difficult for future attempts to recapture <<them $g.slave>>.
</p><<run new setup.QuestTemplate(
'daring_escapade', /* key */
"Daring Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'pirate': setup.qu.pirate,
'navigator': setup.qu.navigator,
'capturer': setup.qu.slavecapturer, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
],
'victim': 'humansea', },
[ /* costs */
],
'Quest_daring_escapade',
setup.qdiff.harder57, /* difficulty */
[ /* outcomes */
[
'Quest_daring_escapadeCrit',
[
setup.qc.Slave('victim', "was a runaway slave who grouped up with a slave of yours for an escape attempt", undefined), ],
], [
'Quest_daring_escapadeCrit',
[
],
], [
'Quest_daring_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapehard'),
setup.qc.Injury('pirate', 9),
setup.qc.Injury('capturer', 11),
setup.qc.Injury('navigator', 7), ],
], [
'Quest_daring_escapadeDisaster',
[
setup.qc.MissingUnitRecapture('slave', 'escapehard'),
setup.qc.MissingUnit('capturer'),
setup.qc.Injury('pirate', 9),
setup.qc.Injury('navigator', 7), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapehard, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('escaped_slave'),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.NoTrait(setup.trait.training_obedience_advanced)
]), ],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('slave'), ],
)>><p>
A slave of yours, <<rep $g.slave>>, had escaped your fort some time ago. Desperate to evade your recapture, <<they $g.slave>> have opted for a very dangerous option —- into the southern seas. This venture is surely dangerous for the slave, but it is sure effective in deterring your chase. Is the slave worth the chase, given the dangers of the southern seas? It might be wiser to just let the slave go at this point...
</p>
<p>
If you really want to recapture the slave, however, you will need a ship commanded by at least a fighter and a navigator. A slave capturer would also be nice for when the slavers finally meet <<rep $g.slave>> again.
</p>
<p>
<<dangertext 'Warning'>>: If you let this quest expire or if you remove the quest, <<rep $g.slave>> will be gone forever...
</p><p>
Braving the southern seas, your slavers <<uadv $g.navigator>> ventured south seeking the lost slave <<rep $g.slave>>. They were in luck, as <<rep $g.slave>> had not ventured far on the small ship <<they $g.slave>> somehow procured. It was an easy affair having <<rep $g.pirate>> and <<rep $g.capturer>> board the slave's ship, securing the protesting slave back into your ship and on way to your fort.
</p>
<<if $gOutcome == 'crit'>>
<p>
Apparently <<rep $g.slave>> was not the only inhabitant in their ship, as your slaver found another passenger. There were only one possible outcome here as your slavers collared the other passenger to begin <<their $g.victim>> new life serving <<their $g.victim>> betters.
</p>
<</if>><p>
The southern seas prove too challenging for your slavers as their ship were rocked by the heavy waves into one of the jutting rocks. With the crew injured your slavers had no choice but to went back to the fort, but at least they managed to pick up the lead on where <<rep $g.slave>> could possibly go.
</p><p>
The southern seas prove too challenging for your slavers as their ship were rocked by the heavy waves into one of the jutting rocks. With the crew injured your slavers had no choice but to went back to the fort, but at least they managed to pick up the lead on where <<rep $g.slave>> could possibly go.
</p>
<p>
<<rep $g.capturer>> went missing during the chaos.
<<set _rescuer = $dutylist.getUnit('DutyRescuer')>>
<<if _rescuer>>
Your rescuer <<rep _rescuer>> will have to get to work to rescue the missing slaver.
<<else>>
Maybe you could appoint a rescuer to get the lost slaver back...
<</if>>
</p><<run new setup.QuestTemplate(
'desperate_escapade', /* key */
"Desperate Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit'
], /* tags */
1, /* weeks */
3, /* quest expiration weeks */
{ /* roles */
'spotter': setup.qu.spotter,
'scout': setup.qu.scout_forest,
'capturer': setup.qu.slavecapturer, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
],
'victim': 'forest_all', },
[ /* costs */
],
'Quest_desperate_escapade',
setup.qdiff.easy30, /* difficulty */
[ /* outcomes */
[
'Quest_desperate_escapadeCrit',
[
setup.qc.Slave('victim', "was a villager lost in the western forests", undefined), ],
], [
'Quest_desperate_escapadeCrit',
[
],
], [
'Quest_desperate_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'), ],
], [
'Quest_desperate_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'),
setup.qc.Injury('scout', 1),
setup.qc.Injury('spotter', 1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapeeasy, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('escaped_slave'),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.NoTrait(setup.trait.training_obedience_advanced)
]), ],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('slave'), ],
)>><p>
<<rep $g.slave>> has escaped from your fort!
<<if $g.slave.isHasTrait('training_obedience_basic')>>
It seems despite the training <<they $g.slave>> have undergone <<they $g.slave>> remain a defiant slave.
<<else>>
Given <<their $g.slave>> lack of training it is not surprising <<they $g.slave>> attempted the escape.
<</if>>
Fortunately, <<rep $g.slave>> escaped in a rush leaving a clear trail for your slavers to pursue and recapture.
The trail leads to the western forests, where the slave is surely going to look for a place to hide. It will not be easy however —- a good spotter, a good scout, and a good slave capturer will be required to be sent as a team.
</p>
<p>
<<dangertext 'Warning'>>: If you let this quest expire or if you remove the quest, <<rep $g.slave>> will be gone forever...
</p><p>
<<rep $g.scout>> <<uadv $g.scout>> led the team through the thickness of the forest until <<rep $g.spotter>> spotted what appears to be the remnant of a campfire. Sure enough they found signs of <<rep $g.slave>> in the encampment, and your slavers waited in ambush until <<rep $g.slave>> came back to <<their $g.slave>> little alcove.
</p>
<p>
Soon after, <<rep $g.slave>> came alone after gathering fruits from the forest. Launching a surprise attack, <<rep $g.slave>> had no chance to retaliate your slavers' assault. In no time the former slave is back being a slave —- all tied up ready for the home trip.
<p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers also managed to nab an unsuspecting villager who looks lost in the forest as a bonus.
</p>
<</if>><p>
<<rep $g.scout>> <<uadv $g.scout>> led the team through the thickness of the forest until <<rep $g.spotter>> spotted what appears to be the remnant of a campfire. Sure enough they found signs of <<rep $g.slave>> in the encampment, and your slavers waited in ambush until <<rep $g.slave>> came back to <<their $g.slave>> little alcove.
</p>
<p>
But after they waited and waited, <<rep $g.slave>> never appear back in the encampment. Your slavers started to think that <<rep $g.slave>> laid a decoy for your slavers<<if $g.slave.isHasTrait('per_slow')>>, although on a second thought maybe the slave is not smart enough to do that.<<else>>.<</if>>
Fortunately, <<rep $g.capturer>> managed to pick up another lead in the surrounding villages for another capture attempt.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Your slavers were slightly injured as they were brushed and scratched by the brambles and vegetations in the forest.
</p>
<</if>><<run new setup.QuestTemplate(
'dungeon_rescue', /* key */
"Dungeon Rescue", /* Title */
"darko", /* Author */
[
'special', 'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'thief': setup.qu.thief,
'infiltrator': setup.qu.infiltrator,
'seducer': setup.qu.seducer, },
{ /* actors */
'target': [
setup.qres.HasTag('captured_slaver'),
], },
[ /* costs */
],
'Quest_dungeon_rescue',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_dungeon_rescueCrit',
[
],
], [
'Quest_dungeon_rescueCrit',
[
setup.qc.Injury('target', 2),
setup.qc.TraumatizeRandom('target', 8), ],
], [
'Quest_dungeon_rescueCrit',
[
setup.qc.Injury('target', 7),
setup.qc.TraumatizeRandom('target', 10), ],
], [
'Quest_dungeon_rescueDisaster',
[
setup.qc.MissingUnitRecapture('target', 'capturedhard'),
setup.qc.MissingUnitRecapture('thief', 'capturedeasy'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.capturedmedium, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('captured_slaver')
]), ],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('target'), ],
)>><p>
You have successfully tracked your <<uadjgood $g.target>> <<urace $g.target>> slaver <<rep $g.target>>, who very recently went missing during one of your quests.
That's good, but the problem is that you tracked him down to a remote dungeon complex in the desert.
Getting <<them $g.target>> out of the prison complex will pose a problem, and you'd need a specialized team for that.
</p>
<p>
First of all, the dungeons will be guarded, so a skilled seducer is needed to distract the guards. This gives a small opening for your other slavers to sneak past —- an infiltrator would be ideal. Finally, a thief should be brought along to pick the cell doors, finally allowing <<rep $g.target>> to hopefully escape unscathed.
</p>
<p>
<<dangertext 'Warning'>>: Ignoring this quest will ensure that you will
never see <<rep $g.target>> ever again...
</p><p>
<<rep $g.seducer>> did <<their $g.seducer>> best trying to appear as seductive as possible to distract the guards. Using the slight opening, <<rep $g.infiltrator>> led <<utheirrel $g.infiltrator $g.thief>> <<rep $g.thief>> down the dungeons. They passed through many cells containing a variety of slaves —- mostly broken and trained. As they started to worry, your slavers increased their pace until finally they arrive at the newcomer cell block.
</p>
<p>
<<if $gOutcome == 'crit'>>
There, on the corner of the block lies <<rep $g.target>> unconscious body —- it looks like <<they $g.target>> had just arrived to the dungeons. Relieved that no harm had befallen into <<rep $g.target>>,
<<elseif $gOutcome == 'success'>>
There, on the corner of the block lies <<rep $g.target>> unconscious body —- judging from the injuries sustained, it seems that <<rep $g.target>> had been here for a couple of days and have undergone the initial stages of slave breaking. Fortunately, the wounds can be healed, although it will take some time.
<<else>>
There, on the corner of the block lies <<rep $g.target>> unconscious and badly wounded body —- it seems that <<rep $g.target>> had just undergone some punishment, probably due to disobedience. Fortunately, the wounds can be healed, although it will take quite a while.
<</if>>
<<rep $g.thief>> <<uadv $g.thief>> picked the cell door and together with <<utheirrel $g.thief $g.infiltrator>> <<rep $g.infiltrator>> smuggled <<rep $g.target>> out from the dungeon
</p><p>
Your slavers managed to infiltrate the dungeons without failure, but
they were not able to locate <<rep $g.target>>.
<<rep $g.thief>> <<uadv $g.thief>> refused to give up the search —- your slavers never heard back from <<rep $g.thief>> after <<they $g.thief>> tried to enter the deeper complex...
</p>
<p>
It seems you have two slavers to rescue now.
</p><<run new setup.QuestTemplate(
'fresh_auction', /* key */
'Fresh Market', /* Title */
'darko', /* author */
[ /* tags */
'special', 'unit'
],
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'bidder1': setup.qu.bidder,
'bidder2': setup.qu.bidder,
'escort': setup.qu.escort,
},
{ /* actors */
'target': [
setup.qres.HasTag('captured_slaver'),
],
},
[ /* costs */
setup.qc.MoneyNormal(-1),
],
'QuestFreshAuction', /* passage description */
setup.qdiff.normal25, /* difficulty */
[ /* outcomes */
[
'QuestFreshAuctionCrit',
[
],
],
[
'QuestFreshAuctionCrit',
[
setup.qc.TraumatizeRandom('target', 4),
setup.qc.Slaver('target'),
],
],
[
'QuestFreshAuctionCrit',
[
setup.qc.TraumatizeRandom('target', 4),
setup.qc.MoneyNormal(-1),
],
],
[
'QuestFreshAuctionCrit',
[
setup.qc.MissingUnit('target'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.capturedeasy, 1],
],
[ /* prerequisites to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('captured_slaver'),
]),
],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('target'),
],
)>><p>
<<rep $g.target>> has very recently went missing during one of your quests.
Fortunately, your slavers were able to track <<them $g.target>> down to an
underground slave auction in the<<lore location_lucgate>>.
While it is certainly possible to try and break the slaver out by sneaking
into the auction, it is far too risky, and perhaps an easier way would be to
send a group of slavers to attend the auction regularly.
</p>
<p>
To have a good chance of saving <<rep $g.target>>,
you should send the slavers skilled in bidding.
An escort is good to have too, to make sure other bidders are aware
of the (supposed) wealth of your slavers.
</p>
<<set _bf = $friendship.getBestFriend($g.target)>>
<<if _bf && _bf.isSlaver()>>
<p>
You make sure to pass the great news to <<rep $g.target>>'s
<<ufriend $g.target _bf>> <<rep _bf>>.
</p>
<</if>>
<p>
<<dangertext 'Warning'>>: Ignoring this quest will ensure that you will
never see <<rep $g.target>> ever again...
</p><p>
Accompanied by <<rep $g.escort>>, your slavers
<<rep $g.bidder1>> and <<utheirrel $g.bidder1 $g.bidder2>> <<rep $g.bidder2>>
arrived and entered the auction site without problem.
Your slavers waited patiently as they watch a variety of merchandises,
including a particularly
<<if $g.target.isMale()>>
muscular dragonkin
<<else>>
busty dragonkin
<</if>>
being auctioned one by one.
Their patience is rewarded when <<rep $g.target>> is finally brought in chains
to the auction block.
</p>
<p>
Your slavers' eyes lit up as they begin bidding in the earnest.
<<rep $g.bidder1>> <<uadv $g.bidder1>> calculated the best strategy
for bidding while <<rep $g.bidder2>> do the actual bidding.
After a few rounds of bid, only your slavers and another elderly
gentleman is left ---
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
a tense series of bids ensues until finally
your slavers managed to clutch the bid out.
<<if $gOutcome == 'failure'>>
Unfortunately, they had to go over budget to save <<rep $g.target>>, which
is be reflected by the extra expense in their report.
<</if>>
<<else>>
the gentleman proved too stubborn to let <<rep $g.target>> go. Your slavers were
forced to give up the bid as the gentleman raised the bid to exorbitant amount.
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
<p>
<<rep $g.target>>'s defiant eyes turned to joy as <<they $g.target>> finally met
<<their $g.target>> new "owners". <<Their $g.target>> collar finally unbuckled,
your slavers celebrated with each other the successful rescue.
<<if $gOutcome == 'crit'>>
It seems <<rep $g.target>> mental fortitude holds during <<their $g.target>>
short period of slavery, and the slaver is ready for more action back at the fort.
<<else>>
It seems the short period of slavery weighted heavily on the <<uadjgood $g.target>>
slaver, however.
<</if>>
</p>
<<else>>
<p>
Your slavers could do nothing but watch as <<rep $g.target>> got acquintanced very well
with <<their $g.target>> new owner. It is unclear what fate awaited <<rep $g.target>>,
but probably nothing good...
<<uneedrescue $g.target>>.
</p>
<</if>><<run new setup.QuestTemplate(
'just_like_trained', /* key */
"Just Like Trained", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit'
],
1, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'trainer1': setup.qu.slavetrainer,
'trainer2': setup.qu.slavetrainer,
'guard': setup.qu.guard, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
], },
[ /* costs */
],
'Quest_just_like_trained',
setup.qdiff.easy30, /* difficulty */
[ /* outcomes */
[
'Quest_just_like_trainedCrit',
[
],
], [
'Quest_just_like_trainedCrit',
[
],
], [
'Quest_just_like_trainedCrit',
[
setup.qc.Injury('slave', 1), ],
], [
'Quest_just_like_trainedDisaster',
[
setup.qc.Injury('slave', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapeeasy, 1],
[setup.questpool.escapemedium, 1],
[setup.questpool.escapehard, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.HasTag('escaped_slave'),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced)
]), ],
[ /* expiration outcomes */
setup.qc.Injury('slave', 4), ],
)>><p>
<<rep $g.slave>> has escaped! Normally any respectable slaver would be worried that one of their slaves have escaped, but in this case you have full convidence that <<rep $g.slave>>
has been trained well enough that the slave will actually return back to your fort and beg to be re-enslaved.
You can ignore this quest and the slave will back for sure, but it's dangerous out there and your slave might sustain injuries when coming back. Hence if you want, you can try and send a group of slavers to ensure the safe unharmed return of <<rep $g.slave>>.
</p><p>
It did not take your slavers long at all to locate the obedient slave <<rep $g.slave>>. The slave happily offered <<their $g.slave>> neck to the slavers to be re-collared and brought back home to the dungeons —- their home.
</p>
<<if $gOutcome == 'failure'>>
<p>
Your slavers noticed some minor injuries on the slave, but nothing a week of rest can't fix.
</p>
<</if>><p>
Your slavers were terrible at their job and when they are still outside, <<rep $g.slave>> came knocking into your fort asking to be re-enslaved. <<rep $g.trainer1>> went back home reporting their failure only to be greeted by the sight of <<rep $g.slave>> sucking on your dick back at your fort.
</p><<run new setup.QuestTemplate(
'mindbroken_escapade', /* key */
"Mindbroken Escapade", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit'
],
1, /* weeks */
3, /* quest expiration weeks */
{ /* roles */
'spotter': setup.qu.spotter,
'informer1': setup.qu.informer,
'informer2': setup.qu.informer, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
], },
[ /* costs */
],
'Quest_mindbroken_escapade',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_mindbroken_escapadeCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_mindbroken_escapadeCrit',
[
],
], [
'Quest_mindbroken_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'), ],
], [
'Quest_mindbroken_escapadeFailure',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'),
setup.qc.Injury('spotter', 3),
setup.qc.Injury('informer1', 3),
setup.qc.Injury('informer2', 3), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapeeasy, 1],
[setup.questpool.escapemedium, 1],
[setup.questpool.escapehard, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('escaped_slave'),
setup.qres.Trait(setup.trait.training_mindbreak)
]), ],
[ /* expiration outcomes */
setup.qc.Injury('slave', 10),
],
)>><p>
<<rep $g.slave>> has escaped from your fort!
Normally, this would be much harder with any ordinary slave. But you remember that <<rep $g.slave>> has been mindbroken, and is likely just dazing out there unsure of where <<they $g.slave>> is supposed to go.
</p>
<p>
To recapture the slave, you will most likely need to gather information in the surrounding taverns —- whether anyone has spotted someone bearing similarity with <<rep $g.slave>>. With luck, your slavers will be able to locate the slave and bring <<them $g.slave>> home before anything bad befalls <<them $g.slave>>.
</p>
<p>
Although given enough time, hunger and thirst will surely drive the mindbroken
slave back to your fort. You can ignore this quest and the slave will return to your fort,
but most likely heavily malnourished.
</p><p>
Your slavers traveled from tavern to tavern <<uadv $g.informer1>> gathering as much information as possible about the slave. Finally, they were informed by a local farmer that someone suspicious has come to his farm and ate their animals' food. That does sound like what a hungry mindbroken slave would do, and your slavers followed the lead.
<p>
<p>
Lo and behold, <<rep $g.slave>> is there grazing along the other farm animals. Your slavers <<uadv $g.informer1>> collared back the slave to be brought to <<their $g.informer1>> usual home.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<rep $g.slave>> somehow bore some valuables with <<them $g.slave>>, unknown from which traveler they must have nabbed them from.
</p>
<</if>><p>
Your slavers traveled from tavern to tavern <<uadv $g.informer1>> gathering as much information as possible about the slave. Finally, they were informed by a local farmer that someone suspicious has come to his farm and ate their animals' food. That does sound like what a hungry mindbroken slave would do, and your slavers followed the lead.
<p>
<p>
Arriving at the farm, there were nothing but farm animals grazing around the farm. But <<rep $g.informer2>> managed to find signs that <<rep $g.slave>> were here at some point, eating from the through. Your slavers gathered more information until they finally found another lead towards <<rep $g.slave>>'s position, although the lead will still need to be re-pursued.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, your slavers were waylaid by brigands during their way back and came back home injured.
</p>
<</if>><<run new setup.QuestTemplate(
'misty_rescue', /* key */
"Faded Rescue", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit', 'danger'
],
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'corruptor': setup.qu.arcanedark,
'warrior': setup.qu.light_warrior,
'purifier': setup.qu.purify_assistant, },
{ /* actors */
'target': [
setup.qres.HasTag('captured_slaver'),
], },
[ /* costs */
],
'Quest_misty_rescue',
setup.qdiff.hardest58, /* difficulty */
[ /* outcomes */
[
'Quest_misty_rescueCrit',
[
setup.qc.TraumatizeRandom('target', 5), ],
], [
'Quest_misty_rescueCrit',
[
setup.qc.TraumatizeRandom('target', 10),
setup.qc.Corrupt('target'), ],
], [
'Quest_misty_rescueCrit',
[
setup.qc.Corrupt('warrior'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('target'),
setup.qc.Corrupt('target'),
setup.qc.TraumatizeRandom('target', 15), ],
], [
'Quest_misty_rescueCrit',
[
setup.qc.MissingUnit('warrior'),
setup.qc.MissingUnit('purifier'),
setup.qc.Corrupt('target'),
setup.qc.Corrupt('target'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.capturedhard, 1],
],
[ /* restrictions to generate */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('captured_slaver')
]), ],
[ /* expiration outcomes */
setup.qc.MissingUnitForever('target'), ],
)>><p>
You receive both a good and a bad news. The good news is that you have located your missing slaver <<rep $g.target>>, who very recently went missing during one of your quests. But here comes the bad news: <<rep $g.target>> has been kidnapped by the demons, who is now surely using the poor slaver as their plaything.
</p>
<p>
At this point, you might want to consider giving up and let the slaver be a lost cause. But if you are insistent in rescuing the poor slaver, you could try to breach the mist from somewhere within the eastern deserts where the mist is thick.
You will need a slaver preferably proficient in <<rep setup.trait.magic_dark>> to open the portal. Once the portal is open, send two slavers including a purifier to cleanse the slaver's surely corrupted body as much as possible.
If this goes well, you might just see <<rep $g.target>> return to your company...
</p>
<p>
<<dangertext 'Warning'>>: Ignoring this quest will ensure that you will
never see <<rep $g.target>> ever again...
</p><p>
Arriving at the ritual site, <<rep $g.corruptor>> channels dark energy to open the portal.
<<if $g.corruptor.isHasTrait('magic_dark')>>
<<Their $g.corruptor>> proficiency with <<rep setup.trait.magic_dark>> prevented any negative effects from happening so far.
<<else>>
<<run $g.corruptor.corrupt()>>
Since <<rep $g.corruptor>> is not proficient in <<rep setup.trait.magic_dark>>, the ritual corrupted the <<uadjper $g.corruptor>> slaver a little.
<</if>>
With the gates open, <<rep $g.warrior>> <<uadv $g.warrior>> jumped into the portal while <<rep $g.purifier>> followed closely behind.
</p>
<p>
Once inside, your slavers met with the most debauched scenery, as is norm in the land beyond the mist.
Ignoring all the demons and slaves around them, your slavers moved with a singular purpose of location <<rep $g.target>>. Scouring room through room, looking at all the broken slaves caged inside tiny compartments, they finally found <<rep $g.target>> being contained in one of the compartments, apparently designated as the fresh processing area. <<rep $g.warrior>> swiftly subdued the guard demons as <<rep $g.purifier>> unlocked the compartment.
<<if $g.purifier.isHasTrait('magic_fire')>>
Using <<their $g.purifier>> mastery over <<rep setup.trait.magic_fire>>, <<rep $g.purifier>> cleansed as much corruption as possible from <<rep $g.target>>.
<<else>>
<<run $g.target.corrupt()>>
<<rep $g.purifier>> is not proficient in <<rep setup.trait.magic_fire>>, and was only able to cleanse so much of the corruption flowing through <<rep $g.target>>.
<</if>>
Sensing their time is running out, your slavers
rushed back through the slew of demons back to the portal.
<<if $gOutcome == 'disaster'>>
They managed to enter the portal, but as they throw <<rep $g.target>> inside the portal, a large bolt of dark energy hit the portal, closing it for good. <<rep $g.warrior>> and <<utheirrel $g.warrior $g.purifier>> <<rep $g.purifier>> are trapped inside, with only <<rep $g.target>> successfully escaped the fade.
<<uneedrescue $g.warrior>>. <<uneedrescue $g.purifier>> before they are corrupted beyond recognition...
<<else>>
<<if $gOutcome == 'crit'>>
They skillfully dodged most of the attacks threwn on them, which ended up hitting many slaves around them.
<<elseif $gOutcome == 'success'>>
A few stray hits grazed on the slavers, but there were no major damage.
<<else>>
Your slavers took a few dark spells threwn at them, ended up slightly corrupted.
<</if>>
Exiting the portal, your slavers found themselves back at the desert,
with <<rep $g.target>> successfully rescued.
After a short celebration they went back home to the fort to recover from the ordeal.
<</if>>
</p><<run new setup.QuestTemplate(
'fleshshape_anus_loosen', /* id */
'Flesh Shaping: Loosen Anus', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeAnusLoosen', /* description */
setup.qdiff.normal49,
[
[
'FleshShapeAnusLoosenCrit',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
]
],
[
'FleshShapeAnusLoosenSuccess',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
],
],
[
'FleshShapeAnusLoosenFailure',
[],
],
[
'FleshShapeAnusLoosenDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Loosen the slave's anus to accomodate larger, longer dick.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_anus_tighten', /* id */
'Flesh Shaping: Tighten Anus', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[ /* costs */
setup.qc.LoseItem(setup.item.potion_tight, 1),
],
'FleshShapeAnusTighten', /* description */
setup.qdiff.normal50,
[
[
'FleshShapeAnusTightenCrit',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
]
],
[
'FleshShapeAnusTightenSuccess',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
],
],
[
'FleshShapeAnusTightenFailure',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
setup.qc.Injury('trainee', 4),
],
],
[
'FleshShapeAnusTightenDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Tighten the slave's anus from what gaping hole it currently is.
</p><p>
The orifice tightening procedure was very successful, no small thanks to your <<repfull $g.head>>
masterful handling of the rare <<rep setup.item.potion_tight>>.
The slave's anus has been re-tightened back to near virgin state.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
But <<rep $g.trainee>> was severely damaged by the invasive procedure, and will need some time to rest.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_balls_grow', /* id */
'Flesh Shaping: Balls Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeBallsGrow', /* description */
setup.qdiff.normal46,
[
[
'FleshShapeBallsGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.balls_large),
]
],
[
'FleshShapeBallsGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.balls_large),
],
],
[
'FleshShapeBallsGrowFailure',
[],
],
[
'FleshShapeBallsGrowDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Grows the size of the slave's balls.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_balls_shrink', /* id */
'Flesh Shaping: Balls Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeBallsShrink', /* description */
setup.qdiff.normal46,
[
[
'FleshShapeBallsShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.balls_large.getTraitGroup()),
]
],
[
'FleshShapeBallsShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.balls_large.getTraitGroup()),
],
],
[
'FleshShapeBallsShrinkFailure',
[],
],
[
'FleshShapeBallsShrinkDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Shrinks the slave's balls.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_breast_grow', /* id */
'Flesh Shaping: Breast Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeBreastGrow', /* description */
setup.qdiff.normal44,
[
[
'FleshShapeBreastGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.breast_large),
]
],
[
'FleshShapeBreastGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.breast_large),
],
],
[
'FleshShapeBreastGrowFailure',
[],
],
[
'FleshShapeBreastGrowDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Grows the size of the slave's breasts.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_breast_shrink', /* id */
'Flesh Shaping: Breast Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeBreastShrink', /* description */
setup.qdiff.normal44,
[
[
'FleshShapeBreastShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.breast_large.getTraitGroup()),
]
],
[
'FleshShapeBreastShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.breast_large.getTraitGroup()),
],
],
[
'FleshShapeBreastShrinkFailure',
[],
],
[
'FleshShapeBreastShrinkDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Shrinks the slave's breasts.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_dick_grow', /* id */
'Flesh Shaping: Dick Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeDickGrow', /* description */
setup.qdiff.normal42,
[
[
'FleshShapeDickGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.dick_large),
]
],
[
'FleshShapeDickGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.dick_large),
],
],
[
'FleshShapeDickGrowFailure',
[],
],
[
'FleshShapeDickGrowDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Grows both the length and girth of the slave's dick.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_dick_shrink', /* id */
'Flesh Shaping: Dick Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeDickShrink', /* description */
setup.qdiff.normal42,
[
[
'FleshShapeDickShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.dick_large.getTraitGroup()),
]
],
[
'FleshShapeDickShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.dick_large.getTraitGroup()),
],
],
[
'FleshShapeDickShrinkFailure',
[],
],
[
'FleshShapeDickShrinkDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Shrinks both the length and girth of the slave's dick.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_height_grow', /* id */
'Flesh Shaping: Height Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeHeightGrow', /* description */
setup.qdiff.normal40,
[
[
'FleshShapeHeightGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.height_tall),
]
],
[
'FleshShapeHeightGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.height_tall),
],
],
[
'FleshShapeHeightGrowFailure',
[],
],
[
'FleshShapeHeightGrowDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Increases the slave's height.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_height_shrink', /* id */
'Flesh Shaping: Height Shrink', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeHeightShrink', /* description */
setup.qdiff.normal40,
[
[
'FleshShapeHeightShrinkCrit',
[
setup.qc.Trait('trainee', setup.trait.height_short),
]
],
[
'FleshShapeHeightShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.height_short),
],
],
[
'FleshShapeHeightShrinkFailure',
[],
],
[
'FleshShapeHeightShrinkDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Decreases the slave's height.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_muscle_grow', /* id */
'Flesh Shaping: Muscle Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeMuscleGrow', /* description */
setup.qdiff.normal48,
[
[
'FleshShapeMuscleGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
]
],
[
'FleshShapeMuscleGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
],
],
[
'FleshShapeMuscleGrowFailure',
[],
],
[
'FleshShapeMuscleGrowDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Grows the size of the slave's muscles.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_muscle_shrink', /* id */
'Flesh Shaping: Muscle Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeMuscleShrink', /* description */
setup.qdiff.normal48,
[
[
'FleshShapeMuscleShrinkCrit',
[
setup.qc.Trait('trainee', setup.trait.muscle_weak),
]
],
[
'FleshShapeMuscleShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_weak),
],
],
[
'FleshShapeMuscleShrinkFailure',
[],
],
[
'FleshShapeMuscleShrinkDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Shrinks the slave's muscles.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_vagina_loosen', /* id */
'Flesh Shaping: Loosen Vagina', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'FleshShapeVaginaLoosen', /* description */
setup.qdiff.normal49,
[
[
'FleshShapeVaginaLoosenCrit',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
]
],
[
'FleshShapeVaginaLoosenSuccess',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
],
],
[
'FleshShapeVaginaLoosenFailure',
[],
],
[
'FleshShapeVaginaLoosenDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Loosen the slave's vagina to accomodate larger, longer dick.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<run new setup.QuestTemplate(
'fleshshape_vagina_tighten', /* id */
'Flesh Shaping: Tighten Vagina', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.fleshshape_head,
'assistant1': setup.qu.fleshshape_assistant,
'assistant2': setup.qu.fleshshape_assistant,
},
{ /* generated actors */
'trainee': null,
},
[ /* costs */
setup.qc.LoseItem(setup.item.potion_tight, 1),
],
'FleshShapeVaginaTighten', /* description */
setup.qdiff.normal50,
[
[
'FleshShapeVaginaTightenCrit',
[
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
]
],
[
'FleshShapeVaginaTightenSuccess',
[
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
],
],
[
'FleshShapeVaginaTightenFailure',
[],
],
[
'FleshShapeVaginaTightenDisaster',
[
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 1),
setup.qc.Injury('assistant2', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Tighten the slave's vagina from what gaping hole it currently is.
</p><p>
The orifice tightening procedure was very successful, no small thanks to your <<repfull $g.head>>
masterful handling of the rare <<rep setup.item.potion_tight>>.
The slave's vagina has been re-tightened back to near virgin state.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
But <<rep $g.trainee>> was severely damaged by the invasive procedure, and will need some time to rest.
</p><p>
There was an accident during the process which causes some of the alchemical ingredients
to combust, injuring all parties involved.
</p><<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.magic_wind,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
], /* critical traits */
[
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.per_masochistic,
setup.trait.per_lustful,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_aberration', /* key */
'Bounty Hunt: Aberration', /* Title */
'darko', /* author */
['forest', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
},
[ /* costs */
],
'QuestBountyHuntAberration', /* passage description */
setup.qdiff.easy16, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntAberrationCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('elf', 10),
],
],
[
'QuestBountyHuntAberrationCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('elf', 10),
],
],
[
'QuestBountyHuntAberrationFailure',
[
],
],
[
'QuestBountyHuntAberrationDisaster',
[
setup.qc.Injury('merc1', 1),
setup.qc.Injury('merc2', 1),
setup.qc.Trait('merc1', setup.trait.anus_loose),
setup.qc.IfActorSatisfyThen(
'merc1',
setup.qs.trait_vagina,
setup.qc.Trait('merc1', setup.trait.vagina_loose)),
setup.qc.Trait('merc2', setup.trait.anus_loose),
setup.qc.IfActorSatisfyThen(
'merc2',
setup.qs.trait_vagina,
setup.qc.Trait('merc2', setup.trait.vagina_loose)),
],
],
],
[[setup.questpool.forest, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The western forests is the home to two main races: the nekos and the elves.
But the forests also hosts a myriad of other creatures.
One of the most infamous inhabitant of the forest is known as simplly as
the aberration:
A freakish amalgamation of countless tentacles seemingly spawning from a
central core.
This once-plant has evolved its
vines into a specific appendage specialized for absorbing
liquid from living creatures, to survive during times when there are scarce rain.
Fortunately, the attacks are usually non-lethal, although it always leave the victims
gaping and spent.
</p>
<p>
Every now and then, a group of these aberrations can occupy a location far
too close to the homes of the nekos and the elves.
They would invite adventurers on a mission to slay these beasts, rewarding
wealth in exchange.
You can try to send a group of slavers to slay these beasts, although
there is little room for imagination of what could happen to them should
they fail...
</p><p>
<<rep $g.merc1>> <<uadv $g.merc1>> led the team deep into the forests.
They finally appeared in what seems to be the den of the creature.
<<if $g.merc1.isHasTrait('magic_fire')>>
As much as <<rep $g.merc1>> would like to use <<their $g.merc1>> <<rep setup.trait.magic_fire>> to burn the nest,
<<elseif $g.merc2.isHasTrait('magic_fire')>>
As much as <<rep $g.merc2>> would like to use <<their $g.merc2>> <<rep setup.trait.magic_fire>> to burn the nest,
<<else>>
As much as your slavers would like to simply slay off all these creatures,
<</if>>
some of the aberrations are holding a few elves hostage, each deep within the creature's embrace as their juices
are sucked from all their available openings.
Your slavers decided to think of another way to eliminate the aberrations without harming
the victims, perhaps thinking they could make use of the victims later.
</p>
<p>
Fortunately, <<rep $g.merc1>> came up with a
<<if $g.merc1.isHasTrait('skill_creative')>>creative<</if>> plan
to drench the creatures in water from a nearby stream.
It is common knowledge that the creature is incredibly weak to water, since
with enough water it no longer needs to absorb the liquids from their victims.
The plan went without a hitch as your slavers carried buckets and buckets of water
and drenched the aberrations one by one, making them release their corresponding victim, who is
also drenched in water.
It was then easy work for your slavers to slay the "drunken" aberrations one by one.
</p>
<p>
<<rep $g.merc1>> contemplated on enslaving the victims, but they are far too
broken and gaped to be made into any useful slave<<if !$g.merc1.isHasTrait('per_chaste')>>,
<<if $g.merc1.isHasDick()>>
although it didn't stop <<rep $g.merc1>> from trying to insert <<their $g.merc1>> <<udick $g.merc1>>
into the cavernous hole<<else>>
although it didn't stop <<rep $g.merc1>> from trying to insert a wooden makeshift dildo
into the cavernous hole<</if>><</if>>.
They ended up returning the victims back to the settlements,
<<if $gOutcome == 'crit'>>
earning them a bigger reward than what was promised.
<<else>>
although it was unclear what the settlements could do for these poor souls.
<</if>>
</p><p>
Your slavers were too late --- by the time they arrived to take up the quest, the beasts
were already slain by another mercenary company.
</p>
<p>
You keep hearing rumors of this mercenary company specializing in all things tentacles.
You wonder if this is one of their work.
</p><p>
During the mission, your slavers were ambushed by one such aberration, who
waited in the ground masquerading as a bush before lunging into your slavers.
Once the slavers are immobilized, the aberration mindlessly proceed to violate
your slavers holes, absorbing as much juice until it is full.
Suffice to say, after such an experience your slavers tightness will be a complete
distant memory.
</p><<run new setup.QuestTemplate(
'forbidden_fruit', /* key */
'Forbidden Fruit', /* Title */
'darko', /* author */
['transformation', 'forest', 'trait', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'biologist': setup.qu.biologist,
'scout1': setup.qu.scout_forest,
'scout2': setup.qu.scout_forest,
},
{ /* actors */
},
[ /* costs */
],
'QuestForbiddenFruit', /* passage description */
setup.qdiff.normal18, /* difficulty */
[ /* outcomes */
[
'QuestForbiddenFruitCrit',
[
setup.qc.MoneyNormal(),
setup.ch.tightenanus('scout1'),
setup.ch.tightenvagina('scout1'),
setup.ch.tightenanus('scout2'),
setup.ch.tightenvagina('scout2'),
setup.qc.Ire('elf', 1),
],
],
[
'QuestForbiddenFruitSuccess',
[
setup.qc.MoneyCustom(2000),
setup.qc.Ire('elf', 1),
],
],
[
'QuestForbiddenFruitFailure',
[
setup.ch.shrinkdick('scout1'),
setup.ch.growbreast('scout1'),
setup.ch.shrinkdick('scout2'),
setup.ch.growbreast('scout2'),
],
],
[
'QuestForbiddenFruitDisaster',
[
setup.ch.shrinkdick('scout1'),
setup.ch.growbreast('scout1'),
setup.ch.shrinkdick('scout2'),
setup.ch.growbreast('scout2'),
setup.ch.shrinkdick('biologist'),
setup.ch.growbreast('biologist'),
],
],
],
[[setup.questpool.forest, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
There are several subtribes of the elves who worship trees.
Some of them worship mundane trees, but one particular elven cult
worships the so-called "Tree of Fertility".
These rare trees produce a fruit who is said to grant whoever
consumed it sexual youth.
Whether true or not, there are sure people who would pay a lot
for such fruit.
You can try to send your slavers into the forest to locate them.
Just make sure your slavers keep far, far away from the other types of fruits...
</p><p>
After a few days of searching, <<rep $g.scout1>> managed to stumble
into a clearing with nothing but a single large tree in the middle of the clearing.
The tree is full of "endowed-looking" fruits that <<rep $g.biologist>> is so
<<uadv $g.biologist>>
sure that this is the fruit they are looking for.
Your slavers then proceed to harvest the tree.
</p>
<p>
Nobody in the right mind would eat such a degenerately shaped fruit, or so
<<rep $g.biologist>> thought. But both of your scouts
have different idea.
The effect might not be noticable from the outside, but <<rep $g.scout1>> can
feel a certain part of their body returned to youth.
Fortunately there are enough of the fruits that your slavers still make a tidy amount of profit
after selling the ones your scoutes did not touch.
</p><p>
After a few days of searching, <<rep $g.scout1>> managed to stumble
into a clearing with nothing but a single large tree in the middle of the clearing.
But they were not alone.
Surrounding the tree were numerous elves engaged in a debauched ritual.
These elves treat the tree as a god and its fruit worthy as a sexual partner,
and the tree's unfortunately shaped fruits were inserted into numerous places a fruit should
have never gone into.
Your slavers waited out until all the elves are spent from the debauchery before
sneaking in and gathering some of the unpicked fruits for sale.
They contemplated selling the fruits dumped in the elves' sexual liquids,
but given their current stenches it was wise of <<rep $g.biologist>> to
<<uadv $g.biologist>> advise not to.
</p><p>
After a few days of searching, <<rep $g.scout1>> managed to stumble
into a clearing with nothing but a single large tree in the middle of the clearing.
Excited, <<rep $g.scout1>> and <<rep $g.scout2>> <<uadv $g.scout1>> sprinted into the tree
not realizing that <<rep $g.biologist>> mistook the tree with another close relative
of the tree, but with a completely different effect.
With <<rep $g.biologist>> far behind them, the scouts proceed to grab the fruit and
taste them, first one fruit, two fruits, until several were already consumed by the time
<<rep $g.biologist>> realized the mistake.
</p><p>
After a few days of searching, <<rep $g.scout1>> managed to stumble
into a clearing with nothing but a single large tree in the middle of the clearing.
Excited, <<rep $g.scout1>> and <<rep $g.scout2>> <<uadv $g.scout1>> sprinted into the tree
not realizing that <<rep $g.biologist>> mistook the tree with another close sibling
of it.
<<rep $g.biologist>> joins in the excitement and
taste the fruits together, first one fruit, two fruits, until several were already consumed by the time
<<rep $g.biologist>> realized the mistake.
</p><<set _cursebreaker = new setup.UnitCriteria(
null, /* key */
'Cursebreaker', /* title */
[ /* critical traits */
setup.trait.per_humble,
setup.trait.magic_earth,
setup.trait.magic_dark_master,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_proud,
setup.trait.magic_wind,
setup.trait.per_lustful,
setup.trait.per_masochistic,
],
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
arcane: 3.0,
}
)>>
<<run new setup.UnitGroup(
'quest_nekostatue',
'neko statue',
[
[setup.unitpool.race_neko_male, 1],
],
0,
[
setup.qc.TraitReplace('unit', setup.trait.muscle_strong),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.mouth_neko),
setup.qc.TraitReplace('unit', setup.trait.arms_neko),
setup.qc.TraitReplace('unit', setup.trait.legs_neko),
setup.qc.TraitReplace('unit', setup.trait.body_neko),
]),
setup.qc.ResetInnateTraits('unit'),
]
)>>
<<run new setup.UnitGroup(
'quest_nekostatueleader',
'neko statue leader',
[
[setup.unitpool.race_neko_male, 1],
],
0,
[
setup.qc.TraitReplace('unit', setup.trait.muscle_verystrong),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.mouth_neko),
setup.qc.TraitReplace('unit', setup.trait.arms_neko),
setup.qc.TraitReplace('unit', setup.trait.legs_neko),
setup.qc.TraitReplace('unit', setup.trait.body_neko),
]),
setup.qc.ResetInnateTraits('unit'),
]
)>>
<<run new setup.QuestTemplate(
'neko_statue', /* key */
'Moai Field', /* Title */
'darko', /* author */
['forest', 'maleonly', 'anthro', 'unit'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'cursebreaker1': _cursebreaker,
'cursebreaker2': _cursebreaker,
'scout': setup.qu.scout_forest,
},
{ /* actors */
'statue': setup.unitgroup.quest_nekostatue,
'statueleader': setup.unitgroup.quest_nekostatueleader,
},
[ /* costs */
],
'QuestNekoStatue', /* passage description */
setup.qdiff.hard19, /* difficulty */
[ /* outcomes */
[
'QuestNekoStatueCrit',
[
setup.qc.Slave(
'statueleader',
'was an neko soldier in ancient names who are captured in long past war and turned into a living fuckable statue.'),
],
],
[
'QuestNekoStatueSuccess',
[
setup.qc.Slave(
'statue',
'was an neko of ancient times whose army lost the war, captured, then turned into a living fuckable statue.'),
setup.qc.MoneySmall(),
],
],
[
'QuestNekoStatueFailure',
[
],
],
[
'QuestNekoStatueDisaster',
[
setup.qc.Injury('cursebreaker1', 4),
setup.qc.Injury('cursebreaker2', 3),
],
],
],
[[setup.questpool.forest, 60],], /* quest pool and rarity */
[ /* prerequisites to generate */
setup.qres.QuestUnique(),
],
)>><p>
In ancient times, the elves and the nekos were engaged in a length war.
While those empires has long gone, the remnants are still abundant
in the western forests.
One of the most famous are the so-called moai filled, where statues
of ancient neko soldiers were posed and displayed in various positions
on an empty meadow.
While the elves look quite similar like modern elves,
ancient nekos often still retain strong heritage to the <<lore race_tigerkin>>.
They often look quite different, with some sporting a full furry body.
</p>
<p>
One of your contacts has informed you that those statues were supposedly ancient
neko soldiers who were defeated by the elven army, and turned into a living statue.
The statue post that held them up is not actually a post, but rather, a long
stick with a huge dildo shoved up their asses before they are frozen in space.
Your contact has mentioned that there still exist some elven camps who are privy
to the rituals requied to undo these spells.
</p>
<p>Having a neko as a slave is always a good thing, and you wonder if it is worth
risking your slavers on such a weird mission.
</p><p>
After successfully learning the rituals required to undo the spells, your
scout <<rep $g.scout>>
proceed to
<<uadv $g.scout>>
scour the forest for one of these
moai fields. Upon finding one, they found a magnificent specimen of a neko
with muscle covering every inch of <<their $g.statueleader>> body.
Your slavers inspected the statue closer, and found the pole inserted right
up the statue's ass.
</p>
<p>
According to the information they receive, the dildo is the key to undo the spell.
In order to break the spell, one must overwhelm the spell by making the dildo
too wide to contain the spell. The easiest way is to insert another dildo to the
statue's ravaged hole, or in some case, your slaver's dick --- effectively
double penetrating the statue.
</p>
<p>
<<rep $g.cursebreaker1>> volunteered and used <<their $g.cursebreaker1>>
<<if $g.cursebreaker1.isHasTrait(setup.trait.dick_tiny)>>
dick
<<else>>
arms
<</if>>
to double penetrate the statue.
Within seconds, the statue's outward ceramic shatters revealing the magnificent
specimen of a neko, who immediately collapsed unconscious, but breathing.
Who knows how long such a neko has been a statue like this, but the experience
surely must have drained both their hole's tightness and their mind function.
Your slavers gather the new slave as well as any valuables around to bring back to your fort.
</p><p>
After successfully learning the rituals required to undo the spells, your
scout <<rep $g.scout>> proceed to
<<uadv $g.scout>>
scour the forest for one of these
moai fields. Upon finding one, they search for a relatively unscatched statue.
Finding one,
your slavers inspected the statue closer, and found the pole inserted right
up the statue's ass.
</p>
<p>
According to the information they receive, the dildo is the key to undo the spell.
In order to break the spell, one must overwhelm the spell by making the dildo
too wide to contain the spell. The easiest way is to insert another dildo to the
statue's ravaged hole, or in some case, your slaver's dick --- effectively
double penetrating the statue.
</p>
<p>
<<rep $g.cursebreaker1>> volunteered and used <<their $g.cursebreaker1>>
<<if $g.cursebreaker1.isHasTrait(setup.trait.dick_tiny)>>
dick
<<else>>
arms
<</if>>
to double penetrate the statue.
Within seconds, the statue's outward ceramic shatters revealing the
neko inside, who immediately collapsed unconscious, but breathing.
Who knows how long such a neko has been a statue like this, but the experience
surely must have drained both their hole's tightness and their mind function.
Your slavers gather the new slave as well as any valuables around to bring back to your fort.
</p><p>
Even though your slavers managed to
learn the rituals required to undo the spells, your
scout <<rep $g.scout>> were not able to find any of the moai statue fields.
</p><p>
Your slavers were too aggressive trying to learn how to undo the spell,
which draws the ire of one particularly evil elf.
She tricked your slavers, pretending to teach them how to undo the spell,
while in reality casting the stonification spell directly on your slavers.
Fortunately, the spell's power has been lost over time, and the partly
stoned dicks and breasts of your slavers will return to normal in time.
</p><<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.magic_earth,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_humankingdom,
setup.trait.magic_wind,
],
setup.qu.trader,
)
)>>
<<run new setup.QuestTemplate(
'trading_mission_forest', /* key */
'Trading Mission: Forest', /* Title */
'darko', /* author */
['forest', 'money'], /* tags */
1, /* weeks */
4, /* quest expiration weeks */
{ /* roles */
'trader1': _trader,
'trader2': _trader,
'guard': setup.qu.guard,
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.5),
],
'QuestTradingMissionForest', /* passage description */
setup.qdiff.easy17, /* difficulty */
[ /* outcomes */
[
'QuestTradingMissionForestCrit',
[
setup.qc.MoneyNormal(3),
setup.qc.Favor('elf', 30),
],
],
[
'QuestTradingMissionForestSuccess',
[
setup.qc.MoneyNormal(2),
setup.qc.Favor('elf', 30),
],
],
[
'QuestTradingMissionForestFailure',
[
setup.qc.MoneyNormal(0.1),
],
],
[
'QuestTradingMissionForestDisaster',
[
setup.ch.loosenanus('guard'),
setup.ch.loosenvagina('guard'),
setup.qc.Injury('guard', 1),
],
],
],
[[setup.questpool.forest, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The residents of the eastern forests, mostly elves are nekos, does not have good relationship
with the Kingdom of Tor.
This makes their trade situation awkward, as the forest they reside lacks in
some critical materials such as iron.
These settlements often request trade caravans from faraway land, and compensating them greatly
if the caravan arrived unscathed.
</p>
<p>
There is money here, if you are willing to act as a mediator. Buy some iron from the city
and sell them to the forest settlements.
This would definitely net your company a tidy profit, if you are willing to risk
exposing your slavers to whatever monsters residing in the forests...
</p><p>
<<rep $g.trader1>> and <<utheirrel $g.trader1 $g.trader2>> <<rep $g.trader2>> managed to
<<uadv $g.trader1>>
find a very cheap supplier of iron in the city.
Thanks to this shrewd deal, your slavers
made a huge amount of profit, more than quadrupling
the amount of investment they put.
With such a silly amount of profit, you did not begrudge your slavers at all
as they pocketed some of the money for themselves.
</p><p>
The trading mission went about as well as expected, with your slavers
making tidy amount of profit from their shrewd deal making.
The only event of note is their encounter with a particularly nasty shapeshifting monster
in the forests, who is rumored to often masquerade as an elf.
But fortunately <<rep $g.guard>> managed to see through the disguise,
saving your slavers from a surely horrible fate.
</p><p>
The vast western forests trail marker is often worn down from severe weather.
This caused your slavers to get completely lost, never actually arriving in the
settlements with the cargo of iron they procured from the city.
They eventually gave up and returned back to the fort, pawning the iron for whatever
price they could find.
</p><p>
Your slavers had a close encounter with a creature masquerading as an elf
who wants to guide you to his village.
But none of the your slavers were able to see through the disguise, so they
accepted.
The creature lured the team into a swamp, where it then, to the horror of your slavers,
reverted into its original form while grabbing <<rep $g.guard>> unfortunate
body. <<rep $g.guard>>'s holes were completely ravaged by the creature's
numerous liquid-absorbing tentacles spawning from the swamp.
Your other slavers watched in horror as <<rep $g.guard>> holes were ravaged
over and over again until the creature's appetite is satisfied and <<rep $g.guard>>'s
body is thrown aside.
<<rep $g.guard>> will need some time to recover from such experience.
</p><<set _criteriacatnipper = new setup.UnitCriteria(
null, /* key */
'Catnipper', /* name */
[
setup.trait.per_deceitful,
setup.trait.skill_hypnotic,
setup.trait.skill_animal,
setup.trait.magic_earth,
],
[
setup.trait.race_neko,
setup.trait.magic_wind,
setup.trait.per_honest,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 2,
}
)>>
<<run new setup.QuestTemplate(
'catnapping', /* key */
'Catnapping', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'catnipper': _criteriacatnipper,
'kidnapper1': setup.qu.kidnapper,
'kidnapper2': setup.qu.kidnapper, },
{ /* actors */
'neko': setup.unitgroup.neko, },
[ /* costs */
],
'Quest_catnapping',
setup.qdiff.normal19, /* difficulty */
[ /* outcomes */
[
'Quest_catnappingCrit',
[
setup.qc.Slave('neko', 'was an ordinary neko living in the forests who put their trust in the wrong catnipper', undefined),
setup.qc.Ire('neko', 1),
setup.qc.MoneyCustom(2000),
],
], [
'Quest_catnappingCrit',
[
setup.qc.Ire('neko', 1),
setup.qc.Slave('neko', 'was an ordinary neko living in the forests who put their trust in the wrong catnipper', undefined), ],
], [
'Quest_catnappingFailure',
[
],
], [
'Quest_catnappingDisaster',
[
setup.qc.Injury('catnipper', 2),
setup.qc.Injury('kidnapper1', 2),
setup.qc.Injury('kidnapper2', 2), ],
], ],
[
[setup.questpool.forest, 1],
], /* quest pool and rarity */
[ /* restrictions to generate */
setup.qres.QuestUnique(),
],
)>><p>There is always demand for neko slaves —- with cute ears and tails, and occasionally cat-like eyes, they make adorable pets for many nobles in the city.</p>
<p>
According to the realm history, the nekos originally evolved from cats.
A particular genetic trait they share to this very day is their
attraction to catnips,
and you have hatched a plan based on this.
Using a specialized slaver, you can use a catnip to lure one of the nekos
into the open fields.
Once they are out in the open, far away from civilization, it would
be a piece of cake to have two other slavers kidnap the addled slave and bring them home.
</p><p>
Your slavers had to travel to great length to find a catnip --- apparently the neko population
has driven catnip almost extinct from their surrounding region.
With a catnip in hand,
<<rep $g.catnipper>> <<uadv $g.catnipper>> went into a small neko tavern.
<<if $g.catnipper.isHasTrait('race_neko')>>
Despite being a little addled by the catnip <<themself $g.catnipper>>, the neko slaver <<rep $g.catnipper>>
<<else>>
Your <<urace $g.catnipper>> slaver
<</if>>
managed to lure out one of the neko patron.
<<if $gOutcome == 'crit'>>
<<rep $g.catnipper>> even somehow managed to convince the potential slave to bring along
some of <<their $g.neko>> belongings.
<</if>>
</p>
<p>
It seems <<rep $g.catnipper>> has selected a particularly sensitive neko as <<they $g.neko>>
walked to the clearing in an almost trance-like state.
Away from the village and civilization, <<rep $g.kidnapper1>> and <<utheirrel $g.kidnapper1 $g.kidnapper2>>
made quick work subduing the addled neko.
The neko will make a fine slave once you teach <<them $g.neko>> the proper behavior of a neko slave<<if $gOutcome == 'crit'>>,
while <<their $g.neko>> now-useless belongings are pawned for a decent sum<</if>>.
</p>
<<if $g.catnipper.isHasTrait('race_neko')>>
<p>
The catnipper apparently also put <<rep $g.catnipper>> into a similar trance,
and your other slavers ended up having to carry the unresponsive
<<rep $g.catnipper>> next to the slave <<them $g.neko>> back home.
<<run setup.qc.TraumatizeRandom('catnipper', 2).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('catnipper', 8).apply($gQuest)>>
</p>
<</if>><p>
Unfortunately, your slavers never found any unsuspecting neko victim to lure using their catnip. After spending a fruitless week they decided to give up and head home.</p><p>
The plan backfired as <<rep $g.catnipper>> somehow were lured by a group of unscrupulous nekos, who proceed to attempt to tame your slavers and make <<rep $g.catnipper>> into their cumslut.
<<rep $g.kidnapper1>> and <<rep $g.kidnapper2>> had to risk their lives "kidnapping" <<rep $g.catnipper>> from the nekos, before any permanent mental changes were inflicted upon <<rep $g.catnipper>>.
</p><<run new setup.QuestTemplate(
'eternal_youth2', /* key */
'Eternal Youth', /* Title */
'darko', /* Author */
[ 'forest',
'veteran',
'item'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'biologist': setup.qu.biologist,
'alchemist': setup.qu.alchemist,
'scout': setup.qu.scout_forest, },
{ /* actors */
},
[ /* costs */
],
'Quest_eternal_youth2',
setup.qdiff.harder40, /* difficulty */
[ /* outcomes */
[
'Quest_eternal_youth2Crit',
[
setup.qc.Item(setup.item.reset_potion),
setup.qc.Item(setup.item.reset_potion),
setup.qc.Item(setup.item.reset_potion),
],
], [
'Quest_eternal_youth2Success',
[
setup.qc.Item(setup.item.reset_potion),
setup.qc.Item(setup.item.reset_potion),
setup.qc.Item(setup.item.healing_potion),
setup.qc.Injury('scout', 1), ],
], [
'Quest_eternal_youth2Failure',
[
setup.qc.Item(setup.item.healing_potion),
setup.qc.Injury('biologist', 4),
setup.qc.Injury('alchemist', 4),
setup.qc.Injury('scout', 4),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('scout', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('scout', setup.trait.anus_gape), ],
], [
'Quest_eternal_youth2Disaster',
[
setup.qc.MissingUnit('scout'),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('alchemist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('alchemist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('alchemist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('alchemist', setup.trait.anus_gape),
setup.qc.Injury('biologist', 6),
setup.qc.Injury('alchemist', 6), ],
], ],
[
[setup.questpool.forest, 50],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
Deep within the western forests, there are rumors of an elf community full of gorgeous men and women. While enslaving these beauties are certainly a profitable endeavor, it is rumored that the source of their beauty is their everlasting youth, granted by a certain fruit hidden deep in the forests.
</p>
<p>
You could try to send a team of slavers to obtain some of these fruits —- they will certainly sell for a very high price, but they could also return the youth of some of your slavers (or even yourself!). This effectively will reset their levels, allowing them to relearn skills as they wish. Still, such a fruit must be a highly guarded secret of the elves —- finding it will be a monumental challenge, let along harvesting it and turning the fruit into a potion.
</p>
<p>
<<dangertext "WARNING">>: This is a dangerous veteran quest. Be prepared for the worst!
</p><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove where naked elfs gather and seemingly play in the water without a care in the world. Your slavers waited until the elves finished playing, and instead of drooling over their youthful bodies, your slavers somehow managed to keep their focus and scour the area for the rumored plant. It is then that the found the source —- above the water spring leading into the grove, a magnificent tree grows overlooking your slavers.
</p>
<p>After taking in the beauty of the tree, <<rep $g.biologist>> managed to
<<uadv $g.biologist>>
gather some of the fruits. They brought these fruits home, which <<rep $g.alchemist>> able to efficiently use and ultimately produce two bottles of <<rep setup.item.reset_potion>>. These rare potions are able to restore your slaver's youth —- or you could also sell them for a really high price.</p><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove where naked elfs gather and seemingly play in the water without a care in the world. Your slavers waited until the elves finished playing —- after watching the debauchery unfold and the elves finally left the grove, your slavers scour the area for the rumored plant. They were unable to find the source, but from a river leading into the grove floats a single, odd looking fruit.
</p>
<p><<rep $g.biologist>> were
<<uadv $g.biologist>>
convinced that this is the fruit they are after —- and <<they $g.biologist>> is right. They brought these fruits home, which <<rep $g.alchemist>> able to use and to produce a bottle of <<rep setup.item.reset_potion>>. This rare potion is able to restore your slaver's youth —- or you could also sell this for a really high price.</p><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove where naked elfs gather and seemingly play in the water without a care in the world. Your slavers waited until the elves finished playing —- after watching the debauchery unfold and the elves finally left the grove, your slavers scour the area for the rumored plant. Unable to find anything resembling the legendary fruit, your slavers were about to give up when <<rep $g.scout>> fell into the grove. <<rep $g.biologist>> attempted to rescue <<rep $g.scout>>, but the attempt prove futile, as something squishy and tangly seems to tie <<rep $g.scout>> to the grove. A sudden thrust into <<rep $g.scout>>'s rear cavities elicit a loud moan from <<rep $g.scout>>, and before <<rep $g.biologist>> could react, multiple green vines bound them together inside the grove. <<rep $g.alchemist>> watched in horror as the vines raped both <<rep $g.scout>> and <<rep $g.biologist>>, assaulting all their holes with green vines.</p>
<p>
After few long hours, the plant, seemingly satisfied, finally released your slavers. Their holes are ruined now, if they were not already ruined before. Still, <<rep $g.alchemist>> managed to concoct some healing water to soothe <<their $g.alchemist>> comrades before going back home with some leftover.</p><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove where naked elfs gather and seemingly play in the water without a care in the world. Your slavers waited until the elves finished playing, but then suddenly, they were assaulted by tentacles and vines coming out of nowhere. A sudden thrust into <<rep $g.scout>>'s rear cavities elicit a loud moan from <<rep $g.scout>>, followed by muffled noises as another, penis-shaped flower, entered <<rep $g.scout>>'s <<umouth $g.scout>> and choked <<them $g.scout>>. Your other slavers were no luckier as they too were prodded and poked by various vines, while their limbs are fully bound by flower. The plants continues to do unspeakable things to your slavers as your slavers were helpless to do anything but to enjoy the ride.
</p>
<p>
The debauchery continues for several days before the flowers, seemingly finished with <<rep $g.alchemist>> and <<rep $g.biologist>>, released them from its embrace. Your slavers coughted and choked as their mouth were empty for the first time in days while their rear ached like never before. <<rep $g.scout>> were nowhere to be seen, but your slavers swore that they saw something resembling an elf harvesting the plant's victims during one of their dazy stupor inside the plant.</p><<run new setup.QuestTemplate(
'for_science__something_hard', /* key */
"For Science: Something Hard", /* Title */
"darko", /* Author */
[ 'veteran',
'forest',
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'offering': setup.qu.bimbo,
'wizard': setup.qu.arcaneearth,
'biologist': setup.qu.biologist, },
{ /* actors */
},
[ /* costs */
],
'Quest_for_science__something_hard',
setup.qdiff.harder46, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__something_hardCrit',
[
setup.qc.Opportunity('for_science__the_harvest', {
offering: 'offering',
wizard: 'wizard',
biologist: 'biologist',
}),
setup.qc.Equipment(setup.equipmentpool.sex_good), ],
], [
'Quest_for_science__something_hardCrit',
[
setup.qc.Opportunity('for_science__the_harvest', {
offering: 'offering',
wizard: 'wizard',
biologist: 'biologist',
}),
],
], [
'Quest_for_science__something_hardFailure',
[
setup.qc.Injury('offering', 4), ],
], [
'Quest_for_science__something_hardDisaster',
[
setup.qc.Injury('offering', 10),
setup.qc.Injury('wizard', 4),
setup.qc.Injury('biologist', 4),
setup.qc.TraitIncreaseExisting('offering', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('offering', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('wizard', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('wizard', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.HasItem(setup.item.quest_for_science_list),
setup.qres.NoItem(setup.item.quest_for_science_fruit),
setup.qres.NoOpportunity('for_science__the_harvest'), ],
[ /* expiration outcomes */
],
)>><p>
The second item in the <<rep setup.item.quest_for_science_list>>
is a the "Sine Prelog" fruit, somewhere in the western forests. From what you have gathered, finding the fruit is not the challenge —- it is the harvesting that's problematic. The details are vague, but apparently if you want the mission to succeed, you should send a group of slavers —- a wizard proficient in <<lore magic_earth>>, a biologist to identify the fruit, and most importantly a whore. It is unclear why you need to bring a whore, but you can try to send a group of slavers to the western forests if you want to find out why.
</p><p>
After asking around in the nearby settlements, <<rep $g.wizard>> <<uadv $g.wizard>> claimed to the rest of the slavers that <<they $g.wizard>> have found a way to harvest the fruit. Several ways, in fact. The ultimate decision is yours to make, as to which method you want to use to harvest the fruit, but <<rep $g.wizard>> warned you that none of them will be easy.</p>
<<if $gOutcome == 'crit'>>
<p>
On the way back, <<rep $g.biologist>> found several useful plants that they managed to sell in the nearby settlements.
</p>
<</if>><p>
During their search for information, your slavers were ambushed by a tentacle aberration in the middle of the forests. Fortunately, the aberration seems to be fixated on the whore <<rep $g.offering>>. Using the distraction, <<rep $g.wizard>> casted a powerful spell, ending the beast and freeing <<rep $g.offering>> from its clutches. <<rep $g.offering>> suffered some injuries, which will take some time to heal.
</p><p>
During their search for information, your slavers were ambushed by a tentacle aberration in the middle of the forests. All your slavers were bound by its viny tentacles, and the beast took its time to explore your slaver's bodies. Days past as your slavers' holes are inserted with larger and larger tentacles until they all gape from severe use, before the beast decided to discard your slavers in a nearby settlement.
</p><<run new setup.UnitGroup(
'quest_gorgon_cave__raid1',
"Tentacled Slave",
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict),
setup.qc.TraitReplace('unit', setup.trait.training_anal_basic), ],
)>>
<<set _criteriafighter1 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.muscle_weak,
setup.trait.per_logical,
setup.trait.race_elf,
setup.trait.race_neko,
],
[
setup.trait.muscle_strong,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.height_giant,
setup.trait.corrupted,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.skill_flight,
setup.trait.magic_wind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<set _criteriafighter2 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.muscle_weak,
setup.trait.per_logical,
setup.trait.race_elf,
setup.trait.race_neko,
],
[
setup.trait.muscle_strong,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.height_giant,
setup.trait.corrupted,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.skill_flight,
setup.trait.magic_wind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'gorgon_cave__raid', /* key */
"Hydra Cave: Raid", /* Title */
"darko", /* Author */
[ 'forest', 'unit'
], /* tags */
2, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'fighter1': _criteriafighter1,
'fighter2': _criteriafighter2,
'support': setup.qu.raidersupport, },
{ /* actors */
'leader': setup.unitgroup.quest_gorgon_cave__recruit1,
'slave': setup.unitgroup.quest_gorgon_cave__raid1, },
[ /* costs */
],
'Quest_gorgon_cave__raid',
setup.qdiff.normal36, /* difficulty */
[ /* outcomes */
[
'Quest_gorgon_cave__raidCrit',
[
setup.qc.Slave('slave', 'was a decoration slave in a cave full of tentacles whose orifices have been permanently gaped by continuous rape', undefined),
setup.qc.Equipment(setup.equipmentpool.arcane_good), ],
], [
'Quest_gorgon_cave__raidSuccess',
[
setup.qc.Slave('slave', 'was a decoration slave in a cave full of tentacles whose orifices have been permanently gaped by continuous rape', undefined),
setup.qc.MoneyNormal(0.5), ],
], [
'Quest_gorgon_cave__raidFailure',
[
setup.qc.Injury('fighter1', 2),
setup.qc.Injury('fighter2', 2),
setup.qc.Injury('support', 1), ],
], [
'Quest_gorgon_cave__raidDisaster',
[
setup.qc.Injury('fighter1', 4),
setup.qc.Injury('fighter2', 4),
setup.qc.SlaverMarker('leader'),
setup.qc.Injury('support', 2), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<include 'Opportunity_gorgon_cave'>>
<p>You have chosen to raid the caverns for riches and slaves.</p><p>
Your slavers prepared as best as their can for the journey. <<rep $g.fighter1>> and <<rep $g.fighter1>>
<<uadv $g.fighter1>>
practiced specialized techniques to slay tentacled guardians, while <<rep $g.support>>
<<uadv $g.support>>
prepared <<their $g.support>> best healing salves to best support the team.</p><<include 'GorgonCaveCommon2'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, but <<rep $g.fighter1>> was ready to block the attack. <<rep $g.fighter2>> followed up by slashing right into the guardian, which easily cuts the tentacles leaving a slithering mess on the floor. <<rep $g.support>> heals the wounds as best as <<they $g.support>> can, before your teams (having dispatched the guardians) press forward deeper into the caverns.
</p>
<p>
The slavers were met with a most debauched of scenery.
Within the caves,
many slaves are "displayed" along the corridors, most are moaning softly as all their cavities, be it mouth, anus, and vagina, are filled continuously with slithering tentacles. It seems the wizard has a thing for tentacles too, as various tentacle sex are depicted with a living slave in nearby rooms —- there was one where a slave is suspended in the air with nothing but tentacles, and another one where a caged slave is surrounded by what seems a sea of tentacles.</p>
<p>
Most of these slaves are already useless from too much abuse, but your slavers managed to find a relatively freshly caught slave who has only been ravaged bodily but still sound in mind. They then proceed to kidnap the slave and also one of the wizard's prized belonging before escaping the caverns.</p><<include 'GorgonCaveCommon2'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, but <<rep $g.fighter1>> was ready to block the attack. <<rep $g.fighter2>> followed up by slashing right into the guardian, which easily cuts the tentacles leaving a slithering mess on the floor. <<rep $g.support>> heals the wounds as best as <<they $g.support>> can, before your teams (having dispatched the guardians) press forward deeper into the caverns.
</p>
<p>
The slavers were met with a most debauched of scenery.
Within the caves,
many slaves are "displayed" along the corridors, most are moaning softly as all their cavities, be it mouth, anus, and vagina, are filled continuously with slithering tentacles. It seems the wizard has a thing for tentacles too, as various tentacle sex are depicted with a living slave in nearby rooms —- there was one where a slave is suspended in the air with nothing but tentacles, and another one where a caged slave is surrounded by what seems a sea of tentacles.</p>
<p>
Most of these slaves are already useless from too much abuse, but your slavers managed to find a relatively freshly caught slave who has only been ravaged bodily but still sound in mind. They then proceed to kidnap the slave and also some valuables lying nearby. They managed to escape the caves without alerting its inhabitants.</p><<include 'GorgonCaveCommon2'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, which caught your slavers off guard. <<rep $g.fighter1>> were knocked down, but before the guardian started to molest <<them $g.fighter1>>, <<rep $g.fighter2>> came to the rescue. Still, having to fend off multiple guardians by themself, <<rep $g.fighter2>> got severely injured before your slavers managed to somehow escape the clutches of these tentacled guardians.</p><<include 'GorgonCaveCommon2'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, which caught your slavers off guard. <<rep $g.fighter1>> were knocked down, but before the guardian started to molest <<them $g.fighter1>>, <<rep $g.fighter2>> came to the rescue. Still, having to fend off multiple guardians by themself, <<rep $g.fighter2>> got severely injured before your slavers managed to somehow escape the clutches of these tentacled guardians.</p><<run new setup.UnitGroup(
'quest_gorgon_cave__recruit1',
'Tentacle Leader',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.TraitReplace('unit', setup.trait.magic_earth_master),
setup.qc.TraitReplace('unit', setup.trait.per_independent), ],
)>>
<<run new setup.UnitGroup(
'quest_gorgon_cave__recruit3',
"Tentacle Leader's Student",
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_apprentice),
setup.qc.TraitReplace('unit', setup.trait.magic_earth),
setup.qc.TraitReplace('unit', setup.trait.per_submissive), ],
)>>
<<run new setup.UnitGroup(
'quest_gorgon_cave__recruit4',
'Tentacle Slave',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.per_lunatic), ],
)>>
<<set _criteriafighter1 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.muscle_weak,
setup.trait.per_logical,
setup.trait.race_elf,
setup.trait.race_neko,
],
[
setup.trait.muscle_strong,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.height_giant,
setup.trait.corrupted,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.skill_flight,
setup.trait.magic_wind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<set _criteriafighter2 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.muscle_weak,
setup.trait.per_logical,
setup.trait.race_elf,
setup.trait.race_neko,
],
[
setup.trait.muscle_strong,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.height_giant,
setup.trait.corrupted,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.skill_flight,
setup.trait.magic_wind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'gorgon_cave__recruit', /* key */
'Hydra Cave: Recruit', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
2, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'fighter1': _criteriafighter1,
'fighter2': _criteriafighter2,
'recruiter': setup.qu.recruiter, },
{ /* actors */
'leader': setup.unitgroup.quest_gorgon_cave__recruit1,
'student': setup.unitgroup.quest_gorgon_cave__recruit3,
'slave': setup.unitgroup.quest_gorgon_cave__recruit4, },
[ /* costs */
],
'Quest_gorgon_cave__recruit',
setup.qdiff.harder36, /* difficulty */
[ /* outcomes */
[
'Quest_gorgon_cave__recruitCrit',
[
setup.qc.Slaver('leader', "was the leader of a secluded cave full of guardian tentacles", false),
setup.qc.Slave('slave', 'was a decoration slave in a cave full of tentacles whose orifices have been permanently gaped by continuous rape', undefined), ],
], [
'Quest_gorgon_cave__recruitSuccess',
[
setup.qc.Slaver('student', 'was the "student" of the leader of a secluded cave full of guardian tentacles', false),
setup.qc.Slave('slave', 'was a decoration slave in a cave full of tentacles whose orifices have been permanently gaped by continuous rape', undefined), ],
], [
'Quest_gorgon_cave__recruitFailure',
[
setup.qc.Injury('fighter1', 2),
setup.qc.Injury('fighter2', 2),
setup.qc.Injury('recruiter', 2), ],
], [
'Quest_gorgon_cave__recruitDisaster',
[
setup.qc.Injury('recruiter', 4),
setup.qc.Injury('fighter1', 4),
setup.qc.TraitIncreaseExisting('fighter1', setup.trait.vagina_gape),
setup.qc.Injury('fighter2', 4),
setup.qc.TraitIncreaseExisting('fighter1', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('fighter2', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('fighter2', setup.trait.anus_gape), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<include 'Opportunity_gorgon_cave'>>
<p>
You have chosen to attempt to recruit the leader of this caverns.
</p><p>
Your slavers prepared as best as their can for the journey. <<rep $g.fighter1>> and <<rep $g.fighter1>>
<<uadv $g.fighter1>> practiced specialized techniques to slay tentacled guardians, while
<<rep $g.recruiter>> <<uadv $g.recruiter>> gathered <<their $g.recruiter>> best arguments to win over the enemy to your company.</p><<include 'GorgonCaveCommon'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, but <<rep $g.fighter1>> was ready to block the attack. <<rep $g.fighter2>> followed up by slashing right into the guardian, which easily cuts the tentacles leaving a slithering mess on the floor. The guardians dispatched, your slavers press forward deeper into the caverns.
</p>
<p>
Many slaves are "displayed" along the corridors, most are moaning softly as all their cavities, be it mouth, anus, and vagina, are filled continuously with slithering tentacles.
Ignoring all these sights as well as the numerous caged slaves, your slavers press forward until they finally arrive at the innermost sanctum.</p>
<p>
There, they found <<rep $g.leader>> who were in the middle of a ritual involving a slave being spitroasted by what appears to be large ethereal tentacles anchored from the altar.
<<They $g.leader>> greet your slavers, seemingly aware of their presence, before completing the ritual leaving the tentacles gone and the slave a slubbering mess in <<their $g.slave>> own fluids.
The ritual over, <<rep $g.recruiter>> launched <<their $g.recruiter>> carefully prepared arguments in an attempt to recruit <<rep $g.leader>> into your company.
</p>
<p>
After a long argument, <<rep $g.leader>> finally see the benefits of joining your slaver temporarily, and happily agree to the deal. <<They $g.leader>> leave the management of the caverns to <<their $g.leader>> student, who <<they $g.leader>> have no doubt to be worthy of <<their $g.leader>> title one day. As a piece of goodwill, <<rep $g.leader>> also brought the well-used slave from the ritual back home to be used whatever you see fit.</p><<include 'GorgonCaveCommon'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, but <<rep $g.fighter1>> was ready to block the attack. <<rep $g.fighter2>> followed up by slashing right into the guardian, which easily cuts the tentacles leaving a slithering mess on the floor. The guardians dispatched, your slavers press forward deeper into the caverns.
</p>
<p>
Many slaves are "displayed" along the corridors, most are moaning softly as all their cavities, be it mouth, anus, and vagina, are filled continuously with slithering tentacles.
Ignoring all these sights as well as the numerous caged slaves, your slavers press forward until they finally arrive at the innermost sanctum.</p>
<p>
There, they found <<rep $g.leader>> who were in the middle of a ritual involving a slave being spitroasted by what appears to be large ethereal tentacles anchored from the altar.
<<They $g.leader>> greet your slavers, seemingly aware of their presence, before completing the ritual leaving the tentacles gone and the slave a slubbering mess in <<their $g.slave>> own fluids.
</p>
<p>
<<rep $g.recruiter>> gave <<their $g.recruiter>> best arguments to recruit <<them $g.leader>>, but it was not successful. Still, the arguments and efforts that your slavers have managed to form seem to have an impact, and instead <<they $g.leader>> agreed to send <<their $g.leader>> student over to your company to continue <<their $g.leader>> training as a slaver. As a piece of goodwill, <<they $g.leader>> also offered your slaver the well-used slave from the ritual to be brought back home as a present.</p>
<p>
From the meekness exuded by <<rep $g.student>>, tour slavers can't shake the feeling that <<rep $g.student>> being a "student" were a mere facade...</p><<include 'GorgonCaveCommon'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, which caught your slavers off guard. <<rep $g.fighter1>> were knocked down, but before the guardian started to molest <<them $g.fighter1>>, <<rep $g.fighter2>> came to the rescue. Still, having to fend off multiple guardians by themself, <<rep $g.fighter2>> got severely injured before your slavers managed to somehow escape the clutches of these tentacled guardians.</p><<include 'GorgonCaveCommon'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the two hulking tentacled guardians, which appears as an amalgamation of tentacles that vaguely resembles a demonic statue. It moves eerily before suddenly jutting one of its tentacles into your slaver's directions, which caught all your slavers completely off guard. Having knocked to the ground, the guardians proceed to mindlessly molest your slaver's cavities, filling their holes with their oversized tentacles over and over again until your slavers are useless and moaning in a combination of pain and pleasure. Having neutralized their targets, the guardians returned to their dormant states and your slavers were left with a mess to recover from.</p><<run new setup.QuestTemplate(
'healing_grove', /* key */
'Healing Grove', /* Title */
'darko', /* Author */
[ 'forest', 'item'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'alchemist': setup.qu.alchemist,
'biologist': setup.qu.biologist,
'scout': setup.qu.scout_forest, },
{ /* actors */
},
[ /* costs */
],
'Quest_healing_grove',
setup.qdiff.normal23, /* difficulty */
[ /* outcomes */
[
'Quest_healing_groveCrit',
[
setup.qc.Item(setup.item.healing_potion_greater),
setup.qc.Item(setup.item.healing_potion_greater),
setup.qc.Item(setup.item.healing_potion_greater), ],
], [
'Quest_healing_groveSuccess',
[
setup.qc.Item(setup.item.healing_potion),
setup.qc.Item(setup.item.healing_potion),
setup.qc.Item(setup.item.healing_potion), ],
], [
'Quest_healing_groveFailure',
[
setup.qc.Item(setup.item.healing_potion), ],
], [
'Quest_healing_groveDisaster',
[
setup.qc.Injury('alchemist', 1),
setup.qc.Injury('biologist', 1),
setup.qc.Injury('scout', 1), ],
], ],
[
[setup.questpool.forest, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Several water springs in the western forests are famous for their seemingly magical ability to heal wounds.
The local residents often travel to these springs to bathe, healing whatever illness and injuries they have.
As much as you would like to have your own healing spring in the fort, it would not be possible for you to
transport the spring back into your fort.
But at least you can send a group of slavers to the spring and scoop the water into carefully prepared bottles,
effectively making you a bunch of <<rep setup.item.healing_potion>> either for your own consumption,
or to be resold.
</p>
<p>
First of all, you need to send a scout to locate the surely hidden spring.
A biologist can help the scout with the terrains.
Finally, an alchemist slaver is a must, for their knowledge in potion-making is sure to come handy.
</p><p>
Your slavers found the spring as pristine as described in books,
with animals and butterflies frolicking around the spring.
As beautiful as the sight is, there is still money to be made and your slavers got to work
and scooped some of the water into the vials they bring.
Using these water,
<<rep $g.alchemist>> was able to <<uadv $g.alchemist>>
concoct several <<rep setup.item.healing_potion_greater>>.
These can be used to immediately heal your slavers directly, or with proper treatment,
can be used to heal even very lengthy wounds.
Alternatively, there is always demand for these potions in the market,
and they will sell decently once you build a <<rep setup.buildingtemplate.bazaar>>.
</p><p>
<<rep $g.scout>> were unable to lead <<utheirrel $g.scout $g.biologist>> <<rep $g.biologist>> and
<<utheirrel $g.scout $g.alchemist>> <<rep $g.alchemist>> into the spring of legends.
Just before they were about to give up,
<<rep $g.biologist>> found a small spring with minor healing properties.
<<rep $g.alchemist>> got to work scooping some of the water into the vials they bring.
While the spring's healing properties are not as strong as the rumored one, it is still pretty
potent and
<<rep $g.alchemist>> still managed to
craft several <<rep setup.item.healing_potion>> out of them.
These can be used to immediately heal your slavers directly, or with proper treatment,
can be used to heal even very lengthy wounds.
Alternatively, there is always demand for these potions in the market,
and they will sell decently once you build a <<rep setup.buildingtemplate.bazaar>>.
</p><p>
Your slavers were lost in the forest trying to find the spring, and it took <<rep $g.scout>>'s greatest effort to return them back to the exit. Still, they managed to stumble on a small spring on the way out which turned out to have minor healing properties, and <<rep $g.alchemist>> were able to
<<uadv $g.alchemist>>
craft something out of it.</p><p>Unfortunately, during your slavers venture into the forest, a huge thunderstorm broke and trapped your slavers in the jungle. They had no choice but to retreat suffering cuts here and there from the vegetations in the jungle.</p><<run new setup.QuestTemplate(
'heroic_guidance', /* key */
"Heroic Guidance", /* Title */
"darko", /* Author */
[ 'forest', 'money'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scout': setup.qu.scout_forest,
'wizard': setup.qu.arcaneearth,
'convincer': setup.qu.convincer, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2,
'sage': setup.unitgroup.forest_all, },
[ /* costs */
],
'Quest_heroic_guidance',
setup.qdiff.normal19, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_guidanceCrit',
[
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_strength', 'strength'),
setup.qc.DoAll([
setup.qc.TraitReplace('hero1', setup.trait.muscle_strong),
setup.qc.TraitReplace('hero1', setup.trait.face_attractive),
setup.qc.TraitReplace('hero2', setup.trait.muscle_strong),
setup.qc.TraitReplace('hero2', setup.trait.face_attractive),
]),
setup.qc.DoAll([
setup.qc.TraitReplace('hero1', setup.trait.per_smart),
setup.qc.TraitReplace('hero2', setup.trait.per_smart),
]),
),
setup.qc.MoneyCrit(),
setup.qc.VarSet('choose_your_own_adventure_progress', '4', -1),
setup.qc.BoonizeRandom('scout', 4),
setup.qc.BoonizeRandom('wizard', 4),
setup.qc.BoonizeRandom('convincer', 4), ],
], [
'Quest_heroic_guidanceSuccess',
[
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_strength', 'strength'),
setup.qc.DoAll([
setup.qc.TraitReplace('hero1', setup.trait.muscle_strong),
setup.qc.TraitReplace('hero1', setup.trait.face_attractive),
setup.qc.TraitReplace('hero2', setup.trait.muscle_strong),
setup.qc.TraitReplace('hero2', setup.trait.face_attractive),
]),
setup.qc.DoAll([
setup.qc.TraitReplace('hero1', setup.trait.per_smart),
setup.qc.TraitReplace('hero2', setup.trait.per_smart),
]),
),
setup.qc.MoneyNormal(),
setup.qc.VarSet('choose_your_own_adventure_progress', '4', -1),
setup.qc.BoonizeRandom('scout', 3),
setup.qc.BoonizeRandom('wizard', 3),
setup.qc.BoonizeRandom('convincer', 3), ],
], [
'Quest_heroic_guidanceFailure',
[
],
], [
'Quest_heroic_guidanceDisaster',
[
setup.qc.Injury('scout', 3),
setup.qc.Injury('wizard', 3),
setup.qc.Injury('convincer', 3), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 0],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '3'), ],
)>><p>
A pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>> has approached your company to hire your services as information gatherer.
In their quest for
<<= $varstore.get('choose_your_own_adventure_revenge')>>,
they need the advice of a great sage living somewhere in the forests.
They want to hire your company to find and escort them to the sage, in exchange for the money they have acquired along their travels so far.
</p>
<p>
An oddly familiar tale, no?
</p><p>
Your slaver <<rep $g.scout>> were more than capable at <<their $g.scout>> job, <<uadv $g.scout>> guiding the team and their guests into a small cottage hidden in the forest.
It is inhabited by a sole sage, who seems to live off <<their $g.sage>> own crops.
</p>
<p>
Your guests <<= $g.hero1.getName()>> and <<= $g.hero2.getName()>> and the sage spent some time, where they
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
passionately explained their quest to exact revenge on whoever is responsible for the destruction of their village.
<<else>>
explained the plights that they have endured so far, and what they are trying to do to make sure it will never happen again.
<</if>>
In the end, they implore the sage to bestow <<= $varstore.get('choose_your_own_adventure_strength')>> upon them.
</p>
<p>
Moved by their plight, the sage agreed to house the willing adventurers and train them in the art of
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
fighting. It will be a difficult training, but the students seem to be eager about it.
<<else>>
magic. It will be challenging study, but the students seem to be eager about it.
<</if>>
Having completed their mission, your slavers were paid handsomely for their services.
Before they leave, the slavers even receive some blessings from the sage in the weeks to come.
</p><<include 'Quest_heroic_guidanceCrit'>><p>
Unfortunately, <<rep $g.scout>> were never able to locate the sage. Disappointed, your slavers apologized to the adventurers before leaving home with no pay. Perhaps they can try again some day.
</p><p>
Unfortunately, <<rep $g.scout>> were never able to locate the sage. Disappointed, your slavers apologized to the adventurers before leaving home with no pay. Perhaps they can try again some day.
</p>
<p>
On their way back, they were attacked by feral animals and suffer minor injuries.
</p><<run new setup.UnitGroup(
'quest_hunting_season1',
'Hunter',
[
[setup.unitpool.race_humankingdom_male, 0.015124016938898973],
[setup.unitpool.race_humanvale_male, 0.015124016938898973],
[setup.unitpool.race_humandesert_male, 0.0037810042347247433],
[setup.unitpool.race_humansea_male, 0.0007562008469449487],
[setup.unitpool.race_neko_male, 0.0037810042347247433],
[setup.unitpool.race_werewolf_male, 0.0015124016938898974],
[setup.unitpool.race_elf_male, 0.0037810042347247433],
[setup.unitpool.race_orc_male, 0.002268602540834846],
[setup.unitpool.race_dragonkin_male, 0.00007562008469449486],
[setup.unitpool.race_demon_male, 0.00007562008469449486],
[setup.unitpool.race_humankingdom_female, 0.015124016938898973],
[setup.unitpool.race_humanvale_female, 0.015124016938898973],
[setup.unitpool.race_humandesert_female, 0.0037810042347247433],
[setup.unitpool.race_humansea_female, 0.0007562008469449487],
[setup.unitpool.race_neko_female, 0.0037810042347247433],
[setup.unitpool.race_werewolf_female, 0.0015124016938898974],
[setup.unitpool.race_elf_female, 0.0037810042347247433],
[setup.unitpool.race_orc_female, 0.002268602540834846],
[setup.unitpool.race_dragonkin_female, 0.00007562008469449486],
[setup.unitpool.race_demon_female, 0.00007562008469449486],
[setup.unitpool.race_neko_male, 0.2268602540834846],
[setup.unitpool.race_elf_male, 0.2268602540834846],
[setup.unitpool.race_neko_female, 0.2268602540834846],
[setup.unitpool.race_elf_female, 0.2268602540834846], ],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_hunter), ],
)>>
<<set _criteriabait = new setup.UnitCriteria(
null, /* key */
'Slave2', /* name */
[
setup.trait.per_submissive,
setup.trait.per_lustful,
setup.trait.per_loyal,
setup.trait.eq_valuable,
setup.trait.training_horny_master,
setup.trait.training_horny_basic,
setup.trait.training_obedience_basic,
],
[
setup.trait.per_dominant,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_stubborn,
setup.trait.magic_wind,
],
[
setup.qres.Job(setup.job.slave),
],
{
}
)>>
<<run new setup.QuestTemplate(
'hunting_season', /* key */
'Hunting Season', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'scout': setup.qu.scout_forest,
'trapper': setup.qu.trapper,
'bait': _criteriabait, },
{ /* actors */
'hunter': setup.unitgroup.quest_hunting_season1, },
[ /* costs */
],
'Quest_hunting_season',
setup.qdiff.hard24, /* difficulty */
[ /* outcomes */
[
'Quest_hunting_seasonCrit',
[
setup.qc.Slave('hunter', 'was a slave hunter who ended up being the hunted', undefined),
setup.qc.Equipment(setup.equipmentpool.survival),
setup.qc.Equipment(setup.equipmentpool.survival),
setup.qc.Equipment(setup.equipmentpool.survival), ],
], [
'Quest_hunting_seasonSuccess',
[
setup.qc.Slave('hunter', 'was a slave hunter who ended up being the hunted', undefined),
],
], [
'Quest_hunting_seasonFailure',
[
],
], [
'Quest_hunting_seasonDisaster',
[
setup.qc.MissingUnitRebuy('bait', 1),
],
], ],
[
[setup.questpool.forest, 40],
], /* quest pool and rarity */
[
setup.qres.HasSlave(), ], /* restrictions to generate */
)>><p>
Residents of the western forests are used to both owning slaves and being a slave. They lawless nature of the forests means that the forest a peculiar hunting ground for slavers looking to expand their harem.</p>
<p>
You have heard of an inexperienced hunter who wants to capture <<their $g.hunter>> own slave, by venturing into the forest and using <<their $g.hunter>> skills to capture one. While you have no interest in recruiting the hunter, having one as a slave might prove interesting. A former hunter could be just the pet that you have always wanted.</p>
<p>
The easiest way to bait such a prey is to use a... well bait. An obedient slave tied to a post in the middle of the jungle. While others would find that suspicious, a green hunter such as this one would have no chance to resist such an easy victory.</p><p>
Your slavers set up the bait: <<rep $g.bait>> is tied up and gagged to a pole in the middle of a clearing in the jungle. Then, they waited: first few minutes, until what seems to be hour. When they about to give up, they spotted the hunter headed towards the clearing.</p>
<p>
With such an alluring slave on display, <<rep $g.hunter>> had no choice really but to approach the slave and, overcome with joy, immediately start to "train" the slave. But it makes the perfect opportunity for your slaves to ambush <<them $g.hunter>>, who then stood no chance. Having secured <<rep $g.hunter>> in complete bondage, your slavers patted <<rep $g.bait>> for being such a good slave and <<rep $g.trainer>>
<<uadv $g.trainer>>
<<if $g.trainer.isHasVagina()>>
permitted <<rep $g.bait>> to lick her pussy
<<else>>
permitted <<rep $g.bait>> to choke on his dick
<</if>>
as a reward. Your slavers even managed to find the hunter's encampment before heading back home with a new trophy in tow.</p><p>
Your slavers set up the bait: <<rep $g.bait>> is tied up and gagged to a pole in the middle of a clearing in the jungle. Then, they waited: first few minutes, until what seems to be hour. When they about to give up, they spotted the hunter headed towards the clearing.</p>
<p>
With such an alluring slave on display, <<rep $g.hunter>> had no choice really but to approach the slave and, overcome with joy, immediately start to "train" the slave. But it makes the perfect opportunity for your slaves to ambush <<them $g.hunter>>, who then stood no chance. Having secured <<rep $g.hunter>> in complete bondage, your slavers patted <<rep $g.bait>> for being such a good slave and <<rep $g.trainer>>
<<uadv $g.trainer>>
<<if $g.trainer.isHasVagina()>>
permitted <<rep $g.bait>> to lick her pussy
<<else>>
permitted <<rep $g.bait>> to choke on his dick
<</if>>
as a reward. Your slavers then head back home with a new trophy in tow.</p><p>
Unfortunately, your bait never caught the prey as the hunter were never seen by your slavers. Even after hours of <<rep $g.bait>> tied naked to a pole in the forest, nobody seems to pay attention except some animals who come and licked <<their $g.bait>> genitals.</p><p>
With <<rep $g.bait>> suitably tied up on a pole, your slavers became complacent and they never figured out when and how <<rep $g.bait>> was gone from the pole.</p>
<p>
In a couple of days, you are offered a slave that exactly matched <<rep $g.bait>>, for you to buy if you so desire. The slave is available in the <<= setup.buildingtemplate.slavepens.rep() >></p><<set _slaveorder = setup.qc.SlaveOrderFlex(
'Tiger Bank Slave Order', /* name */
'bank', /* company */
8, /* expires in */
1500, /* base price */
0, /* trait multi */
0, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.AnyTrait([setup.trait.race_elf, setup.trait.race_neko]),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.bg_clerk,
setup.trait.bg_informer,
setup.trait.bg_scholar,
setup.trait.per_smart,
setup.trait.face_attractive,
setup.trait.per_gregarious,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_logical,
setup.trait.per_evil,
setup.trait.per_serious,
setup.trait.skill_connected
], 5, 0, 0),
],
[ /* fulfilled outcomes */
setup.qc.Function(quest => {
var unit = quest.getUnit();
var criteria = quest.getCriteria();
var mods = criteria.computeSuccessModifiers(unit);
var crits = mods.crit;
var favor = unit.getSlaveValue() / 40;
favor += crits * 75;
setup.qc.Favor('bank', favor).apply();
},
'Some favor with the Tiger bank depending on the slave'
),
],
[ /* unfulfilled outcomes */
setup.qc.Ire('bank', 3),
],
)>>
<<run new setup.QuestTemplate(
'investment_banking', /* key */
"Investment Banking", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'favor',
'order',
],
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'banker1': [ setup.qu.bureaucrat, 1],
'banker2': [ setup.qu.bureaucrat, 1],
'briber': [ setup.qu.briber, 1],
},
{ /* actors */
'agent': 'quest_event_loan_tiger1',
'slave': 'elf',
'neko': 'neko',
},
[ /* costs */
],
'Quest_investment_banking',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_investment_bankingCrit',
[
setup.qc.Favor('bank', 75),
_slaveorder,
],
],
[
'Quest_investment_bankingCrit',
[
_slaveorder,
],
],
[
'Quest_investment_bankingCrit',
[
_slaveorder,
setup.qc.Ire('bank', 4),
],
],
[
'Quest_investment_bankingCrit',
[
setup.qc.OneRandom([
setup.qc.Ire('bank', 8),
setup.qc.Ire('bank', 9),
setup.qc.Ire('bank', 10)
]),
setup.qc.SlaverMarker('neko'),
setup.qc.SlaveMarker('slave'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Cooldown(12),
setup.qres.Building(setup.buildingtemplate.grandhall),
],
[ /* expiration outcomes */
],
)>><p>
The <<rep $company.bank>> is headquartered in the <<lore location_npc>>. They are one of the most powerful institutions in <<lore continent_main>>, having influences over many decisions in multiple cities. It is always wise to make them allies, even for a slaving company such as yourself.
</p>
<p>
Your "friend" from the banking institution, <<rep $g.agent>>, has again came to your fort with a proposal. "An investment for both our benefits, <<name $g.agent>> likes to think!", as <<they $g.agent>> eloquently put. The bank is apparently looking for new employees to fill out their ranks, and isn't shy from asking your company for one.
</p>
<p>
If your company is interested, <<name $g.agent>> invited a team to their headquarters, to discuss the specifics of the new employee that they are looking for.
</p>
<p>
You just need a group of slavers clever enough to navigate through the red tape labyrinth of <<rep $company.bank>>...
</p><p>
Your slavers arrived at the <<lore location_npc>> fairly quickly. Arriving at the headquarters, they were greeted by an elven hostess, wearing very skimpy clothes that barely covers <<their $g.slave>>
<<if $g.slave.isFemale()>>
massive, almost unnatural tits.
<<else>>
massive, almost unnatural dick.
<</if>>
As your slavers were escorted by the hostess,
<<if $g.briber.isHasTrait('per_chaste')>>
the chaste slaver <<rep $g.briber>> tried <<their $g.briber>> best not to look towards
<<elseif $g.briber.isHasTrait('per_lustful')>>
<<rep $g.banker1>> almost had to restrain the lustful <<urace $g.briber>> <<rep $g.briber>> from going after
<<else>>
<<rep $g.briber>> looked wide-eyedly at the
<</if>>
<<if $g.slave.isFemale()>>
tits, as it jiggles during <<their $g.slave>> every step.
<<else>>
dick, as it jiggles during <<their $g.slave>> every step.
<</if>>
Fortunately the distraction was quickly forgotten as they met with the neko supervisor, a <<man $g.neko>> probably in <<their $g.neko>> thirties, wearing the tidies suit your slavers ever laid eyes upon.
</p>
<p>
The negotiation then ensues, with <<rep $g.banker1>>
<<if $g.banker1.isHasTrait('per_chaste')>>
shyly averting <<their $g.banker1>> gaze from the
<<elseif $g.banker1.isHasTrait('per_lustful')>>
openly sneaking a glance or two towards the
<<else>>
occassionaly distracted by the
<</if>>
everpresent voluptuous elf.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
<p>
Fortunately, the negotiation appears to go well. Your slavers managed to secure an "employee" order to fill a vacant position. The negotiation was very intense, and your slavers never had time to notice when the slurping sounds begin. <<rep $g.banker2>> peeked under the table, seeing the elf hostess servicing the neko's genitals from underneath the table. ...Perhaps this is why the slaver order is very specific on the race?
</p>
<p>
<<if $gOutcome == 'failure'>>
While the negotiation was successful, it seems that <<rep $g.banker1>> had slightly raised the ire of the neko.
<<elseif $gOutcome == 'crit'>>
It seems that <<rep $g.banker1>> <<uadv $g.banker1>> navigated through the negotiation, impressing the neko and the <<rep $company.bank>> as a whole.
<<else>>
<</if>>
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the negotiation did not go as well as planned.
The neko was angered when
<<upunishreason $g.banker2>>.
Your slavers were kicked out of the building some time later, earning the wrath of the <<rep $company.bank>>.
</p>
<</if>><<run new setup.Title(
"quest_wise_as_an_ancient_elf_0", /* key */
"Wise as an Ancient Elf", /* name */
"Perfectly solved an ancient elven puzzle to open access to the Library of Wisdomglade", /* description */
"perfectly solved an ancient elven puzzle in the western forests during their adventure to locate the Library of Wisdomglade", /* unit text */
3000, /* slave value */
{ /* skill additives */
knowledge: 4,arcane: 2,},
)
>>
<<run new setup.QuestTemplate(
'library_of_wisdomglade', /* key */
"Library of Wisdomglade", /* Title */
"darko", /* Author */
[ 'veteran',
'forest', 'unknown'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': setup.qu.knight,
'scholar': setup.qu.scientist,
'scout': setup.qu.scout_forest, },
{ /* actors */
},
[ /* costs */
],
'Quest_library_of_wisdomglade',
setup.qdiff.hardest52, /* difficulty */
[ /* outcomes */
[
'Quest_library_of_wisdomgladeCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.NoTraits([setup.trait.per_stubborn, setup.trait.per_slow, setup.trait.magic_wind, setup.trait.magic_wind_master], true)),
setup.qc.DoAll([
setup.qc.Opportunity('aspect_of_wisdom', {knight: 'knight'}),
setup.qc.Item(setup.item.f_lighting_good),
]),
setup.qc.DoAll([
setup.qc.MoneyNormal(),
setup.qc.Item(setup.item.f_lighting_good),
])),
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.And([
setup.qres.AnyTrait([setup.trait.skill_creative, setup.trait.per_curious]),
setup.qres.AllTraits([setup.trait.magic_earth, setup.trait.per_smart], false),
])),
setup.qc.DoAll([
setup.qc.AddTitle('knight', 'quest_wise_as_an_ancient_elf_0')
]),
setup.qc.DoAll([
])),
],
], [
'Quest_library_of_wisdomgladeCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.NoTraits([setup.trait.per_stubborn, setup.trait.per_slow, setup.trait.magic_wind, setup.trait.magic_wind_master], true)),
setup.qc.DoAll([
setup.qc.Opportunity('aspect_of_wisdom', {knight: 'knight'}),
]),
setup.qc.DoAll([
setup.qc.MoneyNormal(),
])),
setup.qc.IfThenElse(
setup.qres.Actor('knight', setup.qres.And([
setup.qres.AnyTrait([setup.trait.skill_creative, setup.trait.per_curious]),
setup.qres.AllTraits([setup.trait.magic_earth, setup.trait.per_smart], false),
])),
setup.qc.DoAll([
setup.qc.AddTitle('knight', 'quest_wise_as_an_ancient_elf_0')
]),
setup.qc.DoAll([
])),
],
], [
'Quest_library_of_wisdomgladeFailure',
[
setup.qc.MissingUnit('knight'), ],
], [
'Quest_library_of_wisdomgladeFailure',
[
setup.qc.MissingUnit('scout'),
setup.qc.MissingUnitRecapture('knight', 'capturedmedium'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Cooldown(12),
setup.qres.QuestUnique(), ],
[ /* expiration outcomes */
],
)>><p>
The elven race is known for both their beauty and their keen mind. Both traits are apparently mainly attributed to their ancestors, who has spent centuries practicing magic to enhance both their wit and their appearances.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
You have heard information that an ancient elven library lies somewhere in the western deserts, apparently remains untouched for centuries. That certainly does not bode well for your company, but they say the library will open itself for any adventurer who thirsts for knowledge. If you think you have any such adventurer, you could try to risk and let a group of slavers spend an entire month in the western forests, looking for this mythical place. Why, your <<repfull _u>> thinks it's a very good idea, if anything else!
</p>
<p>
A good scout is always required in the western forests or else you risk your slavers getting lost in the vast vegetations. A scholar is also good to have, considering it's a library you're looking for and it's most likely protected by some sort of elven puzzle. Finally and most importantly, a true paragon of wisdom —- a knight with a particular hunger for knowledge.
</p><p>
After weeks searching and exploring the western forests, their perseverance is rewarded when <<rep $g.scout>> found an empty clearing in the middle of the forest, with scattered ruins all about. After scrying the inscriptions on the walls, <<rep $g.scholar>> is confident that this must be the elven library complex they are looking for. Only, there does not seem to be anything there but a large, empty space.
</p>
<p>
Thanks to <<rep $g.scholar>>'s vast knowledge, <<they $g.scholar>> is able to decipher the elven writings scattered throughout the area. Apparently the entire area forms an otherworldly portal, which forms the gateway into the library. Normally, one would need to offer a sacrificial slave to open the gate —- which would be easy for your company to do, except that the slave must be bathed for one month straight in a water distilled from seven different types of flowers.
Thankfully, there is another simpler way —- a paragon of wisdom simply must bear the risk and stand within the portal while chanting some elven gibberish.
</p>
<p>
As <<rep $g.knight>> <<uadv $g.knight>> prepared <<themself $g.knight>> for the ritual, <<rep $g.scout>> and <<rep $g.scholar>> scoured the area for any extra information they can get their hands on. The preparations complete (or as complete as it could be), <<rep $g.knight>> stood at the center of the area, chanting from a hastily written script.
</p>
<<if $g.knight.isHasTrait('per_slow') ||
$g.knight.isHasTrait('per_stubborn') ||
$g.knight.isHasTrait('magic_wind')>>
<p>
<<if $g.knight.isHasTrait('per_slow')>>
Halfway through however, the script became much more complex. Unfortunately your slaver <<rep $g.knight>> is simply too dumb to be able to finish the chant.
<<elseif $g.knight.isHasTrait('per_stubborn')>>
Halfway through however, the script starts to magically sway and move, putting blank spaces here apparently as a test for your slaver's wit. But the stubborn slaver <<rep $g.knight>> lacks the inquisitive mind required to solve such a puzzle.
<<elseif $g.knight.isHasTrait('magic_wind')>>
Halfway through however, <<rep $g.knight>>'s <<rep setup.trait.magic_wind>> magic suddenly blared out of control —- the magic scattered <<their $g.knight>> notes to the wind. This must be an old enchantment of the elves to ward against their enemies of the past, the wielders of <<lore magic_wind>>. Without the notes,
<</if>>
<<rep $g.knight>> reading speed slows down to a crawl, even with <<rep $g.scholar>>'s helpful notes spread around the script. Ultimately, it was obvious that the ritual failed. At least none of your slavers are harmed by this adventure.
</p>
<p>
Your slavers were able to scavenge some ancient elven valuables from the ritual site, so the quest was not a complete loss.
<<if $gOutcome == 'crit'>>
They even managed to find an ancient elven <<rep setup.item.f_lighting_good>>, which will certainly fetch for a good price.
<</if>>
If you still desire that wisdom, perhaps you can try again with a more... suitable slaver some other time.
</p>
<<else>>
<p>
The chanting itself turns out to be a puzzle in itself. As <<rep $g.knight>> continues to chant, the script itself change and twist, demanding answers from <<rep $g.knight>>'s sharp mind.
As a first challenge, the phrases becomes harder and intricate.
<<set _wins = 0>>
<<if $g.knight.isHasTrait('per_smart')>>
<<set _wins = _wins + 1>>
While it would certainly stifle any other <<man $g.knight>>, it is not a problem at all for <<rep $g.knight>>, thanks to <<their $g.knight>> brilliant mind.
<<else>>
It greatly challenged <<rep $g.knight>>'s ordinary mind, but <<rep $g.knight>> is not dumb and <<they $g.knight>> were able to continue no small part due to the helpful hints that <<rep $g.scholar>> wrote on the script.
<</if>>
But it was far from the only challenge. The words started to disappear next, forcing <<rep $g.knight>> to improvise on the spot.
<<if $g.knight.isHasTrait('skill_creative')>>
Luckily, creativity is perhaps <<rep $g.knight>>'s biggest virtue, and <<they $g.knight>> is able to pass the test with complete ease.
<<elseif $g.knight.isHasTrait('per_curious')>>
Fortunately, it is not a problem at all for the inquisitive slaver, who improves seemingly with great ease and familiarity.
<<else>>
This greatly challenged <<rep $g.knight>>, but since <<they $g.knight>> is not a stubborn slaver, <<rep $g.knight>> managed to overcome the challenge still.
<</if>>
Finally, a failsafe mechanism is initiated where <<rep $g.knight>> magical prowess is tested.
<<if $g.knight.isHasTrait('magic_earth')>>
The earth immediately rises around <<rep $g.knight>>. Sensing the familiar earth spell, the puzzle completes its task of verifying that the entity before them is not an enemy.
<<elseif $g.knight.isHasTrait('magic_water')>>
The sky immediately turns dark as a torrent of rain suddenly engulfes the forests. While this have no noticable effects on the magical scripts, it seems that it is satisfied by the lack of <<lore magic_wind>>.
<<elseif $g.knight.isHasTrait('magic_fire')>>
The sky immediately turns crimson as fire suddenly circled <<rep $g.knight>>. While this have no noticable effects on the magical scripts, it seems that it is satisfied by the lack of <<lore magic_wind>>.
<<elseif $g.knight.isHasTrait('magic_light')>>
<<rep $g.scout>> and <<utheirrel $g.scout $g.scholar>> <<rep $g.scholar>> watched as <<rep $g.knight>>'s innate <<lore magic_light>> covers <<their $g.knight>> entire body, glowing brightly. While this have no noticable effects on the magical scripts, it seems that it is satisfied by the lack of <<lore magic_wind>>.
<<elseif $g.knight.isHasTrait('magic_dark')>>
<<rep $g.knight>> winces in pain as <<they $g.knight>> feel the corrupted energy flew from <<their $g.knight>> body into the script, but seemingly with noticable effect. Either way, it seems that the puzzle is satisfied by the lack of <<lore magic_wind>>.
<<else>>
But <<rep $g.knight>> is not known for <<their $g.knight>> magical talents, and nothing happened. But it seems that this is a passable grade for the puzzle —- perhaps it is only checking for the <<lore magic_wind>>, which was wielded by the elf's ancient enemy?
<</if>>
</p>
<<if $g.knight.isHasTrait('per_smart') &&
$g.knight.isHasTrait('magic_earth') &&
($g.knight.isHasTrait('per_curious') || $g.knight.isHasTrait('skill_creative'))>>
<p>
<<rep $g.knight>> passed the test with such a flying color that the script visibly enhances <<them $g.knight>>, bestowing <<rep $g.knight>> with ancient knowledge. <<rep $g.knight>> came out wiser than ever, perhaps even wiser than you if <<they $g.knight>> hasn't before.
</p>
<</if>>
<p>
As the trial ended, your slavers gazed in awe as the Library of Wisdomglade magically materialize before them, standing in the once open space in the forests. <<rep $g.knight>> <<uadv $g.knight>> led the rest of the team into the library...
<<if $gOutcome == 'crit'>>
(Although not before looting the rare elven <<rep setup.item.f_lighting_good>> <<rep $g.scout>> spotted earlier!)
<</if>>
</p>
<</if>><p>
After weeks searching and exploring the western forests, their perseverance is rewarded when <<rep $g.scout>> found an empty clearing in the middle of the forest, with scattered ruins all about. After scrying the inscriptions on the walls, <<rep $g.scholar>> is confident that this must be the elven library complex they are looking for. Only, there does not seem to be anything there but a large, empty space.
</p>
<p>
As your slavers scour for more information about this mysterious place, the <<uadjbad $g.knight>> <<urace $g.knight>> <<rep $g.knight>> found a mysterious small circle within the clearings. <<They $g.knight>> <<uadv $g.knight>> (but also stupidly) stepped in as if there are no care in the world. Apparently the ancient elven magical enchantments still hold to this very day, as the portal trap activated, teleporting <<rep $g.knight>> to a land unknown.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Taking it as a challenge on their skills, <<rep $g.scout>> promised <<utheirrel $g.scout $g.scholar>> <<rep $g.scholar>> that <<they $g.scout>> have a plan to save <<rep $g.knight>>. Before <<rep $g.scholar>> has a time to react, however, <<rep $g.scout>> found another portal and <<uadv $g.scout>> stepped in, teleporting yet another one of your slavers into a faraway land. In the end, the team is left with only the <<uadjgood $g.scholar>> <<urace $g.scholar>> left...
</p>
<p>
Several days later, you receive a letter in your office hinting on where you could possibly rescue <<rep $g.knight>>. Oddly enough, it was signed seemingly by <<rep $g.scout>>, who as you remember is also nowhere to be seen. <<uneedrescue $g.scout>>, before <<they $g.scout>> get <<themself $g.scout>> into deeper trouble.
</p>
<<else>>
<p>
Seeing as many other similar portal traps were spread around the area, your remaining slavers wisely decided to retreat back.
<<uneedrescue $g.knight>>.
</p>
<</if>><<run new setup.Title(
'loyalty_reward', /* key */
"Vacationeer", /* name */
'Refreshed from a recent vacation on the beaches in the western peninsula', /* name */
'went on a vacation recently, thanks to you',
0, /* slave value */
{},
)>>
<<run new setup.QuestTemplate(
'loyalty_s_reward', /* key */
"Loyalty\'s Reward", /* Title */
"darko", /* Author */
[ 'forest', 'prep', 'unknown'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'planner': setup.qu.planner,
'whore': setup.qu.whore,
'scout': setup.qu.scout_forest, },
{ /* actors */
'slaver': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.race_dragonkin, setup.trait.race_demon, setup.trait.bg_boss, setup.trait.bg_royal, setup.trait.bg_mythical, setup.trait.bg_demon, setup.trait.bg_knight, setup.trait.bg_adventurer, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong, setup.trait.dick_huge, setup.trait.dick_titanic, setup.trait.balls_huge, setup.trait.balls_titanic, setup.trait.breast_huge, setup.trait.breast_titanic, setup.trait.face_attractive, setup.trait.face_beautiful, setup.trait.height_giant, setup.trait.per_smart, setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.skill_flight, setup.trait.skill_connected, setup.trait.skill_hypnotic, setup.trait.skill_creative, setup.trait.skill_entertain, setup.trait.skill_alchemy, setup.trait.skill_animal, setup.trait.magic_fire, setup.trait.magic_fire_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_dark, setup.trait.magic_dark_master, setup.trait.join_junior, setup.trait.wings_feathery, setup.trait.wings_dragonkin, setup.trait.wings_demon, setup.trait.wings_elf], true),
], },
[ /* costs */
setup.qc.MoneyCustom(-500), ],
'Quest_loyalty_s_reward',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_loyalty_s_rewardCrit',
[
setup.qc.Friendship('whore', 'slaver', 600),
setup.qc.BoonizeRandom('slaver', 30),
setup.qc.BoonizeRandom('planner', 15),
setup.qc.BoonizeRandom('whore', 15),
setup.qc.AddTitle('slaver', 'loyalty_reward'),
setup.qc.BoonizeRandom('scout', 15),
setup.qc.VarSet('loyalty_reward_cd', '1', 5),
],
], [
'Quest_loyalty_s_rewardCrit',
[
setup.qc.BoonizeRandom('slaver', 30),
setup.qc.BoonizeRandom('planner', 10),
setup.qc.BoonizeRandom('whore', 10),
setup.qc.AddTitle('slaver', 'loyalty_reward'),
setup.qc.BoonizeRandom('scout', 10),
setup.qc.VarSet('loyalty_reward_cd', '1', 5),
],
], [
'Quest_loyalty_s_rewardCrit',
[
setup.qc.TraumatizeRandom('slaver', 15), ],
], [
'Quest_loyalty_s_rewardCrit',
[
setup.qc.TraumatizeRandom('slaver', 30),
setup.qc.Friendship('whore', 'slaver', -600), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.NoUnitWithTitle('loyalty_reward'),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior, setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.skill_flight, setup.trait.skill_connected, setup.trait.skill_hypnotic, setup.trait.skill_creative, setup.trait.skill_entertain, setup.trait.skill_alchemy, setup.trait.skill_animal, setup.trait.magic_fire, setup.trait.magic_fire_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_dark, setup.trait.magic_dark_master, setup.trait.per_smart, setup.trait.muscle_extremelystrong, setup.trait.muscle_verystrong, setup.trait.face_attractive, setup.trait.face_beautiful, setup.trait.height_giant, setup.trait.race_dragonkin, setup.trait.race_demon, setup.trait.bg_boss, setup.trait.bg_royal, setup.trait.bg_mythical, setup.trait.bg_demon, setup.trait.bg_knight, setup.trait.bg_adventurer, setup.trait.dick_huge, setup.trait.dick_titanic, setup.trait.balls_huge, setup.trait.balls_titanic, setup.trait.breast_huge, setup.trait.breast_titanic, setup.trait.wings_elf, setup.trait.wings_feathery, setup.trait.wings_demon, setup.trait.wings_dragonkin], true)
]),
],
[ /* expiration outcomes */
setup.qc.TraumatizeRandom('slaver', 5), ],
)>><p>
You are blessed with many companions in your endeavors as a slaver. Among the friends you have made along the way, there's always your <<ufriend $unit.player $g.slaver>> <<rep $g.slaver>>.
<<set _weeks = $g.slaver.getWeeksWithCompany()>>
<<They $g.slaver>> has been with you and your company for
<<if _weeks > 100>>
years now,
<<elseif _weeks > 52>>
a year now,
<<else>>
almost a year now,
<</if>>
and you know <<them $g.slaver>> quite well by now.
<<They $g.slaver>> may be a little <<uadjbad $g.slaver>>, but <<they $g.slaver>>'s also <<uadjgood $g.slaver>>. Even though the slaver has no outstanding skills or capability, <<they $g.slaver>> has served your company loyally up to now. You could not ask for a better slaver.
</p>
<p>
Recently, you've noticed that <<rep $g.slaver>> looks a little down, as if jaded by the overall work of things.
Perhaps you could arrange the poor slaver a little surprise vacation —- there are pristine beaches lying on the western peninsula where the forests is, if one knows where to look. First of all, you'd need a good scout to locate the beach. You could then ask one of your slavers to plan a vacation in secret for <<rep $g.slaver>>, and ask another to join as the main entertainment.
</p>
<p>
While you probably won't gain anything but gratitude from the slaver, perhaps this could inspire the slaver for greater things in the future. Ahh... the things you'd do for your family...
</p>
<p>
<<successtext 'Please note'>>: <<rep $g.slaver>> will be considered busy as long as this quest exists. If you need <<rep $g.slaver>> urgently, you can (remove) this quest, although it will surely negatively affect <<rep $g.slaver>>.
</p><p>
While <<rep $g.scout>> searches for the elusive secret beach, you and <<rep $g.planner>> prepared for the vacation. First of all, a strong drink the night before, so you can smuggle <<them $g.slaver>> out of the lodgings in the dead of the night. A comfortable bench is also needed, placed next to the sea in a comfortable position. Drinks and refreshments are also good —- the exotic fruits from nearby forests could probably make for one. Finally, a proper whore: <<rep $g.whore>>, which makes a great change from the usual slave entertainment. As you finish making the plan and preparations, <<rep $g.scout>> audaciously returned from <<their $g.scout>> scouting mission, and with good news too. It seems the stars have aligned perfectly for the vacation.
</p>
<p>
The preparations ready, <<rep $g.planner>> <<uadv $g.planner>> goaded <<rep $g.slaver>> to drink as much as <<they $g.slaver>> can. The <<uadjgood $g.slaver>> slaver obliged, until both are pretty much dead from too much drinking. <<rep $g.scout>> and <<utheirrel $g.scout $g.whore>> <<rep $g.whore>> then hauled <<rep $g.slaver>>'s unconscious body onto the carriage, and journeyed to the beach in the dead of night.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
When <<rep $g.slaver>> woke up, it was both with a hangover and with an unfamiliar surrounding. Instead of the usual imposing walls of your fort, it is to the empty and pristine beach, with the sunlight strongly shining upon <<their $g.slaver>> <<ubody $g.slaver>>.
A sudden sense of panic awashed <<them $g.slaver>>, as <<they $g.slaver>> realized that <<they $g.slaver>> has been kidnapped.
But then <<rep $g.whore>> <<uadv $g.whore>> came over, bringing exotic fruits found by <<rep $g.scout>> near the forests.
<<rep $g.whore>> explained the whole plan to surprise <<rep $g.slaver>> while <<uadv $g.whore>> displaying <<their $g.whore>> <<ubody $g.whore>> sensuously.
<<if $g.slaver.isHasTrait('per_chaste')>>
Despite the slaver being usually prude, the
<<else>>
The
<</if>>
combination of vacational settings, the exotic fruit, and <<rep $g.whore>>'s ample body overwhelmed <<rep $g.slaver>>, and they made love.
</p>
<p>
The next few days occured in a blur as <<rep $g.slaver>> had the best days of <<their $g.slaver>> life in the vacation. The days flew by as the slavers played on the beach, swam, built sandcastles, ate exotic fruits, all while being kept entertained by <<rep $g.whore>>'s <<uadjgood $g.whore>> care.
<<if $gOutcome == 'crit'>>
<<rep $g.slaver>> grew incredibly close with <<rep $g.whore>> throughout.
<</if>>
The vacation over,
<<rep $g.slaver>> came back home refreshed as new. You decided not to tell <<them $g.slaver>> about your involvement —- seeing <<their $g.slaver>> happy face is more than enough as your reward... right? Who knows, perhaps this will inspire <<rep $g.slaver>> in the future...
</p>
<<else>>
<p>
When <<rep $g.slaver>> woke up, it was both with a hangover and with an unfamiliar surrounding. Instead of the usual imposing walls of your fort, it is to the empty and pristine beach, with the sunlight strongly shining upon <<their $g.slaver>> <<ubody $g.slaver>>.
A sudden sense of panic awashed <<them $g.slaver>>, as <<they $g.slaver>> realized that <<they $g.slaver>> has been kidnapped. This, combined with the hangover and their jadedness towards the work made them mistake <<rep $g.whore>> for the kidnapper. Grabbing the nearest object as weapon, <<rep $g.slaver>> ran away into the forests. The thickness of the forest made it difficult for <<rep $g.scout>> and <<utheirrel $g.scout $g.whore>> <<rep $g.whore>> to find the slaver back.
</p>
<p>
It took your slavers the entire week to find <<rep $g.slaver>> back, hiding in the forests. Finally explaining the situation, there were no more time for the vacation and they headed back home to the fort.
<<rep $g.slaver>> looks more stressed than ever, no small part thanks to your ruined plan.
</p>
<<if $gOutcome == 'disaster'>>
<p>
<<rep $g.slaver>> greatly disliked <<rep $g.whore>> now because of the misunderstanding.
</p>
<</if>>
<</if>><<run new setup.QuestTemplate(
'provisions_hunt', /* key */
'Provisions Hunt', /* Title */
'darko', /* Author */
[ 'forest', 'money' ], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'hunter1': setup.qu.hunter,
'hunter2': setup.qu.hunter,
'trader': setup.qu.trader, },
{ /* actors */
'whore': setup.unitgroup.elf, },
[ /* costs */
],
'Quest_provisions_hunt',
setup.qdiff.normal22, /* difficulty */
[ /* outcomes */
[
'Quest_provisions_huntCrit',
[
setup.qc.MoneyCrit(), ],
], [
'Quest_provisions_huntCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_provisions_huntFailure',
[
],
], [
'Quest_provisions_huntDisaster',
[
setup.qc.SlaveMarker('whore'),
setup.qc.TraitIncreaseExisting('hunter1', setup.trait.vagina_loose),
setup.qc.TraitIncreaseExisting('hunter1', setup.trait.anus_loose),
setup.qc.TraitIncreaseExisting('hunter2', setup.trait.vagina_loose),
setup.qc.TraitIncreaseExisting('hunter2', setup.trait.anus_loose),
setup.qc.Injury('hunter2', 2),
setup.qc.Injury('hunter1', 2), ],
], ],
[
[setup.questpool.forest, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Many venture into the western forests in search of various wondrous things.
Healing springs, rare fruit, and even the occasional neko slave.
But on a more mundane level, the western forests is also ripe with
wild game and bountiful edible fruits.
This makes it also an ideal place for people to forage food, which
can be consumed or sold to others.
</p>
<p>
You have heard that a nearby settlement is currently having a drought.
This means you can make a tidy sum of profit by a little philantrophy act:
send a group of slavers into the forest to forage for food, and sell them at
an exorbitant price to the unfortunate villagers.
Grinning maliciously, you set up a plan for two of your best hunters and a trader
to go on this mission.
</p>
<p>
The forest still have its own dangers though, and you should be wary of it...
</p><p>
After several days hunting and foraging in the forest,
<<rep $g.hunter1>> and <<utheirrel $g.hunter1 $g.hunter2>> <<rep $g.hunter2>>
managed to stuff a carriage full with food.
Berries, boars, and the occasional questionably-shaped fruits are all packed-up,
ready to be delivered to the needy.
<<if $gOutcome == 'crit'>>
Throw in some of the rarer fruits in, and you got yourself a valuable stash of food.
<</if>>
They will be made available to the villagers, for a price, of course.
</p>
<p>
<<rep $g.trader>> <<uadv $g.trader>>
sold the supplies to the villagers.
<<if $g.trader.isHasTrait('per_kind') || $g.trader.isHasTrait('per_honorable')>>
Unfortunately for you, <<rep $g.trader>> cut a better deal for the villagers
behind your back, out of the kindness of their heart. You still manage to make
a decent sum, just not as much as you would have liked. Perhaps you should send a less
morally upright <<man $g.trader>> for the job next time...
<<run $company.player.substractMoney(1000)>>
<<else>>
The supplies were sold for an exorbitant price, and the villager were in no position
to decline as your slavers turn in a tidy amount of profit.
<</if>>
</p><p>
Unfortunately, your slavers arrived during the boar's mating seasons. Sounds of boar grunts can be heard everywhere in the forest and there are even occasional elfish moans that your slaver heard from across the forest. Not willing to risk such a dangerous venture, your slavers chose to return back to fort in shame.</p><p>
Your slavers were not aware that this month marks the wild boar's breeding season. The wild boars of the western forest are infamous for breeding absolutely anything —- be it other animals or even unfortunate travelers. Unfortunately for your slavers, they caught the attention of an alpha boar, who immediately charged into your slavers and knocked them down. What happens next to <<rep $g.hunter1>> and <<rep $g.hunter2>> was unclear, but they came back home with well-used rear and a lot of shame.</p><<run new setup.QuestTemplate(
'rescue_ranger', /* key */
"Rescue Ranger", /* Title */
"darko", /* Author */
[
'special', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'spotter1': setup.qu.spotter,
'spotter2': setup.qu.spotter,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'target': setup.unitgroup.missingslaves,
'ranger': setup.unitgroup.forest_all, },
[ /* costs */
setup.qc.MoneyCustom(-1000), ],
'Quest_rescue_ranger',
setup.qdiff.normal35, /* difficulty */
[ /* outcomes */
[
'Quest_rescue_rangerCrit',
[
setup.qc.Slave('target', "", undefined),
setup.qc.RemoveFromUnitGroup('target'),
],
], [
'Quest_rescue_rangerSuccess',
[
setup.qc.Injury('target', 5),
setup.qc.Slave('target', "", undefined),
setup.qc.RemoveFromUnitGroup('target'),
],
], [
'Quest_rescue_rangerFailure',
[
setup.qc.Slave('target', "", true),
setup.qc.RemoveFromUnitGroup('target'),
],
], [
'Quest_rescue_rangerDisaster',
[
setup.qc.Slave('target', "", true),
setup.qc.RemoveFromUnitGroup('target'),
setup.qc.MissingUnitRebuy('spotter1', 0.5), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.rescue, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslaves),
],
)>><p>
The dense forests of the western region makes great place for fugitives and the like to hide from justice. With hiding spots everywhere and dense vegetation to slow down pursuer, once they reach the border of the forest their pursuers often simply give up the chase. But fugitives are not the only ones using them as an escape route —- occasionally slaves who somehow managed to escape from their bonds also try to find their way there and lose themselves from their master/mistress.
</p>
<p>
In fact, you have just heard the news that one of your former slaves
<<rep $g.target>> were somehow loose in the western forests.
<<if $g.target.isMindbroken()>>
It is unclear how the mindbroken slave could end up in the forests —- perhaps <<their $g.target>> owner simply bored with the slave and let <<them $g.target>> go.
<<elseif $g.target.isHasTrait('training_obedience_advanced')>>
Given <<their $g.target>> training history, it is unlikely that <<they $g.target>> flee to the forests on <<their $g.target>> volition —- most likely <<their $g.target>> owner let the slave loose on the forest for fun but somehow managed to lose track of the poor slave.
<<else>>
Given <<their $g.target>> disobedience, <<they $g.target>> probably managed to escape from <<their $g.target>> now former owner, chasing elusive freedom in the depths of the forests.
<</if>>
</p>
<p>
This could be your chance to recapture the slave —- while it's unlikely your slavers would be able to locate the slave in the vast forests, you have heard of a ranger living in the forests with a particular reputation for capturing strays. You can try to send a group of slavers to contact the range and locate your long lost slave.
</p><p>
The ranger together with <<rep $g.spotter1>> and <<rep $g.spotter2>> scoured methodically through the forests, looking for signs of the slave. It was <<rep $g.spotter1>> who
<<uadv $g.spotter1>> spotted smoke coming from a spot in the forest. Lo and behold, <<rep $g.target>> was resting alone near a makeshift campfire,
<<if $g.target.isMindbroken()>>
looking dazed.
<<elseif $g.target.isHasTrait('training_obedience_advanced')>>
still waiting for <<their $g.target>> master to reclaim <<them $g.target>>
<<else>>
making plans to complete their escape.
<</if>>
Your slavers easily subdued and secured the slave, to be brought back to your fort.
</p><p>
The ranger together with <<rep $g.spotter1>> and <<rep $g.spotter2>> scoured methodically through the forests, looking for signs of the slave. It was <<rep $g.spotter1>> who
<<uadv $g.spotter1>> spotted smoke coming from a spot in the forest. Lo and behold, <<rep $g.target>> was resting alone near a makeshift campfire,
<<if $g.target.isMindbroken()>>
looking dazed.
<<elseif $g.target.isHasTrait('training_obedience_advanced')>>
still waiting for <<their $g.target>> master to reclaim <<them $g.target>>
<<else>>
making plans to complete their escape.
<</if>>
Your slavers easily subdued and secured the slave, to be brought back to your fort, but you noted that the slaves has suffered many injuries. You are unsure if it was from their former owner or from the escapade, but either way you will need to give the slave some rest before you can use <<them $g.target>>.
</p><p>
The ranger together with <<rep $g.spotter1>> and <<rep $g.spotter2>> scoured through the forests, looking for signs of the slave. Eventually though, your slavers were not able to catch up with the rangers, who moved through the forest with ease and grace while your slavers tumbled through the thick vines.
Eventually, your the ranger found and captured the missing slave alone, and demanded extra pay for <<their $g.ranger>> basically unassisted work.
</p><p>
The ranger together with <<rep $g.spotter1>> and <<rep $g.spotter2>> scoured through the forests, looking for signs of the slave. Eventually though, your slavers were not able to catch up with the rangers, who moved through the forest with ease and grace while your slavers tumbled through the thick vines. In fact, <<rep $g.spotter1>> got lost in the forest as well, and the ranger had to be paid to rescue both the slave and <<rep $g.spotter1>>.
</p><<run new setup.QuestTemplate(
'safari_zone_illegal_hunt2', /* key */
'Safari Zone: Illegal Hunt', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'hunter1': setup.qu.hunter,
'hunter2': setup.qu.hunter,
'thief': setup.qu.thief, },
{ /* actors */
'animal': setup.unitgroup.forest_all,
'animal2': setup.unitgroup.forest_all, },
[ /* costs */
],
'Quest_safari_zone_illegal_hunt2',
setup.qdiff.hard21, /* difficulty */
[ /* outcomes */
[
'Quest_safari_zone_illegal_hunt2Crit',
[
setup.qc.Slave('animal', 'was a slave in the Safari Zone whom your slavers successfully hunted', undefined),
setup.qc.Slave('animal2', 'was a slave in the Safari Zone whom your slavers successfully hunted', undefined), ],
], [
'Quest_safari_zone_illegal_hunt2Success',
[
setup.qc.Slave('animal', 'was a slave in the Safari Zone whom your slavers successfully hunted', undefined), ],
], [
'Quest_safari_zone_illegal_hunt2Failure',
[
setup.qc.Injury('hunter1', 1),
setup.qc.Injury('hunter2', 1), ],
], [
'Quest_safari_zone_illegal_hunt2Disaster',
[
setup.qc.Injury('hunter1', 1),
setup.qc.Injury('hunter2', 1),
setup.qc.MoneyCrit(-1), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Within the western forests closest to the<<lore location_lucgate>>, there is an oddly fenced area managed by a slaving enterprise. This fenced area forms the so-called "Safari Zone". During certain months, very wealthy clients can go to the safari zone and purchase a safari pass which lasts for an hour, complete with a tranquilizer dart. Once inside, they are free to shoot as many of the animals as possible within an hour —- all the animals bagged can be brought home.</p>
<p>
Only, the "animals" are not your usual fare of animals. Instead of deers and other wildlife, the Safari Zone prouds itself on its stable of humanlikes. These humanlikes are usually slaves who are stripped naked of any and all clothings, and let loose in the forest. They are promised their freedom if they remain uncaught until the end of the hunting season, which further motivates the slaves. The Safari Zone proud themselves on having a large stable of animals, from easy to catch ones into high valued ones like former mercenaries.</p>
<p>
You have the rare opportunity of going into the Safari Zone —- not as a paying customer of course, but either as a slaver company offering to sell slaves to them, or, to sneak inside the Safari Zone and grab a slave of your own.</p>
<p>
You have chosen to send some of your slavers to poach for these slaves.</p><p>
The animals in the Safari Zone have their own strategies — some banded together, some try to survive alone. Your slavers decided to go look for one of the slave groups. The slave group were able to spot your slavers —- panicking, they flushed into the open. Your slavers, tranquilizer guns blazing, managed to shot down one of the animals. <<rep $g.hunter1>> then
<<uadv $g.hunter1>>
took control of the rifle and aimed straight at another animal —- shot were fired and <<rep $g.hunter1>> triumphantly shot another animal down.</p>
<p>Your slavers had a good day and consider the hunt a success. They tag the downed slaves and smuggle them out of the safari, to be delivered to your fort and begin their new lives.</p><p>
The animals in the Safari Zone have their own strategies — some banded together, some try to survive alone. Your slavers decided to go look for one of the lone slaves. They then spotted one of the slaves sleeping, which makes it trivial for <<rep $g.hunter2>> to
<<uadv $g.hunter2>>
subdue. Once the slave is down, your slavers considered the hunt successful. They bagged the slave and smuggle <<them $g.animal>> out, back into your fort.</p><p>
The animals in the Safari Zone have their own strategies — some banded together, some try to survive alone. But before your slavers were able to decide which group to pursue, they were spotted by the Safari guards, who opened fire (with tranquilizing arrows) on your slavers. Your slavers fortunately managed to dodge all of the arrows, but they still get bruises and cuts from having to run through the brambles along the safari.</p><p>
The animals in the Safari Zone have their own strategies — some banded together, some try to survive alone. But before your slavers were able to decide which group to pursue, they were spotted by the Safari guards, who opened fire (with tranquilizing arrows) on your slavers. Unfortunately, your slavers were caught by the arrow, which downed them. In the next few days, your slavers returned to your fort compliments of the Safari Zone, together with a hefty bill addressed to you for damages incurred.</p><<run new setup.QuestTemplate(
'safari_zone_sell_slaves', /* key */
'Safari Zone: Sell Slaves', /* Title */
'darko', /* Author */
[ 'forest', 'order'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'guard': setup.qu.guard,
'trader': setup.qu.slavetrader, },
{ /* actors */
},
[ /* costs */
],
'Quest_safari_zone_sell_slaves',
setup.qdiff.easy21, /* difficulty */
[ /* outcomes */
[
'Quest_safari_zone_sell_slavesCrit',
[
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
],
], [
'Quest_safari_zone_sell_slavesSuccess',
[
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
setup.qc.SlaveOrderSafariZone(0.9),
],
], [
'Quest_safari_zone_sell_slavesFailure',
[
setup.qc.SlaveOrderSafariZone(0.9),
],
], [
'Quest_safari_zone_sell_slavesDisaster',
[
setup.qc.Injury('guard', 2),
setup.qc.Injury('trainer', 1),
setup.qc.Injury('trader', 1), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Within the western forests closest to the<<lore location_lucgate>>, there is an oddly fenced area managed by a slaving enterprise. This fenced area forms the so-called "Safari Zone". During certain months, very wealthy clients can go to the safari zone and purchase a safari pass which lasts for an hour, complete with a tranquilizer dart. Once inside, they are free to shoot as many of the animals as possible within an hour —- all the animals bagged can be brought home.</p>
<p>
Only, the "animals" are not your usual fare of animals. Instead of deers and other wildlife, the Safari Zone prouds itself on its stable of humanlikes. These humanlikes are usually slaves who are stripped naked of any and all clothings, and let loose in the forest. They are promised their freedom if they remain uncaught until the end of the hunting season, which further motivates the slaves. The Safari Zone proud themselves on having a large stable of animals, from easy to catch ones into high valued ones like former mercenaries.</p>
<p>
You have the rare opportunity of going into the Safari Zone —- not as a paying customer of course, but either as a slaver company offering to sell slaves to them, or, to sneak inside the Safari Zone and grab a slave of your own.</p>
<p>
You have chosen to send some of your slavers to poach for these slaves.</p><p>
Note that the Safari Zone prefers to buy naked and untrained slaves.
</p><p>
The Safari Zone is always happy to buy slaves from upstanding slaver company such as yourself, at standard slave price of course. Furthermore, <<rep $g.trader>> were so
<<uadv $g.trader>>
convincing that they are willing buy slaves in bulk from your company. All in all, a good result.</p>
<<include 'Quest_safari_zone_sell_slavescommon'>><p>
The Safari Zone is quite picky in choosing where it buy slaves from, to maintain its standards. Fortunately, <<rep $g.trader>> were able to
<<uadv $g.trader>>
convince them that your company supply high quality slaves. Your slavers managed to arrange for several slave orders to be delivered in a few days.</p>
<<include 'Quest_safari_zone_sell_slavescommon'>><p>
The Safari Zone is quite picky in choosing where it buy slaves from, to maintain its standards. <<rep $g.trader>> were unable to
<<uadv $g.trader>>
convince them fully of your company's capability, and ultimately only able to secure a deal for one slave to be sent to the safari.</p>
<<include 'Quest_safari_zone_sell_slavescommon'>><p>
Unfortunately, the western forests is a dangerous place. Your slavers never made it to the safari zone as they were ambushed by neko hunters along the way, which harried them all the way back to the fort.</p><<run new setup.UnitGroup(
'quest_the_fruit_of_sluttiness1',
'Slutted (Mild)',
[
[setup.unitpool.race_elf_male, 0.5],
[setup.unitpool.race_elf_female, 0.5], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict), ],
)>>
<<run new setup.UnitGroup(
'quest_the_fruit_of_sluttiness3',
'Slutted (Plus)',
[
[setup.unitpool.race_elf_male, 0.5],
[setup.unitpool.race_elf_female, 0.5], ],
0,
[
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_basic), ],
)>>
<<run new setup.QuestTemplate(
'the_fruit_of_sluttiness', /* key */
'The Fruit of Sluttiness', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'whore1': setup.qu.whore,
'whore2': setup.qu.whore,
'biologist': setup.qu.biologist, },
{ /* actors */
'slut': setup.unitgroup.quest_the_fruit_of_sluttiness1,
'plus': setup.unitgroup.quest_the_fruit_of_sluttiness3, },
[ /* costs */
],
'Quest_the_fruit_of_sluttiness',
setup.qdiff.normal21, /* difficulty */
[ /* outcomes */
[
'Quest_the_fruit_of_sluttinessCrit',
[
setup.qc.Slave('plus', 'was an elf whose mind you fully transform into a sex slave', undefined),
setup.qc.Ire('elf', 1),
],
], [
'Quest_the_fruit_of_sluttinessCrit',
[
setup.qc.Slave('slut', 'was an elf whose mind you transform into a sex slave', undefined),
setup.qc.Ire('elf', 1),
],
], [
'Quest_the_fruit_of_sluttinessFailure',
[
],
], [
'Quest_the_fruit_of_sluttinessDisaster',
[
setup.qc.Trait('whore1', setup.trait.per_lustful),
setup.qc.Trait('whore2', setup.trait.per_lustful), ],
], ],
[
[setup.questpool.forest, 1],
], /* quest pool and rarity */
[ /* restrictions to generate */
setup.qres.QuestUnique(),
],
)>><p>
The western forests house dangers of many kind: wild beasts, tentacle monsters, and even
dangerous bandits —
among these, a particularly nasty danger is the so called Fruit of Sluttiness.
These fruit disguise itself as an ordinary edible fruit, almost indistinguishable
from each other.
But a particularly sensitive individual can sense the strange, arousing
odors coming out of the fruit, earning it the name.
When eating, this fruit bestows absolute sluttiness to its host,
instilling sex addiction that is impossible to cure by
normal means.
</p>
<p>
It occurs to you that it might be possible to use this fruit to your advantage.
You need a particularly sensitive slaver to locate these fruits, and collect some of them.
Then you need to lure an unsuspecting elf into eating the fruit.
Once eaten, with the full extent of the fruit's power and some encouragement from your slaves,
no matter what the elf's previous life is,
their mind will be fully transformed into that of a natural sex slave.
The slave will then surely beg to be made into your obedient little slave.
</p><<if $gOutcome == 'crit'>>
<<set _plus = $g.plus>>
<<else>>
<<set _plus = $g.slut>>
<</if>>
<p>
<<if $g.biologist.isHasTrait('per_attentive')>>
With <<rep $g.biologist>>'s keen sense,
<<else>>
Probably with pure luck,
<</if>>
your slavers were able to successfully harvest the correct fruits from the forests.
With the fruits sealed tight, , it was just a matter of finding the right elf to enslave.
With both <<rep $g.whore1>> and <<utheirrel $g.whore1 $g.whore2>> <<rep $g.whore2>>'s sexual charm,
<<rep _plus>> were seductively lured into eating the fruit offered by your slavers.
Only when <<they _plus>> is a few bites in that
<<they _plus>> started to realize something is wrong.
<<if $gOutcome == 'crit'>>
But by then, it was far too late.
In an attempt to minimize <<name _plus>>'s resistance,
<<rep $g.whore1>> and <<rep $g.whore2>> immediately molested and manhandled
<<rep $g.whore1>>'s <<= setup.Text.genital($g.whore1)>>,
eliciting needy moans until <<their _plus>> mind is fully transformed
from an ordinary hard-working elf into that of a natural sex slave.
Once <<rep _plus>> finish gorging on the fruit, <<they _plus>>
were practically begging for your slavers to enslave <<them _plus>>,
which your slavers happily oblige.
<<else>>
In a show of resistance, <<name _plus>>'s tried to vomit the flesh <<they _plus>>
have eaten, but <<rep $g.whore1>> and <<rep $g.whore2>> were prepared for this turn of event.
<<if !$g.whore1.isHasDick()>>Donning a strap-on, <</if>>
<<rep $g.whore1>> shoved <<their $g.whore1>>
<<if $g.whore1.isHasDick()>><<udick $g.whore1>><<else>>strap-on<</if>>
down the poor elf's throat until <<they _plus>> swallowed
the fruit<<if $g.whore1.isHasDick()>> together with <<rep $g.whore1>>'s cum<</if>>.
The deed done, <<rep _plus>> is now one mess of a slutty elf who did not resist
as your slavers tied and carried the slave back home.
<</if>>
</p><p>
Your slavers failed by the simple problem of <<rep $g.biologist>> being unable to find the Fruit of Sluttiness. Well, at least no damage is done —- it could have been so much worse. Perhaps they can try again sometime.
</p><p>
<<rep $g.biologist>> managed to find the fruits they are looking for, but was sloppy in picking and storing them. The odors somehow permeate out of their bags and after some time <<rep $g.whore1>> and <<rep $g.whore2>> began to feel much more aroused than they should. By the time <<rep $g.biologist>> realize what was happening it was already too late, and <<rep $g.biologist>> had to quickly ditch the fruits and restores whatever mind back to both <<rep $g.whore1>> and <<rep $g.whore2>>.
</p><<set _criteriahonest = new setup.UnitCriteria(
null, /* key */
'"Woodcutter"', /* name */
[
setup.trait.per_honest,
setup.trait.per_honorable,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.bg_laborer,
setup.trait.bg_knight,
],
[
setup.trait.per_deceitful,
setup.trait.per_lustful,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.bg_raider,
setup.trait.bg_slaver,
setup.trait.race_demon,
setup.trait.bg_demon,
setup.trait.corrupted,
setup.trait.per_lunatic,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.per_honest, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_honorable, setup.trait.per_chaste]),
],
{
social: 3,
}
)>>
<<run new setup.QuestTemplate(
'the_honest_slaver', /* key */
"The Honest Slaver", /* Title */
"darko", /* Author */
[ 'forest', 'money'
], /* tags */
1, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'honest': [_criteriahonest, 2],
'scout': [setup.qu.scout_forest, 0.5],
'schemer': [setup.qu.schemer, 0.5], },
{ /* actors */
'lady': setup.unitgroup.elf,
'woodcutter': setup.unitgroup.all, },
[ /* costs */
],
'Quest_the_honest_slaver',
setup.qdiff.normal19, /* difficulty */
[ /* outcomes */
[
'Quest_the_honest_slaverCrit',
[
setup.qc.MoneyCrit(),
setup.qc.BoonizeRandom('honest', 8), ],
], [
'Quest_the_honest_slaverSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_the_honest_slaverFailure',
[
],
], [
'Quest_the_honest_slaverDisaster',
[
setup.qc.TraumatizeRandom('honest', 20), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
],
)>><p>
The folks living in the western forests often tell the tale of an honest woodcutter, who accidentally dropped <<their $g.woodcutter>> axe to a river. Since <<their $g.woodcutter>> axe was <<their $g.woodcutter>> only mean of livelihood, <<they $g.woodcutter>> sat down and wept. Taking pity on <<them $g.woodcutter>>, the spirit of the lake dived into the water and returned with a golden axe. "Was this what you had lost?", <<they $g.lady>> asked, but the woodcutter said it was not, and returned the same answer when a silver axe was brought to the surface. Only when <<their $g.woodcutter>> own tool is produced does <<they $g.woodcutter>> claim it. Impressed by <<their $g.woodcutter>> honesty, the <<lady $g.lady>> of the river allowed <<them $g.woodcutter>> to keep all three.
</p>
<p>
Hearing of this good fortune, your slavers came up with the idea of throwing your own object into the river, and wailed for its return. Of course, the <<lady $g.lady>> can probably sense the evilness in your slaver who came up with the idea, so the better idea is to send a team of slaver —- let the object be dropped into the river by one of your slaver, and let your most honorable slaver do the wailing.
It might work out, or it might just be a fairy tale...
</p><p><<rep $g.schemer>> <<uadv $g.schemer>> bought a big wooden dildo in a nearby village. Guided by <<rep $g.scout>>, your slavers arrived at the supposed river. There, <<rep $g.schemer>> dropped the dildo into the river, and together with <<rep $g.scout>> hide far away from the area, leaving <<rep $g.honest>> to try and beg for the dildo's safe return.</p>
<p>
The <<lady $g.lady>> of the river obviously sensed the evilness coming out from your slaver, what with such an indecent item being thrown into the river. But upon seeing <<rep $g.honest>>, <<they $g.lady>> cannot help but be charmed by the aura of good emanating from <<rep $g.honest>>. Instead, the <<lady $g.lady>> invited <<rep $g.honest>> to dive into the river together to "reclaim the dildo", and so <<they $g.honest>> did. It is unknown what happened under the riverbed, but when <<rep $g.honest>> returned, it was with a renewed vigor and a massive golden phallus. Your slavers sold the golden dildo for a high price before returning back home.
</p>
<p>
Your slavers can't help but notice that the dildo appears to have slight dents and unnatural smell, as if it has been used before.
<<rep $g.honest>> was oddly quiet about it.
</p><p><<rep $g.schemer>> <<uadv $g.schemer>> bought a big wooden dildo in a nearby village. Guided by <<rep $g.scout>>, your slavers arrived at the supposed river. There, <<rep $g.schemer>> dropped the dildo into the river, and together with <<rep $g.scout>> hide far away from the area, leaving <<rep $g.honest>> to try and beg for the dildo's safe return.</p>
<p>
The <<lady $g.lady>> of the river obviously sensed the evilness coming out from your slaver, what with such an indecent item being thrown into the river. But <<rep $g.honest>>'s goodness still tug on <<their $g.lady>> heart, and after deciding what is best <<they $g.lady>> decide to unceremoniously throw a silver dildo, accidentally hitting <<rep $g.honest>>'s head. Sensing that it was all they are going to get, your slavers went back home after selling the silver dildo for a decent sum. Your slavers never noticed how the <<lady $g.lady>> apparently lustfully eyed <<rep $g.honest>> on their way out of the forest...
</p>
<p>
You probably should scold your slavers for bringing a dildo of all things to the pure and innocent <<lady $g.lady>> of the river, but eh, it works out in the end.
</p><p><<rep $g.schemer>> <<uadv $g.schemer>> bought a big wooden dildo in a nearby village. Guided by <<rep $g.scout>>, your slavers arrived at the supposed river. There, <<rep $g.schemer>> dropped the dildo into the river, and together with <<rep $g.scout>> hide far away from the area, leaving <<rep $g.honest>> to try and beg for the dildo's safe return.</p>
<p>
When the <<lady $g.lady>> appeared and
offered <<rep $g.honest>> a golden dildo, the <<man $g.honest>> <<uadv $g.honest>> claimed it. Sensing the deception, the <<lady $g.lady>> of the river denied both that and the return of your own wooden dildo.</p><p><<rep $g.schemer>> <<uadv $g.schemer>> bought a big wooden dildo in a nearby village. Guided by <<rep $g.scout>>, your slavers arrived at the supposed river. There, <<rep $g.schemer>> dropped the dildo into the river, and together with <<rep $g.scout>> hide far away from the area, leaving <<rep $g.honest>> to try and beg for the dildo's safe return.</p>
<p>
When the <<lady $g.lady>> appeared and offered <<rep $g.honest>> a golden dildo, the <<man $g.honest>> <<uadv $g.honest>> claimed it. Sensing the deception and the evilness emanating from your slavers, the <<lady $g.lady>> of the river denied both that and the return of your own wooden dildo, and instead bestow a curse open your slaver. Your slavers came back home defeated and with <<rep $g.honest>> traumatized by the entire event.</p><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__greed', /* key */
"The Seven Deadly Transformation: Greed", /* Title */
"darko", /* Author */
[ 'transformation',
'forest',
'trait',
'prep'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'scout': setup.qu.scout_forest,
'biologist': setup.qu.biologist, },
{ /* actors */
'elf': setup.unitgroup.elf, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__greed',
setup.qdiff.hard30, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__greedCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_anal_basic),
setup.qc.TraitReplace('fated', setup.trait.ears_elf),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_seven_deadly_transformation__greedSuccess',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_anal_basic),
setup.qc.TraitReplace('fated', setup.trait.ears_elf), ],
], [
'Quest_the_seven_deadly_transformation__greedFailure',
[
],
], [
'Quest_the_seven_deadly_transformation__greedDisaster',
[
setup.qc.Injury('fated', 5),
setup.qc.Injury('trainer', 4),
setup.qc.Injury('scout', 4),
setup.qc.Injury('biologist', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.ears_elf),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
You had a very vivid dream where in which you saw one of your slaves <<rep _headunit>> ventures into the forest in search of the "Master Rod", hidden somewhere in the forest.
</p>
<p>
Initially, you dismiss the dream as nothing but a dream. But it keeps reoccurring to the point where you are now certain that this dream is an omen —- it is yet another step in order to complete <<rep _headunit>>'s supposed destiny. You could try to send a group of slavers to follow up on this extremely vague lead. You would need a good scout as well as a good biologist to get the best lay of the forest.</p>
<p>Or, it could just be nothing but a dream.
</p>
<</if>><<include 'Quest_the_seven_deadly_transformation__greedSuccess'>>
<p>
As your slavers headed back home, <<rep $g.biologist>> <<uadv $g.biologist>> collected several valuable plants along the way.
</p><p>
Your scout <<rep $g.scout>> <<uadv $g.scout>> guided the rest of the team deep within the forest, until they appear at a pristine grove. Inside the grove is a hollowed out tree, and within they found nothing but a wooden phallus sticking out from a tree stump. Certain that the "phallus" must be the "Master Rod" in your dream, your slavers tried to make <<rep $g.fated>> do various lewd things to activate the master rod. After attempted deepthroat and asshole rape, nothing seems to happen and your slavers were at a lost.
</p>
<p>
It is then that an elderly elf came upon your slavers. Introducing <<themself $g.elf>> as the grove keeper, <<they $g.elf>> reveals that another component is required in order to complete the ritual —- the ritual demands that the greed be satisfied, so one is not enough.
It is then that the elf reveals
<<if $g.elf.isHasDick()>>
his massive dick hidden beneath his clothes
<<else>>
her massive strap-on hidden beneath her clothes
<</if>>.
Your slavers, understanding what is supposed to be done,
gagged and carried the poor slave <<rep $g.fated>> for what they anticipate to be an excruciatingly painful double penetration by an elf and a wooden phallus.
<<if $g.fated.isHasTrait(setup.trait.anus_gape)>>
Still, <<their $g.fated>> gaping anus has plenty of experience and will probably be able to withstood the rape.
<<else>>
Your slaver even doubts that the slave's relatively tight anus can accomodate just the elf's member, let alone together with the wooden phallus.
<</if>>
But as the head of the phallus touched the slave's hole, a green-ish glow surrounds the asshole of the slave —- within moments both the phallus and the elf's <<if $g.elf.isHasDick()>> dick <<else>> strap-on<</if>> were deep within <<rep $g.fated>>'s ass, moving up and down double penetrating <<rep $g.fated>>, who muffled in great amount of pain. As the double penetration continues, <<rep $g.fated>>'s ears begins to glow as well, morphing into sharp ears akin to those of elves. The ritual continues for quite some time and eventually, the green glow faded which signals the end of the ritual.
</p>
<p>
<<rep $g.fated>> immediately collapsed, having been fully exhausted from <<their $g.fated>> ordeal. Having done <<their $g.elf>> duty, the elf bids your team farewell. Your slavers, having completed their mission, had a little fun with the fully used slave before heading back, successful in their mission.
</p><p>
Your scout <<rep $g.scout>> <<uadv $g.scout>> guided the rest of the team deep within the forest, until they appear at a pristine grove. Inside the grove is a hollowed out tree, and within they found nothing but a wooden phallus sticking out from a tree stump. Certain that the "phallus" must be the "Master Rod" in your dream, your slavers tried to make <<rep $g.fated>> do various lewd things to activate the master rod.</p>
<p>
After your slavers subjected <<rep $g.fated>> to various degrading acts on the rod, including deepthroating and asshole rape, nothing seems to occur. Your slavers eventually run out of ideas, and decided to go home.
Perhaps they can try this again sometime later.
</p><p>
Your scout <<rep $g.scout>> <<uadv $g.scout>> guided the rest of the team deep within the forest, until they appear at a pristine grove. Inside the grove is a hollowed out tree, and within they found nothing but a wooden phallus sticking out from a tree stump. But they were not alone in the grove —- apparently, wild animals guarded the grove, which viciously attacked your team. Your slavers had to escape bearing injuries from the sudden and unexpected attack.</p><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__lust', /* key */
"The Seven Deadly Transformation: Lust", /* Title */
"darko", /* Author */
[ 'transformation',
'forest',
'trait',
'prep'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'whore1': setup.qu.whore,
'whore2': setup.qu.whore, },
{ /* actors */
'whore': setup.unitgroup.neko, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__lust',
setup.qdiff.hard23, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__lustCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.BoonizeRandom('trainer', 4),
setup.qc.BoonizeRandom('whore1', 4),
setup.qc.BoonizeRandom('whore2', 4),
setup.qc.Trait('fated', setup.trait.training_endurance_basic),
setup.qc.TraitReplace('fated', setup.trait.eyes_neko), ],
], [
'Quest_the_seven_deadly_transformation__lustSuccess',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_endurance_basic),
setup.qc.Trait('fated', setup.trait.eyes_neko), ],
], [
'Quest_the_seven_deadly_transformation__lustFailure',
[
],
], [
'Quest_the_seven_deadly_transformation__lustDisaster',
[
setup.qc.MoneyCustom(-1500),
setup.qc.SlaveMarker('whore'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.eyes_neko),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
A letter arrived at your company from the <<lore location_npc>> (NPC) in the western forests. Apparently, one of your slaves <<rep _headunit>> have an upcoming booking for one of the most famous whorehouses in NPC, the Purrloin.
</p>
<p>
Recalling <<rep _headunit>>'s supposed grand destiny, this could be one of the trials that <<they _headunit>> has to face. But really? A whorehouse? Well, might as well enjoy it and send a group of slavers proficient in the art of whoring. At the very least your slavers will have their fun, if this turns out to be nothing but dead lead.
</p>
<p>
Or, it could just be that <<rep _headunit>> had reserved the place for <<their _headunit>> own personal degeneracy before
<<they _headunit>> got enslaved.
</p>
<</if>><p>
Your slavers arrived the Purrloin —- immediately several slutty nekos thrown themselves on the floor writhing for your slavers' attention. But they are here on a mission... kinda, of uh... what mission again?
</p>
<p>
The hostess, seeing their valid reservation of the place, escorted your slavers to one of the private rooms. There,
four sexy nekos are strewn around in the bed, <<if $g.whore.isHasDick()>>all with hard dicks<<else>>all with wet pussies<</if>> ready for whatever their clients desires.
</p>
<p>
Initially, they let their slave <<rep $g.fated>> play with the four neko toys available in the room. But <<rep $g.fated>> does not seem to be overly enthusiastic by the idea and nothing seems to happen. Frustrated, your slavers decided to <<uadv $g.trainer>> unleash their frustrations by joining in the orgy —-
they make <<rep $g.fated>> join the nekos as the fifth orgy slave, your slavers proceed to use all five slaves with abandon. For a few hours the room —- locked tight —- were filled with nothing but hard sex and aroused moans coming from both the slaves and the slavers. Your slavers never noticed when, but by the end of the orgy <<rep $g.fated>> somehow sported a new pair of neko eyes —- rewarding the slave for such a debauched servicing of <<their $g.fated>> betters.
</p>
<p>
Having fully exhausted the slaves, your slavers spent a few more hours recuperating before chaining <<rep $g.fated>> for a long journey home, successful in the journey that will no doubt be called as the trial of love.
</p><<include 'Quest_the_seven_deadly_transformation__lustCrit'>><p>
Your slavers arrived the Purrloin —- immediately several slutty nekos thrown themselves on the floor writhing for your slavers' attention. But they are here on a mission... kinda, of uh... what mission again?
</p>
<p>
The hostess, seeing their valid reservation of the place, escorted your slavers to one of the private rooms. There,
four sexy nekos are strewn around in the bed, <<if $g.whore.isHasDick()>>all with hard dicks<<else>>all with wet pussies<</if>> ready for whatever their clients desires.
</p>
<p>
Initially, they let their slave <<rep $g.fated>> play with the four neko toys available in the room. But <<rep $g.fated>> does not seem to be overly enthusiastic by the idea and nothing seems to happen. Frustrated, your slavers try to force enthusiasm by disciplining <<rep $g.fated>>, and trying out other nekos, but nothing seem to happen.
</p>
<p>
Disappointed, your slavers turned to leave the establishment without perusing any of the wares. The hostess upon seeing the dissatisfaction in your slavers assumed the worst, and promised to send another invitation to your company. Well, at least this means you can try again for free some time later.
</p><p>
Your slavers arrived the Purrloin —- immediately several slutty nekos thrown themselves on the floor writhing for your slavers' attention. But they are here on a mission... kinda, of uh... what mission again?
</p>
<p>
The hostess, seeing their valid reservation of the place, escorted your slavers to one of the private rooms. There,
four sexy nekos are strewn around in the bed, <<if $g.whore.isHasDick()>>all with hard dicks<<else>>all with wet pussies<</if>> ready for whatever their clients desires.
</p>
<p>
Initially, they let their slave <<rep $g.fated>> play with the four neko toys available in the room. But <<rep $g.fated>> does not seem to be overly enthusiastic by the idea and nothing seems to happen. Frustrated, your slavers try to force enthusiasm by disciplining <<rep $g.fated>>, and trying out other nekos, but nothing seem to happen.
</p>
<p>
Disappointed, your slavers turned to leave the establishment without perusing any of the wares. Before leaving, they make another appointment so they can try again —- albeit having to pay quite a large amount for it.
</p><<run new setup.Title(
'tower_of_roses_admirer', /* key */
"Admirer of Roses", /* name */
'Currently wooing a certain elven noble sealed in a thorny tower', /* name */
'is currently wooing a certain elven noble sealed inside a tower in the forest.',
0, /* slave value */
{},
)>>
<<run new setup.Title(
'tower_of_roses_obtained', /* key */
"Dethorned Rose", /* name */
'A hopelelssly romantic elven noble who sealed themselves in a thorny tower and fell for the wrong slaver', /* name */
'was an elven romantic holed up in a tower in search for true love.',
3000, /* slave value */
{},
)>>
<<run new setup.UnitGroup(
'quest_tower_of_roses1',
"prince",
[
[setup.unitpool.race_elf_male, 0.5],
[setup.unitpool.race_elf_female, 0.5], ],
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.Trait('unit', setup.trait.face_attractive), ],
)>>
<<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.per_generous,
setup.trait.eq_valuable,
setup.trait.skill_entertain,
],
[
setup.trait.per_slow,
setup.trait.per_lunatic,
setup.trait.per_thrifty,
setup.trait.magic_dark,
setup.trait.corrupted,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Not(setup.qres.LoverExist()),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'tower_of_roses', /* key */
"Tower of Roses", /* Title */
"darko", /* Author */
[ 'forest', 'money',
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer, },
{ /* actors */
'prince': setup.unitgroup.quest_tower_of_roses1, },
[ /* costs */
],
'Quest_tower_of_roses',
setup.qdiff.normal18, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_rosesCrit',
[
setup.qc.AddTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.VarSet('tower_of_roses_affection', 35, -1),
setup.qc.MoneyCrit(), ],
], [
'Quest_tower_of_rosesSuccess',
[
setup.qc.AddTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.VarSet('tower_of_roses_affection', 0, -1),
setup.qc.MoneyNormal(), ],
], [
'Quest_tower_of_rosesFailure',
[
],
], [
'Quest_tower_of_rosesDisaster',
[
setup.qc.SlaveMarker('prince'),
setup.qc.TraumatizeRandom('admirer', 10), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('tower_of_roses_obtained'),
setup.qres.NoUnitWithTitle('tower_of_roses_admirer'),
],
)>><<include 'Quest_tower_of_rosesDescCommon'>>
<p>
You can try to send one of your slavers to woo the <<prince $g.prince>>, supplied with a prewritten script and another slaver to help arrange the performance with suitably placed flowers. Of course, you are only interested in doing so because of a certain rumors you've been hearing: the <<prince $g.prince>> kept many valuables in the tower which <<they $g.prince>> often give to the suitors <<they $g.prince>> find attractive.
Beware that this is going to be a long-term endeavor and whoever you select as the suitor
will have to commit to it!
</p><<include 'Quest_tower_of_roses2Crit'>>
<p>
Thus begins <<rep $g.admirer>>'s adventure to woo the <<prince $g.prince>>.
Whether or not <<they $g.admirer>> succeed depends on your decisions...
</p><<include 'Quest_tower_of_roses2Success'>>
<p>
Thus begins <<rep $g.admirer>>'s adventure to woo the <<prince $g.prince>>.
Whether or not <<they $g.admirer>> succeed depends on your decisions...
</p><<include 'Quest_tower_of_roses2Failure'>><<include 'Quest_tower_of_roses2Disaster'>><<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.per_generous,
setup.trait.eq_valuable,
setup.trait.skill_entertain,
],
[
setup.trait.per_slow,
setup.trait.per_lunatic,
setup.trait.per_thrifty,
setup.trait.magic_dark,
setup.trait.corrupted,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('tower_of_roses_admirer'),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'tower_of_roses2', /* key */
"Tower of Roses", /* Title */
"darko", /* Author */
[ 'forest', 'money', 'prep'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer, },
{ /* actors */
'prince': setup.unitgroup.quest_tower_of_roses1, },
[ /* costs */
],
'Quest_tower_of_roses2',
setup.qdiff.normal24, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_roses2Crit',
[
setup.qc.VarAdd('tower_of_roses_affection', 70, -1),
setup.qc.MoneyCrit(), ],
], [
'Quest_tower_of_roses2Success',
[
setup.qc.VarAdd('tower_of_roses_affection', 35, -1),
setup.qc.MoneyNormal(), ],
], [
'Quest_tower_of_roses2Failure',
[
],
], [
'Quest_tower_of_roses2Disaster',
[
setup.qc.SlaveMarker('prince'),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.TraumatizeRandom('admirer', 10), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.VarLte('tower_of_roses_affection', 99),
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('tower_of_roses_admirer', {job_key: 'slaver'}),
],
)>><p>
An elven <<prince $g.prince>> has come to age and in search of a life-long companion. Being a hopeless romantic, <<they $g.prince>> built a tower deep within the forests and secluded <<themselves $g.prince>> in the uppermost floor of the tower. With the help of the elven wizards, thorny roses are grown all over the first floor of the tower, forming a curse that makes it impossible to access the <<prince $g.prince>>.
</p>
<p>
The <<prince $g.prince>> is inviting all the finest suitors from around the region to attempt to woo <<them $g.prince>> from below, just like in a book <<they $g.prince>> read. Only when <<their $g.prince>> true love appears shall the curse be broken and the thorny roses wilted, opening the way to the <<prince $g.prince>>.
</p><p>
<<if $varstore.get('tower_of_roses_affection') >= 65>>
It seems the prince is now deeply infatuated with <<rep $g.admirer>>. An opportunity may come very soon...
<<elseif $varstore.get('tower_of_roses_affection') >= 30>>
Your slavers noticed the <<prince $g.prince>> staring longingly at
<<rep $g.admirer>>...
<<else>>
It seems that <<rep $g.admirer>> caught the <<prince $g.prince>>'s attention...
<</if>>
</p><<include 'Quest_tower_of_rosesDescCommon'>>
<<set _headunit = setup.getUnit({title: "tower_of_roses_admirer", job: setup.job.slaver})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slaver important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
You can continue <<rep _headunit>>'s effort to woo the <<prince $g.prince>>, if you so desire.
</p>
<</if>><p>
Your slavers arrived at the hidden tower in the forest.
Sharp deadly thorns surround the entrance of the tower, barring anyone to come in or come out.
From the outside of the tower,
using the script written <<uadv $g.writer>> by <<rep $g.writer>>, your slaver <<rep $g.admirer>> <<uadv $g.admirer>> delivered the poem in such a masterful way.
From the porch of <<their $g.prince>> tower, the <<prince $g.prince>> can't help but completely swoon over the delivery, and by extension to <<rep $g.admirer>>.
</p>
<<include 'Quest_tower_of_rosesCommon'>><p>
Your slavers arrived at the hidden tower in the forest.
Sharp deadly thorns surround the entrance of the tower, barring anyone to come in or come out.
From the outside of the tower,
with the script written <<uadv $g.writer>> by <<rep $g.writer>>, your slaver <<rep $g.admirer>> <<uadv $g.admirer>> delivered the poem.
From the porch of <<their $g.prince>> tower, the <<prince $g.prince>> can't help but admires
<<rep $g.admirer>>'s charm.
</p>
<<include 'Quest_tower_of_rosesCommon'>><p>
Your slavers arrived at the hidden tower in the forest.
Sharp deadly thorns surround the entrance of the tower, barring anyone to come in or come out.
<<rep $g.admirer>> <<uadv $g.admirer>> read the script written by <<rep $g.writer>>. But the delivery failed to impress the <<prince $g.prince>>, who eventually closed <<their $g.prince>> window and turning your slavers away.
</p><p>
Your slavers arrived at the hidden tower in the forest.
Sharp deadly thorns surround the entrance of the tower, barring anyone to come in or come out.
<<rep $g.admirer>> <<uadv $g.admirer>> messed up reading the script written by <<rep $g.writer>>. The <<prince $g.prince>> was visibly upset by the incident and whatever admiration <<they $g.prince>> had towards <<rep $g.admirer>> are all gone and have to be rebuilt from scratch.
</p>
<p>
Being completely rejected by the <<prince $g.prince>> left <<rep $g.admirer>>
slightly traumatized.
</p><<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'Admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.per_generous,
setup.trait.eq_valuable,
setup.trait.skill_entertain,
],
[
setup.trait.per_slow,
setup.trait.per_lunatic,
setup.trait.per_thrifty,
setup.trait.magic_dark,
setup.trait.corrupted,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('tower_of_roses_admirer'),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'tower_of_roses__fatal_attraction', /* key */
"Tower of Roses: Fatal Attraction", /* Title */
"darko", /* Author */
[
'forest',
'prep',
'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'kidnapper2': setup.qu.kidnapper,
'kidnapper1': setup.qu.kidnapper, },
{ /* actors */
'prince': setup.unitgroup.quest_tower_of_roses1, },
[ /* costs */
],
'Quest_tower_of_roses__fatal_attraction',
setup.qdiff.hardest37, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_roses__fatal_attractionCrit',
[
setup.qc.Ire('elf', 3),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.AddTitle('prince', 'tower_of_roses_obtained'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.Slave('prince', "was a hopelessly romantic who were betrayed by their true love and enslaved", undefined),
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.MoneyCustom(4500),
setup.qc.TraumatizeRandom('admirer', 20),
setup.qc.TraumatizeRandom('admirer', 20), ],
], [
'Quest_tower_of_roses__fatal_attractionSuccess',
[
setup.qc.Ire('elf', 3),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.AddTitle('prince', 'tower_of_roses_obtained'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.Slave('prince', "was a hopelessly romantic who were betrayed by their true love and enslaved", undefined),
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.MoneyCustom(1500),
setup.qc.TraumatizeRandom('admirer', 20),
setup.qc.TraumatizeRandom('admirer', 20), ],
], [
'Quest_tower_of_roses__fatal_attractionFailure',
[
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'), ],
], [
'Quest_tower_of_roses__fatal_attractionDisaster',
[
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.MissingUnit('admirer'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_tower_of_roses__point_of_love'>>
<p>
You have chosen to kidnap the <<princess $g.prince>>
</p><<include 'Quest_tower_of_roses__fatal_attractionSuccess'>><p>
<<rep $g.admirer>> reluctantly recited the love poem prewritten by your slavers. Even though it was a half-hearted effort, the <<prince $g.prince>> still swooned over. Before your slavers' eyes, the rose thorns surrounding the tower slowly retreated, revealing the entrance to the tower.
<<rep $g.kidnapper1>> and <<rep $g.kidnapper2>> immediately got to work, entering the tower silently up to the top level and ties up and unsuspecting <<prince $g.prince>>. Gagged and bound, your slavers brought the <<prince $g.prince>> home to be introduced to <<their $g.prince>> new life as a slave, an ending to <<their $g.prince>> journey of love.
</p>
<p>
Having betrayed the <<princess $g.prince>>, your slaver <<rep $g.admirer>> were deeply traumatized and will need a lot of time to recover.
</p><p>
Right before your slavers execute the plan, something snapped inside <<rep $g.admirer>>'s head. In the middle of the night, <<they $g.admirer>> vanished from the team, reaching the tower clearing alone. There, <<they $g.admirer>> sincerely begs for the <<princess $g.prince>> forgiveness, and tell <<them $g.prince>> about your degenerate plan. By the time the rest of your slavers arrived, the <<prince $g.prince>> were already nowhere to be seen...
</p><p>
Right before your slavers execute the plan, something snapped inside <<rep $g.admirer>>'s head. In the middle of the night, <<they $g.admirer>> vanished from the team, reaching the tower clearing alone. There, <<they $g.admirer>> sincerely begs for the <<princess $g.prince>> forgiveness, and tell <<them $g.prince>> about your degenerate plan. By the time the rest of your slavers arrived, neither the <<prince $g.prince>> nor <<rep $g.admirer>> were anywhere to be seen...
</p>
<p>
Perhaps you will see <<rep $g.admirer>> again one day, if <<they $g.admirer>> are not too busy eloping with <<their $g.admirer>> <<prince $g.prince>>.
</p><<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.per_generous,
setup.trait.eq_valuable,
setup.trait.skill_entertain,
],
[
setup.trait.per_slow,
setup.trait.per_lunatic,
setup.trait.per_thrifty,
setup.trait.magic_dark,
setup.trait.corrupted,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('tower_of_roses_admirer'),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'tower_of_roses__true_love', /* key */
"Tower of Roses: True Love", /* Title */
"darko", /* Author */
[
'forest',
'prep',
'unit'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer,
},
{ /* actors */
'prince': setup.unitgroup.quest_tower_of_roses1, },
[ /* costs */
],
'Quest_tower_of_roses__true_love',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_roses__true_loveCrit',
[
setup.qc.Favor('elf', 200),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.Equipment(setup.equipmentpool.knowledge_good),
setup.qc.Slaver('prince', "was a hopelessly romantic who found their true love amongst one of your slavers", undefined),
setup.qc.AddTitle('prince', 'tower_of_roses_obtained'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.AddHistory('admirer', "successfully wooed an elven royalty."),
setup.qc.BoonizeRandom('admirer', 10),
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.Friendship('prince', 'admirer', 1000),
setup.qc.Hookup('prince', 'admirer'),
],
], [
'Quest_tower_of_roses__true_loveSuccess',
[
setup.qc.Favor('elf', 200),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.MoneyCustom(1000),
setup.qc.Slaver('prince', "was a hopelessly romantic who found their true love amongst one of your slavers", undefined),
setup.qc.AddTitle('prince', 'tower_of_roses_obtained'),
setup.qc.RemoveTitle('admirer', 'tower_of_roses_admirer'),
setup.qc.AddHistory('admirer', "successfully wooed an elven royalty."),
setup.qc.BoonizeRandom('admirer', 5),
setup.qc.RemoveFromUnitGroup('prince'),
setup.qc.Friendship('admirer', 'prince', 1000),
setup.qc.Hookup('prince', 'admirer'),
],
], [
'Quest_tower_of_roses__true_loveFailure',
[
setup.qc.VarAdd('tower_of_roses_affection', -50, -1), ],
], [
'Quest_tower_of_roses__true_loveDisaster',
[
setup.qc.VarAdd('tower_of_roses_affection', -100, -1),
setup.qc.TraumatizeRandom('admirer', 10), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_tower_of_roses__point_of_love'>>
<p>
You have chosen to complete the <<princess $g.prince>>'s dream and reunite <<them $g.prince>> with their beloved.
</p><p>
For one last time, your slaver <<rep $g.admirer>> <<uadv $g.admirer>> delivered a heartstruck love poem towards the <<prince $g.prince>>. When the poem ends, before your slavers' eyes the thorny rose surrounding the tower all start to withdraw until there was nothing but beautiful rose petals scattered around the tower.
Wasting no time, <<rep $g.admirer>> rushed inside the tower and into the <<prince $g.prince>>'s chamber, who lies there waiting for your slaver. A romantic scene ensues with the two embracing and kissing each other.
</p>
<p>
It was not difficult for <<rep $g.admirer>> to convince the madly in love <<prince $g.prince>> to become one of your slavers.
</p><<include 'Quest_tower_of_roses__true_loveCommon'>>
<p>
To commemorate the occassion, the <<prince $g.prince>> using <<their $g.prince>> connection ordered an expensive clothes to be made for <<their $g.prince>> beloved.
</p><<include 'Quest_tower_of_roses__true_loveCommon'>>
<p>
Before going back, your slavers collected whatever valuables remained in the tower.
</p><p>
In such an important moment, nervousness gripped <<rep $g.admirer>> who stuttered and failed to deliver the last poem.
The thorny roses never withdraw from the tower and your slavers will have to rebuild some of the affection to try again.
</p><p>
In such an important moment, nervousness gripped <<rep $g.admirer>> who stuttered and failed to deliver the last poem.
The thorny roses never withdraw from the tower and your slavers will have to rebuild some of the affection to try again.
</p>
<p>
The experience traumatized <<rep $g.admirer>> who regretted the turn of events greatly.
</p><<run new setup.Title(
"quest_vault_trophy_0", /* key */
"Vault Trophy", /* name */
"Special prize for the annual Tiger Bank vault assault", /* description */
"was your trophy for winning the annual Tiger Bank vault assault", /* unit text */
8000, /* slave value */
{ /* skill additives */
sex: 4,},
)
>>
<<run new setup.UnitGroup(
"vault_assault2",
"Vault Trophy",
[ /* pools */
[setup.unitpool.race_elf_male, 0.5],
[setup.unitpool.race_elf_female, 0.5],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_huge),
setup.qc.AddTitle('unit', 'quest_vault_trophy_0'),
setup.qc.BgTraitReset('unit', setup.trait.bg_clerk),
],
)>>
<<set _criteriainfiltrator2 = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* name */
[
setup.trait.per_nimble,
setup.trait.per_attentive,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.race_neko,
setup.trait.bg_clerk,
setup.trait.bg_thief,
setup.trait.per_evil,
],
[
setup.trait.per_honorable,
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_dreamy,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.race_elf,
setup.trait.per_slow,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 3,
}
)>>
<<set _criteriainfiltrator1 = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* name */
[
setup.trait.per_nimble,
setup.trait.per_attentive,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.race_neko,
setup.trait.bg_clerk,
setup.trait.bg_thief,
setup.trait.per_evil,
],
[
setup.trait.per_honorable,
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_dreamy,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.race_elf,
setup.trait.per_slow,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 3,
}
)>>
<<run new setup.QuestTemplate(
'vault_assault', /* key */
"Vault Assault", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'veteran',
'unknown',
],
4, /* weeks */
4, /* expiration weeks */
{ /* roles */
'banker': [ setup.qu.bureaucrat, 1],
'infiltrator2': [ _criteriainfiltrator2, 1],
'infiltrator1': [ _criteriainfiltrator1, 1],
},
{ /* actors */
'agent': 'quest_event_loan_tiger1',
'slave': 'vault_assault2',
},
[ /* costs */
setup.qc.Favor('bank', -600),
],
'Quest_vault_assault',
setup.qdiff.harder44, /* difficulty */
[ /* outcomes */
[
'Quest_vault_assaultCrit',
[
setup.qc.Item(setup.item.potion_isolation),
setup.qc.Slave('slave', "is your trophy for winning the annual Tiger Bank vault assault", undefined),
setup.qc.VarSet('vault_assault_cooldown', '1', 53),
setup.qc.IfThenElse(
setup.qres.NoItem(setup.item.isolation_technology),
setup.qc.DoAll([
setup.qc.Item(setup.item.isolation_technology)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(4000)
], undefined)),
],
],
[
'Quest_vault_assaultCrit',
[
setup.qc.Item(setup.item.potion_isolation),
setup.qc.VarSet('vault_assault_cooldown', '1', 53),
setup.qc.IfThenElse(
setup.qres.NoItem(setup.item.isolation_technology),
setup.qc.DoAll([
setup.qc.Item(setup.item.isolation_technology)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(4000)
], undefined)),
],
],
[
'Quest_vault_assaultCrit',
[
setup.qc.VarSet('vault_assault_cooldown', '1', 53),
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
setup.qc.ItemPool(setup.itempool.furniture_normal),
setup.qc.ItemPool(setup.itempool.all),
setup.qc.Equipment(setup.equipmentpool.all_sex),
],
],
[
'Quest_vault_assaultDisaster',
[
setup.qc.VarSet('vault_assault_cooldown', '1', 53),
setup.qc.Ire('bank', 3),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions */
setup.qres.FavorAtLeast('bank', 800),
setup.qres.VarNull('vault_assault_cooldown'),
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
The <<rep $company.bank>> treasure vault is located deep within the <<lore location_npc>>. The imposing vault is infamous for being completely impenetrable, no small thanks to the bank's ingenuity. Each year, the bank invites some of its most unscrupulous allies in a competition to break through the vault, which often reveals security vulnerabilities that they quickly fix. The aptly dubbed "Vault Assault" event promises great treasures to the winner, those who are able to breach the vault into its inner chambers... or so your <<repfull _u>> said.
</p>
<p>
Of course, the bank themselves never fully acknowledge the existence of this Vault Assault, and its existence remains largely a mystery. That is, until you have received a mysterious letter inviting you for the event. Having consulted with <<rep _u>>, you are sure that the letter is legitimate, which makes sense given your strong connections with the bank. There is a small catch though — a small "registration fee" in form of your favor to them.
</p>
<p>
You can try to send a group of infiltrators to participate in this event. A white-collar criminal to smooth out the entrance, and two infiltrators to get past the security should do it.
<<if $inventory.isHasItem(setup.item.isolation_technology)>>
You've already obtained the <<rep setup.item.isolation_technology>>, but perhaps you can still stock up on that <<rep setup.item.potion_isolation>>...
<<else>>
While the entry fee is steep, the vaults promises rewards that can never be found anywhere else...
<</if>>
</p><p>
Arriving at the vault entrance, <<rep $g.banker>> can already see some other shady people loosely gathering around the place.
Clearly your slaves have arrived at the right place. With many guards surrounding the vault, it will be a daunting task to try and infiltrate the structure.
</p>
<p>
Your <<repfull $g.banker>> begin their work by going into the security office, while flashing your credentials as strong allies to <<rep $company.bank>>. With <<rep $g.banker>> <<uadv $g.banker>> distracting the security officers, <<rep $g.infiltrator1>> and <<utheirrel $g.infiltrator1 $g.infiltrator2>> <<rep $g.infiltrator2>> seized the opportunity and managed to sneaked in from within the security office into the vault.
</p>
<p>
The vault complex appears to be a maze, with numerous traps littering every nook and corner. <<rep $g.infiltrator1>> had to bend <<their $g.infiltrator1>> limbs in various questionable positions to get through some of the traps.
<<if $g.infiltrator1.isHasTrait('bg_thief') or $g.infiltrator1.isHasTrait('bg_assassin')>>
But <<rep $g.infiltrator1>> managed to fully recall their shady past and dodged all of these traps with ease.
<<elseif $g.infiltrator1.isHasTrait('per_nimble')>>
But <<rep $g.infiltrator1>> is a nimble slaver and has no problem dodging and going through all these traps.
<<elseif $g.infiltrator1.isHasTrait('per_tough')>>
<<rep $g.infiltrator1>>'s inflexible body means that <<they $g.infiltrator1>> hit several of the traps, injuring the slaver.
<<run $hospital.injureUnit($g.infiltrator1, 3)>>
<<else>>
While <<rep $g.infiltrator1>> managed to dodge most of the traps, some still hit <<them $g.infiltrator1>> and lightly injuring the slaver.
<<run $hospital.injureUnit($g.infiltrator1, 1)>>
<</if>>
</p>
<p>
They eventually arrived at what seems to be an imposing door, surely hiding great treasures behind it. All that's blocking your slaver's way is a simple, or at least simple-looking lock. On a closer look, it actually resembles a puzzle more than a lock,
<<if $g.infiltrator2.isHasTrait('bg_clerk') or $g.infiltrator2.isHasTrait('bg_scholar')>>
which is not a problem for your <<repfull $g.infiltrator2>>, given <<their $g.infiltrator2>> studious background.
<<elseif $g.infiltrator2.isHasTrait('per_smart') or $g.infiltrator2.isHasTrait('per_studious') or $g.infiltrator2.isHasTrait('per_curious')>>
which is not a problem for your <<repfull $g.infiltrator2>>, given <<their $g.infiltrator2>> studious nature.
<<elseif $g.infiltrator2.isHasTrait('per_evil')>>
which your evil slaver <<rep $g.infiltrator2>> somehow were able to make short work of. Looks like there is a shortcut designed specifically for evil slavers, but for what purpose?
<<elseif $g.infiltrator2.isHasTrait('race_neko')>>
which turns out to be a puzzle of neko origin. Your neko slaver <<rep $g.infiltrator2>> made quick work of the sloppy lock.
<<else>>
which greatly puzzled <<rep $g.infiltrator2>>, and ultimately took your slavers a long time to unlock, painting them as sloppy thieves. This earned you some ire from the <<rep $company.bank>>, who had expected you to send your best infiltrators.
<<run $ire.adjustIre($company.bank, 1)>>
<</if>>
</p>
<<if $gOutcome == 'failure'>>
<p>
The door unlocks, opening up the room behind it for your slavers. Various baubles, trinkets, and equipments lie scattered around the room, ripe for your slaver's takings.
<<rep $g.infiltrator1>> <<uadv $g.infiltrator1>> took all the treasures they could found, satisfied with the loot, before bringing them home in a supposed glory.
</p>
<p>
Little did they know that the room was a decoy room, designed specifically to hide the actual treasure behind them.
</p>
<<else>>
<p>
The door unlocks, opening up the room behind it for your slavers. Various baubles, trinkets, and equipments lie scattered around the room, ripe for your slaver's takings.
But thanks to <<rep $g.infiltrator1>>'s
<<if $g.infiltrator1.isHasTrait('per_attentive')>>
keen eyes,
<<elseif $g.infiltrator1.isHasTrait('per_dreamy')>>
keen intuition,
<<else>>
dumb luck,
<</if>>
your slavers were able to deduce that the room hides even greater secret. Sure enough, after carefuly prodding around the room they uncovered a secret hatch under one of the expensive-looking rugs. Your slavers <<uadv $g.infiltrator2>> moved inside the hatch.
</p>
<p>
Within an opening there, the <<rep setup.item.isolation_technology>> sits majestically on top of a pedestal.
A truly magnificent piece of work, it is said that every former employee of the <<rep $company.neko>> will be subjected to this "therapy" before they leave the company, erasing all confidential information from their memories.
<<if $inventory.isHasItem(setup.item.isolation_technology)>>
You've already obtained the <<rep setup.item.isolation_technology>>, but your slavers were still able to gather the valuable
<<else>>
This is truly a fitting prize for such a contest, and your slavers gathered both the technology and the valuable
<</if>>
<<rep setup.item.potion_isolation>> sitting next to it.
</p>
<<if $gOutcome == 'crit'>>
<p>
But still, <<rep $g.infiltrator2>> gut feeling tells them there is still more to be had in the place. Indeed, with extreme scrutiny they were able to discover several oddly misplaced pots in the corners of the room. After they rearranged the pots in order, a clicking sound can be heard from somewhere around the room, revealing a hidden chamber to your slavers. Behind the chamber lies an elf, probably a former employee, fully bound from head to toe in bondage. A letter is hanged from the clamps on their nipples, congratulating the slavers for "winning" the Vault Assault!
</p>
<p>
With the new slave in tow and all other trophies they have gathered, your slavers returned back home in full glory, having fully bested the Vault Assault.
</p>
<</if>>
<</if>><p>
In a great display of incompetence, your slavers broke the completely wrong vault, a small off-shoot branch of the <<rep $company.neko>>. This earned your company the ire of the bank, not because of the breach itself, but because of your disrespect having sent such an unskillful team of slavers for the prestigious event.
</p><<run new setup.Title(
'choose_your_own_adventure_demon', /* key */
"Demon of Choices", /* name */
'Was once a demon playing with mortals using a corrupted necromonicon', /* name */
'was a powerful demon playing with mortals using a corrupted necromonicon',
3000, /* slave value */
{
arcane: 4,
sex: 3,
},
)>>
<<set _traits = setup.TraitHelper.getAllTraitsOfTags(['skin']).filter(a => !a.getTags().includes('corruption') && !a.getTags().includes('dickshape'))>>
<<set _reward = setup.qc.OneRandom(
_traits.map(a => setup.qc.Trait('unit', a))
)>>
<<run new setup.UnitGroup(
'quest_what_it_means_to_be_a_hero1',
"Demon Lord",
[
[setup.unitpool.race_demon_male, 0.5],
[setup.unitpool.race_demon_female, 0.5], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitReplace('unit', setup.trait.per_evil),
setup.qc.AddTitle('unit', 'choose_your_own_adventure_demon'),
_reward,
_reward,
_reward,
setup.qc.ResetInnateTraits('unit'),
],
)>>
<<set _common = [
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_siblings', 'siblings'),
setup.qc.Sibling('hero1', 'hero2'),
setup.qc.Money(5000),
),
setup.qc.Opportunity('choose_your_own_adventure__true_end'),
setup.qc.VarSet('choose_your_own_adventure_progress', '10', -1),
]>>
<<run new setup.QuestTemplate(
'what_it_means_to_be_a_hero', /* key */
"What It Means to be a Hero", /* Title */
"darko", /* Author */
[
'forest',
'veteran',
'special',
'unknown'
], /* tags */
4, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'warrior': setup.qu.light_warrior,
'purifier': setup.qu.purify_assistant,
'tank': setup.qu.tank, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2,
'demon': setup.unitgroup.quest_what_it_means_to_be_a_hero1, },
[ /* costs */
],
'Quest_what_it_means_to_be_a_hero',
setup.qdiff.abyss59, /* difficulty */
[ /* outcomes */
[
'Quest_what_it_means_to_be_a_heroCrit',
_common,
], [
'Quest_what_it_means_to_be_a_heroCrit',
_common.concat([
setup.qc.Injury('purifier', 1),
setup.qc.TraumatizeRandom('tank', 4),
setup.qc.Corrupt('warrior'),
]),
], [
'Quest_what_it_means_to_be_a_heroCrit',
_common.concat([
setup.qc.Injury('purifier', 10),
setup.qc.TraumatizeRandom('tank', 40),
setup.qc.Corrupt('warrior'),
setup.qc.Corrupt('warrior'),
]),
], [
'Quest_what_it_means_to_be_a_heroDisaster',
[
setup.qc.VarSet('choose_your_own_adventure_progress', '10', -1),
setup.qc.QuestDirect('heroic_end'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '9'), ],
)>><p>
The demonic book of "Choose Your Own Adventure" has quite a few characters.
First, there are the
<<= $varstore.get('choose_your_own_adventure_lovers')>>, whose tale the book describes.
An then, there's you, who is making changes to the book and ending up as the villain.
But then, there's the sage, somehow just living quietly off in the forests.
</p>
<p>
Recalling the story, it was during their training with the sage that the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
had their vision of the demon in the desert.
Did the sage tampered with their memory?
Who is the sage?
</p>
<p>
You can send a group of slavers together with the book back into the forest to demand these answers... but beware. It is going to be incredibly dangerous. This surely is the true end to the story.
</p><p>
Arriving at the sage's cottage, your slavers were surprised to find the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
there too, with their
<<if $varstore.get('choose_your_own_adventure_strength')>>
sword
<<else>>
staff
<</if>>
pointed at the sage.
Seeing your arrival, the sage finally dropped all pretense and morphed into <<their $g.demon>> true form —- a true pureblood demon. A dark blast swoosh around the area, pushing your slavers and the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
to the ground.
</p>
<p>
Apparently, the entire scene was all for the demon's amusement. The book? A morphed necronomicon with <<their $g.demon>> own sloppy handwritten note on it. The demon watched over all the action unfold through the pendants given to the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
including all the
<<if $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>incestuous<</if>>
sexy actions between the
<<= $varstore.get('choose_your_own_adventure_siblings')>>.
<</if>>
Seeing no point in fighting your slavers, the demon attempted to flee the scene.
</p>
<p>
The once pristine grove is now a dessicated field of rotten flowers.
But the dead trees prove a hindrance for the demon as <<they $g.demon>> were unable to fly away.
Seeing the opportunity,
<<= $g.hero1.getName()>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
cautiously
<<else>>
bravely<</if>>
<<if $varstore.get('choose_your_own_adventure_strength')>>
notched an arrow
<<else>>
hurled a spell
<</if>>
into the wings of the demons.
Angered, the demons turned instead to face the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
as they stood by.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers fought valiantly throughou the fight, deftly avoiding most lethal and non-lethal blows.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers suffered minor injuries throughout the fight, with <<rep $g.warrior>> being corrupted by the forces while <<uadv $g.warrior>> protecting <<their $g.warrior>> allies.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers suffered major injuries throughout the fight, with <<rep $g.warrior>> being significantly corrupted by the forces while <<uadv $g.warrior>> protecting <<their $g.warrior>> allies.
</p>
<</if>>
<p>
The fight was intense, as the demon hurled <<lore magic_dark>> of various kind into your slavers and the
<<= $varstore.get('choose_your_own_adventure_lovers')>>.
But fueled by their
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
anger,
<<else>>
resolve,
<</if>>
after a fierce fight and in no small part thanks to your slavers' bravery,
the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
and your slavers emerged victorious with the demon
collapsed to the ground, unused to the workings of the mortal world.
As the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
attempted to kill the demon, your slavers asked the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
to instead take
"pity" on the demon. Your slavers <<uadv $g.tank>> promise them that your slavers will ensure that they will never see the demon ever again.
</p>
<p>
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
Their quest for revenge will be incomplete for as long as the demon lives.
<<else>>
Their quest for peace cannot be over for as long as the demon lives.
<</if>>
But they still defer somewhat to your slavers, whose company has been their most trustworthy allies thus far. But they ask you now to make a choice —- if you spare the demon, they will leave the land.
So they give you a choice. The final choice in the story.
</p>
<p>
If you kill the demon, they shall join your company.
</p>
<p>
If you spare the demon, they shall leave the region, never to be seen again.
</p>
<p>
What will you choose?
</p><p>
Arriving at the sage's cottage, your slavers were surprised to find the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
there too. But your slavers appear too late, and the sage has somehow convinced the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
that your company is the true mastermind of all the tragedies.
Their eyes full of
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
hatred,
<<else>>
resolve,
<</if>>
your slavers were asked to inform you to get ready to face judgment.
</p><<run new setup.QuestTemplate(
'establish_base', /* key */
'Establish Base', /* Title */
'darko', /* author */
[ /* tags */
'fort',
'upgrade'
],
1, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'planner': setup.qu.planner,
'builder1': setup.qu.builder,
'builder2': setup.qu.builder,
},
{ /* actors */
},
[ /* costs */
],
'QuestEstablishBase', /* passage description */
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'QuestEstablishBaseAll',
[
setup.qc.Money(250),
setup.qc.Building(setup.buildingtemplate.constructionoffice),
setup.qc.Building(setup.buildingtemplate.lodgings),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Money(250),
setup.qc.Building(setup.buildingtemplate.constructionoffice),
setup.qc.Building(setup.buildingtemplate.lodgings),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Money(250),
setup.qc.Building(setup.buildingtemplate.constructionoffice),
setup.qc.Building(setup.buildingtemplate.lodgings),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Money(250),
setup.qc.Building(setup.buildingtemplate.constructionoffice),
setup.qc.Building(setup.buildingtemplate.lodgings),
],
],
],
[], /* quest pool, rarity */
[], /* prerequisites to generate */
)>><p>
The first order of business is to finish establishing the fort as your
base of operation.
First of all, you and your slavers need somewhere to sleep.
After resolving that, you also need to build an office where you can plan
further improvements to the fort.
Building these two facilities take top priority.
</p><p>
It was hard work, but through <<rep $g.planner>> careful planning and
<<rep $g.builder1>> and <<rep $g.builder2>> hard work,
some part of the west wing of the fort has been made habitable
and turned into a <<rep setup.buildingtemplate.lodgings>> area.
Here, you can <<successtext "change yours or your slaver's skill focuses">>,
and hence this is a very important improvement.
You also have established
a small office just outside the fort for storing
blueprints for future improvements to the fort.
</p>
<p>
With this in mind, the next step is for you to build a <<rep setup.buildingtemplate.scouthut>>,
which allows you and your slavers to take on various quests to earn money.
</p><<run new setup.QuestTemplate(
'purify_all', /* id */
'Purify: Any', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-2),
], /* costs */
'PurifyAll', /* description */
setup.qdiff.normal40,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee'),
setup.qc.Purify('trainee'),
setup.qc.Purify('trainee'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Purify a unit, which removes a random corruption if it has any.
</p><p>
The purification went very smoothly, with the higher powers looking favorably at your company's
righteousness.
</p><p>
The purification attempt was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The higher powers were displeased with your company's degeneracy and decided to punish you instead
by injuring your slaver.
</p><<run new setup.QuestTemplate(
'purify_arms', /* id */
'Purify: Arms', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyArms', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'arms'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'arms'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's arms.
</p><<run new setup.QuestTemplate(
'purify_body', /* id */
'Purify: Body', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyBody', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'body'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'body'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's body.
</p><<run new setup.QuestTemplate(
'purify_dick', /* id */
'Purify: Dick', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyDick', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'dick'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'dick'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's dick.
</p><<run new setup.QuestTemplate(
'purify_ears', /* id */
'Purify: Ears', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyEars', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'ears'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'ears'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's ears.
</p><<run new setup.QuestTemplate(
'purify_eyes', /* id */
'Purify: Eyes', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyEyes', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'eyes'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'eyes'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's eyes.
</p><<run new setup.QuestTemplate(
'purify_legs', /* id */
'Purify: Legs', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyLegs', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'legs'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'legs'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's legs.
</p><<run new setup.QuestTemplate(
'purify_mouth', /* id */
'Purify: Mouth', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyMouth', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'mouth'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'mouth'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's mouth.
</p><<run new setup.QuestTemplate(
'purify_tail', /* id */
'Purify: Tail', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-5),
], /* costs */
'PurifyTail', /* description */
setup.qdiff.hard46,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'tail'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'tail'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's tail.
</p><<run new setup.QuestTemplate(
'purify_wings', /* id */
'Purify: Wings', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.purify_head,
'assistant1': setup.qu.purify_assistant,
'assistant2': setup.qu.purify_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.MoneyMult(-15),
], /* costs */
'PurifyWings', /* description */
setup.qdiff.hardest56,
[
[
'PurifyAllCrit',
[
setup.qc.Purify('trainee', 'wings'),
]
],
[
'PurifyAllSuccess',
[
setup.qc.Purify('trainee', 'wings'),
],
],
[
'PurifyAllFailure',
[
],
],
[
'PurifyAllDisaster',
[
setup.qc.Injury('trainee', 4),
],
],
],
[],
[],
)>><p>
Purify a unit's wings. Note that wing purification is significantly harder than other purifications.
</p><<run new setup.QuestTemplate(
'city_contact', /* id */
'Establish Contact: City of Lucgate', /* Title */
'darko', /* author */
['city', 'special', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_city,
'scout2': setup.qu.scout_city,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestCityContact', /* description */
setup.qdiff.normal25,
[
[
'QuestCityContactCrit',
[
setup.qc.Contact(setup.contacttemplate.citylead),
setup.qc.QuestDelay(setup.questpool.city, 7),
]
],
[
'QuestCityContactSuccess',
[
setup.qc.Contact(setup.contacttemplate.citylead),
setup.qc.QuestDelay(setup.questpool.city, 4),
],
],
[
'QuestCityContactFailure',
[
setup.qc.QuestDirect('city_contact'),
],
],
[
'QuestCityContactDisaster',
[
setup.qc.QuestDirect('city_contact'),
],
],
],
[],
[],
)>><p>
With the <<rep setup.buildingtemplate.scoutoffice>> ready,
you should go to the city to find some contacts who are willing to supply
your company with leads.
Finding such contact may be difficult due to how they perceive
slavers, but every city has an undercity whose people are more
tolerant of your actions.
</p><p>
Your slavers struck a deal with one of the local thief.
All you know is that you will get quest leads every week from the city.
</p><p>
Your slavers struck a deal with one of the local thief.
All you know is that you will get quest leads every week from the city.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><<run new setup.QuestTemplate(
'desert_contact', /* id */
'Establish Contact: Eastern Desert', /* Title */
'darko', /* author */
['desert', 'special', 'quest'], /* tags */
2, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_desert,
'scout2': setup.qu.scout_desert,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestDesertContact', /* description */
setup.qdiff.hard35,
[
[
'QuestDesertContactCrit',
[
setup.qc.Contact(setup.contacttemplate.desertlead),
setup.qc.QuestDelay(setup.questpool.desert, 10),
]
],
[
'QuestDesertContactSuccess',
[
setup.qc.Contact(setup.contacttemplate.desertlead),
setup.qc.QuestDelay(setup.questpool.desert, 6),
],
],
[
'QuestDesertContactFailure',
[
setup.qc.QuestDirect('desert_contact'),
],
],
[
'QuestDesertContactDisaster',
[
setup.qc.QuestDirect('desert_contact'),
],
],
],
[],
[],
)>><p>
With the <<rep setup.buildingtemplate.scoutcarriage>> ready,
you should now
find some contact in the <<lore region_desert>> who can supply your company with
leads for quests.
</p><p>
Your slavers journey to the east borne fruit. They managed to find
a settlement near an oasis who they managed to convince to let your company
solve their problems
</p><p>
Your slavers journey to the east borne fruit. They managed to find
a settlement near an oasis who they managed to convince to let your company
solve their problems
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><<run new setup.QuestTemplate(
'forest_contact', /* id */
'Establish Contact: Western Forest', /* Title */
'darko', /* author */
['forest', 'special', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_forest,
'scout2': setup.qu.scout_forest,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestForestContact', /* description */
setup.qdiff.normal15,
[
[
'QuestForestContactCrit',
[
setup.qc.Contact(setup.contacttemplate.forestlead),
setup.qc.QuestDelay(setup.questpool.forest, 9),
]
],
[
'QuestForestContactSuccess',
[
setup.qc.Contact(setup.contacttemplate.forestlead),
setup.qc.QuestDelay(setup.questpool.forest, 5),
],
],
[
'QuestForestContactFailure',
[
setup.qc.QuestDirect('forest_contact'),
],
],
[
'QuestForestContactDisaster',
[
setup.qc.QuestDirect('forest_contact'),
],
],
],
[],
[],
)>><p>
To being questing in the forest,
in addition to <<rep setup.buildingtemplate.scouttower>>, you also need
to find some promising contacts in the <<lore region_forest>>, among the
elves or the nekos living in the forest.
</p><p>
Your slavers happened upon a rather unscrupulous elf, who are willing
to supply your slavers with leads in exchange for occasional visits to your
fort.
</p><p>
Your slavers happened upon a rather unscrupulous elf, who are willing
to supply your slavers with leads in exchange for occasional visits to your
fort.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><<run new setup.QuestTemplate(
'scout_city', /* id */
'Scout: City of Lucgate', /* Title */
'darko', /* author */
['city', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_city,
'scout2': setup.qu.scout_city,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestScoutCity', /* description */
setup.qdiff.normal25,
[
[
'QuestScoutCityCrit',
[
setup.qc.QuestDelay(setup.questpool.city, 7),
]
],
[
'QuestScoutCitySuccess',
[
setup.qc.QuestDelay(setup.questpool.city, 5),
],
],
[
'QuestScoutCityFailure',
[
],
],
[
'QuestScoutCityDisaster',
[
],
],
],
[[setup.questpool.scoutcity, 1],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact has send you several promising leads in the kingdom capital<<lore location_lucgate>>.
You can follow up on those leads by sending a team for a full week into the
city.
</p><p>
The scouting mission was a complete success, with your team returning with more
quest options than expected.
</p><p>
The scouting mission went about as well as expected, and your team returns with
several quest options.
</p><p>
Unfortunately, all of the leads given by your contacts turn out to be dead.
Your slavers return home with nothing.
</p><p>
Unfortunately, the team were ambushed by locals during their stay in the city,
and was forced to retreat earlier than expected.
</p><<run new setup.QuestTemplate(
'scout_desert', /* id */
'Scout: Eastern Desert', /* Title */
'darko', /* author */
['desert', 'quest'], /* tags */
2, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_desert,
'scout2': setup.qu.scout_desert,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestScoutDesert', /* description */
setup.qdiff.hard35,
[
[
'QuestScoutDesertCrit',
[
setup.qc.QuestDelay(setup.questpool.desert, 9),
]
],
[
'QuestScoutDesertSuccess',
[
setup.qc.QuestDelay(setup.questpool.desert, 6),
],
],
[
'QuestScoutDesertFailure',
[
setup.qc.Injury('scout1', 1),
setup.qc.Injury('scout2', 1),
setup.qc.Injury('guard', 1),
],
],
[
'QuestScoutDesertDisaster',
[
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
setup.qc.Injury('guard', 2),
],
],
],
[[setup.questpool.scoutdesert, 1],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Via a mail from your contact, you have noticed several promising leads
in the faraway lands of the eastern deserts.
Your slavers would need two weeks to follow up on these leads, if you wish.
But be warned that venturing to the eastern desert is considerably more dangerous
than the rest.
</p><p>
The scouting mission was a complete success, with your team returning with more
quest options than expected.
</p><p>
The scouting mission went about as well as expected, and your team returns with
several quest options.
</p><p>
Your slavers were ambushed by another slaver group during their journey east.
They managed to escape, but not without severe injuries.
</p><p>
Either through bad luck or bad planning, your slavers were ambushed by a group of
orc marauders. The scout guard <<rep $g.guard>> barely fended off the attack,
but not without sustaining life-threatening injuries. <<They $g.guard>> will be
out of commission for a long while.
</p><<run new setup.QuestTemplate(
'scout_forest', /* id */
'Scout: Western Forest', /* Title */
'darko', /* author */
['forest', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_forest,
'scout2': setup.qu.scout_forest,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestScoutForest', /* description */
setup.qdiff.normal15,
[
[
'QuestScoutForestCrit',
[
setup.qc.QuestDelay(setup.questpool.forest, 7),
]
],
[
'QuestScoutForestSuccess',
[
setup.qc.QuestDelay(setup.questpool.forest, 5),
],
],
[
'QuestScoutForestFailure',
[
setup.qc.QuestDelay(setup.questpool.forest, 1),
],
],
[
'QuestScoutForestDisaster',
[
],
],
],
[[setup.questpool.scoutforest, 1],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact has send you several promising leads in the western forests.
You can follow up on those leads by sending a team for a full week into the
forest.
</p><p>
The scouting mission was a complete success, with your team returning with more
quest options than expected.
</p><p>
The scouting mission went about as well as expected, and your team returns with
several quest options.
</p><p>
Unfortunately, all of the leads given by your contacts turn out to be dead.
Your slavers return home with nothing.
</p><p>
Unfortunately, the team were ambushed by locals during their venture into the forest,
and was forced to retreat earlier than expected.
</p><<run new setup.QuestTemplate(
'scout_sea', /* id */
'Scout: Southern Sea', /* Title */
'darko', /* author */
['sea', 'quest'], /* tags */
3, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_sea,
'scout2': setup.qu.scout_sea,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestScoutSea', /* description */
setup.qdiff.hard45,
[
[
'QuestScoutSeaCrit',
[
setup.qc.QuestDelay(setup.questpool.sea, 9),
]
],
[
'QuestScoutSeaSuccess',
[
setup.qc.QuestDelay(setup.questpool.sea, 6),
],
],
[
'QuestScoutSeaFailure',
[
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
setup.qc.Injury('guard', 2),
],
],
[
'QuestScoutSeaDisaster',
[
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
setup.qc.MissingSlaver('guard'),
],
],
],
[[setup.questpool.scoutsea, 1],],
[setup.qres.QuestAvailableUnique()],
)>><p>
It is said that beyond the southern seas, there are land much unlike our own.
You have several leads in those lands from your contact, but
they must be followed immediately or they will be gone.
Via your harbor, you can send your slavers there on a ship,
but the journey will take a long time.
Furthermore, the southern seas is dangerous and unpredictable, and
the scout guard will be placed at the riskiest position in such a journey.
</p><p>
The scouting mission was a complete success, with your team returning with more
quest options than expected.
</p><p>
The scouting mission went about as well as expected, and your team returns with
several quest options.
</p><p>
Your slavers returned bearing injuries. They say that the ship were attacked
by some beast of other world. While the injuries are actually light, your slavers
seem to have been affected by such a severe trauma that it is best to give them
some time to rest now.
</p><p>
Only two of your slavers returned. They tell the story that the ship were
attacked by some horrific being of other world. They were only able to return thanks to
<<rep $g.guard>>, who sacrificed his life and his body to buy them
time to steer the ship back to your port.
</p><<run new setup.QuestTemplate(
'scout_vale', /* id */
'Scout: Northern Vale', /* Title */
'darko', /* author */
['vale', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_vale,
'scout2': setup.qu.scout_vale,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestScoutVale', /* description */
setup.qdiff.easy1,
[
[
'QuestScoutValeCrit',
[
setup.qc.QuestDelay(setup.questpool.vale, 9),
]
],
[
'QuestScoutValeSuccess',
[
setup.qc.QuestDelay(setup.questpool.vale, 6),
],
],
[
'QuestScoutValeFailure',
[
setup.qc.QuestDelay(setup.questpool.vale, 3),
],
],
[
'QuestScoutValeDisaster',
[
setup.qc.QuestDelay(setup.questpool.vale, 1),
],
],
],
[[setup.questpool.scoutvale, 1],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact has send you several promising leads on the <<lore region_vale>>.
You can follow up on those leads by sending a team for a full week into the
<<lore region_vale>>.
</p><p>
The scouting mission was a complete success, with your team returning with more
quest options than expected.
</p><p>
The scouting mission went about as well as expected, and your team returns with
several quest options.
</p><p>
Unfortunately, most of the leads given by your contacts turn out to be dead.
Still, the team managed to found some quest lead.
</p><p>
Unfortunately, the team were ambushed by locals during their journey north,
and was forced to retreat earlier than expected.
</p><<run new setup.QuestTemplate(
'sea_contact', /* id */
'Establish Contact: Southern Seas', /* Title */
'darko', /* author */
['sea', 'special', 'quest'], /* tags */
3, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_sea,
'scout2': setup.qu.scout_sea,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestSeaContact', /* description */
setup.qdiff.hard45,
[
[
'QuestSeaContactCrit',
[
setup.qc.Contact(setup.contacttemplate.sealead),
setup.qc.QuestDelay(setup.questpool.sea, 10),
]
],
[
'QuestSeaContactSuccess',
[
setup.qc.Contact(setup.contacttemplate.sealead),
setup.qc.QuestDelay(setup.questpool.sea, 6),
],
],
[
'QuestSeaContactFailure',
[
setup.qc.QuestDirect('sea_contact'),
],
],
[
'QuestSeaContactDisaster',
[
setup.qc.QuestDirect('sea_contact'),
],
],
],
[],
[],
)>><p>
Using a boat from your <<= setup.buildingtemplate.scoutharbor.rep() >>,
it is now possible for you to send a group of slavers for the slight
chance of obtaining a contact in the <<lore region_sea>>.
Such a contact would prove invaluable in supplying your company with quest leads.
</p><p>
Your slavers came back in one piece, and they managed to find a contact
willing to send mails to your fort about possible leads.
When pressed about the contact, your slavers froze in place and refused
to elaborate.
What kind of creature out there have they struct a deal with?
</p><p>
Your slavers came back in one piece, and they managed to find a contact
willing to send mails to your fort about possible leads.
When pressed about the contact, your slavers froze in place and refused
to elaborate.
What kind of creature out there have they struct a deal with?
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><<run new setup.QuestTemplate(
'vale_contact', /* id */
'Establish Contact: Northern Vale', /* Title */
'darko', /* author */
['vale', 'special', 'quest'], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'scout1': setup.qu.scout_vale,
'scout2': setup.qu.scout_vale,
'guard': setup.qu.scout_guard,
},
{ /* generated actors */
},
[], /* costs */
'QuestValeContact', /* description */
setup.qdiff.easy1,
[
[
'QuestValeContactCrit',
[
setup.qc.Contact(setup.contacttemplate.valelead),
setup.qc.QuestDelay(setup.questpool.vale, 10),
]
],
[
'QuestValeContactSuccess',
[
setup.qc.Contact(setup.contacttemplate.valelead),
setup.qc.QuestDelay(setup.questpool.vale, 6),
],
],
[
'QuestValeContactFailure',
[
setup.qc.QuestDirect('vale_contact'),
],
],
[
'QuestValeContactDisaster',
[
setup.qc.QuestDirect('vale_contact'),
],
],
],
[],
[],
)>><p>
Now that you have a <<rep setup.buildingtemplate.scouthut>>, you should
find some contact in the <<lore region_vale>> who would be able to supply your
company with leads for quests.
</p><p>
After a week searching through the settlements, you managed to find one
particularly crowded tavern whose owner is more than happy to supply you
with rumors.
</p><p>
After a week searching through the settlements, you managed to find one
particularly crowded tavern whose owner is more than happy to supply you
with rumors.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p><<run new setup.QuestTemplate(
'recruitment', /* key */
'Recruitment: All', /* Title */
'darko', /* author */
['city', 'unit'], /* tags */
1, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'guard': setup.qu.guard,
},
{ /* actors */
'recruit1': setup.unitgroup.all,
'recruit2': setup.unitgroup.all,
'recruit3': setup.unitgroup.all,
'recruit4': setup.unitgroup.all,
'recruit5': setup.unitgroup.all,
'recruit6': setup.unitgroup.all,
'recruit7': setup.unitgroup.all,
},
[ /* costs */
],
'QuestRecruitment', /* passage description */
setup.qdiff.easy5, /* difficulty */
[ /* outcomes */
[
'QuestRecruitmentCrit',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit5', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit6', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit7', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentSuccess',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentFailure',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentDisaster',
[
],
],
],
[[setup.questpool.recruitment, 1],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
With the <<= setup.buildingtemplate.hiringsquare.rep() >> built, you can search for potential
new slavers by posting new job opening and sending a crier to the nearby areas.
</p><p>
<<rep $g.recruiter1>> was so convincing that seven potential slavers
signed up for your company.
They are now waiting in the prospects hall for your
decision, and need to be paid if you want to hire them.
</p><p>
<<rep $g.recruiter1>> managed to find four potential slavers
amongst the rabbles and people living in the vicinity.
They are now awaiting your decision in the prospects hall.
</p><p>
<<rep $g.recruiter1>> only managed to find one potential slavers
amongst the rabbles and people living in the vicinity.
They are now awaiting your decision in the prospects hall.
</p><p>
Unfortunately, there are nobody right now who are interested in changing job into a slaver.
</p><<run new setup.QuestTemplate(
'recruitmentdesert', /* key */
'Recruitment: Desert', /* Title */
'darko', /* author */
['desert', 'unit'], /* tags */
2, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'brawler': setup.qu.brawler,
},
{ /* actors */
'recruit1': setup.unitgroup.desert_all,
'recruit2': setup.unitgroup.desert_all,
'recruit3': setup.unitgroup.desert_all,
'recruit4': setup.unitgroup.desert_all,
'recruit5': setup.unitgroup.desert_all,
'recruit6': setup.unitgroup.desert_all,
'recruit7': setup.unitgroup.desert_all,
},
[ /* costs */
],
'QuestRecruitmentDesert', /* passage description */
setup.qdiff.normal35, /* difficulty */
[ /* outcomes */
[
'QuestRecruitmentDesertCrit',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit5', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit6', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit7', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentDesertSuccess',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentDesertFailure',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentDesertDisaster',
[
setup.qc.Injury('recruiter1', 2),
setup.qc.Injury('recruiter2', 2),
setup.qc.Injury('brawler', 2),
],
],
],
[[setup.questpool.recruitmentdesert, 1],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
The orcs and the people living off the eastern deserts are well-used to being a slaver.
This give them massive potential to make an excellent slaver for your company:
Orcs are known for their intimidating posture,
while many of the desertfolks are known to be... "inventive" in many fields.
You can try to send a group of slavers over to the desert to entice these people into joining your company
properly as slavers.
They will need to be paid a hiring fee, however.
</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquaredesert>>.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> were relentless
during their recruitment drive and as a result
seven potential slavers signed up for your company.
They are now waiting in the prospects hall for your
decision, and need to be paid if you want to hire them.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> scoured through the
settlements and occasionally slave encampments and managed
to find four potential slavers amongs the people living there.
They are now awaiting your decision in the prospects hall.
</p><p>
Throughout most of your slaver's stay in the eastern deserts,
there was a raging sandstorm in the area which prevents your slavers
to get about their business as planned.
Still,
<<rep $g.recruiter1>> managed to find one potential slavers to bring back home.
</p><p>
Unfortunately, your slavers got too rowdy during one of their recruitment drives
raising the irks of the citizens. They were ambushed during their way out and came
back home injured.
</p><<run new setup.QuestTemplate(
'recruitmentsea', /* key */
'Recruitment: Sea', /* Title */
'darko', /* author */
['sea', 'veteran', 'unit'], /* tags */
4, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'alchemist': setup.qu.alchemist,
},
{ /* actors */
'recruit1': setup.unitgroup.sea_all,
'recruit2': setup.unitgroup.sea_all,
'recruit3': setup.unitgroup.sea_all,
'recruit4': setup.unitgroup.sea_all,
'recruit5': setup.unitgroup.sea_all,
'recruit6': setup.unitgroup.sea_all,
'recruit7': setup.unitgroup.sea_all,
},
[ /* costs */
setup.qc.MoneyNormal(-1),
],
'QuestRecruitmentSea', /* passage description */
setup.qdiff.normal50, /* difficulty */
[ /* outcomes */
[
'QuestRecruitmentSeaCrit',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit5', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit6', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit7', "", /* is mercenary = */ true, 2),
],
],
[
'QuestRecruitmentSeaSuccess',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true, 2),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true, 2),
],
],
[
'QuestRecruitmentSeaFailure',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true, 2),
setup.qc.Injury('recruiter1', 2),
setup.qc.Injury('recruiter2', 2),
setup.qc.Injury('alchemist', 2),
],
],
[
'QuestRecruitmentSeaDisaster',
[
setup.qc.Injury('recruiter1', 8),
setup.qc.Injury('recruiter2', 8),
setup.qc.Injury('alchemist', 8),
],
],
],
[[setup.questpool.recruitmentsea, 1],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
<<lore continent_main>> is not the only land in the world.
Many people live far across the <<lore region_sea>> -- people with cultures
unlike any other you have probably ever seen, as well as the rare and elusive
dragonkins.
These people are widely known for their hypnotic dances, while the dragonkins
prowess in everything is widely known.
They would make excellent slavers, if you are willing to shell out the resources
to find and hire them.
</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquaresea>>.
</p><p>
<<rep $g.recruiter1>> and <<rep $g.recruiter2>>'s trip across the sea
borne fruit, as they were very successful in their trip and managed to find
seven potential slavers for your company.
They are now waiting in the prospects hall for your
decision, and need to be paid if you want to hire them.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> sailed across
the sea in search of comrades and managed
to find four potential slavers.
They are now awaiting your decision in the prospects hall.
</p><p>
The sea were unkind to your slavers during their journey as the waves rocked their boat
ashore. They spent most of their hiring money fixing their boat and only managed
to find one recruit to bring back home.
</p><p>
Unfortunately, your slavers trip to the southern seas got cut short when
a kraken attacked their ship forcing them to retreat early to your fort.
</p><<run new setup.QuestTemplate(
'recruitmentvale', /* key */
'Recruitment: Vale', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'convincer': setup.qu.convincer,
},
{ /* actors */
'recruit1': setup.unitgroup.vale_all,
'recruit2': setup.unitgroup.vale_all,
'recruit3': setup.unitgroup.vale_all,
'recruit4': setup.unitgroup.vale_all,
'recruit5': setup.unitgroup.vale_all,
'recruit6': setup.unitgroup.vale_all,
'recruit7': setup.unitgroup.vale_all,
},
[ /* costs */
],
'QuestRecruitmentVale', /* passage description */
setup.qdiff.easy10, /* difficulty */
[ /* outcomes */
[
'QuestRecruitmentValeCrit',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit5', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit6', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit7', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentValeSuccess',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit2', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit3', "", /* is mercenary = */ true),
setup.qc.Slaver('recruit4', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentValeFailure',
[
setup.qc.Slaver('recruit1', "", /* is mercenary = */ true),
],
],
[
'QuestRecruitmentValeDisaster',
[
setup.qc.Injury('recruiter1', 1),
setup.qc.Injury('recruiter2', 1),
setup.qc.Injury('convincer', 1),
],
],
],
[[setup.questpool.recruitmentvale, 1],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> are inhabited by honest, hardy people, and also by the werewolf tribes.
Many potentially valuable recruits can be found there ---
Both races are used to the cold areas of the north, giving them an affinity for
<<rep setup.trait.magic_water>>.
In addition, the northerner are often gifted with ambidexterity, while
some werewolves are able to communicate with animals.
You can try to send a group of slavers over to the vale
to find potential recruits for your company.
They will need to be paid a hiring fee, however.
</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquarevale>>.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> were relentless
during their recruitment drive and as a result
seven potential slavers signed up for your company.
They are now waiting in the prospects hall for your
decision, and need to be paid if you want to hire them.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> scoured through the
settlements both humans and (the friendly) werewolves, and managed
to find four potential slavers amongs the people living there.
They are now awaiting your decision in the prospects hall.
</p><p>
There was a cold snap during most of your slavers' venture north,
which prevented them from visiting as many settlements as they would have liked.
Still,
<<rep $g.recruiter1>> managed to find one potential slavers to bring back home.
</p><p>
Unfortunately, nobody seems interested in joining your company.
Well either that, or your slavers slacked off during their job.
</p><<run new setup.QuestTemplate(
'friendsofthe_forest', /* key */
'Recruitment: Forest', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'scout': setup.qu.scout_forest, },
{ /* actors */
'recruit1': setup.unitgroup.forest_all,
'recruit2': setup.unitgroup.forest_all,
'recruit3': setup.unitgroup.forest_all,
'recruit4': setup.unitgroup.forest_all,
'recruit5': setup.unitgroup.forest_all,
'recruit6': setup.unitgroup.forest_all,
'recruit7': setup.unitgroup.forest_all,
},
[ /* costs */
],
'Quest_friendsofthe_forest',
setup.qdiff.easy20, /* difficulty */
[ /* outcomes */
[
'Quest_friendsofthe_forestCrit',
[
setup.qc.Slaver('recruit1', "", true),
setup.qc.Slaver('recruit2', "", true),
setup.qc.Slaver('recruit3', "", true),
setup.qc.Slaver('recruit4', "", true),
setup.qc.Slaver('recruit5', "", true),
setup.qc.Slaver('recruit6', "", true),
setup.qc.Slaver('recruit7', "", true), ],
], [
'Quest_friendsofthe_forestSuccess',
[
setup.qc.Slaver('recruit1', "", true),
setup.qc.Slaver('recruit2', "", true),
setup.qc.Slaver('recruit3', "", true),
setup.qc.Slaver('recruit4', "", true), ],
], [
'Quest_friendsofthe_forestFailure',
[
setup.qc.Slaver('recruit1', "", true), ],
], [
'Quest_friendsofthe_forestDisaster',
[
],
], ],
[
[setup.questpool.recruitmentforest, 1],
], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* restrictions to generate */
)>><p>
The western forests are inhabited by elves and nekos alike. These races have the potential to make an excellent slavers: The neko race often makes great entertainers, which makes them suitable for negotiation missions. The elves are gifted in the art of healing, which makes them excellent as support.
</p>
<p>
These races have practiced slavery for a long time, and it would not be too difficult to send a group of slavers to recruit them into your company. Your slavers need to bring a little incentive though in order to bring the candidates to your fort for selection.</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquareforest>>.
</p><p>
Your recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> told raunchy stories about their exciting journey as slavers, together with the benefits of having a slave, and managed to entice seven potential slavers to come to your fort. They are now awaiting your decision in the <<rep setup.buildingtemplate.prospectshall>>.
</p><p>
Your slavers, <<rep $g.recruiter1>> and <<rep $g.recruiter2>>, scoured through the forest looking for specific types of people they believe make great slavers. Your slavers promised them bountiful flesh in addition to gold if they join, which results in 4 potential slavers now patiently waiting your decision in the <<rep setup.buildingtemplate.prospectshall>>.
</p><p>
Your slavers stopped in the first tavern they found and spent almost all of their time getting drunk. Still, they managed to convince a random drink-mate in the tavern to join them back home.</p><p>
It seems you have chosen the wrong unit for the mission, as neither <<rep $g.recruiter1>> nor <<rep $g.recruiter2>> were able to convince anyone of the joy of being a slaver. Nobody joined them on their trip back home of shame.</p><<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.race_dragonkin,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.magic_dark,
setup.trait.magic_light,
setup.trait.skill_flight,
], /* critical traits */
[
setup.trait.race_elf,
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_calm,
setup.trait.per_cautious,
setup.trait.magic_fire,
setup.trait.magic_water,
setup.trait.magic_wind,
setup.trait.magic_earth,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 1.0,
brawn: 1.0,
knowledge: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_kraken', /* key */
'Bounty Hunt: Kraken', /* Title */
'darko', /* author */
['sea', 'money'], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'merc1': _mercenary,
'merc2': _mercenary,
'merc3': _mercenary,
},
{ /* actors */
},
[ /* costs */
],
'QuestBountyHuntKraken', /* passage description */
setup.qdiff.harder46, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntKrakenCrit',
[
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
setup.qc.MoneyNormal(),
],
],
[
'QuestBountyHuntKrakenSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestBountyHuntKrakenFailure',
[
setup.qc.Injury('merc1', 2),
setup.qc.Injury('merc2', 2),
setup.qc.Injury('merc3', 2),
],
],
[
'QuestBountyHuntKrakenDisaster',
[
setup.qc.Injury('merc1', 2),
setup.qc.MissingSlaver('merc2'),
setup.qc.Injury('merc3', 2),
],
],
],
[[setup.questpool.sea, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The southern seas are dangerous both for what lies ahead, and for the journey itself.
Among the dangers posed by the journey is the mighty kraken beast, who are known
to sunk ships with its huge tentacles.
Even worse is what it will do to the ship's passengers, those giant tentacles going
into places no tentacle should ever go, simply from its animalistic instincts.
If one could slay such a beast, it will surely make the journeys safer.
</p><p>
As planned, your slavers managed to bait the kraken into attacking the actually prepared
ship. Your slavers fought
<<uadv $g.merc1>>
against the kraken's numerous tentacles, and somehow
they managed to survive the ordeal and slay the kraken. Furthermore, from inside the kraken
they managed to find a lot of valuables, which they proceed to sell before returning victoriously
to the fort.
</p><p>
As planned, your slavers managed to bait the kraken into attacking the actually prepared
ship. Your slavers fought
<<uadv $g.merc1>>
against the kraken's numerous tentacles, and somehow
they managed to survive the ordeal and slay the kraken.
Some of your slavers contemplate on using the kraken's tentacles for some depraved slave
training back at the fort, but ultimately goes against the idea lest the tentacles came
back to life.
</p><p>
Unfortunately, despite your slaver's best efforts to bait the kraken, it was nowhere
to be found. Perhaps it is all just a myth...
</p><p>
As planned, your slavers managed to bait the kraken into attacking the actually prepared
ship. Your slavers fought mightily against the kraken's numerous tentacles,
but in the panic of the fight <<rep $g.merc2>> was grabbed by one of the tentacles and
dragged offboat somewhere.
The kraken retreated immediately, and the rest of your slavers had to return home to recover.
<<rep $g.merc2>> was nowhere to be seen but perhaps you'll see <<them $g.merc2>> again.
</p><<run new setup.QuestTemplate(
'alchemist_of_the_seven_seas', /* key */
"Alchemist of the Seven Seas", /* Title */
"darko", /* Author */
[ 'sea', 'item'
], /* tags */
5, /* weeks */
6, /* expiration weeks */
{ /* roles */
'alchemist': setup.qu.alchemist_veteran,
'navigator': setup.qu.navigator,
'biologist': setup.qu.biologist, },
{ /* actors */
},
[ /* costs */
],
'Quest_alchemist_of_the_seven_seas',
setup.qdiff.harder48, /* difficulty */
[ /* outcomes */
[
'Quest_alchemist_of_the_seven_seasCrit',
[
setup.qc.ItemPool(setup.itempool.all_good),
setup.qc.ItemPool(setup.itempool.all_good),
],
], [
'Quest_alchemist_of_the_seven_seasSuccess',
[
setup.qc.ItemPool(setup.itempool.all_good),
],
], [
'Quest_alchemist_of_the_seven_seasFailure',
[
setup.qc.Injury('alchemist', 4),
setup.qc.Injury('biologist', 4), ],
], [
'Quest_alchemist_of_the_seven_seasDisaster',
[
setup.qc.Injury('alchemist', 9),
setup.qc.Injury('biologist', 8),
setup.qc.Injury('navigator', 5), ],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
Wondrous potions are abound in the region —- from simple potions that can heal wounds, to complex potions that can even erase memories or cure mindbreak. While usually you have to resort to buying these potions, now that you have <<rep setup.buildingtemplate.scoutharbor>>, you can try to send an experienced alchemist <<rep setup.trait.skill_alchemy>> across the ocean along with an entourage to search for rare ingredients to be made into a potion. If successful, this will no doubt gives you a rare potion that worth a lot, but the sea is always dangerous especially for unprepared adventurers.</p><p>
The voyage went perfectly as <<rep $g.navigator>> were able to
<<uadv $g.navigator>>
lead the ship into multiple islands for <<rep $g.biologist>> and <<rep $g.alchemist>> to search for ingredients. At the end, <<rep $g.alchemist>> were able to use the rare ingredients to concoct two very valuable potions.</p><p>
The voyage wasn't easy, but through <<rep $g.navigator>>'s persistence and <<rep $g.alchemist>>'s skill, they were able to
<<uadv $g.navigator>>
return with one vial of an extremely rare potion in hand. This potion will surely come in handy for the company's endeavors, or you can always sell it for a tidy sum if you have the <<rep setup.buildingtemplate.bazaar>>.
</p><p>
While landing on one of the many islands in the southern seas, your slavers were ambushed by local feral animals and had to retreat back to the ship with heavy injuries.</p><p>
<<rep $g.alchemist>> got too excited with the ingredients found and mixed it incorrectly resulting in a large explosion in the laboratory. <<rep $g.alchemist>> and <<rep $g.biologist>> sustained life-threatening injuries and need to be treated or rested immediately.</p><<run new setup.QuestTemplate(
'excalibur_crusade', /* key */
"Excalibur Crusade", /* Title */
"darko", /* Author */
[
'veteran',
'special',
'unknown'
], /* tags */
4, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'informer': setup.qu.informer,
'warrior': setup.qu.dark_warrior,
'corruptor': setup.qu.corruptor, },
{ /* actors */
'knight': [
], },
[ /* costs */
],
'Quest_excalibur_crusade',
setup.qdiff.hardest64, /* difficulty */
[ /* outcomes */
[
'Quest_excalibur_crusadeCrit',
[
setup.qc.Opportunity('the_quest_for_excalibur', {knight: 'knight'}),
setup.qc.MoneyNormal(),
],
], [
'Quest_excalibur_crusadeCrit',
[
setup.qc.Opportunity('the_quest_for_excalibur', {knight: 'knight'}),
setup.qc.Injury('warrior', 5),
setup.qc.MoneyNormal(), ],
], [
'Quest_excalibur_crusadeCrit',
[
setup.qc.Opportunity('the_quest_for_excalibur', {knight: 'knight'}),
setup.qc.Injury('warrior', 20),
setup.qc.MoneyNormal(), ],
], [
'Quest_excalibur_crusadeDisaster',
[
setup.qc.QuestDirect('excalibur_crusade', {knight: 'knight'}),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
Your <<repfull $g.knight>> recently went on a quest to claim the divine sword Excalibur. But somehow, after claiming the legendary sword successfully, the slaver suddenly turned against <<their $g.knight>> former comrades, while denouncing all of you and your company's evil deeds. There can only be one explanation for this strange and out-of-character behavior of the previously <<uadjgood $g.knight>> slaver: the Excalibur must be possessing the slaver, filling <<their $g.knight>> thoughts with everything good. This must be the ultimate fate of all doomed to be the Excalibur's host, which may explain why the sword was sealed so deep within the kingdom's coffers.
</p>
<p>
Still, something has to be done, preferably before <<rep $g.knight>> arrived at the doorsteps of your fort and started a rampage inside. Fortunately, <<rep $g.knight>> was left alone at an abandoned and uninhabited island, so it will surely take <<them $g.knight>> a great deal of time to actually reach here. But best to handle this problem as soon as possible.
</p>
<p>
An informer is first needed to locate the slaver within the vast network of islands of the southern seas. Once the slaver is located, the difficult part begins. A skilled slaver, preferably experienced in fighting knights, must somehow subdue your former slaver. To make this possible at all, you will also need a wizard skilled in <<rep setup.trait.magic_dark>>, to corrupt the sword as much as possible and weaken it during the fight.
</p><p>
Your <<repfull $g.informer>> managed to locate <<rep $g.knight>> to a secluded island in the southern seas, apparently honing <<their $g.knight>> skills in preparation for the one-sided battle in assaulting your fort. Together with <<utheirrel $g.warrior $g.corruptor>> <<rep $g.corruptor>>, your <<repfull $g.warrior>> set sail towards the island.
</p>
<p>
Upon reaching the island, they found <<rep $g.knight>> ready and waiting for them, apparently gifted the knowledge by the insight of Excalibur. A fight immediately ensues, with <<rep $g.warrior>> fighting the best <<they $g.warrior>> can against such a legendary sword.
<<if $gOutcome == 'crit'>>
<<rep $g.warrior>> is no slouch in fighting though, and could actually hold <<their $g.warrior>> own skillfully even against such a masterwork sword.
<<elseif $gOutcome == 'success'>>
<<rep $g.warrior>> suffered several cuts and bruises, but nothing major especially considering the stature of <<their $g.warrior>> opponent.
<<elseif $gOutcome == 'failure'>>
<<rep $g.warrior>> suffered a massive gash delivered swiftly by <<rep $g.knight>>, seemingly with no remorse against their former <<ufriend $g.knight $g.warrior>>.
<</if>>
But in the nick of time, <<rep $g.corruptor>> finished chanting <<their $g.corruptor>> spell of mind bending, which is targeted towards the sword. The excalibur grow a small shade of purple, which in turn causes <<rep $g.knight>> to groan in pain. Seizing the opportunity, <<rep $g.warrior>> advances and knocked the former slaver out, who then released <<their $g.knight>> grip on the sword. Your slavers quickly and wisely separated the slaver from the sword, before binding and gagging <<rep $g.knight>> as an extra precaution for the long trip home.
</p>
<p>
To recoup the costs of the expedition, your slavers sold the new plate armor previously worn by <<rep $g.knight>>.
Meanwhile, the possessive sword Excalibur is placed and sealed in a secure box your slavers wisely brought to the isle, thanks to the advise of <<rep $g.informer>>. ...You probably should decide what to do with the sword and the tied-up slaver.
</p><p>
Four weeks of search led to nothing as <<rep $g.informer>> were unable to locate or even get a slight hint on <<rep $g.knight>>'s whereabout. At least none of your slavers were affected by the endeavor. Still, better try again before <<rep $g.knight>> do something that <<they $g.knight>> will regret.
</p><<run new setup.UnitGroup(
"magician_of_time0",
"Wizard of Time",
[ /* pools */
[setup.unitpool.race_humankingdom_male, 0.05885815185403177],
[setup.unitpool.race_humanvale_male, 0.023543260741612712],
[setup.unitpool.race_humandesert_male, 0.011771630370806356],
[setup.unitpool.race_humansea_male, 0.002354326074161271],
[setup.unitpool.race_neko_male, 0.023543260741612712],
[setup.unitpool.race_werewolf_male, 0.005885815185403178],
[setup.unitpool.race_elf_male, 0.023543260741612712],
[setup.unitpool.race_orc_male, 0.008828722778104765],
[setup.unitpool.race_dragonkin_male, 0.00017657445556209532],
[setup.unitpool.race_demon_male, 0.00011771630370806355],
[setup.unitpool.race_humankingdom_female, 0.05885815185403177],
[setup.unitpool.race_humanvale_female, 0.023543260741612712],
[setup.unitpool.race_humandesert_female, 0.011771630370806356],
[setup.unitpool.race_humansea_female, 0.002354326074161271],
[setup.unitpool.race_neko_female, 0.023543260741612712],
[setup.unitpool.race_werewolf_female, 0.005885815185403178],
[setup.unitpool.race_elf_female, 0.023543260741612712],
[setup.unitpool.race_orc_female, 0.008828722778104765],
[setup.unitpool.race_dragonkin_female, 0.00017657445556209532],
[setup.unitpool.race_demon_female, 0.00011771630370806355],
[setup.unitpool.race_humansea_male, 0.2942907592701589],
[setup.unitpool.race_dragonkin_male, 0.047086521483225424],
[setup.unitpool.race_humansea_female, 0.2942907592701589],
[setup.unitpool.race_dragonkin_female, 0.047086521483225424],
],
1, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.TraitsReplace('unit', [setup.trait.magic_light_master]),
],
)>>
<<set _criteriabattery1 = new setup.UnitCriteria(
null, /* key */
'Magic Battery', /* name */
[
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_submissive,
setup.trait.per_brave,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_demon,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_dominant,
setup.trait.per_nimble,
setup.trait.per_playful,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.magic_fire, setup.trait.magic_fire_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_dark, setup.trait.magic_dark_master]),
],
{
arcane: 3,
}
)>>
<<set _criteriabattery2 = new setup.UnitCriteria(
null, /* key */
'Magic Battery', /* name */
[
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_submissive,
setup.trait.per_brave,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_demon,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_dominant,
setup.trait.per_nimble,
setup.trait.per_playful,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.magic_fire, setup.trait.magic_fire_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_dark, setup.trait.magic_dark_master]),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'future_delivery', /* key */
"Battery Lease", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'money',
],
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'battery1': [ _criteriabattery1, 1],
'battery2': [ _criteriabattery2, 1],
'guard': [ setup.qu.guard, 1],
},
{ /* actors */
'wizard': 'magician_of_time0',
},
[ /* costs */
],
'Quest_future_delivery',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_future_deliveryCrit',
[
setup.qc.Leave('battery1', "is recharging their magic", 2),
setup.qc.Leave('battery2', "is recharging their magic", 2),
setup.qc.MoneyCustom(17500),
setup.qc.VarSet('future_assassin_cooldown', '1', 4),
setup.qc.VarRemove('future_assassin_progress'),
],
],
[
'Quest_future_deliveryCrit',
[
setup.qc.Leave('battery1', "is recharging their magic", 2),
setup.qc.Leave('battery2', "is recharging their magic", 2),
setup.qc.MoneyCustom(10000),
setup.qc.VarSet('future_assassin_cooldown', '1', 4),
setup.qc.VarRemove('future_assassin_progress'),
],
],
[
'Quest_future_deliveryCrit',
[
setup.qc.Leave('battery1', "is recharging their magic", 4),
setup.qc.Leave('battery2', "is recharging their magic", 4),
setup.qc.MoneyCustom(2000),
],
],
[
'Quest_future_deliveryCrit',
[
setup.qc.Injury('guard', 8),
setup.qc.IfThenElse(
setup.qres.Actor('guard', setup.qres.NoTraits([setup.trait.magic_fire, setup.trait.magic_fire_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_dark, setup.trait.magic_dark_master], true)),
setup.qc.DoAll([
setup.qc.AddTraitsRandom('guard', [setup.trait.magic_fire, setup.trait.magic_water, setup.trait.magic_wind, setup.trait.magic_earth, setup.trait.magic_light, setup.trait.magic_dark], 1, false, false)
], undefined),
setup.qc.DoAll([
], undefined)),
setup.qc.Leave('battery1', "recharging their magic", 24),
setup.qc.Leave('battery2', "recharging their magic", 24),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Cooldown(8),
setup.qres.VarNull('future_assassin_cooldown'),
setup.qres.Player(setup.qres.LoverExist()),
setup.qres.NoUnitWithTag('future_assassin_parent'),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
As a slaving company, you are used to receive strange and mysterious orders. Whether it's a request for a nicely packaged slave, to open a certain father's mind, or an order for a slave with a semi-transparent body, you have probably seen it all. But today, you got a rather unusual request.
</p>
<p>
A certain magician in the southern seas is asking to borrow two of your slavers as magical batteries. The wizard is scarce on details in <<their $g.wizard>> letter, except that these batteries must be capable of using magic. <<They $g.wizard>> promises great amount of wealth for borrowing your slavers — an amount you could really say no to.
</p>
<p>
You'd need to send two magically gifted slavers on this quest. It's probably a good idea to send a guard to watch over them — they'd probably be drained dry and rendered useless after the ritual is over.
</p>
<p>
You get the feeling that there is more to this quest than meets the eye, but eh, it's probably nothing.
</p><p>
The ritual site looks almost regular — just a large magical circle carved within an empty crater.
A small box is placed in the center of the circle, with a cutely drawn card that is addressed to... the wizard <<themself $g.wizard>>? Either way your slavers were only hired to act as human batteries, and that's the extend of brainpower they are willing to spend. <<rep $g.guard>> will <<uadv $g.guard>> keep guard during the ritual, making sure nothing funny happens.
</p>
<p>
After a short preparation, the wizard <<name $g.wizard>> began the ritual. Your slavers <<rep $g.battery1>> and <<utheirrel $g.battery1 $g.battery2>> <<rep $g.battery2>> sat next to the wizard, prepared to be used as human magic battery to fuel the ritual.
</p>
<p>
After a long chant, large gusts of wind begin to appear as magical energies visibly flew from your slavers into the circle. The sensation of being robbed of your magic is a strange one — best described as being held on the edge of climaxing as close as possible, without ever being allowed to go over. For if you "climaxed your magic", the result will be disastrous.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
Through sheer perseverance and stubbornness, <<rep $g.battery1>> and <<utheirrel $g.battery1 $g.battery2>> managed to persevere, holding off "climaxing" at the intense magical teasing. Eventually the wind subsides, and the only change noticeable by your slavers is the lack of box in the middle of the circle. Odd, normally transportation magic does not take this much magical energy. What has just happened?
</p>
<p>
Either way, satisfied with your slavers' work, the wizard handed over the promised money
<<if $gOutcome == 'crit'>>
plus a little extra for being such magical good batteries
<</if>>
over to your slavers.
<<rep $g.guard>> <<uadv $g.guard>> took the money on behalf of your slavers, as both <<rep $g.battery1>> and <<rep $g.battery2>> are understandably exhausted from the ordeal, and would need some time to recover back their magic.
</p>
<<set _t = $g.battery1>>
<<if _t.isYou() or $unit.player.getLover() == _t>>
<<set _t = $g.battery2>>
<<if _t.isYou() or $unit.player.getLover() == _t>>
<<set _t = $g.guard>>
<</if>>
<</if>>
<<run setup.qc.AddTag('unit', 'future_assassin_parent').apply(setup.costUnitHelper(_t))>>
<p>
<<rep _t>> swore that <<they _t>> saw something familiar came out from inside the circle during the ritual. But eh, probably nothing to worry about.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers almost persevere through the entire "release denial" ritual, but they broke at the very end. Their magic leaked out and spread out of control around the ritual site. Fortunately for your slavers, the wizard seems to have already completed most of the ritual, and with great efforts managed to calm down the vortex.
</p>
<p>
Your slavers were still paid for their efforts, but the money was understandably cut for such a shoddy work.
</p>
<<else>>
<p>
<<if $g.battery1.isHasTrait('per_stubborn')>>
Despite being ordinarily stubborn, <<rep $g.battery1>>
<<elseif $g.battery1.isHasTrait('per_tough')>>
Despite being ordinarily tough, <<rep $g.battery1>>
<<else>>
<<rep $g.battery1>> was neither stubborn nor tough, and hence understandably <<they $g.battery1>>
<</if>>
was unable to "hold their magic off", and prematurely climaxed their magic. With the magic leaking out, the ritual site was thrown into chaos. <<rep $g.guard>> was absorbed into the vortex, injuring the slaver as well.
</p>
<p>
The skillful wizard eventually managed to calm down the vortex and restore a sense of normalcy to the site, but both <<rep $g.battery1>> and <<utheirrel $g.battery1 $g.battery2>> <<rep $g.battery2>> have been drained so very dry of their magic and will require quite some time of rest.
</p>
<<if !$g.guard.getTraitWithTag('magic')>>
<p>
If there is anything good coming out of this, being exposed to such amount of magic surely will have a lasting effect on <<rep $g.guard>>...
</p>
<</if>>
<</if>><<set _criteriadiver1 = new setup.UnitCriteria(
null, /* key */
'Diver', /* name */
[
setup.trait.race_humanvale,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.per_attentive,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.bg_pirate,
],
[
setup.trait.race_humandesert,
setup.trait.race_orc,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_cautious,
setup.trait.per_masochistic,
setup.trait.per_stubborn,
setup.trait.per_evil,
setup.trait.per_aggressive,
setup.trait.per_playful,
setup.trait.skill_flight,
setup.trait.magic_fire,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
survival: 1,
intrigue: 0.5,
knowledge: 0.5,
}
)>>
<<set _criteriadiver2 = new setup.UnitCriteria(
null, /* key */
'Diver', /* name */
[
setup.trait.race_humanvale,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.per_attentive,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.bg_pirate,
],
[
setup.trait.race_humandesert,
setup.trait.race_orc,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_cautious,
setup.trait.per_masochistic,
setup.trait.per_stubborn,
setup.trait.per_evil,
setup.trait.per_aggressive,
setup.trait.per_playful,
setup.trait.skill_flight,
setup.trait.magic_fire,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
survival: 1,
intrigue: 0.5,
knowledge: 0.5,
}
)>>
<<set _criteriafighter = new setup.UnitCriteria(
null, /* key */
'Diver Fighter', /* name */
[
setup.trait.race_humanvale,
setup.trait.bg_pirate,
setup.trait.per_loyal,
setup.trait.per_brave,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
setup.trait.magic_water_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_humandesert,
setup.trait.race_orc,
setup.trait.bg_nomad,
setup.trait.per_sexaddict,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_masochistic,
setup.trait.per_independent,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.per_playful,
setup.trait.skill_flight,
setup.trait.magic_fire,
setup.trait.eq_slutty,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'journey_to_atlantis', /* key */
'Journey to Atlantis', /* Title */
'darko', /* Author */
[ 'sea',
'transformation',
'veteran',
'upgrade'
], /* tags */
4, /* weeks */
20, /* quest expiration weeks */
{ /* roles */
'diver1': _criteriadiver1,
'diver2': _criteriadiver2,
'fighter': _criteriafighter, },
{ /* actors */
},
[ /* costs */
],
'Quest_journey_to_atlantis',
setup.qdiff.hell55, /* difficulty */
[ /* outcomes */
[
'Quest_journey_to_atlantisCrit',
[
setup.qc.Item(setup.item.water_technology),
setup.qc.MoneyCrit(),
setup.qc.Injury('fighter', 2), ],
], [
'Quest_journey_to_atlantisSuccess',
[
setup.qc.Item(setup.item.water_technology),
setup.qc.MoneyNormal(),
setup.qc.Injury('diver1', 2),
setup.qc.Injury('diver2', 2),
setup.qc.MissingUnit('fighter'), ],
], [
'Quest_journey_to_atlantisFailure',
[
setup.qc.MissingUnit('fighter'),
setup.qc.Injury('diver1', 6),
setup.qc.Injury('diver2', 6), ],
], [
'Quest_journey_to_atlantisDisaster',
[
setup.qc.MissingUnit('diver1'),
setup.qc.MissingUnit('diver2'),
setup.qc.MissingUnit('fighter'), ],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.water_technology), ], /* restrictions to generate */
)>><p>
There are rumors that a thriving civilization once thrived under the southern seas — literally, this time.
Beneath the water surface, there are numerous ruins from older civilization littering the grounds. How these civilization came to be extinct is unknown, but most scholars agree that these civilizations have technology beyond that of ours.</p>
<p>
You have heard rumors that a bold noble is funding expedition into the depths of the sea in order to find treasures. You could send a party of your slaver to join the expedition, but no doubt it will be an incredibly dangerous journey. The expedition members will theoretically be shielded from the water as they descend by a group of water mystics, but it is unclear if the bubble will hold so far beneath the sea. If you send your slavers down here, you have to be prepared for losses, but succeeding might reward you with a technology long past gone.</p><p>
Once the expedition reaches the target spot, several bold participants gathered in a water bubble and descend into the sea.
Slowly but surely your slavers also
<<uadv $g.diver1>>
descend to the bottom, when they discover that they are not alone. Surrounding them were a group of water monsters, with tentacles ready to greet these unsuspecting victims.</p>
<p>
Your slavers by virtue of their prowess managed to actually slip through these monsters unnoticed, using the other expedition members as bait. They are the only team who managed to eventually reached the underwater city, or what is left of it. They entered the biggest ruin in the vicinity —- apparently, the ruin was a temple dedicated to worshipping the flesh.</p>
<p>
Deep within the temple, they found great riches. But amongst all these riches, they also found an ancient tablet detailing the secrets of these people —- how they can safely alter the shape of other people safely using a technique known as "surgery". Your slavers make sure to jolt this knowledge down before returning to the surface, both with riches and with the new knowledge, surprisingly with only minor injuries.</p>
<p>
The expedition funder took some of the treasures as payment, but left your slavers with most of the treasures. Your slavers are careful not to pass on the secret knowledge, and this knowledge now belongs to your company alone.</p><p>
Once the expedition reaches the target spot, the several bold participants gathered in a water bubble and descend into the sea.
Slowly but surely your slavers also
<<uadv $g.diver1>>
descend to the bottom, when they discover that they are not alone. Surrounding them were a group of water monsters, with tentacles ready to greet these unsuspecting victims.</p>
<p>
One of these monsters approached your slavers' bubbles —- and when escape seems impossible <<rep $g.fighter>> selfleshly sacrificed himself to be intimated with the tentacled monsters. This sacrifice offer your other slavers a chance to slip through these monsters unnoticed, although they did so with heavy heart. Ultimately, your slavers are the only team who managed to eventually reached the underwater city, or what is left of it. They entered the biggest ruin in the vicinity —- apparently, the ruin was a temple dedicated to worshipping the flesh.</p>
<p>
Deep within the temple, they found great riches. But amongst all these riches, they also found an ancient tablet detailing the secrets of these people —- how they can safely alter the shape of other people safely using a technique known as "surgery". Your slavers make sure to jolt this knowledge down before returning to the surface, both with riches and with the new knowledge, all dedicated to <<rep $g.fighter>>.</p>
<p>
The expedition funder took some of the treasures as payment, but left your slavers with most of the treasures. Your slavers spent a significant chunk trying to remember and forget <<rep $g.fighter>>'s sacrifices at the same time, leaving your company with only a portion of the treasure. But you also have the lost knowledge of the past, which will surely be useful in the future.</p><p>
Once the expedition reaches the target spot, the several bold participants gathered in a water bubble and descend into the sea.
Slowly but surely your slavers also descend to the bottom, when they discover that they are not alone. Surrounding them were a group of water monsters, with tentacles ready to greet these unsuspecting victims.</p>
<p>
One of these monsters approached your slavers' bubbles —- and when escape seems impossible <<rep $g.fighter>> selfleshly sacrificed himself to be intimated with the tentacled monsters. This sacrifice offer your other slavers a chance to slip through these monsters unnoticed, although they did so with heavy heart. Ultimately, your slavers are the only team who managed to eventually reached the underwater city, or what is left of it.</p>
<p>
Deep within the temple, they found great riches. But amongst all these riches, they also found an ancient tablet detailing the secrets of these people —- how they can safely alter the shape of other people safely using a technique known as "surgery". Your slavers make sure to jolt this knowledge down before returning to the surface, both with riches and with the new knowledge, all dedicated to <<rep $g.fighter>>.</p>
<p>
Unfortunately, the ruins seems to already have been looted in some other expedition. Searching here and there only yield minor trinkets and nothing of value can be brought to the surface.
Defeated, your slavers ascend back to the surface and receive their "bravery reward" from the noble. Your slavers spent all of the reward drinking to both remember and forget <<rep $g.fighter>>'s sacrifices at the same time. By the time they arrived at your fort, they are a wreck and all the money is gone.</p>Your slavers never did return to the fort after departing for the expedition.... Perhaps you will see them again some day, or perhaps not.<<set _criteriaknight1 = new setup.UnitCriteria(
null, /* key */
'Dragon Knight', /* name */
[
setup.trait.race_dragonkin,
setup.trait.per_aggressive,
setup.trait.per_honorable,
setup.trait.per_brave,
setup.trait.magic_fire,
setup.trait.magic_light,
setup.trait.bg_knight,
setup.trait.per_dominant,
setup.trait.skill_ambidextrous,
setup.trait.eq_veryvaluable,
],
[
setup.trait.per_calm,
setup.trait.per_evil,
setup.trait.per_cautious,
setup.trait.per_lunatic,
setup.trait.magic_water,
setup.trait.magic_dark,
setup.trait.race_demon,
setup.trait.per_submissive,
setup.trait.skill_alchemy,
setup.trait.eq_slutty,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
arcane: 1,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'SLAVE', /* name */
[
setup.trait.training_obedience_master,
setup.trait.training_oral_master,
setup.trait.training_anal_master,
setup.trait.training_sissy_master,
setup.trait.training_pet_master,
setup.trait.training_pony_master,
setup.trait.training_dominance_master,
setup.trait.training_masochist_master,
setup.trait.training_toilet_master,
setup.trait.training_endurance_master,
setup.trait.training_vagina_master,
setup.trait.training_horny_master,
setup.trait.training_edging_master,
setup.trait.training_domestic_master,
setup.trait.magic_water_master,
setup.trait.magic_wind_master,
setup.trait.magic_earth_master,
setup.trait.magic_dark_master,
setup.trait.race_demon,
],
[
setup.trait.race_dragonkin,
setup.trait.magic_light,
setup.trait.magic_fire,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.SlaveValueAtLeast(40000),
],
{
}
)>>
<<run new setup.QuestTemplate(
'king_of_dragons', /* key */
"King of Dragons", /* Title */
"darko", /* Author */
[ 'sea',
'veteran',
'order',
'upgrade',
'favor',
], /* tags */
4, /* weeks */
30, /* quest expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'knight2': _criteriaknight1,
'knight1': _criteriaknight1,
'slave': _criteriaslave, },
{ /* actors */
},
[ /* costs */
],
'Quest_king_of_dragons',
setup.qdiff.hell70, /* difficulty */
[ /* outcomes */
[
'Quest_king_of_dragonsCrit',
[
setup.qc.Favor('dragonkin', 500),
setup.qc.MoneyUnitValue('slave', 0.5, 100000),
setup.qc.MissingUnitForever('slave'),
setup.qc.Item(setup.item.wings_technology),
],
], [
'Quest_king_of_dragonsSuccess',
[
setup.qc.Favor('dragonkin', 500),
setup.qc.MissingUnitForever('slave'),
setup.qc.Item(setup.item.wings_technology), ],
], [
'Quest_king_of_dragonsFailure',
[
setup.qc.MissingUnit('trainer'), ],
], [
'Quest_king_of_dragonsDisaster',
[
setup.qc.MissingUnitRecapture('knight1', 'capturedhard'), ],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
setup.qres.NoItem(setup.item.wings_technology),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Cooldown(20),
], /* restrictions to generate */
)>><p>
The king of dragons —- the title only one dragonkin in the entire world held. It is said that the king of dragon lived in a castle with a vast dungeon complex full of both hoards of treasures and legions of slaves. Legends say that not even the bravest raiders dare to attack the fortress, for it is circled by flying dragon guards all the time which will breathe fire on any interlopers.</p>
<p>
You are not crazy enough to actually assault the fort, but deep within the king's vault lies a treasure that you have been eyeing for: <<rep setup.item.wings_technology>>. This technology would finally allow you to focus your corruptions on, among other things, the wings of your units, allowing you to grow them wings if you choose.</p>
<p>
It might be possible for the king to share this secret technology with you, if you have an extremely valuable slave that you are willing to trade. The slave will of course be gone forever should the deal go through, but it will be worth the exchange.</p>
<p>
<<dangertext 'Warning'>>: The slave will likely be gone forever, becoming a nameless plaything for the dragon king...
</p><p>
Upon arriving at the king's domains, your slavers were immediately greeted by his guards, who recognized your company. Upon seeing the worthy slave <<rep $g.slave>>, your slavers were granted audience with the king. The king of dragons sit upon a gilded throne, and he is surrounded by multiple slaves who are all busy either servicing him or impaling themselves on the various sex toys spread around the room.
</p>
<p>
The king were impressed by the quality of <<rep $g.slave>> and the presentation of the slave given
<<uadv $g.trainer>>
by your slavers. Your slavers did not even need to negotiate that hard for the king to agree to exchange the slave with a copy of the artifact <<rep setup.item.wings_technology>> —- in fact, the king were so impressed that he decided to pay your slavers some of the slave's worth of value.
</p>
<p>
Once the audience is over, your slavers were escorted out of the castle. They can finally breathe a sigh of relief once they arrive back at the boat, for the air was simultaneously both tense and arousing throughout the compound.</p><p>
Upon arriving at the king's domains, your slavers were immediately greeted by his guards, who recognized your company. Upon seeing the worthy slave <<rep $g.slave>>, your slavers were granted audience with the king. The king of dragons sit upon a gilded throne, and he is surrounded by multiple slaves who are all busy either servicing him or impaling themselves on the various sex toys spread around the room.
</p>
<p>
The king were rather indifferent by the quality of <<rep $g.slave>>, as he already has too many slaves. But your slavers managed to
<<uadv $g.trainer>>
convince him and present the slave in such an alluring way that king finally agreed on the exchange. <<rep $g.slave>> will forever serve the king, in exchange for <<rep setup.item.wings_technology>>.
</p>
<p>
Once the audience is over, your slavers were escorted out of the castle. They can finally breathe a sigh of relief once they arrive back at the boat, for the air was simultaneously both tense and arousing throughout the compound. They also try not to think too hard what fate awaits <<rep $g.slave>>, but one thing for sure —- they don't want to be in <<their $g.slave>> shoes!</p><p>
Upon arriving at the king's domains, your slavers were immediately greeted by his guards, who recognized your company. Upon seeing the worthy slave <<rep $g.slave>>, your slavers were granted audience with the king. The king of dragons sit upon a gilded throne, and he is surrounded by multiple slaves who are all busy either servicing him or impaling themselves on the various sex toys spread around the room.
</p>
<p>
The king were rather indifferent by the quality of <<rep $g.slave>>, as he already has too many slaves. But <<rep $g.trainer>>'s insistence during the negotiation raised the king's ire, and instead he decided to enslave <<rep $g.trainer>> as punishment for insolence. Your slavers were not given any opportunity to react as his guards seized <<rep $g.trainer>> away deep into the dungeons while <<rep $g.knight1>> and <<rep $g.knight2>> were escorted outside of the castle.</p><p>
Upon arriving at the king's domains, your slavers were immediately greeted by his guards, who recognized your company. Upon seeing the worthy slave <<rep $g.slave>>, your slavers were granted audience with the king. The king of dragons sit upon a gilded throne, and he is surrounded by multiple slaves who are all busy either servicing him or impaling themselves on the various sex toys spread around the room.
</p>
<p>
The king were rather indifferent by the quality of <<rep $g.slave>>, as he already has too many slaves. During the negotiations, <<rep $g.knight1>> accidentally insulted the king, which immediately raised his ire. <<rep $g.knight1>> was then swiftly subdued, to be taken into his dungeons and trained as a slave. Your other slavers were escorted outside as they try their best not to think what fate awaits their former comrade.</p><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'Student', /* name */
[
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_curious,
],
[
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_stubborn,
],
[
setup.qres.You(),
setup.qres.Or([
setup.qres.TraitExact(setup.trait.magic_fire),
setup.qres.TraitExact(setup.trait.magic_water),
setup.qres.TraitExact(setup.trait.magic_wind),
setup.qres.TraitExact(setup.trait.magic_earth),
setup.qres.TraitExact(setup.trait.magic_light),
setup.qres.TraitExact(setup.trait.magic_dark),
]),
],
{
arcane: 9,
}
)>>
<<run new setup.QuestTemplate(
'mastery_of_magic', /* key */
"Mastery of Magic", /* Title */
"darko", /* Author */
[ 'sea',
'veteran',
'trait',
'prep'
], /* tags */
8, /* weeks */
16, /* quest expiration weeks */
{ /* roles */
'you': _criteriayou, },
{ /* actors */
'sage': setup.unitgroup.all, },
[ /* costs */
],
'Quest_mastery_of_magic',
setup.qdiff.hard51, /* difficulty */
[ /* outcomes */
[
'Quest_mastery_of_magicCrit',
[
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_fire_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_water_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_wind_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_earth_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_dark_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_light_master),
setup.qc.ItemPool(setup.itempool.all_good), ],
], [
'Quest_mastery_of_magicSuccess',
[
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_fire_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_water_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_wind_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_earth_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_dark_master),
setup.qc.TraitIncreaseExisting('you', setup.trait.magic_light_master),
],
], [
'Quest_mastery_of_magicFailure',
[
],
], [
'Quest_mastery_of_magicDisaster',
[
setup.qc.TraumatizeRandom('you', 12), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, 50],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Player(setup.qres.Or([
setup.qres.TraitExact(setup.trait.magic_fire),
setup.qres.TraitExact(setup.trait.magic_water),
setup.qres.TraitExact(setup.trait.magic_wind),
setup.qres.TraitExact(setup.trait.magic_earth),
setup.qres.TraitExact(setup.trait.magic_light),
setup.qres.TraitExact(setup.trait.magic_dark),
])),
],
)>><<set _magic = null>>
<<for _ixmagic, _xmagic range setup.TraitHelper.getAllTraitsOfTags(['magic', 'rare'])>>
<<if $unit.player.isHasTraitExact(_xmagic)>>
<<set _magic = _xmagic>>
<<set _target = _magic.getTraitGroup().getLargestTrait()>>
<</if>>
<</for>><<include 'Quest_mastery_of_magicCommon'>>
<<if !_magic>>
<<dangertext 'You do not have any magic abilities that can be enhanced right now.'>>
<<else>>
<p>
You have always been gifted in the art of
<<rep _magic>>, which grants you some
control over <<= _magic.text().noun>>. When mastered, this domain of magic would grant its wielder control over <<= _target.text().noun>>, which will surely be beneficial for your career. Normally, it would be impossible for anyone to increase their natural gift of using such magic. But you have heard of a retired sage living off the southern seas who now spend most of <<their $g.sage>> helping others unlock their mastery of their magic.
</p>
<p>
You could try to find the sage and seek to become <<their $g.sage>> pupil. You will likely need to go alone however, and this endeavor will surely take a really long time.
</p>
<</if>><<include 'Quest_mastery_of_magicSuccess'>>
<p>
It seems that you have impressed your mentor greatly that <<they $g.sage>> gave you an incredibly rare potion as a parting gift.
</p><<include 'Quest_mastery_of_magicCommon'>>
<<if !_magic>>
<<dangertext 'You do not have any magic talent that can be improved further'>>
<<else>>
<p>
After finding the sage living alone in a secluded island, you <<uadv $g.you>> implored the sage to teach you how to master your mastery over <<rep _magic>>. Moved by your eagerness to learn, the sage took you as a student in a mentorship that lasts for almost two months.
</p>
<p>
Within these two months, you learn so much about the nuances of your <<rep _magic>> magic that you never know was always there.
<<if _magic == setup.trait.magic_fire>>
You learn that <<lore magic_fire>> is capable than much more than simple destruction —- With proper focus, you learn how to channel holy fire that can drive away demons and corruptions alike like paladins of legends.
<<elseif _magic == setup.trait.magic_water>>
You learn that <<lore magic_water>> is so much more than simple nourishing spells —- Humanlike bodies are made of water after all, and it would only be natural that control over water grants you control over shaping flesh.
<<elseif _magic == setup.trait.magic_wind>>
You learn that <<lore magic_wind>> is so much more than just controlling the flow of wind —- with proper focus, you can alter the shape of air itself and conjure electricity out of nowhere, zapping foes and slaves alike.
<<elseif _magic == setup.trait.magic_earth>>
You learn that <<lore magic_earth>> can be so much more than just control over earth and growth. With proper focal point, you can focus the shapes and directions of the growth creating tentacle aberrations like dark wizards of legends.
<<elseif _magic == setup.trait.magic_dark>>
You learn that <<lore magic_dark>> is so much more than simple concealment tricks —- When applied en masse, it could transform the body and minds of others, corrupting them into darkness.
<<elseif _magic == setup.trait.magic_light>>
You learn that <<lore magic_light>> is so much more than just summoning blinding lights —- With the right mind and heart, it could be used to heal even the most severe of wounds.
<</if>>
You spend the rest of the months practicing away your magic, unlocking the hidden depths of talent you have for them.
</p>
<p>
The two months you spent with the sage flies past like an arrow, and before you know it, you are now able to effortlessly
<<if _magic == setup.trait.magic_fire>>
summon purifying flames.
<<elseif _magic == setup.trait.magic_water>>
shape flesh.
<<elseif _magic == setup.trait.magic_wind>>
summon electricity.
<<elseif _magic == setup.trait.magic_earth>>
conjure tentacles.
<<elseif _magic == setup.trait.magic_dark>>
corrupt others.
<<elseif _magic == setup.trait.magic_light>>
heal others.
<</if>>
The tutolage at an end, you thank your mentor for the two months of guidance and finally head back home to your family of slavers.
</p>
<</if>><<include 'Quest_mastery_of_magicCommon'>>
<<if !_magic>>
<<dangertext 'You do not have any magic talent that can be improved further'>>
<<else>>
<p>
After finding the sage living alone in a secluded island, you <<uadv $g.you>> implored the sage to teach you how to master your mastery over <<rep _magic>>. Moved by your eagerness to learn, the sage took you as a student in a mentorship that lasts for almost two months.
</p>
<p>
You undergone a rigorous studying regime under the mentorship, but even after all these hard work you do not feel as if your control over <<rep _magic>> has improve the slightest. Finally after two months of what feels like an eternity, you gave up and bid your mentor farewell before returning back home, the same person as you were before you begin the journey.
</p>
<</if>><p>
Traveling alone in the southern seas is an incredibly foolish and dangerous affair, as you now have learned the hard way. Your ship were attacked by unspeakable creatures of the sea, which left you stranded alone in an uninhabited island. It took you two months before you are rescued by your slavers.
</p><<run new setup.UnitGroup(
'quest_outcasts_of_dragons1',
"broken",
[
[setup.unitpool.race_dragonkin_male, 0.5],
[setup.unitpool.race_dragonkin_female, 0.5], ],
0,
[
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.RemoveTraitsWithTag('unit', 'skill'),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak), ],
)>>
<<run new setup.QuestTemplate(
'outcasts_of_dragons', /* key */
"Outcasts of Dragons", /* Title */
"darko", /* Author */
[ 'sea',
'veteran',
'anthro',
'unit'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'tamer1': setup.qu.dragontamer,
'tamer2': setup.qu.dragontamer,
'informer': setup.qu.informer, },
{ /* actors */
'dragon': setup.unitgroup.dragonkin,
'broken': setup.unitgroup.quest_outcasts_of_dragons1, },
[ /* costs */
],
'Quest_outcasts_of_dragons',
setup.qdiff.harder67, /* difficulty */
[ /* outcomes */
[
'Quest_outcasts_of_dragonsCrit',
[
setup.qc.Ire('dragonkin', 2),
setup.qc.Slave('dragon', "was a dragonkin exiled from their tribe for an unspeakable crime", false), ],
], [
'Quest_outcasts_of_dragonsSuccess',
[
setup.qc.Slave('broken', "was a dragonkin exiled from their tribe for an unspeakable crime whose mind and body were corrupted beyond repair", false), ],
], [
'Quest_outcasts_of_dragonsFailure',
[
setup.qc.Injury('tamer1', 7),
setup.qc.Injury('tamer2', 8),
setup.qc.Ire('dragonkin', 1),
],
], [
'Quest_outcasts_of_dragonsDisaster',
[
setup.qc.Injury('tamer1', 8),
setup.qc.MissingUnitRecapture('tamer2', 'capturedhard'),
setup.qc.Injury('informer', 5),
setup.qc.Ire('dragonkin', 1),
],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
The mysterious dragonkins are said to live somewhere across the southern seas. These rare people are very much prized as both slave and slavers, for their aptitude in many fields as well as the ability of some of them to fly. While there are instances of dragonkins found in the region, they are incredibly rare.
</p>
<p>
You have heard rumors that the dragonkins have exiled one of their own for some unspeakable crime. This makes the exilee extremely vulnerable, and it might be a good idea to send a group of slavers to try and capture the dragonkin. If done correctly, such slave would make an extremely valuable piece of meat, but even when naked, dragonkins are never defenseless. You must prepare for the worst if you were to take on this mission.
</p><p>
<<rep $g.informer>> managed to track the dragonkin to a remote island in the southern seas. Once there, <<rep $g.tamer1>> and <<rep $g.tamer2>> fought
<<uadv $g.tamer1>>
against <<rep $g.dragon>> and after an intense fight, emerged victorious. Your slavers were not taking any chances and bound <<rep $g.dragon>> fully from top to bottom to ensure that nothing happened on their trip back home.</p><p>
While <<rep $g.informer>> managed to track the exiled dragonkin, once your slavers spotted the dragonkin, they were met with something they did not expect. The dragonkin were obviously already broken, either from the torture inflicted by <<their $g.broken>> fellow dragonkins, or by the mental pressure they must have endured being exiled so far from home. Either way, your slavers
<<uadv $g.tamer1>>
subdued <<rep $g.broken>> to be brought home as a slave. At its current state, the slave will not be able to sell for very high, but perhaps you can fix that?
</p><p>
<<rep $g.informer>> acted on a bad information and instead led your slavers into an ambush site. <<rep $g.tamer1>> and <<rep $g.tamer2>> fought for their lives as the local people attempted to subdue your slavers to make them as exotic pets. In the end, your slavers managed to escape back to the ship and returned home, but with heavy injuries.
</p><p>
<<rep $g.informer>> managed to track the dragonkin to a remote island in the southern seas. Once there, <<rep $g.tamer1>> and <<rep $g.tamer2>> fought bravely against <<rep $g.dragon>>. But even three-to-one, your slavers were no match for the mighty dragonkin, as your slavers were incinerated by the dragonkin's fire-light breath. Severely injured, <<rep $g.informer>> had to basically beg to allow <<them $g.informer>> to take <<their $g.informer>> comrades back home and forget that this humiliation ever happened, which <<they $g.dragon>> allow
with the exception of <<rep $g.tamer2>>.
<<urescuenow $g.tamer2>>.
</p><<run new setup.QuestTemplate(
'pirates_ahoy', /* key */
"Pirates Ahoy", /* Title */
"darko", /* Author */
[ 'sea', 'unit'
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'navigator': setup.qu.navigator,
'pirate2': setup.qu.pirate,
'pirate1': setup.qu.pirate, },
{ /* actors */
'victim': setup.unitgroup.humansea, },
[ /* costs */
],
'Quest_pirates_ahoy',
setup.qdiff.hard47, /* difficulty */
[ /* outcomes */
[
'Quest_pirates_ahoyCrit',
[
setup.qc.MoneyCrit(0.7),
setup.qc.Ire('humansea', 2),
setup.qc.Slave('victim', "was a seafarer aboard an unfortunate ship that were attacked by your company", false), ],
], [
'Quest_pirates_ahoySuccess',
[
setup.qc.Slave('victim', "was a seafarer aboard an unfortunate ship that were attacked by your company", false),
setup.qc.Ire('humansea', 1),
setup.qc.MoneyNormal(0.7), ],
], [
'Quest_pirates_ahoyFailure',
[
setup.qc.Injury('pirate2', 2),
setup.qc.Injury('pirate1', 2), ],
], [
'Quest_pirates_ahoyDisaster',
[
setup.qc.MissingUnitRecapture('pirate1', 'capturedmedium'),
setup.qc.Injury('navigator', 4),
setup.qc.Injury('pirate2', 4), ],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Pirates, Ahoy! If you ever wants to be a pirate, the southern seas might just be the place you have been looking for. Raging water, hidden treasures, and bountiful booties are abound as travelers from afar voyage often in the seas. You can send a group of wannabe-slavers into the sea and pray they meet a great ship to plunder, which can yield a lot of money as well as rare slaves if done right.</p><p>Your slavers encountered a trading ship, which offered no resistance as your slavers, led by <<rep $g.pirate1>>,
<<uadv $g.pirate1>>
boarded and raided the entire ship. They plunder the many valuables in the ship as well as perusing the available booties before returning back to their ship with a new slave <<rep $g.victim>> carefully chosen among the many residents of the ship.</p><p>
Your slavers encountered a ship with only one passenger on tow. <<they $g.victim>> offered no resistance as your slavers
<<uadv $g.pirate1>>
boarded and raided the ship, taking all the valuables on board as well as <<rep $g.victim>> to be trained as a new slave back at the fort.
</p><p>
Unfortunately, the southern seas are not for the faint-hearted pirates. Your slavers were assaulted by raging storm as soon as they departed, which damaged most of their ship and forced them to retreat back to your fort before even venturing deeper into the waters.
</p><p>
It takes more than that to be a pirate as your wannabe pirates were assaulted by real pirates. There were no chance that your slavers could defeat them and ultimately they surrendered to the pirates. The pirates proceed to make use of them for entertainment before finally satisfied and returning back to their ship, taking <<rep $g.pirate1>> as a prize.
</p>
<p>
<<rep $g.pirate1>> will probably appear later in a slave auction on some land afar. You may be able to see <<them $g.pirate1>> again if you're lucky.</p><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
combat: 0.3,
brawn: 0.3,
survival: 0.3,
intrigue: 0.3,
slaving: 0.3,
knowledge: 0.3,
social: 0.3,
aid: 0.3,
arcane: 0.3,
sex: 0.3,
}
)>>
<<set _criteriabattery = new setup.UnitCriteria(
null, /* key */
'Battery', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('future_assassin_parent'),
],
{
combat: 0.3,
brawn: 0.3,
survival: 0.3,
intrigue: 0.3,
slaving: 0.3,
knowledge: 0.3,
social: 0.3,
aid: 0.3,
arcane: 0.3,
sex: 0.3,
}
)>>
<<run new setup.QuestTemplate(
'price_for_conundrum', /* key */
"Price for Conundrum", /* Title */
"darko", /* Author */
[ /* tags */
],
2, /* weeks */
10, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'battery': [ _criteriabattery, 3],
},
{ /* actors */
'child': 'all',
'wizard': 'magician_of_time0',
},
[ /* costs */
setup.qc.Money(-10000),
],
'Quest_price_for_conundrum',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_price_for_conundrumCrit',
[
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('future_assassin_parent'),
setup.qc.VarRemove('future_assassin_progress'),
setup.qc.VarSet('future_assassin_cooldown', '1', 100),
],
)>><p>
They say what comes around, goes around. Per the suggestion of your slaver, you are to revisit the wizard of the southern islands, the one who some time ago asked for a supply of human batteries to fund <<their $g.wizard>> ritual. But this time, you are to pay for <<their $g.wizard>> expertise to solve a conundrum you face.
</p>
<p>
And you better get ready to bring your fattest purse, as it won't be cheap at all. In fact, most of the money you received from <<them $g.wizard>> last time would have to be returned, which will surely earn you a smirk from the <<uadjgood $g.wizard>> wizard.
</p>
<p>
But at least <<they $g.wizard>> might reveal the answer to you, and the identity of the mysterious assailant. And what greater wealth is there than knowledge?
</p><p>
You swear the wizard was expecting you coming back to <<their $g.wizard>> humble abode. A small cup of tea has been prepared for three people — one for <<themself $g.wizard>> and two for you and your <<repfull $g.battery>>. <<They $g.wizard>> <<uadv $g.wizard>> took your money, before making <<themself $g.wizard>> comfortable to begin the explanation.
</p>
<p>
What you are most likely face here is a time traveler, likely from the future. Although traveler is perhaps a misnomer here, as it is impossible for anyone to willingly go to the past even via magic. No, all travelers from the future are here because they are pulled from their timeline.
Going from the description of <<their $g.child>> face, the wizard's 'best guess is that this would be the child of you and <<rep $g.battery>> that somehow got produced and pulled here.
<<if $unit.player.getGender() == $g.battery.getGender()>>
Even though in this timeline the both of you are of the same gender, it is not necessarily so in some other timeline.
<</if>>
</p>
<p>
But to make matters worse, in this timeline you are not lovers with <<rep $g.battery>>, and if this continues then unfortunately the mysterious assailant would cease to be. This is probably why <<they $g.child>> is so intent on kidnapping your current lover, probably just to separate the two of you as much as possible to make <<their $g.child>> existence possible.
</p>
<p>
By the time the wizard finished explaining, you and your <<repfull $g.battery>> got more confused than ever. But at least it was money well-spent — if that was the intention, then surely <<they $g.child>> will have no choice but to come to your fort should an imminent "accident" were to befall <<rep $g.battery>>. After some explaining, <<rep $g.battery>> reluctantly agree to fake a falling out with you, resulting in <<their $g.battery>> soon (faked) lynching...
</p>
<p>
Before you leave, the wizard gave you a final (but at least it's free) warning.
Sooner or later, you'll have to choose between love or a life, for if you continue on with your
current lovers, then the time law will rule that the child cannot exist, and hence will disappear from
the world...
</p>
<p>
That sounds like a big headache to think about, but at least you don't have to make the decision now.
Time to get back to your fort and end this charade once and for all.
</p>
<p>
The wizard never tell you or your slavers that it was <<their $g.wizard>> own botched future box delivery
that started the whole affair...
</p><<run new setup.QuestTemplate(
'raidbeyond_the_southern_seas', /* key */
"Raid: Beyond the Southern Seas", /* Title */
"darko", /* Author */
[ 'sea', 'money'
], /* tags */
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'villager': setup.unitgroup.humansea, },
[ /* costs */
],
'Quest_raid__beyond_the_southern_seas',
setup.qdiff.hard50, /* difficulty */
[ /* outcomes */
[
'Quest_raid__beyond_the_southern_seasCrit',
[
setup.qc.Slave('villager', "was a villager living on one of the many settlements beyond the southern seas", false),
setup.qc.Ire('humansea', 2),
setup.qc.MoneyCrit(0.75), ],
], [
'Quest_raid__beyond_the_southern_seasSuccess',
[
setup.qc.Ire('humansea', 2),
setup.qc.MoneyCustom(1000),
setup.qc.MoneyNormal(), ],
], [
'Quest_raid__beyond_the_southern_seasFailure',
[
setup.qc.Injury('raider1', 4),
setup.qc.Injury('raider2', 3),
setup.qc.Injury('support', 2), ],
], [
'Quest_raid__beyond_the_southern_seasDisaster',
[
setup.qc.TraumatizeRandom('raider1', setup.TRAUMA_LONG),
setup.qc.TraumatizeRandom('raider2', setup.TRAUMA_LONG),
setup.qc.Injury('raider1', 6),
setup.qc.Injury('raider2', 6),
setup.qc.MissingUnitRecapture('support', 'capturedmedium'),
],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are several remote settlements on the southern seas —- these settlements are rarely defended and hence make prime target for raiders such as yourself. You could try to send a group of slavers to raid one such settlement, but beware —- like everything else in the southern seas, this is surely going to be a dangerous mission.
</p><p>
Your slavers, led by <<rep $g.raider1>> were met with little resistance as they raided their houses and raped the villagers. In the end, they managed to
<<uadv $g.raider1>>
plunder much of the village as well as one particularly valuable slave to bring home.
</p><p>
Your slavers, led by <<rep $g.raider1>>, managed to raid a remote part of a remote village meaning that there was really nobody who could have stopped them. They <<uadv $g.raider1>> looted valuable jars and exotic rugs from the warehouse and returned back to the ship before reinforcements come.
</p><p>
Unfortunately, your slaver chose the wrong target as the warehouse they targeted were apparently guarded by veteran mercenaries, who were able to repel your slaver's assault with ease.
</p><p>
Your slavers were gravely injured as they foolishly attacked headlong into the city square, which is obviously well defended by the locals.
Worse, <<rep $g.support>> were captured by the locals, no doubt going to be made
example for your atrocities.
<<urescuenow $g.support>>.
</p><<set _criteriamaster = new setup.UnitCriteria(
null, /* key */
'Master Trialist', /* name */
[
setup.trait.bg_boss,
setup.trait.bg_courtesan,
setup.trait.bg_raider,
setup.trait.per_dominant,
setup.trait.per_submissive,
setup.trait.per_proud,
setup.trait.skill_creative,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.bg_maid,
setup.trait.bg_whore,
setup.trait.per_humble,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_love_trialist_0'),
],
{
slaving: 3,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Slave Trialist', /* name */
[
setup.trait.bg_slave,
setup.trait.bg_whore,
setup.trait.bg_courtesan,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.per_submissive,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
],
[
setup.trait.bg_slaver,
setup.trait.bg_boss,
setup.trait.breast_tiny,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.face_hideous,
setup.trait.face_ugly,
setup.trait.per_chaste,
setup.trait.per_serious,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_love_trialist_0'),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'the_display_of_love', /* key */
"The Display of Love", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'prep',
'item',
],
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'master': [ _criteriamaster, 1.5],
'slave': [ _criteriaslave, 1.5],
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_display_of_love',
setup.qdiff.hardest56, /* difficulty */
[ /* outcomes */
[
'Quest_the_display_of_loveCrit',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 16),
setup.qc.VarRemove('trial_of_love_progress'),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
setup.qc.Item(setup.item.love_potion_true),
setup.qc.IfThenElse(
setup.qres.NoItem(setup.item.love_technology),
setup.qc.DoAll([
setup.qc.Item(setup.item.love_technology)
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_the_display_of_loveCrit',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 16),
setup.qc.VarRemove('trial_of_love_progress'),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
setup.qc.Item(setup.item.love_potion_true),
setup.qc.IfThenElse(
setup.qres.NoItem(setup.item.love_technology),
setup.qc.DoAll([
setup.qc.Item(setup.item.love_technology)
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_the_display_of_loveFailure',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
setup.qc.MoneyCustom(4000),
],
],
[
'Quest_the_display_of_loveDisaster',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
setup.qc.MissingUnit('master'),
setup.qc.MissingUnit('slave'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarNull('trial_of_love_cooldown'),
setup.qres.VarEqual('trial_of_love_progress', '2'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_love_trialist_0'),
setup.qres.LoverExist(),
setup.qres.BestFriend(setup.qres.HasTitle('quest_love_trialist_0'))
]),
],
[ /* expiration outcomes */
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
],
)>><<set _u = setup.getAnySlaver()>>
<p>
The long awaited letter has finally arrived — the invitation for the last bout of the Trial of Love. This time, the participants are expected to display the purest form of love: sex itself. Each couple will be given a bedroom for them to enact as raunchy of a sex scene as they could possibly muster — but it must be authentic as well and not a pure act. The sexual act must stem from their own soul and spirit, from something they are used to do every time.
</p>
<p>
That complicates things, but fortunately your <<repfull _u>> has a bright idea: since you are running a slaving company, the most natural and kinky act they could display is that of a master and their slave. You'll just have to convince the lover that this is what they really want to do...
</p>
<<if !$inventory.isHasItem(setup.item.love_technology)>>
<p>
Sigh... the things you'd do for <<rep setup.item.love_technology>>. You just hope all of this is worth it.
</p>
<</if>>
<p>
<<dangertext 'Note'>>: Ignoring this quest will disqualify your slavers from the current Trial of Love, and they will have to restart the trials from the beginning.
</p><p>
The final island
your <<repfull $g.master>> and <<utheirrel $g.master $g.slave>> <<rep $g.slave>> arrived at is different than usual, yet remain as beautiful as ever. A bustling city unlike any in <<lore continent_main>>, with people of different culture frolicking in their daily lives. But your slavers are here on a mission, and certainly not sightseeing, and made a beeline for the palace.
</p>
<p>
Within the palace is reserved a particular bed, covered by shroud leaving only silhouettes of its occupants visible from the outside. As your slavers arrived, they are greeted with the silhouettes of one of the Trial of Love participants engaging in a deep blowjob behind the curtains. Sitting in front is the emperor, who apparently funded the entire trials. Your slavers get the feeling the entire trials is ultimately a scam to satisfy the emperor's voyeurism fetish, but really they can't argue much given the amount of rewards promised.
</p>
<p>
Your slavers <<uadv $g.master>> patiently awaited their turn, before donning the outfits they are using for the display. A full-on leather gear for <<rep $g.master>>, while <<rep $g.slave>> is donning almost nothing.
Once behind the curtain, they enacted the raunchy sex they have been always fantasizing on.
</p>
<<if $g.slave.isHasTrait('per_submissive') and $g.master.isHasTrait('per_submissive')>>
<p>
With two submissives on the bed however, the play did not play out as anyone would have expected. After each crack of whip from <<rep $g.master>>, not one but two potential slaves can be seen writhing in a combination of agony and pleasure from both the pain and the sound. <<rep $g.master>> discovered the pleasant sensation of being a dom to <<themself $g.master>>, and at the end both lovers ended up as a mess together with the plenty
<<if $g.master.isHasDick()>>cum<<else>>pussyjuice<</if>> decorating the bed.
</p>
<<elseif $g.slave.isHasTrait('per_dominant') and $g.master.isHasTrait('per_dominant')>>
<p>
With a dominant grin, <<rep $g.master>> began <<their $g.master>> to sexually dominate <<rep $g.slave>>. But there was two dominants in the bed, which makes a rather amusing scene as the lovers wrestled against each other, trying to grasp control of the whip and the situation. They tumble and twist on top of the bed, emitting hotly arousing sounds as the wrestling act was enacted as a living silhouette. But <<rep $g.master>> had the advantage of clothing and weapon, and <<rep $g.slave>> had no choice but to relent to <<their $g.slave>> lover, before getting fucked in the <<uhole $g.slave>>.
</p>
<<elseif $g.master.isHasTrait('per_dominant') or $g.slave.isHasTrait('per_submissive')>>
<p>
With a
<<if $g.master.isHasTrait('per_dominant')>>
dominant
<</if>>
grin, <<rep $g.master>> began <<their $g.master>> to sexually dominate <<rep $g.slave>>. <<Their $g.master>>
<<if $g.master.isHasTrait('per_submissive')>>
submissive
<</if>>
lover knows all too well of the play they love to enact on their own bed, and the play soon becomes natural. <<rep $g.master>> punishes <<rep $g.slave>> for every mistake <<they $g.slave>> made, from failing to lick clean <<their $g.master>> boots to leaking
<<if $g.slave.isHasDick()>>
pre from <<their $g.slave>> rock-hard <<udick $g.slave>>.
<<else>>
juice from <<their $g.slave>> <<uvagina $g.slave>>.
The lovers ends up with a rough hard sex at the end, with <<rep $g.master>> grinding <<their $g.master>>
<<if $g.master.isHasDick()>>
dick
<<else>>
strap-on
<</if>>
down <<their $g.master>> lover's throat before cleaning it up with
<<rep $g.slave>>'s tongue.
</p>
<</if>>
</p>
<<elseif $g.master.isHasTrait('per_submissive') or $g.slave.isHasTrait('per_dominant')>>
<p>
But the play does not play as anyone would have expected.
As
<<if $g.master.isHasTrait('per_submissive')>>
the submissive slaver
<</if>>
<<rep $g.master>> tentatively raised <<their $g.master>> whip,
<<if $g.slave.isHasTrait('per_dominant')>>
the dominant "slave"
<</if>>
snapped, jumped over the bed and took control of the whip instead.
Before <<rep $g.master>> was able to respond, <<rep $g.slave>> had assumed full control and whipped <<rep $g.master>> each time <<they $g.master>> spoke without permission.
Soon enough the role was completely reversed, with <<rep $g.slave>> ordering <<their $g.slave>> lover to
<<if $g.slave.isHasDick()>>
suck <<their $g.slave>> dick fast.
<<else>>
eat <<their $g.slave>> pussy.
<</if>>
But it was all completely natural, with the lovers often enacting this particular lovely scene in their own free time, since they know each other's preferences.
</p>
<<else>>
<p>
<<rep $g.master>> tried <<their $g.master>> best to imagine their lover as a slave — a job <<they $g.master>> all know too well as a slaver.
Despite both slavers being a vanilla in this kind of sex, the play was incredibly convincing, no small thanks to their experiences within their career in your company.
<<if $g.slave.isHasTrait('bg_slave')>>
No doubt <<rep $g.slave>>'s past as a slave also helped out in the process.
<</if>>
The lovers even get to enjoy it as time pass, and they complete the act with both visibly climaxing at the same time from behind the curtains.
</p>
<</if>>
<p>
The emperor was incredibly impressed by how natural your slavers were in their acts. In the end, your slavers were chosen as the sole winner of the current Trial of Love, and was rewarded handsomely.
<<if !$inventory.isHasItem(setup.item.love_technology)>>
A servant brought the <<rep setup.item.love_technology>>, and presented it for the lovers to take back home.
<</if>>
</p>
<p>
But of course, all those happen in the first two weeks of their stay in the island. What else they did with the last two weeks remain a mystery, but rumors said that they often reenact the bedroom scene in the fort nowadays...
</p><p>
The final island
your <<repfull $g.master>> and <<utheirrel $g.master $g.slave>> <<rep $g.slave>> arrived at is different than usual, yet remain as beautiful as ever. A bustling city unlike any in <<lore continent_main>>, with people of different culture frolicking in their daily lives. But your slavers are here on a mission, and certainly not sightseeing, and made a beeline for the palace.
</p>
<p>
Within the palace is reserved a particular bed, covered by shroud leaving only silhouettes of its occupants visible from the outside. As your slavers arrived, they are greeted with the silhouettes of one of the Trial of Love participants engaging in a deep blowjob behind the curtains. Sitting in front is the emperor, who apparently funded the entire trials. Your slavers get the feeling the entire trials is ultimately a scam to satisfy the emperor's voyeurism fetish, but really they can't argue much given the amount of rewards promised.
</p>
<p>
Your slavers <<uadv $g.master>> patiently awaited their turn, before donning the outfits they are using for the display. A full-on leather gear for <<rep $g.master>>, while <<rep $g.slave>> is donning almost nothing.
Once behind the curtain, they enacted the raunchy sex they have been always fantasizing on.
</p>
<p>
Unfortunately their play was far from convincing, and by the end of the competition, they were not chosen as the winners. An odd couple of dragonkin and werewolf took the trophy for the interspecies intercourse they raunchily displayed from behind the curtains. Your slavers had to console themselves with a third place prize, a hefty sum of gold. Your slavers went back home with a slight tinging and wondering whether all of these trials are just the perverted way the emperor spend his money...
</p><p>
<<rep $g.master>> and <<utheirrel $g.master $g.slave>> never made it back to the fort. It seems that the hosts have decided that the pair of lovers makes for a great pair of slaves much better than a pair of slavers.
</p>
<<uneedrescue $g.master>>
<<uneedrescue $g.slave>><<run new setup.Title(
'seven_deadly_transformation_complete', /* key */
"Fallen Plaything", /* name */
"An adventurer once destined to be a demon's plaything, but you saved instead", /* name */
"used to be an adventurer fated to become a demon's plaything, but saved by your company",
5000, /* slave value */
{
},
)>>
<<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.arms_werewolf),
setup.qres.NoTrait(setup.trait.arms_neko),
setup.qres.NoTrait(setup.trait.arms_dragonkin),
setup.qres.NoTrait(setup.trait.arms_demon),
setup.qres.Trait(setup.trait.tail_werewolf),
setup.qres.Trait(setup.trait.eyes_neko),
setup.qres.Trait(setup.trait.ears_elf),
setup.qres.Trait(setup.trait.mouth_orc),
setup.qres.Trait(setup.trait.legs_demon),
setup.qres.Trait(setup.trait.body_dragonkin),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__beginnings', /* key */
"The Seven Deadly Transformation: A New Beginnings", /* Title */
"darko", /* Author */
[
'transformation',
'sea',
'veteran',
'special',
'prep',
'unit'
], /* tags */
6, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'fated': _criteriafated,
'purifier': setup.qu.purify_head,
'warrior': setup.qu.light_warrior, },
{ /* actors */
'demon': setup.unitgroup.demon,
'good': setup.unitgroup.all, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__beginnings',
setup.qdiff.abyss62, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__beginningsCrit',
[
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.ResetInnateTraits('fated'),
setup.qc.AddHistory('fated', "was destined to become a demon lord's plaything, but was purified from their destiny by your company."),
setup.qc.RemoveTitle('fated', 'seven_deadly_transformation'),
setup.qc.AddTitle('fated', 'seven_deadly_transformation_complete'),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__beginningsSuccess',
[
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.ResetInnateTraits('fated'),
setup.qc.AddHistory('fated', "was destined to become a demon lord's plaything, but was purified from their destiny by your company."),
setup.qc.RemoveTitle('fated', 'seven_deadly_transformation'),
setup.qc.AddTitle('fated', 'seven_deadly_transformation_complete'),
],
], [
'Quest_the_seven_deadly_transformation__beginningsFailure',
[
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.ResetInnateTraits('fated'),
setup.qc.AddHistory('fated', "was destined to become a demon lord's plaything, but was purified from their destiny by your company."),
setup.qc.RemoveTitle('fated', 'seven_deadly_transformation'),
setup.qc.AddTitle('fated', 'seven_deadly_transformation_complete'),
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('warrior'),
setup.qc.Injury('warrior', 2),
setup.qc.Injury('trainer', 1),
setup.qc.Injury('purifier', 1), ],
], [
'Quest_the_seven_deadly_transformation__beginningsDisaster',
[
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.ResetInnateTraits('fated'),
setup.qc.AddHistory('fated', "was destined to become a demon lord's plaything, but was purified from their destiny by your company."),
setup.qc.RemoveTitle('fated', 'seven_deadly_transformation'),
setup.qc.AddTitle('fated', 'seven_deadly_transformation_complete'),
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('purifier'),
setup.qc.MissingUnit('warrior'),
setup.qc.Corrupt('purifier'),
setup.qc.Injury('trainer', 6),
setup.qc.Injury('purifier', 8),
setup.qc.SlaveMarker('good'),
setup.qc.Corrupt('warrior'),
setup.qc.Corrupt('warrior'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_the_seven_deadly_transformation__virtue_or_sin'>>
<p>
You have foolishly chosen to attempt and try to save the slave.
</p><<include 'Quest_the_seven_deadly_transformation__beginningsSuccess'>>
<p>
Some time later, you found a bottle of <<rep setup.item.potion_transformation>> lying on your desk. How could such a rare and dangerous potion appeared on your desk?
</p><p>
Your slavers scoured the southern seas for ways to remove the curse, until in an exotic village far south of your fort, a sage told them of the ritual to undo the claim on <<rep $g.fated>>'s soul. A <<maiden $g.good>>
with the purest heart must tug on <<rep $g.fated>>'s very soul, extracting virtue upon virtue to counteract each one of the seven deadly transformation they have been subjected to.
</p>
<p>
Obviously, none of your slavers would qualify for such a role. But being slavers, they are experienced in appraising people and soon enough, they found a candidate who is willing to help out of the goodness of <<their $g.good>> heart —- truly the paragon of good your slavers are looking for.
</p>
<p>
Once they are gathered in the ritual site, the <<maiden $g.good>> chanted one by one the blessed words. First, a chant of diligence, to ward away the sloth. This is followed by a chant of temperance, chastity, kindness, peace, generosity, and finally humbleness.
</p>
<p>
With every chant, the wickedness visible moved from <<rep $g.fated>> into the body of the poor unsuspecting <<maiden $g.good>>. Soon enough the <<maiden $g.good>> started to writhe as wolf tails and demonic hooves started to appear on <<their $g.good>> body. To complete the ritual, your slave <<rep $g.fated>> <<uadv $g.fated>>
<<if $g.fated.isHasDick()>>fucked the poor <<maiden $g.good>><<else>>forced the poor <<maiden $g.good>> to service their pussy<</if>> until the wickedness are fully transferred over.
</p>
<p>
Eventually, both your slave and the <<maiden $g.good>> collapsed from sheer exhaustion —- the formerly pure <<maiden $g.good>> now a chimeratic future plaything of the demon lord while your slave <<rep $g.fated>> appeared somewhat purer than before.
No longer your slavers can sense any fateful aura emanating from the slave, and the ritual appears to be successful</p>
<p>
Your slavers left the writhing <<maiden $g.good>> in the ritual site and come back home with the mission complete.
</p><p>
Your slavers scoured the southern seas for ways to remove the curse, until in an exotic village far south of your fort, a sage told them of the ritual to undo the claim on <<rep $g.fated>>'s soul. A <<maiden $g.good>>
with the purest heart must tug on <<rep $g.fated>>'s very soul, extracting virtue upon virtue to counteract each one of the seven deadly transformation they have been subjected to.
</p>
<p>
Obviously, none of your slavers would qualify for such a role. But being slavers, they are experienced in appraising people and soon enough, they found a good-enough candidate who is willing to help in exchange for some promised money —- not exactly the paragon of good they're looking for but eh good enough.
</p>
<p>
Once they are gathered in the ritual site, the <<maiden $g.good>> suspiciously chanted one by one the blessed words. First, a chant of diligence, to ward away the sloth. This is followed by a chant of temperance, chastity, kindness, peace, generosity, and finally humbleness.
</p>
<p>
Unfortunately the ritual was not as effective with a <<maiden $g.good>> of not-so-pure heart —- instead of having all the wickedness transferred over from <<rep $g.fated>> into the poor unsuspecting <<maiden $g.good>>, it went awry and escaped outside —- some even went into your slavers.
Seeing the chaos, the <<maiden $g.good>> immediately stopped the ritual and run far away, leaving your slavers to deal with the spreading corruption. In the end, they were able to ward off most of the corruptions spreading out from <<rep $g.fated>> outside towards the village, and not into themselves.
</p>
<p>
Eventually, the corruption flood stops and <<rep $g.fated>> collapsed from sheer exhaustion, appearing somewhat purer than before having lost so many of <<their $g.fated>> corrupted aspects.
Your slavers can no longer sense any fateful aura emanating from the slave, and the ritual appears to be somewhat successful.</p><p>
Your slavers scoured the southern seas for ways to remove the curse, until in an exotic village far south of your fort, a sage told them of the ritual to undo the claim on <<rep $g.fated>>'s soul. A <<maiden $g.good>>
with the purest heart must tug on <<rep $g.fated>>'s very soul, extracting virtue upon virtue to counteract each one of the seven deadly transformation they have been subjected to.
</p>
<p>
Obviously, none of your slavers would qualify for such a role. But being slavers, they are experienced in appraising people and soon enough, they found a good-enough candidate who isn't really willing to help and have to be kidnapped by your slavers and brought to the ritual site.
</p>
<p>
Once they are gathered in the ritual site, the <<maiden $g.good>> were forced to chant one by one the blessed words. First, a chant of diligence, to ward away the sloth. This is followed by a chant of temperance, chastity, kindness, peace, generosity, and finally humbleness.
</p>
<p>
Unfortunately, with such a wicked-hearted <<maiden $g.good>>, the ritual backfired badly —- instead of having all the wickedness transferred over from <<rep $g.fated>> into the poor unsuspecting <<maiden $g.good>>, it went awry and escaped mostly outside, but a sizable portion of it to your slavers.
Your slavers writhe in agony as they are visibly transformed as well as receiving severe injuries from the experience.</p>
<p>
Eventually, the corruption flood stops and <<rep $g.fated>> collapsed from sheer exhaustion, appearing somewhat purer than before having lost so many of <<their $g.fated>> corrupted aspects.
Your slavers can no longer sense any fateful aura emanating from the slave, and the ritual appears to be at least somewhat successful? You just have to deal with the mess that is your current state of the slavers.</p><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__pride', /* key */
"The Seven Deadly Transformation: Pride", /* Title */
"darko", /* Author */
[ 'transformation',
'sea',
'trait',
'prep'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'parader1': setup.qu.tank,
'parader2': setup.qu.light_warrior, },
{ /* actors */
'dragon': setup.unitgroup.dragonkin, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__pride',
setup.qdiff.hardest51, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__prideCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_horny_basic),
setup.qc.TraitReplace('fated', setup.trait.body_dragonkin),
setup.qc.Item(setup.item.potion_transformation),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__prideSuccess',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_horny_basic),
setup.qc.TraitReplace('fated', setup.trait.body_dragonkin),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__prideFailure',
[
setup.qc.Injury('trainer', 8),
setup.qc.Injury('parader1', 8),
setup.qc.Injury('parader2', 8), ],
], [
'Quest_the_seven_deadly_transformation__prideDisaster',
[
setup.qc.MissingUnit('trainer'),
setup.qc.Injury('parader2', 4),
setup.qc.Injury('parader1', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.body_dragonkin),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
The dragonkins are proud people, and they showcase their pride often. Parades are often held within their territory, where their warriors proudly march displaying their loots from their most recent skirmishes. Bystanders can watch in awe as these powerful and yet sexy warriors marched for days in celebration.
</p>
<p>
Oddly enough, one of the dragonkin messengers had arrived in your fort, inviting a team of slavers to join the celebration. They specifically require that one of your slaves <<rep _headunit>> to join the celebration —- an oddly specific request that can only means this must be somehow related in <<their _headunit>> quest for fulfilling <<their _headunit>> destiny.
</p>
<p>
Or this could always be a dragonkin scheme to collect more slaves.
</p>
<</if>><p>
Not wanting to draw unwanted attention, your slavers sailed out in the middle of the night, having their goal achieved. But right before they sailed, the dragonkin messenger and the chief appeared and gave much appreciation for your slaver's and slaves' attendance in their holy march. <<They $g.dragon>> then handed over to your slave a very valuable gift: two <<rep setup.item.potion_transformation>>s.
</p>
<p>
Unknown to your slavers, their safe journey back home were only possible thanks to the dragonkin's blessing.
</p><p>Escorted by the dragonkin messenger, your ship successfully navigated through the treacherous seas until the dragonkin's homeland comes into view. It's a wondrous place —- full of dragonkin masters with their slaves going on with everyday duty while a grand palace looms over the entire place.
</p>
<p>
The messenger escorted your slavers to meet with the chief, a
<<if $g.dragon.isHasDick()>>large muscular dragonkin<<else>>large-breasted dragonkin with rippling abs<</if>> sitting on <<their $g.dragon>> throne. Your slavers arranged to join the celebratory march tomorrow themed after the master-slave relationship, bringing <<rep $g.fated>> along as your slave.
</p>
<p>
Your slavers gathered as much information as possible regarding the celebration, and from what they've gathered, the dragonkin's take on slavery is quite different than normal. Here, not only masters are proud of their duties —- the slaves are too! The march symbolizes the pride of both master and slave, each doing their best in their lot of life.
</p>
<p>
It'll be incredibly difficult to drill such attitude to your slave within a day, so your slaver came up with a different approach to expressing pride: stripped naked of all clothes, your slavers concocted various drugs together with some last-minute training to ensure that <<rep $g.fated>>'s
<<if $g.fated.isHasDick()>>prick would be able to stay proudly erect<<else>>nipples would be able to stay proudly hard<</if>> all day long during tomorrow's march.
</p>
<p>
Still, achieving that within a day even with the available drugs would have been impossible. But during the march, your slavers noticed that the slave's
<<if $g.fated.isHasDick()>>prick<<else>>nipples<</if>> starting to emit a faded white aura, which somehow keeps them <<if $g.fated.isHasDick()>>erect<<else>>hard<</if>> throughout the long brutal march. Even more, scales slowly grow out of their entire body and by the end of the march, <<rep $g.fated>>'s body has been fully transformed into that of dragonkins —- covered with strong protective scales.
</p>
<p>
Not wanting to draw unwanted attention, your slavers sailed out in the middle of the night, having their goal achieved. But right before they sailed, the dragonkin messenger appeared to thank them for their attendance. <<They $g.dragon>> then handed over to your slave a very valuable gift: a <<rep setup.item.potion_transformation>>.
</p>
<p>
Unknown to your slavers, their safe journey back home were only possible thanks to the dragonkin's blessing.
</p><p>
Unfortunately, a terrible storm raged when the ship was in the middle of the journey, injuring your slavers during the peak of the storm. Upon seeing the grave injuries on your slavers, the messenger wish them the best of luck before advising them to go back while <<they $g.dragon>> flies back to <<their $g.dragon>> land.
</p><p>
Unfortunately, a terrible storm raged when the ship was in the middle of the journey, injuring your slavers during the peak of the storm. Even worse, <<rep $g.trainer>> were nowhere to be seen when the storm ended —- perhaps <<they $g.trainer>> were thrown out of the ship in the middle of the chaos. Upon seeing the devastation, the messenger wish them the best of luck before advising them to go back while <<they $g.dragon>> flies back to <<their $g.dragon>> land.
</p>
<p>
<<rep $g.trainer>> was lost in the middle of a storm during a voyage to the south. Perhaps you'll see <<them $g.trainer>> again one day...
</p><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.arms_werewolf),
setup.qres.NoTrait(setup.trait.arms_neko),
setup.qres.NoTrait(setup.trait.arms_dragonkin),
setup.qres.NoTrait(setup.trait.arms_demon),
setup.qres.Trait(setup.trait.tail_werewolf),
setup.qres.Trait(setup.trait.eyes_neko),
setup.qres.Trait(setup.trait.ears_elf),
setup.qres.Trait(setup.trait.mouth_orc),
setup.qres.Trait(setup.trait.legs_demon),
setup.qres.Trait(setup.trait.body_dragonkin),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__pride2', /* key */
"The Seven Deadly Transformation: The End", /* Title */
"darko", /* Author */
[
'transformation',
'sea',
'veteran',
'prep',
'special',
'upgrade',
'order'
], /* tags */
6, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'warrior': setup.qu.dark_warrior,
'fated': _criteriafated,
'wizard': setup.qu.corruptor, },
{ /* actors */
'demon': setup.unitgroup.demon, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__pride2',
setup.qdiff.extreme62, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__pride2Crit',
[
setup.qc.MissingUnitForever('fated'),
setup.qc.Item(setup.item.transformation_technology),
setup.qc.Item(setup.item.potion_transformation),
setup.qc.BoonizeRandom('trainer', 17),
setup.qc.BoonizeRandom('warrior', 17),
setup.qc.BoonizeRandom('fated', 17), ],
], [
'Quest_the_seven_deadly_transformation__pride2Success',
[
setup.qc.MissingUnitForever('fated'),
setup.qc.Item(setup.item.transformation_technology),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__pride2Failure',
[
setup.qc.MissingUnitForever('fated'),
setup.qc.Item(setup.item.transformation_technology),
setup.qc.Item(setup.item.potion_transformation),
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('wizard'),
setup.qc.Corrupt('warrior'),
setup.qc.TraumatizeRandom('trainer', 17),
setup.qc.TraumatizeRandom('wizard', 17),
setup.qc.TraumatizeRandom('warrior', 17), ],
], [
'Quest_the_seven_deadly_transformation__pride2Disaster',
[
setup.qc.MissingUnitForever('fated'),
setup.qc.Item(setup.item.transformation_technology),
setup.qc.Item(setup.item.potion_transformation),
setup.qc.MissingUnit('wizard'),
setup.qc.MissingUnit('trainer'),
setup.qc.TraumatizeRandom('warrior', 27), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_the_seven_deadly_transformation__virtue_or_sin'>>
<p>
You have made the sensible but dangerous decision of trying to seal the deal.
</p><p>
Your slavers arrived at the target island —- a dark shadow looms seemingly forever over the island, covering it in darkness. After trudging through the untamed forests, <<rep $g.wizard>> <<uadv $g.wizard>> stopped your slavers in their track. Lo and behold, the slavers were greeted with an empty altar in the middle of a crater, surrounded by carvings of various demonic sexual acts.
</p>
<p>
<<rep $g.warrior>> <<uadv $g.warrior>> stand guard while <<rep $g.wizard>> prepped the ritual. <<uslaverstripall $g.fated>> <<rep $g.trainer>> then placed the struggling slave atop of the altar, and the altar immediately works their magic.
</p>
<p>
<<Their $g.fated>> human-like arms immediately grow tired and dropped to the altar unmoving, as if it was chained by the heaviest of restraint. Their hooves were pulled down towards the corners of the ritual by envious hands appearing out of nowhere, placing <<rep $g.fated>> straight-eagled to the altar. Their wolf-like tail grow in length and two large penis-shapes formed at its tip, which entered <<rep $g.fated>>'s mouth spouting cum-like liquid down <<their $g.fated>> throat. From under the altar a massive stony phallus-like object impaled their <<uanus $g.fated>>, which would made <<them $g.fated>> scream if not for the tail-gag. Electric jolts both torment and pleasure the struggling slave, and <<they $g.fated>> would climax if not for the demonic chastity cage appearing out of nowhere cruelly constricting their <<ugenital $g.fated>>. Meanwhile <<their $g.fated>> <<ubreast $g.fated>> all the time puff out proudly displaying it sensuously for your slavers' entertainment.
</p>
<p>
The bondage lasts for a few hours before a thunderstorm crashed into the crater —— from the resulting mist appears what seems to be the demon lord himself, with two of his slaves crawling and leashed behind him. One stops and acts as his throne while the other as his footstool, and the demon made himself comfortably to watch the scene unfolds.
</p><<include 'Quest_the_seven_deadly_transformation__pride2Success'>><<include 'Quest_the_seven_deadly_transformation__pride2Common'>>
<p>
When the debauched ritual ended, your slave <<rep $g.fated>> collapsed into the altar in <<their $g.fated>> own sexual fluids. Satisfied by the performance, the demon lord personally collared the slave, marking <<them $g.fated>> as a permanent addition to his play pen.
</p>
<p>
For helping him raise such a good pet, your slavers were rewarded with the secret knowledge of bodily transformation —- <<rep setup.item.transformation_technology>>. The demon lord then together with his three slaves disappeared into a breach in the mist, leaving no trace that they were ever here.
</p>
<p>
Lying on the altar is a single bottle of <<rep setup.item.potion_transformation>>, perhaps another gift from the satisfied demon lord?
</p><<include 'Quest_the_seven_deadly_transformation__pride2Common'>>
<p>
It is then that your slavers got a very sudden and strong compelling order to join in the ritual. One by one, your slavers were unable to resist as their body were pulled into the altar, to join in the debauchery. One impaled among another, on top of the altar flesh upon flesh were piled up with one filling the other reciprocately. Lost in sexual desires, your slavers became a slave for the demon's entertainment, which lasts hours.
</p>
<p>
By the time they regained their consciousness, your slavers were alone with no trace of <<rep $g.fated>> or the demon lord anywhere. It could all just be a dream, but your slavers somehow ended up with the secret knowledge of bodily transformation —- <<rep setup.item.transformation_technology>>, inside their head.
</p>
<p>
Lying on the altar is a single bottle of <<rep setup.item.potion_transformation>>, perhaps another gift from the satisfied demon lord?
</p><<include 'Quest_the_seven_deadly_transformation__pride2Common'>>
<p>
It is then that your slavers got a very sudden and strong compelling order to join in the ritual. One by one, your slavers were unable to resist as their body were pulled into the altar, to join in the debauchery. One impaled among another, on top of the altar flesh upon flesh were piled up with one filling the other reciprocately. Lost in sexual desires, your slavers became a slave for the demon's entertainment, which lasts hours.
</p>
<p>
By the time <<they $g.warrior>> regained <<their $g.warrior>> consciousness, none of <<their $g.warrior>> team members were anywhere to be seen. Searching the area yield nothing, but <<rep $g.warrior>> somehow gained understanding of a secret ancient technology: <<rep setup.item.transformation_technology>>, inside their head.
<<They $g.warrior>> <<uadv $g.warrior>> gave up the search and left for home alone and broken.
</p>
<p>
Lying on the altar is a single bottle of <<rep setup.item.potion_transformation>>, perhaps a consolation gift from the satisfied demon lord?
</p><<run new setup.Title(
"quest_corrupted_wielder_of_the_excalibur_0", /* key */
"Corrupted Wielder of the Excalibur", /* name */
"The chosen host of Excalibur who you corrupted in order to regain their sense of self", /* description */
"was a knight chosen to be the wielder of Excalibur. You freed them from the sword\'s control by corrupting both the sword and the wielder", /* unit text */
5000, /* slave value */
{ /* skill additives */
combat: 2,slaving: 4,arcane: 3,sex: 1,},
)
>><<run new setup.Title(
"quest_excalibur_chosen_1", /* key */
"Excalibur Chosen", /* name */
"Chosen host of the divine and brain-controlling sword Excalibur", /* description */
"was the knight chosen to host the Excalibur sword. Should be kept as far as possible from the Excalibur lest they got possessed by the sword", /* unit text */
0, /* slave value */
{ /* skill additives */
combat: 4,brawn: 1,knowledge: 2,aid: 3,},
)
>>
<<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Knight', /* name */
[
setup.trait.bg_knight,
setup.trait.per_brave,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.skill_ambidextrous,
],
[
setup.trait.race_orc,
setup.trait.race_werewolf,
setup.trait.race_neko,
setup.trait.race_elf,
setup.trait.race_demon,
setup.trait.per_cautious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_deceitful,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.skill_alchemy,
setup.trait.skill_flight,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('aspect_of_chivalry'),
setup.qres.HasTitle('aspect_of_experience'),
setup.qres.HasTitle('aspect_of_wisdom'),
],
{
combat: 1,
brawn: 1,
aid: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_sword_of_legends', /* key */
"The Sword of Legends", /* Title */
"darko", /* Author */
[
'veteran',
'sea',
'prep',
'unknown'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': _criteriaknight,
'navigator': setup.qu.navigator,
'diviner': setup.qu.arcanelight, },
{ /* actors */
'merlin': 'city_all', },
[ /* costs */
],
'Quest_the_sword_of_legends',
setup.qdiff.harder61, /* difficulty */
[ /* outcomes */
[
'Quest_the_sword_of_legendsCrit',
[
setup.qc.RemoveTitle('knight', 'aspect_of_chivalry'),
setup.qc.RemoveTitle('knight', 'aspect_of_experience'),
setup.qc.RemoveTitle('knight', 'aspect_of_wisdom'),
setup.qc.AddTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.QuestDirect('excalibur_crusade', {'knight': 'knight'}),
setup.qc.VarSet('quest_excalibur', '3', -1),
],
], [
'Quest_the_sword_of_legendsCrit',
[
setup.qc.Injury('navigator', 4),
setup.qc.Injury('diviner', 4),
setup.qc.RemoveTitle('knight', 'aspect_of_chivalry'),
setup.qc.RemoveTitle('knight', 'aspect_of_experience'),
setup.qc.RemoveTitle('knight', 'aspect_of_wisdom'),
setup.qc.QuestDirect('excalibur_crusade', {'knight': 'knight'}),
setup.qc.AddTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.VarSet('quest_excalibur', '3', -1),
],
], [
'Quest_the_sword_of_legendsCrit',
[
setup.qc.Injury('knight', 3),
setup.qc.OneRandom([
setup.qc.RemoveTitle('knight', 'aspect_of_chivalry'),
setup.qc.RemoveTitle('knight', 'aspect_of_experience'),
setup.qc.RemoveTitle('knight', 'aspect_of_wisdom')
]), ],
], [
'Quest_the_sword_of_legendsDisaster',
[
setup.qc.OneRandom([
setup.qc.RemoveTitle('knight', 'aspect_of_chivalry'),
setup.qc.RemoveTitle('knight', 'aspect_of_experience'),
setup.qc.RemoveTitle('knight', 'aspect_of_wisdom')
]),
setup.qc.Injury('knight', 6),
setup.qc.Injury('navigator', 5),
setup.qc.Injury('diviner', 7), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('aspect_of_chivalry'),
setup.qres.HasTitle('aspect_of_experience'),
setup.qres.HasTitle('aspect_of_wisdom'),
setup.qres.NoTitle('quest_corrupted_wielder_of_the_excalibur_0'),
setup.qres.NoTitle('quest_excalibur_chosen_1')
]),
setup.qres.VarEqual('quest_excalibur', '2'),
],
[ /* expiration outcomes */
],
)>><p>
The Excalibur sword went missing from the coffers of<<lore location_lucgate>> some time ago. As the rumors said, the sword tend to show itself to a worthy swordsman who has proven their chivalry, experience, and wisdom. Up until now, single <<man $unit.player>> is capable of having all three, and you dismissed the tale as a dumb tale... until now.
</p>
<p>
One of your slavers seem to somehow, either through pure luck or careful strategizing on your side, managed to acquire all three aspects:
<<rep setup.title.aspect_of_chivalry>>
<<rep setup.title.aspect_of_wisdom>>
<<rep setup.title.aspect_of_experience>>.
If the legends are believed to be even remotely true, it might be possible to retrieve the sword, either for your own perusal or to be returned to the kingdom in exchange for surely a great amount of wealth...
</p>
<<set _u = setup.getAnySlaver()>>
<p>
The journey south will be long and difficult, and your <<repfull _u>> suggested to bring along the following team.
You will need a good navigator to navigate through the treacherous waters, and a diviner to help divine the location of the sword. If your slavers somehow managed to arrive at the supposed location, the knight must then show their worth and pick up the sword, who will then judge whether the knight is worthy.
</p><p>
The <<repfull $g.navigator>> skillfully navigated the ship through the treacherous waters, following <<rep $g.diviner>>'s <<uadv $g.diviner>> delivered vague divinations on the supposed location of the sword.
<<if $g.diviner.isHasTrait('magic_light_master')>>
Thankfully, <<rep $g.diviner>>'s mastery of <<rep $trait.magic_light_master>> was enough to guide the ship safely until they arrive at
<<else>>
<<rep $g.diviner>> only has basic mastery of the domain of light, and the ship was rocked quite severely throughout the journey, lightly injuring her passengers. Thankfully, your slavers still managed to finally arrive at
<<run $hospital.injureUnit($g.diviner, 3)>>
<<run $hospital.injureUnit($g.navigator, 3)>>
<</if>>
an uncharted island, the supposed destination of their journey.
</p>
<p>
The island itself prove to be a challenge — filled to the brim with monsters, your <<repfull $g.knight>> had to fight like a champion of legend through the horde of monsters, while <<rep $g.diviner>> does <<their $g.diviner>> best supporting with <<their $g.diviner>> <<lore magic_light>>. Finally, your slavers arrived at the center of the island.
</p>
<p>
Therein, lies a single sword shining so brightly stabbed deep down the earth. The light blinded both <<rep $g.diviner>> and <<rep $g.navigator>>, for it judged them unworthy of seeing the divine sword Excalibur. But it seemingly have no effect on <<rep $g.knight>>, who walked calmly towards the sword before <<uadv $g.knight>> gripping it.
With a <<uadjper $g.knight>> roar, <<rep $g.knight>> attempted to hoist the sword to the sky.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
The sword of legends, Excalibur, gently lifted from the earth and comfortably settle in <<rep $g.knight>>'s <<uarms $g.knight>>.
The blinding light ended too, and as <<rep $g.navigator>> about to <<uadv $g.navigator>> congratulate <<rep $g.knight>>, the <<urace $g.knight>> slaver suddenly pointed the sword against <<their $g.knight>> former allies. Denouncing all sorts of evils your company has done, <<rep $g.knight>> suddenly attacked the rest of your slavers, eventually forcing them to retreat back to the ship without neither <<rep $g.knight>> nor the sword.
<<if $gOutcome == 'success'>>
They suffer several gashes from the skillful assault from <<rep $g.knight>>.
<</if>>
</p>
<p>
Out in the sea, your slavers are finally safe from whatever possessed <<rep $g.knight>>. But you just know that this is not the last you hear of <<rep $g.knight>>, the divine wielder of Excalibur...
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But the sword refused to move. No matter from which angle <<rep $g.knight>> tried to lift the sword, it feels as if the sword and the earth fused into one. Frustrated, <<rep $g.knight>> vent their anger by slamming the sword with their fists — a grave mistake as the sword absorbs one of the three aspects of chivalry from <<rep $g.knight>> into the sword. Without all three aspects of chivalries, <<rep $g.knight>> is no longer immune to the blinding light of the sword, and together with the rest of your slavers were forced to retreat from the abode.
</p>
<p>
Perhaps you can try again if you have the chance.
</p>
<</if>><p>
The <<repfull $g.navigator>> skillfully navigated the ship through the treacherous waters, following <<rep $g.diviner>>'s <<uadv $g.diviner>> delivered vague divinations on the supposed location of the sword.
</p>
<p>
But their journey was not meant to be completed, as they were ambushed midway by pirates. While normally these pirates are no match for your slavers, especially the <<repfull $g.knight>>, somehow the nature itself was fighting against you. The wind blew against your slaver's directions, and just when your slavers seemingly about to deliver an important strike, lightning appears out of nowhere zapping the tip of
<<rep $g.knight>>'s <<uweapon $g.knight>>, shocking your slaver to the core.
While your slavers managed to get away from the engagement intact, they suffer great injuries as a result.
</p>
<p>
Having <<their $g.knight>> destiny stolen from right before <<their $g.knight>> nose, <<rep $g.knight>> <<uadv $g.knight>> vent <<their $g.knight>> anger on <<rep $g.diviner>>. But such a behavior is unsuitable for the future wielder of Excalibur, and when your slavers returned you can feel that <<rep $g.knight>> is no longer suitable for the task.
</p><<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Knight Trialist', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_mercenary,
setup.trait.bg_soldier,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_chaste,
setup.trait.per_loyal,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.muscle_extremelyweak,
setup.trait.muscle_veryweak,
setup.trait.muscle_weak,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cautious,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
],
{
combat: 1.5,
brawn: 1.5,
}
)>>
<<set _criteriahealer = new setup.UnitCriteria(
null, /* key */
'Healer Trialist', /* name */
[
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_generous,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.muscle_weak,
setup.trait.muscle_veryweak,
],
[
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.breast_tiny,
setup.trait.dick_tiny,
setup.trait.per_thrifty,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.per_dominant,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
],
{
aid: 1.5,
arcane: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'the_trial_of_love', /* key */
"The Trial of Love: Hardship", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'prep',
'item',
],
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': [ _criteriaknight, 1.5],
'healer': [ _criteriahealer, 1.5],
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_trial_of_love',
setup.qdiff.harder51, /* difficulty */
[ /* outcomes */
[
'Quest_the_trial_of_loveCrit',
[
setup.qc.IfThenElse(
setup.qres.Lovers('knight', 'healer'),
setup.qc.DoAll([
setup.qc.VarSet('trial_of_love_progress', '1', -1),
setup.qc.Equipment(setup.equipmentpool.aid_good),
setup.qc.Equipment(setup.equipmentpool.brawn_good),
setup.qc.AddTitle('knight', 'quest_love_trialist_0'),
setup.qc.AddTitle('healer', 'quest_love_trialist_0')
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_the_trial_of_loveCrit',
[
setup.qc.IfThenElse(
setup.qres.Lovers('knight', 'healer'),
setup.qc.DoAll([
setup.qc.VarSet('trial_of_love_progress', '1', -1),
setup.qc.OneRandom([
setup.qc.Equipment(setup.equipmentpool.aid_good),
setup.qc.Equipment(setup.equipmentpool.brawn_good),
]),
setup.qc.AddTitle('knight', 'quest_love_trialist_0'),
setup.qc.AddTitle('healer', 'quest_love_trialist_0')
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_the_trial_of_loveFailure',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.MissingUnitRecapture('knight', 'capturedmedium'),
],
],
[
'Quest_the_trial_of_loveFailure',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.MissingUnitRecapture('knight', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarNull('trial_of_love_cooldown'),
setup.qres.NoUnitWithTitle('quest_love_trialist_0'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver)
]),
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_sea>> is full of wondrous islands, many with scenery commonly described as "paradise". One such island celebrates a yearly tradition, a competition known as the "Trial of Love". Pairs of lovers are invited to participate to show the strength of their body, mind, and love, with the winner taking the grand and ilusive prize: the <<rep setup.item.love_technology>>.
</p>
<<if $inventory.isHasItem(setup.item.love_technology)>>
<p>
While you already have the technology in your fort, it could never hurt to get more of that rare <<rep setup.item.love_potion_true>>. You could try to resend a pair of lovebirds on a quest to a paradise island. If anything, the lovebirds could certainly use the R&R.
</p>
<<else>>
<p>
You have heard about the wonderful potency of <<rep setup.item.love_technology>>, forcing anyone to fall in love with you, even former arch enemies! It would certainly be good for your... business... yes, for your business to get your <<uhands $unit.player>> on this artifact. All you need to do is to send a pair of lovebirds amongst your slavers to a vacation in a paradise island.
</p>
<</if>>
<p>
<<dangertext 'Note'>>: The two slavers send on this quest must be lovers. Otherwise they can never win the competition!
</p><<if $g.knight.getLover() == $g.healer>>
<p>
Your <<repfull $g.knight>> and <<utheirrel $g.knight $g.healer>> <<rep $g.healer>> arrived at the island, and are immediately greeted with what they could only describe as paradise. Lush vegetations, pristine beach, and clear waters, it was everything a paradise should have been and more. But the lovebirds know they are here on a mission, to demonstrate their love and more!
</p>
<p>
The Trial of Love consists of a series of trials, this being its first. The first trial is trial by combat, where your slavers must demonstrate their ability to work with each other in hardship. Pairs of lovers are brought in to fight another in a competitive bracket within the lush island, using the strengths of their bonds to gain an edge over the others.
</p>
<p>
<<rep $g.knight>> is not a stranger to fighting —
<<if $g.knight.isHasTrait('muscle_strong')>>
using <<their $g.knight>> big muscles,
<<else>>
using <<their $g.knight>> fighting ability,
<</if>>
<<they $g.knight>> dispatched all the combatants one by one, while <<their $g.knight>> one true love <<rep $g.healer>>
<<if $g.healer.isHasTrait('magic_light')>>
casts healing spells upon healing spells to
<<else>>
use healing potions upon healing potions (which costs you) to
<<run $company.player.substractMoney(1000)>>
<</if>>
restore both the health and spirit of <<their $g.healer>> beloved the back.
</p>
<<if $gOutcome == 'crit'>>
<p>
The lovers slavers fought waves upon waves of combatants until finally they were the only pair left standing. ...which wasn't supposed to happen, as there was supposed to be two winners in this first bout. Seeing this, the lovemaster awarded both the first and second place rewards to your slavers, one equipment for the gallant knight, and another for the caring healer.
</p>
<<else>>
<p>
Your slavers fought valiantly until there were only two teams left. The remaining two teams including your slavers were then crowned winners of the first bout of Trial of Love, each awarded a rare piece of equipment as a prize.
</p>
<</if>>
<p>
The lovebirds spent the rest of their time in the islands deepening their love by the beachside before eventually returning to reality — back at your fort with the prize. Expect an invitation for the second bout to come to your desk anytime soon, and your slavers better get ready for it.
</p>
<<else>>
<p>
<<rep $g.knight>> and <<their $g.knight>> certainly not lovers <<rep $g.healer>> have returned to your fort. They look a little refreshed from the vacation, but there were nothing else to report. In their stay on the paradise island, they were immediately disqualified from the competition due to not being actual lovers. Perhaps you should consider sending an actual pair of lovers for this quest next time.
</p>
<</if>><p>
Only your <<repfull $g.healer>> returned from the quest. <<They $g.healer>> tearfully begged you to save
<<utheirrel $g.healer $g.knight>> <<rep $g.knight>> — the slavers have apparently fallen into a trap, as the "Trial of Love" was a simple scheme to lure in people from your land to be remade as a love slave.
</p>
<p>Your <<urace $g.knight>> slave had apparently sacrificed <<themself $g.knight>> to let <<rep $g.healer>> escape.
<<if $gOutcome == 'disaster'>>
It will be a monumental challenge to rescue the slaver,
<<else>>
It won't be easy to rescue the slaver,
<</if>>
but if you (and <<rep $g.healer>>) ever wanted to see <<rep $g.knight>> again then you have to act now.
</p><<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Brewer Trialist', /* name */
[
setup.trait.bg_scholar,
setup.trait.bg_wiseman,
setup.trait.per_smart,
setup.trait.skill_alchemy,
setup.trait.per_studious,
setup.trait.per_attentive,
],
[
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.skill_intimidating,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
setup.qres.HasTitle('quest_love_trialist_0'),
],
{
knowledge: 1.5,
social: 1.5,
}
)>>
<<set _criteriahealer = new setup.UnitCriteria(
null, /* key */
'Gatherer Trialist', /* name */
[
setup.trait.bg_wildman,
setup.trait.bg_hunter,
setup.trait.eyes_neko,
setup.trait.eyes_dragonkin,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.eyes_demon,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
setup.qres.HasTitle('quest_love_trialist_0'),
],
{
survival: 1.5,
intrigue: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'the_trial_of_love__sickness', /* key */
"The Trial of Love: Sickness", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'prep',
'item',
],
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': [ _criteriaknight, 1.5],
'healer': [ _criteriahealer, 1.5],
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_trial_of_love__sickness',
setup.qdiff.harder54, /* difficulty */
[ /* outcomes */
[
'Quest_the_trial_of_love__sicknessCrit',
[
setup.qc.VarSet('trial_of_love_progress', '2', -1),
setup.qc.Item(setup.item.hate_potion),
setup.qc.Item(setup.item.love_potion),
],
],
[
'Quest_the_trial_of_love__sicknessCrit',
[
setup.qc.VarSet('trial_of_love_progress', '2', -1),
setup.qc.OneRandom([
setup.qc.Item(setup.item.hate_potion),
setup.qc.Item(setup.item.love_potion)
]),
],
],
[
'Quest_the_trial_of_love__sicknessFailure',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.MissingUnitRecapture('knight', 'capturedmedium'),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
],
],
[
'Quest_the_trial_of_love__sicknessFailure',
[
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.MissingUnitRecapture('knight', 'capturedhard'),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, 1],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarNull('trial_of_love_cooldown'),
setup.qres.VarEqual('trial_of_love_progress', '1'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_love_trialist_0'),
setup.qres.LoverExist(),
setup.qres.BestFriend(setup.qres.HasTitle('quest_love_trialist_0'))
]),
],
[ /* expiration outcomes */
setup.qc.VarSet('trial_of_love_cooldown', '1', 8),
setup.qc.RemoveTitleGlobal('quest_love_trialist_0'),
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Your <<repfull _u>> has informed you that a rather special letter has arrived in your desk today. The letter is addressed to the slavers in your company who are currently participating in the Trial of Love, and it informs you that the second bout is due to be held very soon. Your slavers are urged to participate by going to a particular island in the southern seas, this time to apparently test another aspect of their love.
</p>
<p>
<<if $inventory.isHasItem(setup.item.love_technology)>>
While you already have the technology in your fort, it could never hurt to get more of that rare <<rep setup.item.love_potion_true>>.
<<else>>
As you recall, this is perhaps the only way to obtain that elusive <<rep setup.item.love_technology>>. You must admit that you have been dreaming about using this technology on some unsuspecting victims, making them fall in love with random people they meet on the street.
<</if>>
Either way, you'd better prepare your slavers for another vacation if you want to continue on this goose chase.
</p>
<p>
<<dangertext 'Note'>>: Ignoring this quest will disqualify your slavers from the current competition, and they would have to start anew!
</p><p>
Your <<repfull $g.knight>> and <<utheirrel $g.knight $g.healer>> <<rep $g.healer>> yet again arrived at a non-descript island. It is yet another vision of paradise — arching rocks greets your slavers, inviting them to explore the seemingly pristine and uninhabited island. But the lovebirds are on a mission, and they have no intention to fail it.
</p>
<p>
The second trial explores the theme of how far one would go for their beloved in sickness. Love stories tell of tales where the lover sail the seven seas in search of an elusive potion to cure their beloved sickness. In a strange mimicry of this tale, the second trial tasks its competitors to concoct as wondrous potion as they could possibly can from within the islands, as if their beloved are on the verge of dying with only the rare potion as their possible salvation.
</p>
<p>
Your slavers immediately got to work.
They sneaked a quick kiss before parting ways, with <<rep $g.knight>> investigating a recipe for a rare potion while <<utheirrel $g.knight $g.healer>> ventured into the wilds in search for a rare ingredient.
</p>
<p>
The venture was successful, and <<rep $g.healer>> <<uadv $g.healer>> collected many wondrous fruits from the jungle, the variants you have never encountered in <<lore continent_main>>.
<<if $g.knight.isHasTrait('bg_scholar') or $g.knight.isHasTrait('bg_wiseman')>>
It did not take the educated slaver <<rep $g.knight>> long to figure out that these fruits are mild aphrodisiacs.
<<elseif $g.knight.isHasTrait('skill_alchemy')>>
Given <<their $g.knight>> background in alchemy, <<rep $g.knight>> immediately recognized the strange pungent scent of the aphrodisiac fruit.
<<elseif $g.knight.isHasTrait('per_studious')>>
<<rep $g.knight>> recalled after a while from one of the numerous books <<they $g.knight>> have read that these strange-looking fruits are highly arousing — an aphrodisiac fruit.
<<else>>
<<rep $g.knight>> lacked any relevant background to be able to identify the fruit by smell, and resigned to identify it by taste. No sooner after the first bite did <<rep $g.knight>>'s gaze turned lustful, and advanced upon <<their $g.knight>> lover seemingly with no restraint. Only after <<rep $g.healer>> was used beyond exhaustion that the fruit's effect finally dissipate — a potent aphrodisiac. <<rep $g.knight>> will have the time to apologize to their lover <<rep $g.healer>> later, but for now work must be done.
<<run setup.qc.Injury('healer', 3).apply($gQuest)>>
<</if>>
</p>
<p>
Using the aphrodisiac fruit as a base,
<<rep $g.knight>> <<uadv $g.knight>> concocted
<<if $gOutcome == 'crit'>>
two rare potions, capable of either befriending two people or making them hate each other.
<<else>>
a potion with potent friendship-altering effect.
<</if>>
The potion was indeed wondrous and rare, impressing the judges greatly. Your slavers have once again triumphed in the Trial of Love, and only the last trial awaits them now...
</p>
<p>
Unknown to you, the quest was actually already complete by the end of the second week. But the lovebirds spent the rest of their time in the islands deepening their love by the caverns they found next to the sea, before eventually returning to reality — back at your fort with the prize. Sooner or later the invitation for the final bout of the trials will surely come to your office, as long as the lovers remain with your company.
</p><<include "Quest_the_trial_of_loveFailure">><<set _criteriatrader1 = new setup.UnitCriteria(
null, /* key */
'Trader (Sea)', /* name */
[
setup.trait.per_thrifty,
setup.trait.per_deceitful,
],
[
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
social: 1,
arcane: 1,
}
)>>
<<set _criteriatrader2 = new setup.UnitCriteria(
null, /* key */
'Trader (Sea)', /* name */
[
setup.trait.per_thrifty,
setup.trait.per_deceitful,
],
[
setup.trait.per_honest,
setup.trait.per_generous,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
social: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'trading_mission__southern_seas', /* key */
"Trading Mission: Southern Seas", /* Title */
"darko", /* Author */
[ 'sea', 'money'
], /* tags */
3, /* weeks */
1, /* expiration weeks */
{ /* roles */
'guard': setup.qu.guard,
'trader1': _criteriatrader1,
'trader2': _criteriatrader2, },
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-1), ],
'Quest_trading_mission__southern_seas',
setup.qdiff.normal49, /* difficulty */
[ /* outcomes */
[
'Quest_trading_mission__southern_seasCrit',
[
setup.qc.Favor('humansea', 100),
setup.qc.MoneyNormal(3.0),
],
], [
'Quest_trading_mission__southern_seasSuccess',
[
setup.qc.MoneyNormal(2.4), ],
], [
'Quest_trading_mission__southern_seasFailure',
[
],
], [
'Quest_trading_mission__southern_seasDisaster',
[
setup.qc.Injury('guard', 2),
setup.qc.Injury('trader1', 2),
setup.qc.Injury('trader2', 2), ],
], ],
[
[setup.questpool.sea, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are a great many exotic spices and fabric in the land beyond the southern seas. You could send a group of slavers with a capital to venture there and buy plenty of goods, which will sell insanely high near your fort. This venture will surely bring great income, but requires plenty of capital as well as posing a certain amount of danger.</p><p>
You almost could not believe your eyes as your slavers managed to
<<uadv $g.trader1>>
rake so much money even though they ended up pocketing a significant fraction of it, you still don't mind at all.
</p><p>
Your slavers
<<uadv $g.trader1>>
brought spices, rugs, silk, and even an exotic slave dancer to be resold in the<<lore location_lucgate>> bringing an enormous amount of profit for your company.
</p><p>
Unfortunately, your slavers got swindled hard by the southern traders. The goods they brought along the ship has rotten into nothingness by the time they arrive back at your fort.</p><p>
Unfortunately, your ship was struck by a lightning storm on the way back resulting in the loss of the trading goods as well as injuring your slavers.
</p><<run new setup.QuestTemplate(
'slavertraining_catchup', /* id */
'Slaver Training: Catch-Up', /* Title */
'darko', /* author */
['fort', 'trait', ], /* tags */
1, /* = weeks */
setup.INFINITY, /* = expired in */
{ /* your actors */
'trainee1': setup.qu.trainee,
'trainee2': setup.qu.trainee,
'trainee3': setup.qu.trainee,
},
{ /* generated actors */
},
[], /* costs */
'SlaverTrainingCatchUp', /* description */
setup.qdiff.easiest1,
[
[
'SlaverTrainingCatchUpResult',
[
setup.qc.CatchUpLevel('trainee1'),
setup.qc.CatchUpLevel('trainee2'),
setup.qc.CatchUpLevel('trainee3'),
]
],
[
'SlaverTrainingCatchUpResult',
[
setup.qc.CatchUpLevel('trainee1'),
setup.qc.CatchUpLevel('trainee2'),
setup.qc.CatchUpLevel('trainee3'),
],
],
[
'SlaverTrainingCatchUpResult',
[
setup.qc.CatchUpLevel('trainee1'),
setup.qc.CatchUpLevel('trainee2'),
setup.qc.CatchUpLevel('trainee3'),
],
],
[
'SlaverTrainingCatchUpResult',
[
setup.qc.CatchUpLevel('trainee1'),
setup.qc.CatchUpLevel('trainee2'),
setup.qc.CatchUpLevel('trainee3'),
],
],
],
[[setup.questpool.training, 1],],
[
setup.qres.QuestAvailableUnique(),
],
)>><p>
Your drill sergeant can train
three other slavers in your company in the art of slaving.
This will increase their levels up to either
the drill sergeant's level, or to <<= setup.TRAINER_MAX_LEVEL>>, whichever is lower.
Has no effect if the trainee level is already too high.
</p>
<<set _trainer = $dutylist.getUnit('DutyTrainer')>>
<<if !_trainer>>
<p>
<<dangertext 'You do not have a drill sergeant.'>> This means that the training will have no effect.
If you want to use this training, make sure you have someone available at the Drill Sergeant duty.
</p>
<</if>><<set _trainerduty = $dutylist.getDuty('trainer')>>
<<set _trainer = _trainerduty.getAssignedUnit()>>
<<if !_trainer>>
<p>
Unfortunately, you have no drill sergeant assigned right now,
and the week ended up
being wasted with nobody to coach your slavers.
</p>
<<elseif !_trainer.isAvailable()>>
<p>
Unfortunately, your <<repfull _trainer>> is unavailable to
coach your slavers and the week ended up being wasted.
</p>
<<else>>
<p>
<<rep _trainer>> dished out heavy training to your slavers, which
they absorbed in body, knowledge, and spirit. By the end of the week,
your slavers came out a better
slaver than before. They are ready to tackle whatever dangers that comes with the job of
being a slaver now.
</p>
<</if>><<run new setup.QuestTemplate(
'angry_peasants', /* key */
"Angry Peasants", /* Title */
"darko", /* Author */
[
'special',
], /* tags */
2, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'tank2': [setup.qu.tank, 0.3],
'tank1': [setup.qu.tank, 0.3],
'dps1': [setup.qu.fighter, 0.3],
'dps2': [setup.qu.fighter, 0.3],
'dps3': [setup.qu.dps, 0.3],
'dps4': [setup.qu.dps, 0.3],
'dps5': [setup.qu.dps, 0.3],
'healer1': [setup.qu.healer, 0.3],
'healer2': [setup.qu.healer, 0.3],
'healer3': [setup.qu.healer, 0.3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_angry_peasants',
setup.qdiff.harder46, /* difficulty */
[ /* outcomes */
[
'Quest_angry_peasantsCrit',
[
setup.qc.BoonizeRandom('tank1', 2),
setup.qc.BoonizeRandom('tank2', 2),
setup.qc.BoonizeRandom('dps1', 2),
setup.qc.BoonizeRandom('dps2', 2),
setup.qc.BoonizeRandom('dps3', 2),
setup.qc.BoonizeRandom('dps4', 2),
setup.qc.BoonizeRandom('dps5', 2),
setup.qc.BoonizeRandom('healer1', 2),
setup.qc.BoonizeRandom('healer2', 2),
setup.qc.BoonizeRandom('healer3', 2),
],
], [
'Quest_angry_peasantsCrit',
[
],
], [
'Quest_angry_peasantsCrit',
[
setup.qc.Injury('tank1', 1),
setup.qc.Injury('tank2', 2),
setup.qc.Injury('dps1', 2),
setup.qc.Injury('dps2', 2),
setup.qc.Injury('dps3', 1),
setup.qc.Injury('dps4', 1),
setup.qc.Injury('dps5', 1),
setup.qc.Injury('healer1', 2),
setup.qc.Injury('healer2', 1),
setup.qc.Injury('healer3', 2),
],
], [
'Quest_angry_peasantsDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('angry_peasants'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('angry_peasants'),
],
)>><p>
Thanks to your recent actions, you have fully irked the
<<rep $company.humanvale>>.
As a result, a group of angry peasants now made camp just outside of your fort,
attempting to harrass your slavers whenever they try to get out.
You have no choice but to let a lot of your slavers join forces and repel this threat. And by a lot, it actually means a lot...
</p>
<p>
<<dangertext 'Warning'>>: this quest will remain until you clear it! Each time this quest remain, some money will be deducted from your coffers to cover the necessary damages sustained by your fort.
</p><p>
Led by <<rep $g.tank1>> and <<utheirrel $g.tank1 $g.tank2>> <<rep $g.tank2>>, your slavers finally repelled the peasant uprising and send the attackers back home.
<<if $gOutcome == 'crit'>>
Your slavers were so fierce during the fight that the enemy flee much earlier than expected, inspiring your slavers with confidence.
<<elseif $gOutcome == 'failure'>>
Your slavers sustained minor injuries during the fight.
<</if>>
</p><p>
Somehow, your slavers were handily beaten by the peasants.
They continue their assault on your fort, and you have to try and send another team to repel them.
More competent ones, this time!
</p><<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Mounted-on-a-Sword', /* name */
[
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.training_anal_basic,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
setup.trait.training_vagina_basic,
setup.trait.training_vagina_advanced,
setup.trait.training_vagina_master,
setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master,
],
[
setup.trait.per_dominant,
setup.trait.training_mindbreak,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.anus_gape, setup.trait.vagina_gape]),
],
{
}
)>>
<<run new setup.QuestTemplate(
'dark_excalibur', /* key */
"Dark Excalibur", /* Title */
"darko", /* Author */
[
'veteran',
'special',
'item',
'unknown'
], /* tags */
4, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'corruptor': setup.qu.corruptor,
'trainer': setup.qu.slavetrainer,
'ritualist': setup.qu.ritualist,
'slave': _criteriaslave, },
{ /* actors */
'knight': [], },
[ /* costs */
],
'Quest_dark_excalibur',
setup.qdiff.abyss69, /* difficulty */
[ /* outcomes */
[
'Quest_dark_excaliburCrit',
[
setup.qc.Event('the_quest_for_excalibur__epilogue', 12),
setup.qc.AddTraitsRandom('knight', [setup.trait.per_deceitful, setup.trait.per_proud, setup.trait.per_cruel, setup.trait.per_lunatic, setup.trait.per_dominant, setup.trait.per_evil], 3, false),
setup.qc.Corrupt('knight'),
setup.qc.RemoveTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.AddTitle('knight', 'quest_corrupted_wielder_of_the_excalibur_0'),
setup.qc.Corrupt('slave'),
setup.qc.EquipmentDirect('slaving_weapon_master'), ],
], [
'Quest_dark_excaliburCrit',
[
setup.qc.Event('the_quest_for_excalibur__epilogue', 12),
setup.qc.AddTraitsRandom('knight', [setup.trait.per_loner, setup.trait.per_proud, setup.trait.per_cruel, setup.trait.per_lunatic, setup.trait.per_deceitful, setup.trait.per_evil, setup.trait.per_dominant], 1, false),
setup.qc.Corrupt('knight'),
setup.qc.RemoveTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.AddTitle('knight', 'quest_corrupted_wielder_of_the_excalibur_0'),
setup.qc.Corrupt('slave'),
setup.qc.EquipmentDirect('slaving_weapon_master'), ],
], [
'Quest_dark_excaliburCrit',
[
setup.qc.Event('the_quest_for_excalibur__epilogue', 12),
setup.qc.Corrupt('knight'),
setup.qc.RemoveTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.AddTitle('knight', 'quest_corrupted_wielder_of_the_excalibur_0'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('corruptor'),
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('ritualist'),
setup.qc.TraumatizeRandom('corruptor', 30),
setup.qc.TraumatizeRandom('trainer', 30),
setup.qc.TraumatizeRandom('ritualist', 30),
setup.qc.Injury('corruptor', 7),
setup.qc.Injury('ritualist', 6),
setup.qc.Injury('trainer', 8),
setup.qc.EquipmentDirect('slaving_weapon_master'), ],
], [
'Quest_dark_excaliburCrit',
[
setup.qc.Event('the_quest_for_excalibur__epilogue', 12),
setup.qc.Corrupt('knight'),
setup.qc.RemoveTitle('knight', 'quest_excalibur_chosen_1'),
setup.qc.Corrupt('slave'),
setup.qc.TraumatizeRandom('knight', 50),
setup.qc.Corrupt('knight'),
setup.qc.EquipmentDirect('slaving_weapon_master'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
You have decided to follow the foolish suggestion of one of your slavers: to fully corrupt the sword and turn it into a tool of evil. This will be an extremely difficult ritual, requiring slavers of many disciplines to congregate, as well as a specifically designated slave as a centerpiece.
</p>
<p>
To begin with, a corruptor skilled in <<rep setup.trait.magic_dark>> is a must. The corruptor will lead the ritual, who must be prepared thoroughly by a knowledgeable slaver. The ritual also specifies that a gaping slave be supplied for it, and although the text does not detail what the slave is going to do, you don't have to guess very much where this is going. And finally, your <<repfull $g.knight>> must watch the entire ritual unfolds, secured from near the compound lest <<they $g.knight>> go berserk again.
</p><p>
Your slavers and especially your <<repfull $g.ritualist>> spent many weeks studying the minute details of the ritual, but there wasn't much information in the texts. Outside of the necessary circle to be drawn, most of the rituals themselves seem to have to be done on the spot. Still, with the combined knowledge of your slavers, what could possibly go wrong?
</p>
<p>
<<rep $g.trainer>> placed the Excalibur sword in the middle of the ritual room.
With the struggling <<rep $g.knight>> secured on the corner of the room with a generous amount of chains (borrowed from the dungeons), <<rep $g.ritualist>> watches in anticipation as your <<repfull $g.corruptor>> starts the ritual. As the chanting begins, the candles surrounding the circles turn purple, the air turned suffocating. Sensing the depravity around it, the Excalibur attempted to radiate its light again, but this time it is quickly engulfed by the spawning darkness originating in the center of the magic circle. Before your slavers' eyes, the fight between the darkness and the holy sword is apparent, neither the light nor the darkness giving out to each other.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
<p>
<<rep $g.ritualist>> <<uadv $g.ritualist>> noticed that the next step of the ritual should now commence, but what? Before <<they $g.ritualist>> suggested anything, <<rep $g.trainer>> is already bringing the slave <<rep $g.slave>> closer to the circle, nearing the sword. With the darkness gripping the sword handle, the sword now appears like an oversized and overly sharp dildo to the right minds, and <<rep $g.trainer>> had the idea of impaling the slave (very carefully!) on the sword. Soon enough the slave's
<<if $g.slave.isHasTrait('anus_gape')>>
gaping anus
<<else>>
gaping vagina
<</if>>
was positioned right above the sword, and the moment of truth begins as the slave is slowly lowered into the sword's tip.
The slave screams in pain, but it was not due to any physical damage nor blood — before your eyes the Excalibur visibly transformed, the once pure and brightly shining sword now turned dark and corrupted, although it remains beautiful. The blade turns ethereal, no longer affecting the flesh, but now affects the mind, inflicting much pain to whoever it touches. Seeing this, <<rep $g.trainer>> fully impaled the poor <<urace $g.slave>> on the sword, earning a bloodcurling scream from the slave<<if $g.ritualist.isHasTrait('per_cruel')>>, to the delight of the cruel slaver <<rep $g.ritualist>>.
<<else>>, earning a wince from <<rep $g.ritualist>>.
<</if>>
</p>
<p>
Your slavers never noticed when <<rep $g.knight>>'s bindings were broken, and <<rep $g.knight>> calmly walked into the center of the pandemonium. Crouching, <<they $g.knight>> calmly grabbed the pommel of the sword, and effortlessly hoisted the sword upwards still with <<rep $g.slave>> stuck on it.
<<if $gOutcome == 'crit'>>
It seems the ritual went perfectly as your slavers can see the dark energy transferring directly from the sword into <<rep $g.knight>>, corrupting and empowering <<them $g.knight>> greatly. Calmly,
<<elseif $gOutcome == 'success'>>
It seems the ritual were successful, as your slavers can see power and corrupting transferring from the sword into your slaver <<rep $g.knight>>. Calmly,
<<else>>
It seems the ritual were somewhat successful, as your slavers can see power and corrupting transferring from the sword into your slaver <<rep $g.knight>>. But then a big backlash occurred, spreading corruption all over the room and affecting your slavers greatly, both physically and mentally from the pain caused by the sword. The room is now a complete mess. Calmly,
<</if>>
<<rep $g.knight>> unsheathed the sword from the slave and stared at the sword, mind finally back to <<their $g.knight>> and no longer controlled by the sword.
</p>
<p>
After a few days, your <<repfull $g.knight>> is thankfully back to <<their $g.knight>> <<uadjgood $g.knight>> self, albeit slightly corrupted. <<They $g.knight>> somehow retained no memory of the entire turn of events, save for the fact that <<they $g.knight>> has an unbreakable bond with the sword now. Per <<their $g.knight>> request, the corrupted Excalibur is aptly named <<rep setup.equipment.slaving_weapon_master>>. Interestingly, the sword retains its feisty personality and refused to be wielded by anyone save <<rep $g.knight>>.
</p>
<<else>>
<p>
In the midst of the chaos, your slavers were unable to come up with any bright idea what is expected from them in the ritual. They never noticed when <<rep $g.knight>>'s bindings broke, and the slaver wordlessly walked into the center of the circle. Crouching, the <<urace $g.knight>> grabbed the pommel of the sword, which visibly cleansed the darkness. Sensing the ritual is about to fail, in a last ditch effort your <<repfull $g.corruptor>> hurled <<their $g.corruptor>> strongest dark spell to both the sword and <<rep $g.knight>>, severely corrupting the slaver and the sword alike.
</p>
<p>
It seems the gambit was successful, and after the chaos settled your slavers were left with a fully transformed Excalibur and the unconscious <<ubody $g.knight>> of <<rep $g.knight>>. The Excalibur, now <<rep setup.equipment.slaving_weapon_master>>, is now fully at your disposal, its mind controlling effect seemingly gone entirely. But it refused to be wielded by anyone, even by <<rep $g.knight>>, and there is nothing else you could do with it but sell it...
</p>
<p>
A few days later, <<rep $g.knight>> has finally returned to normal.
No more crusade this crusade that, the <<urace $g.knight>> slaver is back to their
<<uadjgood $g.knight>> self.
Interestingly, <<they $g.knight>> retain no memory of the entire sequence of events,
save for the trauma and corruption they now must endure.
</p>
<</if>><<run new setup.QuestTemplate(
'desert_raider', /* key */
"Desert Raiders", /* Title */
"darko", /* Author */
[
'special',
], /* tags */
2, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'tank2': [setup.qu.tank, 0.3],
'tank1': [setup.qu.tank, 0.3],
'dps1': [setup.qu.fighter, 0.3],
'dps2': [setup.qu.fighter, 0.3],
'dps3': [setup.qu.dps, 0.3],
'dps4': [setup.qu.dps, 0.3],
'dps5': [setup.qu.dps, 0.3],
'healer1': [setup.qu.healer, 0.3],
'healer2': [setup.qu.healer, 0.3],
'healer3': [setup.qu.healer, 0.3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_desert_raider',
setup.qdiff.hardest46, /* difficulty */
[ /* outcomes */
[
'Quest_desert_raiderCrit',
[
setup.qc.BoonizeRandom('tank1', 2),
setup.qc.BoonizeRandom('tank2', 2),
setup.qc.BoonizeRandom('dps1', 2),
setup.qc.BoonizeRandom('dps2', 2),
setup.qc.BoonizeRandom('dps3', 2),
setup.qc.BoonizeRandom('dps4', 2),
setup.qc.BoonizeRandom('dps5', 2),
setup.qc.BoonizeRandom('healer1', 2),
setup.qc.BoonizeRandom('healer2', 2),
setup.qc.BoonizeRandom('healer3', 2),
],
], [
'Quest_desert_raiderCrit',
[
],
], [
'Quest_desert_raiderCrit',
[
setup.qc.Injury('tank1', 1),
setup.qc.Injury('tank2', 2),
setup.qc.Injury('dps1', 2),
setup.qc.Injury('dps2', 2),
setup.qc.Injury('dps3', 1),
setup.qc.Injury('dps4', 1),
setup.qc.Injury('dps5', 1),
setup.qc.Injury('healer1', 2),
setup.qc.Injury('healer2', 1),
setup.qc.Injury('healer3', 2),
],
], [
'Quest_desert_raiderDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('desert_raider'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('desert_raider'),
],
)>><p>
Thanks to your recent actions, you have fully irked the
<<rep $company.humandesert>>.
As a result, a group of desert raiders now made camp just outside of your fort,
harrassing your slavers whenever they try to get out.
You have no choice but to let a lot of your slavers join forces and repel this threat. And by a lot, it actually means a lot...
</p>
<p>
<<dangertext 'Warning'>>: this quest will remain until you clear it! Each time this quest remain, some money will be deducted from your coffers to cover the necessary damages sustained by your fort.
</p><p>
Led by <<rep $g.tank1>> and <<utheirrel $g.tank1 $g.tank2>> <<rep $g.tank2>>, your slavers finally repelled the raid and send the attackers back home.
<<if $gOutcome == 'crit'>>
Your slavers were so fierce during the fight that the enemy flee much earlier than expected, inspiring your slavers with confidence.
<<elseif $gOutcome == 'failure'>>
Your slavers sustained minor injuries during the fight.
<</if>>
</p><p>
Your slavers were handily beaten by the raiders.
They continue their assault on your fort, and you have to try and send another team to repel them.
</p><<run new setup.QuestTemplate(
'dragons_at_your_doorstep', /* key */
"Dragons at Your Doorstep", /* Title */
"darko", /* Author */
[
'special',
], /* tags */
2, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'tank2': [setup.qu.tank, 0.3],
'tank1': [setup.qu.tank, 0.3],
'dps1': [setup.qu.fighter, 0.3],
'dps2': [setup.qu.fighter, 0.3],
'dps3': [setup.qu.dps, 0.3],
'dps4': [setup.qu.dps, 0.3],
'dps5': [setup.qu.dps, 0.3],
'healer1': [setup.qu.healer, 0.3],
'healer2': [setup.qu.healer, 0.3],
'healer3': [setup.qu.healer, 0.3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_dragons_at_your_doorstep',
setup.qdiff.extreme46, /* difficulty */
[ /* outcomes */
[
'Quest_dragons_at_your_doorstepCrit',
[
setup.qc.BoonizeRandom('tank1', 2),
setup.qc.BoonizeRandom('tank2', 2),
setup.qc.BoonizeRandom('dps1', 2),
setup.qc.BoonizeRandom('dps2', 2),
setup.qc.BoonizeRandom('dps3', 2),
setup.qc.BoonizeRandom('dps4', 2),
setup.qc.BoonizeRandom('dps5', 2),
setup.qc.BoonizeRandom('healer1', 2),
setup.qc.BoonizeRandom('healer2', 2),
setup.qc.BoonizeRandom('healer3', 2),
],
], [
'Quest_dragons_at_your_doorstepCrit',
[
],
], [
'Quest_dragons_at_your_doorstepCrit',
[
setup.qc.Injury('tank1', 1),
setup.qc.Injury('tank2', 2),
setup.qc.Injury('dps1', 2),
setup.qc.Injury('dps2', 2),
setup.qc.Injury('dps3', 1),
setup.qc.Injury('dps4', 1),
setup.qc.Injury('dps5', 1),
setup.qc.Injury('healer1', 2),
setup.qc.Injury('healer2', 1),
setup.qc.Injury('healer3', 2),
],
], [
'Quest_dragons_at_your_doorstepDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('dragons_at_your_doorstep'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('dragons_at_your_doorstep'),
],
)>><p>
Thanks to your recent actions, you have fully irked the
<<rep $company.dragonkin>>.
They have sent a formidable expedition force over to your company to harass your company.
You have no choice but to let a lot of your slavers join forces and repel this draconic threat. And by a lot, it actually means a lot...
</p>
<p>
<<dangertext 'Warning'>>: this quest will remain until you clear it! Each time this quest remain, some money will be deducted from your coffers to cover the necessary damages sustained by your fort.
</p><p>
Led by <<rep $g.tank1>> and <<utheirrel $g.tank1 $g.tank2>> <<rep $g.tank2>>, your slavers finally repelled the invasion and send the attackers back home.
<<if $gOutcome == 'crit'>>
Your slavers were so fierce during the fight that the enemy flee much earlier than expected, inspiring your slavers with confidence.
<<elseif $gOutcome == 'failure'>>
Your slavers sustained minor injuries during the fight.
<</if>>
</p><p>
Your slavers were handily beaten by the invaders.
They continue their assault on your fort, and you have to try and send another team to repel them.
</p><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.per_cruel,
setup.trait.per_deceitful,
],
[
setup.trait.per_kind,
setup.trait.per_honest,
],
[
setup.qres.You(),
],
{
combat: 0.3,
brawn: 0.3,
survival: 0.3,
intrigue: 0.3,
slaving: 0.3,
knowledge: 0.3,
social: 0.3,
aid: 0.3,
arcane: 0.3,
sex: 0.3,
}
)>>
<<set _criteriavictim = new setup.UnitCriteria(
null, /* key */
'Victim', /* name */
[
setup.trait.per_tough,
setup.trait.per_masochistic,
setup.trait.per_brave,
setup.trait.skill_entertain,
setup.trait.bg_artist,
],
[
setup.trait.per_nimble,
setup.trait.per_lunatic,
setup.trait.per_cautious,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('future_assassin_parent'),
],
{
intrigue: 1.5,
social: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'future_assassin', /* key */
"Future Assassin", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'special',
'prep',
'unknown',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'victim': [ _criteriavictim, 1.5],
'crier': [ setup.qu.attentionseeker, 1.5],
},
{ /* actors */
'child': [
],
},
[ /* costs */
],
'Quest_future_assassin',
setup.qdiff.hard46, /* difficulty */
[ /* outcomes */
[
'Quest_future_assassinCrit',
[
setup.qc.Opportunity('branching_timeline__decision', {
child: "child",
}),
setup.qc.Injury('victim', 1),
setup.qc.Equipment(setup.equipmentpool.intrigue_good),
],
],
[
'Quest_future_assassinCrit',
[
setup.qc.Opportunity('branching_timeline__decision', {
child: "child",
}),
setup.qc.Injury('victim', 1),
],
],
[
'Quest_future_assassinFailure',
[
setup.qc.Injury('victim', 4),
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
[
'Quest_future_assassinFailure',
[
setup.qc.Injury('victim', 8),
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('future_assassin_parent'),
setup.qc.VarRemove('future_assassin_progress'),
setup.qc.VarSet('future_assassin_cooldown', '1', 100),
],
)>><<set _u = setup.getUnit({tag: "future_assassin_parent"})>>
<<if !_u>>
<p>
<<dangertext "You are missing an important unit for this quest.">> You can no longer complete this quest.
</p>
<<else>>
<p>
Armed with the expensive knowledge you bought from the wizard of the south, you have setup a plan.
You will denounce your <<repfull _u>> for insubordination, and will ship <<them _u>> off as a slave to some faraway land, to never been seen again in <<lore continent_main>>. A slaver will then be sent to spread the word out, while you and <<rep _u>> will try your best to make it convincing.
</p>
<p>
With luck, your little future assassin will have no choice but attempt a rescue for <<their $g.child>> <<mother _u>>, which will present an opportunity for you to finally end this nuisance once and for all.
</p>
<</if>><p>
You bought as many tomatoes as possible from nearby villages before putting your <<repfull $g.victim>> on a makeshift pillory, and planting as many tomatoes as possible around the area. As long as they don't come too close, the scene will look gory and scary, just as you wanted. <<rep $g.victim>> will just have to bear staying in an awkward position for a little while. In the meantime, your <<repfull $g.crier>> <<uadv $g.crier>> spread the word around nearby settlements, hopefully reaching the ears of your future assassin.
</p>
<p>
Sure enough, the trap works. After a few weeks, a shuffling noise can be heard from the courtyard, followed by an abrupt scream. Looking outside, you are satisfied to see that someone has apparently fallen into the pit trap you set under the pillory, who is actually stuffed with a strawman at night. After waking <<rep $g.victim>> up, you head together to the courtyard, and lo and behold an unconscious <<girl $g.child>> is deep down within the pit trap. There is no mistaking it, <<their $g.child>> face really does resemble yours and <<rep $g.victim>>'s face.
</p>
<p>
But now, the final warning of the wizard rings in your head. You have to make a decision.
<<set _lover = $unit.player.getLover()>>
<<if _lover && _lover != $g.victim>>
If you continue to love <<rep _lover>>, and not <<rep $g.victim>>, then the child will disappear...
<</if>>
Would you love a stranger, just to save a life?
</p><p>
Unfortunately, even after few weeks of waiting, your assailant was nowhere to be seen. After four weeks of nothing, you gave up on this, with nothing but bruises on <<rep $g.victim>> to show for it.
Perhaps you can try again once <<rep $g.victim>> recovers.
</p><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
combat: 0.3,
brawn: 0.3,
survival: 0.3,
intrigue: 0.3,
slaving: 0.3,
knowledge: 0.3,
social: 0.3,
aid: 0.3,
arcane: 0.3,
sex: 0.3,
}
)>>
<<set _rewardcommon = [
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_siblings', 'siblings'),
setup.qc.Sibling('hero1', 'hero2'),
setup.qc.Money(5000),
),
setup.qc.Slave('hero1', "was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined),
setup.qc.Slave('hero2', "was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined),
setup.qc.RemoveFromUnitGroup('hero1'),
setup.qc.RemoveFromUnitGroup('hero2'),
setup.qc.VarRemove('choose_your_own_adventure_progress'),
setup.qc.VarRemove('choose_your_own_adventure_caution'),
setup.qc.VarRemove('choose_your_own_adventure_oasis'),
setup.qc.VarRemove('choose_your_own_adventure_lovers'),
setup.qc.VarRemove('choose_your_own_adventure_strength'),
setup.qc.VarRemove('choose_your_own_adventure_revenge'),
setup.qc.VarRemove('choose_your_own_adventure_siblings'),
setup.qc.VarRemove('choose_your_own_adventure_changes'),
]>>
<<run new setup.QuestTemplate(
'heroic_end', /* key */
"Heroic End", /* Title */
"darko", /* Author */
[
'special',
'veteran',
'danger',
'unknown'
], /* tags */
3, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'you': _criteriayou,
'defender': setup.qu.defender,
'healer': setup.qu.healer, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2, },
[ /* costs */
],
'Quest_heroic_end',
setup.qdiff.hardest49, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_endCrit',
_rewardcommon.concat([
setup.qc.TraumatizeRandom('you', 5), ]),
], [
'Quest_heroic_endCrit',
_rewardcommon.concat([
setup.qc.Injury('you', 4),
setup.qc.TraumatizeRandom('you', 15), ]),
], [
'Quest_heroic_endCrit',
_rewardcommon.concat([
setup.qc.Injury('you', 10),
setup.qc.TraumatizeRandom('you', 25),
setup.qc.Injury('defender', 4),
setup.qc.Injury('healer', 4),
]),
], [
'Quest_heroic_endCrit',
_rewardcommon.concat([
setup.qc.Injury('you', 15),
setup.qc.Injury('defender', 8),
setup.qc.Injury('healer', 8),
setup.qc.TraumatizeRandom('you', 35),
]),
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><p>
The "Choose Your Own Adventure" book no longer disappears every time you read now, all its chapters seemingly complete with the final chapter detailing the end of your company.
</p>
<p>
You must keep being on guard and watch for the upcoming assault by the
very same <<= $varstore.get('choose_your_own_adventure_lovers')>>
whose journey you have been keeping watch over.
The fight will be fierce, but everything is at the stake. The
<<= $varstore.get('choose_your_own_adventure_lovers')>>
will no doubt attempt to remove you and the book
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
out of revenge.
<<else>>
to rid an evil from the world.
<</if>>
This quest will surely prove most dangerous to especially yourself.
</p><p>
For a few weeks you and a group of your chosen slavers have prepared your best —- all the fort walls have been reinforced, and your office, where the book resides, made secure. Nothing else is unfortunately written on the book, giving you no clue on how the heroes will launch an assault on your fort.
</p>
<p>
After two weeks of waiting, during a fateful night a loud crash sound is heard from inside the fort.
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
You see the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
having succesfully sneaked past your slavers into the courtyard, and cautiously advancing to your position.
<<else>>
The <<= $varstore.get('choose_your_own_adventure_lovers')>> brazenly climbed the unguarded walls of your fort into the courtyard and hurriedly advance seemingly to where you are located.
<</if>>
<<else>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
You see the invicibility spell fizzling out revealing the
<<= $varstore.get('choose_your_own_adventure_lovers')>> inside your court and heading towards you.
<<else>>
A loud bang just outside your fort distracted your slavers while the
<<= $varstore.get('choose_your_own_adventure_lovers')>> brazenly entered your court and advancing to your position.
<</if>>
<</if>>
There is no time to waste, and you hurriedly call over <<rep $g.defender>> and <<rep $g.healer>> to prepare for an inevitable fight.
</p>
<p>
Finally face to face with you, you can sense the
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
burning anger
<<else>>
steely resolve
<</if>>
from the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
eyes, as they lay their accusation on you.
Apparently the final fight against the demon last time made them think of the demon's word —- how did your slavers seemingly always know where they should go? The final straw was the first meeting with your slavers —- on that fateful day, where they meet your slavers walking away from their burning village.
</p>
<p>
Connecting the dots, you realize that the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
now firmly believe that you are behind the attack on their village.
Your company did raid villages after all, and their village might actually have been raided once or twice by you.
It seems there is no turning back at this point, and the only thing left is to fight it out.
</p>
<p>
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
As you see the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
unsheathe their weapons, you and your slavers too prepare your weapons. Soon, the sound of metal against metal can be heard across the fort as you and your slavers struggled to contain the
<<= $varstore.get('choose_your_own_adventure_lovers')>>'s might.
<<if $gOutcome == 'crit'>>
You deftly dodge all of the attacks and remained unscathed throughout.
<<elseif $gOutcome == 'success'>>
<<= $g.hero1.getName()>>'s attack connected and injured you.
<<elseif $gOutcome == 'failure'>>
A coordinated strike harassed you and your slavers covering all of you in injuries.
<<else>>
<<= $g.hero1.getName()>>'s attack connected badly to you injuring you gravely.
<</if>>
<<else>>
As you see the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
starting to chant a spell, you and your slavers hurriedly rush and attack them. Soon, the sound of wind and explosions can be heard across the fort as you and your slavers struggled to contain the
<<= $varstore.get('choose_your_own_adventure_lovers')>>'s power.
<<if $gOutcome == 'crit'>>
Even in the sea of explosions you manage to dodge most of them.
<<elseif $gOutcome == 'success'>>
<<= $g.hero1.getName()>>'s attack connected and injured you.
<<elseif $gOutcome == 'failure'>>
A large and seemingly unavoidable wind spell injured you and your slavers.
<<else>>
A coordinated spell were unleashed on you and your slavers, greatly injuring your team.
<</if>>
<</if>>
</p>
<p>
But luck seems to be on your side, as a stray attack hit the book, which immediately glows dark and drowing the room in darkness. In a stroke of luck, apparently the book still maintain very strong connection to the
<<= $varstore.get('choose_your_own_adventure_lovers')>> and the stray hit stunned them for a good while.
You then order <<rep $g.defender>> to rush and rip apart the book, which <<they $g.defender>> do <<uadv $g.defender>>.
The book emits loud screeching sounds which disorients you —- it seems you too maintain a connection to the book. But its effects are so much more profound on the
<<= $varstore.get('choose_your_own_adventure_lovers')>>, who writhed in pain on the floor.
Soon enough, the lovers fainted and for what seems to be the first time in ages you breathe a sigh of relief.
</p>
<p>
Having secured the
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers' && $varstore.get('choose_your_own_adventure_siblings') == 'siblings'>>incestuous<</if>>
<<= $varstore.get('choose_your_own_adventure_lovers')>> to prepare them for their new lives as slaves,
you survey the damage in your fort.
Looks like everything else remains mostly fine, except perhaps the book which has been shred to smitherens. Before your eyes, the scattered pages of the book one by one flickered into black fire until nothing remains.
</p>
<p>
You can't help but feels as if you are also a pawn of the book, nothing but entertainment for some demon lord... This harrowing experience will surely traumatize you.
Perhaps you'll get another chance, this time to exact your own revenge against
the demon...
But for now, you'll have to satisfy yourself with the two
new
<<= $varstore.get('choose_your_own_adventure_siblings')>> slaves.
</p><<run new setup.QuestTemplate(
'orc_invasion', /* key */
"Orc Invasion", /* Title */
"darko", /* Author */
[
'special',
], /* tags */
2, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'tank2': [setup.qu.tank, 0.3],
'tank1': [setup.qu.tank, 0.3],
'dps1': [setup.qu.fighter, 0.3],
'dps2': [setup.qu.fighter, 0.3],
'dps3': [setup.qu.dps, 0.3],
'dps4': [setup.qu.dps, 0.3],
'dps5': [setup.qu.dps, 0.3],
'healer1': [setup.qu.healer, 0.3],
'healer2': [setup.qu.healer, 0.3],
'healer3': [setup.qu.healer, 0.3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_orc_invasion',
setup.qdiff.hardest46, /* difficulty */
[ /* outcomes */
[
'Quest_orc_invasionCrit',
[
setup.qc.BoonizeRandom('tank1', 2),
setup.qc.BoonizeRandom('tank2', 2),
setup.qc.BoonizeRandom('dps1', 2),
setup.qc.BoonizeRandom('dps2', 2),
setup.qc.BoonizeRandom('dps3', 2),
setup.qc.BoonizeRandom('dps4', 2),
setup.qc.BoonizeRandom('dps5', 2),
setup.qc.BoonizeRandom('healer1', 2),
setup.qc.BoonizeRandom('healer2', 2),
setup.qc.BoonizeRandom('healer3', 2),
],
], [
'Quest_orc_invasionCrit',
[
],
], [
'Quest_orc_invasionCrit',
[
setup.qc.Injury('tank1', 1),
setup.qc.Injury('tank2', 2),
setup.qc.Injury('dps1', 2),
setup.qc.Injury('dps2', 2),
setup.qc.Injury('dps3', 1),
setup.qc.Injury('dps4', 1),
setup.qc.Injury('dps5', 1),
setup.qc.Injury('healer1', 2),
setup.qc.Injury('healer2', 1),
setup.qc.Injury('healer3', 2),
],
], [
'Quest_orc_invasionDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('orc_invasion'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('orc_invasion'),
],
)>><p>
Thanks to your recent actions, you have fully irked the
<<rep $company.orc>>.
They retaliate in the way they know best: by sending a group of orc raiders
over to your company.
The small orc band has made camp just outside your fort, harassing your slavers from there.
You have no choice but to let a lot of your slavers join forces and repel this orcish threat. And by a lot, it actually means a lot...
</p>
<p>
<<dangertext 'Warning'>>: this quest will remain until you clear it! Each time this quest remain, some money will be deducted from your coffers to cover the necessary damages sustained by your fort.
</p><p>
Led by <<rep $g.tank1>> and <<utheirrel $g.tank1 $g.tank2>> <<rep $g.tank2>>, your slavers finally repelled the orc invasion and send the attackers back home.
<<if $gOutcome == 'crit'>>
Your slavers were so fierce during the fight that the enemy flee much earlier than expected, inspiring your slavers with confidence.
<<elseif $gOutcome == 'failure'>>
Your slavers sustained minor injuries during the fight.
<</if>>
</p><p>
Your slavers were handily beaten by the orc invaders.
They continue their assault on your fort, and you have to try and send another team to repel them.
</p><<run new setup.QuestTemplate(
'the_wanderer_wanders', /* key */
"The Wanderer Wanders", /* Title */
"darko", /* Author */
[ /* tags */
'special',
'transformation'
],
1, /* weeks */
1, /* expiration weeks */
{ /* roles */
'scout': [ setup.qu.scout_vale, 1],
'spotter': [ setup.qu.spotter, 1],
'spy': [ setup.qu.infiltrator, 1],
},
{ /* actors */
'wanderer': [
],
},
[ /* costs */
],
'Quest_the_wanderer_wanders',
setup.qdiff.normal30, /* difficulty */
[ /* outcomes */
[
'Quest_the_wanderer_wandersCrit',
[
setup.qc.VarRemove('wanderer_joins_missing'),
setup.qc.Opportunity('the_half_werewolf', {
wanderer: "wanderer",
}),
],
],
[
'Quest_the_wanderer_wandersCrit',
[
setup.qc.VarRemove('wanderer_joins_missing'),
setup.qc.Opportunity('the_half_werewolf', {
wanderer: "wanderer",
}),
],
],
[
'Quest_the_wanderer_wandersFailure',
[
],
],
[
'Quest_the_wanderer_wandersFailure',
[
setup.qc.Injury('scout', 3),
setup.qc.Injury('spy', 3),
setup.qc.Injury('spotter', 3),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
<<rep $g.wanderer>> has once again disappeared without a trace from your fort. By now, you're already accustomed to the pattern, and you know that the <<uadjgood $g.wanderer>> slaver will surely be back by next week. But perhaps this is a chance for you to get to the bottom of this once and for all.
</p>
<p>
You can send a group of slavers to try and track the slaver down. A scout familiar with the terrain, as well as a spotter should do the trick. Once your slavers located the slaver, they still need to tail <<them $g.wanderer>>, and a spy would do wonder for the success chance of this mission.
</p><p>
With some difficulty, <<rep $g.scout>> and <<utheirrel $g.scout $g.spotter>> <<rep $g.spotter>> were able to pick up <<rep $g.wanderer>>'s worn-down trail. They tracked the slaver to a small thicket in the vale, far away from civilization. It took them several days of tracking, but during a dawn they eventually found <<rep $g.wanderer>> alone under a pristine waterfall. But something is wrong with the <<man $g.wanderer>>.
</p>
<p>
The <<man $g.wanderer>>'s back is... furry, to say the least. Your slavers even spotted a pointed ears growing from the slaver's head, as well as what resembles a wolf tail. But there is no mistaking from the face and the trail that this <<man $g.wanderer>> can only be <<rep $g.wanderer>>.
</p>
<p>
Before your slaver figured out what happened, the sun rises and a most unbelievable occurrence happen before your slavers. <<rep $g.wanderer>> visibly transformed before your slavers' eyes, reverting all their furry bits and went back into full human.
</p>
<p>
Armed with this information, they came back to your fort and deliver their full report to you. You waited until the slaver eventually came back to your fort, and confronted the slaver about this.
</p>
<p>
<<rep $g.wanderer>>'s usually <<uadjgood $g.wanderer>> face immediately turned sour, and then to what seems to be despair. With no other way to wiggle <<their $g.wanderer>> way out of this, <<they $g.wanderer>> revealed that <<they $g.wanderer>> is the <<daughter $g.wanderer>> of a werewolf father and a northerner mother. This gives <<them $g.wanderer>> a unique curse, in that <<they $g.wanderer>> can and must transform between <<their $g.wanderer>> human form and <<their $g.wanderer>> werewolf form every now and then. Given the animosity between the werewolves and the northerner, it is no surprise that neither camp is willing to accept <<them $g.wanderer>> as <<they $g.wanderer>> is. This was the real reason why <<they $g.wanderer>> approached your company.
</p>
<p>
You should decide what to do with <<them $g.wanderer>>.
</p><p>
It seems <<rep $g.wanderer>> covered up <<their $g.wanderer>> trail pretty well. Your slavers had no clue where <<rep $g.wanderer>> went, and spent most of the week aimlessly wandering across the vale.
</p>
<<if $gOutcome == 'disaster'>>
<p>
They were accosted by bandit along the way, and was injured during the fight.
</p>
<</if>><<run new setup.QuestTemplate(
'surgery_anus_loosen', /* id */
'Surgery: Loosen Anus', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryAnusLoosen', /* description */
setup.qdiff.hardest60,
[
[
'SurgeryAnusLoosenCrit',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
]
],
[
'SurgeryAnusLoosenSuccess',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.anus_gape),
],
],
[
'SurgeryAnusLoosenFailure',
[],
],
[
'SurgeryAnusLoosenDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Loosen the slaver's anus.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_anus_tighten', /* id */
'Surgery: Tighten Anus', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[ /* costs */
setup.qc.LoseItem(setup.item.potion_tight, 1),
],
'SurgeryAnusTighten', /* description */
setup.qdiff.hardest60,
[
[
'SurgeryAnusTightenCrit',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
]
],
[
'SurgeryAnusTightenSuccess',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
],
],
[
'SurgeryAnusTightenFailure',
[
setup.qc.TraitDecrease('trainee', setup.trait.anus_tight),
setup.qc.Injury('trainee', 8),
],
],
[
'SurgeryAnusTightenDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Tighten the slaver's anus.
</p><p>
The orifice tightening procedure was very successful, no small thanks to your <<repfull $g.head>>
masterful handling of the rare <<rep setup.item.potion_tight>>.
<<rep $g.trainee>> tentatively rubber their now <<uanus $g.trainee>>, getting used to the new feeling
of it being extra-tight.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
<<rep $g.trainee>> tentatively rubber their now <<uanus $g.trainee>>, getting used to the strange new feeling.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
But <<rep $g.trainee>> was severely damaged by the invasive procedure, and will need some time to rest.
<<rep $g.trainee>> tentatively rubber their now <<uanus $g.trainee>>, getting used to the strange new feeling.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_balls_grow', /* id */
'Surgery: Balls Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryBallsGrow', /* description */
setup.qdiff.extreme50,
[
[
'SurgeryBallsGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.balls_large),
]
],
[
'SurgeryBallsGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.balls_large),
],
],
[
'SurgeryBallsGrowFailure',
[],
],
[
'SurgeryBallsGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Grows the size of the slaver's balls.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
There was an accident which causes the surgery to fail catastrophically, badly
injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_balls_shrink', /* id */
'Surgery: Balls Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryBallsShrink', /* description */
setup.qdiff.extreme50,
[
[
'SurgeryBallsShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.balls_large.getTraitGroup()),
]
],
[
'SurgeryBallsShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.balls_large.getTraitGroup()),
],
],
[
'SurgeryBallsShrinkFailure',
[],
],
[
'SurgeryBallsShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Shrinks the slaver's balls.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_breast_grow', /* id */
'Surgery: Breast Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryBreastGrow', /* description */
setup.qdiff.extreme51,
[
[
'SurgeryBreastGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.breast_large),
]
],
[
'SurgeryBreastGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.breast_large),
],
],
[
'SurgeryBreastGrowFailure',
[],
],
[
'SurgeryBreastGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Grows the size of the slaver's breasts.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_breast_shrink', /* id */
'Surgery: Breast Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryBreastShrink', /* description */
setup.qdiff.extreme51,
[
[
'SurgeryBreastShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.breast_large.getTraitGroup()),
]
],
[
'SurgeryBreastShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.breast_large.getTraitGroup()),
],
],
[
'SurgeryBreastShrinkFailure',
[],
],
[
'SurgeryBreastShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Shrinks the slaver's breasts.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_dick_grow', /* id */
'Surgery: Dick Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryDickGrow', /* description */
setup.qdiff.extreme52,
[
[
'SurgeryDickGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.dick_large),
]
],
[
'SurgeryDickGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.dick_large),
],
],
[
'SurgeryDickGrowFailure',
[],
],
[
'SurgeryDickGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Grows both the length and girth of the slaver's dick.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_dick_shrink', /* id */
'Surgery: Dick Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryDickShrink', /* description */
setup.qdiff.extreme52,
[
[
'SurgeryDickShrinkCrit',
[
setup.qc.Trait('trainee', null, setup.trait.dick_large.getTraitGroup()),
]
],
[
'SurgeryDickShrinkSuccess',
[
setup.qc.Trait('trainee', null, setup.trait.dick_large.getTraitGroup()),
],
],
[
'SurgeryDickShrinkFailure',
[],
],
[
'SurgeryDickShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Shrinks both the length and girth of the slaver's dick.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_height_grow', /* id */
'Surgery: Height Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryHeightGrow', /* description */
setup.qdiff.hardest50,
[
[
'SurgeryHeightGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.height_tall),
]
],
[
'SurgeryHeightGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.height_tall),
],
],
[
'SurgeryHeightGrowFailure',
[],
],
[
'SurgeryHeightGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Increases the slaver's height.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_height_shrink', /* id */
'Surgery: Height Shrink', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryHeightShrink', /* description */
setup.qdiff.hardest50,
[
[
'SurgeryHeightShrinkCrit',
[
setup.qc.Trait('trainee', setup.trait.height_short),
]
],
[
'SurgeryHeightShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.height_short),
],
],
[
'SurgeryHeightShrinkFailure',
[],
],
[
'SurgeryHeightShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Decreases the slaver's height.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_muscle_grow', /* id */
'Surgery: Muscle Growth', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryMuscleGrow', /* description */
setup.qdiff.hardest51,
[
[
'SurgeryMuscleGrowCrit',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
]
],
[
'SurgeryMuscleGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
],
],
[
'SurgeryMuscleGrowFailure',
[],
],
[
'SurgeryMuscleGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Grows the size of the slaver's muscles.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_muscle_shrink', /* id */
'Surgery: Muscle Shrinking', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryMuscleShrink', /* description */
setup.qdiff.hardest51,
[
[
'SurgeryMuscleShrinkCrit',
[
setup.qc.Trait('trainee', setup.trait.muscle_weak),
]
],
[
'SurgeryMuscleShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_weak),
],
],
[
'SurgeryMuscleShrinkFailure',
[],
],
[
'SurgeryMuscleShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Shrinks the slaver's muscles.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_vagina_loosen', /* id */
'Surgery: Loosen Vagina', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'SurgeryVaginaLoosen', /* description */
setup.qdiff.hardest60,
[
[
'SurgeryVaginaLoosenCrit',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
]
],
[
'SurgeryVaginaLoosenSuccess',
[
setup.qc.TraitIncreaseExisting('trainee', setup.trait.vagina_gape),
],
],
[
'SurgeryVaginaLoosenFailure',
[],
],
[
'SurgeryVaginaLoosenDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Loosen the slaver's vagina.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<rep $g.head>>'s attempt throughout the week has not borne result.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'surgery_vagina_tighten', /* id */
'Surgery: Tighten Vagina', /* Title */
'darko', /* author */
['fort', 'transformation'], /* tags */
4, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.surgery_head,
'assistant1': setup.qu.surgery_assistant,
'assistant2': setup.qu.surgery_assistant,
},
{ /* generated actors */
'trainee': null,
},
[ /* costs */
setup.qc.LoseItem(setup.item.potion_tight, 1),
],
'SurgeryVaginaTighten', /* description */
setup.qdiff.hardest60,
[
[
'SurgeryVaginaTightenCrit',
[
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
]
],
[
'SurgeryVaginaTightenSuccess',
[
setup.qc.TraitDecrease('trainee', setup.trait.vagina_tight),
],
],
[
'SurgeryVaginaTightenFailure',
[],
],
[
'SurgeryVaginaTightenDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Tighten the slaver's vagina.
</p><p>
The orifice tightening procedure was very successful, no small thanks to your <<repfull $g.head>>
masterful handling of the rare <<rep setup.item.potion_tight>>.
<<rep $g.trainee>> tentatively rubber their now <<uvagina $g.trainee>>, getting used to the new feeling
of it being extra-tight.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
<<rep $g.trainee>> tentatively rubber their now <<uanus $g.trainee>>, getting used to the strange new feeling.
</p><p>
The orifice tightening procedure was successful, no small thanks to your <<repfull $g.head>>.
But <<rep $g.trainee>> was severely damaged by the invasive procedure, and will need some time to rest.
<<rep $g.trainee>> tentatively rubber their now <<uanus $g.trainee>>, getting used to the strange new feeling.
</p><p>
The surgery failed catastrophically, badly injuring <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'training_anal_advanced', /* id */
'Anal Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingAnalAdvanced', /* description */
setup.qdiff.harder40,
[
[
'QuestUnitTrainingAnalAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_anal_advanced),
]
],
[
'QuestUnitTrainingAnalAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_anal_advanced),
],
],
[
'QuestUnitTrainingAnalAdvancedFailure',
[],
],
[
'QuestUnitTrainingAnalAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_anal_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
A true anal slut must be able to give pleasure by deliberate contraction
of their anal muscles.
These abilities must be trained by using an electric dildo, which
can give the slave direct feedback based on the performance.
This training must then repeated over several days until the slave
understands when to contract the muscle and when to release it.
</p><p>
<<rep $g.trainee>> turned out to be a natural anal slut.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_anal_basic', /* id */
'Anal Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingAnalBasic', /* description */
setup.qdiff.easy16,
[
[
'QuestUnitTrainingAnalBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_anal_basic),
]
],
[
'QuestUnitTrainingAnalBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_anal_basic),
],
],
[
'QuestUnitTrainingAnalBasicFailure',
[],
],
[
'QuestUnitTrainingAnalBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Slaves must learn how to use all their possible cavities to satisfy their masters.
Either because their vagina was too loose, or because the slave does not have a vagina
altogether, slaves capable of giving pleasure through their ass are also highly
sought after.
This training will introduce these slaves to the art of taking it up their
asses, which started simple using a dildo, until they're familiar enough with
the actual rod.
</p><p>
The training was a complete success. <<rep $g.trainee>> has
learned the basics of being assfucked,
while your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>>
is now able to take dicks up their asses, and give back sufficient
pleasure in return to be passable as an anal bottom.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to refuse
taking dick up their asses even until the end of the training.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_anal_master', /* id */
'Anal Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_master,
'trainer2': setup.qu.training_trainer_dick_master,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingAnalMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingAnalMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_anal_master),
]
],
[
'QuestUnitTrainingAnalMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_anal_master),
],
],
[
'QuestUnitTrainingAnalMasterFailure',
[
],
],
[
'QuestUnitTrainingAnalMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_anal_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
This training will transform the slave into a special kind of anal bottom,
one so accustomed and experienced in the art of anal sex that regardless
of the girth and width of the dick, they can give back maximum pleasure
from their asses.
This ability is so difficult to acquire that usually brothels have a specialized
dedicated training team to instill this ability upon the slaves.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite anal slut
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into an elite anal slut
has been completed.
<<rep $g.trainee>> now requires constant plug in their asses to
ensure that they do not forget all these skills they have amassed, as well
as to keep them happy all the time.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate anal slut.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<set _removeall = []>>
<<for _itrait, _trait range setup.TraitHelper.TRAINING_ALL>>
<<run _removeall.push(setup.qc.TraitRemove('trainee', _trait))>>
<</for>>
<<run new setup.QuestTemplate(
'training_brainwash', /* key */
"Slaver Training - Advanced", /* Title */
"darko", /* Author */
[ 'fort', 'trait'
], /* tags */
2, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'head': setup.qu.training_head,
'convincer2': setup.qu.convincer,
'convincer1': setup.qu.convincer, },
{ /* actors */
'trainee': null, },
[ /* costs */
setup.qc.LoseItem(setup.item.potion_slavertraining),
],
'Quest_slaver_training',
setup.qdiff.normal54, /* difficulty */
[ /* outcomes */
[
'Quest_slaver_trainingCrit',
[
setup.qc.MissingUnitOpposite('trainee'),
setup.qc.MoneyNormal(), ].concat(_removeall),
], [
'Quest_slaver_trainingCrit',
[
setup.qc.MissingUnitOpposite('trainee'),
].concat(_removeall),
], [
'Quest_slaver_trainingFailure',
[
],
], [
'Quest_slaver_trainingDisaster',
[
setup.qc.TraumatizeRandom('convincer1', 20),
setup.qc.TraumatizeRandom('convincer2', 20),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><p>
While there has been several occurrences of a former slave becoming a slaver, it is to this day still a rare occurrence. For one, the slave owners are usually reluctant to give up their slaves. More importantly, the slave, having experienced what it feels under the whip, is usually averse to having to inflict their suffering on another.
</p>
<p>
With a highly skilled slaver however,
it would then be possible to actually convince a slave to become a slaver.
It will be extremely difficult, however, and requires a specific team of slavers to do so.
Normally, this delicate procedure will leave the former slave traumatized upon joining your team,
as well as requiring a completely untrained slave.
But with the aid of your
<<rep setup.item.brainwash_technology>>,
these side effects could be completely removed.
Just make sure to keep your slavers far, far away from its effects.
</p><p>
Over the past two weeks, your slavers <<uadv $g.convincer1>> convinces —- with the subconcious help of <<rep setup.item.brainwash_technology>>, your now former slave <<rep $g.trainee>> the benefits of becoming a slaver.
<<rep $g.convincer1>> <<uadv $g.convincer1>> sneaks in a drink or two for the slave infused liberally
with <<rep setup.item.potion_slavertraining>>.
After long days of convincing, <<rep $g.trainee>> finally see the light, and agreed to become one of your slavers. <<They $g.trainee>> is now waiting in the <<rep setup.buildingtemplate.prospectshall>> for you to officially take <<them $g.trainee>> as a slaver.
</p>
<p>
The <<rep setup.item.brainwash_technology>> helps <<= $g.trainee.getName()>> to overcome
<<their $g.trainee>> experiences as a slave and come back a better stronger <<man $g.trainee>> than before.
</p>
<<if $gOutcome == 'crit'>>
<p>
Seeing the future secure as a slaver, <<rep $g.trainee>> gave to you the location of <<their $g.trainee>> secret stash that was originally planned as <<their $g.trainee>> lifeline upon escaping from your fort.
</p>
<</if>>
<<if $g.trainee.getWeeksWithCompany() >= 53>>
<p>
Despite having been a slave for quite some time, thanks to the masterful use of
<<rep setup.item.potion_slavertraining>> there does not seem to be any adverse
effects on <<rep $g.trainee>>.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> managed to stubbornly resist all your slavers arguments, and ultimately preferred being whipped to whipping others. The training failed, and must be repeated to try this again.
</p><p>
Unfortunately, <<rep $g.trainee>> managed to stubbornly resist all your slavers arguments, and ultimately preferred being whipped to whipping others. The training failed, and must be repeated to try this again.
</p>
<p>
During the training, some of your slavers were unfortunately affected by
their overuse of
<<rep setup.item.brainwash_technology>>...
</p><<run new setup.QuestTemplate(
'training_convince', /* key */
"Slaver Training - Basic", /* Title */
"darko", /* Author */
[ 'fort', 'trait'
], /* tags */
4, /* weeks */
1, /* quest expiration weeks */
{ /* roles */
'head': setup.qu.training_head,
'convincer2': setup.qu.convincer,
'convincer1': setup.qu.convincer, },
{ /* actors */
'trainee': null, },
[ /* costs */
setup.qc.MoneyUnitValue('trainee', -3, 100000),
],
'Quest_training_convince',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_training_convinceCrit',
[
setup.qc.MissingUnitOpposite('trainee'),
setup.qc.TraumatizeRandom('trainee', 100),
setup.qc.TraumatizeRandom('trainee', 100),
setup.qc.MoneyNormal(),
setup.qc.IfThenElse(
setup.qres.Actor('trainee', setup.qres.WeeksWithCompanyAtLeast(53)),
setup.qc.DoAll([
setup.qc.Trait('trainee', setup.trait.bg_slave)
], undefined),
setup.qc.DoAll([
], undefined)
),
],
], [
'Quest_training_convinceCrit',
[
setup.qc.MissingUnitOpposite('trainee'),
setup.qc.TraumatizeRandom('trainee', 100),
setup.qc.TraumatizeRandom('trainee', 100),
setup.qc.IfThenElse(
setup.qres.Actor('trainee', setup.qres.WeeksWithCompanyAtLeast(53)),
setup.qc.DoAll([
setup.qc.Trait('trainee', setup.trait.bg_slave)
], undefined),
setup.qc.DoAll([
], undefined)
),
],
], [
'Quest_training_convinceFailure',
[
],
], [
'Quest_training_convinceDisaster',
[
setup.qc.TraumatizeRandom('convincer1', 12),
setup.qc.TraumatizeRandom('convincer2', 12),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><p>
While there has been several occurrences of a former slave becoming a slaver, it is to this day still a rare occurrence. For one, the slave owners are usually reluctant to give up their slaves. More importantly, the slave, having experienced what it feels under the whip, is usually averse to having to inflict their suffering on another.
</p>
<p>
With a highly skilled slaver however,
it would then be possible to actually convince a slave to become a slaver.
It will be extremely difficult, however, and requires a specific team of slavers to do so, as well
as a large amount of money to entice the potential slaver.
Furthermore, the former-slave will surely be traumatized by their experiences when they were enslaved,
which will reduce their skills for a good while --- although the trauma will surely go away
in time.
</p><p>
Over the past two weeks, using various interrogation techniques,
your slavers <<uadv $g.convincer1>> convinces
your now former slave <<rep $g.trainee>> the benefits of becoming a slaver. After long days of convincing, <<rep $g.trainee>> finally see the light, and decided to accept the bribe and agreed to become one of your slavers. <<They $g.trainee>> is now waiting in the <<rep setup.buildingtemplate.prospectshall>> for you to officially take <<them $g.trainee>> as a slaver.
</p>
<p>
Still, <<their $g.trainee>> experiences as a slave weighs heavily on <<them $g.trainee>>,
giving them a temporary trauma that lasts quite a while.
</p>
<<if $gOutcome == 'crit'>>
<p>
Seeing the future secure as a slaver, <<rep $g.trainee>> gave to you the location of <<their $g.trainee>> secret stash that was originally planned as <<their $g.trainee>> lifeline upon escaping from your fort.
</p>
<</if>>
<<if $g.trainee.getWeeksWithCompany() >= 53>>
<p>
<<rep $g.trainee>> has been a slave for quite a long while, and <<they $g.trainee>> often can
be seen behaving like a slave would.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> managed to stubbornly resist all your slavers arguments, and ultimately preferred being whipped to whipping others. The training failed, and must be repeated to try this again.
</p>
<p>
You never know where the money was spent by your unscrupulous slavers...
</p><p>
Unfortunately, <<rep $g.trainee>> managed to stubbornly resist all your slavers arguments, and ultimately preferred being whipped to whipping others. The training failed, and must be repeated to try this again.
</p>
<p>
Talking with the slave has deeply affected your slavers, making them question some of their
life decisions.
</p>
<p>
You never know where the money was spent by your unscrupulous slavers...
</p><<run new setup.QuestTemplate(
'training_domestic_advanced', /* id */
'Domestic Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDomesticAdvanced', /* description */
setup.qdiff.harder38,
[
[
'QuestUnitTrainingDomesticAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_advanced),
]
],
[
'QuestUnitTrainingDomesticAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_advanced),
],
],
[
'QuestUnitTrainingDomesticAdvancedFailure',
[],
],
[
'QuestUnitTrainingDomesticAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_domestic_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Once a slave has basic knowledge in housekeeping, they next must
learn all the intricacies involved in it. This involves how to
ensure that the corners of the room are squeaky clean, as well as
how to please the owners by looking good while doing these job.
With some luck, the owners may pick up their sorry bodies and
have some fun.
</p><p>
<<rep $g.trainee>> is now a proud slave capable of
doing mundane work in the least mundane way possible.
<<rep $g.head>> and your slavers also gain a lot of experience from the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccesful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_domestic_basic', /* id */
'Domestic Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDomesticBasic', /* description */
setup.qdiff.easy12,
[
[
'QuestUnitTrainingDomesticBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_basic),
]
],
[
'QuestUnitTrainingDomesticBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_basic),
],
],
[
'QuestUnitTrainingDomesticBasicFailure',
[],
],
[
'QuestUnitTrainingDomesticBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Not all slaves are expected to become sex slaves.
There are demand for slaves for more mundane tasks, such as
as maids or gardener.
The domestic slave training teaches slaves the necessary
skills for such work.
</p><p>
The training was a complete success. <<rep $g.trainee>>,
and your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>> has gained
both textbook and first-hand knowledge about the
basics of domestic work.
</p><p>
Unfortunately, the training was unsuccesful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_domestic_master', /* id */
'Domestic Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDomesticMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingDomesticMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_master),
]
],
[
'QuestUnitTrainingDomesticMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_domestic_master),
],
],
[
'QuestUnitTrainingDomesticMasterFailure',
[
],
],
[
'QuestUnitTrainingDomesticMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_domestic_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
This training transforms the trainee into a living embodiment of
housework. Garding, cooking, cleaning, fixing broken appliances,
and sex
are all necessary skills in order to graduate from this class.
The graduates of this training are envies of all maids abound.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into a complete package of a
maid/butler
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into a perfect maid/butler
has been done.
<<rep $g.trainee>> now yearns for a master to order <<them $g.trainee>>
around and a mansion to keep clean.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to wipe out all sense of deviancy
from the slave.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_dominance_advanced', /* id */
'Dominance Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
'slave': setup.qu.training_slave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDominanceAdvanced', /* description */
setup.qdiff.harder44,
[
[
'QuestUnitTrainingDominanceAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_advanced),
setup.qc.Trait('trainee', setup.trait.per_dominant),
]
],
[
'QuestUnitTrainingDominanceAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_advanced),
],
],
[
'QuestUnitTrainingDominanceAdvancedFailure',
[],
],
[
'QuestUnitTrainingDominanceAdvancedDisaster',
[
setup.qc.Injury('trainee', 1),
setup.qc.Injury('slave', 1),
setup.qc.Trait('trainee', setup.trait.per_submissive),
],
],
],
[],
[],
)>><p>
A more advanced dominance training involves instilling into the slave's
mind that not all slaves are equal. Some slaves are made to rule other slaves,
and they must take pride in their work and be completely grateful to their
owners for the opportunity to do so.
</p><p>
The training was a complete success.
Not only <<rep $g.trainee>> successfully showed <<their $g.trainee>> newly found
understanding on <<rep $g.slave>>, the training also revealed
the naturally dominant side of <<rep $g.trainee>>.
</p><p>
It was difficult, but by the end of the week, <<rep $g.trainee>> has finally
understand what it means to be a dominant slave.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, both <<rep $g.trainee>> and <<rep $g.slave>> managed to get injured
and the training had to be stopped early.
Not only that, it turns out that <<rep $g.trainee>> was a natural submissive, and this
will complicate further training.
</p><<run new setup.QuestTemplate(
'training_dominance_basic', /* id */
'Dominance Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
'slave': setup.qu.training_slave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDominanceBasic', /* description */
setup.qdiff.easy28,
[
[
'QuestUnitTrainingDominanceBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_basic),
]
],
[
'QuestUnitTrainingDominanceBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_basic),
],
],
[
'QuestUnitTrainingDominanceBasicFailure',
[],
],
[
'QuestUnitTrainingDominanceBasicDisaster',
[
setup.qc.Injury('trainee', 1),
setup.qc.Injury('slave', 1),
],
],
],
[],
[],
)>><p>
It is sometimes useful to have a slave trained in dominating other slaves.
Such a slave can be used as head slaves, or for helping you manage your other slaves.
Still, they are still your slaves, and obedience must be firmly instilled on them first
before this training can be easyly applied.
</p><p>
The training was a complete success.
<<rep $g.trainee>> dominated <<rep $g.slave>> with such force that
the training finished way earlier than scheduled.
Using the free time, your slavers gain a lot of experience from studying other topics.
</p><p>
At the end of the week, <<rep $g.trainee>> finally grasp what is required
of them to dominate other slaves without breaking them,
and managed to demonstrate it on <<rep $g.slave>> enough to convince
<<rep $g.head>> that the slave has graduated from this training.
</p><p>
Unfortunately, <<rep $g.trainee>> was simply not suited for this training,
and another effort must make made for <<rep $g.trainee>>.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, both <<rep $g.trainee>> and <<rep $g.slave>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_dominance_master', /* id */
'Dominance Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
'slave': setup.qu.training_slave,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingDominanceMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingDominanceMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_master),
setup.qc.Trait('trainee', setup.trait.per_dominant),
]
],
[
'QuestUnitTrainingDominanceMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_master),
],
],
[
'QuestUnitTrainingDominanceMasterFailure',
[],
],
[
'QuestUnitTrainingDominanceMasterDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.Injury('slave', 2),
setup.qc.Trait('trainee', setup.trait.per_submissive),
],
],
],
[],
[],
)>><p>
Once a slave completed this training, under the right circumstances
their mentality will be no different than slavers.
The most important thing, however, is that this training has instilled
deep within them that despite looking and acting like a slaver, they are
still a slave, and must obey without question the orders of their master.
</p><p>
The training was a complete success.
<<rep $g.trainee>> is now indistinguishable with your slavers with the sole
exception of being completely obedient to your commands.
As a bonus, the training also revealed the more dominant side of <<rep $g.trainee>>.
</p><p>
It was difficult, but by the end of the week, <<rep $g.trainee>> has finally
understand the lessons.
<<rep $g.trainee>> is now indistinguishable with your slavers with the sole
exception of being completely obedient to your commands.
</p><p>
Unforutnately, <<rep $g.head>> is not convinced that
<<rep $g.trainee>> has grasped all the necessary knowledge.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, both <<rep $g.trainee>> and <<rep $g.slave>> managed to get
severely injured
and the training had to be stopped early.
Not only that, it turns out that <<rep $g.trainee>> was a natural submissive, and this
will complicate further training.
</p><<run new setup.QuestTemplate(
'training_edging_advanced', /* id */
'Edging Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEdgingAdvanced', /* description */
setup.qdiff.harder39,
[
[
'QuestUnitTrainingEdgingAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_edging_advanced),
]
],
[
'QuestUnitTrainingEdgingAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_edging_advanced),
],
],
[
'QuestUnitTrainingEdgingAdvancedFailure',
[],
],
[
'QuestUnitTrainingEdgingAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_edging_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
This training further improves the proficiency of the slave in edging
others, but more importantly teaches them how to also properly edge
themselves without bringing themselves to climax.
Such a display must be learned to elicit as much pleasure as
possible into the viewers.
Training this properly usually require a strict instructor which properly
castise them whenever they use the training as an opportunity to relief
themselves.
</p><p>
<<rep $g.trainee>> turned out to be natural at edging.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_edging_basic', /* id */
'Edging Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEdgingBasic', /* description */
setup.qdiff.easy19,
[
[
'QuestUnitTrainingEdgingBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_edging_basic),
]
],
[
'QuestUnitTrainingEdgingBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_edging_basic),
],
],
[
'QuestUnitTrainingEdgingBasicFailure',
[],
],
[
'QuestUnitTrainingEdgingBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
The skill of bringing others to the point of climax, but never passing
the threshold --- edging has been prominent since the ancient
times, but only recently has people honed the skill to a degree.
This training will teach slaves how to properly edge others,
to their entertain their masters at command.
</p><p>
The training was a complete success.
<<rep $g.trainee>> is now familiar with using bodily signs
to edge other slaves to the point of climax.
</p><p>
At the end of the week, <<rep $g.trainee>> can now edge
other slaves, albeit occasionally crossing the threshold and
causing them to cum too early.
</p><p>
Unfortunately, <<rep $g.trainee>> failed to grasp the lessons,
and <<their $g.trainee>> attempts of edging all too often results
in their subjects climaxing.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_edging_master', /* id */
'Edging Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEdgingMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingEdgingMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_edging_master),
]
],
[
'QuestUnitTrainingEdgingMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_edging_master),
],
],
[
'QuestUnitTrainingEdgingMasterFailure',
[
],
],
[
'QuestUnitTrainingEdgingMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_edging_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
The final training will transform the slave into effectively an edging
machine, able to edge others to the exact precise point of climax, but
never going over.
Such a slave is skilled using any part of their body for this, be it their
hands, their mouth, or even their rear.
Of course, their own body is not an exception, as this slave can even learn
to edge <<themselves $g.trainee>> in such a degradingly beautiful way that is pleasureable
to watch.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite master edger
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into an elite master edger
has been completed.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate master edger.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_endurance_advanced', /* id */
'Endurance Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEnduranceAdvanced', /* description */
setup.qdiff.harder42,
[
[
'QuestUnitTrainingEnduranceAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_advanced),
setup.qc.Trait('trainee', setup.trait.per_tough),
]
],
[
'QuestUnitTrainingEnduranceAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_advanced),
],
],
[
'QuestUnitTrainingEnduranceAdvancedFailure',
[
setup.qc.Injury('trainee', 1),
],
],
[
'QuestUnitTrainingEnduranceAdvancedDisaster',
[
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
When a slave has learned how to sustain a prolonged time of abuse,
the next step in endurance training is to learn how to quickly
recover from such treatment and made them available again to their
master as quickly as possible.
The advanced endurance training thus focuses on a repeated cycle
of intense abuse followed by recovery time.
An hour or two bound and hanged from the ceiling
followed by an hour of rest, for example.
</p><p>
<<rep $g.trainee>> turns out to be a natural at being
an objectified slave and the training seems to toughen
<<them $g.trainee>> too.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to learn and apply the necessary skills and endurance required
to qualify as a graduate of this training.
Still, after such intense training, <<they $g.trainee>> would need at least
one week of rest.
</p><p>
Unfortunately, the training was unsuccesful.
At the end of the week, not only <<rep $g.trainee>> was exhausted,
the trainings does not seem to stick to <<them $g.trainee>> and has
to be reattempted once <<they $g.trainee>> recover.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
Their now wrecked body would need to fully recover first before reattempting
this training.
</p><<run new setup.QuestTemplate(
'training_endurance_basic', /* id */
'Endurance Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEnduranceBasic', /* description */
setup.qdiff.easy13,
[
[
'QuestUnitTrainingEnduranceBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_basic),
setup.qc.Trait('trainee', setup.trait.per_tough),
]
],
[
'QuestUnitTrainingEnduranceBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_basic),
],
],
[
'QuestUnitTrainingEnduranceBasicFailure',
[],
],
[
'QuestUnitTrainingEnduranceBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
While some master prefer their slaves to break from use,
some find mindbroken slaves to be distasteful. These masters
often train their slaves to be able to withstand said abuse,
instead of breaking from them.
To gain such endurance, the most reliable method is via
training the slave to endure an increasingly long session
of objectification, be it used as a table, a chair, a
footstool, or just some decoration.
</p><p>
<<rep $g.trainee>>'s training was a complete success,
with <<rep $g.trainee>> being toughened up as a side-effect.
</p><p>
At the end of the week, <<rep $g.trainee>> has
become significantly more durable and can withstand
a longer period of abuse without breaking.
</p><p>
Unfortunately, <<rep $g.trainee>> seems to have
significantly lower endurance threshold than most people.
Training <<them $g.trainee >> in endurance would need more
effort.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_endurance_master', /* id */
'Endurance Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingEnduranceMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingEnduranceMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_master),
setup.qc.Trait('trainee', setup.trait.per_tough),
]
],
[
'QuestUnitTrainingEnduranceMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_master),
],
],
[
'QuestUnitTrainingEnduranceMasterFailure',
[
setup.qc.Injury('trainee', 2),
],
],
[
'QuestUnitTrainingEnduranceMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_endurance_master.getTraitGroup()),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
The final culminating skill that endurance slaves need to learn is
the ability to be installed as a furniture permanently.
Be it as a living statue, or a living footstool, once a slave
is trained in this skill, they would be able to perform such
duties while keeping a smile constantly on their face.
Acquiring such skill is without doubt difficult,
and very skilled trainers are required.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
Not only <<rep $g.trainee>> is now so absolutely durable
to any prolonged period of abuse, the training also toughened
<<them $g.trainee>> up in many other areas.
</p><p>
<<rep $g.trainee>> transformation into a complete endurance whore
has been completed, and they are ready to be installed wherever
you or their future master wish.
</p><p>
Even after these intense trainings,
the only visible result was
<<rep $g.trainee>> sheer exhaustion that would take
weeks to fully recover from.
</p><p>
The training was a complete failure.
Not only <<rep $g.trainee>> has been reduced to a wreck,
<<rep $g.trainee>> must also redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_horny_advanced', /* id */
'Horny Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingHornyAdvanced', /* description */
setup.qdiff.harder38,
[
[
'QuestUnitTrainingHornyAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_horny_advanced),
setup.qc.Trait('trainee', setup.trait.per_sexaddict),
]
],
[
'QuestUnitTrainingHornyAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_horny_advanced),
],
],
[
'QuestUnitTrainingHornyAdvancedFailure',
[],
],
[
'QuestUnitTrainingHornyAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_horny_master.getTraitGroup()),
setup.qc.Trait('trainee', setup.trait.per_chaste),
],
],
],
[],
[],
)>><p>
Once a slave is able to arouse themself on demand, the next step is
to make them able to maintain the arousal for the pleasure of its
owner.
This is a mixture between endurance training and increasing their
sex addiction, which can be achieved via a careful mixture
of training, punishment, and reward.
</p><p>
<<rep $g.trainee>> turned out to be a natural sex monster.
In addition to completing the training with flying colors,
their true nature as a sex addict is also revealed.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_horny_basic', /* id */
'Horny Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingHornyBasic', /* description */
setup.qdiff.easy18,
[
[
'QuestUnitTrainingHornyBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_horny_basic),
setup.qc.Trait('trainee', setup.trait.per_lustful),
]
],
[
'QuestUnitTrainingHornyBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_horny_basic),
],
],
[
'QuestUnitTrainingHornyBasicFailure',
[],
],
[
'QuestUnitTrainingHornyBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
This training's goal is to increase the arousal rate of the slave.
A graduate of this training must be able to arouse themself on demand,
and keep themselves aroused for a period of time.
A standard reinforcement training is usually best for instilling
such behavior --- rewarding them for being <<hard $g.trainee>> and punishing them for
getting <<soft $g.trainee>>.
</p><p>
The training was a complete success.
<<rep $g.trainee>> now proficient in making themselves <<hard $g.trainee>> on command,
surely a useful ability for a slave.
As a side effect, they also become more addicted to sex.
</p><p>
At the end of the week, <<rep $g.trainee>> can now make themselves <<hard $g.trainee>>
on your command. A passing grade for this training.
</p><p>
Unfortunately, <<rep $g.trainee>> thick skull means that
<<they $g.trainee>> continue to struggle with getting aroused on
command.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_horny_master', /* id */
'Horny Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingHornyMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingHornyMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_horny_master),
setup.qc.Trait('trainee', setup.trait.per_sexaddict),
]
],
[
'QuestUnitTrainingHornyMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_horny_master),
],
],
[
'QuestUnitTrainingHornyMasterFailure',
[
],
],
[
'QuestUnitTrainingHornyMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_horny_master.getTraitGroup()),
setup.qc.Trait('trainee', setup.trait.per_chaste),
],
],
],
[],
[],
)>><p>
This training will reform the slave's body so that being horny is their body's
natural resting space.
A slave that has completed this training will always be aroused, regardless of how
many times they have climaxed or whatever activity they are doing.
Having a consistently aroused slave is pleasing to some, which is why
such high-libido slaves are valued highly in some aristocratic community.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into a permanently-<<hard $g.trainee>> slave
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into a permanently-<<hard $g.trainee>> slave
has been completed.
<<if $g.trainee.isHasTrait(setup.trait.dick_tiny)>>
<<rep $g.trainee>>'s dick is now permanently hard, and always stand
proudly in front of them. As a slave, this dick is now <<their $g.trainee>> master's
property, to be used as the master see fit.
<<else>>
<<rep $g.trainee>>'s pussy is now permanently wet, and always glisten
and glow under her legs. As a slave, this pussy is now <<their $g.trainee>> master's
property, to be used as the master see fit.
<</if>>
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into a permanently-<<hard $g.trainee>> slave.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_masochist_advanced', /* id */
'Masochist Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_masochist,
'trainer2': setup.qu.training_trainer_masochist,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingMasochistAdvanced', /* description */
setup.qdiff.harder45,
[
[
'QuestUnitTrainingMasochistAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_advanced),
setup.qc.Trait('trainee', setup.trait.per_masochistic),
]
],
[
'QuestUnitTrainingMasochistAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_advanced),
],
],
[
'QuestUnitTrainingMasochistAdvancedFailure',
[
setup.qc.Injury('trainee', 1),
],
],
[
'QuestUnitTrainingMasochistAdvancedDisaster',
[
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Once a slave has some basic association between pain and pleasure, the
next step is to reinforce this connection by disallowing the slave to
reach climax without some sort of pain.
This deeper connection, once made, will inevitably cause the salve
to crave some sort of punishment, which, depending on the master,
is a good or a bad thing.
</p><p>
<<rep $g.trainee>> turned out to be a natural masochist.
In addition to completing the training with flying colors,
their true mascohistic nature is also revealed.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull. Even worse, the slave needs
a week to recover from the injuries sustained during the training.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
Their now wrecked body would need to fully recover first before reattempting
this training.
</p><<run new setup.QuestTemplate(
'training_masochist_basic', /* id */
'Masochist Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_masochist,
'trainer2': setup.qu.training_trainer_masochist,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingMasochistBasic', /* description */
setup.qdiff.easy20,
[
[
'QuestUnitTrainingMasochistBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_basic),
]
],
[
'QuestUnitTrainingMasochistBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_basic),
],
],
[
'QuestUnitTrainingMasochistBasicFailure',
[],
],
[
'QuestUnitTrainingMasochistBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
While some sadistic masters prefer their slaves to suffer from punishments,
some masters prefer slaves who are addicted to punishments.
This training teaches slaves that pleasure and pain are one and the same.
The final exam of this training is testing whether the slave can reach climax
from being tortured alone.
An intense session of reward and punishment must be applied to rewire their
brain to associate pain with pleasure.
</p><p>
The training was a complete success.
<<rep $g.trainee>>'s body now subconciously associates pain with pleasure,
and will involuntarily get <<hard $g.trainee>> whenever pain was inflicted on them.
Your slavers also gain much experience from the session.
</p><p>
At the end of the week, <<rep $g.trainee>> can now (or at least pretend
sufficiently) derive pleasure from being inflicted with pain.
However, their pain threshold will still need to be worked on in future sessions.
</p><p>
Unfortunately, <<rep $g.trainee>> thick skull means that
rewiring their brain will need extra efforts.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_masochist_master', /* id */
'Masochist Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingMasochistMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingMasochistMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_master),
setup.qc.Trait('trainee', setup.trait.per_tough),
]
],
[
'QuestUnitTrainingMasochistMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_masochist_master),
setup.qc.Injury('trainee', 1),
],
],
[
'QuestUnitTrainingMasochistMasterFailure',
[
setup.qc.Injury('trainee', 1),
],
],
[
'QuestUnitTrainingMasochistMasterDisaster',
[
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
When a slave has learned how to sustain a prolonged time of abuse,
the next step in masochist training is to learn how to quickly
recover from such treatment and made them available again to their
master as quickly as possible.
The master masochist training thus focuses on a repeated cycle
of intense abuse followed by recovery time.
An hour or two bound and hanged from the ceiling
followed by an hour of rest, for example.
</p><p>
<<rep $g.trainee>> turns out to be a natural at being
an objectified slave and the training seems to toughen
<<them $g.trainee>> too.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to learn and apply the necessary skills and masochist required
to qualify as a graduate of this training.
Still, after such intense training, <<they $g.trainee>> would need at least
one week of rest.
</p><p>
Unfortunately, the training was unsuccesful.
At the end of the week, not only <<rep $g.trainee>> was exhausted,
the trainings does not seem to stick to <<them $g.trainee>> and has
to be reattempted once <<they $g.trainee>> recover.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
Their now wrecked body would need to fully recover first before reattempting
this training.
</p><<run new setup.QuestTemplate(
'training_mindbreak', /* id */
'Mindbreak', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_mindbreak,
'trainer2': setup.qu.training_trainer_mindbreak,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingMindbreak', /* description */
setup.qdiff.normal20,
[
[
'QuestUnitTrainingMindbreakCrit',
[
setup.qc.RemoveTraitsWithTag('trainee', 'training'),
setup.qc.Trait('trainee', setup.trait.training_mindbreak),
]
],
[
'QuestUnitTrainingMindbreakSuccess',
[
setup.qc.RemoveTraitsWithTag('trainee', 'training'),
setup.qc.Trait('trainee', setup.trait.training_mindbreak),
],
],
[
'QuestUnitTrainingMindbreakFailure',
[
setup.qc.Injury('trainee', 1),
],
],
[
'QuestUnitTrainingMindbreakDisaster',
[
setup.qc.Injury('trainee', 3),
],
],
],
[],
[],
)>><p>
Some masters prefer their slaves to be nothing but a hollowed out
fucktoy. This training will do just that ---
through severe abuse, this training will transform any slave,
willing or not, into a soul-less compliant play thing.
</p>
<p>
<<dangertext 'WARNING'>>: Mindbroken slaves are worth much less than normal slaves.
</p><p>
The training was a success. Drowned in a pool of bodily fluids,
<<rep $g.trainee>> almost does not respond when being carried
away to be stored as a fucktoy for you and <<their $g.trainee>> future
master.
</p><p>
The training was a success. Drowned in a pool of bodily fluids,
<<rep $g.trainee>> almost does not respond when being carried
away to be stored as a fucktoy for you and <<their $g.trainee>> future
master.
</p><p>
<<rep $g.trainee>>'s mental strength proves too much for your
slavers that somehow <<they $g.trainee>> retained the sense of self
even after the ordeal <<they $g.trainee>> went through.
</p><p>
<<they $g.trainee>> was wrecked again and again by your team of slavers
but it proved too much for the slave.
The training had to be stopped early and the slave to be given time to
recover.
</p><<run new setup.QuestTemplate(
'training_obedience_advanced', /* id */
'Obedience Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingObedienceAdvanced', /* description */
setup.qdiff.harder35,
[
[
'QuestUnitTrainingObedienceAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_advanced),
setup.qc.Trait('trainee', setup.trait.per_submissive),
]
],
[
'QuestUnitTrainingObedienceAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_advanced),
],
],
[
'QuestUnitTrainingObedienceAdvancedFailure',
[
],
],
[
'QuestUnitTrainingObedienceAdvancedDisaster',
[
setup.qc.Injury('head', 1),
setup.qc.Injury('trainee', 2),
],
],
],
[],
[],
)>><p>
Once a slave learned the basic knowledge of servitude, the next step
is to instill inside their head that they can be nothing else but a slave.
While some others prefer to achieve this by breaking the slaves' mind,
some prefer this training which trains the slave by simple repetition
of the punishment and reward system.
They must learn to obey without question, and to understand their place
in the world.
</p><p>
<<rep $g.trainee>> turned out to be a natural submissive.
<<rep $g.head>> even managed to find the training
enjoyable, if somewhat lacking in challenge.
</p><p>
It was close, but by the end of the training,
<<rep $g.trainee>> has fully grasp the new reality
that <<they $g.trainee>> is no longer a <<woman $g.trainee>>,
but a slave.
</p><p>
While <<rep $g.trainee>> has basic understanding of
servitude, <<their $g.trainee>> head seems incapable
of grasping deeper into it.
At the end of the week, <<rep $g.head>>'s mission was
unsuccessful.
</p><p>
<<rep $g.trainee>> somehow snapped during the training, injuring
both <<themselves $g.trainee>> and <<rep $g.head>>.
</p><<run new setup.QuestTemplate(
'training_obedience_basic', /* id */
'Obedience Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingObedienceBasic', /* description */
setup.qdiff.easy10,
[
[
'QuestUnitTrainingObedienceBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_basic),
setup.qc.Trait('trainee', setup.trait.per_submissive),
]
],
[
'QuestUnitTrainingObedienceBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_basic),
],
],
[
'QuestUnitTrainingObedienceBasicFailure',
[],
],
[
'QuestUnitTrainingObedienceBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Basic obedience is the first skill that any slave have to learn.
Through this lesson, they will learn that
disobeying means punishment, while obeying will let
them serve their betters in peace.
</p><p>
The training was a complete success. <<rep $g.head>>
even manages to instill some basic submissiveness into
<<rep $g.trainee>>'s thick skull.
</p><p>
It was difficult, but <<rep $g.trainee>> is finally starting
to obey orders at the end of the training.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to defy all
the orders given to <<their $g.trainee>>. At the end of the week,
<<rep $g.head>> was basically defeated, but at least
no harm is done.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_obedience_master', /* id */
'Obedience Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_nosex,
'trainer2': setup.qu.training_trainer_nosex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingObedienceMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingObedienceMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_master),
setup.qc.Trait('trainee', setup.trait.per_submissive),
]
],
[
'QuestUnitTrainingObedienceMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_master),
],
],
[
'QuestUnitTrainingObedienceMasterFailure',
[
],
],
[
'QuestUnitTrainingObedienceMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_obedience_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
This training will transform the slave from a self thinking humanlike
into a slave whose only purpose in life is to obey its betters without
any second thought.
Such absolute obedience can only be obtained through intense unintterupted
training, but even then this requires a very skilled training, or otherwise
will easily fail.
But the result will surely be worth the efforts.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into a completely submissive
slave has been completed, and is now ready to be used in any
way imaginable.
</p><p>
It is done.
<<rep $g.trainee>> transformation into a perfectly pliable
and compliant slave has been done.
<<rep $g.trainee>> now stands at the ready for any order
you or your slavers have for <<them $g.trainee>>, no matter how
degrading it is.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to wipe out all sense of deviancy
from the slave.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_oral_advanced', /* id */
'Oral Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingOralAdvanced', /* description */
setup.qdiff.harder39,
[
[
'QuestUnitTrainingOralAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_oral_advanced),
]
],
[
'QuestUnitTrainingOralAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_oral_advanced),
],
],
[
'QuestUnitTrainingOralAdvancedFailure',
[],
],
[
'QuestUnitTrainingOralAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_oral_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Once a slave has basic dicksucking skills, the next training
is to instill into them the intricacies of giving maximum pleasure
from sucking dick.
Graduates from this training should have all their gag reflexes eliminated,
while being able to take all but the monstrously large dicks down their
throat and swallowing all the cum.
</p><p>
<<rep $g.trainee>> turned out to be a natural dicksucker.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccesful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_oral_basic', /* id */
'Oral Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingOralBasic', /* description */
setup.qdiff.easy14,
[
[
'QuestUnitTrainingOralBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_oral_basic),
]
],
[
'QuestUnitTrainingOralBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_oral_basic),
],
],
[
'QuestUnitTrainingOralBasicFailure',
[],
],
[
'QuestUnitTrainingOralBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
The gateway training to introduce slaves to the art of gulping down dick.
Slaves are required to get familiar with both the taste and smell of
dicks, as well as the liquid that comes with it.
No matter what their prior disposition of it, they must learn to
like swallowing dicks down their throat.
</p><p>
The training was a complete success. <<rep $g.trainee>> has
learned the basics of taking down dick down their throat,
while your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>>
would now be able to take dicks down their throat, and thus
is passable as a dicksucker.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to refuse
taking dick down their throat even until the end of the training.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_oral_master', /* id */
'Oral Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_master,
'trainer2': setup.qu.training_trainer_dick_master,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingOralMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingOralMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_oral_master),
]
],
[
'QuestUnitTrainingOralMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_oral_master),
],
],
[
'QuestUnitTrainingOralMasterFailure',
[
],
],
[
'QuestUnitTrainingOralMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_oral_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Slaves completing this training are transformed into one of the world's
greatest fellatrix.
To them, each dick is different is a unique canvas for them to draw upon
with their tongue, creating a pleasurable sensastion unique to each
and every one of their masters.
Slaves with this training are rare but highly sought after in the
higher-end brothels.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite dicksucker
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into an elite dicksucker
has been completed.
<<rep $g.trainee>> now has an insatiable thirst for dicks to suck,
so much that a dildo gag is almost necessary for them to wait between their sessions.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate dicksucking machine.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_pet_advanced', /* id */
'Pet Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPetAdvanced', /* description */
setup.qdiff.harder44,
[
[
'QuestUnitTrainingPetAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pet_advanced),
]
],
[
'QuestUnitTrainingPetAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pet_advanced),
],
],
[
'QuestUnitTrainingPetAdvancedFailure',
[],
],
[
'QuestUnitTrainingPetAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_pet_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
The next step to take after a slave learn the basics of being a pet
is to immerse them in the role. This means that the slave must learn how
to maximize pleasure of their master by proper attitude. Begging, wagging
their plugged tail, and the ability to play fetch are just some examples of
the mental skills they need to acquire. Their physical attributes will also
need to be trained further, for example by a long day of walking on four
legs while having their rear constantly plugged with a large tailplug.
</p><p>
<<rep $g.trainee>> turned out to be a natural pet.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_pet_basic', /* id */
'Pet Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPetBasic', /* description */
setup.qdiff.easy24,
[
[
'QuestUnitTrainingPetBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pet_basic),
]
],
[
'QuestUnitTrainingPetBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pet_basic),
],
],
[
'QuestUnitTrainingPetBasicFailure',
[],
],
[
'QuestUnitTrainingPetBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
This training will shape a slave into the ideal humanlike pet
for its masters. Loyalty, being cute, and most importantly to always
stand by the master's feet are some of the important duties that this
training will impart upon the slaves.
Graduates from this class must be comfortable walking on all fours,
as well as wearing pet gear all day long.
</p><p>
The training was a complete success.
With the proper gear,
<<rep $g.trainee>> would make a wonderful pet for its lucky master.
Meanwhile your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>> can now be a passable
pet for owners looking for a new pet.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to exhibit humanlike behaviors
even after this amount of training.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_pet_master', /* id */
'Pet Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPetMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingPetMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pet_master),
]
],
[
'QuestUnitTrainingPetMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pet_master),
],
],
[
'QuestUnitTrainingPetMasterFailure',
[
],
],
[
'QuestUnitTrainingPetMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_pet_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Once a training completed this final training, they will forever be someone's
pet, and never anything else.
To instill such behavior, their brain necessarily need to be rewired
by an expert trainer.
They need to understand that the kennel is now their new home,
and that dog food is all they need for sustenance, among other things.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into a permanent and dedicated pet
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into a parmanent and dedicated pet
has been completed.
<<rep $g.trainee>> can now be assigned a master and a permanent pet suit,
to complete the looks.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate pet.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_pony_advanced', /* id */
'Pony Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPonyAdvanced', /* description */
setup.qdiff.harder46,
[
[
'QuestUnitTrainingPonyAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pony_advanced),
]
],
[
'QuestUnitTrainingPonyAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pony_advanced),
],
],
[
'QuestUnitTrainingPonyAdvancedFailure',
[],
],
[
'QuestUnitTrainingPonyAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_pony_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Buiding upon the previous training, this training will
teach the slave the more difficult tricks a pony slave
is expected to do. This includes how to properly respond to the lash,
what to do when chained, and even how to be <<hard $g.trainee>> when doing hard pony
tasks, if the master so demands.
</p><p>
<<rep $g.trainee>> turned out to be a natural pony slave.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_pony_basic', /* id */
'Pony Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPonyBasic', /* description */
setup.qdiff.easy26,
[
[
'QuestUnitTrainingPonyBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pony_basic),
]
],
[
'QuestUnitTrainingPonyBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pony_basic),
],
],
[
'QuestUnitTrainingPonyBasicFailure',
[],
],
[
'QuestUnitTrainingPonyBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
A slave can be trained to, in addition to being a slave, to also become a
beast of burden. These slaves can be outfitted with pony arms, legs, and tailplugs,
and can learn how to pull carriages or work the plow.
This training requires prior training in endurance, and is considered one of the
hardest trainings to do.
</p><p>
The training was a complete success.
With the proper gear,
<<rep $g.trainee>> would make a wonderful pony for its lucky master.
Meanwhile your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>> can now be a passable
pony for owners looking to fill their stables.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to exhibit humanlike behaviors
even after this amount of training.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_pony_master', /* id */
'Pony Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingPonyMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingPonyMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_pony_master),
]
],
[
'QuestUnitTrainingPonyMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_pony_master),
],
],
[
'QuestUnitTrainingPonyMasterFailure',
[
],
],
[
'QuestUnitTrainingPonyMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_pony_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
This final training will allow pony slaves to be used alongside animal horses
--- after all, they occupy the same stables and must learn how to work together.
These slaves must learn how to keep up with their fellow equines, and even learn how
to take those equine dicks up their holes.
Some masters like to replace the standard whip lash with the dildo lash that they plug
deep inside the pony's ass, and thrust whenever they would whip the slave.
A true pony slave must learn and capable of doing all these difficult tasks, and hence
the training will be difficult.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into a permanent and dedicated pony slave
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into a parmanent and dedicated pony slave
has been completed.
With the proper pony suit,
<<rep $g.trainee>> can now be assigned to carriages right with other animal horses,
be it as an independent mule or mounted as a dicksleeve for the horse.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate pony.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_sissy_advanced', /* id */
'Sissy Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingSissyAdvanced', /* description */
setup.qdiff.harder43,
[
[
'QuestUnitTrainingSissyAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_advanced),
]
],
[
'QuestUnitTrainingSissyAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_advanced),
],
],
[
'QuestUnitTrainingSissyAdvancedFailure',
[],
],
[
'QuestUnitTrainingSissyAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_sissy_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Once the slave is passable as a girl, the next step is
to ensure that the slave fundamentally believes that they are no
longer a man, but a girl.
Once they have completed this training, the chastity cage is no longer
necessary, as their dick would be completely useless to them.
Some masters delight in having dickgirls who are forbidden from using
their dicks.
</p><p>
<<rep $g.trainee>> turned out to be a natural sissy.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_sissy_basic', /* id */
'Sissy Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingSissyBasic', /* description */
setup.qdiff.easy17,
[
[
'QuestUnitTrainingSissyBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_basic),
]
],
[
'QuestUnitTrainingSissyBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_basic),
],
],
[
'QuestUnitTrainingSissyBasicFailure',
[],
],
[
'QuestUnitTrainingSissyBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Some master prefer their slaves to be entirely girls.
But it does not mean that they must all be biologically female.
Through special training, a male slave can be trained to identify
itself as a female.
This identity training begins with changing their appearance --- shaving
their entire body and donning special facial makeup.
They are no longer allowed access to their dicks, which usually
kept permanently in a chastity cage.
</p><p>
The training was a complete success.
With the right makeup,
<<rep $g.trainee>> is now passable as a girl,
while your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>> can now be
passed as a girl with the right attire.
</p><p>
Unfortunately, <<rep $g.trainee>> continues to futiley grasp
its male identity, and changing this will require another attempt.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_sissy_master', /* id */
'Sissy Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingSissyMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingSissyMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_master),
]
],
[
'QuestUnitTrainingSissyMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_sissy_master),
],
],
[
'QuestUnitTrainingSissyMasterFailure',
[
],
],
[
'QuestUnitTrainingSissyMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_sissy_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
The final training will irrevocably transform the slave into what is
effectively a girl at every aspect but the biology.
Let it be outward appearance, demeanor, even sexual preference.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite sissy
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into an elite sissy
has been completed.
<<rep $g.trainee>>'s dick is now a simple decoration on their body,
forgotten and never to be used again.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate sissy.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'training_toilet_advanced', /* id */
'Toilet Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingToiletAdvanced', /* description */
setup.qdiff.harder42,
[
[
'QuestUnitTrainingToiletAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_advanced),
]
],
[
'QuestUnitTrainingToiletAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_advanced),
],
],
[
'QuestUnitTrainingToiletAdvancedFailure',
[],
],
[
'QuestUnitTrainingToiletAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_toilet_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
The next part of toilet training is to make them accept that piss is a regular part
of their diet.
Naturally, the slave's disgust for such thing must first be eliminated,
but given what they have undergone in life, usually it does not take
that much to do so.
What's more challenging is making them crave for these, to make them
beg their masters for the opportunity to be fed.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
<<rep $g.trainee>> turned out to be a natural toilet.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
<</if>>
</p><<run new setup.QuestTemplate(
'training_toilet_basic', /* id */
'Toilet Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingToiletBasic', /* description */
setup.qdiff.easy22,
[
[
'QuestUnitTrainingToiletBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_basic),
]
],
[
'QuestUnitTrainingToiletBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_basic),
],
],
[
'QuestUnitTrainingToiletBasicFailure',
[],
],
[
'QuestUnitTrainingToiletBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Just like pets, some masters prefer to toilet-train their slaves.
But different than pets, these slaves are trained to act as toilets for their master.
The basics begin with training them how to be an urinal --- how to drink
and gulp down all their master's piss every morning.
This training will remove their inhibitions including their gag and smell reflexes
from this act that they are expected to perform regularly.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
The training was a complete success.
As long as it is not too much,
<<rep $g.trainee>> should be able to drink down all <<their $g.trainee>>
master's piss without any trouble.
Meanwhile your slavers gain a lot of experience from the training.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
At the end of the week, <<rep $g.trainee>> can now be
passed as a somewhat decent urinal.
As long as it is not too much,
<<rep $g.trainee>> should be able to drink down all <<their $g.trainee>>
master's piss without any trouble.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Unfortunately, <<rep $g.trainee>> continues to gag and vomit when
being sprayed with piss.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
<</if>>
</p><<run new setup.QuestTemplate(
'training_toilet_master', /* id */
'Toilet Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingToiletMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingToiletMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_master),
]
],
[
'QuestUnitTrainingToiletMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_toilet_master),
],
],
[
'QuestUnitTrainingToiletMasterFailure',
[
],
],
[
'QuestUnitTrainingToiletMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_toilet_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Some masters prefer their slaves to be installed permanently in the toilet
as their private urinals.
These slaves require specialized training such as this one in order to
learn to love being an urinal.
Once this training is completed, the minimum requirements is for the slave
to only be taken out of the toilet
for sustenance and exercise.
<</if>>
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite toilet slave
has been completed, and is now ready to be installed.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
It is done.
<<rep $g.trainee>> transformation into an elite toilet slave
has been completed, and is now ready to be installed in a toilet
cubicle of your choice.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate toilet slave.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
<</if>>
</p><p>
<<if $settings.bannedtags.watersport>>
(Description hidden due to your settings banning this kind of content.)
<<else>>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
<</if>>
</p><<run new setup.QuestTemplate(
'training_vagina_advanced', /* id */
'Vagina Training: Advanced', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingVaginaAdvanced', /* description */
setup.qdiff.harder36,
[
[
'QuestUnitTrainingVaginaAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_advanced),
]
],
[
'QuestUnitTrainingVaginaAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_advanced),
],
],
[
'QuestUnitTrainingVaginaAdvancedFailure',
[],
],
[
'QuestUnitTrainingVaginaAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_vagina_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
A true fuckslut must be able to go beyond giving pleasure through their vagina,
but also through their entire body, be it from the way they act
during the intercourse, or the words they need to speak during the act.
This training will teach slaves advanced whoring techniques that hopefully they
will graduate from street-whore quality into elite whore quality.
</p><p>
<<rep $g.trainee>> turned out to be a natural fuckslut.
The training went so smoothly that
<<rep $g.head>> and your slavers managed to study other things
and gain a lot of experience from their spare time during the training.
</p><p>
It was not easy, but through both <<rep $g.trainee>>'s willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<rep $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<rep $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_vagina_basic', /* id */
'Vagina Training: Basic', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_normal,
'trainer2': setup.qu.training_trainer_dick_normal,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingVaginaBasic', /* description */
setup.qdiff.easy15,
[
[
'QuestUnitTrainingVaginaBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_basic),
]
],
[
'QuestUnitTrainingVaginaBasicSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_basic),
],
],
[
'QuestUnitTrainingVaginaBasicFailure',
[],
],
[
'QuestUnitTrainingVaginaBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
While traditional sex is something that everyone capable of doing,
slaves must learn to go beyond traditional sex to be able to give
maximum pleasure back when being fucked.
This can be achieved from both the physical feedback, as well as the
non-physical feedback such as proper moans and body language when being fucked.
</p><p>
The training was a complete success. <<rep $g.trainee>> has
learned the basics of being a fuck whore,
while your slavers gain a lot of experience from the training.
</p><p>
At the end of the week, <<rep $g.trainee>>
is now able to improve the fucker's experience when fucking <<them $g.trainee >>,
and is passable as a whore.
</p><p>
Unfortunately, <<rep $g.trainee>> is not bright enough
to understand the difference between regular sex, and being
a proper slave during sex.
</p><p>
Either <<rep $g.head>> was too harsh in employing punishment,
or just pure bad luck, <<rep $g.trainee>> managed to get injured
and the training had to be stopped early.
</p><<run new setup.QuestTemplate(
'training_vagina_master', /* id */
'Vagina Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head,
'trainer1': setup.qu.training_trainer_dick_master,
'trainer2': setup.qu.training_trainer_dick_master,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingVaginaMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingVaginaMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_master),
]
],
[
'QuestUnitTrainingVaginaMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_vagina_master),
],
],
[
'QuestUnitTrainingVaginaMasterFailure',
[
],
],
[
'QuestUnitTrainingVaginaMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_vagina_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Slaves who have undergone this training will
This training will transform the slave into a special kind of vagina bottom,
one so accustomed and experienced in the art of vagina sex that regardless
of the girth and width of the dick, they can give back maximum pleasure
from their asses.
This ability is so difficult to acquire that usually brothels have a specialized
dedicated training team to install this ability upon the slaves.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
Thanks to the skill of the training team,
the training went much smoother than expected.
<<rep $g.trainee>> transformation into an elite fuckslut
has been completed.
</p><p>
It is done.
<<rep $g.trainee>> transformation into an elite fuckslut
has been completed.
<<rep $g.trainee>> now requires a dildo in their vagina when not being used
just to ensure that they do not forget all these skills they have amassed,
as well as to keep them happy all the time.
</p><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<rep $g.trainee>>'s sheer
stubbornness or through <<rep $g.head>> lack of skill,
the training was not able to completely transform the slave
into the ultimate fuckslut.
At the end of the training,
<<rep $g.head>> has no choice but to give up on the
training.
</p><p>
The training was a complete failure. To reattempt this training,
<<rep $g.trainee>> must redo some of the previous training
again.
</p><<run new setup.QuestTemplate(
'treatment_heal_advanced', /* id */
'Treatment: Heal (Advanced)', /* Title */
'darko', /* author */
['fort', 'trait',], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.healing_potion_greater),
], /* costs */
'TreatmentHealAdvanced', /* description */
setup.qdiff.normal40,
[
[
'TreatmentHealAdvancedCrit',
[
setup.qc.Heal('trainee', 12),
]
],
[
'TreatmentHealAdvancedSuccess',
[
setup.qc.Heal('trainee', 8),
],
],
[
'TreatmentHealAdvancedFailure',
[
setup.qc.Heal('trainee', 4),
],
],
[
'TreatmentHealAdvancedDisaster',
[
],
],
],
[],
[],
)>><p>
Heal a unit using intensive potion treatment, which removes about 7 weeks worth of injuries.
</p><p>
<<rep $g.head>> directed the healing procedure, effectively using the
<<rep setup.item.healing_potion_greater>> to heal an extraordinarily large amount of injuries
from <<rep $g.trainee>>.
</p><p>
The healing procedure went about as well as expected,
with the
<<rep setup.item.healing_potion_greater>> being used with standard efficiency to sufficiently heal
<<rep $g.trainee>>.
</p><p>
<<rep $g.head>> were wasteful in <<their $g.head>> use of the
<<rep setup.item.healing_potion_greater>> and only able to heal <<rep $g.trainee>> by a small amount.
</p><p>
Your slavers mismanaged the healing operation resulting in the <<rep setup.item.healing_potion_greater>> being
completely wasted without any noticable effect on <<rep $g.trainee>>.
</p><<run new setup.QuestTemplate(
'treatment_heal_basic', /* id */
'Treatment: Heal (Basic)', /* Title */
'darko', /* author */
['fort', 'trait',], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.healing_potion),
], /* costs */
'TreatmentHealBasic', /* description */
setup.qdiff.easy30,
[
[
'TreatmentHealBasicCrit',
[
setup.qc.Heal('trainee', 8),
]
],
[
'TreatmentHealBasicSuccess',
[
setup.qc.Heal('trainee', 5),
],
],
[
'TreatmentHealBasicFailure',
[
setup.qc.Heal('trainee', 3),
],
],
[
'TreatmentHealBasicDisaster',
[
],
],
],
[],
[],
)>><p>
Heal a unit, which removes about 4 weeks worth of injuries.
</p><p>
<<rep $g.head>> directed the healing procedure, effectively using the
<<rep setup.item.healing_potion>> to heal an extraordinarily large amount of injuries
from <<rep $g.trainee>>.
</p><p>
The healing procedure went about as well as expected,
with the
<<rep setup.item.healing_potion>> being used with standard efficiency to sufficiently heal
<<rep $g.trainee>>.
</p><p>
<<rep $g.head>> were wasteful in <<their $g.head>> use of the
<<rep setup.item.healing_potion>> and only able to heal <<rep $g.trainee>> by a small amount.
</p><p>
Your slavers mismanaged the healing operation resulting in the <<rep setup.item.healing_potion>> being
completely wasted without any noticable effect on <<rep $g.trainee>>.
</p><<set _removeall = []>>
<<for _itrait, _trait range setup.TraitHelper.TRAINING_ALL>>
<<run _removeall.push(setup.qc.TraitRemove('trainee', _trait))>>
<</for>>
<<run new setup.QuestTemplate(
'treatment_blank', /* id */
'Treatment: Mind Blank', /* Title */
'darko', /* author */
['fort', 'trait', ], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.blank_potion),
], /* costs */
'TreatmentBlank', /* description */
setup.qdiff.hard43,
[
[
'TreatmentBlankCrit',
[
].concat(_removeall),
],
[
'TreatmentBlankSuccess',
[
setup.qc.Injury('trainee', 2),
].concat(_removeall),
],
[
'TreatmentBlankFailure',
[
setup.qc.Injury('trainee', 5),
].concat(_removeall),
],
[
'TreatmentBlankDisaster',
[
setup.qc.Injury('trainee', 8),
].concat(_removeall),
],
],
[],
[],
)>><p>
Removes all existing slave trainings on a slave.
While this procedure always succeeds, it usually cause injuries to the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that <<rep $g.trainee>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>> will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>> were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> were heavily injured during the procedure.
</p><<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.QuestTemplate(
'treatment_forget', /* id */
'Treatment: Forget', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'target': _target,
'head': [setup.qu.heal_head, 2],
'assistant1': [setup.qu.heal_assistant, 1],
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.forget_potion),
], /* costs */
'TreatmentForget', /* description */
setup.qdiff.hard40,
[
[
'TreatmentForgetCrit',
[
setup.qc.Friendship('trainee', 'target', 'reset'),
],
],
[
'TreatmentForgetSuccess',
[
setup.qc.Friendship('trainee', 'target', 'reset'),
setup.qc.Injury('trainee', 2),
setup.qc.Injury('target', 2),
],
],
[
'TreatmentForgetFailure',
[
setup.qc.Friendship('trainee', 'target', 'reset'),
setup.qc.Injury('trainee', 5),
setup.qc.Injury('target', 5),
],
],
[
'TreatmentForgetDisaster',
[
setup.qc.Friendship('trainee', 'target', 'reset'),
setup.qc.Injury('trainee', 8),
setup.qc.Injury('target', 8),
],
],
],
[],
[],
)>><p>
Make two units forget each other, resetting their friendship to 0.
This can be useful, since a unit cannot have too many friends at one time.
Uses a <<rep setup.item.forget_potion>>.
While this procedure always succeeds, it usually cause injuries to the patients.
</p>
<p>
<<dangertext 'IMPORTANT'>>: The unit assigned to the TARGET SLAVER role will be the unit
that gains affection for the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that both <<rep $g.trainee>>
and <<rep $g.target>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>>
and <<rep $g.target>>
will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were heavily injured during the procedure.
</p><<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.QuestTemplate(
'treatment_hate', /* id */
'Treatment: Hate', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'target': _target,
'head': [setup.qu.heal_head, 2],
'assistant1': [setup.qu.heal_assistant, 1],
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.hate_potion),
], /* costs */
'TreatmentHate', /* description */
setup.qdiff.hard55,
[
[
'TreatmentHateCrit',
[
setup.qc.Friendship('trainee', 'target', -500),
],
],
[
'TreatmentHateSuccess',
[
setup.qc.Friendship('trainee', 'target', -500),
setup.qc.Injury('trainee', 2),
setup.qc.Injury('target', 2),
],
],
[
'TreatmentHateFailure',
[
setup.qc.Friendship('trainee', 'target', -500),
setup.qc.Injury('trainee', 5),
setup.qc.Injury('target', 5),
],
],
[
'TreatmentHateDisaster',
[
setup.qc.Friendship('trainee', 'target', -500),
setup.qc.Injury('trainee', 8),
setup.qc.Injury('target', 8),
],
],
],
[],
[],
)>><p>
Forcefully make two units like each other, by using a <<rep setup.item.hate_potion>>.
While this procedure always succeeds, it usually cause injuries to the patients.
</p>
<p>
<<dangertext 'IMPORTANT'>>: The unit assigned to the TARGET SLAVER role will be the unit
that gains affection for the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that both <<rep $g.trainee>>
and <<rep $g.target>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>>
and <<rep $g.target>>
will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were heavily injured during the procedure.
</p><<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.QuestTemplate(
'treatment_love', /* id */
'Treatment: Friendship', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'target': _target,
'head': [setup.qu.heal_head, 2],
'assistant1': [setup.qu.heal_assistant, 1],
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.love_potion),
], /* costs */
'TreatmentLove', /* description */
setup.qdiff.hard55,
[
[
'TreatmentLoveCrit',
[
setup.qc.Friendship('trainee', 'target', 500),
],
],
[
'TreatmentLoveSuccess',
[
setup.qc.Friendship('trainee', 'target', 500),
setup.qc.Injury('trainee', 2),
setup.qc.Injury('target', 2),
],
],
[
'TreatmentLoveFailure',
[
setup.qc.Friendship('trainee', 'target', 500),
setup.qc.Injury('trainee', 5),
setup.qc.Injury('target', 5),
],
],
[
'TreatmentLoveDisaster',
[
setup.qc.Friendship('trainee', 'target', 500),
setup.qc.Injury('trainee', 8),
setup.qc.Injury('target', 8),
],
],
],
[],
[],
)>><p>
Forcefully make two units like each other, by using a <<rep setup.item.love_potion>>.
While this procedure always succeeds, it usually cause injuries to the patients.
</p>
<p>
<<dangertext 'IMPORTANT'>>: The unit assigned to the TARGET SLAVER role will be the unit
that gains affection for the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that both <<rep $g.trainee>>
and <<rep $g.target>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>>
and <<rep $g.target>>
will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were heavily injured during the procedure.
</p><<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.QuestTemplate(
'treatment_love_true', /* id */
'Treatment: Love', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'target': _target,
'head': [setup.qu.heal_head, 2],
'assistant1': [setup.qu.heal_assistant, 1],
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.love_potion_true),
], /* costs */
'TreatmentLoveTrue', /* description */
setup.qdiff.hard65,
[
[
'TreatmentLoveTrueCrit',
[
setup.qc.Friendship('trainee', 'target', 2000),
setup.qc.Hookup('trainee', 'target'),
setup.qc.TraumatizeRandom('trainee', 50),
setup.qc.TraumatizeRandom('target', 50),
],
],
[
'TreatmentLoveTrueSuccess',
[
setup.qc.Friendship('trainee', 'target', 2000),
setup.qc.Hookup('trainee', 'target'),
setup.qc.TraumatizeRandom('trainee', 50),
setup.qc.TraumatizeRandom('target', 50),
setup.qc.Injury('trainee', 3),
setup.qc.Injury('target', 3),
],
],
[
'TreatmentLoveTrueFailure',
[
setup.qc.Friendship('trainee', 'target', 2000),
setup.qc.Hookup('trainee', 'target'),
setup.qc.TraumatizeRandom('trainee', 50),
setup.qc.TraumatizeRandom('target', 50),
setup.qc.Injury('trainee', 7),
setup.qc.Injury('target', 7),
],
],
[
'TreatmentLoveTrueDisaster',
[
setup.qc.Friendship('trainee', 'target', 2000),
setup.qc.Hookup('trainee', 'target'),
setup.qc.TraumatizeRandom('trainee', 50),
setup.qc.TraumatizeRandom('target', 50),
setup.qc.Injury('trainee', 10),
setup.qc.Injury('target', 10),
],
],
],
[],
[],
)>><p>
Forcefully makes two units love each other,
by using a <<rep setup.item.love_potion_true>>.
A very mentally invasive procedure, there is no doubt the slavers will be in severe trauma
after the procedure ended.
While this procedure always succeeds, it usually cause injuries to the patients.
</p>
<p>
<<dangertext 'IMPORTANT'>>: The unit assigned to the TARGET SLAVER role will be the unit
that becomes the patient's lover.
</p><p>
It is done. Whatever their prior feelings towards each other, it did not matter anymore,
and somehow your <<repfull $g.trainee>> is now the sole and only lovers of <<rep $g.target>>.
But they can't help but feel something wrong with how they feel towards each other,
and will feel great disquiet over the next few months.
</p><<include 'TreatmentLoveTrueCommon'>>
<p>
<<rep $g.head>> directed the procedure with such skill that both <<rep $g.trainee>>
and <<rep $g.target>>
did not sustain any injuries at all at the end of the procedure.
</p><<include 'TreatmentLoveTrueCommon'>>
<p>
The healing procedure went about as well as expected.
<<rep $g.trainee>>
and <<rep $g.target>>
will need some time to recover from the procedure.
</p><<include 'TreatmentLoveTrueCommon'>>
<p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were severely injured during the procedure.
</p><<include 'TreatmentLoveTrueCommon'>>
<p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were heavily injured during the procedure.
</p><<run new setup.QuestTemplate(
'treatment_mindmend', /* id */
'Treatment: Mind Mend', /* Title */
'darko', /* author */
['fort', 'trait', ], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.mindmend_potion),
], /* costs */
'TreatmentMindMend', /* description */
setup.qdiff.hardest50,
[
[
'TreatmentMindMendCrit',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
],
],
[
'TreatmentMindMendSuccess',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 2),
],
],
[
'TreatmentMindMendFailure',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 5),
],
],
[
'TreatmentMindMendDisaster',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Restores a unit's mind function and removes <<rep setup.trait.training_mindbreak>>.
While this procedure always succeeds, it usually cause injuries to the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that <<rep $g.trainee>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>> will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>> were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> were heavily injured during the procedure.
</p><<run new setup.QuestTemplate(
'treatment_resetlevel', /* id */
'Treatment: Reset Level', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.reset_potion),
], /* costs */
'TreatmentResetLevel', /* description */
setup.qdiff.hard44,
[
[
'TreatmentResetLevelCrit',
[
setup.qc.ResetLevel('trainee'),
]
],
[
'TreatmentResetLevelSuccess',
[
setup.qc.ResetLevel('trainee'),
setup.qc.Injury('trainee', 2),
],
],
[
'TreatmentResetLevelFailure',
[
setup.qc.ResetLevel('trainee'),
setup.qc.Injury('trainee', 5),
],
],
[
'TreatmentResetLevelDisaster',
[
setup.qc.ResetLevel('trainee'),
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Resets the level of a unit to level 1. Also resets their skills to their level 1 skills.
While this procedure always succeeds, it usually cause injuries to the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that <<rep $g.trainee>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>> will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>> were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> were heavily injured during the procedure.
</p><<set _traits = setup.TraitHelper.getAllTraitsOfTags(['skin']).filter(a => !a.getTags().includes('corruption') && !a.getTags().includes('dickshape'))>>
<<set _reward = setup.qc.OneRandom(
_traits.map(a => setup.qc.Trait('trainee', a))
)>>
<<run new setup.QuestTemplate(
'treatment_transformation', /* id */
'Treatment: Transformation', /* Title */
'darko', /* author */
['fort', 'trait', 'transformation'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.potion_transformation),
], /* costs */
'TreatmentTransformation', /* description */
setup.qdiff.hard65,
[
[
'TreatmentTransformationCrit',
[
_reward,
]
],
[
'TreatmentTransformationSuccess',
[
_reward,
setup.qc.Injury('trainee', 4),
],
],
[
'TreatmentTransformationFailure',
[
_reward,
setup.qc.Injury('trainee', 9),
],
],
[
'TreatmentTransformationDisaster',
[
_reward,
setup.qc.Injury('trainee', 15),
],
],
],
[],
[],
)>><p>
Administers <<rep setup.item.potion_transformation>> to grant a unit
a random non-demonic bodypart.
The doctors need to stay alert during this invasive procedure.
While this procedure always succeeds, it usually cause injuries to the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that <<rep $g.trainee>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>> will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>> were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> were heavily injured during the procedure.
</p><<run new setup.QuestTemplate(
'treatmentmemory_isolation', /* key */
"Treatment: Memory Isolation", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'trait',
],
1, /* weeks */
1, /* expiration weeks */
{ /* roles */
'head': [ setup.qu.heal_head, 1],
'assistant1': [ setup.qu.heal_assistant, 1],
'assistant2': [ setup.qu.heal_assistant, 1],
},
{ /* actors */
'trainee': null,
},
[ /* costs */
setup.qc.LoseItem(setup.item.potion_isolation),
],
'Quest_treatment__memory_isolation',
setup.qdiff.hard51, /* difficulty */
[ /* outcomes */
[
'Quest_treatment__memory_isolationCrit',
[
setup.qc.Opportunity('isolate_memory', {
target: "trainee",
}),
],
],
[
'Quest_treatment__memory_isolationSuccess',
[
setup.qc.Injury('trainee', 2),
setup.qc.Opportunity('isolate_memory', {
target: "trainee",
}),
],
],
[
'Quest_treatment__memory_isolationFailure',
[
setup.qc.Injury('trainee', 5),
setup.qc.Opportunity('isolate_memory', {
target: "trainee",
}),
],
],
[
'Quest_treatment__memory_isolationDisaster',
[
setup.qc.Injury('trainee', 8),
setup.qc.Opportunity('isolate_memory', {
target: "trainee",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
An invasive procedure allowing you to isolate a part of a unit's history, making a unit forget it completely.
</p>
<p>
Allows you to choose and remove a background or skill trait from the unit.
While this procedure always succeeds, it usually cause injuries to the patient.
</p><p>
<<rep $g.head>> directed the procedure with such skill that <<rep $g.trainee>>
did not sustain any injuries at all at the end of the procedure.
</p><p>
The healing procedure went about as well as expected.
<<rep $g.trainee>> will need some time to recover from the procedure.
</p><p>
<<rep $g.head>> were unskilled in administering the procedure and as a result
<<rep $g.trainee>> were severely injured during the procedure.
</p><p>
<<rep $g.head>> were completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> were heavily injured during the procedure.
</p><<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[setup.trait.magic_fire], /* critical traits */
[], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
combat: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_wolf', /* key */
'Bounty Hunt: Wolves', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
},
[ /* costs */
],
'QuestBountyHuntWolf', /* passage description */
setup.qdiff.easier2, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntWolfCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Ire('werewolf', 1),
setup.qc.Favor('humanvale', 25),
],
],
[
'QuestBountyHuntWolfCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Ire('werewolf', 1),
setup.qc.Favor('humanvale', 25),
],
],
[
'QuestBountyHuntWolfFailure',
[
],
],
[
'QuestBountyHuntWolfDisaster',
[
setup.qc.Injury('merc1', 1),
setup.qc.Injury('merc2', 1),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> is the home to many northerner.
Nobody govern the land, which means nobody is there to protect the peasant
from the dangers of the land. The farmers on the vale have grown hardy to
the dangers of the land, be it the occassional flooding, bandit raids,
or even the rare magical explosion.
</p>
<p>
One of the more mundane danger in the vale is the abundant wolves who often prey on unsuspecting victims.
These distant relatives of the werewolfs often attack in very large packs, and there has been rare
occassion where the wolves slaughtered entire settlements.
To ward against such attacks, settlements often look for mercenaries to hire during the wolf seasons.
</p>
<p>
One such offers have somehow reached your desk. Given your slavers' past, this should be an easy task,
although it never hurts to maintain at least a level of caution.
</p><p>
Your slavers did not sign for this when they joined to the company, but nonetheless
they did an excellent job in dispatching the attacking wolves.
<<rep $g.merc1>> and <<utheirrel $g.merc1 $g.merc2>> <<rep $g.merc2>> made for a dangerous duo ---
fighting back to back (and ass to ass),
they dispatched and routed all the attacking wolves with ease.
</p>
<p>
The slavers returned to the settlement, with some of the wolves' skin as proofs.
<<if $gOutcome == 'crit'>>
With both mercenaries glaring daggers at <<their $g.negotiator>> back,
<<rep $g.negotiator>> managed to negotiate an even greater pay for the job.
<<else>>
Seeing your slavers returned, the villagers celebrate their success with a small feast,
with one of the villagers lustfully inviting <<rep $g.merc1>>
to grab <<their $g.merc1>> private prize,
<<if $g.merc1.isHasTrait('per_chaste')>>
which the chaste slaver foolishly declined.
<<else>>
to the delight of the <<uadjper $g.merc1>> slaver.
<</if>>
<</if>>
</p><p>
Unfortunately, your slavers got lost trying to find and locate the settlement.
By the time they arrive, the settlement were already ransacked by wolves.
Their original job gone, the slavers came shamefully back to the fort with nothing to show.
</p><p>
While your slavers are proficient at fighting humans, they had zero experience fighting animals.
When the wolves attacked the village, your slavers clumsily swung their <<uweapon $g.merc1>>, which the wolves
dodged with ease.
Fortunately, the foolish bravery show of your slavers distracted the wolves enough for the rest of the
villagers to scare off, but your slavers were too overcame with shame to demand pay for their sloppy work.
</p><<set _ordername = `Box Slave Order`>>
<<set _ordercompany = 'humanvale'>>
<<set _ordercriteria = setup.qu.slave>>
<<set _expiresin = 8>>
<<set _fulfilled = [
setup.qc.Favor('humanvale', 20),
]>>
<<set _unfulfilled = []>>
<<set _destination = setup.unitgroup.quest_fuckholeslaves>>
<<run new setup.QuestTemplate(
'boxforsale', /* key */
'Box for Sale', /* Title */
'darko', /* author */
['vale', 'order'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trader': setup.qu.slavetrader,
'slaver1': setup.qu.slavetrainer,
'slaver2': setup.qu.slavetrainer,
},
{ /* actors */
},
[ /* costs */
],
'QuestBoxForSale', /* passage description */
setup.qdiff.easy7, /* difficulty */
[ /* outcomes */
[
'QuestBoxForSaleCrit',
[
setup.qc.SlaveOrderGeneric(
_ordername,
_ordercompany,
_expiresin,
6.0, /* base price */
0, /* trait multipleir */
0.2, /* value multiplier */
_unfulfilled,
_destination,
),
],
],
[
'QuestBoxForSaleCrit',
[
setup.qc.SlaveOrderGeneric(
_ordername,
_ordercompany,
_expiresin,
5.0, /* base price */
0, /* trait multipleir */
0.1, /* value multiplier */
_unfulfilled,
_destination,
),
],
],
[
'QuestBoxForSaleCrit',
[
setup.qc.SlaveOrderGeneric(
_ordername,
_ordercompany,
_expiresin,
3.0, /* base price */
0, /* trait multipleir */
0, /* value multiplier */
_unfulfilled,
_destination,
),
],
],
[
'QuestBoxForSaleDisaster',
[
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.marketingoffice)
], /* prerequisites to generate */
)>><p>
Slavery is a widespread occurrence on the lawless lands of the north.
It has many benefits --- cheap labor, clean streets, and even in some cases cheap entertainment.
Some tavern in the <<lore region_vale>> like to spice up their taverns
with a living entertainment ---
a box, stuffed full with a slave, and drilled with exactly two openings:
one of the mouth and one for the holes of the slave.
Curious guests can try out the box by inserting various objects into the holes,
including their dicks if they wish to.
</p>
<p>
For this kind of occupation, the quality of the slave almost never matters.
This makes it a perfect way to dispose of your lower quality slaves.
You can try to find a tavern that needs one of these slaves, and offload
one of your slaves to them for a good price.
</p><p>
Your slavers chose to go to
a famous tavern called the Bomby Womby.
To their luck, the tavern just got word that a local army is going to pass through the tavern.
Soldiers often march for a long time, which makes them really, really pleasure-deprived.
<<rep $g.trader>> suggested the slave box idea to
"squeeze the money from their cocks" (quite literally in this case).
The owner happily agree to the depraved plan<<if $gOutcome == 'crit'>>, and
<<rep $g.trader>> even managed to <<uadv $g.trader>> negotiate a very good deal for the order<<elseif $gOutcome == 'failure'>>,
but stubbornly refuses to pay too much for the slave. Eventually, <<rep $g.trader>> managed to negotiate
a substandard deal, which all things considered is better than nothing<</if>>.
All that's left is to choose which poor slave you will send, while trying your best to
ignore the fate of the slave.
</p><p>
Unfortunately, your slavers were not able to find any tavern in need of a slave-in-a-box,
and were forced to came back empty-handed.
</p><<run new setup.QuestTemplate(
'caravan_guarding_vale', /* key */
'Caravan Guarding: Vale', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'guard1': setup.qu.guard,
'guard2': setup.qu.guard,
'guardsupport': setup.qu.guardsupport,
},
{ /* actors */
'leader': setup.unitgroup.humanvale,
},
[ /* costs */
],
'QuestCaravanGuardingVale', /* passage description */
setup.qdiff.normal8, /* difficulty */
[ /* outcomes */
[
'QuestCaravanGuardingValeCrit',
[
setup.qc.MoneyCrit(),
setup.qc.SlaverMarker('leader'),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestCaravanGuardingValeSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestCaravanGuardingValeFailure',
[
setup.qc.Ire('humanvale', 2),
],
],
[
'QuestCaravanGuardingValeDisaster',
[
setup.qc.Injury('guard1', 2),
setup.qc.Injury('guard2', 2),
setup.qc.Injury('guardsupport', 2),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> has a reputation for being unsafe and full of raiders:
raiders like you and your fellow slavers.
But while you are usually on the offensive,
occasionally there are lucrative opportunities to actually guard the caravan
against other raiders. After all, who's better than fending off raider attacks
than fellow raiders?
</p><p>
<<rep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> <<rep $g.guard2>> effectively
guarded the caravan.
Along the way, the caravan were ambushed by bandits which outnumbered the party.
But being raiders themselves, <<rep $g.guard1>> and <<rep $g.guard2>>
were ready for the attack, and managed to intimidate the bandits into leaving with a proper
bandit-to-bandit glare.
Impressed (or maybe actually intimidated) by your
slavers'
<<man $g.guard1>>liness,
the <<if $g.leader.isFemale()>>busty<<else>>macho<</if>> caravan leader
rewarded them with a little
peek under <<their $g.leader>> <<if $g.leader.isFemale()>>skirt<<else>>shirt<</if>>
before promising to put in good word about your slavers
to the locals.
</p><p>
Nothing and absolutely nothing happened during the caravan travel.
Your slavers were almost bored to death if it were not for
the fact that the caravan leader <<themself $g.leader>> is a sight to behold:
a <<if $g.leader.isFemale()>>
busty woman with the biggest ass they have ever seen around the area.
Your slavers sanity is saved thanks to the fat ass sensually bouncing off the carriage
each time the caravan hits a rock along the way.
<<else>>
macho man with the stockiest ass they have ever seen around the area.
Your slavers sanity is saved thanks to the muscly ass hotly bouncing off the carriage
each time the caravan hits a rock along the way, which the tight pants failed to
hide.
<</if>>
</p><p>
<<rep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> <<rep $g.guard2>>
guarded the caravan.
However, along the way the caravan were ambushed by bandits which outnumbered the party.
Both <<rep $g.guard1>> and <<rep $g.guard2>> were sleeping on duty when it happened, and
<<rep $g.guardsupport>> were the only one available to fight.
Seeing no hope of winning, <<rep $g.guardsupport>> was forced to reveal
<<their $g.guardsupport>> trump card: a proper raider-to-raider talk.
With <<rep $g.guardsupport>> supervision, the raiders peacefully stole the caravan's content,
leaving your slavers and the caravan leader unharmed.
</p>
<p>
Your slavers did not get paid for that kind of job.
</p><p>
Unfortunately, the entire caravan was ambushed by a group of feral werewolves,
which tipped the caravan over into a river causing both of your slavers and the
caravan leader to be injured.
</p><<set _charter = new setup.UnitCriteria(
null, /* key */
'Cartographer', /* title */
[
setup.trait.per_logical,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.magic_earth
], /* critical traits */
[
setup.trait.per_empath,
setup.trait.per_aggressive,
setup.trait.per_stubborn,
setup.trait.per_active,
setup.trait.magic_dark
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sum to 3.0 */
knowledge: 2.0,
survival: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'chartthevale', /* key */
'Chart the Northern Vale', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scout': setup.qu.scout_vale,
'charter1': _charter,
'charter2': _charter,
},
{ /* actors */
},
[ /* costs */
],
'QuestChartTheVale', /* passage description */
setup.qdiff.easier4, /* difficulty */
[ /* outcomes */
[
'QuestChartTheValeCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestChartTheValeSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestChartTheValeFailure',
[
],
],
[
'QuestChartTheValeDisaster',
[
setup.qc.Injury('charter1', 2),
setup.qc.Injury('charter2', 2),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
Most parts of the <<lore region_vale>> is still uncharted.
Several wealthy denizens would occasionally offer mouth-watering rewards for brave or
foolish adventurers to venture into these uncharted territories.
Foolish adventurers is certainly a title your slavers can wear proudly, and
you can consider letting your slavers take this job.
</p><p>
Your slavers were given a choice of either finding the source of a river,
or finding a way to cross the mountains to the other side.
<<rep $g.scout>> <<uadv $g.scout>> offers to scout the mountains.
But as they start to cross the mountain, they realize that the mountains
are not as inhabited as they have thought.
Some animalistic noises can be heard the further they venture into the mountain.
</p>
<p>
Given the choice of either going further or retreat, <<rep $g.scout>> <<uadv $g.scout>>
assures the rest of the team that there are nothing to worry about.
<<rep $g.scout>> expertly guides the team through the narrow passes, while
<<rep $g.charter1>> and <<rep $g.charter2>> busy taking notes of the route.
They eventually managed to find the other side of the mountain without any incident,
to their relief.
</p>
<p>
The team went back to report their success, and was rewarded greatly. Of course, they
take the discretion of not mentioning the strange noises they keep hearing while they
were there. After all, it's probably nothing but animal noises.
</p><p>
Your slavers were given a choice of either finding the source of a river,
or finding a way to cross the mountains to the other side.
While <<rep $g.scout>> <<uadv $g.scout>> offers to scout the mountains,
the rest of the team voted to select the safer option and get the job done.
Finding the source of a river simply means they just need to follow the river
to the end, which turns out to be an easy task and was done in no time.
The slavers spend the rest of the time before going back in the local tavern
trying to lift <<rep $g.scout>>'s downed spirit.
</p><p>
Your slavers were given a choice of either finding the source of a river,
or finding a way to cross the mountains to the other side.
While <<rep $g.scout>> <<uadv $g.scout>> offers to scout the mountains,
the rest of the team voted to select the safer option and get the job done quickly.
But the river dried up in the middle of the scouting mission --- given
<<rep $g.scout>>'s lack of skill,
there were no way they are going to be able to track down the water spring.
They decided to abandon the mission and return back to the fort.
</p><p>
Your slavers were given a choice of either finding the source of a river,
or finding a way to cross the mountains to the other side.
<<rep $g.scout>> <<uadv $g.scout>> offers to scout the mountains.
But as they start to cross the mountain, they realize that the mountains
are not as inhabited as they have thought.
Some animalistic noises can be heard the further they venture into the mountain.
</p>
<p>
<<rep $g.scout>> <<uadv $g.scout>>
assures the rest of the team that there are nothing to worry, which turns out to be a grave mistake.
Halfway through, they were ambushed by feral werewolves.
It turns out that these mountains were used by feral werewolves as breeding location during mating season,
which is happening... right about now.
Overcame with their lust, these werewolves were unable to distinguish your slavers with potential
mates, and proceed to violate your slavers.
This lasts a couple of days, according to your slavers --- but their memory is a bit vague
about this.
Eventually though, your slavers were discarded outside of the mountains after they are no longer
responsive --- It will take several weeks for your slavers to recover from such ordeal.
</p><<set _infiltrator = setup.CriteriaHelper.CritTraits(
[setup.trait.magic_water],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_werewolf,
setup.trait.magic_fire,
],
setup.qu.infiltrator,
)
)>>
<<run new setup.QuestTemplate(
'flesh_shaper_temple_kidnap', /* key */
'Flesh Shaper Temple: Kidnap', /* Title */
'darko', /* author */
['transformation', 'vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'infil1': _infiltrator,
'infil2': _infiltrator,
'infil3': _infiltrator,
},
{ /* actors */
'apprentice': setup.unitgroup.quest_humanvale_mystic,
'leader': setup.unitgroup.quest_humanvale_mysticleader,
},
[ /* costs */
],
'QuestFleshShaperTempleKidnap', /* passage description */
setup.qdiff.hard19, /* difficulty */
[ /* outcomes */
[
'QuestFleshShaperTempleKidnapCrit',
[
setup.qc.Slave('leader', 'was the leader of the many flesh shaper temples on the <<lore region_vale>> who was kidnapped by your slaves.'),
],
],
[
'QuestFleshShaperTempleKidnapSuccess',
[
setup.qc.Slave('apprentice', 'was an apprentice flesh shaper in one of the many water temples on the <<lore region_vale>>.'),
],
],
[
'QuestFleshShaperTempleKidnapFailure',
[
],
],
[
'QuestFleshShaperTempleKidnapDisaster',
[
setup.ch.growdick('infil1'),
setup.ch.growballs('infil1'),
setup.ch.growbreast('infil1'),
setup.ch.growdick('infil2'),
setup.ch.growballs('infil2'),
setup.ch.growbreast('infil2'),
setup.ch.growdick('infil3'),
setup.ch.growballs('infil3'),
setup.ch.growbreast('infil3'),
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><p>
The people in the northern settlements are faced with harsh winter and cold temperature.
These give them an affinity for ice and water, which when mastered, would eventually
allows them control over altering one's body's composition.
Some of the more superstitious folks turns to worship human bodies themselves,
and these people are usually called the flesh-shapers.
</p>
<p>
There are numerous flesh-shaping temples on the <<lore region_vale>>, each having several
priests and apprentices who are adept in the art of <<lore magic_water>>.
Such temples are prime source of slaves who are adept at using <<lore magic_water>>.
When properly trained, these slaves can use their abilities to transform part of their own body
during sexual acts, to the delight of some masters.
You can send a group of slavers to try and kidnap one of these apprentices,
but it will not be easy.
</p><p>
Your slavers happen upon a relatively newly established such temple and hence,
they still have very little protection.
Your slavers have no problem at all infiltrating the temple into the deepest sanctum,
where they witness the head priest in the middle of ritualistically transforming a
slave's breast into enormous proportion.
Such work requires heavy concentration, and hence it was easy for your slavers to launch
a surprise attack and knock the priest out.
There is also the matter of the transformed slave, but having just barely heavily transformed,
moving such slave out of the temple unnoticed would be impossible, and your slavers wisely decided to leave
them be.
Triumphantly, your slavers take <<rep $g.leader>> to <<their $g.leader>> new
home, back in the slave pits in your fort.
</p><p>
After surveying several such temples, your slavers has decided upon a juicy target
in the form of a new apprentice <<rep $g.apprentice>>. It was a relatively easy task for them,
waiting until <<rep $g.apprentice>> ventured out alone,
who they proceed to ambush,
tie up, and bring back home.
</p><p>
Unfortunately, having settled for a while in the vale, the residents of these temples
are already all too well aware of the dangers of the area.
The temple is heavily guarded,
and your slavers were not able to find opportunities to kidnap the well-guarded priests.
</p><p>
After surveying several such temples, your slavers has decided upon a juicy target
in the form of a new apprentice <<rep $g.apprentice>>. Your slavers waited
until <<rep $g.apprentice>> ventured out alone before ambushing <<them $g.apprentice>>.
In desperation, <<rep $g.apprentice>> channeled <<their $g.apprentice>> <<lore magic_water>>
and grow your slaver's assets, which apparently distracted them long enough for
<<rep $g.apprentice>> to escape.
</p><<set _raider = setup.CriteriaHelper.CritTraits(
[setup.trait.magic_water],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_werewolf,
setup.trait.magic_fire,
],
setup.qu.raider,
)
)>>
<<run new setup.QuestTemplate(
'flesh_shaper_temple_raid', /* key */
'Flesh Shaper Temple: Raid', /* Title */
'darko', /* author */
['transformation', 'vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': _raider,
'raider2': _raider,
'raidersupport': setup.qu.raidersupport,
},
{ /* actors */
},
[ /* costs */
],
'QuestFleshShaperTempleRaid', /* passage description */
setup.qdiff.normal19, /* difficulty */
[ /* outcomes */
[
'QuestFleshShaperTempleRaidCrit',
[
setup.qc.MoneyCrit(),
],
],
[
'QuestFleshShaperTempleRaidSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestFleshShaperTempleRaidFailure',
[
],
],
[
'QuestFleshShaperTempleRaidDisaster',
[
setup.ch.shrinkdick('raider1'),
setup.ch.shrinkballs('raider1'),
setup.ch.shrinkbreast('raider1'),
setup.ch.shrinkdick('raider2'),
setup.ch.shrinkballs('raider2'),
setup.ch.shrinkbreast('raider2'),
setup.ch.shrinkdick('raidersupport'),
setup.ch.shrinkballs('raidersupport'),
setup.ch.shrinkbreast('raidersupport'),
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><p>
The people in the northern settlements are faced with harsh winter and cold temperature.
These give them an affinity for ice and water, which when mastered, would eventually
allows them control over altering one's body's composition.
Some of the more superstitious folks turns to worship human bodies themselves,
and these people are usually called the flesh-shapers.
</p>
<p>
There are numerous flesh-shaping temples on the <<lore region_vale>>, each having several
priests and apprentices who are adept in the art of <<lore magic_water>>.
Such temples are usually ripe in treasure, which they gain as payment for their
services.
You can send a group of slavers to try and raid one of these temples,
but who knows what might happen to your slavers should the attempt go awry.
</p><p>
Your slavers happen upon a relatively newly established such temple and hence,
they still have very little protection.
Your slavers have no problem at all raiding the temple.
Inside, they found several offering slaves being chained on altars --- apparently,
this is the month of the dick and hence all these slaves have enormous clearly
unnatural dicks.
Your slavers thought about bringing them home, but ultimately decided against it
for their dicks are so big it would be impossible for them to walk on their own.
</p><p>
Your slavers happen upon one of the flesh-shaping temple
whose residents are mostly away on an outside
ritual.
In such a lucky break,
your slavers were able to make quick work of the temple's defenses, and hurriedly
raid the temple before its residents came back.
</p><p>
Your slavers were lucky to escape unscathed from their botched raiding attempt,
especially in such a community with powerful magic wielders.
</p><p>
Unfortunately, your slavers were defeated in their raiding attempt, and was subjected
to some intense sexual shrinking ritual before being able to escape their bondage
and returned home transformed.
</p><<set _offering = new setup.UnitCriteria(
'quest_offeringslave', /* key */
'Offering Slave', /* title */
[ /* critical traits */
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.training_obedience_advanced,
setup.trait.eq_slutty,
],
[
setup.trait.race_werewolf,
setup.trait.race_elf,
setup.trait.race_neko,
setup.trait.race_orc,
setup.trait.race_dragonkin,
setup.trait.race_demon,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.magic_water,
], /* disaster traits */
[
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<set _recruiter = setup.CriteriaHelper.CritTraits(
[setup.trait.magic_water, setup.trait.per_dominant],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_werewolf,
setup.trait.magic_fire,
setup.trait.per_submissive,
],
setup.qu.recruiter,
)
)>>
<<run new setup.QuestTemplate(
'flesh_shaper_temple_recruit', /* key */
'Flesh Shaper Temple: Recruit', /* Title */
'darko', /* author */
['transformation', 'vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'recruiter': _recruiter,
'recruiter': _recruiter,
'guard': setup.qu.guard,
'offering': _offering,
},
{ /* actors */
'apprentice': setup.unitgroup.quest_humanvale_mystic,
'leader': setup.unitgroup.quest_humanvale_mysticleader,
},
[ /* costs */
],
'QuestFleshShaperTempleRecruit', /* passage description */
setup.qdiff.harder19, /* difficulty */
[ /* outcomes */
[
'QuestFleshShaperTempleRecruitCrit',
[
setup.qc.MissingSlave('offering'),
setup.qc.Slaver('leader', 'was the leader of the many flesh shaper temples on the <<lore region_vale>> who was impressed by the quality of your slaves.'),
],
],
[
'QuestFleshShaperTempleRecruitSuccess',
[
setup.qc.MissingSlave('offering'),
setup.qc.Slaver('apprentice', 'was an apprentice flesh shaper in one of the many water temples on the <<lore region_vale>>.'),
],
],
[
'QuestFleshShaperTempleRecruitFailure',
[
],
],
[
'QuestFleshShaperTempleRecruitDisaster',
[
setup.qc.MissingSlave('offering'),
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><p>
The people in the northern settlements are faced with harsh winter and cold temperature.
These give them an affinity for ice and water, which when mastered, would eventually
allows them control over altering one's body's composition.
Some of the more superstitious folks turns to worship human bodies themselves,
and these people are usually called the flesh-shapers.
</p>
<p>
There are numerous flesh-shaping temples on the <<lore region_vale>>, each having several
priests and apprentices who are adept in the art of <<lore magic_water>>.
Having such person be a slaver in your company would certainly be useful,
when you later decides to transform your own slaves to fit a client's demands.
You can send a group of slavers to try to negotiate hiring one such apprentice,
in exchange for giving them one of your slaves.
</p>
<p>
<<dangertext 'WARNING'>>: upon success, the slave you bring on this quest will
be given to the flesh-shaper cult and gone forever.
</p><p>
The leader of the flesh-shaper temple that your slavers have visited was so
impressed by the quality of your <<titlelow $g.offering >> <<rep $g.offering>> that
<<they $g.leader>> offer to personally join your company.
After <<they $g.leader>> <<uadv $g.leader>> anointed the new religion head of the temple,
<<they $g.leader>> and your slavers head back to the fort.
<<rep $g.offering>> is given to the temple as a tribute, and <<their $g.offering>>
fate is to become an object of worship to be continuously transformed
to adhere to which body part is worshipped at each particular month.
</p><p>
The flesh shapers of the temple was short in slaves, so after deliberation
they agree to send one of their apprentices for "further training" in your camp,
in exchange for the slave you bring.
<<rep $g.offering>> is given to the temple as a tribute, and <<their $g.offering>>
fate is to become an object of worship to be continuously transformed
to adhere to which body part is worshipped at each particular month.
</p><p>
Unfortunately, your slavers were not eloquent enough to convince the flesh shapers
that <<rep $g.offering>> is a slave worthy as an offering in their transformation rituals.
</p><p>
The negotiation went sour. Faced with no choice, your slavers had to make their run from
it from the middle of the temple, and must left <<rep $g.offering>> behind.
<<rep $g.offering>> is left at the temple as a tribute, and <<their $g.offering>>
fate is to become an object of worship to be continuously transformed
to adhere to which body part is worshipped at each particular month.
</p><<run new setup.QuestTemplate(
'fuckholefair', /* key */
'Fuckhole Fair', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trader': setup.qu.slavetrader,
'trainer': setup.qu.slavetrainer,
'guard': setup.qu.guard,
'slave': setup.qu.fuckholeslave,
},
{ /* actors */
},
[ /* costs */
],
'QuestFuckholeFair', /* passage description */
setup.qdiff.normal12, /* difficulty */
[ /* outcomes */
[
'QuestFuckholeFairCrit',
[
setup.qc.MoneyNormal(1.2),
setup.qc.Opportunity(setup.opportunitytemplate.fuckhole_fair),
setup.qc.Favor('humanvale', 20),
],
],
[
'QuestFuckholeFairCrit',
[
setup.qc.MoneyNormal(1.2),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestFuckholeFairFailure',
[
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestFuckholeFairDisaster',
[
setup.qc.Injury('slave', 2),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.dungeons)
], /* prerequisites to generate */
)>><p>
One of the northern settlements is holding a festival! Everybody is
free to bring any attraction where they can charge the festival attendees
for the show, and you are (somehow) invited too!
</p>
<p>
The main source of entertainment in your fort has to be slaves, so that's what you're going to bring!
The slave does not have to be trained --- any hole can be a fuckbooth, but best
to bring along a slaver or three to properly showcase the toy.
With the right approach, this could turn you a tidy amount of profit!
</p><p>
Your slavers built a makeshift pillory in the village square, and secured
<<if $g.slave.isHasTrait('training_obedience_basic')>>
obedient
<<else>>
defiant
<</if>>
slave inside the pillory.
Following the old age advise, the slavers tested the goods first a day before the actual fair.
It was a fruitful affair as they make a couple of notes, including the necessity of proper lubing
and a place to gather the slave's bodily fluids for extra income.
</p>
<p>
Thanks to the solid preparation by your slavers, the fuckbooth became
<<if $gOutcome == 'crit'>>
the biggest attraction
<<else>>
a successful attraction
<</if>>
in the festival, drawing many people into trying
the slave <<rep $g.slave>> out.
The slave's holes
<<if $gOutcome == 'crit'>>
were almost always full
<<else>>
were used quite a lot
<</if>>
throughout the festival, with the villagers
becoming more and more creative as the festival go.
<<rep $g.slave>> is now familiar with the feeling of having all types of vegetables
shoved up their <<uhole $g.slave>>, while your slavers happily count the money they managed
to make out of this festival.
<<if $gOutcome == 'crit'>>
One of the well off attendee is so impressed with <<rep $g.slave>> after the slave took
his boot up the ass that he
offers your company a choice between buying one of your slaves or setting up contact with you,
which you should receive in your mail by now.
<</if>>
</p><p>
Your slavers were lazy in their preparation, and did not practice the fuckbooth a day
before the festival.
As a result, they were missing a few key components during the festival,
including a heavy dosage of lube on <<rep $g.slave>>'s <<ubody $g.slave>>.
They did not attract many customers, and returned later to your fort with only a few gold.
</p><p>
Your slavers were lazy in their preparation, and did not practice the fuckbooth a day
before the festival.
As a result, they were missing a few key components during the festival,
including some lubing on <<rep $g.slave>>'s <<ubody $g.slave>>.
The slave's holes were completely unusable without lube on the hot day,
and your slavers had no choice but to close shop early
</p><<run new setup.QuestTemplate(
'human_vs_were_defense', /* key */
'Human vs Werewolf: Defensive', /* Title */
'darko', /* author */
['anthro', 'vale', 'money', 'favor', ], /* tags */
1, /* weeks */
2, /* quest expiration weeks */
{ /* roles */
'guard1': setup.qu.guard,
'guard2': setup.qu.guard,
'guardsupport': setup.qu.guardsupport,
},
{ /* actors */
},
[ /* costs */
],
'QuestHumanVsWereDefense', /* passage description */
setup.qdiff.easy14, /* difficulty */
[ /* outcomes */
[
'QuestHumanVsWereDefenseCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humanvale', 50),
setup.qc.Ire('werewolf', 2),
],
],
[
'QuestHumanVsWereDefenseSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 50),
setup.qc.Ire('werewolf', 2),
],
],
[
'QuestHumanVsWereDefenseFailure',
[
setup.qc.Favor('humanvale', 25),
setup.qc.Ire('werewolf', 2),
],
],
[
'QuestHumanVsWereDefenseDisaster',
[
setup.qc.Injury('guard1', 1),
setup.qc.Injury('guard2', 1),
setup.qc.Injury('guardsupport', 1),
],
],
],
[], /* quest pool and rarities */
[], /* prerequisites to generate */
)>><p>
Having heard of a possible raid on a human settlement by the werewolf tribes,
you opted to inform the villagers and stand besides them in defense.
</p><p>
The defense was a complete success, and the villagers even managed to
capture some of the werewolf attackers to train as pets.
The villagers offered the first fuck of the werewolf commander to
your <<titlelow $g.guard1>> <<rep $g.guard1>>, who <<uadv $g.guard1>> obliged.
As your slavers were rewarded for their effort, they can see the werewolf commander
being dragged into the village dungeons by one of the villagers.
Your slavers started to wonder if the villagers intentionally goaded the werewolves to attack...
</p><p>
The battle was tough, but ultimately your slavers and villagers managed to clutch
victory, and the werewolves retreated.
But with so much of their village destroyed,
they were only to muster so much reward for your slavers, who
<<uadv $g.guard1>> accepted it.
</p><p>
The werewolves overwhelmed both you and the villagers. Fortunately, your slavers
managed to escape at the nick of time and avoided getting injured.
</p><p>
The werewolves overwhelmed both you and the villagers. Your slavers returned home
injured.
</p><<set _desc = `was a citizen in a settlement raided by you and the werewolf tribes`>>
<<run new setup.QuestTemplate(
'human_vs_were_offense', /* key */
'Human vs Werewolf: Offense', /* Title */
'darko', /* author */
['anthro', 'vale', 'unit'], /* tags */
1, /* weeks */
2, /* quest expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'raidersupport': setup.qu.raidersupport,
},
{ /* actors */
'target': setup.unitgroup.humanvale,
'target2': setup.unitgroup.humanvale,
},
[ /* costs */
],
'QuestHumanVsWereOffense', /* passage description */
setup.qdiff.normal14, /* difficulty */
[ /* outcomes */
[
'QuestHumanVsWereOffenseCrit',
[
setup.qc.Slave('target', _desc),
setup.qc.Slave('target2', _desc),
],
],
[
'QuestHumanVsWereOffenseSuccess',
[
setup.qc.Slave('target', _desc),
],
],
[
'QuestHumanVsWereOffenseFailure',
[
],
],
[
'QuestHumanVsWereOffenseDisaster',
[
setup.qc.Injury('raider1', 1),
setup.qc.Injury('raider2', 1),
setup.qc.Injury('raidersupport', 1),
],
],
],
[], /* rarity and pool */
[], /* prerequisites to generate */
)>><p>
Having heard of a possible raid on a human settlement by the werewolf tribes,
you opted to launch a simultaneous attack with the werewolf and capture some villagers.
</p><p>
Your ambush was a complete success -- during the chaos resulting from the werewolf assault,
<<rep $g.raider1>> managed to <<uadv $g.raider1>> nab two unsuspecting victims and carry
<<them $g.target>>
back to fort. They are now in the slave pits,
ready for their new lives as sexual playthings if you so choose.
</p><p>
Your ambush was a complete success -- during the chaos resulting from the werewolf assault,
<<rep $g.raider1>> managed to <<uadv $g.raider1>>
an unsuspecting victim and carry <<them $g.target>>
back to fort.
<<They $g.target>> are now waiting to begin their new life as a sexual plaything.
</p><p>
Unfortunately, the villagers somehow managed to repel the werewolves' attack.
Your slavers did not find the opportunity to abduct anyone.
</p><p>
Unfortunately, your slavers got caught in the fighting and ended up injuring themselves.
</p><<run new setup.QuestTemplate(
'kidnap_you_not', /* key */
'Weed Removal', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'kidnap1': setup.qu.infiltrator,
'kidnap2': setup.qu.infiltrator,
},
{ /* actors */
'target': setup.unitgroup.humanvale,
},
[ /* costs */
],
'QuestKidnapYouNot', /* passage description */
setup.qdiff.normal6, /* difficulty */
[ /* outcomes */
[
'QuestKidnapYouNotCrit',
[
setup.qc.Slave(
'target',
'was a villager in a northern settlement that is ordered to be removed by its unscrupulous neighbor'),
setup.qc.MoneyNormal(),
],
],
[
'QuestKidnapYouNotSuccess',
[
setup.qc.Slave(
'target',
'was a villager in a northern settlement that is ordered to be removed by its unscrupulous neighbor'),
setup.qc.Ire('humanvale', 1),
],
],
[
'QuestKidnapYouNotFailure',
[
],
],
[
'QuestKidnapYouNotDisaster',
[
setup.qc.Injury('kidnap1', 1),
setup.qc.Injury('kidnap2', 1),
setup.qc.Ire('humanvale', 3),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
A somewhat well-off denizen of the <<lore region_vale>> came to your fort with the following proposition.
He wants your company to remove one of his neighbors that have been a constant
problem to his business and personal life for some time now.
It would be a nice coincidence if his neighbor were to disappear one day,
with nothing tying the disappearance back to him.
To your company, that sounds like catching two birds with one stone, so
why not help the poor neighbor rid their garden of the weed?
</p><p>
The plan was simple enough:
have one of the slavers distract the guard while the others
kidnap the target in the middle of the night and skip town.
Executing such a plan however would depend on the skills of the slavers.
</p>
<p>
The plan went off without a hitch.
Nobody could resist the seductive wink of <<rep $g.seducer>>, so while
<<they $g.seducer>> <<uadv $g.seducer>> works <<their $g.seducer>> magic on the guard,
<<rep $g.kidnap1>> and <<rep $g.kidnap2>> went in via the window,
put a sack and a gag over <<rep $g.target>>'s head, and carry <<them $g.target>>
out.
<<rep $g.seducer>> was so convincing that at the end of the week, nobody in the town,
not even the guard have any idea who could have committed such brazen kidnapping.
</p><p>
The plan was simple enough:
have one of the slavers distract the guard while the others
kidnap the target in the middle of the night and skip town.
Executing such a plan however would depend on the skills of the slavers.
</p>
<p>
While the plan worked, it turned out that <<rep $g.seducer>> <<uadjper $g.seducer>> grip on
the guard's attention was not as strong as <<they $g.seducer>> believed.
At the end of the day, the settlement somehow knew that it was you who have
kidnapped <<rep $g.target>>.
Hearing this, your client drops all communications with you, and your pay is
gone. But at least you have <<rep $g.target>> as a new slave, who when
sold should prove more than adequate to cover the costs of this endeavor.
</p><p>
The plan was simple enough:
have one of the slavers distract the guard while the others
kidnap the target in the middle of the night and skip town.
Executing such a plan however would depend on the skills of the slavers.
</p>
<p>
Unfortunately, <<rep $g.seducer>> were not able to take the guard's
attention long enough for your other slavers to do their work. The guard rushed
in and your slavers were left with no choice but to escape.
</p><p>
The plan was simple enough:
have one of the slavers distract the guard while the others
kidnap the target in the middle of the night and skip town.
Executing such a plan however would depend on the skills of the slavers.
</p>
<p>
The plan execution was a complete disaster.
Unfortunately, <<rep $g.seducer>> were not able to take the guard's
attention at all, and the other slavers were injured in a fight with the guard
as a result.
</p><<set _desc = 'was a member of the militia in the northern lands who you lure with the prospect of gold and women'>>
<<run new setup.QuestTemplate(
'militia_matters', /* key */
'Militia Matters', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'guard': setup.qu.raidersupport,
},
{ /* actors */
'militia1': setup.unitgroup.quest_humanvale_militia,
'militia2': setup.unitgroup.quest_humanvale_militia,
'militia3': setup.unitgroup.quest_humanvale_militia,
},
[ /* costs */
setup.qc.MoneyNormal(-0.5)
],
'QuestMilitiaMatters', /* passage description */
setup.qdiff.easy9, /* difficulty */
[ /* outcomes */
[
'QuestMilitiaMattersCrit',
[
setup.qc.Slaver('militia1', _desc),
setup.qc.Slaver('militia2', _desc),
setup.qc.Slaver('militia3', _desc),
],
],
[
'QuestMilitiaMattersSuccess',
[
setup.qc.Slaver('militia1', _desc),
setup.qc.Slaver('militia2', _desc),
],
],
[
'QuestMilitiaMattersFailure',
[
setup.qc.MoneyNormal(0.5)
],
],
[
'QuestMilitiaMattersDisaster',
[
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.prospectshall),
], /* prerequisites to generate */
)>><p>
If your company is short on recruits, there are always potential recruits to be found on the <<lore region_vale>>.
While you can always scout for them once you built the
<<rep setup.buildingtemplate.hiringsquare>>,
it will cost some money to hire them into your company.
An alternative way is to hire the potential slavers using a more direct approach.
</p>
<p>
One of the northern villages maintained a sizable militia, but lately you have been hearing
that the militia are not treated well by their commander.
You might be able to send a group of convincing slavers to abandon their allegiance
and start a more lucrative career as slavers.
Militias are generally well-trained in combat, surely a boon to a slaving company such as yours.
</p><p>
The rumors turned out to be correct.
<<rep $g.recruiter1>> was so <<uadv $g.recruiter1>> convincing that three of the militiamen
signed up for your company.
They are now waiting in the prospects hall for your
decision, for you to inspect before admitting them into the company.
</p><p>
The rumors turned out to be correct.
<<rep $g.recruiter1>> managed to <<uadv $g.recruiter1>> found two militiamen disgruntled over their
wage, which makes it easy to convince them to join your company.
</p><p>
Unfortunately, nobody in the militia here has any interest in enslaving their fellow men.
At least your slavers return back with the unused money.
</p><p>
Your slavers were tricked by a particularly unscrupulous member of the militia, who feigned
interest only to run away with the incentive money on the way back.
It's a shame, such behavior might have actually made him a rather good slaver.
</p><<set _desc = "was a knight of the Kingdom of Tor, who were trying to rescue their squire but ended up joining their squire's fate">>
<<set _antiknight = new setup.UnitCriteria(
null, /* key */
'Anti-Knight Fighter', /* title */
[
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.eq_veryvaluable,
setup.trait.magic_dark,
setup.trait.magic_earth_master,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.per_calm,
setup.trait.per_brave,
setup.trait.per_masochistic,
setup.trait.per_kind,
setup.trait.per_honest,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_wind,
setup.trait.skill_hypnotic,
], /* disaster traits */
[
setup.qs.job_slaver
], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'questing_knight', /* key */
'Questing Knight', /* Title */
'darko', /* author */
['vale', 'unit', 'prep'], /* tags */
2, /* weeks */
6, /* quest expiration weeks */
{ /* roles */
'fighter1': _antiknight,
'fighter2': _antiknight,
'healer': setup.qu.healer,
},
{ /* actors */
'knight': setup.unitgroup.quest_humankingdom_knight,
},
[ /* costs */
],
'QuestQuestingKnight', /* passage description */
setup.qdiff.hardest31, /* difficulty */
[ /* outcomes */
[
'QuestQuestingKnightCrit',
[
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Slave('knight', _desc),
setup.qc.Ire('humankingdom', 10),
],
],
[
'QuestQuestingKnightSuccess',
[
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Ire('humankingdom', 2),
setup.qc.Injury('fighter1', 1),
setup.qc.Injury('fighter2', 1),
],
],
[
'QuestQuestingKnightFailure',
[
setup.qc.Injury('fighter1', 2),
setup.qc.Injury('fighter2', 2),
setup.qc.Injury('healer', 2),
],
],
[
'QuestQuestingKnightDisaster',
[
setup.qc.Injury('fighter1', 4),
setup.qc.Injury('fighter2', 4),
setup.qc.Injury('healer', 4),
setup.qc.EscapedSlaveRandom(),
],
],
],
[[setup.questpool.vale, 90],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('quest_knight_in_training_squire', {job_key: 'slave'}),
], /* prerequisites to generate */
)>><p>
The Kingdom of Tor has a full order of knighthood, in service to their king.
These knights often take on squires as apprentices.
Recently, you have just acquired one such unfortunate squires as a slave,
who currently resides in your dungeon.
</p>
<p>
You have heard rumors about a knight asking a question around in the nearby tavern
about the wherebout of your slave.
Apparently, the knight is on a mission to rescue the squire.
Your fort location is not a secret, so it is only a matter of time before the knight
arrives, but it might be possible to send a team of slaver to ambush the knight
and perhaps capture them.
Of course, besting a knight is very difficult, and you would need a team of specialized
anti-knight fighters, together with a healer to keep them healthy throughout the fight.
By using underhanded tactic, together with utilizing your familiarity with the terrain,
this might be one of those rare chances where you could get your <<uhands $unit.player>> on a truly rare
and valuable knight slave, which will be a challenge to break.
</p><p>
The knight left a lot of trails in his enquiries, and your slavers had no problem at
all locating the knight, and waiting until the knight is moving to another town.
There, in the middle of the night when the knight has encamped alone,
your slavers,
spearheaded by <<rep $g.fighter1>>, <<uadv $g.fighter1>>
launches the ambush on the knight.
Having the advantage of surprise on their side, together with your slaver's
overall prowess, your slavers somehow managed to subdue the knight.
Immediately your slavers robustly tie the knight so tight the only movement
the knight can do is to breathe.
Your slavers then proceed to loot the camp, together with the still usable
part of the knight's armor, to bring back home together with the main trophy.
</p><p>
The knight left a lot of trails in his enquiries, and your slavers had no problem at
all locating the knight, and waiting until the knight is moving to another town.
There, in the middle of the night when the knight has encamped alone,
your slavers,
spearheaded by <<rep $g.fighter1>>,
<<uadv $g.fighter1>>
launches the ambush on the knight.
But apparently the knight was not as defenseless as they have thought, for <<they $g.knight>>
kept <<their $g.knight>> sword close, and an intense battle pursue.
The knight faught fiercely, but ultimately was forced to retreat from the sheer combination
of number advantage and terrain advantage that your slavers have.
Still, that means your slavers were unable to capture the knight as planned, but they were
able to thoroughly loot the camp, which apparently still contain some of the knight's armor
piece.
</p><p>
The knight left a lot of trails in his enquiries, and your slavers had no problem at
all locating the knight, and waiting until the knight is moving to another town.
There, in the middle of the night when the knight has encamped alone,
your slavers launches the ambush on the knight.
But apparently the knight already sensed their presence and was ready for a fight ---
in the ensuing chaos the knight fought like the true hero <<they $g.knight>> are and
badly injure your slavers, who were forced to retreat.
</p><p>
Your slavers were unable to follow the trails leading to the knight. When they headed
back to the fort in defeat, the knight apparently trailed them back into the fort.
The knight proceeds to knock your slavers unconscious before raiding your fort and freeing
one of your slaves.
Perhaps you will see the slave again one day.
</p><<set _desc = 'was a squire in service to the Kingdom of Tor, who were trying to prove themself but ultimately fell to your company'>>
<<set _fighter = new setup.UnitCriteria(
'quest_questing_squire_fighter', /* key */
'Fighter', /* title */
[
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.per_brave,
setup.trait.per_cruel,
], /* critical traits */
[
setup.trait.per_honorable,
setup.trait.per_cautious,
setup.trait.magic_light,
setup.trait.per_lustful,
setup.trait.per_kind,
], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'questing_squire', /* key */
'Questing Squire', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'fighter1': _fighter,
'fighter2': _fighter,
'raidersupport': setup.qu.raidersupport,
},
{ /* actors */
'squire': setup.unitgroup.quest_humankingdom_squire,
},
[ /* costs */
],
'QuestQuestingSquire', /* passage description */
setup.qdiff.harder15, /* difficulty */
[ /* outcomes */
[
'QuestQuestingSquireCrit',
[
setup.qc.Equipment(setup.equipmentpool.combat),
setup.qc.Slave('squire', _desc),
],
],
[
'QuestQuestingSquireSuccess',
[
setup.qc.Slave('squire', _desc),
setup.qc.Ire('humankingdom', 3),
],
],
[
'QuestQuestingSquireFailure',
[
setup.qc.Injury('fighter1', 1),
setup.qc.Injury('fighter2', 1),
setup.qc.Injury('raidersupport', 1),
],
],
[
'QuestQuestingSquireDisaster',
[
setup.qc.Injury('fighter1', 3),
setup.qc.Injury('fighter2', 3),
setup.qc.Injury('raidersupport', 3),
],
],
],
[[setup.questpool.vale, 75],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
The Kingdom of Tor has a full order of knighthood, in service to their king.
These knights often take on squires as apprentices.
The squires can eventually become a knight once they have proven themselves.
</p>
<p>
Occasionally, some squires are sent alone to the <<lore region_vale>> for either scouting
missions or to complete their process of becoming a knight.
You just got wind of such an unaccompanied squire being
sent to the north soon.
Using your superior knowledge of the lay of the lands,
with careful planning you might just be able to get the drop on <<them $g.squire>>,
and introduce the squire to <<their $g.squire>> new life as a slave.
Who know, maybe one day you'll even be able to use <<them $g.squire>> to lure
in a full knight,
which should make a much more valuable and attractive slave.
</p><p>
Using their familiarity with the terrain,
your slavers cleverly lay a classic pit trap in waiting for the squire.
The trap works without a hitch --- falling into the trap, the squire
lost consciousness long enough for <<rep $g.fighter1>> to <<uadv $g.fighter1>> tie
<<them $g.squire>> up. It won't be long before you introduce <<them $g.squire>> to
<<their $g.squire>> new life serving new masters not with might but with pleasure.
</p><p>
Your slavers, led by <<rep $g.fighter1>> managed to <<uadv $g.fighter1>>
ambush and capture the squire without a hitch.
However, it turned out that <<they $g.squire>> were not completely alone on the vale,
and words of your depravity somehow reached the kingdom, which sees your company with
some disdain now.
</p><p>
Despite being a squire, <<they $g.squire>> managed to overpower your slavers,
leaving your slavers to return with nothing but injuries.
</p><p>
Your slaver made a miscalculation during the ambush which caused them to fall into
the trap they set themselves for the squire.
You should give them a rest, not because they are injured badly, but
because such humiliation will take time to recover mentally.
</p><<run new setup.QuestTemplate(
'sexual_healing', /* key */
'Sexual Healing', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'healer': setup.qu.healer,
'whore': setup.qu.whore,
'guard': setup.qu.guard,
},
{ /* actors */
'client': setup.unitgroup.humanvale,
},
[ /* costs */
],
'QuestSexualHealing', /* passage description */
setup.qdiff.easy11, /* difficulty */
[ /* outcomes */
[
'QuestSexualHealingCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestSexualHealingCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestSexualHealingFailure',
[
setup.qc.MoneyNormal(0.5),
],
],
[
'QuestSexualHealingDisaster',
[
setup.qc.Ire('humanvale', 2),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The folks living in the <<lore region_vale>> are simple and superstitious folks.
There are many quite ridiculous beliefs they still hold on strong even to this day.
There is perhaps an opportunity here, to make use of these beliefs for your own evil gain...
</p>
<p>
One of these beliefs is about health. The simple northerner believes that
diseases are caused by the impurity of their bodies.
Your slavers can thus offer these simple villagers a "deeply spiritual" sexual healing,
to cleanse their bodies off the impurities.
You need a slaver proficient in the sexual arts to probe and clean the villager,
and an actual healer to do the actual healing.
</p><p>
Your slavers found a nearby pristine river next to the village, ready to be desecrated with cum
and all other bodily fluids.
After they set up shop, <<rep $g.guard>> <<uadv $g.guard>> advertised the services
to a nearby village.
The first client is a young feverish
<<man $g.client>>, who stepped into the water warily to approach the waiting <<rep $g.whore>>.
As <<rep $g.whore>> begin to molest all part of the villager's body, <<rep $g.healer>>
perceptively noticed a tick bite on the villager's butt. As <<rep $g.healer>> administered
the actual cure, <<rep $g.whore>> started to be bolder and bolder,
ultimately ordering the villager to <<if $g.whore.isHasDick()>>suck <<their $g.whore>> <<udick $g.whore>>
<<else>>eat <<their $g.whore>> pussy<</if>> in order to fully heal their
disease, which the villager reluctantly do.
At the end of the procedure, <<rep $g.healer>> did a wonderful job at healing the fever.
Word of mouth quickly spread into the village, and your slavers' services become
famous throughout.
</p>
<<if $gOutcome == 'crit'>>
<p>
In the coming days, it turns out that
your slaver <<rep $g.whore>> was a natural at this job.
<<He $g.whore>> <<uadv $g.whore>> molested and explored all nooks and crannies of
the customer's body while <<rep $g.healer>> works <<uadv $g.healer>> doing the actual healing.
The service became so famous that people are willing to pay outrageous amount
of money, which <<rep $g.whore>> <<uadv $g.whore>> bring home back to your fort.
</p>
<<else>>
<p>
In the coming days,
the slavers made tidy profit from <<rep $g.whore>> <<uadv $g.whore>> sexually abusing the customers while
<<rep $g.healer>>, at the same time, actually healing them properly.
After a while they even started to secretly milk their customers,
before selling back the "snake oil" to the villagers as spiritual oinments.
All in all, the venture was a complete success, and your slavers look forward to doing it again.
</p>
<</if>><p>
Unfortunately, the service did not attract as many customers as you have expected,
and the slavers only managed to bring half of the expected profit.
</p><p>
The river your slavers has chosen as the "sacred place" turns out to be infested
with carnivorous fish. When the first customer unknowingly entered the river, they
got bitten in all the wrong places, causing the healing service reputation to immediately
plummet.
</p><<run new setup.QuestTemplate(
'trading_mission_vale', /* key */
'Trading Mission: Vale', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
5, /* expiration weeks */
{ /* roles */
'trader1': setup.qu.trader,
'trader2': setup.qu.trader,
'guard': setup.qu.guard,
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyNormal(-0.5),
],
'QuestTradingMissionVale', /* passage description */
setup.qdiff.easier5, /* difficulty */
[ /* outcomes */
[
'QuestTradingMissionValeCrit',
[
setup.qc.MoneyNormal(3),
],
],
[
'QuestTradingMissionValeSuccess',
[
setup.qc.MoneyNormal(2),
],
],
[
'QuestTradingMissionValeFailure',
[
setup.qc.MoneyNormal(0.1),
],
],
[
'QuestTradingMissionValeDisaster',
[
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The northerners are not natural-born traders --- each settlement usually only trade
between themselves and only rarely with other settlements.
Hence, there is a lof of opportunities for traders to make good coin, but they need
to be knowledgeable to know where to buy and where to sell.
It also takes a little bit of investment to get the money train going.
If you have a particularly savvy slavers, you can join in the opportunity as well!
</p><p>
Via the combined ingenuity of <<rep $g.trader1>> and <<utheirrel $g.trader1 $g.trader2>> <<rep $g.trader2>>,
your slavers manage to make a huge amount of profit, more than quadrupling
the amount of investment they put.
Of course, you cannot tell how much money your slavers might have <<uadv $g.trader1>>
"misplaced" along the way,
but even then your company still obtain a tidy profit from this quest.
</p><p>
The good old standard of buy low and sell high still works to this very day.
Your slavers managed to profit quite a bit from the trade, no small thanks to
<<rep $g.guard>> <<uadv $g.trader1>> keeping them safe from the bandits, slavers, and other degenerates
along the way.
</p><p>
Unfortunately, your slavers staked their money into the wrong commodity,
whose price crashed and burn when they were skipping towns.
The only thing they manage to return with is a puny one fifth of the
original money they went with.
</p><p>
Unfortunately, your slavers were robbed midway by a band of werewolves.
There were just too many enemies for <<rep $g.guard>> to even have a slight
amount of chance to contest them.
In the end, your slavers were grateful that none of them were harmed,
even though all the money were lost in the process.
</p><<run new setup.QuestTemplate(
'vale_farm_raid', /* key */
'Raid: Vale Farm', /* Title */
'darko', /* author */
['vale', 'money', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport,
},
{ /* actors */
'farmer': setup.unitgroup.quest_humanvale_farmer,
},
[ /* costs */
],
'QuestValeFarmRaid', /* passage description */
setup.qdiff.easy3, /* difficulty */
[ /* outcomes */
[
'QuestValeFarmRaidCrit',
[
setup.qc.Slave(
'farmer',
'was a simple farmer on the northern vale that have the misfortune of being raided by your company'),
setup.qc.MoneyNormal(),
setup.qc.Favor('outlaws', 25),
setup.qc.Ire('humanvale', 1),
],
],
[
'QuestValeFarmRaidCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('outlaws', 25),
setup.qc.Ire('humanvale', 1),
],
],
[
'QuestValeFarmRaidFailure',
[
],
],
[
'QuestValeFarmRaidDisaster',
[
setup.qc.Injury('raider1', 1),
setup.qc.Injury('raider2', 1),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
Welcome to the world of raiding! All raiders must begin somewhere, and what is a better
place than to raid an innocent little farm on the <<lore region_vale>>!
Lightly guarded and promising good amount of reward, it is the perfect target
for an enterprising company such as yourself.
If you're lucky, you can even get that
farmer <<girl $g.farmer>> your slavers have been eyeing for...
</p><p>
Your slavers raided the farm like in textbooks.
First they torch fire into the fields, which alarmed the farmers.
With the farmers gone, it was an easy job for your slavers to ransack
the home for valuables.
<<if $gOutcome == 'crit'>>
<<rep $g.raider1>> was even able to <<uadv $g.raider1>> nab the farmer's
<<daughter $g.farmer>> to bring back to the fort as a potential trophy.
<</if>>
</p><p>
Unfortunately, your company is not the only company with the idea of raiding such farm.
The farm has already been ransacked by the time your slavers arrive, and nothing of value
were found.
<<rep $g.raider1>> <<uadv $g.raider1>> cursed their luck.
</p><p>
Your slavers made a grave error --- there was a reason why this farm manages to stay alive and
well in this region.
The farmers of the particular farm your slavers has chosen to attack apparently managed to
arm themselves right when they see your slavers coming, and a fight ensues.
Your slavers were soundly defeated, and forced to retreat back to your fort with injuries.
</p><<run new setup.QuestTemplate(
'vale_werewolf_camp_raid', /* key */
'Raid: Werewolf Camp', /* Title */
'darko', /* author */
['anthro', 'vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport,
},
{ /* actors */
'unit': setup.unitgroup.vale_all,
},
[ /* costs */
],
'QuestValeWerewolfCampRaid', /* passage description */
setup.qdiff.normal13, /* difficulty */
[ /* outcomes */
[
'QuestValeWerewolfCampRaidCrit',
[
setup.qc.Slave(
'unit',
'was a traveler first captured by the werewolves, and now captured by your company'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 25),
setup.qc.Ire('werewolf', 1),
],
],
[
'QuestValeWerewolfCampRaidCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 25),
setup.qc.Ire('werewolf', 1),
],
],
[
'QuestValeWerewolfCampRaidFailure',
[
setup.qc.Injury('raider1', 1),
setup.qc.Injury('raider2', 1),
],
],
[
'QuestValeWerewolfCampRaidDisaster',
[
setup.qc.Injury('raider1', 2),
setup.qc.Injury('raider2', 2),
],
],
],
[[setup.questpool.vale, 25],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
While the northerners are the most numerous race in the <<lore region_vale>>,
they are not the only sentient species there. The werewolves share territory with them,
although the wolves tend to occupy the colder, northernmost region of the vale.
</p>
<p>
You have heard legends of the werewolves' main camp and its impenetrable walls.
But while assaulting the main camp sounds impossible, there are many smaller
outposts for the werewolf tribe on the outskirts of their territory.
The werewolves can rest and store their slaves in these encampments between the raids
they launch.
You could try to send a group of slavers to assault one of these encampments ---
these outposts are usually very lightly guarded and it should pose no problem
for your slavers.
Who knows, maybe the werewolves' slaves would be better under the tender care of your company.
</p><p>
Your slavers were insanely lucky.
The camp was nearly empty when they arrived --- it seems that the werewolves are out there
busy hunting for more slaves.
<<rep $g.raider1>> and <<utheirrel $g.raider1 $g.raider2>> <<rep $g.raider2>> <<uadv $g.raider1>>
ransacked through the entire place, taking all the valuables<<if $gOutcome == 'crit'>>
and most importantly a naked and fully tied up slave inside one of the camps,
freshly caught from the vale.
Your slavers uncharacteristically managed to resist raping the struggling slave here and there
and managed to escape the encampment before the werewolves returned.
<<else>>.
There was no slave to be found though, perhaps this camp is actually abandoned and the werewolves
have moved to another camp?
<</if>>
</p><p>
Unfortunately, your slavers did not manage to locate the werewolf camp.
</p><p>
When your slavers arrived at the camp, it was empty. But when your slavers
are in the middle of looting the place, the werewolf scouts return and ambushed
your slavers.
While your slavers managed to escape, they sustained heavy injuries.
</p><<set _waylayer = new setup.UnitCriteria(
'waylayer', /* key */
'Waylayer', /* title */
[setup.trait.race_werewolf, setup.trait.per_deceitful, setup.trait.magic_dark, setup.trait.dick_large, setup.trait.breast_large, setup.trait.face_attractive], /* critical traits */
[setup.trait.per_chaste, setup.trait.per_honest, setup.trait.face_ugly, setup.trait.per_kind, setup.trait.per_honorable], /* disaster traits */
[setup.qs.job_slaver], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 0.2,
sex: 0.1,
}
)>>
<<run new setup.QuestTemplate(
'werewolf_waylay', /* key */
'Werewolf Waylay', /* Title */
'darko', /* author */
['anthro', 'vale', 'unit'], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'waylayer': _waylayer,
'kidnap1': setup.qu.infiltrator,
'kidnap2': setup.qu.infiltrator,
},
{ /* actors */
'target': setup.unitgroup.werewolf,
},
[ /* costs */
],
'QuestWerewolfWaylay', /* passage description */
setup.qdiff.normal10, /* difficulty */
[ /* outcomes */
[
'QuestWerewolfWaylayCrit',
[
setup.qc.Slave(
'target',
'was an curious member of the werewolf tribe that gives the wrong person patronage'),
setup.qc.MoneyNormal(),
setup.qc.Ire('werewolf', 2),
],
],
[
'QuestWerewolfWaylayCrit',
[
setup.qc.Slave(
'target',
'was an curious member of the werewolf tribe that gives the wrong person patronage'),
setup.qc.Ire('werewolf', 3),
],
],
[
'QuestWerewolfWaylayFailure',
[
],
],
[
'QuestWerewolfWaylayDisaster',
[
setup.qc.Injury('kidnap1', 2),
setup.qc.Injury('kidnap2', 2),
setup.qc.Ire('werewolf', 3),
],
],
],
[[setup.questpool.vale, 1],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
While the northerner is the most numerous race in the <<lore region_vale>>,
it is also home to the werewolf race --- a race of humanoid wolves.
These furry people are known for their fierceness, but with proper training,
are also valued highly as exotic pets, if you know where to look.
Occassionally, you would get orders for such exotic species, and hence
having one in stock might prove to be a lucrative endeavor.
It will not be easy, however, and requires careful planning.
You need one slaver to lure one of the more curious member of the tribes
into the unknown, only to be ambushed by two of your other slavers waiting in place.
This will for sure raise the ire of the tribe, however.
</p><p>
<<if $g.waylayer.isHasTrait('race_werewolf')>>
Since <<rep $g.waylayer>> is a werewolf <<themself $g.waylayer>>,
the poor victim never grow suspicious of <<rep $g.waylayer>>'s suggestion to go out and have
some adventure together.
<<else>>
<<rep $g.waylayer>> has to work hard to earn the victim's trust, since werewolves are not known
to be trusting people. But <<rep $g.waylayer>> is skillful at <<their $g.waylayer>> job, and soon
enough the victim was ready to go out on an adventure together.
<</if>>
Little did <<they $g.target>> know that it would be an adventure of a lifetime.
As <<rep $g.waylayer>> reached into the clearing,
<<rep $g.kidnap1>> and <<rep $g.kidnap2>> were ready with the ambush.
As <<rep $g.waylayer>> distracted the young werewolf, <<rep $g.kidnap1>> struck from behind,
knocking the wolfie unconscious.
Securely tied up, the werewolf is now ready to be packaged and brought back home for
the surely intense training to become a proper pet.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers pawned most of the slave's belongings before going back, since <<they $g.target>>
surely won't need them ever again!
</p>
<</if>><p>
<<rep $g.waylayer>> chose a wrong target for the quest --- <<rep $g.target>>
grows too suspicious of the situation that <<they $g.target>> left <<rep $g.waylayer>>
midway to the ambush site.
</p><p>
<<rep $g.waylayer>> managed to bring the target to the ambush site without a problem,
but the werewolf proves too strong for your slavers to capture, injuring them severely in the process.
</p><<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Target Hunt Slave', /* name */
[
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.muscle_strong,
setup.trait.per_tough,
setup.trait.per_nimble,
setup.trait.per_masochistic,
setup.trait.per_dreamy,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_gagged,
setup.trait.eq_blind,
setup.trait.eq_collar,
setup.trait.eq_restrained,
setup.trait.eq_chastity,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
setup.trait.eq_pony,
setup.trait.eq_pet,
],
[
setup.trait.skill_flight,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
],
{
}
)>>
<<run new setup.QuestTemplate(
'a_most_dangerous_animal', /* key */
"A Most Dangerous Animal", /* Title */
"darko", /* Author */
[ 'vale', 'money'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'spotter': setup.qu.spotter,
'slave': _criteriaslave,
'entertainer': setup.qu.performer, },
{ /* actors */
'lord': 'humankingdom', },
[ /* costs */
],
'Quest_a_most_dangerous_animal',
setup.qdiff.hard14, /* difficulty */
[ /* outcomes */
[
'Quest_a_most_dangerous_animalCrit',
[
setup.qc.Opportunity('a_most_dangerous_animal__a_modest_offer', {slave: 'slave'}),
setup.qc.MoneyCustom(2000), ],
], [
'Quest_a_most_dangerous_animalCrit',
[
setup.qc.MoneyCustom(2000), ],
], [
'Quest_a_most_dangerous_animalCrit',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'),
setup.qc.MoneyCustom(2000), ],
], [
'Quest_a_most_dangerous_animalDisaster',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.dungeons), ],
[ /* expiration outcomes */
],
)>><p>
The nobles of the Kingdom of Tor dabbles in many hobbies —- some prefer the higher arts such as music and astronomy, while others revel in debauched acts such as sex and alcohol.
One of the nobles, <<lord $g.lord>> <<name $g.lord>> is an accomplished hunter. But not just any ordinary hunter.
</p>
<p>
Before the Kingdom of Lucgate banned slavery ten years ago, the <<lord $g.lord>> hunts slaves, as they firmly believe that humans are the most dangerous and challenging animal to hunt.
Now that the kingdom have banned slavery, the <<lord $g.lord>> often discreetly venture into outside territory to partake in <<their $g.lord>> hobby.
</p>
<p>
One of the <<lord $g.lord>>'s messenger has come to your fort to ask for your participation in the sport. You are invited to bring a completely untrained slave, to be released into the surrounding wild area. The <<lord $g.lord>>, armed with tranquilizer arrows, will later come into the area to hunt the rowdy slaves. The promised pay is very good, and it would be remiss for you to miss this opportunity.
</p><p>
Without any word, <<rep $g.trainer>> brought the disobedient slave <<rep $g.slave>> to the outskirts of the hunting range, and release the slave without word. The slave, confused, looks around for a bit before deciding to dash into a thicket. The preparation complete, it is time for the <<lord $g.lord>>'s hunt to begin.
</p>
<p>
Galloping on a horse, the <<lord $g.lord>> stride into the open fields with tranquilizing crossbow in hand. Seeing a slave, <<they $g.lord>> masterfully nocked an arrow into the legs of the slave, paralyzing <<them $g.slave>>. Your slavers watched as one by one slaves are brought down by the <<lord $g.lord>>'s masterful aim —- truly a work of art.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers were one of the slaves shot down by the <<lord $g.lord>>. While normally these slaves are returned to their owners at the end of the hunt, the <<lord $g.lord>> took a particular interest at <<rep $g.slave>>. Later, the gamemaster came to your office with a lucrative offer for <<rep $g.slave>>....
</p>
<<elseif $gOutcome == 'success'>>
<p>
Noting that your slave <<rep $g.slave>> were not one of the downed animals, <<rep $g.spotter>> immediately got to work to locate the slave before <<they $g.slave>> escape permanently.
It didn't take long for <<rep $g.spotter>>'s watchful <<ueyes $g.spotter>> to spot <<rep $g.slave>>. <<rep $g.trainer>> got to work and re-collared the slave, to be brought back to your fort.
</p>
<<else>>
<p>
Noting that your slave <<rep $g.slave>> were not one of the downed animals, <<rep $g.spotter>> immediately got to work to locate the slave before <<they $g.slave>> escape permanently.
But either due to incompetence or just plain bad luck, <<they $g.spotter>> were not able to locate <<rep $g.slave>>. If you want to recapture <<rep $g.slave>>, you must act fast...
</p>
<</if>><p>
Without any word, <<rep $g.trainer>> brought the disobedient slave <<rep $g.slave>> to the outskirts of the hunting range, and release the slave without word. But the slave, to your slavers' surprise, immediately run in the opposite direction far from the hunting grounds. This forfeits your pay from the hunt, and you are left with nothing but a slave to recapture.</p><<run new setup.QuestTemplate(
'carnal_experience', /* key */
"Carnal Experience", /* Title */
"darko", /* Author */
[ 'veteran',
'vale', 'unknown'
], /* tags */
4, /* weeks */
6, /* expiration weeks */
{ /* roles */
'knight': setup.qu.knight,
'whore': setup.qu.whore,
'trainer': setup.qu.slavetrainer,
'slave': setup.qu.slaveobedient, },
{ /* actors */
'chief': 'opportunity_aspect_of_experience1',
'daughter': 'humanvale', },
[ /* costs */
],
'Quest_carnal_experience',
setup.qdiff.hardest51, /* difficulty */
[ /* outcomes */
[
'Quest_carnal_experienceCrit',
[
setup.qc.SlaverMarker('chief'),
setup.qc.Opportunity('aspect_of_experience', {
knight: 'knight',
slave: 'slave',
}),
setup.qc.MoneyNormal(), ],
], [
'Quest_carnal_experienceCrit',
[
setup.qc.Opportunity('aspect_of_experience', {
knight: 'knight',
slave: 'slave',
}),
],
], [
'Quest_carnal_experienceFailure',
[
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'),
setup.qc.MissingUnit('slave'),
setup.qc.RemoveTraitsWithTag('slave', 'training'),
],
], [
'Quest_carnal_experienceFailure',
[
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'),
setup.qc.MissingUnit('slave'),
setup.qc.RemoveTraitsWithTag('slave', 'training'),
setup.qc.MissingUnitRecapture('trainer', 'capturedmedium'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions to generate */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Cooldown(12),
setup.qres.QuestUnique(), ],
[ /* expiration outcomes */
setup.qc.EmptyUnitGroup('opportunity_aspect_of_experience1'), ],
)>><p>
Your company has received a most unexpected visitor: A young <<lady $g.daughter>> who introduces <<themself $g.daughter>> as <<name $g.daughter>>, <<daughter $g.daughter>> of <<name $g.chief>>. <<They $g.daughter>> come with a much unusual problem for your company to solve.
</p>
<p>
You see, <<they $g.daughter>> has fallen in love with another <<man $unit.player>>, who resides far outside the vale. <<Their $g.daughter>> <<mother $g.chief>>, on the other hand, is a bonafide prude, strongly believing in the tradition that a <<daughter $g.daughter>> of the vale must marry a <<man $unit.player>> of the vale. <<name $g.daughter>> comes to your company with a proposition: do whatever you can to change <<their $g.daughter>>'s <<mother $g.chief>>'s stubborn mind.
</p>
<p>
Of course, the resourceful <<girl $g.daughter>> has done <<their $g.daughter>> research, and <<they $g.daughter>> know that you love nothing more than great rewards. <<Their $g.daughter>> tribe is one of the longest-existing tribes on the vale, and <<their $g.daughter>> <<father $g.chief>> has a wealth of experience much beyond <<their $g.chief>> peers. If you can convince the stubborn chief to change <<their $g.chief>> mind, surely you can also convince <<them $g.chief>> to share <<their $g.chief>> experiences with your slavers.
</p>
<p>
After all, what greater rewards are there than wisdom?
</p><p>
The chieftain turns out to be a prude beyond your slavers' imagination possible. After conversing with the chieftain, even with the slave <<rep $g.slave>> sensuously bound before them, there was zero reaction from the chieftain. As <<rep $g.whore>> questioned how <<they $g.chief>> could possibly have a <<daughter $g.daughter>> with that attitude, <<rep $g.knight>> started to enact the plan of slowly enacting hotter and hotter around the encampment, passing it as the, uh, "traditional culture" of whichever faraway region they came up with.
</p>
<p>
It started slow, initially with a sequence of "accidents" including one where <<rep $g.slave>> accidentally trips over when walking and fell ass-flat into the chieftain's <<if $g.chief.isHasDick()>>crotch<<else>>ample breasts<</if>>.
But it had no use, and your slavers had to get creative with it.
</p>
<p>
The sexual approaches became bolder and bolder until when during one night, <<rep $g.knight>> had the brilliant idea of smuggling <<rep $g.slave>> into the chief's sleeping tent and service <<them $g.chief>> during the night. After all, no matter how strong the <<urace $g.chief>>'s mind is, sex is still a primal instinct and surely not immune to wet dreams. Sure enough, the chief quickly <<if $g.chief.isHasDick()>> came into <<rep $g.slave>>'s mouth<<else>>get wet from <<rep $g.slave>>'s licking<</if>> every night. Eventually, without knowing why the chief started to get a little flushed each time <<rep $g.slave>> is brought around for entertainment.
</p>
<p>
By the end of the first few weeks, your slavers' plans' is starting to bear fruit. <<rep $g.chief>> started to ask your slavers interesting questions of various kinds, which your slaveres happily oblige. Be it bondage, pet play, <<if !$settings.bannedtags.watersport>>watersports,<</if>>, or even tail sex, your slavers oliged in telling all sorts of degenerate stories.
</p>
<p>
In the last few days, the chief spent most of <<their $g.chief>> time exploring various new techniques with your slave. Seeing their task complete, it is time for your slavers to get rewarded... with knowledge? Well seeing how the chief is now very open to other stuffs perhaps there are better option for rewards now...
</p>
<<if $gOutcome == 'crit'>>
<p>
With <<their $g.daughter>> <<father $g.chief>>'s horizons opened, the young <<lady $g.daughter>>, <<name $g.daughter>>, <<daughter $g.daughter>> of <<name $g.chief>> is confident that <<their $g.daughter>> <<father $g.chief>> will no longer object to <<their $g.daughter>> lovers' background. Your slavers are rewarded with extra money for the splendid efforts.
</p>
<</if>><p>
The chieftain turns out to be a prude beyond your slavers' imagination possible. After conversing with the chieftain, even with the slave <<rep $g.slave>> sensuously bound before them, there was zero reaction from the chieftain. As <<rep $g.whore>> questioned how <<they $g.chief>> could possibly have a <<daughter $g.daughter>> with that attitude, <<rep $g.knight>> started to enact the plan of slowly enacting hotter and hotter around the encampment, passing it as the, uh, "traditional culture" of whichever faraway region they came up with.
</p>
<p>
It started slow, initially with a sequence of "accidents" including one where <<rep $g.slave>> accidentally trips over when walking and fell ass-flat into the chieftain's <<if $g.chief.isHasDick()>>crotch<<else>>ample breasts<</if>>.
But it seems that something snapped within the chieftain's head, and it's not looking good for you...
</p>
<p>
The chieftain suddenly denounces the evils of slavery, taking the slave <<rep $g.slave>> with <<them $g.chief>> and freeing the obedient slave. Your slavers were then swiftly kicked out of the encampment as <<they $g.chief>> no doubt will try to reverse the slave programming on <<rep $g.slave>>. <<uneedrescue $g.slave>>, although by then the slave's training would probably have already been completely reversed...
</p>
<<if $gOutcome == 'disaster'>>
<p>
For good measure, the chieftain also took <<rep $g.trainer>> hostage, to help <<them $g.chief>> undo the slave's training. <<urescuenow $g.trainer>>.
</p>
<</if>><<run new setup.QuestTemplate(
'for_science__box_payment__labor', /* key */
"For Science: Box Payment: Labor", /* Title */
"darko", /* Author */
[ 'veteran', 'danger'
], /* tags */
12, /* weeks */
6, /* expiration weeks */
{ /* roles */
'smith1': setup.qu.blacksmith,
'smith2': setup.qu.blacksmith,
'maid': setup.qu.housekeeper, },
{ /* actors */
'smith': 'vale_all', },
[ /* costs */
],
'Quest_for_science__box_payment__labor',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__box_payment__laborCrit',
[
setup.qc.Item(setup.item.quest_for_science_box),
setup.qc.TraumatizeRandom('maid', 5),
setup.qc.BoonizeRandom('smith2', 15),
setup.qc.BoonizeRandom('smith1', 15), ],
], [
'Quest_for_science__box_payment__laborCrit',
[
setup.qc.TraumatizeRandom('maid', 5),
setup.qc.Item(setup.item.quest_for_science_box), ],
], [
'Quest_for_science__box_payment__laborCrit',
[
setup.qc.TraumatizeRandom('maid', 5),
setup.qc.Item(setup.item.quest_for_science_box),
setup.qc.TraumatizeRandom('smith1', 15),
setup.qc.TraumatizeRandom('smith2', 15), ],
], [
'Quest_for_science__box_payment__laborDisaster',
[
setup.qc.QuestDirect('for_science__box_payment__labor'),
setup.qc.SlaverMarker('smith'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
To pay for the smith's services, you have decided to send a group of slavers to serve as <<their $g.smith>> apprentices in the busy season.
The job won't be too hard, according to the smith, but it will surely take a long while. Still, you'll have to send the slavers if you want to get your <<uadjper $unit.player>> <<uhands $unit.player>> on
<<rep setup.item.quest_for_science_box>>.
</p>
<p>
That aside, the smith also asked for a housekeeper to keep <<their $g.smith>> house... "warm". You contemplated which poor slaver should fill this role.
</p><p>
In these three long months, your slavers helped the smith measure, craft, and even test the slave boxes ordered by the clients.
At the end of this apprenticeship, your slavers <<rep $g.smith1>>, <<rep $g.smith2>>, and <<rep $g.maid>> finally went back home bringing along them the <<rep setup.item.quest_for_science_box>>.
</p>
<<if $gOutcome == 'crit'>>
<p>
Apparently <<rep $g.smith1>> and <<rep $g.smith2>> managed to learn so much techniques from the masterful smith. They are greatly inspired by the experience.
</p>
<<elseif $gOutcome == 'success'>>
<<else>>
<p>
Being used as test subjects for the boxes greatly traumatized your slavers.
</p>
<</if>>
<p>
You also noticed <<rep $g.maid>> averted your gaze as <<they $g.maid>> head over to <<their $g.maid>> quarters.
The traumatized slaver deserves a rest after such a job.
</p><p>
Unfortunately, your slavers did a sloppy job, managing to mess up some of the finished boxes and botching new ones.
The smith must be extremely patient to actually offer your company another chance instead of giving up on you.
</p><<run new setup.QuestTemplate(
'for_science__something_thick', /* key */
"For Science: Something Thick", /* Title */
"darko", /* Author */
[ 'veteran',
'vale'
], /* tags */
2, /* weeks */
6, /* expiration weeks */
{ /* roles */
'smith': setup.qu.blacksmith,
'crafter': setup.qu.crafter,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'head': 'vale_all', },
[ /* costs */
],
'Quest_for_science__something_thick',
setup.qdiff.easy43, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__something_thickCrit',
[
setup.qc.Opportunity('for_science__box_payment'),
setup.qc.BoonizeRandom('smith', 9),
setup.qc.BoonizeRandom('crafter', 9), ],
], [
'Quest_for_science__something_thickCrit',
[
setup.qc.Opportunity('for_science__box_payment'), ],
], [
'Quest_for_science__something_thickFailure',
[
],
], [
'Quest_for_science__something_thickDisaster',
[
setup.qc.SlaverMarker('head'),
setup.qc.MoneyCustom(-1500), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarNull('for_science_slaveorder'),
setup.qres.NoQuest('for_science__box_payment__labor'),
setup.qres.NoOpportunity('for_science__box_payment'),
setup.qres.HasItem(setup.item.quest_for_science_list),
setup.qres.NoItem(setup.item.quest_for_science_box), ],
[ /* expiration outcomes */
],
)>><p>
The first item in the <<rep setup.item.quest_for_science_list>>
is a thick sturdy box. You can probably get one from one of the blacksmiths on the <<lore region_vale>> —- in fact, the list actually gave the location of one. The <<lore region_vale>> are relatively safe, so this seems like an easy and short mission. What could possibly go wrong?
</p><p>
Your slavers finally located the smith cottage. Surrounding the cottage are slave boxes and cages of various kinds. <<rep $g.smith>> <<uadv $g.smith>> inspected the fine craftmanship while <<rep $g.negotiator>> got to work and knocked on the door.
</p>
<p>
The smith, a burly <<man $g.head>>, apparently expected your team's arrival. Apparently <<they $g.head>> and the inventor has known each other for a while —- The inventor found the smith crafting mundane items such as fuckboxes and offered <<them $g.head>> a job to craft various devices for the inventor's experiments. In fact, he claimed that the inventor already sent to <<them $g.head>> the exact schematics for the box.
</p>
<p>
But apparently there is a slight problem. The smith has not received the payment for this order, and apparently the payment has fallen onto your slaver's hands. Well, it shouldn't be a problem. How much could a box possibly cost, after all?
</p>
<p>
...A lot, apparently, as this one is designed to be sturdy enough to withstand continuous assault of magic. You'll have to pay one way or another.
</p>
<<if $gOutcome == 'crit'>>
<p>
Still, the smith gave your slavers some hospitality and showed them a trick or two about smithing. This greatly inspires <<rep $g.smith>> and <<rep $g.crafter>>.
</p>
<</if>><p>
How could a group of experienced slavers failed to locate a blacksmith after being given <<their $g.head>> exact location? You ponder the question for a week after your slavers came back empty handed, apparently lost in the vale.
</p><p>
What could possibly be worse than being lost in the vale, even after being given the exact location of the smith? Patron a completely different smith, of course! They asked for a box, got a box, but it turns out to be too crappy to be used for the experiment.
You sighed heavily when looking at the slavers' expenses.
</p><<run new setup.QuestTemplate(
'future_sight', /* key */
"Future Sight", /* Title */
"darko", /* Author */
[ 'vale', 'money', 'quest'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'convincer': setup.qu.convincer,
'seer1': setup.qu.arcanewater,
'seer2': setup.qu.arcanewater, },
{ /* actors */
'seer': setup.unitgroup.humanvale, },
[ /* costs */
setup.qc.MoneyNormal(-0.25), ],
'Quest_future_sight',
setup.qdiff.easy14, /* difficulty */
[ /* outcomes */
[
'Quest_future_sightCrit',
[
setup.qc.QuestDelay(setup.questpool.forest, 1),
setup.qc.QuestDelay(setup.questpool.city, 1),
setup.qc.QuestDelay(setup.questpool.desert, 1),
setup.qc.QuestDelay(setup.questpool.vale, 2),
setup.qc.MoneyCrit(), ],
], [
'Quest_future_sightSuccess',
[
setup.qc.QuestDelay(setup.questpool.vale, 1),
setup.qc.QuestDelay(setup.questpool.forest, 1),
setup.qc.QuestDelay(setup.questpool.city, 1),
setup.qc.MoneyNormal(), ],
], [
'Quest_future_sightFailure',
[
setup.qc.MoneyNormal(0.25), ],
], [
'Quest_future_sightDisaster',
[
setup.qc.TraumatizeRandom('seer1', setup.TRAUMA_SHORT),
setup.qc.TraumatizeRandom('seer1', setup.TRAUMA_SHORT),
setup.qc.Injury('convincer', setup.TRAUMA_SHORT), ],
], ],
[
[setup.questpool.vale, 1],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
A famous seer lives in one of the many settlements on the <<lore region_vale>>.
<<They $g.seer>> is not only known for great <<their $g.seer>> <<beauty $g.seer>>, but also for <<their $g.seer>> uncanny ability to predict the future.</p>
<p>
You can send a group of slavers with some money to try and use <<their $g.seer>> services —- using <<their $g.seer>> future sight, it would be trivial to profit from the information. <<They $g.seer>> may also grant you insight into upcoming quests, even from faraway regions.</p><p>
The seer gracefully accepted the money your slavers brought and provided them with
multiple future insights on the upcoming droughts as well as opportunities in nearby lands.
Your slavers contemplated having such a divine <<beauty $g.seer>> as a slave, but
<<rep $g.seer1>> and <<rep $g.seer2>> can both sense the vast magical power from
the seer that it would be foolish to even attempt to do so. They just
have to be satisfied at looking at <<their $g.seer>> divine <<beauty $g.seer>> through the
scrying ball.</p><p>
The seer accepted the money your slavers brought and while <<they $g.seer>> gave a
great length of insight to your slavers, your slavers were too busy engrossed in watching <<their $g.seer>>
divine <<beauty $g.seer>> to pay attention. At the end, your slavers were only able
to remember few things from the session, which is still valuable, but were not
as productive as it could have been.</p><p>
Unfortunately by the time your slavers arrived at the seer's encampment, <<they $g.seer>> seem to have already moved on to a new place. Your slavers were unable to track where the seer has moved to.</p><p>
While the seer accepted the money, <<they $g.seer>> spouted nothing but bad omens for your slavers.
A few days later, <<rep $g.convincer>> were struck by a stray wild boar who appeared out of nowhere as your slavers were returning to the fort.</p><<run new setup.UnitGroup(
'quest_choose_your_own_adventure_hero1',
"Hero 1",
[
[setup.unitpool.race_humanvale_male, 5],
[setup.unitpool.race_humanvale_female, 5],
],
1, /* reuse chance */
[
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_revenge', 'revenge'),
setup.qc.DoAll([
setup.qc.TraitRemove('unit', setup.trait.per_humble),
setup.qc.TraitRemove('unit', setup.trait.per_calm),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.per_proud),
setup.qc.TraitReplace('unit', setup.trait.per_aggressive),
]),
]),
setup.qc.DoAll([
setup.qc.TraitRemove('unit', setup.trait.per_proud),
setup.qc.TraitRemove('unit', setup.trait.per_aggressive),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.per_humble),
setup.qc.TraitReplace('unit', setup.trait.per_calm),
]),
]),
),
],
)>>
<<run new setup.UnitGroup(
'quest_choose_your_own_adventure_hero2',
"Hero 2",
[
[setup.unitpool.race_humanvale_male, 5],
[setup.unitpool.race_humanvale_female, 5],
],
1, /* reuse chance */
[
setup.qc.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_revenge', 'revenge'),
setup.qc.DoAll([
setup.qc.TraitRemove('unit', setup.trait.per_humble),
setup.qc.TraitRemove('unit', setup.trait.per_calm),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.per_proud),
setup.qc.TraitReplace('unit', setup.trait.per_aggressive),
]),
]),
setup.qc.DoAll([
setup.qc.TraitRemove('unit', setup.trait.per_proud),
setup.qc.TraitRemove('unit', setup.trait.per_aggressive),
setup.qc.OneRandom([
setup.qc.TraitReplace('unit', setup.trait.per_humble),
setup.qc.TraitReplace('unit', setup.trait.per_calm),
]),
]),
),
],
)>>
<<run new setup.QuestTemplate(
'heroic_beginnings', /* key */
"Heroic Beginnings", /* Title */
"darko", /* Author */
[ 'vale', 'unknown'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'scavenger1': setup.qu.scavenger,
'scavenger2': setup.qu.scavenger,
'guard': setup.qu.guard, },
{ /* actors */
'hero1': setup.unitgroup.quest_choose_your_own_adventure_hero1,
'hero2': setup.unitgroup.quest_choose_your_own_adventure_hero2,
},
[ /* costs */
],
'Quest_heroic_beginnings',
setup.qdiff.normal9, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_beginningsCrit',
[
setup.qc.MoneyCrit(),
setup.qc.VarSet('choose_your_own_adventure_progress', '2', -1), ],
], [
'Quest_heroic_beginningsSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.VarSet('choose_your_own_adventure_progress', '2', -1), ],
], [
'Quest_heroic_beginningsFailure',
[
setup.qc.VarSet('choose_your_own_adventure_progress', '2', -1), ],
], [
'Quest_heroic_beginningsDisaster',
[
setup.qc.Injury('scavenger1', 2),
setup.qc.Injury('scavenger2', 2),
setup.qc.Injury('guard', 2),
setup.qc.VarSet('choose_your_own_adventure_progress', '2', -1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 0],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '1'), ],
)>><p>
A village in the <<lore region_vale>> has been burned down by raiders, seemingly with no survivors. You can send a group of slavers over to the village to scavenge what's left —- chances are that there are still plenty of loot left by the raiders, if you know where to look.
</p>
<p>
Back in your mind, you are a little unnerved that a village burned so soon after you read the "Choose Your Own Adventure" book...
Surely this can't be anything but a coincidence?
</p><p>
On your slavers' way back, they met a pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>, apparently survivors of the village raid.
They introduced themselves as <<= $g.hero1.getName()>> and
<<= $g.hero2.getName()>>.
With nothing left for them in their village, they are apparently embarking on a quest
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
for revenge. Whatever caused the destruction in their village, they shall pay.
<<else>>
to find peace. The catastrophe befalling the village shall not repeat.
<</if>>
An odd thing to say, given that the village was raided by raiders, but they make it sounds as if there were some greater forces in play.
</p>
<p>
From both pity and curiosity, your slavers informed the <<= $varstore.get('choose_your_own_adventure_siblings')>> of your company, who took information gathering as a secondary job. They seem to consider your slavers' offer seriously. Perhaps you will hear from them again.
</p><p>
As expected, the raiders were not at all thorough in looting the place. <<rep $g.scavenger1>> <<uadv $g.scavenger1>> managed to find several valuables hidden in the cellars of some buildings, which will fetch quite a nice sum of money in the market.
</p>
<<include 'Quest_heroic_beginningsCommon'>><p>
As expected, the raiders were not at all thorough in looting the place. <<rep $g.scavenger1>> <<uadv $g.scavenger1>> managed to find several unburned closets, which was remain locked. Your slavers made quick work of the lock and loot the valuables left inside.
</p>
<<include 'Quest_heroic_beginningsCommon'>><p>
Unfortunately the raiders burnt most of the houses down, leaving whatever valuables they left behind useless.
</p>
<<include 'Quest_heroic_beginningsCommon'>><p>
Unfortunately the raiders burnt most of the houses down, leaving whatever valuables they left behind useless. Worse, your slavers encoutered the same raiders on their way back, which harried them with arrows slightly injuring your slavers.
</p>
<<include 'Quest_heroic_beginningsCommon'>><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.per_dominant,
setup.trait.per_submissive,
],
[
],
[
setup.qres.You(),
],
{
combat: 0.3,
brawn: 0.3,
survival: 0.3,
intrigue: 0.3,
slaving: 0.3,
knowledge: 0.3,
social: 0.3,
aid: 0.3,
arcane: 0.3,
sex: 0.3,
}
)>>
<<set _criteriaparent = new setup.UnitCriteria(
null, /* key */
'parent', /* name */
[
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_attentive,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_logical,
setup.trait.per_dreamy,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('future_assassin_parent'),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'stolen_flame', /* key */
"Stolen Flame", /* Title */
"darko", /* Author */
[ /* tags */
'special',
'veteran',
'prep',
'unit',
'vale',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'parent': [ _criteriaparent, 1.5],
'tracker': [ setup.qu.informer, 1.5],
},
{ /* actors */
'lover': [
],
},
[ /* costs */
],
'Quest_stolen_flame',
setup.qdiff.hard42, /* difficulty */
[ /* outcomes */
[
'Quest_stolen_flameCrit',
[
setup.qc.TraumatizeRandom('lover', 8),
],
],
[
'Quest_stolen_flameCrit',
[
setup.qc.Injury('lover', 4),
setup.qc.TraumatizeRandom('lover', 12),
],
],
[
'Quest_stolen_flameCrit',
[
setup.qc.Injury('lover', 8),
setup.qc.TraumatizeRandom('lover', 16),
],
],
[
'Quest_stolen_flameCrit',
[
setup.qc.Injury('lover', 16),
setup.qc.TraumatizeRandom('lover', 16),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Leave('lover', "was kidnapped and disappeared from your fort", 200),
setup.qc.RemoveTagGlobal('future_assassin_parent'),
setup.qc.VarRemove('future_assassin_progress'),
setup.qc.VarSet('future_assassin_cooldown', '1', 100),
],
)>><p>
Once work is done, you make it a habit to seek out your lover <<rep $g.lover>>. You have already known <<their $g.lover>> routine quite well by now.
At this time of the day, the <<urace $g.lover>> is usually busy <<uhobbyverb $g.lover>>.
But when you go over to <<their $g.lover>> place, your love is nowhere to be seen.
</p>
<p>
Well, you normally would not be so worried,
<<if $g.lover.isHasTrait('per_independent')or $g.lover.isHasTrait('per_loner')>>
you know and love <<them $g.lover>> for <<their $g.lover>> lonely nature after all,
<<else>>
<<they $g.lover>> occasionally enjoys having an alone time after all,
<</if>>
but recent events came to your mind. Some time ago, a mysterious assailant did try to assault your lover. Is that what happened this time?
</p>
<<set _u = setup.getAnySlaver()>>
<p>
It turns out you don't need to speculate much, as your <<repfull _u>> came with both a good and bad news. Apparently your lover had indeed been kidnapped by a mysterious assailant, but <<rep _u>> was able to track the disappearance down to a certain village in the <<lore region_vale>>.
</p>
<<set _v = setup.getUnit({
tag: "future_assassin_parent"
})>>
<<if _v>>
<p>
Rescuing your lover is of utmost importance to you, and you will surely not want to miss it. But to your surprise, <<rep _v>> also insisted on going with you. Your <<repfull _v>> has always been known for <<their _v>> magical abilities — perhaps they have a vision that might help?
</p>
<</if>>
<p>
Either way, best to get your ass moving straight away.
If there is any consolation, you know your lover enough that even without your help, <<they $g.lover>> will surely be escape from <<their $g.lover>> predicament, and make it back home on <<their $g.lover>> own eventually. But without your help, <<they $g.lover>> will take a very, very long time...
</p><p>
With the help of your <<repfull $g.tracker>>,
you and your team managed to track down <<rep $g.lover>> down to a port settlement on the north. Just as you entered, you see <<rep $g.lover>> being ushered into what appears to be a pirate ship. They are selling your lover off as if <<they $g.lover>> is some nameless slave!
</p>
<p>
Angered, you raise your <<uweapon $g.you>> and charged into the foray, with <<rep $g.tracker>> right behind you. Although you are few in numbers, you have a wealth of experience on your side, and these wannabe slavers were no match for yours and your slaver's prowess. You headed directly for your <<rep $g.lover>>, and the two of you embraced for the first time these past weeks while <<rep $g.tracker>> <<uadv $g.tracker>> watched.
</p>
<<if $gOutcome == 'crit'>>
<p>
Fortunately, your lover appears to be completely unscathed by the ordeal, suffering only minor trauma from the entire trial.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your lover suffered minor injuries from the trial, but nothing a poultice or two cannot heal. The mind trauma will take a little longer to heal, however.
</p>
<<else>>
<p>
It seems the trial was not kind to <<rep $g.lover>>. <<They $g.lover>> looks terrible, with bruises and cuts everywhere, not to mention the look in <<their $g.lover>> face.
</p>
<</if>>
<<set _father = $unit.player>>
<<set _mother = $g.parent>>
<<if !_father.isHasDick()>>
<<set _mother = $unit.player>>
<<set _father = $g.parent>>
<</if>>
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<if Math.random() < 0.5>>
<<set _preference = $settings.getGenderPreference(setup.job.slave)>>
<</if>>
<<set _w = setup.UnitBirth.generateChild(_father, _mother, _preference)>>
<p>
All these time however, your <<repfull $g.parent>> was nowhere to be seen. Unknown to you, <<rep $g.parent>> observed a stranger but very familiar stranger showing deep concern overlooking the entire thing unfolds. <<rep $g.parent>> <<uadv $g.parent>> sneaked into the stranger, before launching a surprise leap into <<them _w>>.
<<rep $g.parent>> managed to grope <<their _w>> <<ubreasts _w>> before removing the assailant's hood, revealing <<their _w>> face. To <<rep $g.parent>>'s shock, it deep resembles
<<if _w.getRace() == $unit.player.getRace()>>
you, as if <<they _w>> is your own child. But <<rep $g.parent>> can also see traces of <<their $g.parent>> own face there.
<<else>>
<<their $g.parent>> own, as if <<they _w>> is <<their $g.parent>> own child. <<rep $g.parent>> could also see traces of you (yes, you) in the assailant's face.
<</if>>
But what could this mean?
</p>
<p>
Unfortunately, the assailant used the distraction to break free of your <<urace $g.parent>> slaver's hold, before escaping in a gusto, leaving you and <<rep $g.parent>> with this very odd conundrum.
</p>
<p>
You were about to just shrug all of it as a coincidence before <<rep $g.parent>> insisted that this is far from it. In fact, <<they $g.parent>> suggested you to go back to a certain wizard in the southern seas, who may actually know the answer to this conundrum. You sighed, knowing that the wizard's services won't come cheap...
</p>
<<run setup.qc.QuestDirect('price_for_conundrum', {child: 'child'}).apply(
setup.costUnitHelper(_w)
)>><<run new setup.QuestTemplate(
'the_legendary_mason', /* key */
"The Legendary Mason", /* Title */
"darko", /* Author */
[ 'vale',
'veteran',
'upgrade'
], /* tags */
4, /* weeks */
10, /* quest expiration weeks */
{ /* roles */
'builder1': setup.qu.builder,
'builder2': setup.qu.builder,
'planner': setup.qu.planner, },
{ /* actors */
'master': setup.unitgroup.all, },
[ /* costs */
],
'Quest_the_legendary_mason',
setup.qdiff.hardest52, /* difficulty */
[ /* outcomes */
[
'Quest_the_legendary_masonCrit',
[
],
], [
'Quest_the_legendary_masonCrit',
[
],
], [
'Quest_the_legendary_masonCrit',
[
],
], [
'Quest_the_legendary_masonCrit',
[
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 50],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Cooldown(40), ],
)>><p>
You have heard that a master mason lived somewhere on the <<lore region_vale>>. The mason was rumored to have an unmatched skill at building —- they say that the mason guided the construction of several forts which was completed all in record time.
</p>
<p>
Your fort could use some upgrading. Perhaps you can find and invite the mason to help you fix up your fort for less money than usual? You will still need to provide the labor, however —- make sure they are suitable for the job!
</p>
<p>
<<successtext 'Important'>>: This quest can only appear once every 40 weeks. <<dangertext 'Be warned'>> that this quest can drain your treasury extremely fast without warning!
</p><p>
The mason is a <<uadj $g.master>> <<man $g.master>> —- Upon seeing <<rep $g.builder1>>'s experienced <<ubody $g.builder1>>, the mason is intrigued and agreed to come over to your fort and see what magic <<they $g.builder1>> can work on.
</p>
<<set _fort = $fort.player.getBuilding(setup.buildingtemplate.fort)>>
<<if _fort.getLevel() == _fort.getTemplate().getMaxLevel()>>
<p>
The mason is in awe of your magnificent, and
<<successtext 'fully upgraded'>> fort.
But that means there was nothing for the mason to improve on,
and after taking notes <<they $g.master>> left your fort without any fanfare.
</p>
<<else>>
<p>
As <<they $g.master>> walked around, the mason commented numerous places that can be easily improved upon. <<They $g.master>> moved around the battlements of your fort with inhuman speed, and your slavers struggled to catch up. Along the way the mason made many comments on possible improvements
<<if $gOutcome == 'crit'>>
which <<rep $g.planner>> deftly take note of.
<<elseif $gOutcome == 'success'>>
which <<rep $g.planner>> took note of.
<<elseif $gOutcome == 'failure'>>
which <<rep $g.planner>> struggled to take note of.
<<elseif $gOutcome == 'disaster'>>
which <<rep $g.planner>> failed to take note of.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
At the end of the day, <<rep $g.planner>>'s notes were full with possible improvements. Over the next few weeks, with the mason's guidance your able slavers <<rep $g.builder1>> and <<rep $g.builder2>> were able to made major improvements to your fort, improving it greatly at only a third of the usual cost.
</p>
<<elseif $gOutcome == 'success'>>
<p>
At the end of the day, <<rep $g.planner>>'s notes were full of scribbles —- some unreadable —- of the possible improvements. Over the next few weeks, with the mason's guidance your able slavers <<rep $g.builder1>> and <<rep $g.builder2>> were able to significantly improve your fort at only half of the usual cost.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
At the end of the day, <<rep $g.planner>> were unable to learn much from the mason. Over the next few weeks, the mason single-handed guided your slavers, who struggled to follow <<their $g.master>> orders. Still, the mason is a master of <<their $g.master>> job and <<rep $g.builder1>> and <<rep $g.builder2>> were still able to improve your fort at only three quarters the usual cost.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
At the end of the day, <<rep $g.planner>> were unable to learn much from the mason. Disappointed at your slavers' lack of enthusiasm, the mason left your fort the same night. Over the next few weeks, your slavers tried to fix your fort as best as they can, but instead their sloppy work caused much damage to the fort, destroying a significant chunk of it. You will need to have your fort repaired and your slavers reprimanded later.
</p>
<</if>>
/* This quest has a special reward that's given here instead */
<<if $gOutcome == 'disaster'>>
<<if _fort.getLevel() > 1>>
<<run _fort.downgrade()>>
<</if>>
<<else>>
<<set _oldmoney = $company.player.getMoney()>>
<<run _fort.upgrade()>>
<<set _cost = _oldmoney -$company.player.getMoney()>>
<<if $gOutcome == 'crit'>>
<<run $company.player.addMoney(Math.round(_cost * 2 / 3))>>
<<elseif $gOutcome == 'success'>>
<<run $company.player.addMoney(Math.round(_cost / 2))>>
<<elseif $gOutcome == 'failure'>>
<<run $company.player.addMoney(Math.round(_cost / 4))>>
<</if>>
<</if>>
<</if>><<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformation__gluttony', /* key */
"The Seven Deadly Transformation: Gluttony", /* Title */
"darko", /* Author */
[ 'transformation',
'vale',
'trait',
'prep'
], /* tags */
1, /* weeks */
6, /* expiration weeks */
{ /* roles */
'wizard': setup.qu.arcanewater,
'convincer': setup.qu.convincer,
'trainer': setup.qu.slavetrainer,
'fated': _criteriafated, },
{ /* actors */
'seer': setup.unitgroup.vale_all, },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__gluttony',
setup.qdiff.hard16, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__gluttonyCrit',
[
setup.qc.TraitReplace('fated', setup.trait.tail_werewolf),
setup.qc.MoneyNormal(),
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_oral_basic), ],
], [
'Quest_the_seven_deadly_transformation__gluttonySuccess',
[
setup.qc.TraitReplace('fated', setup.trait.tail_werewolf),
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_oral_basic), ],
], [
'Quest_the_seven_deadly_transformation__gluttonyFailure',
[
],
], [
'Quest_the_seven_deadly_transformation__gluttonyDisaster',
[
setup.qc.MoneyCustom(-1500), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('seven_deadly_transformation'),
setup.qres.NoTrait(setup.trait.tail_werewolf),
]),
],
)>><<set _headunit = setup.getUnit({job: setup.job.slave, title: "seven_deadly_transformation"})>>
<<if !_headunit>>
<<dangertext "Due to your company missing a slave important for this quest, this quest is no longer able to be completed.">>
<<else>>
<p>
Your company has been contacted by a seer from the <<lore region_vale>>, apparently in regard to one of your slaves <<rep _headunit>>. The seer preclaimed that <<they $g.seer>> foresees the great destiny awaiting <<rep _headunit>>, and implored your company to release <<them _headunit>> to allow <<them _headunit>> to fulfill <<their _headunit>> destiny to head north into the werewolf encampments.
</p>
<p>
You cunningly pressed for as much details as possible, before actually refusing by your right the release of such a potentially valuable slave. Although you now know all the required details in order to help <<rep _headunit>> advance their journey: In the cold <<lore region_vale>> where the werewolf dwells, <<rep _headunit>> must find a food so delicious as so new that <<they _headunit>> can not help but crave for it as long as <<they _headunit>> live.
</p>
<p>You can bring <<rep _headunit>> together with a group of slavers to search for this legendary dish. Perhaps this will increase the overall value of the slave.</p>
<p>
Or, the seer could just tell you hogwash to earn <<them $g.seer>> some coin.
</p>
<</if>><p>
Your slavers made <<rep $g.fated>> try all the possible northern dishes they can think off —- grilled wild board, roasted salmon, and even lizard steak but nothing seems to trigger any meaningful response from <<rep $g.fated>>. That is, until
<<rep $g.wizard>> <<uadv $g.wizard>> came up with the idea that perhaps it is something related to the weres living on the north, instead of a dish in the northern areas.</p>
<p>
Your slavers scoured the <<lore region_vale>> for a relatively friendly werewolf camp. They finally found one led by an elderly werewolf —- as a gesture of goodwill, they lent <<rep $g.fated>> to be used by the encampment while they talk to the elder. The elder suggested various dishes but during the discussion, something strange occurs as a blinding light came out from where <<rep $g.fated>> is located. There, <<rep $g.fated>> shone brightly while deepthroating a werewolf's dick, and before your slavers' eyes, a werewolf tail grow out of their rear.
After the tail fully grown and the werewolf withdrawn his cock from the slave's mouth, <<rep $g.fated>> fell to the ground with a satisfied look at <<their $g.fated>> face, licking the leftover cum from <<their $g.fated>> lips.
</p>
<p>
It seems your slavers have somehow helped advance <<rep $g.fated>>'s destiny. Perhaps this "prophecy" is not a complete hogwash. For such a good fuck, your slavers were given several gifts by the werewolf tribe.
</p><p>
Your slavers made <<rep $g.fated>> try all the possible northern dishes they can think off —- grilled wild board, roasted salmon, and even lizard steak but nothing seems to trigger any meaningful response from <<rep $g.fated>>. That is, until
<<rep $g.wizard>> <<uadv $g.wizard>> came up with the idea that perhaps it is something related to the weres living on the north, instead of a dish in the northern areas.</p>
<p>
Your slavers scoured the <<lore region_vale>> for a relatively friendly werewolf camp. They finally found one led by an elderly werewolf —- as a gesture of goodwill, they lent <<rep $g.fated>> to be used by the encampment while they talk to the elder. The elder suggested various dishes but during the discussion, something strange occurs as a blinding light came out from where <<rep $g.fated>> is located. There, <<rep $g.fated>> shone brightly while deepthroating a werewolf's dick, and before your slavers' eyes, a werewolf tail grow out of their rear.
After the tail fully grown and the werewolf withdrawn his cock from the slave's mouth, <<rep $g.fated>> fell to the ground with a satisfied look at <<their $g.fated>> face, licking the leftover cum from <<their $g.fated>> lips.
</p>
<p>
It seems your slavers have somehow helped advance <<rep $g.fated>>'s destiny. Perhaps this "prophecy" is not a complete hogwash.
</p><p>
Your slavers made <<rep $g.fated>> try all the possible northern dishes they can think off —- grilled wild board, roasted salmon, and even lizard steak but nothing seems to trigger any meaningful response from <<rep $g.fated>>.</p>
<p>Your slavers eventually run out of ideas and decided to head back home. Perhaps they can try again sometime.</p><p>
Your slavers made <<rep $g.fated>> try all the possible northern dishes they can think off —- grilled wild board, roasted salmon, and even lizard steak but nothing seems to trigger any meaningful response from <<rep $g.fated>>.</p>
<p>Your slavers even tried some of the more expensive food, which still trigger no response from <<rep $g.fated>>. After wasting much of your money, your slavers eventually run out of ideas and decided to head back home. Perhaps they can try again sometime, maybe with less money.</p><<run new setup.Title(
'seven_deadly_transformation', /* key */
"Chosen One", /* name */
'A self-proclaimed chosen one preordained to fulfilling an important destiny', /* name */
'is the chosen one preordained to fulfill an important destiny',
0, /* slave value */
{
},
)>>
<<run new setup.UnitGroup(
'quest_the_seven_deadly_transformations__sloth2',
"Fated One",
[
[setup.unitpool.race_humanvale_male, 0.16666666666666666],
[setup.unitpool.race_humanvale_female, 0.16666666666666666],
[setup.unitpool.race_humankingdom_male, 0.16666666666666666],
[setup.unitpool.race_humankingdom_female, 0.16666666666666666],
[setup.unitpool.race_humandesert_male, 0.16666666666666666],
[setup.unitpool.race_humandesert_female, 0.16666666666666666], ],
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_adventurer),
setup.qc.TraitReplace('unit', setup.trait.per_honorable),
setup.qc.AddTitle('unit', 'seven_deadly_transformation'),
setup.qc.AddHistory('unit', "receives a premonition about a great fate awaiting them and embarked on a journey."), ],
)>>
<<run new setup.QuestTemplate(
'the_seven_deadly_transformations__sloth', /* key */
"The Seven Deadly Transformations: Sloth", /* Title */
"darko", /* Author */
[ 'vale',
'transformation',
'unit'
], /* tags */
1, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'tank': setup.qu.tank,
'dps': setup.qu.dps,
'healer': setup.qu.healer, },
{ /* actors */
'fated': setup.unitgroup.quest_the_seven_deadly_transformations__sloth2, },
[ /* costs */
],
'Quest_the_seven_deadly_transformations__sloth',
setup.qdiff.hard7, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformations__slothCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Slave('fated', "was trying to fulfill their destiny but would have failed miserably without your company's help", undefined), ],
], [
'Quest_the_seven_deadly_transformations__slothSuccess',
[
setup.qc.Slave('fated', "was trying to fulfill their destiny but would have failed miserably without your company's help", undefined), ],
], [
'Quest_the_seven_deadly_transformations__slothFailure',
[
],
], [
'Quest_the_seven_deadly_transformations__slothDisaster',
[
setup.qc.Injury('tank', 1),
setup.qc.Injury('dps', 1),
setup.qc.Injury('healer', 1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, 1],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('seven_deadly_transformation'),
],
)>><p>
A new adventurer has arrived at the <<lore region_vale>>, and claimed to various taverns that <<they $g.fated>> have been preordained to fulfill a great destiny. Only, the adventurer seems to spend most of <<their $g.fated>> time in various taverns, cluelessly looking for a way to fulfill <<their $g.fated>> destiny. <<Their $g.fated>> behaviors are so un-herolike that even the tavern wenches refused to touch the alcohol-ridden adventurer.
</p>
<p>
You could send a group of slavers to help these taverns and capture the adventurer as a slave. Perhaps your company can even help <<them $g.fated>> fulfill their destiny —- although most likely <<they $g.fated>>'s just drunk and the destiny thing turns out to be nonsense.
</p>
<p>
Or, it could all just be rumors and the adventurer is a lie.
</p><p>
Your slavers found <<rep $g.fated>> lazily drinking in one of the taverns in a neighboring village. They <<uadv $g.tank>> waited until the adventurer left the village —- still drunk —- and your slavers made easy work of the adventurer. Tied and secured, your slavers brought the adventurer home after pawning most of <<their $g.fated>> belongings.
</p>
<p>
Perhaps this isn't the end of <<their $g.fated>> adventure, and you'll hear more as long as <<rep $g.fated>> remains your slave.
</p><p>
Your slavers found <<rep $g.fated>> lazily drinking in one of the taverns in a neighboring village. They <<uadv $g.tank>> waited until the adventurer left the village —- still drunk —- and your slavers made easy work of the adventurer. Tied and secured, your slavers brought the adventurer home.
</p>
<p>
Perhaps this isn't the end of <<their $g.fated>> adventure, and you'll hear more as long as <<rep $g.fated>> remains your slave.
</p><p>
Your slavers were unfortunate for by the time they reached the tavern, the adventurer was already nowhere to be seen. But adventurers such as these are dimes in a dozen, and there are no doubt you'll see more of them coming up in the vale.
</p><p>
Your slavers were unfortunate for by the time they reached the tavern, the adventurer was already nowhere to be seen. But adventurers such as these are dimes in a dozen, and there are no doubt you'll see more of them coming up in the vale.
</p>
<p>
Oh the way back, your slavers were ambushed by road bandits and suffered minor injuries.
</p><<set setup.questtemplate = {}>>
<<include InitQuestTemplateIntro>>
<<include InitQuestTemplateVale>>
<<include InitQuestTemplateForest>>
<<include InitQuestTemplateCity>>
<<include InitQuestTemplateDesert>>
<<include InitQuestTemplateSea>>
<<include InitQuestTemplateSpecial>>
<<include InitQuestTemplateScout>>
<<include InitQuestTemplateUnitTraining>>
<<include InitQuestTemplateFleshShape>>
<<include InitQuestTemplateSlaverTraining>>
<<include InitQuestTemplateSurgery>>
<<include InitQuestTemplateCorruption>>
<<include InitQuestTemplatePurify>>
<<include InitQuestTemplateTreatment>>
<<include InitQuestTemplateCustom>>
<<set _passages = Story.lookup('tags', 'quest')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>
/* Special quest pool containing only veteran quests */
<<run new setup.QuestPool('veteran', 'Veteran Quests')>>
<<set _basequestpools = [
setup.questpool.vale,
setup.questpool.forest,
setup.questpool.city,
setup.questpool.desert,
setup.questpool.sea,
]>>
<<set _done = {}>>
<<for _qp range _basequestpools>>
<<for _q range _qp.getAllQuestsAndOpportunities()>>
<<if _q[0].getTags().includes('veteran')>>
<<if !(_q[0].key in _done)>>
<<set _done[_q[0].key] = true>>
<<if _q[0].TYPE == 'quest'>>
<<run setup.questpool.veteran.registerQuest(_q[0], _q[1])>>
<<else>>
<<run setup.questpool.veteran.registerOpportunity(_q[0], _q[1])>>
<</if>>
<</if>>
<</if>>
<</for>>
<</for>><<include 'QuestSetupBountyHuntSlime'>>
<<include 'QuestSetupPetContest'>>
<<include 'QuestSetupTradingMissionCity'>>
<<include 'QuestSetupMilkFactoryKidnapMale'>>
<<include 'QuestSetupMilkFactoryKidnapFemale'>>
<<include 'QuestSetupMilkFactoryRaid'>>
<<include 'QuestSetupWhoreSquare'>>
<<include 'QuestSetupGiftExchange'>>
<<include 'QuestSetupAcademyOfWind'>>
<<include 'QuestSetupToBeAKnight'>>
<<include 'QuestSetupDamselInDistressSave'>>
<<include 'QuestSetupDamselInDistressKidnap'>>
<<include 'QuestSetupHeadHunter'>>
<<include 'QuestSetupCrimsonRobber'>>
<<include 'QuestSetupFatefulAuction'>>
<<include 'QuestSetupWhoreOfMinistration'>>
<<include 'QuestSetupFineDining'>>
<<include 'QuestSetup_community_service'>>
<<include 'QuestSetup_light_in_the_darkness__recruit'>>
<<include 'QuestSetup_light_in_the_darkness__enslave'>>
<<include 'QuestSetup_the_rear_deal'>>
<<include 'QuestSetup_snake_oil_salesman'>>
<<include 'QuestSetup_seasonal_cleaning'>>
<<include 'QuestSetup_seasonal__cleaning_'>>
<<include 'QuestSetup_seasonal_training'>>
<<include 'QuestSetup_pet_shop_of_wonders'>>
<<include 'QuestSetup_pet_shop_of_woes'>>
<<include 'QuestSetup_training_as_a_service'>>
<<include 'QuestSetup_inheritance_lottery'>>
<<include 'QuestSetup_heroic_passion'>>
<<include 'QuestSetup_the_bodyswap_experiment'>>
/* Author: Alberich */
<<include 'QuestSetup_the_sergeant_s_wedding___poetic_justice'>>
<<include 'QuestSetup_caged_tomato'>><<include QuestSetupSlaveCorruptAll>>
<<include QuestSetupSlaveCorruptEyes>>
<<include QuestSetupSlaveCorruptEars>>
<<include QuestSetupSlaveCorruptMouth>>
<<include QuestSetupSlaveCorruptBody>>
<<include QuestSetupSlaveCorruptArms>>
<<include QuestSetupSlaveCorruptLegs>>
<<include QuestSetupSlaveCorruptTail>>
<<include QuestSetupSlaveCorruptWings>>
<<include QuestSetupSlaveCorruptDick>>
<<include QuestSetupSlaverCorruptAll>>
<<include QuestSetupSlaverCorruptEyes>>
<<include QuestSetupSlaverCorruptEars>>
<<include QuestSetupSlaverCorruptMouth>>
<<include QuestSetupSlaverCorruptBody>>
<<include QuestSetupSlaverCorruptArms>>
<<include QuestSetupSlaverCorruptLegs>>
<<include QuestSetupSlaverCorruptTail>>
<<include QuestSetupSlaverCorruptWings>>
<<include QuestSetupSlaverCorruptDick>><<include 'QuestSetupBountyHuntMinotaur'>>
<<include 'QuestSetupDeliveryService'>>
<<include 'QuestSetup_shepherd_of_men_steal'>>
<<include 'QuestSetup_shepherd_of_men_raid'>>
<<include 'QuestSetup_shepherd_of_men_capture'>>
<<include 'QuestSetup_trading_mission_desert'>>
<<include 'QuestSetup_orcish_bait'>>
<<include 'QuestSetup_a_bargainatany_price'>>
<<include 'QuestSetup_desert_purifiers_enslave'>>
<<include 'QuestSetup_desert_purifiers_patron2'>>
<<include 'QuestSetup_desert_purifiers_recruit'>>
<<include 'QuestSetup_raid_desert_settlement'>>
<<include 'QuestSetup_rescuefor_profit'>>
<<include 'QuestSetup_ruin_raider2'>>
<<include 'QuestSetup_mist_merge_complete23'>>
<<include 'QuestSetup_mist_merge_disrupt2'>>
<<include 'QuestSetup_orcish_festival'>>
<<include 'QuestSetup_milking_season'>>
<<include 'QuestSetup_capturethe_protagonist'>>
<<include 'QuestSetup_from_beyond'>>
<<include 'QuestSetup_mobile_brothel'>>
<<include 'QuestSetup_loot_the_loot'>>
<<include 'QuestSetup_capital_of_slaves__browse_wares'>>
<<include 'QuestSetup_capital_of_slaves__sell_wares'>>
<<include 'QuestSetup_capital_of_slaves__steal_wares'>>
<<include 'QuestSetup_raid_the_mist'>>
<<include 'QuestSetup_mansion_of_hypnotism'>>
<<include 'QuestSetup_the_seven_deadly_transformation__wrath'>>
<<include 'QuestSetup_the_seven_deadly_transformation__envy'>>
<<include 'QuestSetup_heroic_showdown'>>
<<include 'QuestSetup_night_shift'>>
<<include 'QuestSetup_night_shift2'>>
<<include 'QuestSetup_night_shift23'>>
<<include 'QuestSetup_the_serial_bodyswapper'>>/* Flesh Shaping */
<<include QuestSetupFleshShapeBreastGrow>>
<<include QuestSetupFleshShapeBreastShrink>>
<<include QuestSetupFleshShapeDickGrow>>
<<include QuestSetupFleshShapeDickShrink>>
<<include QuestSetupFleshShapeBallsGrow>>
<<include QuestSetupFleshShapeBallsShrink>>
<<include QuestSetupFleshShapeMuscleGrow>>
<<include QuestSetupFleshShapeMuscleShrink>>
<<include QuestSetupFleshShapeHeightGrow>>
<<include QuestSetupFleshShapeHeightShrink>>
<<include QuestSetupFleshShapeAnusLoosen>>
<<include QuestSetupFleshShapeAnusTighten>>
<<include QuestSetupFleshShapeVaginaLoosen>>
<<include QuestSetupFleshShapeVaginaTighten>><<include 'QuestSetupBountyHuntAberration'>>
<<include 'QuestSetupTradingMissionForest'>>
<<include 'QuestSetupForbiddenFruit'>>
<<include 'QuestSetupNekoStatue'>>
<<include 'QuestSetup_raid_elven_forest'>>
<<include 'QuestSetup_eternal_youth2'>>
<<include 'QuestSetup_safari_zone_sell_slaves'>>
<<include 'QuestSetup_safari_zone_illegal_hunt2'>>
<<include 'QuestSetup_provisions_hunt'>>
<<include 'QuestSetup_healing_grove'>>
<<include 'QuestSetup_hunting_season'>>
<<include 'QuestSetup_catnapping'>>
<<include 'QuestSetup_the_fruit_of_sluttiness'>>
<<include 'QuestSetup_gorgon_cave__recruit'>>
<<include 'QuestSetup_gorgon_cave__raid'>>
<<include 'QuestSetup_the_honest_slaver'>>
<<include 'QuestSetup_the_seven_deadly_transformation__lust'>>
<<include 'QuestSetup_the_seven_deadly_transformation__greed'>>
<<include 'QuestSetup_tower_of_roses'>>
<<include 'QuestSetup_tower_of_roses2'>>
<<include 'QuestSetup_tower_of_roses__true_love'>>
<<include 'QuestSetup_tower_of_roses__fatal_attraction'>>
<<include 'QuestSetup_heroic_guidance'>>
<<include 'QuestSetup_what_it_means_to_be_a_hero'>>
<<include 'QuestSetup_rescue_ranger'>><<include 'QuestSetupEstablishBase'>><<include QuestSetupPurifyAll>>
<<include QuestSetupPurifyEyes>>
<<include QuestSetupPurifyEars>>
<<include QuestSetupPurifyMouth>>
<<include QuestSetupPurifyBody>>
<<include QuestSetupPurifyLegs>>
<<include QuestSetupPurifyArms>>
<<include QuestSetupPurifyTail>>
<<include QuestSetupPurifyDick>>
<<include QuestSetupPurifyWings>><<include QuestSetupScoutVale>>
<<include QuestSetupScoutForest>>
<<include QuestSetupScoutCity>>
<<include QuestSetupScoutDesert>>
<<include QuestSetupScoutSea>>
<<include QuestSetupValeContact>>
<<include QuestSetupForestContact>>
<<include QuestSetupCityContact>>
<<include QuestSetupDesertContact>>
<<include QuestSetupSeaContact>>
<<include 'QuestSetupRecruitment'>>
<<include 'QuestSetupRecruitmentVale'>>
<<include 'QuestSetup_friendsofthe_forest'>>
<<include 'QuestSetupRecruitmentDesert'>>
<<include 'QuestSetupRecruitmentSea'>><<include 'QuestSetupBountyHuntKraken'>>
<<include 'QuestSetup_journey_to_atlantis'>>
<<include 'QuestSetup_pirates_ahoy'>>
<<include 'QuestSetup_outcasts_of_dragons'>>
<<include 'QuestSetup_alchemist_of_the_seven_seas'>>
<<include 'QuestSetup_trading_mission__southern_seas'>>
<<include 'QuestSetup_king_of_dragons'>>
<<include 'QuestSetup_raid__beyond_the_southern_seas'>>
<<include 'QuestSetup_the_seven_deadly_transformation__pride'>>
<<include 'QuestSetup_the_seven_deadly_transformation__pride2'>>
<<include 'QuestSetup_the_seven_deadly_transformation__beginnings'>>
<<include 'QuestSetup_mastery_of_magic'>>
/* Author: Alberich */
<<include 'QuestSetup_seaborne_rescue___it_has_to_be_you'>>/* Flesh Shaping */
<<include QuestSetupSlaverTrainingCatchUp>><<include 'QuestSetup_heroic_end'>>
/* Recapture quests */
<<include 'QuestSetup_desperate_escapade'>>
<<include 'QuestSetup_mindbroken_escapade'>>
<<include 'QuestSetup_just_like_trained'>>
<<include 'QuestSetup_cunning_escapade'>>
<<include 'QuestSetup_daring_escapade'>>/* Flesh Shaping */
<<include QuestSetupSurgeryBreastGrow>>
<<include QuestSetupSurgeryBreastShrink>>
<<include QuestSetupSurgeryDickGrow>>
<<include QuestSetupSurgeryDickShrink>>
<<include QuestSetupSurgeryBallsGrow>>
<<include QuestSetupSurgeryBallsShrink>>
<<include QuestSetupSurgeryMuscleGrow>>
<<include QuestSetupSurgeryMuscleShrink>>
<<include QuestSetupSurgeryHeightGrow>>
<<include QuestSetupSurgeryHeightShrink>>
<<include QuestSetupSurgeryAnusLoosen>>
<<include QuestSetupSurgeryAnusTighten>>
<<include QuestSetupSurgeryVaginaLoosen>>
<<include QuestSetupSurgeryVaginaTighten>><<include QuestSetupTreatmentHealBasic>>
<<include QuestSetupTreatmentHealAdvanced>>
<<include QuestSetupTreatmentResetLevel>>
<<include QuestSetupTreatmentBlank>>
<<include QuestSetupTreatmentMindMend>>
<<include QuestSetupTreatmentForget>>
<<include QuestSetupTreatmentLove>>
<<include QuestSetupTreatmentLoveTrue>>
<<include QuestSetupTreatmentHate>>
<<include QuestSetupTreatmentTransformation>><<include QuestSetupUnitTrainingMindbreak>>
<<include QuestSetupUnitTrainingDominanceBasic>>
<<include QuestSetupUnitTrainingDominanceAdvanced>>
<<include QuestSetupUnitTrainingDominanceMaster>>
<<include QuestSetupUnitTrainingPonyBasic>>
<<include QuestSetupUnitTrainingPonyAdvanced>>
<<include QuestSetupUnitTrainingPonyMaster>>
<<include QuestSetupUnitTrainingPetBasic>>
<<include QuestSetupUnitTrainingPetAdvanced>>
<<include QuestSetupUnitTrainingPetMaster>>
<<include QuestSetupUnitTrainingToiletBasic>>
<<include QuestSetupUnitTrainingToiletAdvanced>>
<<include QuestSetupUnitTrainingToiletMaster>>
<<include QuestSetupUnitTrainingMasochistBasic>>
<<include QuestSetupUnitTrainingMasochistAdvanced>>
<<include QuestSetupUnitTrainingMasochistMaster>>
<<include QuestSetupUnitTrainingEdgingBasic>>
<<include QuestSetupUnitTrainingEdgingAdvanced>>
<<include QuestSetupUnitTrainingEdgingMaster>>
<<include QuestSetupUnitTrainingHornyBasic>>
<<include QuestSetupUnitTrainingHornyAdvanced>>
<<include QuestSetupUnitTrainingHornyMaster>>
<<include QuestSetupUnitTrainingSissyBasic>>
<<include QuestSetupUnitTrainingSissyAdvanced>>
<<include QuestSetupUnitTrainingSissyMaster>>
<<include QuestSetupUnitTrainingVaginaBasic>>
<<include QuestSetupUnitTrainingVaginaAdvanced>>
<<include QuestSetupUnitTrainingVaginaMaster>>
<<include QuestSetupUnitTrainingAnalBasic>>
<<include QuestSetupUnitTrainingAnalAdvanced>>
<<include QuestSetupUnitTrainingAnalMaster>>
<<include QuestSetupUnitTrainingOralBasic>>
<<include QuestSetupUnitTrainingOralAdvanced>>
<<include QuestSetupUnitTrainingOralMaster>>
<<include QuestSetupUnitTrainingEnduranceBasic>>
<<include QuestSetupUnitTrainingEnduranceAdvanced>>
<<include QuestSetupUnitTrainingEnduranceMaster>>
<<include QuestSetupUnitTrainingDomesticBasic>>
<<include QuestSetupUnitTrainingDomesticAdvanced>>
<<include QuestSetupUnitTrainingDomesticMaster>>
<<include QuestSetupUnitTrainingObedienceBasic>>
<<include QuestSetupUnitTrainingObedienceAdvanced>>
<<include QuestSetupUnitTrainingObedienceMaster>>
<<include QuestSetupUnitTrainingConvince>>
<<include QuestSetupUnitTrainingBrainwashing>><<include 'QuestSetupBountyHuntWolf'>>
<<include 'QuestSetupKidnapYouNot'>>
<<include 'QuestSetupBoxForSale'>>
<<include 'QuestSetupMilitiaMatters'>>
<<include 'QuestSetupWerewolfWaylay'>>
<<include 'QuestSetupSexualHealing'>>
<<include 'QuestSetupFuckholeFair'>>
<<include 'QuestSetupHumanVsWereDefense'>>
<<include 'QuestSetupHumanVsWereOffense'>>
<<include 'QuestSetupQuestingSquire'>>
<<include 'QuestSetupQuestingKnight'>>
<<include 'QuestSetupFleshShaperTempleRecruit'>>
<<include 'QuestSetupFleshShaperTempleKidnap'>>
<<include 'QuestSetupFleshShaperTempleRaid'>>
<<include 'QuestSetup_future_sight'>>
<<include 'QuestSetup_the_seven_deadly_transformations__sloth'>>
<<include 'QuestSetup_the_seven_deadly_transformation__gluttony'>>
<<include 'QuestSetup_heroic_beginnings'>>
<<include 'QuestSetup_the_legendary_mason'>>
<<include 'QuestSetup_a_most_dangerous_animal'>><<set setup.questpool = {}>>
/* Generic */
<<run new setup.QuestPool('vale', 'Northern Vale')>>
<<run new setup.QuestPool('forest', 'Western Forests')>>
<<run new setup.QuestPool('city', 'Kingdom Capital Lucgate')>>
<<run new setup.QuestPool('desert', 'Eastern Wasteland')>>
<<run new setup.QuestPool('sea', 'Southern Seas')>>
/* scouting */
<<run new setup.QuestPool('scoutvale', 'Leads on the Northern Vale')>>
<<run new setup.QuestPool('scoutcity', 'Leads on the Kingdom Capital Lucgate')>>
<<run new setup.QuestPool('scoutforest', 'Leads on the Western Forests')>>
<<run new setup.QuestPool('scoutdesert', 'Leads on the Eastern Wasteland')>>
<<run new setup.QuestPool('scoutsea', 'Leads on the Southern Seas')>>
/* duties/contacts */
<<run new setup.QuestPool('recruitment', 'Recruitment (All)')>>
<<run new setup.QuestPool('recruitmentvale', 'Recruitment (Vale)')>>
<<run new setup.QuestPool('recruitmentforest', 'Recruitment (Forest)')>>
<<run new setup.QuestPool('recruitmentdesert', 'Recruitment (Desert)')>>
<<run new setup.QuestPool('recruitmentsea', 'Recruitment (Sea)')>>
<<run new setup.QuestPool('training', 'Training Missions')>>
<<run new setup.QuestPool('rescue', 'Rescue Missions')>>
<<run new setup.QuestPool('escapeeasy', 'Escaped Slaves Recapture Missions (Easy: Lv 15 - 25)')>>
<<run new setup.QuestPool('escapemedium', 'Escaped Slaves Recapture Missions (Medium: Lv 35 - 50)')>>
<<run new setup.QuestPool('escapehard', 'Escaped Slaves Recapture Missions (Hard: Lv 50 - 70)')>>
<<run new setup.QuestPool('capturedeasy', 'Captured Slaver Recapture Missions (Easy: Lv 15 - 25)')>>
<<run new setup.QuestPool('capturedmedium', 'Captured Slaver Recapture Missions (Medium: Lv 35 - 50)')>>
<<run new setup.QuestPool('capturedhard', 'Captured Slaver Recapture Missions (Hard: Lv 50 - 70)')>><<set setup.speech = {}>>
<<run new setup.Speech(
'friendly',
'Friendly',
'Pleasant to others',
[
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.bg_informer,
setup.trait.bg_priest,
setup.trait.bg_healer,
setup.trait.bg_merchant,
setup.trait.per_gregarious,
setup.trait.per_generous,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.per_submissive,
],
)>>
<<run new setup.Speech(
'bold',
'Bold',
'Held themselves in high regards',
[
setup.trait.bg_seaman,
setup.trait.bg_knight,
setup.trait.per_loyal,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.per_stubborn,
setup.trait.per_active,
],
)>>
<<run new setup.Speech(
'cool',
'Cool',
'Speaks only when needed',
[
setup.trait.bg_woodsman,
setup.trait.bg_boss,
setup.trait.bg_assassin,
setup.trait.bg_monk,
setup.trait.bg_hunter,
setup.trait.per_honest,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_calm,
setup.trait.per_serious,
],
)>>
<<run new setup.Speech(
'witty',
'Witty',
'Also come up with the worst puns',
[
setup.trait.bg_scholar,
setup.trait.bg_adventurer,
setup.trait.bg_entertainer,
setup.trait.per_thrifty,
setup.trait.per_deceitful,
setup.trait.per_logical,
setup.trait.per_playful,
setup.trait.per_curious,
setup.trait.per_studious,
setup.trait.per_attentive,
],
)>>
<<run new setup.Speech(
'debauched',
'Debauched',
'Life is entertainment',
[
setup.trait.bg_slaver,
setup.trait.bg_pirate,
setup.trait.bg_raider,
setup.trait.bg_thug,
setup.trait.bg_demon,
setup.trait.bg_whore,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.per_dominant,
],
)>>
<<include 'InitSpeechTexts'>><<set setup.SPEECH_ADVERBS = {
friendly: [
'cordially', 'pleasantly', 'warmly', 'amiably', 'affably',
'congenially', 'gregariously', 'hospitably', 'openly', 'kindly',
'amicably', 'cordially', 'agreeably', 'obligingly', 'delightfully',
],
bold: [
'angrily', 'proudly', 'arrogantly', 'vainly', 'smugly',
'pomposhly', 'haughtily', 'complacently', 'disdainfully', 'boastfully',
'irritably', 'forcefully', 'condescendingly', 'mightily', 'powerfully',
'boldly',
],
cool: [
'coolly', 'coldly', 'aloofly', 'remotely', 'distantly',
'solemnly', 'seriously', 'sternly', 'stoically', 'grimly',
'calmly', 'reservedly', 'plainly', 'neutrally', 'indifferently',
],
witty: [
'sarcastically', 'ridiculously', 'funnily', 'amusingly', 'humorously',
'comically', 'hilariously', 'wittily', 'absurdly', 'merrily',
'happily', 'jovially', 'lightheartedly', 'cheerfully', 'joyfully',
],
debauched: [
'debauchedly', 'depravedly', 'shamelessly', 'immorally', 'impurely',
'crazily', 'madly', 'insanely', 'brazenly', 'brashly',
'directly', 'transparently', 'unabashedly', 'pervertedly', 'deviantly',
],
}>><<include 'GameVersion'>>
<<set $gVersion = setup.VERSION>>
<<include 'Init' >><<include 'GameVersion'>>
<<run Config.history.maxStates = 3>>
<<set setup.INFINITY = 999999999999>>
<<set Config.saves.onSave = setup.onSave>>
<<set Config.saves.onLoad = setup.onLoad>>
<<script>>
/* Set description used by Save, for all passages, to give some decent information about game state. */
Config.passages.descriptions = function () {
const sv = State.variables;
if (sv.devtooltype) {
/* in dev tools */
if (sv.devtooltype == 'event') {
return `Dev Tool (event): ${sv.dtquest.name}`;
} else if (sv.devtooltype == 'quest') {
return `Dev Tool (quest): ${sv.dtquest.name}`;
} else if (sv.devtooltype == 'opportunity') {
return `Dev Tool (opportunity): ${sv.dtquest.name}`;
} else if (sv.devtooltype == 'interaction') {
return `Dev Tool (interaction): ${sv.dtquest.name}`;
} else {
throw `Unknown dev tool name: ${sv.devtooltype}`;
}
} else {
return sv.company.player.getName() + ", Week " + sv.calendar.getWeek() + ", " + sv.company.player.getMoney() + "g";
}
};
<</script>>
<<run setup.Cost.initConstructors()>>
<<run setup.Restriction.initConstructors()>>
<<run setup.SlaveOrderAddonBase.initConstructors()>>
<<include InitSkills>>
<<include InitTraits>>
<<include InitJobs>>
<<include InitTitle>>
<<include InitSpeech>>
<<include InitItemClass>>
<<include InitItem>>
<<include InitFurnitureSlot>>
<<include InitFurniture>>
<<include InitGenericQuestDifficulties>>
<<include InitQuestUnitRestrictions>>
<<include InitGenericUnitCriterias>>
<<include InitCompanyTemplate>>
<<include InitUnitPools>>
<<include InitUnitGroups>>
<<include InitEquipmentPool>>
<<include InitEquipmentSlot>>
<<include InitEquipment>>
<<include InitQuestPool>>
<<include InitContactTemplate>>
<<include InitDutyTemplates>>
<<include InitBuildingTemplate>>
<<include InitOpportunity>>
<<include InitCostHelper>>
<<include InitQuestTemplate>>
<<include InitUnitAction>>
<<include InitEvent>>
<<include InitInteraction>>
<<include InitBanter>>
<<include InitFamilyRelation>>
<<include InitLore>>
<!-- Init state -->
<<run setup.initState.call(State.variables)>>
<<set setup.INIT_DONE = true>><p>
Welcome to the Fort of Chains game.
The download link for
the latest version and the source code of this game can be found in
[[gitgud.io|https://gitgud.io/darkofocdarko/foc]].
Content submission, discussions and bug reports in [[subreddit|https://www.reddit.com/r/FortOfChains/]]
or [[Discord|https://discord.com/invite/PTD9D7mZyg]].
</p>
<p>
This game is designed to be a ''short-story-telling'' machine.
If you want to support this game,
you too are invited to add your stories to the game:
whenever you feel like it,
check out the GUI-based <<successtext 'Content Creation Tool'>> below.
''No programming knowledge whatsoever required.''
</p>
<p>
This game is a passion project and will <<successtext 'always be a free game'>>.
Contributing content is the preferred way to support this game --- you can contribute
story, code, art, anything [[(more information)|https://gitgud.io/darkofocdarko/foc]]!
If you really want to tip:
[[Patreon|'https://www.patreon.com/darkofoc']].
The game will ''never'' be locked behind any paywall.
</p>
<p>
This is a <b>TEXT-ONLY</b> game about sexual slavery, featuring
descriptions of explicit non-consensual sexual content. By proceeding, you consent that it
is legal for you to play this game.
The game is entirely fictional.
</p>
<<focmove "Artist Credits" "PortraitCredits">> ·
<<focmove "Author Credits" "AuthorCredits">> ·
<<focmove "Coder Credits" "CoderCredits">> ·
<<focmove "Other Credits" "OtherCredits">>
<hr/>
<<focmove "New Game" "ProloguePlayerGen">>
<br/>
<<link 'Content Creation Tool' 'DevToolLobby'>>
<<run setup.DebugInit.contentCreatorInit()>>
<<run $menufilter.set('unit', 'display', 'compact')>>
<</link>>
<br/>
<<link 'Debug Start'>>
<<run Config.history.maxStates = 3>>
<<run setup.DebugInit.debugModeInit()>>
<<focsavestategoto 'PrologueDebugGen'>>
<</link>>/* Adding trait may also entail editing:
default trait chance in unitpool.twee
*/
<<set setup.trait = {}>>
<<set setup.traitgroup = {}>>
<<include InitGenderTraits>>
<<include InitRaceTraits>>
<<include InitBgTraits>>
<<include InitPhysicalTraits>>
<<include InitPersonalityTraits>>
<<include InitSkillTraits>>
<<include InitEquipmentTraits>>
<<include InitTrainingTraits>>
<<include InitComputedTraits>>
<<include InitSkinTraits>>
<<include InitTraumaTraits>>
<<include InitTraitTexts>>
<<set setup.TraitHelper.TRAIT_MAIN_TAGS = [
'gender', 'race', 'bg', 'physical', 'per', 'skill', 'equipment', 'training', 'computed', 'skin', 'temporary' ]>>/* Description : xxx{description} */
<<set setup.TRAIT_TEXTS = {
/* =======================
RACE TRAITS
======================= */
race_humankingdom: {
noun: 'human',
},
race_humanvale: {
noun: 'northerner',
},
race_humandesert: {
noun: 'desertfolk',
},
race_humansea: {
noun: 'foreigner',
},
race_elf: {
noun: 'elf',
},
race_neko: {
noun: 'neko',
},
race_werewolf: {
noun: 'werewolf',
},
race_orc: {
noun: 'orc',
},
race_dragonkin: {
noun: 'dragonkin',
},
race_demon: {
noun: 'demon',
},
/* =======================
BACKGROUND TRAITS
======================= */
bg_royal: {
hobby: ["practicing intrigue for when a|they return to the court", ],
},
bg_boss: {
hobby: ["talking with some shady contacts in some corner of the fort", ],
},
bg_mythical: {
hobby: ["meditating in a deep trance", ],
},
bg_demon: {
hobby: ["grinning madly",],
},
bg_knight: {
hobby: [],
},
bg_adventurer: {
hobby: [],
},
bg_metalworker: {
hobby: ["crafting slave restraints", ],
},
bg_wildman: {
hobby: [],
},
bg_assassin: {
hobby: [],
},
bg_engineer: {
hobby: ["inventing new devices", ],
},
bg_scholar: {
hobby: ["organizing a|their books", ],
},
bg_noble: {
hobby: ["reminiscing about a|their royal past", ],
},
bg_healer: {
hobby: ["practicing a|their healing techniques", ],
},
bg_mystic: {
hobby: ["recharging a|their magical powers", ],
},
bg_courtesan: {
hobby: [],
},
bg_mercenary: {
hobby: ["counting a|their money", ],
},
bg_monk: {
hobby: ["meditating", ],
},
bg_hunter: {
hobby: ["hunting game", ],
},
bg_informer: {
hobby: [],
},
bg_slaver: {
hobby: ["breaking some slaves", ],
},
bg_artisan: {
hobby: ["making some trinkets", ],
},
bg_wiseman: {
hobby: [],
},
bg_priest: {
hobby: ["praying", ],
},
bg_apprentice: {
hobby: ["continuing a|their study of magic", ],
},
bg_artist: {
hobby: ["painting", ],
},
bg_soldier: {
hobby: ["doing weapon drills", ],
},
bg_pirate: {
hobby: [],
},
bg_laborer: {
hobby: [],
},
bg_woodsman: {
hobby: ["practicing a|their axe swing", ],
},
bg_thug: {
hobby: [],
},
bg_seaman: {
hobby: ["gazing towards the sea", ],
},
bg_nomad: {
hobby: [],
},
bg_thief: {
hobby: [],
},
bg_maid: {
hobby: [],
},
bg_raider: {
hobby: ["getting drunk", ],
},
bg_clerk: {
hobby: [],
},
bg_merchant: {
hobby: [],
},
bg_farmer: {
hobby: ["tending to a|their personal garden", ],
},
bg_entertainer: {
hobby: [],
},
bg_foodworker: {
hobby: ["cooking", ],
},
bg_whore: {
hobby: [],
},
bg_unemployed: {
hobby: [],
},
bg_slave: {
hobby: [],
},
/* =======================
PHYSICAL TRAITS
======================= */
muscle_extremelyweak: {
adjective: "atrophied",
description: "is so very weak <<they '${unit.key}'>> is forced to crawl most of the time to move around",
increase: '',
decrease: 'the muscles atrophied so much that you doubt <<they "${unit.key}">> can now stand on <<their "${unit.key}">> own',
adjbad: ['weak', ],
},
muscle_veryweak: {
adjective: "skinny",
description: "is extremely thin with bones visible at certain parts of their body",
increase: 'allowing them now to walk but not much else since <<they "${unit.key}">> remain emanciated',
decrease: '<<their "${unit.key}">> muscles are now so thin anyone can see <<their "${unit.key}">> bonus through <<their "${unit.key}">> skin',
adjbad: ['weak', ],
noungood: ['model-thin body', ]
},
muscle_weak: {
adjective: "slim",
description: "is pleasingly thin",
increase: 'now it no longer looks emanciated but rather pleasingly thin',
decrease: '<<their "${unit.key}">> body is now pleasingly thin for the eyes',
adjbad: ['weak', ],
noungood: ['slim body', ]
},
muscle_strong: {
adjective: "muscular",
description: "has a strong muscular body with rippling abs",
increase: '<<their "${unit.key}">> body now sports well-defined muscles in several places',
decrease: 'but still remaining a well muscled body',
adjgood: ['strong', 'powerful'],
noungood: ['strength', 'muscularity', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", ],
},
muscle_verystrong: {
adjective: "hugely muscular",
description: "has an extremely muscular body capable of superhuman strength feats",
increase: 'huge bulges of muscles covered <<their "${unit.key}">> body now',
decrease: 'making their muscles look less freakish and now just huge',
adjgood: ['strong', 'powerful'],
noungood: ['overwhelming strength', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", ],
},
muscle_extremelystrong: {
adjective: "freakishly muscular",
description: "has a freakishly muscular body with muscle covering every inch of their body",
increase: '<<their "${unit.key}">> body becoming freakishly muscular with huge bulges of muscles',
decrease: '',
adjgood: ['strong', 'powerful'],
noungood: ['extreme strength', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", ],
},
dick_tiny: {
adjective: "tiny",
description: "has a humiliatingly small dick",
increase: '',
decrease: 'reducing it to a mere few centimetres long',
},
dick_small: {
adjective: "small",
description: "has a small dick",
increase: 'although it still remain small even by human standards',
decrease: 'barely adequate to satiate most holes',
},
dick_medium: {
adjective: "average",
description: "has an average-sized dick",
increase: 'becoming a healthy normal-sized dick',
decrease: 'becoming a healthy normal-sized dick',
},
dick_large: {
adjective: "large",
description: "has a large dick",
increase: 'becoming a large imposing dick when erect',
decrease: 'but still remaining large',
noungood: ['large dick', 'large cock', ],
},
dick_huge: {
adjective: "huge",
description: "has a huge and long sizable dick",
increase: 'becoming a huge intimidating dick when erect',
decrease: 'but still remaining huge by human standards',
noungood: ['well-endowed dick', 'well-endowed cock', ],
},
dick_titanic: {
adjective: "titanic",
description: "has an enormously large dick",
increase: 'becoming monstrously large, guaranteed to tear away any hole it enters',
decrease: '',
noungood: ['gigantic dick', 'gigantic_cock', ],
},
balls_tiny: {
adjective: "tiny",
description: "has a barely visible pair of balls",
increase: '',
decrease: '<<their "${unit.key}">> balls now barely visible under <<their "${unit.key}">> dick',
},
balls_small: {
adjective: "small",
description: "has a small pair of balls",
increase: 'although it still remains small even by human standards',
decrease: '<<their "${unit.key}">> small balls now only capable of producing so much cum',
},
balls_medium: {
adjective: "medium",
description: "has an average-sized pair of balls",
increase: 'becoming a normal-sized balls comfortably hanging under <<their "${unit.key}">> dick',
decrease: 'becoming a normal-sized balls comfortably hanging under <<their "${unit.key}">> dick',
},
balls_large: {
adjective: "large",
description: "has a large pair of balls",
increase: 'it becomes a large pair of balls capable of producing a good amount of cum',
decrease: 'although the balls still remain large and healthy',
noungood: ['cum production', ],
},
balls_huge: {
adjective: "huge",
description: "has a huge pair of balls each the size of tennis balls",
increase: 'becoming a huge pair of balls full of cum hanging precariously under <<their "${unit.key}">> dick',
decrease: 'although it still remains huge',
noungood: ['overwhelming cum production', ],
},
balls_titanic: {
adjective: "titanic",
description: "has a gigantic pair of balls each the size of a watermelon",
increase: 'becoming monstrously large the size of a watermelon each',
decrease: '',
noungood: ['extreme cum production', ],
},
breast_tiny: {
adjective: "tiny",
description: "has a tiny almost mannish pair of breasts",
increase: '',
decrease: '<<their "${unit.key}">> breasts now barely visible and is almost mannish in appearance',
},
breast_small: {
adjective: "small",
description: "has a small cute pair of breasts",
increase: 'becoming tastefully small',
decrease: 'becoming a cute pair of small breasts',
noungood: ['cute bosoms', 'cute tits', ],
},
breast_medium: {
adjective: "medium",
description: "has an average-sized pair of breasts",
increase: 'becoming a medium-sized healthy-looking breasts',
decrease: 'becoming a medium-sized healthy-looking breasts',
noungood: ['shapely bosoms', 'shapely tits', ],
},
breast_large: {
adjective: "large",
description: "has a large pair of breasts",
increase: 'growing into a large pair of fluffy bosoms',
decrease: 'which fortunately still remains a large pair of bosoms',
noungood: ['ample bosoms', 'ample tits', ],
},
breast_huge: {
adjective: "huge",
description: "has a huge voluptuous pair of breasts",
increase: 'until it becomes a huge pair of breasts akin to a living pair of soft pillows',
decrease: 'but still remains a huge pair of living pillows',
noungood: ['bountiful bosoms', 'bountiful tits', ],
},
breast_titanic: {
adjective: "titanic",
description: "has a titanic pair of breasts capable of crushing unfortunate victims",
increase: 'the pair of breasts now menacingly threaten to crush anyone unfortunate to stand beneath them',
decrease: '',
noungood: ['pillowy bosoms', 'pillowy tits', ],
},
vagina_tight: {
adjective: "tight",
description: "has a very tight attractive vagina",
increase: '',
decrease: 'it tightens to an almost virgin-like condition',
},
vagina_loose: {
adjective: "loose",
description: "has a well-used vagina",
increase: 'it noticably loosen allowing easier access',
decrease: 'the previous gape closing slowly into a more normal-looking opening',
},
vagina_gape: {
adjective: "gaping",
description: "has a permanently gaping vagina",
increase: 'the hole no longer capable of closing and remains a permanent gape',
decrease: '',
},
anus_tight: {
adjective: "tight",
description: "has a very tight attractive anus",
increase: '',
decrease: 'it tightens to an almost unmolested condition',
},
anus_loose: {
adjective: "loose",
description: "has a well-used anus",
increase: 'it noticably loosen allowing easier access',
decrease: 'the previous gape closing slowly into a more normal-looking opening',
},
anus_gape: {
adjective: "gaping",
description: "has a permanently gaping anus",
increase: 'the hole no longer capable of closing and remains a permanent gape',
decrease: '',
},
face_hideous: {
adjective: "hideous",
description: "has a hideously ugly face that it took effort just to communicate with them",
increase: '',
decrease: 'the face is now painful to even look at',
adjbad: ['ugly', ],
},
face_ugly: {
adjective: "ugly",
description: "has an unattractive face",
increase: 'although it still remains ugly and unattractive',
decrease: 'making the face ugly and unattractive',
adjbad: ['ugly', ],
},
face_attractive: {
adjective: "attractive",
description: "has an attractive face",
increase: 'becoming a face that would attract attention from passerbies',
decrease: 'although it still retains quite a bit of attractiveness',
adjgood: ['attractive'],
noungoodmale: ['handsomeness', ],
noungoodfemale: ['beauty', ],
},
face_beautiful: {
adjective: "gorgeous",
description: "has a gorgeous face charming anyone <<they '${unit.key}'>> talk with",
increase: 'becoming the pinnacle of beauty by human standards',
decrease: '',
adjgood: ['gorgeous'],
noungoodmale: ['divine handsomeness', ],
noungoodfemale: ['divine beauty', ],
},
height_dwarf: {
adjective: "dwarf-short",
description: "is much shorter than normal and looks dwarven in appearance",
increase: '',
decrease: '<<their "${unit.key}">> height now barely half those of normal humans',
},
height_short: {
adjective: 'short',
description: "is shorter than normal",
increase: 'although they will still look up to most people',
decrease: '<<their "${unit.key}">> head now lies under the shoulders of most men',
},
height_tall: {
adjective: 'tall',
description: "is taller than most",
increase: '<<their "${unit.key}">> height now exceed most humans',
decrease: 'but they still remain tall compared to most',
},
height_giant: {
adjective: 'gigantic',
description: 'so very tall <<they "${unit.key}">> tower over other people',
increase: '',
decrease: 'but they still remain tall compared to most',
},
/* =======================
SKIN TRAITS
======================= */
corrupted: {
adjective: "corrupted",
description: "possesses a body corrupted by demonic influences",
},
eyes_neko: {
adjective: "cat-like",
noun: "pair of cat-like eyes that can see in the dark",
description: "possesses a pair of cat-like eyes that can see in the dark",
flavor: '<<Their "${unit.key}">> eyes allow <<them "${unit.key}">> to see in the dark.',
},
eyes_dragonkin: {
adjective: "draconic",
noun: "intimidating pair of draconic eyes",
description: "possesses intimidating pair of draconic eyes",
},
eyes_demon: {
adjective: "demonic",
noun: "pitch-black pair of demonic eyes",
description: "possesses pitch-black pair of demonic eyes",
flavor: "Non-demons that possess these eyes have difficulty seeing with them.",
},
ears_werewolf: {
adjective: "furry",
noun: "pointy ears that jut out of their heads",
description: "possesses pointy ears that jut out of their heads",
flavor: 'The bases of <<their "${unit.key}">> ears are fluffy to touch.',
},
ears_neko: {
adjective: "cat-like",
noun: "cat-like ears jutting out from their head",
description: "possesses cat-like ears jutting out from their head",
flavor: 'The ears responded on their own when scratched behind the ears.',
},
ears_elf: {
adjective: "elven",
noun: "sharp pointy ears",
description: "possesses sharp pointy ears",
flavor: "",
},
ears_dragonkin: {
adjective: "draconic",
noun: "fin-like ears",
description: "possesses fin-like ears",
flavor: "Overall, the ears have a fin-like shape.",
},
ears_demon: {
adjective: "demonic",
noun: "distored demonic ears",
description: "possesses distored demonic ears",
flavor: "",
},
mouth_werewolf: {
adjective: "werewolf",
noun: "dog-like muzzle in place of their mouth",
description: "possesses a dog-like muzzle in place of their mouth",
flavor: 'Instead of a normal human mouth, <<they "${unit.key}">> have a muzzle instead.',
},
mouth_neko: {
adjective: "stripey",
noun: "whiskers growing from their cheeks",
description: "possesses whiskers growing from their cheeks",
flavor: 'Several tiger-like whiskers grow from <<their "${unit.key}">> stripey cheeks.',
},
mouth_orc: {
adjective: "tusked",
noun: "tusks jutting out of their mouth",
description: "has tusks jutting out of their mouth",
flavor: 'Two sharp tusks jut out of <<their "${unit.key}">> mouth.',
},
mouth_dragonkin: {
adjective: "draconic",
noun: "draconic muzzle in place of their mouth",
description: "possesses a draconic muzzle in place of their mouth",
flavor: 'Instead of a normal human mouth, <<they "${unit.key}">> have a scaly and long snout instead.',
},
mouth_demon: {
adjective: "demonic",
noun: "demonic mouth complete with dextrous lengthy tongue",
description: "possesses a demonic mouth complete with dextrous lengthy tongue",
flavor: "It is not visible from the outside, but inside <<their '${unit.key}'>> mouth is an incredibly long and dextrous tongue.",
},
body_werewolf: {
adjective: "furry",
noun: "body covered in fur",
description: "possesses a body covered in fur",
flavor: "<<Their '${unit.key}'>> entire body is covered in thick fur that protects <<them '${unit.key}'>> from the cold.",
},
body_neko : {
adjective: "striped",
noun: "body covered in black tiger-like stripes",
description: "possesses a body covered in black tiger-like stripes",
flavor: "<<Their '${unit.key}'>> entire body is littered with black stripes that gives them a tiger-like appearance.",
},
body_orc: {
adjective: "green-tinted",
noun: "body whose entire skin color is tinted green",
description: "possesses a body whose entire skin color is tinted green",
flavor: "<<Their '${unit.key}'>> entire body has a slight green color.",
},
body_dragonkin: {
adjective: "scaly",
noun: "body covered in protective scales",
description: "possesses a body covered in protective scales",
flavor: "<<Their '${unit.key}'>> entire body is covered by strong protective scales.",
},
body_demon: {
adjective: "demonic",
noun: "purple-tinted body of demonic origin",
description: "possesses a purple-tinted body of demonic origin",
flavor: "<<Their '${unit.key}'>> entire body is tinted purple and emits an intoxicating smell.",
},
wings_elf: {
adjective: "transluscent",
noun: "beautiful pair of semi-transparent butterfly wings",
description: "possesses a beautiful pair of semi-transparent butterfly wings",
flavor: "These wings can flutter with enough force to let ${unit.getName()} take flight.",
noungood: ['gorgeous wings'],
},
wings_dragonkin: {
adjective: "draconic",
noun: "majestic pair of draconic wings",
description: "possesses a majestic pair of draconic wings",
flavorslave: "These majestic and powerful wings allow ${unit.getName()} to fly freely, before <<they '${unit.key}'>> become a slave.",
flavorslaver: "These majestic and powerful wings allow ${unit.getName()} to take flight.",
noungood: ['powerful wings'],
},
wings_demon: {
adjective: "demonic",
noun: "bat-like pair of demonic wings",
description: "possesses a bat-like pair of demonic wings",
flavor: "These wings enable ${unit.getName()} to take flight.",
noungood: ['wings'],
},
wings_feathery: {
adjective: "angelic",
noun: "feathery pair of angelic-looking wings",
description: "possesses a feathery pair of angelic-looking wings",
flavorslave: "These beautiful wings allow ${unit.getName()} to fly freely, before <<they '${unit.key}'>> become a slave.",
flavorslaver: "These beautiful wings allow ${unit.getName()} to take flight.",
noungood: ['divine wings'],
},
arms_werewolf: {
adjective: "furry",
noun: "pair of arms covered in thick fur",
description: "possesses a pair of arms covered in thick fur",
flavor: "Thick fur covers the entire length of <<their '${unit.key}'>> arms.",
},
arms_neko : {
adjective: "striped",
noun: "pair of clawed arms covered in black stripes",
description: "possesses a pair of clawed arms covered in black stripes",
flavor: "Black stripes covers the entire length of <<their '${unit.key}'>> arms which ends in sharp claws.",
},
arms_dragonkin: {
adjective: "scaly",
noun: "scaly pair of arms covered in protective scales",
description: "possesses a scaly pair of arms covered in protective scales",
flavor: "<<Their '${unit.key}'>> entire arms are covered by protective scales.",
},
arms_demon: {
adjective: "demonic",
noun: "demonic pair of arms jutting with spikes",
description: "possesses a demonic pair of arms jutting with spikes",
flavor: "Spikes jut out unnaturally from various parts of <<their '${unit.key}'>> arms.",
},
legs_werewolf: {
adjective: "furry",
noun: "pair of legs covered in thick fur",
description: "has their entire legs covered in thick fur",
flavor: "<<Their '${unit.key}'>> legs are entirely covered by thick insulating fur.",
},
legs_neko: {
adjective: "striped",
noun: "pair of legs covered in black stripes",
description: "has their entire legs covered in black stripes",
flavor: "<<Their '${unit.key}'>> legs are dotted with black menacing stripes.",
},
legs_dragonkin: {
adjective: "scaly",
noun: "pair of legs covered by protective scales",
description: "has protective scales that covers most of their legs",
flavor: "Protective scales covered the most vulnerable parts of <<their '${unit.key}'>> legs.",
},
legs_demon: {
adjective: "demonic",
noun: "legs distorted beyond natural shape",
description: "possess legs distorted beyond natural shape",
flavor: "<<Their '${unit.key}'>> legs are unnaturally bent at several joints.",
},
tail_werewolf: {
adjective: "werewolf",
noun: "fluffy werewolf tail that often sway around",
description: "possess a fluffy werewolf tail that often sway around",
flavor: "The tail seems to have a mind of its own as it wags and sway all the time.",
},
tail_neko: {
adjective: "cat-like",
noun: "long slender cat-like tail",
description: "possess a long slender cat-like tail",
flavor: "The tail helps improves ${unit.getName()}'s overall balance.",
},
tail_dragonkin: {
adjective: "draconic",
noun: "thick strong draconic tail",
description: "possess a thick strong draconic tail",
flavorslave: "The slave's tail must be constantly bound unless you want to get knocked out in one hit.",
flavorslaver: "The tail is strong enough to knock over trees, making it a dangerous weapon.",
},
tail_demon: {
adjective: "demonic",
noun: "long thin tail with sharp end point",
description: "possess a long thin tail with sharp end point",
flavor: "",
},
dick_werewolf: {
adjective: "werewolf",
noun: "dog-like knotted dick",
description: "possess a dog-like knotted dick",
flavor: "You can see the knot at the base of the dick.",
},
dick_dragonkin: {
adjective: "draconic",
noun: "slender draconic dick",
description: "possess a slender draconic dick",
flavor: "",
},
dick_demon: {
adjective: "demonic",
noun: "uneven bumpy dick",
description: "possess an uneven bumpy dick",
flavor: "The entire length of the shaft is covered by bumps.",
},
/* =======================
PERSONALITY TRAITS
======================= */
per_slow: {
adjective: 'slow',
adjbad: ['dumb', 'slow', ],
adjgood: ['dutyful', ],
description: 'is not as bright as most',
},
per_smart: {
adjective: 'smart',
adjbad: ['braggard', ],
adjgood: ['smart', 'clever', ],
descriptionslave: 'is brighter than most and should be watched out',
descriptionslaver: 'is brighter than most',
noungood: ['intelligence', ],
},
per_gregarious: {
adjective: 'gregarious',
adjbad: ['shameless', ],
adjgood: ['gregarious', 'friendly', 'warm', ],
description: 'enjoys the company of others',
adverbs: ['gregariously', 'congenially', 'extrovertly', 'cordially', 'warmly',],
noungood: ['eloquence', ],
hobby: ["chatting with other slavers", ],
care: true,
},
per_loner: {
adjective: 'loner',
adjbad: ['antisocial', 'asocial',],
adjgood: ['self-sufficient', ],
description: 'prefers <<their "${unit.key}">> own company',
adverbs: ['quietly', 'hushedly', 'silently', 'coldly', 'distantly',],
hobby: ["spending time alone in a|their own room", ],
care: true,
abuse: true,
},
per_chaste: {
adjective: 'chaste',
adjbad: ['prude', 'shy', ],
adjgood: ['temperate', 'modest', ],
description: 'is averse to the act of sex',
adverbs: ['modestly', 'reservedly', 'reticently', 'privately', 'shyly',],
noungood: ['temperance', ],
care: true,
abuse: true,
},
per_lustful: {
adjective: 'lustful',
adjbad: ['indecent', 'immodest', ],
adjgood: ['seductive', ],
description: 'actively seeks sexual acts',
adverbs: ['lustfully', 'lewdly', 'sensually', 'impurely', 'naughtily', 'unreservedly',
'sexily', 'passionately', 'cravingly', 'amorously', ],
noungood: ['passion', ],
hobby: ["using some slaves for a|their amusement", ],
abuse: true,
},
per_sexaddict: {
adjective: 'sex-addict',
adjbad: ['lecherous', 'perverted', ],
adjgood: ['passionate', ],
description: 'is hopelessly addicted to sex',
adverbs: ['lasciviously', 'libidinously', 'salaciously', 'whorishly', 'lecherously', 'pervertedly', 'immoedestly',
'indecently',],
noungood: ['fiery passion', ],
hobby: ["using some slaves for a|their amusement", ],
abuse: true,
},
per_generous: {
adjective: 'generous',
adjbad: ['naive', ],
adjgood: ['generous', 'unselfish', ],
description: 'is generous to a fault',
adverbs: ['generously', 'openly', 'freely', 'liberally', 'lavishly', 'loftily',],
noungood: ['generosity', ],
care: true,
},
per_thrifty: {
adjective: 'thrifty',
adjbad: ['selfish', 'greedy', ],
adjgood: ['frugal', ],
description: 'knows how to save money',
adverbs: ['frugally', 'greedily', 'possessively', 'avariciously', 'covetously', 'jealously',],
noungood: ['frugality', ],
abuse: true,
},
per_proud: {
adjective: 'proud',
adjbad: ['arrogant', 'cocky', 'conceited', 'smug', 'haughty', ],
adjgood: ['proud', 'cocksure', ],
description: 'thinks highly of themself',
adverbs: ['pridefully', 'arrogantly', 'haughtily', 'pompously', 'conceitedly', 'boastfully', ],
noungood: ['pride', ],
hobby: ["gazing vainly into the mirror", ],
abuse: true,
},
per_humble: {
adjective: 'humble',
adjbad: ['passive', ],
adjgood: ['modest', 'respectful', ],
description: 'thinks modestly of themself',
adverbs: ['modestly', 'humbly', 'respectfully', 'simply', 'unobtrusively', ],
noungood: ['humbleness', ],
care: true,
},
per_brave: {
adjective: 'brave',
adjbad: ['careless', ],
adjgood: ['brave', 'courageous', 'intrepid', ],
description: 'is braver than most',
adverbs: ['bravely', 'courageously', 'fearlessly', 'intrepidly', 'boldly', 'stoutly', 'resolutely', 'ballsily'],
noungood: ['bravado', 'bravery', ],
abuse: true,
},
per_cautious: {
adjective: 'cautious',
adjbad: ['cowardly', ],
adjgood: ['cautious', 'careful', 'prudent', ],
description: 'thinks before acting',
adverbs: ['carefully', 'cautiously', 'vigilantly', 'warily', 'mindfully', 'prudently',],
noungood: ['preparedness', ],
care: true,
abuse: true,
},
per_kind: {
adjective: 'kind',
adjbad: ['fragile', ],
adjgood: ['kind', ],
description: 'is kinder than most',
adverbs: ['kindly', 'tenderly', 'caringly', 'pleasantly', 'amiably'],
noungood: ['kindness', ],
hobby: ["caring for a|their fellow slavers", ],
care: true,
},
per_cruel: {
adjective: 'cruel',
adjbad: ['vile', ],
adjgood: ['brutal', 'merciless', ],
description: 'enjoys the suffering of others',
adverbs: ['cruelly', 'vilely', 'brutally', 'harshly', 'ruthlessly', 'sadistically', ],
noungood: ['mercilessness', ],
hobby: ["abusing slaves", ],
abuse: true,
},
per_lunatic: {
adjective: 'lunatic',
adjbad: ['mad', 'deranged', ],
description: 'acts unpredictably',
adverbs: ['madly', 'crazedly', 'derangedly', 'unstably', 'nuttily',],
abuse: true,
},
per_masochistic: {
adjective: 'masochistic',
adjbad: ['masochistic', ],
description: 'derives pleasure from pain',
/* masochistic intentionally appear twice because it is important for this trait */
adverbs: ['masochistically', 'masochistically', 'disturbedly', 'confusedly', 'addledly', ],
abuse: true,
},
per_loyal: {
adjective: 'loyal',
adjbad: ['codependant', ],
adjgood: ['loyal', 'reliable', ],
descriptionslaver: 'stays with you until the end',
descriptionslave: 'stays with <<their "${unit.key}">> trustee until the end',
adverbs: ['loyally', 'staunchly', 'reliably', 'steadily', 'firmly',],
noungood: ['loyalty', ],
},
per_independent: {
adjective: 'independent',
adjbad: ['disloyal', ],
adjgood: ['undying', ],
description: 'is more selfish than most',
adverbs: ['selfishly', 'self-centeredly', 'egocentrically', 'narcistically', 'egosticially',],
noungood: ['self-sufficiency', ],
abuse: true,
},
per_honest: {
adjective: 'honest',
adjbad: ['foolish', ],
adjgood: ['sincere', ],
description: 'speaks very little lie',
adverbs: ['candidly', 'honestly', 'frankly', 'straightforwardly', 'genuinely', 'sincerely',],
noungood: ['honesty', ],
care: true,
},
per_deceitful: {
adjective: 'deceitful',
adjbad: ['unsincere', ],
adjgood: ['discreet', ],
description: 'enjoys scheming',
adverbs: ['secretly', 'confidentially', 'covertly', 'discreetly', 'furtively',],
noungood: ['cunningness', ],
hobby: ["scheming nefariously", ],
care: true,
},
per_stubborn: {
adjective: 'stubborn',
adjbad: ['obstinate', ],
adjgood: ['adamant', ],
description: 'is unwilling to change <<their "${unit.key}">> convictions',
adverbs: ['stubbornly', 'obstinately', 'willfully', 'doggedly', 'persistently', 'adamantly',],
noungood: ['stoutness', ],
abuse: true,
},
per_curious: {
adjective: 'curious',
adjbad: ['nosy', ],
adjgood: ['inquisitive', ],
description: 'is curious about most things',
adverbs: ['curiously', 'inquisitively', 'nosily', 'snoopily', 'hungrily'],
noungood: ['curiosity', ],
hobby: ["exploring new hobbies", ],
abuse: true,
},
per_dominant: {
adjective: 'domineering',
adjbad: ['bad-mannered', ],
adjgood: ['confident', 'assertive', ],
description: 'prefers to dominate others',
adverbs: ['assertively', 'confidently', 'authoritatively', 'forcefully', 'boldly',],
noungood: ['confidence', ],
hobby: ["instilling discipline to slaves", ],
care: true,
abuse: true,
},
per_submissive: {
adjective: 'submissive',
adjbad: ['meek', 'demure', 'obsequious', ],
adjgood: ['good-mannered', ],
description: 'prefers to be dominated by others',
adverbs: ['meekly', 'uncomfortably', 'timidly', 'weakly', 'docilely', 'demurely',],
care: true,
},
per_logical: {
adjective: 'logical',
adjbad: ['cold-hearted', ],
adjgood: ['rational', ],
description: 'employs logic over emotions',
adverbs: ['rationally', 'objectively', 'logically', 'clearly', 'coherently', 'methodically',],
noungood: ['rational mind', ],
care: true,
abuse: true,
},
per_empath: {
adjective: 'empathetic',
adjbad: ['irrational', ],
adjgood: ['empathetic', ],
description: 'employs emotions over logic',
adverbs: ['empathetically', 'emotionally', 'dramatically', 'sentimentally', 'sensitively',],
noungood: ['empathetic heart', ],
care: true,
abuse: true,
},
per_honorable: {
adjective: 'honorable',
adjbad: ['honorbound', ],
adjgood: ['honorable', 'chivalrious', ],
description: 'adheres to a strong moral code',
adverbs: ['honorably', 'ethically', 'virtuously', 'gloriously', 'righteously',],
noungood: ['honor', ],
hobby: ["questioning a|their choice of occupation", ],
care: true,
},
per_evil: {
adjective: 'evil',
adjbad: ['wicked', ],
adjgood: ['diabolical', ],
description: 'does not get burdened by moral codes',
adverbs: ['wickedly', 'immorally', 'maliciously', 'diabolically', 'heinously',],
noungood: ['debauchery', ],
hobby: ["planning world domination", ],
abuse: true,
},
per_attentive: {
adjective: 'attentive',
adjgood: ['attentive', 'meticulous', 'observant', 'watchful', 'perceptive',],
adjbad: ['accusatory', ],
adverbs: ['perceptively', 'sharply', 'keenly', 'attentively', 'heedfully', ],
description: 'has a sensitive insight',
noungood: ['attention', ],
care: true,
},
per_dreamy: {
adjective: 'dreamy',
adjgood: ['happy', 'carefree', 'happy-go-lucky', ],
adjbad: ['airy', 'careless', 'inattentive', 'sloppy', 'obtuse', ],
adverbs: ['carelessly', 'nonchalantly', 'inattentively', 'negligently', 'sloppily', ],
description: 'has not a care in the world',
noungood: ['optimism', ],
hobby: ["daydreaming", ],
care: true,
},
per_nimble: {
adjective: 'nimble',
adjbad: ['wimpy', ],
adjgood: ['quick-fingered', ],
description: 'is quick on <<their "${unit.key}">> feet',
noungood: ['quickness', ],
hobby: ["doing some sprints", ],
},
per_tough: {
adjective: 'tough',
adjbad: ['inflexible', ],
adjgood: ['tough', 'sturdy', ],
description: 'can shrug more punishment than most',
noungood: ['toughness', ],
hobby: ["doing some long runs", ],
},
per_aggressive: {
adjective: 'aggressive',
adjbad: ['irritable', 'impatient', ],
adjgood: ['forceful', 'decisive', 'eager', ],
description: 'is quick both to anger and to come into action',
adverbs: ['aggressively', 'angrily', 'irritatedly', 'irately', 'annoyedly', 'impatiently', 'eagerly', ],
noungood: ['decisiveness', ],
abuse: true,
},
per_calm: {
adjective: 'calm',
adjbad: ['slow-to-act', 'indecisive', ],
adjgood: ['calm', 'tranquil', 'patient', 'stoic', ],
description: 'always maintain composure',
adverbs: ['patiently', 'calmly', 'stoicly', 'composedly', 'coolly', 'collectedly', 'relaxedly',],
noungood: ['calming presence', ],
care: true,
abuse: true,
},
per_playful: {
adjective: 'playful',
adjbad: ['naughty', ],
adjgood: ['joyful', 'fun', ],
description: 'is fond of games and amusements',
adverbs: ['playfully', 'jokingly', 'impishly', 'spiritedly', 'funnily', 'sarcastically',],
noungood: ['joyful presence', ],
care: true,
abuse: true,
},
per_serious: {
adjective: 'serious',
adjbad: ['unfun', ],
adjgood: ['stern', ],
description: 'always appear with a serious expression',
adverbs: ['seriously', 'grimly', 'sternly', 'strictly', 'darkly'],
noungood: ['grim presence', ],
care: true,
abuse: true,
},
per_studious: {
adjective: 'studious',
adjbad: ['bookish', 'nerdy', ],
adjgood: ['diligent', 'industrious', ],
description: 'loves studying',
adverbs: ['diligently', 'enthusiastically', 'industriously', 'rigorously', 'attentively'],
noungood: ['diligence', ],
hobby: ["studying in a|their room", ],
},
per_active: {
adjective: 'active',
adjbad: ['book-dumb', 'disquiet', ],
adjgood: ['energetic', 'full-of-life', ],
description: 'enjoys physical activities',
adverbs: ['energetically', 'actively', 'animatedly', 'peppily', 'intensely',],
noungood: ['energy', ],
hobby: ["exercising in the courtyard", ],
care: true,
abuse: true,
},
/* =======================
SKILL TRAITS
======================= */
skill_alchemy: {
description: 'is skilled at mixing potions',
noungood: ['skill in mixing potions', ],
},
skill_animal: {
description: 'knows how to communicate with animals',
noungood: ['skill with animals', ],
},
skill_ambidextrous: {
description: 'can use both arms equally well',
noungood: ['skill using both hands', ],
},
skill_connected: {
description: 'knows many important people in the region',
noungood: ['wide connections', ],
},
skill_creative: {
description: 'is blessed with a creative mind',
noungood: ['creativity', ],
},
skill_intimidating: {
description: 'is feared by many',
noungood: ['intimidating presence', ],
},
skill_hypnotic: {
description: 'knows how to subconciously influence others',
noungood: ['hypnotic gaze', ],
},
skill_entertain: {
description: 'is skilled in entertaining others',
noungood: ['entertaining skills', ],
},
skill_flight: {
description: 'can soar through the sky',
},
magic_fire: {
description: 'is gifted in the domain of <<lore magic_fire>>',
noun: 'fire',
noungood: ['affinity for fire', ],
},
magic_fire_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_fire>> and purification',
noun: 'purifying flame',
noungood: ['affinity for fire', ],
},
magic_water: {
description: 'is gifted in the domain of <<lore magic_water>>',
noun: 'water',
noungood: ['affinity for water', ],
},
magic_water_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_water>> and fleshshaping',
noun: 'fleshshaping',
noungood: ['affinity for water', ],
},
magic_wind: {
description: 'is gifted in the domain of <<lore magic_wind>>',
noun: 'wind',
noungood: ['affinity for wind', ],
},
magic_wind_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_wind>> and electric magic',
noun: 'electricity',
noungood: ['affinity for wind', ],
},
magic_earth: {
description: 'is gifted in the domain of <<lore magic_earth>>',
noun: 'earth',
noungood: ['affinity for earth', ],
},
magic_earth_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_earth>> and can employ <<their "${unit.key}">> powers to conjure tentacles',
noun: 'tentacles',
noungood: ['affinity for earth', ],
},
magic_dark: {
description: 'is gifted in the domain of <<lore magic_dark>>',
noun: 'darkness',
noungood: ['affinity for dark', ],
},
magic_dark_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_dark>> and corruption',
noun: 'corruption',
noungood: ['affinity for dark', ],
},
magic_light: {
description: 'is gifted in the domain of <<lore magic_light>>',
noun: 'light',
noungood: ['affinity for light', ],
},
magic_light_master: {
description: 'is exceptionally gifted in the domain of <<lore magic_light>> and healing',
noun: 'healing',
noungood: ['affinity for light', ],
},
/* =======================
TRAUMA TRAITS
======================= */
trauma_combat: {
description: 'greatly fears confrontrations',
},
trauma_brawn: {
description: 'has little energy during daytime',
},
trauma_survival: {
description: 'has lost the joy of life',
},
trauma_intrigue: {
description: 'is always nervous',
},
trauma_slaving: {
description: 'is easily imposed on',
},
trauma_knowledge: {
description: 'often forget things',
},
trauma_social: {
description: 'always suspect the worst on others',
},
trauma_aid: {
description: 'is cursed with bad luck',
},
trauma_arcane: {
description: 'is unable to concentrate at all',
},
trauma_sex: {
description: 'has completely lost interest in sex',
},
/* =======================
BOON TRAITS
======================= */
boon_combat: {
description: 'is undeterred',
},
boon_brawn: {
description: 'is full of energy',
},
boon_survival: {
description: 'is full of life',
},
boon_intrigue: {
description: 'notices more insights than usual',
},
boon_slaving: {
description: 'is an imposing presence',
},
boon_knowledge: {
description: 'has all <<their "${unit.key}">> thoughts neatly sorted out',
},
boon_social: {
description: 'is full of happiness',
},
boon_aid: {
description: 'is blessed with good fortune',
},
boon_arcane: {
description: 'is clear-minded on one goal',
},
boon_sex: {
description: 'shows strong feelings towards others',
},
/* =======================
TRAINING TRAITS
======================= */
training_obedience_basic: {
description: 'is starting to obey most command, but still show signs of deviance',
title: 'Slave',
},
training_obedience_advanced: {
description: 'has understood that his role in life is to serve <<their "${unit.key}">> better forever',
title: 'Obedient Slave',
},
training_obedience_master: {
description: 'has embraced the life of slavery so deep that <<they "${unit.key}">> will always seek <<their "${unit.key}">> master and beg to be enslaved no matter what',
title: 'Fanatic Slave',
},
training_endurance_basic: {
description: 'is a beginner decoration slave who has been trained enough to serve as static decoration but not much else',
title: 'Beginner Endurance Slave',
},
training_endurance_advanced: {
description: 'has been intensely trained and can now comfortably serve as any furniture <<their "${unit.key}">> master need be it a chair, table, or a footstool',
title: 'Endurance Slave',
},
training_endurance_master: {
description: 'is a masterful endurance slave that can withstand the heaviest of abuse and serve <<their "${unit.key}">> duties for an extraordinarily long time without respite',
title: 'Masterful Endurance Slave',
},
training_domestic_basic: {
description: 'has undergone basic domestic training and with the right gear can pass as a maid slave',
title: 'Beginner Domestic Slave',
},
training_domestic_advanced: {
description: "has reasonable skills in being a good domestic slave including doing domestic work while simultaneously arousing <<their '${unit.key}'>> master's guests",
title: 'Domestic Slave',
},
training_domestic_master: {
description: "is a masterful domestic slave capable of both singlehandedly taking care of a mansion as well as entertaining all its guests with <<their '${unit.key}'>> holes",
title: 'Masterful Domestic Slave',
},
training_oral_basic: {
description: 'has learned basic cocksucking technique enough to not accidentally choke on dicks',
title: 'Beginner Oral Slave',
},
training_oral_advanced: {
description: 'is reasonably skilled at both deepthroating dicks as well as swallowing all the load that come with it',
title: 'Oral Slave',
},
training_oral_master: {
description: 'is a masterful oral slave that always beg for the opportunity to deepthroat the largest of dicks and swallow all its cum without fail',
title: 'Masterful Oral Slave',
},
training_vagina_basic: {
description: 'has basic understanding of vaginal sex enough to know how to give more pleasure to <<their "${unit.key}">> partner',
title: 'Beginner Vaginal Slave',
},
training_vagina_advanced: {
description: 'is reasonably skilled at vaginal sex and know how to move her vaginal muscles to maximize pleasure for <<their "${unit.key}">> partner',
title: 'Vaginal Slave',
},
training_vagina_master: {
description: 'is a masterful vaginal slave who can comfortably take even the largest dick or multiple dicks up <<their "${unit.key}">> vagina and then begs for more',
title: 'Masterful Vaginal Slave',
},
training_anal_basic: {
description: 'has sufficient understanding on taking it up <<their "${unit.key}">> anus without showing any symptoms of discomfort',
title: 'Beginner Anal Slave',
},
training_anal_advanced: {
description: 'has learned how to receive pleasure from <<their "${unit.key}">> anus as well as give back as much pleasure as possible in return',
title: 'Anal Slave',
},
training_anal_master: {
description: 'is a masterful anal slut capable of taking the largest of dicks comfortably up <<their "${unit.key}">> rear and contract <<their "${unit.key}">> anal splinchters to give maximum pleasure in return',
title: 'Masterful Anal Slave',
},
training_dominance_basic: {
description: 'has learned the basics on how to handle the handle side of a whip',
title: 'Beginner Dominance Slave',
},
training_dominance_advanced: {
description: 'has expert knowledge on how to dominate other slaves when <<their "${unit.key}">> master commands',
title: 'Dominance Slave',
},
training_dominance_master: {
description: 'is a masterful dominance slave capable of even dominating your other slavers if <<their "${unit.key}">> master commands <<them "${unit.key}">> to',
title: 'Masterful Dominance Slave',
},
training_masochist_basic: {
description: 'has basic understanding how to wire pain into pleasure',
title: 'Beginner Masochist Slave',
},
training_masochist_advanced: {
description: 'has completed <<their "${unit.key}">> understanding of masochism and now no longer display any discomfort from receiving pain and instead beg for more',
title: 'Masochist Slave',
},
training_masochist_master: {
description: 'is a masterful masochist slave that regardless of whether or not <<they "${unit.key}">> have the talent for it always seek out the largest punishment and beg for more during the punishments',
title: 'Masterful Masochist Slave',
},
training_sissy_basic: {
description: 'can pass as a girl with the right make-up, but not much else',
title: 'Beginner Sissy Slave',
},
training_sissy_advanced: {
description: 'has completely forgotten <<their "${unit.key}">> previous identity of a man and will forever be a girl from now',
title: 'Sissy Slave',
},
training_sissy_master: {
description: 'is a masterful sissy slave whose dick is completely useless now and is never hard, and would put other girls to shame during shameful displays',
title: 'Masterful Sissy Slave',
},
training_pet_basic: {
description: 'looks cute with a pet gear and will follow easy commands but not much else',
title: 'Beginner Pet Slave',
},
training_pet_advanced: {
description: 'is comfortable at <<their "${unit.key}">> role as your pet now and will never break character no matter what the circumstances are',
title: 'Pet Slave',
},
training_pet_master: {
description: 'is a masterful pet slave comfortable wearing <<their "${unit.key}">> entire pet gear permanently as well as performing even the most difficult and degrading tricks',
title: 'Masterful Pet Slave',
},
training_pony_basic: {
description: 'is a beginner pony slave passable as a pony with the right gear but not much else',
title: 'Beginner Pony Slave',
},
training_pony_advanced: {
description: 'is an accomplished pony slave capable of both being a beast of burden over medium distances as well as <<their "${unit.key}">> duties as a sex slave',
title: 'Pony Slave',
},
training_pony_master: {
description: 'is a masterful pony slave with capable of the hardest pony tricks and duties as well as prompt reactions to riding crops',
title: 'Masterful Pony Slave',
},
training_toilet_basic: {
description: 'is a beginner toilet slave who can swallow piss without vomiting them back, but not much else',
title: 'Beginner Toilet Slave',
},
training_toilet_advanced: {
description: 'has undergone difficult training and can now consume piss regularly without any discomfort',
title: 'Toilet Slave',
},
training_toilet_master: {
description: 'is a masterful toilet slave capable of being installed semi-permanently in urinals and actually would beg for the opportunity to do so',
title: 'Masterful Toilet Slave',
},
training_horny_basic: {
description: 'has basic understanding of how to keep <<themselves "${unit.key}">> aroused on command',
title: 'Beginner Nympho Slave',
},
training_horny_advanced: {
description: 'can comfortably keep <<themselves "${unit.key}">> aroused and hard at all times',
title: 'Nympho Slave',
},
training_horny_master: {
description: "is a masterful nympho slave who is always horny at all times without exception and always seek out <<their '${unit.key}'>> master's attention",
title: 'Masterful Nympho Slave',
},
training_edging_basic: {
description: 'is a beginner edger slave who can reasonbly edge other slaves for relatively short time',
title: 'Beginner Edging Slave',
},
training_edging_advanced: {
description: 'is skilled at edging others for prolonged amount of time without allowing them to cum',
title: 'Edging Slave',
},
training_edging_master: {
description: 'is a masterful edging slave capable of edging both others and <<themselves "${unit.key}">> for an extreme amount of time without ever making a mistake and allowing them to cum',
title: 'Masterful Edging Slave',
},
training_mindbreak: {
description: 'has a mind that has been completely broken and can no longer be anything but a huskless fuckslave',
title: 'Mindbroken Slave',
},
training_none: {
description: 'has undergone no training and spits defiancy with <<their "${unit.key}">> every minute',
title: 'Defiant Slave',
},
}>>/* #######################
/* UNICORN TOTAL: 0.25
/* #######################
/* COMBAT */
<<run new setup.Trait(
'bg_royal',
'royal',
"Born to rule",
setup.MONEY_TRAIT_UNICORN,
{combat: 0.12, aid: 0.12, social: 0.12, intrigue: 0.12, arcane: -0.23},
['bg', 'unicorn'],
)>>
/* INTRIGUE */
<<run new setup.Trait(
'bg_boss',
'boss',
"A royalty in the criminal underworld",
setup.MONEY_TRAIT_UNICORN,
{survival: 0.12, intrigue: 0.12, slaving: 0.12, knowledge: 0.12, social: -0.23},
['bg', 'unicorn'],
)>>
/* KNOWLEDGE */
<<run new setup.Trait(
'bg_mythical',
'mythical',
"Revered as god by some",
setup.MONEY_TRAIT_UNICORN,
{arcane: 0.12, knowledge: 0.12, aid: 0.12, social: 0.12, sex: -0.23},
['bg', 'unicorn'],
)>>
/* SPECIAL */
<<run new setup.Trait(
'bg_demon',
'demon',
"Came from beyond the great mist",
setup.MONEY_TRAIT_UNICORN,
{arcane: 0.12, slaving: 0.12, sex: 0.12, brawn: 0.12, aid: -0.23},
['bg', 'unicorn'],
)>>
/* ##################################
/* RARE Sums to 0.15 but minmaxed
/* ##################################
/* COMBAT */
<<run new setup.Trait(
'bg_knight',
'knight',
"In service to a lord",
setup.MONEY_TRAIT_RARE,
{combat: 0.3, aid: 0.1, sex: -0.25},
['bg', 'rare'],
)>>
<<run new setup.Trait(
'bg_adventurer',
'adventurer',
"Travels the land seeking greater adventure",
setup.MONEY_TRAIT_RARE,
{combat: 0.1, knowledge: 0.1, aid: 0.1, survival: 0.1, slaving: -0.25},
['bg', 'rare'],
)>>
/* BRAWN */
<<run new setup.Trait(
'bg_metalworker',
'metalworker',
"Temper metal for a living",
setup.MONEY_TRAIT_RARE,
{brawn: 0.3, slaving: 0.1, intrigue: -0.25},
['bg', 'rare'],
)>>
/* SURVIVAL */
<<run new setup.Trait(
'bg_wildman',
'wildman',
"Living off the bounty of nature",
setup.MONEY_TRAIT_RARE,
{survival: 0.3, brawn: 0.1, social: -0.25},
['bg', 'rare'],
)>>
/* INTRIGUE */
<<run new setup.Trait(
'bg_assassin',
'assassin',
"Preys on the weakness of other men",
setup.MONEY_TRAIT_RARE,
{intrigue: 0.3, combat: 0.1, aid: -0.25},
['bg', 'rare'],
)>>
/* SLAVING*/
<<run new setup.Trait(
'bg_engineer',
'engineer',
"Invents and familiar with the workings of machineries",
setup.MONEY_TRAIT_RARE,
{slaving: 0.3, knowledge: 0.1, arcane: -0.25},
['bg', 'rare'],
)>>
/* KNOWLEDGE */
<<run new setup.Trait(
'bg_scholar',
'scholar',
"A walking encyclopedia",
setup.MONEY_TRAIT_RARE,
{knowledge: 0.3, aid: 0.1, brawn: -0.25},
['bg', 'rare'],
)>>
/* SOCIAL */
<<run new setup.Trait(
'bg_noble',
'noble',
'Nobles receive the best educations on the land as well as some martial training',
setup.MONEY_TRAIT_RARE,
{social: 0.3, combat: 0.1, slaving: -0.25},
['bg', 'rare'],
)>>
/* AID */
<<run new setup.Trait(
'bg_healer',
'healer',
"Heals the wounds of others",
setup.MONEY_TRAIT_RARE,
{aid: 0.3, arcane: 0.1, combat: -0.25},
['bg', 'rare'],
)>>
/* ARCANE */
<<run new setup.Trait(
'bg_mystic',
'mystic',
"Studies subjects of this world and beyond",
setup.MONEY_TRAIT_RARE,
{arcane: 0.3, knowledge: 0.1, survival: -0.25},
['bg', 'rare'],
)>>
/* SEX */
<<run new setup.Trait(
'bg_courtesan',
'courtesan',
"Master of the bedroom arts",
setup.MONEY_TRAIT_RARE,
{sex: 0.3, arcane: 0.1, knowledge: -0.25},
['bg', 'rare'],
)>>
/* #############################
/* UNCOMMON: 0.15 sum
/* #############################
/* COMBAT */
<<run new setup.Trait(
'bg_mercenary',
'mercenary',
"Mercenaries travel the land in search of bloody work",
setup.MONEY_TRAIT_MEDIUM,
{combat: 0.15},
['bg', 'medium'],
)>>
/* BRAWN */
<<run new setup.Trait(
'bg_monk',
'monk',
"Hones the body and the mind... but mostly the body",
setup.MONEY_TRAIT_MEDIUM,
{brawn: 0.15},
['bg', 'medium'],
)>>
/* SURVIVAL */
<<run new setup.Trait(
'bg_hunter',
'hunter',
"Hunting game for a living",
setup.MONEY_TRAIT_MEDIUM,
{survival: 0.15},
['bg', 'medium'],
)>>
/* INTRIGUE */
<<run new setup.Trait(
'bg_informer',
'informer',
"Information has a price",
setup.MONEY_TRAIT_MEDIUM,
{intrigue: 0.15},
['bg', 'medium'],
)>>
/* SLAVING */
<<run new setup.Trait(
'bg_slaver',
'slaver',
"Handles the right side of the whip",
setup.MONEY_TRAIT_MEDIUM,
{slaving: 0.15},
['bg', 'medium'],
)>>
/* KNOWLEDGE */
<<run new setup.Trait(
'bg_artisan',
'crafter',
"Have a dextrous set of hands",
setup.MONEY_TRAIT_MEDIUM,
{knowledge: 0.15},
['bg', 'medium'],
)>>
/* SOCIAL */
<<run new setup.Trait(
'bg_wiseman',
'wiseman',
"Advises the less wise",
setup.MONEY_TRAIT_MEDIUM,
{social: 0.15},
['bg', 'medium'],
)>>
/* AID */
<<run new setup.Trait(
'bg_priest',
'priest',
"Devout to the gods",
setup.MONEY_TRAIT_MEDIUM,
{aid: 0.15},
['bg', 'medium',],
)>>
/* ARCANE */
<<run new setup.Trait(
'bg_apprentice',
'apprentice',
"May master the magical arts one day",
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.15},
['bg', 'medium'],
)>>
/* SEX */
<<run new setup.Trait(
'bg_artist',
'artist',
"For what is a world without art?",
setup.MONEY_TRAIT_MEDIUM,
{sex: 0.15},
['bg', 'medium'],
)>>
/* ##################
/* COMMON: 0.1 sum */
/* ##################
/* COMBAT */
<<run new setup.Trait(
'bg_soldier',
'soldier',
"Part of a standing army",
0,
{combat: 0.1},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_pirate',
'pirate',
"Plunder and booty",
0,
{combat: 0.05, sex: 0.05},
['bg', 'common'],
)>>
/* BRAWN */
<<run new setup.Trait(
'bg_laborer',
'laborer',
"Used to hard physical labor",
0,
{brawn: 0.1},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_woodsman',
'woodsman',
"Lives from the bounty of the forests",
0,
{brawn: 0.05, survival: 0.05},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_thug',
'thug',
"Roughs up people",
0,
{brawn: 0.05, slaving: 0.05},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_seaman',
'seaman',
"Lives off the bounties of the sea",
0,
{brawn: 0.05, sex: 0.05},
['bg', 'common'],
)>>
/* SURVIVAL */
<<run new setup.Trait(
'bg_nomad',
'nomad',
"No place to call a home",
0,
{survival: 0.1},
['bg', 'common'],
)>>
/* INTRIGUE */
<<run new setup.Trait(
'bg_thief',
'thief',
"Lightens the load without anybody noticing",
0,
{intrigue: 0.1},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_maid',
'housekeeper',
"The heart of the house",
0,
{intrigue: 0.05, aid: 0.05},
['bg', 'common'],
)>>
/* SLAVING */
<<run new setup.Trait(
'bg_raider',
'raider',
"Profits off the misery of others",
0,
{slaving: 0.1},
['bg', 'common'],
)>>
/* KNOWLEDGE */
<<run new setup.Trait(
'bg_clerk',
'clerk',
"Dealing with red tape since ancient times",
0,
{knowledge: 0.10},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_merchant',
'trader',
"Maximizing profit",
0,
{social: 0.05, knowledge: 0.05},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_farmer',
'farmer',
'Growing up on the fields and accustomed to both hard work and animal breeding',
0,
{knowledge: 0.05, sex: 0.05},
['bg', 'common'],
)>>
/* SOCIAL */
<<run new setup.Trait(
'bg_entertainer',
'entertainer',
"Giving others joy",
0,
{social: 0.1},
['bg', 'common'],
)>>
/* AID */
<<run new setup.Trait(
'bg_foodworker',
'food worker',
"Feeds the world",
0,
{aid: 0.1,},
['bg', 'common'],
)>>
/* ARCANE */
/* SEX */
<<run new setup.Trait(
'bg_whore',
'whore',
"Sells their body for a living",
0,
{sex: 0.1},
['bg', 'common'],
)>>
/* ####################################
/* NEGATIVE Sums to 0.0 but minmaxed */
/* ####################################
<<run new setup.Trait(
'bg_unemployed',
'unemployed',
"Does not have a living",
-setup.MONEY_TRAIT_MEDIUM,
{intrigue: 0.1, survival: 0.1, brawn: -0.1, combat: -0.1},
['bg', 'common'],
)>>
<<run new setup.Trait(
'bg_slave',
'slave',
"Grow up as a slave and dangerously familiar with the workings of the whip",
-setup.MONEY_TRAIT_MEDIUM,
{knowledge: -0.1, social: -0.1, brawn: 0.1, slaving: 0.1},
['bg', 'common'],
)>><<run new setup.TraitGroup([
new setup.Trait(
'value_low',
'low value slave',
'A low-valued slave unsuitable for higher-end uses',
0,
{},
),
null,
new setup.Trait(
'value_high1',
'valuable slave',
'Quite a valuable slave that will fetch a nice sum in the market',
0,
{},
[],
{ tier: 1 }
),
new setup.Trait(
'value_high2',
'high-value slave',
'Very valuable slave that will earn you a great deal of coin in the market',
0,
{},
[],
{ tier: 2 }
),
new setup.Trait(
'value_high3',
'very valuable slave',
'Greatly valuable slave which will make anyone a tidy sum should they get their hands on the slave',
0,
{},
[],
{ tier: 3 }
),
new setup.Trait(
'value_high4',
'extremely valuable slave',
'A rare specimen of a slave that will fetch an exorbitant sum in auctions',
0,
{},
[],
{ tier: 4 }
),
new setup.Trait(
'value_high5',
'mythical slave',
'Slave whose value rises far beyond those of normal slaves --- they say only very few of these slaves exists in the world',
0,
{},
[],
{ tier: 5 }
),
new setup.Trait(
'value_high6',
'god-valued slave',
'Where slaving becomes a work of art',
0,
{},
[],
{ tier: 6 }
),
], ['value', 'computed',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'join_junior',
'new slaver',
'A new slaver in your company and still learning the ropes',
0,
{},
),
null,
new setup.Trait(
'join_senior',
'senior slaver',
'Has been with you for a long, long time',
0,
{},
),
], ['join', 'computed',])>><<run new setup.Trait(
'eq_slutty',
'eq: slutty',
'Wears a noticably slutty clothing',
0,
{},
['equipment'],
{ tier: 1, colors: true },
)>>
<<run new setup.Trait(
'eq_veryslutty',
'eq: very slutty',
'Wears an extremely slutty clothing',
0,
{},
['equipment'],
{ tier: 2, colors: true },
)>>
<<run new setup.Trait(
'eq_valuable',
'eq: valuable',
'Wears a valuable set of clothes',
0,
{},
['equipment'],
{ tier: 1, colors: true },
)>>
<<run new setup.Trait(
'eq_veryvaluable',
'eq: very valuable',
'Wears an extremely valuable set of clothes',
0,
{},
['equipment'],
{ tier: 2, colors: true },
)>>
<<run new setup.Trait(
'eq_gagged',
'eq: gagged',
'Mouth is obstructed and prevents speaking',
0,
{
social: -0.7,
intrigue: -0.7,
arcane: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_blind',
'eq: blind',
'Eyes is covered and is prevented seeing',
0,
{
combat: -0.7,
intrigue: -0.7,
survival: -0.7,
knowledge: -0.7,
arcane: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_collar',
'eq: collar',
'Collar on the neck, the mark of a slave',
0,
{
slaving: -0.7,
intrigue: -0.7,
social: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_restrained',
'eq: restrained',
'Restrained or tied up, and is prevented from moving',
0,
{
combat: -0.7,
brawn: -0.7,
survival: -0.7,
intrigue: -0.7,
slaving: -0.7,
aid: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_chastity',
'eq: chastity',
'Equipped with a metallic device preventing their dick from becoming erect',
0,
{
sex: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_plug_anus',
'eq: plug (ass)',
'A dildo is plugged deep inside the ass',
0,
{
combat: -0.7,
survival: -0.7,
intrigue: -0.7,
knowledge: -0.7,
arcane: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_plug_vagina',
'eq: plug (vagina)',
'A dildo is plugged deep inside the vagina',
0,
{
sex: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_pony',
'eq: pony',
'Fitted with a set of pony gear',
0,
{
combat: -0.7,
survival: -0.7,
intrigue: -0.7,
slaving: -0.7,
social: -0.7,
knowledge: -0.7,
aid: -0.7,
},
['equipment']
)>>
<<run new setup.Trait(
'eq_pet',
'eq: pet',
'Fitted with a set of pet gear',
0,
{
combat: -0.7,
survival: -0.7,
intrigue: -0.7,
slaving: -0.7,
social: -0.7,
knowledge: -0.7,
aid: -0.7,
},
['equipment']
)>>
<<set setup.TraitHelper.EQUIPMENT_SLUTTY = [
setup.trait.eq_slutty,
setup.trait.eq_gagged,
setup.trait.eq_blind,
setup.trait.eq_collar,
setup.trait.eq_restrained,
setup.trait.eq_chastity,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
setup.trait.eq_pony,
setup.trait.eq_pet,
]>><<run new setup.TraitGroup([
new setup.Trait(
'gender_male',
'male',
'Has a penis but no vagina.',
0,
{},
['common', 'needdick',],
),
new setup.Trait(
'gender_female',
'female',
'Has a vagina but no penis.',
0,
{},
['common', 'needvagina',],
),
], ['gender',], true)>><<run new setup.TraitGroup([
new setup.Trait(
'per_slow',
'slow',
'Slower than many other people in learning new concepts',
-setup.MONEY_TRAIT_MEDIUM,
{knowledge: -0.1, arcane: -0.1, aid: -0.1, intrigue: -0.1, sex: 0.2},
['medium'],
{ background: 'negative' },
),
null,
new setup.Trait(
'per_smart',
'smart',
'Blessed with good intellect',
setup.MONEY_TRAIT_MEDIUM,
{knowledge: 0.1, arcane: 0.1, aid: 0.1, intrigue: 0.1, sex: -0.2},
['medium'],
{ background: 'positive' },
),
], ['per', 'iq'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_gregarious',
'gregarious',
'Seeks the company of other men',
0,
{social: 0.2, survival: -0.2}
),
new setup.Trait(
'per_loner',
'loner',
'Enjoys their own company',
0,
{survival: 0.2, social: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_chaste',
'chaste',
'Does not like to engage in sexual acts and refuses to wear even slightly revealing clothings',
0,
{sex: -0.3, aid: 0.2, knowledge: 0.2},
['common'],
),
null,
new setup.Trait(
'per_lustful',
'lustful',
'Actively seek sexual companies, and willing to wear sluttier clothings than most',
0,
{sex: 0.15, survival: -0.1, combat: -0.1},
['common'],
{ tier: 1, colors: true },
),
new setup.Trait(
'per_sexaddict',
'sex addict',
'Spend the entire time looking for sexual activities, and willing to wear very slutty clothings',
setup.MONEY_TRAIT_MEDIUM,
{sex: 0.3, combat: -0.2, survival: -0.2},
['rare'],
{ tier: 2, colors: true },
),
], ['per'], false)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_generous',
'generous',
'Spends their own fortunes for the benefit of other people',
0,
{intrigue: -0.2, aid: 0.2}
),
new setup.Trait(
'per_thrifty',
'thrifty',
'Careful with their own spendings',
0,
{intrigue: 0.2, aid: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_proud',
'proud',
'Took pride in themselves',
0,
{brawn: 0.2, social: -0.2}
),
new setup.Trait(
'per_humble',
'humble',
'Never brags',
0,
{social: 0.2, brawn: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_brave',
'brave',
'Is braver than most',
0,
{combat: 0.2, survival: -0.2}
),
new setup.Trait(
'per_cautious',
'cautious',
'Makes full preparation before going in',
0,
{survival: 0.2, combat: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_kind',
'kind',
'Hope for the best in other people',
0,
{social: 0.2, slaving: -0.2},
['common'],
),
new setup.Trait(
'per_cruel',
'cruel',
'Enjoys the suffering of others',
0,
{slaving: 0.2, social: -0.2},
['common'],
),
], ['per'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_lunatic',
'lunatic',
'Behaves irrationally',
0,
{arcane: 0.2, social: -0.2, intrigue: -0.2, sex: 0.2},
),
new setup.Trait(
'per_masochistic',
'masochistic',
'Derives pleasure from their own suffering',
setup.MONEY_TRAIT_RARE,
{sex: 0.2, slaving: -0.2, combat: -0.2, brawn: 0.2},
),
], ['per', 'rare'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_loyal',
'loyal',
'Stays until the very end',
0,
{combat: 0.2, survival: -0.2}
),
new setup.Trait(
'per_independent',
'independent',
'Survival is everything',
0,
{survival: 0.2, combat: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_honest',
'honest',
'Speaks very little lie',
0,
{knowledge: 0.2, intrigue: -0.2}
),
new setup.Trait(
'per_deceitful',
'deceitful',
'Manipulates others',
0,
{intrigue: 0.2, knowledge: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_stubborn',
'stubborn',
'Hard to accept the opinion of others',
0,
{slaving: 0.2, knowledge: -0.2}
),
new setup.Trait(
'per_curious',
'curious',
'Always on the lookout for new things',
0,
{knowledge: 0.2, slaving: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_dominant',
'dominant',
'Prefers to top in a relationship',
setup.MONEY_TRAIT_MEDIUM,
{slaving: 0.2, aid: -0.2},
),
new setup.Trait(
'per_submissive',
'submissive',
'Prefers to bottom in a relationship',
setup.MONEY_TRAIT_MEDIUM,
{slaving: -0.2, aid: 0.2},
),
], ['per', 'medium'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_logical',
'logical',
'Employs logic over emotions',
0,
{knowledge: 0.2, arcane: -0.2}
),
new setup.Trait(
'per_empath',
'empath',
'Employs emotions over logic',
0,
{arcane: 0.2, knowledge: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_honorable',
'honorable',
'Has strong moral code and honor',
setup.MONEY_TRAIT_MEDIUM,
{slaving: -0.2, aid: 0.2}
),
new setup.Trait(
'per_evil',
'evil',
'Does not get burdened by moral codes',
setup.MONEY_TRAIT_MEDIUM,
{slaving: 0.2, aid: -0.2}
),
], ['per', 'medium',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_attentive',
'attentive',
'Pays more attention than others',
setup.MONEY_TRAIT_MEDIUM,
{arcane: -0.2, survival: 0.2},
),
new setup.Trait(
'per_dreamy',
'dreamy',
'Has their head in the air',
setup.MONEY_TRAIT_MEDIUM,
{survival: -0.2, arcane: 0.2},
),
], ['per', 'medium',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_nimble',
'nimble',
'Lithe and moves easily',
setup.MONEY_TRAIT_MEDIUM,
{intrigue: 0.2, brawn: -0.2},
),
new setup.Trait(
'per_tough',
'tough',
'Can take more punishment than others',
setup.MONEY_TRAIT_MEDIUM,
{brawn: 0.2, intrigue: -0.2},
),
], ['per', 'medium'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_aggressive',
'aggressive',
'Charges in at the first opportunity',
0,
{brawn: 0.2, survival: -0.2}
),
new setup.Trait(
'per_calm',
'calm',
'Never to anger',
0,
{survival: 0.2, brawn: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_playful',
'playful',
'Live for entertainment',
0,
{sex: 0.2, combat: -0.2}
),
new setup.Trait(
'per_serious',
'serious',
'Life is a difficult journey',
0,
{combat: 0.2, sex: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_studious',
'studious',
'Loves studying',
0,
{arcane: 0.2, sex: -0.2}
),
new setup.Trait(
'per_active',
'active',
'Loves physical exertions',
0,
{sex: 0.2, arcane: -0.2}
),
], ['per', 'common',], true)>><<run new setup.TraitGroup([
new setup.Trait(
'muscle_extremelyweak',
'extremely weak',
'Weak to the point of unable to stand on their own',
setup.MONEY_TRAIT_UNICORN,
{brawn: -0.4, combat: -0.3, slaving: -0.1, survival: -0.2},
['unicorn'],
{ tier: 3, background: 'negative2' },
),
new setup.Trait(
'muscle_veryweak',
'very weak',
'Lacks muscle to the point of some bones being visible',
setup.MONEY_TRAIT_RARE,
{brawn: -0.3, combat: -0.2, sex: 0.2},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'muscle_weak',
'weak',
'Pleasantly thin, but their punches lack power',
0,
{brawn: -0.2, sex: 0.2},
['common'],
{ tier: 1, icon: 'muscle_weak', background: 'negative' }
),
null,
new setup.Trait(
'muscle_strong',
'strong',
'Fit as a buck',
0,
{brawn: 0.2, sex: 0.1},
['common'],
{ tier: 1, background: 'positive' },
),
new setup.Trait(
'muscle_verystrong',
'very strong',
'Body entirely covered by muscles',
setup.MONEY_TRAIT_RARE,
{brawn: 0.3, sex: 0.1, combat: 0.1},
['rare'],
{ tier: 2, icon: 'muscle_strong', background: 'positive2' }
),
new setup.Trait(
'muscle_extremelystrong',
'extremely strong',
'Possess inhuman power, which sometimes become problematic',
setup.MONEY_TRAIT_UNICORN,
{brawn: 0.5, combat: 0.2, slaving: -0.2},
['unicorn'],
{ tier: 3, background: 'positive2' },
),
], ['muscle', 'physical',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'dick_tiny',
'tiny dick',
'Has a humiliatingly tiny dick',
0,
{},
['rare'],
{ tier: 1, icon: 'dick_medium', background: 'negative2' }
),
new setup.Trait(
'dick_small',
'small dick',
'Has a smaller dick than most people',
0,
{},
['common'],
{ tier: 2, icon: 'dick_medium', background: 'negative' }
),
new setup.Trait(
'dick_medium',
'medium dick',
'Has a normal-sized dick',
0,
{},
['common'],
{ tier: 3, background: 'positive' },
),
new setup.Trait(
'dick_large',
'large dick',
'Endowed with a well-sized dick',
0,
{},
['common'],
{ tier: 4, icon: 'dick_medium', background: 'positive' }
),
new setup.Trait(
'dick_huge',
'huge dick',
'Has a huge dick',
setup.MONEY_TRAIT_MEDIUM,
{},
['rare'],
{ tier: 5, icon: 'dick_medium', background: 'positive2' }
),
new setup.Trait(
'dick_titanic',
'titanic dick',
'Has a monstrously large dick enough to terrify even the most veteran of whores',
setup.MONEY_TRAIT_RARE,
{},
['unicorn'],
{ tier: 6, icon: 'dick_medium', background: 'positive3' }
),
], ['clothed', 'dick', 'decreasable', 'physical', 'genital', 'needdick',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'balls_tiny',
'tiny balls',
'Has a tiny pair of balls',
0,
{},
['rare'],
{ tier: 1, icon: 'balls_medium', background: 'negative2' }
),
new setup.Trait(
'balls_small',
'small balls',
'Has a tiny pair of small balls',
0,
{},
['common'],
{ tier: 2, icon: 'balls_medium', background: 'negative' }
),
new setup.Trait(
'balls_medium',
'medium balls',
'Has a normal-sized balls',
0,
{},
['common'],
{ tier: 3, background: 'positive' },
),
new setup.Trait(
'balls_large',
'large balls',
'Posses a pair of large balls',
0,
{},
['common'],
{ tier: 4, icon: 'balls_medium', background: 'positive' }
),
new setup.Trait(
'balls_huge',
'huge balls',
'Has a huge and productive pair of balls',
setup.MONEY_TRAIT_MEDIUM,
{},
['rare'],
{ tier: 5, icon: 'balls_medium', background: 'positive2' }
),
new setup.Trait(
'balls_titanic',
'titanic balls',
'Has a monstrously large balls with an inhuman amount of cum production',
setup.MONEY_TRAIT_RARE,
{},
['unicorn'],
{ tier: 6, icon: 'balls_medium', background: 'positive3' }
),
], ['clothed', 'balls', 'decreasable', 'physical', 'genital', 'needdick', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'breast_tiny',
'tiny breast',
'Has a tiny breast',
0,
{},
['rare'],
{ tier: 1, icon: 'breast_medium', background: 'negative2' }
),
new setup.Trait(
'breast_small',
'small breast',
'Has a small breast',
0,
{},
['common'],
{ tier: 2, icon: 'breast_medium', background: 'negative' }
),
new setup.Trait(
'breast_medium',
'medium breast',
'Has a normal-sized breast',
0,
{},
['common'],
{ tier: 3, background: 'positive' },
),
new setup.Trait(
'breast_large',
'large breast',
'Posses a pair of large breasts',
0,
{},
['common'],
{ tier: 4, icon: 'breast_medium', background: 'positive' }
),
new setup.Trait(
'breast_huge',
'huge breast',
'Has a huge and eye-catching pair of breasts',
setup.MONEY_TRAIT_MEDIUM,
{},
['rare'],
{ tier: 5, icon: 'breast_medium', background: 'positive2' }
),
new setup.Trait(
'breast_titanic',
'titanic breast',
'Has a monstrously large breast enough to satisfy even the most hardcore breast connoiseur',
setup.MONEY_TRAIT_RARE,
{},
['unicorn'],
{ tier: 6, icon: 'breast_medium', background: 'positive3' }
),
], ['breast', 'decreasable', 'physical', 'genital',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'vagina_tight',
'tight vagina',
'Has a still tight vagina',
0,
{},
['common'],
{ tier: 1, background: 'positive2' },
),
new setup.Trait(
'vagina_loose',
'vagina',
'Has a well-used vagina',
0,
{},
['common'],
{ tier: 2, icon: 'vagina_tight', background: 'positive' }
),
new setup.Trait(
'vagina_gape',
'gaping vagina',
'Has a permanently gaping vagina from years of abuse',
0,
{sex: -0.05},
['rare'],
{ tier: 3, icon: 'vagina_tight', background: 'negative' }
),
], ['clothed', 'vagina', 'decreasable', 'physical', 'genital', 'needvagina', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'anus_tight',
'tight anus',
'Has a still tight anus',
0,
{},
['common'],
{ tier: 1, background: 'positive2' },
),
new setup.Trait(
'anus_loose',
'anus',
'Has a well-used anus',
0,
{},
['medium'],
{ tier: 2, icon: 'anus_tight', background: 'positive' }
),
new setup.Trait(
'anus_gape',
'gaping anus',
'Has a permanently gaping anus from years of abuse',
0,
{sex: -0.05},
['rare'],
{ tier: 3, icon: 'anus_tight', background: 'negative' }
),
], ['clothed', 'anus', 'decreasable', 'physical', 'genital',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'face_hideous',
'hideous face',
'Has a hideous face',
-setup.MONEY_TRAIT_RARE,
{
social: -0.3
},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'face_ugly',
'ugly face',
'Not pleasant to look at',
-setup.MONEY_TRAIT_MEDIUM,
{
social: -0.2
},
['medium'],
{ tier: 1, background: 'negative' },
),
null,
new setup.Trait(
'face_attractive',
'attractive face',
'Has a pleasantly attractive face',
setup.MONEY_TRAIT_MEDIUM,
{
social: 0.2
},
['medium'],
{ tier: 1, background: 'positive' },
),
new setup.Trait(
'face_beautiful',
'beautiful face',
'Has a strikingly beautiful face',
setup.MONEY_TRAIT_RARE,
{
social: 0.3
},
['rare'],
{ tier: 2, background: 'positive2' },
),
], ['face', 'physical',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'height_dwarf',
'height: dwarf',
'Short as a dwarf',
0,
{},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'height_short',
'height: short',
'Shorter than most',
0,
{},
['medium'],
{ tier: 1, background: 'negative' },
),
null,
new setup.Trait(
'height_tall',
'height: tall',
'Taller than most',
0,
{},
['medium'],
{ tier: 1, background: 'positive' },
),
new setup.Trait(
'height_giant',
'height: giant',
'Hulkingly tall',
0,
{},
['rare'],
{ tier: 2, background: 'positive2' },
),
], ['height', 'physical',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'corrupted',
'corrupted',
'Body corrupted by demonic influence',
-setup.MONEY_TRAIT_MEDIUM,
{},
['physical',],
{ tier: 1 }
),
new setup.Trait(
'corruptedfull',
'fully corrupted',
'Every inch of their body covered in corruption',
-setup.MONEY_TRAIT_RARE,
{},
['physical',],
{ tier: 2 }
),
], ['physical', 'computed',])>>
<<set setup.TRAIT_PHYSICAL_TAGS = [
'muscle', 'dick', 'balls', 'breast', 'vagina', 'anus', 'face', 'height',
]>><<run new setup.TraitGroup([
new setup.Trait(
'race_humankingdom',
'human (kingdom)',
'Human born in the kingdom blessed with fertile lands. Many are attuned to the domain of <<lore magic_wind>>.',
0,
{},
['common'],
{ colors: true },
),
new setup.Trait(
'race_humanvale',
'human (vale)',
'Human born on the northern vales. Hardy, if somewhat brash people. The harsh winters make these people attuned to the domain of <<lore magic_water>>.',
0,
{},
['common'],
{ colors: true },
),
new setup.Trait(
'race_humandesert',
'human (desert)',
'Human born in the east region. Strong people thriving in the harsh desert climate, and often attuned to the domain of <<lore magic_fire>>.',
0,
{},
['common'],
{ colors: true },
),
new setup.Trait(
'race_humansea',
'human (sea)',
'Human born far on the southern islands across the sea. They have cultures much unlike those found in the main region. Often attuned to the domain of <<lore magic_light>>.',
setup.MONEY_TRAIT_RARE,
{},
['medium'],
{ colors: true },
),
new setup.Trait(
'race_werewolf',
'werewolf',
'A race of humanoid wolves living on the northern mountains. Attuned to water and ice, which allows them to withstood the cold.',
setup.MONEY_TRAIT_MEDIUM,
{},
['medium'],
),
new setup.Trait(
'race_elf',
'elf',
'Graceful people with sharp pointy ears living on the western forest together with the nekos. Attuned to the earth element, which grants them minor power to manipulate plants.',
0,
{},
['common'],
),
new setup.Trait(
'race_neko',
'neko',
'These descendant of the <<lore race_tigerkin>> lives in the jungles on the western forest. Their furry pedigree has worn off completely, usually leaving only their ears, tails, and occasionally eyes being similar to that of a cat. Attuned to the earth domain like their neighbors, the elves.',
0,
{},
['common'],
),
new setup.Trait(
'race_orc',
'orc',
'Brutes living on the eastern mountain regions. While most are less intelligent than the average human, there are known exceptions. Attuned to fire, which makes them impervious to heat.',
setup.MONEY_TRAIT_MEDIUM,
{},
['medium'],
),
new setup.Trait(
'race_dragonkin',
'dragonkin',
'One of the rarest races on earth, it is said that there are hidden colonies of these majestic species living somewhere across the southern oceans. Attuned to light, which governs all other non-dark elements.',
setup.MONEY_TRAIT_UNICORN,
{},
['unicorn'],
),
new setup.Trait(
'race_demon',
'demon',
'Strange demonic creatures that live on the other side of the great fog. There are some who managed to cross the fog into our world, but those are extremely rare. Attuned to darkness, which is perhaps the strongest element. They are immune to the negative skill penalty of demonic bodyparts.',
setup.MONEY_TRAIT_UNICORN,
{},
['rare'],
),
], ['race'], true)>><<run new setup.Trait(
'skill_ambidextrous',
'ambidextrous',
'Capable of using both left and right arms equally well',
setup.MONEY_TRAIT_MEDIUM,
{combat: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_intimidating',
'intimidating',
'Has an intimidating presence',
setup.MONEY_TRAIT_MEDIUM,
{brawn: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_flight',
'flight',
'Is able to soar through the sky',
0,
{survival: 0.3},
['skill', 'impossible'],
)>>
<<run new setup.Trait(
'skill_connected',
'connected',
'Has connections to many important people',
setup.MONEY_TRAIT_MEDIUM,
{intrigue: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_hypnotic',
'hypnotic',
'Knows how to hypnotize people under the right conditions',
setup.MONEY_TRAIT_MEDIUM,
{slaving: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_creative',
'creative',
'Has a clockwork-like mind that keeps coming up with creative ideas',
setup.MONEY_TRAIT_MEDIUM,
{knowledge: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_entertain',
'entertainer',
'Is skilled in entertaining people with a song and a dance',
setup.MONEY_TRAIT_MEDIUM,
{social: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_alchemy',
'alchemy',
'Knows how mix herbs and make potions',
setup.MONEY_TRAIT_MEDIUM,
{aid: 0.3},
['skill', 'medium'],
)>>
<<run new setup.Trait(
'skill_animal',
'animal whisperer',
'Has strong bond with animals',
setup.MONEY_TRAIT_MEDIUM,
{sex: 0.3},
['skill', 'medium'],
)>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_fire',
'magic: fire',
'Has some control over the fire domain. See also <<lore magic_fire>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare'],
),
new setup.Trait(
'magic_fire_master',
'magic: fire (master)',
'Masters the use of the fire domain and can summon purifying flames. See also <<lore magic_fire>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_water',
'magic: water',
'Has some control over the water domain. See also <<lore magic_water>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare'],
),
new setup.Trait(
'magic_water_master',
'magic: water (master)',
'Masters the use of the water domain and can employ its power to shape flesh, with the right equipment. See also <<lore magic_water>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_wind',
'magic: wind',
'Has some control over the wind domain. See also <<lore magic_wind>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare'],
),
new setup.Trait(
'magic_wind_master',
'magic: wind (master)',
'Masters the use of the wind domain and can employ its power to summon lighnings. See also <<lore magic_wind>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_earth',
'magic: earth',
'Has some control over the earth domain. See also <<lore magic_earth>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare'],
),
new setup.Trait(
'magic_earth_master',
'magic: earth (master)',
'Masters the use of the earth domain and can employ its power to create tentacle aberrations. See also <<lore magic_earth>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_light',
'magic: light',
'Has some control over the light domain. See also <<lore magic_light>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare']
),
new setup.Trait(
'magic_light_master',
'magic: light (master)',
'Masters the use of the light domain and can employ its power to heal, with the right equipment. See also <<lore magic_light>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'magic_dark',
'magic: dark',
'Has some control over the dark domain. See also <<lore magic_dark>>',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2},
['rare'],
),
new setup.Trait(
'magic_dark_master',
'magic: dark (master)',
'Masters the use of the dark domain and can employ its power to corrupt others, with the right equipment. See also <<lore magic_dark>>',
setup.MONEY_TRAIT_RARE,
{arcane: 0.3},
['unicorn'],
),
], ['skill', 'magic'])>>/* rarity here is "corruption rarity". That's why demonic are most common */
<<run new setup.TraitGroup([
new setup.Trait(
'eyes_neko',
'eyes (cat)',
'Posses cat-like eyes that can see in the dark',
0,
{},
['medium'],
),
new setup.Trait(
'eyes_dragonkin',
'eyes (draconic)',
'Posses intimidating pair of draconic eyes.',
0,
{},
['rare'],
),
new setup.Trait(
'eyes_demon',
'eyes (demonic)',
'Posses pitch-black demonic eyes.',
-setup.MONEY_TRAIT_MEDIUM,
{
knowledge: -0.35,
},
['common', 'corruption',],
),
], ['eyes', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'ears_werewolf',
'ears (werewolf)',
'Posses dog-like ears sticking out of their head',
0,
{
},
['medium'],
),
new setup.Trait(
'ears_neko',
'ears (cat)',
'Posses cat-like ears sticking out of their head',
0,
{},
['medium'],
),
new setup.Trait(
'ears_elf',
'ears (pointy)',
'Posses sharp pointy ears',
0,
{},
['medium'],
),
new setup.Trait(
'ears_dragonkin',
'ears (draconic)',
'Possess fin-like ears',
0,
{},
['medium'],
),
new setup.Trait(
'ears_demon',
'ears (demonic)',
'Posses deadly sharp pointy ears jagged beyond normal',
-setup.MONEY_TRAIT_MEDIUM,
{
survival: -0.35,
},
['common', 'corruption'],
),
], ['ears', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'mouth_werewolf',
'mouth (werewolf)',
'Posses a muzzle in place of mouth',
0,
{},
['medium'],
),
new setup.Trait(
'mouth_neko',
'mouth (neko)',
'Several sensitive whiskers grow from their cheeks',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'mouth_orc',
'mouth (orc)',
'Sharp tusks jut out of their mouth',
0,
{},
['medium'],
),
new setup.Trait(
'mouth_dragonkin',
'mouth (dragonkin)',
'Posses scaley muzzle filled with sharp teeth',
0,
{},
['rare'],
),
new setup.Trait(
'mouth_demon',
'mouth (demonic)',
'Posses elongated tongue clearly beyond what is normal',
-setup.MONEY_TRAIT_MEDIUM,
{
social: -0.35,
},
['common', 'corruption'],
),
], ['mouth', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'body_werewolf',
'body (werewolf)',
'Posses a furry body of a werewolf',
0,
{},
['medium'],
),
new setup.Trait(
'body_neko',
'body (cat)',
'Tiger-like black stripes cover their entire body',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'body_orc',
'body (orc)',
'Posses green-colored skin of orcish origin',
0,
{},
['medium'],
),
new setup.Trait(
'body_dragonkin',
'body (dragonkin)',
'Posses a body covered with protective scales',
0,
{},
['rare'],
),
new setup.Trait(
'body_demon',
'body (demonic)',
'Posses a reddish body covered in tough skin',
-setup.MONEY_TRAIT_MEDIUM,
{
brawn: -0.35,
},
['common', 'corruption'],
),
], ['body', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'wings_elf',
'wings (elven)',
'Possess a beautiful pair of transluscent butterfly-like wings',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'wings_dragonkin',
'wings (dragonkin)',
'Posses a pair of scaley wings',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'wings_demon',
'wings (demonic)',
'Posses a pair of bat-like wings',
setup.MONEY_TRAIT_MEDIUM,
{
aid: -0.35,
slaving: -0.35,
},
['common', 'corruption'],
),
new setup.Trait(
'wings_feathery',
'wings (feathery)',
'Posses a pair of angel-like wings',
setup.MONEY_TRAIT_UNICORN,
{},
['rare'],
),
], ['wings', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'arms_werewolf',
'arms (werewolf)',
'Posses a furry pair of arms with claws',
0,
{},
['medium'],
),
new setup.Trait(
'arms_neko',
'arms (cat)',
'Tiger-like black stripes cover their clawed arms',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'arms_dragonkin',
'arms (dragonkin)',
'Posses a scaley pair of arms ending in sharp claws',
0,
{},
['rare'],
),
new setup.Trait(
'arms_demon',
'arms (demonic)',
'Posses a pair of arms ending in deadly lethal claws',
-setup.MONEY_TRAIT_MEDIUM,
{
combat: -0.35,
},
['common', 'corruption'],
),
], ['arms', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'legs_werewolf',
'legs (werewolf)',
'Posses a furry pair of legs with digitigrade legs',
0,
{},
['medium'],
),
new setup.Trait(
'legs_neko',
'legs (cat)',
'Legs covered in black stripes akin to tigers',
setup.MONEY_TRAIT_RARE,
{},
['rare'],
),
new setup.Trait(
'legs_dragonkin',
'legs (dragonkin)',
'Posses a scaley pair of legs',
0,
{},
['rare'],
),
new setup.Trait(
'legs_demon',
'legs (demonic)',
'Posses a pair of legs with sharp spikes protruding out of the skins',
-setup.MONEY_TRAIT_MEDIUM,
{
intrigue: -0.35,
},
['common', 'corruption'],
),
], ['legs', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'tail_werewolf',
'tail (werewolf)',
'Posses a fluffy dog-like tail',
0,
{},
['medium'],
),
new setup.Trait(
'tail_neko',
'tail (neko)',
'Posses a long thin cat-like tail',
0,
{},
['medium'],
),
new setup.Trait(
'tail_dragonkin',
'tail (dragonkin)',
'Posses a sturdy and strong draconic tail',
0,
{},
['rare'],
),
new setup.Trait(
'tail_demon',
'tail (demonic)',
'Posses a thin elongated tail ending in sharp arrow',
-setup.MONEY_TRAIT_MEDIUM,
{
arcane: -0.35,
},
['common', 'corruption'],
),
], ['tail', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'dick_werewolf',
'dick (werewolf)',
'Posses a dick complete with a knot',
0,
{},
['medium'],
),
new setup.Trait(
'dick_dragonkin',
'dick (dragonkin)',
'Posses an odd looking lizard-ish dick',
0,
{},
['rare'],
),
new setup.Trait(
'dick_demon',
'dick (demonic)',
'Posses a dick with jagged protrusions covering the entire length',
-setup.MONEY_TRAIT_MEDIUM,
{
},
['common', 'corruption'],
),
], ['dickshape', 'skin', 'needdick'], true)>>
/* base chance of each race to get each skin */
<<set setup.TRAITRACESKINMAP = {
race_humanvale: {},
race_humankingdom: {
wings_feathery: 0.000001,
},
race_humandesert: {},
race_humansea: {},
race_werewolf: {
ears_werewolf: 1.0,
mouth_werewolf: 1.0,
body_werewolf: 1.0,
arms_werewolf: 1.0,
legs_werewolf: 1.0,
tail_werewolf: 1.0,
dick_werewolf: 0.9,
},
race_elf: {
ears_elf: 1.0,
wings_elf: 0.01,
},
race_neko: {
eyes_neko: 0.5,
ears_neko: 1.0,
tail_neko: 1.0,
arms_neko: 0.0001,
body_neko: 0.0001,
legs_neko: 0.0001,
mouth_neko: 0.0001,
},
race_orc: {
mouth_orc: 0.95,
body_orc: 0.95,
ears_elf: 0.5,
},
race_dragonkin: {
eyes_dragonkin: 0.5,
ears_dragonkin: 1.0,
mouth_dragonkin: 1.0,
body_dragonkin: 1.0,
wings_dragonkin: 0.3,
arms_dragonkin: 1.0,
legs_dragonkin: 1.0,
tail_dragonkin: 1.0,
dick_dragonkin: 0.9,
},
race_demon: {
eyes_demon: 0.97,
ears_demon: 0.97,
mouth_demon: 0.97,
body_demon: 0.97,
wings_demon: 0.3,
arms_demon: 0.97,
legs_demon: 0.97,
tail_demon: 0.97,
dick_demon: 0.97,
},
}>>
<<set setup.TRAIT_SKIN_TAGS = [
'eyes', 'ears', 'mouth', 'body', 'wings', 'arms', 'legs', 'tail', 'dickshape',
]>><<run new setup.TraitGroup([
new setup.Trait(
'training_obedience_basic',
'obedience: basic',
'Can obey basic commands, but still deviant at core',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic',],
{ tier: 1 },
),
new setup.Trait(
'training_obedience_advanced',
'obedience: advanced',
'Has understand that they will never become anything other than a slave',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_obedience_basic' }
),
new setup.Trait(
'training_obedience_master',
'obedience: master',
'Fanatically obeys any order without question',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_obedience_basic' }
),
], ['training', 'trobedience', 'trmale', 'trfemale',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_endurance_basic',
'endurance: basic',
'Does not immediately turn into a trainwreck from one use',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_endurance_advanced',
'endurance: advanced',
'Can be used for a prolonged amount of time before needing to recover',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced', ],
{ tier: 2, icon: 'training_endurance_basic' }
),
new setup.Trait(
'training_endurance_master',
'endurance: master',
'Has limitless endurance for abuse. Can be installed as furniture without breaking',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster', ],
{ tier: 3, icon: 'training_endurance_basic' }
),
], ['training', 'trendurance', 'trmale', 'trfemale', 'trnonbasic'])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_domestic_basic',
'domestic: basic',
'More skilled than the average person at domestic tasks',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_domestic_advanced',
'domestic: advanced',
'Understand fully the workings of a domestic slave',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_domestic_basic' }
),
new setup.Trait(
'training_domestic_master',
'domestic: master',
'Fanatically dedicated to housework',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_domestic_basic' }
),
], ['training', 'trdomestic', 'trmale', 'trfemale', 'trnonbasic',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_oral_basic',
'oral: basic',
'Familiar with giving blowjobs',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_oral_advanced',
'oral: advanced',
'Able to give expert blowjobs',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_oral_basic' }
),
new setup.Trait(
'training_oral_master',
'oral: master',
'Able to deepthroat even the largest of dicks',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_oral_basic' }
),
], ['training', 'troral', 'trmale', 'trfemale', 'trnonbasic',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_vagina_basic',
'vagina: basic',
'Familiar with taking it up their vagina',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_vagina_advanced',
'vagina: advanced',
'Able to give pleasure through the vagina',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_vagina_basic' }
),
new setup.Trait(
'training_vagina_master',
'vagina: master',
'Able to accomodate even the largest of dicks up their vagina, and give maximum pleasure in return',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_vagina_basic' }
),
], ['training', 'trvagina', 'trfemale', 'needvagina', 'trnonbasic',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_anal_basic',
'anal: basic',
'Familiar with taking it up their anus',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_anal_advanced',
'anal: advanced',
'Able to give pleasure through the anus',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_anal_basic' }
),
new setup.Trait(
'training_anal_master',
'anal: master',
'Able to accomodate even the largest of dicks up their anus, and give maximum pleasure in return',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_anal_basic' }
),
], ['training', 'tranal', 'trmale', 'trfemale', 'trnonbasic',])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_dominance_basic',
'dominance: basic',
'Knows the basic on how to top other slaves',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_dominance_advanced',
'dominance: advanced',
'Learned how to derive pleasure from the submission of others',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_dominance_basic' }
),
new setup.Trait(
'training_dominance_master',
'dominance: master',
'Complete expertise at topping others',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_dominance_basic' }
),
], ['training', 'trdominance', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_masochist_basic',
'masochist: basic',
'Knows the basics of deriving pleasure from pain, but is unable to fully employ it',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_masochist_advanced',
'masochist: advanced',
'Understands how to enable receiving pleasure from pain',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_masochist_basic' }
),
new setup.Trait(
'training_masochist_master',
'masochist: master',
'The slave is no longer able to receive pleasure without pain',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_masochist_basic' }
),
], ['training', 'trmasochist', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_sissy_basic',
'sissy: basic',
'Is passable as a female at a glance',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_sissy_advanced',
'sissy: advanced',
'Shows no signs of ever becoming a man',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_sissy_basic' }
),
new setup.Trait(
'training_sissy_master',
'sissy: master',
'Puts other woman to shame',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_sissy_basic' }
),
], ['training', 'trsissy', 'trmale', 'needdick', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_pet_basic',
'pet: basic',
'Grasps the basics that they are not human but a pet',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_pet_advanced',
'pet: advanced',
'Understands and always try their best to act and be like a pet',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_pet_basic' }
),
new setup.Trait(
'training_pet_master',
'pet: master',
'Never breaks out of character and understands that they are no longer the human they thought they were',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_pet_basic' }
),
], ['training', 'trpet', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_pony_basic',
'pony: basic',
'Knows how to move and act with a pony gear',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_pony_advanced',
'pony: advanced',
'Used to being a pony slave: dragging carts and having a pony-tail buttplug up their rear all the time',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_pony_basic' }
),
new setup.Trait(
'training_pony_master',
'pony: master',
'Never breaks out of character and comfortable wearing the pony gear all the time',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_pony_basic' }
),
], ['training', 'trpony', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_toilet_basic',
'toilet: basic',
'Basic knowledge on how to enjoy the taste of piss',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_toilet_advanced',
'toilet: advanced',
'Has advanced understanding on how to swallow piss',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_toilet_basic' }
),
new setup.Trait(
'training_toilet_master',
'toilet: master',
'Addicted to the taste of piss. Can be installed permanently as toilet slave',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_toilet_basic' }
),
], ['training', 'trtoilet', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_horny_basic',
'horny: basic',
'Can fully arouse themselves on command',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_horny_advanced',
'horny: advanced',
'Has no problem keeping themselves aroused at all times',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_horny_basic' }
),
new setup.Trait(
'training_horny_master',
'horny: master',
'Permanently aroused, these slaves keep their aroused-ons even during sleep',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_horny_basic' }
),
], ['training', 'trhorny', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'training_edging_basic',
'edging: basic',
'Has basic knowledge on how to edge others',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_edging_advanced',
'edging: advanced',
'Knows the boundary of cumming or not and can keep others at that boundary without crossing',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_edging_basic' }
),
new setup.Trait(
'training_edging_master',
'edging: master',
'Expert at edging techniques, can keep others and also themselves at the edge of cumming for prolonged amount of time',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_edging_basic' }
),
], ['training', 'tredging', 'trmale', 'trfemale', 'trnonbasic', ])>>
<<run new setup.Trait(
'training_mindbreak',
'mindbroken',
'Has been mindbroken either through specialized training or from prolonged abuse, and can no longer be anything but a hollowed out fucktoy',
-10 * setup.MONEY_PER_SLAVER_WEEK,
{},
['training', 'trmindbreak'],
{ background: 'trmaster', colors: true },
)>>
<<run new setup.Trait(
'training_none',
'no training',
'Has not been trained at all',
0,
{},
[],
{ background: 'training' },
)>>
<<set setup.TraitHelper.TRAINING_BASIC_GENDERLESS = setup.TraitHelper.getAllTraitsOfTags([
'trbasic', 'trmale', 'trfemale',
])>>
<<set setup.TraitHelper.TRAINING_BASIC = setup.TraitHelper.getAllTraitsOfTags([
'trbasic',
])>>
<<set setup.TraitHelper.TRAINING_ADVANCED = setup.TraitHelper.getAllTraitsOfTags([
'tradvanced',
])>>
<<set setup.TraitHelper.TRAINING_ADVANCED_GENDERLESS = setup.TraitHelper.getAllTraitsOfTags([
'tradvanced', 'trmale', 'trfemale',
])>>
<<set setup.TraitHelper.TRAINING_MASTER = setup.TraitHelper.getAllTraitsOfTags([
'trmaster',
])>>
<<set setup.TraitHelper.TRAINING_MASTER_GENDERLESS = setup.TraitHelper.getAllTraitsOfTags([
'trmaster', 'trmale', 'trfemale',
])>>
<<set setup.TraitHelper.TRAINING_ALL = setup.TraitHelper.TRAINING_BASIC.concat(
setup.TraitHelper.TRAINING_ADVANCED).concat(setup.TraitHelper.TRAINING_MASTER)>>
<<set setup.TraitHelper.TRAINING_ALL_GENDERLESS = setup.TraitHelper.TRAINING_BASIC_GENDERLESS.concat(
setup.TraitHelper.TRAINING_ADVANCED_GENDERLESS).concat(setup.TraitHelper.TRAINING_MASTER_GENDERLESS)>>
<<set setup.TraitHelper.TRAINING_ALL_INCL_MINDBREAK = setup.TraitHelper.TRAINING_ALL.concat([setup.trait.training_mindbreak])>>/* Trauma-related traits. These traits are temporary, and never permanent on a unit. Reduces value. */
/* =========== */
/* TRAUMAS */
/* =========== */
<<run new setup.Trait(
'trauma_combat',
'traumatized',
'Traumatized by prior engagement',
-setup.MONEY_TRAIT_MEDIUM,
{combat: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_brawn',
'lethargy',
'Difficulty sleeping which causes lack of energy',
-setup.MONEY_TRAIT_MEDIUM,
{brawn: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_survival',
'depression',
'Maybe life is not worth living',
-setup.MONEY_TRAIT_MEDIUM,
{survival: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_intrigue',
'anxiety',
'Nervous about everything',
-setup.MONEY_TRAIT_MEDIUM,
{intrigue: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_slaving',
'meek',
'Frightened by the smallest of things',
-setup.MONEY_TRAIT_MEDIUM,
{slaving: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_knowledge',
'absent-minded',
'Gaps in memory',
-setup.MONEY_TRAIT_MEDIUM,
{knowledge: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_social',
'mistrustful',
'Trust nobody',
-setup.MONEY_TRAIT_MEDIUM,
{social: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_aid',
'cursed',
'Followed by bad luck',
-setup.MONEY_TRAIT_MEDIUM,
{aid: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_arcane',
'scatterbrained',
'Inability to focus',
-setup.MONEY_TRAIT_MEDIUM,
{arcane: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
<<run new setup.Trait(
'trauma_sex',
'frigid',
'Has no interest in sex',
-setup.MONEY_TRAIT_MEDIUM,
{sex: setup.TRAIT_TRAUMA_EFFECT},
['trauma', 'temporary'],
)>>
/* ========= */
/* BOONS */
/* ========= */
<<run new setup.Trait(
'boon_combat',
'courageous',
'There is nothing to fear',
0,
{combat: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_brawn',
'vigorous',
'Limitless energy',
0,
{brawn: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_survival',
'full of life',
'Life is a gift',
0,
{survival: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_intrigue',
'insightful',
'Everyone has their secrets',
0,
{intrigue: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_slaving',
'menacing',
'In control',
0,
{slaving: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_knowledge',
'clear-minded',
'Arranged their thoughts in a clear fashion',
0,
{knowledge: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_social',
'joyful',
'Never seems to be down',
0,
{social: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_aid',
'blessed',
'Blessed by some higher plane',
0,
{aid: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_arcane',
'focused',
'Mind on one task',
0,
{arcane: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<run new setup.Trait(
'boon_sex',
'passionate',
'Express yourself',
0,
{sex: setup.TRAIT_BOON_EFFECT},
['boon', 'temporary'],
)>>
<<set setup.TraitHelper.TRAUMA = [
setup.trait.trauma_combat,
setup.trait.trauma_brawn,
setup.trait.trauma_survival,
setup.trait.trauma_intrigue,
setup.trait.trauma_slaving,
setup.trait.trauma_knowledge,
setup.trait.trauma_social,
setup.trait.trauma_aid,
setup.trait.trauma_arcane,
setup.trait.trauma_sex,
]>><<set setup.unitaction = {}>>
<<include InitUnitActionTraining>>
<<include InitUnitActionFleshShape>>
<<include InitUnitActionSurgery>>
<<include InitUnitActionCorrupt>>
<<include InitUnitActionPurify>>
<<include InitUnitActionTreatment>><<run new setup.UnitAction(
'slavecorrupt_all',
['corruption', ],
setup.questtemplate.slavecorrupt_all,
[],
[
setup.qres.Building(setup.buildingtemplate.ritualchamber),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_body',
['corruption', ],
setup.questtemplate.slavecorrupt_body,
[],
[
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_arms',
['corruption', ],
setup.questtemplate.slavecorrupt_arms,
[],
[
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_legs',
['corruption', ],
setup.questtemplate.slavecorrupt_legs,
[],
[
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_eyes',
['corruption', ],
setup.questtemplate.slavecorrupt_eyes,
[],
[
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_ears',
['corruption', ],
setup.questtemplate.slavecorrupt_ears,
[],
[
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_mouth',
['corruption', ],
setup.questtemplate.slavecorrupt_mouth,
[],
[
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_tail',
['corruption', ],
setup.questtemplate.slavecorrupt_tail,
[],
[
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_wings',
['corruption', ],
setup.questtemplate.slavecorrupt_wings,
[],
[
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavecorrupt_dick',
['corruption', ],
setup.questtemplate.slavecorrupt_dick,
[],
[
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
/* SLAVER CORRUPTION STARTS HERE */
<<run new setup.UnitAction(
'slavercorrupt_all',
['corruption', ],
setup.questtemplate.slavercorrupt_all,
[],
[
setup.qres.Building(setup.buildingtemplate.deepritualchamber),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_body',
['corruption', ],
setup.questtemplate.slavercorrupt_body,
[],
[
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_arms',
['corruption', ],
setup.questtemplate.slavercorrupt_arms,
[],
[
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_legs',
['corruption', ],
setup.questtemplate.slavercorrupt_legs,
[],
[
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_eyes',
['corruption', ],
setup.questtemplate.slavercorrupt_eyes,
[],
[
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_ears',
['corruption', ],
setup.questtemplate.slavercorrupt_ears,
[],
[
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_mouth',
['corruption', ],
setup.questtemplate.slavercorrupt_mouth,
[],
[
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_tail',
['corruption', ],
setup.questtemplate.slavercorrupt_tail,
[],
[
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_wings',
['corruption', ],
setup.questtemplate.slavercorrupt_wings,
[],
[
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
],
)>>
<<run new setup.UnitAction(
'slavercorrupt_dick',
['corruption', ],
setup.questtemplate.slavercorrupt_dick,
[],
[
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.Trait(setup.trait.dick_tiny),
],
)>><<run new setup.UnitAction(
'fleshshape_breast_grow',
['fleshshape', ],
setup.questtemplate.fleshshape_breast_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.breastlab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.breast_large),
],
)>>
<<run new setup.UnitAction(
'fleshshape_breast_shrink',
['fleshshape', ],
setup.questtemplate.fleshshape_breast_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.breastlab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.breast_tiny),
],
)>>
<<run new setup.UnitAction(
'fleshshape_dick_grow',
['fleshshape', ],
setup.questtemplate.fleshshape_dick_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.dicklab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qs.trait_dick,
setup.qres.NoTrait(setup.trait.dick_large),
],
)>>
<<run new setup.UnitAction(
'fleshshape_dick_shrink',
['fleshshape', ],
setup.questtemplate.fleshshape_dick_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.dicklab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.dick_medium),
],
)>>
<<run new setup.UnitAction(
'fleshshape_balls_grow',
['fleshshape', ],
setup.questtemplate.fleshshape_balls_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.ballslab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qs.trait_balls,
setup.qres.NoTrait(setup.trait.balls_large),
],
)>>
<<run new setup.UnitAction(
'fleshshape_balls_shrink',
['fleshshape', ],
setup.questtemplate.fleshshape_balls_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.ballslab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.balls_medium),
],
)>>
<<run new setup.UnitAction(
'fleshshape_muscle_grow',
['fleshshape', ],
setup.questtemplate.fleshshape_muscle_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.muscle_strong),
],
)>>
<<run new setup.UnitAction(
'fleshshape_muscle_shrink',
['fleshshape', ],
setup.questtemplate.fleshshape_muscle_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(null, setup.trait.muscle_strong.getTraitGroup()),
],
)>>
<<run new setup.UnitAction(
'fleshshape_height_grow',
['fleshshape', ],
setup.questtemplate.fleshshape_height_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.height_tall),
],
)>>
<<run new setup.UnitAction(
'fleshshape_height_shrink',
['fleshshape', ],
setup.questtemplate.fleshshape_height_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(null, setup.trait.height_tall.getTraitGroup()),
],
)>>
<<run new setup.UnitAction(
'fleshshape_anus_tighten',
['fleshshape', ],
setup.questtemplate.fleshshape_anus_tighten,
[],
[
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.anuslab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.anus_loose),
],
)>>
<<run new setup.UnitAction(
'fleshshape_anus_loosen',
['fleshshape', ],
setup.questtemplate.fleshshape_anus_loosen,
[],
[
setup.qres.Building(setup.buildingtemplate.anuslab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.anus_gape),
],
)>>
<<run new setup.UnitAction(
'fleshshape_vagina_tighten',
['fleshshape', ],
setup.questtemplate.fleshshape_vagina_tighten,
[],
[
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.vaginalab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.vagina_loose),
],
)>>
<<run new setup.UnitAction(
'fleshshape_vagina_loosen',
['fleshshape', ],
setup.questtemplate.fleshshape_vagina_loosen,
[],
[
setup.qres.Building(setup.buildingtemplate.vaginalab),
setup.qs.job_slave,
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.vagina_gape),
setup.qres.Trait(setup.trait.vagina_tight),
],
)>><<run new setup.UnitAction(
'purify_all',
['purification', ],
setup.questtemplate.purify_all,
[],
[
setup.qres.Building(setup.buildingtemplate.temple),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify(),
],
)>>
<<run new setup.UnitAction(
'purify_body',
['purification', ],
setup.questtemplate.purify_body,
[],
[
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('body'),
],
)>>
<<run new setup.UnitAction(
'purify_arms',
['purification', ],
setup.questtemplate.purify_arms,
[],
[
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('arms'),
],
)>>
<<run new setup.UnitAction(
'purify_legs',
['purification', ],
setup.questtemplate.purify_legs,
[],
[
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('legs'),
],
)>>
<<run new setup.UnitAction(
'purify_eyes',
['purification', ],
setup.questtemplate.purify_eyes,
[],
[
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('eyes'),
],
)>>
<<run new setup.UnitAction(
'purify_ears',
['purification', ],
setup.questtemplate.purify_ears,
[],
[
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('ears'),
],
)>>
<<run new setup.UnitAction(
'purify_mouth',
['purification', ],
setup.questtemplate.purify_mouth,
[],
[
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('mouth'),
],
)>>
<<run new setup.UnitAction(
'purify_tail',
['purification', ],
setup.questtemplate.purify_tail,
[],
[
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('tail'),
],
)>>
<<run new setup.UnitAction(
'purify_wings',
['purification', ],
setup.questtemplate.purify_wings,
[],
[
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('wings'),
],
)>>
<<run new setup.UnitAction(
'purify_dick',
['purification', ],
setup.questtemplate.purify_dick,
[],
[
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('dick'),
],
)>><<run new setup.UnitAction(
'surgery_breast_grow',
['fleshshape', ],
setup.questtemplate.surgery_breast_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.surgerybreast),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.breast_large),
],
)>>
<<run new setup.UnitAction(
'surgery_breast_shrink',
['fleshshape', ],
setup.questtemplate.surgery_breast_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.surgerybreast),
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.breast_tiny),
],
)>>
<<run new setup.UnitAction(
'surgery_dick_grow',
['fleshshape', ],
setup.questtemplate.surgery_dick_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.surgerydick),
setup.qs.job_slaver,
setup.qs.trait_dick,
setup.qres.NoTrait(setup.trait.dick_large),
],
)>>
<<run new setup.UnitAction(
'surgery_dick_shrink',
['fleshshape', ],
setup.questtemplate.surgery_dick_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.surgerydick),
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.dick_medium),
],
)>>
<<run new setup.UnitAction(
'surgery_balls_grow',
['fleshshape', ],
setup.questtemplate.surgery_balls_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.surgeryballs),
setup.qs.job_slaver,
setup.qs.trait_balls,
setup.qres.NoTrait(setup.trait.balls_large),
],
)>>
<<run new setup.UnitAction(
'surgery_balls_shrink',
['fleshshape', ],
setup.questtemplate.surgery_balls_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.surgeryballs),
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.balls_medium),
],
)>>
<<run new setup.UnitAction(
'surgery_muscle_grow',
['fleshshape', ],
setup.questtemplate.surgery_muscle_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.muscle_strong),
],
)>>
<<run new setup.UnitAction(
'surgery_muscle_shrink',
['fleshshape', ],
setup.questtemplate.surgery_muscle_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qs.job_slaver,
setup.qres.Trait(null, setup.trait.muscle_strong.getTraitGroup()),
],
)>>
<<run new setup.UnitAction(
'surgery_height_grow',
['fleshshape', ],
setup.questtemplate.surgery_height_grow,
[],
[
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.height_tall),
],
)>>
<<run new setup.UnitAction(
'surgery_height_shrink',
['fleshshape', ],
setup.questtemplate.surgery_height_shrink,
[],
[
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qs.job_slaver,
setup.qres.Trait(null, setup.trait.height_tall.getTraitGroup()),
],
)>>
<<run new setup.UnitAction(
'surgery_anus_tighten',
['fleshshape', ],
setup.questtemplate.surgery_anus_tighten,
[],
[
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.surgeryanus),
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.anus_loose),
],
)>>
<<run new setup.UnitAction(
'surgery_anus_loosen',
['fleshshape', ],
setup.questtemplate.surgery_anus_loosen,
[],
[
setup.qres.Building(setup.buildingtemplate.surgeryanus),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.anus_gape),
],
)>>
<<run new setup.UnitAction(
'surgery_vagina_tighten',
['fleshshape', ],
setup.questtemplate.surgery_vagina_tighten,
[],
[
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.surgeryvagina),
setup.qs.job_slaver,
setup.qres.Trait(setup.trait.vagina_loose),
],
)>>
<<run new setup.UnitAction(
'surgery_vagina_loosen',
['fleshshape', ],
setup.questtemplate.surgery_vagina_loosen,
[],
[
setup.qres.Building(setup.buildingtemplate.surgeryvagina),
setup.qs.job_slaver,
setup.qres.NoTrait(setup.trait.vagina_gape),
setup.qres.Trait(setup.trait.vagina_tight),
],
)>><<run new setup.UnitAction(
'obedience_basic',
['training', ],
setup.questtemplate.training_obedience_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingchamber),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'obedience_advanced',
['training', ],
setup.questtemplate.training_obedience_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingchamber),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'obedience_master',
['training', ],
setup.questtemplate.training_obedience_master,
[],
[
setup.qres.Building(setup.buildingtemplate.obediencetrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_obedience_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'domestic_basic',
['training', ],
setup.questtemplate.training_domestic_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_domestic_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'domestic_advanced',
['training', ],
setup.questtemplate.training_domestic_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_domestic_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'domestic_master',
['training', ],
setup.questtemplate.training_domestic_master,
[],
[
setup.qres.Building(setup.buildingtemplate.domestictrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_domestic_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'endurance_basic',
['training', ],
setup.questtemplate.training_endurance_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_endurance_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'endurance_advanced',
['training', ],
setup.questtemplate.training_endurance_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_endurance_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'endurance_master',
['training', ],
setup.questtemplate.training_endurance_master,
[],
[
setup.qres.Building(setup.buildingtemplate.endurancetrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_endurance_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'oral_basic',
['training', ],
setup.questtemplate.training_oral_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_oral_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'oral_advanced',
['training', ],
setup.questtemplate.training_oral_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_oral_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'oral_master',
['training', ],
setup.questtemplate.training_oral_master,
[],
[
setup.qres.Building(setup.buildingtemplate.oraltrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_oral_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'vagina_basic',
['training', ],
setup.questtemplate.training_vagina_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_vagina_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'vagina_advanced',
['training', ],
setup.questtemplate.training_vagina_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_vagina_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'vagina_master',
['training', ],
setup.questtemplate.training_vagina_master,
[],
[
setup.qres.Building(setup.buildingtemplate.vaginatrainingroom),
setup.qs.job_slave,
setup.qs.trait_vagina,
setup.qres.TraitExact(setup.trait.training_vagina_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'anal_basic',
['training', ],
setup.questtemplate.training_anal_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_anal_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'anal_advanced',
['training', ],
setup.questtemplate.training_anal_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_anal_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'anal_master',
['training', ],
setup.questtemplate.training_anal_master,
[],
[
setup.qres.Building(setup.buildingtemplate.analtrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_anal_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'dominance_basic',
['training', ],
setup.questtemplate.training_dominance_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.NoTrait(setup.trait.training_dominance_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'dominance_advanced',
['training', ],
setup.questtemplate.training_dominance_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_dominance_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'dominance_master',
['training', ],
setup.questtemplate.training_dominance_master,
[],
[
setup.qres.Building(setup.buildingtemplate.dominancetrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_dominance_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'masochist_basic',
['training', ],
setup.questtemplate.training_masochist_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_masochist_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'masochist_advanced',
['training', ],
setup.questtemplate.training_masochist_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_masochist_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'masochist_master',
['training', ],
setup.questtemplate.training_masochist_master,
[],
[
setup.qres.Building(setup.buildingtemplate.masochisttrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_masochist_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'toilet_basic',
['training', ],
setup.questtemplate.training_toilet_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_toilet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'toilet_advanced',
['training', ],
setup.questtemplate.training_toilet_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_toilet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'toilet_master',
['training', ],
setup.questtemplate.training_toilet_master,
[],
[
setup.qres.Building(setup.buildingtemplate.toilettrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_toilet_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'horny_basic',
['training', ],
setup.questtemplate.training_horny_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_horny_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'horny_advanced',
['training', ],
setup.questtemplate.training_horny_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_horny_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'horny_master',
['training', ],
setup.questtemplate.training_horny_master,
[],
[
setup.qres.Building(setup.buildingtemplate.hornytrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_horny_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'edging_basic',
['training', ],
setup.questtemplate.training_edging_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_edging_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'edging_advanced',
['training', ],
setup.questtemplate.training_edging_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_edging_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'edging_master',
['training', ],
setup.questtemplate.training_edging_master,
[],
[
setup.qres.Building(setup.buildingtemplate.edgingtrainingroom),
setup.qs.job_slave,
setup.qres.TraitExact(setup.trait.training_edging_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'sissy_basic',
['training', ],
setup.questtemplate.training_sissy_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qs.trait_gender_male,
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_sissy_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'sissy_advanced',
['training', ],
setup.questtemplate.training_sissy_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qs.job_slave,
setup.qs.trait_gender_male,
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_sissy_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'sissy_master',
['training', ],
setup.questtemplate.training_sissy_master,
[],
[
setup.qres.Building(setup.buildingtemplate.sissytrainingroom),
setup.qs.job_slave,
setup.qs.trait_gender_male,
setup.qres.TraitExact(setup.trait.training_sissy_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pet_basic',
['training', ],
setup.questtemplate.training_pet_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pet),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_pet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pet_advanced',
['training', ],
setup.questtemplate.training_pet_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pet),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_pet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pet_master',
['training', ],
setup.questtemplate.training_pet_master,
[],
[
setup.qres.Building(setup.buildingtemplate.pettrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pet),
setup.qres.TraitExact(setup.trait.training_pet_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pony_basic',
['training', ],
setup.questtemplate.training_pony_basic,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pony),
setup.qres.Trait(setup.trait.training_endurance_basic),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_pony_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pony_advanced',
['training', ],
setup.questtemplate.training_pony_advanced,
[],
[
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pony),
setup.qres.Trait(setup.trait.training_endurance_advanced),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_pony_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'pony_master',
['training', ],
setup.questtemplate.training_pony_master,
[],
[
setup.qres.Building(setup.buildingtemplate.ponytrainingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.eq_pony),
setup.qres.Trait(setup.trait.training_endurance_advanced),
setup.qres.TraitExact(setup.trait.training_pony_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'mindbreak',
['training', ],
setup.questtemplate.training_mindbreak,
[],
[
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qs.job_slave,
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
)>>
<<run new setup.UnitAction(
'convince',
['training', ],
setup.questtemplate.training_convince,
[],
[
setup.qres.Building(setup.buildingtemplate.convincingroom),
setup.qs.job_slave,
setup.qres.Trait(setup.trait.training_none),
],
)>>
<<run new setup.UnitAction(
'brainwash',
['training', ],
setup.questtemplate.training_brainwash,
[],
[
setup.qres.HasItem(setup.item.potion_slavertraining),
setup.qres.Building(setup.buildingtemplate.brainwashingroom),
setup.qs.job_slave,
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
],
)>><<run new setup.UnitAction(
'treatment_heal_basic',
['treatment', ],
setup.questtemplate.treatment_heal_basic,
[
],
[
setup.qres.HasItem(setup.item.healing_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroom),
setup.qres.IsInjured(),
],
)>>
<<run new setup.UnitAction(
'treatment_heal_advanced',
['treatment', ],
setup.questtemplate.treatment_heal_advanced,
[
],
[
setup.qres.HasItem(setup.item.healing_potion_greater),
setup.qres.Building(setup.buildingtemplate.treatmentroom),
setup.qres.IsInjured(),
],
)>>
<<run new setup.UnitAction(
'treatment_blank',
['treatment', ],
setup.questtemplate.treatment_blank,
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait(setup.TraitHelper.TRAINING_ALL),
setup.qres.HasItem(setup.item.blank_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomblank),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_resetlevel',
['treatment', ],
setup.questtemplate.treatment_resetlevel,
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasItem(setup.item.reset_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomresetlevel),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_mindmend',
['treatment', ],
setup.questtemplate.treatment_mindmend,
[
],
[
setup.qres.Trait(setup.trait.training_mindbreak),
setup.qres.HasItem(setup.item.mindmend_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroommindmend),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_memoryisolation',
['treatment', ],
setup.questtemplate.treatmentmemory_isolation,
[
],
[
setup.qres.HasItem(setup.item.potion_isolation),
setup.qres.Building(setup.buildingtemplate.treatmentroomisolation),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_hate',
['treatment', ],
setup.questtemplate.treatment_hate,
[
],
[
setup.qres.HasItem(setup.item.hate_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomhate),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_love',
['treatment', ],
setup.questtemplate.treatment_love,
[
],
[
setup.qres.HasItem(setup.item.love_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomlove),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_lovetrue',
['treatment', ],
setup.questtemplate.treatment_love_true,
[
],
[
setup.qres.HasItem(setup.item.love_potion_true),
setup.qres.Building(setup.buildingtemplate.treatmentroomlovetrue),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_forget',
['treatment', ],
setup.questtemplate.treatment_forget,
[
],
[
setup.qres.HasItem(setup.item.forget_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomforget),
setup.qres.Available(),
],
)>>
<<run new setup.UnitAction(
'treatment_transformation',
['treatment', ],
setup.questtemplate.treatment_transformation,
[
],
[
setup.qres.HasItem(setup.item.potion_transformation),
setup.qres.Building(setup.buildingtemplate.treatmentroomtransformation),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.Available(),
],
)>><<set setup.unitgroup = {}>>
/* Location Based */
<<include InitUnitGroupAll>>
<<include InitUnitGroupVale>>
<<include InitUnitGroupForest>>
<<include InitUnitGroupCity>>
<<include InitUnitGroupDesert>>
<<include InitUnitGroupSea>>
/* Race Based */
<<include InitUnitGroupHumanVale>>
<<include InitUnitGroupHumanDesert>>
<<include InitUnitGroupHumanSea>>
<<include InitUnitGroupHumanKingdom>>
<<include InitUnitGroupWerewolf>>
<<include InitUnitGroupElf>>
<<include InitUnitGroupNeko>>
<<include InitUnitGroupOrc>>
<<include InitUnitGroupDragonkin>>
<<include InitUnitGroupDemon>>
/* Job Based */
<<include InitUnitGroupSlaves>>
<<include InitUnitGroupSlavers>>
/* Quest based */
<<include 'LoadUnitGroupOthers'>>
/* special "null" unit group */
<<run new setup.UnitGroup(
'none',
'Special: Empty unit group',
[],
0,
[]
)>><<set setup.ALLUNITGROUPSMALE = [
[setup.unitpool.race_humankingdom_male, 1],
[setup.unitpool.race_humanvale_male, 0.4],
[setup.unitpool.race_humandesert_male, 0.2],
[setup.unitpool.race_humansea_male, 0.04],
[setup.unitpool.race_neko_male, 0.4],
[setup.unitpool.race_werewolf_male, 0.1],
[setup.unitpool.race_elf_male, 0.4],
[setup.unitpool.race_orc_male, 0.15],
[setup.unitpool.race_dragonkin_male, 0.003],
[setup.unitpool.race_demon_male, 0.002],
]>>
<<set setup.ALLUNITGROUPSFEMALE = [
[setup.unitpool.race_humankingdom_female, 1],
[setup.unitpool.race_humanvale_female, 0.4],
[setup.unitpool.race_humandesert_female, 0.2],
[setup.unitpool.race_humansea_female, 0.04],
[setup.unitpool.race_neko_female, 0.4],
[setup.unitpool.race_werewolf_female, 0.1],
[setup.unitpool.race_elf_female, 0.4],
[setup.unitpool.race_orc_female, 0.15],
[setup.unitpool.race_dragonkin_female, 0.003],
[setup.unitpool.race_demon_female, 0.002],
]>>
<<set setup.ALLUNITGROUPS = setup.ALLUNITGROUPSMALE.concat(setup.ALLUNITGROUPSFEMALE)>>
<<run new setup.UnitGroup(
'all',
'People from around the world: All gender',
setup.ALLUNITGROUPS,
0,
[
]
)>>
<<run new setup.UnitGroup(
'allmale',
'People from around the world: Male',
setup.ALLUNITGROUPSMALE,
0,
[
]
)>>
<<run new setup.UnitGroup(
'allfemale',
'People from around the world: Female',
setup.ALLUNITGROUPSFEMALE,
0,
[
]
)>><<set _males = [
[setup.unitpool.race_humankingdom_male, 30],
]>>
<<set _females = [
[setup.unitpool.race_humankingdom_female, 30],
]>>
<<run new setup.UnitGroup(
'city_all',
'Residents of the City of Lucgate: All gender',
setup.ALLUNITGROUPS.concat(_males).concat(_females),
0,
[]
)>>
<<run new setup.UnitGroup(
'city_allmale',
'Residents of the City of Lucgate: Male',
setup.ALLUNITGROUPSMALE.concat(_males),
0,
[]
)>>
<<run new setup.UnitGroup(
'city_allfemale',
'Residents of the City of Lucgate: Female',
setup.ALLUNITGROUPSFEMALE.concat(_females),
0,
[]
)>><<set _males = [
[setup.unitpool.race_orc_male, 15],
[setup.unitpool.race_humandesert_male, 15],
]>>
<<set _females = [
[setup.unitpool.race_orc_female, 15],
[setup.unitpool.race_humandesert_female, 15],
]>>
<<run new setup.UnitGroup(
'desert_all',
'Residents of the Eastern Deserts: All gender',
setup.ALLUNITGROUPS.concat(_males).concat(_females),
0,
[]
)>>
<<run new setup.UnitGroup(
'desert_allmale',
'Residents of the Eastern Deserts: Male',
setup.ALLUNITGROUPSMALE.concat(_males),
0,
[]
)>>
<<run new setup.UnitGroup(
'desert_allfemale',
'Residents of the Eastern Deserts: Female',
setup.ALLUNITGROUPSFEMALE.concat(_females),
0,
[]
)>><<set _males = [
[setup.unitpool.race_neko_male, 15],
[setup.unitpool.race_elf_male, 15],
]>>
<<set _females = [
[setup.unitpool.race_neko_female, 15],
[setup.unitpool.race_elf_female, 15],
]>>
<<run new setup.UnitGroup(
'forest_all',
'Residents of the Western Forests: All gender',
setup.ALLUNITGROUPS.concat(_males).concat(_females),
0,
[]
)>>
<<run new setup.UnitGroup(
'forest_allmale',
'Residents of the Western Forests: Male',
setup.ALLUNITGROUPSMALE.concat(_males),
0,
[]
)>>
<<run new setup.UnitGroup(
'forest_allfemale',
'Residents of the Western Forests: Female',
setup.ALLUNITGROUPSFEMALE.concat(_females),
0,
[]
)>><<set _males = [
[setup.unitpool.race_humansea_male, 5],
[setup.unitpool.race_dragonkin_male, 0.8],
]>>
<<set _females = [
[setup.unitpool.race_humansea_female, 5],
[setup.unitpool.race_dragonkin_female, 0.8],
]>>
<<run new setup.UnitGroup(
'sea_all',
'Residents of the Southern Seas: All gender',
setup.ALLUNITGROUPS.concat(_males).concat(_females),
0,
[]
)>>
<<run new setup.UnitGroup(
'sea_allmale',
'Residents of the Southern Seas: Male',
setup.ALLUNITGROUPSMALE.concat(_males),
0,
[]
)>>
<<run new setup.UnitGroup(
'sea_allfemale',
'Residents of the Southern Seas: Female',
setup.ALLUNITGROUPSFEMALE.concat(_females),
0,
[]
)>><<set _males = [
[setup.unitpool.race_humanvale_male, 25],
[setup.unitpool.race_werewolf_male, 5],
]>>
<<set _females = [
[setup.unitpool.race_humanvale_female, 25],
[setup.unitpool.race_werewolf_female, 5],
]>>
<<run new setup.UnitGroup(
'vale_all',
'Residents of the Northern Vale: All gender',
setup.ALLUNITGROUPS.concat(_males).concat(_females),
0,
[]
)>>
<<run new setup.UnitGroup(
'vale_allmale',
'Residents of the Northern Vale: Male',
setup.ALLUNITGROUPSMALE.concat(_males),
0,
[]
)>>
<<run new setup.UnitGroup(
'vale_allfemale',
'Residents of the Northern Vale: Female',
setup.ALLUNITGROUPSFEMALE.concat(_females),
0,
[]
)>><<run new setup.UnitGroup(
'quest_all_noble',
'nobles from all around the world',
setup.ALLUNITGROUPS,
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
]
)>>
<<run new setup.UnitGroup(
'quest_humanvale_farmer',
'farmers of the northern vale',
[
[setup.unitpool.race_humanvale_male, 1],
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_farmer)
]
)>>
<<run new setup.UnitGroup(
'quest_humanvale_militia',
'militias of the northern vale',
[
[setup.unitpool.race_humanvale_male, 1],
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier)
]
)>>
<<run new setup.UnitGroup(
'quest_humanvale_mystic',
'mystic of the northern vale',
[
[setup.unitpool.race_humanvale_male, 1],
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
setup.qc.TraitReplace('unit', setup.trait.magic_water),
setup.qc.BgTraitReset('unit', setup.trait.bg_apprentice),
]
)>>
<<run new setup.UnitGroup(
'quest_humanvale_mysticleader',
'mystic of the northern vale',
[
[setup.unitpool.race_humanvale_male, 1],
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
setup.qc.TraitReplace('unit', setup.trait.magic_water_master),
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_knight',
'knight of the kingdom',
[
[setup.unitpool.race_humankingdom_male, 0.7],
[setup.unitpool.race_humankingdom_female, 0.3],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_knight),
setup.qc.TraitReplace('unit', setup.trait.per_honorable),
setup.qc.TraitReplace('unit', setup.trait.per_chaste),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_squire',
'squire of the kingdom',
[
[setup.unitpool.race_humankingdom_male, 0.6],
[setup.unitpool.race_humankingdom_female, 0.4],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier),
setup.qc.AddTitle('unit', 'quest_knight_in_training_squire'),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_male',
'male cow of the kingdom',
[
[setup.unitpool.race_humankingdom_male, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.balls_huge),
setup.qc.TraitReplace('unit', setup.trait.dick_huge),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_male_titanic',
'male cow of the kingdom',
[
[setup.unitpool.race_humankingdom_male, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.balls_titanic),
setup.qc.TraitReplace('unit', setup.trait.dick_titanic),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_female',
'female cow of the kingdom',
[
[setup.unitpool.race_humankingdom_female, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.breast_huge),
setup.qc.TraitReplace('unit', setup.trait.vagina_gape),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_female_titanic',
'female cow of the kingdom',
[
[setup.unitpool.race_humankingdom_female, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.breast_titanic),
setup.qc.TraitReplace('unit', setup.trait.vagina_gape),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.training_mindbreak),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_nobledaughter',
'noble daughter of the kingdom',
[
[setup.unitpool.race_humankingdom_female, 1],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitReplace('unit', setup.trait.face_attractive),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_nobledaughter_ravaged',
'noble daughter of the kingdom',
[
[
setup.unitpool.race_humankingdom_female, 1
],
],
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitReplace('unit', setup.trait.vagina_gape),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_all_healslut',
'heal slut of the kingdom',
setup.unitgroup.city_all.getUnitPools(),
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_healer),
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict),
setup.qc.TraitReplace('unit', setup.trait.per_submissive),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_all_windstudent',
'wind mage of the kingdom',
setup.unitgroup.city_all.getUnitPools(),
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_apprentice),
setup.qc.Trait('unit', setup.trait.magic_wind),
]
)>>
<<run new setup.UnitGroup(
'quest_fuckholeslaves',
'fuckholeslaves',
[
],
0,
[
]
)>><<run new setup.UnitGroup(
'demon',
'Demon: All gender',
[
[setup.unitpool.race_demon_male, 1],
[setup.unitpool.race_demon_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'demonmale',
'Demon: Male',
[
[setup.unitpool.race_demon_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'demonfemale',
'Demon: Female',
[
[setup.unitpool.race_demon_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'dragonkin',
'Dragonkin: All gender',
[
[setup.unitpool.race_dragonkin_male, 1],
[setup.unitpool.race_dragonkin_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'dragonkinmale',
'Dragonkin: Male',
[
[setup.unitpool.race_dragonkin_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'dragonkinfemale',
'Dragonkin: Female',
[
[setup.unitpool.race_dragonkin_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'elf',
'Elf: All gender',
[
[setup.unitpool.race_elf_male, 1],
[setup.unitpool.race_elf_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'elfmale',
'Elf: Male',
[
[setup.unitpool.race_elf_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'elffemale',
'Elf: Female',
[
[setup.unitpool.race_elf_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'humandesert',
'Human (Desert): All gender',
[
[setup.unitpool.race_humandesert_male, 1],
[setup.unitpool.race_humandesert_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humandesertmale',
'Human (Desert): Male',
[
[setup.unitpool.race_humandesert_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humandesertfemale',
'Human (Desert): Female',
[
[setup.unitpool.race_humandesert_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'humankingdom',
'Humans (Kingdom): All gender',
[
[setup.unitpool.race_humankingdom_male, 1],
[setup.unitpool.race_humankingdom_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humankingdommale',
'Human (Kingdom): Male',
[
[setup.unitpool.race_humankingdom_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humankingdomfemale',
'Human (Kingdom): Female',
[
[setup.unitpool.race_humankingdom_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'humansea',
'Human (Sea): All gender',
[
[setup.unitpool.race_humansea_male, 1],
[setup.unitpool.race_humansea_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humanseamale',
'Human (Sea): Male',
[
[setup.unitpool.race_humansea_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humanseafemale',
'Human (Sea): Female',
[
[setup.unitpool.race_humansea_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'humanvale',
'Human (Vale): All gender',
[
[setup.unitpool.race_humanvale_male, 1],
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humanvalemale',
'Human (Vale): Male',
[
[setup.unitpool.race_humanvale_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'humanvalefemale',
'Human (Vale): Female',
[
[setup.unitpool.race_humanvale_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'neko',
'Neko: All Gender',
[
[setup.unitpool.race_neko_male, 1],
[setup.unitpool.race_neko_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'nekomale',
'Neko: Male',
[
[setup.unitpool.race_neko_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'nekofemale',
'Neko: Female',
[
[setup.unitpool.race_neko_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'orc',
'Orc: All Gender',
[
[setup.unitpool.race_orc_male, 1],
[setup.unitpool.race_orc_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'orcmale',
'Orc: Male',
[
[setup.unitpool.race_orc_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'orcfemale',
'Orc: Female',
[
[setup.unitpool.race_orc_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'werewolf',
'Werewolf: All Gender',
[
[setup.unitpool.race_werewolf_male, 1],
[setup.unitpool.race_werewolf_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'werewolfmale',
'Werewolf: Male',
[
[setup.unitpool.race_werewolf_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'werewolffemale',
'Werewolf: Female',
[
[setup.unitpool.race_werewolf_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'missingslavers',
'Special: Missing Slavers',
[],
1.0,
[]
)>><<run new setup.UnitGroup(
'missingslaves',
'Special: Missing Slaves',
[
],
1.0,
[
]
)>>
<<run new setup.UnitGroup(
'soldslaves',
'Special: Sold Slaves',
[
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'escapedslaves',
'Special: Escaped Slaves',
[
],
1.0,
[
]
)>><<set setup.UnitPoolHelper.RACE_DEMON_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_DEMON_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_demon)>>
<<set setup.UnitPoolHelper.RACE_DEMON_MALE.bg = {
chances: {
'bg_farmer': 0.0001,
'bg_noble': 0.1,
'bg_slave': 0.0001,
'bg_mercenary': 0.001,
'bg_monk': 0.001,
'bg_pirate': 0.001,
'bg_thief': 0.001,
'bg_mystic': 0.1,
'bg_hunter': 0.001,
'bg_priest': 0.0001,
'bg_whore': 0.001,
'bg_laborer': 0.001,
'bg_merchant': 0.001,
'bg_soldier': 0.01,
'bg_wildman': 0.001,
'bg_nomad': 0.001,
'bg_raider': 0.01,
'bg_adventurer': 0.01,
'bg_entertainer': 0.001,
'bg_demon': 1,
'bg_knight': 0.01,
'bg_healer': 0.0001,
'bg_foodworker': 0.001,
'bg_slaver': 0.1,
'bg_engineer': 0.0001,
'bg_unemployed': 0.00001,
'bg_artisan': 0.0001,
'bg_seaman': 0.0001,
'bg_wiseman': 0.0001,
'bg_woodsman': 0.0001,
'bg_clerk': 0.0001,
'bg_scholar': 0.0001,
'bg_thug': 0.01,
'bg_mythical': 0.01,
'bg_royal': 0.01,
'bg_maid': 0.00001,
'bg_apprentice': 0.0001,
'bg_informer': 0.0001,
'bg_assassin': 0.01,
'bg_metalworker': 0.0001,
'bg_artist': 0.0001,
'bg_boss': 0.01,
'bg_courtesan': 0.01,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_lunatic += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_lustful += 0.3>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_sexaddict += 0.15>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_cruel += 0.2>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_masochistic += 0.05>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_independent += 0.2>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_dominant += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_submissive += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.per.chances.per_evil += 0.3>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_water += 0.015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_water_master += 0.0015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_fire += 0.015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_fire_master += 0.0015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_wind += 0.015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_wind_master += 0.0015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_earth += 0.015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_earth_master += 0.0015>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_dark += 0.2>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_dark_master += 0.02>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_light /= 20.0>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.skill.chances.magic_light_master /= 20.0>>
<<set setup.UnitPoolHelper.RACE_DEMON_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_DEMON_MALE)>>
<<set setup.UnitPoolHelper.RACE_DEMON_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_DEMON_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.muscle.chances.muscle_verystrong += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.muscle.chances.muscle_extremelystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.height.chances.height_tall += 0.3>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.height.chances.height_giant += 0.05>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.dick.chances.dick_large += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.dick.chances.dick_huge += 0.5>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.dick.chances.dick_titanic += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.balls.chances.balls_large += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.balls.chances.balls_huge += 0.5>>
<<run setup.UnitPoolHelper.RACE_DEMON_MALE.balls.chances.balls_titanic += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.muscle.chances.muscle_verystrong += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.muscle.chances.muscle_extremelystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.height.chances.height_tall += 0.3>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.height.chances.height_giant += 0.05>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.breast.chances.breast_large += 0.1>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.breast.chances.breast_huge += 0.5>>
<<run setup.UnitPoolHelper.RACE_DEMON_FEMALE.breast.chances.breast_titanic += 0.1>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_DEMON_MALE,
setup.UnitPoolHelper.RACE_DEMON_FEMALE,
setup.trait.race_demon,
)>>
<<run new setup.UnitPool(
'race_demon_male',
'Demon Male',
setup.UnitPoolHelper.RACE_DEMON_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_demon_female',
'Demon Female',
setup.UnitPoolHelper.RACE_DEMON_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_DRAGONKIN_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_dragonkin)>>
<<set setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.bg = {
chances: {
'bg_farmer': 0.0001,
'bg_noble': 0.1,
'bg_slave': 0.0001,
'bg_mercenary': 0.1,
'bg_monk': 0.1,
'bg_pirate': 0.001,
'bg_thief': 0.1,
'bg_mystic': 1,
'bg_hunter': 0.5,
'bg_priest': 0.5,
'bg_whore': 0.0001,
'bg_laborer': 0.0001,
'bg_merchant': 0.001,
'bg_soldier': 1,
'bg_wildman': 0.00001,
'bg_nomad': 0.00001,
'bg_raider': 0.001,
'bg_adventurer': 1,
'bg_entertainer': 0.1,
'bg_demon': 0,
'bg_knight': 0.1,
'bg_healer': 0.05,
'bg_foodworker': 0.001,
'bg_slaver': 0.05,
'bg_engineer': 0.001,
'bg_unemployed': 0.00001,
'bg_artisan': 0.05,
'bg_seaman': 0.05,
'bg_wiseman': 0.05,
'bg_woodsman': 0.00001,
'bg_clerk': 0.01,
'bg_scholar': 0.05,
'bg_thug': 0.01,
'bg_mythical': 0.01,
'bg_royal': 0.01,
'bg_maid': 0.000001,
'bg_apprentice': 0.05,
'bg_informer': 0.05,
'bg_assassin': 0.05,
'bg_metalworker': 0.5,
'bg_artist': 0.01,
'bg_boss': 0.0001,
'bg_courtesan': 0.0001,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_chaste += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_brave += 0.2>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_honorable += 0.2>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_tough += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_serious += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.per.chances.per_proud += 0.2>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_alchemy += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_animal += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_ambidextrous += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_connected += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_creative += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_intimidating += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_hypnotic += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.skill_entertain += 0.015>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.magic_light += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.magic_light_master += 0.01>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.magic_dark /= 5.0>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.skill.chances.magic_dark_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_DRAGONKIN_MALE)>>
<<set setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.muscle.chances.muscle_verystrong += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.muscle.chances.muscle_extremelystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.height.chances.height_tall += 0.5>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.height.chances.height_giant += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.dick.chances.dick_large += 0.5>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.dick.chances.dick_huge += 0.3>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.dick.chances.dick_titanic += 0.05>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.balls.chances.balls_large += 0.5>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.balls.chances.balls_huge += 0.3>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_MALE.balls.chances.balls_titanic += 0.05>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.muscle.chances.muscle_verystrong += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.muscle.chances.muscle_extremelystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.height.chances.height_tall += 0.5>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.height.chances.height_giant += 0.1>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.breast.chances.breast_large += 0.5>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.breast.chances.breast_huge += 0.3>>
<<run setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE.breast.chances.breast_titanic += 0.05>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_DRAGONKIN_MALE,
setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE,
setup.trait.race_dragonkin,
)>>
<<run new setup.UnitPool(
'race_dragonkin_male',
'Dragonkin Male',
setup.UnitPoolHelper.RACE_DRAGONKIN_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_dragonkin_female',
'Dragonkin Female',
setup.UnitPoolHelper.RACE_DRAGONKIN_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_ELF_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_ELF_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_elf)>>
<<set setup.UnitPoolHelper.RACE_ELF_MALE.bg = {
chances: {
'bg_farmer': 1,
'bg_noble': 0.05,
'bg_slave': 0.05,
'bg_mercenary': 0.1,
'bg_monk': 0.05,
'bg_pirate': 0.1,
'bg_thief': 0.1,
'bg_mystic': 0.1,
'bg_hunter': 1,
'bg_priest': 0.5,
'bg_whore': 0.1,
'bg_laborer': 1,
'bg_merchant': 0.5,
'bg_soldier': 0.1,
'bg_wildman': 0.01,
'bg_nomad': 0.01,
'bg_raider': 0.1,
'bg_adventurer': 0.01,
'bg_entertainer': 0.2,
'bg_demon': 0,
'bg_knight': 0.01,
'bg_healer': 0.1,
'bg_foodworker': 1,
'bg_slaver': 0.1,
'bg_engineer': 0.1,
'bg_unemployed': 1,
'bg_artisan': 0.5,
'bg_seaman': 0.0001,
'bg_wiseman': 0.2,
'bg_woodsman': 1,
'bg_clerk': 0.2,
'bg_scholar': 0.2,
'bg_thug': 0.1,
'bg_mythical': 0.001,
'bg_royal': 0.001,
'bg_maid': 0.2,
'bg_apprentice': 1,
'bg_informer': 0.05,
'bg_assassin': 0.02,
'bg_metalworker': 0.01,
'bg_artist': 0.2,
'bg_boss': 0.00001,
'bg_courtesan': 0.1,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.per.chances.per_smart += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.per.chances.per_nimble += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.per.chances.per_logical += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.per.chances.per_studious += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.skill.chances.skill_alchemy += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.skill.chances.magic_earth += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.skill.chances.magic_earth_master += 0.01>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.skill.chances.magic_wind /= 5.0>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.skill.chances.magic_wind_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_ELF_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_ELF_MALE)>>
<<set setup.UnitPoolHelper.RACE_ELF_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_ELF_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.muscle.chances.muscle_weak += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.muscle.chances.muscle_veryweak += 0.03>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.muscle.chances.muscle_extremelyweak += 0.002>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.face.chances.face_attractive += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_MALE.face.chances.face_beautiful += 0.03>>
<<run setup.UnitPoolHelper.RACE_ELF_FEMALE.muscle.chances.muscle_weak += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_FEMALE.muscle.chances.muscle_veryweak += 0.03>>
<<run setup.UnitPoolHelper.RACE_ELF_FEMALE.muscle.chances.muscle_extremelyweak += 0.002>>
<<run setup.UnitPoolHelper.RACE_ELF_FEMALE.face.chances.face_attractive += 0.1>>
<<run setup.UnitPoolHelper.RACE_ELF_FEMALE.face.chances.face_beautiful += 0.03>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_ELF_MALE,
setup.UnitPoolHelper.RACE_ELF_FEMALE,
setup.trait.race_elf,
)>>
<<run new setup.UnitPool(
'race_elf_male',
'Elf Male',
setup.UnitPoolHelper.RACE_ELF_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_elf_female',
'Elf Female',
setup.UnitPoolHelper.RACE_ELF_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_HUMANDESERT_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_humandesert)>>
<<set setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.bg = {
chances: {
'bg_farmer': 0.1,
'bg_noble': 0.001,
'bg_slave': 0.5,
'bg_mercenary': 0.5,
'bg_monk': 0.5,
'bg_pirate': 0.5,
'bg_thief': 0.5,
'bg_mystic': 0.01,
'bg_hunter': 0.1,
'bg_priest': 0.1,
'bg_whore': 0.5,
'bg_laborer': 1,
'bg_merchant': 0.1,
'bg_soldier': 0.3,
'bg_wildman': 0.1,
'bg_nomad': 1,
'bg_raider': 1,
'bg_adventurer': 0.01,
'bg_entertainer': 0.1,
'bg_demon': 0,
'bg_knight': 0.01,
'bg_healer': 0.1,
'bg_foodworker': 1,
'bg_slaver': 0.5,
'bg_engineer': 0.01,
'bg_unemployed': 1,
'bg_artisan': 0.5,
'bg_seaman': 0.1,
'bg_wiseman': 0.1,
'bg_woodsman': 0.01,
'bg_clerk': 0.1,
'bg_scholar': 0.05,
'bg_thug': 1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.02,
'bg_apprentice': 0.1,
'bg_informer': 0.5,
'bg_assassin': 0.1,
'bg_metalworker': 0.1,
'bg_artist': 0.2,
'bg_boss': 0.0001,
'bg_courtesan': 0.02,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.per.chances.per_tough += 0.2>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.per.chances.per_serious += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.per.chances.per_stubborn += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.per.chances.per_attentive += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.per.chances.per_evil += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.skill.chances.skill_creative += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.skill.chances.magic_fire += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.skill.chances.magic_fire_master += 0.005>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.skill.chances.magic_water /= 5.0>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.skill.chances.magic_water_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANDESERT_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.face.chances.face_attractive += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_MALE.face.chances.face_beautiful += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE.face.chances.face_attractive += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE.face.chances.face_beautiful += 0.01>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_HUMANDESERT_MALE,
setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE,
setup.trait.race_humandesert,
)>>
<<run new setup.UnitPool(
'race_humandesert_male',
'Human (Desert) Male',
setup.UnitPoolHelper.RACE_HUMANDESERT_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_humandesert_female',
'Human (Desert) Female',
setup.UnitPoolHelper.RACE_HUMANDESERT_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_humankingdom)>>
<<set setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.bg = {
chances: {
'bg_farmer': 1,
'bg_noble': 0.1,
'bg_slave': 0.01,
'bg_mercenary': 0.5,
'bg_monk': 0.1,
'bg_pirate': 0.1,
'bg_thief': 0.5,
'bg_mystic': 0.02,
'bg_hunter': 0.1,
'bg_priest': 0.1,
'bg_whore': 0.1,
'bg_laborer': 1,
'bg_merchant': 0.5,
'bg_soldier': 1,
'bg_wildman': 0.0001,
'bg_nomad': 0.0001,
'bg_raider': 0.1,
'bg_adventurer': 0.01,
'bg_entertainer': 0.5,
'bg_demon': 0,
'bg_knight': 0.02,
'bg_healer': 0.1,
'bg_foodworker': 1,
'bg_slaver': 0.01,
'bg_engineer': 0.05,
'bg_unemployed': 1,
'bg_artisan': 0.5,
'bg_seaman': 0.5,
'bg_wiseman': 0.1,
'bg_woodsman': 0.3,
'bg_clerk': 1,
'bg_scholar': 0.1,
'bg_thug': 1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 1,
'bg_apprentice': 0.3,
'bg_informer': 0.3,
'bg_assassin': 0.05,
'bg_metalworker': 0.01,
'bg_artist': 0.1,
'bg_boss': 0.005,
'bg_courtesan': 0.1,
},
min: 1,
max: 1,
}>>
<<set setup.UnitPoolHelper.RACE_HUMANKINGDOM_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANKINGDOM_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.skill.chances.skill_connected += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.skill.chances.magic_wind += 0.03>>
<<run setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.skill.chances.magic_wind_master += 0.003>>
<<run setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.skill.chances.magic_earth /= 5.0>>
<<run setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE.skill.chances.magic_earth_master /= 5.0>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANKINGDOM_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE,
setup.UnitPoolHelper.RACE_HUMANKINGDOM_FEMALE,
setup.trait.race_humankingdom,
)>>
<<run new setup.UnitPool(
'race_humankingdom_male',
'Human (Kingdom-born) Male',
setup.UnitPoolHelper.RACE_HUMANKINGDOM_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_humankingdom_female',
'Human (Kingdom-born) Female',
setup.UnitPoolHelper.RACE_HUMANKINGDOM_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_HUMANLIKE_MALE = {}>>
<<set setup.UnitPoolHelper.RACE_HUMANLIKE_MALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_male)>>
<<set setup.UnitPoolHelper.RACE_HUMANLIKE_MALE.per = setup.UnitPoolHelper.getTraitChanceObj(
[
[
setup.TraitHelper.getAllTraitsOfTags(['per', 'common']),
3.0
],
[
setup.TraitHelper.getAllTraitsOfTags(['per', 'medium']),
0.2
],
[
setup.TraitHelper.getAllTraitsOfTags(['per', 'rare']),
0.02
],
[
setup.TraitHelper.getAllTraitsOfTags(['per', 'unicorn']),
0.002
],
],
1,
5,
)>>
<<set setup.UnitPoolHelper.RACE_HUMANLIKE_MALE.skill = setup.UnitPoolHelper.getTraitChanceObj(
[
[
setup.TraitHelper.getAllTraitsOfTags(['skill', 'common']),
0.075
],
[
setup.TraitHelper.getAllTraitsOfTags(['skill', 'medium']),
0.075
],
[
setup.TraitHelper.getAllTraitsOfTags(['skill', 'rare']),
0.015
],
[
setup.TraitHelper.getAllTraitsOfTags(['skill', 'unicorn']),
0.0015
],
],
0,
3,
)>>
<<set setup.UnitPoolHelper.RACE_HUMANLIKE_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANLIKE_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE,
['muscle', 'dick', 'balls', 'anus', 'height', 'face'],
{
common: 0.25,
medium: 0.04,
rare: 0.01,
unicorn: 0.001,
},
)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANLIKE_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.25,
medium: 0.04,
rare: 0.01,
unicorn: 0.001,
},
)>><<set setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_humansea)>>
<<set setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.bg = {
chances: {
'bg_farmer': 1,
'bg_noble': 0.1,
'bg_slave': 0.5,
'bg_mercenary': 0.1,
'bg_monk': 0.1,
'bg_pirate': 0.1,
'bg_thief': 0.5,
'bg_mystic': 0.01,
'bg_hunter': 0.1,
'bg_priest': 0.1,
'bg_whore': 0.5,
'bg_laborer': 1,
'bg_merchant': 1,
'bg_soldier': 0.1,
'bg_wildman': 0.01,
'bg_nomad': 0.01,
'bg_raider': 0.1,
'bg_adventurer': 0.1,
'bg_entertainer': 0.1,
'bg_demon': 0.001,
'bg_knight': 0.01,
'bg_healer': 0.2,
'bg_foodworker': 1,
'bg_slaver': 0.5,
'bg_engineer': 0.1,
'bg_unemployed': 0.5,
'bg_artisan': 1,
'bg_seaman': 1,
'bg_wiseman': 0.1,
'bg_woodsman': 0.01,
'bg_clerk': 0.2,
'bg_scholar': 0.1,
'bg_thug': 0.1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.1,
'bg_apprentice': 0.5,
'bg_informer': 0.5,
'bg_assassin': 0.5,
'bg_metalworker': 0.1,
'bg_artist': 0.2,
'bg_boss': 0.00001,
'bg_courtesan': 0.2,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_honorable += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_evil += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_lunatic += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_sexaddict += 0.02>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_masochistic += 0.005>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_dominant += 0.03>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.per.chances.per_submissive += 0.03>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.skill.chances.skill_hypnotic += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.skill.chances.magic_light += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.skill.chances.magic_light_master += 0.005>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.skill.chances.magic_dark /= 5.0>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.skill.chances.magic_dark_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.muscle.chances.muscle_verystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.muscle.chances.muscle_veryweak += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.face.chances.face_beautiful += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.face.chances.face_hideous += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.height.chances.height_dwarf += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.height.chances.height_giant += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.dick.chances.dick_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.dick.chances.dick_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.dick.chances.dick_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.balls.chances.balls_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.balls.chances.balls_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE.balls.chances.balls_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.muscle.chances.muscle_verystrong += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.muscle.chances.muscle_veryweak += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.face.chances.face_beautiful += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.face.chances.face_hideous += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.height.chances.height_dwarf += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.height.chances.height_giant += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.breast.chances.breast_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.breast.chances.breast_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE.breast.chances.breast_titanic += 0.001>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE,
setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE,
setup.trait.race_humansea,
)>>
<<run new setup.UnitPool(
'race_humansea_male',
'Human (Sea) Male',
setup.UnitPoolHelper.RACE_HUMANEXOTIC_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_humansea_female',
'Human (Sea) Female',
setup.UnitPoolHelper.RACE_HUMANEXOTIC_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_humanvale)>>
<<set setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.bg = {
chances: {
'bg_farmer': 1,
'bg_noble': 0.001,
'bg_slave': 1,
'bg_mercenary': 0.5,
'bg_monk': 0.5,
'bg_pirate': 0.1,
'bg_thief': 0.1,
'bg_mystic': 0.001,
'bg_hunter': 0.1,
'bg_priest': 0.01,
'bg_whore': 0.1,
'bg_laborer': 1,
'bg_merchant': 0.1,
'bg_soldier': 1,
'bg_wildman': 0.1,
'bg_nomad': 0.1,
'bg_raider': 0.3,
'bg_adventurer': 0.1,
'bg_entertainer': 0.1,
'bg_demon': 0,
'bg_knight': 0.01,
'bg_healer': 0.1,
'bg_foodworker': 1,
'bg_slaver': 0.3,
'bg_engineer': 0.01,
'bg_unemployed': 1,
'bg_artisan': 0.2,
'bg_seaman': 0.01,
'bg_wiseman': 0.2,
'bg_woodsman': 0.1,
'bg_clerk': 0.01,
'bg_scholar': 0.05,
'bg_thug': 1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.1,
'bg_apprentice': 0.1,
'bg_informer': 0.1,
'bg_assassin': 0.01,
'bg_metalworker': 0.01,
'bg_artist': 0.01,
'bg_boss': 0.0001,
'bg_courtesan': 0.001,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.per.chances.per_honest += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.per.chances.per_brave += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.per.chances.per_loyal += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.skill.chances.magic_water += 0.05>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.skill.chances.magic_water_master += 0.005>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.skill.chances.magic_fire /= 5.0>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.skill.chances.magic_fire_master /= 5.0>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.skill.chances.skill_ambidextrous += 0.1>>
<<set setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE)>>
<<set setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.muscle.chances.muscle_strong += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE.muscle.chances.muscle_verystrong += 0.02>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE.muscle.chances.muscle_strong += 0.1>>
<<run setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE.muscle.chances.muscle_verystrong += 0.02>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE,
setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE,
setup.trait.race_humanvale,
)>>
<<run new setup.UnitPool(
'race_humanvale_male',
'Human (Vale) Male',
setup.UnitPoolHelper.RACE_HUMANPLAINS_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_humanvale_female',
'Human (Vale) Female',
setup.UnitPoolHelper.RACE_HUMANPLAINS_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_NEKO_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_NEKO_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_neko)>>
<<set setup.UnitPoolHelper.RACE_NEKO_MALE.bg = {
chances: {
'bg_farmer': 1,
'bg_noble': 0.001,
'bg_slave': 1,
'bg_mercenary': 0.01,
'bg_monk': 0.01,
'bg_pirate': 0.01,
'bg_thief': 1,
'bg_mystic': 0.01,
'bg_hunter': 1,
'bg_priest': 0.01,
'bg_whore': 1,
'bg_laborer': 1,
'bg_merchant': 0.1,
'bg_soldier': 0.1,
'bg_wildman': 0.1,
'bg_nomad': 0.1,
'bg_raider': 0.01,
'bg_adventurer': 0.01,
'bg_entertainer': 1,
'bg_demon': 0,
'bg_knight': 0.001,
'bg_healer': 0.02,
'bg_foodworker': 1,
'bg_slaver': 0.05,
'bg_engineer': 0.01,
'bg_unemployed': 1,
'bg_artisan': 0.2,
'bg_seaman': 0.05,
'bg_wiseman': 0.02,
'bg_woodsman': 1,
'bg_clerk': 0.1,
'bg_scholar': 0.05,
'bg_thug': 0.1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.2,
'bg_apprentice': 0.1,
'bg_informer': 0.8,
'bg_assassin': 0.1,
'bg_metalworker': 0.01,
'bg_artist': 0.01,
'bg_boss': 0.000001,
'bg_courtesan': 0.01,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_lustful += 0.1>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_sexaddict += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_playful += 0.1>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_active += 0.1>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_dominant += 0.05>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_submissive += 0.05>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.per.chances.per_dreamy += 0.1>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.skill.chances.skill_entertain += 0.1>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.skill.chances.magic_earth += 0.05>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.skill.chances.magic_earth_master += 0.005>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.skill.chances.magic_wind /= 5.0>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.skill.chances.magic_wind_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_NEKO_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_NEKO_MALE)>>
<<set setup.UnitPoolHelper.RACE_NEKO_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_NEKO_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.dick.chances.dick_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.dick.chances.dick_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.dick.chances.dick_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.balls.chances.balls_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.balls.chances.balls_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_MALE.balls.chances.balls_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_NEKO_FEMALE.breast.chances.breast_tiny += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_FEMALE.breast.chances.breast_huge += 0.01>>
<<run setup.UnitPoolHelper.RACE_NEKO_FEMALE.breast.chances.breast_titanic += 0.001>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_NEKO_MALE,
setup.UnitPoolHelper.RACE_NEKO_FEMALE,
setup.trait.race_neko,
)>>
<<run new setup.UnitPool(
'race_neko_male',
'Neko Male',
setup.UnitPoolHelper.RACE_NEKO_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_neko_female',
'Neko Female',
setup.UnitPoolHelper.RACE_NEKO_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_ORC_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_ORC_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_orc)>>
<<set setup.UnitPoolHelper.RACE_ORC_MALE.bg = {
chances: {
'bg_farmer': 0.1,
'bg_noble': 0.0001,
'bg_slave': 0.1,
'bg_mercenary': 1,
'bg_monk': 0.01,
'bg_pirate': 1,
'bg_thief': 0.5,
'bg_mystic': 0.01,
'bg_hunter': 0.5,
'bg_priest': 0.0001,
'bg_whore': 0.2,
'bg_laborer': 1,
'bg_merchant': 0.2,
'bg_soldier': 1,
'bg_wildman': 0.1,
'bg_nomad': 1,
'bg_raider': 1,
'bg_adventurer': 0.01,
'bg_entertainer': 0.1,
'bg_demon': 0,
'bg_knight': 0.001,
'bg_healer': 0.01,
'bg_foodworker': 1,
'bg_slaver': 1,
'bg_engineer': 0.01,
'bg_unemployed': 0.5,
'bg_artisan': 0.05,
'bg_seaman': 0.1,
'bg_wiseman': 0.02,
'bg_woodsman': 0.01,
'bg_clerk': 0.01,
'bg_scholar': 0.01,
'bg_thug': 1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.01,
'bg_apprentice': 0.01,
'bg_informer': 0.01,
'bg_assassin': 0.001,
'bg_metalworker': 0.3,
'bg_artist': 0.0001,
'bg_boss': 0.000001,
'bg_courtesan': 0.0001,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.per.chances.per_dominant += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.per.chances.per_active += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.per.chances.per_aggressive += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.per.chances.per_slow += 0.2>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.skill.chances.skill_intimidating += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.skill.chances.magic_fire += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.skill.chances.magic_fire_master += 0.01>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.skill.chances.magic_water /= 5.0>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.skill.chances.magic_water_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_ORC_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_ORC_MALE)>>
<<set setup.UnitPoolHelper.RACE_ORC_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_ORC_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.muscle.chances.muscle_strong += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.muscle.chances.muscle_verystrong += 0.03>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.muscle.chances.muscle_extremelystrong += 0.001>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.height.chances.height_tall += 0.2>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.height.chances.height_giant += 0.01>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.face.chances.face_ugly += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.face.chances.face_hideous += 0.03>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.dick.chances.dick_large += 0.3>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.dick.chances.dick_huge += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.dick.chances.dick_titanic += 0.005>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.balls.chances.balls_large += 0.3>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.balls.chances.balls_huge += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_MALE.balls.chances.balls_titanic += 0.005>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.breast.chances.breast_large += 0.3>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.breast.chances.breast_huge += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.breast.chances.breast_titanic += 0.005>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.muscle.chances.muscle_strong += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.muscle.chances.muscle_verystrong += 0.03>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.muscle.chances.muscle_extremelystrong += 0.001>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.height.chances.height_tall += 0.2>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.height.chances.height_giant += 0.01>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.face.chances.face_ugly += 0.1>>
<<run setup.UnitPoolHelper.RACE_ORC_FEMALE.face.chances.face_hideous += 0.03>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_ORC_MALE,
setup.UnitPoolHelper.RACE_ORC_FEMALE,
setup.trait.race_orc,
)>>
<<run new setup.UnitPool(
'race_orc_male',
'Orc Male',
setup.UnitPoolHelper.RACE_ORC_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_orc_female',
'Orc Female',
setup.UnitPoolHelper.RACE_ORC_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.UnitPoolHelper.RACE_WEREWOLF_MALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_HUMANLIKE_MALE)>>
<<set setup.UnitPoolHelper.RACE_WEREWOLF_MALE.race = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.race_werewolf)>>
<<set setup.UnitPoolHelper.RACE_WEREWOLF_MALE.bg = {
chances: {
'bg_farmer': 0.1,
'bg_noble': 0.001,
'bg_slave': 0.001,
'bg_mercenary': 0.1,
'bg_monk': 0.01,
'bg_pirate': 0.5,
'bg_thief': 0.5,
'bg_mystic': 0.01,
'bg_hunter': 1,
'bg_priest': 0.01,
'bg_whore': 0.00001,
'bg_laborer': 1,
'bg_merchant': 0.01,
'bg_soldier': 0.1,
'bg_wildman': 0.5,
'bg_nomad': 0.5,
'bg_raider': 0.5,
'bg_adventurer': 0.1,
'bg_entertainer': 0.01,
'bg_demon': 0,
'bg_knight': 0.001,
'bg_healer': 0.01,
'bg_foodworker': 0.5,
'bg_slaver': 0.5,
'bg_engineer': 0.01,
'bg_unemployed': 0.2,
'bg_artisan': 0.05,
'bg_seaman': 0.01,
'bg_wiseman': 0.02,
'bg_woodsman': 1,
'bg_clerk': 0.01,
'bg_scholar': 0.01,
'bg_thug': 1,
'bg_mythical': 0,
'bg_royal': 0.001,
'bg_maid': 0.01,
'bg_apprentice': 0.01,
'bg_informer': 0.01,
'bg_assassin': 0.01,
'bg_metalworker': 0.1,
'bg_artist': 0.02,
'bg_boss': 0.000001,
'bg_courtesan': 0.0001,
},
min: 1,
max: 1,
}>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.per.chances.per_dominant += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.per.chances.per_loner += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.per.chances.per_independent += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.per.chances.per_calm += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.skill.chances.skill_animal += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.skill.chances.magic_water += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.skill.chances.magic_water_master += 0.01>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.skill.chances.magic_fire /= 5.0>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.skill.chances.magic_fire_master /= 5.0>>
<<set setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE = setup.deepCopy(
setup.UnitPoolHelper.RACE_WEREWOLF_MALE)>>
<<set setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.gender = setup.UnitPoolHelper.getOneTraitObj(
setup.trait.gender_female)>>
<<run setup.UnitPoolHelper.physHelper(
setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE,
['muscle', 'breast', 'vagina', 'anus', 'height', 'face'],
{
common: 0.4,
medium: 0.05,
rare: 0.001,
unicorn: 0,
},
)>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.muscle.chances.muscle_verystrong += 0.05>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.muscle.chances.muscle_extremelystrong += 0.001>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.dick.chances.dick_large += 0.2>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.dick.chances.dick_huge += 0.05>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.dick.chances.dick_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.balls.chances.balls_large += 0.2>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.balls.chances.balls_huge += 0.05>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_MALE.balls.chances.balls_titanic += 0.001>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.muscle.chances.muscle_strong += 0.2>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.muscle.chances.muscle_verystrong += 0.05>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.muscle.chances.muscle_extremelystrong += 0.001>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.breast.chances.breast_tiny += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.breast.chances.breast_small += 0.1>>
<<run setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE.breast.chances.breast_medium += 0.1>>
<<set setup.UnitPoolHelper.AddSkinTraits(
setup.UnitPoolHelper.RACE_WEREWOLF_MALE,
setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE,
setup.trait.race_werewolf,
)>>
<<run new setup.UnitPool(
'race_werewolf_male',
'Werewolf Male',
setup.UnitPoolHelper.RACE_WEREWOLF_MALE,
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'race_werewolf_female',
'Werewolf Female',
setup.UnitPoolHelper.RACE_WEREWOLF_FEMALE,
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.DEFAULT_INITIAL_SKILLS = Array(10).fill([8, 12])>>
<<set setup.unitpool = {}>>
<<include InitUnitPoolRaceHumanlike>>
<<include InitUnitPoolRaceHumanKingdom>>
<<include InitUnitPoolRaceHumanVale>>
<<include InitUnitPoolRaceHumanDesert>>
<<include InitUnitPoolRaceHumanSea>>
<<include InitUnitPoolRaceElf>>
<<include InitUnitPoolRaceNeko>>
<<include InitUnitPoolRaceWerewolf>>
<<include InitUnitPoolRaceOrc>>
<<include InitUnitPoolRaceDragonkin>>
<<include InitUnitPoolRaceDemon>><!-- used for tooltip -->
<<focwidget "bantercarddetails">>
<<set _initiator = $unit[$args[0]]>>
<<set _target = $unit[$args[1]]>>
<<set _friendship_amt = $args[2]>>
<<set _friendcheck = $fort.player.isHasBuilding(setup.buildingtemplate.moraleoffice)>>
<<= _initiator.rep()>>
gained
<<if _friendcheck>>
<<friendship _friendship_amt>>
<<else>>
some
<</if>>
<<if _friendship_amt >= 0>>
friendship
<<else>>
rivalry
<</if>>
with <<= _target.rep()>>
<br/>
<br/>
<<if _friendcheck>>
<<set _friendship_total = $friendship.getFriendship(_initiator, _target)>>
Total
<<if _friendship_amt >= 0>>
friendship:
<<else>>
rivalry:
<</if>>
<<friendship _friendship_total>>
<<else>>
Build a <<rep setup.buildingtemplate.moraleoffice>> to reveal more information.
<</if>>
<</focwidget>>
<<focwidget "bantercard">>
<<set _banter = $args[0]>>
<<set _initiator = _banter.getInitiator()>>
<<set _target = _banter.getTarget()>>
<<set _friendship_amt = _banter.getFriendshipAmt()>>
<<set _friendcheck = $fort.player.isHasBuilding(setup.buildingtemplate.moraleoffice)>>
<<bantertext _banter>>
<<set _tooltip = '<<bantercarddetails "' + _initiator.key + '" "' + _target.key + '" ' + _friendship_amt + '>>'>>
<small @data-tooltip="_tooltip">
<<if _friendcheck>>
<<friendship _friendship_amt '+'>>
<<else>>
<span @class="(_friendship_amt >= 0 ? 'friendshipspanplus' : 'friendshipspanmin')">
<<if _friendship_amt >= 0>>
+ friendship
<<else>>
+ rivalry
<</if>>
</span>
<</if>>
</small>
<</focwidget>>
/* Generate a random sentence about the $args[0] and their lover */
<<focwidget 'lovertextshort'>>
<<if $args[0].getLover()>>
<<set _banter = new setup.BanterInstance($args[0], $args[0].getLover(), 1)>>
<<bantertext _banter>>
<</if>>
<</focwidget>><<focwidget 'bedchambercard'>>
<div class='bedchambercard'>
<<foctimed 0s t8n>>
<<set _bedchamber = $args[0]>>
<<set _act = !$args[1]>>
<<capture _bedchamber, _act>>
<<nameof _bedchamber>>
owned by
<<= _bedchamber.getSlaver().rep()>>
<br/>
<<set _slaves = _bedchamber.getSlaves()>>
<<if _slaves.length>>
Slaves:
<<for _islave, _slave range _slaves>>
<<rep _slave>>
<</for>>
<<else>>
<<dangertext 'No slaves'>>
<</if>>
<<message '(Rules)'>>
<<for _irule, _rule range _bedchamber.getOptionMap()>>
Slaves <<= setup.BEDCHAMBER_OPTIONS[_irule][_rule].text>>.
<br/>
<</for>>
<</message>>
<<set _explanation = setup.SkillHelper.explainSkills(_bedchamber.getSkillAddition())>>
<<if _explanation>>
<br/>
<<= _explanation>>
<</if>>
<div class="equipmentgrid">
<<for _islotkey, _slotkey range Object.keys(setup.furnitureslot)>>
<div>
<<set _slot = setup.furnitureslot[_slotkey]>>
<span @class="_bedchamber.getFurniture(_slot).getTags().includes('basic') ? 'graytext' : ''">
<<= _bedchamber.getFurniture(_slot).rep('<<+.equipmentgrid-fullrow')>>
</span>
<<if _act>>
<<capture _slot>>
<<message '(change)' '(cancel)' 'target=<+.equipmentgrid-fullrow'>>
Options:
<<if !_bedchamber.getFurniture(_slot).getTags().includes('basic')>>
<<link '(remove)'>>
<<run _bedchamber.setFurniture(_slot, null)>>
<<focgoto>>
<</link>>
<</if>>
<<set _numitems = 0>>
<<for _ifur, _furraw range $inventory.getItems()>>
<<set _fur = _furraw.item>>
<<if _fur.getItemClass() == setup.itemclass.furniture &&
_fur.getSlot() == _slot &&
_fur != _bedchamber.getFurniture(_slot)>>
<<set _numitems = _numitems + 1>>
<<capture _fur>>
<div class="equipmentgrid-attachable">
<<rep _fur '<<<'>>
<<link '(place)'>>
<<run _bedchamber.setFurniture(_slot, _fur)>>
<<focgoto>>
<</link>>
</div>
<</capture>>
<</if>>
<</for>>
<<if !_numitems>>
<span>no items available</span>
<</if>>
<</message>>
<</capture>>
<</if>>
</div>
<div class="equipmentgrid-fullrow"></div>
<</for>>
</div>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'bedchambercardkey'>>
<<bedchambercard $bedchamber[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'buildingcardupgradelink'>>
<<set _building = $args[0]>>
<<set _act = !$args[1]>>
<<if _building.isHasUpgrade()>>
<<if _act>>
<<if _building.isUpgradable()>>
<<focbutton 'Upgrade'>>
<<run $args[0].upgrade()>>
<<refreshbuildings>>
<</focbutton>>
<<else>>
Cannot upgrade.
<</if>>
<</if>>
<<set _upgradecost = _building.getUpgradeCost()>>
<<if _upgradecost.length>>
Upgrade cost: <<costcard _upgradecost>>
<</if>>
<<set _requirements = _building.getUpgradePrerequisite()>>
<<if _requirements.length>>
<<requirementcard _requirements>>
<</if>>
/*
<br/>
On upgrade:
<<rewardcard _building.getTemplate().getOnBuildForLevel(_building.getLevel())>>
*/
<</if>>
<</focwidget>>
<<focwidget "buildingcard">>
<div class='buildingcard'>
<<foctimed 0s t8n>>
<<set _building = $args[0]>>
<<set _template = $args[0].getTemplate()>>
<<set _act = !$args[1]>>
<<capture _building, _template, _act>>
<<= setup.TagHelper.getTagsRep('buildinginstance', $args[0].getTemplate().getTags())>>
<<set _level = _building.getLevel()>>
<<set _maxlevel = _building.getTemplate().getMaxLevel()>>
<<if _maxlevel > 1>>
<<levelof _building >> / <<= _maxlevel>>
<</if>>
/* <<= _building.getImageRep() >> */
<<nameof _building >>
<<capture _building>>
<<buildingcardupgradelink _building $args[1]>>
<</capture>>
<<if _act>>
<<message '(description)'>>
<<include _template.description_passage >>
<</message>>
<<else>>
<<include _template.description_passage >>
<</if>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget "buildingcardkey">>
<<buildingcard $buildinginstance[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget 'buildingtemplatecardbuildlink'>>
<<set _template = $args[0]>>
<<set _act = !$args[1]>>
<<if _template.isBuildable(0) && _act>>
<<focbutton 'Build' >>
<<run $fort.player.build($args[0])>>
<<refreshbuildings>>
<</focbutton>>
<</if>>
<</focwidget>>
<<focwidget "buildingtemplatecard">>
<<set _template = $args[0]>>
<<set _act = !$args[1]>>
<<if _act && !_template.isBuildable()>>
<<set _class = 'buildingtemplatebadcard'>>
<<else>>
<<set _class = 'buildingtemplatecard'>>
<</if>>
<div @class='_class'>
<<foctimed 0s t8n>>
<<set _template = $args[0]>>
<<set _act = !$args[1]>>
<<capture _template, _act>>
/* <<= _template.getImageRep() >> */
<<buildingtemplatecardbuildlink $args[0] $args[1]>>
<<= setup.TagHelper.getTagsRep('buildingtemplate', $args[0].getTags())>>
<<nameof _template>>
Cost: <<costcard _template.getCost(0) >>
<<set _requirements = _template.getPrerequisite(0)>>
<<if _requirements.length>>
<br/>
<<requirementcard _template.getPrerequisite(0)>>
<</if>>
<</capture>>
<</foctimed>>
<<include _template.description_passage >>
</div>
<</focwidget>>
<<focwidget "buildingtemplatecardkey">>
<<buildingtemplatecard setup.buildingtemplate[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'companyfavorcard'>>
<<if $args[0].isFavorActive()>>
<<if $favor.getFavor($args[0]) >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
<<successtext '[Ally]'>>
<<elseif $favor.getFavor($args[0]) >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
<<successtextlite '[Trusting]'>>
<<elseif $favor.getFavor($args[0]) >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
<<successtextlite '[Friendly]'>>
<<else>>
[Neutral]
<</if>>
<<message '(?)'>>
When you have at least <<successtextlite '30.0'>> favor with this company,
you will get certain bonuses.
The bonus increases at
<<successtextlite '60.0'>>
and
<<successtextlite '90.0'>>
favors.
<</message>>
<<if !$args[1]>>
<<link '(disable favor bonus)'>>
<<set $args[0].is_favor_active = false>>
<<focgoto>>
<</link>>
<</if>>
<<else>>
<<dangertext '[Disabled]'>>
<<if !$args[1]>>
<<link '(enable favor bonus)'>>
<<set $args[0].is_favor_active = true>>
<<focgoto>>
<</link>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'companyirecard'>>
<<if $favor.getManagedCompanies().includes($args[0])>>
<span data-tooltip="Your relationship manager is managing the favor of this company right now">
<<successtext 'Managed'>>,
</span>
<</if>>
<<= $ire.getIreDisplay($args[0])>>
<<message '(?)'>>
This represents how annoyed certain members of this company is against your company.
When their annoyance hits a breaking point, you should be wary of retaliation
against your company.
It is possible that you have a high favor and a high level of ire at the same time, because
the favor and the ire came from two different group of people from the same company.
<</message>>
<</focwidget>>
<<focwidget 'companyfavortoprightcard'>>
<<if $args[0] != $company.player>>
<span class='toprightspan'>
Favor: <<successtextlite $favor.getFavorDisplay($args[0])>>
<<set _decay = (-$favor.getDecay($args[0]) / 10).toFixed(1)>>
(<<dangertextlite _decay>>
<<message '(?)'>>
Favor will tend to decay over time. This can be mitigated
by hiring a Relationship Manager, who can reduce or eliminate favor decay from
some chosen companies.
<</message>>)
</span>
<</if>>
<</focwidget>>
<<focwidget 'companycard'>>
<div class='companycard'>
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _company = $args[0]>>
<<set _act = !$args[1]>>
<<companyfavorcard _company _act>>
<<companyfavortoprightcard _company>>
<br/>
<<companyirecard _company>>
<br/>
<<include _company.getTemplate().getDescriptionPassage()>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'companycardkey'>>
<<companycard $company[$args[0]] $args[1]>>
<</focwidget>><<focwidget contactcard>>
<div class='contactcard'>
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _contact = $args[0]>>
<<set _act = !$args[1]>>
<<capture _contact, _act>>
<<if _act>>
<span class='toprightspan'>
<<checkbox '_contact.is_active' false true autocheck>> Uncheck to deactivate
</span>
<</if>>
<<if _contact.isCanExpire() >>
<span class="toprightspan">
Expires in <<= _contact.getExpiresIn()>> weeks
</span>
<</if>>
<br/>
Every week: <<rewardcard _contact.getApplyObjs()>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget contactcardkey>>
<<contactcard $contact[$args[0]] $args[1]>>
<</focwidget>><<focwidget "costcard">>
<<set _dom = setup.DOM.Card.cost($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "rewardcard">>
<<set _costs = $args[0]>>
<<set _ccquest = $args[1]>>
<<for _icost, _cost range _costs>>
<span class='rewardcard'>
<<= _cost.explain(_ccnquest) >>
</span>
<</for>>
<</focwidget>>
<<focwidget "requirementcard">>
<<set _requirements = $args[0]>>
<<set _rrquest = $args[1]>>
<<for _irequirement, _requirement range _requirements>>
<<if !_requirement.isOk(_rrquest)>>
<span class='restrictioncard'>
<<= _requirement.explain(_rrquest) >>
</span>
<</if>>
<</for>>
<<if $args[0].length>>
<<message '(all requirements)'>>
<<costcard $args[0] $args[1]>>
<</message>>
<</if>>
<</focwidget>><<focwidget "criteriacard">>
<<set _dom = setup.DOM.Card.criteria($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "criteriatraitlist">>
<<set _crittraits = $args[1].getCritTraits()>>
<<for _itrait, _trait range _crittraits>>
<<if $args[0].isHasTrait(_trait, null, true)>>
<<rep _trait>>
<</if>>
<</for>>
<<set _disastertraits = $args[1].getDisasterTraits()>>
<<for _itrait, _trait range _disastertraits>>
<<if $args[0].isHasTrait(_trait, null, true)>>
<<negtraitcard _trait>>
<</if>>
<</for>>
<</focwidget>><<focwidget 'dutystatus'>>
<<if !$args[0].getAssignedUnit().isAvailable()>>
<span data-tooltip="This duty is inactive, and not providing its bonuses. There are several reasons, but most commonly the unit on duty is either injured or is away on a quest">
<<dangertext '[Inactive]'>>
</span>
<</if>>
<</focwidget>>
<<focwidget 'dutycard'>>
<div class='dutycard'>
<<= $args[0].getImageRep(undefined, true)>>
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _duty = $args[0]>>
<<set _unit = _duty.getAssignedUnit()>>
<<set _act = !$args[1]>>
<<capture _duty, _unit, _act>>
<<if _unit && ['util', 'prestige', 'scout'].includes(_duty.TYPE)>>
<span class='toprightspan'>
<<if ['util', 'scout'].includes(_duty.TYPE)>>
Trigger chance: <<= (_duty.computeChance() * 100).toFixed(2)>>%
<<else>>
<<prestige _duty.prestige>>
<</if>>
</span>
<</if>>
<<set _restrictions = _duty.getUnitRestrictions()>>
<<if _restrictions>>
<<costcard _restrictions>>
<</if>>
<<if ['util', 'prestige', 'scout'].includes(_duty.TYPE)>>
<br/>
<<set _skills = _duty.getRelevantSkills()>>
<<set _init = true>>
<<if Object.keys(_skills).length>>
| Trigger chance:
<<for _iskill, _skill range _skills>>
<<if !_init>> + <<else>> <<set _init to false >> <</if>>
<<= (_skill * 100).toFixed(2) >>
<<if _unit && _unit.getSkillFocuses().includes(setup.skill[_iskill])>>
<<skillcardglowkey _iskill>>
<<else>>
<<rep setup.skill[_iskill]>>
<</if>>
<</for>>
% |
<<else>>
|
<</if>>
<<set _traits = _duty.getRelevantTraits()>>
<<set _positive = []>>
<<set _negative = []>>
<<for _traitkey, _traitchance range _traits>>
<<if _traitchance < 0 >>
<<run _negative.push(setup.trait[_traitkey])>>
<<else>>
<<run _positive.push(setup.trait[_traitkey])>>
<</if>>
<</for>>
<<if _positive.length>>
<<successtextlite 'Good'>>:
<<for _trait range _positive>>
<<if _unit && _unit.isHasTraitExact(_trait)>>
<<traitcardglow _trait>>
<<else>>
<<rep _trait>>
<</if>>
<</for>>
|
<</if>>
<<if _negative.length>>
<<dangertextlite 'Bad'>>:
<<for _trait range _negative>>
<<if _unit && _unit.isHasTraitExact(_trait)>>
<<traitcardglow _trait>>
<<else>>
<<rep _trait>>
<</if>>
<</for>>
|
<</if>>
<<if Object.keys(_traits).length>>
<<message '(full details)'>>
<<set _grouped = _duty.getRelevantTraitsGrouped()>>
<<set _keys = Object.keys(_grouped)>>
<<run _keys.sort()>>
<<run _keys.reverse()>>
<<for _key range _keys>>
<<if ['util', 'scout'].includes(_duty.TYPE)>>
<<set _text = (_key * 100).toFixed(0)>>
<<if _key > 0>>+<</if>><<if _key > 0>><<successtext _text>><<else>><<dangertext _text>><</if>>% :
<<elseif _duty.TYPE == 'prestige'>>
<<prestige _key>>:
<</if>>
<<for _trait range _grouped[_key]>>
<<if _unit && _unit.isHasTraitExact(_trait)>>
<<traitcardglow _trait>>
<<else>>
<<rep _trait>>
<</if>>
<</for>>
<br/>
<</for>>
<</message>>
<</if>>
<</if>>
<<if _act && $menufilter.get('duty', 'display') == 'shortened'>>
<<message '(description)'>>
<<set _gDuty = _duty>>
<<include _duty.getDescriptionPassage()>>
<</message>>
<<else>>
<br/>
<<set _gDuty = _duty>>
<<include _duty.getDescriptionPassage()>>
<</if>>
<div>
<<if _unit>>
/*
Units can always be removed from duty at any time.
This is because duties can make units busy
*/
Assigned to: <<rep _unit>>
<<dutystatus _duty>>
<<if _act>>
<<link '(Remove from duty)' >>
<<run _duty.unassignUnit()>>
<<focgoto 'DutyList'>>
<</link>>
<</if>>
<<else>>
None assigned.
<<if _act>>
<<focbutton 'Assign' 'DutyListAssign'>>
<<set $gDuty_key = _duty.key>>
<</focbutton>>
<</if>>
<</if>>
<<if _act>>
<span class='toprightspan'>
<<capture _duty>>
<<if _duty.isCanGoOnQuestsAuto()>>
<<successtextlite 'Pickable'>> by auto-assign quests
<<link '(disable)'>>
<<run _duty.setIsCanGoOnQuestsAuto(false)>>
<<focgoto>>
<</link>>
<<else>>
<<dangertextlite 'Not pickable'>> by auto-assign quests
<<link '(enable)'>>
<<run _duty.setIsCanGoOnQuestsAuto(true)>>
<<focgoto>>
<</link>>
<</if>>
<<message '(?)'>>
<div class='helpcard'>
Whether or not units on this duty can be selected to go on quests by the quest auto-assign menu.
<br/>
<br/>
Regardless of this settings, the unit can always be selected when using manual team assignment.
</div>
<</message>>
<</capture>>
</span>
<</if>>
</div>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'dutycardkey'>>
<<dutycard $duty[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'equipmentcardactions'>>
<<if $args[0].getSellValue() && $fort.player.isHasBuilding(setup.buildingtemplate.bazaar)>>
<<set _text = `(Sell for ${$args[0].getSellValue()}g)`>>
<<link _text>>
<<run $company.player.addMoney($args[0].getSellValue())>>
<<run $armory.removeEquipment($args[0])>>
<<focgoto>>
<</link>>
<</if>>
<</focwidget>>
<<focwidget 'equipmentcard'>>
<div class='equipmentcard'>
<<foctimed 0s t8n>>
<<set _eq = $args[0]>>
<<set _act = !$args[1]>>
<<capture _eq, _act>>
<div>
<<= _eq.getImageRep()>>
<<nameof _eq>>
<<set _equipped = _eq.getEquippedNumber()>>
<<set _spare = _eq.getSpareNumber()>>
(you own <<= _spare + _equipped>> with <<= _equipped >> in use)
<<if _act>>
<<equipmentcardactions $args[0]>>
<</if>>
<span class="toprightspan">
Value: <<money _eq.getValue()>>
<br/>
<!--<<if _eq.getSluttiness() !== 0>>-->
Sluttiness: <<= _eq.getSluttiness() >>
<br/>
<!--<</if>>-->
Equips on <<= _eq.getSlot().rep()>>
</span>
</div>
<<set _restrictions = _eq.getUnitRestrictions()>>
<<if _restrictions.length>>
<div>
Requires: <<costcard _restrictions>>
</div>
<</if>>
<<set _explanation = setup.SkillHelper.explainSkillMods(_eq.getSkillMods())>>
<<if _explanation>>
<div>
<<= _explanation>>
</div>
<</if>>
<div>
<<for _itrait, _trait range _eq.getTraits()>>
<<capture _trait>>
<<rep _trait>>
<</capture>>
<</for>>
</div>
<div>
<<= _eq.getDescription()>>
</div>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'equipmentcardkey'>>
<<equipmentcard setup.equipment[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget 'equipmentsetcard'>>
<div class='equipmentsetcard card'>
<<foctimed 0s>>
<<set _idequipmentsetcard = `.idequipmentsetcard${$args[0].key}`>>
<<set _eqs = $args[0]>>
<<set _act = !$args[1] || $args[1] == 'editequip'>>
<<set _unit = _eqs.getUnit()>>
<<capture _eqs, _act, _unit, _eqlist>>
<span class="toprightspan">
Value: <<money _eqs.getValue()>>
<br/>
Sluttiness: <<= _eqs.getSluttiness() >>.
</span>
<<if _act && !_eqs.is_default>>
<<displaymenuitem $args[0].getMenu()>>
<</if>>
<div>
<<set _explanation = setup.SkillHelper.explainSkillMods(_eqs.getSkillMods())>>
<<if _explanation>>
<<= _explanation>>
<</if>>
</div>
<<set _traits = _eqs.getTraits()>>
<div>
<<for _itrait, _trait range _traits>>
<<capture _trait>>
<<rep _trait>>
<</capture>>
<</for>>
</div>
<div class="equipmentgrid">
<<for _ieq, _eq range _eqs.getEquipmentsList()>>
<<capture _eq>>
<div>
<<if _eq[1]>>
<span><<= _eq[1].rep('<<+.equipmentgrid-fullrow')>></span>
<<set _text = '(replace)'>>
<<else>>
<span class="empty-slot"><<= _eq[0].rep('<<+.equipmentgrid-fullrow')>></span>
<span class="graytext">none</span>
<<set _text = '(attach)'>>
<</if>>
<<if $args[1] == 'editequip' && _eqs.isCanChange()>>
<<message _text '(cancel)' 'target=<+.equipmentgrid-fullrow'>>
<<set _slot = _eq[0]>>
Choose:
<<if _eq[1]>>
<span>
<<link '(unattach)'>>
<<run $armory.unassignEquipment(_eq[1], $args[0])>>
<<focgoto>>
<</link>>
</span>
<</if>>
<<set _equips = $armory.getEquipments({equipment_slot: _slot}).filter(a => a[0] != _eq[1])>>
<<for _ieq2, _eqobj range _equips>>
<<set _eq2 = _eqobj[0]>>
<<capture _eq2, _eqs>>
<div class="equipmentgrid-attachable">
<<rep _eq2 '<<<'>>
<<set _linktext = `(equip)`>>
<<link _linktext>>
<<if _eq[1]>>
<<run $armory.unassignEquipment(_eq[1], $args[0])>>
<</if>>
<<run $armory.assignEquipment(_eq2, $args[0])>>
<<focgoto>>
<</link>>
</div>
<</capture>>
<</for>>
<<if !_equips.length>>
<span>no items available</span>
<</if>>
<</message>>
<</if>>
</div>
<div class="equipmentgrid-fullrow"></div>
<</capture>>
<</for>>
</div>
<</capture>>
<</foctimed>></div>
<</focwidget>>
<<focwidget 'equipmentsetcardkey'>>
<<equipmentsetcard $equipmentset[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget 'equipmentpoolcard'>><<foctimed 0s>>
<<set _pool = $args[0]>>
<<capture _pool>>
<div class='equipmentsetcard card'>
<<nameof _pool>>
<<if 'group_chances' in _pool>>
<<for _igcpool, _gcpool range _pool.group_chances>>
<br/>
<<= (_gcpool * 100).toFixed(2)>> weight
<<message '(?)'>>
Weight affects the probability of this being chosen. The higher the weight, the higher the chance.
<</message>>
for <<= setup.equipmentpool[_igcpool].rep()>>
<</for>>
<<else>>
<<for _ieq, _eq range _pool.equip_chances >>
<br/><<= (_eq * 100).toFixed(2)>>
weight
<<message '(?)'>>
Weight affects the probability of this being chosen. The higher the weight, the higher the chance.
<</message>>
for <<= setup.equipment[_ieq].rep()>>
<</for>>
<</if>>
</div>
<</capture>>
<</foctimed>><</focwidget>>
<<focwidget 'equipmentpoolcardkey'>>
<<equipmentpoolcard setup.equipmentpool[$args[0]]>>
<</focwidget>><<focwidgetpayload 'filterall'>>
<div>
<<set _sucallback = $menufilter.getFilterFunc($args[0], $args[1])>>
<<if $fort.player.isHasBuilding('grandhall')>>
<<if $menufilter.getOption($args[0], 'sticky')>>
<<set _class = 'tagtoolbarsticky'>>
<<else>>
<<set _class = ''>>
<</if>>
<div @class='_class'>
<<refreshable id="filtertoolbar">>
<<filtertoolbarinternal $args[0] $args[1]>>
<</refreshable>>
</div>
<</if>>
<<filterable _sucallback "filtercontainer">>
<div style="display: flex; flex-direction: column; ">
/* TODO: Convert this loop into javascript */
<<for _ifilterobj, _filterobj range $args[1]>>
<<if $args.length == 3>>
<<set _displayobj = $args[2][_ifilterobj]>>
<<else>>
<<set _displayobj = _filterobj>>
<</if>>
<<capture _filterobj, _displayobj >>
<div @data-filter-key="_filterobj.key">
<<= $args.payload>>
</div>
<</capture>>
<</for>>
</div>
<</filterable>>
<<if _widgetshown != $args[1].length>>
<div class='lightgraytext filterwidgethidden'>
</div>
<</if>>
</div>
<</focwidgetpayload>>
<<focwidget 'filtertagtoolbar'>>
<</focwidget>><<focwidget 'friendcard'>>
<div class='friendcard'>
<<set _friendcardunit = $unit[$args[0]]>>
<<set _friendcardbestfriend = $friendship.getBestFriend(_friendcardunit)>>
<div>
<<if _friendcardbestfriend>>
<<set _friendcardfriendship = $friendship.getFriendship(_friendcardunit, _friendcardbestfriend)>>
Closest with <<= setup.Friendship.rep([_friendcardbestfriend, _friendcardfriendship])>>
<<if $friendship.getLover(_friendcardunit)>>
(<<= setup.Friendship.loversIcon()>>)
<<else>>
(<<tfriendtitle _friendcardfriendship>>)
<</if>>
<<else>>
No friends
<</if>>
<<message '(?)'>>
<div class='helpcard'>
Slavers can form friendship and rivalries with each other (and to slaves too) during their career.
<br/>
<br/>
If they are in the same location with their best friend or best rival (i.e., either home together
or in a quest together), then the slaver will get some skill
boost:
for each skill,
if they are friends, then the slaver with the lower point in that skill will get a large boost,
depending on how far the skills of the two slavers are.
If they are rivals, then the slaver with the higher point in that skill will get a small boost,
depending on how close the skills of the two slavers are.
The larger the friendship/rivalry, the larger the skill point gain.
Your player character cannot gain this bonus, but instead can get skill bonus from your vice leader.
Note that these use the base skills, not the skills after modifiers.
</div>
<</message>>
</div>
<<set _friends = $friendship.getFriendships(_friendcardunit)>>
<<if _friends.length>>
<<for _ifriend, _friend range _friends>>
<div>
<<= setup.Friendship.rep(_friend)>> (<<tfriendtitle _friend[1]>>)
</div>
<</for>>
<</if>>
</div>
<</focwidget>><!--
Example usage: <<icon "star" "Tooltip text">>
See available icons at: https://www.motoslave.net/sugarcube/tmp/tme-fa-icons/
(note: defined in a single line to avoid injecting whitespaces)
-->
<<focwidget 'icon'>><span @data-tooltip="$args[1]" data-tooltip-delay data-tooltip-noclick><i @class="'sfa sfa-' + $args[0]"></i></span><</focwidget>><<focwidget 'tooltipidle'>>
<header>
<<= setup.repImgIcon(setup.Unit.IDLE_IMAGE_URL)>> <b>Idle</b>
</header>
<div>
<<set _unit = $unit[$args[0]]>>
<div><<= _unit ? _unit.getName() : 'This unit'>> is ready for action</div>
</div>
<</focwidget>>
<<focwidget 'tooltipbusy'>>
<header>
<<= setup.repImgIcon(setup.Unit.BUSY_IMAGE_URL)>> <b>Busy</b>
</header>
<div>
<<set _unit = $unit[$args[0]]>>
<<if _unit>>
<<set _quest = _unit.getQuest()>>
<<if _quest>>
<div><<= _unit.getName()>> is busy with quest:</div>
<p> <<rep _quest>></p>
<</if>>
<<set _opportunity = _unit.getOpportunity()>>
<<if _opportunity>>
<div><<= _unit.getName()>> is busy with:</div>
<p> <<rep _opportunity>></p>
<</if>>
<<if $hospital.isInjured(_unit)>>
<<set _duration = $hospital.getInjury(_unit)>>
<div><<= _unit.getName()>> is injured for <<= _duration>> week<<= _duration === 1 ? '' : 's'>></div>
<</if>>
<<else>>
<div>This unit is currently busy and cannot receive new orders</div>
<</if>>
</div>
<</focwidget>>
<<focwidget 'tooltiponduty'>>
<header>
<<= setup.repImgIcon(setup.Unit.ONDUTY_IMAGE_URL)>> <b>Busy</b>
</header>
<div>
<<set _unit = $unit[$args[0]]>>
<<if _unit>>
<<set _duty = _unit.getDuty()>>
<<if _duty>>
<div><<= _unit.getName()>> is assigned to duty:</div>
<p> <<rep _duty>></p>
<</if>>
<<else>>
<div>This unit is currently on duty, but is otherwise ready</div>
<</if>>
</div>
<</focwidget>>/* Displays an image, supporting images that have been embedded (in window.IMAGES) */
/* args: [ src, title? ] */
<<focwidget 'image'>>
<<set _imagename = $args[0]>>
<<set _imageurl = (window.IMAGES && window.IMAGES[_imagename]) || _imagename>>
<<if $args[1]>>
<span @data-tooltip="$args[1]">>
<img @src="_imageurl" />
</span>
<<else>>
<img @src="_imageurl" />
<</if>>
<</focwidget>>
<<focwidget 'loadimage'>>
<<set _imagename = $args[0].getImage()>>
<<set _imageurl = (window.IMAGES && window.IMAGES[_imagename]) || _imagename>>
<<set _onerror = "if (!(this.src.endsWith('png'))) this.src = this.src.slice(0, -3) + 'png';">>
<<set _img = '<img @src="_imageurl" @onerror="_onerror" />'>>
<<if !$args[1]>>
<<= _img>>
<<else>>
<<message _img>>
<<loadimagecredits $args[0]>>
<</message>>
<</if>>
<</focwidget>>
<<focwidget 'loadimagecredits'>>
<<set _credits = ($args[0].artist ? $args[0] : $args[0].getImageInfo())>>
<<if _credits>>
<span class='artistinfo'>
"<<= _credits.title>>" by <<= _credits.artist>>
<<if _credits.url>>
[[(source)|_credits.url]]
<</if>>
(<<= _credits.license>>)
<<if _credits.extra>>
[<<= _credits.extra>>]
<</if>>
</span>
<</if>>
<</focwidget>><<focwidget 'injurycard'>>
<<set _dom = setup.DOM.Card.injury($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'injurycardkey'>>
<<injurycard $unit[$args[0]]>>
<</focwidget>><<focwidget 'interactionpool'>>
<<set _pool = $args[0]>>
<<set _unit = $args[1]>>
<<set _passage = passage()>>
<<capture _pool, _unit, _passage>>
<<set _costinteractions = []>>
<<set _freeinteractions = []>>
<<for _iinteraction, _interaction range _pool.getInteractions()>>
<<if _interaction.canInteractWith(_unit)>>
<<if _interaction.getCosts().length>>
<<run _costinteractions.push(_interaction)>>
<<else>>
<<run _freeinteractions.push(_interaction)>>
<</if>>
<</if>>
<</for>>
<<if _costinteractions.length || _freeinteractions.length>>
You can interact with <<them _unit>>:
<</if>>
<<for _iinteraction, _interaction range _costinteractions>>
<<capture _interaction, _unit>>
<<set _cost = _interaction.getCosts()>>
<<set _text = _interaction.getName()>>
(<<link _text>>
<<set $gInteractionReturnPassage = $gPassage>>
<<set $gInteractionInstance = _interaction.makeInstance(_unit)>>
<<focgoto 'InteractionPerform'>>
<</link>>
<<costcard _cost>>)
<</capture>>
<</for>>
<<if _costinteractions.length && _freeinteractions.length>>
<br/>
<</if>>
<<for _iinteraction, _interaction range _freeinteractions>>
<<capture _interaction, _unit>>
<<set _text = `(${_interaction.getName()})`>>
<<link _text>>
<<set $gInteractionReturnPassage = $gPassage>>
<<set $gInteractionInstance = _interaction.makeInstance(_unit)>>
<<focgoto 'InteractionPerform'>>
<</link>>
<</capture>>
<</for>>
<</capture>>
<</focwidget>><div>
<<focmove 'Continue' $gInteractionReturnPassage>>
</div><<questvarload $gInteractionInstance>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include $gInteractionInstance.getInteraction().getPassage()>>
<</capture>>
<<run $gInteractionInstance.applyRewards()>>
<br/>
<<questauthorcard $gInteractionInstance.getInteraction()>>
<<set $gPassage = 'InteractionComplete'>>
<<include 'InteractionComplete'>><<focwidget 'itemcardactions'>>
<<if $args[0].isUsable()>>
<<focbutton 'Use'>>
<<if $args[0].getItemClass() == setup.itemclass.usableitem>>
<<set $gUseItem_key = $args[0].key>>
<<focgoto 'ItemUnitUsableUse'>>
<<elseif $args[0].getItemClass() == setup.itemclass.usablefreeitem>>
<<run $args[0].use()>>
<<focgoto>>
<</if>>
<</focbutton>>
<</if>>
<<if $args[0].getSellValue() && $fort.player.isHasBuilding(setup.buildingtemplate.bazaar)>>
<<set _text = `(Sell for ${$args[0].getSellValue()}g)`>>
<<link _text>>
<<run $inventory.sell($args[0])>>
<<focgoto>>
<</link>>
<</if>>
<</focwidget>>
<<focwidget "itemcard">>
<div class='itemcard'>
<<foctimed 0s t8n>>
<<if $args[0].getItemClass() == setup.itemclass.furniture>>
<<= $args[0].getSlot().rep()>>
<<else>>
<<= $args[0].getItemClass().rep()>>
<</if>>
<<nameof $args[0]>>
<<set _item = $args[0]>>
<<set _quantity = $args[1]>>
<<set _act = !$args[2]>>
<<capture _item, _quantity, _act>>
/*
<<if _quantity>>
<<= _quantity >>x
<</if>>
*/
<<if _item.getValue()>>
<span class='toprightspan'>
Value: <<money _item.getValue()>>
</span>
<</if>>
<<set _owned = _item.getOwnedNumber()>>
(you own <<= _owned>>)
<<if _act && $menufilter.get('item', 'display') == 'short'>>
<<message '(description)'>>
<<= _item.getDescription() >>
<</message>>
<</if>>
<<if _act>>
<<itemcardactions $args[0]>>
<</if>>
<<if _item.getItemClass() == setup.itemclass.furniture>>
<<set _explanation = setup.SkillHelper.explainSkills(_item.getSkillMods())>>
<<if _explanation>>
<br/>
<<= _explanation>>
<</if>>
<</if>>
<<if _item.getItemClass() == setup.itemclass.usablefreeitem>>
<<set _requirements = _item.getPrerequisites()>>
<<if _requirements.length>>
<br/>
<<requirementcard _requirements>>
<</if>>
<</if>>
<<if !_act || !$menufilter.get('item', 'display')>>
<br/>
<<= _item.getDescription() >>
<</if>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget "itemcardkey">>
<<itemcard setup.item[$args[0]] 0 $args[1]>>
<</focwidget>>
<<focwidget 'itempoolcard'>>
<<set _pool = $args[0]>>
<<capture _pool>>
<div class='itemcard'>
<<nameof _pool>>
<<for _ieq, _eq range _pool.item_chances >>
<br/><<= (_eq * 100).toFixed(2)>>
weight
<<message '(?)'>>
Weight affects the probability of this being chosen. The higher the weight, the higher the chance.
<</message>>
<<= setup.item[_ieq].rep()>>
<</for>>
</div>
<</capture>>
<</focwidget>>
<<focwidget 'itempoolcardkey'>>
<<itempoolcard setup.itempool[$args[0]]>>
<</focwidget>><<focwidget "jobcard">>
<<set _job = $args[0]>>
<span class='jobcard'>
<<rep _job>>
</span>
<</focwidget>><<focwidget "lorecard">>
<div class='lorecard'>
<<= setup.TagHelper.getTagsRep('lore', $args[0].getTags())>>
<<nameof $args[0]>>
<div>
<<include $args[0].getDescriptionPassage()>>
</div>
</div>
<</focwidget>>
<<focwidget 'lorecardkey'>>
<<lorecard setup.lore[$args[0]]>>
<</focwidget>>
<<focwidget 'lore'>>
<<= setup.Lore.repLore($args[0])>>
<</focwidget>>/*
Show an interactive world map of the region.
*/
<<focwidget 'worldmap'>>
<div class="worldmap">
<<= setup.Lore.WORLDMAP_REGIONS_SVG>>
</div>
<</focwidget>><<focwidget "notificationcard">>
<div class='notificationcard'>
<<= $args[0] >>
</div>
<</focwidget>>
<<focwidget "notificationscard">>
<<if $args[0].length>>
<div class='notificationcard'>
<<for _iargs, _args range $args[0]>>
<<if _iargs>><br/><</if>>
<<= _args>>
<</for>>
</div>
<</if>>
<</focwidget>><<focwidget "opportunitycard">>
<<set _class = `${$args[0].getTemplate().getCardClass()} card`>>
<div @class='_class'>
<<= setup.TagHelper.getTagsRep('opportunity', $args[0].getTemplate().getTags())>>
<<= $args[0].getTemplate().getDifficulty().rep()>>:
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _opportunity = $args[0]>>
<<set _template = _opportunity.getTemplate()>>
<<set _act = !$args[1]>>
<<set _viceleader = $dutylist.getUnit('DutyViceLeader')>>
<<capture _opportunity, _template, _act, _viceleader>>
<span class="toprightspan">
<<if _opportunity.getTemplate().isMustBeAnswered()>>
<span data-tooltip="This mail must be answered before the week ends">
<<dangertext 'Important'>>
</span>
<<else>>
<<if _opportunity.getTemplate().getDeadlineWeeks() < setup.INFINITY>>
Expires in: <<= _opportunity.getWeeksUntilExpired() >> weeks
<<else>>
Never expires
<</if>>
<</if>>
</span>
<<if $menufilter.get('opportunity', 'display') == 'short'>>
<<message '(description)'>>
<<questvarload _opportunity>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _template.getDescriptionPassage()>>
<<questauthorcard _template>>
<</capture>>
<</message>>
<<else>>
<br/>
<<questvarload _opportunity>>
<<capture $g, $gTeam, $gQuest, $gOutcome>>
<<include _template.getDescriptionPassage()>>
<<questauthorcard _template>>
<</capture>>
<</if>>
<<for _ioption, _option range _template.getOptions()>>
<<capture _ioption, _option>>
<div class='opportunitycardoption clear-both'>
<<include _option[0] >>
<<set _cost = _option[2]>>
<<set _prereq = _option[3]>>
<<if _cost.length + _prereq.length>>
(<<costcard _cost>> <<requirementcard _prereq _opportunity>>)
<</if>>
<<if _act>>
<<if _opportunity.isCanSelectOption(_ioption)>>
<br/>
<<focbutton 'Select' 'OpportunityOptionSelected'>>
<<set $gSelectedPassage = _opportunity.selectOption(_ioption)>>
<<set $gOpportunity_key = _opportunity.key>>
<</focbutton>>
<<else>>
<br/>
You <<dangertextlite 'cannot'>> select this option.
<</if>>
<<if _viceleader>>
<<set _currentoption = $opportunitylist.getAutoAnswer(_template)>>
<<if _currentoption === _ioption>>
[If this option is available, <<rep _viceleader>> will auto answer with this]
<<link '(remove auto-answer)'>>
<<run $opportunitylist.removeAutoAnswer(_template)>>
<<focgoto>>
<</link>>
<<else>>
<<link '(set this as auto-answer response)'>>
<<run $opportunitylist.setAutoAnswer(_template, _ioption)>>
<<focgoto>>
<</link>>
<</if>>
<</if>>
<</if>>
</div>
<</capture>>
<</for>>
<<if $gDebug>>
<<message '(DEBUG: show actors)' >>
<<set _actors = _opportunity.getActorsList()>>
<<for _iactor, _actor range _actors>>
<br/>
Actor for <<=_actor[0]>>: <<= _actor[1].rep()>>
<</for>>
<</message>>
<</if>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget "opportunitycardkey">>
<<opportunitycard $opportunityinstance[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'questcardcompact'>>
<<set _dom = setup.DOM.Card.questcompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "questcard">>
<<set _dom = setup.DOM.Card.quest($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "questcardkey">>
<<questcard $questinstance[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget "questauthorcardtext">>
<<set _dom = setup.DOM.Card.author($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "questauthorcard">>
<<set _template = $args[0]>>
<<if _template.getAuthor()>>
<<questauthorcardtext _template.getAuthor()>>
<</if>>
<</focwidget>><<focwidget "questvarload">>
<<run setup.DOM.Helper.loadQuestVars($args[0])>>
<</focwidget>>/* Don't use! Internal widget */
<<focwidget 'repfullinternal'>><<urace $args[0]>>
<<if $args[0].getDuty()>>
<<rep $args[0].getDuty()>>
<<elseif $args[0].isSlaver()>>
slaver
<<elseif $args[0].isSlave()>>
slave
<</if>>
<<rep $args[0]>><</focwidget>>
<<focwidget 'repfull'>><<uadj $args[0]>> <<repfullinternal $args[0]>><</focwidget>>
<<focwidget 'repfullgood'>><<uadjgood $args[0]>> <<repfullinternal $args[0]>><</focwidget>>
<<focwidget 'repfullbad'>><<uadjbad $args[0]>> <<repfullinternal $args[0]>><</focwidget>><<focwidget 'rostershow'>>
<<set _rostermenu = $args[1] ? $args[1] : 'unit'>>
<<filterall _rostermenu $args[0]>>
<<if $menufilter.get(_rostermenu, 'display') == 'compact'>>
Lv. <<= _displayobj.getLevel()>>
<<rep _displayobj>>
<<rostershowaction _displayobj>>
<<else>>
With <<rep _displayobj>>:
<<rostershowaction _displayobj>>
<<unitcardkey _displayobj.key true>>
<</if>>
<</filterall>>
<</focwidget>>
<<focwidget 'selectunit'>>
<<focreturn '(Cancel)'>>
<br/>
<<if !($args[0].length)>>
<<dangertext 'No eligible unit.'>>
<<else>>
<<set _selectunitreturnpassage = $args[1]>>
<<capture _selectunitreturnpassage>>
<<focwidget 'rostershowaction'>>
<<focbutton 'Select'>>
<<set $gUnitSelected_key = $args[0].key>>
<<include _selectunitreturnpassage>>
<</focbutton>>
<</focwidget>>
<</capture>>
<<rostershow $args[0]>>
<</if>>
<</focwidget>><<focwidget 'tooltipskill'>>
<<set _skill = setup.skill[$args[0]]>>
<<if _skill>>
<header>
<<= _skill.getImageRep()>> <b><<=_skill.getName()>></b>
</header>
<div>
<<= _skill.getDescription()>>
</div>
<</if>>
<</focwidget>><<focwidget "skillcardglowkey">>
<span class='skillcardglow'>
<<set _skill = setup.skill[$args[0]]>>
<<rep _skill>>
</span>
<</focwidget>><<focwidget 'slaveordercard'>>
<div class='slaveordercard'>
<<if !$args[2]>>
<<focbutton 'Fulfill' 'SlaveOrderFulfill'>>
<<set $gSlaveOrder_i = $args[1]>>
<</focbutton>>
<</if>>
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _slaveorder = $args[0]>>
<<set _source = _slaveorder.getSourceCompany()>>
<<set _act = !$args[2]>>
<<capture _slaveorder, _source, _act>>
<<if _source>>
from <<= _source.getName() >>
<</if>>
<<if !_slaveorder.isCannotExpire()>>
<span class="toprightspan" data-tooltip="Weeks to expire"><<= _slaveorder.getExpiresIn()>> wks</span>
<</if>>
<<set _criteria = _slaveorder.getCriteria()>>
<<if _criteria>>
<br/>
<<capture _criteria>>
<<criteriacard _criteria>>
<</capture>>
<</if>>
<<set _explain1 = _slaveorder.explainFulfilled()>>
<<if _explain1>>
<br/>
Rewards: <<= _explain1 >>
<</if>>
<<set _explain2 = _slaveorder.explainUnfulfilled()>>
<<if _explain2>>
<br/>
If unfulfilled: <<= _explain2 >>
<</if>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'slaveordercardkey'>>
<<slaveordercard $slaveorder[$args[0]] 0 $args[1]>>
<</focwidget>><<focwidget 'tagcard'>>
<span class='tagcard'><<= $args[0]>></span>
<</focwidget>><<focwidget "teamcard">>
<div class='teamcard'>
<<nameof $args[0]>>
<<set _team = $args[0]>>
<<set _act = !$args[1]>>
<<capture _team, _act>>
<<foctimed 0s>>
<<if _team.getQuest()>>
<<dangertextlite '[QUEST]'>>
<<elseif _team.isBusy()>>
[BUSY]
<<elseif _team.isReady()>>
<<successtextlite '[IDLE]'>>
<<else>>
[NOT FILLED]
<</if>>
<<if _act>>
<<link '(change name)'>>
<<set $gTeam_key=_team.key>>
<<focgoto 'TeamNameChange'>>
<</link>>
<</if>>
<</foctimed>>
<<set _quest = _team.getQuest()>>
<<if _team.isAdhoc()>>
<<else>>
<<if _team.isCanAddSlaver() && _act>>
<<link '(add slaver)' >>
<<set $gTeamSelected_key = _team.key>>
<<focgoto 'TeamAddSlaver'>>
<</link>>
<</if>>
<<if _team.isCanAddSlave() && _act>>
<<link '(add slave)' >>
<<set $gTeamSelected_key = _team.key>>
<<focgoto 'TeamAddSlave'>>
<</link>>
<</if>>
<<if !_team.getUnits().length && _act>>
<<link '(disband team)'>>
<<run _team.disband()>>
<<focgoto>>
<</link>>
<</if>>
<</if>>
<<if _quest>>
<br/>
Currently on quest: <<rep _quest>> for <<= _quest.getRemainingWeeks() >> more weeks.
<</if>>
<<for _iteamunit, _teamunit range _team.getUnits() >>
<br/>
<<capture _team, _teamunit>>
<<foctimed 0s>>
Lv. <<= _teamunit.getLevel()>>
<<rep _teamunit>>
<<if !_team.getQuest() && _act>>
<<link '(remove)'>>
<<run _team.removeUnit(_teamunit)>>
<<focgoto 'TeamManagement'>>
<</link>>
<</if>>
<</foctimed>>
<</capture>>
<</for>>
<</capture>>
</div>
<</focwidget>>
<<focwidget "teamcardkey">>
<<teamcard $team[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'titlecard'>>
<div class='titlecard'>
<<nameof $args[0]>>
<<set _value = $args[0].getSlaveValue()>>
<<if _value>>
<span class='toprightspan'>
Value: <<money _value>>
</span>
<</if>>
<<foctimed 0s t8n>>
<<set _explanation = setup.SkillHelper.explainSkills($args[0].getSkillAdds())>>
<<if _explanation>>
<br/>
<<= _explanation>>
<</if>>
<</foctimed>>
<br/>
<<= $args[0].getDescription()>>
</div>
<</focwidget>>
<<focwidget 'titlecardkey'>>
<<titlecard setup.title[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'tooltiptrait'>>
<<set _trait = setup.trait[$args[0]]>>
<<if _trait>>
<header>
<<= _trait.getImageRep()>> <b class="capitalize"><<=_trait.getName()>></b>
</header>
<div><<= _trait.description>></div>
<<if _trait.isHasSkillBonuses()>>
<div>
<<= setup.SkillHelper.explainSkillMods(_trait.getSkillBonuses())>>
</div>
<</if>>
<<if _trait.slave_value>>
<div>Worth: <<money _trait.slave_value>></div>
<</if>>
<</if>>
<</focwidget>><<focwidget "traitcard">>
<span class='traitcard'>
<<= $args[0].rep()>>
</span>
<</focwidget>>
<<focwidget "negtraitcard">>
<span class='negtraitcard'>
<<= $args[0].rep()>>
</span>
<</focwidget>>
<<focwidget "negtraitcardkey">>
<<negtraitcard setup.trait[$args[0]]>>
<</focwidget>>
<<focwidget "traitcardglow">>
<span class='traitcardglow'>
<<= $args[0].rep()>>
</span>
<</focwidget>>
<<focwidget "traitcardkeyglow">>
<<traitcardglow setup.trait[$args[0]]>>
<</focwidget>><<focwidget 'unitactioncardactions'>>
<<focbutton 'Select'>>
<<set $gTrainingSelected = $args[0]>>
<<include 'TrainingDo'>>
<</focbutton>>
<</focwidget>>
<<focwidget 'unitactioncard'>>
<<if !$args[2] && $args[1] && !$args[0].isCanTrain($args[1])>>
<<set _class = 'unitactionbadcard card'>>
<<else>>
<<set _class = 'unitactioncard card'>>
<</if>>
<div @class="_class">
<<if $args[1] && $args[0].isCanTrain($args[1]) && !$args[2]>>
<<unitactioncardactions $args[0]>>
<</if>>
<<= setup.TagHelper.getTagsRep('unitaction', $args[0].getTags())>>
<<nameof $args[0]>>
<<foctimed 0s t8n>>
<<set _unitaction = $args[0]>>
<<set _unit = $args[1]>>
<<set _act = !$args[2]>>
<<capture _unitaction, _unit, _act>>
<<if $menufilter.get('unitaction', 'display') == 'short'>>
<<message '(description)'>>
<<set $g = {trainee: _unit}>>
<<include _unitaction.getTemplate().getDescriptionPassage() >>
<</message>>
<</if>>
<<set _prerequisites = _unitaction.getPrerequisites()>>
<<set _requirements = _unitaction.getUnitRequirements()>>
<<if _prerequisites.length>>
<div>
<<requirementcard _prerequisites>>
</div>
<</if>>
<<if _requirements.length>>
<div>
<<requirementcard _requirements _unit>>
</div>
<</if>>
<<if !$menufilter.get('unitaction', 'display')>>
<<set $g = {trainee: _unit}>>
<<include _unitaction.getTemplate().getDescriptionPassage() >>
<</if>>
<</capture>>
<</foctimed>>
</div>
<</focwidget>>
<<focwidget 'unitactioncardkey'>>
<<unitactioncard setup.unitaction[$args[0]] $unit[$args[1]] $args[2]>>
<</focwidget>>
<<focwidget 'unitactionlist'>>
<<focreturn '(Cancel)'>>
<<message '(Help)'>>
Choosing one of the following actions will generate their corresponding quest in your office.
<<dangertext 'You must assign a team'>> to the generated
quest in order to actually perform the action.
<</message>>
<<set _tofilter = []>>
<<for _unitaction range $args[0]>>
<<if !_unitaction.isHidden($args[1]) && _unitaction.isCanTrain($args[1])>>
<<run _tofilter.push(_unitaction)>>
<</if>>
<</for>>
<<for _unitaction range $args[0]>>
<<if !_unitaction.isHidden($args[1]) && !_unitaction.isCanTrain($args[1])>>
<<run _tofilter.push(_unitaction)>>
<</if>>
<</for>>
<<set _unitaction_unit = $args[1]>>
<<filterall 'unitaction' _tofilter>>
<<if $menufilter.get('unitaction', 'display') == 'compact'>>
<<if _displayobj.isCanTrain(_unitaction_unit)>>
<<unitactioncardactions _displayobj>>
<</if>>
<<name _displayobj>>
<<message '(+)'>>
<<unitactioncard _displayobj _unitaction_unit>>
<</message>>
<<else>>
<<unitactioncard _displayobj _unitaction_unit>>
<</if>>
<</filterall>>
<</focwidget>><<focwidget "unitcard">>
<<set _dom = setup.DOM.Card.unit($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "unitcardkey">>
<<unitcard $unit[$args[0]] $args[1]>>
<</focwidget>><<focwidget "unitdescription">>
<<set _u = $args[0]>>
<<set _act = !$args[1]>>
<<capture _u, _act>>
<<refreshable id="unit-description-image">>
<<if $settings.unitimagefull>>
<<set _class = 'unitimagefull unitimagelarge'>>
<<else>>
<<set _class = 'unitimagehalf unitimagelarge'>>
<</if>>
<figure @class='_class'>
<<loadimage _u>>
<figcaption @class='_class'>
<<loadimagecredits _u>>
<<if $settings.unitimagefull>>
<<link '(switch to half-size)'>>
<<set $settings.unitimagefull = false>>
<<focgoto>>
<</link>>
<<else>>
<<link '(switch to full-size)'>>
<<set $settings.unitimagefull = true>>
<<focgoto>>
<</link>>
<</if>>
</figcaption>
</figure>
<</refreshable>>
<p>
/* name, speech, level, title */
<<nameof _u>>
is a
<<if _u.isMindbroken() >>
<<else>>
<<= _u.getSpeech().getName().toLowerCase()>>
<</if>>
<<if _u.isSlaver()>>
Lv.
<<= _u.getLevel()>>
<</if>>
<<= _u.getGender().getName()>>
<<= _u.getRace().getName()>>
<<titlelow _u>>.
<<if _u.getFullName() != _u.getName()>>
<<Their _u>> full name is <<= _u.getFullName()>>, but <<they _u>> is usually called <<= _u.getName()>>.
<</if>>
<<if _u.isSlave()>>
<<set _training = setup.UnitTitle.getMainTraining(_u)>>
<<set _description = setup.Text.Unit.Trait.description(_u, _training)>>
<<They _u>> <<= _description>>.
<<set _value = _u.getSlaveValue()>>
<<They _u>>
<<if _value < setup.TRAIT_VALUE_LOW_THRESHOLD>>
is worth nothing in the slave markets --- you better off selling <<them _u>> for fixed-priced slave orders.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[0]>>
is a decently-valuable slave.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[1]>>
is a valuable slave that would fetch you a tidy amount of sum if you find the right buyer.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[2]>>
is a greatly valuable slave that attracts attention from anyone seeing <<them _u>>.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[3]>>
is an extremely valuable slave deserving of being sold in proper venues.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[4]>>
is an astronomically valuable slave fit for royals.
<<elseif _value < setup.TRAIT_VALUE_HIGH_THRESHOLDS[5]>>
is famous throughout the region, and is often the target of many royals and demons alike to own.
<<else>>
is a god-tier slave.
<</if>>
<</if>>
/* duty */
<<set _duty = _u.getDuty()>>
<<if _duty>>
<<= _u.getName()>> is your <<rep _duty>>,
<<= setup.Text.Duty.competence(_duty)>>.
<</if>>
/* lovers */
<<set _lover = _u.getLover()>>
<<if _lover>>
<<if _lover.isYou()>>
<<They _u>> is your lover.
<<else>>
<<They _u>> is <<rep _lover>>'s lover.
<</if>>
<<if $family.getRelation(_lover, _u)>>
Since
<<if _lover.isYou()>>
you
<<else>>
they
<</if>>
are related by blood, this makes the relationship highly incestuous.
<</if>>
<</if>>
/* length of service */
<<set _service = _u.getWeeksWithCompany()>>
<<if _service>>
<<They _u>> has been with your company for <<= _service>> weeks<<else>>
<<They _u>> has just
<<if _u.isSlaver()>>joined<<else>>been enslaved by<</if>> your company<</if>><<if _u.isSlaver()>>,
and is being paid <<money _u.getWage()>> per week.<<else>>.<</if>>
/* background (trait) */
<<= setup.Text.Unit.background(_u)>>
/* origin */
<<set _origin = _u.getOrigin()>>
<<if _origin>>
Right before <<if _u.getJob() == setup.job.slave>>being enslaved by<<else>>joining<</if>>
your company, <<= _u.getName()>> <<= _origin>>.
<</if>>
/* basic equipment description, more later */
<<They _u>> is currently wearing <<uequipment _u>>.
/* history */
<<if _u.getHistory()>>
You can check <<their _u>>
<<capture _u>>
<<message 'history'>>
<div class='companycard'>
<<set _unit = _u>>
<<set _histories = _u.getHistory()>>
<<for _ihistory, _history range _histories>>
<<= _history>>
<br/>
<</for>>
</div>
<</message>>
<</capture>>
with your company.
<</if>>
/* titles */
<<set _titles = $titlelist.getAllTitles(_u)>>
<<if _titles.length == 1>>
<<They _u>> is known as the <<rep _titles[0]>>.
<<elseif _titles.length == 2>>
<<They _u>> has two titles: <<rep _titles[0]>> and <<rep _titles[1]>>.
<<elseif _titles.length > 2>>
<<They _u>> has several titles to <<their _u>> name:
<<for _ititle, _title range _titles>>
<<if _ititle == _titles.length - 1>>
and <<rep _title>>.
<<else>>
<<rep _title>>,
<</if>>
<</for>>
<</if>>
<<= setup.TitleHelper.unitTitleDescribe(_u)>>
</p>
/* family */
<<set _family = $family.getFamily(_u)>>
<<set _familykeys = Object.keys(_family)>>
<<if _familykeys.length>>
<p>
You know that <<= _u.getName()>> has at least
<<= _familykeys.length >> family members.
<<They _u>> is
<<set _i = 0>>
<<for _familyunitkey, _relation range _family>>
<<if _i && _i == _familykeys.length - 1>>and<</if>>
<<if $unit[_familyunitkey].isYourCompany()>>
<<rep $unit[_familyunitkey]>>'s
<<else>>
<<name $unit[_familyunitkey]>>'s
<</if>>
<<rep _relation>><<if _i < _familykeys.length - 1 && _familykeys.length > 2>>,<<elseif _i == _familykeys.length - 1>>.<</if>>
<<set _i = _i + 1>>
<</for>>
</p>
<</if>>
/* bedchambers */
<<set _bedchambers = $bedchamberlist.getBedchambers({slaver: _u})>>
<<if _bedchambers.length>>
<p>
<<set _slaves = []>>
<<= _u.getName()>> is the owner of
<<if _bedchambers.length == 1>>
<<= _bedchambers[0].rep()>>.
<<else>>
<<for _ibedchamber, _bedchamber range _bedchambers>>
<<if _ibedchamber>>,<</if>>
<<if _ibedchamber == _bedchambers.length - 1>>
and
<</if>>
<<rep _bedchamber>>
<</for>>
.
<</if>>
<<for _ibedchamber, _bedchamber range _bedchambers>>
<<set _slaves = _slaves.concat(_bedchamber.getSlaves())>>
<</for>>
<<if _slaves.length>>
<<They _u>> keeps <<their _u>> personal
<<if _slaves.length > 1>>
<<capture _slaves>>
<<message 'harem'>>
<<for _islave, _slave range _slaves>>
<<rep _slave>>
<</for>>
<</message>>
consisting of <<= _slaves.length>> slaves there.
<</capture>>
<<else>>
<<titlelow _slaves[0]>> <<= _slaves[0].rep()>> there.
<</if>>
<<else>>
<<if _bedchambers.length > 1>>
The room is
<<else>>
The rooms are
<</if>>
empty right now, and <<= _u.getName()>> does not have any personal slave.
<</if>>
</p>
<</if>>
/* Head */
<p>
<<= _u.getName()>> has a
<<ufaceall _u>>, and a
<<uheadall _u>>.
<<They _u>> possesses a <<uearsall _u>>, as well as
<<ueyesall _u>>.
<<uflavor _u "ears">>
<<uflavor _u "eyes">>
In addition, <<= _u.getName()>> has a <<umouthall _u>>.
<<uflavor _u "mouth">>
<<if _u.isHasTrait('mouth_dragonkin')>>
<<if _u.isHasTrait('magic_fire')>>
<<They _u>> is able to breathe scorching fire from
<<their _u>> mouth.
<<elseif _u.isHasTrait('magic_water')>>
<<They _u>> is able to breathe freezing ice from
<<their _u>> mouth.
<<elseif _u.isHasTrait('magic_earth')>>
<<They _u>> is able to breathe deadly venom from
<<their _u>> mouth.
<<elseif _u.isHasTrait('magic_wind')>>
<<They _u>> is able to breathe impossibly strong gusts of wind from
<<their _u>> mouth.
<<elseif _u.isHasTrait('magic_light')>>
<<They _u>> is able to breathe out pure magic from
<<their _u>> mouth.
<<elseif _u.isHasTrait('magic_dark')>>
<<They _u>> is able to breathe out corruption from
<<their _u>> mouth.
<</if>>
<</if>>
</p>
/* Torso, arms, breasts, wings */
<p>
<<= _u.getName()>> possesses a
<<if _u.isHasTrait(setup.trait.corruptedfull)>> fully corrupted
<<elseif _u.isHasTrait(setup.trait.corrupted)>> noticably corrupted <</if>>
<<utorsoall _u>>.
<<uflavor _u "body">>
<<if setup.Text.Unit.Equipment.isChestCovered(_u)>>
Underneath <<their _u>> clothes, <<= _u.getName()>> has a
<<ubreastall _u>>.
<</if>>
<<if _u.getWings()>>
<<if _u.getRace() == setup.trait.race_demon && _u.getWings() == setup.trait.wings_dragonkin >>
Despite being a demon, from <<their _u>> back grows a <<uwingsall _u>>,
making the demon particularly fierce and legendary looking.
<<elseif _u.getRace() == setup.trait.race_demon && _u.getWings() == setup.trait.wings_elf >>
Unlike most demons, <<their _u>> wings are beautiful and graceful.
From their back grows a <<uwingsall _u>>.
<<elseif _u.getRace() == setup.trait.race_demon && _u.getWings() == setup.trait.wings_feathery >>
From their back grows an ominous pair of <<uwingsall _u>>.
<<else>>
Behind, from <<their _u>> back grows a <<uwingsall _u>>.
<</if>>
<<if _u.isHasTrait(setup.trait.skill_flight)>>
<<uflavor _u "wings">>
<</if>>
<</if>>
<<They _u>> has a <<uneckall _u>>.
<<= _u.getName() >> also possesses a <<uarmsall _u>>.
<<uflavor _u "arms">>
<<set _weapon = _u.getEquipmentAt(setup.equipmentslot.weapon)>>
<<if _weapon>>
Using <<their _u>> <<uhands _u>>,
<<name _u>> can
<<if _u.isHasTrait('muscle_strong')>>
powerfully
<<elseif _u.getSkill(setup.skill.combat) >= 60>>
masterfully
<<elseif _u.isHasTrait('muscle_weak')>>
flimsily
<</if>>
use <<their _u>> <<uweaponall _u>>.
<</if>>
</p>
/* Lower body, tail and genitals */
<p>
For <<their _u>> lower body, <<= _u.getName()>> has <<ulegsall _u>>.
<<uflavor _u "legs">>
<<if setup.Text.Unit.Equipment.isGenitalCovered(_u)>>
<<Their _u>> genitals are covered by <<their _u>> clothes.
Underneath <<their _u>> clothes,
<</if>>
<<= _u.getName()>> has a <<ugenitalall _u>>.
<<uflavor _u "dickshape">>
Deep in <<their _u>> ass, <<= _u.getName()>> has a <<uanusall _u>>.
<<if _u.getTraitWithTag('tail')>>
From above <<their _u>> ass grows a <<utailall _u>>.
<<uflavor _u "tail">>
<</if>>
At the bottom of <<their _u>> body are <<their _u>> <<ufeetall _u>>.
</p>
/* Corruption */
<<set _missing = _u.getMissingInnateTraits()>>
<<set _extra = _u.getNonInnateSkinTraits()>>
<<if _missing.length || _extra.length>>
<p>
The <<if _u.getJob() == setup.job.slave>>slave<<else>>slaver<</if>> has been visible transformed,
<<if _extra.length>>
gaining
<<for _itrait range _extra>><<rep _itrait>><</for>><<if _missing.length>>, while
<<else>>.<</if>>
<</if>>
<<if _missing.length>>
missing
<<for _itrait range _missing>><<rep _itrait>><</for>>.
<</if>>
</p>
<</if>>
/* Mental things */
<p>
<<if !_u.isMindbroken() && _u != $unit.player>>
<<set _friendship = $friendship.getFriendship(_u, $unit.player)>>
<<if _u.isSlave()>>
<<= _u.getName()>> <<tfriendslave _friendship>> you.
<<else>>
<<= _u.getName()>> considers you <<their _u>> <<tfriendtitle _friendship>>.
<</if>>
<</if>>
<<set _text = setup.Text.Unit.Trait.describeAll(_u, 'per')>>
<<if _text>>
Personality-wise, <<= _text>>
<<else>>
<<if _u.isMindbroken() >>
<<= _u.getName()>> has been mindbroken and whatever skills and personalities <<they _u>> had before being mindbroken has been lost.
<<= _u.getName()>> can now only serve as a hollowed-out fucktoy for yours and your slavers' pleasure.
<<else>>
There is really nothing that stands out about <<= _u.getName()>>'s personality, which is outstanding by itself.
<</if>>
<</if>>
<<= setup.Text.Unit.Trait.describeAll(_u, 'skill')>>
<<if $bodyshift.isBodyshifter(_u)>>
<<They _u>> is a known bodyshifter, capable of shifting from
their current <<urace _u>> body into a <<urace $bodyshift.getBody(_u)>> one.
<</if>>
<<set _trauma = setup.Text.Unit.Trait.describeAll(_u, 'trauma')>>
<<if _trauma>>
Recent experiences have temporarily traumatized <<= _u.getName()>>, and as a result
<<= _trauma>>
<</if>>
<<set _boon = setup.Text.Unit.Trait.describeAll(_u, 'boon')>>
<<if _boon>>
<<= _u.getName()>>'s spirits have been lifted temporarily from recent events, and as a result
<<= _boon>>
<</if>>
<<if _u.isSlaver()>>
<<Their _u>> preferred weapon is the <<uweapon _u>>.
<</if>>
<<if $hospital.isInjured(_u)>>
<<set _injury = $hospital.getInjury(_u)>>
<<They _u>> is currently injured, and is expected to recover in <<= _injury>> weeks.
<</if>>
</p>
/* Current occupations */
<p>
<<set _team = _u.getTeam()>>
<<if _team>>
<<name _u>> is currently a member of <<rep _team>>.
<</if>>
<<if !_u.isHome()>>
<<name _u>> is currently away from the fort.
<<set _quest = _u.getQuest()>>
<<if _quest>>
<<They _u>> is away in <<rep _quest>>, and should return within
<<= _quest.getRemainingWeeks()>> weeks.
<</if>>
<<set _opp = _u.getOpportunity()>>
<<if _opp>>
<<They _u>> is involved in <<rep _opp>>.
<</if>>
<<if $leave.isOnLeave(_u)>>
<<if $leave.isLeaveDurationUnknown(_u)>>
It is unclear how long <<they _u>> will remain away from your company.
<<else>>
<<set _duration = $leave.getRemainingLeaveDuration(_u)>>
<<They _u>> should return within <<= _duration>> week<<if _duration > 1>>s<</if>>.
<</if>>
<<They _u>> <<= $leave.getLeaveReason(_u)>>.
<</if>>
<</if>>
<<set _friendcheck = (_u.isSlaver() && $fort.player.isHasBuilding(setup.buildingtemplate.moraleoffice))>>
<<if _friendcheck>>
<<set _bestfriend = $friendship.getBestFriend(_u)>>
<<if _bestfriend>>
Among the slavers in your company,
<<name _u>>
is closest to
<<rep _bestfriend>>.
<<They _u>>
considers <<rep _bestfriend>>
to be <<their _u>> <<ufriend _u _bestfriend>>.
<</if>>
<</if>>
</p>
<<if _u.isSlave()>>
<p>
If <<= _u.getName()>> were to become a slaver, <<their _u>>
starting skills would be
<<= setup.SkillHelper.explainSkillsWithAdditives(
_u.getSkillsBase(), _u.getSkillsAdd(), _u.getSkillModifiers(),
)>>.
</p>
<</if>>
<</capture>>
<</focwidget>><<focwidget "unitpoolcard">>
<<set _unitpool = $args[0]>>
<<capture _unitpool>>
<div class='companycard'>
<<nameof _unitpool>>
<br/>
<<for _ibsr, _bsr range _unitpool.base_stat_ranges>>
<<= _bsr[0]>>-<<= _bsr[1]>> <<= setup.skill[_ibsr].rep()>> |
<</for>>
<<for _ita, _ta range _unitpool.trait_alloc>>
<br/>
<<= _ita>>:
<<for _iabc, _abc range _ta.chances>>
<<= setup.trait[_iabc].rep()>>
<</for>>
<</for>>
</div>
<</capture>>
<</focwidget>>
<<focwidget "unitpoolcardkey">>
<<unitpoolcard setup.unitpool[$args[0]]>>
<</focwidget>>
<<focwidget "unitgroupcard">>
<<set _unitgroup = $args[0]>>
<<capture _unitgroup>>
<div class='marketobjectcard'>
<<nameof _unitgroup>>
<span class='toprightspan'>
Reuse chance: <<= _unitgroup.reuse_chance>>
</span>
<<if _unitgroup.unit_post_process.length>>
<br/>
Post processes:
<<costcard _unitgroup.unit_post_process>>
<</if>>
<br/>
Unit pools:
<<set _pools = _unitgroup.getUnitPools()>>
<<for _ipool, _pool range _pools>>
<br/>
<<= _pool[1]>>: <<= _pool[0].rep()>>
<</for>>
</div>
<</capture>>
<</focwidget>>
<<focwidget "unitgroupcardkey">>
<<unitgroupcard setup.unitgroup[$args[0]]>>
<</focwidget>><<focwidget 'tooltipunit'>>
<<set _unit = $unit[$args[0]]>>
<<if _unit>>
<<unitcard _unit>>
<<else>>
Invalid unit
<</if>>
<</focwidget>>