Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
<<set _passages = Story.lookup('tags', 'activity')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>
<<run setup.ActivityTemplateInitFuck()>><<run new setup.ActivityTemplate({
key: 'retiree_visit',
name: "Retiree Visit", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.join_senior),
],
'b': [
setup.qres.Job(setup.job.retired),
],
},
critical_traits: [
setup.trait.per_loyal,
setup.trait.per_gregarious,
setup.trait.per_honorable,
],
disaster_traits: [
setup.trait.per_evil,
setup.trait.per_independent,
setup.trait.per_loner,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "b",
texts: {
friendly: [
"Long time no see, <<unickname $g.b $g.a>>! Hope you are doing swell!",
"How are you, <<unickname $g.b $g.a>>! I happened to be nearby and thought I\'d give you all a visit.",
],
bold: [
"Hey <<unickname $g.b $g.a>>! I\'ve decided to drop for a visit, miss me?",
"<<name $g.a>>! Hey <<if $g.a.isMale()>> man <<else>> girl <</if>> , long time no see! I almost missed you.",
],
cool: [
"<<name $g.a>>! Been a while.",
"<<name $g.a>>. Glad to see you.",
],
witty: [
"<<ugreetingshort $g.a>> are you going to tell me how much you missed me? No need to be shy.",
"What says the nymphomaniac\'s right leg to her left leg, at the end of spring break? \"Long time no see!\"",
"<<name $g.a>>! Bet the company a bit less lively without me around, so I\'ve decided to visit and liven things up!",
],
debauched: [
"Hey <<unickname $g.b $g.a>>, I\'m back! What are your other two wishes?",
"Hey, it\'s <<unickname $g.b $g.a>>! Come inside and lock the door, it\'s been a while *winks*.",
],
},
}, /* End of Dialogue #1 */
{ /* Dialogue #2: */
actor: "a",
texts: {
friendly: [
"<<ugreetingshort $g.a>> I heard <<name $g.b>> came for a visit so I came running!",
"Thanks for coming <<name $g.b>>! You made my day.",
],
bold: [
"Heh, <<name $g.b>>, I see you\'re still as <<uadjgood $g.b>> as ever.",
"You never change huh <<name $g.b>>.",
],
cool: [
"Hey, boss is here too, came to join us for our chat?",
"<<ugreetingshort $g.a>> I was just catching up with <<rep $g.b>>.",
],
witty: [
"Wow, I never thought I\'d miss <<rep $g.b>> but here I am.",
"Wow, I can\'t believe it\'s been quite some time since <<rep $g.b>> left.",
],
debauched: [
"Sure sure, but when are we going to hit the bed?",
"Well, the bed won\'t stay warm long soon so maybe we should get going fast...",
],
},
}, /* End of Dialogue #2 */
],
room_templates: [
setup.roomtemplate.inn,
],
})>><<run new setup.ActivityTemplate({
key: 'lazy_napping',
name: "Lazy Napping", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.per_dreamy,
],
disaster_traits: [
setup.trait.per_attentive,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Zzz...",
"...Mmm...<<topic>>...",
],
bold: [
"...Zzz...Grr, why you <<topic>>...Zzz...",
"...Zzz...attack...zzz...",
],
cool: [
"...Zzz",
"...Mmm...",
],
witty: [
"...Zzz...",
"...(yawn)...Zzz...",
],
debauched: [
"...Zzz...mmm...yeah...",
"...Oohh...<<topic>>...zzz...",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.slaverroom,
],
})>><<run new setup.ActivityTemplate({
key: 'tidying_up_bedroom',
name: "Tidying Up Bedroom", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.per_attentive,
],
disaster_traits: [
setup.trait.per_dreamy,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Fold the sheet, and bed all prepared!",
"It\'s been a while since I air my pillow out.",
],
bold: [
"<<ugreetingshort $g.a>> come to help me tidy my room up?",
"Take that! And that! Bed bugs be gone!",
],
cool: [
"Move pillow here, blanket here, and done.",
"<<ubusyshort $g.a>> cleaning my room.",
],
witty: [
"Why do I need to tidy up my room if it\'s going to be messy again come tomorrow morning?",
"Well I suppose having a tidier room couldn\'t hurt...
",
],
debauched: [
"Ugh, is that another cumstain I see at the corner of my room?",
"<<ugreetingshort $g.a>> if you come for sex you\'re in luck. I haven\'t tidied up my bed!",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.slaverroom,
],
})>><<run new setup.ActivityTemplate({
key: 'doctor_deskjob',
name: "Doctor Deskjob", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.OnDuty('doctor'),
],
},
critical_traits: [
],
disaster_traits: [
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.common,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"<<ubusyshort $g.a>>. I\'m stocking up on medical supplies. You never want to run out of them.",
"<<ugreetingshort $g.a>> came for a quick health checkup?",
],
bold: [
"<<ubusyshort $g.a>>. Need to plan ahead in case when we inevitably got an influx of injuries.",
"<<ugreetingshort $g.a>> if you come for a checkup, just sit down and let me do my work.",
"Come, let me give you a quick lookup.",
],
cool: [
"<<ubusyshort $g.a>>. Stocking up supplies.",
"<<ugreetingshort $g.a>> checkup? Then sit down.",
],
witty: [
"<<ubusyshort $g.a>> checking up on all the essentials. It\'s always good to stock up on a potions for all sort of maladies, even \"those\" kind of maladies *wink*.",
"<<ugreetingshort $g.a>> came for a quick health checkup? Just a moment then, I\'ll be back with my medical gag.",
],
debauched: [
"Why, if it isn\'t my favorite patient. Come for a full body checkup, have you hmm? Well then you can strip right away.",
"<<ugreetingshort $g.a>> have you come for a medical check-up or for some \"hospital fun\"?",
"Come closer and strip. It's doctor's orders.",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.doctoroffice,
],
})>><<run new setup.ActivityTemplate({
key: 'marketer_marketing',
name: "Marketer Marketing", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.OnDuty('marketer'),
],
},
critical_traits: [
],
disaster_traits: [
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.common,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"<<ubusyshort $g.a>> trying to get a new slaver order for you.",
"The people in the city are always looking for \"servants\". Might be one of the few occupations that are relatively comfy for the slave.",
],
bold: [
"<<ubusyshort $g.a>> getting some new slave orders to make us some nice hard cash.",
"I heard some orcish camps on the east prefer to buy virgin tight slaves...",
],
cool: [
"<<ubusyshort $g.a>>. Have orders to sort through.",
"Hmm, the mines always need new workers...",
],
witty: [
"If someone wants to learn how to get a person they could just come here and buy our slaves.",
"Maybe we could get better offers if we sell our slaves a different way. Buy one get a free blowjob?",
],
debauched: [
"<<ubusyshort $g.a>>. Got a potential lead for orders from a particular client on the seas who delights in nothing but breaking in the toughest of slaves...",
"I wonder if I could just buy some of our own slaves for my personal use...",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.marketeroffice,
],
})>><<run new setup.ActivityTemplate({
key: 'hospital_recovering',
name: "Hospital Recovering", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.IsInjured(1),
],
},
critical_traits: [
],
disaster_traits: [
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.common,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Ouch... that stings.",
"Oww... my body feels so bad.",
],
bold: [
"<<ugreetingshort $g.a>> I\'m ready for action, just let me o- YEOUCH! Don\'t touch my legs, it still hurts like hell.",
"...sigh being in the hospital is so boring. Why can\'t my wounds heal faster?!",
],
cool: [
"...ouch.",
"The hospital is quiet, at least. I like it.",
],
witty: [
"<<ugreetingshort $g.a>> come join my writing profanities on my bandage and adding insults to the injury.",
"I could handle a couple of bruises and wounds, but please don\'t subject me to wage cuts!",
],
debauched: [
"My entire body hurts, but most of all it\'s the pain in my ass that\'s bothering me the most...",
"I wonder if it\'s hygienic to get a slave or two to service me in the hospital...",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.hospital,
],
})>><<run new setup.ActivityTemplate({
key: 'fort_square_pet_walking',
name: "Fort Square Pet Walking", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.RememberUnit(),
],
'pet': [
setup.qres.Job(setup.job.slave),
setup.qres.CanBeUsedByRememberedUnit(),
setup.qres.AnyTrait([setup.trait.training_pet_basic, setup.trait.training_pet_advanced, setup.trait.training_pet_master], true),
],
},
critical_traits: [
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.skill_animal,
setup.trait.per_evil,
],
disaster_traits: [
setup.trait.per_honorable,
setup.trait.per_submissive,
setup.trait.per_serious,
setup.trait.per_loner,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"<<ugreetingshort $g.a>> just ensuring our little pet her get pet|their daily dose of sunlight.",
"<<ugreetingshort $g.a>> would you like to walk our <<urace $g.pet>> dog together?",
],
bold: [
"Walk faster, you worthless pet!",
"Time for some walkies, pet!",
],
cool: [
"Walk faster, pet.",
"<<ubusyshort $g.a>> walking the pet. Someone has to.",
],
witty: [
"Who's a good pet? Yes! Yes you are!",
"No whining! Wag your tail more! Bad pet!",
"<<ugreetingshort $g.a>> come to join me on the totally normal chore of walking our <<urace $g.pet>> pet?",
],
debauched: [
"No whining, you slutty pet! You just had your <<ucum $g.a>> lunch!",
"Aww, slutty pet wants some relief? Maybe after the walk is done, if I\'m feeling particulary generous.",
],
},
}, /* End of Dialogue #1 */
{ /* Dialogue #2: */
actor: "pet",
texts: [
"<<upetwhine $g.pet>>",
],
}, /* End of Dialogue #2 */
],
room_templates: [
setup.roomtemplate.hiringsquare,
],
})>><<run new setup.ActivityTemplate({
key: 'forge_blacksmith2',
name: "Forge Blacksmith", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
'b': setup.contacttemplate.blacksmithpeddler,
},
critical_traits: [
setup.trait.skill_ambidextrous,
],
disaster_traits: [
setup.trait.per_kind,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "b",
texts: [
"Hey <<rep $unit.player>>, welcome to my smithy. Fancy a new armor?",
"Hey <<rep $unit.player>>, welcome to my smithy. Just helping out <<rep $g.a>> here maintain <<their $g.a>> <<uweapon $g.a>>.",
"Looking to protect yourself, or deal some damage?",
"Do you know what\'s the hardest part of forging? It\'s the anvil.",
],
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.forge,
],
})>><<run new setup.ActivityTemplate({
key: 'market_browse_wares',
name: "Market Browse Wares", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.per_frugal,
setup.trait.per_sly,
setup.trait.bg_merchant,
],
disaster_traits: [
setup.trait.per_lavish,
setup.trait.per_direct,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"I wonder if I could get a better deal somewhere else...",
"Oh, that tomato looks very fresh... And that one too, and that one to... One of everything, please!",
],
bold: [
"<<set _m = random(50, 150)>><<money _m>> for a piece of carrot? Ridiculous! Lower the price this instant!",
"You dare charging this outrageous price for a banana? Do you know who I am?",
],
cool: [
"...I\'ll get one of these, thanks.",
"How much for this piece of meat?",
],
witty: [
"<<ugreetingshort $g.a>>, I saw an attractive merchant selling honey over the market. I think <<they $g.a>> might be... a keeper.",
"<<ugreetingshort $g.a>> browsing the fresh market today? I hope your day is... fruitful.",
],
debauched: [
"That is some long, thick cucumber you have there...",
"Ah no, I\'m not looking for a jerky. I\'m looking for a... higher quality piece of meat, maybe something you hid under the stall...",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.market,
],
})>><<run new setup.ActivityTemplate({
key: 'library_study',
name: "Library Study", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.bg_scholar,
setup.trait.bg_wiseman,
setup.trait.per_studious,
setup.trait.per_logical,
],
disaster_traits: [
setup.trait.per_active,
setup.trait.per_empath,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"It\'s so quiet here...",
"What an engrossing read...",
],
bold: [
"One day my name will be written in the history books.",
"The library is really the best place for a nap... zzz...",
],
cool: [
"Interesting book.",
"That was a good read.",
],
witty: [
"What's the difference between cats and a comma? Cats have claws at the end of their paws and commas are a pause at the end of a clause.",
"Past, present, and future walked into a bar. It was tense.",
"<<unickname $g.a>>, comma her for a bit and join me for a period.",
],
debauched: [
"I wonder when will the raunchy part starts...",
"I think I\'ve stored my secret world-domination book here somewhere...",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.library,
],
})>><<run new setup.ActivityTemplate({
key: 'mail_room_read_mail',
name: "Mail Room Read Mail", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.per_gregarious,
setup.trait.bg_informer,
setup.trait.bg_boss,
],
disaster_traits: [
setup.trait.per_loner,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"<<ugreetingshort $g.a>> don\'t mind me. Just reading a mail from a friend.",
"Hope to see you again, soon..., and done! Now I\'ll just have to send this mail.",
],
bold: [
"Who kept putting nude images in my letterbox?!",
"Maybe I should post a slave or two to keep watch over my mailbox...",
],
cool: [
"Huh, a new mail for me.",
"A mail for me? That\'s rare.",
],
witty: [
"Have you ever wondered <<unickname $g.a>> why someone would become a mailman? The wage may be low, but it\'s all about sending a message.",
"Do they call the female mailman as mailwoman?",
],
debauched: [
"Ooh, a sexmail! I love those.",
"Don\'t mind me <<unickname $g.a>>, just writing some totally normal letters.",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.mailroom,
],
})>><<run new setup.ActivityTemplate({
key: 'sparring',
name: "Sparring", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
'b': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.per_dreamy, setup.trait.per_cautious, setup.trait.per_submissive, setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.height_dwarf], true),
],
},
critical_traits: [
setup.trait.height_giant,
setup.trait.height_tall,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_brave,
setup.trait.per_active,
setup.trait.skill_ambidextrous,
],
disaster_traits: [
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.muscle_thin,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Thanks for coming to spar with me, now let\'s start. Here I come!",
"Thanks for joining in my daily training. Let\'s start, here I go!",
],
bold: [
"You\'re foolish enough to think you can beat me in a sparring match. Defend yourself!",
"You think you can beat me even in a sparring contest? I\'ll change your mind now, ready or not here I come!",
],
cool: [
"Let\'s start the sparring. Here I go...",
"Well then, let\'s start the sparring practice. Yaah!!",
],
witty: [
"I didn\'t expect <<unickname $g.a>> to come over and watch us spar. There goes the plan to lazy around instead. Heh, just kidding. Prepare yourself!",
"A sparring fight? Perfect, time to show you just what I can do. En garde!",
],
debauched: [
"This is just a sparring fight, so go easy on little old me. Now here I go...",
"I know this is just a sparring fight, but seeing you in workout clothes is... quite something, you know that? But we came here to spar so, here I go!",
],
},
}, /* End of Dialogue #1 */
{ /* Dialogue #2: */
actor: "b",
texts: {
friendly: [
"Let\'s not injure ourselves, and take it slow.",
"Careful, don\'t want to injure yourself during practice.",
],
bold: [
"Heh, taste my <<uweapon $g.b>>!",
"How foolish, you think I know how to hold back? Well, taste defeat!",
],
cool: [
"...heh, this will be good practice.",
"...I won\'t hold back too much.",
],
witty: [
"Risking current injuries for future injury avoidance? Sign me up!",
"I\'m good at everything theatrics, mock battles included!",
],
debauched: [
"I\'ll try to be gentle — don\'t want your blood on my <<uhands $g.b>> after all.",
"How foolish. Here I come!",
],
},
}, /* End of Dialogue #2 */
],
room_templates: [
setup.roomtemplate.traininggrounds,
],
})>><<run new setup.ActivityTemplate({
key: 'cleaning_closet_clean_shoes',
name: "Cleaning Closet Clean Shoes", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.RememberUnit(),
],
'b': [
setup.qres.OnDuty('maidslave'),
],
},
critical_traits: [
setup.trait.per_dominant,
setup.trait.per_cruel,
setup.trait.bg_maid,
],
disaster_traits: [
setup.trait.per_kind,
setup.trait.per_submissive,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Help me clean my clothes, slave.",
"Come help me wash my clothes, slave.",
],
bold: [
"Clean my shoes, slave! With your tongue if necessary.",
"Don\'t dawdle, my shoes won\'t clean itself!",
],
cool: [
"Clean my clothes, slave.",
"Wash my shoes, slave.",
],
witty: [
"Yes, that\'s right slave! Lick every inch of my boots. Good slave!",
"Aww, who\'s a good slave? Now come closer and lick my shoes clean!",
],
debauched: [
"Lick my shoes clean, slave! Use your tongue!",
"You worthless slave, all you\'re good for is for cleaning my shoes with your mouth!",
],
},
}, /* End of Dialogue #1 */
{ /* Dialogue #2: */
actor: "b",
texts: [
"<<uyesmaster $g.b $g.a>>",
],
}, /* End of Dialogue #2 */
],
room_templates: [
setup.roomtemplate.cleaning,
],
})>><<run new setup.ActivityTemplate({
key: 'grand_hall_gossip',
name: "Grand Hall Gossip", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.BestFriendFriendshipAtLeast(300),
setup.qres.BestFriend(setup.qres.And([
setup.qres.Available()
])),
setup.qres.RememberUnit(),
],
'b': [
setup.qres.Job(setup.job.slaver),
setup.qres.BestFriendWithRememberedUnit(),
],
},
critical_traits: [
setup.trait.per_gregarious,
setup.trait.per_curious,
],
disaster_traits: [
setup.trait.per_loner,
setup.trait.per_stubborn,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"Hey <<rep $g.b>>! Did you hear about the recent news on <<topic>>?",
"...and then I watched the poor sod who tried to rob me fell into the river. I actually felt a little bad for <<them $g.b>>.",
],
bold: [
"Friend! Did you saw what I did during last quest?",
"...and I swung my <<uweapon $g.a>>. THWACK, and that\'s one more slave for our company.",
],
cool: [
"Friend, good to see you.",
"...and the bandits never saw us coming.",
],
witty: [
"Hey friend! Have you ever wondered where to find the war key to open the war lock?",
"...I once saw a tall dwarf. Clearly a frawd.",
],
debauched: [
"Hey friend! Come closer, don\'t be shy...",
"...and i pulled the slave\'s leash while I fuck \'em hard! It was fun.",
],
},
}, /* End of Dialogue #1 */
{ /* Dialogue #2: */
actor: "b",
texts: {
friendly: [
"Heh, never change, <<rep $g.a>>.",
"That\'s my friend, <<rep $g.a>>.",
],
bold: [
"Sure, but did you hear what I did on the last mission?",
"Hah fun! Well if it were me I\'d...",
],
cool: [
"Nice.",
"Good one.",
],
witty: [
"Haha!",
"Oof, nice.",
],
debauched: [
"That could have been much worse.",
"Sure, let\'s talk a bit more later, maybe in my room...",
],
},
}, /* End of Dialogue #2 */
],
room_templates: [
setup.roomtemplate.grandhall,
],
})>><<run new setup.ActivityTemplate({
key: 'temple_pray',
name: "Temple Pray", /* Title */
author: { /* Author */
name: "darko",
url: "",
},
tags: [ /* tags */
],
actor_unitgroups: { /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [
setup.trait.per_honorable,
setup.trait.per_empath,
setup.trait.per_kind,
setup.trait.per_calm,
setup.trait.bg_priest,
],
disaster_traits: [
setup.trait.per_evil,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_aggressive,
setup.trait.race_demon,
],
restrictions: [ /* restrictions */
],
rarity: setup.rarity.rare,
dialogues: [
{ /* Dialogue #1: */
actor: "a",
texts: {
friendly: [
"<<ugreetingshort $g.a>> are you here to pray as well?",
"<<ugreetingshort $g.a>> have you come to pray as well?",
"I hope that peace and prosperity would keep enriching everyone in my life...",
],
bold: [
"<<ugreetingshort $g.a>> I'm praying right now, talk to you later.",
"<<ugreetingshort $g.a>> I may not look like the kind of <<rep $g.a>> that pray but I do from time to time.",
"I demand blessing for the upcoming quest...",
],
cool: [
"<<ugreetingshort $g.a>> come to pray?.",
"<<ugreetingfull $g.a>> I'm praying right now.",
"...",
],
witty: [
"<<ugreetingshort $g.a>> come to offer your prayers to something that might or might not exists?.",
"<<ugreetingshort $g.a>> don't mind me, just kneeling here doing something solemn like I usually do.",
"I came to pray, but kept getting distracted by the attractive priests around...",
],
debauched: [
"<<ugreetingshort $g.a>> surprised to see me here? I sometimes come here during clarity hours, you know.",
"Please bestow me more money, more fame, and oh, more slaves too!",
],
},
}, /* End of Dialogue #1 */
],
room_templates: [
setup.roomtemplate.temple,
],
})>><<set setup.buildingtemplate = {}>>
<<set setup.roomtemplate = {}>>
/* Unique buildings */
/* Structural */
<<include 'InitBuildingGrandHall'>>
<<include 'InitBuildingVeteranHall'>>
/* Accomodation */
<<include 'InitBuildingLodgings'>>
<<include 'InitBuildingDungeons'>>
<<include 'InitBuildingInn'>>
<<include 'InitBuildingBedchamberWing'>>
/* Etc */
<<include 'InitBuildingMissionControl'>>
<<include 'InitBuildingWarRoom'>>
/* Special */
<<include 'InitBuildingScoutHut'>>
/* Office */
<<include 'InitBuildingQuestOffice'>>
<<include 'InitBuildingConstructionOffice'>>
<<include 'InitBuildingRenovationOffice'>>
<<include 'InitBuildingLandscapingOffice'>>
<<include 'InitBuildingProspectsHall'>>
<<include 'InitBuildingHiringSquare'>>
<<include 'InitBuildingSlavePens'>>
<<include 'InitBuildingMarketingOffice'>>
<<include 'InitBuildingMailRoom'>>
<<include 'InitBuildingViceLeaderOffice'>>
<<include 'InitBuildingMoraleOffice'>>
<<include 'InitBuildingClassroom'>>
<<include 'InitBuildingLibrary'>>
<<include 'InitBuildingRelationsOffice'>>
/* 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'>>
/* rec wing */
<<include 'InitBuildingRecreationWing'>>
/* under here are optional buildings */
/* Markets */
<<include 'InitBuildingForge'>>
<<include 'InitBuildingSexShop'>>
<<include 'InitBuildingMarket'>>
/* treatment */
<<include 'InitBuildingTreatmentRoom'>>
/* biolab */
<<include 'InitBuildingBiolab'>>
/* surgery */
<<include 'InitBuildingSurgery'>>
/* ritual chamber */
<<include 'InitBuildingRitualChamber'>>
<<include 'InitBuildingDeepRitualChamber'>>
/* temple */
<<include 'InitBuildingTemple'>>
/* Supplementary Buildings */
/* Offices */
<<include 'InitBuildingSpecialistOffice'>>
<<include 'InitBuildingMarketerOffice'>>
<<include 'InitBuildingInsurerOffice'>>
<<include 'InitBuildingRescuerOffice'>>
<<include 'InitBuildingRelationshipManagerOffice'>>
<<include 'InitBuildingDamageControlOffice'>>
<<include 'InitBuildingMessengerPost'>>
/* Hiring */
<<include 'InitBuildingHiringSquareVale'>>
<<include 'InitBuildingHiringSquareForest'>>
<<include 'InitBuildingHiringSquareDesert'>>
<<include 'InitBuildingHiringSquareSea'>>
/* Hospital */
<<include 'InitBuildingTreatmentRoomResetLevel'>>
<<include 'InitBuildingTreatmentRoomAlternative'>>
<<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 'InitBuildingRoleplayTrainingRoom'>>
<<include 'InitBuildingHornyTrainingRoom'>>
<<include 'InitBuildingResearchRoom'>>
<<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 'InitBuildingWorkshop'>>
<<include 'InitBuildingBooths'>>
/* rec wing */
/* pimp unlockers */
<<include 'InitBuildingRecreationWingService'>>
<<include 'InitBuildingRecreationWingSex'>>
/* entertainment pimp buildings */
<<include 'InitBuildingStage'>>
<<include 'InitBuildingTavern'>>
/* dining pimp buildings */
<<include 'InitBuildingBath'>>
<<include 'InitBuildingCleaning'>>
/* fuckhole pimp buildings */
<<include 'InitBuildingAnalFuckhole'>>
<<include 'InitBuildingOralFuckhole'>>
<<include 'InitBuildingVaginaFuckhole'>>
/* pet pimp buildings */
<<include 'InitBuildingKennel'>>
<<include 'InitBuildingPasture'>>
<<include 'InitBuildingStables'>>
<<include 'InitBuildingTheatre'>>
/* scenery pimp buildings */
<<include 'InitBuildingCourtyard'>>
<<include 'InitBuildingGym'>>
<<include 'InitBuildingMuseum'>>
<<include 'InitBuildingSissyBooth'>>
/* decoration */
<<include 'InitBuildingPortal'>>
<<include 'InitBuildingGarden'>>
<<include 'InitBuildingSquare'>>
<<include 'InitBuildingGallery'>>
<<include 'InitBuildingAntiqueShop'>>
<<include 'InitBuildingBondageRoom'>>
<<include 'InitBuildingFarm'>>
<<include 'InitBuildingOilRoom'>>
<<include 'InitBuildingCommonRoom'>>
<<include 'InitBuildingDiningRoom'>>
<<include 'InitBuildingYard'>>
/* buildings from mods */
<<set _passages = Story.lookup('tags', 'building')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>
/* building-less rooms from mods */
<<set _passages = Story.lookup('tags', 'room')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>
/* initialize rooms */
<<run setup.RoomTemplate.initialize()>>
/* initialize room images */
<<run setup.initializeRoomImageTable()>><<run new setup.RoomTemplate({
key: 'fortwalls',
tags: ['hidename', 'structural'],
description_passage: 'RoomFortWalls',
name: 'Fort walls',
width: 1,
height: 1,
skill_bonus: [],
is_fixed: true,
is_passable: false,
is_door: false,
is_optional: false,
is_outdoors: false,
})>><p>
The outer walls of your fort.
</p><<run new setup.RoomTemplate({
key: 'road',
tags: ['hidename', 'structural'],
description_passage: 'RoomRoadOutdoor',
name: 'Road',
width: 2,
height: 1,
skill_bonus: [],
is_fixed: true,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'roadindoor',
tags: ['hidename', 'structural'],
description_passage: 'RoomRoadIndoor',
name: 'Fort entrance',
width: 2,
height: 1,
skill_bonus: [],
is_fixed: true,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: false,
})>><p>
The road leading into your fort.
</p><p>
The entrance of your fort.
</p><<run new setup.RoomTemplate({
key: 'bedchambersuite',
tags: [],
description_passage: 'RoomBedchamberSuite',
name: 'Bedchamber suite',
width: 3,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'bedchamberwing',
tags: [],
width: 5,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "sex",
room_keys: [
'bedchambersuite',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'bedchamberwing',
name: 'Bedchamber wing',
tags: ['critical', 'accomodation', ],
description_passage: 'BuildingBedchamberWing',
costs: [
[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.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)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
[
setup.qres.Building('veteranhall'),
],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
on_build: [
[ 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()), ],
[ 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()), ],
],
main_room_template_key: 'bedchamberwing',
sub_room_template_key: 'bedchambersuite',
})>><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><p>
A suite for your a lucky slaver to have all for their own.
</p><<run new setup.RoomTemplate({
key: 'dungeonscell',
tags: [],
description_passage: 'RoomDungeonsCell',
name: 'Dungeons cell',
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'dungeons',
tags: [],
width: 4,
height: 2,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "slaving",
room_keys: [
'dungeonscell',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'dungeons',
name: 'Dungeons',
tags: ['critical', 'unlocker', 'accomodation',],
description_passage: 'BuildingDungeons',
costs: setup.BuildingTemplate.getLodgingsCost(600),
restrictions: setup.BuildingTemplate.getLodgingsRestrictions(),
main_room_template_key: 'dungeons',
sub_room_template_key: 'dungeonscell',
})>><p>
A dark 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>
<p>
Also unlocks having arbitrary sex with your slavers and slaves, although your options
will be quite limited at the start of your career...
</p><p>
A cell to host even more of your slaves.
</p><<run new setup.RoomTemplate({
key: 'innroom',
tags: [],
description_passage: 'RoomInnRoom',
name: 'Inn room',
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'inn',
tags: [],
width: 4,
height: 4,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "intrigue",
room_keys: [
'innroom',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<set _restrictions = setup.BuildingTemplate.getLodgingsRestrictions()>>
<<run _restrictions[0].push(setup.qres.Building('grandhall'))>>
<<run new setup.BuildingTemplate({
key: 'inn',
name: 'Inn',
tags: ['critical', 'accomodation', ],
description_passage: 'BuildingInn',
costs: setup.BuildingTemplate.getLodgingsCost(1500),
restrictions: _restrictions,
main_room_template_key: 'inn',
sub_room_template_key: 'innroom',
})>><p>
A place for visitors to stay at your fort.
You can host guests here, including some of your former slavers,
and you can also keep track of your retired slavers here.
While only few rooms have been prepared initially, you can prepare more rooms
to keep track of more retired slavers.
Each upgrade allows you to keep track of
<<= setup.FORT_GUEST_ROOM_CAPACITY_PER_LEVEL>>
more retired slavers.
</p><p>
A room to host even more people at the <<rep setup.buildingtemplate.inn>>.
</p><<run new setup.RoomTemplate({
key: 'slaverroom',
tags: [],
description_passage: 'RoomSlaverRoom',
name: 'Slaver room',
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'lodgings',
tags: [],
width: 4,
height: 2,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "combat",
room_keys: [
'slaverroom',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'lodgings',
name: 'Lodgings',
tags: ['critical', 'unlocker', 'accomodation', ],
description_passage: 'BuildingLodgings',
costs: setup.BuildingTemplate.getLodgingsCost(0),
restrictions: setup.BuildingTemplate.getLodgingsRestrictions(),
main_room_template_key: 'lodgings',
sub_room_template_key: 'slaverroom',
})>><p>
A room in your 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><p>
A room for two of your slavers to call home.
</p><<run new setup.RoomTemplate({
key: 'anuslab',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'anuslab',
name: 'Anuslab',
tags: ['biolab'],
description_passage: 'BuildingAnuslab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('biolab'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
main_room_template_key: 'anuslab',
})>><p>
Unlocks tightening and loosening of slave's anus.
</p><<run new setup.RoomTemplate({
key: 'ballslab',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'ballslab',
name: 'Ballslab',
tags: ['biolab'],
description_passage: 'BuildingBallslab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('biolab')],
],
main_room_template_key: 'ballslab',
})>><p>
Unlocks limited growing and shrinking of slave balls.
</p><<run new setup.RoomTemplate({
key: 'biolab',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "brawn",
room_keys: [
'grandhall',
'anuslab',
'ballslab',
'breastlab',
'dicklab',
'vaginalab',
],
},
{
type: "near",
skill_key: "brawn",
room_keys: [
'surgery',
'hospital',
'warehouse',
'library',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'biolab',
name: 'Biolab',
tags: ['biolab', 'critical', 'unlocker', ],
description_passage: 'BuildingBiolab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_water]),
],
],
main_room_template_key: 'biolab',
})>><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.RoomTemplate({
key: 'breastlab',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'breastlab',
name: 'Breastlab',
tags: ['biolab'],
description_passage: 'BuildingBreastlab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('biolab')],
],
main_room_template_key: 'breastlab',
})>><p>
Unlocks limited growing and shrinking of slave breasts.
</p><<run new setup.RoomTemplate({
key: 'dicklab',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'dicklab',
name: 'Dicklab',
tags: ['biolab'],
description_passage: 'BuildingDicklab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('biolab')],
],
main_room_template_key: 'dicklab',
})>><p>
Unlocks limited growing and shrinking of slave dicks.
</p><<run new setup.RoomTemplate({
key: 'surgery',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "aid",
room_keys: [
'surgeryanus',
'surgeryballs',
'surgerybreast',
'surgerydick',
'surgeryvagina',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgery',
name: 'Surgery',
tags: ['biolab', 'unlocker', ],
description_passage: 'BuildingSurgery',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('biolab'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.water_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_water_master]),
],
],
main_room_template_key: 'surgery',
})>><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.RoomTemplate({
key: 'surgeryanus',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgeryanus',
name: 'Surgery: Anus Operating Room',
tags: ['biolab'],
description_passage: 'BuildingSurgeryAnus',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('surgery'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
main_room_template_key: 'surgeryanus',
})>><p>
Unlocks tightening and loosening of yours and your slavers' anus.
</p><<run new setup.RoomTemplate({
key: 'surgeryballs',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgeryballs',
name: 'Surgery: Balls Operating Room',
tags: ['biolab'],
description_passage: 'BuildingSurgeryBalls',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[setup.qres.Building('surgery')],
],
main_room_template_key: 'surgeryballs',
})>><p>
Unlocks limited growing and shrinking of yours and your slavers' balls.
</p><<run new setup.RoomTemplate({
key: 'surgerybreast',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgerybreast',
name: 'Surgery: Breast Operating Room',
tags: ['biolab'],
description_passage: 'BuildingSurgeryBreast',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[setup.qres.Building('surgery')],
],
main_room_template_key: 'surgerybreast',
})>><p>
Unlocks limited growing and shrinking of yours and your slavers' breasts.
</p><<run new setup.RoomTemplate({
key: 'surgerydick',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgerydick',
name: 'Surgery: Dick Operating Room',
tags: ['biolab'],
description_passage: 'BuildingSurgeryDick',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[setup.qres.Building('surgery')],
],
main_room_template_key: 'surgerydick',
})>><p>
Unlocks limited growing and shrinking of yours and your slavers' dicks.
</p><<run new setup.RoomTemplate({
key: 'surgeryvagina',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'surgeryvagina',
name: 'Surgery: Vagina Operating Room',
tags: ['biolab'],
description_passage: 'BuildingSurgeryVagina',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('surgery'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
main_room_template_key: 'surgeryvagina',
})>><p>
Unlocks tightening of yours and your slavers' vagina.
</p><<run new setup.RoomTemplate({
key: 'vaginalab',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'vaginalab',
name: 'Vaginalab',
tags: ['biolab'],
description_passage: 'BuildingVaginalab',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('biolab'),
setup.qres.HasItem(setup.item.rear_technology),
],
],
main_room_template_key: 'vaginalab',
})>><p>
Unlocks tightening and loosening of slave's vagina.
</p><<run new setup.RoomTemplate({
key: 'altarofdarkness',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'altarofdarkness',
name: 'Altar of Darkness',
tags: ['corruption'],
description_passage: 'BuildingAltarOfDarkness',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('ritualchamber'),
setup.qres.HasItem(setup.item.wings_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
main_room_template_key: 'altarofdarkness',
})>><p>
Unlocks targeted corruptions on the tails, wings, and dicks of slaves.
</p><<run new setup.RoomTemplate({
key: 'deepaltarofdarkness',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'deepaltarofdarkness',
name: 'Deep Altar of Darkness',
tags: ['corruption'],
description_passage: 'BuildingDeepAltarOfDarkness',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_ASTRO_MULT)],
],
restrictions: [
[
setup.qres.Building('deepritualchamber'),
setup.qres.HasItem(setup.item.wings_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
main_room_template_key: 'deepaltarofdarkness',
})>><p>
Unlocks targeted corruptions on the tails, wings, and dicks of slavers.
</p><<run new setup.RoomTemplate({
key: 'deepmirrorofthedamned',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'deepmirrorofthedamned',
name: 'Deep Mirror Of The Damned',
tags: ['corruption'],
description_passage: 'BuildingDeepMirrorOfTheDamned',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('deepritualchamber'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
main_room_template_key: 'deepmirrorofthedamned',
})>><p>
Unlocks targeted corruptions on the body, arms, and legs of slavers.
</p><<run new setup.RoomTemplate({
key: 'deeppoolofmist',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'deeppoolofmist',
name: 'Deep Pool of Mist',
tags: ['corruption'],
description_passage: 'BuildingDeepPoolOfMist',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
restrictions: [
[
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
setup.qres.Building('deepritualchamber'),
],
],
main_room_template_key: 'deeppoolofmist',
})>><p>
Unlocks targeted corruptions on the eyes, ears, and mouths of slavers.
</p><<run new setup.RoomTemplate({
key: 'deepritualchamber',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "arcane",
room_keys: [
'deeppoolofmist',
'deepmirrorofthedamned',
'deepaltarofdarkness',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'deepritualchamber',
name: 'Deep ritual chamber',
tags: ['corruption', 'unlocker', ],
description_passage: 'BuildingDeepRitualChamber',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_VERYHIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('ritualchamber'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.dark_technology),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark_master]),
],
],
main_room_template_key: 'deepritualchamber',
})>><p>
A damned place to communicate beyond <<lore concept_mist>>, in particular with the demon prince you have
somehow successfully bargained with.
Unlocks corruption on slavers.
Corruption requires slaves to be sent beyond <<lore concept_mist>> as payment.
Can build further improvements to unlock more targeted corruptions.
</p><<run new setup.RoomTemplate({
key: 'mirrorofthedamned',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'mirrorofthedamned',
name: 'Mirror Of The Damned',
tags: ['corruption'],
description_passage: 'BuildingMirrorOfTheDamned',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('ritualchamber')],
],
main_room_template_key: 'mirrorofthedamned',
})>><p>
Unlocks targeted corruptions on the body, arms, and legs of slaves.
</p><<run new setup.RoomTemplate({
key: 'poolofmist',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'poolofmist',
name: 'Pool of Mist',
tags: ['corruption'],
description_passage: 'BuildingPoolOfMist',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('ritualchamber')],
],
main_room_template_key: 'poolofmist',
})>><p>
Unlocks targeted corruptions on the eyes, ears, and mouths of slaves.
</p><<run new setup.RoomTemplate({
key: 'ritualchamber',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "arcane",
room_keys: [
'grandhall',
'poolofmist',
'mirrorofthedamned',
'altarofdarkness',
'deepritualchamber',
'library',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'ritualchamber',
name: 'Ritual chamber',
tags: ['corruption', 'critical', 'unlocker', ],
description_passage: 'BuildingRitualChamber',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
],
main_room_template_key: 'ritualchamber',
})>><p>
A damned place to communicate beyond <<lore concept_mist>>.
Unlocks corruption on slaves.
Corruption requires slaves to be sent beyond <<lore concept_mist>> as payment.
Can build further improvements to unlock more targeted corruptions.
</p><<run new setup.RoomTemplate({
key: 'vase',
tags: ['hidename', 'hideskill',],
description_passage: 'RoomVase',
name: 'Vase',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "intrigue",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "brawn",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'antiqueshop',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [
{
type: 'always',
skill_key: "intrigue",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "brawn",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'antiqueshop',
name: 'AntiqueShop',
tags: ['decoration'],
description_passage: 'BuildingAntiqueShop',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'antiqueshop',
sub_room_template_key: 'vase',
})>><p>
A small shop selling various antiquities within your fort.
Many fragile-looking valuables are stored within, and you best
keep your most brutish slavers from wandering in.
When placed at your fort, will increase
<<rep setup.skill.intrigue>> in exchange for <<rep setup.skill.brawn>>.
</p><p>
An exotic-looking vase from the south. It's balanced precariously on its small
base.
</p><<run new setup.RoomTemplate({
key: 'rack',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomRack',
name: 'Rack',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "slaving",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "aid",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'bondageroom',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [
{
type: 'always',
skill_key: "slaving",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "aid",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'bondageroom',
name: 'BondageRoom',
tags: ['decoration'],
description_passage: 'BuildingBondageRoom',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'bondageroom',
sub_room_template_key: 'rack',
})>><p>
A room filled to the brim with bondage tools, for your more adventurous slavers.
When placed at your fort, will increase
<<rep setup.skill.slaving>> in exchange for <<rep setup.skill.aid>>.
</p><p>
A bondage rack, empty right now, but still instill great fear into your many slaves.
</p><<run new setup.RoomTemplate({
key: 'sofa',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomSofa',
name: 'Sofa',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "combat",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "arcane",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'commonroom',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [
{
type: 'always',
skill_key: "combat",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "arcane",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'commonroom',
name: 'CommonRoom',
tags: ['decoration'],
description_passage: 'BuildingCommonRoom',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'commonroom',
sub_room_template_key: 'sofa',
})>><p>
A small room for your slavers to relax and enjoy themselves.
When placed at your fort, will increase
<<rep setup.skill.combat>> in exchange for <<rep setup.skill.arcane>>.
</p><p>
A lush and beautiful sofa that looks out of place in your fort.
</p><<run new setup.RoomTemplate({
key: 'endtable',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomEndTable',
name: 'End table',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "knowledge",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "sex",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'diningroom',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [
{
type: 'always',
skill_key: "knowledge",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "sex",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'diningroom',
name: 'DiningRoom',
tags: ['decoration'],
description_passage: 'BuildingDiningRoom',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'diningroom',
sub_room_template_key: 'endtable',
})>><p>
A room where your slavers can gather and enjoy a meal together, like a family.
When placed at your fort, will increase
<<rep setup.skill.knowledge>> in exchange for <<rep setup.skill.sex>>.
</p><p>
An end table to make your fort looks less desolate.
</p><<run new setup.RoomTemplate({
key: 'pottedplant',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomPottedPlant',
name: 'Potted plant',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "survival",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "social",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'farm',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [
{
type: 'always',
skill_key: "survival",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "social",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'farm',
name: 'Farm',
tags: ['decoration'],
description_passage: 'BuildingFarm',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'farm',
sub_room_template_key: 'pottedplant',
})>><p>
A lush and well-planted patch of land, ensuring your fort has some access to food
in emergencies.
When placed at your fort, will increase
<<rep setup.skill.survival>> in exchange for <<rep setup.skill.social>>.
</p><p>
A small plant growing happily in its pot.
</p><<run new setup.RoomTemplate({
key: 'statue',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomStatue',
name: 'Statue',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "sex",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "knowledge",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'gallery',
tags: [],
width: 2,
height: 2,
skill_bonus: [
{
type: 'always',
skill_key: "sex",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "knowledge",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'gallery',
name: 'Gallery',
tags: ['decoration'],
description_passage: 'BuildingGallery',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'gallery',
sub_room_template_key: 'statue',
})>><p>
A small clearing decorated with statues and sculptures of many kind.
Some of them are depicts their actors in rather compromising positions.
When placed at your fort, will increase
<<rep setup.skill.sex>> in exchange for <<rep setup.skill.knowledge>>.
</p><p>
A beautiful yet somewhat indecent piece of work. Reminds you of yourself, really.
</p><<run new setup.RoomTemplate({
key: 'flowerbed',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomFlowerbed',
name: 'Flowerbed',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "aid",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "slaving",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'garden',
tags: [],
width: 2,
height: 2,
skill_bonus: [
{
type: 'always',
skill_key: "aid",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "slaving",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'garden',
name: 'Garden',
tags: ['decoration'],
description_passage: 'BuildingGarden',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'garden',
sub_room_template_key: 'flowerbed',
})>><p>
A small patch of land designated to grow flowers on.
When placed at your fort, will increase
<<rep setup.skill.aid>> in exchange for <<rep setup.skill.slaving>>.
</p><p>
A beautiful patch of flowers.
</p><<run new setup.RoomTemplate({
key: 'candlestick',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomCandlestick',
name: 'Candlestick',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "arcane",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "combat",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'oilroom',
tags: [],
width: 2,
height: 2,
skill_bonus: [
{
type: 'always',
skill_key: "arcane",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "combat",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'oilroom',
name: 'OilRoom',
tags: ['decoration'],
description_passage: 'BuildingOilRoom',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'oilroom',
sub_room_template_key: 'candlestick',
})>><p>
A storage for storing oil, a precious resource in this time and age.
When placed at your fort, will increase
<<rep setup.skill.arcane>> in exchange for <<rep setup.skill.combat>>.
</p><p>
A tall candlestick illuminating its surroundings.
</p><<run new setup.RoomTemplate({
key: 'fountain',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomFountain',
name: 'Fountain',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "social",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "survival",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'square',
tags: [],
width: 2,
height: 2,
skill_bonus: [
{
type: 'always',
skill_key: "social",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "survival",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'square',
name: 'Square',
tags: ['decoration'],
description_passage: 'BuildingSquare',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'square',
sub_room_template_key: 'fountain',
})>><p>
A small empty spot on the courtyards of your fort where people can gather and converse.
When placed at your fort, will increase
<<rep setup.skill.social>> in exchange for <<rep setup.skill.survival>>.
</p><p>
A pedestal of stone everflowing with water.
</p><<run new setup.RoomTemplate({
key: 'tree',
tags: ['hidename', 'hideskill', ],
description_passage: 'RoomTree',
name: 'Tree',
width: 1,
height: 1,
skill_bonus: [
{
type: 'always',
skill_key: "brawn",
bonus_amount: setup.ROOM_DECORATION_BONUS,
},
{
type: 'always',
skill_key: "intrigue",
bonus_amount: -setup.ROOM_DECORATION_BONUS,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.RoomTemplate({
key: 'yard',
tags: [],
width: 2,
height: 2,
skill_bonus: [
{
type: 'always',
skill_key: "brawn",
bonus_amount: setup.ROOM_DECORATION_BONUS_MAIN,
},
{
type: 'always',
skill_key: "intrigue",
bonus_amount: -setup.ROOM_DECORATION_BONUS_MAIN,
},
],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'yard',
name: 'Yard',
tags: ['decoration'],
description_passage: 'BuildingYard',
costs: setup.BuildingTemplate.getDecorationCosts(),
restrictions: setup.BuildingTemplate.getDecorationRestrictions(),
main_room_template_key: 'yard',
sub_room_template_key: 'tree',
})>><p>
A small clearing for your slavers to just enjoy nature.
When placed at your fort, will increase
<<rep setup.skill.brawn>> in exchange for <<rep setup.skill.intrigue>>.
</p><p>
A normal, regular-sized tree. Not everything in this world has to be abnormally large, you know.
</p><<run new setup.RoomTemplate({
key: 'doctoroffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'doctoroffice',
name: 'Doctor office',
tags: ['heal',],
description_passage: 'BuildingDoctorOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('hospital'), setup.qres.Building('dutyroom')],
],
on_build: [
[setup.qc.Duty('doctor')],
],
main_room_template_key: 'doctoroffice',
})>><p>
Unlocks the doctor duty, which speedups injury recovery.
</p><<run new setup.RoomTemplate({
key: 'hospital',
tags: [],
width: 4,
height: 4,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "aid",
room_keys: [
'grandhall',
'doctoroffice',
'moraleoffice',
'mysticoffice',
'traumacenter',
'treatmentroom',
'alchemistshop',
'warehouse',
'library',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'hospital',
name: 'Hospital',
tags: ['critical', 'heal', 'unlocker', ],
description_passage: 'BuildingHospital',
costs: [
[setup.qc.Money(-2900)],
],
restrictions: [
[setup.qres.Building('grandhall')],
],
main_room_template_key: 'hospital',
})>><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.RoomTemplate({
key: 'moraleoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'moraleoffice',
name: 'Morale office',
tags: ['critical', 'heal',],
description_passage: 'BuildingMoraleOffice',
costs: [
[setup.qc.Money(-2400)],
],
restrictions: [
[
setup.qres.Building('hospital'),
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'moraleoffice',
})>><p>
An office for you to manage the growing number of members of your company.
Unlocks Parties, which allow you to organize your units for better viewing and filtering
(it has no direct gameplay effects).
Also unlocks viewing banters at week ends, as well as viewing the relationships between slavers
and between a slaver and a slave.
</p><<run new setup.RoomTemplate({
key: 'mysticoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'mysticoffice',
name: 'Mystic office',
tags: ['heal',],
description_passage: 'BuildingMysticOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('hospital'), setup.qres.Building('dutyroom')],
],
on_build: [
[setup.qc.Duty('mystic')],
],
main_room_template_key: 'mysticoffice',
})>><p>
Unlocks the mystic duty, which can amplify boons received by your slavers.
</p><<run new setup.RoomTemplate({
key: 'traumacenter',
tags: [],
width: 3,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'traumacenter',
name: 'Trauma center',
tags: ['critical', 'heal',],
description_passage: 'BuildingTraumaCenter',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('hospital'),
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'traumacenter',
})>><p>
A ward to treat your unit's psyche.
Unlocks viewing the durations of your unit's traumas and boons.
</p><<run new setup.RoomTemplate({
key: 'treatmentroom',
tags: [],
width: 6,
height: 3,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "survival",
room_keys: [
'treatmentroomalternative',
'treatmentroomblank',
'treatmentroomforget',
'treatmentroomhate',
'treatmentroomisolation',
'treatmentroomlove',
'treatmentroomlovetrue',
'treatmentroommindmend',
'treatmentroomresetlevel',
'treatmentroomtransformation',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroom',
name: 'Treatment Room',
tags: ['heal', 'critical', 'unlocker', ],
description_passage: 'BuildingTreatmentRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('hospital'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
main_room_template_key: 'treatmentroom',
})>><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.RoomTemplate({
key: 'treatmentroomalternative',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomalternative',
name: 'Alternate Timeline Creation Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomAlternative',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_ASTRO_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.technology_alternative),
],
],
main_room_template_key: 'treatmentroomalternative',
})>><p>
Unlocks treatment that can reset a unit's skills into a new set of skill focuses,
without resetting the unit's level.
Each treatment will consume a <<rep setup.item.potion_alternative>>.
</p><<run new setup.RoomTemplate({
key: 'treatmentroomblank',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomblank',
name: 'Therapy Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomBlank',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.technology_blank),
],
],
main_room_template_key: 'treatmentroomblank',
})>><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.RoomTemplate({
key: 'treatmentroomforget',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomforget',
name: 'PTSD Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomForget',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
main_room_template_key: 'treatmentroomforget',
})>><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.RoomTemplate({
key: 'treatmentroomhate',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomhate',
name: 'Solitary Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomHate',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
main_room_template_key: 'treatmentroomhate',
})>><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.RoomTemplate({
key: 'treatmentroomisolation',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomisolation',
name: 'Memory Isolator Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomIsolation',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.isolation_technology),
],
],
main_room_template_key: 'treatmentroomisolation',
})>><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.RoomTemplate({
key: 'treatmentroomlove',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomlove',
name: 'Massage Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomLove',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
main_room_template_key: 'treatmentroomlove',
})>><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.RoomTemplate({
key: 'treatmentroomlovetrue',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomlovetrue',
name: 'Private Vacation Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomLoveTrue',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.love_technology),
],
],
main_room_template_key: 'treatmentroomlovetrue',
})>><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.RoomTemplate({
key: 'treatmentroommindmend',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroommindmend',
name: 'Spa',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomMindMend',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
],
],
main_room_template_key: 'treatmentroommindmend',
})>><p>
Unlocks treatment option that can restore a mindbroken slave.
Each treatment will consume a <<rep setup.item.mindmend_potion>>.
</p><<run new setup.RoomTemplate({
key: 'treatmentroomresetlevel',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomresetlevel',
name: 'Pharmacy',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomResetLevel',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light]),
],
],
main_room_template_key: 'treatmentroomresetlevel',
})>><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.RoomTemplate({
key: 'treatmentroomtransformation',
tags: [],
width: 4,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'treatmentroomtransformation',
name: 'Body Reshaper Room',
tags: ['heal'],
description_passage: 'BuildingTreatmentRoomTransformation',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('treatmentroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_light_master]),
setup.qres.HasItem(setup.item.transformation_technology),
],
],
main_room_template_key: 'treatmentroomtransformation',
})>><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.RoomTemplate({
key: 'hiringsquare',
tags: [],
width: 4,
height: 4,
skill_bonus: [
{
type: "adjacent",
skill_key: "intrigue",
room_keys: [
'hiringsquaredesert',
'hiringsquareforest',
'hiringsquaresea',
'hiringsquarevale',
],
},
{
type: "near",
skill_key: "social",
room_keys: [
'grandhall',
'prospectshall',
'inn',
'market',
'recreationwing',
'questoffice',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'hiringsquare',
name: 'Fort Square',
tags: ['hiring', 'unlocker', ],
description_passage: 'BuildingHiringSquare',
costs: [
[setup.qc.Money(-700)],
],
restrictions: [
[setup.qres.Building('prospectshall')],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.recruiter),]
],
main_room_template_key: 'hiringsquare',
})>><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 all across the region.
</p><<run new setup.RoomTemplate({
key: 'hiringsquaredesert',
tags: [],
width: 2,
height: 2,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'hiringsquaredesert',
name: 'Recruitment Booth: Desert',
tags: ['hiring', ],
description_passage: 'BuildingHiringSquareDesert',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scoutcarriage'),
],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.recruiterdesert),]
],
main_room_template_key: 'hiringsquaredesert',
})>><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.RoomTemplate({
key: 'hiringsquareforest',
tags: [],
width: 2,
height: 2,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'hiringsquareforest',
name: 'Recruitment Booth: Forest',
tags: ['hiring', ],
description_passage: 'BuildingHiringSquareForest',
costs: [
[setup.qc.Money(-1500)],
],
restrictions: [
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scouttower'),
],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.recruiterforest),]
],
main_room_template_key: 'hiringsquareforest',
})>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the neko 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.RoomTemplate({
key: 'hiringsquaresea',
tags: [],
width: 2,
height: 2,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'hiringsquaresea',
name: 'Recruitment Booth: Sea',
tags: ['hiring', ],
description_passage: 'BuildingHiringSquareSea',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('hiringsquare'),
setup.qres.Building('scoutharbor'),
],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.recruitersea),]
],
main_room_template_key: 'hiringsquaresea',
})>><p>
A booth in the <<rep setup.buildingtemplate.hiringsquare>> where you can attempt
to recruit the people and lizardkins living off the <<lore region_sea>> into your company.
Unlocks a contact which gives you a quest for hiring new slavers from the <<lore region_sea>>.
</p><<run new setup.RoomTemplate({
key: 'hiringsquarevale',
tags: [],
width: 2,
height: 2,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'hiringsquarevale',
name: 'Recruitment Booth: Vale',
tags: ['hiring', ],
description_passage: 'BuildingHiringSquareVale',
costs: [
[setup.qc.Money(-1000)],
],
restrictions: [
[
setup.qres.Building('hiringsquare'),
],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.recruitervale),]
],
main_room_template_key: 'hiringsquarevale',
})>><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.RoomTemplate({
key: 'prospectshall',
tags: [],
width: 2,
height: 4,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'prospectshall',
name: 'Prospects hall',
tags: ['hiring', 'critical'],
description_passage: 'BuildingProspectsHall',
costs: [
[setup.qc.Money(-500)],
],
restrictions: [
[setup.qres.Building('lodgings')],
],
main_room_template_key: 'prospectshall',
})>><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.RoomTemplate({
key: 'slavepens',
tags: [],
width: 2,
height: 4,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'slavepens',
name: 'Slave pens',
tags: ['hiring', 'critical'],
description_passage: 'BuildingSlavePens',
costs: [
[setup.qc.Money(-700)],
],
restrictions: [
[setup.qres.Building('dungeons')],
],
main_room_template_key: 'slavepens',
})>><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.RoomTemplate({
key: 'classroom',
tags: [],
width: 3,
height: 4,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'classroom',
name: 'Classroom',
tags: ['critical', 'misc',],
description_passage: 'BuildingClassroom',
costs: [
[setup.qc.Money(-2300)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
],
on_build: [
[
setup.qc.Item(setup.item.sexmanual_allfours),
],
],
main_room_template_key: 'classroom',
})>><p>
A room to store... manuals. "That" kind of manuals, for you and your slavers
to learn new bedroom techniques.
Unlocks viewing sex actions units can take during sex, as well as disabling some of them during sex.
Also unlocks the <<rep setup.sexpose.allfours>> pose during sex.xxx
</p><<run new setup.RoomTemplate({
key: 'library',
tags: [],
width: 4,
height: 4,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "knowledge",
room_keys: [
'grandhall',
'classroom',
'questoffice',
'mailroom',
'hospital',
'researchroom',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'library',
name: 'Library',
tags: ['critical', 'misc',],
description_passage: 'BuildingLibrary',
costs: [
[setup.qc.Money(-5000)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'library',
})>><p>
A room full of books for the more studious slavers.
Unlocks viewing game lores at your leisure.
</p><<run new setup.RoomTemplate({
key: 'mailroom',
tags: [],
width: 3,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'mailroom',
name: 'Mail room',
tags: ['critical', 'misc'],
description_passage: 'BuildingMailRoom',
costs: [
[setup.qc.Money(-800)],
],
restrictions: [
[
setup.qres.Building('questoffice'),
],
],
main_room_template_key: 'mailroom',
})>><p>
Where your incoming mails are sorted to.
Unlocks the management of opportunities.
</p><<run new setup.RoomTemplate({
key: 'messengerpost',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'messengerpost',
name: 'Messenger post',
tags: ['critical', 'misc'],
description_passage: 'BuildingMessengerPost',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('questoffice'),
setup.qres.Building('veteranhall'),
],
],
main_room_template_key: 'messengerpost',
})>><p>
Where you send and receive messages from all across the realm.
Unlocks managing your contacts.
</p><<run new setup.RoomTemplate({
key: 'lockerroom',
tags: [],
description_passage: 'RoomLockerRoom',
name: 'Locker room',
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'missioncontrol',
tags: [],
width: 4,
height: 2,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "aid",
room_keys: [
'lockerroom',
],
},
{
type: "near",
skill_key: "survival",
room_keys: [
'grandhall',
'questoffice',
'insureroffice',
'rescueroffice',
'armory',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'missioncontrol',
name: 'Mission control',
tags: ['critical', 'misc',],
description_passage: 'BuildingMissionControl',
costs: [
[setup.qc.Money(-800)],
[setup.qc.Money(-1200)],
[setup.qc.Money(-2000)],
[setup.qc.Money(-10000)],
[setup.qc.Money(-1000000)],
],
restrictions: [
[
setup.qres.Building('questoffice'),
setup.qres.Building('lodgings'),
],
[setup.qres.Building('grandhall')],
[],
[
setup.qres.Building('veteranhall'),
],
[],
],
main_room_template_key: 'missioncontrol',
sub_room_template_key: 'lockerroom',
})>><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><p>
A place for your team to plan and strategize for their missions.
</p><<set _portal_price = [
[setup.qc.Money(-1000), setup.qc.LoseItem('potion_portal', 1)],
[setup.qc.Money(-50000), setup.qc.LoseItem('potion_portal', 1)],
[setup.qc.Money(-1000000), setup.qc.LoseItem('potion_portal', 1)],
]>>
<<run new setup.RoomTemplate({
key: 'portalindoors',
tags: ['hidename',],
width: 1,
height: 1,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: true,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'portaloutdoors',
tags: ['hidename', ],
width: 1,
height: 1,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: true,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'portalindoors',
name: 'Portal (Indoors)',
tags: ['misc',],
description_passage: 'BuildingPortalIndoors',
costs: _portal_price,
restrictions: [
[
setup.qres.HasItem(setup.item.technology_portal),
],
[],
[],
],
main_room_template_key: 'portalindoors',
sub_room_template_key: 'portalindoors',
})>>
<<run new setup.BuildingTemplate({
key: 'portaloutdoors',
name: 'Portal (Outdoors)',
tags: ['misc',],
description_passage: 'BuildingPortalOutdoors',
costs: _portal_price,
restrictions: [
[
setup.qres.HasItem(setup.item.technology_portal),
],
[],
[],
],
main_room_template_key: 'portaloutdoors',
sub_room_template_key: 'portaloutdoors',
})>><p>
A paraphernalia for opening a stable temporal gate between portals, allowing
people to travel instantly between any two of them.
Allows your units to pass from a portal to any other,
which can make two physically distant rooms become nearby with
each other.
</p><<include 'BuildingPortalCommon'>>
<p>
This portal can only be built indoors.
</p><<include 'BuildingPortalCommon'>>
<p>
This portal can only be built outdoors.
</p><<run new setup.RoomTemplate({
key: 'traininggrounds',
tags: [],
width: 4,
height: 6,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'traininggrounds',
name: 'Training Grounds',
tags: ['critical', 'misc',],
description_passage: 'BuildingTrainingGrounds',
costs: [
[setup.qc.Money(-2500)],
],
restrictions: [
[
setup.qres.Building('dutyroom'),
setup.qres.Building('grandhall'),
],
],
on_build: [
[
setup.qc.Duty('trainer'),
],
],
main_room_template_key: 'traininggrounds',
})>><p>
The training grounds is where your slavers can practice their skills.
Unlocks the Drill Sergeant duty, who can give all your on-duty units
some experience each week. They will also train your low-level slavers,
increasing their level rapidly.
</p><<run new setup.RoomTemplate({
key: 'warroom',
tags: [],
width: 2,
height: 5,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "combat",
room_keys: [
'questoffice',
'traininggrounds',
'library',
'armory',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'warroom',
name: 'War room',
tags: ['critical', 'misc', ],
description_passage: 'BuildingWarRoom',
costs: [
[setup.qc.Money(-3500)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
],
on_build: [
[],
],
main_room_template_key: 'warroom',
})>><p>
Where you can plan specializations for your slavers.
Unlocks assigning perk traits to your slavers.
You can access this via the Slaver menu.
</p><<run new setup.RoomTemplate({
key: 'constructionoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "brawn",
room_keys: [
'grandhall',
'renovationoffice',
'landscapingoffice',
'questoffice',
'warehouse',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'constructionoffice',
name: 'Construction office',
tags: ['office', 'critical'],
description_passage: 'BuildingConstructionOffice',
costs: [
[],
],
restrictions: [
[],
],
main_room_template_key: 'constructionoffice',
})>><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.RoomTemplate({
key: 'damagecontroloffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'damagecontroloffice',
name: 'Damage control office',
tags: ['office', ],
description_passage: 'BuildingDamageControlOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('relationsoffice'), setup.qres.Building('dutyroom')],
],
on_build: [
[setup.qc.Duty('damagecontrolofficer')],
],
main_room_template_key: 'damagecontroloffice',
})>><p>
Unlocks the Damage Control Officer duty, which can decrease ire
with the other forces, in exchange for some money.
</p><<run new setup.RoomTemplate({
key: 'dutyroom',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "knowledge",
room_keys: [
'grandhall',
'questoffice',
'specialistoffice',
'viceleaderoffice',
'doctoroffice',
'mysticoffice',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'dutyroom',
name: 'Duty roster room',
tags: ['office', 'critical', 'unlocker', ],
description_passage: 'BuildingDutyRoom',
costs: [
[setup.qc.Money(-1500)],
],
restrictions: [
[
setup.qres.Building('grandhall')
],
],
on_build: [
[setup.qc.Duty('leader')],
],
main_room_template_key: 'dutyroom',
})>><p>
A small room to assign weekly duties to your slavers.
Unlocks assigning slavers to duties.
Also unlocks the Leader duty, which is a duty exclusive for yourself that may grant you
some money each when you are not busy.
</p><<run new setup.RoomTemplate({
key: 'insureroffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'insureroffice',
name: 'Insurer office',
tags: ['office', ],
description_passage: 'BuildingInsurerOffice',
costs: [
[setup.qc.Money(-1500)],
],
restrictions: [
[
setup.qres.Building('missioncontrol'),
setup.qres.Building('grandhall'),
],
],
on_build: [
[setup.qc.Duty('insurer')],
],
main_room_template_key: 'insureroffice',
})>><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.RoomTemplate({
key: 'landscapingoffice',
tags: [],
name: 'Landscaping office',
width: 3,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'landscapingoffice',
name: 'Landscaping office',
tags: ['office', 'unlocker', 'critical',],
description_passage: 'BuildingLandscapingOffice',
costs: [
[setup.qc.Money(-1000)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
],
on_build: [
[
setup.qc.Function(() => {
State.variables.roomlist.resetCacheAll();
})
]
],
main_room_template_key: 'landscapingoffice',
})>><p>
An office where you can ensure your fort looks presentable to visitors.
Once built, your improvements will be able to receive adjacency and vicinity
bonuses from being built close to others, which grant a small but company-wide
boosts to all skills.
Also unlocks various decoration improvements for your fort, which
increases some skills in exchange for some others.
</p><<run new setup.RoomTemplate({
key: 'marketeroffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'marketeroffice',
name: 'Marketer office',
tags: ['office'],
description_passage: 'BuildingMarketerOffice',
costs: [
[setup.qc.Money(-2400)],
],
restrictions: [
[setup.qres.Building('marketingoffice'), setup.qres.Building('dutyroom')],
],
on_build: [
[setup.qc.Duty('marketer')],
],
main_room_template_key: 'marketeroffice',
})>><p>
Unlocks the Marketer duty, which gives you a fixed-price slave order each week.
</p><<run new setup.RoomTemplate({
key: 'marketingoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "social",
room_keys: [
'grandhall',
'questoffice',
'slavepens',
'marketeroffice',
'dungeons',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'marketingoffice',
name: 'Marketing office',
tags: ['office', 'critical', 'unlocker',],
description_passage: 'BuildingMarketingOffice',
costs: [
[setup.qc.Money(-800)],
],
restrictions: [
[
setup.qres.Building('questoffice'),
setup.qres.Building('dungeons')
],
],
on_build: [
[
setup.qc.SlaveOrderMenial(),
],
],
main_room_template_key: 'marketingoffice',
})>><p>
A critical improvement if you want to dabble in slave trade.
This room allows the company to accept and complete slave orders.
</p><<run new setup.RoomTemplate({
key: 'questoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "intrigue",
room_keys: [
'grandhall',
'mailroom',
'messengerpost',
'viceleaderoffice',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'questoffice',
name: 'Your office',
tags: ['office', 'critical'],
description_passage: 'BuildingQuestOffice',
costs: [
[],
],
restrictions: [
[],
],
main_room_template_key: 'questoffice',
})>><p>
Your office, where you do your main work: picking and outfitting teams to quests.
</p><<run new setup.RoomTemplate({
key: 'relationsoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "social",
room_keys: [
'grandhall',
'messengerpost',
'damagecontroloffice',
'relationshipmanageroffice',
'questoffice',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'relationsoffice',
name: 'Relations office',
tags: ['office', 'critical', 'unlocker', ],
description_passage: 'BuildingRelationsOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'relationsoffice',
})>><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
as well as another improvement which allows you to manage your contacts.
</p><<run new setup.RoomTemplate({
key: 'relationshipmanageroffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'relationshipmanageroffice',
name: 'Relationship manager office',
tags: ['office', ],
description_passage: 'BuildingRelationshipManagerOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('relationsoffice'), setup.qres.Building('dutyroom')],
],
on_build: [
[setup.qc.Duty('relationshipmanager')],
],
main_room_template_key: 'relationshipmanageroffice',
})>><p>
Unlocks the Relationship Manager duty, which can prevent favor with other companies
from decaying.
</p><<run new setup.RoomTemplate({
key: 'renovationoffice',
tags: [],
width: 3,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'renovationoffice',
name: 'Renovation office',
tags: ['office', 'critical'],
description_passage: 'BuildingRenovationOffice',
costs: [
[setup.qc.Money(-1000)],
],
restrictions: [
[],
],
main_room_template_key: 'renovationoffice',
})>><p>
A room to accompany the <<rep setup.buildingtemplate.constructionoffice>> where
you can plan renovations for your existing rooms.
Unlocks moving existing rooms around.
Renovation will cost some money, however.
</p><<run new setup.RoomTemplate({
key: 'rescueroffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'rescueroffice',
name: 'Rescuer office',
tags: ['office', ],
description_passage: 'BuildingRescuerOffice',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('missioncontrol'),
setup.qres.Building('veteranhall'),
],
],
on_build: [
[setup.qc.Duty('rescuer')],
],
main_room_template_key: 'rescueroffice',
})>><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.RoomTemplate({
key: 'specialistoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'specialistoffice',
name: 'Specialist office',
tags: ['office', ],
description_passage: 'BuildingSpecialistOffice',
costs: [
[setup.qc.Money(-5000)],
],
restrictions: [
[setup.qres.Building('grandhall')],
],
main_room_template_key: 'specialistoffice',
})>><p>
An office reserved for contract specialists hired by your company.
Once build, your on-duty units can still keep performing their duties
even when they are away or injured by hiring temporary replacements.
The replacements are specialists at their job, but need to be paid a hefty
<<money setup.DUTY_SPECIALIST_WEEKLY_UPKEEP>>
per week when your slaver is away.
</p><<run new setup.RoomTemplate({
key: 'viceleaderoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'viceleaderoffice',
name: 'Vice-leader office',
tags: ['office'],
description_passage: 'BuildingViceLeaderOffice',
costs: [
[setup.qc.Money(-3200)],
],
restrictions: [
[
setup.qres.Building('trainingchamber'),
setup.qres.Building('dutyroom'),
setup.qres.Building('grandhall'),
],
],
on_build: [
[setup.qc.Duty('viceleader')],
],
main_room_template_key: 'viceleaderoffice',
})>><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, including slave training and
answering mails. You will need the Vice-Leader assigned for these to work, but it will still
work even when the Vice-Leader is injured or is going on a quest.
</p><<run new setup.RoomTemplate({
key: 'blessingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'blessingroom',
name: 'Blessing Room',
tags: ['purification'],
description_passage: 'BuildingBlessingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
main_room_template_key: 'blessingroom',
})>><p>
Unlocks targeted purification on the eyes, mouth, or ears of slaves and slavers.
</p><<run new setup.RoomTemplate({
key: 'penitenceroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'penitenceroom',
name: 'Penitence Room',
tags: ['purification'],
description_passage: 'BuildingPenitenceRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
main_room_template_key: 'penitenceroom',
})>><p>
Unlocks targeted purification on the tails, wings and dicks of slaves and slavers.
</p><<run new setup.RoomTemplate({
key: 'prayerroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'prayerroom',
name: 'Prayer Room',
tags: ['purification'],
description_passage: 'BuildingPrayerRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Building('temple'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
],
main_room_template_key: 'prayerroom',
})>><p>
Unlocks targeted purification on the body, legs, and arms of slaves and slavers.
</p><<run new setup.RoomTemplate({
key: 'temple',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "arcane",
room_keys: [
'grandhall',
'hospital',
'blessingroom',
'penitenceroom',
'prayerroom',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'temple',
name: 'Temple',
tags: ['purification', 'critical', 'unlocker', ],
description_passage: 'BuildingTemple',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire]),
],
],
main_room_template_key: 'temple',
})>><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.RoomTemplate({
key: 'analfuckhole',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'analfuckhole',
name: 'Anal fuckhole',
tags: ['recreation', ],
description_passage: 'BuildingAnalFuckhole',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingsex')],
],
on_build: [
[
setup.qc.Duty('analfuckholeslave')
],
],
main_room_template_key: 'analfuckhole',
})>><p>
Unlocks the Anal Fuckhole slave duty, which increases the income
made by your Sex Pimp
based on the anal skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'bath',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'bath',
name: 'Bath',
tags: ['recreation', ],
description_passage: 'BuildingBath',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwing')],
],
on_build: [
[
setup.qc.Duty('toiletslave')
],
],
main_room_template_key: 'bath',
})>><p>
Unlocks the Toilet slave duty, which increases the income
made by your Entertainment Pimp
based on the toilet skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'cleaning',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'cleaning',
name: 'Cleaning closet',
tags: ['recreation', ],
description_passage: 'BuildingCleaning',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingservice')],
],
on_build: [
[
setup.qc.Duty('maidslave')
],
],
main_room_template_key: 'cleaning',
})>><p>
Unlocks the Maid slave duty, which increases the income
made by your Service Pimp
based on the domestic skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'courtyard',
tags: [],
width: 3,
height: 3,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'courtyard',
name: 'Courtyard',
tags: ['recreation', ],
description_passage: 'BuildingCourtyard',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingservice')],
],
on_build: [
[
setup.qc.Duty('furnitureslave')
],
],
main_room_template_key: 'courtyard',
})>><p>
Unlocks the Furniture slave duty, which increases the income
made by your Service Pimp
based on the endurance skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'gym',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'gym',
name: 'Gym',
tags: ['recreation', ],
description_passage: 'BuildingGym',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwing')],
],
on_build: [
[
setup.qc.Duty('punchingbagslave')
],
],
main_room_template_key: 'gym',
})>><p>
Unlocks the Punching Bag slave duty, which increases the income
made by your Entertainment Pimp
based on the masochism skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'kennel',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'kennel',
name: 'Kennel',
tags: ['recreation', ],
description_passage: 'BuildingKennel',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwing')],
],
on_build: [
[
setup.qc.Duty('dogslave')
],
],
main_room_template_key: 'kennel',
})>><p>
Unlocks the Dog slave duty, which increases the income
made by your Entertainment Pimp
based on the pet skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'museum',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'museum',
name: 'Museum',
tags: ['recreation', ],
description_passage: 'BuildingMuseum',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwing')],
],
on_build: [
[
setup.qc.Duty('decorationslave')
],
],
main_room_template_key: 'museum',
})>><p>
Unlocks the Decoration slave duty, which increases the income
made by your Entertainment Pimp
based on the horny skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'oralfuckhole',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'oralfuckhole',
name: 'Oral fuckhole',
tags: ['recreation', ],
description_passage: 'BuildingOralFuckhole',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingsex')],
],
on_build: [
[
setup.qc.Duty('oralfuckholeslave')
],
],
main_room_template_key: 'oralfuckhole',
})>><p>
Unlocks the Oral Fuckhole slave duty, which increases the income
made by your Sex Pimp
based on the oral skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'pasture',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'pasture',
name: 'Pasture',
tags: ['recreation', ],
description_passage: 'BuildingPasture',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingservice')],
],
on_build: [
[
setup.qc.Duty('milkcowslave')
],
],
main_room_template_key: 'pasture',
})>><p>
Unlocks the Milk Cow slave duty, which increases the income
made by your Service Pimp
based on the size of the slave's milky breasts.
</p><<run new setup.RoomTemplate({
key: 'recreationwing',
tags: [],
width: 4,
height: 4,
skill_bonus: [
{
type: "near",
skill_key: "sex",
room_keys: [
'recreationwingservice',
'recreationwingsex',
'dungeons',
'slavepens',
'trainingchamber',
],
},
{
type: "near",
skill_key: "social",
room_keys: [
'bath',
'gym',
'kennel',
'museum',
'stables',
],
},
{
type: "near",
skill_key: "knowledge",
room_keys: [
'grandhall',
'market',
'inn',
'lodgings',
'sexshop',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'recreationwing',
name: 'Recreation wing',
tags: ['recreation', 'critical', 'unlocker', ],
description_passage: 'BuildingRecreationWing',
costs: [
[setup.qc.Money(-3000)],
],
restrictions: [
[
setup.qres.Building('grandhall'),
setup.qres.Building('trainingchamber'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('entertainmentpimp'),
setup.qc.Duty('entertainmentslave'),
],
],
main_room_template_key: 'recreationwing',
})>><p>
Transforms the right wing of your fort into an area of entertainment and general debauchery.
Unlocks the Entertainment Pimp duty and the Entertainment Slave duty.
The Entertainment Pimp duty will earn you income each week based on the duty officer skill and the
slave's usefulness as an entertainment slave.
Can build further improvements which unlock further slave duties as well as other pimp duties,
which can earn you even more profit each week.
</p><<run new setup.RoomTemplate({
key: 'recreationwingservice',
tags: [],
width: 4,
height: 4,
skill_bonus: [
{
type: "near",
skill_key: "aid",
room_keys: [
'courtyard',
'cleaning',
'pasture',
'tavern',
'theatre',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'recreationwingservice',
name: 'Recreation wing: Service',
tags: ['recreation', 'unlocker', ],
description_passage: 'BuildingRecreationWingService',
costs: [
[setup.qc.Money(-5000)],
],
restrictions: [
[
setup.qres.Building('recreationwing'),
],
],
on_build: [
[
setup.qc.Duty('servicepimp'),
],
],
main_room_template_key: 'recreationwingservice',
})>><p>
Designate a part of your <<rep setup.buildingtemplate.recreationwing>> for dining and
drinking activities.
Unlocks the Service Pimp duty, who can earn money from dining-related slaves that can be unlocked
by further building the
<<rep setup.buildingtemplate.sissybooth>>, the
<<rep setup.buildingtemplate.courtyard>>, the
<<rep setup.buildingtemplate.cleaning>>, the
<<rep setup.buildingtemplate.pasture>>, the
<<rep setup.buildingtemplate.tavern>>, and the
<<rep setup.buildingtemplate.theatre>> improvements.
</p><<run new setup.RoomTemplate({
key: 'recreationwingsex',
tags: [],
width: 4,
height: 4,
skill_bonus: [
{
type: "near",
skill_key: "sex",
room_keys: [
'analfuckhole',
'oralfuckhole',
'sissybooth',
'stage',
'vaginafuckhole',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'recreationwingsex',
name: 'Recreation wing: Sex',
tags: ['recreation', 'unlocker', ],
description_passage: 'BuildingRecreationWingSex',
costs: [
[setup.qc.Money(-5000)],
],
restrictions: [
[
setup.qres.Building('recreationwing'),
],
],
on_build: [
[
setup.qc.Duty('sexpimp'),
],
],
main_room_template_key: 'recreationwingsex',
})>><p>
Designate a part of your <<rep setup.buildingtemplate.recreationwing>> for placing your
fuckholes and making them available for paying customers.
Unlocks the Fuckhole Pimp duty, who can earn money from fuckhole slaves that can be unlocked
by further building the
<<rep setup.buildingtemplate.analfuckhole>>, the
<<rep setup.buildingtemplate.bath>>, the
<<rep setup.buildingtemplate.oralfuckhole>>, the
<<rep setup.buildingtemplate.stage>>, and the
<<rep setup.buildingtemplate.vaginafuckhole>> improvements.
</p><<run new setup.RoomTemplate({
key: 'sissybooth',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'sissybooth',
name: 'Rent-a-Sissy',
tags: ['recreation', ],
description_passage: 'BuildingSissyBooth',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingsex')],
],
on_build: [
[
setup.qc.Duty('sissyslave')
],
],
main_room_template_key: 'sissybooth',
})>><p>
Unlocks the Sissy slave duty, which increases the income
made by your Sex Pimp
based on the sissy skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'stables',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'stables',
name: 'Stables',
tags: ['recreation', ],
description_passage: 'BuildingStables',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwing')],
],
on_build: [
[
setup.qc.Duty('ponyslave')
],
],
main_room_template_key: 'stables',
})>><p>
Unlocks the Pony slave duty, which increases the income
made by your Entertainment Pimp
based on the pony skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'stage',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'stage',
name: 'Stage',
tags: ['recreation', ],
description_passage: 'BuildingStage',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingsex')],
],
on_build: [
[
setup.qc.Duty('dominatrixslave')
],
],
main_room_template_key: 'stage',
})>><p>
Unlocks the Dominatrix slave duty, which increases the income
made by your Sex Pimp
based on the dominance skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'tavern',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'tavern',
name: 'Tavern',
tags: ['recreation', ],
description_passage: 'BuildingTavern',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingservice')],
],
on_build: [
[
setup.qc.Duty('cumcowslave')
],
],
main_room_template_key: 'tavern',
})>><p>
Unlocks the Cum Cow slave duty, which increases the income
made by your Service Pimp
based on the size of the slave's full balls.
</p><<run new setup.RoomTemplate({
key: 'theatre',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'theatre',
name: 'Theatre',
tags: ['recreation', ],
description_passage: 'BuildingTheatre',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingservice')],
],
on_build: [
[
setup.qc.Duty('theatreslave')
],
],
main_room_template_key: 'theatre',
})>><p>
Unlocks the Stripper slave duty, which increases the income
made by your Service Pimp
based on the roleplay skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'vaginafuckhole',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'vaginafuckhole',
name: 'Vagina fuckhole',
tags: ['recreation', ],
description_passage: 'BuildingVaginaFuckhole',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('recreationwingsex')],
],
on_build: [
[
setup.qc.Duty('vaginafuckholeslave')
],
],
main_room_template_key: 'vaginafuckhole',
})>><p>
Unlocks the Vagina Fuckhole slave duty, which increases the income
made by your Sex Pimp
based on the vaginal skill of the slave.
</p><<run new setup.RoomTemplate({
key: 'scoutcarriage',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutcarriage',
name: 'Scout Carriage',
tags: ['scout', 'unlocker', 'critical', ],
description_passage: 'BuildingScoutCarriage',
costs: [
[setup.qc.Money(-3900)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('grandhall'),
],
],
on_build: [
[
setup.qc.QuestDirect('desert_contact'),
],
],
main_room_template_key: 'scoutcarriage',
})>><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.RoomTemplate({
key: 'shipyard',
tags: [],
description_passage: 'RoomShipyard',
name: 'Shipyard',
width: 4,
height: 4,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutharbor',
name: 'Scout Harbor',
tags: ['scout', 'unlocker', 'critical', ],
description_passage: 'BuildingScoutHarbor',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('veteranhall'),
],
],
on_build: [
[
setup.qc.QuestDirect('sea_contact'),
],
],
main_room_template_key: 'shipyard',
})>><p>
A fully functional harbor in the vicinity of the scout hut, for sea travel.
Requires you to build a shipyard in your fort, for making and maintaining your ships.
Unlocks a quest which grants a contact across the sea that supply you with scouting mission each week.
</p><p>
Where you maintain your vessels before they depart from your harbor.
</p><<run new setup.RoomTemplate({
key: 'scouthut',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scouthut',
name: 'Scout Hut',
tags: ['scout', 'unlocker', 'critical', ],
description_passage: 'BuildingScoutHut',
costs: [
[setup.qc.Money(-50)],
],
restrictions: [
[],
],
on_build: [
[
setup.qc.QuestDirect('vale_contact'),
],
],
main_room_template_key: 'scouthut',
})>><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.RoomTemplate({
key: 'scoutoffice',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [
{
type: "near",
skill_key: "survival",
room_keys: [
'grandhall',
'scouthut',
'scoutcarriage',
'scouttower',
'shipyard',
'scoutoutpostcity',
'scoutoutpostdesert',
'scoutoutpostforest',
'scoutoutpostsea',
'scoutoutpostvale',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoffice',
name: 'Scout Office',
tags: ['scout', 'unlocker', 'critical', ],
description_passage: 'BuildingScoutOffice',
costs: [
[setup.qc.Money(-2400)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('grandhall'),
],
],
on_build: [
[
setup.qc.QuestDirect('city_contact'),
],
],
main_room_template_key: 'scoutoffice',
})>><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.RoomTemplate({
key: 'scoutoutpostcity',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoutpostcity',
name: 'Scout Outpost: City',
tags: ['scout', ],
description_passage: 'BuildingScoutOutpostCity',
costs: [
[setup.qc.Money(-4700)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutoffice'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('scoutcity')
],
],
main_room_template_key: 'scoutoutpostcity',
})>><p>
Unlocks the City Scout duty, which grants you free quest leads each week from the <<lore region_city>>.
</p><<run new setup.RoomTemplate({
key: 'scoutoutpostdesert',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoutpostdesert',
name: 'Scout Outpost: Desert',
tags: ['scout', ],
description_passage: 'BuildingScoutOutpostDesert',
costs: [
[setup.qc.Money(-5800)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutcarriage'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('scoutdesert')
],
],
main_room_template_key: 'scoutoutpostdesert',
})>><p>
Unlocks the Desert Scout duty, which grants you free quest leads each week from the eastern desert.
</p><<run new setup.RoomTemplate({
key: 'scoutoutpostforest',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoutpostforest',
name: 'Scout Outpost: Forest',
tags: ['scout', ],
description_passage: 'BuildingScoutOutpostForest',
costs: [
[setup.qc.Money(-3200)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('scouttower'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('scoutforest')
],
],
main_room_template_key: 'scoutoutpostforest',
})>><p>
Unlocks the Forest Scout duty, which grants you free quest leads each week from the western forest.
</p><<run new setup.RoomTemplate({
key: 'scoutoutpostsea',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoutpostsea',
name: 'Scout Outpost: Sea',
tags: ['scout', ],
description_passage: 'BuildingScoutOutpostSea',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('scoutharbor'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('scoutsea')
],
],
main_room_template_key: 'scoutoutpostsea',
})>><p>
Unlocks the Sea Scout duty, which grants you free quest leads each week from the beyond the southern sea.
</p><<run new setup.RoomTemplate({
key: 'scoutoutpostvale',
tags: [],
width: 2,
height: 2,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scoutoutpostvale',
name: 'Scout Outpost: Vale',
tags: ['scout', ],
description_passage: 'BuildingScoutOutpostVale',
costs: [
[setup.qc.Money(-2000)],
],
restrictions: [
[
setup.qres.Building('scouthut'),
setup.qres.Building('dutyroom'),
],
],
on_build: [
[
setup.qc.Duty('scoutvale')
],
],
main_room_template_key: 'scoutoutpostvale',
})>><p>
Unlocks the Vale Scout duty, which grants you free quest leads each week from the <<lore region_vale>>.
</p><<run new setup.RoomTemplate({
key: 'scouttower',
tags: [],
width: 2,
height: 3,
door_column: 0,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'scouttower',
name: 'Scout Tower',
tags: ['scout', 'unlocker', 'critical', ],
description_passage: 'BuildingScoutTower',
costs: [
[setup.qc.Money(-600)],
],
restrictions: [
[setup.qres.Building('scouthut')],
],
on_build: [
[
setup.qc.QuestDirect('forest_contact'),
],
],
main_room_template_key: 'scouttower',
})>><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.RoomTemplate({
key: 'alchemistshop',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'alchemistshop',
name: 'Alchemist Shop',
tags: ['storage', ],
description_passage: 'BuildingAlchemistShop',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('market'),
setup.qres.Building('veteranhall'),
],
],
on_build: [
[],
],
main_room_template_key: 'alchemistshop',
})>><p>
A laboratory for an alchemist to work their magic.
Unlocks buying an infinite number of many kinds of potions that you have ever acquired in the game,
but at an incredibly steep markup.
</p><<run new setup.RoomTemplate({
key: 'armorystorage',
tags: [],
description_passage: 'RoomArmoryStorage',
name: 'Armory storage',
width: 2,
height: 2,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: false,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.RoomTemplate({
key: 'armory',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [
{
type: "adjacent",
skill_key: "brawn",
room_keys: [
'armorystorage',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<set _restrictions = setup.BuildingTemplate.getLodgingsRestrictions()>>
<<run _restrictions[0].push(setup.qres.Building('grandhall'))>>
<<run new setup.BuildingTemplate({
key: 'armory',
name: 'Armory',
tags: ['critical', 'storage', 'unlocker',],
description_passage: 'BuildingArmory',
costs: setup.BuildingTemplate.getLodgingsCost(2000),
restrictions: _restrictions,
main_room_template_key: 'armory',
sub_room_template_key: 'armorystorage',
})>><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><p>
An extension to your armory, allowing you to store more equipment sets.
</p><<run new setup.RoomTemplate({
key: 'bazaar',
tags: [],
width: 4,
height: 4,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'bazaar',
name: 'Bazaar',
tags: ['storage', 'critical'],
description_passage: 'BuildingBazaar',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('warehouse'), setup.qres.Building('armory')],
],
on_build: [
],
main_room_template_key: 'bazaar',
})>><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.RoomTemplate({
key: 'booths',
tags: [],
width: 4,
height: 4,
skill_bonus: [],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.UnitGroup(
'contact_alchemist',
'Alchemist',
'subrace_elf',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_scholar),
setup.qc.TraitsReplace('unit', [
setup.trait.skill_alchemy,
setup.trait.per_smart,
]),
],
)>>
<<run new setup.UnitGroup(
'contact_lumberjack',
'Tailor',
'subrace_werewolf',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_woodsman),
setup.qc.TraitsReplace('unit', [
setup.trait.muscle_verystrong,
setup.trait.per_loner,
]),
],
)>>
<<run new setup.BuildingTemplate({
key: 'booths',
name: 'Booths Area',
tags: ['storage', ],
description_passage: 'BuildingBooths',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[
setup.qres.Building('market'),
],
],
on_build: [
[
setup.qc.Contact(setup.contacttemplate.furniturepeddler, null, 'contact_lumberjack'),
setup.qc.Contact(setup.contacttemplate.itempeddler, null, 'contact_alchemist'),
]
],
main_room_template_key: 'booths',
})>><p>
Several booths placed strategically around your market to attract outside vendors.
Unlocks contacts that can sell items and furniture for your fort.
You can use the furniture once you build the <<rep setup.buildingtemplate.bedchamberwing>>.
</p><<run new setup.RoomTemplate({
key: 'forge',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'forge',
name: 'Forge',
tags: ['storage', 'unlocker',],
description_passage: 'BuildingForge',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('armory')],
],
on_build: [
[]
],
main_room_template_key: 'forge',
})>><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.RoomTemplate({
key: 'market',
tags: [],
width: 5,
height: 5,
skill_bonus: [
{
type: "near",
skill_key: "knowledge",
room_keys: [
'alchemistshop',
'armory',
'bazaar',
'booths',
'forge',
'inn',
'sexshop',
'warehouse',
'workshop',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'market',
name: 'Market',
tags: ['storage', 'unlocker',],
description_passage: 'BuildingMarket',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('warehouse')],
],
on_build: [
[]
],
main_room_template_key: 'market',
})>><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.RoomTemplate({
key: 'sexshop',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.UnitGroup(
'contact_sexshopowner',
'Sex Shop Owner',
'subrace_neko',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_courtesan),
setup.qc.TraitsReplace('unit', [
setup.trait.skill_entertain,
setup.trait.per_chaste,
]),
setup.qc.TraitReplaceExisting('unit', setup.trait.breast_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.dick_huge),
],
)>>
<<run new setup.BuildingTemplate({
key: 'sexshop',
name: 'Sex Shop',
tags: ['storage', ],
description_passage: 'BuildingSexShop',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('armory')],
],
on_build: [
[setup.qc.Contact(setup.contacttemplate.sexpeddler, null, 'contact_sexshopowner'),]
],
main_room_template_key: 'sexshop',
})>><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.
</p><<run new setup.RoomTemplate({
key: 'warehouse',
tags: [],
width: 4,
height: 4,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'warehouse',
name: 'Warehouse',
tags: ['storage', 'critical', 'unlocker',],
description_passage: 'BuildingWarehouse',
costs: [
[setup.qc.Money(-2400)],
],
restrictions: [
[
setup.qres.Building('armory'),
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'warehouse',
})>><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.RoomTemplate({
key: 'workshop',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.UnitGroup(
'contact_blacksmith',
'Blacksmith',
'subrace_orc',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_metalworker),
setup.qc.TraitsReplace('unit', [
setup.trait.muscle_verystrong,
setup.trait.height_tall,
setup.trait.skill_ambidextrous,
]),
],
)>>
<<run new setup.UnitGroup(
'contact_tailor',
'Tailor',
'subrace_humankingdom',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_artisan),
setup.qc.TraitsReplace('unit', [
setup.trait.per_smart,
setup.trait.per_attentive,
setup.trait.skill_creative,
]),
],
)>>
<<run new setup.UnitGroup(
'contact_weaver',
'Weaver',
'subrace_humansea',
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_artisan),
setup.qc.TraitsReplace('unit', [
setup.trait.face_beautiful,
setup.trait.per_studious,
setup.trait.magic_light,
]),
],
)>>
<<run new setup.BuildingTemplate({
key: 'workshop',
name: 'Workshop Area',
tags: ['storage', ],
description_passage: 'BuildingWorkshop',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUM_MULT)],
],
restrictions: [
[setup.qres.Building('forge')],
],
on_build: [
[
setup.qc.Contact(setup.contacttemplate.blacksmithpeddler, null, 'contact_blacksmith'),
setup.qc.Contact(setup.contacttemplate.tailorpeddler, null, 'contact_tailor'),
setup.qc.Contact(setup.contacttemplate.weaverpeddler, null, 'contact_weaver'),
]
],
main_room_template_key: 'workshop',
})>><p>
Several specialized workshops to attract skilled crafters into your fort.
Unlocks several contacts including a blacksmith, a tailor, and a weaver who sell various equipments in your fort.
</p><<run new setup.RoomTemplate({
key: 'grandhall',
tags: [],
width: 6,
height: 6,
skill_bonus: [
{
type: "near",
skill_key: "combat",
room_keys: [
'veteranhall',
'bedchamberwing',
'dungeons',
'inn',
'lodgings',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'grandhall',
name: 'Grand Hall',
tags: ['critical', 'unlocker', 'structural', ],
description_passage: 'BuildingGrandHall',
costs: [
[setup.qc.Money(-2000)],
],
restrictions: [
[
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('renovationoffice'),
setup.qres.Building('slavepens'),
setup.qres.Building('scouttower'),
],
],
on_build: [
[
setup.qc.Event('loan_tiger', 5),
setup.qc.Event('open_for_visitors', 1),
]
],
main_room_template_key: 'grandhall',
})>><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.RoomTemplate({
key: 'veteranhall',
tags: [],
width: 6,
height: 8,
skill_bonus: [
{
type: "near",
skill_key: "slaving",
room_keys: [
'grandhall',
'bedchamberwing',
'dungeons',
'inn',
'lodgings',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'veteranhall',
name: 'Veteran Hall',
tags: ['critical', 'unlocker', 'structural', ],
description_passage: 'BuildingVeteranHall',
costs: [
[setup.qc.MoneyMult(-20)],
],
restrictions: [
[
setup.qres.Building('armory'),
setup.qres.Building('bedchamberwing'),
setup.qres.Building('classroom'),
setup.qres.Building('dutyroom'),
setup.qres.Building('inn'),
setup.qres.Building('hospital'),
setup.qres.Building('library'),
setup.qres.Building('moraleoffice'),
setup.qres.Building('recreationwing'),
setup.qres.Building('relationsoffice'),
setup.qres.Building('scoutcarriage'),
setup.qres.Building('scoutoffice'),
setup.qres.Building('trainingchamber'),
setup.qres.Building('traininggrounds'),
setup.qres.Building('viceleaderoffice'),
setup.qres.Building('warehouse'),
setup.qres.Building('warroom'),
],
],
on_build: [
[
setup.qc.IfThenElse(
setup.qres.UnitGroupHasUnit('new_game_plus_slaves'),
setup.qc.DoAll([
setup.qc.Event('slavecoming', 3, null)
], undefined),
setup.qc.DoAll([
], undefined)
),
setup.qc.IfThenElse(
setup.qres.Function(() => {
return !State.variables.statistics.get('new_game_plus_count');
}),
setup.qc.DoAll([
setup.qc.Event('retirement', 25, null)
], undefined),
setup.qc.DoAll([
], undefined)
),
]
],
main_room_template_key: 'veteranhall',
})>><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.RoomTemplate({
key: 'analtrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'analtrainingroom',
name: 'Anal Training Room',
tags: ['training'],
description_passage: 'BuildingAnalTrainingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Building('trainingbedroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_earth_master]),
],
],
main_room_template_key: 'analtrainingroom',
})>><p>
Unlocks Anal Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'brainwashingroom',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'brainwashingroom',
name: 'Brainwashing Room',
tags: ['training'],
description_passage: 'BuildingBrainwashingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT)],
],
restrictions: [
[
setup.qres.Building('trainingchamber'),
setup.qres.Building('convincingroom'),
setup.qres.Building('veteranhall'),
setup.qres.HasItem(setup.item.brainwash_technology),
],
],
main_room_template_key: 'brainwashingroom',
})>><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.RoomTemplate({
key: 'convincingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'convincingroom',
name: 'Convincing Room',
tags: ['training'],
description_passage: 'BuildingConvincingRoom',
costs: [
[
setup.qc.Money(-3000)],
],
restrictions: [
[
setup.qres.Building('trainingchamber'),
setup.qres.Building('grandhall'),
],
],
main_room_template_key: 'convincingroom',
})>><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 is no long-term damage.
</p><<run new setup.RoomTemplate({
key: 'domestictrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'domestictrainingroom',
name: 'Domestic Training Room',
tags: ['training'],
description_passage: 'BuildingDomesticTrainingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Through(setup.qres.HasItem(setup.item.technology_domesticmaster)),
setup.qres.Building('milkerroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'domestictrainingroom',
})>><p>
Unlocks Domestic Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'dominancetrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'dominancetrainingroom',
name: 'Dominance Training Room',
tags: ['training'],
description_passage: 'BuildingDominanceTrainingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[
setup.qres.Building('torturechamber'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'dominancetrainingroom',
})>><p>
Unlocks Dominance Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'endurancetrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'endurancetrainingroom',
name: 'Endurance Training Room',
tags: ['training'],
description_passage: 'BuildingEnduranceTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('trainingfield'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'endurancetrainingroom',
})>><p>
Unlocks Endurance Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'fetishtrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "arcane",
room_keys: [
'toilettrainingroom',
'sissytrainingroom',
'roleplaytrainingroom',
'sissybooth',
'theatre',
'bath',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'fetishtrainingroom',
name: 'Fetish Training Room',
tags: ['training', 'unlocker', ],
description_passage: 'BuildingFetishTrainingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('trainingchamber')],
],
main_room_template_key: 'fetishtrainingroom',
})>><p>
Room containing several specialized tools to train slaves for particularly...
uncommon tastes.
Unlocks basic and advanced training for: toilet training, sissy training, and roleplay training.
</p><<run new setup.RoomTemplate({
key: 'hornytrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'hornytrainingroom',
name: 'Horny Training Room',
tags: ['training'],
description_passage: 'BuildingHornyTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Through(setup.qres.HasItem(setup.item.technology_hornymaster)),
setup.qres.Building('milkerroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'hornytrainingroom',
})>><p>
Unlocks Horny Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'masochisttrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'masochisttrainingroom',
name: 'Masochist Training Room',
tags: ['training'],
description_passage: 'BuildingMasochistTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('torturechamber'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'masochisttrainingroom',
})>><p>
Unlocks Masochist Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'milkerroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "aid",
room_keys: [
'domestictrainingroom',
'hornytrainingroom',
'cleaning',
'museum',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'milkerroom',
name: 'Milker Room',
tags: ['training', 'unlocker', ],
description_passage: 'BuildingMilkerRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('trainingchamber')],
],
main_room_template_key: 'milkerroom',
})>><p>
The centerpiece of this room are a row of chairs with various devious looking tubes.
They can be used to milk slaves dry, whose fluids then has to be cleaned up by your cleaning slaves.
Unlocks basic and advanced domestic and horny training for slaves.
</p><<run new setup.RoomTemplate({
key: 'obediencetrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'obediencetrainingroom',
name: 'Obedience Training Room',
tags: ['training'],
description_passage: 'BuildingObedienceTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Through(setup.qres.HasItem(setup.item.technology_obediencemaster)),
setup.qres.Building('trainingchamber'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'obediencetrainingroom',
})>><p>
Unlocks Obedience Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'oraltrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'oraltrainingroom',
name: 'Oral Training Room',
tags: ['training'],
description_passage: 'BuildingOralTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('trainingbedroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_earth_master]),
],
],
main_room_template_key: 'oraltrainingroom',
})>><p>
Unlocks Oral Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'pettrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'pettrainingroom',
name: 'Pet Training Room',
tags: ['training'],
description_passage: 'BuildingPetTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Through(setup.qres.HasItem(setup.item.technology_petmaster)),
setup.qres.Building('trainingfield'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'pettrainingroom',
})>><p>
Unlocks Pet Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'ponytrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'ponytrainingroom',
name: 'Pony Training Room',
tags: ['training'],
description_passage: 'BuildingPonyTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('trainingfield'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'ponytrainingroom',
})>><p>
Unlocks Pony Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'researchroom',
tags: [],
width: 5,
height: 3,
door_column: 2,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'researchroom',
name: 'Research Room',
tags: ['training', ],
description_passage: 'BuildingResearchRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_HIGH_MULT),
],
],
restrictions: [
[
setup.qres.HasItem(setup.item.technology_research),
setup.qres.Building('trainingchamber'),
],
],
on_build: [
[
setup.qc.Event('an_offer_for_a_slave', 0),
],
],
main_room_template_key: 'researchroom',
})>><p>
You can assign your slavers to work here, figuring out what is the best way to break
a <<rep setup.trait.will_defiant>> slave.
Unlocks a training that can give you a way to remove <<rep setup.trait.will_defiant>> from a slave.
It will be incredibly difficult, however, and you best be prepared...
</p><<run new setup.RoomTemplate({
key: 'roleplaytrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'roleplaytrainingroom',
name: 'Roleplay Training Room',
tags: ['training'],
description_passage: 'BuildingRoleplayTrainingRoom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT)],
],
restrictions: [
[setup.qres.Building('fetishtrainingroom')],
],
main_room_template_key: 'roleplaytrainingroom',
})>><p>
Unlocks Roleplay Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'sissytrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'sissytrainingroom',
name: 'Sissy Training Room',
tags: ['training'],
description_passage: 'BuildingSissyTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('fetishtrainingroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'sissytrainingroom',
})>><p>
Unlocks Sissy Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'toilettrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'toilettrainingroom',
name: 'Toilet Training Room',
tags: ['training'],
description_passage: 'BuildingToiletTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('fetishtrainingroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_wind_master]),
],
],
main_room_template_key: 'toilettrainingroom',
})>><p>
Unlocks Toilet Training: Master for slaves.
</p><<run new setup.RoomTemplate({
key: 'torturechamber',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "intrigue",
room_keys: [
'dominancetrainingroom',
'masochisttrainingroom',
'stage',
'gym',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'torturechamber',
name: 'Torture Chamber',
tags: ['training', 'unlocker', ],
description_passage: 'BuildingTortureChamber',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('trainingchamber')],
],
main_room_template_key: 'torturechamber',
})>><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.RoomTemplate({
key: 'trainingbedroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [
{
type: "near",
skill_key: "sex",
room_keys: [
'oraltrainingroom',
'vaginatrainingroom',
'analtrainingroom',
'oralfuckhole',
'analfuckhole',
'vaginafuckhole',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'trainingbedroom',
name: 'Training Bedroom',
tags: ['training', 'unlocker', ],
description_passage: 'BuildingTrainingBedroom',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('trainingchamber')],
],
main_room_template_key: 'trainingbedroom',
})>><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.RoomTemplate({
key: 'trainingchamber',
tags: [],
width: 5,
height: 5,
door_column: 2,
skill_bonus: [
{
type: "near",
skill_key: "slaving",
room_keys: [
'dungeons',
'lodgings',
'sexshop',
'hospital',
],
},
{
type: "near",
skill_key: "slaving",
room_keys: [
'fetishtrainingroom',
'torturechamber',
'milkerroom',
'trainingbedroom',
'trainingfield',
'researchroom',
'convincingroom',
'brainwashingroom',
],
},
],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'trainingchamber',
name: 'Training Chamber',
tags: ['training', 'critical', 'unlocker', ],
description_passage: 'BuildingTrainingChamber',
costs: [
[setup.qc.Money(-1700)],
],
restrictions: [
[setup.qres.Building('grandhall')],
],
main_room_template_key: 'trainingchamber',
})>><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.RoomTemplate({
key: 'trainingfield',
tags: [],
width: 3,
height: 5,
skill_bonus: [
{
type: "near",
skill_key: "brawn",
room_keys: [
'endurancetrainingroom',
'pettrainingroom',
'ponytrainingroom',
'kennel',
'courtyard',
'stables',
],
},
],
is_fixed: false,
is_passable: true,
is_door: false,
is_optional: false,
is_outdoors: true,
})>>
<<run new setup.BuildingTemplate({
key: 'trainingfield',
name: 'Training Field',
tags: ['training', 'unlocker', ],
description_passage: 'BuildingTrainingField',
costs: [
[setup.qc.MoneyMult(-setup.BUILDING_CHEAP_MULT)],
],
restrictions: [
[setup.qres.Building('trainingchamber')],
],
main_room_template_key: 'trainingfield',
})>><p>
A small 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.RoomTemplate({
key: 'vaginatrainingroom',
tags: [],
width: 3,
height: 3,
door_column: 1,
skill_bonus: [],
is_fixed: false,
is_passable: false,
is_door: true,
is_optional: false,
is_outdoors: false,
})>>
<<run new setup.BuildingTemplate({
key: 'vaginatrainingroom',
name: 'Vagina Training Room',
tags: ['training'],
description_passage: 'BuildingVaginaTrainingRoom',
costs: [
[
setup.qc.MoneyMult(-setup.BUILDING_MEDIUMLOW_MULT),
],
],
restrictions: [
[
setup.qres.Building('trainingbedroom'),
setup.qres.HasSlaverWithTraits([setup.trait.magic_earth_master]),
],
],
main_room_template_key: 'vaginatrainingroom',
})>><p>
Unlocks Vagina Training: Master for slaves.
</p><<set setup.companytemplate = {}>>
<<set _passages = Story.lookup('tags', 'company')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<run new setup.CompanyTemplate(
'bank',
'Tiger Bank',
'CompanyTemplateBank',
[ /* favor effects */
[
setup.qc.Money(500),
],
[
setup.qc.Money(1000),
],
[
setup.qc.Money(1500),
],
],
)>>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 _boon = setup.qc.Function(() => {
var unit = setup.rng.choice(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,
],
],
)>>Residents of the land beyond <<lore concept_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.<<run new setup.CompanyTemplate(
'dragonkin',
'The Land of Dragons',
'CompanyTemplateDragonkin',
[ /* favor effects */
[
setup.qc.FavorSpread('dragonkin', 35),
],
[
setup.qc.FavorSpread('dragonkin', 70),
],
[
setup.qc.FavorSpread('dragonkin', 100),
],
],
)>>The mighty kingdom of dragonkins in the <<lore region_sea>>.
Not many can befriend these aloof but honorable race, but for those who managed
to do so, they will find that having a dragonkin ally is more than enough to
earn the respect of many other companies...<<set _item = setup.qc.ItemForSale(
'itemmarket',
'all',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.ItemForSaleSingle(
'itemmarket',
'mindmend_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_EQUIPMENT_PROBABILITY_HIGH),
],
],
)>>Intelligent and smart, these sharp-eared people lives in the western forests
together with the neko.
They are often gifted alchemists, and when befriended might be willing to peddle
the extremely rare <<rep setup.item.mindmend_potion>> in your fort...<<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,
],
],
)>>Hardy people of the eastern deserts.
When befriended, these people can supply your company with leads for quests from faraway lands.<<set _getslaver = setup.qc.Function((company) => {
var preference = State.variables.settings.getGenderPreference(setup.job.slaver);
var unit = setup.unitgroup.all.getUnit(preference);
setup.qc.Slaver('recruit', "", /* is mercenary = */ true).apply({
getName: () => company.getName(),
getActorUnit: () => unit,
});
})>>
<<run new setup.CompanyTemplate(
'humankingdom',
'Kingdom of Tor',
'CompanyTemplateHumanKingdom',
[ /* favor effects */
[
_getslaver,
],
[
_getslaver,
_getslaver,
],
[
_getslaver,
_getslaver,
_getslaver,
],
],
)>>The glorious Kingdom of Tor, ruled over by Gaius the Just is perhaps
the most multicultural of all the nations on <<lore continent_main>>.
The <<lore race_humankingdom>> people are industrious, forward thinking, and are
known for their inventiveness and machinery. Although slavery has recently been
made illegal by royal decree, the practise still exists just under the thin
veneer of civilisation.
Gaining the favour of the Kingdom will provide you with an influx of mercenaries, especially those whose skills have recently been outlawed.<<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,
],
],
)>>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.<<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,
],
],
)>>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.<<run new setup.CompanyTemplate(
'independent',
'Independent',
'CompanyTemplateIndependent',
[ /* favor effects */
[],
[],
[],
],
)>>Various rabbles scattered around the region with no clear leadership between them.<<set _scout = setup.qc.OneRandom([
setup.qc.DoAll([]),
setup.qc.QuestDelay('veteran', 1),
])>>
<<run new setup.CompanyTemplate(
'lizardkin',
'Lizardkins',
'CompanyTemplateLizardkin',
[ /* favor effects */
[
_scout,
],
[
setup.qc.QuestDelay('veteran', 1),
],
[
setup.qc.QuestDelay('veteran', 1),
_scout,
],
],
)>>A group of people with scaley skin and enormous tail living
across the <<lore region_sea>>.
Unlike the purebred dragonkins, these people lack wings, but they make up for it
in grit and combat ferocity.
These people are not usually welcoming to outsiders, but for those who managed
to secure their trust, they will find that lizardkin scouts are one of the best
scouts for finding rare quests in the world...<<set _item = setup.qc.EquipmentForSale(
'sexequipmentmarket',
'all_sex',
/* amount = */ 1,
)>>
<<set _rare = setup.qc.EquipmentForSaleSingle(
'sexequipmentmarket',
'buttplug_master',
)>>
<<run new setup.CompanyTemplate(
'neko',
"Neko",
'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_EQUIPMENT_PROBABILITY_HIGH),
],
],
)>>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...<<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_EQUIPMENT_PROBABILITY_HIGH),
],
],
)>>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.<<set _getslave = setup.qc.Function((company) => {
var preference = State.variables.settings.getGenderPreference(setup.job.slave);
var unit = setup.unitgroup.all.getUnit(preference);
setup.qc.Slave('recruit', "", /* is mercenary = */ true).apply({
getName: () => company.getName(),
getActorUnit: () => unit});
})>>
<<run new setup.CompanyTemplate(
'outlaws',
'Outlaws',
'CompanyTemplateOutlaws',
[ /* favor effects */
[
_getslave,
],
[
_getslave,
_getslave,
],
[
_getslave,
_getslave,
_getslave,
],
],
)>>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.<<run new setup.CompanyTemplate(
'player',
'Fort of Chains',
'CompanyTemplatePlayer',
[ /* favor effects */
[],
[],
[],
],
)>>Your glorious company.<<run new setup.CompanyTemplate(
'royal',
'Royal Court',
'CompanyTemplateRoyal',
[ /* favor effects */
[
setup.qc.HighQualityRecruit('all', 'slaver', 2, 'High quality recruit from the Royal Court'),
],
[
setup.qc.HighQualityRecruit('all', 'slaver', 5, 'Higher quality recruit from the Royal Court'),
],
[
setup.qc.HighQualityRecruit('all', 'slaver', 8, 'HIGHEST quality recruit from the Royal Court'),
],
],
)>><p>
The royal court, headed by King Gaius the Just, who rules over the
<<rep $company.humankingdom>>.
While the direct members of the ruling families are known to be upstanding people,
many other members of the court are less so, and may be convinced that your company
has their best interest in mind.
Compared to the <<rep $company.humankingdom>>,
your company's relations with the Royal Court is far more personal.
</p>
<p>
Should you happen to be in good standings (not officially of course!) with them,
some high quality recruits might just pop up at your <<rep setup.buildingtemplate.prospectshall>>...
</p><<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_EQUIPMENT_PROBABILITY_HIGH),
],
],
)>>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...<<set setup.contacttemplate = {}>>
<<set _passages = Story.lookup('tags', 'contact')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<run new setup.ContactTemplate(
'citylead',
'Contact in the City of 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.<<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(
'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',
['hasunit'],
'ContactBlacksmithPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.blacksmith,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>A burly vendor selling iron armors and gears at your fort.<<run new setup.ContactTemplate(
'furniturepeddler',
'Lumberjack',
['hasunit'],
'ContactFurniturePeddler',
[
setup.qc.ItemForSale(
'itemmarket',
setup.itempool.furniture_normal,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>A ruff and gruff resident of the <<lore region_vale>> who sells furnitures for your fort freshly made from lumber in the forest.<<run new setup.ContactTemplate(
'itempeddler',
'Alchemist',
[],
'ContactItemPeddler',
[
setup.qc.ItemForSale(
'itemmarket',
setup.itempool.all,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>The fort alchemist who sells potions for you and your slavers at your fort.<<run new setup.ContactTemplate(
'sexpeddler',
'Sex Peddler',
[],
'ContactSexPeddler',
[
setup.qc.EquipmentForSale(
'sexequipmentmarket',
setup.equipmentpool.all_sex,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>Random traveling peddlers who sell sex-related equipment at your fort.<<run new setup.ContactTemplate(
'tailorpeddler',
'Tailor',
['hasunit'],
'ContactTailorPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.tailor,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>A well-dressed tailor selling high quality outfits and clothes.<<run new setup.ContactTemplate(
'weaverpeddler',
'Weaver',
['hasunit'],
'ContactWeaverPeddler',
[
setup.qc.EquipmentForSale(
'combatequipmentmarket',
setup.equipmentpool.weaver,
/* amount = */ 1,
/* markup = */ setup.CONTACT_PEDDLER_MARKUP,
),
],
)>>A vendor from the south selling various colored robes for your perusal.<<run new setup.ContactTemplate(
'quest_doppelganger',
'Doppelganger Guest',
['hasunit', 'alwaysactive', ],
'ContactDoppelgangerGuest',
[],
)>>A doppelganger who has somehow took up residence in your fort.<<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.<p>
The interactive sex scene is highly inspired by the free and very fun game
[[Lilith's Throne|https://github.com/Innoxia/liliths-throne-public]] by
[[Innoxia|https://subscribestar.adult/innoxia]], and borrows many text
from the game.
If you want more of these scenes, please consider giving Lilith's Throne a try!
The use of these content from Lilith's Throne into this game is in no way endorsed by Innoxia.
Innoxia has
kindly [[permitted|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/img/ltconsent.png]]
their use in this game.
Lilith's Throne is released under <<message "this license (click to view)">>
<div class='helpcard'>
<p>
You must read and agree to the attached disclaimer before viewing any part of this Project.
</p>
<p>
Although this Project is publicly available, it is not open source software. All Content is under sole ownership and Copyright 2016 Innoxia (innoxia7@gmail.com) all rights reserved.
</p>
<hr/>
<p>
<b>Definitions:</b>
</p>
<p>
"Project" shall be defined as the source code and/or modifications/alterations comprising the software package known as "Lilith's Throne"; its assets, source code, Content, and all associated repositories, tools, configuration, and archives.
</p>
<p>
"Binaries" refers to the executable produced from the source code and/or modified/altered source code.
</p>
<p>
"Content" shall be defined to include machine or programming code; text of any kind, including written narratives and descriptions, markup and formatting, and any other information that may be represented in the Unicode specification; images, drawings, video, animations, sound, or music; adjustments to Project settings, configuration, parameters, or environment; or any other tangible or intangible thing which the user voluntarily makes available to the Project creator(s) and/or maintainers.
</p>
<p>
"Contribution" shall be defined as submitting any Content, idea, or suggestion available to the Project creator(s) and/or maintainers by any means, including e-mail, file transfer protocols of any kind, git pull requests, git pushes, or any other electronic or physical transfer of any kind which makes available to the project creator(s) and/or maintainers for inclusion in the Project.
</p>
<hr/>
<p>
<b>License:</b>
</p>
<p>
Redistribution, use, and modification of the Project and its Content, with or without modification, are permitted provided that the following conditions are met:
</p>
<ol>
<li>The Project must retain the above copyright notice and this license as is.</li>
<li>The Binaries must reproduce the above copyright notice (i.e. leave Innoxia's name in the credits page).</li>
<li>The Project, its Content, and Binaries:
<ul>
<li>3a. must carry prominent notices stating it is modified, and not endorsed by Innoxia, if applicable.</li>
<li>3b. must be available free of charge, if distributed.</li>
<li>3c. may not be used for commercial purposes.</li>
</ul>
</li>
</ol>
<p><i>
Points 3b and 3c are to protect the player base from having to pay for modded copies of the game. I don't want modders to try and take advantage of players (by adding a paywall to their mods).
</i></p>
<hr/>
<p>
<b>On Content submissions and Contributions:</b>
</p>
<p>
By making any Contribution to the Project, potential contributers agree to give the project creator(s) and/or maintainers a perpetual, unlimited, royalty-free license to reuse, incorporate, distribute, modify, or extend the aforementioned Contribution in any fashion they see fit.
</p>
<p>
<i>
This is to prevent the case of someone submitting code or content to the game, then coming back at a later date and demanding removal unless certain conditions are met. I need to retain control over all of the game's content, and, while I will always do my very best to respect your submitted content's themes and intentions, I need to be able to have the final say in the event of any conflicts.
</i>
</p>
</div>
<</message>>.
</p>[[(Icon Credits)|ImageCredits]]
<h3>Inspirations</h3>
<p>
BedlamGames, who made No Haven, which this games takes an enormous amount of inspirations from.
FCdev, who made Free Cities, which this games also takes an enormous amount of content from.
</p>
<p>
Many texts in this game are adapted from the Free Cities game, released under GPL v3 license
by FCdev.
</p>
<<include 'InnoxiaCredits'>>
<h3>Playtesters</h3>
Thanks to the many playtesters for feedback, bug reports, and playtestings.
<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>>
<<set _dom = setup.DOM.Util.Image.load({image_name: _path})>>
<<attach _dom>>
<</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 = setup.CONTENT_CREATOR_TYPES>>
<<for _item range _items>>
<<if _credits[_author][_item].length>>
<<capture _item>>
<<message _item>>
<<for _title range _credits[_author][_item]>>
<<nameof _title.content>>
<br/>
<</for>>
<</message>>
(<<= _credits[_author][_item].length>>)
<br/>
<</capture>>
<</if>>
<</for>>
<</message>>
<</capture>>
: |
<<if _credits[_author].quest.length>>
<<= _credits[_author].quest.length>> quests |
<</if>>
<<if _credits[_author].opportunity.length>>
<<= _credits[_author].opportunity.length>> opportunities |
<</if>>
<<if _credits[_author].event.length>>
<<= _credits[_author].event.length>> events |
<</if>>
<<if _credits[_author].interaction.length>>
<<= _credits[_author].interaction.length>> interactions |
<</if>>
<br/>
<</for>><h3>Repository contributors</h3>
<p>
This game is the result of the combined effort of many
[[repository contributors|https://gitgud.io/darkofocdarko/fort-of-chains/-/graphs/master]].
In particular, Naraden contributed many, many fixes and improvements, and acciabread
gave many suggestions and work that greatly improve the game.
Give your thanks to them!
</p>
<p>
You are also welcome to join and contribute into the game.
[[Learn more here|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/images.md#adding-new-portraits-to-the-repository]]
</p><<set _credits = setup.RoomTemplate.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>>
<<if _info.directional>>
<<capture _image>>
<<message _path>>
<<= setup.repImg({imagepath: setup.RoomInstance.getDirectionalImagePath(_image, 0)})>>
<<= setup.repImg({imagepath: setup.RoomInstance.getDirectionalImagePath(_image, 1)})>>
<<= setup.repImg({imagepath: setup.RoomInstance.getDirectionalImagePath(_image, 2)})>>
<<= setup.repImg({imagepath: setup.RoomInstance.getDirectionalImagePath(_image, 3)})>>
<</message>>
<</capture>>
<<else>>
<<capture _path>>
<<message _path>>
<<= setup.repImg({imagepath: _path})>>
<</message>>
<</capture>>
<</if>>
<br/>
<</for>>
<</message>>
(<<= _credits[_artist].length>> artworks)
<br/>
<</capture>>
<</for>><<set _credits = setup.ContentImage.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>>
<<= setup.repImg({imagepath: _path})>>
<</message>>
<</capture>>
<br/>
<</for>>
<</message>>
(<<= _credits[_artist].length>> artworks)
<br/>
<</capture>>
<</for>><<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.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.breast_tiny,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qres.Job(setup.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_loyal,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_ambidextrous,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[
setup.qres.Job(setup.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_humble,
setup.trait.per_direct,
setup.trait.per_studious,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_knight,
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_sly,
setup.trait.per_active,
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[
setup.qres.Job(setup.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_humble,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'maid', /* key */
'Maid / Butler', /* title */
[
setup.trait.bg_maid,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_loyal,
setup.trait.per_attentive,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.skill_ambidextrous,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_independent,
setup.trait.per_dreamy,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'herbalist', /* key */
'Herbalist', /* title */
[
setup.trait.bg_wiseman,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_kind,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'rescuer', /* key */
'Rescuer', /* title */
[
setup.trait.bg_boss,
setup.trait.bg_informer,
setup.trait.per_aggressive,
setup.trait.per_attentive,
setup.trait.skill_creative,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.per_calm,
setup.trait.per_dreamy,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 1.5,
intrigue: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'priest', /* key */
'Priest', /* title */
[
setup.trait.bg_mythical,
setup.trait.bg_priest,
setup.trait.per_calm,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 2.0,
social: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'devout', /* key */
'Devout', /* title */
[
setup.trait.bg_monk,
setup.trait.bg_priest,
setup.trait.per_calm,
setup.trait.per_submissive,
], /* critical traits */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
aid: 3.0,
}
)>><<run new setup.UnitCriteria(
'arcanefire', /* key */
'Arcane (Fire)', /* title */
[ /* critical traits */
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[ /* disaster traits */
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_playful,
setup.trait.skill_creative,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.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.tough_nimble,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_playful,
setup.trait.skill_creative,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[ /* disaster traits */
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qres.Job(setup.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_frugal,
setup.trait.per_playful,
setup.trait.per_empath,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* disaster traits */
setup.trait.per_loner,
setup.trait.per_lavish,
setup.trait.per_serious,
setup.trait.per_logical,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[setup.qres.Job(setup.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_loner,
setup.trait.per_lavish,
setup.trait.per_serious,
setup.trait.per_logical,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.per_gregarious,
setup.trait.per_frugal,
setup.trait.per_playful,
setup.trait.per_empath,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[setup.qres.Job(setup.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_loyal,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.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.bg_mist,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[setup.qres.Job(setup.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.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire_master,
],
[ /* disaster traits */
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_playful,
setup.trait.skill_creative,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.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.tough_nimble,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_playful,
setup.trait.skill_creative,
setup.trait.magic_water_master,
],
[ /* disaster traits */
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.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_frugal,
setup.trait.per_playful,
setup.trait.per_empath,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* disaster traits */
setup.trait.per_loner,
setup.trait.per_lavish,
setup.trait.per_serious,
setup.trait.per_logical,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* requirement */
setup.qres.Job(setup.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_loner,
setup.trait.per_lavish,
setup.trait.per_serious,
setup.trait.per_logical,
setup.trait.skill_alchemy,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.per_gregarious,
setup.trait.per_frugal,
setup.trait.per_playful,
setup.trait.per_empath,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* requirement */
setup.qres.Job(setup.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_loyal,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* requirement */
setup.qres.Job(setup.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.bg_mist,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light_master,
],
[ /* requirement */
setup.qres.Job(setup.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.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_active,
setup.trait.per_attentive,
], /* critical traits */
[
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_studious,
setup.trait.per_dreamy,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'tank', /* key */
'Tank', /* title */
[
setup.trait.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_masochistic,
setup.trait.skill_intimidating,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.height_dwarf,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_curious,
setup.trait.per_submissive,
], /* disaster traits */
[setup.qres.Job(setup.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.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_aggressive,
setup.trait.skill_intimidating,
], /* critical traits */
[
setup.trait.height_dwarf,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
], /* disaster traits */
[setup.qres.Job(setup.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.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_slow,
setup.trait.per_direct,
setup.trait.per_submissive,
], /* critical traits */
[
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_sly,
setup.trait.per_dominant,
setup.trait.per_lunatic,
], /* disaster traits */
[setup.qres.Job(setup.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_lizardkin,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
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_human,
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* requirement */
setup.qres.Job(setup.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_metalworker,
setup.trait.bg_artisan,
setup.trait.race_greenskin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_calm,
setup.trait.skill_creative,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[ /* disaster traits */
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_aggressive,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
brawn: 1.5,
knowledge: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'bodyguard', /* key */
'Bodyguard', /* title */
[
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_loyal,
setup.trait.per_attentive,
setup.trait.per_stubborn,
setup.trait.skill_intimidating,
], /* critical traits */
[
setup.trait.height_short,
setup.trait.height_dwarf,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_independent,
setup.trait.per_dreamy,
setup.trait.per_curious,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
brawn: 2.0,
survival: 1.0,
}
)>><<run new setup.UnitCriteria(
'guard', /* key */
'Guard', /* title */
[
setup.trait.bg_soldier,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_honorable,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_raider,
setup.trait.bg_thug,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_evil,
], /* disaster traits */
[setup.qres.Job(setup.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.height_tall,
setup.trait.height_giant,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
], /* critical traits */
[
setup.trait.eq_restrained,
setup.trait.eq_blind,
setup.trait.height_dwarf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_humble,
setup.trait.per_curious,
], /* disaster traits */
[setup.qres.Job(setup.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.qres.Job(setup.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_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_raider,
setup.trait.bg_thug,
setup.trait.bg_slaver,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
], /* disaster traits */
[setup.qres.Job(setup.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.breast_large,
setup.trait.breast_huge,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_alchemy,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.breast_tiny,
setup.trait.breast_titanic,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.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.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_mythical,
setup.trait.bg_knight,
setup.trait.per_humble,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_playful,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
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.qres.Job(setup.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_mythical,
setup.trait.bg_knight,
setup.trait.per_humble,
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_serious,
setup.trait.per_empath,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.skill_animal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_submissive,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* disaster traits */
[setup.qres.Job(setup.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.tough_nimble,
setup.trait.per_lunatic,
setup.trait.skill_ambidextrous,
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,
], /* critical traits */
[
setup.trait.tough_tough,
setup.trait.per_dreamy,
setup.trait.per_kind,
setup.trait.per_lustful,
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.qres.Job(setup.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_active,
setup.trait.per_playful,
setup.trait.per_lunatic,
setup.trait.skill_ambidextrous,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[ /* disaster traits */
setup.trait.per_studious,
setup.trait.per_serious,
setup.trait.per_masochistic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[ /* requirement */
setup.qres.Job(setup.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_direct,
setup.trait.per_frugal,
setup.trait.per_independent,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.per_sly,
setup.trait.per_lavish,
setup.trait.per_loyal,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.join_junior,
],
[ /* requirement */
setup.qres.Job(setup.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.height_tall,
setup.trait.height_giant,
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_loner,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.height_short,
setup.trait.height_dwarf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_gregarious,
setup.trait.per_dreamy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_blind,
setup.trait.eq_restrained,
],
[ /* requirement */
setup.qres.Job(setup.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.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_dark),
],
{
arcane: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'corruption_assistant',
'Assistant Corruptor',
[
setup.trait.bg_apprentice,
setup.trait.bg_mist,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[setup.qres.Job(setup.job.slaver)],
{
arcane: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'corruptor',
'Corruptor',
[
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_dark),
],
{
arcane: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'corruption_head_master',
'Head Corruptor (Advanced)',
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
],
[
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_dark_master),
],
{
arcane: 3.0,
}
)>><<run new setup.UnitCriteria(
'fleshshape_head',
'Head Flesh-Shaper',
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.per_empath,
setup.trait.per_chaste,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_brave,
setup.trait.per_dreamy,
setup.trait.per_logical,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_water),
],
{
arcane: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'fleshshape_assistant',
'Assistant Flesh-Shaper',
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.per_empath,
setup.trait.per_chaste,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_brave,
setup.trait.per_dreamy,
setup.trait.per_logical,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qres.Job(setup.job.slaver)],
{
arcane: 2.0,
aid: 1.0,
}
)>><<run new setup.UnitCriteria(
'heal_head',
'Head Healer',
[
setup.trait.bg_healer,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_light),
],
{
aid: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'heal_head_master',
'Head Healer (Expert)',
[
setup.trait.bg_healer,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_light_master),
],
{
aid: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'heal_assistant',
'Assistant Healer',
[
setup.trait.per_humble,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.job.slaver)],
{
aid: 3.0,
}
)>><<run new setup.UnitCriteria(
'infiltrator', /* key */
'Infiltrator', /* title */
[ /* critical traits */
setup.trait.bg_assassin,
setup.trait.bg_thief,
setup.trait.height_dwarf,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_sly,
setup.trait.per_attentive,
setup.trait.skill_connected,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_direct,
setup.trait.per_dreamy,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[setup.qres.Job(setup.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.height_dwarf,
setup.trait.tough_nimble,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_frugal,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_calm,
setup.trait.per_gregarious,
setup.trait.per_lavish,
setup.trait.per_loyal,
setup.trait.per_dreamy,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
intrigue: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'kidnapper', /* key */
'Kidnapper', /* title */
[ /* critical traits */
setup.trait.tough_nimble,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* disaster traits */
setup.trait.tough_tough,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master
],
[setup.qres.Job(setup.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_cautious,
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_studious,
setup.trait.per_logical,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_direct,
setup.trait.per_active,
setup.trait.per_empath,
],
[setup.qres.Job(setup.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_sly,
setup.trait.per_gregarious,
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_direct,
setup.trait.per_loner,
setup.trait.per_serious,
setup.trait.per_honorable,
],
[setup.qres.Job(setup.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.tough_nimble,
setup.trait.per_calm,
setup.trait.per_serious,
setup.trait.skill_ambidextrous,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_playful,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[setup.qres.Job(setup.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_smart,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.skill_creative,
],
[ /* disaster traits */
setup.trait.per_slow,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_dreamy,
],
[setup.qres.Job(setup.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_smart,
setup.trait.per_cautious,
setup.trait.per_logical,
setup.trait.skill_alchemy,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_slow,
setup.trait.per_brave,
setup.trait.per_empath,
setup.trait.skill_intimidating,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qres.Job(setup.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_cautious,
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.per_attentive,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_dreamy,
], /* disaster traits */
[setup.qres.Job(setup.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_brave,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.skill_animal,
],
[ /* disaster traits */
setup.trait.per_cautious,
setup.trait.per_active,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slaver)
], /* requirement */
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
survival: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'alchemist', /* key */
'Alchemist', /* title */
[
setup.trait.bg_scholar,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.skill_alchemy,
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.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_smart,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* critical traits */
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.per_slow,
setup.trait.per_brave,
setup.trait.per_dreamy,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_studious,
setup.trait.per_curious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_sexaddict,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_empath,
setup.trait.per_dominant,
setup.trait.skill_hypnotic,
], /* critical traits */
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_loner,
setup.trait.per_logical,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_empath,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_loner,
setup.trait.per_logical,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_studious,
setup.trait.per_dreamy,
setup.trait.per_curious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.skill_entertain,
setup.trait.skill_creative,
], /* critical traits */
[
setup.trait.per_active,
setup.trait.per_attentive,
setup.trait.per_stubborn,
setup.trait.per_lunatic,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_studious,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_masochistic,
setup.trait.per_evil,
], /* critical traits */
[
setup.trait.bg_artist,
setup.trait.per_active,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.skill_creative,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_frugal,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.skill_connected,
], /* critical traits */
[
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_lavish,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_lunatic,
setup.trait.trauma_knowledge,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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_smart,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_logical,
setup.trait.skill_creative,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* critical traits */
[
setup.trait.bg_mythical,
setup.trait.bg_mystic,
setup.trait.bg_apprentice,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_slow,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_empath,
setup.trait.skill_hypnotic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[ /* requirement */
setup.qres.Job(setup.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.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.qres.Job(setup.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_loner,
setup.trait.per_chaste,
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_aggressive,
setup.trait.per_gregarious,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
],
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scholar', /* key */
'Scholar', /* title */
[ /* critical traits */
setup.trait.bg_scholar,
setup.trait.bg_wiseman,
setup.trait.per_direct,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.join_senior,
],
[ /* disaster traits */
setup.trait.bg_raider,
setup.trait.per_sly,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.join_junior,
],
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
knowledge: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'farmer', /* key */
'Farmer', /* title */
[ /* critical traits */
setup.trait.bg_farmer,
setup.trait.skill_animal,
setup.trait.per_calm,
setup.trait.per_cautious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.per_aggressive,
setup.trait.per_brave,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* requirement */
setup.qres.Job(setup.job.slaver),
],
{ /* skill effects, sums to 3.0 */
knowledge: 2.0,
sex: 1.0,
}
)>><<run new setup.UnitCriteria(
'purify_head',
'Head Purifier',
[
setup.trait.bg_priest,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_fire),
],
{
aid: 1.5,
arcane: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'purify_head_master',
'Head Purifier (Advanced)',
[
setup.trait.bg_priest,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(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.per_humble,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.job.slaver)],
{
knowledge: 1.5,
aid: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'repentant',
'Repentant',
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_calm,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.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.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.job.slaver)],
{
aid: 2.0,
arcane: 1.0,
}
)>><<run new setup.UnitCriteria(
'raider', /* key */
'Raider', /* title */
[
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
], /* critical traits */
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
], /* disaster traits */
[setup.qres.Job(setup.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_slaver,
setup.trait.bg_raider,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_submissive,
setup.trait.per_evil,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.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_wolfkin,
setup.trait.subrace_humanvale,
setup.trait.per_cautious,
setup.trait.per_direct,
setup.trait.per_curious,
setup.trait.skill_flight,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.per_brave,
setup.trait.per_sly,
setup.trait.per_stubborn,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 2.0,
knowledge: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_city',
'Scout (City)',
[
setup.trait.subrace_humankingdom,
setup.trait.bg_informer,
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.skill_connected,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.per_aggressive,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.skill_intimidating,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 1.0,
social: 1.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_forest',
'Scout (Forest)',
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.bg_woodsman,
setup.trait.bg_hunter,
setup.trait.per_cautious,
setup.trait.per_loner,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.subrace_humankingdom,
setup.trait.per_brave,
setup.trait.per_gregarious,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_desert',
'Scout (Desert)',
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.bg_nomad,
setup.trait.tough_tough,
setup.trait.per_cautious,
setup.trait.per_direct,
setup.trait.skill_intimidating,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.per_brave,
setup.trait.per_sly,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_sea',
'Scout (Sea)',
[
setup.trait.subrace_humansea,
setup.trait.race_lizardkin,
setup.trait.bg_seaman,
setup.trait.bg_pirate,
setup.trait.per_cautious,
setup.trait.per_loner,
setup.trait.per_empath,
setup.trait.skill_hypnotic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.race_demon,
setup.trait.per_brave,
setup.trait.per_gregarious,
setup.trait.per_logical,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 2.0,
arcane: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'scout_guard',
'Scout (Guard)',
[
setup.trait.bg_adventurer,
setup.trait.bg_mercenary,
setup.trait.bg_soldier,
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_dominant,
setup.trait.per_masochistic,
],
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.per_lunatic,
],
[setup.qres.Job(setup.job.slaver)],
{
survival: 1.0,
combat: 2.0,
}
)>><<run new setup.UnitCriteria(
'seducer', /* key */
'Seducer', /* title */
[
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_playful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
], /* critical traits */
[ /* disaster traits */
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.skill_intimidating,
],
[setup.qres.Job(setup.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.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_dreamy,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[ /* disaster traits */
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_attentive,
setup.trait.per_chaste,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'sex_teacher', /* key */
'Sex Teacher', /* title */
[
setup.trait.bg_courtesan,
setup.trait.per_attentive,
setup.trait.per_dominant,
setup.trait.per_calm,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.face_scary,
setup.trait.skill_intimidating,
], /* critical traits */
[ /* disaster traits */
setup.trait.dick_titanic,
setup.trait.breast_titanic,
setup.trait.breast_tiny,
setup.trait.dick_tiny,
setup.trait.per_chaste,
setup.trait.per_dreamy,
setup.trait.per_aggressive,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.face_beautiful,
setup.trait.face_hideous,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 1.5,
knowledge: 1.5,
}
)>>
<<run new setup.UnitCriteria(
'whoreblowjob', /* key */
'Whore (Head special)', /* title */
[
setup.trait.bg_whore,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_cautious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[setup.qres.Job(setup.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.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_humble,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qres.Job(setup.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.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'bimbo', /* key */
'Bimbo', /* title */
[
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.vagina_gape,
setup.trait.anus_gape,
setup.trait.face_beautiful,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_humble,
setup.trait.per_active,
setup.trait.per_dreamy,
setup.trait.per_playful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.bg_courtesan,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_smart,
setup.trait.per_proud,
setup.trait.per_studious,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_cruel,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_lunatic,
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.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_frugal,
setup.trait.per_dominant,
setup.trait.skill_connected,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_lavish,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
], /* disaster traits */
[setup.qres.Job(setup.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_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.skill_alchemy,
], /* critical traits */
[
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qres.Job(setup.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.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.tough_nimble,
setup.trait.face_beautiful,
setup.trait.per_active,
setup.trait.per_gregarious,
setup.trait.skill_creative,
setup.trait.skill_connected,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_veryvaluable,
setup.trait.eq_veryslutty,
], /* critical traits */
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.tough_tough,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_studious,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'dom', /* key */
'Dom', /* title */
[ /* critical traits */
setup.trait.bg_slaver,
setup.trait.bg_mist,
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.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_dominant,
setup.trait.per_cruel,
setup.trait.per_proud,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.dick_tiny,
setup.trait.breast_tiny,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_submissive,
setup.trait.per_kind,
setup.trait.per_humble,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
sex: 2.0,
brawn: 1.0,
}
)>><<run new setup.UnitCriteria(
'slave', /* key */
'Slave', /* title */
[], /* critical traits */
[], /* disaster traits */
[setup.qres.Job(setup.job.slave)], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'offeringslave', /* key */
'Offering Slave', /* title */
[], /* critical traits */
[], /* disaster traits */
[ /* requirement */
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave)
],
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'fuckholeslave', /* key */
'Fuckhole Slave', /* title */
[ /* critical traits */
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.anus_loose,
setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master,
setup.trait.training_vagina_basic,
setup.trait.training_vagina_advanced,
setup.trait.training_vagina_master,
setup.trait.training_anal_basic,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.per_dominant,
setup.trait.training_mindbreak,
], /* disaster traits */
[setup.qres.Job(setup.job.slave)], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavepet', /* key */
'Pet', /* title */
[ /* critical traits */
setup.trait.race_wolfkin,
setup.trait.race_catkin,
setup.trait.race_lizardkin,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_loyal,
setup.trait.per_curious,
setup.trait.per_playful,
setup.trait.per_submissive,
setup.trait.skill_animal,
setup.trait.training_pet_master,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_human,
setup.trait.per_aggressive,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_serious,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_pet_basic),
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_loyal,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
].concat(setup.TraitHelper.TRAINING_MASTER),
[
setup.trait.per_loner,
setup.trait.per_stubborn,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavefurniture', /* key */
'Furniture', /* title */
[ /* critical traits */
setup.trait.race_greenskin,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
setup.trait.per_masochistic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.training_endurance_master,
setup.trait.eq_restrained,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_elf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_aggressive,
setup.trait.per_gregarious,
setup.trait.per_sexaddict,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_endurance_basic),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slavepony', /* key */
'Pony', /* title */
[ /* critical traits */
setup.trait.race_lizardkin,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_active,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.skill_animal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.training_pony_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_studious,
setup.trait.per_chaste,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_pony_basic),
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_greenskin,
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.per_sexaddict,
setup.trait.skill_animal,
setup.trait.eq_restrained,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
setup.trait.eq_gagged,
setup.trait.training_mindbreak,
],
[
setup.trait.race_demon,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.height_giant,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.eq_chastity,
], /* disaster traits */
[
setup.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_active,
setup.trait.per_lavish,
setup.trait.eq_gagged,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master,
],
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_studious,
setup.trait.per_frugal,
setup.trait.per_lunatic,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_oral_basic),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>>
<<run new setup.UnitCriteria(
'slaveobedient', /* key */
'Slave (Obedient)', /* title */
[ /* critical traits */
setup.trait.per_loyal,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
].concat(setup.TraitHelper.TRAINING_MASTER),
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_stubborn,
setup.trait.per_chaste,
setup.trait.per_dominant,
], /* disaster traits */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
], /* requirement */
{ /* skill effects, sums to 3.0 */
}
)>><<run new setup.UnitCriteria(
'slaver', /* key */
'Slaver (Generic)', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qres.Job(setup.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_sly,
setup.trait.per_frugal,
setup.trait.per_cruel,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[ /* disaster traits */
setup.trait.bg_slave,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_kind,
setup.trait.per_submissive,
],
[setup.qres.Job(setup.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.face_scary,
setup.trait.face_hideous,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.skill_creative,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[setup.qres.Job(setup.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_calm,
setup.trait.per_frugal,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_evil,
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_aggressive,
setup.trait.per_lavish,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
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.qres.Job(setup.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.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.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.tough_nimble,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.tough_tough,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'milker', /* key */
'Milker', /* title */
[ /* critical traits */
setup.trait.bg_farmer,
setup.trait.bg_foodworker,
setup.trait.muscle_strong,
setup.trait.per_active,
setup.trait.per_playful,
setup.trait.skill_animal,
],
[
setup.trait.bg_slave,
setup.trait.muscle_extremelythin,
setup.trait.muscle_extremelystrong,
setup.trait.per_studious,
setup.trait.per_serious,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
slaving: 1.5,
aid: 1.5,
}
)>><<run new setup.UnitCriteria(
'negotiator', /* key */
'Negotiator', /* title */
[ /* critical traits */
setup.trait.bg_merchant,
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_attentive,
setup.trait.per_logical,
],
[
setup.trait.face_hideous,
setup.trait.per_aggressive,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.skill_intimidating,
], /* disaster traits */
[setup.qres.Job(setup.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_smart,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.per_logical,
],
[ /* disaster traits */
setup.trait.face_hideous,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.skill_intimidating,
],
[setup.qres.Job(setup.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.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
],
[ /* disaster traits */
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_submissive,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'convincer', /* key */
'Convincer', /* title */
[ /* critical traits */
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_attentive,
setup.trait.per_stubborn,
setup.trait.skill_intimidating,
setup.trait.skill_hypnotic,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_dreamy,
setup.trait.per_curious,
],
[setup.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.skill_connected,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_dreamy,
setup.trait.per_empath,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
intrigue: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'veteran_informer', /* key */
'Veteran Informer', /* title */
[ /* critical traits */
setup.trait.bg_informer,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_attentive,
setup.trait.per_logical,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_dreamy,
setup.trait.per_empath,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait('skill_connected'),
], /* 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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_frugal,
setup.trait.per_stubborn,
setup.trait.per_logical,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_lavish,
setup.trait.per_curious,
setup.trait.per_empath,
setup.trait.per_lunatic,
setup.trait.skill_intimidating,
],
[setup.qres.Job(setup.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.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_gregarious,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.per_dominant,
setup.trait.skill_connected,
setup.trait.skill_entertain,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_loner,
setup.trait.per_studious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.skill_intimidating,
],
[setup.qres.Job(setup.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_artist,
setup.trait.bg_entertainer,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_active,
setup.trait.per_dreamy,
setup.trait.per_playful,
setup.trait.skill_entertain,
setup.trait.eq_veryvaluable,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.per_serious,
setup.trait.skill_intimidating,
],
[setup.qres.Job(setup.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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.skill_hypnotic,
],
[ /* disaster traits */
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_honorable,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2.0,
intrigue: 1.0,
}
)>>
<<set _criterianegotiator = new setup.UnitCriteria(
'abyssal_negotiator', /* key */
'Abyssal Negotiator', /* name */
[
setup.trait.bg_mist,
setup.trait.per_calm,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_lustful,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
social: 1,
arcane: 1,
sex: 1,
}
)>><<run new setup.UnitCriteria(
'surgery_head',
'Head Surgeon',
[
setup.trait.bg_healer,
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_serious,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(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.per_cautious,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_submissive,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver)
],
{
arcane: 1.5,
aid: 1.5,
}
)>><<run new setup.UnitCriteria(
'hunter', /* key */
'Hunter', /* title */
[
setup.trait.bg_hunter,
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_loner,
setup.trait.per_attentive,
setup.trait.per_stubborn,
setup.trait.skill_animal,
], /* critical traits */
[
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_gregarious,
setup.trait.per_dreamy,
setup.trait.per_curious,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qres.Job(setup.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_loner,
setup.trait.per_curious,
setup.trait.per_playful,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_gregarious,
setup.trait.per_stubborn,
setup.trait.per_serious,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[setup.qres.Job(setup.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_loner,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_calm,
setup.trait.per_gregarious,
setup.trait.per_dreamy,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qres.Job(setup.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_aggressive,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.per_calm,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qres.Job(setup.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.face_scary,
setup.trait.face_hideous,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.skill_hypnotic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.bg_slave,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_submissive,
],
[setup.qres.Job(setup.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.per_cruel,
setup.trait.per_logical,
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_empath,
setup.trait.per_submissive,
],
[setup.qres.Job(setup.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.dick_medium,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.dick_titanic,
setup.trait.per_chaste,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.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.dick_medium,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.per_chaste,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.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.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_chaste,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 2.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_trainer_masochist',
'Slave Trainer (Masochist)',
[
setup.trait.bg_slaver,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.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.face_hideous,
setup.trait.per_aggressive,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.bg_slave,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 3.0,
}
)>>
<<run new setup.UnitCriteria(
'training_slave',
'Slave',
[
setup.trait.per_submissive,
setup.trait.training_obedience_master,
],
[
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.per_dominant,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
],
{}
)>>
<<run new setup.UnitCriteria(
'trainee',
'Trainee',
[
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_attentive,
setup.trait.per_studious,
setup.trait.per_active,
setup.trait.per_submissive,
],
[
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_lunatic,
],
[setup.qres.Job(setup.job.slaver)],
{
brawn: 1.0,
knowledge: 1.0,
sex: 1.0,
}
)>>
<<run new setup.UnitCriteria(
'training_head_master_wind',
'Head Slave Trainer (Master Wind)',
[
setup.trait.bg_slaver,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.bg_slave,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_wind_master),
],
{
slaving: 1.5,
knowledge: 1.0,
social: 0.5,
}
)>>
<<run new setup.UnitCriteria(
'training_head_master_earth',
'Head Slave Trainer (Master Earth)',
[
setup.trait.bg_slaver,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_submissive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_earth_master),
],
{
slaving: 1.5,
knowledge: 1.0,
social: 0.5,
}
)>><<nobr>>
<<set _dom = setup.DOM.Menu.dev_content_generated_begin()>>
<<attach _dom>>
<<link '(Test your activity)' 'ActivityDebugDo'>>
<<run $dtquest.makeProperFromDevTool()>>
<<set setup.activitytemplate[$dtquest.key] = $dtquest>>
<<set $qDebugActivityTemplate_key = $dtquest.key>>
<</link>>
[[(Back to edit activity)|ActivityGen]]
<br/>
<br/>
<<set _dom = setup.DOM.Menu.dev_content_generated_middle()>>
<<attach _dom>>
<</nobr>>
<div id='devtoolcoderesult' class='companycard'> <code>
"""::""" <<= $apassagesetup >> [nobr activity]
<<dtprintmeta>>
"""<<run new setup.ActivityTemplate({"""
key: '<<= $akey>>',
name: <<dtprinttitle>>
author: <<dtprintauthor>>
tags: <<dtprinttags>>
actor_unitgroups: <<dtprintactors>>
critical_traits: [
<<for _itrait, _trait range $dtquest.getCriticalTraits()>><<nobr>>
setup.trait.<<= _trait.key>>,
<</nobr>>
<</for>> ],
disaster_traits: [
<<for _itrait, _trait range $dtquest.getDisasterTraits()>><<nobr>>
setup.trait.<<= _trait.key>>,
<</nobr>>
<</for>> ],
restrictions: <<dtprintrestrictions 'restrictions'>>
rarity: <<= $dtquest.rarity.text() >>,
dialogues: [
<<= setup.DevToolHelper.printActivityDialogues($dtquest)>>
],
room_templates: [
<<for _room range $dtquest.getRoomTemplates()>><<nobr>>
setup.roomtemplate.<<= _room.key>>,
<</nobr>>
<</for>> ],
})>>
</code></div><<set $devtooltype = 'activity'>>
<<set $qcustomslaveorder = []>>
<<set $qcustomcriteria = []>>
<<set $qcustomunitgroup = []>>
<<set $qcustomtitle = []>>
<<set _akey = '__devtool_activity'>>
<<set _apassage = 'DummyActivityPassageDesc'>>
<<if _akey in setup.activitytemplate>>
<<run delete setup.activitytemplate[_akey]>>
<</if>>
<<if !_abase>>
<<set $dtquest = new setup.ActivityTemplate({
key: _akey,
name: '',
author: {name: '', url: ''},
tags: [],
actor_unitgroups: {
'a': [
setup.qres.Job(setup.job.slaver),
],
},
critical_traits: [],
disaster_traits: [],
restrictions: [],
rarity: setup.rarity.rare,
dialogues: [
setup.DialogueHelper.createEmptyDialogue('a'),
],
room_templates: [],
devtool: true,
})>>
<<else>>
<<set $dtquest = new setup.ActivityTemplate({
key: _akey,
name: _abase.getName(),
author: _abase.getAuthor(),
tags: _abase.getTags(),
actor_unitgroups: _abase.getActorUnitGroups(),
critical_traits: _abase.getCriticalTraits(),
disaster_traits: _abase.getDisasterTraits(),
restrictions: _abase.getPrerequisites(),
rarity: _abase.getRarity(),
dialogues: _abase.getDialoguesDevTool(),
room_templates: _abase.getRoomTemplates(),
devtool: true,
})>>
<</if>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<<dtrarity "$dtquest.rarity" $dtquest.rarity 'AGChooseRarity'>>
<<dttags $dtquest>>
<<dtactor $dtquest>>
<<dtrestriction "$dtquest.restrictions">>
<<set _dom = setup.DOM.Menu.devtoolactivity($dtquest)>>
<<attach _dom>>
<hr/>
<p class="center">
<<button 'CREATE ACTIVITY!'>>
<<run setup.DOM.Menu.devtoolverifycreate()>>
<</button>>
</p><<dtraritychoose 'AGChooseRarityDo'>><<set $dtquest.rarity = _raritychosen>>
<<gotowipehistory 'ActivityGen'>><div>
<<devtoolreturnbutton>>
</div>
<<set _dom = setup.DOM.Menu.devtoolactivityselectroom($dtquest)>>
<<attach _dom>><<if !$dtquest.name>>
<<warning 'Please give your quest / opportunity / event a name first.'>>
<<devgotoreturn>>
<</if>>
<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'))}],
]],
['Common races...', [
['Human (vale)...', {ug: _ugall.filter(a => a.key.startsWith('subrace_humanvale'))}],
['Human (kingdom)...', {ug: _ugall.filter(a => a.key.startsWith('subrace_humankingdom'))}],
['Human (desert)...', {ug: _ugall.filter(a => a.key.startsWith('subrace_humandesert'))}],
['Human (sea)...', {ug: _ugall.filter(a => a.key.startsWith('subrace_humansea'))}],
['Werewolf...', {ug: _ugall.filter(a => a.key.startsWith('subrace_werewolf'))}],
['Neko...', {ug: _ugall.filter(a => a.key.startsWith('subrace_neko'))}],
['Elf...', {ug: _ugall.filter(a => a.key.startsWith('subrace_elf'))}],
['Orc...', {ug: _ugall.filter(a => a.key.startsWith('subrace_orc'))}],
['Lizardkin...', {ug: _ugall.filter(a => a.key.startsWith('subrace_lizardkin'))}],
['Demonkin...', {ug: _ugall.filter(a => a.key.startsWith('subrace_demonkin'))}],
]],
['Rare races...', [
['Tigerkin...', {ug: _ugall.filter(a => a.key.startsWith('subrace_tigerkin'))}],
['Angel...', {ug: _ugall.filter(a => a.key.startsWith('subrace_angel'))}],
['Fairy...', {ug: _ugall.filter(a => a.key.startsWith('subrace_fairy'))}],
['Dragonkin...', {ug: _ugall.filter(a => a.key.startsWith('subrace_dragonkin'))}],
['Demon...', {ug: _ugall.filter(a => a.key.startsWith('subrace_demon') && !a.key.startsWith('subrace_demonkin'))}],
]],
['Persistent unit groups...', {ug: _ugall.filter(a => !(a.key in _customkeys) && a.reuse_chance)}],
['All unit groups...', {ug: _ugall.filter(a => !(a.key in _customkeys))}],
]>>
<<focwidget 'DisplayUnitGroup'>>
<<message $args[0]>>
<div class='card lorecard'>
<<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>>
<div>
<<message 'Contact...'>>
<<for _contact range setup.contacttemplate>>
<<if _contact.getTags().includes('hasunit')>>
<<set _text = `Select ${_contact.getName()}`>>
<<capture _contact>>
<div>
<<link _text>>
<<devroleaddunitgroup $qactorname _contact>>
<</link>>
</div>
<</capture>>
<</if>>
<</for>>
<</message>>
</div><<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_verythin>> counts for
<<rep setup.trait.muscle_thin>>, 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>>
<br/>
[[Favor based on unit value|AddonUnitValueToFavor]]Gain favor equal to:
<<numberbox '_value_to_favor' 0.025>> times the slave's value plus
<<numberbox '_crit_to_favor' 75>> times number of crit traits with:
<<for _icompany, _company range $company>>
<<capture _company>>
<<if _company != $company.player && _company != $company.independent>>
<div>
<<rep _company>>
<<button 'Select' 'SlaveOrderGen'>>
<<run $soaddons.push(setup.SlaveOrderAddon.UnitValueToFavor(
_company,
_value_to_favor,
_crit_to_favor
))>>
<</button>>
</div>
<</if>>
<</capture>>
<</for>>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_verythin>> counts for
<<rep setup.trait.muscle_thin>>, 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>>
<<set _choose_traits_attachable = false>>
<<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>>
<<set _choose_traits_attachable = false>>
<<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'>>
<<case 'activity'>>
<<include 'CodeEditorPreviewActivity'>>
<<default>>
[Preview not supported for this content]
<</switch>>
<</focwidget>><aside>
<<set _actors = setup.DevToolHelper.getActors()>>
Actors:
<<link '(reset quest)'>>
<<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>
<<set _dom = setup.DOM.Roster.codeeditorreplaceunit()>>
<<attach _dom>><<questvarload $compiledquest>>
<<include 'CodeEditorPreviewContextDetails'>>
<<run $notification.popAll()>>
<div>
<<printreplace setup.DevToolHelper.debugDevToolTwine(_devpreviewvalue)>>
</div>
<div>
<<notificationscard>>
</div><<if !$compiledquest>>
<<set setup.interaction[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<include 'CodeEditorPreviewDisplayText'>><<if !$compiledquest>>
<<set setup.opportunitytemplate[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<include 'CodeEditorPreviewDisplayText'>><<if !$compiledquest>>
<<set setup.event[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<include 'CodeEditorPreviewDisplayText'>><<set _outcome = 'crit'>>
<<switch _devpreviewvar>>
<<case '$qoutcomedesc[1]'>>
<<set _outcome = 'success'>>
<<case '$qoutcomedesc[2]'>>
<<set _outcome = 'failure'>>
<<case '$qoutcomedesc[3]'>>
<<set _outcome = 'disaster'>>
<</switch>>
/* Hack for quests, since their outcomes can roll into the next */
<<if _devpreviewvar == '$qoutcomedesc[3]' && !$qoutcomedesc[3].trim()>>
<<set _devpreviewvar = '$qoutcomedesc[2]'>>
<<set _devpreviewvalue = $qoutcomedesc[2]>>
<</if>>
<<if _devpreviewvar == '$qoutcomedesc[2]' && !$qoutcomedesc[2].trim()>>
<<set _devpreviewvar = '$qoutcomedesc[1]'>>
<<set _devpreviewvalue = $qoutcomedesc[1]>>
<</if>>
<<if _devpreviewvar == '$qoutcomedesc[1]' && !$qoutcomedesc[1].trim()>>
<<set _devpreviewvar = '$qoutcomedesc[0]'>>
<<set _devpreviewvalue = $qoutcomedesc[0]>>
<</if>>
/* 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)>>
<<else>>
<<set $compiledquest.outcome = _outcome>>
<</if>>
<<run $notification.popAll()>>
<<include 'CodeEditorPreviewDisplayText'>><<if !$compiledquest>>
<<set setup.activitytemplate[$dtquest.key] = $dtquest>>
<<set $compiledquest = $dtquest.debugMakeInstance()>>
<</if>>
<<run $notification.popAll()>>
<<include 'CodeEditorPreviewDisplayText'>><p>Gain the following contact:</p>
<<for _bt range Object.values(setup.contacttemplate).filter(contact => !contact.getTags().includes('hasunit'))>>
<div>
<<capture _bt>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qc.Contact(_bt)>>
<</button>>
<</capture>>
<<rep _bt>>
</div>
<</for>><p>Gain <<devactordefault>> as the following contact:</p>
<<for _bt range Object.values(setup.contacttemplate).filter(contact => contact.getTags().includes('hasunit'))>>
<div>
<<capture _bt>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qc.Contact(_bt, $qgDefaultActorName)>>
<</button>>
<</capture>>
<<rep _bt>>
</div>
<</for>><p>Lose the following contact:</p>
<<for _bt range Object.values(setup.contacttemplate)>>
<div>
<<capture _bt>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qc.ContactLose(_bt)>>
<</button>>
<</capture>>
<<rep _bt>>
</div>
<</for>>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>>Lose an equipment:
<<for _ieq, _eq range setup.equipment>>
<<capture _eq>>
<br/>
<<rep _eq>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.EquipmentLose(_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>><p>
The following event cannot be generated in the next
<<numberbox "_cooldown" 200>> weeks:
</p>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'QGCostDone'>>
<<set $qcost = setup.qc.SetCooldownEvent(_event, _cooldown)>>
<</link>>
<br/>
<</capture>>
<</for>>This event cannot be generated in the next <<numberbox '_cooldown' 200>> weeks.
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.SetCooldownEvent(null, _cooldown)>>
<</link>>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>>Gain an item, unless you already have the item, then nothing happens:
<<for _iitem, _item range setup.item>>
<<capture _item>>
<br/>
<<rep _item>>
<<link '(select this)' 'QGCostDone'>>
<<set $qcost = setup.qc.ItemIfNew(_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'>><p>
The following opportunity cannot be generated in the next
<<numberbox "_cooldown" 200>> weeks:
</p>
<<devchooseopportunity 'CostSetCooldownOpportunityDo'>><<set $qcost = setup.qc.SetCooldownOpportunity(_opportunitychosen, _cooldown)>>
<<gotowipehistory 'QGCostDone'>>This opportunity cannot be generated in the next <<numberbox '_cooldown' 200>> weeks.
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.SetCooldownOpportunity(null, _cooldown)>>
<</link>><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>><<set $qcost = setup.qc.Outcomes('crit')>>
<<gotowipehistory 'QGCostDone'>><<set $qcost = setup.qc.Outcomes('success')>>
<<gotowipehistory 'QGCostDone'>><<set $qcost = setup.qc.Outcomes('failure')>>
<<gotowipehistory 'QGCostDone'>><<set $qcost = setup.qc.Outcomes('disaster')>>
<<gotowipehistory 'QGCostDone'>><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>><p>
The following quest cannot be generated in the next
<<numberbox "_cooldown" 200>> weeks:
</p>
<<devchoosequest 'CostSetCooldownQuestDo'>><<set $qcost = setup.qc.SetCooldownQuest(_questchosen, _cooldown)>>
<<gotowipehistory 'QGCostDone'>>This quest cannot be generated in the next <<numberbox '_cooldown' 200>> weeks.
<<link 'Add cost' 'QGCostDone'>>
<<set $qcost = setup.qc.SetCooldownQuest(null, _cooldown)>>
<</link>><<set $qcost = setup.qc.QuestDirectSelf()>>
<<gotowipehistory 'QGCostDone'>><p>
Select the roles in the newly generated quest that you want to assign with roles
in the current quest:
</p>
<p>
<<devquestroles $dtquest>>
</p>
<<link '(Done)' 'QGCostDone'>>
<<set $qcost = setup.qc.QuestDirectSelf(setup.deepCopy($qdevquestroles))>>
<<unset $qdevquestroles>>
<</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>><p>
Do all of the following, but mask the description. Instead, show:
<<textbox '_description' ''>>.
</p>
<<link '(Continue)' 'QGCostDone'>>
<<set $qcost = setup.qc.HideAll([], _description)>>
<</link>><b>Do all of the following, but mask the description and show "<<= _entry.explain()>>" instead:</b><<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.AllUnitSatisfyDo([], [])>>
<<gotowipehistory 'QGCostDone'>><b>For all units that satisfy</b><b>Do:</b><<set $qcost = setup.qc.OneRandom([])>>
<<gotowipehistory 'QGCostDone'>><b>A random effect out of:</b><<set $qcost = setup.qc.OneRandomSeed([])>>
<<gotowipehistory 'QGCostDone'>><div class='helpcard'>
When seeded, the randomness is determined by the quest's "seed" value.
Each quest will be assigned a random seed value at the start, but this value will not
change throughout the quest.
This seed value is then modulo'd by the number of outcomes, to determine which one to get.
<br/>
<br/>
For example, with three outcomes, then the first outcome will occur when
"""
gQuest.getSeed() % 3 == 0,
"""
the second outcome will occur when
"""
gQuest.getSeed() % 3 == 1,
"""
and the third outcome will occur when
"""
gQuest.getSeed() % 3 == 2
"""
This can then be used during writing, so you can write the quest based on which outcome.
<br/>
<br/>
You can condition upon this in Content Creator, by going to: This, then If... seed.
</div><b>A SEEDED <<message '(?)'>>
<<include 'CostSeedHelpText'>>
<</message>>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>
Bless <<devactordefault>> with
<<numberbox '_amount' 1>> stacks of a random blessing.
Each stack is worth <<money 2500>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Blessing($qgDefaultActorName, _amount, null, false)>>
<</link>><p>
Bless <<devactordefault>> with
<<numberbox '_amount' 1>> stacks of a random curse.
Each stack is worth <<money -2500>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Blessing($qgDefaultActorName, _amount, null, true)>>
<</link>><<include LoadSelectTrait>>
<p>
Bless / Curse <<devactordefault>> with
<<numberbox '_amount' 1>> stacks of the following blessing / curse.
Each blessing stack is worth <<money 2500>>, while
each curse stack is worth <<money -2500>>.
</p>
<<selecttrait 'CostBlessingDo' setup.TraitHelper.getAllTraitsOfTags(['blessingcursemax'])>><<set $qcost = setup.qc.Blessing($qgDefaultActorName, _amount, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><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>
<<devactordefault>> copies
<<devactor '$qgDefaultActorName2'>>'s body.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.BodyswapOneDirection($qgDefaultActorName, $qgDefaultActorName2)>>
<</link>><p>
Randomly corrupt <<devactordefault>>
<<numberbox '_amount' 1>> times.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Corrupt($qgDefaultActorName, null, _amount)>>
<</link>><p>
Randomly <<dangertext 'PERMANENTLY'>> corrupt <<devactordefault>>.
<<message '(?)'>>
<div class='helpcard'>
Permanent corruption has a much lower chance to misfire, and cannot be purified.
</div>
<</message>>
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.PermanentlyCorrupt($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' 'killed a demon lord.'>>
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>.
<<successtextlite 'Use past tense.'>>
<<include 'CostWasHelpText'>>
<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' 'a|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>>Unit <<devactordefault>> gains exp equal to <<numberbox "_weeks" 1>> weeks of questing.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.ExpUnit($qgDefaultActorName, _weeks)>>
<</link>>Unit <<devactordefault>> is mindbroken.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Mindbreak($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>
<p>
<<dangertext "Important:">>
Please make sure that whichever units that will become missing forever
is not in a party. This can be checked by using the Restriction named:
"Not in Party"
</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' 'a|was'>>.
For example, you can write "a|was a slave corrupted into a slaver".
(Leave blank to keep old flavor text. The a|was syntax will automatically convert it to either
was or were)
</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>><p>
Gain favor equal to <<devactordefault>>'s value multiplied by
<<numberbox '_multiplier' 0.05>>. (Remember that the actual number shown in the game is ten times multiplied by this.)
</p>
<<focwidget 'costrelationshipwidget'>>
<<set $qcost = setup.qc.FavorUnitValue($qgDefaultActorName, _company, _multiplier)>>
<</focwidget>>
<<include 'CostFavorChoose'>><div>
Give <<devactordefault>> the nickname: <<textbox '_nickname' ''>>.
</div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Nickname($qgDefaultActorName, _nickname)>>
<</link>><div>
Give <<devactordefault>> the first name: <<textbox '_nickname' ''>>.
</div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.FirstName($qgDefaultActorName, _nickname)>>
<</link>><div>
Give <<devactordefault>> the surname: <<textbox '_nickname' ''>>.
</div>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Surname($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, _chosentraits)>>
<</link>>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>><<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>>Unit <<devactordefault>> is forcefully made into a retiree.
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Retire($qgDefaultActorName)>>
<</link>><div>
Boost <<devactordefault>>'s skill permanently by 1 point.
This is worth <<money 15000>>.
<<include "SkillBoostHelpText">>
</div>
<<for _skill range setup.skill>>
<<capture _skill>>
<<button _skill.rep() 'QGCostDone'>>
<<set $qcost = setup.qc.SkillBoost($qgDefaultActorName, _skill)>>
<</button>>
<</capture>>
<</for>>(The "a|was" syntax will automatically be converted in game to either was or were, depending
on the subject. E.g., "a|was here" becomes either "you were here" or "Bob was here".
A similar syntax exists for is/are: "a|is".)<p>
Gain slave: <<devactordefault>> with the following background.
The slave <<textbox '_background' 'a|was'>>.
For example, you can write "a|was a farmer".
<<include 'CostWasHelpText'>>
<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' 'a|was'>>.
For example, you can write "a|was a farmer".
<<include 'CostWasHelpText'>>
<br/>
The slave will need to be <<dangertextlite 'bought'>> to get.
The price is multiplied by <<numberbox '_multi' 1>>.
</p>
<br/>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slave($qgDefaultActorName, _background, /* mercenary = */ true, _multi)>>
<</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' 'a|was'>>.
For example, you can write "a|was a hunter".
<<include 'CostWasHelpText'>>
<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' 'a|was'>>.
For example, you can write "a|was a hunter".
<<include 'CostWasHelpText'>>
<br/>
The slaver needs to be <<dangertextlite 'paid'>> money to join your company.
The price is multiplied by <<numberbox '_multi' 1>>.
</p>
<<link 'Done' 'QGCostDone'>>
<<set $qcost = setup.qc.Slaver($qgDefaultActorName, _background, /* mercenary = */ true, _multi)>>
<</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' setup.TraitHelper.getAttachableTraitsInContentCreator()>><<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_thin will have the trait disappear.)
<</message>>
<br/>
<<selecttrait 'CostTraitDo' setup.TraitHelper.getAttachableTraitsInContentCreator()>><<set $qcost = setup.qc.Trait($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<<devactordefault>> loses the following exact trait, if they have it:
<br/>
<<selecttrait 'CostTraitRemoveDo' setup.TraitHelper.getAttachableTraits()>><<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>
<<set _choose_traits_attachable = true>>
<<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_angel.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_angel.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_verythin>> and gained
<<rep setup.trait.muscle_verystrong>>, then the unit will now have
<<rep setup.trait.muscle_thin>>.
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>
<<set _choose_traits_attachable = true>>
<<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>
<<set _choose_traits_attachable = true>>
<<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>
<<set _choose_traits_attachable = true>>
<<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>
<<set _choose_traits_attachable = true>>
<<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 trait, if they ALREADY have a variation of it:
<<message '(?)'>>
<div class='helpcard'>>
For example, if you choose large_dick, then it will give it a large dick ONLY
if it already have some sort of dick before.
</div>
<</message>>
<br/>
<<selecttrait 'CostTraitReplaceExistingDo' setup.TraitHelper.getAllTraitsOfTags(['decreasable'])>><<set $qcost = setup.qc.TraitReplaceExisting($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<div>
<<devactordefault>> gain and can learn the following perk:
</div>
<<selecttrait 'CostPerkChoiceDo' setup.TraitHelper.getAllTraitsOfTags(['perkspecial'])>><<set $qcost = setup.qc.PerkChoice($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<include LoadSelectTrait>>
<div>
<<devactordefault>> loses access to the following perk (the perk will also get removed if they happen to already learn it):
</div>
<<selecttrait 'CostRemovePerkChoiceDo' setup.TraitHelper.getAllTraitsOfTags(['perkspecial'])>><<set $qcost = setup.qc.RemovePerkChoice($qgDefaultActorName, $rTrait)>>
<<gotowipehistory 'QGCostDone'>><<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.
One week of boon is worth <<money 100>> per unit.
(E.g., 3 units each getting 5 weeks of boon is <<money 1500>>)
<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>>
<<button 'Select' 'QGCostDone'>>
<<set $qcost = setup.qc.EmptyUnitGroup(_ug)>>
<</button>>
<</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>>
<<button 'Select' 'QGCostDone'>>
<<set $qcost = setup.qc.AddUnitToUnitGroup($qgDefaultActorName, _ug)>>
<</button>>
<</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='card lorecard'>
<<if $qCostActualNonCost>>
<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 <<successtext 'critical success'>>,
assuming no other rewards.
<</message>>
</div>
<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 <<successtextlite 'success'>>,
assuming no other rewards.
<</message>>
</div>
<div>
[["Gain money based on unit's value"|CostMoneyUnitValue]]
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</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>
<div>
[["Gain favor based on unit's value"|CostFavorUnitValue]]
<<message '(?)'>>
<div class='helpcard'>
Gain favor equal to a fraction of a slave's value.
</div>
<</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>
<div>
[['Gain an item unless you already have it'|CostItemIfNew]]
</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>
<div>
[['Lose an equipment'|CostLoseEquipment]]
</div>
<</if>>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<div>
<<message 'Quests / Mails / Event / Slave order...'>>
<div class='marketobjectcard'>
<<if $devtooltype == 'quest'>>
<div>
[['Set cooldown for this quest'|CostSetCooldownQuestSelf]]
</div>
<<elseif $devtooltype == 'opportunity'>>
<div>
[['Set cooldown for this opportunity'|CostSetCooldownOpportunitySelf]]
</div>
<<elseif $devtooltype == 'event'>>
<div>
[['Set cooldown for this event'|CostSetCooldownEventSelf]]
</div>
<</if>>
<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>
<div>
[['Set a quest cooldown'|CostSetCooldownQuest]]
<<message '(?)'>>
<div class='helpcard'>
This will prevent a certain quest from being spawned in the next few weeks.
For example, you can prevent a certain quest from being respawned in the next 10 weeks
when you get a critical success.
</div>
<</message>>
</div>
<<if $devtooltype == 'quest'>>
<div>
<<message 'Gain the current quest...'>>
<div class='card lorecard'>
<div>
[['Gain the current quest'|CostQuestDirectSelf]]
</div>
<div>
[['Gain the current quest (chained)'|CostQuestDirectSelfRoles]]
</div>
</div>
<</message>>
</div>
<</if>>
<hr/>
<div><b>Opportunity</b></div>
<div>
[['Gain an opportunity'|CostOpportunity]]
</div>
<div>
[['Gained a chained opportunity'|CostOpportunityRoles]]
</div>
<div>
[['Set an opportunity cooldown'|CostSetCooldownOpportunity]]
<<message '(?)'>>
<div class='helpcard'>
This will prevent a certain opportunity from being spawned in the next few weeks.
For example, you can prevent a certain opportunity from being respawned in the next 10 weeks
when you get a critical success on another quest.
</div>
<</message>>
</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>
<div>
[['Set an event cooldown'|CostSetCooldownEvent]]
<<message '(?)'>>
<div class='helpcard'>
This will prevent a certain event from being triggered in the next few weeks.
For example, you can prevent a certain event from being respawned in the next 10 weeks
when you get a critical success on another quest.
</div>
<</message>>
</div>
<hr/>
<div><b>Slave order</b></div>
<div>
[['Gain a slave order'|CostSlaveOrder]]
</div>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost && $devtooltype == 'quest'>>
<div>
<<message 'Outcomes from other quest results...'>>
<div class='marketobjectcard'>
<div>
<<message '(Help)'>>
<div class='helpcard'>
Selecting these will apply all the outcomes of another result
of the quest.
For example, if your quest has the same outcomes on all results,
then you can just fill the outcomes on critical, and then
for all the other outcomes, select the "Do all CRIT outcomes".
</div>
<</message>>
</div>
<div>
[["Do all CRIT outcomes"|CostOutcomesCrit]]
</div>
<div>
[["Do all SUCCESS outcomes"|CostOutcomesSuccess]]
</div>
<div>
[["Do all FAILURE outcomes"|CostOutcomesFailure]]
</div>
<div>
[["Do all DISASTER outcomes"|CostOutcomesDisaster]]
</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='card lorecard'>
<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='card lorecard'>
<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, Blessing, Curse...'>>
<div class='marketobjectcard'>
<div><b>Injury</b></div>
<div>
[['Injure unit'|CostInjury]]
</div>
<div>
[['Heal unit'|CostHeal]]
</div>
<hr/>
<div><b>Blessing / Curse</b></div>
<div>
[['Randomly bless unit'|CostBlessingRandom]]
</div>
<div>
[['Randomly curse unit'|CostCurseRandom]]
</div>
<div>
[['Bless / curse unit with a specific blessing / curse'|CostBlessing]]
</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>
[['PERMANENTLY corrupt unit'|CostPermanentlyCorrupt]]
<<message '(?)'>>
<div class='helpcard'>
Gives a random permanent corruption. Permanent corruption cannot be purified.
</div>
<</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_verythin>> will get <<rep setup.trait.muscle_thin>>.
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>
[['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_verythin>>
slaver that gains a <<rep setup.trait.muscle_verystrong>> will end up with
<<rep setup.trait.muscle_thin>>.
But if the <<rep setup.trait.muscle_verythin>> 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>
[['Mindbreak'|CostMindbreak]]
<<message '(?)'>>
<div class='helpcard'>
Use this to add the <<rep setup.trait.training_mindbreak>>, so that
the incompatible traits are cleared out.
</div>
<</message>>
</div>
<hr/>
<div><b>Genitals</b></div>
<div>
[['Increase genital size (if any)'|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 genital (if any)'|CostTraitReplaceExisting]]
<<message '(?)'>>
Replaces an existing trait, if the unit already have it.
Mostly useful for growing existing physical attributes such as
<<rep setup.trait.dick_large>> or <<rep setup.trait.breast_large>>.
<</message>>
</div>
<hr/>
<div><b>Random</b></div>
<div>
<<message 'Gain random traits...'>>
<div class='card lorecard'>
<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='card lorecard'>
<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>Skill boost</b></div>
<div>
[["Permanently boost a unit's skill"|CostSkillBoost]]
</div>
<hr/>
<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>
<div>
[["Change unit's first name"|CostFirstName]]
<<dangertext 'Use with caution'>>
<<message '(?)'>>
Use this sparingly, and consider generating the unit's name randomly
and give them a nickname instead.
<</message>>
</div>
<div>
[["Change unit's surname"|CostSurname]]
<<dangertext 'Use with caution'>>
<<message '(?)'>>
Use this sparingly, and consider generating the unit's name randomly
and give them a nickname instead.
<</message>>
</div>
<hr/>
<div><b>Exp, Level, Perk</b></div>
<div>
[["Unit gains some extra EXP"|CostExpUnit]]
</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>
<div>
[["Gain perk choice and learn it"|CostPerkChoice]]
</div>
<div>
[["Lose perk choice"|CostRemovePerkChoice]]
</div>
<div>
[['Retire unit'|CostRetire]]
</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>
[["Remove actor from unit group"|CostRemoveFromUnitGroup]]
<<message '(?)'>>
Removes the unit from their unit group. Only relevant for units that are generated
from persistent unit groups, such as the "Missing Slavers" unit groups
or custom-made unit groups.
Will also delete the unit if they are no longer referred to by any quest.
<</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'>
<div><b>Conditional</b></div>
<div>
[['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>>
</div>
<hr/>
<div><b>Do all</b></div>
<div>
[['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>>
</div>
<div>
[['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>
<div>
[['Do all, but mask description'|CostHideAll]]
<<message '(?)'>>
Like "Do all of the following", but will hide the description from the players,
and instead show some other texts.
<</message>>
</div>
<hr/>
<div><b>Do one at random</b></div>
<div>
[['Do one at random'|CostOneRandom]]
<<message '(?)'>>
One of these outcomes are chosen COMPLETELY at random.
<</message>>
</div>
<div>
[['Do one at random (SEEDED)'|CostOneRandomSeed]]
<<message '(?)'>>
One of these outcomes are chosen at random, depending on the quest's SEED value.
<br/>
<br/>
<<include 'CostSeedHelpText'>>
<</message>>
</div>
<hr/>
<div><b>Loop</b></div>
<div>
[['For all unit that satisfy (restriction) do (outcome)'|CostAllUnitSatisfyDo]]
</div>
</div>
<</message>>
</div>
<</if>>
<<if $qCostActualNoUnit && $qCostActualNonCost>>
<<message 'All Others...'>>
<div class='marketobjectcard'>
<div><b>Misc.</b></div>
<div>
<<message 'Variables...'>>
<div class='card lorecard'>
<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='card lorecard'>
<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='card lorecard'>
<div>
[['Friendship / Rivalry'|CostFriendship]]
</div>
<div>
[['Make lovers'|CostHookup]]
</div>
<div>
[['Break up lovers'|CostBreakup]]
</div>
</div>
<</message>>
</div>
<div>
[['Swap bodies'|CostBodyswap]]
<<message '(?)'>>
<div class='helpcard'>
Swapping bodies will exchange all physical traits between the units including race
and gender.
<br/>
<br/>
Take care <<dangertext 'not to bodyswap slavers with unit of the opposite gender!'>>
This cause inconsistency problems with existing quests.
Slaves and NPCs on the other hand are free to gender-swap as you like.
</div>
<</message>>
</div>
<div>
[['Copy body (one direction)'|CostBodyswapOneDirection]]
<<message '(?)'>>
<div class='helpcard'>
A unit copy another unit's body, but not the other way around.
<br/>
<br/>
Take care <<dangertext 'not to let slavers copy the body of a unit of the opposite gender!'>>
This cause inconsistency problems with existing quests.
Slaves and NPCs on the other hand are free to gender-swap as you like.
</div>
<</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>Contact</b></div>
<div>
[["Gain a unit-less contact"|CostContactNoUnit]]
</div>
<div>
[["Gain a unit as contact"|CostContactHasUnit]]
</div>
<div>
[["Lose a contact"|CostContactLose]]
</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>
<!--
Reload crcrit and crdisaster since their trait objects might be already obsolete
-->
<<set $crcrit = $crcrit.map(trait => setup.trait[trait.key])>>
<<set $crdisaster = $crdisaster.map(trait => setup.trait[trait.key])>>
<<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>>
<<run _dom = setup.DOM.Menu.traitpickermulti({raw_traits: Object.values(setup.trait), init_selected: $crcrit})>>
<<attach _dom>>
</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>>
<<run _dom = setup.DOM.Menu.traitpickermulti({raw_traits: Object.values(setup.trait), init_selected: $crdisaster})>>
<<attach _dom>>
</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>>
<<set _criteria = new setup.UnitCriteria(
null, /* key */
$crname,
$crcrit,
$crdisaster,
$crrestrictions,
$crskillmultis,
)>>
<<set _val = _criteria.validate()>>
<<if _val>>
<<run alert(_val)>>
<<else>>
<<run $qcustomcriteria.push(_criteria)>>
<<dtloadpassage>>
<<goto 'QGAddRole'>>
<</if>>
<</if>>
<</link>><<unset _selbuilding>>
<div>
<<button 'Cancel'>>
<<run Dialog.close()>>
<</button>>
</div>
<div>
<<for _building range Object.values(setup.buildingtemplate)>>
<<capture _building>>
<div>
<<set _text = _building.rep()>>
<<button _text>>
<<set _selbuilding = _building>>
<<run Dialog.close()>>
<</button>>
</div>
<</capture>>
<</for>>
</div><<unset _selequipment>>
<div>
<<button 'Cancel'>>
<<run Dialog.close()>>
<</button>>
</div>
<div>
<<for _equipment range Object.values(setup.equipment)>>
<<capture _equipment>>
<div>
<<set _text = _equipment.rep()>>
<<button _text>>
<<set _selequipment = _equipment>>
<<run Dialog.close()>>
<</button>>
</div>
<</capture>>
<</for>>
</div><<unset _selitem>>
<div>
<<button 'Cancel'>>
<<run Dialog.close()>>
<</button>>
</div>
<div>
<<for _item range Object.values(setup.item)>>
<<capture _item>>
<div>
<<set _text = _item.rep()>>
<<button _text>>
<<set _selitem = _item>>
<<run Dialog.close()>>
<</button>>
</div>
<</capture>>
<</for>>
</div><<unset _sellore>>
<div>
<<button 'Cancel'>>
<<run Dialog.close()>>
<</button>>
</div>
<div style="display: flex; flex-wrap: wrap">
<<for _lore range Object.values(setup.lore)>>
<<capture _lore>>
<<set _tag = setup.TagHelper.tagRep('lore', _lore.getTags())>>
<<set _text = _tag + _lore.rep()>>
<<button _text>>
<<set _sellore = _lore>>
<<run Dialog.close()>>
<</button>>
<</capture>>
<</for>>
</div><<nobr>>
<<set _dom = setup.DOM.Menu.dev_content_generated_begin()>>
<<attach _dom>>
<<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/>
<<set _dom = setup.DOM.Menu.dev_content_generated_middle()>>
<<attach _dom>>
<</nobr>>
<div id='devtoolcoderesult' class='companycard'> <code>
"""::""" <<= $epassagesetup >> [nobr event]
<<dtprintmeta>>
"""<<run new setup.Event("""
'<<= $ekey>>', """/* key */"""
<<dtprinttitle>>
<<dtprintauthor>>
<<dtprinttags>>
'<<= $epassagedesc>>',
{ """/* roles (LEGACY) */"""
<<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'>>
<<if $dtquest.cooldown == setup.EVENT_DEFAULT_COOLDOWN>>setup.EVENT_DEFAULT_COOLDOWN<<else>><<= $dtquest.cooldown >><</if>>, """/* Cooldown */"""
<<= $dtquest.rarity.text() >>, """/* Rarity */"""
)>>
"""::""" <<= $epassagedesc >> [nobr]
<<= setup.devToolFormat($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 */
{name: '', url: ''}, /* author */
[], /* tags */
_epassage, /* desc passage */
[], /* unit restrictions */
{}, /* actors */
[], /* outcomes */
[], /* requirements */
setup.EVENT_DEFAULT_COOLDOWN, /* cooldown */
setup.rarity.never, /* 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 'EGChooseRarity'>>
<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='card livingcard'>
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!'>>
<<run setup.DOM.Menu.devtoolverifycreate()>>
<</button>>
</p>
</div><<dtraritychoose 'EGChooseRarityDo'>><<set $dtquest.rarity = _raritychosen>>
<<gotowipehistory 'EventGen'>><<nobr>>
<<set _dom = setup.DOM.Menu.dev_content_generated_begin()>>
<<attach _dom>>
<<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/>
<<set _dom = setup.DOM.Menu.dev_content_generated_middle()>>
<<attach _dom>>
<</nobr>>
<div id='devtoolcoderesult' 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.devToolFormat($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 */
{name: '', url: ''}, /* 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!'>>
<<run setup.DOM.Menu.devtoolverifycreate()>>
<</button>>
</p>
</div><<run Config.history.maxStates = 3>>
<<run Config.saves.autosave = ["autosave"]>>
<<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='card lorecard'>
<div>
<b>New Quest</b>
<<message '(?)'>>
<div class='helpcard'>
Create a new quest.
<br/>
<br/>
There are no tutorial for making a new quest, because it is very easy and intuitive
to do now! Hop in with the recommended option below to try it out!
</div>
<</message>>
</div>
<div>
<<link 'Create new quest based on existing quest' 'QuestGenSetupExisting'>>
<</link>>
<b>recommended</b>
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
</div>
<div>
<<link 'Create new from scratch' 'QuestGen'>>
<<set _qbase = null>>
<<include 'QuestGenSetup'>>
<</link>>
</div>
</div>
<div class='opportunitycard'>
<div>
<b>New Mail / Opportunity</b>
<<message '(?)'>>
<div class='helpcard'>
Create a new opportunity.
Opportunity and mails are the same thing.
</div>
<</message>>
</div>
<div>
<<link 'Create new opportunity based on existing opportunity' 'OpportunityGenSetupExisting'>>
<</link>>
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
</div>
<div>
<<link 'Create new opportunity from scratch' 'OpportunityGen'>>
<<set _obase = null>>
<<include 'OpportunityGenSetup'>>
<</link>>
</div>
</div>
<div class='equipmentsetcard card'>
<div>
<b>New Event</b>
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
</div>
<div>
<<link 'Create new event based on existing event' 'EventGenSetupExisting'>>
<</link>>
</div>
<div>
<<link 'Create new event from scratch' 'EventGen'>>
<<set _ebase = null>>
<<include 'EventGenSetup'>>
<</link>>
</div>
</div>
<div class='companycard'>
<div>
<b>New Interaction</b>
<<message '(?)'>>
<div class='helpcard'>
Create a new interaction, either between you and a slave, or between you and a slaver (or sometimes both).
This is rarely used, but can be useful when a unit has a specific interaction you can do with them,
e.g., shapeshifters have a specific bodyshift interaction.
Previously, this is also used for describing sex, but sex has been moved to its own dedicated
game system now (interactive sex).
</div>
<</message>>
</div>
<div>
<<link 'Create new interaction based on existing interaction' 'InteractionGenSetupExisting'>>
<</link>>
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
</div>
<div>
<<link 'Create new interaction from scratch' 'InteractionGen'>>
<<set _ibase = null>>
<<include 'InteractionGenSetup'>>
<</link>>
</div>
</div>
<div class='card livingcard'>
<div>
<b>New Activity</b>
<<message '(?)'>>
<div class='helpcard'>
Create a new activity, which is the random engagement your slavers will do each week on your fort.
This has no gameplay effects, and is purely flavor.
</div>
<</message>>
</div>
<div>
<<link 'Create new activity based on existing activity' 'ActivityGenSetupExisting'>>
<</link>>
<<message '(?)'>>
<div class='helpcard'>
Using this option, some of your activity details such as the possible rooms and rarity 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.
</div>
<</message>>
</div>
<div>
<<link 'Create new activity from scratch' 'ActivityGen'>>
<<set _abase = null>>
<<include 'ActivityGenSetup'>>
<</link>>
</div>
</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()>>
<<set _eventchosen = _event>>
<<include 'EventGenSetupExistingDo'>>
<</link>>
<br/>
<</capture>>
<</for>><<set _ebase = _eventchosen>>
<<include 'EventGenSetup'>>
<<goto 'EventGen'>>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>><<include 'LoadDevWidgets'>>
<<devchooseactivity 'ActivityGenSetupExistingDo'>><<set _abase = _activitychosen>>
<<include 'ActivityGenSetup'>>
<<goto 'ActivityGen'>><<nobr>>
<<set _dom = setup.DOM.Menu.dev_content_generated_begin()>>
<<attach _dom>>
<<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].description_passage = `DummyOpportunityPassage${_ioption}`>>
<<set $dtquest.options[_ioption].outcome_passage = `DummyOpportunityPassageFlavor${_ioption}`>>
<</for>>
<<set $qDebugOpportunityTemplate_key = $dtquest.key>>
<<focgoto 'OpportunityDebugDo'>>
<</link>>
[[(Back to edit opportunity)|OpportunityGen]]
<br/>
<br/>
<<set _dom = setup.DOM.Menu.dev_content_generated_middle()>>
<<attach _dom>>
<</nobr>>
<div id='devtoolcoderesult' 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/>
description_passage: 'Opportunity_<<= $okey>>_<<= _ioption>>',
<br/>
<<if $ooptiondesc[_ioption]>>
outcome_passage: 'Opportunity_<<= $okey>>_<<= _ioption>>_flavor',
<<else>>
outcome_passage: null,
<</if>>
<br/>
costs: [ """/* costs */"""
<<for _icost, _cost range _option.costs>>
<br/>
<<= _cost.text()>>,
<</for>>
<br/>
],
<br/>
restrictions: [ """/* restrictions */"""
<<for _irestriction, _restriction range _option.restrictions>>
<br/>
<<= _restriction.text()>>,
<</for>>
<br/>
],
<br/>
outcomes: [ """/* outcomes */"""
<<for _ioutcome, _outcome range _option.outcomes>>
<br/>
<<= _outcome.text()>>,
<</for>>
<br/>
],
<br/>
visibility_restrictions: [
<<for _irestriction, _restriction range _option.visibility_restrictions>>
<br/>
<<= _restriction.text()>>,
<</for>>
<br/>
],
<br/>
},
<</for>>
<</nobr>>
],
<<dtprintquestpool $opool $orarity>>
<<dtprintrestrictions 'prerequisites'>>
<<dtprintactors>>
<<dtprintexpirationoutcomes>>
<<= $dtquest.isMustBeAnswered()>>, """ /* is must be answered */ """
)>>
"""::""" <<= $opassagedesc >> [nobr]
<<= setup.devToolFormat($odesc)>>
<<for _ioption, _option range $dtquest.options>>
"""::""" Opportunity_<<= $okey>>_<<= _ioption>> [nobr]
<<= setup.devToolFormat($ooptiontitle[_ioption])>>
<<if $ooptiondesc[_ioption]>>
"""::""" Opportunity_<<= $okey>>_<<= _ioption>>_flavor [nobr]
<<= setup.devToolFormat($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 = setup.rarity.never>>
<<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 */
{name: '', url: ''}, /* 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.outcome_passage>>
<<set _optiondesc = Story.get(_option.outcome_passage).text>>
<</if>>
<<run $ooptiondesc.push(_optiondesc)>>
<<run $ooptiontitle.push(Story.get(_option.description_passage).text)>>
<<run _ooptions.push({
description_passage: `DummyOpportunityPassage${_ioption}`,
outcome_passage: `DummyOpportunityPassageFlavor${_ioption}`,
costs: _option.costs,
restrictions: _option.restrictions,
outcomes: _option.outcomes,
visibility_restrictions: _option.visibility_restrictions,
})>>
<</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 */
)>>
/* pool and rarity */
<<set _poolrarity = _obase.getAnyQuestPoolRarity()>>
<<if _poolrarity>>
<<set $opool = _poolrarity.pool>>
<<set $orarity = _poolrarity.rarity>>
<</if>>
<</if>><<run setup.DevToolHelper.restoreScrollPos()>>
<<dtauthor "$dtquest.author" $dtquest.author>>
<<dtname "$dtquest.name" $dtquest.name>>
<<dtquestpool "$opool" $opool 'OGChooseQuestPool'>>
<<dtrarity "$orarity" $orarity 'OGChooseRarity'>>
<<dtdifficulty $dtquest 'OGChooseDifficulty'>>
<<dttags $dtquest>>
<<dtactor $dtquest>>
<<dtrestriction '$dtquest.prerequisites'>>
<div class='questcard'>
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({
description_passage: `DummyOpportunityPassage${_i}`,
outcome_passage: `DummyOpportunityPassageFlavor${_i}`,
costs: [],
restrictions: [],
outcomes: [],
visibility_restrictions: [],
})>>
<<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}].costs`>>
<<dtcost _cost>>
<<set _restriction = `$dtquest.options[${_ioption}].restrictions`>>
<<dtrestriction _restriction>>
<<set _outcomes = `$dtquest.options[${_ioption}].outcomes`>>
<<dtoutcome _outcomes>>
<!--
<<set _vis_restrictions = `$dtquest.options[${_ioption}].visibility_restrictions`>>
<<dtvisrestriction _vis_restrictions>>
-->
<<link '(DELETE THIS OPTION)' 'OpportunityGen'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<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!'>>
<<run setup.DOM.Menu.devtoolverifycreate()>>
<</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'>><<dtraritychoose 'OGChooseRarityDo'>><<set $orarity = _raritychosen>>
<<gotowipehistory 'OpportunityGen'>><<nobr>>
<<set _dom = setup.DOM.Menu.dev_content_generated_begin()>>
<<attach _dom>>
<<link '(Test your quest)' 'QuestDebugDo'>>
<<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/>
<<set _dom = setup.DOM.Menu.dev_content_generated_middle()>>
<<attach _dom>>
<</nobr>>
<div id='devtoolcoderesult' 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.devToolFormat($qdesc)>>
<<for _ipo, _po range $qpassageoutcomes>><<if !_ipo || $qoutcomedesc[_ipo].trim()>>
"""::""" <<= _po >> [nobr]
<<= setup.devToolFormat($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 = setup.rarity.never>>
<<set $qoutcomedesc = ['', '', '', '']>>
<<set $qdesc = ''>>
<<if _qkey in setup.questtemplate>>
<<run delete setup.questtemplate[_qkey]>>
<</if>>
<<if !_qbase>>
<<set $dtquest = new setup.QuestTemplate(
_qkey,
"", /* name */
{name: '', url: ''}, /* author */
[], /* tag list */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration 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.getActorUnitGroups(), /* 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>>
/* pool and rarity */
<<set _poolrarity = _qbase.getAnyQuestPoolRarity()>>
<<if _poolrarity>>
<<set $qpool = _poolrarity.pool>>
<<set $qrarity = _poolrarity.rarity>>
<</if>>
<</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 'QGChooseRarity'>>
<<dtduration "$dtquest.weeks" $dtquest.weeks>>
<<dtexpires "$dtquest.deadline_weeks" $dtquest.deadline_weeks>>
<<dtdifficulty $dtquest 'QGChooseDifficulty'>>
<<dttags $dtquest>>
<div class='card livingcard'>
<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='card buildingcard'>
<<if _ioutcome == 0>>
<<successtext 'CRITICAL SUCCESS'>>
<<message '(?)'>>
<<dtrewardhelp>>
<</message>>
<<button 'Compute recommended total quest reward'>>
<<replace '#critrewarddiv'>>
<<set _money = $dtquest.computeRecommendedReward('crit')>>
Your quest should reward a total of <<money _money>> on <<successtext 'critical success'>>.
<</replace>>
<</button>>
<div id='critrewarddiv'>
Please compute your recommended <<successtext 'critical success'>> quest reward by clicking the button above.
</div>
<<elseif _ioutcome == 1>>
<<successtextlite 'SUCCESS'>>
<<message '(?)'>>
<<dtrewardhelp>>
<</message>>
<<button 'Compute recommended total quest reward'>>
<<replace '#successrewarddiv'>>
<<set _money = $dtquest.computeRecommendedReward('success')>>
Your quest should reward a total of <<money _money>> on <<successtextlite 'success'>>.
<</replace>>
<</button>>
<div id='successrewarddiv'>
Please compute your recommended <<successtextlite 'success'>> quest reward by clicking the button 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!'>>
<<run setup.DOM.Menu.devtoolverifycreate()>>
<</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'>><<dtraritychoose 'QGChooseRarityDo'>><<set $qrarity = _raritychosen>>
<<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>>Have expanded fort at least <<numberbox '_level' 5>> times.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.FortLevelAtLeast(_level)>>
<</link>><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>>This following event must be ON COOLDOWN: <br/>
<<for _ievent, _event range setup.event>>
<<capture _event>>
<<link _event.getName() 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.EventOnCooldown(_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>>Have met with the following company:
<<message '(?)'>>
You are considered to have met a company when you ever gain favor / ire from them.
<</message>>
<<for _icompany, _company range $company>>
<<capture _company>>
<<if _company != $company.player>>
<br/>
<<rep _company>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HaveMetCompany(_company)>>
<</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'>><<for _iug, _ug range setup.unitgroup>>
<<if _ug.reuse_chance>>
<<rep _ug>>
<<capture _ug>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.UnitGroupHasUnit(_ug)>>
<</button>>
<</capture>>
<br/>
<</if>>
<</for>><<for _iug, _ug range setup.unitgroup>>
<<if _ug.reuse_chance>>
<<rep _ug>>
<<capture _ug>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.UnitGroupNotBusy(_ug)>>
<</button>>
<</capture>>
<br/>
<</if>>
<</for>>At least <<numberbox '_money' 100>> money.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Money(_money)>>
<</link>>At MOST <<numberbox '_money' -1>> money.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.MoneyAtMost(_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'>>The following quest must be on cooldown: <br/>
<<devchoosequest 'RestrictionQuestOnCooldownDo'>><<set $qrestriction = setup.qres.QuestOnCooldown(_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'>><<set $qrestriction = setup.qres.QuestDone(null)>>
<<include 'QGRestrictionDone'>>Must have successfully or critical successfully completed this quest: <br/>
<<devchoosequest 'RestrictionQuestDoneDo'>><<set $qrestriction = setup.qres.QuestDone(_questchosen)>>
<<gotowipehistory 'QGRestrictionDone'>>The following opportunity must be ON COOLDOWN: <br/>
<<devchooseopportunity 'RestrictionOpportunityOnCooldownDo'>><<set $qrestriction = setup.qres.OpportunityOnCooldown(_opportunitychosen)>>
<<gotowipehistory 'QGRestrictionDone'>>True with <<numberbox '_chance' 0.5>> chance (put a number between 0 and 1)
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.RandomlyTrue(_chance)>>
<</link>><p>
True when quest / opportunity seed modulo
<<numberbox '_modulo' 3>> equals
<<numberbox '_remainder' 1>>.
See Wikipedia for modulo.
</p>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.RandomlyTrueSeeded(_modulo, _remainder)>>
<</link>><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>><p>
Must exist at least <<numberbox '_amount' 1>> units that satisfy some conditions:
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.ExistUnit([], _amount)>>
<</link>>Must exist at least <<= _entry.amount >> units that satisfies all of these:<<set $qrestriction = setup.qres.NotExistUnit([])>>
<<gotowipehistory 'QGRestrictionDone'>>Must <<dangertext 'NOT'>> exist some unit that satisfies all of these:<<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><p>
Check the following, but mask the description. Instead, show:
<<textbox '_hide' 'Must have never killed a dragon'>>.
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Through(setup.qres.And([]), _hide)>>
<</link>>Hide the following from player,
show "<<= _entry.explain()>>" instead, and check:<div>
Fort total bonus on the following skill is at least <<numberbox '_bonus' 5>>:
</div>
<<for _skill range setup.skill>>
<div>
<<capture _skill>>
<<foclink _skill.rep() 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.FortSkillBonusAtLeast(_skill, _bonus)>>
<</foclink>>
<</capture>>
</div>
<</for>><<set $qrestriction = setup.qres.AllowLovers('gender_male', 'gender_female')>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.AllowLovers('gender_male', 'gender_male')>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.AllowLovers('gender_female', 'gender_female')>>
<<include 'QGRestrictionDone'>><div>
This tag is <<dangertext 'NOT'>> banned:
</div>
<<for _tag range setup.TagHelper.getAllTagsOfType('quest', 'fetish')>>
<<capture _tag>>
<div>
<<= _tag>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.TagNotBanned(_tag)>>
<</button>>
</div>
<</capture>>
<</for>><<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>>
<<set _choose_traits_attachable = false>>
<<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>>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>>Has at least one slaver with all the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasSlaverWithTraits(_chosentraits)>>
<</link>>
<<set _choose_traits_attachable = false>>
<<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>>
<<set _choose_traits_attachable = false>>
<<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.CanBeUsedByRememberedUnit()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.CanUseRememberedUnit()>>
<<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'>><<set $qrestriction = setup.qres.HomeExceptOnLeave()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanBeSold()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.AllowDefiant()>>
<<include 'QGRestrictionDone'>><p>Must have a unit on the following duty, and the unit must be <<successtext 'available'>>:</p>
<<for _duty range Object.values(setup.dutytemplate)>>
<<= _duty.getName()>>
<<capture _duty>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.HasUnitOnDuty(_duty)>>
<</link>>
<</capture>>
<br/>
<</for>><p>Unit must be on this duty:</p>
<<for _duty range Object.values(setup.dutytemplate)>>
<<= _duty.getName()>>
<<capture _duty>>
<<link '(select this)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.OnDuty(_duty)>>
<</link>>
<</capture>>
<br/>
<</for>><div>Must equip the following:</div>
<<for _ibt, _bt range setup.equipment>>
<div>
<<rep _bt>>
<<capture _bt>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Equipped(_bt)>>
<</button>>
<</capture>>
</div>
<</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'>>Unit is injured for at least <<numberbox '_weeks' 1>> more weeks.
<br/>
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.IsInjured(_weeks)>>
<</link>><<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.Job(setup.job.retired)>>
<<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>><div>
Unit's has at least <<numberbox '_amount' 100>>:
</div>
<<for _skill range setup.skill>>
<div>
<<capture _skill>>
<<foclink _skill.rep() 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SkillAtLeast(_skill, _amount)>>
<</foclink>>
<</capture>>
</div>
<</for>><div>
Unit's modifier on the following skill is at least +<<numberbox '_multi' 0.4>>x:
</div>
<<for _skill range setup.skill>>
<div>
<<capture _skill>>
<<foclink _skill.rep() 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SkillModifierAtLeast(_skill, _multi)>>
<</foclink>>
<</capture>>
</div>
<</for>><p>Unit must be retired and has the following living:</p>
<<for _living range Object.values(setup.living)>>
<div>
<<capture _living>>
<<button 'Select' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.Living(_living)>>
<</button>>
<</capture>>
<<rep _living>>
</div>
<</for>><<set $qrestriction = setup.qres.IsCanPhysicallyCum()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanSee()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsDietCum()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsDietMilk()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanWalk()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanTalk()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanOrgasm()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanPhysicallyWalk()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanPhysicallyTalk()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.IsCanPhysicallyOrgasm()>>
<<include 'QGRestrictionDone'>>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'>><<set $qrestriction = setup.qres.ZeroTitle()>>
<<include 'QGRestrictionDone'>><<focwidget 'selecttrait'>>
<<set _targetpassage = $args[0]>>
<<set _traitpool = $args[1]>>
<<if !_traitpool>> <<set _traitpool = Object.values(setup.trait)>> <</if>>
<<run _dom = setup.DOM.Menu.traitpickersingle({raw_traits: _traitpool, finish_callback: (trait) => {
State.variables.rTrait = trait;
setup.runSugarCubeCommand('<<include "' + State.temporary.targetpassage + '">>');
}})>>
<<attach _dom>>
<</focwidget>><<set _chosentraits = []>>
<<set _traitlist = Object.values(setup.trait)>>
<<if _choose_traits_attachable>>
<<set _traitlist = setup.TraitHelper.getAttachableTraitsInContentCreator()>>
<</if>>
<div class='traitlistcard card'>
<<run _dom = setup.DOM.Menu.traitpickermulti({raw_traits: _traitlist, init_selected: _chosentraits})>>
<<attach _dom>>
</div><<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>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>><p>Unit must have <<dangertext 'at least one'>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.AnyTrait(_chosentraits, true)>>
<</link>>
</p>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>><p>Unit must have <<dangertext 'AT LEAST'>> <<numberbox "_minimum" 2>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.XTraits(_chosentraits, _minimum)>>
<</link>>
</p>
<<set _choose_traits_attachable = false>>
<<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:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.NoTraits(_chosentraits, true)>>
<</link>>
</p>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>><p>Unit must have <<successtext 'ALL'>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.AllTraits(_chosentraits, false)>>
<</link>>
</p>
<<set _choose_traits_attachable = false>>
<<include 'ChooseTraits'>><p>Unit must have <<successtext 'ALL'>> of the following traits:
<<link 'Done' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.AllTraits(_chosentraits, true)>>
<</link>>
</p>
<<set _choose_traits_attachable = false>>
<<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'>><<include LoadSelectTrait>>
<p>
Unit must be able to learn the following perk (they don't have to learn it):
</p>
<<selecttrait 'RestrictionHasPerkChoiceDo' setup.TraitHelper.getAllTraitsOfTags(['perkspecial'])>><<set $qrestriction = setup.qres.HasPerkChoice($rTrait)>>
<<gotowipehistory 'QGRestrictionDone'>><<set $qrestriction = setup.qres.NotYou()>>
<<include 'QGRestrictionDone'>><<set $qrestriction = setup.qres.You()>>
<<include 'QGRestrictionDone'>><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>><p>
<<devactor '_actorname1'>> must have the same gender with
<<devactor '_actorname2'>>.
</p>
<<link '(Continue)' 'QGRestrictionDone'>>
<<set $qrestriction = setup.qres.SameGender(_actorname1, _actorname2)>>
<</link>>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>
[[Have ever gain favor/ire with company|RestrictionHaveMetCompany]]
</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>>
<<if $devtooltype == 'quest'>>
<div>
[[Must have completed this quest on success or crit before|RestrictionQuestDoneSelf]]
</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 completed some quest on success or crit before|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 'Must be currently on cooldown...'>>
<div class='card lorecard'>
<div>
[[Quest must be on cooldown|RestrictionQuestOnCooldown]]
</div>
<div>
[[Opportunity must be on cooldown|RestrictionOpportunityOnCooldown]]
</div>
<div>
[[Event must be on cooldown|RestrictionEventOnCooldown]]
</div>
</div>
<</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 at least X unit(s) 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='card lorecard'>
<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='card lorecard'>
<div>
[[Two units must be best friends|RestrictionBestFriends]]
</div>
<div>
[[Two units must be lovers|RestrictionLovers]]
</div>
<div>
[[Two units must have the same gender|RestrictionSameGender]]
</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>
[[THROUGH: Hide the requirement from the user|RestrictionThrough]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Others..'>>
<div class='marketobjectcard'>
<div>
[[True with certain probability|RestrictionRandomlyTrue]]
</div>
<<if $devtooltype == 'quest' || $devtooltype == 'opportunity'>>
<div>
[[True with certain probability (seeded)|RestrictionRandomlyTrueSeeded]]
</div>
<</if>>
<div>
<<message 'Contact...'>>
<div class='card lorecard'>
<div>
[[Contact exists|RestrictionHasContact]]
</div>
<div>
[[Contact does NOT exist|RestrictionNoContact]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Exist missing unit / unit in group...'>>
<div class='card lorecard'>
<div>
[[Exist rescue-able missing slaver|RestrictionHasMissingSlaver]]
</div>
<div>
[[Exist rescue-able missing slave|RestrictionHasMissingSlave]]
</div>
<div>
[[Exist unit in unit group|RestrictionUnitGroupHasUnit]]
</div>
<div>
[[No unit in the unit group is busy|RestrictionUnitGroupNotBusy]]
<<message '(?)'>>
<div class='helpcard'>
True either when the unit group is empty, or no unit in the group
is busy with some quest. Most important for persistent unit groups that
only have one member -- don't want them to appear in two simultaneous quests.
</div>
<</message>>
</div>
</div>
<</message>>
</div>
<div>
<<message 'Variable...'>>
<div class='card lorecard'>
<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>
<<message 'Settings / Preferences...'>>
<div class='card lorecard'>
<div>
[[User does not ban this content|RestrictionTagNotBanned]]
</div>
<div>
[[Must allow hetero relationship|RestrictionAllowLoversHetero]]
</div>
<div>
[[Must allow gay relationship|RestrictionAllowLoversGay]]
</div>
<div>
[[Must allow lesbian relationship|RestrictionAllowLoversLesbian]]
</div>
</div>
<</message>>
</div>
<div>
[[Never|RestrictionNever]]
</div>
<div>
[[Have expanded at least this many times|RestrictionFortLevelAtLeast]]
</div>
<div>
[[Fort total skill bonus is at least|RestrictionFortSkillBonusAtLeast]]
</div>
<div>
[[Money at MOST|RestrictionMoneyAtMost]]
</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>
[[Not in party|RestrictionIsCanBeSold]]
<<message '(?)'>>
<div class='helpcard'>
This means the unit is not currently in a party.
This is a QoL restriction, and you should use this on quests where the
unit is expected to be gone forever.
</div>
<</message>>
</div>
<div>
<<message 'Busy / Injury / Duty...'>>
<div class='marketobjectcard'>
<div><b>Status</b></div>
<div>
[[Is available|RestrictionAvailable]]
<<message '(?)'>>
<div class='helpcard'>
This means the unit can go on a quest. Note that this includes
units on duty.
</div>
<</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 on this duty|RestrictionOnDuty]]
</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>
<div>
[[Is at home OR on leave|RestrictionHomeExceptOnLeave]]
<<message '(?)'>>
<div class='helpcard'>
Normally, only units that are at home can be assigned as actors in events,
quest, or opportunity. Choosing this will also allow units that are on leave to be selected.
</div>
<</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>
[['Has ALL these traits'|RestrictionAllTraitsExact]]
</div>
<div>
[[Has AT LEAST ONE of these traits|RestrictionAnyTraitExact]]
</div>
<div>
[['NOT have any of these traits'|RestrictionNoTraitsExact]]
</div>
<div>
[['At least X of these traits'|RestrictionXTraits]]
</div>
<div>
[[Unit must INNATELY have this trait|RestrictionInnateTrait]]
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
</div>
</div>
<</message>>
</div>
<div>
<<message "Level / Skill...">>
<div class='marketobjectcard'>
<div>
[[Level at LEAST|RestrictionLevelAtLeast]]
</div>
<div>
[[Level at MOST|RestrictionLevelAtMost]]
</div>
<div>
[[Skill at LEAST|RestrictionSkillAtLeast]]
</div>
<div>
[[Skill multiplier modifier at LEAST|RestrictionSkillModifierAtLeast]]
</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 a specific title|RestrictionNoTitle]]
</div>
<div>
[[NOT have ANY title at all|RestrictionZeroTitle]]
<<message '(?)'>>
<div class='helpcard'>
Unit cannot have any title at all.
</div>
<</message>>
</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>
Will not form between family members.
</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>
<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='card lorecard'>
<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><b>Identity</b></div>
<div>
[[Remember unit|RestrictionRememberUnit]]
</div>
<div>
[[Must be usable by remembered unit|RestrictionCanBeUsedByRememberedUnit]]
<<message '(?)'>>
<div class='helpcard'>
This restricts this unit to the units usable by the (Remember Unit) above.
<br/>
<br/>
For example, to create an event for a slaver and a slave it can use, then you use the following restrictions:
<ol>
<li>
Role a: Unit must be a slaver
Role a: Remember unit
</li>
<li>
Role b: Unit must be usable by a
</li>
</ol>
</div>
<</message>>
</div>
<div>
[[Must be able to use remembered unit|RestrictionCanBeUsedByRememberedUnit]]
<<message '(?)'>>
<div class='helpcard'>
This restricts this unit to the units that can use the (Remember Unit) above.
<br/>
<br/>
For example, to create an event for a slave and a slaver abusing it, then you use the following restrictions:
<ol>
<li>
Role a: Unit must be a slave
Role a: Remember unit
</li>
<li>
Role b: Unit must be able to use a
</li>
</ol>
</div>
<</message>>
</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>
[[THROUGH: Hide the requirement from the user|RestrictionThrough]]
</div>
</div>
<</message>>
</div>
<div>
<<message 'Others...'>>
<div class='marketobjectcard'>
<div>
[[Allow defiant|RestrictionAllowDefiant]]
<<message '(?)'>>
<div class='helpcard'>
Usually, units with <<rep setup.trait.will_defiant>> or <<rep setup.trait.will_indomitable>>
is not eligible to participate in quests, events, duties, etc.
This restriction will enable those units to participate in this role specifically.
</div>
<</message>>
</div>
<hr/>
<div><b>Join / Retirement</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>
<div>
[[Is a retired slaver|RestrictionJobRetired]]
</div>
<div>
[[Is retired and has the following living|RestrictionLiving]]
</div>
<hr/>
<div><b>Others</b></div>
<div>
[['Is equipping this equipment'|RestrictionEquipped]]
</div>
<div>
[['Is a bodyshifter'|RestrictionBodyshifter]]
</div>
<div>
<<message "Sex / Slave rule / Restrictions...">>
<div class='card lorecard'>
<div><b>Slave rule + Physical Restrictions</b></div>
<div>
[[Can orgasm|RestrictionIsCanOrgasm]]
</div>
<div>
[[Can walk|RestrictionIsCanWalk]]
</div>
<div>
[[Can talk|RestrictionIsCanTalk]]
</div>
<hr/>
<div><b>Slave rule ONLY</b></div>
<div>
[[On cum diet|RestrictionIsDietCum]]
</div>
<div>
[[On milk diet|RestrictionIsDietMilk]]
</div>
<hr/>
<div><b>Physical ONLY (ignores slave rule)</b></div>
<div>
[[Can see|RestrictionIsCanSee]]
</div>
<div>
[[Can physically orgasm|RestrictionIsCanPhysicallyOrgasm]]
</div>
<div>
[[Can physically walk|RestrictionIsCanPhysicallyWalk]]
</div>
<div>
[[Can physically talk|RestrictionIsCanPhysicallyTalk]]
</div>
</div>
<</message>>
</div>
<div>
<<message "Family...">>
<div class='card lorecard'>
<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>
<div>
<<message "Tag...">>
<div class='card lorecard'>
<div>
[[Has this tag|RestrictionHasTag]]
</div>
<div>
[[NOT have this tag|RestrictionNoTag]]
</div>
</div>
<</message>>
<<include 'CostTagHelp'>>
</div>
</div>
<</message>>
</div>
<br/>
<br/>
<<devtoolreturnbutton>><<set _entry = $qrestriction>>
<<unset $qrestriction>>
<<include 'DevAddEntry'>><<if !$dtquest.name>>
<<warning 'Please give your quest / opportunity / event a name first.'>>
<<devgotoreturn>>
<</if>>
<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`>>
<<capture _icriteria, _criteria>>
<<button _text>>
<<devroleaddcriteria $qrolename _criteria>>
<</button>>
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`>>
<<capture _criteria>>
<<button _text>>
<<devroleaddcriteria $qrolename _criteria>>
<</button>>
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.qres.Job(setup.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>>
<<run _dom = setup.DOM.Menu.traitpickermulti({raw_traits: Object.values(setup.trait), init_selected: $socrit_traits})>>
<<attach _dom>>
</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>>
<<run _dom = setup.DOM.Menu.traitpickermulti({raw_traits: Object.values(setup.trait), init_selected: $sodisaster_traits})>>
<<attach _dom>>
</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>
<<button '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>>
<</button>>
<br/>
<br/>
<<dtloadpassagelink>><<set $trname = "">>
<<set $trdescription = "">>
<<set $trunittext = "">>
<<set $trslavevalue = 0>>
<<set $trskilladds = [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
]>>
<<set $trisnegative = false>><<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 '(?)'>>
<div class='helpcard'>
Enter the unit text that will be displayed in unit description.
For example: " a|is the sole wielder of the divine sword Excalibur".
Do NOT put period at the end.
Consider using past tense when appropriate.
<<include 'CostWasHelpText'>>
</div>
<</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>>
<<numberbox "$trslavevalue" $trslavevalue>>
</p>
<div class='equipmentsetcard card'>
Skill additives:
<<message '(?)'>>
<div class='helpcard'>
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.
</div>
<</message>>
<<for _iskill, _skill range setup.skill>>
<br/>
<<set _varname = `$trskilladds[${_iskill}]`>>
<<capture _varname>>
<<rep _skill>>: <<numberbox _varname $trskilladds[_iskill]>>
<</capture>>
<</for>>
</div>
<div class='titlecard-negative'>
<<checkbox '$trisnegative' false true autocheck>>
Negative title
<<message '(?)'>>
<div class='helpcard'>
Mark a title as a Negative Title. Should generally only be used on titles that confer
penalties instead of bonuses to skills.
Negative Titles are always active.
</div>
<</message>>
</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,
{
is_negative: $trisnegative,
},
)
)>>
<<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='card 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 (Remove actor from unit group) 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'>>
[[(Content Creator Cheat Sheet)|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/textcheatsheet.md]]
<<message '(Help and Formatting)'>>
For additional game-specific commands not covered in the toolbar,
see [[here|https://gitgud.io/darkofocdarko/fort-of-chains/-/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>><<= 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>>
<<set _fieldname = $args[0] + '.name'>>
<<textbox _fieldname $args[1].name>>
</p>
<p>
<b>Author / source URL</b>:
<<message '(?)'>>
<div class='helpcard'>
OPTIONAL. Enter an URL you want the player to be redirected to when they click on the author's name.
You can leave this empty -- it will then be filled to either the reddit post, the merge request,
or the discord post.
<br/>
<br/>
If you are supplying your own URL,
please don't link to malicious URLs or URLs containing materials forbidden by the
[[Content Guidelines|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/contentguideline.md]] --
these URLs will be removed.
</div>
<</message>>
<<set _fieldname = $args[0] + '.url'>>
<<textbox _fieldname $args[1].url>>
</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 'dtrarityhelp'>>
<<message '(?)'>>
<div class='helpcard'>
<table class='table table-sm table-striped table-bordered'>
<thead>
<tr>
<th>Rarity</th>
<th>Effect</th>
</tr>
</thead>
<tbody>
<tr>
<td>Always</td>
<td>Will always be scouted whenever possible. Use with care</td>
</tr>
<tr>
<td>Common</td>
<td>1 common quest every 2 quests</td>
</tr>
<tr>
<td>Uncommon</td>
<td>1 uncommon quest every 4 quests</td>
</tr>
<tr>
<td>Rare</td>
<td>1 rare quest every 8 quests</td>
</tr>
<tr>
<td>Epic</td>
<td>1 epic quest every 16 quests</td>
<td></td>
</tr>
<tr>
<td>Legendary</td>
<td>1 legendary quest every 32 quests</td>
</tr>
<tr>
<td>Never</td>
<td>Will never get scouted</td>
</tr>
</tbody>
</table>
</div>
<</message>>
<</focwidget>>
<<focwidget 'dtrarity'>>
<p>
<b>Rarity</b>:
<<dtrarityhelp>>
<<rep $args[1]>>
<<link '(Select rarity)'>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<goto $args[2]>>
<</link>>
</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
<br/>
- Slavers gain a stack of curse (each curse is worth <<money -2500>>)
</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
<br/>
- Slavers gaining multiple stacks of curse
</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, unoptimized 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. 45 - Lv. 100</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>
<<if $devtooltype != 'activity'>>
<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>
<</if>>
</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 an actor from your company)'>>
<div class='card lorecard'>
<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', 'activity',].includes($devtooltype)>>
<<set $dtquest.actor_unitgroup_key_map[_newactorname] = {
type: 'companyunit',
val: [],
}>>
<</if>>
<<unset $compiledquest>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</if>>
<</if>>
<</link>>
</div>
<</message>>
</div>
<<if ['event', 'quest', 'opportunity', 'activity',].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 _actor.type == 'companyunit'>>
<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 + "].val">>
<<devlist _listpath '(Add new restriction)' 'QGAddRestrictionUnit' 'DevGoToReturn'>>
</div>
<<elseif _actor.type == 'contact'>>
<<= _iactor>>: (Contact) <<rep setup.contacttemplate[_actor.key]>>
<<elseif _actor.type == 'unitgroup'>>
<<= _iactor>>: <<rep setup.unitgroup[_actor.key]>>
<</if>>
<<else>>
<<= _iactor>>: None
<</if>>
<<if ($devtooltype != 'activity') || (_iactor != 'a')>>
<<capture _iactor, _actor>>
<<set _text = `(remove ${_iactor})`>>
<<link _text>>
<<run delete _actor_unitgroup_key_map[_iactor]>>
<<run setup.DevToolHelper.saveScrollPos()>>
<<devgotoreturn>>
<</link>>
<</capture>>
<</if>>
</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', 'activity', ].includes($devtooltype)>>
<<if $args[1] instanceof setup.ContactTemplate>>
<<run $dtquest.actor_unitgroup_key_map[$args[0]] = {
type: 'contact',
key: $args[1].key
}>>
<<else>>
<<run $dtquest.actor_unitgroup_key_map[$args[0]] = {
type: 'unitgroup',
key: $args[1].key
}>>
<</if>>
<<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.
<<elseif $devtooltype == 'activity'>>
be used
<</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 'dtvisrestriction'>>
<div class='equipmentcard'>
<b>Visibility Restrictions</b>:
<<message '(?)'>>
<div class='helpcard'>
Restrictions on when this option can be seen by players.
<br/>
<br/>
For example, you can restrict that this option is only visible once you complete another quest.
Use sparingly.
</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>
<tr>
<td>Blessing</td>
<td><<money 2500>> per stack</td>
</tr>
<tr>
<td>Permanent skill boost</td>
<td><<money 15000>> per boost</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.subrace_humanvale>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_humankingdom>></td>
<td>
<<money 1500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_humandesert>></td>
<td>
<<money 2000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_humansea>></td>
<td>
<<money 5000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_angel>></td>
<td>
<<money 50000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_werewolf>></td>
<td>
<<money 5000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_elf>></td>
<td>
<<money 2500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_fairy>></td>
<td>
<<money 25000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_neko>></td>
<td>
<<money 2000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_tigerkin>></td>
<td>
<<money 30000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_orc>></td>
<td>
<<money 3000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_lizardkin>></td>
<td>
<<money 7500>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_dragonkin>></td>
<td>
<<money 30000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_demonkin>></td>
<td>
<<money 12000>>
</td>
</tr>
<tr>
<td><<rep setup.trait.subrace_demon>></td>
<td>
<<money 30000>>
</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>Curse</td>
<td><<money 2500>> per stack</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.
For quest outcomes and opportunity outcomes, <<successtext 'past tense is recommended.'>>
For all other, including quest descriptions, events, and opportunity descriptions, <<successtext 'present tense is recommended.'>>
<<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/fort-of-chains/-/blob/master/docs/contentguideline.md]]
on this.
</div>
<</message>>
<<message '(First-person Gotchas)'>>
<div class='helpcard'>
If the player character can go on your quest, try to make sure
the text would still read decently when they do.
It does not have to be perfect, as this is a fairly rare occurrence.
All you have to do is: (1) use past tense or use the a|kill syntax, (2) use actor|is or actor|was,
and (3) use the subjects
from the toolbar. Your texts will then be automatically converted to first person
if the player go on the quest.
<br/>
<br/>
For example,
"<<Rep $g.actor>> actor|was drinking"
will be converted to either
"You were drinking" or "Bob was drinking".
Similarly,
"<<They $g.actor>> actor|drink too much and actor|is now drunk"
will become
"You drink too much and are now drunk" or
"He drinks too much and is now drunk".
</div>
<</message>>
<<message '(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>>
[[(Content Creator Cheat Sheet)|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/textcheatsheet.md]]
[[(Extra Commands and Syntax)|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/text.md]]
<<message '(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 / adjectives that will be based on their personality.
To do this, in the editor choose "Terms" from the toolbar, and then
"Random adverb" or "Random adjective". Alternatively, you can use
the "your evil slaver Bob" option from the
<br/>
<br/>
Third, you can also create variations based on whether or not the units
have a specific traits. Check the "If actor" tab of the toolbar.
<br/>
<br/>
There are many other ways you can do this, but the three above are the main ones.
</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>>
<<focwidget 'dtraritychoose'>>
<div>
Choose rarity:
<<dtrarityhelp>>
</div>
<<for _rarity range setup.rarity>>
<div>
<<rep _rarity>>
<<capture _rarity>>
<<link '(select this)'>>
<<set _raritychosen = _rarity>>
<<include $args[0]>>
<</link>>
<</capture>>
</div>
<</for>>
<</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 instanceof setup.UnitGroup && _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'>>{ """/* Author */"""
name: "<<= setup.escapeJsString($dtquest.author.name)>>",
url: "<<= setup.escapeJsString($dtquest.author.url)>>",
},<</focwidget>>
<<focwidget 'dtprintdeadlineweeks'>><<nobr>>
<<if $devtooltype == 'quest' and $dtquest.deadline_weeks == setup.QUEST_DEFAULT_EXPIRATION>>setup.QUEST_DEFAULT_EXPIRATION<<else>><<= $dtquest.deadline_weeks>><</if>>, """/* 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 instanceof setup.UnitGroup>>
'<<= _actor.key>>',
<<elseif _actor instanceof setup.ContactTemplate>>
setup.contacttemplate.<<= _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].text()>>],
<</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'>>
<<elseif $devtooltype == 'activity'>>
<<goto 'ActivityGen'>>
<</if>>
<</if>>
<</focwidget>>
<<focwidget 'devquestroles'>>
<<if !$qdevquestroles>>
<<set $qdevquestroles to {}>>
<</if>>
<div>
<b>Quest roles:</b>
<<message '(Add new)'>>
<div class='card livingcard'>
<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 $args[0]>>
<</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 $args[0]>>
<</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>>
<<focwidget 'devchooseactivity'>>
<p>
Choose an activity:
</p>
<<for _activity range setup.activitytemplate>>
<<capture _activity>>
<div>
<<rep _activity>>
<<button 'Select'>>
<<set _activitychosen = _activity>>
<<include $args[0]>>
<</button>>
</div>
<</capture>>
<</for>>
<</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>><<run new setup.Title(
"quest_living_god", /* key */
"Living God", /* name */
"Worshipped as a living god, and has a small shrine dedicated to them within your fort.", /* description */
"a|is currently being worshipped within your fort", /* unit text */
5000, /* slave value */
{ /* skill additives */
social: 3,
intrigue: 3,
aid: 3,
},
)
>>
<<run setup.DutyTemplate.initialize()>><p>
Private slave to whoever is given ownership of
<<rep _gDuty.getBedchamber()>>.
Once the slave bonds with their owner, will improve the owner's skills
by a tiny amount.
More effective for slavers who tend to stay at your fort and does not go on quests.
</p><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><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><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><p>
As the leader of your company, you always have spare work to do when you are not busy
on a quest.
Has a chance to earn a little money each week whenever you are at home.
(If the chance is higher than 100%, then there is a chance that you will get even more money.)
</p><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 (up to level 40).
(If the chance is higher than 100%, then there is a chance that the order found will have higher than usual price.)
</p><p>
Increases boon duration.
Whenever a unit receives a boon, the mystic has a chance to amplify its
duration. (Maximum <<= setup.MYSTIC_MAX_BOON>> extra weeks of boon granted per unit.)
(If the chance is higher than 100%, then there is a chance that the mythic will prolong the boon even longer.)
</p><p>
At the end of each week, has a chance to
grant you around <<money setup.PIMP_PRESTIGE_MULTIPLIER >> for every prestige the slaves 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 pimp is unable to manage too many slaves, however,
and if they have more than
<<= setup.PIMP_SLAVE_LIMIT>> slaves under their care,
they will only count the prestige of the
<<= setup.PIMP_SLAVE_LIMIT>>
most prestigious slaves out of those.
</p><p>
Grants money each week based on the prestige generated by the
<<rep setup.dutytemplate.entertainmentslave>>, the
<<rep setup.dutytemplate.decorationslave>>, the
<<rep setup.dutytemplate.punchingbagslave>>, the
<<rep setup.dutytemplate.dogslave>>, and the
<<rep setup.dutytemplate.ponyslave>> slave duties.
</p>
<<include 'DutyPimpCommon'>><p>
Grants money each week based on the prestige generated by the
<<rep setup.dutytemplate.sissyslave>>, the
<<rep setup.dutytemplate.maidslave>>, the
<<rep setup.dutytemplate.furnitureslave>>, the
<<rep setup.dutytemplate.theatreslave>>, the
<<rep setup.dutytemplate.milkcowslave>>, and the
<<rep setup.dutytemplate.cumcowslave>> slave duties.
</p>
<<include 'DutyPimpCommon'>><p>
Grants money each week based on the prestige generated by the
<<rep setup.dutytemplate.analfuckholeslave>>, the
<<rep setup.dutytemplate.oralfuckholeslave>>, the
<<rep setup.dutytemplate.vaginafuckholeslave>>, the
<<rep setup.dutytemplate.toiletslave>>, and the
<<rep setup.dutytemplate.dominatrixslave>> slave duties.
</p>
<<include 'DutyPimpCommon'>><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 sissy booth of the recreation wing.
They offers themself to be hired by paying customer,
to be used as they see fit.
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 many and occasionally 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><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><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'>><p>
Your slaver's best friend.
The rescuer will occasionally 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><p>
Gives level and experience to your slavers.
The drill sergeant has a chance to
give each unit on duty (including themselves) some experience each week.
(If the chance is higher than 100%, then there is a chance that the drill sergeant
will give even more exp.)
</p>
<p>
In addition,
the drill sergeant also automatically level your low-level slavers:
it can grant up to
<<= setup.DRILL_SERGEANT_ATTEMPTS>> levels per week to units whose level
is lower than the level of the Drill Sergeant, up to maximum of level
<<= setup.TRAINER_MAX_LEVEL>>.
(This is based on the Drill Sergeant's trigger chance.
If the chance is higher than 100%, then the drill sergeant can grant up to
<<= setup.DRILL_SERGEANT_ATTEMPTS_CRIT + setup.DRILL_SERGEANT_ATTEMPTS>> levels per week instead.
Both the trainee and the Drill Sergeant must be at home for this to happen.)
</p><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>>
).
Also helps you answer mails automatically, and arrange consecutive unit trainings.
Unlike other duties, the trigger chance of this duty does not actually do anything,
and this duty will remain effective even when the vice leader is injured or is going on a mission.
</p><p>
Manages
<<set _dom = setup.dutytemplate.questbrothelmanager.describe()>>
<<attach _dom>>.
Has a chance to grant you <<money setup.dutytemplate.questbrothelmanager.profit()>>
from the profits of your brothel.
(If the chance is higher than 100%, then there is a chance you will get even more money.)
<!--
Assigning a unit with <<rep setup.title.quest_brothel_owner_0>>
<<successtextlite "increases">> the chance by an additional 25%.
-->
</p><p>
A slaver under your employ whose job is to be an object of worship from the nearby masses.
<<if setup.dutytemplate.questlivinggod.isFavor()>>
Has a chance to inspire their worshippers, increasing your favor
<<set _company = setup.dutytemplate.questlivinggod.getFavorCompany()>>
<<if _company>>
with the <<rep _company>>
<</if>>
by
<<favor setup.dutytemplate.questlivinggod.favor()>> each week.
(If the chance is higher than 100%, then there is a chance you will gain even more favor.)
<<else>>
Has a chance to grant you <<money setup.dutytemplate.questlivinggod.profit()>>
each week from the tithe their worshippers donated.
(If the chance is higher than 100%, then there is a chance you will get even more money.)
<</if>>
</p><<set setup.equipment = {}>>
<<include InitEquipmentCombat>>
<<include InitEquipmentBrawn>>
<<include InitEquipmentSurvival>>
<<include InitEquipmentIntrigue>>
<<include InitEquipmentSlaving>>
<<include InitEquipmentKnowledge>>
<<include InitEquipmentSocial>>
<<include InitEquipmentAid>>
<<include InitEquipmentArcane>>
<<include InitEquipmentSex>>
<<include InitEquipmentChastity>>
<<include InitEquipmentMaid>>
<<include InitEquipmentPet>>
<<include InitEquipmentPony>>
<<include InitEquipmentRestraint>>
<<include InitEquipmentSexToy>>
<<include InitEquipmentWeapon>>
<<include InitEquipmentOther>>
/* must be last: */
<<include InitEquipmentPoolGroup>>
<<run setup.EquipmentSet.initDefaultEquipmentSets()>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_mask_plague' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'aid_nipple',
'Healer Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_NORMAL},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'nipple_clamps' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_hood' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'aid_nipple_good',
'Saint Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps',],
setup.EQUIPMENT_PRICE_GOOD, /* value */
10, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_GOOD},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'nipple_clamps' },
{
description: '',
flavor: '',
},
)>>
<<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(
'aid_torso_master',
'Ancient Cleric Robe',
setup.equipmentslot.torso,
['clothes', 'covering', 'legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_MASTER},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: 'A relic of times long gone, made of the finest and sleekest silk. ' +
'The mere sight of it heals the body and the spirit.',
flavor: 'The robe looks really elegant, even from afar. ' +
'Despite its obvious age, its threads somehow maintain their top-notch quality. ' +
'The robe is enchanted, and its wearer exhudes an aura of reliance and hope',
},
)>>
<<run new setup.Equipment(
'aid_weapon_master',
"Staff of Pain",
setup.equipmentslot.weapon,
['legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
aid: setup.EQUIPMENT_STAT_BOOST_MASTER,
survival: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_masochistic: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.aid, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'weapon_staff_master' },
{
description: 'A staff designed for maximum pain instead of healing. ' +
'It is enchanted with the masochism enchantment, transforming its wielder into the perfect embodiment of a heal slut.',
flavor: "The Staff of Pain transforms the wielder into a masochist, " +
"regardless of their usual sexual preference, " +
"molding them into the perfect husk of a devoted heal slut",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_ring' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_hat_wizard' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace_star' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_ring' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'arcane_head_good',
'Archwizard Hat',
setup.equipmentslot.head,
['accessory', 'hat', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{arcane: setup.EQUIPMENT_STAT_BOOST_GOOD},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_hat_wizard' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace_star' },
{
description: '',
flavor: '',
},
)>>
<<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(
'arcane_head_master',
"Wizard Hat of Pure Evil",
setup.equipmentslot.head,
['legendary', 'accessory', 'hat', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
arcane: setup.EQUIPMENT_STAT_BOOST_MASTER,
social: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_evil: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.arcane, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{},
{
description: 'A legendary wizard hat brimming with pure malice. You feel evil just by touching its very fabric.',
flavor: "The hat whispers dark temptations into its wearer, forcing them down the path of evil",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'brawn_rear',
"Brawler Boxers",
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_NORMAL},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'feet_sandals' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'brawn_rear_good',
"Gladiator Boxers",
setup.equipmentslot.rear,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_GOOD},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'feet_sandals' },
{
description: '',
flavor: '',
},
)>>
<<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(
'brawn_rear_master',
'Champion Boxers',
setup.equipmentslot.rear,
['clothes', 'covering', 'legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{brawn: setup.EQUIPMENT_STAT_BOOST_MASTER},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: 'A boxers complete with a gilded belt, a symbol for winning the Southern Isle Pit Fights. ' +
'It is enchanted, empowering whoever wearing it with strength.',
flavor: 'The golden belt around the boxers reflected light brightly. ' +
"Despite looking heavy, the boxer's enchantment alleviate most of the weight, and also empower the wearer",
},
)>>
<<run new setup.Equipment(
'brawn_weapon_master',
"Gravity Axe",
setup.equipmentslot.weapon,
['legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
brawn: setup.EQUIPMENT_STAT_BOOST_MASTER,
combat: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
tough_tough: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.brawn, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'weapon_axe_master' },
{
description: 'A really, really heavy axe. Wieldable only by the brawniest of the brawniest. ' +
'Despite its questionable use in combat, whoever capable of wielding it must look very tough.',
flavor: "The Gravity Axe is incredibly heavy, unwieldy even for the strongest of slavers. " +
"In fact, it will actually deter the combat effectiveness of its wielder, but at least it " +
"makes its wielder appear very tough",
},
)>><<run new setup.Equipment(
'chastity_dick',
'Dick Chastity Device',
setup.equipmentslot.genital,
['dick', 'chastity', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{},
{ /* traits */
eq_chastity: 1,
},
[ /* unit restrictions */
setup.qres.Trait(setup.trait.dick_tiny),
],
{ image: 'genital_chastity' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_chestplate_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'legs_faulds_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'feet_greaves_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_gauntlets_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_helm_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_chestplate_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'legs_faulds_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'feet_greaves_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_gauntlets_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_helm_heavy' },
{
description: '',
flavor: '',
},
)>>
<<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', 'legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{combat: setup.EQUIPMENT_STAT_BOOST_MASTER},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_gauntlets_heavy' },
{
description: 'An extremely well-crafted gauntlets suitable for the hardiest combatants. ' +
'It bears 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',
},
)>>
<<run new setup.Equipment(
'combat_weapon_master',
"Brave Sword",
setup.equipmentslot.weapon,
['legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
combat: setup.EQUIPMENT_STAT_BOOST_MASTER,
intrigue: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_brave: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.combat, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'weapon_sword_master2' },
{
description: 'A legendary sword, wieldable only by the most skillful warriors. It is said to instill bravery on whoever lucky enough to wield the sword',
flavor: "The Brave Sword's unusual shape makes it unwieldy for anyone but the most masterful of swordmasters. " +
"It is enchanted, instilling bravery on its wielder",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_mask' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_mask' },
{
description: '',
flavor: '',
},
)>>
<<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(
'intrigue_eyes_master',
"Mask of Shadows",
setup.equipmentslot.eyes,
['legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
intrigue: setup.EQUIPMENT_STAT_BOOST_MASTER,
social: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
magic_dark: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.intrigue, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'eyes_mask' },
{
description: "An ornate mask meant to be worn to completely hide the wearer's identity. " +
"It is enchanted with dark magic, capable of erasing the wearer's presence.",
flavor: "The mask covers every inch of its wearer's face and identity, and its " +
"enchantment would conceal their presence as well. While it's good for sneaking around " +
"undetected, it sometimes make talking with their wearer a little more than awkward",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_hat_wizard' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_spectacles' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'head_hat_wizard' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_spectacles' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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(
'knowledge_legs_master',
"Breeches of Knowledge",
setup.equipmentslot.legs,
['legendary', 'clothes', 'covering', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
knowledge: setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
],
{},
{
description: 'An enchanted breeches who refuses to be worn except by the smartest of people. ' +
"A true mark of knowledge.",
flavor: "The breeches often glow blue-ish, giving its wearer a light-blue aura. " +
"The aura isn't just for show, and it imbues its bearer with knowledge both of " +
'this world and beyond',
},
)>><<run new setup.Equipment(
'maid_torso',
'Domestic Apron',
setup.equipmentslot.torso,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_LOW},
{ /* traits */
bg_maid: 3,
},
[ /* restrictions */
],
{ image: 'torso_robes' },
{
description: '',
flavor: 'The apron only covers the front, leaving the back completely bare and available'
},
)>>
<<run new setup.Equipment(
'maid_legs',
'Domestic Skirt',
setup.equipmentslot.legs,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_LOW},
{ /* traits */
bg_maid: 3,
},
[ /* restrictions */
],
{ image: 'legs_skirt' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'maid_feet',
'Domestic Shoes',
setup.equipmentslot.feet,
['clothes', 'covering', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_LOW},
{ /* traits */
bg_maid: 3,
},
[ /* restrictions */
],
{ image: 'feet_heels' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'maid_head',
'Domestic Headdress',
setup.equipmentslot.head,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_LOW},
{ /* traits */
bg_maid: 3,
},
[ /* restrictions */
],
{ image: 'head_maid' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'maid_arms',
'Domestic Gloves',
setup.equipmentslot.arms,
['clothes'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
5, /* sluttines */
{aid: setup.EQUIPMENT_STAT_BOOST_LOW},
{ /* traits */
bg_maid: 3,
},
[ /* restrictions */
],
{ image: 'arms_gloves' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.EquipmentPool(
'maid',
{
maid_torso: 1,
maid_head: 1,
maid_legs: 1,
maid_feet: 1,
maid_arms: 1,
}
)>><<run new setup.Equipment(
'pants',
'Standard Pants',
setup.equipmentslot.legs,
['clothes', 'covering', ],
0, /* value */
0, /* sluttines */
{}, /* skills */
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'shirt',
'Standard Shirt',
setup.equipmentslot.torso,
['clothes', 'covering', ],
0, /* value */
0, /* sluttines */
{}, /* skills */
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'shoes',
'Standard Shoes',
setup.equipmentslot.feet,
['shoes', 'covering', ],
0, /* value */
0, /* sluttines */
{}, /* skills */
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
/* Unobtainable. Usable only in sex */
<<run new setup.Equipment(
'strapon',
'Strap-On',
setup.equipmentslot.genital,
['basic', 'strapon', ],
0, /* value */
0, /* sluttines */
{}, /* skills */
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>><<run new setup.Equipment(
'tailplug_dog',
'Puppy Tail Plug',
setup.equipmentslot.rear,
['pet', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'rear_pony_tailplug' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'collar_dog',
'Puppy Collar',
setup.equipmentslot.neck,
['pet', 'collar'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{}, /* skills */
{ /* traits */
eq_collar: 1,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'neck_puppy_collar' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'hood_dog',
'Puppy Hood',
setup.equipmentslot.head,
['pet', 'headcover', 'coverface'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{}, /* skills */
{ /* traits */
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'head_puppy_hood' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'mitts_dog',
'Puppy Mitts',
setup.equipmentslot.arms,
['pet', 'mitts', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pet: 3,
},
[],
{ image: 'arms_puppy_mitts' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'harness_dog',
'Puppy Harness',
setup.equipmentslot.torso,
['pet', 'harness'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'torso_puppy_harness' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'rear_pony_tailplug', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golden_collar_dog',
'Golden Puppy Collar',
setup.equipmentslot.neck,
['pet', 'collar'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
15, /* sluttines */
{}, /* skills */
{ /* traits */
eq_collar: 1,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'neck_puppy_collar', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golden_harness_dog',
'Golden Puppy Harness',
setup.equipmentslot.torso,
['pet', 'harness'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
25, /* sluttines */
{}, /* skills */
{ /* traits */
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'torso_puppy_harness', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golden_hood_dog',
'Golden Puppy Hood',
setup.equipmentslot.head,
['pet', 'headcover', 'coverface'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'head_puppy_hood', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golden_mitts_dog',
'Golden Puppy Mitts',
setup.equipmentslot.arms,
['pet', 'mitts', 'banuse'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'arms_puppy_mitts', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<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_dog_master',
"Tailplug of Hound-Mastery",
setup.equipmentslot.rear,
['pet', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
40, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_MASTER,},
{ /* traits */
eq_plug_anus: 1,
eq_pet: 3,
},
[ /* restrictions */
],
{ image: 'rear_pony_tailplug', colorize: 'cyan' },
{
description: '',
flavor: '',
},
)>><<run new setup.Equipment(
'tailplug_pony',
'Pony Tail Plug',
setup.equipmentslot.rear,
['pony', 'buttplug', 'tailplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttiness */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'rear_pony_tailplug' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'gag_pony',
'Pony Bit Gag',
setup.equipmentslot.mouth,
['pony', 'gag', 'bitgag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{}, /* skills */
{ /* traits */
eq_gagged: 1,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'mouth_pony_bitgag' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'eyecover_pony',
'Pony Blinders',
setup.equipmentslot.eyes,
['pony', 'ponyeyecover', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{},
{ /* traits */
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'eyes_pony_blinders' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'hooves_front_pony',
'Pony Hooves (Front)',
setup.equipmentslot.arms,
['pony', 'hooves', 'banuse'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'legs_pony_hooves' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'hooves_rear_pony',
'Pony Hooves (Rear)',
setup.equipmentslot.feet,
['pony', 'hooves', 'banuse', 'covering', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttiness */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'legs_pony_hooves' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'rear_pony_tailplug' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_gagged: 1,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'mouth_pony_bitgag' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'large_eyecover_pony',
'Extra Dark Pony Blinders',
setup.equipmentslot.eyes,
['pony', 'ponyeyecover'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttiness */
{},
{ /* traits */
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'eyes_pony_blinders' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'legs_pony_hooves' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
eq_pony: 3,
},
[ /* restrictions */
],
{ image: 'legs_pony_hooves' },
{
description: '',
flavor: '',
},
)>>
<<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 */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
},
[ /* restrictions */
],
{ image: 'arms_manacles' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'manacles_down',
'Fetters',
setup.equipmentslot.feet,
['restraints'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
5, /* sluttines */
{}, /* skills */
{ /* traits */
eq_restrained: 2,
},
[ /* restrictions */
],
{ image: 'feet_fetters' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'blindfold',
'Blindfold',
setup.equipmentslot.eyes,
['blindfold', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{}, /* skills */
{ /* traits */
eq_blind: 1,
},
[ /* restrictions */
],
{ image: 'eyes_blindfold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'ballgag',
'Ball Gag',
setup.equipmentslot.mouth,
['gag', 'ballgag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_gagged: 1,
},
[ /* restrictions */
],
{ image: 'mouth_gag_ball' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'metal_collar',
'Heavy Metal Collar',
setup.equipmentslot.neck,
['collar'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{}, /* skills */
{ /* traits */
eq_collar: 1,
},
[ /* restrictions */
],
{ image: 'neck_collar' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.EquipmentPool(
'restraint',
{
metal_collar: 1,
ballgag: 1,
blindfold: 1,
manacles_up: 1,
manacles_down: 1,
}
)>>
<<run new setup.Equipment(
'cowbell_collar',
'Cowbell Collar',
setup.equipmentslot.neck,
['collar', 'bellcollar', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
15, /* sluttines */
{}, /* skills */
{ /* traits */
eq_collar: 1,
},
[ /* restrictions */
],
{ image: 'neck_collar' },
{
description: '',
flavor: '',
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image meta */
},
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{
description: '',
flavor: '',
},
{ image: 'rear_thong' },)>>
<<run new setup.Equipment(
'sex_nipple',
'Whore Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps',],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
10, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'sex_neck',
'Whore Choker',
setup.equipmentslot.neck,
['choker'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_NORMAL},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{
description: '',
flavor: '',
},
{ image: 'rear_thong' },)>>
<<run new setup.Equipment(
'sex_nipple_good',
'Succubus Nipple Clamps',
setup.equipmentslot.nipple,
['accessory', 'nippleclamps'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
10, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
{ /* traits */
},
[ /* restrictions */
],
{},
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'sex_neck_good',
'Succubus Choker',
setup.equipmentslot.neck,
['choker'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{sex: setup.EQUIPMENT_STAT_BOOST_GOOD},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace' },
{
description: '',
flavor: '',
},
)>>
<<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(
'sex_legs_master',
'Pants of Competence',
setup.equipmentslot.legs,
['fake_clothes', 'legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
5, /* sluttines */
{
sex: setup.EQUIPMENT_STAT_BOOST_MASTER,
knowledge: -setup.EQUIPMENT_STAT_BOOST_GOOD
},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'legs_pants_invisible' },
{
description: 'A pants made from the most magnificent fabric imaginable, but would be invisible ' +
'to those stupid or unfit for their job... supposedly.',
flavor: "You can't see anything where the pants is supposed to be, " +
"but you're not planning to act incompetent in front of your other slavers. " +
'Still, the "pants" do make the wearer looks sexier than normal',
},
)>>
<<run new setup.Equipment(
'sex_nipple_master',
"Nipple Clamps of Lust",
setup.equipmentslot.nipple,
['legendary', 'accessory', 'nippleclamps'],
setup.EQUIPMENT_PRICE_MASTER, /* value */
9, /* sluttines */
{
sex: setup.EQUIPMENT_STAT_BOOST_MASTER,
brawn: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_lustful: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
],
{},
{
description: 'A legendary nipple clamps, said to increase the libido of its bearer uncontrollably.',
flavor: "The nipple clamps bits painfully into the soft flesh, " +
"forcing the nipples to be erect and its wearer perpetually horny",
},
)>><<run new setup.Equipment(
'nipplechains',
'Nipple Chains',
setup.equipmentslot.nipple,
['accessory', 'nipplechains'],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'nipple_clamps' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'buttplug',
'Buttplug',
setup.equipmentslot.rear,
['buttplug', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
},
[ /* restrictions */
],
{ image: 'rear_buttplug' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'dildo',
'Dildo',
setup.equipmentslot.genital,
['dildo', 'vagina', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_vagina: 1,
},
[ /* restrictions */
setup.qres.Trait(setup.trait.vagina_tight),
],
{ image: 'genital_dildo' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'dildogag',
'Dildo Gag',
setup.equipmentslot.mouth,
['gag', 'dildogag', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_gagged: 1,
},
[ /* restrictions */
],
{ image: 'mouth_gag_dildo' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'dickplug',
'Dick Plug',
setup.equipmentslot.genital,
['dickplug', 'dick', 'banuse', ],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
20, /* sluttines */
{},
{ /* traits */
},
[ /* restrictions */
setup.qres.Trait(setup.trait.dick_tiny),
],
{ image: 'genital_dickplug' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'goldnipplechains',
'Gold Nipple Chains',
setup.equipmentslot.nipple,
['accessory', 'nipplechains', 'nipples', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'nipple_clamps', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'goldbuttplug',
'Gold Buttplug',
setup.equipmentslot.rear,
['buttplug', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
},
[ /* restrictions */
],
{ image: 'rear_buttplug', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golddildo',
'Gold Dildo',
setup.equipmentslot.genital,
['dildo', 'vagina', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_vagina: 1,
},
[ /* restrictions */
setup.qres.Trait(setup.trait.vagina_tight),
],
{ image: 'genital_dildo', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golddildogag',
'Gold Dildo Gag',
setup.equipmentslot.mouth,
['dildogag', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_gagged: 1,
},
[ /* restrictions */
],
{ image: 'mouth_gag_dildo', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'golddickplug',
'Gold Dick Plug',
setup.equipmentslot.genital,
['dickplug', 'dick', 'banuse', ],
setup.EQUIPMENT_PRICE_GOOD, /* value */
20, /* sluttines */
{},
{ /* traits */
},
[ /* restrictions */
setup.qres.Trait(setup.trait.dick_tiny),
],
{ image: 'genital_dickplug', colorize: 'gold' },
{
description: '',
flavor: '',
},
)>>
<<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', 'legendary',],
setup.EQUIPMENT_PRICE_MASTER, /* value */
30, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_anus: 1,
},
[ /* restrictions */
],
{ image: 'rear_buttplug' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'dildo_cucumber',
'Enchanted Cucumber',
setup.equipmentslot.genital,
['dildo', 'vagina', 'banuse', 'vegetable', ],
100, /* value */
20, /* sluttines */
{}, /* skills */
{ /* traits */
eq_plug_vagina: 1,
},
[ /* restrictions */
setup.qres.Trait(setup.trait.vagina_tight),
],
{ image: 'genital_cucumber' },
{
description: 'A particularly large cucumber home-grown in your fort that has been enchanted to maintain its freshness for a good long while',
flavor: "The enchantment keeps the cucumber fresh, and remains cold and fresh to touch",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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,
['legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{ /* skills */
slaving: setup.EQUIPMENT_STAT_BOOST_MASTER,
combat: setup.EQUIPMENT_STAT_BOOST_NORMAL,
},
[ /* traits */
],
[ /* unit restriction */
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_corrupted_wielder_of_the_excalibur_0'),
],
{ /* image: 'TBD' */ },
{
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',
},
)>>
<<run new setup.Equipment(
'slaving_arms_master',
"Gloves of Tender Ministration",
setup.equipmentslot.head,
['legendary', 'clothes', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
slaving: setup.EQUIPMENT_STAT_BOOST_MASTER,
combat: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_cruel: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.slaving, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{},
{
description: 'A glove fitted with an enchantment of cruelty. Its name was chosen to mock whichever slave unlucky enough to be on the receiving side of the gloves.',
flavor: "The glove is enchanted with enchantments of cruelty, and whoever wears them will get inclined to find the nearest slave and abuse them at will",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_masquerade' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_ring_jeweled' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'neck_necklace' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'eyes_masquerade' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'arms_ring_jeweled' },
{
description: '',
flavor: '',
},
)>>
<<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(
'social_neck_other',
'"Heroic" Cape',
setup.equipmentslot.neck,
['cape'],
setup.EQUIPMENT_PRICE_GOOD, /* value */
0, /* sluttines */
{
social: setup.EQUIPMENT_STAT_BOOST_NORMAL,
sex: setup.EQUIPMENT_STAT_BOOST_TINY,
},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: 'A regular piece of cloth that is supposed to be worn around your neck like a cape. ' +
"Was supposedly worn by a heroic hero, but it is probably nothing more than another of your slaver's grand lunacy.",
flavor: "The piece of clothes is worn awkwardly near the neck, " +
"threatening to fly away when a particularly strong wind blow through. " +
'Strangely enough, it never does so far',
},
)>>
<<run new setup.Equipment(
'social_eyes_master',
"Masquerade Mask of Whispers",
setup.equipmentslot.eyes,
['legendary', 'accessory', 'eyemask', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
social: setup.EQUIPMENT_STAT_BOOST_MASTER,
intrigue: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_gregarious: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.social, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'eyes_masquerade' },
{
description: 'What was an ordinary masquerade mask has been enchanted by the touch of the divine, granting eloquence to its wielder.',
flavor: "The once ordinary mask has been enchanted, whispering eloquent responses to its wielder",
},
)>><<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_chestplate' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ image: 'torso_chestplate' },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: '',
flavor: '',
},
)>>
<<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,
}
)>>
<<run new setup.Equipment(
'survival_neck_master',
'Fairy Cloak',
setup.equipmentslot.neck,
['armor', 'cape', 'legendary', ],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{survival: setup.EQUIPMENT_STAT_BOOST_MASTER},
{ /* traits */
},
[ /* restrictions */
],
{ /* image: 'TBD' */ },
{
description: 'A transluscent cloak worn around the neck, akin to fairy wings. ' +
'Extremely light yet durable, perfect for scouting missions.',
flavor: 'Whenever the transluscent cloak flutters in the wind, ' +
'ethereal butterflies can be seen flying all around the resulting gale',
},
)>>
<<run new setup.Equipment(
'survival_torso_master',
"Breastplate of the Deer",
setup.equipmentslot.torso,
['legendary', 'armor', 'covering',],
setup.EQUIPMENT_PRICE_MASTER, /* value */
0, /* sluttines */
{
survival: setup.EQUIPMENT_STAT_BOOST_MASTER,
sex: -setup.EQUIPMENT_STAT_BOOST_MASTER,
},
{ /* traits */
per_cautious: 1,
},
[ /* unit restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.survival, setup.EQUIPMENT_WEAPON_MASTER_MIN_SKILL),
],
{ image: 'torso_chestplate' },
{
description: "A ranger breastplate infused with part of the golden deer's pelt. " +
"It imbues its wearer with a sense of caution and alacrity.",
flavor: "The breastplate shines a beautiful golden color under the sun. " +
"It is enchanted to ensure the safety of its wearer, but at a small cost of decreasing their libido",
},
)>>/* 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.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_sword' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'weapon_spear',
"Spear",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
{}, /* traits */
[
setup.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_spear' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'weapon_axe',
"Axe",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
{}, /* traits */
[
setup.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_axe' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'weapon_dagger',
"Dagger",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
{}, /* traits */
[
setup.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_dagger' },
{
description: '',
flavor: '',
},
)>>
<<run new setup.Equipment(
'weapon_staff',
"Staff",
setup.equipmentslot.weapon,
['basic', ],
0, /* value */
0, /* sluttines */
{}, /* stat effects */
{}, /* traits */
[
setup.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_staff' },
{
description: '',
flavor: '',
},
)>>
<<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.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.muscle_strong),
], /* unit restrictions */
{ image: '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',
},
)>>
<<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.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.skill_ambidextrous),
], /* unit restrictions */
{ image: 'weapon_dual' },
{
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',
},
)>>
<<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.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: 'weapon_rapier' },
{
description: 'Masterfully crafted rapier guaranteed to give you the required edge for those damsel-winning duels',
flavor: 'Despite being the preferred weapon of the high nobility, perhaps this weapon is still useful for a slaving career',
},
)>>
<<run new setup.Equipment(
'weapon_log',
"Log",
setup.equipmentslot.weapon,
[],
setup.EQUIPMENT_PRICE_NORMAL, /* value */
0, /* sluttines */
{
combat: -setup.EQUIPMENT_STAT_BOOST_NORMAL,
sex: setup.EQUIPMENT_STAT_BOOST_TINY,
},
{}, /* traits */
[
setup.qres.Job(setup.job.slaver),
], /* unit restrictions */
{ image: '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",
},
)>><<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,
}
)>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'coming_of_age', /* key */
"Coming of Age", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ ], /* tags */
'Event_coming_of_age',
{ /* roles */
},
{ /* actors */
'child': null },
[ /* outcomes */
setup.qc.Opportunity('coming_of_age', {child: 'child',}), ],
[ /* restrictions to generate */
],
1, /* Cooldown */
setup.rarity.never, /* 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()>>
<<yourrep _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 can try asking <<yourrep _u>> for advice, but on a second thought these
personal matters are best resolved with your own <<uhands $unit.player>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'enlightenment_of_the_soul___interlude', /* key */
"Enlightenment of the Soul - Interlude", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ ], /* tags */
'Event_enlightenment_of_the_soul___interlude',
{ /* roles */
},
{ /* actors */
'pupil': null,
'child': null,
},
[ /* outcomes */
setup.qc.TraitRemove('pupil', setup.trait.per_chaste),
setup.qc.QuestDirect('enlightenment_of_the_soul', {child: 'child'}),
],
[ /* restrictions to generate */
],
1,
setup.rarity.never, /* Rarity */
)>><<set _p = $g.pupil>>
<<set _doctor = $dutylist.getUnitIfAvailable('doctor')>>
<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 <<rep _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 <<rep _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> <<rep _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>>
<p>
<<if _p.isHasTrait('per_playful')>> 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_catkin') || _p.isHasTrait('race_lizardkin') || _p.isHasTrait('race_wolfkin') || _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_catkin') || _p.isHasTrait('race_lizardkin') || _p.isHasTrait('race_wolfkin') || _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_catkin') || _p.isHasTrait('race_lizardkin') || _p.isHasTrait('race_wolfkin') || _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_sly')>> 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_wolfkin')>> <<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 among 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'enlightenment_of_the_soul___interlude2', /* key */
"Enlightenment of the Soul - Interlude", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ ], /* tags */
'Event_enlightenment_of_the_soul___interlude2',
{ /* roles */
},
{ /* actors */
'child': null,
'pupil': null,
},
[ /* outcomes */
setup.qc.TraitRemove('pupil', setup.trait.per_chaste),
setup.qc.QuestDirect('enlightenment_of_the_soul', {child: 'child'}),
],
[ /* restrictions to generate */
],
1,
setup.rarity.never, /* Rarity */
)>><<set _p = $g.pupil>>
<<set _father = $family.getUnitRelation($g.child, 'father')>>
<<set _doctor = $dutylist.getUnitIfAvailable('doctor')>>
<<if !_father>>
/* player dismissed the father */
<p>
Later that week, <<yourrep _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, <<yourrep _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(
'dominant_slave_1', /* key */
"Dominant Slave 1", /* Title */
{ /* Author */
name: "Bigal",
url: "",
},
[ /* tags */
'fort',
],
'Event_dominant_slave_1',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.training_dominance_master], true),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.Available(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AllTraits([setup.trait.per_submissive], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
As you approach your bedchamber to get some rest from your work, you hear your dominant slaves' voice coming from your chambers followed by a groan of bliss, indicating that <<they $g.slave>>'s been having fun without you. As you come around the corner and lean of the door frame you see that you have guessed correctly.
</p>
<p>
<<name $g.slave>> is standing over your little sub who has been forced to be on all fours
<<if _o.isHasTrait('training_pet_master') || _o.isHasTrait('training_pet_advanced')>>
like the good little pet <<they _o>> is
<<else>> like a pet
<</if>>
with a collar and leash attached to <<their _o>> <<uneck _o>>.
<<name $g.slave>> appears to be taking <<their $g.slave>> dominance training quite literally as they are currently training <<name _o>> to walk underneath their <<ulegs $g.slave>>. <<name $g.slave>> walks forward every few seconds and waits for <<name _o>> to stop, before crouching down on <<name _o>>, giving <<them _o>> a quick head massage as <<name $g.slave>> lowers their head down to <<their _o>> ear and whispers in the commanding tone you have taught <<name $g.slave>> so well: "You're being such a good little pet. You are going to make our <<Master $unit.player>> so happy when <<they $unit.player>> return."
At this point, <<name $g.slave>> walks around to face the door and looks up from <<name _o>>'s staring eyes to find you watching them both. With a sudden change in <<their $g.slave>> body language that indicates surprise, <<name $g.slave>> walks forward a little and locks <<their $g.slave>> legs around <<name _o>>'s head, forcing <<them _o>> to look at their <<Master $unit.player>>. Looking down at <<reps $g.slave>> head squished between two thighs causes you become somewhat aroused, and you start to get <<wet $unit.player>>.
</p>
<p>
You finally decide this is the time to enter the room and walk straight up to <<name $g.slave>> getting within a few inches of <<their $g.slave>> face and stare into <<their $g.slave>> eyes for a few moments. As <<name $g.slave>> becomes increasingly nervous, you break the battle of will and lean back a bit, "Good <<girl $g.slave>>, it's nice watching you two learn your places" as you give <<name $g.slave>>'s face a gentle stroke. You crouch down and give <<name _o>> a head scratch and then turn around and go over to your <<uslaverbed $unit.player>> and begin to strip. As you lie down with your <<ubreasts $unit.player>><<if $unit.player.isHasDick()>>, <<udick $unit.player>> and <<uballs $unit.player>>
<</if>>
on full display, you wave your <<uhand $unit.player>> at them both and instruct them to continue.
</p>
<p>
Regaining some composure, <<name $g.slave>> releases <<name _o>> from <<their $g.slave>> legs,
<<if !$g.slave.isHasDick()>> "stay" she commands and walks over to your toy collection to retrieve a large strapon then walks over
<<else>> takes a step back
<</if>>
and kneels down behind <<their $g.slave>> submissive pet. As <<they $g.slave>> does <<they $g.slave>> begins groping <<their _o>> butt while gentle probing <<their _o>> anus for a solid minute until <<reps _o>> <<uarms _o>> begin to shake. Just before <<their _o>> arms give out, <<name $g.slave>> reaches forward and roughly grabs <<their _o>>
hair
to keep <<their _o>>
<<uface _o>>
from falling into the ground. "Oh no you don't pet." <<they $g.slave>> says as <<they $g.slave>> pulls <<name _o>>'s hair back making <<their _o>> ass squeeze <<their $g.slave>> <<udickorstrap $g.slave>> between <<their _o>> cheeks. "You don't want to give in before you receive your reward, do you?" <<name $g.slave>> explains, causing <<name _o>> to make a slutty smile as <<they _o>> starts grinding <<their _o>> ass against <<them $g.slave>> accompanied with a quick bark.
</p>
<<choose>>
<<opt "Watch <<them $g.slave>> train <<their $g.slave>> pet for a while">>
<<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
Seemingly content on just watching your slaves, you lie back and enjoy the evening festivities as <<name $g.slave>> finally lets <<their $g.slave>> <<udickorstrap $g.slave>> slide into <<name _o>>'s <<uhole _o>>, causing <<them _o>> to groan happily and shudder. <<name $g.slave>> eventually lets go of <<name _o>>'s hair, allowing <<them _o>> to sink down to the floor and stick out <<their _o>> ass even more. "If you want this <<udickorstrap $g.slave>> <<name _o>>, you have to earn it", <<name $g.slave>> teases as <<they $g.slave>> picks up <<name _o>>'s leash again, making the collar tight against <<their _o>> neck, reminding <<them _o>> that <<their _o>> place is at the end of a leash, pleasing <<their _o>> <<Master $g.slave>>. <<Rep _o>> obediently reaches back and pulls apart <<their _o>> butt cheeks to reveal <<their _o>>
<<if _o.isHasVagina()>>
<<uvagina _o>> and
<</if>>
<<uanus _o>> for <<their _o>> <<Master $g.slave>> as <<they _o>> started humping <<name $g.slave>>'s <<udickorstrap $g.slave>>. "Good <<girl _o>>!"
</p>
<p>
With the constant action between your two slaves, it doesn't take long for <<name $g.slave>> and <<name _o>> to both almost reach their orgasms. "Ah ah ah, not yet pet. You don't get to
<<if _o.isHasDick()>>
cum
<<else>>
climax
<</if>>
unless you make me first. You won't want that would you." <<name $g.slave>> says as <<they $g.slave>> holds <<name _o>> firmly against <<them $g.slave>> so she couldn't hump anymore. <<name _o>> looks back with pure lust in <<their _o>> eyes, clearly begging for release "<<Master $g.slave>> please, am I not a good pet?". At that moment <<name $g.slave>> pulled on <<their _o>> collar again, pulling <<name _o>> up against <<their $g.slave>> <<ubreasts $g.slave>> and proceeds to start groping <<reps _o>> <<ubreasts _o>> and pinching <<their _o>> nipples. As soon as <<name _o>> started gasping again, <<name $g.slave>> thrusts forward, pushing them both on the ground as <<they $g.slave>> whispers in <<reps _o>> ears "I know you are.
<<if _o.isHasDick()>>
Cum
<<else>>
Climax
<</if>>
for me".
</p>
<p>
You eventually fell asleep to the quiet moans of your little puppy and the occasionally "Shh, don't wake <<Master $unit.player>>" coming from the other, more dominant slave.
</p>
<<opt "Help <<them $g.slave>> train their pet">>
<<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
Letting <<name $g.slave>> to continue to <<woman $g.slave>>handle <<name _o>>, <<name $g.slave>> finally lets <<their $g.slave>> <<udickorstrap $g.slave>> slide into <<name _o>>'s <<uhole _o>>, causing <<them _o>> to groan happily and shudder. You take this as your time to slide off your <<uslaverbed $unit.player>> and walk over to <<name _o>>. Crouching down in front of <<name _o>>, you spread your <<ulegs $unit.player>> seductively to reveal your
<<if $unit.player.isHasDick()>>
<<udick $unit.player>> and <<uballs $unit.player>> hanging tantalizingly
<<else>>
<<uvagina $unit.player>>
<</if>>
just slightly out of reach from <<reps _o>> <<umouth $unit.player>>.
</p>
<p>
Reaching out with both <<uhands $unit.player>>, you begin scratching your pet's head, eliciting a moan of satisfaction from <<them _o>>, before saying "<<name $g.slave>>, we should teach <<name _o>> some new tricks, and only if <<they _o>> does well with the trick can we both reward <<them _o>>."
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif $unit.player.isHasTrait('per_submissive') && $friendship.getFriendship($unit.player, $g.slave) > 600>>
<<opt "Let <<name $g.slave>> train two pets">>
<p>
Slowly getting up, you walk over to a drawer that you keep locked from your other slavers for a very important reason. <<name $g.slave>> and <<name _o>> both stop and watch you open the drawer and pull out a jeweled collar that you have been keeping for a special occasion. You walk over to <<name $g.slave>> and <<name _o>> and kneel down beside them both, before giving the collar to <<name $g.slave>>.
</p>
<p>
<<name $g.slave>> cautiously takes the collar in <<their $g.slave>> <<uhand $g.slave>> and looks back towards you puzzled. "You've been a good slave <<name $g.slave>> for quite some time and I think it's time I fully reward your loyalty towards your <<Master $unit.player>>." You lean over
<<reps _o>> back and kiss <<name $g.slave>>, to <<their $g.slave>> surprise, for several seconds before pulling back, "I have but one condition before we start. This stays between the three of us". <<name $g.slave>> does a quick bow of <<their $g.slave>> head, the surprise not having quite sunk in yet, while you feel <<name _o>> grab ahold of your thigh and rubs <<their _o>> head against it like a good cuddly cat. Guiding <<reps $g.slave>> <<uhands $g.slave>> with the collar still in them around your neck, you feel <<they $g.slave>> finally understand and finishes fastening the collar around your neck. With the collar fastened you get down on all fours next to <<name _o>> and nustle your head against <<theirs _o>> while presenting your butt to <<name $g.slave>>, just another pet for tonight's only <<Master $g.slave>>.
</p>
<p>
With two pets to train, <<name $g.slave>> has <<their $g.slave>> work cut out for them for the rest of the evening as <<they $g.slave>> routinely made each one of <<their $g.slave>> pets service <<their $g.slave>> <<udickorstrap $g.slave>> while the other tended to <<their $g.slave>> <<uhole $g.slave>>. The night ends after several hours of depravity with all three occupants lying exhausted on <<reps $unit.player>> <<uslaverbed $unit.player>>, <<reps $g.slave>> <<udickorstrap $g.slave>> still lodged deep inside <<reps $unit.player>> <<uhole $unit.player>>.
</p>
<<run setup.qc.BoonizeRandom('you', 2).apply(setup.costUnitHelper($unit.player))>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'ambivalent_sleeping', /* key */
"Ambivalent Sleeping", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_ambivalent_sleeping',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_none, setup.trait.training_obedience_basic], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You retired to your bedchamber late today, and it is already dark inside. Your slavers are already asleep in their <<uslavebed $g.slave>> by the time you come in, and <<yourrep $g.slave>> catches your eye, and you recall the <<man $g.slave>> still have not been fully broken yet.
The <<girl $g.slave>> sleeps nude, and while <<they $g.slave>> have a small blanket to ward off the cold, half <<their $g.slave>> <<ubody $g.slave>> remains bare.
</p>
<p>
You flick a candle, and the
dim light plays across <<their $g.slave>> <<uskin $g.slave>>.
<<if $g.slave.isHasTrait('breast_huge')>><<Their $g.slave>> massive boob on that side is slightly shifted by each breath
<<elseif $g.slave.isHasTrait('breast_large')>>
<<Their $g.slave>> breast on that side rises and falls with each breath
<<else>>That side of <<their $g.slave>> <<ubreasts $g.slave>>
rises and falls with each breath<</if>>.
<<They $g.slave>>'s sleeping soundly, <<their $g.slave>> breaths coming deep and slow. Most slaves where <<they $g.slave>> slave|is mentally are troubled by bad dreams, but the poor <<girl $g.slave>> is evidently too tired for that.
</p>
<<if $unit.player.isHasDick()>>
<<set _text = "Cum on <<their $g.slave>> face">>
<<else>>
<<set _text = "Squirt on <<their $g.slave>> face">>
<</if>>
<<choose>>
<<opt "Grope <<their $g.slave>> <<ubreasts $g.slave>>">>
<p>
<<Their $g.slave>> eyes fly open as <<they $g.slave>> feels someone groping <<them $g.slave>>.
<<if $g.slave.isHasTrait('breast_titanic')>>
You're hefting and massaging <<their $g.slave>> mass of breastflesh, playing with <<their $g.slave>> natural boob, making <<their $g.slave>> huge soft udder bounce and jiggle.
<<elseif $g.slave.isHasBreasts()>>
You've got <<their $g.slave>> whole tit in your hands, jiggling and squeezing the entire thing.
<<else>>
You're massaging and squeezing <<their $g.slave>> <<ubreasts $g.slave>>.
<</if>>
<<Their $g.slave>> face contorts with surprise and then outrage, but then <<they $g.slave>>
<<if !$g.slave.isCanSee()>>recognizes your familiar <<uscent $unit.player>> and
<</if>>
realizes whose <<uhand $unit.player>> it is that's taking liberties with
<<them $g.slave>>.
<<if $g.slave.isHasTrait('per_smart')>>
Though <<they $g.slave>>'s <<rep setup.trait.per_smart>>,
<<elseif $g.slave.isHasTrait('per_slow')>>
Though <<they $g.slave>>'s not dumb,
<<else>>
<<They $g.slave>>'s an idiot, and
<</if>>
in <<their $g.slave>> drowsy state <<they $g.slave>> can't figure out what to do.
<<They $g.slave>> settles for freezing submissively and letting you do what you like. You test <<their $g.slave>> compliance by
playing with <<their $g.slave>> nipple, pinching it hard enough to hurt. <<They $g.slave>> accepts the mammary abuse.
Satisfied, you leave <<their $g.slave>> to get back to sleep as best <<they $g.slave>> can.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt _text>>
<p>
You stand over <<their $g.slave>>, quietly masturbating while watching <<them $g.slave>> sleep.
<<if $unit.player.isHasVagina()>>
You're on excellent terms with your cunt, and you know just what it takes to make yourself squirt. When you feel the heat building just right, you quickly straddle <<their $g.slave>> face without touching <<their $g.slave>>, angling yourself carefully and increasing the pace of your schlicking. In no time at all, a jet of femcum splashes onto <<their $g.slave>> face and down across <<their $g.slave>> <<ubreasts $g.slave>>.
<<else>>
You fancy yourself a bit of a marks<<man $unit.player>>,
and you don't feel the need to bend over <<them $g.slave>> to score good hits.
Your load comes in three main jets: the first hits <<them $g.slave>> on the nipple, the second tracks up <<their $g.slave>> sternum and throat, and the third splashes full across <<their $g.slave>> face as <<their $g.slave>> eyes fly open.
<</if>>
<<They $g.slave>> sputters with surprise and then outrage, but once <<they $g.slave>> recognizes your taste and<<they $g.slave>> realizes who it is standing over <<them $g.slave>>, and freezes in terror.
<<if $g.slave.isHasTrait('per_smart')>>
<<They $g.slave>>'s <<rep setup.trait.per_smart>>, and <<they $g.slave>> immediately realizes
<<elseif $g.slave.isHasTrait('per_slow')>>
<<They $g.slave>>'s not dumb, and <<they $g.slave>> quickly realizes
<<else>>
<<They $g.slave>> gradually manages to calculate
<</if>>
that doing anything other than thanking you would be phenomenally stupid. "Thank you,
<<Master $unit.player>>," <<they $g.slave>> mumbles
blearily.
You leave <<them $g.slave>> to puzzle over <<their $g.slave>> own submissiveness, covered in your
<<ucum $unit.player>>.
</p>
<<opt "Just watch <<them $g.slave>> for a little while">>
<p>
You stand there for a while, watching the exhausted slave sleep.
It's an oddly restful sight, and the aesthetics of <<their $g.slave>> slumbering little movements hold your attention for a time. After a while, you head to your own <<uslaverbed $g.slave>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'anal_cowgirl', /* key */
"Anal Cowgirl", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_anal_cowgirl',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.Available(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.NoTraits([setup.trait.training_anal_master], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
As you approach your bedchamber as you retire from your work, you hear the unmistakable sounds of sexual congress. It seems likely that while waiting for your return, your sex toys are playing with each other inside your room. And as you enter, you see that this is true.
</p>
<p>
<<Rep $g.slave>> slave|is sitting on the end of the <<uslaverbed $g.slave>>,
though only <<their $g.slave>> legs, crotch and <<uhands $g.slave>>
are immediately visible. This is because <<they $g.slave>> has
<<rep _o>> on top of <<them $g.slave>>, impaled on
<<if $g.slave.isHasDick() && !$g.slave.isInChastity()>><<their $g.slave>> cock<<else>>a strap-on <<they $g.slave>>'s wearing<</if>>.
<<Rep _o>> is bent almost double.
<<name $g.slave>> has <<their $g.slave>> <<uhands $g.slave>> up on the backs of <<name _o>>'s knees,
holding <<their $g.slave>> <<ulegs _o>> up against <<their $g.slave>> <<if _o.isHasTrait('breast_huge')>>inconveniently big boobs<<else>>shoulders<</if>>.
<<name _o>> is completely helpless, and <<they _o>>'s being fucked hard:
<<if $g.slave.isHasDick()>>
<<set _compat = setup.sexbodypart.penis.getAccomodatingValue($g.slave, _o, setup.sexbodypart.anus)>>
<<if _compat >= 2>>
<<name $g.slave>>'s cock is very big,
<<if _o.isHasTrait('anus_gape')>>even for <<rep _o>>'s loose anus<<elseif _o.isHasTrait('anus_loose')>>even for <<name _o>>'s experienced anus<<else>>especially for <<name _o>>'s tight anus<</if>>,
so <<name $g.slave>> is bouncing <<their $g.slave>> anal bottom up and down only a little way, allowing <<them $g.slave>> to do so fast.
<<elseif _compat >= 1>>
<<name $g.slave>>'s cock is a good fit for <<name _o>>'s <<if _o.isHasTrait('anus_gape')>>loose<<elseif _o.isHasTrait('anus_loose')>>welcoming<<else>>tight<</if>> anus, so <<name $g.slave>> is bouncing <<their $g.slave>> anal bottom up and down fast.
<<else>>
<<name $g.slave>>'s cock barely stretches <<name _o>>'s <<if _o.isHasTrait('anus_gape')>>loose<<elseif _o.isHasTrait('anus_loose')>>welcoming<<else>>tight<</if>> anus, so <<name $g.slave>> is bouncing <<their $g.slave>> anal bottom up and down as fast as <<they $g.slave>> possibly can.
<</if>>
<<else>>
<<name $g.slave>> is using the biggest dildo <<name _o>>'s <<if _o.isHasTrait('anus_gape')>>loose<<elseif _o.isHasTrait('anus_loose')>>welcoming<<else>>tight<</if>> anus can handle, and <<they $g.slave>>'s bouncing <<their $g.slave>> anal bottom up and down fast.
<</if>>
Surprisingly, the slave on top doesn't seem too unhappy with this. <<They $g.slave>>'s no slavishly devoted buttslut, but
<<if _o.isInChastity()>>
<<they _o>>'s taking it well, and even looking a little uncomfortable as the beginnings of a hardon press against <<their _o>> <<ucgenital _o>>.
<<elseif _o.isHasDick()>>
<<their _o>> <<udick _o>> is proudly erect, sticking straight up as <<they _o>> reclines against <<name $g.slave>> beneath <<them _o>>, wiggling a little with the rhythm of the pounding.
<<else>>
<<their _o>> cunt glistens as the pistoning phallus alternately pushes and
pulls at <<their _o>> vaginal walls.
<</if>>
<<if _o.isHasTail()>>
You can even see <<their _o>> tail wagging from time to time.
<</if>>
"H-h-hi-i
<<if $unit.player.isMale()>>M-m-ma-a-st-ter<<else>>M-m-mi-i-is-t-r-r-e-es-s-s<</if>>," says <<name _o>>
breathlessly, doing <<their _o>> best to greet you properly despite the bouncing.
</p>
<p>
<<name $g.slave>> stops thrusting, and <<their $g.slave>>
<<if $g.slave.isHasTrait('face_beautiful')>>gorgeous<<elseif $g.slave.isHasTrait('face_attractive')>>pretty<<else>>homely<</if>>
face instantly appears, craning out from behind <<name _o>>'s back to see.
"Oh, hi, <<Master $unit.player>>!" <<they $g.slave>>
says with a cheerful smile,
<<if $g.slave.isHasTrait('muscle_verystrong')>>
not breathing hard at all despite bouncing a <<man $g.slave>> off <<their $g.slave>> crotch.
<<elseif $g.slave.isHasTrait('muscle_strong')>>
barely out of breath despite the effort.
<<else>>
completely out of breath.
<</if>>
"I <<if $g.slave.isCanSee()>>saw<<else>>heard<</if>> you coming, and I thought <<they _o>>'d look cute with <<if $g.slave.isHasDick()>>my dick<<else>>a strap-on<</if>> up <<their _o>> butthole for you,
so I told <<them $g.slave>> to take it."
<<They $g.slave>> shrugs.
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>
"I like buttsex so much, it's good to give back."
<<else>>
"I thought <<they _o>> was going to be unhappy about it, but <<they _o>>'s actually taking it really well."
<</if>>
<<They $g.slave>>
<<if !$g.slave.isAllowedOrgasm()>>
clearly held off on climaxing, since your rules forbid <<them $g.slave>> from doing it,
<<elseif !$g.slave.isCanOrgasm()>>
can't orgasm with <<their $g.slave>> <<ucgenital $g.slave>> on the way,
<<else>>
clearly held off on climaxing in case you wanted <<their $g.slave>> libido undiminished for your amusement,
<</if>>
and is obediently waiting for your orders, with the bemused <<name _o>> perched motionless atop <<them $g.slave>>.
</p>
<<choose>>
<<opt "Make sure <<they $g.slave>> looks after <<their $g.slave>> bottom">>
<p>
You tell <<them $g.slave>> you'll play with <<them $g.slave>> after <<they $g.slave>>'s done, but add that <<name _o>> is clearly being a very good little anal slut, and <<they _o>> deserves to be rewarded.
Hearing this, <<name _o>> looks at you very gratefully, and mouths a quiet thanks.
"Yes <<Master $unit.player>>!" comes the response.
<<name $g.slave>> shifts <<their $g.slave>> bitch to one side,
and cranes <<their $g.slave>> head upward to make out with the compliant slave. <<name _o>> kisses <<them $g.slave>> back with gusto, surprising <<name $g.slave>> again. <<They $g.slave>> recoils in shock at
<<if _o.isHasTrait('mouth_demon')>>
the dexterous and lengthy demonic tongue suddenly invading <<their $g.slave>> throat,
<<else>>
how much tongue <<name _o>> gives <<them $g.slave>>,
<</if>>
but moans aggressively and gets <<their $g.slave>> revenge by dropping one of <<name _o>>'s knees and
<<if (_o.isInChastity())>>
playing with one of <<their _o>> nipples.
<<elseif (_o.isHasDick())>>
jacking <<them _o>> off.
<<else>>
fingering <<their _o>> clit.
<</if>>
Jerking at the stimulation, <<name _o>>
<<if _o.isHasTail()>>
raises <<their _o>> <<utail _o>> and
<</if>>
urges <<their _o>> butt down against <<name $g.slave>>'s hips, physically begging for a resumption of the sodomy. <<name $g.slave>> applies <<themself $g.slave>>, forcing a growing whine out of <<name _o>> as <<their _o>> asspussy is mercilessly fucked.
<<if (_o.isInChastity())>>
<<Their _o>> chastity cage prevents <<them _o>> from orgasming, but when <<name $g.slave>> climaxes and lets <<them _o>> up,
<<elseif (_o.isHasDick())>>
<<They _o>> cums all over <<their _o>> own chest and <<ubelly _o>>, the droplets of semen oozing down <<them _o>> as <<name $g.slave>> reaches <<their $g.slave>> own climax.
When <<name $g.slave>> lets <<them _o>> up,
<<else>>
<<They _o>> orgasms powerfully, <<their _o>> abs tightening. When <<name $g.slave>> lets <<them _o>> up,
<</if>>
<<they $g.slave>> looks pleased with <<themself $g.slave>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply(setup.costUnitHelper(_o))>>
<<opt "Dominate the slave on top">>
<p>
You make no reply, but
<<if $unit.player.isHasDick()>>advance on the couch,
stripping down to reveal a raging erection.<<else>>
move to a side table, selecting a formidable strap-on.<</if>>
<<if $g.slave.isCanSee()>>Seeing<<else>>Hearing<</if>> this,
<<name $g.slave>> <<if $g.slave.isFemale()>>giggles with anticipation
<<else>>steels <<themself $g.slave>><</if>>
and pulls <<name _o>>'s knees back farther.
The slave whines at the stretch, and then gasps as the invading phallus pops free of
<<their _o>> asshole.
<<Their _o>> anus
<<if _o.isHasTrait('anus_gape')>>gapes lewdly, its sphincter so well stretched that it stays invitingly open,
<<elseif _o.isHasTrait('anus_loose')>>gapes slightly, its sphincter remaining just barely open,
<<else>>closes up again immediately once it's no longer being penetrated. Its rosebud is<</if>>
glistening with lube<<if $g.slave.isHasDick()>> and precum from <<name $g.slave>>'s cock<</if>>.
But you decide to be more circumspect. Pressing your <<if $unit.player.isHasDick()>>dickhead<<else>>phallus<</if>> into <<name _o>>'s <<umouth _o>>,
you tell <<them _o>> to be thorough with <<their _o>> saliva.
<<Their _o>> eyes widen at the implication, and <<they _o>> starts to suck lushly.
</p>
<p>
Suddenly, <<they _o>> jerks and squeals into your <<if $unit.player.isHasDick()>>dick<<else>>crotch<</if>>.
With you standing there, <<name $g.slave>> can't really see much, and <<they $g.slave>> can't drop <<name _o>>'s legs without throwing everything into confusion.
So, <<they $g.slave>>'s reduced to blind jabs to get <<their $g.slave>> <<udickorstrap $g.slave>> back up the poor slave's butt<<if _o.isHasTail()>>, using <<name _o>>'s tail as a guide<</if>>.
It takes <<them $g.slave>> quite a while to manage it, and when <<they $g.slave>>'s finally seated, <<name _o>> gives as huge a sigh as <<they _o>> can manage with a phallus down <<their _o>> throat. <<Their _o>> relief is short lived, however, because soon afterward, you withdraw, leaving a string of spit between <<their _o>> wet lips and the <<if $unit.player.isHasDick()>>head of your turgid cock<<else>>massive head of your strap-on<</if>>.
</p>
<p>
<<if _o.isHasVagina()>>
With <<name $g.slave>> occupying <<name _o>>'s rear hole, your next step is obvious to everyone involved, and <<they _o>> groans with fullness as <<they _o>> feels <<their _o>> cunt accommodate you. <<name $g.slave>> matches <<their $g.slave>> rhythm to yours, and
<<if $g.slave.isHasDick()>>orgasms promptly, since <<they $g.slave>>'s less accustomed than you are to the delectable sensation of a <<man _o>> tightened by a phallus in <<their _o>> other hole<<else>>climaxes quickly despite having no sensation in <<their $g.slave>> fake dick, since <<they $g.slave>> finds the situation so arousing<</if>>.
<<elseif _o.isHasTrait('anus_gape')>>
<<name _o>>'s rear hole is such a loose slit that double anal shouldn't be too much trouble for <<them _o>>. It isn't, though <<their _o>> breath definitely quickens as <<they _o>> feels a second rod push its way past <<their _o>> stretched sphincter. <<name $g.slave>> <<if $g.slave.isHasDick()>>orgasms promptly, unable to prolong sex when <<they $g.slave>>'s feeling <<their $g.slave>> cock slide against you inside another slave's anus<<else>>climaxes quickly despite having no sensation in <<their $g.slave>> fake dick, since <<they $g.slave>> finds the situation so arousing<</if>>.
<<else>>
<<name _o>>'s rear hole is a bit tight for double anal, and <<they _o>>'s already quite dominated; you mean to use <<them _o>> thoroughly, not destroy <<them _o>>. So, you and <<name $g.slave>> switch off: you use <<name _o>>'s butt while <<name $g.slave>> pins <<them _o>> for you, and then you go back to <<name _o>>'s mouth for a while and let <<name $g.slave>> take over sodomizing duties.
<<They $g.slave>>
<<if $g.slave.isHasDick()>>orgasms promptly, since <<they $g.slave>> finds a hole warm from your use very hot
<<else>>climaxes quickly despite having no sensation in <<their $g.slave>> fake dick, since <<they _o>> finds the situation so arousing<</if>>.
<</if>>
When <<name _o>> has stumbled off to the baths, <<name $g.slave>> presents <<themself $g.slave>> for your pleasure, already smelling of sex and smiling trustingly.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'asspussy', /* key */
"Asspussy", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_asspussy',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_anal_advanced, setup.trait.training_anal_master], true),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.Available(),
])),
setup.qres.AnyTrait([setup.trait.anus_loose, setup.trait.anus_gape], true),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
'other': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
],
'lover': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.YourLover(),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you pass through your bedchamber, you notice <<yourrep $g.slave>> checking out <<their $g.slave>> own anus in the mirror.
</p>
<p>
There's no other way to describe what <<they $g.slave>> slave|is doing: the <<urace $g.slave>> slave|have <<their $g.slave>> back to the mirror<<if $g.slave.isHasTrait('height_short')>> and slave|is up on tiptoe to bring <<their $g.slave>> butthole into view<</if>>, and <<they $g.slave>>
got <<their $g.slave>> hips cocked to spread <<their $g.slave>> butt and
reveal <<their $g.slave>> backdoor.
<<They $g.slave>> seems quite fascinated.
As you pause to watch, <<they $g.slave>> begins to clench and relax <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>gaping<<else>>loose<</if>> hole,
alternately puckering and relaxing the <<uskin $g.slave>> around it. <<They $g.slave>>
<<if $g.slave.isFemale()>>giggles<<else>>frowns<</if>>
self-consciously at the sight, and then relaxes all the way, causing <<their $g.slave>> asspussy to open into a <<if $g.slave.isHasTrait('anus_gape')>><<if $unit.player.isHasDick()>>cock<<else>>dildo<</if>>-hungry<<else>>slight<</if>> gape. <<They $g.slave>> notices you out of the corner of <<their $g.slave>> eyes and
turns to greet you, <<their $g.slave>> rear only partially concealing <<their $g.slave>> asshole in the mirror.
</p>
<<if $g.slave.isCanTalk()>>
<p>
"Hi <<Master $unit.player>>," <<they $g.slave>> says <<uadv $g.slave>>. "I was just noticing how much my butt has changed. I hadn't really looked at it in a while, you know? It used to be so tight back then in the past, and now <<if $g.slave.isHasTrait('anus_gape')>>I've got a rear pussy<<else>>it's obviously a fuckhole<</if>>."
</p>
<<else>>
<p>
<<if $g.slave.isCanPhysicallyTalk()>>
<<Their $g.slave>> <<uequipslot $g.slave 'mouth'>> prevents them from talking,
<<else>>
<<They $g.slave>> slave|is not allowed to speak,
<</if>>
so <<they $g.slave>> slave|try <<their $g.slave>> best to gesture how much <<their $g.slave>> holed had changed compared to the past.
</p>
<</if>>
<p>
<<They $g.slave>> turns to face the mirror, hiking one knee up onto the nightstand in front of it. <<They $g.slave>>
cocks <<their $g.slave>> hips again and starts blatantly winking <<their $g.slave>> anus for you, using <<their $g.slave>> <<uhands $g.slave>> to tweak <<their $g.slave>> nipples.
<<if $g.slave.isHasTrait('anus_gape')>>
The huge area of anus around <<their $g.slave>> actual hole certainly draws the eye towards its center, though the way <<they $g.slave>>'s using <<their $g.slave>> sphincter as a come-on does enhance the effect.
<</if>>
<<if $g.slave.isCanTalk()>>
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>
"Please, <<Master $unit.player>>," <<they $g.slave>> begins to beg. "I can't wait to feel <<if $unit.player.isHasDick()>>your cock<<else>>you<</if>> inside me."
<<else>>
"Please, <<Master $unit.player>>," <<they $g.slave>> says. "Use me."
<</if>>
<<else>>
<<They $g.slave>> wordlessly begs for you to use <<them $g.slave>>.
<</if>>
</p>
<<choose>>
<<opt "Double anal with your lover">>
<<set $g.a = $g.lover>>
<<include "Event_Asspussy_Common">>
<<opt "Double anal with the other slave in your bedchamber: <<rep $g.other>>">>
<<set $g.a = $g.other>>
<<include "Event_Asspussy_Common">>
<<opt "Chat about <<their $g.slave>> ass">>
<p>
You head into the bedroom, shedding clothing as you go. <<They $g.slave>> stares at you as you advance, <<their $g.slave>> eyes fixing on your
<<if $unit.player.isHasBreasts()>>
tits as you reveal them<<else>>
<<ubelly $unit.player>> as they become visible<</if>>, and <<their $g.slave>> lips part slightly. <<Their $g.slave>> gaze only shifts when you disrobe completely, revealing your
<<if $unit.player.isHasDick()>>hardening dick<<else>>flushed <<woman $g.slave>>hood<</if>>; <<they $g.slave>> licks <<their $g.slave>> lips unconsciously. You sit on the <<uslaverbed $g.slave>> and pat your thighs, and <<they $g.slave>> hurries over, <<if $g.slave.getMainTraining().getTags().includes('tranal')>>eagerly<<else>>carefully<</if>> swinging <<their $g.slave>> leg over the <<uslaverbed $g.slave>> and seating <<themself $g.slave>> in your lap. <<if $unit.player.isHasDick()>>Your cock slides easily up <<their $g.slave>> whorish butt. One of your <<uarms $unit.player>><<else>>You decided not to bother with a strap-on, so you slide a couple of fingers inside <<them $g.slave>>, and <<they $g.slave>> reciprocates by working a <<uhand $g.slave>> under <<themself $g.slave>> to attend to your pussy. Your free arm<</if>> wraps around <<them $g.slave>> <<if $g.slave.isHasTrait('breast_titanic')>>and under <<their $g.slave>> heavy tits, resting in a cocoon of soft breastflesh<<elseif $g.slave.isHasTrait('breast_large')>>heavy breasts, hefting their weight and eliciting a sigh from the slave<<else>>to fondle <<their $g.slave>> <<ubreasts $g.slave>><</if>>. Being held this way, <<they $g.slave>> can't really <<if $unit.player.isHasDick()>>bounce on your dick, so <<they $g.slave>> just wiggles <<their $g.slave>> butt into you to seat it a bit deeper<<else>>grind against your fingers<</if>> and sighs contentedly. You <<ustripmouthand $g.slave>> instruct <<them $g.slave>> to elaborate on what <<they $g.slave>> said earlier.
</p>
<p>
"Yes <<Master $unit.player>>," <<they $g.slave>> says automatically, and then pauses. "Hmm. I try not to think about back, you know, before." <<They $g.slave>> squeezes <<their $g.slave>> buttocks against your <<if $unit.player.isHasDick()>>crotch<<else>><<uhand $unit.player>><</if>>. "But I
guess long time ago I didn't really think about my butthole, much?
You know all about that." You tell <<them $g.slave>> to explain it anyway. <<They $g.slave>> looks puzzled for a moment, but twists around to plant an awkward kiss on your chin before continuing. "Well," <<they $g.slave>> says, with mock seriousness. Here in the fort, we
slaves are expected to be fit and ready to fuck. So our butts are always kept nice and clean. That way, our <<if $unit.player.isMale()>>Masters<<else>>Mistresses<</if>>
can -" <<they $g.slave>> clenches <<their $g.slave>> sphincter <<if $unit.player.isHasDick()>>around the base of your cock - "fuck<<else>>against your invading fingers - "play with<</if>> our asses" - clench - "whenever" - clench - "they" - clench - "want!" <<They $g.slave>> squeals as you use your encircling arm to hoist <<their $g.slave>> <<ubody $g.slave>> up a bit higher, and mercilessly <<if $unit.player.isHasDick()>>fuck<<else>>fingerfuck<</if>> <<their $g.slave>> ass.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif $g.slave.isHasTraitExact('anus_loose')>>
<<opt "Change it some more">>
<p>
You tell <<them $g.slave>> that since <<they $g.slave>> appreciates how <<their $g.slave>> ass has changed, <<they $g.slave>> won't be surprised if you treat it like the fuckhole it is. Something in your tone makes <<them $g.slave>> cautious, but <<they $g.slave>>'s a good <<girl $g.slave>> and
<<if $g.slave.isCanTalk()>>
says "Yes, <<Master $unit.player>>," automatically.
<<else>>
nods.
<</if>>
You strip <<them $g.slave>> out of <<their $g.slave>> usual gear. You then take a buttplug and comfortably fills <<their $g.slave>> rectum with it, as well as attach a sturdy leather collar to <<their $g.slave>> neck complete a leash. You snap your fingers, pointing at the ground, and <<they $g.slave>> scrambles to <<their $g.slave>> <<uhands $g.slave>> and knees and removes <<their $g.slave>> plug. After <<they $g.slave>>'s taken a harsh buttfuck, you <<if $unit.player.isHasDick()>>push the plug back in without letting any of your cum escape<<else>>plug <<their $g.slave>> up again<</if>> and attach the leash to your belt. You proceed to resume your work in your office, ignoring your anal toy completely, letting <<them $g.slave>> kneel next to you as you work - <<they $g.slave>> doesn't seem to want to sit, for some reason. For the rest of the day, <<their $g.slave>> anus takes the full force of your libido. You fuck nothing else, confining your efforts to <<their $g.slave>> backdoor, keeping <<them $g.slave>> plugged when you aren't penetrating <<them $g.slave>>. When you're bored, you hand <<them $g.slave>> a dildo and tell <<them $g.slave>> to take care of it <<themself $g.slave>>.
</p>
<p>
<<They $g.slave>>'s quite exhausted by the end of the day, walking dumbly along behind you, leashed to your belt and wondering tiredly when <<their $g.slave>> next reaming is coming. <<They $g.slave>> doesn't notice that you're bringing <<them $g.slave>> back to stand in front of the mirror in your bedchamber until <<they $g.slave>>'s there. You push <<their $g.slave>> compliant body into an approximation of <<their $g.slave>> position from the morning and tell <<them $g.slave>> to remove <<their $g.slave>> plug and look at <<their $g.slave>> asshole.
<<if $g.slave.isCanTalk()>>
"Yes <<Master $unit.player>>," <<they $g.slave>> says, and obeys.
<<else>>
<<They $g.slave>> obeys wordlessly.
<</if>>
<<if $unit.player.isHasDick()>> This releases quite a rush of ejaculate.<</if>> <<Their $g.slave>> anus is very loose, a lewd, gaping fuckhole hungry for toys, fingers, and dick. You tell <<them $g.slave>> that, and ask whether <<they $g.slave>> agrees.
<<if $g.slave.isCanTalk()>>
"Yes <<Master $unit.player>>," <<they $g.slave>> says.
<<else>>
They nods.
<</if>>
</p>
<<run setup.qc.TraitIncreaseExisting('slave', setup.trait.anus_gape).apply($gQuest)>>
<</choose>><p>
You tell <<them $g.slave>> that <<they $g.slave>>'s got a nice asspussy, and grope <<them $g.slave>> thoroughly, cupping <<their $g.slave>> buttocks with one <<uhand $unit.player>> and squeezing <<their $g.slave>> <<ubreasts $g.slave>> with the other. <<They $g.slave>> looks
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>desperately eager<<else>>ready and willing<</if>>, and angles <<themself $g.slave>> just right, but you administer a light slap to <<their $g.slave>> ass and continue, telling <<their $g.slave>> that it's so nice you feel like sharing it.
<<They $g.slave>>'s <<if $g.slave.getMainTraining().getTags().includes('tranal')>>so ready to fuck <<they $g.slave>> can't quite think of what to say<<else>>not quite sure how to respond<</if>>, and before <<they $g.slave>> can figure it out,
<<if !$g.a.isSlave()>>
<<yourrep $g.a>> a|come in.
<<else>>
<<yourrep $g.a>>
<<if $g.a.isCanWalk()>>
hurries in,
<<else>>
crawls in,
<</if>>
responding to your summons.
<</if>>
<<name $g.a>> takes in the situation at a glance and
<<if $g.a.isHasDick()>>instantly achieves a painfully hard erection<<else>>immediately flushes with arousal<</if>>.
<<They $g.a>><<if !$g.a.isHasDick()>> dons a strap-on and<</if>> clambers up onto the <<uslaverbed $g.slave>>. Since saliva is plenty of lube for <<name $g.slave>>'s experienced ass, <<they $g.slave>> points a meaningful finger at <<if !$g.a.isHasDick()>>the phallus<<else>><<their $g.slave>> cock<</if>>, and <<name $g.slave>> begins to suck it enthusiastically, trying to get it as wet as possible for the sake of <<their $g.slave>> butt.
</p>
<p>
Since <<name $g.slave>> is being so good, you decide to help get <<them $g.slave>> get ready, and push <<them $g.slave>> sideways so <<they $g.slave>> straddles the <<uslaverbed $g.slave>>'s edge. <<They $g.slave>> whimpers into the <<if !$g.a.isHasDick()>>dildo<<else>>dick<</if>> in <<their $g.slave>> <<umouth $g.slave>> as <<they $g.slave>> feels <<their $g.slave>>
<<if $g.slave.isHasDick()>>
<<if $g.slave.isInChastity()>>
chastity cage
<<else>>
hard cock
<</if>>
<<else>>
mons
<</if>>
graze the sheets, and then stiffens as you penetrate <<their $g.slave>> bottom.
When you feel that <<rep $g.a>> is wet enough, you nod to <<them $g.a>>, and <<they $g.a>> takes <<name $g.slave>> by the hand, pulling <<them $g.slave>> up onto <<their $g.a>> lap.
<<if $g.a.isSlave()>>
<<if ($g.a.isHasTrait('breast_titanic')) && ($g.slave.isHasTrait('breast_titanic'))>>
Their tits are so huge that they can't reach each other to kiss, chest-to-chest like that. <<rep $g.a>> settles for blowing the other slave an exaggerated kiss, which makes <<them $g.slave>> laugh.
<<else>>
The slaves start making out, showing no signs of breaking their lip lock as they arrange themselves for penetration.
<</if>>
<</if>>
<<name $g.a>> guides <<their $g.slave>>
<<if !$g.a.isHasDick()>>strap-on<<else>>cock<</if>> inside the <<if $g.slave.getMainTraining().getTags().includes('tranal')>>enthusiastic<<else>>compliant<</if>> <<name $g.slave>>, who begins to ride it, enjoying both the <<if $g.slave.isHasDick()>>prostate<<else>>anal<</if>> stimulation and the feeling of <<their $g.slave>>
<<if $g.slave.isHasDick()>>
<<if $g.slave.isInChastity()>>
midsection trapped between <<them $g.slave>> and
<<else>>
erection trapped between <<them $g.slave>> and
<</if>>
<<else>>pussy pressed against<</if>>
<<name $g.a>>. <<name $g.a>> smacks the humping
<<woman $g.slave>>'s butt to get <<them $g.slave>> to stop, and slides an index finger up <<their $g.slave>> ass alongside the
<<if !$g.a.isHasDick()>>phallus<<else>>cock<</if>>. <<name $g.slave>> shudders, and then begins to whine as <<name $g.a>> pulls <<their $g.slave>> sphincter wider.
</p>
<p>
The slave begs incoherently as you press your <<if $unit.player.isHasDick()>>dick<<else>>strap-on<</if>> against <<name $g.a>>'s finger. It's not clear whether <<they $g.slave>>'s begging you to DP <<their $g.slave>> anus, or begging you not to, but whichever it is, <<name $g.a>> withdraws <<their $g.slave>> finger and you shove yourself inside. <<name $g.slave>> jerks with discomfort and gives a gasping
<<if $g.slave.isCanTalk()>>
"Oh f-fuck-k"
<<else>>
moan
<</if>>
that <<if $g.slave.isHasTrait('anus_gape')>><<they $g.slave>> repeats over and over<<else>>is followed by some minor struggling<</if>> as you begin to fuck <<them $g.slave>>.
<<if $g.a.isSlave()>>
From <<their $g.slave>> angle, <<name $g.a>> can't pound <<name $g.slave>> quite as hard as you can, but <<they $g.slave>> still does <<their $g.slave>> best.
<<else>>
You eagerly make out with your lover as both of you pound the ass quite hard.
<</if>>
When you've both had your fun, extracted yourselves, and let the exhausted, gaped bitch collapse onto the floor, <<yourrep $g.a>> gives you a naughty wink.
<<if $g.a.isCanTalk()>>
<<if $g.a.isSlave()>>
"That was fun, <<Master $unit.player>>!"
<<they $g.slave>> says. "Shall we flip <<their $g.slave>> over and go again?"
<<else>>
"That was fun!"
<<they $g.slave>> says. "Shall we flip <<their $g.slave>> over and go again?"
<</if>>
<<if $g.slave.isCanTalk()>>
"Please nooo," comes a quiet wail from the floor.
<<else>>
A quiet wail follows from the floor.
<</if>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'bad_dreams', /* key */
"Bad Dreams", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_bad_dreams',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_none, setup.trait.training_obedience_basic], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You are awoken on your <<uslaverbed $g.slave>> tonight from a quiet cry.
You see a jerky movement near the <<uslavebed $g.slave>> in the dark. It's
<<yourrep $g.slave>>, and <<they $g.slave>>'s obviously having a bad dream. <<They $g.slave>> raises an arm to fend off some imagined danger, and in doing so, pushes the blankets down around <<their $g.slave>> <<uwaist $g.slave>>.
The movement bares <<their $g.slave>>
<<if $g.slave.isHasTrait('breast_huge')>>udders<<elseif $g.slave.isHasTrait('breast_large')>>heavy breasts<<elseif $g.slave.isHasTrait('breast_tiny')>>boobs<<else>><<ubreasts $g.slave>><</if>>
to the cool night air.
The low light outlines <<their $g.slave>> nipples as they stiffen at the sudden change of temperature, becoming attractively erect.
Still dreaming, <<they $g.slave>> clasps <<their $g.slave>> <<uarms $g.slave>> protectively over <<their $g.slave>> vulnerable chest,
and rolls to one side.
Halfway into a fetal position, <<they $g.slave>> turns <<their $g.slave>> head against you, still sleeping, while murmuring "N-no - please no - I'll d-do anyth-thing - no..."
</p>
<<choose>>
<<opt "Hug <<them $g.slave>>">>
<p>
You reach out to hug <<them $g.slave>>, but as soon as your <<uhand $unit.player>> touches <<their $g.slave>> shoulder, <<they $g.slave>> writhes instinctively away.
<<if $g.slave.isCanSee()>><<Their $g.slave>> eyes fly open, searching frantically for <<their $g.slave>> assailant.
Seeing that it's you, <<they $g.slave>> screams and scrabbles away even harder.
After making it a few feet, <<they $g.slave>> collects <<their $g.slave>> wits enough to bring <<themself $g.slave>> to a stop and stop screaming, though <<they $g.slave>> continues to <<if $g.slave.isFemale()>>sob<<else>>resist<</if>>, staring at you in <<if $g.slave.isFemale()>>terror<<else>>hatred<</if>><<else>><<They $g.slave>> gropes frantically for <<their $g.slave>> assailant, before making contact with you. <<They $g.slave>> screams and scrabbles away, only stopping when <<they $g.slave>> collides with the <<uobject $g.slave>>.
Only after several call outs that it is you does <<they $g.slave>> stop screaming, though <<they $g.slave>> continues to <<if $g.slave.isFemale()>>sob<<else>>resist<</if>>, listening to your every breath in <<if $g.slave.isFemale()>>terror<<else>>hatred<</if>><</if>>.
<<They $g.slave>> remains frozen in place as you slowly advance on <<them $g.slave>> and give <<them $g.slave>> a light embrace. <<Their $g.slave>>
<<if $g.slave.isFemale()>>tears<<else>>fear<</if>> gradually stop, but <<they $g.slave>> does not relax, <<if $g.slave.isCanSee()>>remaining dumbly stiff<<else>>continuing to quake in fear<</if>> within your <<uarms $unit.player>>. Eventually you let <<them $g.slave>> go, and <<they $g.slave>> crawls pathetically back under <<their $g.slave>> blanket.
It seems <<they $g.slave>> slave|is more afraid of you than ever, and if you thought that a simple hug could win <<them $g.slave>> over, you were wrong.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Rape <<them $g.slave>>">>
<p>
You snatch the blanket off <<them $g.slave>>, shove <<their $g.slave>> uppermost shoulder down so <<their $g.slave>> face is smashed into the <<utile $g.slave>>, and bring your knees down between <<their $g.slave>> <<ulegs $g.slave>>, spreading them to force them apart.
You use the <<uhand $unit.player>> that isn't controlling <<their $g.slave>> torso to locate <<their $g.slave>>
<<if $g.slave.isHasVagina()>>
<<if $g.slave.isHasTrait('vagina_gape')>>
amusingly loose cunt
<<elseif $g.slave.isHasTrait('vagina_loose')>>
large <<woman $g.slave>>hood
<<else>>
tight pussy
<</if>>
<<else>>
<<if $g.slave.isHasTrait('anus_gape')>>
amusingly broad asshole
<<elseif $g.slave.isHasTrait('anus_loose')>>
big butthole
<<else>>
tight rosebud
<</if>>
<</if>>
in the dark as <<they $g.slave>> begins to struggle and scream.
<<They $g.slave>> comes fully awake when <<they $g.slave>> feels your rough fingers searching for and then finding <<their $g.slave>>
<<uhole $g.slave>>,
and <<their $g.slave>> noise increases to the point where it becomes annoying.
<<if $g.slave.isHasTail()>>
Raising <<their $g.slave>> tail, you
<<else>>
You
<</if>>
stuff <<their $g.slave>> face into the <<utile $g.slave>>
and take <<them $g.slave>> mercilessly, using a pillow to cut off <<their $g.slave>> breath whenever <<they $g.slave>> struggles too much, until oncoming suffocation forces <<them $g.slave>> to go still and take it like a good little bitch.
</p>
<p>
Sometimes dreams do come true.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'bar_delights', /* key */
"Bar Delights", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_bar_delights',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.OnDuty('entertainmentslave'),
setup.qres.Trait(setup.trait.training_obedience_advanced),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
The <<rep setup.buildingtemplate.tavern>> of your fort doesn't only serve cum --
it also serves many different more mundane refreshments.
Ever since its opening you and your slavers often patron the place.
As it happens,
<<yourrep $g.slave>> slave|is currently stationed there, a break from <<their $g.slave>>
usual duties as a generic entertainment slave.
Today, after finishing serving <<yourrep _u>>, <<they $g.slave>> slave|is carrying a selection of refreshments and the necessary implements for you:
a bottle of wine, an empty glass, and a spare cigar, balanced on a tray.
</p>
<p>
<<They $g.slave>> comes to a stop right beside your elbow, waiting for further direction, just as <<they $g.slave>>'s been trained to do in these cases.
<<if $g.slave.isHasTrait('breast_titanic')>>
<<Their $g.slave>> breasts are so massive that <<they $g.slave>>'s got the tray more or less balanced on top of them. As <<they $g.slave>> breathes, <<their $g.slave>> tits rise and fall slightly,
causing ripples in the bottle of wine and threatening to knock the cigar from its plate.
<<elseif $g.slave.isHasTrait('muscle_verystrong')>>
With <<their $g.slave>> incredible musculature, <<they $g.slave>>'s able to maintain utter stillness in the perfect posture of an obedient slave. A naturally standing human makes some small movements, but <<their $g.slave>> strength allows <<them $g.slave>> to suppress them by setting muscle groups against each other. This has the ancillary benefit of making them stand out nicely.
<<else>>
<<They $g.slave>> keeps <<their $g.slave>> <<if $g.slave.isCanSee()>><<ueyes $g.slave>><<else>>face<</if>> slightly downcast,
<<their $g.slave>> back arched, <<their $g.slave>> <<ubreasts $g.slave>> pressed outward, and <<their $g.slave>> bottom stuck out a bit. <<They $g.slave>>'s the perfect picture of an obedient little sex slave<<if $g.slave.isHasTrait('height_giant')>> (though, of course, <<they $g.slave>>'s anything but physically small)<</if>>.
<</if>>
</p>
<<choose>>
<<opt "Enjoy some oral with your refreshments">>
<p>
There was many things you did not understand before you've become the leader of a slaving company. One of the smallest and yet most enjoyable is the almost unlimited availability of a good drink and
<<if $unit.player.isHasDick()>>a blowjob<<else>>some cunnilingus<</if>>. Turning to <<rep $g.slave>>, you pour yourself some wine and <<if !$g.slave.isCanSee()>>audibly <</if>>widen your <<ulegs $unit.player>> slightly in your chair.
<<They $g.slave>> immediately drops to <<their $g.slave>> knees and gets to work,
<<if $g.slave.isHasTrait('training_oral_master')>>
using all of <<their $g.slave>> mastery at giving oral pleasure.
<<elseif $g.slave.isHasTrait('training_oral_advanced')>>
using all of <<their $g.slave>> skills at in oral pleasure.
<<else>>
doing <<their $g.slave>> best despite <<their $g.slave>> mediocre oral skills.
<</if>>
You take your time, taking meditative sips and running a thoughtful <<uhand $unit.player>> across <<rep $g.slave>>'s head while you look at the view out the <<rep setup.buildingtemplate.tavern>> and into the general <<rep setup.buildingtemplate.recreationwing>> area.
This isn't the first time you've done this, nor will it be the last, and <<rep $g.slave>> is used to being used as a servin <<girl $g.slave>>.
</p>
<<opt "Show <<them $g.slave>> a special way to enjoy refreshments">>
<<if $gQuest.getSeed() % 2>>
<p>
You tell <<them $g.slave>> to hop up on the bar.
<<They $g.slave>> obeys promptly, <<if $g.slave.isCanSee()>>watching you<<else>>listening<</if>> closely for further instructions.
To <<their $g.slave>> complete lack of surprise, you tell <<them $g.slave>> to pull <<their $g.slave>> <<ulegs $g.slave>> back and spread <<their $g.slave>> hole<<if $g.slave.isHasVagina()>>s<</if>>.
As <<they $g.slave>> opens <<themself $g.slave>> for you,
<<they $g.slave>> <<if $g.slave.isCanSee()>>sees<<else>>hears<</if>> that you're doing something with
the bottle of wine, and
<<if $friendship.getFriendship($unit.player, $g.slave) >= 500>>
relaxes, trusting you completely<<else>>does <<their $g.slave>> best to relax<</if>>.
<<They $g.slave>> gasps when <<they $g.slave>> feels
the cool tip of the wine bottle being gently inserted into <<their $g.slave>> ass, followed by a rush of warm liquid into their stomach.
You press the bottle into <<their $g.slave>> slowly. There was not much left in the bottle, but <<their $g.slave>> body is very permeable there, and the effects hit <<their $g.slave>> very quickly.
</p>
<p>
You go back drinking, letting the slave loll around on the tavern, enjoying the effects. When <<they $g.slave>>'s had time to reflect on the strange incident, <<they $g.slave>>
resolves to trust you more in the future, since it can be fun.
</p>
<<else>>
<p>
You tell <<their $g.slave>> to hop up on the bar and face you. <<They $g.slave>> obeys promptly, <<if $g.slave.isCanSee()>>watching you<<else>>listening<</if>> closely for further instructions.
To <<their $g.slave>> surprise, you
<<if $unit.player.isHasBreasts()>>unfasten your top, freeing your breasts, and <</if>>uncover your <<if $unit.player.isHasDick()>>stiffening cock<<else>>moistening pussy<</if>>.
Taking some wine in your fingers, you massage it onto your erect
<<if $unit.player.isHasDick() && $unit.player.isHasBreasts()>>
nipples and dick
<<elseif $unit.player.isHasVagina() && $unit.player.isHasBreasts()>>
nipples and clit
<<elseif $unit.player.isHasDick()>>
dick
<<else>>
clit
<</if>>
making sure to cover yourself completely. You recline in your seat, beckoning to <<rep $g.slave>> to lick you clean. <<They $g.slave>> eagerly complies, eager to get a taste of wine after nothing but slave-grade food for so long.
<<if $g.slave.isHasTrait('training_oral_master')>>
<<They $g.slave>> slave|is extremely skilled with <<their $g.slave>> tongue;
before long, not only are you completely cleaned, but you can barely feel your crotch from <<their $g.slave>> masterful sucking.
<<elseif $g.slave.isHasTrait('training_oral_advanced')>>
<<They $g.slave>> slave|is quite skilled with <<their $g.slave>> tongue; before long, you are both cleaned off and enjoying some wine after the powerful orgasm <<they $g.slave>> coaxed out of you.
<<elseif $g.slave.isHasTrait('training_oral_basic')>>
<<They $g.slave>> has basic skill with <<their $g.slave>> tongue; before long, you are nearly cleaned of all the wine. With one final lick, <<they $g.slave>> takes the last taste of it and brings you to climax at the same time.
<<else>>
<<They $g.slave>> has no idea how to make this pleasurable; <<they $g.slave>> slave|is merely greedily lapping up the wine off your <<uskin $unit.player>>. As <<they $g.slave>> nears finishing your crotch, you grab <<their $g.slave>> head and hold <<their $g.slave>> to yourself until you are satisfied with <<their $g.slave>> licking.
<</if>>
You go back to drinking, letting the slave lick <<their $g.slave>> lips of the combined taste of your <<uscent $unit.player>> and wine. When <<they $g.slave>>'s had time to reflect on the strange incident, <<they $g.slave>> resolves to trust you more in the future, since it can be fun and tasty.
</p>
<</if>>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif !$settings.bannedtags.gore>>
<<opt "Use the cigar on <<them $g.slave>>">>
<<set _doctor = $dutylist.getUnitIfAvailable('doctor')>>
<p>
You select a cigar and start smoking, ordering <<them $g.slave>> to stick around and get <<their $g.slave>> <<ubreasts $g.slave>> out.
<<They $g.slave>> sees nothing too unusual about this, and
obeys complaisantly, standing beside you with <<their $g.slave>> <<ubreasts $g.slave>> bare. You reach over and play with them as you smoke, teasing <<their $g.slave>> nipples and playing with <<their $g.slave>> <<ubreasts $g.slave>>.
Deciding that you're done with the cigar, you pull a long draw of smoke into your <<umouth $unit.player>>, bringing the coal at its foot to a fine glow. Then you pull it out of your <<umouth $unit.player>> and press it against the slave's defenseless <<ubreasts $g.slave>>.
<<They $g.slave>>
shrieks with agony, flinching away instinctively, and collapses to the ground<<if $g.slave.isMasochistic()>>, masochistically orgasming from the sudden rush of stimulation<</if>>. Writhing in pain, <<they $g.slave>> checks the burn on <<their $g.slave>> <<ubreasts $g.slave>> with both hands, <<their $g.slave>> sobbing only interrupted by ragged gasps for breath.
You order <<them $g.slave>> to go get <<their $g.slave>> burn looked at<<if _doctor>> by your resident doctor <<rep _doctor>><</if>>, and go back to drinking. <<They $g.slave>> scrabbles toward the door, weeping,<<if $g.slave.isMasochistic()>> horrified at <<themself $g.slave>> for getting off to that,<</if>> eager to get away.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'boobs_collision', /* key */
"Boobs Collision", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_boobs_collision',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AnyTrait([setup.trait.breast_huge, setup.trait.breast_titanic], true),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.Available(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AnyTrait([setup.trait.breast_huge, setup.trait.breast_titanic], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
Although your private slaves spend most of their time inside the bedchamber, they don't just live there. They still occasionally go out from the room, either for exercise, bathe, or to perform other slave duties.
<<Yourrep $g.slave>> slave|is in a particular hurry today,
<<their $g.slave>>
<<if $g.slave.isHasTrait('breast_titanic')>>
gargantuan tits hampering <<them $g.slave>> badly
<<else>>
huge boobs getting in the way
<</if>>
as <<they $g.slave>> rushes around.
Returning from the baths to the bedchamber,
<<they $g.slave>> turns a corner and runs hard into
<<name _o>>.
Having just bathed, both slaves are nude, and the collision of their massive breasts
makes an audibly painful smack.
<<name $g.slave>> has enough momentum that <<they $g.slave>> overbears
the top-heavy <<name _o>> entirely.
The poor <<woman _o>> crashes backwards,
<<their _o>> butt hitting the floor with a slap.
<<name $g.slave>> lands on top of <<them _o>>, the fall and the sudden weight of <<name $g.slave>> on top of <<them _o>> driving the wind out of <<name _o>> with a whoosh.
</p>
<p>
"Sorry! I'm so sorry," apologizes <<name $g.slave>>.
<<They $g.slave>> starts to try to disentangle
<<themself $g.slave>> as <<name _o>> struggles to get <<their _o>>
breath back, but you see <<name $g.slave>>'s back stiffen.
<<They $g.slave>> stops trying to get up.
As the discomfort of the collision fades, <<they $g.slave>> notices the warmth of
<<name _o>> underneath <<them $g.slave>>, and the way their nipples are pressed against one another.
Impulsively, <<they $g.slave>> kisses <<name _o>> full on the lips,
<<if $g.slave.isHasTrait('breast_titanic') && _o.isHasTrait('breast_titanic')>>
even though the mass of boob between them is so massive that <<they $g.slave>> has to struggle to bring <<their $g.slave>> <<umouth $g.slave>> down to meet <<name _o>>'s.
<<else>>
squashing their boobs together hard so <<they $g.slave>> can reach despite the mass of soft flesh between them.
<</if>>
</p>
<p>
"H-hey," <<name _o>> gasps when <<name $g.slave>> finally breaks the lip lock, but <<they _o>>'s clearly not that displeased. <<name $g.slave>>, who has clearly forgotten running into the other slave entirely and now has other things on <<their $g.slave>> mind, begins to grind against <<them _o>>. When <<name _o>> smiles back at the horny <<woman $g.slave>> on top of <<them _o>>, <<name $g.slave>>
<<if $g.slave.isHasDick() && !$g.slave.isInChastity()>>
<<if !_o.isHasVagina()>>
pushes <<name _o>>'s legs apart<<if _o.isHasTail()>>, move aside <<their _o>> <<utail _o>><</if>> to rotate <<their _o>> hips, reaches down, and
<<if $g.slave.isHasTrait('dick_large')>>
<<if _o.isHasTrait('anus_gape')>>
rubs a little saliva on <<their $g.slave>> <<udick $g.slave>> before shoving it up <<name _o>>'s anus.
<<else>>
carefully pushes <<their $g.slave>> <<udick $g.slave>> up the whimpering <<name _o>>'s tight butt.
<</if>>
<<else>>
<<if _o.isHasTrait('anus_gape')>>
shoves <<their $g.slave>> cock up <<name _o>>'s anus, which is loose enough that <<they $g.slave>> doesn't need much lubrication.
<<else>>
pushes <<their $g.slave>> cock up the <<name _o>>'s willing butt.
<</if>>
<</if>>
<<else>>
reaches down
<<if $g.slave.isHasTrait('dick_large')>>
<<if _o.isHasVagina()>>
to insert <<their $g.slave>> <<udick $g.slave>> into <<name _o>>'s loose wet cunt.
<<else>>
and carefully pushes <<their $g.slave>> <<udick $g.slave>> into the whimpering <<name _o>>'s tight pussy.
<</if>>
<<else>>
reaches down
<<if _o.isHasVagina()>>
and inserts <<their $g.slave>> dick into <<name _o>>'s loose wet cunt.
<<else>>
to put <<their $g.slave>> dick inside <<name _o>>'s tight pussy.
<</if>>
<</if>>
<</if>>
<<else>>
starts to rub <<their $g.slave>> wet pussy against <<name _o>>'s
<<if (_o.isHasDick())>>
<<udick _o>>.
<<else>>
mons.
<</if>>
<</if>>
Once <<they _o>>'s gotten <<themself _o>> positioned,
<<name _o>> reaches around <<name $g.slave>>'s <<ubody $g.slave>> to grab <<their $g.slave>> ass.
<<They _o>> holds <<name $g.slave>> against <<them _o>> as <<name $g.slave>> starts humping gently, and cranes <<their _o>> neck up to kiss <<them $g.slave>>.
</p>
<<choose>>
<<opt "Fuck them">>
<p>
You approach the fucking slaves, kneeling next to them and running a possessive <<uhand $unit.player>> over <<name $g.slave>>'s butt.
These slaves are your personal slaves, and
<<they $g.slave>> doesn't even have to look, recognizing you by your grip, and greets you <<uadv $g.slave>>:
"Hi <<Master $unit.player>>!" <<name _o>>
<<if $g.slave.isFemale()>>
giggles
<<else>>
smiles
<</if>>
and cranes around to <<if !_o.isCanSee()>>see<<else>>greet you<</if>>.
"Hi <<Master $unit.player>>," <<they $g.slave>> choruses.
<<name $g.slave>> wiggles <<their $g.slave>> bottom under your <<uhand $unit.player>>, trusting your judgment, and <<name _o>> <<if !_o.isCanSee()>>watches<<else>>waits<</if>> to see what you'll do with anticipation.
</p>
<p>
<<if !$unit.player.isHasDick()>>
You decide to make use of the position the slaves have gotten themselves into. Once naked, you get on all fours ahead of them, and then back yourself between them until you're effectively sitting on the massive cushion formed between them by their breasts. This puts your pussy against <<name _o>>'s <<umouth _o>>,
and your butt right in front of <<name $g.slave>>'s face. <<name _o>> starts to eat you out with dedication, and after planting a wet kiss on each of your thighs, <<name $g.slave>> runs <<their _o>> tongue from the base of your cunt and along your perineum, and then begins to kiss your asshole. The universe of warm wetness created by their <<umouth $g.slave>>s is so intense that your <<uarms $unit.player>> almost buckle.
<<else>>
They don't have long to wait. There's no need to be excessively creative. You get behind them and start from the top, <<if $g.slave.isHasTail()>>raising <<their $g.slave>> tail and <</if>> laying your cock against <<name $g.slave>>'s back, which produces an anticipatory shudder. Moving down, you
<<if $g.slave.isHasTraitExact('anus_tight')>>
push your cock against <<name $g.slave>>'s tight asshole, causing <<them $g.slave>> to stiffen and struggle momentarily before it pops inside <<them $g.slave>>.
After giving <<their $g.slave>> butt a thorough fuck,
you move your wet cockhead down <<their $g.slave>> soft perineum
<<else>>
push your cock up <<name $g.slave>>'s asspussy, which accepts it with ease. After giving it a good hard reaming, you move your wet cockhead down <<their $g.slave>> soft perineum
<</if>>
<<if !$g.slave.isHasVagina()>>
and into the warm space between the two slaves for a little while.
<<else>>
and into <<their $g.slave>> cunt, giving it a good hard fuck.
<</if>>
Then you see to <<name _o>> beneath <<them $g.slave>>,
<<if _o.isHasVagina()>>
giving <<them _o>> a turn with <<their _o>> owner's cock inside <<their $g.slave>> womanhood before
<</if>>
giving <<them _o>> as hard a buttfuck as you can manage with <<name $g.slave>> between you.
Then you move back up, using them until you're spent and they're lying limply in a pool of sweat and tits.
<</if>>
</p>
<<opt "Dominate the clumsy slave's ass">>
<p>
You tell <<name $g.slave>> that that was very clumsy of <<them $g.slave>>. The slaves start with surprise, since they didn't know you were watching, producing a delightful jiggle of smashed-together boob.
"Yes <<Master $unit.player>>," <<name $g.slave>> says obediently, suspecting that you aren't done.
<<They $g.slave>>'s right. In an idle, speculative tone, you muse that with <<their $g.slave>> huge boobs pinning <<them $g.slave>> to the ground and <<name _o>> holding <<their $g.slave>> butt like that, <<they $g.slave>> can't get up.
"Yes <<Master $unit.player>>," <<they $g.slave>> agrees.
Quite helpless, you continue.
"Yes <<Master $unit.player>>," <<they $g.slave>> parrots.
Unable to escape, you conclude.
"Yes <<Master $unit.player>>," <<they $g.slave>> moans.
</p>
<p>
You tell <<name _o>> to
<<if (_o.isHasDick())>>
sodomize <<them $g.slave>>. <<name _o>> obeys hurriedly, shoving a <<uhand _o>> between their hips to
<<if _o.isHasTrait('dick_huge')>>
<<if $g.slave.isHasTrait('anus_gape')>>
shove <<their _o>> <<udick _o>> up <<name $g.slave>>'s loose anus.
<<else>>
carefully push <<their _o>> <<udick _o>> inside <<name $g.slave>>'s tight butthole.
<</if>>
<<name $g.slave>> rides <<name _o>> hard, knowing that the looser <<their $g.slave>> ass is, the easier whatever you're planning will be. <<name _o>>'s big tool gapes <<their $g.slave>> hole quickly.
<<else>>
<<if $g.slave.isHasTrait('anus_gape')>>
shove <<their _o>> <<udick _o>> inside <<name $g.slave>>'s loose anus.
<<else>>
push <<their _o>> <<udick _o>> up <<name $g.slave>>'s tight butthole.
<</if>>
<<name $g.slave>> rides <<name _o>> hard, knowing that the looser <<their $g.slave>> ass is, the easier whatever you're planning will be. <<name _o>>'s penis isn't big enough to gape <<them $g.slave>> very much, so <<name $g.slave>>, trying to be prepared, reaches around to shove an extra finger in alongside it.
<</if>>
You
<<if !$unit.player.isHasDick()>> put on a strap-on,<</if>>
stop <<their $g.slave>> desperate humping<<if !$unit.player.isHasDick()>>,<</if>> and shove <<their $g.slave>> torso back down against <<name _o>>'s boobs. <<name _o>> grabs hold of <<name $g.slave>>'s buttocks and pulls them as far apart as <<they $g.slave>> possibly can, removing all protection from <<name $g.slave>>'s already-full asshole. <<name $g.slave>> takes a deep breath and lets it out slowly as <<they $g.slave>> feels <<if !$unit.player.isHasDick()>>the head of the strap-on<<else>>your cockhead<</if>> press insistently against the outside of <<their $g.slave>> anus and then, centimeter by agonizing centimeter, seat itself up <<their $g.slave>> butt alongside <<name _o>>'s cock. <<They $g.slave>> shudders when you begin to thrust. <<name _o>>, overstimulated, climaxes first; as the edge comes off <<their _o>> hardon, <<their _o>> cock slides out of <<name $g.slave>>'s ass, letting you be utterly merciless to the loosened, cum-lubricated hole.
<<else>>
fingerfuck <<them $g.slave>>. <<name _o>> obeys hurriedly, reaching inward and
<<if $g.slave.isHasTrait('anus_gape')>>
pushing two fingers from each hand inside <<name $g.slave>>'s loose anus.
<<else>>
carefully pushing a finger from each hand up <<name $g.slave>>'s tight butthole.
<</if>>
<<name $g.slave>> begs <<name _o>> to fuck <<their $g.slave>> butt, knowing that the looser <<their $g.slave>> ass is, the easier whatever you're planning will be. <<name _o>> does <<their _o>> best, using <<their _o>> fingers to stretch <<name $g.slave>>'s sphincter as much as <<they _o>> can without hurting <<them $g.slave>>.
Once you're satisfied that <<they $g.slave>> can take what's coming, you<<if !$unit.player.isHasDick()>> put on a strap-on,<</if>> steady <<their $g.slave>> hips<<if !$unit.player.isHasDick()>>,<</if>> and shove <<their $g.slave>> torso back down against <<name _o>>'s boobs.
<<name _o>> pulls to either side, gaping <<name $g.slave>>'s hole for you. <<name $g.slave>> takes a deep breath and lets it out slowly as <<they $g.slave>> feels <<if !$unit.player.isHasDick()>>the head of the strap-on<<else>>your cockhead<</if>> slide between <<name _o>>'s fingers, centimeter by agonizing centimeter, and seat itself up <<their $g.slave>> butt. <<They $g.slave>> shudders when you begin to thrust. <<name _o>> keeps <<their $g.slave>> fingers where they are, doing <<their $g.slave>> best to use them to give you a handjob inside <<name $g.slave>>'s ass.
<</if>>
</p>
<p>
When you're done, you pull out, leaving <<name $g.slave>> to collapse, whimpering and shaking, onto <<name _o>>'s boobs. <<name _o>> <<if !_o.isCanSee()>>winks<<else>>smiles<</if>> at you over <<their _o>> shoulder. "That was fun <<Master $unit.player>>," <<they _o>> says <<uadv _o>>. "Can we do that again soon, please?"
</p>
<p>
"Ohh fffuck," <<name $g.slave>> moans into <<their $g.slave>> boobs, to no one in particular. "Please nooo, my poor hole will never be the same againnn."
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'cage_relief', /* key */
"Cage Relief", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_cage_relief',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.eq_chastity], true),
setup.qres.AnyTrait([setup.trait.dick_tiny, setup.trait.dick_small, setup.trait.dick_medium, setup.trait.dick_large, setup.trait.dick_huge, setup.trait.dick_titanic], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master, setup.trait.training_obedience_basic], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You come face to face with <<yourrep $g.slave>> in a hallway of your
bedchamber wing, entirely by happenstance.
<<if $g.slave.isCanSee()>><<Their $g.slave>> <<ueyes $g.slave>> lock with yours, and <<they $g.slave>> stares at you dumbly for a long moment<<else>>Once <<they $g.slave>> regains <<their $g.slave>> footing after bumping into you, <<they $g.slave>> gazes towards you dumbly for a long moment<</if>>.
Then <<they $g.slave>> squares <<their $g.slave>> <<if $g.slave.isHasTrait('muscle_strong')>>broad<</if>> shoulders and bites <<their $g.slave>> lower lip, obviously doing <<their $g.slave>> best to think quickly. Right when you're about to reprimand <<their $g.slave>> for not greeting you properly, <<they $g.slave>> surprises you by throwing <<themself $g.slave>> abjectly on the ground in front of you.
</p>
<p>
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> uses gestures to apologize for <<their $g.slave>> rudeness, and then gets to <<their $g.slave>> knees so <<they $g.slave>> can use <<their $g.slave>> <<uhands $g.slave>> to gesture more clearly. <<Their $g.slave>> <<uhands $g.slave>> are shaky as <<they $g.slave>> begs, making two false starts before unmistakably gesturing to ask you to remove <<their $g.slave>> <<ucgenital $g.slave>>. Once <<they $g.slave>> sees that you understand, <<they $g.slave>> begins to <<if $g.slave.isFemale()>>cry<<else>>beg<</if>> openly.
<<They $g.slave>> gestures that <<they $g.slave>> can barely get off wearing <<their $g.slave>> chastity cage, that it hurts when <<they $g.slave>> does, and that <<they $g.slave>>'s constantly oppressed by the need for release. <<They $g.slave>> begs hard, and promises to remain a good little bitch.
<<else>>
"Please, <<Master $unit.player>>," the prostrate slave says shakily, sounding like <<they $g.slave>>'s on the verge of tears.
"P-please remove my chastity cage."
Hearing <<themself $g.slave>> say it, <<they $g.slave>> begins to cry openly.
"I c-can't t-take it anymore. I can b-barely get off wearing this cage on my dick, and when I d-do, it h-hurts," <<they $g.slave>> sobs. "I need to g-g-get off s-so bad. Please, please!" <<They $g.slave>> looks up at you in supplication, tears streaking <<their $g.slave>> face. "Please, <<Master $unit.player>>! I'll continue being s-such a good little bitch, I promise!"
<</if>>
</p>
<<choose>>
<<opt "Help <<them $g.slave>> get off">>
<p>
You take <<them $g.slave>> by the <<uhand $g.slave>> and pull <<them $g.slave>> to <<their $g.slave>> <<ufeet $g.slave>>, and then kiss <<them $g.slave>>.
<<They $g.slave>> knows that this means no, but melts into you anyway, accepting the comforting gesture for what it is. <<They $g.slave>>'s surprised when you do not break the kiss, but continues to make out with you compliantly. You take <<them $g.slave>> by the <<uhands $g.slave>>,
intertwining your fingers with <<theirs $g.slave>> and holding them down at your sides for a while before wrapping <<their $g.slave>> <<uarms $g.slave>> around you at your <<uwaist $unit.player>><<if $g.slave.isHasTail()>>,
before feeling up <<their $g.slave>> <<utail $g.slave>><</if>>.
Your <<uhands $unit.player>>, thus freed to grope <<them $g.slave>>, tenderly hold <<their $g.slave>> head and neck instead, cupping <<their $g.slave>> <<if $g.slave.isHasTrait('face_beautiful')>>gorgeous<<elseif $g.slave.isHasTrait('face_attractive')>>pretty<<else>>homely<</if>> jawline and making <<them $g.slave>> moan at the intimacy.
</p>
<p>
<<They $g.slave>>'s completely forgotten <<their $g.slave>> troubles,
and you see that it stays that way.
Whenever <<they $g.slave>>'s in danger of achieving an erection, which would remind <<them $g.slave>> of <<their $g.slave>> chastity cage with a twinge of discomfort, you cool your makeout session off slightly, massaging <<them $g.slave>> capably instead of kissing <<them $g.slave>> deeply. After some time, <<they $g.slave>> shudders, to <<their $g.slave>> own complete surprise and to your unsurprised satisfaction.
<<They $g.slave>>'s just done what in a normal sexual encounter would be considered premature ejaculation, since you wrought <<them $g.slave>> to such a subtle state of arousal that <<they $g.slave>> got off without really getting hard, <<their $g.slave>> ejaculate leaking down <<their $g.slave>> cage.
<<They $g.slave>> can muster no coherent response, but hugs you convulsively,
sobbing into your <<if $unit.player.isHasBreasts()>>boobs<<else>><<if $unit.player.isHasTrait('muscle_strong')>>strong<</if>> shoulder<</if>> with gratitude and release.
</p>
<p>
The discomfort returns in less than half an hour.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Remove <<their $g.slave>> chastity cage for a while">>
<p>
You agree to remove the cage for a while, on the condition that <<they $g.slave>> be a good little bitch like <<they $g.slave>> promised.
<<They $g.slave>> thanks you frantically, watching with mixed relief and gratitude as you unlock <<their $g.slave>> <<ucgenital $g.slave>>.
Freed from the cage after a long while, <<their $g.slave>> <<udick $g.slave>> immediately reaches an incredible erection. It only took a couple of strokes to make the overfull <<uballs $g.slave>> spurt their content into your <<uhand $g.slave>>, to the great joy and gratitude from the slave. You place your cum-soaked <<uhand $unit.player>> in front of <<their $g.slave>> face, for <<them $g.slave>> to lick clean enthusiastically while your other <<uhand $unit.player>> locks <<their $g.slave>> <<ucgenital $g.slave>> back onto <<their $g.slave>> now flaccid dick.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Use <<their $g.slave>> cage to torture <<them $g.slave>>">>
<p>
You make no reply at all, but walk around to stand behind the slave.
<<They $g.slave>> knows <<they $g.slave>>'s fucked, and starts to shake with fear. You put a <<ufoot $unit.player>> on <<their $g.slave>> ass and shove <<them $g.slave>> down to lie flat on the <<utile $g.slave>>,
and then straddle <<them $g.slave>>, shoving <<if $unit.player.isHasDick()>>your cock up <<their $g.slave>> butt<<else>>one more finger than <<they $g.slave>> can comfortably take up <<their $g.slave>> butt<</if>>.
<<They $g.slave>> tries to beg some more, but you give <<them $g.slave>> a warning slap, and <<they $g.slave>> shuts up. Despite your roughness, <<they $g.slave>>'s so horny that <<they $g.slave>> starts to get hard. You can't see or feel this directly, of course, but it's easy to tell from <<their $g.slave>> desperate sobbing and involuntary writhing, and the lovely spasming of <<their $g.slave>> anal sphincter. <<Their $g.slave>> tears dry up as <<they $g.slave>> builds towards a climax; orgasm might be an uncomfortable experience for <<them $g.slave>>, but it will buy <<them $g.slave>> a few minutes free of discomfort.
</p>
<p>
But <<they $g.slave>>'s to be disappointed. You
<<if $unit.player.isHasDick()>>worm a <<uhand $unit.player>> down between <<their $g.slave>> ass and your stomach, and shove a finger up inside <<their $g.slave>>, alongside your dick<<else>>use the <<uhand $unit.player>> that isn't fucking <<them $g.slave>> to pull one of <<their $g.slave>> <<uarms $g.slave>> around behind <<them $g.slave>> into a painful joint lock<</if>>.
<<if $g.slave.isMasochistic()>>
You intended to use the sudden pain to ruin <<their $g.slave>> building orgasm,
but it backfired spectacularly when you remember the masochistic nature of this slave.
The pain only amplifies <<their $g.slave>> pleasure, and <<they $g.slave>> cums painfully, strings of ejaculate dripping down <<their $g.slave>> tortured and caged cock.
<<else>>
The pain ruins <<their $g.slave>> building orgasm, and <<they $g.slave>> begs with frustration and despair as <<they $g.slave>> realizes that <<they $g.slave>> won't be getting off today. You force <<them $g.slave>> to experience this horrible near-release twice more, bringing <<them $g.slave>> to a terribly uncomfortable state of arousal and then using sudden pain to destroy any chance <<they $g.slave>> has of getting relief. All the wriggling and jerking around is good for you, though.
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'cleaning_punishment', /* key */
"Cleaning Punishment", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_cleaning_punishment',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_maid], true),
setup.qres.NoTraits([setup.trait.per_kind, setup.trait.per_submissive], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.OnDuty('maidslave'),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> clearly isn't working as hard as <<they $g.slaver>> should.
And this does not escape
the
<<if $g.slaver.isHasTrait('per_attentive')>>
attentive
<</if>>
eyes of <<yourrep $g.slaver>>, who once worked <<themself $g.slaver>> as a house-servant.
In fact, right now <<rep $g.slaver>> has <<them $g.slaver>> bent over with <<their $g.slaver>> buttocks bare, and is administering a punishing spanking.
<<Reps $g.slave>> <<uskin $g.slave>> is starting to show the force of the beating, and <<they $g.slave>> slave|is begging desperately for mercy.
</p>
<p>
<<name $g.slaver>>, meanwhile, is obviously enjoying torturing the poor servant for <<their $g.slaver>> failings. <<They $g.slaver>>'s
<<if $g.slaver.isHasDick()>>jacking off furiously
<<else>>rubbing <<their $g.slaver>> sopping pussy<</if>> with <<their $g.slaver>> other <<uhand $g.slaver>>,
getting close to orgasm as the servant begs and moans.
</p>
<<choose>>
<<opt "Fuck <<reps $g.slave>> mouth as <<rep $g.slaver>> beats <<them $g.slaver>>">>
<p>
You ask <<yourrep $g.slaver>> to continue the spanking.
<<Rep $g.slave>> has one anguished second to realize what's happening before you
<<ustrippantsand $unit.player>>
shove yourself <<if (!$unit.player.isHasDick())>>against <<their $g.slaver>> <<umouth $g.slave>><<else>>down <<their $g.slaver>> throat<</if>>. <<They $g.slaver>> gags reflexively, jerking back, only to jerk forward again in automatic pain avoidance when <<name $g.slaver>> hits <<their $g.slaver>> already-sore buttocks yet again. <<They $g.slaver>>'s broken enough to understand that <<they $g.slaver>> needs to relax and let <<themself $g.slaver>> be abused, but <<their $g.slaver>> <<ubody $g.slave>>'s reflexive responses deny <<them $g.slaver>> the relief that might give.
<<if $g.slave.isHasTrait('per_cruel')>>
The sadistic <<urace $g.slave>>
comes twice before you do, a deliciously cruel expression on <<their $g.slaver>> face.
<<else>>
You eventually
<<if $unit.player.isHasDick()>>
climaxes, sending torrent of cum straight down the slave's throat.
<<else>>
climaxes with the slave's <<umouth $g.slave>> still deep within your pussy.
<</if>>
<</if>>
Your abuse combined with the punishing slaps ensures that <<rep $g.slave>> learns <<their $g.slave>> lessons, promising to be more diligent next time.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 150).apply($gQuest)>>
<<run setup.qc.FriendshipWithYou('slave', -150).apply($gQuest)>>
<<opt "Show mercy">>
<p>
The slave's continued begging and sobbing tugs at your heart, and you finally give in. You gently ask <<yourrep $g.slaver>> to cease the punishment, and the
<<if $g.slaver.isHasTrait('per_cruel')>>
cruel
<</if>>
slaver grudgingly let the slave go.
While the slave certainly appreciate your timely intervention, the slaver
most certainly do not, and you the two of you grow somewhat more distant as a result.
</p>
<<run setup.qc.FriendshipWithYou('slaver', -150).apply($gQuest)>>
<<run setup.qc.FriendshipWithYou('slave', 150).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'consensual_topping', /* key */
"Consensual Topping", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_consensual_topping',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'top': [
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Trait(setup.trait.per_dominant),
setup.qres.BestFriend(setup.qres.And([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTrait(setup.trait.per_dominant)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _top = $g.top>>
<<set _bot = $g.top.getLover()>>
<<if _bot>>
<p>
As you stroll outside past the slavers lodgings area of your fort, you hear a
lewd slap, slap, slap coming from <<yourrep _top>>'s room. Sneaking in
through the window, you are not at all surprised that <<their _top>> lover
<<rep _bot>> is inside.
<<Rep _bot>> has clearly had a long day, and is tired, but <<they _bot>>'s
being a good lover and letting <<rep _top>> use <<their _bot>> body.
<<Rep _bot>> is lying facedown on their bed, arms crossed under <<their _bot>> head,
<<if _bot.isHasTail()>>tail raised,<</if>>
looking quite relaxed.
<<They _bot>> has a couple of pillows tucked under <<their _bot>> hips to raise them so that <<their _bot>> sweetheart can fuck <<them _bot>> comfortably.
They've obviously been at this for a while.
<<Rep _top>>'s dominant tendencies means that <<therace _top>> slaver loves nothing more than to top and is not gentle at it, and<<if !_top.isHasDick()>>, donning a strap-on,<</if>>
<<they _top>>'s pounding <<if _bot.isSubmissive()>>the submissive <</if>><<rep _bot>> as hard as <<they _top>> can.
<<They _top>>'s
<<if _top.isHasTrait('muscle_strong')>>
a very strong <<man _top>>, and <<their _top>> muscles work noticeably
<<elseif _top.isHasTrait('muscle_thin')>>
not very fit, and <<they _top>>'s gasping tiredly
<<else>>
physically fit, but even so, <<they _top>>'s showing signs of fatigue
<</if>> as <<they _top>> pistons
<<their _top>> <<udickorstrap _top>>
in and out of the
<<uhole _bot>>
beneath <<them _top>>.
</p>
<p>
For <<their _bot>> part, <<rep _bot>> is playing an utterly passive role.
<<They _bot>> even has <<their _bot>> eyes closed, though <<they _bot>>'s obviously conscious; <<they _bot>>'s smiling<<if _bot.isSubmissive()>>, and the shameless submissive loves being treated like this<</if>>.
<<if !_bot.isHasVagina()>>
<<if _bot.isHasTrait('anus_gape')>>
<<Their _bot>> welcoming asspussy can take this all night.
<<elseif _bot.isHasTrait('anus_loose')>>
<<if !_top.isHasDick()>>
<<Their _bot>> lover is using a formidable rubbery phallus, but <<they _bot>> was clearly fucked into a nice relaxed gape a while ago.
<<elseif _top.isHasTrait('dick_huge')>>
<<Their _bot>> lover's cock is big enough that it sometimes bothers even <<their _bot>> experienced anus, but <<they _bot>> was clearly fucked into a nice relaxed gape a while ago.
<<else>>
She can take her lover's modestly cock easily.
<</if>>
<<else>>
<<if !_top.isHasDick()>>
<<Their _bot>> lover is using a formidable phallus, but <<their _bot>> tight ass has clearly been worked in gradually tonight, and <<they _bot>>'s somehow taking it just fine.
<<else>>
<<if _top.isHasTrait('dick_large')>>
<<Their _bot>> lover's cock is big enough that it often causes <<them _bot>> some anal pain, but <<their _bot>> tight ass has clearly been worked in gradually tonight, and <<they _bot>>'s taking it just fine.
<<else>>
<<Their _bot>> lover's little dick is well suited to <<their _bot>> tight butt, and <<they _bot>>'s taking <<their _bot>> anal pounding just fine.
<</if>>
<</if>>
<</if>>
<<else>>
<<if _bot.isHasTrait('vagina_gape')>>
<<Their _bot>> gaping cunt can take this all night.
<<elseif _bot.isHasTrait('vagina_loose')>>
<<if !_top.isHasDick()>>
<<Their _bot>> lover is using a formidable phallus, but <<they _bot>>'s relaxed and taking it easily.
<<elseif _top.isHasTrait('dick_huge')>>
<<Their _bot>> lover's cock is big enough that it sometimes bothers even <<their _bot>> veteran pussy, but <<they _bot>>'s relaxed and taking it easily.
<<else>>
She can take her lover's modestly cock easily.
<</if>>
<<else>>
<<if !_top.isHasDick()>>
<<Their _bot>> lover is using a formidable phallus, but <<their _bot>> tight little pussy has clearly been worked in gradually tonight, and <<they _bot>>'s somehow taking it just fine.
<<else>>
<<if _top.isHasTrait('dick_large')>>
<<Their _bot>> lover's cock is big enough that it often causes <<them _bot>> some pain, but <<their _bot>> tight little pussy has clearly been worked in gradually tonight, and <<they _bot>>'s taking it just fine.
<<else>>
<<Their _bot>> lover's little dick is well suited to <<their _bot>> tight little pussy, and <<they _bot>>'s taking <<their _bot>> pounding just fine.
<</if>>
<</if>>
<</if>>
<</if>>
Being the lover of a
<<uadjper _bot>> fucker like <<rep _bot>> can be tiring, especially in addition to <<their _top>> other duties. But despite the vigor, the sex looks quite loving. <<Rep _bot>> goes on smiling comfortably as
<<their _bot>> butt jiggles under each hard slap as <<rep _top>> brings <<their _top>> hips down to penetrate <<them _bot>> fully, yet again.
</p>
<p>
Mere moments after you absorb this arresting scene,
<<rep _top>> thrusts
<<their _top>> <<udickorstrap _top>>
all the way inside <<rep _bot>>'s
<<if _bot.isHasVagina()>>
womanhood
<<else>>
ass
<</if>>
and shudders,
<<if _top.isHasDick()>>
filling it with cum.
<<else>>
orgasming.
<</if>>
Then <<they _top>> collapses, utterly spent.
<<Rep _bot>>
<<if _top.isHasDick()>>
gasps at the sensation of the ejaculate shooting into <<their _bot>> body,
<<else>>
smiles a little wider as <<they _bot>> feels <<rep _top>> muscles tense with climax,
<</if>>
and then grunts a little as <<rep _top>> lies down on top of <<them _bot>>.
<<if _top.isHasTrait('breast_titanic')>>
The enormous weight of <<their _top>> lover's boobs squashes <<them _bot>>.
<</if>>
After a few seconds, <<they _bot>> wiggles <<their _bot>> hips a little as a wordless question.
The sensation
<<if _top.isHasDick()>>
against <<rep _top>>'s softening, overstimulated member
<<else>>
is transmitted through the phallus and its harness to <<rep _top>>'s overstimulated clit, and this
<</if>>
makes the exhausted <<urace _top>> on top quiver, eliciting a giggle from <<therace _bot>> underneath <<them _top>>.
"I love you, <<name _top>>,"
<<they _bot>> whispers, and receives a mumbled "I love you too" in breathy response, right next to <<their _bot>> ear.
</p>
<p>
As the two slavers dozed in each other's embrace, you finish your little voyeuristic adventure and go on with the rest of your day.
</p>
<<run setup.qc.Friendship('top', 'bot', 300).apply(setup.costUnitHelperDict({
top: _top, bot: _bot
}))>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'cow_milking', /* key */
"Cow Milking", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_cow_milking',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
setup.qres.OnDuty('milkcowslave'),
setup.qres.AnyTrait([setup.trait.breast_huge, setup.trait.breast_titanic], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
When hanging around your <<rep setup.buildingtemplate.recreationwing>>, you
encounter <<yourrep $g.slave>> in the <<rep setup.buildingtemplate.pasture>>,
heading for one of the milking areas.
Though it's <<their $g.slave>> job to be a <<urace $g.slave>> cow,
<<they $g.slave>>'s allowed to roam as <<they $g.slave>> pleases in the area
when <<they $g.slave>>'s not getting milked, being fed, being used, or otherwise occupied, and <<they $g.slave>> must have been roaming the place.
In any case, <<they $g.slave>>'s obviously in desperate need of a milking. <<They $g.slave>>'s hurrying along with <<their $g.slave>>
<<if $g.slave.isHasTrait('breast_titanic')>>absurd<<else>>heavy<</if>> udders cradled in both arms, trying desperately to shield them from the uncomfortable motion of walking.
</p>
<p>
<<if $g.slave.isCanSee()>>Seeing<<else>>Noticing<</if>> you, <<they $g.slave>> stops short and then winces as <<their $g.slave>> milk-filled breasts slosh to a stop, too.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> gestures a submissive greeting and then hesitates, catching <<their $g.slave>> lower lip cutely behind <<their $g.slave>> upper teeth. Then <<they $g.slave>> politely asks if you would milk <<their $g.slave>>.
<<else>>
"Hi <<Master $unit.player>>," <<they $g.slave>> says in greeting, and then hesitates, catching <<their $g.slave>> lower lip cutely behind <<their $g.slave>> upper teeth. "Um, may you please milk me?"
<</if>>
Milking is a deeply important activity for <<them $g.slave>>, emotionally; the neurochemical effects of continual lactation are strong.
</p>
<<choose>>
<<opt "Treat <<them $g.slave>> right">>
<p>
You give <<them $g.slave>> a reassuring swat across the rump and tell <<them $g.slave>> you'd be happy to.
You head toward the utility area with the milkers, and <<they $g.slave>> follows
eagerly behind you, pleased you'd do this for <<them $g.slave>> and very ready to relieve the pressure in <<their $g.slave>> tits.
You seat yourself on a stool and draw <<them $g.slave>> onto your lap.
Reaching behind yourself, you give <<therace $g.slave>> cow on your lap a broad bucket, and tell <<them $g.slave>> to hold it on <<their $g.slave>> lap.
Then you reach around <<them $g.slave>> and take <<their $g.slave>> <<if $g.slave.isHasTrait('breast_titanic')>>gargantuan<<else>>heavy<</if>> udders in your <<uhands $unit.player>>.
<<They $g.slave>> gasps as <<they $g.slave>> adjusts the bucket so it's below both of <<their $g.slave>> nipples at once.
</p>
<p>
<<They $g.slave>> receives a methodical massage of <<their $g.slave>> breasts, both at once. They're large enough to be more than a single handful, so you go bit by bit, ensuring that no part of <<their $g.slave>> udders goes untouched.
<<Their $g.slave>> nipples start to gush milk without help after a few moments of this, and <<they $g.slave>> groans with relief and satisfaction as <<they $g.slave>> feels <<their $g.slave>> breasts begin to empty and enjoys the sensation of the massage.
After you're satisfied, you move your <<uhands $unit.player>> to <<their $g.slave>> nipples and milk <<them $g.slave>> like a cow, getting the last drops of milk out of <<them $g.slave>> and bringing <<them $g.slave>> to a surprise orgasm.
When <<they $g.slave>>'s done, <<they $g.slave>> leans back into you for a moment before setting the milk bucket down, a wordless gesture of considerable trust. It means a lot to <<them $g.slave>> that you would milk <<them $g.slave>> yourself.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Treat <<them $g.slave>> like a cow">>
<p>
You ask <<them $g.slave>> if <<they $g.slave>> really wants to be treated like a cow. <<They $g.slave>> nods, a bit hesitantly, sensing a certain danger but not really knowing what else to do.
You lead <<them $g.slave>> to the utility area where the milkers are, and fetch a pair of low stools, make <<them $g.slave>> kneel on one, and put <<their $g.slave>> <<uhands $g.slave>> on the other, so <<they $g.slave>>'s on all fours with <<their $g.slave>> udders hanging beneath <<them $g.slave>><<if $g.slave.isHasTrait('breast_titanic')>>, the twin masses of female flesh almost reaching the floor<</if>>.
</p>
<p>
You swing a bucket under <<their $g.slave>> nipples and milk <<them $g.slave>> by <<uhand $unit.player>>, as though <<they $g.slave>> slave|was a cow. This isn't exactly what <<they $g.slave>> had in mind, but the feeling of your <<uhands $unit.player>> on <<their $g.slave>> nipples, tugging the streams of milk out of <<them $g.slave>> and into the bucket beneath eventually relaxes <<them $g.slave>>.
Seeing this, you muse aloud, as though to yourself, that a little farmyard bestiality wouldn't hurt, since there's no one here but you and a dairy cow. Pawing the cow's behind possessively, you finger <<them $g.slave>> 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 mouth, humping <<their $g.slave>> face hard enough to shake the drops of milk still clinging to <<their $g.slave>> sore nipples down and into the bucket below.
When you're finished, you step away, leaving <<their $g.slave>> face thoroughly coated in girlcum,
<<elseif $g.slave.isHasVagina()>>
a little cow pussy. You walk around behind <<them $g.slave>> and fuck <<them $g.slave>> hard enough to shake the drops of milk still clinging to <<their $g.slave>> sore nipples down and into the bucket below. When you're finished, you step away, leaving your cum to run out of <<their $g.slave>> cunt and down <<their $g.slave>> thighs,
<<else>>
some cow ass. You walk around behind <<them $g.slave>> and buttfuck <<them $g.slave>> hard enough to shake the drops of milk still clinging to <<their $g.slave>> sore nipples down and into the bucket below. When you're finished, you step away, leaving your cum to drip out of <<their $g.slave>> gaped asshole,
<</if>>
and ask <<them $g.slave>> what cows say. "Um, moo?" <<they $g.slave>> responds in a small, submissive voice.
</p>
<</choose>><<run new setup.Event(
'cumslut_whore', /* key */
"Cumslut Whore", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_cumslut_whore',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.training_oral_master], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Late at night, as you return to your bedchamber, you see your personal slave <<rep $g.slave>> resting in the <<uslavebed $g.slave>>.
It's the end of <<their $g.slave>> day as your slave, and despite being obviously tired, <<they $g.slave>>'s smiling. Every so often, <<they $g.slave>>'ll get a dreamy expression and
<<set _eq = $g.slave.getEquipmentAt('mouth')>>
<<if _eq && _eq.getTags().includes('gag')>>
lick <<their $g.slave>> <<rep _eq>>.
<<else>>
lick <<their $g.slave>> lips.
<</if>>
<<They $g.slave>> fetishizes cum to the extent that getting to eat a mile of dick really satisfies <<their $g.slave>>.
</p>
<<choose>>
<<opt "<<They $g.slave>> must have at least a little room left">>
<p>
You call <<name $g.slave>> in and ask how full <<they $g.slave>> is. <<They $g.slave>> looks confused for a moment but soon figures out what you mean.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> gestures at <<their $g.slave>>
<<ubelly $g.slave>>, makes a sign for "full," and then makes a sign for "never."
<<else>>
"Oh <<Master $unit.player>>, I'll never be full again,"
<<they $g.slave>> says.
<</if>>
<<ustripmouth $g.slave>>
<<They $g.slave>> comes eagerly over and sucks you off with enthusiasm. As you cum, <<they $g.slave>> orgasms quickly at the taste of the stuff hitting <<their $g.slave>> <<umouth $g.slave>>.
<<if !$g.slave.isAllowedTalk()>>
<<They $g.slave>> signs that you taste great.
<<else>>
"<<Master $unit.player>>, you taste great," <<they $g.slave>> purrs.
<</if>>
<<They $g.slave>> has become more trusting in your willingness to give <<them $g.slave>> what <<they $g.slave>> wants.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Cum in <<their $g.slave>> <<umouth $g.slave>> all night">>
<p>
You've had a busy day, so you've been unusually remiss in fucking your slaves. Naturally, this means you'll be spending the evening in the fort, using the living sexual appliances.
<<name $g.slave>> is instructed to follow you and assist.
<<They $g.slave>>'s tired, so you let <<them $g.slave>> tag meekly along, masturbating gently as you use other slaves or just watching lazily.
But whenever you're on the point of cumming, you switch to <<their $g.slave>> <<umouth $g.slave>> and let <<them $g.slave>> finish you with a few sucks and pumps of <<their $g.slave>> fatigued <<uhands $g.slave>>.
By the time you put the exhausted <<name $g.slave>> to the <<uslavebed $g.slave>>, <<they $g.slave>>'s in a haze of cum-induced pleasure. <<They $g.slave>> has become more submissive to you.
</p>
<</choose>><<run new setup.UnitGroup(
"debtor_for_sale0",
"Debtor",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_merchant),
setup.qc.TraitReplace('unit', setup.trait.per_lavish),
],
)>>
<<run new setup.Event(
'debtor_for_sale', /* key */
"Debtor for Sale", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_debtor_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'man': 'all',
'debtor': 'debtor_for_sale0',
},
[ /* outcomes */
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
setup.qc.Slave('debtor', "a|was enslaved after a|they fell into a debt far too big for a|their own worth", true, 0.8),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.FavorAtLeast('bank', 300),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
The current sale offer is a bit different than usual.
The bank is offering you a brand new slave, apparently being the debtor <<themself $g.debtor>>.
<<Their $g.debtor>> debt has increased so much to the point that even after the many repo-men and women repossessed all <<their $g.debtor>> belongings, it was still not enough. <<They $g.debtor>> eventually put a slave collar on the poor <<urace $g.debtor>>'s neck, before eventually offering the new slave to you.
</p><<run new setup.Event(
'demonic_roleplay', /* key */
"Demonic Roleplay", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_demonic_roleplay',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
setup.qres.OnDuty('theatreslave'),
setup.qres.AnyTrait([setup.trait.training_roleplay_advanced, setup.trait.training_roleplay_master], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You cross paths with <<rep $g.slave>> as <<they $g.slave>> hurries to the <<rep setup.buildingtemplate.theatre>>, just starting <<their $g.slave>> day.
<<They $g.slave>>'s full of energy, and judging from <<their $g.slave>> delightful <<succubus $g.slave>> outfit, <<they $g.slave>> is due for some demonic roleplay scenario.
<<if $g.slave.isHasTrait('race_demon')>>
The fact that <<they $g.slave>> is actually a demon adds to the mysticism.
<</if>>
<<They $g.slave>>
<<if $g.slave.isCanSee()>>
sees your glance
<<else>>
recognizes your whistle
<</if>>
and greets you with a
<<if $g.slave.isCanSee()>>
wicked glint in <<their $g.slave>> eye
<<else>>
wicked smirk on <<their $g.slave>> face
<</if>>
, bowing a bit to show off <<their $g.slave>>
<<if $g.slave.isHasTrait('breast_titanic')>>
bare, inhumanly large breasts
<<elseif $g.slave.isHasTrait('breast_large')>>
heavy, naked breasts
<<else>>
naked <<ubreasts $g.slave>>
<</if>>
and then continuing towards you
<<if $g.slave.isFemale()>>
with a pirouette.
<<else>>
while obviously swaying <<their $g.slave>> <<udick $g.slave>> all for you to see.
<</if>>
<<Their $g.slave>>
<<if $g.slave.isHasTail()>>
<<utail $g.slave>> bounces flirtily, before holding
<<else>>
fake demonic tail sways flirtily, before <<they $g.slave>>
<</if>>
hold
<<if $g.slave.isFemale()>>
the back of <<their $g.slave>> skirt up to show off
<<else>>
their asscheeks apart to show off
<</if>>
<<if $g.slave.isHasTrait('anus_gape')>>
the broad area of puckered skin around <<their $g.slave>> slutty asspussy
<<elseif $g.slave.isHasTrait('anus_loose')>>
a hint of <<their $g.slave>> asshole, which <<their $g.slave>> buttocks don't quite conceal
<<else>>
<<their $g.slave>> tight pucker
<</if>>
.
</p>
<p>
<<They $g.slave>> looks like
<<if $g.slave.isHasTrait('height_giant')>>
an imposing, hungry
<<elseif $g.slave.isHasTrait('muscle_verystrong')>>
a muscular, hungry
<<else>>
hungry little
<</if>>
sex demon,
and you tell <<them $g.slave>> so.
<<if $g.slave.isHasTrait('race_demon')>>
The <<urace $g.slave>> obviously knows all there is about
demons, including the more absurd folktales regarding <<succubus $g.slave>>.
<<elseif $g.slave.isHasTrait('per_smart')>>
The clever <<urace $g.slave>> knows quite a bit about the folktales regarding <<succubus $g.slave>>.
<<else>>
<<They $g.slave>> has learned quite a bit about how people likes to roleplay <<succubus $g.slave>> from <<their $g.slave>> slave training.
<</if>>
"Oh <<Master $unit.player>>, I'm ssstarving," <<they $g.slave>> moans,
running <<their $g.slave>> tongue over <<their $g.slave>> lips and
<<if $g.slave.isFemale()>>
sticking out <<their $g.slave>> chest to present <<their $g.slave>> boobs
<<else>>
stick out <<their $g.slave>> <<udick $g.slave>>
<</if>>
even more obviously.
</p>
<<choose>>
<<opt "Let <<them $g.slave>>
eat">>
<p>
You tell <<them $g.slave>> <<they $g.slave>>'s a good little <<succubus $g.slave>>, and you're going to let <<them $g.slave>> feed.
<<They $g.slave>> knows exactly what you mean, and
gets to <<their $g.slave>> knees quickly, pressing <<their $g.slave>> nipples against your thighs and grasping your hips to give <<themself $g.slave>> leverage for some very aggressive oral.
After
<<if $unit.player.isHasDick()>>
a couple of lush sucks at each of your balls, <<they $g.slave>> moves straight to a hard blowjob, deepthroating your cock and almost ramming <<their $g.slave>> head against you.
<<They $g.slave>>
<<if $g.slave.getMainTraining().getTags().includes('troral')>>
doesn't have to pretend to be starving for your cum.
<<else>>
does a good job of acting like <<they $g.slave>>'s authentically starving for your cum.
<</if>>
<<They $g.slave>> groans with satisfaction when you blow your load down <<their $g.slave>> gullet,
<<else>>
nuzzling <<their $g.slave>> nose against your moist cunt, <<they $g.slave>> starts to eat you out like <<they $g.slave>>'s starving, sparing no time for subtlety, lapping up your female juices with evident relish. You run your <<uhand $g.you>> through <<their $g.slave>> head, telling <<them $g.slave>> <<they $g.slave>>'ll have to survive on pussyjuice. <<They $g.slave>> replies, but you hold <<their $g.slave>> head hard against you as <<they $g.slave>> does, turning whatever <<they $g.slave>> says into an unintelligible, delectable mumbling into your <<woman $g.you>>hood. <<They $g.slave>> groans with satisfaction when you stiffen with orgasm, giving <<them $g.slave>> a final gush of girlcum,
<</if>>
and gets to <<their $g.slave>> <<ufeet $g.slave>> licking <<their $g.slave>> lips and patting <<ubelly $g.slave>>.
</p>
<<run setup.qc.FriendshipWithYou('you', 50).apply($gQuest)>>
<<optif $g.slave.isHasVagina() && $unit.player.isHasDick()>>
<<opt "Feed <<them $g.slave>>
">>
<p>
You tell <<them $g.slave>> <<they $g.slave>>'s a good little <<succubus $g.slave>>, and you're going to feed <<them $g.slave>>.
<<if $g.slave.isHasTrait('breast_huge')>>
Reaching up under <<their $g.slave>> breasts for the top edge of <<their $g.slave>> outfit
<<else>>
Grabbing <<their $g.slave>> outfit's top edge
<</if>>
and seizing <<them $g.slave>> behind a knee with your other <<uhand $g.you>>, you sling <<them $g.slave>> across a convenient bench nearby.
<<They $g.slave>> spreads <<their $g.slave>> <<ulegs $g.slave>> for you, smiling with anticipation,
<<their $g.slave>>cunt flushing with arousal.
<<They $g.slave>> reaches down around <<their $g.slave>> own ass and spreads <<their $g.slave>> pussy for you, only releasing <<their $g.slave>> fingertip grip on <<their $g.slave>> labia when <<they $g.slave>> feels you hilt yourself inside <<their $g.slave>>
<<if $g.slave.isHasTrait('vagina_gape')>>
cavernous
<<elseif $g.slave.isHasTrait('vagina_loose')>>
comfortable
<<else>>
caressing
<</if>>
channel.
You're here to rut, not make love, and you give it to <<them $g.slave>> hard, forcing animal grunts out of <<them $g.slave>>. <<They $g.slave>> climaxes strongly, and the glorious feeling finishes you as well, bringing rope after rope of your cum jetting into <<them $g.slave>>. <<They $g.slave>> groans at the feeling, and as <<they $g.slave>> gets to <<ufeet $g.slave>> <<they $g.slave>> uses a <<uhand $g.slave>> to transfer a taste of the mixture of your seed and <<their $g.slave>> pussyjuice to <<their $g.slave>> <<umouth $g.slave>>.
<<They $g.slave>>'s very good at playing the part of a sex demon whose hunger knows no end,
<<if $g.slave.isHasTrait('race_demon')>>
even though <<they $g.slave>> know, being part demon <<themself $g.slave>>, that it is not that simple.
<<else>>
something <<they $g.slave>> learned from <<their $g.slave>> long slave trainings.
<</if>>
</p>
<<optif $unit.player.isHasDick()>>
<<opt "Fuck <<them $g.slave>>
without feeding <<them $g.slave>>">>
<p>
You tell <<them $g.slave>> <<they $g.slave>>'s a good little <<succubus $g.slave>>. Thinking <<they $g.slave>> understands, <<they $g.slave>>
<<if $g.slave.isHasVagina()>>
turns and hugs the nearest wall, going up on tiptoe and cocking <<their $g.slave>> hips to offer you <<their $g.slave>> needy cunt. <<They $g.slave>> moans as your <<udick $g.you>>
<<if $g.slave.isHasTrait('vagina_gape')>>
enters <<their $g.slave>> big cunt
<<elseif $g.slave.isHasTrait('vagina_loose')>>
fills <<their $g.slave>> wet cunt
<<else>>
slides slowly inside <<their $g.slave>> tight cunt
<</if>>
. As you fuck <<them $g.slave>>, you ask <<them $g.slave>> how
sex demons feed. "W-well," <<they $g.slave>> gasps, struggling to gather <<their $g.slave>> wits,
<<else>>
gets down on <<their $g.slave>> knees and starts to suck you off. <<They $g.slave>> deepthroats you eagerly, stretching to tickle your balls with <<their $g.slave>> tongue as <<they $g.slave>> gets you all the way in, and then shifting a hand to roll them around as <<they $g.slave>> sucks. As <<they $g.slave>> blows you, you ask <<their $g.slave>> how sex demons feed. "Well," <<they $g.slave>> gasps, popping your dickhead free of <<their $g.slave>> <<umouth $g.slave>> and replacing the sucking with a stroking <<uhand $g.slave>>,
<</if>>
</p>
<p>
"<<Master $unit.player>>, they can eat a man's essence by swallowing his cum
<<if $g.slave.isHasVagina()>>
or getting him to ejaculate inside their pussies
<</if>>
."
</p>
<p>
It's not exactly true, but it's what most people in <<lore continent_main>> believes, and it's good enough for what you have in mind.
You then ask <<them $g.slave>> whether <<they $g.slave>> would like to feed off you.
</p>
<p>
"Oh <<Master $unit.player>>, please. Please feed me,"
</p>
<p>
<<they $g.slave>> begs. Too bad, you tell <<them $g.slave>>; <<they $g.slave>> gets to go hungry.
After all, sex demons can't feed using their butts.
<<if $g.slave.isHasVagina()>>
You withdraw from <<their $g.slave>> cunt and stuff your cock up <<their $g.slave>> ass without pausing or softening your thrusting at all.
<<else>>
You pull <<them $g.slave>> to <<their $g.slave>> feet, spin <<them $g.slave>> around, shove <<them $g.slave>> up against the wall, and stuff your cock up <<their $g.slave>> ass.
<</if>>
<<if $g.slave.isHasTrait('anus_gape')>>
It's not like <<their $g.slave>> experienced butt can't take an assraping, but
<<elseif $g.slave.isHasTrait('anus_loose')>>
<<Their $g.slave>> practiced ass relaxes and accommodates your dick, but
<<else>>
<<Their $g.slave>> tight asshole spasms with pain as it stretches to accommodate you, and
<</if>>
<<they $g.slave>> whines at your sudden aggression, wiggling within your
<<if $g.you.isSubmissive()>>
<<else>>
dominating
<</if>>
grip. You fill <<their $g.slave>> ass with cum as <<they $g.slave>> struggles, still playing <<their $g.slave>> part, begging you not to cum in <<their $g.slave>> bottom, since sex demons can't live on buttsex.
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'desperately_horny', /* key */
"Desperately Horny", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_desperately_horny',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_basic, setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AnyTrait([setup.trait.per_lustful, setup.trait.per_sexaddict], true),
setup.qres.Not(setup.qres.IsCanOrgasm()),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> comes to see you, looking deeply unhappy and shivering occasionally.
<<if !$g.slave.isAllowedTalk()>>
Since <<they $g.slave>> slave|is not allowed to speak by your rules, <<they $g.slave>> just
stands there,
<<if $g.slave.isHasTail()>>tail twitching,<</if>>
unsure what to do.
<<elseif !$g.slave.isCanTalk()>>
<<They $g.slave>> tries to communicate something with <<their $g.slave>> <<uhands $g.slave>>, but <<they $g.slave>>'s so distracted <<they $g.slave>> can't manage it. <<They $g.slave>> starts to shake a little,
<<if $g.slave.isHasTail()>>tail twitching,<</if>>
and gives up.
<<else>>
"<<Master $unit.player>>, please! Please - I - please, I need to - oh, <<Master $unit.player>> -" <<they $g.slave>> babbles. <<They $g.slave>> starts to shake a little,
<<if $g.slave.isHasTail()>>tail twitching,<</if>>
and lapses into silence.
<</if>>
The reason for <<their $g.slave>> distress is obvious:
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
<<their $g.slave>> <<ucgenital $g.slave>> is mostly solid, but it has a small hole below where the tip of <<their $g.slave>> dick is held, and this is dripping precum. <<They $g.slave>>'s sexually helpless, and sexually overcharged to the point where <<they $g.slave>>'s dripping more precum than a usual slave might ejaculate normally.
<<elseif $g.slave.isHasTrait('dick_titanic')>>
<<their $g.slave>> gigantic member juts out painfully, scattering droplets of precum whenever <<they $g.slave>> moves. One of <<their $g.slave>> spasms brings <<their $g.slave>> dickhead brushing up against <<their $g.slave>> <<ubelly $g.slave>>, and the stimulation almost brings <<them $g.slave>> to orgasm.
<<elseif $g.slave.isHasTrait('dick_large')>>
<<their $g.slave>> impressive member juts out painfully, scattering droplets of precum whenever <<they $g.slave>> moves. One of <<their $g.slave>> spasms brings <<their $g.slave>> dickhead brushing up against <<their $g.slave>> <<ubelly $g.slave>>, and the stimulation almost brings <<them $g.slave>> to orgasm.
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> little member juts out and painfully erect, scattering droplets of precum whenever <<they $g.slave>> moves. One of <<their $g.slave>> spasms brings <<their $g.slave>> dickhead brushing up against <<their $g.slave>> <<ubelly $g.slave>>, and the stimulation almost brings <<them $g.slave>> to orgasm.
<<else>>
<<their $g.slave>> pussy is so wet there are little rivulets of moisture running down <<their $g.slave>> inner thighs. One of <<their $g.slave>> spasms brings <<them $g.slave>> enough stimulation that it almost brings <<them $g.slave>> to orgasm.
<</if>>
</p>
<p>
This is the result of the lusty slaver not getting off for some time<<if !$g.slave.isAllowedOrgasm()>>, because your rules disallow them to<</if>>.
The poor overcharged <<man $g.slave>> can likely think of nothing but an orgasm right now — <<They $g.slave>>'s so horny that <<they $g.slave>>'ll do anything for a release. However, <<they $g.slave>> did come to you with <<their $g.slave>> trouble rather than masturbating illicitly.
</p>
<<choose>>
<<opt "Touch <<them $g.slave>> enough to get <<them $g.slave>> off">>
<p>
You tell <<them $g.slave>> that <<they $g.slave>> deserves a reward for coming to you. <<They $g.slave>> almost bursts into tears and nods jerkily, unable to do anything else. You brush a finger across <<their $g.slave>> cheek,
<<their $g.slave>> <<uears $g.slave>>, <<their $g.slave>> lips;
at each touch <<they $g.slave>>
<<if !$g.slave.isCanTalk()>>breathes in sharply<<else>>gasps<</if>>.
Moving around behind <<them $g.slave>>, you run a <<uhand $unit.player>> down <<their $g.slave>> flank to <<their $g.slave>> hip, and then around to <<their $g.slave>> <<ubelly $g.slave>>, and up towards <<their $g.slave>> <<ubreasts $g.slave>>.
Your run a thumb over each nipple, almost tipping <<them $g.slave>> over the edge.
Your <<uhands $unit.player>> move down again, spreading <<their $g.slave>> buttocks to tease <<their $g.slave>> clenched anus, and then forward across <<their $g.slave>> perineum - and this is enough. <<They $g.slave>> spasms, pitching forward and almost falling. <<They $g.slave>> hurries to clean up after <<themself $g.slave>> with <<their $g.slave>> tongue, sobbing with relief and thanking you;
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Reward <<them $g.slave>> for coming to you">>
<p>
<<They $g.slave>> almost cries with relief when you tell <<their $g.slave>> to
<<if $g.slave.getMainTraining().getTags().includes('troral')>>
kneel and <<if $unit.player.isHasDick()>>suck a dick<<if $unit.player.isHasVagina()>> and eat a pussy<</if>><<else>>eat pussy<</if>> while you continue resting on your <<uslaverbed $g.slave>>. <<They $g.slave>>'s so horny that <<they $g.slave>>'s barely got <<if $unit.player.isHasDick()>>your cock into <<their $g.slave>> <<umouth $g.slave>><<else>><<their $g.slave>> lips and tongue on your cunt<</if>> before <<they $g.slave>> climaxes spontaneously, shivering and moaning nicely. You keep <<them $g.slave>> down there for a while, relaxing and orgasming occasionally as <<they $g.slave>> gently <<if $unit.player.isHasDick()>>blows you<<else>>lavishes attention on your wet vagina<</if>>.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
tell <<them $g.slave>> to sit on your lap. <<They $g.slave>> climaxes the instant your <<if $unit.player.isHasDick()>>dickhead<<else>>strap-on<</if>> touches <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>anal gape<<else>>pucker<</if>>, but <<they $g.slave>> knows this is just the start, and <<they $g.slave>> laughs with pleasure as <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>lewd sphincter loosely squeezes<<else>>sphincter tightens against<</if>> the base of <<if $unit.player.isHasDick()>>your cock<<else>>the strap-on<</if>>. You shove the <<if $g.slave.isFemale()>>giggling<<else>>excited<</if>> buttslut down so <<their $g.slave>> <<ubreasts $g.slave>> is resting against the tops of your <<ulegs $unit.player>>.
<<They $g.slave>> wraps <<their $g.slave>> <<ulegs $g.slave>> around your <<uwaist $unit.player>> and hugs your knees with <<their $g.slave>> <<uarms $g.slave>>, securing <<themself $g.slave>> as an anal cocksleeve for as long as you feel like keeping <<if $unit.player.isHasDick()>>your penis lodged up a compliant butthole<<else>>the happy buttslut trapped under there<</if>>.
<<elseif $g.slave.getMainTraining().getTags().includes('trdominance')>>
wait a moment, because you know what <<they $g.slave>> needs. <<They $g.slave>>'s mystified, but steels <<themself $g.slave>> and waits. Another slave is taken from your dungeons, and <<they $g.slave>> discovers that <<they $g.slave>>'s to be toyed with together, with
<<name $g.slave>>'s
<<if $g.slave.isHasDick() && $g.slave.isCanCum()>>
cock up <<their $g.slave>> asshole<<else>>fingers assfucking <<them $g.slave>><</if>>.
The dominant <<name $g.slave>> climaxes immediately to <<their $g.slave>> use of the poor slave, rubbing <<themself $g.slave>> all over the other slave's buttocks while <<they $g.slave>> continues banging <<their $g.slave>> backdoor.
<<elseif $g.slave.isMasochistic()>>
tell <<them $g.slave>> to get <<their $g.slave>> ass up on your <<uslaverbed $g.slave>> and lie face down. <<They $g.slave>> clambers up, and you let <<them $g.slave>> lie there for a while, tortured by anticipation and arousal, before giving <<their $g.slave>> nearest buttock a harsh open-handed slap. The shock and pain send <<their $g.slave>> over the edge immediately, and <<they $g.slave>> grinds forward into the <<uslaverbed $g.slave>> involuntarily; the feeling of the sheet against <<their $g.slave>> <<if $g.slave.isHasDick()>>dickhead<<else>>mons<</if>> slams <<them $g.slave>> into a second climax, and <<they $g.slave>> sobs with overstimulation. You keep <<their $g.slave>> there for a good long while, using <<them $g.slave>> as a toy that makes interesting noises when you hit it.
<<else>>
lie down on your <<uslaverbed $g.slave>> on <<their $g.slave>> side in the fetal position. <<They $g.slave>> clambers up hurriedly and hugs <<their $g.slave>> knees, spinning <<themself $g.slave>> around on the sheet so <<their $g.slave>> rear is pointing right at you. You stand up and pull <<them $g.slave>> over, <<their $g.slave>> <<uskin $g.slave>> sliding across the sheets, until <<their $g.slave>> butt is right at the edge of the <<uslaverbed $g.slave>>. You give it a good fuck, <<if $unit.player.isHasDick()>> use <<their $g.slave>> <<umouth $g.slave>> to clean your dick afterwards,<</if>> and then and then order <<them $g.slave>> brusquely to clean up and come right back. You use <<them $g.slave>> as a nice little <<if $unit.player.isHasDick()>>cockholster<<else>>sex toy<</if>> for the rest of the day.
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'devoted_entertainment_slave', /* key */
"Devoted Entertainment Slave", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_devoted_entertainment_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.OnDuty('entertainmentslave'),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> is a real obedient public slave. This morning, <<they $g.slave>> rose early, did <<their $g.slave>> chores, and looked after <<themself $g.slave>>. <<They $g.slave>> heads out past toward the <<rep setup.buildingtemplate.recreationwing>> to offer <<themself $g.slave>> to everyone <<they $g.slave>> meets.
</p>
<p>
As <<they $g.slave>> goes, you notice that
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
precum is starting to dribble out of <<their $g.slave>> chastity cage
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> cock is so hard it's standing out, perfectly straight
<<else>>
their pussy is already soaking wet
<</if>>
no doubt looking forward to having to
<<if $g.slave.getMainTraining().getTags().includes('troral')>>
gorge <<themself $g.slave>> on cum.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
spend all day getting pounded in the ass.
<<elseif $g.slave.getMainTraining().getTags().includes('trobedience')>>
get dominated.
<<else>>
be a complete slut.
<</if>>
If you went with <<their $g.slave>>, you could certainly show off a little.
</p>
<<choose>>
<<opt "Share <<their $g.slave>>
body with the public">>
<p>
<<name $g.slave>> is surprised to find you walking beside <<them $g.slave>>, but obediently falls in behind you as a proper slave should.
You take <<them $g.slave>> to the <<rep setup.buildingtemplate.hiringsquare>> and seat yourself on a bench.
You pull <<their $g.slave>> ass down onto your
<<if !$unit.player.isHasDick()>>
strap-on
<<else>>
rigid cock
<</if>>
so <<they $g.slave>> can offer everything else to the public visitors.
<<if $g.slave.isHasVagina()>>
For several hours, visitors come and go, most choosing to fuck <<their $g.slave>> wet and available pussy. You climax repeatedly from the
<<if !$unit.player.isHasDick()>>
titillating nature of
<<else>>
extra fullness of <<their $g.slave>> butt during
<</if>>
double penetration, and by the time you're finished <<they $g.slave>>'s dripping ejaculate from both <<their $g.slave>> holes.
<<else>>
With your cock pumping <<their $g.slave>> butt as much as you can manage with <<them $g.slave>> seated in your lap, <<their $g.slave>> dick flops up and down, lewdly advertising <<their $g.slave>> sexual availability. <<They $g.slave>> gives so many blowjobs by the time you're finished that <<their $g.slave>> face, chest and even stomach are liberally spattered with cum.
<</if>>
The visitors appreciated the entertainment.
</p>
<<run setup.qc.Favor('humanvale', 25).apply($gQuest)>>
<<opt "Give <<them $g.slave>>
some aftercare">>
<p>
<<name $g.slave>> returns many hours later. <<They $g.slave>> carefully took breaks for <<their $g.slave>> own safety, and cleaned <<themself $g.slave>> periodically, so there isn't much evidence, but <<they $g.slave>>'s obviously bone tired. When you meet <<them $g.slave>> at the entrance to the dungeons, <<they $g.slave>>'s surprised to
<<if $g.slave.isCanSee()>>
see
<<else>>
find
<</if>>
you, but <<they $g.slave>> gives you a little smile anyway. You give <<them $g.slave>> a strong massage and put <<them $g.slave>> to bed. Afterward you turn to be about your business, but <<they $g.slave>> wordlessly offers <<themself $g.slave>> to you as you do.
<<if $g.slave.isHasTraitExact('vagina_tight')>>
<<Their $g.slave>> tight pussy is certainly tempting.
<<elseif $g.slave.isHasTraitExact('vagina_loose')>>
<<Their $g.slave>> soft pussy is certainly tempting.
<<elseif (!$g.slave.isHasVagina())>>
<<Their $g.slave>> relaxed anus is certainly inviting.
<<else>>
<<Their $g.slave>> capacious pussy is certainly inviting.
<</if>>
<<They $g.slave>>'s sore, so you spoon <<them $g.slave>> gently in bed, fucking <<them $g.slave>> slowly to sleep. <<They $g.slave>> falls asleep with a serene expression on <<their $g.slave>> face. <<Their $g.slave>> trust in you has increased.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Chat about <<their $g.slave>>
day">>
<p>
<<name $g.slave>> returns many hours later. <<They $g.slave>>'s obviously bone tired. When you meet <<them $g.slave>> at the entrance to your penthouse <<they $g.slave>>'s surprised to
<<if $g.slave.isCanSee()>>
see
<<else>>
find
<</if>>
you, but <<they $g.slave>> gives you a little smile anyway. You bring <<them $g.slave>> back to your office, and <<they $g.slave>>'s clearly expecting to get fucked, so <<they $g.slave>>'s surprised when you hand <<them $g.slave>> a hot beverage and sit down on the couch with <<them $g.slave>>. <<They $g.slave>> relaxes quickly and chats with you about <<their $g.slave>> day, gossiping about all the private doings of all the prominent visitors who fucked <<their $g.slave>>
<<if $g.slave.isHasVagina()>>
cunt
<<else>>
asshole
<</if>>
today.
<<if ($g.slave.isHasTrait('per_smart'))>>
<<They $g.slave>>'s witty and holds up <<their $g.slave>> end of the conversation without straying from <<their $g.slave>> role as a slave.
<<elseif !$g.slave.isHasTrait('per_slow')>>
<<They $g.slave>> has a few juicy items to share, and even gossiping, <<they $g.slave>>'s mindful of <<their $g.slave>> role as a slave.
<<else>>
<<They $g.slave>> may be an idiot, but <<their $g.slave>> babble is amusing enough.
<</if>>
Time flies, and when you finally stand up to continue with your evening, <<they $g.slave>> thanks you for listening to <<them $g.slave>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'doctor_molestation', /* key */
"Doctor Molestation", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_doctor_molestation',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.OnDuty('doctor'),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.NoTraits([setup.trait.per_chaste, setup.trait.per_submissive], true),
setup.qres.AnyTrait([setup.trait.per_dominant, setup.trait.per_lustful, setup.trait.per_sexaddict], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.IsInjured(1),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Your duties as the leader of the company means that you spend quite some time going around your fort.
As you past by the <<rep setup.buildingtemplate.doctoroffice>>,
you hear a quiet moaning and the distinct noise of flesh on flesh.
Peeking into the office, you see <<yourrep $g.slaver>> between
<<their $g.slaver>> patient slave <<rep $g.slave>>'s <<ulegs $g.slave>>,
who are lying gagged on top of the doctor's table and
spread wide by makeshift stirrups made from weapon sheathes.
<<if $g.slaver.isHasDick()>>
<<They $g.slaver>> slaver|is pounding eagerly away and mauling <<their $g.slaver>> patient's bare <<ubreasts $g.slave>> with both <<uhands $g.slaver>>.
<<else>>
<<They $g.slaver>> slaver|is using one <<uhand $g.slaver>> to fingerfuck <<their $g.slaver>> patient, and the other to masturbate furiously.
<</if>>
As you recall, your doctor is indeed
<<if $g.slaver.isHasTrait('per_dominant')>>
a rather dominant <<urace $g.slaver>>, and <<they $g.slaver>> could not resist violating a sub or two.
<<elseif $g.slaver.isHasTrait('per_lustful')>>
rather lustful, even by your fort's standard, and <<they $g.slaver>> could not resist violating a slave or two even on duty.
<</if>>
</p>
<<choose>>
<<opt "Just move on with your day">>
<p>
Sensing nothing wrong with a little fun on the job, you leave
your <<uadjper $g.slaver>> doctor alone to continue <<their $g.slaver>> poundings.
<<Rep $g.slave>> will certainly feel that <<their $g.slave>> ass sore the next day, but in <<their $g.slave>> life, that would be nothing surprising.
</p>
<<run setup.qc.Injury('slave', 1).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<<opt "Ask the doctor to be gentle with the injured slave">>
<p>
Feeling pity for the slave, you <<uadv $unit.player>> knock on the door before entering. While sex is an acceptable recreation activity in your fort, you also need your slave to recover quickly, and you
<<uadv $unit.player>> tell this to your <<urace $g.slaver>>.
<<They $g.slaver>> begrudgingly agree, and slow down <<their $g.slaver>> fucking pace significantly to something more comfortable for the injured slave.
</p>
<</choose>><<run new setup.Event(
'ex_reserved', /* key */
"Ex-Reserved", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_ex_reserved',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_priest, setup.trait.bg_mythical, setup.trait.bg_scholar, setup.trait.bg_engineer, setup.trait.bg_monk, setup.trait.bg_noble, setup.trait.bg_royal, setup.trait.bg_healer], true),
setup.qres.AnyTrait([setup.trait.per_sexaddict, setup.trait.training_oral_master, setup.trait.training_anal_master], true),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.gym),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You would check up on your more obedient slaves from time to time, and <<yourrep $g.slave>> happens to be scheduled for inspection today. <<They $g.slave>> comes into your office naked, to find that the earlier inspection is going a little long. The slave before <<them $g.slave>> is obediently riding
<<if (!$unit.player.isHasDick())>>one of your larger strap-ons<<else>>your cock<</if>>.
<<They $g.slave>> waits patiently, but does not bother to hide <<their $g.slave>> arousal at the lewd sight. <<They $g.slave>> obviously wants to be next;
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
<<their $g.slave>> chastity cage is dribbling precum, and <<they $g.slave>>'s clearly uncomfortable with simultaneous arousal and unwillingness to suffer a hardon inside it
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> <<udick $g.slave>> is painfully erect
<<else>>a sheen is visible on <<their $g.slave>> pussylips<</if>>, <<their $g.slave>> nipples are stiff, and <<they $g.slave>>'s starting to breathe a little hard.
</p>
<p>
When you finish and send the slave you were boning on <<their $g.slave>> way with a light slap on the rump, you seat yourself to inspect <<name $g.slave>>. As you do,
<<if (!$unit.player.isHasDick())>>your rather realistically modeled phallus dangles between your legs<<else>>your half-hard <<udick $unit.player>> hangs between your legs<</if>>, still slick from fucking the previous inspectee. <<Reps $g.slave>> <<ueyes $g.slave>> focus on it with painful intensity, and the <<urace $g.slave>>'s
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
chastity cage begins to bother <<them $g.slave>> even more.
<<elseif $g.slave.isHasDick()>>
hard dick releases a string of precum.
<<else>>
the distinct smell of female arousal in the office intensifies.
<</if>>
You recall <<their $g.slave>> rather reserved past —
<<if $g.slave.isHasTrait('bg_royal')>>
<<they $g.slave>> slave|was born to rule, not to be used as sex toy.
<<elseif $g.slave.isHasTrait('bg_mythical')>>
<<they $g.slave>> slave|was born to be worshipped as a deity, not as a sex object.
<<elseif $g.slave.isHasTrait('bg_engineer')>>
<<they $g.slave>> slave|was an engineer, usually working with mechanical devices and not sex toys.
<<elseif $g.slave.isHasTrait('bg_scholar')>>
<<they $g.slave>> used to spend most of <<their $g.slave>> time buried in the books, and have little time for sex.
<<elseif $g.slave.isHasTrait('bg_noble')>>
<<they $g.slave>> attended modest and noble parties, and would often use slaves instead of being used as one.
<<elseif $g.slave.isHasTrait('bg_healer')>>
<<they $g.slave>> practiced the art of healing, an art very far yet very close to sex.
<<elseif $g.slave.isHasTrait('bg_monk')>>
<<they $g.slave>> spent <<their $g.slave>> days honing <<their $g.slave>> body and mind.
<<elseif $g.slave.isHasTrait('bg_priest')>>
<<they $g.slave>> spent <<their $g.slave>> days in chaste solitude as a dedicated priest.
<</if>>
<<They $g.slave>> must not have been a fan of the dick then, but <<they $g.slave>>'s certainly come around.<<if (!$unit.player.isHasDick())>> Even a strap-on is enough to get <<them $g.slave>> all hot and bothered.<</if>> On impulse, you ask <<them $g.slave>> if <<they $g.slave>> remembers how <<they $g.slave>> used to feel about cock. <<They $g.slave>> hesitates, wondering how to answer, but decides that honesty is the best policy and says, "Yes, <<Master $unit.player>>. I do. I mean, not all the time. It's easy to forget that I wasn't always such a cock-hungry slut." <<They $g.slave>> laughs, a rueful sound.
<<if $g.slave.isHasTrait('per_sexaddict')>>
"I need it so bad now, I'll let anybody fuck me. I mean, I'd let anybody fuck me, if it wasn't already my job as a slave.
<<elseif $g.slave.getMainTraining().getTags().includes('troral')>>
"Cocks are so hot. Just thinking about them gets me all horny. How they're all throbbing and warm and then they cum..." <<They $g.slave>> trails off. "Sorry, got distracted.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
"I didn't know how much fun getting fucked in the butt was back then.
<<else>>
"Guys are just so hot - all big and strong and muscly.
<</if>>
<<if $unit.player.isHasDick()>>
<<if $unit.player.isHasTrait('face_attractive')>>
And being owned by such a handsome man has helped."
<<elseif $unit.player.isHasTrait('muscle_strong')>>
And being owned by such a shapely man has helped."
<<else>>
And being owned by a man like you has helped."
<</if>>
<<else>>
Not that I don't love ladies too."
<</if>>
<<They $g.slave>> arches <<their $g.slave>> back and bats <<their $g.slave>> eyes at you. "A lot."
</p>
<<choose>>
<<opt "<<They $g.slave>> wants dick. Give <<them $g.slave>> the dick">>
<p>
You rise fluidly out of your chair, pointing at the floor at <<their $g.slave>> feet. <<They $g.slave>> needs no further direction, and hurriedly gets down to place <<their $g.slave>> <<umouth $g.slave>> at dick height. <<They $g.slave>> <<if (!$unit.player.isHasDick())>>gives your strap-on a blowjob<<else>>sucks you off<</if>> with relish, looking adoringly up at you as <<they $g.slave>> rhythmically works <<their $g.slave>> lips up and down
<<if (!$unit.player.isHasDick())>>the<<else>>your<</if>> thick shaft. After a bit of this, you pull
<<if (!$unit.player.isHasDick())>>the phallus<<else>>yourself<</if>>
free with a delicious popping noise, and haul the slave to <<their $g.slave>> feet. You grab <<their $g.slave>> <<uarms $g.slave>> in a firm hold and pull <<them $g.slave>> up on tiptoe (at which the horny <<urace $g.slave>>
<<if $g.slave.isFemale()>>
giggles
<<else>>
smiles
<</if>>
with anticipation), and then thrust into the gap between <<their $g.slave>> thighs. This motion slides <<if (!$unit.player.isHasDick())>>the strap-on<<else>>your hard dick<</if>> <<if $g.slave.isHasVagina()>>against <<their $g.slave>> moist pussylips<<else>>against <<their $g.slave>> anus and then past <<their $g.slave>> ballsack<</if>>, eliciting a shocked gasp and then a prolonged whine of pleasure. <<They $g.slave>> humps <<themself $g.slave>> along <<if (!$unit.player.isHasDick())>>the phallus<<else>>your shaft<</if>> shamelessly, craning around to rain kisses on your jawline and neck.
</p>
<p>
<<if $g.slave.isHasVagina()>>
When you gently push <<their $g.slave>> face away from you by tipping <<their $g.slave>> torso forward, <<they $g.slave>> moans a little from the loss of closeness, but soon forgets it when you press your <<if (!$unit.player.isHasDick())>>strap-on<<else>>dick<</if>> inside <<them $g.slave>>. <<They $g.slave>> begins to gasp your name, moan adoration, and beg nonsensically, and <<they $g.slave>>
orgasms promptly.
<<They $g.slave>> groans with overstimulation as you pull out, and then whines when you redouble it by immediately switching to <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>loose<<elseif $g.slave.isHasTrait('anus_loose')>>practiced<<else>>tight<</if>> ass.
<<else>>
When you gently push <<their $g.slave>> face away from you by tipping <<their $g.slave>> torso forward, <<they $g.slave>> moans a little from the loss of closeness, but soon forgets it when you press your <<if (!$unit.player.isHasDick())>>strap-on<<else>>dick<</if>> against <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>loose<<elseif $g.slave.isHasTrait('anus_loose')>>practiced<<else>>tight<</if>> anus. As you push inside <<them $g.slave>>, <<they $g.slave>> begins to gasp your name, moan adoration, and beg nonsensically, and <<they $g.slave>> orgasms promptly. <<They $g.slave>> groans with overstimulation, but you're just getting started; you grab <<their $g.slave>> knees and hoist <<them $g.slave>> up to fuck <<their $g.slave>> ass some more.
<</if>>
You climax there, your tour of <<their $g.slave>> holes completed; <<they $g.slave>> drops down to clean you off again before thanking you earnestly and taking <<their $g.slave>> leave, though not without a final turn in the doorway to steal a final loving glance at <<if (!$unit.player.isHasDick())>>your strap-on<<else>>your junk<</if>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Send <<their $g.slave>> down to the gym to share that attraction around">>
<p>
You bring up a map of your fort and point out the <<rep setup.buildingtemplate.gym>> to <<them $g.slave>>; you tell <<them $g.slave>> to go down there, and let <<them $g.slave>> know <<they $g.slave>>'ll spend the rest of the day there. <<They $g.slave>> looks mystified, and when you do not elaborate further, <<they $g.slave>> asks,
"What should I do there, <<Master $unit.player>>?"
Anything <<they $g.slave>> wants, you tell <<them $g.slave>>. <<They $g.slave>> still looks somewhat puzzled, but <<they $g.slave>> heads down to the gym anyway. When <<they $g.slave>> gets there, <<they $g.slave>> sees a steady stream of well-muscled male visitors as well as some of your slavers entering the showers area, and gets it. <<They $g.slave>> heads into the locker room. Given the atmosphere of your fort, there isn't much reaction to a naked <<urace $g.slave>> entering a male-dominated gym. That is, until <<they $g.slave>> selects from among the sweaty gentlemen coming in from the weight room, sidles up to one, and says cheerfully, "Hi! Do you wanna fuck me?" He does, and so do many of other visitors. So many, in fact, that having the showers right there becomes convenient for <<them $g.slave>> as the day goes on.
</p>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'girlish_slave', /* key */
"Girlish Slave", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_girlish_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.Or([
setup.qres.TraitExact(setup.trait.training_obedience_basic),
setup.qres.TraitExact(setup.trait.training_obedience_advanced)
]),
setup.qres.NoTrait(setup.trait.breast_large),
setup.qres.NoTrait(setup.trait.muscle_strong),
setup.qres.NoTrait(setup.trait.tough_tough),
setup.qres.NoTrait(setup.trait.dick_large),
setup.qres.NoTrait(setup.trait.balls_large),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.market),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> slave|is nice and slim, with a trim chest, narrow hips and not much of an ass to speak of.
<<if $g.slave.isHasTrait('tough_nimble')>>
The body allows <<therace $g.slave>> to remain lithe and nimble.
<</if>>
Today, <<they $g.slave>> slave|is obediently standing before you with <<their $g.slave>> hands crossed over <<their $g.slave>> flat stomach.
You strips <<them $g.slave>> and places <<their $g.slave>> naked torso on your <<uslaverbed $g.slave>> for your pleasure.
A perfectly devoted slave might display <<themself $g.slave>>, and a rebellious one might try to cover <<themself $g.slave>>: <<they $g.slave>>'s neither. <<if $g.slave.isHasDick()>>Though <<they $g.slave>>'s not sexually aroused, <<their $g.slave>> <<udick $g.slave>> is visible and contributes greatly to <<their $g.slave>> androgyny.<<else>><<Their $g.slave>> bare pussy completes the picture of simultaneous innocence and availability.<</if>>
</p>
<<choose>>
<<opt "Let <<them $g.slave>> get dressed and spend some quality time with <<them $g.slave>>">>
<p>
You let <<name $g.slave>> don a nice clothes and take <<them $g.slave>> out. <<They $g.slave>>'s a little suspicious at first but when you reach the
first balcony on your lazy route around your fort,
the sun on <<their $g.slave>> face and the gentle breeze around <<their $g.slave>> <<uears $g.slave>> convince <<them $g.slave>> there's no trick. <<They $g.slave>> watches you <<uadv $g.slave>> as you lead <<them $g.slave>> around, soaking in the scenery and relaxing. Though you still speak as <<their $g.slave>> <<master $unit.player>>,
you chat about goings on around the fort, and you buy <<them $g.slave>> a fresh fruit from a vendor in your <<rep setup.buildingtemplate.market>>. The unexpected show of care and compassion has <<their $g.slave>> quite agog. By the time you take <<their $g.slave>> out onto a secluded corner of your fort and fuck <<them $g.slave>>,
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
<<their $g.slave>> chastity cage is dribbling precum, a sign <<they $g.slave>> wouldn't mind having to take it up the ass.
<<elseif $g.slave.isHasDick()>>
<<they $g.slave>>'s happy to take it up the ass, and you can see <<their $g.slave>> dick is tenting the front of <<their $g.slave>>clothes.
<<else>><<they $g.slave>>'s wet and ready and moans happily as you enter <<them $g.slave>>.
<</if>>
There's no hesitation or fear at all on <<their $g.slave>> face when <<they $g.slave>> sees you're returning <<them $g.slave>> to your bedchamber; <<their $g.slave>> trust in you has increased.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif $g.slave.isHasTraitExact('anus_tight') and $g.slave.isFemale()>>
<<opt "Dominate <<their $g.slave>> narrow ass">>
<p>
You make a show of examining <<them $g.slave>> with a critical air that makes <<their $g.slave>> aware of <<their $g.slave>> modest endowments.
Finished, you announce in a serious tone that you're concerned that you can't tell if <<they $g.slave>>'s a <<girl $g.slave>>, since <<girl $g.slave>>s have breasts and butts.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> protests wordlessly, gesturing desperately at <<themself $g.slave>>.
<<else>>
<<They $g.slave>> protests, "<<Master $unit.player>>, I'm a slave <<girl $g.slave>>! Please, just look at me, <<Master $unit.player>>!"
<</if>>
<<if $g.slave.isCanSee()>>
Shaking your head
<<else>>
Tutting
<</if>>
with pretended doubt, you say that since you're not sure you'll have to make do. Your order <<their $g.slave>> to lie face down on the <<uslaverbed $g.slave>>
<<if $g.slave.isHasTail()>>and raise <<their $g.slave>> <<utail $g.slave>><</if>>
<<if !$unit.player.isHasDick()>> while you don a strap-on<</if>>. <<They $g.slave>> does doubtfully, only realizing what you intend when <<they $g.slave>> feels <<if !$unit.player.isHasDick()>>the strap-on<<else>>your dickhead<</if>> forcing its way between <<their $g.slave>> narrow buttcheeks. <<They $g.slave>> whimpers and moans into the couch as you roughly sodomize <<them $g.slave>>. It's true, <<they $g.slave>>'s pretty androgynous from this angle, especially while <<they $g.slave>> takes it up the butthole.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<set _outcomes =
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('gym', setup.qres.AnyTrait([setup.trait.per_chaste, setup.trait.per_submissive, setup.trait.per_kind], true)),
setup.qc.DoAll([
setup.qc.BoonizeRandom('other', 2)
], undefined),
setup.qc.DoAll([
setup.qc.Friendship('gym', 'other', 300)
], undefined)),
setup.qc.SetCooldownEvent('gym_sex_mm', 1000),
setup.qc.SetCooldownEvent('gym_sex_mf', 1000),
setup.qc.SetCooldownEvent('gym_sex_ff', 1000),
]
>>
<<set _gymreq = [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Trait(setup.trait.muscle_strong),
]>>
<<set _otherreq = [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTrait(setup.trait.muscle_strong),
setup.qres.NoTrait(setup.trait.per_dominant),
]>>
<<run new setup.Event(
'gym_sex_mm', /* key */
"Gym Sex", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_gym_sex',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'gym': _gymreq.concat([
setup.qres.TraitExact(setup.trait.gender_male),
]),
'other': _otherreq.concat([
setup.qres.TraitExact(setup.trait.gender_male),
]),
},
_outcomes,
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.gym),
setup.qres.AllowLovers('gender_male', 'gender_male'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'gym_sex_mf', /* key */
"Gym Sex", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_gym_sex',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'gym': _gymreq.concat([
setup.qres.TraitExact(setup.trait.gender_male),
]),
'other': _otherreq.concat([
setup.qres.TraitExact(setup.trait.gender_female),
]),
},
_outcomes,
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.gym),
setup.qres.AllowLovers('gender_male', 'gender_female'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'gym_sex_ff', /* key */
"Gym Sex", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_gym_sex',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'gym': _gymreq.concat([
setup.qres.TraitExact(setup.trait.gender_female),
]),
'other': _otherreq.concat([
setup.qres.TraitExact(setup.trait.gender_female),
]),
},
_outcomes,
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.gym),
setup.qres.AllowLovers('gender_female', 'gender_female'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<if $g.gym.isHasTrait('muscle_verystrong')>>
<<Yourrep $g.gym>> has an immensely powerful physique, and <<therace $g.gym>>
maintains it with a tremendous workout routine. <<Theslaver $g.gym>> can often be seen
working out for hours, lifting weights far heavier than <<their $g.gym>>
peers. This gives <<them $g.gym>> power, but it also makes <<them $g.gym>>
looks quite good.
<<else>>
<<Yourrep $g.gym>> takes care of <<themself $g.gym>>, and it shows.
While there is no explicit requirement that a slaver must work out hard and regularly, it is of course good to be physically fit for such a demanding job. Not to mention, it's often useful to look good.
<</if>>
</p>
<p>
Ever since you've built the <<rep setup.buildingtemplate.gym>>,
<<rep $g.gym>> has been spending quite a lot of time there, maintaining the size of <<their $g.gym>> muscles.
As you pass by the gym today, you see <<them $g.gym>> working out as usual, and <<they $g.gym>> appears to have just completed the final rep of <<their $g.gym>> first workout of the day.
But more interestingly, you see <<yourrep $g.other>> frozen in the open doorway, having seen something in the workout room that caught <<their $g.other>> attention as <<they $g.other>> passed by.
<<Their $g.other>> <<ueyes $g.other>> are fixed on <<reps $g.gym>>
<<if $g.gym.isHasBreasts()>>
sports bra clad boobs with almost painful intensity.
You can't really blame <<them $g.other>>; the bra's soaked in <<their $g.gym>> sweat and <<their $g.gym>> nipples are clearly visible as bumps in the tight material.
<<else>>
abdominal muscles with almost painful intensity.
You can't really blame <<them $g.other>>;
they're pretty cut, and <<their $g.other>> bare chest is coated in a light sheen of glistening sweat.
<</if>>
</p>
<p>
<<Their $g.other>> eyes track up <<reps $g.gym>> torso comically until <<they $g.other>>'s looking into <<their $g.gym>> eyes.
<<Rep $g.other>> stares dumbly at <<rep $g.gym>> for a moment before realizing what <<they $g.other>>'s doing and blushing with embarrassment.
"Sorry, I was just, um, passing by and I thought, um, I saw, um, sorry I'm going now," <<they $g.other>> babbles,
and turns to flee.
</p>
<<if $g.gym.isHasTrait('per_chaste')>>
<p>
The chaste slaver's embarrassment at having being so lustfully watched only doubles when <<rep $g.gym>> finally notices that you were also watching the entire scene unfolds. <<They $g.gym>> blushes furiously, stammering out from the gym quickly to wash and change clothes. In the coming days, however, you noticed <<rep $g.other>> works harder than normal, no doubt trying to impress <<rep $g.gym>>...
</p>
<<elseif $g.gym.isHasTrait('per_submissive')>>
<p>
<<Yourrep $g.gym>> does not give chase, and while others would mistake it for
leniency, you know <<theslaver $g.gym>> too well by now and especially <<their $g.gym>>
submissive tendencies.
In the coming days, however, you noticed <<rep $g.other>> works harder than normal, no doubt trying to impress <<rep $g.gym>>, completely oblivious to <<their $g.gym>> submissive nature...
</p>
<<elseif $g.gym.isHasTrait('per_kind')>>
<p>
<<Yourrep $g.gym>> only smiles at the scene, the kind slaver never thinking of any sort of retaliation. Finally noticing your presence, <<they $g.gym>> waves at you as well before finally going back to <<their $g.gym>> quarters to change clothes.
In the coming days, however, you noticed <<rep $g.other>> works harder than normal, no doubt trying to impress <<rep $g.gym>>, completely oblivious to <<their $g.gym>> submissive nature...
</p>
<<else>>
<p>
As <<they $g.other>> run away, <<rep $g.other>> follows the natural impulse when embarrassed, and turns <<their $g.other>> head resolutely away from <<rep $g.gym>>, trying very hard to forget making such a fool of <<themself $g.other>>.
This means that <<they $g.other>> does not see <<reps $g.gym>> rapid, predatory pursuit of <<their $g.gym>>; nor does <<they $g.other>> hear <<reps $g.gym>> careful stride across the flooring. <<Their $g.other>> first indication that she's prey is when <<reps $g.gym>> <<uhands $g.gym>> grab <<them $g.other>> around <<their $g.other>> middle and hug <<rep $g.other>> hard against <<their $g.gym>>
<<if $g.gym.isHasBreasts()>>
sweaty boobs.
<<else>>
sweaty, bare chest.
<</if>>
<<They $g.other>> stiffens and shrieks with surprise.
<<Reps $g.gym>> warm, animal presence has an immediate effect. <<They $g.gym>> hears <<rep $g.other>> sucks in <<their $g.other>> breath and then feel <<them $g.other>> begin to breathe increasingly hard as <<their $g.gym>> <<uscent $g.gym>> sinks into <<them $g.other>> and <<their $g.other>> embarrassment is starting to get replaced by lust.
</p>
<p>
<<if $g.gym.isFemale()>>
Despite <<their $g.gym>> feminine appearance, <<rep $g.gym>> has capable <<uhands $g.gym>>.
<<else>>
<<rep $g.gym>> has strong <<uhands $g.gym>> to go with <<their $g.gym>> masculine appeal.
<</if>>
They rove across <<reps $g.other>> front, hugging <<them $g.other>> hard against <<themself $g.gym>>
as <<rep $g.gym>> massages and gropes.
<<if $g.other.isHasTrait('breast_huge')>>
<<Their $g.other>> tits are so big that hefting them creates a bit of a burn in <<reps $g.gym>> biceps, in addition to making <<rep $g.other>> writhe against <<them $g.gym>>.
<<else>>
<<rep $g.gym>> pinches <<reps $g.other>> nipples and tug them hard, making <<therace $g.other>> writhe and buck against <<them $g.gym>>.
<</if>>
<<if !$g.gym.isHasDick()>>
<<rep $g.gym>> grabs one of <<reps $g.other>> <<uhands $g.other>>
and guide it down to <<their $g.other>> own
<<ugenital $g.other>>, making <<them $g.other>> play with <<themself $g.other>>.
Meanwhile, <<rep $g.gym>> looks after <<their $g.gym>> womanhood with <<their $g.gym>> other <<uhand $g.gym>>,
schlicking expertly while holding <<rep $g.other>> close, ensuring that <<they $g.other>> feels every motion of what <<they $g.gym>>'s doing.
When <<their $g.gym>> fingers are thoroughly coated with pussyjuice, <<rep $g.gym>> drops <<their $g.other>> <<uhand $g.other>>,
letting <<rep $g.other>> continue masturbating on <<their $g.other>> own, and then use the freed hand to replace the one <<they $g.gym>> gym|was using to touch <<themself $g.gym>>.
Then, <<rep $g.gym>> takes the wet fingers and push them into <<their $g.other>> mouth; <<rep $g.other>> willingly sucks them clean, using <<their $g.other>> tongue to gather every trace of <<reps $g.gym>> secretions.
<<Rep $g.gym>> gathers sweat from between <<their $g.gym>> <<ubreasts $g.gym>>,
and make <<rep $g.other>> suck that off <<their $g.gym>> fingers too. When <<rep $g.other>> orgasms, <<rep $g.gym>> shoves <<them $g.other>> against the wall and humps against <<them $g.other>> and <<their $g.other>> <<uhand $g.other>> both, climaxing <<themself $g.gym>>.
<<else>>
<<rep $g.gym>> pulls <<rep $g.other>> up onto <<their $g.other>> toes and slide <<themself $g.gym>> inside <<them $g.other>>, <<therace $g.other>> gasping when <<they $g.other>> feels <<reps $g.gym>> hot dick enter <<their $g.other>>
<<if $g.other.isHasVagina()>>cunt<<else>>anus<</if>>.
Once <<they $g.gym>>'s hilted, <<rep $g.gym>> bring <<rep $g.other>> <<uhands $g.other>> up on either side of <<their $g.other>> head to grasp
<<their $g.gym>> shoulders behind <<them $g.other>>, and then scoops <<reps $g.other>> <<ulegs $g.other>> up and hoist <<them $g.other>> to rest against <<their $g.gym>> <<ubreasts $g.gym>>,
held in midair and impaled on <<their $g.gym>> <<udick $g.gym>>.
<<Rep $g.gym>> can't pound <<rep $g.other>> all that hard in this challenging position, but the effort of holding <<themself $g.other>> this way forces <<rep $g.other>> to tighten <<their $g.other>> muscles down hard, producing an excellent sensation.
<<if $g.other.isHasVagina()>>
After a while, <<rep $g.gym>> lift <<rep $g.other>> up as high as <<they $g.gym>> can, freeing <<their $g.gym>> member, and then lower <<therace $g.other>> back down again, forcing <<themself $g.gym>> up <<their $g.other>> butt instead despite <<therace $g.other>>'s <<uadjgood $g.other>> begging.
<</if>>
It doesn't take long before you notice <<rep $g.gym>> filling <<reps $g.other>> ass with cum.
<</if>>
Having decided that you've seen enough, you quietly exit the scene, not wanting to alert any of the slavers.
In the coming days you've noticed the two slavers seemingly getting along better with each other.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'happy_dance', /* key */
"Happy Dance", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_happy_dance',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_courtesan, setup.trait.bg_entertainer, setup.trait.skill_entertain], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you pass by your bedchamber, you are struct with a
<<if $g.slave.isFemale()>>feminine<<else>>deep<</if>>
<<if $g.slave.isHasTrait('skill_entertain')>>and beautiful <</if>>humming.
It's <<yourrep $g.slave>>,
<<if $g.slave.isHasTrait('bg_entertainer')>>
a former dancer,
<<elseif $g.slave.isHasTrait('bg_courtesan')>>
a former high-class stripper,
<<elseif $g.slave.isHasTrait('skill_entertain')>>
skilled in <<rep setup.trait.skill_entertain>>,
<</if>>
dancing at the foot of the <<uslavebed $g.slave>>, dancing like no one's watching.
<<They $g.slave>>'s letting it out by humming a beat and dancing seductively, all by <<themself $g.slave>>.
</p>
<p>
You recognize the tune: it's
<<if $g.slave.isHasTrait('race_human')>>
a famous <<rep $g.slave.getSubrace()>> folksong.
<<elseif $g.slave.isHasTrait('race_wolfkin')>>
a famous werewolf folksong.
<<elseif $g.slave.isHasTrait('race_elf')>>
a famous elven ballad.
<<elseif $g.slave.isHasTrait('race_catkin')>>
one of the many famous neko tunes.
<<elseif $g.slave.isHasTrait('race_greenskin')>>
an orcish song you've heard before.
<<elseif $g.slave.isHasTrait('race_lizardkin')>>
an ancient lizardkin chant.
<<elseif $g.slave.isHasTrait('race_demon')>>
cruel-sounding demonic tune.
<</if>>
Shaking <<their $g.slave>> hips
<<if $g.slave.isHasTail()>>and tail<</if>>
in time with <<their $g.slave>> humming,
<<they $g.slave>> runs <<their $g.slave>> <<uhands $g.slave>>
sensually over them, along <<their $g.slave>> flanks, and over
<<their $g.slave>> chest,
<<if $g.slave.isHasTrait('breast_titanic')>>letting the vast mass of <<their $g.slave>> tits rest atop them
<<elseif $g.slave.isHasTrait('breast_huge')>>groping <<their $g.slave>> own heavy breasts
<<elseif $g.slave.isHasBreasts()>>
<<their $g.slave>> fingertips circling <<their $g.slave>> nipples
<<else>>
<<their $g.slave>> fingertips playing with the nipples of their <<ubreasts $g.slave>>
<</if>> for an alluring moment.
As <<their $g.slave>> hips maintain their sexual rhythm, <<their $g.slave>>
<<uhands $g.slave>> continue, tracing up <<their $g.slave>> throat,
over <<their $g.slave>> moist lips, and over <<their $g.slave>> head.
As <<they $g.slave>> stretches up, <<their $g.slave>> <<ubody $g.slave>> begins to sway with the barely perceptible beat,
<<their $g.slave>>
<<if $g.slave.isHasTrait('breast_huge')>><<ubreasts $g.slave>> swaying along.<<elseif $g.slave.isHasBreasts()>>
<<ubreasts $g.slave>> bouncing along.<<else>>
<<ubreasts $g.slave>> adding to <<their $g.slave>> charm.<</if>>
</p>
<<choose>>
<<opt "Enjoy the show">>
<p>
You seat yourself on the <<uslaverbed $g.slave>>, enjoying the spectacle.
<<They $g.slave>> feels your <<ueyes $unit.player>> on <<them $g.slave>>, a sensation <<they $g.slave>> knows well, and turns with a little smile on <<their $g.slave>> <<uface $g.slave>>, putting an extra swing in <<their $g.slave>> hips. <<They $g.slave>>'s still dancing alone, but now <<they $g.slave>>'s giving you a private show.
<<if $g.you.isHasTrait('bg_courtesan')>>
You used to be a stripper yourself, so you
<<elseif $g.you.isHasTrait('bg_entertainer')>>
You used to be a singer yourself, so you
<<elseif $g.you.isHasTrait('skill_entertain')>>
You are not half-bad with singing either, so you unleash your beautiful voice to
<<else>>
You
<</if>>
hum alongside <<them $g.slave>>, letting <<them $g.slave>> pay more attention to the dancing.
</p>
<p>
<<They $g.slave>> advances on you slowly, sensually, relishing the beat and doing <<their $g.slave>> best to show off <<their $g.slave>> body.
<<if $g.slave.isHasDick()>>
<<Their $g.slave>> erection waves back and forth with <<their $g.slave>> rhythm.
<<else>>
<<Their $g.slave>>
womanhood is <<their $g.slave>> centerpiece as <<they $g.slave>> moves.
<</if>>
<<They $g.slave>> gives you an excellent nude lapdance,
<<if $g.slave.isHasTrait('bg_courtesan')>>
expressing the art at the level only an experienced stripper could manage.
<<elseif $g.slave.isHasTrait('bg_entertainer')>>
moving with practiced experience.
<<elseif $g.slave.isHasTrait('skill_entertain')>>
moving with ease.
<</if>>
The interaction is all about you, your eyes on <<their $g.slave>> <<ubody $g.slave>>,
your desire for <<their $g.slave>> touch, and finally your
<<if $unit.player.isHasDick()>>cum flowing into <<their $g.slave>> <<umouth $g.slave>> as <<they $g.slave>> sucks your <<udick $unit.player>>
<<else>>
pussyjuice coating <<their $g.slave>> lips as <<they $g.slave>> eats you out<</if>>.
</p>
<<opt "Dance along with <<them $g.slave>>">>
<p>
<<They $g.slave>> doesn't <<if $g.slave.isCanSee()>>see<<else>>notice<</if>> you advance on
<<them $g.slave>>; <<they $g.slave>>'s facing away from you, and in any case, <<they $g.slave>>'s lost in <<their $g.slave>> own little world.
Only after you're next to <<them $g.slave>> does <<they $g.slave>> senses a presence at <<their $g.slave>> side.
You timed it perfectly,
<<if $g.you.isHasTrait('bg_courtesan')>>
using your experience as a stripper to hum
<<elseif $g.you.isHasTrait('bg_entertainer')>>
using your experience as a singer to hum
<<elseif $g.you.isHasTrait('skill_entertain')>>
using your own expansive range of voice to hum
<<else>>
humming
<</if>>
in rhythm to the same tune, and began to dance beside <<them $g.slave>>.
<<if $unit.player.isHasBreasts()>>You've got a <<woman $g.slave>>'s body, and you match <<their $g.slave>> moves<<if !$unit.player.isSubmissive()>>, though an observer might see greater power and dominance in the way you dance<</if>>.
<<elseif $g.slave.isFemale()>>
You make your moves the masculine companion to <<their $g.slave>>s, moving like a paragon of frank male sexuality.
<<else>>
You make your moves a masculine addition to <<their $g.slave>>s, two males dancing in unison<<if !$unit.player.isSubmissive()>>, although an observer might see greater power and dominance in the way you dance<</if>>.
<</if>>
<<if $g.you.isHasTrait('bg_courtesan')>>
You've got considerable dancing skills from your days as a stripper, and you're not losing to the slave.
<<elseif $g.you.isHasTrait('bg_entertainer')>>
You've got considerable dancing skills from your days as a dancer, and you're not losing to the slave.
<<elseif $g.you.isHasTrait('skill_entertain')>>
You've got considerable <<rep setup.trait.skill_entertain>> skills, and your dancing is not inferior to the slave.
<<else>>
<</if>>
</p>
<p>
There's a momentary flaw in <<their $g.slave>> rhythm, a catch in <<their
$g.slave>> breath as <<they $g.slave>> realizes what you're doing, but <<they
$g.slave>> gets right back into it, displaying <<their $g.slave>> pleasure
with nothing more than a ghost of a smile and a <<if
$g.slave.isCanSee()>>widening of <<their $g.slave>> eyes as <<they $g.slave>>
looks you up and down<<else>>slight perk of<<their $g.slave>> ears as <<they
$g.slave>> tracks your motion<</if>>. <<They $g.slave>> doesn't shove
<<themself $g.slave>> against you; that would be coarse. Instead <<they
$g.slave>> dances alluringly, just out of your grasp.
Taking the dominant role, you encircle <<their $g.slave>> in your <<uarms $unit.player>> and draw <<them $g.slave>> in close, <<their $g.slave>> heat perceptible against your <<uskin $unit.player>> before the very first graze of <<their $g.slave>> <<ubody $g.slave>> against yours.
<<They $g.slave>> continues to dance gorgeously as <<they $g.slave>> helps you out of your clothes.
</p>
<p>
When you're nude, <<they $g.slave>> turns <<their $g.slave>> back to you and starts to grind, letting you feel <<their $g.slave>> <<ubody $g.slave>> all up and down your front. Feeling your <<if !$unit.player.isHasDick()>>building heat, <<they $g.slave>> begins to incorporate gentle caresses of your <<woman $g.slave>>hood<<else>>erection brushing against <<them $g.slave>>, <<they $g.slave>> begins to corral it between <<their $g.slave>> buttocks and thighs<</if>>, and you return the favor by teasing <<their $g.slave>> nipples<<if $g.slave.isHasVagina()>>, pussylips, clit,<</if>> and even <<their $g.slave>> ass. You orgasm one after the other, and <<they $g.slave>> throws <<their $g.slave>> arms around you.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'huge_dicked_slave', /* key */
"Huge Dicked Slave", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_huge_dicked_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.IsCanPhysicallyCum(),
setup.qres.Trait(setup.trait.dick_huge),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Entering your bedchamber, you are greeted with <<yourrep $g.slave>> sitting hunched with <<their $g.slave>> back to you. The slave appears to be too busy giving <<themself $g.slave>> a blowjob, and has not noticed your presence yet. <<They $g.slave>> has to bend over very hard to get the tip of <<their $g.slave>> <<udick $g.slave>> into <<their $g.slave>> <<umouth $g.slave>>, but <<they $g.slave>>'s obviously enjoying it all the same. It's not against the rules for <<their $g.slave>> to masturbate; <<they $g.slave>>'s just found an impressive way of doing it. <<if $g.slave.isHasTrait('balls_huge')>>As <<they $g.slave>> works <<themself $g.slave>>, <<they $g.slave>> plays with <<their $g.slave>> massive balls, rolling them around and squeezing them gently.<<elseif $g.slave.isHasTrait('balls_small')>>As <<they $g.slave>> works <<themself $g.slave>>, <<they $g.slave>> plays with <<their $g.slave>> <<uballs $g.slave>>, massaging them with one hand.<</if>>
</p>
<<choose>>
<<opt "Take <<their $g.slave>> ass">>
<p>
<<They $g.slave>>'s so occupied that <<they $g.slave>> doesn't hear you until you seize <<them $g.slave>> under the armpits and drag <<their $g.slave>> to <<their $g.slave>> <<ufeet $g.slave>>.
<<Their $g.slave>> massive dickhead pops free of <<their $g.slave>> mouth and <<they $g.slave>> squeaks in surprise as you push <<them $g.slave>> against the <<uwall $g.slave>> and stuff your <<udickorstrap $unit.player>> up <<their $g.slave>> ass.
<<They $g.slave>> slave|was already very close to orgasm, and the stimulation of <<their $g.slave>> dick rubbing against the <<uwall $g.slave>>, not to mention the feeling of being buttfucked, is enough that <<they $g.slave>> climaxes quickly.
<<if $g.slave.isHasTrait('balls_huge')>><<Their $g.slave>> huge load coats the <<uwall $g.slave>> with cum. <</if>>
You pull out and let <<them $g.slave>> finish by <<if !$unit.player.isHasDick()>>giving you oral<<else>>sucking your dick<</if>>, since <<they $g.slave>> started by sucking <<themself $g.slave>>. <<They $g.slave>> has become more submissive to you.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif $unit.player.isHasDick()>>
<<opt "The only dick <<they $g.slave>> should suck is <<their $g.slave>> <<Master $unit.player>>'s">>
<p>
<<They $g.slave>>'s so occupied that <<they $g.slave>> doesn't hear you until you seize and pull <<their $g.slave>> head back. <<Their $g.slave>> massive dickhead pops free of <<their $g.slave>> mouth and <<they $g.slave>> squeaks in surprise. The noise is cut off by a gag as you ram yourself down <<their $g.slave>> throat. <<They $g.slave>> plays with your <<if $unit.player.isHasVagina()>>cunt<<else>>balls<</if>> as you face fuck <<them $g.slave>> and jacks off with <<their $g.slave>> other <<uhand $g.slave>>. <<They $g.slave>> slave|was so close when you intruded that <<they $g.slave>> cums long before you do. There's a lot of cum scattered around when you're through. <<if $g.slave.isHasTrait('balls_huge')>><<Their $g.slave>> <<uballs $g.slave>> made an especially major contribution. <</if>>
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "See if <<they $g.slave>> can do that while you take <<their $g.slave>> ass">>
<p>
You interrupt <<name $g.slave>> and make <<them $g.slave>> lie on the <<uslaverbed $g.slave>>.
After some preparatory stretching, during which <<their $g.slave>> frustrated erection flops forlornly around, you manage to get both <<their $g.slave>> ankles behind <<their $g.slave>> head. In this position <<they $g.slave>> manages to resume sucking on the head of <<their $g.slave>> penis. So contorted, <<their $g.slave>> anus is not well angled for comfortable sodomy, so <<they $g.slave>> slave|is soon moaning and grunting into <<their $g.slave>> own cock as you fuck <<them $g.slave>>. <<They $g.slave>> finishes
<<if $g.slave.isHasTrait('balls_huge')>>
<<their $g.slave>> enormous ejaculation <</if>>
into <<their $g.slave>> own <<umouth $g.slave>> and then <<if !$unit.player.isHasDick()>>finds <<themself $g.slave>> giving you oral directly, since you pulled your strap-on off<<else>>receives your load into <<their $g.slave>> now-brimming throat<</if>>.
</p>
<</choose>><<run new setup.Event(
'huge_tits', /* key */
"Huge Tits", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_huge_tits',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.breast_huge, setup.trait.breast_titanic], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> has massive breasts; they're so large it's necessary to check from time to time for unsightly veins, stretch marks, and the like. You note <<their $g.slave>> big nipples with appreciation. Since <<their $g.slave>> breasts are so enormous, they're quite saggy. When <<they $g.slave>> stands, <<their $g.slave>> nipples face out and down. As you inspect <<them $g.slave>> with your <<uhands $unit.player>>, <<they $g.slave>> <<if !$g.slave.isCanTalk()>>breathes a little harder and looks like <<they $g.slave>> would speak, were <<they $g.slave>> could.<<else>>murmurs, "That feels really nice, <<Master $unit.player>>."<</if>>
</p>
<<choose>>
<<opt "Give <<them $g.slave>> a nice massage">>
<p>
You sit on the <<uslaverbed $g.slave>> and pat your thighs. <<They $g.slave>> smiles and comes over, lowering <<themself $g.slave>> <<if !$unit.player.isHasDick()>>into your lap<<else>>onto your member<</if>> without hesitation. You help <<them $g.slave>> get comfortable and instead of <<if !$unit.player.isHasDick()>>grinding<<else>>thrusting<</if>> or telling <<their $g.slave>> to ride, you just sit there with <<them $g.slave>> in your lap, gently massaging <<their $g.slave>> massive tits. They get sore from swinging around as <<they $g.slave>> moves, works, and fucks, and soon <<they $g.slave>>'s groaning with pleasure at the attention. You finally manage to bring <<them $g.slave>> to orgasm with almost nothing but delicate stimulation of <<their $g.slave>> nipples. <<They $g.slave>> has become more trusting of you.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Use <<them $g.slave>> so they swing around">>
<p>
You tell <<them $g.slave>> to kneel on the <<utile $g.slave>>. <<They $g.slave>> knows this means doggy style, so <<they $g.slave>> compliantly arches <<their $g.slave>> back and cocks <<their $g.slave>> hips to offer <<themself $g.slave>> to you. You<<if !$unit.player.isHasDick()>> don a strap-on and<</if>> enter <<if (!$g.slave.isHasVagina())>><<their $g.slave>> ass<<else>><<their $g.slave>> pussy<</if>> without preamble and seize <<their $g.slave>> hips. <<They $g.slave>> braces <<themself $g.slave>>, knowing what's coming, but soon <<they $g.slave>> discovers a new disadvantage to <<their $g.slave>> pendulous breasts: as you pound <<them $g.slave>> hard, <<their $g.slave>> nipples frequently brush against the <<utile $g.slave>>, causing <<them $g.slave>> to wince and buck. <<if $g.slave.isHasDick()>><<Their $g.slave>> cock doesn't help, either, flopping around half-erect as <<they $g.slave>> vacillates between pain and arousal.<</if>>
<<if $g.slave.isHasVagina()>>When you switch to <<their $g.slave>> ass, the shallower strokes give <<their $g.slave>> nipples a bit of respite. <</if>> You finish with a particularly hard thrust <<if !$unit.player.isHasDick()>>and shake with climax<<else>>to spill your seed deep inside <<their $g.slave>> butt<</if>>, ramming forward hard enough to spill <<them $g.slave>> down onto <<their $g.slave>> bosom. As you rise, <<their $g.slave>> discomfited form is a pretty sight, with <<their $g.slave>> breasts squashed against the <<utile $g.slave>> and <<their $g.slave>> well fucked butt lewdly relaxed.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Show <<them $g.slave>> off in the fort square">>
<p>
You bring <<their $g.slave>> out onto the fort square, still nude, <<their $g.slave>> huge bare udders attracting open stares as <<their $g.slave>> every movement sets them in motion.
<<They $g.slave>> blushes a little, but tips <<their $g.slave>> chin up and follows you obediently.
When you reach a good spot, you grab <<their $g.slave>> ass and <<if $g.slave.isHasTrait('height_giant')>>pull <<their $g.slave>> tall body in<<elseif !$g.slave.isHasTrait('height_dwarf')>>pull <<their $g.slave>> up on tiptoe<<else>>push <<their $g.slave>> petite form up onto a railing<</if>> for standing sex. <<They $g.slave>> cocks <<their $g.slave>> hips and takes your <<if !$unit.player.isHasDick()>>strap-on<<else>>cock<</if>> compliantly, and after a few thrusts you reach down, seize <<them $g.slave>> behind each knee, and hoist <<their $g.slave>> <<ulegs $g.slave>> up so <<they $g.slave>>'s pinned against your <<ubreasts $unit.player>>, helpless to do anything but let you hold <<them $g.slave>> in midair and fuck <<them $g.slave>>. <<if $g.slave.isHasTrait('vagina_loose')>><<Their $g.slave>> pussy can take a hard pounding, so you give it to <<them $g.slave>>.<<elseif $g.slave.isHasVagina()>><<Their $g.slave>> poor tight pussy can barely take the pounding you're administering.<<elseif $g.slave.isHasTrait('anus_loose')>><<Their $g.slave>> loose butthole can take a hard pounding, so you give it to <<them $g.slave>>.<<else>><<Their $g.slave>> poor tight butthole can barely take the pounding you're administering.<</if>> <<They $g.slave>> loses all composure, gasping and panting as the massive weight of <<their $g.slave>> chest bounces up and down, making an audible clap with each stroke as <<their $g.slave>> huge tits slap painfully together. Despite this, or perhaps partly because of it, <<they $g.slave>> begins to orgasm,
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
the discomfort of being half-hard under <<their $g.slave>> chastity cage making <<them $g.slave>> squirm as cum runs out of the hole at its tip.
<<elseif $g.slave.isHasDick()>>
<<if ($g.slave.isHasTrait('dick_huge'))>>
<<their $g.slave>> huge cock releasing a jet of cum with each thrust into <<them $g.slave>>.
<<elseif ($g.slave.isHasTrait('dick_small'))>>
<<their $g.slave>> <<udick $g.slave>> releasing a spurt of cum with each thrust into <<them $g.slave>>.
<<else>>
<<their $g.slave>> tiny dick spurting cum with each thrust into <<them $g.slave>>.<</if>>
<<elseif ($g.slave.isHasTrait('muscle_strong'))>>
<<their $g.slave>> abs convulsing deliciously as <<they $g.slave>> climaxes.
<<else>>
<<their $g.slave>> pussy tightening.
<</if>>
The crowd of slavers and visitors alike that surrounds you during this noisy spectactle is quite impressed by the debauched display.
</p>
<<run setup.qc.Favor('humanvale', 10).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'if_you_like_it', /* key */
"If You Like It", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_if_you_like_it',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Owner(setup.qres.And([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.NoTraits([setup.trait.per_submissive], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _bc = $g.slave.getBedchamber()>>
<<if _bc>>
<<set _o = _bc.getSlaver()>>
<<else>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
While patrolling outside your fort and passing through the bedchamber wing,
you hear the distinctive sounds of a sexual encounter in which exactly one of the participants is enjoying <<themself $g.slave>>.
This is by no means uncommon, but this particular nonconsensual assignation sounds interesting, so you stick your head into the windows.
You're treated to the sight of <<rep _o>>'s back and butt as <<they _o>> kneels on the <<uslaverbed $g.slave>>.
It isn't immediately clear what's going on, but
<<if _o.isHasDick()>><<they _o>>'s doing something with
<<their _o>> <<udick _o>><<else>><<they _o>>'s doing something with <<their $g.slave>> <<uhands _o>><</if>>,
and there are a pair of <<ufeet $g.slave>> visible on either side of <<them _o>>. <<They _o>>'s clearly got someone shoved down into the <<uslaverbed $g.slave>> in front of <<them _o>>, doggy style. That's the source of the whining.
</p>
<p>
Moving to another window to get a better view, you identify the bottom as <<name _o>>'s own personal slave, <<name $g.slave>>. <<name _o>> has
<<if _o.isHasDick()>>
<<if _o.isHasTrait('dick_huge')>>
<<their _o>> <<udick _o>> up <<name $g.slave>>'s
<<if $g.slave.isHasTrait('anus_gape')>>
loose anus, but <<name $g.slave>>'s butthole is so accommodating that it probably isn't anal pain that's troubling <<them $g.slave>>.
<<else>>
asshole, which must be so stretched to accommodate it that <<their $g.slave>> anguish is probably due in part to anal pain.
<</if>>
<<elseif _o.isHasTrait('dick_large')>>
<<their _o>> dick up <<name $g.slave>>'s
<<if $g.slave.isHasTrait('anus_loose')>>
experienced anus, but <<name $g.slave>>'s butthole sufficiently used to buttsex that it probably isn't anal pain that's troubling <<them $g.slave>>.
<<else>>
tight little asshole, which must be so stretched to accommodate it that <<their $g.slave>> anguish is probably due in part to anal pain.
<</if>>
<<else>>
<<their _o>> <<udick _o>> up <<name $g.slave>>'s anus. The cock is small, and it probably isn't anal pain that's troubling <<name $g.slave>>.
<</if>>
<<else>>
<<if $g.slave.isHasTrait('anus_gape')>>
three fingers up <<name $g.slave>>'s loose butthole, which is so accommodating that it probably isn't anal pain that's troubling <<them $g.slave>>.
<<elseif $g.slave.isHasTrait('anus_loose')>>
two fingers up <<name $g.slave>>'s butthole, which is experienced enough that it probably isn't anal pain that's troubling <<them _o>>.
<<else>>
two fingers up <<name $g.slave>>'s tight ass, which must be so stretched to accommodate them that <<their $g.slave>> anguish is probably due in part to anal pain.
<</if>>
<</if>>
<<name _o>> isn't fucking <<name $g.slave>> at all: <<they _o>>'s just
<<if _o.isHasDick()>>holding
<<their _o>> penis stationary<<else>>holding <<their _o>> fingers<</if>> up <<name $g.slave>>'s rear hole.
<<Their $g.slave>> buttocks has been severely spanked, so some of <<their $g.slave>> unhappiness probably comes from being forced to eat
sheets and let <<name _o>> play with <<their $g.slave>> ass. But then you notice that <<name _o>> is
<<if _o.isHasDick()>>
reaching around<<else>>
using <<their _o>> other <<uhand _o>> to reach around<</if>>
<<name $g.slave>>, and is
<<if $g.slave.isHasDick()>>jerking <<name $g.slave>> off<<else>>manually stimulating <<name $g.slave>><</if>>
with every appearance of effort.
You're not sure what's going on there.
</p>
<<choose>>
<<opt "Continue watching">>
<p>
You settle down to watch what happens.
Oblivious to your presence, <<name _o>> continues on.
<<They _o>> smiles <<uadv _o>>, before
hauling <<name $g.slave>>'s torso partway up
so <<they _o>> can speak directly into <<their $g.slave>> ear, and says quietly,
"You're starting to enjoy this, aren't you, bitch?"
<<name $g.slave>>, also unaware you're there, shakes <<their $g.slave>> head unhappily, tears starting to leak out the corners of <<their $g.slave>> eyes.
</p>
<p>
"N-no," <<they $g.slave>> gasps. "I'm not!
Please t-take <<if _o.isHasDick()>>it<<else>>them<</if>> out!"
<<name _o>> makes no verbal reply, but continues <<their _o>> manual stimulation, and sticks <<their _o>> tongue into <<name $g.slave>>'s ear.
The poor <<woman $g.slave>> lets out a startled yelp that trails off into a moan as <<name _o>>'s ministrations really begin to have an effect on <<them _o>>.
</p>
<p>
<<name _o>> laughs <<uadv _o>> at the desperately uncomfortable slave, and says,
"Tell you what, slut. I'll leave you alone if this doesn't get you off."
Already realizing <<their $g.slave>> predicament, <<name $g.slave>> begins to protest, but <<name _o>> cuts <<them $g.slave>> off.
"Shut your fucking cockholster, bitch, I'm talking. I'll leave you alone if this doesn't get you off, but if you come, you've obviously been lying to me, and you obviously want your owner to buttfuck you all night long."
<<name $g.slave>> tries very hard, taking a huge breath of air and holding it in, biting <<their $g.slave>> lip, shutting <<their $g.slave>> eyes tight, and more, but it's all for naught. Before long, <<they $g.slave>> stiffens
<<if $g.slave.isHasDick()>>and makes a mess on the <<uslaverbed $g.slave>><<else>>with orgasm<</if>>,
moaning as <<their $g.slave>> anal sphincter tightens against the invading
<<if _o.isHasDick()>>cock<<else>>fingers<</if>>.
Once the climax leaves <<them $g.slave>>, <<they $g.slave>> begins to sob, knowing what this means. <<name _o>> takes <<their _o>> <<uhand _o>> away from the crying <<man $g.slave>>'s crotch and begins to
massage <<their $g.slave>> back<<if !_o.isHasTrait('per_cruel')>> with surprising tenderness<</if>>.
"Shh, sweetie, it's all right. I promise you'll enjoy this, if you let yourself."
You leave quietly, having watched enough of the show.
</p>
<<opt "That's none of your business">>
<p>
<<Yourrep _o>> is probably just having their own <<uadjgood _o>> way of fun with the personal slave you've assigned directly to <<them _o>>. What a <<man _o>> does to <<their _o>> own slave is <<their _o>> own business, and you continue your patrol as if you saw nothing.
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'illegal_masturbation', /* key */
"Illegal Masturbation", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_illegal_masturbation',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_basic, setup.trait.training_obedience_advanced, setup.trait.training_none], true),
setup.qres.Not(setup.qres.IsCanOrgasm()),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you walk past the windows of your bedchamber today, you see <<yourrep $g.slave>> inside doing something that you've explicitly ruled <<them $g.slave>> from doing: masturbating.
<<if $g.slave.isInChastity()>>
In <<their $g.slave>> <<ucgenital $g.slave>>, all <<they $g.slave>> can manage is furious nipple-rubbing and some furtive fingering of <<their $g.slave>> asshole.
<<elseif !$g.slave.isHasVagina()>>
<<They $g.slave>>'s furiously jacking off.
<<else>>
<<They $g.slave>>'s furiously polishing <<their $g.slave>> pearl.
<</if>>
<<They $g.slave>>'s chosen to do it in a dark corner of the bedchamber and looks like <<they $g.slave>>'s hurrying; <<they $g.slave>> clearly knows this is forbidden.
</p>
<p>
<<Rep $g.slave>> does not hear your approach until you're already in front of the bedchamber's door. Upon entering, <<they $g.slave>> slave|is startled,
<<if $g.slave.isHasTail()>><<their $g.slave>> tail completely stiff,<</if>>
and then proceed to try and look normal.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> nervously gestures that <<they $g.slave>> slave|wasn't doing anything.
<<else>>"I wasn't doing anything, <<Master $unit.player>>!" <<they $g.slave>> lies.<</if>>
</p>
<<choose>>
<<opt "Let <<them $g.slave>> earn relief">>
<p>
<<They $g.slave>>'s extremely relieved that you're not going to punish <<them $g.slave>> for the rulebreaking when you tell <<them $g.slave>> that <<they $g.slave>> can touch <<themself $g.slave>> if <<they $g.slave>> gets on <<their $g.slave>> knees and sucks you off. <<They $g.slave>> does a decent job, playing with <<themself $g.slave>> all the while. <<They $g.slave>>'s learned that <<they $g.slave>> can get away with infractions if <<they $g.slave>>'s willing to suck dick afterward.
</p>
<<opt "Punish <<them $g.slave>>, but then let <<them $g.slave>> get off">>
<<if $gQuest.getSeed() % 5 == 0>>
<p>
You pull <<them $g.slave>> down over your knee and grope <<them $g.slave>> thoroughly, bringing <<their $g.slave>> to the painful edge of orgasm. Just when <<they $g.slave>>'s about to tip over the edge, the stimulation stops and you haul <<them $g.slave>> up into your lap and start playing with <<their $g.slave>> nipples. <<They $g.slave>> writhes and sobs and the orgasm denial, since the nipple play is just barely enough to keep <<them $g.slave>> at a high level of arousal without giving relief. You switch back and forth until <<they $g.slave>> finally goes over into muscle-spasming climax during nipple stimulation alone.
</p>
<<elseif $gQuest.getSeed() % 5 == 1>>
<p>
You pull <<them $g.slave>> down over your knee,
<<if $g.slave.isHasTail()>>raise <<their $g.slave>> <<utail $g.slave>> up to <<their $g.slave>> head<</if>>
and spank <<their $g.slave>> buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, <<name $g.slave>> has cried <<themself $g.slave>> out and is limp in your hands. You pull <<them $g.slave>> up to face you and give <<them $g.slave>> your instructions: <<they $g.slave>> can masturbate now while in the middle of <<if $unit.player.isHasDick()>>blowing you<<else>>performing cunnilingus on you<</if>>.
<<They $g.slave>> nods through <<their $g.slave>> tears and nod furiously.
In an hour or so, though, <<they $g.slave>> finds you and asks to <<if $unit.player.isHasVagina()>>give you oral<<else>>suck your cock<</if>>. When you pretend indifference, <<they $g.slave>> abjectly begs. Soon, <<they $g.slave>>'s down on <<their $g.slave>> knees, crying a little with shame as <<they $g.slave>> masturbates furiously while <<if $unit.player.isHasDick()>>choking on your dick<<else>>eating you out<</if>>.
</p>
<<elseif $gQuest.getSeed() % 5 == 2>>
<p>
You pull <<them $g.slave>> down over your knee,
<<if $g.slave.isHasTail()>>raise <<their $g.slave>> <<utail $g.slave>> up to <<their $g.slave>> head<</if>>
and spank <<their $g.slave>> buttocks until they're warm to the touch. It's not a sexual punishment, it's too painful for that; by the end, <<name $g.slave>> has cried <<themself $g.slave>> out and is limp in your hands. You pull <<them $g.slave>> up to face you and give <<them $g.slave>> your instructions: if <<they $g.slave>> want to masturbate, <<they $g.slave>> can come to you and beg you to assrape <<them $g.slave>>, and masturbate while <<they $g.slave>> takes <<if !$unit.player.isHasDick()>>anal penetration<<else>>cock<</if>>.
<<They $g.slave>> nods through <<their $g.slave>> tears and flees.
In an hour or so, though, <<they $g.slave>> finds you and haltingly asks you to buttfuck <<them $g.slave>>. When you pretend indifference, <<they $g.slave>> offers you <<their $g.slave>> anus and abjectly begs you to stick <<if !$unit.player.isHasDick()>>a strap-on<<else>>your cock<</if>> up <<their $g.slave>> butt. Soon, <<they $g.slave>>'s down on all fours, crying a little with mixed shame and anal pain as <<they $g.slave>> masturbates furiously.
</p>
<<elseif $gQuest.getSeed() % 5 == 3>>
<p>
You tell <<them $g.slave>> that <<they $g.slave>> can get <<themself $g.slave>> off while <<they $g.slave>>'s being spanked, and that's it: you don't tell <<them $g.slave>> to offer <<their $g.slave>> bottom, much less start spanking <<them $g.slave>>. <<They $g.slave>> doesn't understand for a long moment, but before long <<they $g.slave>>'s begging abjectly for a spanking, and has <<their $g.slave>> buttocks presented<<if $g.slave.isHasTail()>>and tail raised<</if>>, quivering with simultaneous arousal and fear of pain. The pain comes soon enough, with a delicious crack of palm on <<uskin $g.slave>> and a shriek of agony. <<They $g.slave>> masturbates furiously, but you're an accomplished spanker, and you repeatedly cause <<them $g.slave>> just enough pain to prevent climax. Eventually <<they $g.slave>> gets off in part because of, rather than in spite of, the lengthy beating.
</p>
<<else>>
<p>
You order <<them $g.slave>> to kneel with <<their $g.slave>> arms over <<their $g.slave>> head and <<their $g.slave>> legs splayed, and tell <<their $g.slave>> that if <<they $g.slave>> moves or resists <<their $g.slave>> punishment will begin again from the start.
<<if $g.slave.isInChastity()>>
<<They $g.slave>> slave|was touching <<their $g.slave>> nipples and ass, so you flick and torture <<their $g.slave>> nipples and give <<their $g.slave>> a severe spanking.
<<elseif !$g.slave.isHasVagina()>>
<<They $g.slave>> slave|was jacking it, so you force <<their $g.slave>> to get <<themself $g.slave>> hard for punishment and then deliver a series of agonizing slaps and flicks to <<their $g.slave>> offending member.
<<else>>
You deliver a series of agonizing slaps to <<their $g.slave>> mons.
<</if>>
You have to start over twice. By the end, <<they $g.slave>>'s managed to orgasm to all the stimulation, but <<they $g.slave>>'s crying and desperately promising never to touch <<themself $g.slave>> again without your permission.
</p>
<</if>>
<</choose>><<run new setup.UnitGroup(
"innocent_tourist1",
"Tourist",
'subrace_humankingdom', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_merchant),
setup.qc.TraitReplace('unit', setup.trait.per_chaste),
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_tight),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_tight),
setup.qc.TraitReplaceExisting('unit', setup.trait.breast_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.dick_huge),
],
)>>
<<run new setup.Event(
'innocent_tourist', /* key */
"Innocent Tourist", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_innocent_tourist',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.OnDuty('entertainmentslave'),
setup.qres.Home(),
],
'slave2': [
setup.qres.Job(setup.job.slave),
setup.qres.OnDuty('oralfuckholeslave'),
],
'pimp': [
setup.qres.Job(setup.job.slaver),
setup.qres.OnDuty('entertainmentpimp'),
],
'tourist': 'innocent_tourist1',
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Today, <<yourrep $g.pimp>> comes to your office with a news.
"Something unusual for you, <<name $unit.player>>," <<they $g.pimp>> says. "
<<Rep $g.slave>> is selling <<their $g.slave>> <<ubody $g.slave>> out in the <<rep setup.buildingtemplate.recreationwing>> when a tourist from the more reserved strata of <<lore region_city>> accosted <<them $g.slave>>.
<<Rep $g.slave>> thought <<they $g.tourist>> was a rich citizen of the city who wanted to fuck <<them $g.slave>>, but it turns out <<they $g.slave>> just wanted a tour guide. It was a reasonable mistake; <<they $g.slave>> seems wealthy enough. <<Rep $g.slave>> has been showing <<them $g.slave>> around your fort for the last half hour.
Now <<they $g.slave>>'s asked <<rep $g.slave>> if <<they $g.slave>> can meet you, which <<they $g.slave>> then relayed to <<their $g.pimp>> handler — me."
</p>
<p>
Looking out from your window, you could actually see
<<rep $g.slave>> standing with the tourist in question out on the main plaza.
<<They $g.tourist>>'s wearing
<<if $g.tourist.isFemale()>>
luxurious pants over <<their $g.tourist>> hips and a sweater that understates <<their $g.tourist>> generous bust.
<<else>>
luxurious jacket over <<their $g.tourist>> <<ubody $g.tourist>> and a pair of loose pants that understates <<their $g.tourist>> generous bulge.
<</if>>
<<They $g.tourist>>'s blushing as <<they $g.tourist>> asks <<rep $g.slave>> a discreet question about public sex in the fort, brought on by the sight of a couple of visitors spitroasting <<yourrep $g.slave2>>.
</p>
<<choose>>
<<opt "Decline politely">>
<p>
You have <<yourrep $g.pimp>> instruct <<rep $g.slave>> to pass on your regrets, and add a message for <<them $g.slave>> expressing confidence in <<them $g.slave>> to represent you and your company perfectly well without you or <<rep $g.pimp>>.
<<They $g.slave>>'s affirmed by your trust in <<them $g.slave>>.
"<<Master $unit.player>>," <<they $g.slave>> reports the next time you see <<them $g.slave>>, "that tourist was really nice. Also, I got <<them $g.slave>> to have sex with me, after all. <<They $g.tourist>> was all hesitant and shy about doing it in public, but <<they $g.slave>> got better after the first time I
<<if $g.tourist.isFemale()>>
ate <<their $g.slave>> out."
<<else>>
suck <<them $g.slave>> off."
<</if>>
<<They $g.slave>> looks pleased with <<themself $g.slave>>. "<<They $g.tourist>> paid quite well too, and here it is."
</p>
<<run setup.qc.Money(1500).apply($gQuest)>>
<<opt "Accept and have <<rep $g.slave>> service the tourist in your office">>
<p>
You have <<rep $g.slave>> bring the tourist up to meet you. <<They $g.slave>>'s full of questions about what it's like to be living in such a carnal place, and you finally tell <<them $g.tourist>> that you can give <<them $g.tourist>> a pretty good idea. Eagerly, <<they $g.tourist>> asks you how, and you point at <<yourrep $g.slave>>, telling the tourist <<they $g.tourist>> ought to bend the slave over the desk if <<they $g.tourist>> wants to know what life here really is like.
<<if $g.tourist.isFemale() && $g.slave.isFemale()>>
"I'm, um, not really a lesbian,"
<<elseif $g.tourist.isMale() && $g.slave.isMale()>>
"I'm, um, not really a gay,"
<<else>>
"I'm, um, not really into <<girl $g.slave>>s,"
<</if>>
the tourist responds hesitantly.
</p>
<p>
"Having sex with slaves
<<if $g.tourist.isFemale() && $g.slave.isFemale()>>
does not make you a lesbian,"
<<elseif $g.tourist.isMale() && $g.slave.isMale()>>
does not make you gay,"
<<else>>
is different,"
<</if>>
<<rep $g.slave>> purrs. "It's different here. Please,
fuck me. It'll be fun!"
The tourist turns to stare at <<them $g.slave>>, and <<they $g.tourist>> offers just the right kind of plaintive expression. "O-okay," the tourist says in a tiny voice, and <<rep $g.slave>> giggles, hugging <<them $g.tourist>> from behind. <<They $g.slave>>
<<if $g.tourist.isFemale()>>
cups one of the tourist's breasts, and snakes <<their $g.slave>> other <<uhand $g.slave>> down the front of <<their $g.slave>> pants.
<<else>>
traces the tourist's chest, and snakes <<their $g.slave>> other <<uhand $g.slave>> down the front of <<their $g.slave>> pants.
<</if>>
"Here!?" the tourist gasps, staring straight at you and blushing even harder. You tell <<them $g.tourist>> that that's how you do things in the company: enjoying a slave is nothing to be ashamed of. <<They $g.tourist>> looks doubtful, but <<they $g.tourist>> doesn't try to escape from <<reps $g.slave>> roving <<uhands $g.slave>>, either. Your presence continues to bother <<them $g.tourist>> until <<rep $g.slave>> distracts <<them $g.tourist>> by getting <<them $g.tourist>> to cuddle on the desk and make out, providing enough of a distraction that <<they $g.tourist>> gets over <<their $g.tourist>> inhibitions and orgasms rather immodestly.
</p>
<p>
You offer <<them $g.tourist>> some liquid courage as <<they $g.tourist>> recovers, but <<they $g.tourist>>'s rapidly getting over <<their $g.tourist>> hesitation. As the alcohol suffuses <<them $g.tourist>>, <<they $g.tourist>> starts stealing glances at <<rep $g.slave>>, who for <<their $g.slave>> part is being as seductive as <<urace $g.slave>>ly possible. Finally, the tourist mouths 'fuck it' silently, reaches over, and openly gropes the slave's ass. <<Rep $g.slave>>
<<if $g.slave.isFemale()>>
giggles and
<</if>>
shifts lewdly, ensuring that the tourist's <<uhand $g.tourist>> makes a thorough tour of everything the slave has. The tourist tentatively sinks a couple of fingers into <<rep $g.slave>>, and the slave shamelessly slides <<themself $g.slave>> onto the invading digits, begging to be fucked. You make a party of it, with the various slavers who come and go over the course of the evening treated to the sight of <<rep $g.slave>> getting fucked by the tourist. <<They $g.tourist>> drunkenly promises you to tell all <<their $g.tourist>> friends how awesome your fort is at one point, though <<they $g.tourist>> has to take <<their $g.tourist>> <<umouth $g.tourist>> off one of <<reps $g.slave>> nipples to do so.
</p>
<<run setup.qc.Favor('humankingdom', 75).apply($gQuest)>>
<<opt "Accept and encourage <<them $g.tourist>> to enjoy the slave with your compliments">>
<p>
You have <<rep $g.slave>> bring the tourist up to meet you, and exchange some minor pleasantries. You tell <<them $g.tourist>> that if <<they $g.tourist>> really wants to experience the life outside the gates of <<lore region_city>>, though, <<they $g.tourist>> really should enjoy <<rep $g.slave>>, pointing at the slave hovering behind <<them $g.tourist>>. <<They $g.tourist>> blushes furiously, but before <<they $g.tourist>> can stammer a refusal, the slave whispers something into <<their $g.tourist>> ear.
</p>
<p>
"Having sex with slaves
<<if $g.tourist.isFemale() && $g.slave.isFemale()>>
does not make you a lesbian,"
<<elseif $g.tourist.isMale() && $g.slave.isMale()>>
does not make you gay,"
<<else>>
is different,"
<</if>>
<<rep $g.slave>> purrs. "It's different here. Please,
give me a try."
The tourist turns to stare at <<them $g.slave>>, and <<they $g.tourist>> offers just the right kind of plaintive expression. "O-okay," the tourist says in a tiny voice, and <<rep $g.slave>>
<<if $g.slave.isFemale()>>
giggles,
<<else>>
grins,
<</if>>
hugging <<them $g.tourist>> from behind. <<They $g.slave>> takes the tourist's <<uhand $g.tourist>>, and they leave your office together.
"<<Master $unit.player>>," <<rep $g.slave>> reports the next time you see <<them $g.slave>>, "that tourist was really nice. Also, I got <<them $g.tourist>> to have sex with me, after all. <<They $g.tourist>> was going to take me back to <<their $g.tourist>> rented room first, but I got <<them $g.tourist>> to do me on the way. <<They $g.tourist>> was all hesitant <<if $g.tourist.isFemale()>>and blushy<</if>> about doing it in public, but <<they $g.tourist>> got better after the first time I
<<if $g.tourist.isFemale()>>
ate <<their $g.tourist>> out."
<<else>>
suck <<them $g.tourist>> off."
<</if>>
<<They $g.slave>> looks pleased with <<themself $g.slave>>. "<<They $g.tourist>> paid a little for my services, and I bet <<they $g.tourist>> also tells all <<their $g.tourist>> friends back at <<lore region_city>> how much fun it is here."
</p>
<<run setup.qc.Money(750).apply($gQuest)>>
<<run setup.qc.Favor('humankingdom', 40).apply($gQuest)>>
<<opt "Enslave <<them $g.tourist>> (WARNING: This will have dire consequences)">>
<p>
When your new slave comes to, <<their $g.tourist>> weight is hanging from <<their $g.tourist>> wrists, bound over <<their $g.tourist>> head. <<They $g.tourist>>'s nursing a tremendous hangover, and though <<they $g.tourist>> does not realize it, <<they $g.tourist>>'s drugged. You're present, though not visible, witnessing <<their $g.tourist>> first conscious moment of slavery from your desk. Realization is slow. <<They $g.tourist>>'s no innocent, so <<they $g.tourist>> recognizes the sensations of waking up the morning after a night of drinking interspersed with vigorous
<<if $g.tourist.isFemale()>>vaginal,<</if>> oral and anal intercourse, but <<they $g.tourist>> does not remember the specifics. After a few minutes, <<they $g.tourist>> understands that no one is coming, and speaks up hesitantly: "Is anyone there?" Getting no immediate answer, <<they $g.tourist>> slumps against <<their $g.tourist>> wrist restraints again, and begins to cry to <<themself $g.tourist>>. "W-why would a-anyone do this."
</p>
<<run setup.qc.Slave('tourist', 'was a simple tourist who chose the wrong fort to sightsee at').apply($gQuest)>>
<<run setup.qc.Ire('humankingdom', 20).apply($gQuest)>>
<<run setup.qc.Ire('humanvale', 10).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'like_me', /* key */
"Like Me", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_like_me',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_none, setup.trait.training_obedience_basic], true),
setup.qres.FriendshipWithYouAtMost(-200),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.Available(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
<<Yourrep $g.slave>> approaches you, looking frightened.
<<They $g.slave>> takes one hesitant step in and stops, wavering,
<<their $g.slave>> <<uhands $g.slave>> balled into fists and <<their $g.slave>> lower lip caught behind <<their $g.slave>> <<uteeth $g.slave>>.
<<Therace $g.slave>> slave|is getting used to <<their $g.slave>> place as chattel, but <<they $g.slave>> slave|is not sure of <<themself $g.slave>> yet.
After a few moments, it becomes obvious that <<they $g.slave>>'s lost whatever mental momentum propelled <<their $g.slave>> to approach you, and can't muster the courage to back out, either. You rescue <<them $g.slave>> by <<uadv $unit.player>> but firmly ordering <<them $g.slave>> to tell you why <<they $g.slave>>'s coming to you. After two false starts, <<they $g.slave>>
<<if !$g.slave.isCanTalk()>>
uses shaky <<uhands $g.slave>> to ask you to fuck <<them $g.slave>>.
<<else>>
"P-please fuck me, <<Master $unit.player>>," <<they $g.slave>> chokes out.
<</if>>
To go by <<their $g.slave>> behavior, <<if $g.slave.isHasTail()>>not to mention <<their $g.slave>> completely stiff tail<</if>> the likelihood that <<they $g.slave>>'s actually eager to <<if !$unit.player.isHasDick()>>eat pussy<<else>>take a dick<</if>>, never mind yours, is vanishingly small.
</p>
<<choose>>
<<opt "Fuck <<them $g.slave>>">>
<p>
<<They $g.slave>> asked for it, and <<they $g.slave>>'ll get it.
<<include "EventLikeMeFuckThem">>
</p>
<<opt "Rape <<them $g.slave>>">>
<p>
<<They $g.slave>>'ll get more than <<they $g.slave>> asked for.
<<include "EventLikeMeRapeThem">>
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Get the truth out of <<them $g.slave>>">>
<p>
You ask <<them $g.slave>> why <<they $g.slave>>'s really here,
with <<if $unit.player.isHasTrait('per_sly')>>a sinister tone<<else>>devastating directness and in a tone<</if>> that will brook no disobedience.
<<They $g.slave>> quails, <<their $g.slave>> shoulders slumping as <<they $g.slave>> hugs <<themself $g.slave>>
and <<their $g.slave>> knees turning inward as <<they $g.slave>> cringes, the perfect picture of the standard <<urace $g.slave>> fear response.
It seems <<they $g.slave>> thought you would't notice <<their $g.slave>> insincerity.
<<They $g.slave>> swallows nervously and makes no response, but then you <<if $g.slave.isCanSee()>>allow impatience to cloud your brow<<else>>cough with impatience<</if>> and <<they $g.slave>> hurriedly explains <<themself $g.slave>>.
</p>
<p>
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> uses sign language to communicate that <<they $g.slave>> asked your other personal slave <<rep _o>> what <<they $g.slave>> could do to improve <<their $g.slave>> life, and that <<name _o>> told <<them $g.slave>> to do <<their $g.slave>> best to win your favor.
<<They $g.slave>> asked them <<them _o>> to do that, and <<name _o>> told <<their $g.slave>> to ask you to fuck <<them $g.slave>>.
<<else>>
<<dialogue $g.slave>>
<<Master $unit.player>>, I, um, asked <<rep _o>> what I could do to, you know, do better here.
<<They _o>> said to g-get you to like me. A-and when I asked <<them _o>> how to do that, <<name _o>> said t-to ask you to f-fuck me.
<</dialogue>>
<</if>>
</p>
<p>
Then <<they $g.slave>> bites <<their $g.slave>> lip and <<if $g.slave.isCanSee()>>watches you<<else>>listens<</if>> anxiously.
</p>
<<choose>>
<<opt "<<name _o>> isn't' wrong">>
<p>
You get to your feet, letting <<them $g.slave>> know that <<name _o>> wasn't 'wrong. <<Their $g.slave>> relief is palpable.
<<include "EventLikeMeFuckThem">>
</p>
<<run setup.qc.FriendshipWithYou('slave', 25).apply($gQuest)>>
<<opt "Now rape <<them $g.slave>>">>
<p>
You get to your feet, letting <<them $g.slave>> know that <<name _o>> wasn't 'wrong. <<Their $g.slave>> relief is palpable, but <<they $g.slave>>'s getting ahead of <<themself $g.slave>>.
<<include "EventLikeMeRapeThem">>
</p>
<<run setup.qc.FriendshipWithYou('slave', -25).apply($gQuest)>>
<<opt "It's not that simple">>
<p>
You tell <<them $g.slave>> <<uadv $unit.player>> that it isn't that simple, but that if <<they $g.slave>> obeys orders and does <<their $g.slave>> best, you will like <<them $g.slave>> just fine, and <<they $g.slave>> will do well as your personal slave.
Relief floods through <<them $g.slave>>.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> gestures <<their $g.slave>> thanks, and an apology for being silly.
<<else>>
"Thank you, <<Master $unit.player>> and I'm sorry for being silly," <<they $g.slave>> apologizes.
<</if>>
You dismiss <<them $g.slave>>, and <<they $g.slave>> goes, a strangely respectful look on <<their $g.slave>> face. <<They $g.slave>>'s no more confident of <<their $g.slave>> ability to find safety and stability here with you than <<they $g.slave>> slave|was before, but <<they $g.slave>> seems to like that it apparently isn't as simple as
<<if $unit.player.isHasDick()>>taking your cock up <<their $g.slave>> butt<<if $unit.player.isHasVagina()>> or <</if>><</if>><<if $unit.player.isHasVagina()>>eating you out<</if>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>
<</choose>>You get to your feet and snap your fingers, pointing
<<if !$unit.player.isHasDick()>>
at the <<utile $g.slave>> in front of you<<if !$g.slave.isCanSee()>> along with a commanding "floor"<</if>>.
<<They $g.slave>> hurries over, but hesitates for an instant,
unsure of what to do next. You help <<them $g.slave>> understand by grabbing <<them $g.slave>> on either side of <<their $g.slave>> <<uneck $g.slave>> and shoving <<them $g.slave>> down to kneel at your <<ufeet $unit.player>> with <<their $g.slave>> face level with your cunt. One of your <<uhands $unit.player>> shifts behind <<their $g.slave>> head and tilts it back as you step forward, grinding against <<their $g.slave>> <<umouth $g.slave>>. <<They $g.slave>> struggles involuntarily, but then perceptibly recollects <<themself $g.slave>>, relaxes, and starts to eat you out. Whatever internal turmoil <<they $g.slave>>'s working through, you don't care, and neither does your pussy. When you climax and release <<them $g.slave>>, <<they $g.slave>> stumbles off, looking oddly proud of <<themself $g.slave>>. It seems <<they $g.slave>> got something out of that: a confidence boost, at least.
<<else>>
at the <<uslaverbed $g.slave>><<if !$g.slave.isCanSee()>> along with a commanding "bed"<</if>>.
<<They $g.slave>> hurries over and kneels,
<<their $g.slave>> rear pointing at you, but hesitates for an instant, unsure of what to do next. You help <<them $g.slave>> understand by shoving <<them $g.slave>> down so <<their $g.slave>> collarbone is resting on the back of the <<uslaverbed $g.slave>>
and <<their $g.slave>> ass is at just the right height.
You <<if $g.slave.isHasTail()>>life <<their $g.slave>> <<utail $g.slave>> and <</if>> fuck <<if $g.slave.isHasVagina()>><<their $g.slave>> pussy and then <<their $g.slave>> ass in quick succession, plundering <<their $g.slave>> holes without much regard for <<their $g.slave>> pleasure. <<They $g.slave>> gasps and bucks at all the right parts, and even manages to moan almost authentically when you blow your load up <<their $g.slave>> butt<<else>><<their $g.slave>> ass hard, without cruelty but without much concern for <<their $g.slave>> pleasure, either. <<They $g.slave>> takes it obediently, and does <<their $g.slave>> best to act like <<they $g.slave>>'s enjoying being sodomized<</if>>. <<They $g.slave>> stumbles off to wash, looking oddly proud of <<themself $g.slave>>. It seems <<they $g.slave>> got something out of that: a confidence boost, at least.
<</if>>You get to your feet and snap your fingers, pointing
<<if !$unit.player.isHasDick()>>
at the <<utile $g.slave>> in front of you<<if !$g.slave.isCanSee()>> along with a commanding "floor"<</if>>. <<They $g.slave>> hurries over, but hesitates for an instant, unsure of what to do next. You help <<them $g.slave>> understand by <<uadv $unit.player>> slapping <<them $g.slave>>, and when <<they $g.slave>> instinctively cringes away from the blow, poking the back of one of <<their $g.slave>> knees with your <<ufoot $unit.player>>. <<They $g.slave>> collapses like a doll with its strings cut<<if $g.slave.isFemale()>>, already crying<</if>>.
You seize <<their $g.slave>> head in both <<uhands $unit.player>> and ride <<their $g.slave>> sobbing <<umouth $g.slave>>. If <<they $g.slave>> thought that rape required a dick, <<they $g.slave>> slave|was wrong. If <<they $g.slave>> thought that you needed a strap-on to rape <<them $g.slave>>, <<they $g.slave>> slave|was wrong. Your fingers form claws, holding <<their $g.slave>> head in a terrifying grip as you enjoy the not unfamiliar sensation of a slave weeping into your cunt as you grind it against <<their $g.slave>> crying face.
<<else>>
at the <<uslaverbed $g.slave>><<if !$g.slave.isCanSee()>> along with a commanding "bed"<</if>>. <<They $g.slave>> hurries over and kneels,
<<their $g.slave>> rear pointing at you, but hesitates for an instant, unsure of what to do next.
You help <<them $g.slave>> understand by <<if $g.slave.isHasTail()>> raising <<their $g.slave>> <<utail $g.slave>>, before <</if>> jabbing a thumb into one of <<their $g.slave>> kidneys, forcing <<their $g.slave>> back to arch in involuntary response, and then grinding <<their $g.slave>> face into the couch cushions.
<<if $g.slave.isHasVagina()>>
<<Their $g.slave>> cunt isn't all that wet, and <<they $g.slave>> has cause to regret this, first when you fuck it without mercy, and then when you switch your barely-lubricated dick to <<their $g.slave>> anus.
<<else>>
You spit on <<their $g.slave>> asshole and then give <<them $g.slave>> some anal foreplay, if slapping your dick against <<their $g.slave>> anus twice before shoving it inside <<them $g.slave>> counts as anal foreplay.
<</if>> <<They $g.slave>> tries to be brave and relax, but those are contradictory goals and <<they $g.slave>> manages neither as you assrape <<them $g.slave>> into <<if $g.slave.isFemale()>>inelegant, tearful<<else>>inelegant, desperate<</if>> begging for you to take your dick out of <<their $g.slave>> butt, because it hurts. It isn't the first time you've heard that<<if $unit.player.isHasTrait('join_senior')>>, or the hundredth<</if>>.
<</if>>
When you're done, you discard <<them $g.slave>> like the personal <<urace $g.slave>> sex toy <<they $g.slave>> is, and go outside to do some work.
<<They $g.slave>> stumbles off, looking fearful but strangely complacent, as though <<they $g.slave>>'s accepted this to an extent.<<run new setup.Event(
'loose_buttslut', /* key */
"Loose Buttslut", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_loose_buttslut',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_anal_advanced, setup.trait.training_anal_master], true),
setup.qres.AllTraits([setup.trait.anus_gape], true),
setup.qres.SlaveBedchamberHasFurniture(setup.item.f_object_master_fuckmachine),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> has a little free time this evening, so <<they $g.slave>> finds a quiet corner in the bedchamber and engages in <<their $g.slave>> anal proclivities. Since <<their $g.slave>> asshole is so stretched out, <<they $g.slave>> sticks the base of a huge dildo to the ground and,
using <<their $g.slave>> <<ulegs $g.slave>>,
squats on it,
moaning happily as the massive thing inches into <<them $g.slave>>. <<They $g.slave>> starts to slide up and down it <<uhands $g.slave>>-free, so <<they $g.slave>>
<<if $g.slave.isHasTrait('dick_titanic')>>jacks off <<their $g.slave>> huge cock with both <<uhands $g.slave>>
<<elseif $g.slave.isHasTrait('dick_large')>>
jacks off with one <<uhand $g.slave>> and pinches a nipple with the other
<<elseif $g.slave.isHasDick()>>
rubs <<their $g.slave>> <<udick $g.slave>> with one <<uhand $g.slave>> and pinches a nipple with the other<<else>>rubs <<their $g.slave>> clit with one <<uhand $g.slave>> and pinches a nipple with the other<</if>>.
As <<they $g.slave>> enjoys <<themself $g.slave>>, <<their $g.slave>> loose sphincter relaxes still further until it's barely gripping the dildo.
</p>
<<set _lover = $unit.player.getLover()>>
<<choose>>
<<opt "Add something to fill <<their $g.slave>> completely">>
<p>
<<They $g.slave>>'s so occupied that <<they $g.slave>> doesn't hear you until you<<if !$unit.player.isHasDick()>> don a strap-on and<</if>> tip <<them $g.slave>> over face forward. With <<them $g.slave>> on <<their $g.slave>> knees, <<their $g.slave>> dildo-stuffed ass is in the air; <<they $g.slave>>'s still masturbating between <<their $g.slave>> <<ulegs $g.slave>>. After a moment's consideration, you slide two exploratory fingers in alongside the dildo. <<They $g.slave>> gasps and masturbates harder. Thus encouraged, you shove <<if !$unit.player.isHasDick()>>the strap-on<<else>>your member<</if>> in alongside the dildo.
<<if $g.slave.isCanPhysicallyTalk()>><<They $g.slave>> screams at the surprise double anal, sobbing and begging,<<else>><<They $g.slave>> screams noiselessly at the surprise double anal, waving <<their $g.slave>> <<uhands $g.slave>> in distress,<</if>> but <<they $g.slave>> doesn't try to stop you and doggedly keeps rubbing. By the time you're finished, <<their $g.slave>> asshole is a gaping hole much bigger than the average pussy.
</p>
<<opt "Let <<them $g.slave>> use the <<rep setup.item.f_object_master_fuckmachine>>">>
<p>
There's no reason for <<them $g.slave>> to do that in a quiet corner when the <<rep setup.item.f_object_master_fuckmachine>> is sitting in the room. You interrupt <<them $g.slave>> and bring <<them $g.slave>> on top of the fuckmachine, setting <<them $g.slave>> up on the machine so <<they $g.slave>> can have that dildo rammed up <<their $g.slave>> ass for as long as <<they $g.slave>> likes. Your bedchamber is filled with the rhythmic sounds of a sloppy anus being pounded for a good long while.
By the time <<they $g.slave>>'s climaxed out, <<they $g.slave>>'s so tired and apathetic that <<they $g.slave>> can't bring <<themself $g.slave>> to get off it or ask for help, so <<they $g.slave>> just relaxes and enjoys the internal massage
<<if $g.slave.isHasDick()>> while <<their $g.slave>> flaccid dick twitches weakly<</if>>.
<<They $g.slave>> has become more trusting of you, since you knew just what <<they $g.slave>> needed.
</p>
<<optif _lover>>
<<opt "Invite your lover in for double anal">>
<<set _lover = $unit.player.getLover()>>
<p>
When <<yourrep _lover>> comes into your bedchamber, <<they _lover>> finds <<name $g.slave>> sitting in your lap with your <<if !$unit.player.isHasDick()>>strap-on<<else>>dick<</if>> up <<their $g.slave>> gaping butt.
<<Reps _lover>> expression softens whe <<they _lover>> realizes <<they _lover>>'s here for pleasure, not business. <<name $g.slave>> gasps a little when <<they $g.slave>> hears you tell your lover to join you up <<their $g.slave>> asshole, but <<they $g.slave>> doesn't protest.
<<if _lover.isHasDick()>>Your <<uadjgood _lover>> lover is already hard and shoves <<themself _lover>> up <<name $g.slave>>'s already-filled butt while tweaking the writhing slave's nipples.<<else>><<They _lover>> dons a strap-on and shoves it up <<name $g.slave>>'s already-filled butt without further ado.<</if>> The two of you jackhammer in and out of <<name $g.slave>>'s ass without mercy; the poor anal whore does <<their $g.slave>> best to relax, but two phalli at once is a lot, even for <<them $g.slave>>. <<They $g.slave>>'s only allowed an anal respite when <<their $g.slave>> sphincter is really fucked out and there's little butthole fun to be had from <<them $g.slave>> any longer. <<Yourrep _lover>> enjoys taking a break to fuck <<rep $g.slave>> with you.
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'loving_lover', /* key */
"Loving Lover", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_loving_lover',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slaver),
setup.qres.YourLover(),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
It's been a long, harassing day as the leader of a slaving company.
You're composing
a letter to address the concerns of your tenants who seem to think you're doing a shit job running the company, and keep demanding you to do your job according to their ideals. They're also important enough for the well-being of your fort that it would be unwise to simply defenestrate them from the nearest window. Not that you aren't tempted.
Suddenly, you feel a
<<if $unit.player.isSubmissiveTo($g.slave)>>
sudden pain as you feel your ears being chomped,
<<else>>
moist pair of lips nibbling their way along your you|ears,
<</if>>
and a
<<if $g.slave.isHasTrait('muscle_verystrong')>>powerful
<<elseif ($g.slave.isHasTrait('muscle_strong'))>>strong
<<elseif $g.slave.isFemale()>>
feminine
<</if>>
slave|hand on your shoulder.
Its owner
<<if $unit.player.isSubmissiveTo($g.slave)>>
orders you: "Put your pen down, you|name."
<<else>>
whispers: "It can wait, you|name."
<</if>>
</p>
<p>
You
<<if $unit.player.isSubmissiveTo($g.slave)>>
meekly
<<else>>
you|adv
<</if>>
turn to see
<<if $unit.player.isSubmissiveTo($g.slave)>>
<<yourrep $g.slave>> staring down at you, silently ordering you to ditch work in order for <<them $g.slave>> to make use of you in your own bedchamber.
<<else>>
your lover's swaying seductively away from you, exiting your office before blowing you a kiss and telling you to head to your bedchamber now.
<</if>>
</p>
<<if $unit.player.isSubmissiveTo($g.slave)>>
<<set $g.a = $g.slave>>
<<set $g.b = $unit.player>>
<<else>>
<<set $g.a = $unit.player>>
<<set $g.b = $g.slave>>
<</if>>
<<choose>>
<<optif !$unit.player.isSubmissiveTo($g.slave)>>
<<opt "Ignore slave|them and continue to work">>
<p>
Your responsibilities will not wait.
You keep at it, composing a firm yet even-handed message that puts the miscreants in their place
without ruffling feathers.
<<name $g.slave>> has gone to sleep in your <<uslaverbed $unit.player>> by the time you enter your bedchamber,
but <<they $g.slave>> wakes at your entrance and sleepily holds the
sheets open so you can climb in.
Once you're bedded down <<they $g.slave>>
<<if $g.slave.isHasTrait('breast_huge')>>lies close to you with one of <<their $g.slave>> breasts resting half on your chest, since
<<they $g.slave>> can't fit under your arm with <<their $g.slave>> ridiculous tits.
<<elseif ($g.slave.isHasTrait('breast_huge'))>>
burrows softly under your arm, <<their $g.slave>> breasts heavy against your chest.
<<elseif $g.slave.isHasTrait('breast_tiny')>>snuggles under your arm, <<their $g.slave>> breasts against your chest.
<<else>>fits <<themself $g.slave>> under your arm,
<<their $g.slave>> <<ubreasts $g.slave>> touching your <<ubody $unit.player>> sensuously.
<</if>>
</p>
<<opt "It can wait until after some lovemaking with your lover">>
<p>
When you enter your bedchamber, the dim light from the you|lighting reveals slave|name waiting with slave|their slave|body laid across the you|slaverbed.
<<if $unit.player.isSubmissiveTo($g.slave)>>
You approach your better and submissively
<<else>>
b|They
<</if>>
b|spread b|their b|arms
for a|them,
smiling b|adv.
b|They kisses a|them lovingly,
murmuring:
"a|name, I love you."
<<if $g.a.isHasVagina()>>
b|They b|lie on b|their side and b|raise one leg
for a|them so a|they can straddle the other,
sliding up to press a|their pussy against b|their submissive groin.
a|They grind against b|them;
the stimulation is so strong that b|they b|writhe into the sheets,
panting and whining.
<<else>>
<<if $g.b.isHasVagina()>>
b|Their pussy is warm and very wet, making penetration easy;
b|They b|gasp and b|arch
b|their back,
clasping a|them between b|their b|legs as
b|their b|eyes look deep into a|theirs.
<<else>>
b|Their butt is relaxed and welcoming, and
b|they b|hold b|their b|legs back to take missionary anal loving as
b|their b|eyes look deep into a|theirs.
<</if>>
<</if>>
You both know each other quite well, and maintain the communion for a long time.
When b|they b|sense a|their climax building,
b|they b|let
b|themself climb to orgasm with a|them,
holding
<<if $g.a.isHasDick()>> a|their hips in b|their b|hands
<<else>> a|them in b|their b|arms<</if>>.
b|They b|adv b|clean a|them with b|their b|mouth before heading to the baths, after planting another kiss on a|them.
</p>
<<opt "It can wait until after some rough sex with the Concubine">>
<p>
When you enter your suite, the dim light reveals slave|name waiting with slave|their slave|body laid across the you|slaverbed.
When b|they b|see
<<if (!$g.a.isHasDick())>>
the big strap-on a|they a|is wearing,
<<else>>
the kind of sex a|they a|is in the mood for,<</if>>
b|they b|turn over and pushes b|their face down into the sheets.
b|They b|pull b|their knees under b|themself and b|reach back to pull
b|their buttocks apart, relaxing and then clenching b|their b|anus invitingly.
b|They b|start to beg
"Please assrape me, M-" into the sheets, but a|they a|interrupt
b|them by shoving b|them forward so that b|they b|is all the way facedown on the you|slaverbed.
b|They b|know how a|they a|like it and b|start to wriggle, struggle, and whine as a|they roughly a|sodomize b|them,
<<if (!$g.a.isHasDick())>>the strap-on<<else>> a|their cock<</if>> ramming straight up b|their ass despite the uncomfortable angle,
which b|their ass b|make it harder for b|them by allowing a|them to get really deep inside b|their anus. b|They b|continue to wrestle with a|them, sometimes even managing to dislodge <<if (!$g.a.isHasDick())>>the strap-on<<else>> a|their dick<</if>>, allowing a|them the <<if (!$unit.player.isHasDick())>>cruel delight<<else>>delicious sensation<</if>> of pushing it back up b|their butt each time. Despite the pretense b|their enjoyment is obvious;
<<if $g.b.isHasDick() && $g.b.isInChastity()>>despite b|their chastity caged cock, b|they b|is grinding against a|them as eagerly as a <<girl $g.b>> making love with b|their pussy.
<<elseif $g.b.isHasDick()>> b|they can't stop b|themself from humping b|their rock-hard cock against the sheets below b|them.
<<else>> b|their pussy is so wet b|they b|is leaving a wet spot on the sheets beneath b|them.
<</if>>
b|They finally b|orgasm, sobbing with overstimulation when a|they pound b|them for a while longer before
<<if (!$g.a.isHasDick())>>finding a|their own climaxm<<else>>shooting rope after rope of cum into b|them.<</if>> b|They b|adv b|clean a|them with b|their b|mouth and heads to the shower, but not before planting a kiss on a|them.
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'midwork_confession', /* key */
"Midwork Confession", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_midwork_confession',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.YourLover(),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Working in your office early in the morning, you can hear the low, ambient noise of the other residents of your fort who work during the daytime busily getting ready for their days.
Suddenly, there's motion at your doorway, and you see <<yourrep $g.slave>> hurries in.
<<They $g.slave>>'s wearing nothing but a towel, <<their $g.slave>> <<uskin $g.slave>> glistening with the fresh cleanliness of having just finished washing <<themself $g.slave>>.
<<They $g.slave>> glances around the room, making sure nobody else is inside, before suddenly closing the door to your office and <<uadv $g.slave>> drops <<their $g.slave>> towel, leaving <<their $g.slave>> <<ubody $g.slave>> entirely naked, before coming comes over to your desk.
<<if $g.slave.isHasTrait('per_chaste')>>
Despite <<their $g.slave>> usually chaste self, <<rep $g.slave>> makes an exception for <<their $g.slave>> only lover.
<<elseif $g.slave.isHasTrait('per_lustful')>>
Having known how lusty your lover is, you've no doubt of <<their $g.slave>> intentions for today.
<</if>>
<<Their $g.slave>>
<<if $g.slave.isHasTrait('muscle_verystrong')>>
very well-defined pecs on full display as <<they $g.slave>> walks, catching your eyes.
<<elseif $g.slave.isHasTrait('muscle_strong')>>
toned chest on full display as <<they $g.slave>> walks, and <<their $g.slave>> nipples begs for your attention.
<<elseif !$g.slave.isHasBreasts()>>
naked chest on full display as <<they $g.slave>> walks — <<their $g.slave>> nipples begging for your attention.
<<elseif $g.slave.isHasTrait('breast_huge')>>
massive udders jiggle alluringly as <<they $g.slave>> walks, and <<their $g.slave>> nipples sway from side to side distractingly.
<<elseif $g.slave.isHasTrait('breast_large')>>
heavy breasts bounce up and down as <<they $g.slave>> walks, making <<their $g.slave>> nipples dance around distractingly.
<<elseif $g.slave.isHasTrait('breast_small')>>
lovely boobs move delightfully as <<they $g.slave>> walks, and <<their $g.slave>> nipples bounce prettily.
<<else>>
little tits barely move at all as <<they $g.slave>> walks, though <<their $g.slave>> nipples certainly catch your eye.
<</if>>
Your eyes move down <<their $g.slave>> body, noting
<<if $g.slave.isHasTrait('muscle_verystrong')>>
<<their $g.slave>> rippling abs, which work visibly as <<they $g.slave>> walks, flexing and straining powerfully underneath <<their $g.slave>> <<uskin $g.slave>>.
<<else>>
<<their $g.slave>> <<ubelly $g.slave>> before looking further down.
<</if>>
Below that,
<<if $g.slave.isHasDick()>>
<<their $g.slave>> cock is soft, probably from the shower; it
<<if $g.slave.isHasTrait('dick_titanic')>>
flops around lewdly
<<elseif $g.slave.isHasTrait('dick_large')>>
bounces around
<<else>>
wiggles pathetically
<</if>>
as <<they $g.slave>> moves.
<<if $g.slave.isHasTail()>>
Meanwhile <<their $g.slave>> tail continues to sway seductively left and right from behind.<</if>>
<<else>>
<<their $g.slave>> healthy <<woman $g.slave>>hood looks a little flushed from the bath.
<</if>>
Coming to a stop, <<they $g.slave>>
<<if $g.slave.isHasTrait('height_giant')>>bends the long, long way down necessary to bring<<elseif $g.slave.isHasTrait('height_dwarf')>>bends the amusingly short way down <<they $g.slave>> needs to bring<<else>>bends down<</if>> to bring <<their $g.slave>> lips next to your ear.
</p>
<p>
"I love you, <<name $unit.player>>," <<they $g.slave>> whispers.
</p>
<<choose>>
<<opt "Keep working">>
<p>
Without turning your head, you tell <<them $g.slave>> that you love <<them $g.slave>> too, but is working right now.
<<They $g.slave>> laughs <<uadv $g.slave>>, <<their $g.slave>> warm breath gusting against your ear. Not wanting to disturb you anymore than this,
your lover
<<if $g.slave.isDominant()>>
grab hold of your head and plant a possessive kiss, startling you.
But before long, <<they $g.slave>> releases <<their $g.slave>> hold of your face,
<<else>>
plants a light kiss on your cheek
<</if>>
and walks quickly out of your office,
hurrying to go back to <<their $g.slave>> room to get dressed and
go about <<their $g.slave>> day's business, but careful to strut <<their $g.slave>> stuff for you on <<their $g.slave>> way to the exit.
<<if !$g.slave.isHasTrait('muscle_strong') && $g.slave.isFemale()>>
<<Their $g.slave>> healthy butt bounces as <<they $g.slave>> goes. <<Their $g.slave>> buttocks mostly conceal
<<if $g.slave.isHasTrait('anus_gape')>>
the huge area of puckered skin around <<their $g.slave>> asspussy, but <<their $g.slave>> butthole is so well used that it's obvious from the rear that <<they $g.slave>> takes it up the ass. A lot.
<<elseif $g.slave.isHasTrait('anus_loose')>>
<<their $g.slave>> backdoor, but there's the occasional cute glimpse of <<their $g.slave>> experienced anus.
<<else>>
what's between them, but there's the occasional cute glimpse of <<their $g.slave>> tight <<if $g.slave.isFemale()>>rosebud<<else>>asshole<</if>>.
<</if>>
<<else>>
<<if $g.slave.isHasTrait('muscle_strong')>>
<<Their $g.slave>> firm, muscular butt moves invitingly as <<they $g.slave>> goes.
<<Their $g.slave>> firm buttocks leave
<<else>>
<<Their $g.slave>> nice little butt moves cutely as <<they $g.slave>> goes.
<<Their $g.slave>> small buttocks leave
<</if>>
<<if $g.slave.isHasTrait('anus_gape')>>the huge area of puckered skin around <<their $g.slave>> asspussy clearly visible from the rear, and <<their $g.slave>> asshole works lewdly with the motion.<<elseif $g.slave.isHasTrait('anus_loose')>><<their $g.slave>> asshole visible, the pucker of <<their $g.slave>> backdoor lewdly available.<<else>><<their $g.slave>> tight anus visible from the rear as <<they $g.slave>> walks.<</if>>
<</if>>
<<They $g.slave>> wears the towel back, before pausing for an instant in the doorway, turns over <<their $g.slave>> shoulder to give you a
<<if $g.slave.isFemale()>>
sexy wink,
<<else>>
salute,
<</if>>
and is gone.
</p>
<<opt "Tell <<them $g.slave>> you love <<them $g.slave>> too">>
<p>
You turn towards <<them $g.slave>> and direct the full weight of your gaze into
<<their $g.slave>> <<ueyes $g.slave>>.
<<Their $g.slave>> eyelids flicker with the shock of the shared look,
so close,
<<if $g.slave.isSubmissive()>>
but <<they $g.slave>> submissively bears it, biting <<their $g.slave>> lower lip.
<<else>>
which <<they $g.slave>> responds by <<if $g.slave.isDominant()>>dominantly<</if>> gazing back.
<</if>>
<<if $g.slave.isDominant() and !$unit.player.isDominant()>>
Then <<they $g.slave>> kiss you.
The released tension is too much for you, and you moan,
slumping against <<them $g.slave>> a little as <<they $g.slave>> kiss you possessively.
You are so lost in it that when <<they $g.slave>> breaks the kiss,
your mouth stays slightly open and pursues <<theirs $g.slave>> slightly, hungry for more.
<<They $g.slave>> places a finger against your moist lips, and you choose this opportunity to tell <<them $g.slave>> that you love <<them $g.slave>> too. <<They $g.slave>> makes an almost animal sound, somewhere between a growl and a command, and as you withdraw your finger, <<they $g.slave>> kisses you again, even hungrier this time.
<<else>>
Then you kiss <<them $g.slave>>.
The released tension is too much for <<them $g.slave>>, and <<they $g.slave>> moans, slumping against you a little as you kiss <<them $g.slave>> as a lover.
<<They $g.slave>>'s so lost in it that when you break the kiss, <<their $g.slave>> mouth stays slightly open and pursues yours slightly, hungry for more.
You place a finger against <<their $g.slave>> moist lips, making <<them $g.slave>> wait a moment, and tell <<them $g.slave>> that you love <<them $g.slave>> too. <<They $g.slave>> makes an almost animal sound, somewhere between a sob and a moan, and as you withdraw your finger, <<they $g.slave>> kisses you back.
<</if>>
<<They $g.slave>> knows <<they $g.slave>> has a job to do today, and it's waiting for <<them $g.slave>>, so when you break off the kiss for the fourth time, <<they $g.slave>> withdraws, keeping <<their $g.slave>> eyes on yours, making love with you with <<their $g.slave>> <<if $g.slave.isHasTrait('face_attractive')>>captivating<</if>> gaze.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'mindbroken_morning', /* key */
"Mindbroken Morning", /* Title */
{ /* Author */
name: "Anon (Free Cities)",
url: "",
},
[ /* tags */
'fort',
],
'Event_mindbroken_morning',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.Trait(setup.trait.training_mindbreak),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
It's a sunny morning, with rather mild weather,
and you're stuck at your office planning for your slavers, as usual.
Watching out from your window, you see the usual frantic exchange for visitors, slavers, and some of the more obedient slaves. You pay little attention to such a trifle, but then notice that there's <<rep $g.slave>>. You've known the slave to have been mindbroken since some time ago, and it's worrying that the slave is out on <<their $g.slave>> own.
</p>
<p>
You head out and find that <<they $g.slave>>'s looking up at the sun with <<their $g.slave>> <<ueyes $g.slave>> closed, letting the warmth and light envelop <<their $g.slave>> <<uface $g.slave>>.
<<They $g.slave>> hasn't gotten completely ready for <<their $g.slave>> day yet, and <<their $g.slave>> <<uskin $g.slave>> is clean and quite bare. Despite <<their $g.slave>> small remaining mental capacity, it seems the mindbroken slave is still capable of the minor pleasure of enjoying the sunlight. It is very probably the only enjoyable thing <<they $g.slave>>'ll register today.
</p>
<<choose>>
<<opt "Let <<them $g.slave>> be">>
<p>
Satisfied that there's no need for immediate intervention, you head back to your office.
A few minutes later, the broken slave passes your office, and you think for a moment that you see a bit of moisture glinting in <<their $g.slave>> eyes, but soon correct yourself: it's just a reflection from the glass windows of your fort.
</p>
<<opt "See if an orgasm will cheer <<them $g.slave>> up">>
<p>
You<<if !$unit.player.isHasDick()>> don a strap-on and<</if>> slide your <<uhands $unit.player>> around <<their $g.slave>> <<uwaist $g.slave>>,
feeling the warmth of <<their $g.slave>> <<uskin $g.slave>>,
and gently step forward until <<they $g.slave>>'s between you and the walls of your fort. <<They $g.slave>> slave|is silently obedient, not reacting at all other than to obey your direction as to where <<they $g.slave>> should go.
For example, when <<they $g.slave>> feels <<if !$unit.player.isHasDick()>>the phallus<<else>>your hardening dick<</if>> pressing against <<them $g.slave>>, <<they $g.slave>> <<if $g.slave.isHasTrait('height_tall')>>unconsciously bends forward a little and cocks <<their $g.slave>> hips to position <<themself $g.slave>><<else>>rises up on the balls of <<their $g.slave>> feet to bring <<their $g.slave>> short body up to the right height<</if>> for anal. <<They $g.slave>> relaxes <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>loose anus<<elseif $g.slave.isHasTrait('anus_loose')>>asshole<<else>>tight little asshole<</if>> completely, making entry easy. Your hands rove to <<their $g.slave>> <<ucnipples $g.slave>>, <<if $g.slave.isHasTrait('breast_huge')>>hefting <<their $g.slave>> heavy tits<<elseif $g.slave.isHasBreasts()>>squeezing <<their $g.slave>> breasts<<else>>pressing <<their $g.slave>> <<ubreasts $g.slave>><</if>>
<<Their $g.slave>> face is complacent and unaffected even as <<their $g.slave>> body responds,
<<if $g.slave.isInChastity()>>
since <<their $g.slave>> body is used to its caged cock being neglected in favor of <<their $g.slave>> asspussy
<<elseif $g.slave.isHasTrait('dick_titanic')>>
<<their $g.slave>> giant penis protruding through
<<elseif $g.slave.isHasTrait('dick_large')>>
<<their $g.slave>> penis pressing hard against the walls
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> pathetic hardon barely protruding from between <<their $g.slave>> thighs
<<else>>
<<their $g.slave>> pussy warm and wet under a brush from your fingers
<</if>>.
Even <<their $g.slave>> eventual orgasm is entirely mechanical, a simple tightening of <<their $g.slave>>
<<if $g.slave.isHasTrait('anus_gape')>>gaping<<elseif $g.slave.isHasTrait('anus_loose')>>loosened<<else>>tight<</if>> sphincter,
a gasp of air into <<their $g.slave>> lungs, and a slight shiver.
There is a flaw at the corner of <<their $g.slave>> <<umouth $g.slave>> that might be transitory pleasure, but a look <<if $g.slave.isCanSee()>>into <<their $g.slave>> eyes<<else>>at <<their $g.slave>> face<</if>> confirms that it is not so.
</p>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'muscle_slave', /* key */
"Muscle Slave", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_muscle_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.Trait(setup.trait.muscle_verystrong),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.gym),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Early one morning, <<rep $g.slave>>
<<if !$g.slave.isCanWalk()>>
crawls<<else>>walks<</if>>
past you stark naked, with a towel thrown over <<their $g.slave>> shoulder.
<<They $g.slave>>'s clearly moving from the <<rep setup.buildingtemplate.gym>> to the showers after a hard workout; <<they $g.slave>> supplements <<their $g.slave>> body's natural strength with quite the iron pumping regime and gets up before anyone to protect <<their $g.slave>> muscles.
<<They $g.slave>> notices your gaze, so <<they $g.slave>> subtly flexes for your benefit. Cords of muscle ripple along <<their $g.slave>> massive thighs, washboard abs, ripped biceps, and strapping lats. <<if $g.slave.isHasTrait('dick_large')>><<Their $g.slave>> <<udick $g.slave>> completes the picture<<if $g.slave.isMale()>> of a prime male specimen, but perfectly submissive to your will<</if>>.<</if>>
</p>
<<choose>>
<<opt "Reward <<them $g.slave>> for <<their $g.slave>> gains">>
<p>
You tell <<them $g.slave>> to spread <<their $g.slave>> towel on the floor and lie face down on it. You run your <<uhands $unit.player>> across <<their $g.slave>> sweaty muscles before giving <<them $g.slave>> a thorough, skillful and very intense massage.
<<They $g.slave>> moans and grunts as you work the lactic acid out of <<their $g.slave>> muscles, slowly reducing <<them $g.slave>> to a puddle of ripped sex slave. As you're rubbing <<them $g.slave>> down to finish the massage, <<they $g.slave>> <<uadv $g.slave>> begs you to fuck <<them $g.slave>>. As <<they $g.slave>> lies still,
<<if !$unit.player.isHasDick()>>you lift one of <<their $g.slave>> legs,
<<if $g.slave.isHasTail()>>
move <<their $g.slave>> <<utail $g.slave>> aside,
<</if>>
and straddle yourself in to bring your groin against <<theirs $g.slave>>.
<<else>>
you
<<if $g.slave.isHasTail()>>
lift <<their $g.slave>> <<utail $g.slave>> and
<</if>>
slowly push your cock into <<their $g.slave>> ass; <<they $g.slave>>'s so relaxed from the massage that it slides in easily.
<</if>>
It's a strange sensation, this mass of muscle lying quietly still beneath you, whimpering with delight as you gently <<if !$unit.player.isHasDick()>>scissor yourself against <<their $g.slave>>.<<else>>take <<their $g.slave>> ass.<</if>>
<<They $g.slave>> comes in no time at all.
When <<they $g.slave>> does
<<if !$unit.player.isHasDick()>><<they $g.slave>> squeezes you between vicelike thighs, pressing your pussy deliciously and bringing you to climax, too.
<<else>>you happen to be halfway inside <<their $g.slave>>; <<their $g.slave>> sphincter mercilessly squeezes your head while <<their $g.slave>> muscular buttocks clench your shaft between them. You explode into <<them $g.slave>>.
<</if>>
<<if $g.slave.isHasDick()>>
Once <<they $g.slave>> finishes licking <<their $g.slave>> cum off the floor,
<<they $g.slave>> stands,
<<their $g.slave>> now-softening penis still visibly dripping cum. <</if>>
<<Their $g.slave>> trust for you has increased.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Take advantage of <<their $g.slave>> muscles with a powerfuck">>
<p>
It's time to see if <<they $g.slave>>'s got anything left in those sore
muscles. You push the towel off <<their $g.slave>> shoulder,
<<if !$unit.player.isHasTrait('per_dominant')>>take a lick of the delicious salty sweat along <<their $g.slave>> collarbone,<</if>>
and get to work.
For the next hour, you put <<them $g.slave>> through a series of sexual positions that require <<them $g.slave>> to balance and support <<themself $g.slave>> in difficult positions.
<<They $g.slave>> hangs from the ceiling, goes up on one tiptoe, and fucks in a <<uhand $g.slave>>stand. <<They $g.slave>>'s as muscular inside as <<they $g.slave>> slave|is outside.
<<if !$unit.player.isHasDick()>>
You climax repeatedly, mixing your pussy juice with <<their $g.slave>> sweat all across <<their $g.slave>> body.
<<else>>
You come repeatedly, and before long cum is dripping out of <<their $g.slave>> <<uhole $g.slave>> as you continue.
<</if>>
<<if $g.slave.isHasDick()>>
From position to position, <<their $g.slave>> erection adds its own fluids to the mess on the floor, which you order <<them $g.slave>> to lick all clean in the end.
<</if>>
By the end, <<they $g.slave>>'s shaking from muscle fatigue and panting <<their $g.slave>> gratitude, as <<they $g.slave>> had been trained to.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Compliment <<their $g.slave>> muscles and send <<their $g.slave>> on <<their $g.slave>> way">>
<<set _u = setup.getAnySlaver()>>
<p>
<<They $g.slave>> finishes posing with an impressive display of <<their $g.slave>> obliques. <<They $g.slave>> walks powerfully to the bath area, <<their $g.slave>> ripped buttocks delineating each step. As <<they $g.slave>> slave|washes, several of your other slaves and slavers are waking up and starting their days. They, including <<yourrep _u>>, can't help but stare as <<name $g.slave>> soaps <<themself $g.slave>>. <<name $g.slave>> secretly enjoys the attention.
</p>
<<run setup.qc.Friendship('slave', 'slaver', 100).apply(setup.costUnitHelperDict({
slaver: _u,
slave: $g.slave,
}))>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'night_visit', /* key */
"Night Visit", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_night_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.IsCanTalk(),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you are retiring for the night in your bedchamber,
<<yourrep $g.slave>> <<if $g.slave.isCanWalk()>>walks<<else>>crawls<</if>>
over to you and submissively begs for your attention.
Since <<they $g.slave>>'s allowed to ask questions, <<they $g.slave>> says meekly, "<<Master $unit.player>>, may you please fuck me?"
</p>
<<choose>>
<<opt "Fuck <<them $g.slave>> as <<they $g.slave>> asks">>
<p>
<<They $g.slave>> almost sobs with joy as <<if !$unit.player.isHasDick()>>your strap-on enters<<else>>you enter<</if>> <<them $g.slave>>.
The two of you have <<if !$g.slave.isHasVagina()>>gentle anal sex<<else>>passionate oral, vanilla, and finally anal sex<</if>> for the rest of the night.
As you move from position to position,
<<they $g.slave>> twists to face you whenever <<they $g.slave>> can. When <<they $g.slave>> manages it, <<they $g.slave>> kisses you when <<they $g.slave>> can reach your lips, and <<they $g.slave>> <<if $g.slave.isCanSee()>>stares deeply into your eyes<<else>>meets your face with <<their $g.slave>> own<</if>> when <<they $g.slave>> cannot. <<Their $g.slave>> trust in you has increased.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Assrape <<them $g.slave>>">>
<p>
You order <<them $g.slave>> to kneel.
<<They $g.slave>> looks hopeful and complies, but <<their $g.slave>> anticipation of enjoyable sex vanishes with a pathetic little gasp when you<<if !$unit.player.isHasDick()>> don a strap-on and use a couple of fingers to collect some of your pussyjuice for improvised lube<<else>>spit on <<their $g.slave>> butthole<</if>>. With only a little saliva as lubrication,
you
<<if $g.slave.isHasTail()>>
roughly yank <<their $g.slave>> <<utail $g.slave>> upwards and
<</if>>
brutally sodomize <<them $g.slave>>, fucking <<their $g.slave>> <<uanus $g.slave>> to the limit of what you can get away with without damaging <<them $g.slave>>.
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>
<<They $g.slave>> loves anal so much that after a while pleasure overwhelms pain to the extent that <<they $g.slave>> manages a sobbing orgasm.
<<else>><<They $g.slave>> gets the message: <<they $g.slave>>'s your property and <<their $g.slave>> desires are entirely subject to your will.<</if>> <<They $g.slave>> fears you slightly more now.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Play with <<them $g.slave>>">>
<p>
You get into <<uslaverbed $g.slave>> and crook a finger, silently ordering <<them $g.slave>> to join you.
<<They $g.slave>>
<<if !$g.slave.isNaked()>>
hurries out of <<their $g.slave>> <<uequipment $g.slave>> and<</if>>
bounces over,
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
<<their $g.slave>> posture communicating the arousal that <<their $g.slave>> caged cock cannot
<<elseif $g.slave.isHasTrait('dick_titanic')>><<their $g.slave>> massive cock rock hard
<<elseif $g.slave.isHasTrait('dick_large')>><<their $g.slave>> erection standing out stiffly
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> <<udick $g.slave>> poking out stiffly
<<else>><<their $g.slave>> pussylips shining with arousal<</if>>.
As <<they $g.slave>> climbs into <<uslaverbed $g.slave>>,
you take <<their $g.slave>> <<uhand $g.slave>> and guide <<them $g.slave>> into your lap, facing away from you. <<They $g.slave>> sighs happily and snuggles <<their $g.slave>>
<<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>>
back into your <<ubreasts $unit.player>>.
You
<<if $g.slave.isHasTrait('breast_huge')>>
run your hands across <<their $g.slave>> massive chest
<<elseif $g.slave.isHasTrait('breast_large')>>
heft <<their $g.slave>> heavy breasts<<elseif $g.slave.isHasBreasts()>>
massage <<their $g.slave>> pretty chest
<<else>>
manhandle <<their $g.slave>> <<ubreasts $g.slave>>
<</if>>
and tease <<their $g.slave>> nipples, as <<they $g.slave>> shimmies <<themself $g.slave>> back
<<if !$unit.player.isHasDick()>>so <<their $g.slave>> warmth is against yours, your <<ulegs $unit.player>> spreading <<their $g.slave>>
<<else>>
onto you so your cock is lodged between <<their $g.slave>>
<</if>>
buttocks.
When <<they $g.slave>>'s close to orgasm from all the stimulation, <<they $g.slave>> reflexively squeezes <<if !$unit.player.isHasDick()>>your body between <<their $g.slave>> <<ulegs $g.slave>><<else>>your dick between <<their $g.slave>> asscheeks<</if>>,
bringing you to climax. At the feeling of your
<<if !$unit.player.isHasDick()>>juices<<else>>warm cum<</if>>
between <<their $g.slave>> thighs, <<they $g.slave>> tips over the edge and
<<if $g.slave.isHasDick() && $g.slave.isInChastity()>>
shivers with orgasm, ejaculate dribbling out of <<their $g.slave>> chastity cage
<<elseif $g.slave.isHasTrait('balls_titanic')>>
making a massive mess all over <<themself $g.slave>>
<<elseif $g.slave.isHasTrait('balls_medium')>>
adding <<their $g.slave>> own load to the mess
<<elseif $g.slave.isHasDick()>>
adding <<their $g.slave>> own pathetic load to the mess
<<else>>quivers in your grasp, gasping, before relaxing back into you in a puddle of satisfaction<</if>>.
<<Their $g.slave>> trust in you has increased.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Send <<them $g.slave>> away">>
<p>
<<They $g.slave>> tries to hide <<their $g.slave>> disappointment as <<they $g.slave>> turns to go back to the <<uslavebed $g.slave>>,
<<if $g.slave.isFemale()>> and you can hear <<they $g.slave>> begins to cry.<<else>>
and you can hear <<they $g.slave>> becoming sexually frustrated.
<</if>>
</p>
<</choose>><<run new setup.Event(
'nympho', /* key */
"Nympho", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_nympho',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AllTraits([setup.trait.per_sexaddict], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Today, you decide to retreat back to your bedchamber in the middle of the day for some fun. Seeing you enter, <<yourrep $g.slave>> inside clumsily
<<if $g.slave.isCanWalk()>>walks<<else>>crawls<</if>> over to you.
It's obvious the poor nympho slut hasn't found release since waking up. <<Their $g.slave>> incredible sex drive has <<their $g.slave>> arousal at a fever pitch.
</p>
<p>
<<Their $g.slave>> gait is awkward because of how painfully horny <<they $g.slave>> is. <<Their $g.slave>> nipples are standing out with uncomfortable hardness.
<<if $g.slave.isHasTrait('dick_titanic') && $g.slave.isCanPhysicallyCum()>>
<<Their $g.slave>> gigantic erection waves around in front of <<them $g.slave>> as <<they $g.slave>> moves, its head describing a long arc in the air with each step
<<elseif $g.slave.isHasTrait('dick_large') && $g.slave.isCanPhysicallyCum()>>
<<Their $g.slave>> erection waves around in front of <<them $g.slave>> as <<they $g.slave>> moves, its head bobbing lewdly up and down with each step
<<elseif $g.slave.isHasDick() && $g.slave.isCanPhysicallyCum()>>
<<Their $g.slave>> erection
<<if $g.slave.isHasTraitExact('dick_tiny')>>
is so pathetically small that it
<</if>>
stands out straight and stiff as <<they $g.slave>> moves
<<elseif $g.slave.isHasDick()>>
<<They $g.slave>>'s actually partway erect despite <<their $g.slave>> chastity cage, a remarkable (and painful-looking) feat, testament to <<their $g.slave>> need
<<else>>
<<Their $g.slave>> pussy is soaking wet, and streaks of female arousal are shining on <<their $g.slave>> inner thighs<</if>>.
As <<they $g.slave>> staggers to a halt in front of you,
<<if $g.slave.isHasTrait('dick_titanic') && $g.slave.isCanPhysicallyCum()>>
the movement of <<their $g.slave>> huge penis through the air
<<elseif $g.slave.isHasTrait('dick_large') && $g.slave.isCanPhysicallyCum()>>
<<their $g.slave>> cock slaps up against <<their $g.slave>> <<ubelly $g.slave>>, which
<<elseif $g.slave.isHasDick() && $g.slave.isCanPhysicallyCum()>>
<<their $g.slave>> <<udick $g.slave>> is momentarily trapped between <<their $g.slave>> thighs, which
<<elseif $g.slave.isHasDick()>>
<<their $g.slave>> cock grinds hard against <<their $g.slave>> chastity cage, which
<<else>>
a motion which
<</if>>
provides just enough stimulation that <<they $g.slave>> climaxes.
<<Their $g.slave>> <<uhands $g.slave>> ball into fists at <<their $g.slave>> sides and <<their $g.slave>> torso pitches forward involuntarily,
<<if $g.slave.isHasTrait('balls_huge')>>
a ridiculous, pent-up torrent of cum shooting out and onto the floor
<<elseif $g.slave.isHasBalls() && !$g.slave.isInChastity()>>
a strong jet of cum shooting out and onto the floor
<<elseif $g.slave.isHasBalls() && $g.slave.isInChastity()>>
<<their $g.slave>> caged cock twitching inside painfully and leaking quite a lot of cum
<<elseif $g.slave.isHasTrait('vagina_loose')>>
the strong muscles around <<their $g.slave>> big cunt visibly contracting with the force as <<they $g.slave>> squirts a jet of <<girl $g.slave>>cum out onto <<their $g.slave>> legs and the floor
<<else>>
squirting a little jet of <<girl $g.slave>>cum out onto <<their $g.slave>> legs and the floor
<</if>>.
<<They $g.slave>> stands up straight, but this brings <<their $g.slave>> <<if $g.slave.isCanSee()>><<ueyes $g.slave>> up to gaze straight into yours<<else>>face to face with you<</if>>, and the mixed release, humiliation, and naughtiness of having climaxed prematurely right in front of <<their $g.slave>> <<Master $g.slave>> produces an aftershock, adding to the mess on the floor.
</p>
<<choose>>
<<opt "Make <<them $g.slave>> do that again">>
<p>
You laugh at <<them $g.slave>> <<uadv $unit.player>>, and <<they $g.slave>> smiles with relief, happy that you find <<their $g.slave>> wonderful and terrible sex drive amusing. You <<if $g.slave.isCanSee()>>toss<<else>>hand<</if>> <<them $g.slave>> a <<if $g.slave.isHasTrait('anus_gape')>>magical buttplug so big it will fill even <<their $g.slave>> gaping backdoor<<elseif $g.slave.isHasTrait('anus_loose')>>sizeable magical buttplug<<else>>magical buttplug<</if>>, let <<them $g.slave>> suck it wet and get it nestled between <<their $g.slave>> buttcheeks, and then tell <<them $g.slave>> to follow you into your office and stand next to your desk.
<<They $g.slave>> obeys, a bit puzzled, but
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>
<<they $g.slave>> loves standing around with things shoved up <<their $g.slave>> asshole
<<elseif $g.slave.isMasochistic()>>
<<they $g.slave>> loves having painfully big things shoved up <<their $g.slave>> asshole
<<else>>
<<they $g.slave>> has a very short refractory period
<</if>>
and <<they $g.slave>> comes again without much delay, without touching <<their $g.slave>>
<<if $g.slave.isHasDick()>>cock<<else>>pussy<</if>>.
You keep <<them $g.slave>> there for quite a while, the quivering,
<<if $g.slave.isCanPhysicallyCum()>>cum-jetting<<elseif $g.slave.isHasBalls()>>cum-leaking<<else>>femcum-dripping<</if>>
statue of a slave providing visual diversion for the slavers and occasional visitors you have to entertain for the day.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Take pity on the poor nympho">>
<p>
<<They $g.slave>> shivers a little when <<they $g.slave>> <<if $g.slave.isCanSee()>>sees<<else>>hears<</if>> you approach <<them $g.slave>>. <<Their $g.slave>> overcharged sex drive allows <<them $g.slave>> no refractory period at all, and the hunger
<<if !$g.slave.isCanSee()>>on <<their $g.slave>> face<<else>>in <<their $g.slave>> eyes<</if>>
is undiminished. You pause to consider <<them $g.slave>> and <<their $g.slave>> face falls a little as <<they $g.slave>> wonders what you're planning. <<They $g.slave>>'s wrong to doubt you;
<<if $g.slave.getMainTraining().getTags().includes('troral')>>
you push the orally fixated slut to <<their $g.slave>> knees and <<if !$unit.player.isHasDick()>>ride <<their $g.slave>> face like it's a pussy you're tribbing<<else>>fuck <<their $g.slave>> face like you're trying to impregnate <<their $g.slave>> throat<</if>>. <<They $g.slave>>'s forced to hold onto your thighs for dear life, making it impossible for <<them $g.slave>> to touch <<themself $g.slave>>, but <<they $g.slave>> doesn't need to and climaxes again <<uhands $g.slave>>-free.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
you <<if $g.slave.isCanSee()>>point at the <<uslaverbed $g.slave>><<else>>state "bed"<</if>> and <<they $g.slave>> hurries over to kneel and offer you <<their $g.slave>> asshole. Since the butthole slut clearly doesn't need any foreplay today, the first contact between you is <<if $unit.player.isHasDick()>>the tip of your cock<<else>>the head of your strap-on<</if>> pressing forcefully against <<their $g.slave>> anus. <<They $g.slave>> gives a huge shuddering gasp of satisfaction as <<their $g.slave>> sphincter stretches around the invading phallus.
<<elseif $g.slave.getMainTraining().getTags().includes('trdominance')>>
you shove <<their $g.slave>> back towards the <<uslaverbed $g.slave>> and leap onto <<them $g.slave>>, pulling your legs into a scissor position. You bang <<them $g.slave>> hard, and <<they $g.slave>> grinds <<their $g.slave>> hips back at you with enthusiasm. This mutually challenging fuck goes on for a long time, to sweaty, endorphin-fuelled muscle exhaustion.
<<elseif $g.slave.isMasochistic()>>
you prowl around <<them $g.slave>> to let <<their $g.slave>> masochistic anticipation build before nudging <<them $g.slave>> in the back of the knees. <<They $g.slave>> collapses helplessly and you drag <<them $g.slave>> over to the <<uslaverbed $g.slave>>, slinging <<them $g.slave>> across its back and fucking <<them $g.slave>> without mercy. When the pleasurable pain loses its edge, you slide a finger into <<them $g.slave>> alongside your <<if !$unit.player.isHasDick()>>strap-on<<else>>cock<</if>>, eliciting an appreciative shriek.
<<else>>
you pull <<them $g.slave>> in and embrace <<them $g.slave>> strongly, causing the submissive slut to melt into your <<uarms $unit.player>>. You kiss <<them $g.slave>> <<uadv $unit.player>>, <<their $g.slave>> <<umouth $g.slave>> opening to accept your
<<if !$unit.player.isSubmissive()>>dominant<</if>>
tongue as it slides into <<them $g.slave>>. Soon <<they $g.slave>>'s sighing with contentment as something else slides into <<them $g.slave>> on the <<uslaverbed $g.slave>>; <<they $g.slave>> clings to you with near desperation.
<</if>>
<<They $g.slave>>'s extremely pleased <<if $g.slave.isCanSee()>>to see <<themself $g.slave>><<else>>to hear <<they $g.slave>>'s<</if>> to be played again with in the same time tomorrow, and is almost bouncing with eagerness the next day.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'permitted_masturbation', /* key */
"Permitted Masturbation", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_permitted_masturbation',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.IsCanOrgasm(),
setup.qres.Trait(setup.trait.per_lustful),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You worked until late today, and it was already dark by the time you pass through the door of your own bedchamber suite.
As you enter, you see <<yourrep $g.slave>> in <<their $g.slave>> <<uslavebed $g.slave>> tonight, unaware of your presence.
<<They $g.slave>>'s
<<if setup.Text.Unit.Equipment.isNaked($g.slave)>>
nude, of course,
<<else>>
wearing their usual slave gear and
<</if>>
has not pulled the provided modest sheets up over <<themself $g.slave>>.
<<They $g.slave>>'s lying facedown,
<<if $g.slave.isHasTrait('breast_titanic')>>
though <<their $g.slave>> titanic tits prop <<their $g.slave>> torso up awkwardly,
<<elseif $g.slave.isHasTrait('breast_huge')>>
with <<their $g.slave>> huge boobs squashed out to either side of <<their $g.slave>> <<ubody $g.slave>>,<</if>>
humping the sheets
<<if $g.slave.isInChastity()>>
uselessly through <<their $g.slave>> <<ucgenital $g.slave>>
<<elseif $g.slave.isHasTrait('dick_large')>>
with the huge up and down pumps <<their $g.slave>> impressive cock requires
<<elseif $g.slave.isHasDick()>>with <<their $g.slave>> stiff dick<<else>>with <<their $g.slave>> needy pussy<</if>>.
<<They $g.slave>>'s using <<their $g.slave>> right arm to
<<if ($g.slave.isHasTrait('anus_gape'))>>pound <<themself $g.slave>> in the ass with a big dildo
<<elseif ($g.slave.isHasTrait('anus_loose'))>>
fuck <<their $g.slave>> own ass with a dildo
<<else>>fuck <<their $g.slave>> own anus with two fingers<</if>>,
and
<<if $g.slave.isMasochistic()>>
has <<their $g.slave>> left <<uhand $g.slave>> trapped under <<their $g.slave>> chest to cruelly twist <<their $g.slave>> own nipples
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
is using <<their $g.slave>> left <<uhand $g.slave>> to massage that buttock sensually, pulling it to the side to stimulate <<their $g.slave>> anus even more
<<elseif $g.slave.getMainTraining().getTags().includes('troral')>>
is giving two fingers of <<their $g.slave>> left <<uhand $g.slave>> a blowjob
<<else>>
is using <<their $g.slave>> left <<uhand $g.slave>> to stimulate a nipple<</if>>.
Slaves with powerful sex drives like <<them $g.slave>>s often find it necessary to masturbate in order to sleep.
<<They $g.slave>>'s fully preoccupied, and has not noticed you.
</p>
<<set _condition = $g.slave.getMainTraining().getTags().filter(tag => ['trobedience', 'troral', 'tranal', 'trdominance', 'trmasochist'].includes(tag)).length>>
<<choose>>
<<opt "Sleep with <<them $g.slave>>">>
<p>
<<They $g.slave>> starts with surprise when <<they $g.slave>> feels your <<uhand $unit.player>> on <<their $g.slave>> <<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>> back,
but is accustomed to your touch and knows who you are.
<<They $g.slave>> does not pause <<their $g.slave>> masturbation,
knowing that if you want <<them $g.slave>> to, you'll tell <<them $g.slave>>. You massage <<their $g.slave>> warm skin, enjoying the animal energy of the onanistic spectacle laid out before you.
<<They $g.slave>> builds toward climax, turning <<their $g.slave>> head <<if $g.slave.isCanSee()>>to glance at<<else>>to listen to<</if>> you once or twice, but eventually realizing that you're just here to watch.
<<They $g.slave>> turns over hurriedly for <<their $g.slave>> climax, efficiently
<<if $g.slave.isHasTrait('balls_huge')>>
blowing <<their $g.slave>> massive load all over <<their $g.slave>>
<<ubelly $g.slave>>
and chest
<<elseif !$g.slave.isHasVagina()>>
blowing cum up onto <<their $g.slave>> own
<<ubelly $g.slave>>
<<else>>
jerking <<their $g.slave>> wet pussy upward<</if>> to avoid dirtying <<their $g.slave>> <<uslavebed $g.slave>> too much.
<<They $g.slave>> gets up carefully and heads off for a quick shower.
When <<they $g.slave>> returns, you invite <<them $g.slave>> the shocked slave to sleep together in the <<uslaverbed $g.slave>>. You had a long day, and the soft bed, warmed by <<their $g.slave>> pretty body, would feel very nice. After some deliberation, <<they $g.slave>> crawls in beside you, snuggling up to offer you more of <<their $g.slave>> body heat, direct from the source. <<They $g.slave>> slave|is impressed at the trust you display in <<them $g.slave>>, and relaxes completely as you, dominant even when unconscious, encircle <<their $g.slave>> <<if $g.slave.isHasTrait('breast_huge')>>massive mammaries<<else>>shoulders<</if>> with your <<uarms $unit.player>> and pull <<them $g.slave>> in close.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Exhaust <<them $g.slave>>">>
<p>
<<They $g.slave>> starts with surprise when <<they $g.slave>> feels your <<uhand $unit.player>> on <<their $g.slave>>
<<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>> back,
but is accustomed to your touch and knows who you are.
<<They $g.slave>> does not pause <<their $g.slave>> masturbation, knowing that if you want <<them $g.slave>> to, you'll tell <<them $g.slave>>. You take a moment to enjoy the warmth of the working slave's body before <<uadv $unit.player>> taking the
<<uhand $g.slave>> <<they $g.slave>>'s using to buttfuck <<themself $g.slave>>,
<<if $g.slave.isHasTail()>>
raising <<their $g.slave>> <<utail $g.slave>> and
<</if>>
<<if ($g.slave.isHasTrait('anus_gape'))>>pulling the dildo free of <<their $g.slave>> relaxed asshole, and replacing it with your
<<udickorstrap $unit.player>>
before its gape can close.
<<elseif ($g.slave.isHasTrait('anus_loose'))>>pulling the dildo free of <<their $g.slave>> loose anus, and replacing it with your
<<udickorstrap $unit.player>>
before its gape can close.
<<else>>pulling <<their $g.slave>> fingers free of <<their $g.slave>> tight little ass, and replacing them with your <<udickorstrap $unit.player>> while it's still relaxed.<</if>>
<<They $g.slave>> moans and pats around blindly with <<their $g.slave>> freed <<uhand $g.slave>> before finding your thigh and rubbing it affectionately.
<<They $g.slave>> steps up <<their $g.slave>> humping and soon shudders,
<<if $g.slave.isHasTrait('balls_huge')>>shooting a big jet of cum all over <<their $g.slave>> own chest and
<<elseif !$g.slave.isHasVagina()>>
orgasming messily onto
<<else>>
going limp and slumping down onto
<</if>>
the floor beneath <<them $g.slave>>.
When you climax soon after, <<they $g.slave>> expects you to get off <<them $g.slave>> so <<they $g.slave>> can clean up, but instead, the
<<if $unit.player.isHasDick()>>
cock up <<their $g.slave>> butt returns to rock hardness and
<<else>>
strap-on up <<their $g.slave>> butt
<</if>>
goes back to pumping in and out of <<their $g.slave>>.
<<They $g.slave>> slides a <<uhand $g.slave>> under <<themself $g.slave>> to
<<if !$g.slave.isHasVagina()>>jerk off<<else>>schlick <<themself $g.slave>><</if>>
this time.
When you finally finish, a long time later, the exhausted slave is lying on a bed wet with lube, <<if $unit.player.isHasDick() or $g.slave.isHasDick()>> ejaculate,<</if>>
<<if (!$unit.player.isHasDick()) or $g.slave.isHasVagina()>> <<girl $g.slave>>cum,<</if>>
drool, and sweat.
<<They $g.slave>> doesn't care, and you let <<their $g.slave>> curl up in <<their $g.slave>> sex-soaked nest. As you head over to your <<uslaverbed $g.slave>>, you think <<they $g.slave>>'s asleep already, but
<<if !$g.slave.isCanSee()>>as you go<<else>> <<their $g.slave>> <<ueyes $g.slave>> open a slit as you go and<</if>> <<they $g.slave>> murmurs,
"Thanks, <<Master $unit.player>>."
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<optif _condition>>
<<opt "Play into <<their $g.slave>> fetish at bedtime">>
<p>
<<They $g.slave>> starts with surprise when <<they $g.slave>> feels your <<uhands $unit.player>> seize <<them $g.slave>> by <<their $g.slave>> <<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>> shoulders,
<<if $g.slave.getMainTraining().getTags().includes('trobedience')>>
but <<they $g.slave>> relaxes into submissive compliance as you slide it up to the nape of <<their $g.slave>> neck, grinding <<their $g.slave>> face deeper into the pillow. <<They $g.slave>> gives muffled whines of happiness as you give <<them $g.slave>> some light spanks before using <<their $g.slave>> butt without regard for <<their $g.slave>> pleasure. <<They $g.slave>> does not climax, but when you roll <<their $g.slave>> unresisting body over to give <<their $g.slave>> <<umouth $g.slave>> and <<ubreasts $g.slave>> some attention, <<they $g.slave>>'s clearly enjoying <<themself $g.slave>>.
<<elseif $g.slave.getMainTraining().getTags().includes('troral')>>
but <<they $g.slave>> slave|is already licking <<their $g.slave>> lips with anticipation as you roll <<them $g.slave>> over and straddle <<their $g.slave>> chest so <<they $g.slave>> can
<<if $unit.player.isHasDick()>>
suck you off.
<</if>>
<<if $unit.player.isHasVagina()>>
eat you out.
<</if>>
The orally fixated slut concentrates on the oral to a fault, so you take <<their $g.slave>> <<uarms $g.slave>> and straddle them too so <<they $g.slave>> can reach <<themself $g.slave>> and get back to masturbating. <<They $g.slave>> hums happily, a very fine sensation on <<if $unit.player.isHasDick()>>shaft<</if>><<if $unit.player.isHasVagina()>>pussylips<</if>>.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
but <<they $g.slave>> eagerly complies as you pull <<them $g.slave>> up to kneel<<if $g.slave.isHasTail()>>,
raise <<their $g.slave>> <<utail $g.slave>><</if>>
and take an assfuck. You shove <<their $g.slave>> <<uarms $g.slave>> up over <<their $g.slave>> head to stop <<their $g.slave>> masturbation, confident that the anal whore can climax from nothing but your <<udickorstrap $unit.player>> pumping in and out of <<their $g.slave>> butt.
You're right, and <<their $g.slave>> sphincter tightens with orgasm even sooner than you expected it to. You roll <<their $g.slave>> over and go again,
<<if $g.slave.isInChastity()>>
the evidence of <<their $g.slave>> first orgasm leaking out from <<their $g.slave>> <<ucdick $g.slave>>.
<<elseif !$g.slave.isHasVagina()>>
<<their $g.slave>> hard dick scattering the evidence of <<their $g.slave>> orgasm around as it flops around with the buttsex.
<<else>>
<<their $g.slave>> pussy soaking wet with arousal.
<</if>>
<<elseif $g.slave.getMainTraining().getTags().includes('trdominance')>>
but <<they $g.slave>> keeps masturbating even as you flip <<their $g.slave>> over. You tell <<them $g.slave>> to keep going, and leave <<them $g.slave>> there for a moment. <<They $g.slave>> obeys, looking mystified, but is pleased to
<<if $g.slave.isCanSee()>>
see you return with another slave
<<else>>
hear your footsteps return accompanied by a second set
<</if>>.
You push the other <<girl $g.slave>> unceremoniously down onto <<name $g.slave>>, making <<them $g.slave>> give <<name $g.slave>> some oral while you roughly fuck <<their $g.slave>> ass. <<name $g.slave>> enjoys <<themself $g.slave>> immensely, jerking with pleasure every time you pound the poor <<girl $g.slave>> hard enough to make <<their $g.slave>> moan into <<name $g.slave>>.
<<elseif $g.slave.isMasochistic()>>
but <<they $g.slave>> relaxes into submissive compliance as you slide it up to the nape of <<their $g.slave>> neck, grinding <<their $g.slave>> face deeper into the floor. <<They $g.slave>> gives muffled whines of mixed pain and pleasure as you give <<their $g.slave>> some hard spanks before sodomizing <<their $g.slave>> right up to the edge of what <<their $g.slave>> poor anus can take without damage. <<They $g.slave>> climaxes repeatedly to the pain, screaming helplessly as <<their $g.slave>> orgasms force <<their $g.slave>> abused sphincter to tighten spastically against the phallus invading it.
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'plug_disobedience', /* key */
"Plug Disobedience", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_plug_disobedience',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.eq_plug_anus], true),
setup.qres.AnyTrait([setup.trait.training_obedience_basic, setup.trait.training_none], true),
setup.qres.NoTraits([setup.trait.anus_gape], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _eq = $g.slave.getEquipmentAt('rear')>>
<<if _eq>>
<<set _plug = _eq.rep()>>
<<else>>
<<set _plug = 'buttplug'>>
<</if>>
<p>
One morning, you see <<yourrep $g.slave>> <<if !$g.slave.isCanWalk()>>crawls
<<else>>
walks<</if>>
hurriedly past you, as though <<they $g.slave>> doesn't want you to notice <<them $g.slave>>. Of course, this only makes you notice <<them $g.slave>>, and you order <<them $g.slave>> to your attention. As <<they $g.slave>> reluctantly obeys, you notice something off about <<their $g.slave>> gait. <<They $g.slave>> should be quite uncomfortable from the
<<= _plug>>
<<they $g.slave>> is required to wear, but <<they $g.slave>> doesn't seem to be.
</p>
<p>
Your order <<them $g.slave>> to turn around and present <<their $g.slave>> anus for inspection. <<They $g.slave>> doesn't refuse, exactly, but neither does <<they $g.slave>> obey. <<They $g.slave>> keeps <<their $g.slave>> butt pointed resolutely away from you, and backs away a little. You cover the distance between you in three steps and run a clinical hand between the terrified slave's buttocks. As you suspected, <<they $g.slave>> isn't wearing <<their $g.slave>>
<<= _plug>>. <<if !$g.slave.isCanTalk()>><<They $g.slave>> gestures pitifully, complaining that the plug hurts.<<else>><<They $g.slave>> whines pitifully, "That thing hurts, <<Master $unit.player>>. It's too big for my asshole. Please don't make me wear it."<</if>>
</p>
<<choose>>
<<opt "It's <<their $g.slave>> role to hurt">>
<p>
Without a word, you<<if !$unit.player.isHasDick()>> don a cruelly knobby strap-on,<</if>> throw <<them $g.slave>> onto the <<uslaverbed $g.slave>>, take both <<their $g.slave>> ankles in one <<uhand $unit.player>>, and force them back over <<their $g.slave>> head so <<their $g.slave>> poor, doomed asshole is completely defenseless. You then spit on <<their $g.slave>> hole, seize your <<if !$unit.player.isHasDick()>>instrument<<else>>rock-hard dick<</if>>, and shove it up the wriggling slave <<girl $g.slave>>'s spasming rectum.
You've got the necessary skill to judge exactly where the line between anal pain and anal injury is, and you take <<them $g.slave>> right up to it.
Halfway through the long anal rape, <<they $g.slave>> gives up struggling and just goes limp, sobbing. <<They $g.slave>> fears you quite a bit now.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Punish <<them $g.slave>> for disobedience, but address <<their $g.slave>> anal pain">>
<<set _eq = $g.slave.getEquipmentAt('rear')>>
<<if _eq>>
<<set _plug = _eq.rep()>>
<<else>>
<<set _plug = 'buttplug'>>
<</if>>
<p>
You <<uadv $unit.player>> explain to <<them $g.slave>> that disobeying orders isn't acceptable, but that too much pain from <<their $g.slave>> <<= _plug>> is a sign that something isn't right. First, you inform <<them $g.slave>>, <<they $g.slave>> will have to be punished for the disobedience, since <<they $g.slave>> should have brought <<their $g.slave>> trouble to you instead of disobeying. <<They $g.slave>>'s almost willing as you bend <<them $g.slave>> over the <<uslaverbed $g.slave>> and spank <<their $g.slave>> buttocks severely, unsure whether to resent the corporal punishment or appreciate your measured response. When you're done tanning <<their $g.slave>> ass, <<they $g.slave>>'s surprised to feel a cool, lubricated digit working its way into <<their $g.slave>> anus. <<They $g.slave>> stiffens a little but eventually relaxes enough to take the finger, then two, and finally three, before you gently and slowly emplace <<their $g.slave>> <<= _plug>>. You instruct <<them $g.slave>> <<uadv $unit.player>> on how to relax in the future when <<they $g.slave>> inserts it on <<their $g.slave>> own.
</p>
<<opt "Address <<their $g.slave>> worrisome anal pain">>
<<set _eq = $g.slave.getEquipmentAt('rear')>>
<<if _eq>>
<<set _plug = _eq.rep()>>
<<else>>
<<set _plug = 'buttplug'>>
<</if>>
<p>
You <<uadv $unit.player>> explain how to relax and prepare one's asshole for such insertions. <<They $g.slave>>'s been told already, but you make <<them $g.slave>> fetch <<their $g.slave>> <<= _plug>> and go through the steps in front of you so you can check <<their $g.slave>> approach. <<They $g.slave>> leaves reminded how to wear <<their $g.slave>> <<= _plug>>, but secretly relieved <<they $g.slave>> got away with disobedience with nothing more than a lecture.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'pole_sex', /* key */
"Pole Sex", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_pole_sex',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.skill_entertain, setup.trait.bg_courtesan, setup.trait.bg_entertainer], true),
setup.qres.SlaveBedchamberHasFurniture(setup.item.f_object_master_pole),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you enter your bedchamber today, you are greeted with the sight of
<<yourrep $g.slave>> standing behind the <<uobject $g.slave>>.
<<if $g.slave.isHasTrait('bg_entertainer')>>
The pole reminds <<them $g.slave>> of <<their $g.slave>> past life as an entertainer, and then decides to give you a show.
<<elseif $g.slave.isHasTrait('bg_courtesan')>>
The pole is a reminder of <<their $g.slave>> past, servicing and dancing sexually for clients, and then decides to reenact the show.
<<elseif $g.slave.isHasTrait('skill_entertain')>>
The slave stares at the pole for a brief moment, before deciding to make good use of <<their $g.slave>> <<rep setup.trait.skill_entertain>> skills and give you a proper show.
<</if>>
<<They $g.slave>> reaches out to press <<their $g.slave>> palms against the pole, and runs them slowly up the frame, gradually stretching out <<their $g.slave>>
<<if $g.slave.isHasTrait('height_tall')>>tall<<elseif $g.slave.isHasTrait('height_short')>>short<</if>>
<<if $g.slave.isHasTrait('muscle_strong')>>muscular<</if>>
form.
<<They $g.slave>>'s good at this, so you let <<them $g.slave>> continue;
<<if !$g.slave.isNaked()>>
<<their $g.slave>> clothes rapidly form a pile at <<their $g.slave>> <<ufeet $g.slave>><<else>><<they $g.slave>>'s already naked
<</if>>.
<<They $g.slave>> begins to buck and bend, making sure to show you that <<they $g.slave>>'s
<<if $g.slave.isHasDick()>>rock hard at the prospect of getting fucked by
<<their $g.slave>>
<<master $unit.player>>.
<<else>>
wet for <<their $g.slave>>
<<master $unit.player>>.
<</if>>
</p>
<p>
Finally, <<they $g.slave>> pulls <<themself $g.slave>> over to the pole,
clasping it like a lover.
<<if $g.slave.isHasTrait('breast_huge')>>
<<They $g.slave>> nestles it between <<their $g.slave>> enormous tits,
forcing them apart,
<<elseif $g.slave.isHasTrait('breast_large')>><<They $g.slave>> presses <<their $g.slave>> big breasts against it laviciously, letting them pop around it one by one,
<<else>>
<<They $g.slave>> rubs <<their $g.slave>> <<ubreasts $g.slave>> against it, up and down,
<</if>>
and licks <<their $g.slave>>
lips
until they're so wet they leave a strand of saliva between <<their $g.slave>> <<umouth $g.slave>> and the pole.
<<They $g.slave>> then gives up all pretense and begins to openly grind
<<themself $g.slave>> against the pole,
<<their $g.slave>>
<<if $g.slave.isHasDick()>>erection leaving precum all along it.<<else>>pussy leaving moisture as <<they $g.slave>> humps it.<</if>>
<<They $g.slave>>'s certainly taking the colloquial term "fucked by <<rep $company.player>>" literally.
</p>
<p>
As if the invitation wasn't already blindingly clear, <<they $g.slave>>
<<if $g.slave.isHasTail()>>
raise <<their $g.slave>> <<utail $g.slave>>, before reaching
<<else>>
reaches
<</if>>
a <<uhand $g.slave>> down without pausing <<their $g.slave>> <<uobject $g.slave>> rape to massage <<their $g.slave>> butt.
<<They $g.slave>> pulls the buttock closest to you aside, giving you a clear view of <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>lewd anal slit<<elseif $g.slave.isHasTrait('anus_loose')>>loose asshole<<else>>tight anus<</if>>.
<<They $g.slave>> clenches it and relaxes it, clenches it and relaxes it, winking <<their $g.slave>> butthole at <<their $g.slave>> <<master $unit.player>> like a good anal slave.
</p>
<<choose>>
<<opt "Make butt love">>
<p>
There's a glint <<if $g.slave.isCanSee()>>on <<their $g.slave>> face as
<<they $g.slave>> hears<<else>>in <<their $g.slave>> eyes as <<they $g.slave>> sees<</if>>
you approach; <<if $g.slave.isHasTrait('height_tall')>>
<<they $g.slave>>'s tall enough for standing anal, so as you approach <<they $g.slave>> just turns <<their $g.slave>> head back to face the pole and cocks <<their $g.slave>> hips.<<elseif $g.slave.isHasTrait('height_short')>><<they $g.slave>>'s so short standing anal is a stretch, so as you approach <<them $g.slave>> goes up on tiptoe with one leg and runs the other up the wall, using it as support to hike <<their $g.slave>> ass as high as <<they $g.slave>> can manage.<<else>> as you approach, <<they $g.slave>> goes up on tiptoe to bring <<their $g.slave>> ass to just the right height for standing anal.<</if>>
You don't penetrate <<their $g.slave>> right away, though; you cup <<their $g.slave>> buttocks,
<<if $g.slave.isHasTail()>>
caress <<their $g.slave>> <<utail $g.slave>>,
<</if>>
briefly tease <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>gaping asshole<<elseif $g.slave.isHasTrait('anus_loose')>>ready asshole<<else>>inexperienced asshole<</if>> with one finger, and then run your hands around <<their $g.slave>> <<uwaist $g.slave>> and up <<their $g.slave>> <<ubelly $g.slave>> to rest <<if $g.slave.isHasTrait('breast_huge')>>buried under <<their $g.slave>> enormous breasts.<<elseif $g.slave.isHasTrait('breast_large')>>under <<their $g.slave>> heavy breasts<<elseif $g.slave.isHasBreasts()>>under <<their $g.slave>> the curve of <<their $g.slave>> breasts<<else>>against <<their $g.slave>> <<ubreasts $g.slave>><</if>>.
Despite <<their $g.slave>> poise <<they $g.slave>> sighs at your impromptu massage, gasps at your <<if $unit.player.isHasBreasts()>>erect nipples brushing<<else>><<ubreasts $unit.player>> pressing<</if>>
against <<their $g.slave>> back, and shudders when your
<<if !$unit.player.isHasDick()>>strap-on<<else>>stiff prick<</if>>
comes to rest between <<their $g.slave>> <<ulegs $g.slave>>.
You bring <<them $g.slave>> to a fine point of arousal, enjoying <<their $g.slave>> <<ubody $g.slave>>, pulling <<their $g.slave>> chin around to kiss <<their $g.slave>> lips. <<They $g.slave>>'s so ready that when you finally penetrate <<their $g.slave>>, <<they $g.slave>> orgasms slightly after one thrust, <<if $g.slave.isHasDick()>>spurting cum against<<else>>leaving a little girlcum on<</if>> the pole. <<Their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>tired sphincter clenches down to almost virgin tightness<<elseif $g.slave.isHasTrait('anus_loose')>>veteran sphincter tightens powerfully<<else>>tight sphincter tightens mercilessly<</if>> with the orgasm, eliciting a sob of overstimulation, which you draw into a series of sobs by slowly assfucking <<them $g.slave>> despite <<their $g.slave>> climax. You are <<if $unit.player.isHasTrait('per_cruel')>>rough<<else>>gentle<</if>> with <<their $g.slave>> butt, and continue teasing <<their $g.slave>> body, so that <<their $g.slave>> arousal builds again and <<they $g.slave>> manages to climax a second time when you do. You let <<them $g.slave>> out from between you and the pole to wash, and return to service, but when <<they $g.slave>> emerges from a quick trip to the bathroom <<they $g.slave>> kneels on the couch, spreads <<their $g.slave>> buttocks with one <<uhand $g.slave>>, <<if !$g.slave.isCanTalk()>>and <<uadv $g.slave>> asks for more.<<else>>asks <<uadv $g.slave>>, "More please, <<Master $unit.player>>."<</if>>
</p>
<<opt "Pound that ass">>
<p>
You choose your moment carefully, waiting until <<if $g.slave.isCanSee()>><<they $g.slave>> turns <<their $g.slave>> gaze away from you for an instant. When <<they $g.slave>> looks back, you were nowhere to be seen<<else>>the ambiant sound is loud enough for you to sneak up on <<their $g.slave>><</if>>; for all <<their $g.slave>> sexual poise <<they $g.slave>>'s surprised by the force of your <<if $unit.player.isHasBreasts()>>tits<<else>>chest<</if>> crashing into <<their $g.slave>> <<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>> back, forcing <<them $g.slave>> against the <<uobject $g.slave>>.
</p>
<p>
<<if $g.slave.isHasTrait('height_tall')>>
<<They $g.slave>>'s so tall <<their $g.slave>> butt is at the perfect height right where it is, so <<they $g.slave>> relaxes as much as possible, trapped against the pole.
<<elseif $g.slave.isHasTrait('height_short')>><<They $g.slave>>'s short enough that even tiptoes aren't enough, and you force <<their $g.slave>> up between you and the pole, pinning <<their $g.slave>> little <<ubody $g.slave>> helplessly in place.<<else>><<They $g.slave>> squirms up on tiptoes to get <<their $g.slave>> butt to the right height, trapped between you and the pole.<</if>>
<<if $g.slave.isHasTail()>>
<<They $g.slave>> obediently raise <<their $g.slave>> <<utail $g.slave>>, expecting you to penetrate <<them $g.slave>>.
<</if>>
None too soon, for the next thing <<they $g.slave>> feels is the discomfort of standing anal penetration, <<if $g.slave.isHasTrait('anus_gape')>>though it's nothing new to <<them $g.slave>><<elseif $g.slave.isHasTrait('anus_loose')>>veteran asshole notwithstanding<<else>>worsened by <<their $g.slave>> tight little sphincter<</if>>. You ravage <<their $g.slave>> ass hard from the first stroke, making it clear you're taking your pleasure, leaving <<their $g.slave>> nothing to do but cling to the pole and try to ride it out. At first <<they $g.slave>> slave|was squashed painfully against it, but <<they $g.slave>> manages to cock <<their $g.slave>> hips out at enough of an angle that <<they $g.slave>> can get back to <<if $g.slave.isHasDick()>>rubbing <<their $g.slave>> cock against it<<else>>humping <<their $g.slave>> pussy against it<</if>> for stimulation. <<Their $g.slave>> asshole eventually spasms in orgasm, but it's spasmed so frequently during the rough sodomy that you don't realize the slut came to having <<their $g.slave>> asshole savaged until <<if $g.slave.isHasDick()>>you notice the ejaculate running down <<their $g.slave>> leg<<else>>an aftershock almost makes <<their $g.slave>> legs give out<</if>>. You climax in triumph yourself before pulling the slave off the pole and flinging <<their $g.slave>> towards the bathroom to clean <<themself $g.slave>> up. When <<they $g.slave>> emerges, <<they $g.slave>> comes over to sit over quietly, looking up at you obediently, though you do notice <<they $g.slave>> sits to one side to take a bit of weight off <<their $g.slave>> poor rear.
</p>
<<optif $g.slave.isHasVagina()>>
<<opt "Pound that pussy">>
<p>
You choose your moment carefully, waiting until <<if $g.slave.isCanSee()>><<they $g.slave>> turns <<their $g.slave>> gaze away from you for an instant. When <<they $g.slave>> looks back, you are nowhere to be seen<<else>>the ambiant sound is loud enough for you to sneak up on <<their $g.slave>><</if>>; for all <<their $g.slave>> sexual poise <<they $g.slave>>'s surprised by the force of your <<if $unit.player.isHasBreasts()>>tits<<else>>chest<</if>> crashing into <<their $g.slave>> <<if $g.slave.isHasTrait('muscle_extremelystrong')>>ripped<<elseif $g.slave.isHasTrait('muscle_verystrong')>>muscular<<elseif $g.slave.isHasTrait('muscle_strong')>>toned<<else>>soft<</if>> back, forcing <<them $g.slave>> against the <<uobject $g.slave>>. <<if $g.slave.isHasTrait('height_tall')>><<They $g.slave>>'s so tall <<their $g.slave>> butt is at the perfect height right where it is, so <<they $g.slave>> relaxes as much as possible, trapped against the pole.<<elseif $g.slave.isHasTrait('height_short')>><<They $g.slave>>'s short enough that even tiptoes aren't enough, and you force <<their $g.slave>> up between you and the pole, pinning <<their $g.slave>> little body helplessly in place.<<else>><<They $g.slave>> squirms up on tiptoes to get <<their $g.slave>> hips to the right height, trapped between you and the pole.<</if>>
<<if $g.slave.isHasTail()>>
<<They $g.slave>> obediently raise <<their $g.slave>> <<utail $g.slave>>, expecting you to penetrate <<them $g.slave>>.
<</if>>
None too soon, for the next thing <<they $g.slave>> feels is the pleasure of standing vaginal penetration, <<if $g.slave.isHasTrait('vagina_gape')>>though it's nothing new to <<their $g.slave>><<elseif $g.slave.isHasTrait('vagina_loose')>>veteran pussy notwithstanding<<else>>inserting slowly into <<their $g.slave>> still-tight pussy<</if>>. You pump <<their $g.slave>> hard from the first stroke, making it clear you're taking your pleasure, leaving <<their $g.slave>> nothing to do but cling to the pool and try to ride it out. At first <<they $g.slave>> slave|was squashed painfully against it, but <<they $g.slave>> manages to cock <<their $g.slave>> hips out at enough of an angle that <<they $g.slave>> can get back to <<if $g.slave.isHasDick()>>rubbing <<their $g.slave>> cock against it<<else>>humping <<their $g.slave>> abdomen against it<</if>>. <<They $g.slave>> eventually shudders and spasms in orgasm, <<their $g.slave>> legs almost give out making obvious <<their $g.slave>> pleasure in getting <<their $g.slave>> pussy fucked by you. You climax in triumph yourself before pulling the bitch off the pool and flinging <<their $g.slave>> towards the bathroom to clean <<themself $g.slave>> up. When <<they $g.slave>> emerges, <<they $g.slave>> comes over to sit quietly, looking up at you obediently.
</p>
<</choose>><<run new setup.UnitGroup(
"rioter_for_sale1",
"Rioter",
'forest_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTraitsRandom('unit', [setup.trait.per_slow, setup.trait.per_stubborn, setup.trait.per_direct, setup.trait.per_brave], 2, true, false),
],
)>>
<<run new setup.Event(
'rioter_for_sale', /* key */
"Rioter for Sale", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_rioter_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'slave': 'rioter_for_sale1',
},
[ /* outcomes */
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
setup.qc.Slave('slave', "damaged the property of an influential citizen in the Neko Port City during a protest and got enslaved to pay off a|their debts", true, 0.8),
setup.qc.TraitReplace('slave', setup.trait.face_attractive),
setup.qc.IfThenElse(
setup.qres.Actor('slave', setup.qres.AllTraits([setup.trait.gender_male], true)),
setup.qc.DoAll([
setup.qc.TraitReplace('slave', setup.trait.muscle_strong)
], undefined),
setup.qc.DoAll([
setup.qc.TraitReplace('slave', setup.trait.muscle_thin)
], undefined)),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
setup.qres.FavorAtLeast('bank', 300),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
Today's merchandise originated from the <<lore region_city>>.
As it turns out, some "liberal-minded" citizens led protest some time ago in the upper class district of the city. Seems to have been against slavery, for environmentalism, or some other nonsense that you care not.
The really interesting thing is what happened during the protest.
Things became a bit unruly between protesters and some counter-protesters - and at some point rocks started to fly... all of which would barely be worth a mention, if the luxury residence of a certain wealthy citizen was not just right next to the street.
</p>
<p>
One broken window and smashed luxury glassware set,
someone was in big trouble. The peacekeepers of the city was summoned, and before long they identified a
<<if $g.slave.isMale()>>
good-looking <<urace $g.slave>>, well-muscled too,
<<else>>
pretty <<urace $g.slave>> with an attractive waist,
<</if>>
who immediately got arrested and was made to reimburse the damages.
<<They $g.slave>> slave|was not able to, and <<they $g.slave>> ended up being sold to the bank to cover the losses. While <<they $g.slave>> had little experiences as a slave, the bank's agent gave you a complete dossier regarding the results of a thorough strip-search (since all the officers agreed he 'had to be hiding something') and measurements, making you think that perhaps <<they $g.slave>> would make a decent slave after all.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'romeo_and_slave', /* key */
"Romeo and Slave", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_romeo_and_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.OnDuty('entertainmentslave'),
],
'blacksmith': setup.contacttemplate.blacksmithpeddler,
'lumberjack': setup.contacttemplate.furniturepeddler,
'tailor': setup.contacttemplate.tailorpeddler,
},
[ /* outcomes */
setup.qc.Opportunity('romeo_and_slave', {
you: "you",
slave: "slave",
blacksmith: 'blacksmith',
tailor: 'tailor',
lumberjack: 'lumberjack',
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Building(setup.buildingtemplate.workshop),
setup.qres.Building(setup.buildingtemplate.market),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
A tenant in your fort requests an interview. You can check the details in your mail room later...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'scrubbing', /* key */
"Scrubbing", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_scrubbing',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
setup.qres.OnDuty('maidslave'),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> slave|is assigned as to the <<rep setup.buildingtemplate.cleaning>>, and <<they $g.slave>> can often be seen cleaning by <<uhand $g.slave>> and scrubbing floors.
Which, incidentally, is what <<they $g.slave>>'s doing now.
<<They $g.slave>> has standing orders to change into a sturdy apron when doing such work, which <<they $g.slave>>
<<if $g.slave.isObedient()>>
wears proudly, even though
<<else>>
is not entirely pleased to follow, since
<</if>>
the apron has no back at all.
<<They $g.slave>>'s working diligently on the floor, though, down on all fours, to use both <<uhands $g.slave>> to work a scrub-brush back and forth.
<<Their $g.slave>> bare ass bobs back and forth as though <<they $g.slave>> slave|was doing it doggy style with an invisible <<woman $unit.player>>.
</p>
<<choose>>
<<opt "Use <<their $g.slave>> butt to help <<them $g.slave>> scrub">>
<p>
<<They $g.slave>> scrambles hurriedly to <<their $g.slave>> feet
when you enter and asks
<<if !$g.slave.isCanTalk()>>in gestures how <<they $g.slave>> can serve you.
<<else>>
<<uadv $g.slave>>, "<<Master $unit.player>>, how may I serve you?"
<</if>>
You instruct <<them $g.slave>> to go back to what <<they $g.slave>> slave|was doing. <<They $g.slave>> gets back to <<their $g.slave>> knees, puzzled, and then gasps when <<they $g.slave>> finds
<<if !$unit.player.isHasDick()>>your fingers<<else>>your cockhead<</if>>
pressing against <<their $g.slave>> <<uanus $g.slave>>.
You instruct <<them $g.slave>> <<uadv $unit.player>> to get on with it, and <<they $g.slave>> soon understands your intent.
<<They $g.slave>> scrubs back and forth, panting and moaning, as you buttfuck <<them $g.slave>> in time with <<their $g.slave>> labors<<if !$unit.player.isHasDick()>>, using your other <<uhand $unit.player>> to look after yourself<<else>>, using your other <<uhand $unit.player>> to shlick your pussy while you pound <<them $g.slave>><</if>>. You even carefully scoot along with <<them $g.slave>> when <<they $g.slave>> needs to reach new spots. By the time <<they $g.slave>>'s done <<their $g.slave>> <<uarms $g.slave>> and <<their $g.slave>> <<uanus $g.slave>> are very tired.
</p>
<<opt "Give <<their $g.slave>> a bigger mess to deal with">>
<p>
<<They $g.slave>> scrambles hurriedly to <<their $g.slave>> feet when you enter and asks <<if !$g.slave.isCanTalk()>>in gestures how <<they $g.slave>> can serve you.
<<else>>
<<uadv $g.slave>>, "<<Master $unit.player>>, how may I serve you?"
<</if>>
You instruct <<them $g.slave>> to strip off <<their $g.slave>> apron and lay <<their $g.slave>> back against the ground. <<They $g.slave>> does, and you empty a bottle of lubricant across <<their $g.slave>> entire body.
<<They $g.slave>> gasps from the cold fluid. You slide around on the floor with <<them $g.slave>>, playfully scrubbing <<their $g.slave>> <<ubody $g.slave>> around in the pool of lube, playing with <<their $g.slave>> wet <<ubreasts $g.slave>>
and <<their $g.slave>> lubricated thighs before
<<if !$unit.player.isHasDick()>>wrestling the slick slave onto <<their $g.slave>> back so you can ride <<their $g.slave>> face while reaching down to spread <<their $g.slave>> <<ulegs $g.slave>> and molest <<their $g.slave>> ass<<else>>sinking your cock into <<their $g.slave>> <<if !$g.slave.isHasVagina()>>now-slick butthole<<else>>now-slick pussy and then <<their $g.slave>> relaxing butthole<</if>><</if>>.
</p>
<</choose>><<run new setup.Event(
'slave_dick_on_slave', /* key */
"Slave Dick on Slave", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_slave_dick_on_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.AnyTrait([setup.trait.dick_tiny, setup.trait.dick_small, setup.trait.dick_medium, setup.trait.dick_large, setup.trait.dick_huge, setup.trait.dick_titanic], true),
setup.qres.IsCanOrgasm(),
setup.qres.BedchamberOtherSlave(setup.qres.And([
setup.qres.Available(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true)
])),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
Through the windows of your bedchamber, you see <<yourrep $g.slave>> fucking <<rep _o>> with <<their $g.slave>>
<<if $g.slave.isHasTrait('dick_titanic')>>
huge, horselike phallus.
<<elseif $g.slave.isHasTrait('dick_large')>>
long cock.
<<else>>
small penis.
<</if>>
Since you gave <<them $g.slave>> orders that permit <<them $g.slave>> to cum, <<they $g.slave>>'s been fucking <<rep _o>> whenever <<they $g.slave>> can. The other slave is
<<if $g.slave.isHasTrait('dick_titanic')>>
enjoying the big dick, even if <<they $g.slave>> does wince from time to time.
<<elseif $g.slave.isHasTrait('dick_large')>>
enjoying the sex.
<<else>>
enjoying <<themself $g.slave>> even though the dick in <<their $g.slave>> <<uhole $g.slave>> is a little disappointing.
<</if>>
<<if $g.slave.isHasTrait('balls_huge')>>
As <<name $g.slave>> pounds, <<their $g.slave>> big balls slap against <<their $g.slave>> partner.
<<else>>
As <<name $g.slave>> pounds, <<their $g.slave>> balls tighten, preparing to empty themselves.
<</if>>
</p>
<<choose>>
<<opt "Fuck the bottom">>
<<set _o = $g.slave.getBedchamberOtherSlave()>>
<<if !_o>>
/* Should not happen, but nice for testing: */
<<set _o = setup.getAnySlaver()>>
<</if>>
<p>
Since the other slave is riding <<name $g.slave>>'s dick, it's a trivial matter to
<<if !$unit.player.isHasDick()>>
don a strap-on,
<</if>>
come up behind the fucking slaves, stop the other slave's riding for a moment, and insert yourself into <<reps _o>> anus
<<if !_o.isHasVagina()>>
alongisde <<reps $g.slave>>
<</if>>
. <<Rep _o>>
<<if $g.slave.isHasTrait('dick_titanic')>>
struggles and begs for mercy as <<their _o>>
<<if _o.isHasVagina()>>
holes are
<<else>>
anus is
<</if>>
brutally stretched.
<<elseif $g.slave.isHasTrait('dick_large')>>
shrieks as <<they _o>> feels <<their _o>>
<<if _o.isHasVagina()>>
holes
<<else>>
anus
<</if>>
stretched by
<<if !$unit.player.isHasDick()>>
a strap-on and a cock
<<else>>
two cocks
<</if>>
.
<<else>>
gasps as your
<<udickorstrap $unit.player>> complements the small one.
<</if>>
The poor slave rides out the sexual storm as you and <<name $g.slave>> fuck <<them _o>>
<<if $unit.player.isHasVagina()>>
, your pussy sliding against the base of <<name $g.slave>>'s thrusting shaft
<</if>>
. <<name $g.slave>> flirts outrageously with you over the <<reps _o>> shoulder whenever <<they $g.slave>> can.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Fuck the top">>
<p>
Since <<name $g.slave>> is on top, it's a trivial matter to
<<if !$unit.player.isHasDick()>>
don a strap-on,
<</if>>
come up behind the fucking slaves, stop <<their $g.slave>> thrusting for a moment, and penetrate <<their $g.slave>> butthole.
<<if $g.slave.getMainTraining().getTags().includes('tranal')>>
<<They $g.slave>> shivers with delight as <<they $g.slave>> feels <<their $g.slave>> anal ring stretch to accommodate your
<<if !$unit.player.isHasDick()>>
strap-on
<<else>>
dick
<</if>>
.
<</if>>
Fucking a slave with prostate stimulation from your
<<if !$unit.player.isHasDick()>>
phallus
<<else>>
cock
<</if>>
in <<their $g.slave>> ass makes <<them $g.slave>> cum with indecent speed. You let <<them $g.slave>> slide down so <<they $g.slave>> can finish the other slave with <<their $g.slave>> <<umouth $g.slave>> while you continue using <<their $g.slave>> anus. <<Rep _o>> definitely enjoys <<name $g.slave>>'s moaning into <<their _o>> <<uhole _o>> as you use <<name $g.slave>>'s ass. The hard buttfucking <<name $g.slave>> is getting keeps <<their $g.slave>> dick stiff all the way through.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply(setup.costUnitHelper(_o))>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'something_to_say', /* key */
"Something to Say", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_something_to_say',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.FriendshipWithYouAtLeast(750),
setup.qres.Not(setup.qres.IsCanTalk()),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Rep $g.slave>> slave|is
<<if $g.slave.isCanWalk()>>
standing
<<else>>
crawling
<</if>>
before you for a regular play session.
<<if !$g.slave.isAllowedTalk()>>
<<They $g.slave>> slave|is studiously observing the letter of your rule against speaking, and
<<else>>
<<They $g.slave>> looks particularly uncomfortable with <<their $g.slave>> <<ucmouth $g.slave>> today, but
<</if>>
is doing <<their $g.slave>> best to make your play as enjoyable as possible. <<Their $g.slave>> desire to please radiates off <<them $g.slave>> in almost palpable waves. <<They $g.slave>> obviously wants to communicate something to you, but can't do it
<<if !$g.slave.isAllowedTalk()>>
without breaking the rules.
<<else>>
with the <<ucmouth $g.slave>> in the way.
<</if>>
</p>
<<choose>>
<<opt "Let <<them $g.slave>> speak briefly if <<they $g.slave>>'s very quiet">>
<p>
You stand up from your <<uslaverbed $g.slave>> and approach <<them $g.slave>> very closely without touching <<them $g.slave>>. Looking straight into <<their $g.slave>> eyes, which are
<<if $g.slave.isCanSee()>>fixed helplessly on you,<<else>>
covered by <<their $g.slave>> <<uceyes $g.slave>>,
<</if>>
you tell <<them $g.slave>> that you'll let <<them $g.slave>> say whatever it is <<they $g.slave>> needs to say to you, but only if <<they $g.slave>>'s very quiet.
<<ustripmouth $g.slave>>
<<They $g.slave>> <<if $g.slave.isCanSee()>>looks at you with huge eyes but<</if>> nods vigorously. <<They $g.slave>> waits until you lean into <<them $g.slave>>, making <<them $g.slave>> shiver at your proximity, before putting <<their $g.slave>> lips next to your ear and whispering nervously, "I love you, <<Master $unit.player>>."
<<They $g.slave>> recoils a little as if burned by the audacity of <<their $g.slave>> words, but only manages to back off a little before you gather <<their $g.slave>> rocking torso into your <<uarms $unit.player>>,
holding the back of <<their $g.slave>> head with one <<uhand $unit.player>> and rubbing <<their $g.slave>> quivering back with the other. Eventually, <<they $g.slave>> relaxes into <<if $unit.player.isHasBreasts()>>your soft chest<<else>>you<</if>>, knowing that <<their $g.slave>> <<master $unit.player>> can never and will never reciprocate, but accepting that the loving physical contact is a tremendously kind gesture for a master to make.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Make <<them $g.slave>> say it in the fort square">>
<p>
Since you suspect you know what it is <<they $g.slave>> slave|want to say, you
lead <<them $g.slave>> by the <<uhand $g.slave>> onto the fort the square, busy with your slavers and visitors alike.
You tell <<them $g.slave>> quietly that <<they $g.slave>>'s to shout whatever it is <<they $g.slave>> wanted to say, if it's something everyone should hear;
otherwise <<they $g.slave>>'s to keep it to <<themself $g.slave>>.
<<ustripmouth $g.slave>>
<<They $g.slave>>
<<if $g.slave.isCanSee()>>looks around<<else>>listens<</if>> nervously, <<their $g.slave>> <<uskin $g.slave>> betraying a growing blush, before clearing <<their $g.slave>> throat twice, licking <<their $g.slave>> lips, and howling "I LOVE MY <<if $unit.player.isMale()>>MASTER<<else>>MISTRESS<</if>>" at the tops of <<their $g.slave>> lungs.
When this is out of <<them $g.slave>>, <<they $g.slave>> collapses a little, as though the pressure of holding it inside were propping <<them $g.slave>> up.
Many visitors around laughing at the fun, and your fellow slavers giving you discreet winks and quiet congratulations.
</p>
<<opt "Keep <<them $g.slave>> quiet but spend some time with <<them $g.slave>>">>
<p>
You announce that you're feeling like some quiet time. <<They $g.slave>> cannot keep <<if $g.slave.isCanSee()>>a gleam of humor out of <<their $g.slave>> eye<<else>>the corners of <<their $g.slave>> lips from rising slightly<</if>> at hearing 'quiet time,' and <<they $g.slave>> follows you <<if !$g.slave.isCanWalk()>>on all fours<</if>> happily enough. When <<they $g.slave>> <<if $g.slave.isCanSee()>>sees<<else>>realizes<</if>> you're headed to your bedroom <<they $g.slave>> begins to anticipate <<their $g.slave>> <<master $unit.player>>'s
<<udickorstrap $unit.player>>, but is surprised to find that instead of using <<them $g.slave>> you simply climb into <<uslaverbed $g.slave>> and pull <<them $g.slave>> under the sheets with you. <<They $g.slave>>'s almost disappointed, but after looking into your resting face for a while, nestles <<their $g.slave>> head onto your <<ubreasts $unit.player>> and goes to sleep with a look of contentment on <<their $g.slave>> face. When the two of you wake from your brief nap, you ask <<their $g.slave>> if <<they $g.slave>> has anything else to communicate to you. <<They $g.slave>> smiles sleepily and shakes <<their $g.slave>> head no.
</p>
<</choose>><<run new setup.Event(
'sore_ass', /* key */
"Sore Ass", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_sore_ass',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
setup.qres.OnDuty('analfuckholeslave'),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
One night, you see <<yourrep $g.slave>>walking a little funny, as though
<<they $g.slave>> has a sore butt from <<their $g.slave>> day hard at work as an <<rep setup.dutytemplate.analfuckholeslave>>.
You call <<them $g.slave>> over to inspect <<their $g.slave>> backdoor to see if <<they $g.slave>> needs extra doctor care,
and order <<them $g.slave>> to spread <<their $g.slave>> buttocks for you so you can examine <<their $g.slave>> anus.
Despite the relentless buttfucks that <<their $g.slave>> job entails, <<they $g.slave>> has already gotten quite used to it, and <<their $g.slave>> asshole is fine, just a little sore from a particularly hard buttfuck today.
<<They $g.slave>> complies with you, but as you probe <<them $g.slave>> gently with a finger,
<<if !$g.slave.isCanTalk()>>
<<they $g.slave>> gestures desperately, telling you <<their $g.slave>> butt hurts and asking you not to assfuck <<them $g.slave>>.
<<else>>
<<they $g.slave>> bursts out, "<<Master $unit.player>>, my butt is so sore! Please don't use my ass, <<Master $unit.player>>. Please."
<</if>>
</p>
<<choose>>
<<opt "Punish <<their $g.slave>>
ass for insolence">>
<p>
You inform <<them $g.slave>> sternly that you will ensure that <<they $g.slave>> is not permanently damaged, and that otherwise, <<they $g.slave>> is to take anal pain like a good buttslave. <<They $g.slave>> starts to beg and whine as you lean back in a chair and
<<if !$unit.player.isHasDick()>>
hold <<them $g.slave>> upside down on your chest so <<they $g.slave>> can lick your pussy while you use a dildo on <<their $g.slave>> ass.
<<else>>
set <<them $g.slave>> on your chest before reaching around to line your cock up with <<their $g.slave>> sore hole. <<They $g.slave>> shudders and writhes when you start pushing yourself inside.
<</if>>
You use hard pinches to <<their $g.slave>> nipples to punish <<their $g.slave>> whining, forcing <<them $g.slave>> to take a long, painful buttfuck in silence.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Give <<their $g.slave>>
some care">>
<p>
<<They $g.slave>>'s filled with anxiety as you lay <<them $g.slave>> face down on a nearby bench, but is surprised and reassured when <<they $g.slave>>'s penetrated not by a
<<if !$unit.player.isHasDick()>>
strap-on
<<else>>
turgid cock
<</if>>
but by a single gentle finger coated with something healing and cool. The healing salve takes the sharpness off the sore feeling, and will help get <<their $g.slave>> butt back into fucking shape.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'sore_shoulders', /* key */
"Sore Shoulders", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_sore_shoulders',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.muscle_strong),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Rep $g.slave>> slave|is one of your personal slaves, and you occasionally summon the obedient slave for an inspection.
The
<<if $g.slave.isHasTrait('muscle_extremelystrong')>>
heavily muscled
<<elseif $g.slave.isHasTrait('muscle_verystrong')>>
ripped
<<elseif $g.slave.isHasTrait('muscle_strong')>>
toned
<</if>>
is looking good, but as <<they $g.slave>> raises <<their $g.slave>>
<<uarms $g.slave>> over <<their $g.slave>> head to spin <<their $g.slave>> nude torso under your gaze, <<they $g.slave>> winces slightly.
<<if $g.slave.isCanSee()>>
<<Their $g.slave>> <<ueyes $g.slave>> flick up to see if you noticed,
and <<their $g.slave>> face falls a little when <<they $g.slave>> sees that you did. You raise one eyebrow, and the obedient slave explains <<themself $g.slave>>.
<<else>>
<<Their $g.slave>> <<uears $g.slave>> perk up to hear if you noticed. You clear your throat, startling <<their $g.slave>> and making <<their $g.slave>> explain <<themself $g.slave>>.
<</if>>
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> uses gestures to beg your pardon, and explains that yesterday was arm day for <<their $g.slave>>, and <<they $g.slave>> went out a little hard. <<Their $g.slave>> shoulders are a little sore, but <<they $g.slave>> gestures that <<they $g.slave>>'s all right.
<<else>>
"Sorry, <<Master $unit.player>>," <<they $g.slave>> says apologetically. "I'm okay. Yesterday was arm day for me, and I went out a little too hard. My shoulders are kinda sore, but I'm alright."
<</if>>
</p>
<<choose>>
<<opt "Make <<them $g.slave>> work it out">>
<p>
You tell <<their $g.slave>> to get ready to go into a <<uhand $g.slave>>stand.
<<They $g.slave>> looks puzzled, but anticipatory, and hurries to comply.
<<if $g.slave.isHasTrait('breast_huge')>>
<<They $g.slave>> has to be careful doing it, since <<their $g.slave>> huge boobs come down and almost smother the poor slave once <<they $g.slave>>'s inverted.
<</if>>
You get up from behind,
<<if !$unit.player.isHasDick()>>
don a strap-on,
<</if>> and stand behind <<their $g.slave>>.
You grab <<their $g.slave>> by the
<<if $g.slave.isHasTail()>>
tail,
<<else>>
ankles,
<</if>>
and
<<they $g.slave>>
<<if $g.slave.isFemale()>>
giggles self-consciously,
<<else>>
flexes self-consciously, while being
<</if>>
aware that in this position,
<<their $g.slave>>
<<if $g.slave.isHasVagina()>>
holes are on display pretty much as openly as they can possibly be.
<<else>>
butthole is on display pretty much as openly as it can possibly be.
<</if>>
<<They $g.slave>> groans with soreness as you lift <<them $g.slave>> by
<<their $g.slave>> <<ulegs $g.slave>>,
pulling <<them $g.slave>> upward until <<they $g.slave>>'s in a full <<uhand $g.slave>>stand, <<their $g.slave>> knees clasping you on either side to steady <<them $g.slave>>. Carefully, you maneuver your
<<if !$unit.player.isHasDick()>>phallus<<else>>cock<</if>> to line it up with <<their $g.slave>> <<if $g.slave.isHasVagina()>>pussy<<else>>asspussy<</if>>.
Realizing what you intend, <<they $g.slave>> arches <<their $g.slave>> back and cocks <<their $g.slave>> hips,
grunting and shivering as <<their $g.slave>> sore muscles stretch to support <<their $g.slave>> in the necessary gymnastic pose to angle <<their $g.slave>> hole just right.
</p>
<p>
With the combined pain and pleasure of the stretch already overstimulating <<their $g.slave>>, <<they $g.slave>> gives a
<<if $g.slave.isFemale()>>
huge sobbing gasp
<<else>>
huge stoical moan
<</if>>
as you enter <<them $g.slave>>.
You move your <<uhands $unit.player>> to <<their $g.slave>>
well-muscled hips one at a time, and then begin to slowly move
<<their $g.slave>> inverted body towards you and away from you, impaling
<<them $g.slave>>.
<<Their $g.slave>> whole body shakes with pleasure and exertion, and when
<<they $g.slave>> orgasms, you have to support <<them $g.slave>> to stop <<them $g.slave>> crashing to the ground.
You let <<them $g.slave>> down onto the floor slowly<<if $g.slave.isHasVagina()>>, but tell <<them $g.slave>> that after a short break, <<they $g.slave>>'s to get back up so you can see to <<their $g.slave>> anus<</if>>.
<<They $g.slave>>'s breathing very hard and still coming down off a terrific head rush, so <<they $g.slave>> just nods tiredly, <<their $g.slave>> fear of you increases slightly.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Give <<them $g.slave>> a massage">>
<p>
You vault your <<uslaverbed $g.slave>>,
fold yourself into a crosslegged pose with your back against its front,
<<if $g.slave.isCanSee()>>
and point to the floor in front of you.<<if $unit.player.isHasBreasts()>> (As you do, <<they $g.slave>> watches the effects of the motion on your <<ubreasts $unit.player>> with something like reverence.)<<elseif $unit.player.isHasTrait('muscle_strong')>> (As you did, <<they $g.slave>> took in the powerful play of your muscles with something like reverence.)<</if>>
<<else>>
and loudly tap the floor in front of you.
<</if>>
<<They $g.slave>> hurries over and gets down on the floor with you, conforming to your manual guidance that <<they $g.slave>> should sit with <<their $g.slave>> back to you. You place your <<uhands $unit.player>> on either side of <<their $g.slave>> <<uneck $g.slave>>, run them capably down <<their $g.slave>> spine, and then back up to explore <<their $g.slave>> shoulders. <<They $g.slave>> gasps as <<they $g.slave>> realizes that you intend to give <<them $g.slave>> a massage, impressed and a little perturbed that you would do this for <<them $g.slave>>.
Indeed, it's unusual for a slaver to do something like this, but it's easily justifiable as hands-on maintenance of your property. You tell <<their $g.slave>> so as your fingers begin to probe <<their $g.slave>> muscles in more detail, eliciting a shiver<<if !$g.slave.isCanTalk()>>.<<else>> and a tiny "Yes, <<Master $unit.player>>."<</if>> <<They $g.slave>> begins to breathe rather hard, and you notice
<<if $g.slave.isHasDick()>>
<<them $g.slave>> starting to shift <<their $g.slave>> hips uncomfortably,
<<if $g.slave.isInChastity()>>
<<their $g.slave>> cock pressing hard against <<their $g.slave>> <<ucdick $g.slave>>.
<<else>>
<<their $g.slave>> cock almost agonizingly hard.
<</if>>
<<else>>
the wonderful aroma of female arousal beginning to permeate the office as <<they $g.slave>> starts to shift <<their $g.slave>> hips uncomfortably.
<</if>>
</p>
<<choose>>
<<opt "Tell <<them $g.slave>> <<they $g.slave>>'s free to masturbate">>
<p>
You lean forward until your lips graze one of <<their $g.slave>> <<uears $g.slave>>, and tell <<them $g.slave>> that <<they $g.slave>> can touch <<themself $g.slave>> if <<they $g.slave>> wants.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> raises a shaky <<uhand $g.slave>> to gesture <<their $g.slave>> thanks
as the other
<<else>>"Thank you <<Master $unit.player>>!"
<<they $g.slave>>
<<if $g.slave.isFemale()>>
squeaks
<<else>>
says
<</if>>
as a <<uhand $g.slave>>
<</if>>
dives for <<their $g.slave>> crotch.
<<They $g.slave>>
<<if $g.slave.isInChastity()>>
rubs <<their $g.slave>> anus
<<elseif $g.slave.isHasVagina()>>
shlicks <<themself $g.slave>>
<<else>>
jacks off
<</if>>
shamelessly as you complete the massage, moaning with satisfaction as the competing sources of endorphins suffuse <<them $g.slave>>. <<Their $g.slave>> trust in you increases.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Fuck <<them $g.slave>>">>
<p>
You <<uadv $unit.player>> push <<their $g.slave>> shoulders forward.
<<They $g.slave>> moans as the forward lean stretches <<their $g.slave>> hip flexors, and then breathes deeply with relief as you pull <<their $g.slave>> <<ulegs $g.slave>> back and out of their crossed position<<if $g.slave.isHasTail()>> and raise <<their $g.slave>> <<utail $g.slave>><</if>>. The rush of a completed stretch crashes into <<them $g.slave>>, and <<they $g.slave>> relaxes completely.
This change of position leaves <<them $g.slave>> with <<their $g.slave>> rear pointed right at you, and <<they $g.slave>> knows what's coming next. <<Their $g.slave>>
<<if $g.slave.isHasTrait('anus_gape')>>
loose butthole relaxes completely into a gape that positively begs to be penetrated
<<elseif $g.slave.isHasTrait('anus_loose')>>
relaxed anus opens into a slight gape that positively begs to be penetrated
<<else>>tight anus relaxes slightly, <<their $g.slave>> rosebud begging to be fucked<</if>>.
You rise partway to kneel behind <<them $g.slave>>, <<if !$unit.player.isHasDick()>>sliding fingers inside the slave's ass and humping your pussy against the heel of that hand<<else>>using a <<uhand $unit.player>> to guide your member inside the slave's ass<<if $unit.player.isHasVagina()>>, not without teasing your own pussylips a bit<</if>><</if>>.
<<They $g.slave>> gasps when your other <<uhand $unit.player>> grabs one of <<their $g.slave>> shoulders and continues the massage. You quickly find that working out a knot in <<their $g.slave>> muscles produces reflexive reactions across <<their $g.slave>> whole body, notably including <<their $g.slave>> anal sphincter. After you've driven <<them $g.slave>> into a state of mindless satiation and climaxed yourself, you let <<them $g.slave>> slump to the <<utile $g.slave>> and curl up around <<their $g.slave>> sweaty body.
</p>
<</choose>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'standard_punishment', /* key */
"Standard Punishment", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_standard_punishment',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_none, setup.trait.training_obedience_basic], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Rep $g.slave>> slave|is still not fully broken, and still require a lot of punishing.
In fact, <<they $g.slave>> <<upunishreason $g.slave>> just now, and you should think of an appropriate punishment for that.
</p>
<<choose>>
<<opt "Confine <<them $g.slave>> firmly but fairly">>
<p>
One of the dungeon cells have been modified into a tiny little cubicles designed for the purpose of confining disobedient slaves. You order <<name $g.slave>> into one of these. <<They $g.slave>> obeys,
<<if $g.slave.isHasTrait('training_obedience_basic')>>
knowing <<they $g.slave>> deserves punishment and eager to get it over with.
<<elseif $friendship.getFriendship($unit.player, $g.slave) <= -500>>
if only out of terror, knowing <<they $g.slave>>'ll make <<their $g.slave>> situation far worse if <<they $g.slave>> doesn't.
<<else>>
warily, willing to go along until something worth real resistance happens.
<</if>>
Restraints are installed within the cell;
you use these to secure <<them $g.slave>> to the wall, preventing <<them $g.slave>> from doing anything to relieve boredom in the tiny space. You restate the rule <<they $g.slave>> broke, state the length of <<their $g.slave>> punishment,
and remonstrate firmly with <<them $g.slave>> before closing the cell door.
As it shuts on <<them $g.slave>>, plunging <<them $g.slave>> into darkness, you hear <<if $g.slave.isCanTalk()>><<them $g.slave>> try at an apology in a tiny voice<<else>>a sad little intake of breath<</if>>.
You're there to let <<their $g.slave>> out after a reasonable time, and <<they $g.slave>> exits the soft little cell with relief.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Confine <<them $g.slave>> cruelly">>
<p>
The dungeon cells are for good and well-behaving cells, and for misbehaving ones you have empty boxes designed for a very specific purpose. You order <<name $g.slave>> to the dungeons, and direct a box to be brought one of the cells.
<<They $g.slave>> begins to <<if $g.slave.isFemale()>>cry<<else>>resist<</if>> when <<they $g.slave>> sees it,
<<if $g.slave.isHasTrait('training_obedience_basic')>>
but obediently gets inside, not wanting <<their $g.slave>> punishment to be extended. <<Their $g.slave>> obedience notwithstanding,
<<elseif $friendship.getFriendship($unit.player, $g.slave) <= -500>>
but desperately hurries to get inside, terrified that you might extend <<their $g.slave>> sentence. <<Their $g.slave>> obedience notwithstanding,
<<else>>
making no move towards it. <<They $g.slave>> knows that active resistance will merely extend <<their $g.slave>> sentence, and lets you stuff <<their $g.slave>> sobbing <<ubody $g.slave>> inside. Once <<they $g.slave>>'s in,
<</if>>
<<if $g.slave.isCanTalk()>><<they $g.slave>> begs tearfully<<else>><<they $g.slave>> uses <<their $g.slave>> <<uhands $g.slave>> to supplicate you<</if>>
as you close the lid with exquisite slowness.
The harshest thing you do is keep silent, not giving <<them $g.slave>> any indication of when <<they $g.slave>>'s getting out. When you finally let <<them $g.slave>> out, <<they $g.slave>>'s
almost crazy with fear of ever going back in the box and, for now, willing to do almost anything to avoid it.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Give <<them $g.slave>> a solid whipping">>
<p>
You order <<their $g.slave>> to one of the dungeon cells, and secure <<their $g.slave>> <<uhands $g.slave>> to one of the restraints hanging from the ceiling. <<They $g.slave>>
<<if $g.slave.isHasTrait('training_obedience_basic')>>
sobs with fear but obeys, obviously hoping you'll be reasonable.
<<elseif $friendship.getFriendship($unit.player, $g.slave) <= -500>>
starts to cry but doesn't let that stop <<their $g.slave>> from hurriedly obeying. <<They $g.slave>> knows that resistance will earn <<their $g.slave>> more strokes.
<<else>>
breaks down and makes no move to obey, but does not resist as you take <<their $g.slave>> wrists in your <<uhands $unit.player>> and lift them into the restraints.
<</if>>
<<They $g.slave>> struggles a little to find <<their $g.slave>> balance, and is distracted when the first stroke lands on <<their $g.slave>> buttocks. Your leather instrument is designed to produce pain without breaking the <<uskin $g.slave>> or leaving a permanent mark.
You tell <<them $g.slave>> to count, and <<they $g.slave>> <<if $g.slave.isCanTalk()>>gasps "one" through <<their $g.slave>> agony<<else>>sticks up one finger despite <<their $g.slave>> restrained <<uhands $g.slave>><</if>>. You flog <<their $g.slave>> bottom until it's pleasantly warm to the touch, and then let <<them $g.slave>> down. <<They $g.slave>>'s relieved at your moderation.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Whip <<them $g.slave>> cruelly">>
<p>
You order <<their $g.slave>> to one of the dungeon cells, and secure <<their $g.slave>> <<uhands $g.slave>> to one of the restraints hanging from the ceiling. <<They $g.slave>>
<<if $g.slave.isHasTrait('training_obedience_basic')>>
sobs with fear but obeys, despite something in your tone that makes <<their $g.slave>> knees go weak with terror.
<<elseif $friendship.getFriendship($unit.player, $g.slave) <= -500>>
starts to cry but doesn't let that stop <<their $g.slave>> from hurriedly obeying. <<They $g.slave>> stumbles once, something in your tone that making <<their $g.slave>> knees go weak with terror.
<<else>>
breaks down and makes no move to obey, but does not resist as you take <<their $g.slave>> wrists in your <<uhands $unit.player>> and hoist <<their $g.slave>> into the restraints.
<</if>>
You let <<them $g.slave>> anticipate the pain for a long time before you start whipping <<their $g.slave>> buttocks. Your leather instrument is designed to produce pain without breaking the <<uskin $g.slave>> or leaving a permanent mark, and you make cruel use of it. After a short preliminary asswhipping, you vary your strokes, letting <<them $g.slave>> feel the whip on <<their $g.slave>> thighs, calves and flanks before placing strokes against <<their $g.slave>> <<if $g.slave.isHasDick()>>poor ballsack<<else>>poor pussy<</if>>.
<<They $g.slave>> loses all control, <<if $g.slave.isCanTalk()>>shamelessly begging for mercy.<<else>>rasping pathetic little sobs past <<their $g.slave>>
<<ucmouth $g.slave>>.<</if>>
When you're done, <<they $g.slave>>'s almost crazy with fea of future whippings.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Restrain <<them $g.slave>> in your office">>
<p>
Planning to use chastity as a punishment, you bring <<them $g.slave>> into your office to supervise the denial and restrain <<them $g.slave>> standing, <<uhands $g.slave>> over <<their $g.slave>> head in one of the makeshift shackles set high on the walls, facing out so <<they $g.slave>> can see everything that goes on in your office.
You gag <<them $g.slave>> securely, not wanting your work disturbed by unseemly noises. Then you ignore <<them $g.slave>>.
<<if $g.slave.isHasTrait('per_lustful')>>
<<Their $g.slave>> sex drive makes this a torture for <<them $g.slave>>; <</if>> <<they $g.slave>> watches everything that happens in the office with desperate longing. Before long,
<<if $g.slave.isHasTrait('training_obedience_basic')>>
<<They $g.slave>>'s used to the idea of sexual slavery, and inevitably sees people <<they $g.slave>> finds attractive doing things <<they $g.slave>> considers sexy in the office. Before long,
<<else>>
<<They $g.slave>>'s not comfortable with sexual slavery, but the unusually sexually heavy atmosphere of the work today affects even <<them $g.slave>>. After a few hours,
<</if>>
<<they $g.slave>>'s quite horny. Restrained as <<they $g.slave>> is, <<they $g.slave>> can't hide
<<if $g.slave.isHasDick()>>
<<their $g.slave>> <<if $g.slave.isHasTrait('dick_large')>>prominent<<elseif $g.slave.isHasTrait('dick_medium')>><<else>>pathetic<</if>> erection,
<<else>>
how flushed and eager <<their $g.slave>> cunt is,<</if>>
<<if $g.slave.isHasTrait('training_obedience_basic')>>
even if <<they $g.slave>> wanted to.
<<else>>
though <<they $g.slave>> seems to want to.
<</if>>.
Satisfied that <<they $g.slave>>'s been tormented enough for today, you let <<them $g.slave>> down and send <<them $g.slave>> on <<their $g.slave>> way back to your bedchamber.
<<They $g.slave>>'s obviously more willing than usual to apply <<themself $g.slave>> to <<their $g.slave>> next sexual task, whatever it is.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Punish <<their $g.slave>> ass">>
<p>
Deciding that the most appropriate punishment is some corrective assrape, you shove the slave to <<their $g.slave>> knees<<if $g.slave.isHasTail()>>, raise <<their $g.slave>> <<utail $g.slave>>,<</if>> and stuff <<if $unit.player.isHasDick()>>your cock<<else>>a formidable dildo<</if>> up <<their $g.slave>>
<<if $g.slave.isHasTrait('anus_gape')>>
big butthole. It slides right in, the slave's relaxed sphincter offering no resistance. Announcing that you'll find <<their $g.slave>> limits, wherever they are, you insert fingers until it's cruelly stretched and you're almost jerking <<if $unit.player.isHasDick()>>yourself<<else>>the phallus<</if>> off inside <<them $g.slave>>.
<<elseif $g.slave.isHasTrait('anus_loose')>>
defenseless asshole. You meet some delicious resistance and push past it, enjoying the feeling of the slave's sphincter spasming as you do. You pound <<them $g.slave>> hard, much harder than <<they $g.slave>> can comfortably take it up the ass.
<<else>>
tight hole. <<Their $g.slave>> poor little anus doesn't want to let you in, but you force yourself in anyway, making the slave wriggle desperately beneath you as <<they $g.slave>> feels the invading phallus force <<their $g.slave>> anal ring to accommodate its girth.
<</if>>
You recite the rules as you assfuck the slave, but the slave below you is too discomfited by anal pain to respond coherently. Still,<<they $g.slave>> gets the message.
</p>
<<optif $g.slave.isHasVagina()>>
<<opt "Punish <<their $g.slave>> pussy">>
<p>
Deciding that the most appropriate punishment is some corrective rape, you push the slave down on <<their $g.slave>> back and shove <<if $unit.player.isHasDick()>>your cock<<else>>a formidable dildo<</if>> inside <<their $g.slave>>
<<if $g.slave.isHasTrait('vagina_gape')>>
roomy cunt, which can take it easily. Announcing that you'll find <<their $g.slave>> limits, wherever they are, you insert fingers until <<they $g.slave>>'s cruelly stretched and you're almost jerking <<if $unit.player.isHasDick()>>yourself<<else>>the phallus<</if>> off inside <<them $g.slave>>.
<<elseif $g.slave.isHasTrait('vagina_loose')>>
poor <<woman $g.slave>>hood. You fuck <<their $g.slave>> mercilessly, intentionally pulling out far enough that you have to spear <<their $g.slave>> again. You use <<their $g.slave>> poor <<ubreasts $g.slave>> as leverage, pulling against them to batter <<them $g.slave>> harder.
<<else>>
poor tight pussy. <<They $g.slave>>'s tight, and the initial penetration was uncomfortable for <<them $g.slave>>, but you make it worse by treating <<their $g.slave>> cunt like a veteran whore's. <<They $g.slave>> begins to struggle a little as you hammer <<them $g.slave>>.
<</if>>
You recite the rules as you assfuck the slave, but the slave below you is too discomfited to respond coherently. Still, <<they $g.slave>> gets the message.
</p>
<<opt "Punish <<their $g.slave>> mouth">>
<p>
Deciding that the most appropriate punishment is some corrective face-fuck,
you <<if $g.slave.isHasTrait('eq_collar')>>
grab <<them $g.slave>> by the <<ucneck $g.slave>> and pull<<else>>put a <<uhand $unit.player>> on <<their $g.slave>> shoulder and shove<</if>> <<them $g.slave>> to the ground. <<They $g.slave>> goes down without resistance, <<if $unit.player.isHasDick()>>already opening wide for your stiff prick.<<else>><<their $g.slave>> look of unconcern vanishing when <<they $g.slave>> sees you pulling out a strap-on. <<They $g.slave>> doesn't get to eat pussy today; today <<they $g.slave>> gets fucked in the face.<</if>> You shove it down <<their $g.slave>>
<<if $g.slave.getMainTraining().getTags().includes('troral')>>
eager throat. The cumslut loves giving oral, but soon realizes that you have no intention of letting <<them $g.slave>> love this. You rape <<their $g.slave>> face without mercy, hilting <<their $g.slave>> lips against <<if $unit.player.isHasDick()>>your base<<else>>the harness<</if>>.
<<else>>
gagging throat, enjoying the sensations of <<their $g.slave>> lips and tongue writhing against you as <<they $g.slave>> desperately tries to accommodate the intruder.
<</if>>
<<They $g.slave>> begins to struggle a little, so you snake a <<uhand $unit.player>> down behind <<their $g.slave>> head to hold <<them $g.slave>> in place. When you're done, <<they $g.slave>>'s an inelegant mess, coughing and gasping for air.
<<if $g.slave.isCanTalk()>>Once <<they $g.slave>>'s got <<their $g.slave>> breath back, <<they $g.slave>> <<else>>Even as <<they $g.slave>> pants, <<they $g.slave>> uses shaky gestures to beg forgiveness, and <<they $g.slave>> even<</if>> promises to be a better slave.
</p>
<</choose>><<run new setup.Event(
'sunbathing', /* key */
"Sunbathing", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_sunbathing',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.body_demon], true),
setup.qres.Available(),
setup.qres.FriendshipWithYouAtLeast(300),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.courtyard),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
It's an unusually nice day, with mild sunshine, light breezes, and nothing corruptive in the air.
In the middle of the afternoon, you take a break from your busy schedule and stroll out onto the <<rep setup.buildingtemplate.courtyard>>. It seems <<yourrep $g.slave>> was struck by a similar impulse.
<<set _duty = $g.slave.getDuty()>>
<<if _duty>>
<<They $g.slave>>'s assigned as your <<rep _duty>>, but this is one of <<their $g.slave>> rest periods,
<<else>>
<<They $g.slave>> is currently idle,
<</if>>
so <<they $g.slave>>'s come out there to lay naked on a towel and enjoy the sun.
<<if $g.slave.isHasTrait('body_werewolf') or $g.slave.isHasTrait('body_neko') or
$g.slave.isHasTrait('body_dragonkin')>>
Their <<uskin $g.slave>> doesn't tan like humans do, but it still feels nice to let them bask in the warmth of the sun.
<<elseif $g.slave.isHasTrait('body_orc')>>
Their green skin is quite resistant to the sun, having adapted to a life in the deserts, but it still feels nice to let them bask in the warmth of the sun.
<<elseif $g.slave.isHasTrait('subrace_humandesert')>>
Their naturally dark skin doesn't tan much, so <<they $g.slave>>'s just out here to bask in its warmth.
<<else>>
<<Their $g.slave>> skin shines with sunblock potion from a bottle lying next to <<them $g.slave>>. It would be foolish of <<them $g.slave>> to let the sun ruin <<their $g.slave>> <<uskin $g.slave>>.
<</if>>
</p>
<p>
<<They $g.slave>>'s lying on <<their $g.slave>> back with <<their $g.slave>> <<uarms $g.slave>> outstretched, <<their $g.slave>>
<<if $g.slave.isHasTrait('breast_titanic')>>
titanic breasts resting to either side. They're so enormous they touch the ground on either side of <<them $g.slave>>.
<<elseif $g.slave.isHasTrait('breast_large')>>heavy breasts resting to either side.
<<else>>
modest breasts resting a little to either side as <<their $g.slave>> chest rises and falls with <<their $g.slave>> breath.
<</if>>
<<They $g.slave>>'s relaxed and breathing slowly, and it isn't immediately clear if <<they $g.slave>>'s asleep or not.
<<They $g.slave>>'s not aroused, and <<their $g.slave>> nipples look pleasantly soft and warm in the sun.
As you consider <<their $g.slave>> radiant body, <<they $g.slave>> senses your presence, either realizing you're there through <<their $g.slave>> closed eyes or coming out of a light sleep at your proximity.
<<if $g.slave.isHasTrait('per_chaste')>>
<<They $g.slave>> shields <<their $g.slave>> <<ugenital $g.slave>> with <<their $g.slave>> <<uhands $g.slave>> before greeting you,
<<else>>
<<They $g.slave>> opens <<their $g.slave>> <<ueyes $g.slave>> a slit and stretches deliciously, arching <<their $g.slave>> back luxuriantly, and murmurs,
<</if>>
"Hi, <<name $unit.player>>."
</p>
<p>
<<if $unit.player.isHasTrait('per_chaste')>>
It's a little embarrasing, but somewhere in your mind, you think it might be fun
<<else>>
It looks very tempting
<</if>>
to enjoy the sunlight with <<therace $g.slave>> for a while, before going back to work. Or, you can just forget about today's work and go on a full sunbathing vacation for the day. You'll lose some money, but it'll be fun!
</p>
<<choose>>
<<opt "Enjoy the sunshine with <<them $g.slave>>">>
<p>
<<if $unit.player.isHasTrait('per_chaste')>>
Blushing a little,
<<else>>
Wordlessly,
<</if>>
you fetch a towel of your own. <<Yourrep $g.slave>> sees what you're doing, and simply closes <<their $g.slave>> eyes again. You strip and lie down next to <<them $g.slave>>. The sun is warm and gentle, and the interminable demands of leadership suddenly seem very far away. You drop off for a short while, only waking when the cloud finally hides the sun away. As you get your senses back, you notice that <<name $g.slave>> is right next to you. <<Their $g.slave>> eyes remain closed, and <<their $g.slave>> breath is steady; <<they $g.slave>>'s fast asleep. You consider waking the sun-warmed <<urace $g.slave>>, but then again days like this are quite rare. Who knows when the sun will be this nice again?
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Ditch your work for the day and go out for a day at the riverside">>
<p>
You suggest to <<yourrep $g.slave>> to ditch today's work altogether, and go to the pleasant riverside. Word starts to spread within your fort, and soon some other slavers have the idea to follow suit and go into the riverside. Once there, all they see is you and <<name $g.slave>> luxuriating on the towel spread over the riverside. As they arrive, they use their own towels before lining up with you one by one. After a long sunbathing session, you and your slavers have all relaxed from the simple, nonsexual pleasure of a little time in the sun.
</p>
<<run setup.qc.Money(-1500).apply($gQuest)>>
<<for _unit range $company.player.getUnits({job: setup.job.slaver}).filter(unit => unit.isAvailable())>>
<<run setup.qc.BoonizeRandom('unit', 2).apply(setup.costUnitHelper(_unit))>>
<</for>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'terrified_inspection', /* key */
"Terrified Inspection", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_terrified_inspection',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.FriendshipWithYouAtMost(-500),
setup.qres.TraitExact(setup.trait.training_obedience_basic),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you're about to retire to your bedchamber, you call over <<yourrep $g.slave>> for a routine inspection. <<They $g.slave>> hesitates after hearing your call, staring fixedly downward with huge <<ueyes $g.slave>>, before stumbling forward to stand in front of your <<uslaverbed $g.slave>>.
<<Their $g.slave>> chest is rising and falling with panicked hyperventilation<<if $g.slave.isHasTail()>>
and <<their $g.slave>> tail is stiffly erect<</if>>.
The poor <<woman $g.slave>> is terrified of you for some reason.
</p>
<p>
You let <<their $g.slave>> stand there naked and shivering while you relax on the bed for a while, finishing your plan for tomorrow's slaver assignments.
<<They $g.slave>> holds <<their $g.slave>> <<uhands $g.slave>> down at <<their $g.slave>> sides, just like <<they $g.slave>>'s supposed to, but they twitch inward occasionally, betraying <<their $g.slave>> desire to shield <<their $g.slave>> <<ubreasts $g.slave>> and <<if $g.slave.isHasTrait('dick_huge')>>big, limp dick<<elseif $g.slave.isHasDick()>>limp little prick<<else>>pussy<</if>> from your view. The wait gives license to <<their $g.slave>> fears. <<Their $g.slave>> lips are quivering, and tears are quickly gathering at the corners of <<their $g.slave>> eyes.
</p>
<<choose>>
<<opt "Confirm <<their $g.slave>> fears about you">>
<p>
<<if $g.slave.isCanSee()>>
You throw <<them $g.slave>> a black cloth bag and tell <<their $g.slave>> to put it over <<their $g.slave>> head.
<<They $g.slave>> obeys hurriedly, though <<they $g.slave>> cannot quite restrain <<their $g.slave>> tears from running down <<their $g.slave>> cheeks as <<they $g.slave>> dons the bag, blinding <<themself $g.slave>>.
<</if>>
<<They $g.slave>> trembles, blind and terrified, for several agonized minutes before a strangled sob escapes <<their $g.slave>>.
<<They $g.slave>> immediately cringes, expecting to be punished, but nothing happens. You let <<their $g.slave>> stand there for almost an hour, until you're sure <<they $g.slave>>'s let <<their $g.slave>> guard down, and then approach <<their $g.slave>> quietly. You consider <<their $g.slave>> <<ubody $g.slave>>, your personal property, carefully; and on careful consideration, you aim a vicious flick at <<their $g.slave>> <<if $g.slave.isHasTrait('balls_huge')>>nutsack<<elseif $g.slave.isHasDick()>>cockhead<<else>>one of <<their $g.slave>> nipples<</if>>.
A flick barely registers on the list of ways you can administer pain to a slave, but after so much sensory deprivation, it knocks <<their $g.slave>> halfway to the ground with a shriek of surprise and agony. <<They $g.slave>> crouches involuntarily, cherishing <<their $g.slave>> stinging <<if $g.slave.isHasTrait('balls_huge')>>testicles<<elseif $g.slave.isHasDick()>>prick<<else>>nipple<</if>> with both <<uhands $g.slave>>, sobbing.
You <<if $g.slave.isCanSee()>>pluck the bag off <<their $g.slave>> head and <</if>>tell <<them $g.slave>> to get away from your <<uslaverbed $g.slave>>.
<<They $g.slave>> half-walks, half-crawls away<<if $g.slave.isCanSee()>>, shielding <<their $g.slave>> eyes from the sudden brightness<</if>>, choking on <<their $g.slave>> tears.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Conduct a straightforward inspection">>
<p>
You order <<their $g.slave>> to spin slowly in place in a matter-of-fact tone of voice. <<They $g.slave>> does, <<if $g.slave.isHasTrait('dick_small')>><<their $g.slave>> soft dick waving a little with the motion<<elseif $g.slave.isHasTrait('breast_medium')>><<their $g.slave>> udders swaying a little with the motion<<elseif $g.slave.isHasTrait('muscle_strong')>><<their $g.slave>> abs playing across <<their $g.slave>> midsection as <<they $g.slave>> does<<else>><<their $g.slave>> trim rear catching your eye<</if>>. In the same straightforward tone, you ask about <<their $g.slave>> health. <<They $g.slave>> swallows nervously and stammers,
<<if $g.slave.isInjured()>>
"I, I don't feel very good,
<<else>>
"I, I feel healthy,
<</if>>
<<Master $unit.player>>."
</p>
<p>
You then conduct a more thorough inspection, from the top of <<their $g.slave>> head on down. <<They $g.slave>> complies submissively, obviously expecting to be abused at any moment. <<They $g.slave>> obediently <<if $g.slave.isHasTrait('breast_huge')>>lifts each of <<their $g.slave>> massive breasts one by one to display each of them from all angles.<<else>>opens <<their $g.slave>> <<umouth $g.slave>> and sticks out <<their $g.slave>> tongue on command.<</if>> <<They $g.slave>> even obeys an instruction to <<if $g.slave.isHasTrait('dick_small')>>take <<themself $g.slave>> by the dickhead and pull <<their $g.slave>> member flat up against <<their $g.slave>> abdomen.<<elseif $g.slave.isHasDick()>>take <<their $g.slave>> little dickhead between a thumb and forefinger and hold <<themself $g.slave>> out straight to reveal how tiny it really is.<<else>>spread <<their $g.slave>> pussylips to show off <<their $g.slave>> cunt.<</if>>
</p>
<p>
Finally the inspection reaches <<their $g.slave>> backdoor, so you tell <<them $g.slave>> to turn around, bend over, and pull <<their $g.slave>> buttocks apart as wide as <<they $g.slave>> can. <<They $g.slave>> tenses in fear, obviously expecting anal rape, but after a moment of hesitation, <<they $g.slave>> obeys. <<They $g.slave>> turns, bends, and uses <<their $g.slave>> <<uhands $g.slave>> to spread <<themself $g.slave>> even wider to show off <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>poor, overused asshole, which despite <<their $g.slave>> terror is still gaping a little.<<elseif $g.slave.isHasTrait('anus_loose')>><<their $g.slave>> asshole, which is clenched tight in terror.<<else>>invitingly tight asshole, which is clenched hard in terror.<</if>> Maintaining your neutral tone, you ask <<their $g.slave>> how <<they $g.slave>> feels about anal sex.
<<if $g.slave.isHasTraitExact('anus_tight')>>
"It's s-scary, M-<<master $unit.player>>. I'm afraid it'll h-hurt," <<they $g.slave>> gasps out.
<<elseif $g.slave.getMainTraining().getTags().includes('tranal')>>
"It's o-okay, M-<<master $unit.player>>. I d-don't hate it," <<they $g.slave>> gasps out.
<<elseif ($g.slave.isHasTrait('anus_gape'))>>
"It's not that bad, M-<<master $unit.player>>. I'm used to getting assfucked, I guess," <<they $g.slave>> says haltingly.
<<else>>
"I h-hate it, M-<<master $unit.player>>. I'm n-not used to it, and it hurts," <<they $g.slave>> gasps out.
<</if>>
Without another word, you tell <<their $g.slave>> <<they $g.slave>> can go back to the <<uslavebed $g.slave>>. <<They $g.slave>> looks around to gape uncomprehendingly at you for a moment before letting go of <<their $g.slave>> buttocks, straightening up, and fleeing, feeling rather mystified that you didn't use <<them $g.slave>>.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'unnaturally_thin_waist', /* key */
"Unnaturally Thin Waist", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_unnaturally_thin_waist',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.muscle_extremelythin], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> slave|is a real work of art.
As you pass by <<them $g.slave>> bathing and
carefully soaping every inch of <<their $g.slave>> <<uskin $g.slave>>,
you notice the undeniable eroticism created by the unnatural narrowness of
<<their $g.slave>> middle.
Though <<their $g.slave>> <<uhands $g.slave>> are by no means large, when <<they $g.slave>> slave|wash <<their $g.slave>> sides,
<<their $g.slave>> <<uhands $g.slave>> span almost the entire circumference of <<their $g.slave>> waist.
<<if $g.slave.isHasDick()>>
Though <<they $g.slave>> slave|is not sexually aroused,
<<their $g.slave>> cock is visible as <<they $g.slave>> bathes
<<themself $g.slave>>;
<<their $g.slave>> member and <<their $g.slave>> narrow waist work together to create a real melange of gender traits.
<<elseif $g.slave.isHasTrait('breast_large')>>
<<Their $g.slave>> massive bust works together to create a spectacular hourglass effect; <<They $g.slave>>'s a fantasy <<woman $g.slave>> made flesh.<<else>>The narrowness of <<their $g.slave>> waist accentuates <<their $g.slave>> features.<</if>>
</p>
<<choose>>
<<opt "Join <<them $g.slave>> and see if your <<uhands $unit.player>> can span <<their $g.slave>> waist">>
<p>
By the time you reach the shower,
<<yourrep $g.slave>> slave|is drying <<themself $g.slave>>.
<<They $g.slave>> slave|notice your approach and folds the piece of cloth <<they $g.slave>> slave|was using neatly before performing a little naked
pirouette that shows off <<their $g.slave>> unnatural curviness while displaying
<<if !$g.slave.isHasVagina()>><<their $g.slave>> slutty asshole.<<else>>each of <<their $g.slave>> delectable holes.<</if>>
You take <<them $g.slave>> about the waist and find that, indeed, you can make your thumbs and fingertips meet around it if you press, which elicits a squeak.
This can be applied during sex in many ways. First, <<they $g.slave>> slave|sit on the counter and slave|bend <<themself $g.slave>> almost double for anal.
Your control over the pace is perfected by your grip around <<their $g.slave>> tiny middle.
Finally, <<they $g.slave>> slave|go down on all fours for a hard buttfuck doggy style, losing <<themself $g.slave>> in the intense anal as you use your hold around <<them $g.slave>> to give it to <<them $g.slave>> even harder. By the end <<they $g.slave>> slave|is tired but confident in <<their $g.slave>> sexual uniqueness.
</p>
<<opt "Such a lovely work of art must be displayed">>
<p>
There is a small celebration tonight in your fort, and all your tenants are invited.
Many of your tenants and slavers are there to enjoy themselves, but even so, you make a stir as you enter with <<yourrep $g.slave>> on your arm,
fully displaying <<their $g.slave>> unnatural figure while leaving <<their $g.slave>> breasts, <<if $g.slave.isHasDick()>>cock,<<else>>pussy,<</if>> and butt lusciously bare.
Your appearance together with your living accessory earns an applause from your slavers and tenants. After a drink or two, those who remains engage in public sexual congress; You take <<yourrep $g.slave>> in a lotus position on one of the cleared table, face to face.
</p>
<</choose>><<run new setup.UnitGroup(
"used_angelic_slave_for_sale0",
"Fake Angel",
'subrace_humankingdom', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_tight),
setup.qc.TraitReplace('unit', setup.trait.anus_tight),
setup.qc.TraitReplace('unit', setup.trait.wings_angel),
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.face_attractive),
],
)>>
<<run new setup.Event(
'used_angelic_slave_for_sale', /* key */
"Used Angelic Slave For Sale", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_used_angelic_slave_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'man': 'all',
'slave': 'used_angelic_slave_for_sale0',
},
[ /* outcomes */
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
setup.qc.Slave('slave', "a|was the private slave of a con artist cult leader before being taken by the Tiger Bank repo-men", true, 0.8),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.FavorAtLeast('bank', 500),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
The current sale offer by the bank is a bit special.
Given how superstitious many folks in <<lore continent_main>> are, new cults tend to spring up like weeds in the continent, but all met its almost inevitable fate. Even with the most charismatic leader or starry-eyed idealism, the boundless greed in milking the followers usually put a sudden end to the various self-declared temples and places of worship.
These temples cost money to establish, and sometimes
the cult leader would made a hasty getaway, leaving the Tiger Bank creditors and conned believers behind. Repo men are sent out in force, carting off the contents of the 'house of worship' the cult leader kept.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
The contents of many boxes being carried out of there do have a certain perverted look to them, but they are not offered to your company. Instead, a <<if $g.slave.isMale()>>handsome<<else>>pretty<</if>> <<man $g.slave>> that must have been the cult leader's personal slave is offered. The slave certainly has a unique look, sporting an extremely rare angel wings, as well as possessing near virgin-tight holes. Just when you thought you would be able to get your <<uhands $unit.player>> on a relatively easy-to-get angel slave, <<yourrep _u>> points out that the slave is but a regular kingdomfolk, albeit with an extremely rare wing corruption. Should the slave become purified some time, the wings would revert back to nothingness.
</p><<run new setup.UnitGroup(
"used_housekeeper_for_sale0",
"Unused Housekeeper",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_tight),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_tight),
setup.qc.BgTraitReset('unit', setup.trait.bg_maid),
setup.qc.TraitReplace('unit', setup.trait.skill_entertain),
setup.qc.TraitReplace('unit', setup.trait.per_chaste),
],
)>>
<<run new setup.Event(
'used_housekeeper_for_sale', /* key */
"Used Housekeeper for Sale", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_used_housekeeper_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'slave': 'used_housekeeper_for_sale0',
'man': 'all',
},
[ /* outcomes */
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
setup.qc.Slave('slave', "a|was a slave being used as nothing but a regular maid before being sold to you", true, 0.8),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.FavorAtLeast('bank', 300),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
The current sale offer by the bank was taken from a business<<man $g.man>>'s house - one of the relatively higher income occupation in <<lore continent_main>>. <<They $g.man>>'s recently had fortune turn from <<them $g.man>> due to some unfortunate occurrences outside. The agent selling the slave doesn't say exactly which - some natural catastrophe, raiders, competing business or whatnot - one thing is for sure though, <<they $g.man>>'s in a financial pinch right now. All of which meant that <<their $g.man>> slave housekeeper was fair game to be taken and is now awaiting re-sale. As <<their $g.slave>> <<master $g.man>> never had any sexual interest in the slave, the <<man $g.slave>> is actually virgin-tight and used to the relatively cushy life of just watching the mansion. The fact that all of that ended from one day to the next has made <<them $g.slave>> quite afraid for <<their $g.slave>> future...
</p>
<p>
Should you wish to purchase the slave, <<they $g.slave>> slave|have been delivered to your
<<rep setup.buildingtemplate.slavepens>> for your inspection.
When you inspect <<them $g.slave>> there,
<<they $g.slave>> lowers <<their $g.slave>> head obediently and asks, "<<Master $unit.player>>, I - umm... what will be required of me? I'm really good with housework and... and I can sing. Also, I've -" The fearful tremble in <<their $g.slave>> voice tells you that <<they $g.slave>>'s more than a little afraid of what you might have planned for <<them $g.slave>>. Waving off the slave's frightened babbling, you tell <<them $g.slave>> that you'll decide what to do with <<them $g.slave>> should you decide to purchase <<them $g.slave>>.
</p><<run new setup.UnitGroup(
"used_maid_for_sale0",
"Repoed Maid",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_maid),
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_gape),
setup.qc.TraitReplace('unit', setup.trait.face_attractive),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_domestic_basic),
setup.qc.TraitReplace('unit', setup.trait.per_lustful),
setup.qc.Injury('unit', 4),
],
)>>
<<run new setup.Event(
'used_maid_for_sale', /* key */
"Used Maid for Sale", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_used_maid_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'maid': 'used_maid_for_sale0',
},
[ /* outcomes */
setup.qc.Slave('maid', "a|was a housekeeper and fucktoy of a dormitory before being collected by the Tiger Bank repo-men and sold to you", true, 0.8),
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.FavorAtLeast('bank', 300),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
The current sale offer by the bank was taken from a dormitory-house - apparently the people renting the establishment don't know their asses from their elbows in money-management. A few too many parties and frivolous purchases sent an asset reclamation officer to their door, soon leaving with one of those recent purchases - a
<<if $g.maid.isFemale()>>
pretty female
<<else>>
handsome male
<</if>>
slave who doubled as both a housekeeper and fuckhole for the whole bunch of horny tenants. <<They $g.maid>>'s cute and apparently well-trained, if a bit exhausted right now after numerous gang-bangs <<their $g.maid>> former owners put <<them $g.maid>> through.
</p>
<p>
Should you wish to purchase the slave, <<they $g.maid>> maid|have been delivered to your
<<rep setup.buildingtemplate.slavepens>> for your inspection.
When you inspect <<them $g.maid>> there, <<they $g.maid>> lowers <<their $g.maid>> head
obediently and asks, "<<Master $unit.player>>, what will my new tasks in your
household be? Shall I just clean or will there be... other things for me to
do?" The eager tremble in <<their $g.maid>> voice tells you that <<they $g.maid>>'s more than a little
aroused by the thought of being used, so you tell <<them $g.maid>> it'll all depend on if
<<they $g.maid>>'s a good slave...
</p><p>
The <<rep $company.bank>> is a fair financial establishment. They would offer their customer a safe place to store their valuables, as well as providing loans to those that needs them. But like everywhere else, there are winners and losers of the ever-changing market, and when someone falls upon hard times and fail to pay their loan, the many repo-men and repo-women of the bank start their work. Grim-faced and unmoved by sympathy, they go in to seize the debtor's assets to pay off their debts - which does at times include some quite interesting pieces of merchandise, like a nice slave or two. They would then offer to offload these merchandise quickly for a cheaper fee to their allies, which apparently include your company.
</p><<run new setup.UnitGroup(
"used_thug_for_sale0",
"Thug",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_thug),
setup.qc.TraitsReplace('unit', [setup.trait.muscle_verystrong, setup.trait.face_scary, setup.trait.skill_intimidating]),
setup.qc.TraitReplaceExisting('unit', setup.trait.dick_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.breast_huge),
],
)>>
<<run new setup.Event(
'used_thug_for_sale', /* key */
"Used Thug for Sale", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_used_thug_for_sale',
{ /* roles (LEGACY) */
},
{ /* actors */
'man': 'all',
'thug': 'used_thug_for_sale0',
},
[ /* outcomes */
setup.qc.VarSet('quest_tiger_bank_repo_resale', '1', 250),
setup.qc.Slave('thug', "a|was an overthrown gang leader who was subsequently enslaved by the bank for being unable to pay off a|their debts", true, 0.8),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
setup.qres.VarNull('quest_tiger_bank_repo_resale'),
setup.qres.FavorAtLeast('bank', 500),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Event_TigerBankRepoCommon'>>
<p>
Crime are rather rampant in <<lore continent_main>>, and thug gangs are numerous across the continent.
The <<rep $company.bank>> is not picky about their customer as long as the money is good, and occasionally these gangs would loan a bag of coins or two for urgent business.
And occasionally, some gang would collapse just right when their debts are due, and their leader would be taken by the repo-men when nothing else of value was found.
</p>
<p>
The current sale offer by the bank was one such case —
in fact, you can see from your windows two of the repo-men carrying an unconscious form of a <<man $g.thug>>, who you easily recognize as a hardened criminal judging from their
<<if $g.thug.isMale()>>
broad shoulders, square jaws,
<</if>>
very well-muscled build and intimidating face.
The bank agent tells you that <<they $g.thug>> was a recently overthrown gangster boss in the
<<rep $g.thug.getHomeCompany()>>.
It might be fun to turn the once
<<if $g.thug.isMale()>>
macho <<man $g.thug>>
<<else>>
powerful <<man $g.thug>>
<</if>>
into a proper brainless slut, or you could turn <<them $g.thug>> into a gladiator too. Either way, you are sure to have fun with <<them $g.thug>>, should you decide to purchase <<them $g.thug>>.
</p><<run new setup.Event(
'used_whore', /* key */
"Used Whore", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_used_whore',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
setup.qres.OnDuty('entertainmentslave'),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
At the end of a long day, you take a moment to watch the comings and goings of your fort to decompress.
While doing so, you notice someone who's clearly had a longer day than you. <<Yourrep $g.slave>> is making <<their $g.slave>> tired way back to the fort building for a meal and then bed after a long day of sex work. <<They $g.slave>>'s stripped off <<their $g.slave>> soiled clothes already, and is clearly too tired to care about nudity at all.
</p>
<p>
<<They $g.slave>> comes around the corner and
<<if $unit.player.isHasBreasts()>>
runs into your prominent rack
<<else>>
almost runs into you
<</if>>
. <<They $g.slave>> stops and
<<if $g.slave.isCanSee()>>
stares
<<else>>
faces you
<</if>>
, struggling to find the appropriate thing to say or do, but too exhausted to manage it. Even though <<they $g.slave>>'s been obediently cleaning <<themself $g.slave>> between fucks, <<they $g.slave>> looks used up. <<Their $g.slave>> <<uskin $g.slave>> is reddened here and there.
<<if $g.slave.isHasVagina()>>
<<Their $g.slave>> poor pussylips are puffy, and you have no doubt <<their $g.slave>> vagina is quite sore.
<</if>>
The awkward way <<they $g.slave>>'s standing suggests that <<their $g.slave>>
<<if $g.slave.isHasTrait('anus_gape')>>
gaping
<<elseif $g.slave.isHasTrait('anus_loose')>>
big
<<else>>
tight
<</if>>
asshole has had more than one dick up it recently, perhaps even simultaneously. Even <<their $g.slave>> nipples are pinker than usual, having been cruelly pinched.
</p>
<<choose>>
<<opt "Use <<them $g.slave>>
anyway">>
<p>
You reach out, grab <<their $g.slave>> shoulder, and shove <<them $g.slave>> against the wall.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> manages to use a gesture to beg you not to,
<<else>>
<<They $g.slave>> manages to beg, "Please no, <<Master $unit.player>> -"
<</if>>
before you give <<them $g.slave>> a hard warning slap on the ass to shut <<them $g.slave>> up. <<They $g.slave>>'s quiet, but starts to sob a little when <<they $g.slave>> feels
<<if !$unit.player.isHasDick()>>
the head of a strap-on
<<else>>
your cock
<</if>>
against <<their $g.slave>> anus.
<<if $g.slave.isHasTrait('anus_gape')>>
It's gaped before you even touch it, but it's clearly sore enough that <<they $g.slave>> dreads anal anyway.
<<elseif $g.slave.isHasTrait('anus_loose')>>
It's been fucked loose, but it's clearly sore enough that <<they $g.slave>> dreads anal anyway.
<<else>>
It's somehow not gaped yet, and <<they $g.slave>> dreads having it stretched yet again.
<</if>>
<<if $g.slave.isHasTrait('height_giant')>>
<<They $g.slave>>'s tall enough that the angle isn't that uncomfortable for <<them $g.slave>>.
<<elseif $g.slave.isHasTrait('height_short')>>
<<They $g.slave>> hikes <<themself $g.slave>> desperately up on <<their $g.slave>> tiptoes, but <<they $g.slave>>'s so short the angle is desperately uncomfortable for <<their $g.slave>>.
<<else>>
<<They $g.slave>> hikes <<themself $g.slave>> desperately up on <<their $g.slave>> tiptoes to make the angle less uncomfortable for <<their $g.slave>>.
<</if>>
<<They $g.slave>> decides to try begging one last time, and
<<if $g.slave.isHasVagina()>>
<<if !$g.slave.isCanTalk()>>
signs to ask you to use <<their $g.slave>> pussy instead
<<else>>
whines, "Just use my pussy, please!"
<</if>>
<<else>>
<<if !$g.slave.isCanTalk()>>
signs to ask you to let <<them $g.slave>> suck you off instead
<<else>>
whines, "Let me suck you off, please!"
<</if>>
<</if>>
as you shove
<<if !$unit.player.isHasDick()>>
the strap-on
<<else>>
yourself
<</if>>
up <<their $g.slave>> butt. <<They $g.slave>> reflexively tries to get away into the wall,
<<if $g.slave.isHasTrait('breast_huge')>>
<<their $g.slave>> enormous boobs squashing out to either side.
<<elseif $g.slave.isHasTrait('breast_large')>>
<<their $g.slave>> big boobs squashing out to either side.
<<elseif $g.slave.isHasTrait('breast_small')>>
<<their $g.slave>> boobs crashing into it.
<<else>>
<<their $g.slave>> sore nipples giving <<them $g.slave>> a jerk as <<they $g.slave>> does.
<</if>>
After some continued whining through <<their $g.slave>> tears, <<they $g.slave>> gives up and just lets you rape <<their $g.slave>> sore ass. When you finally
<<if ($unit.player.isHasDick())>>
fill <<their $g.slave>> butt with your ejaculate and pull out,
<<else>>
shudder with orgasm and withdraw your strap-on,
<</if>>
<<they $g.slave>> slumps and turns to go, looking a bit sad for some reason.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Manipulate <<their $g.slave>>
into asking to suck you off">>
<p>
You reach out, grab <<their $g.slave>> shoulder, and shove <<them $g.slave>> against the wall.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> manages to use a gesture to beg you not to,
<<else>>
<<They $g.slave>> manages to beg, "Please no, <<Master $unit.player>> -"
<</if>>
before you give <<them $g.slave>> a hard warning slap on the ass to shut <<them $g.slave>> up. <<They $g.slave>>'s quiet, but starts to sob a little when <<they $g.slave>> feels
<<if !$unit.player.isHasDick()>>
the head of a strap-on
<<else>>
an invading cockhead
<</if>>
against <<their $g.slave>> anus.
<<if $g.slave.isHasTrait('anus_gape')>>
It's gaped before you even touch it, but it's clearly sore enough that <<they $g.slave>> dreads anal anyway.
<<elseif $g.slave.isHasTrait('anus_loose')>>
It's been fucked loose, but it's clearly sore enough that <<they $g.slave>> dreads anal anyway.
<<else>>
It's somehow not gaped yet, and <<they $g.slave>> dreads having it stretched yet again.
<</if>>
<<They $g.slave>>
<<if !$g.slave.isCanTalk()>>
signs let <<their $g.slave>> suck you off instead.
<<else>>
whines, "Let me suck you off, please!"
<</if>>
Having gotten <<them $g.slave>> to beg for what you wanted all along, you spin <<them $g.slave>> so <<their $g.slave>>
<<if ($g.slave.isHasTrait('muscle_verystrong'))>>
powerful
<<elseif ($g.slave.isHasTrait('muscle_strong'))>>
strong
<</if>>
back hits the wall with a smack and shove <<them $g.slave>> down it until <<their $g.slave>> lips are level with your
<<if !$unit.player.isHasDick()>>
fake dick
<<else>>
dick
<</if>>
, and push it into <<their $g.slave>> <<umouth $g.slave>> without waiting for <<them $g.slave>> to get ready. <<They $g.slave>> gags, but does <<their $g.slave>> best to work <<their $g.slave>> tired <<umouth $g.slave>>. When you're finally satisfied and you let <<them $g.slave>> up, you aim another slap at <<their $g.slave>> ass and let <<them $g.slave>> see it coming; <<they $g.slave>> accepts the spank due to fright at what you might do if <<they $g.slave>> dodged before fleeing.
</p>
<<opt "Just talk with <<them $g.slave>>
">>
<p>
You take <<them $g.slave>> by the hand, lead <<them $g.slave>> to a nearby bench, and sit down with <<them $g.slave>>, letting <<them $g.slave>> seat <<themself $g.slave>> beside you so <<they $g.slave>> can lean against you without putting too much weight on <<their $g.slave>> poor overused butthole. You ask <<them $g.slave>> about <<their $g.slave>> day.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> uses gestures to recount it through <<their $g.slave>> tears. Apparently while one guy was using <<their $g.slave>> anus, another thought it was hot and waited for him to be done before using <<them $g.slave>> in turn, without letting <<them $g.slave>> rest or clean <<themself $g.slave>>. It took four cocks total for the pimp to notice and rescue <<them $g.slave>>.
<<else>>
<<They $g.slave>> say, a little tearfully, "<<Master $unit.player>>, this guy wanted to use my butt in public. So of course I let him, and he made me sit in his lap to do it, and held my legs back so everyone could see! And then another guy thought it was hot and waited, and then fucked me in my ass too. The pimp finally noticed and rescued me after four cocks, <<Master $unit.player>>. I'm really sore."
<</if>>
<<They $g.slave>>
<<if $g.slave.isCanSee()>>
looks up at you with big <<ueyes $g.slave>>
<<else>>
gazes at you
<</if>>
for a long moment, a final tear leaking down <<their $g.slave>> cheek, before <<they $g.slave>> suddenly
<<if !$g.slave.isCanTalk()>>
shakes with mute laughter
<<else>>
laughs
<</if>>
. <<They $g.slave>> explains <<themself $g.slave>> after a while: it's not what <<they $g.slave>> thought <<they $g.slave>>'d be doing with <<their $g.slave>> life.
<<if !$g.slave.isCanTalk()>>
<<They $g.slave>> points to <<themself $g.slave>> and uses both <<uhands $g.slave>> to mimic sodomy, as though to suggest that's all <<they $g.slave>> is, before giving you a rueful smile.
<<else>>
"<<name $g.slave>> the butthole ho, that's me," <<they $g.slave>> says sadly, before giving you a rueful smile.
<</if>>
<<They $g.slave>> kisses you on the cheek and thanks you for listening instead of raping <<them $g.slave>>.
</p>
<<choose>>
<<opt "Kiss <<them $g.slave>>
back">>
<p>
You turn to kiss <<their $g.slave>> back, on the lips this time. <<They $g.slave>>
<<if $g.slave.isCanSee()>>
sees
<<else>>
feels
<</if>>
your intention and complies trustingly, closing <<their $g.slave>> eyes and tilting <<their $g.slave>> head slightly so your lips lock perfectly.
After a few seconds, <<they $g.slave>> realizes you aren't planning to break the kiss anytime soon, and softens, <<their $g.slave>><<ubody $g.slave>> relaxing against yours. <<They $g.slave>> scoots closer to you, bringing <<their $g.slave>> legs up under <<their $g.slave>> on the couch cushions so <<they $g.slave>> can face you comfortably. <<They $g.slave>> leans one
<<if ($g.slave.isHasTrait('muscle_strong'))>>
muscular
<</if>>
hip against your leg, hiking <<themself $g.slave>> half onto your lap so <<they $g.slave>> can make out with you without having to sit with any weight on <<their $g.slave>> sore butthole.
</p>
<<run setup.qc.FriendshipWithYou('slave', 75).apply($gQuest)>>
<<opt "Rape <<them $g.slave>>
">>
<p>
But <<they $g.slave>>'s wrong to place that kind of faith in you. As <<they $g.slave>> withdraws from the kiss, you snake a betraying <<uhand $unit.player>> between <<their $g.slave>> butt and the bench, and shove
<<if $g.slave.isHasTraitExact('anus_tight')>>
two rude fingers up <<their $g.slave>> sore little anus
<<elseif $g.slave.isHasTraitExact('anus_loose')>>
three rude fingers up <<their $g.slave>> sore anus
<<else>>
all four of your fingers and your thumb, formed into a point, as far up <<their $g.slave>> loose butt as they will go
<</if>>
. <<They $g.slave>> lets out a pained "oh," and then goes silent. For such a little sound, it bears a great weight of betrayed trust. You insert your fingers to the knuckle, making <<them $g.slave>> writhe with discomfort, and then turf <<them $g.slave>> off the bench to land face first on the floor in front of you. <<They $g.slave>> tries to spread <<their $g.slave>> butt and angle <<their $g.slave>> hips like a good <<girl $g.slave>>, but you slap <<their $g.slave>> <<uhands $g.slave>> away and push your
<<if !$unit.player.isHasDick()>>
strap-on
<<else>>
cock
<</if>>
inside <<them $g.slave>> without regard for <<their $g.slave>> poor anus. <<They $g.slave>> shudders and begins to cry, and keeps crying as you ravage <<their $g.slave>> asshole. When you climax and pull out, <<they $g.slave>> continues to weep, but stumbles off to wash. When <<they $g.slave>> comes back, <<they $g.slave>>'s still sniffling, but without being prompted, <<they $g.slave>> gets down on <<their $g.slave>> knees and offers you <<their $g.slave>> sore butthole again.
</p>
<<run setup.qc.FriendshipWithYou('slave', -75).apply($gQuest)>>
<</choose>>
<</choose>><<run new setup.Event(
'vocal_disobedience', /* key */
"Vocal Disobedience", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_vocal_disobedience',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.training_none, setup.trait.training_obedience_basic], true),
setup.qres.IsCanPhysicallyTalk(),
setup.qres.Not(setup.qres.IsCanTalk()),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
One morning, despite the fact that <<they $g.slave>> slave|is
<<if $g.slave.getSpeechRule() == 'animal'>>
only allowed to make animal-like noises,
<<else>>
not allowed to speak without being spoken to,
<</if>>
<<rep $g.slave>>
<<if $g.slave.isCanSee()>>
looks at you directly in the eye
<<else>>
faces you
<</if>>
and asks <<uadv $g.slave>>,
"I'm tired, can I have the day off?"
<<They $g.slave>> didn't even call you <<Master $unit.player>>.
</p>
<<choose>>
<<opt "Give <<them $g.slave>> a rough spanking">>
<p>
You tie the protesting slave to your <<uslaverbed $g.slave>>
so that <<their $g.slave>> chest is against the top of the <<uslaverbed $g.slave>>
and <<they $g.slave>>'s standing upright with <<their $g.slave>> ass in the air.
You spank <<them $g.slave>> severely, leaving <<their $g.slave>> buttocks bright pink. <<They $g.slave>> must count the strokes or have <<their $g.slave>> punishment start over.
Sobbing, <<they $g.slave>> counts "Six, AAGHHH, Seven, AAGHHH, Seven"
and then realizes <<their $g.slave>> mistake and begs for mercy - in vain, of course.
You finish <<them $g.slave>> off with a rough fuck, with <<them $g.slave>> jerking against <<their $g.slave>> restraints every time you stroke into <<their $g.slave>> sore buttocks.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Give <<them $g.slave>> the day off">>
<p>
<<They $g.slave>> skips away happily and spends the rest of the day lounging around.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'wanting_for_a_talk', /* key */
"Wanting for a Talk", /* Title */
{ /* Author */
name: "FCdev",
url: "",
},
[ /* tags */
'fort',
],
'Event_wanting_for_a_talk',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [ setup.qres.You(), ],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveOwnedByYou(),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.Home(),
setup.qres.Trait(setup.trait.per_smart),
setup.qres.Not(setup.qres.IsCanTalk()),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Today, you notice that <<yourrep $g.slave>> slave|is behaving a little strangely. <<They $g.slave>>'s following your commands with almost manic attention, trying to anticipate your directions and hanging desperately on your every word. After a moment, you reflect that <<they $g.slave>>'s a <<rep setup.trait.per_smart>> <<man $g.slave>>, and is probably suffering for a lack of conversation. As you regard <<them $g.slave>> standing there, <<their $g.slave>> <<if $g.slave.isCanSee()>><<ueyes $g.slave>> almost scream<<else>>face almost screams<</if>> at you for some sort of stimulation. <<Their $g.slave>> life is not without mental interest, but talking is one of the quintessential human behaviors, and having it taken away is very difficult for someone as intelligent as <<them $g.slave>>.
</p>
<<choose>>
<<opt "Discuss <<their $g.slave>> future with <<them $g.slave>>">>
<p>
You announce matter-of-factly that <<they $g.slave>>'s allowed to speak temporarily, and that you'll be discussing where <<they $g.slave>> slave|is and where <<they $g.slave>> sees <<themself $g.slave>> in the near future.
<<They $g.slave>>'s disconcerted by the subject but so desperate for conversation that <<they $g.slave>>'s overjoyed anyway.
"I understand what you're doing, <<Master $unit.player>>," <<they $g.slave>> says forthrightly. "I'm to be broken down into a devoted slave."
<<They $g.slave>> looks thoughtful.
"I'll help you with that. It'll be easier if I do, won't it?"
<<They $g.slave>> looks up, and you
<<if $g.slave.isCanSee()>>nod<<else>>acknowledge<</if>>;
<<they $g.slave>> gives you a rueful smile. "A good slut would offer to <<if !$unit.player.isHasDick()>>give you oral now, I think. So, <<Master $unit.player>>, may I please be allowed to lick your pussy?"<<else>>suck your cock now, I think. So, <<Master $unit.player>>, may I please be allowed to suck your cock?"
<</if>>
You <<if $g.slave.isCanSee()>>nod<<else>>acknowledge<</if>>, and tell <<them $g.slave>> that the rules are back in effect.
As <<they $g.slave>> gets down on <<their $g.slave>> knees, <<they $g.slave>> focuses on the task in front of <<them $g.slave>> with all <<their $g.slave>> considerable intelligence, clearly having decided to make things easier on <<themself $g.slave>> by conforming to <<their $g.slave>> new life.
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<opt "Let <<them $g.slave>> talk during a rough buttfuck">>
<p>
You push <<them $g.slave>> backwards onto your <<uslaverbed $g.slave>>, groping <<their $g.slave>> butt. You instruct <<them $g.slave>> that <<they $g.slave>>'ll be allowed to talk if <<they $g.slave>> wants, but not yet, as you
<<if $g.slave.isHasTail()>>raise <<their $g.slave>> tail and<</if>>
<<if !$unit.player.isHasDick()>>push a couple of fingers up<<else>>line your cock up with<</if>> <<their $g.slave>> <<if $g.slave.isHasTrait('anus_gape')>>gaping<<elseif $g.slave.isHasTrait('anus_loose')>>sizeable<<else>>tight<</if>> asshole.
As you penetrate <<them $g.slave>>, you tell <<their $g.slave>> that the time to talk is now. <<if $g.slave.isHasTrait('anus_gape')>>To make the sex sufficiently uncomfortable, you <<if !$unit.player.isHasDick()>>finger fuck<<else>>cock<</if>> <<their $g.slave>> without mercy.<<elseif $g.slave.isHasTrait('anus_loose')>>To make the sex sufficiently uncomfortable, you pull yourself out with every stroke, putting <<their $g.slave>> through initial anal penetration over and over.<<else>><<Their $g.slave>> butt is so tight that just a simple assfuck makes <<them $g.slave>> uncomfortable enough.<</if>>
<<They $g.slave>> opens <<their $g.slave>> <<umouth $g.slave>>, closes it again, grunts at the burning sensation of your rough use of <<their $g.slave>> poor ass, and then shuts up. You ask <<them $g.slave>> if <<they $g.slave>>'s sure <<they $g.slave>> doesn't have anything to say, and <<they $g.slave>> makes <<their $g.slave>> one verbal comment of the day:
"No, <<Master $unit.player>>."
<<They $g.slave>> understands the lesson here: fail to conform, get assraped. It's as simple as that.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<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 */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.common, /* Rarity */
)>><<include 'Opportunity_rival_interaction'>><<run new setup.Event(
'under_new_management_quality_time', /* key */
"Under New Management: Quality Time", /* Title */
{ /* Author */
name: "Kyrozis",
url: "",
},
[ /* tags */
'favor',
'trait',
],
'Event_under_new_management_quality_time',
{ /* roles (LEGACY) */
},
{ /* actors */
'guard1': [],
'guard2': [],
'pimp': [],
},
[ /* outcomes */
setup.qc.Favor('neko', 300),
setup.qc.BoonizeRandom('guard1', 5),
setup.qc.BoonizeRandom('guard2', 5),
setup.qc.BoonizeRandom('pimp', 5),
setup.qc.Return('guard1'),
setup.qc.Return('guard2'),
setup.qc.Return('pimp'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
At the end of this week, your slavers finally returned from their "vacation" with the cuddly neko,
looking happier
than ever. <<Yourrep $g.guard1>> recounted all the events of the vacation to you,
regardless of whether you want to hear it or not.
</p>
<p>
According to <<them $g.guard1>> (and backed up by both <<rep $g.guard2>>
and <<rep $g.pimp>>), the three of them had the time of their lives during
the week they spent with the brothel's staff. They hiked along the uninhabited sections
of the <<lore region_forest>>, bathed in hot a spring, cooked various unusual
of food together, explored the <<lore location_npc>>, and drank while
partying around a campfire, sometimes even sharing hugs and headpats. (In all
honestly, who could resist patting a cute cat of any sort?
<<if $g.guard1.isHasTrait('per_playful')>>
<<set _play = $g.guard1>>
<<elseif $g.guard2.isHasTrait('per_playful')>>
<<set _play = $g.guard2>>
<<elseif $g.pimp.isHasTrait('per_playful')>>
<<set _play = $g.pimp>>
<<else>>
<<unset _play>>
<</if>>
<<if _play>>
The playful slaver <<rep _play>> may have went a little overboard with the petting, but
the neko seem to like it...
<</if>>
<<if $g.guard1.isHasTrait('per_serious')>>
<<set _grump = $g.guard1>>
Even the usually grumpy <<rep $g.guard1>>
<<elseif $g.guard2.isHasTrait('per_serious')>>
<<set _grump = $g.guard2>>
<<elseif $g.pimp.isHasTrait('per_serious')>>
<<set _grump = $g.pimp>>
<<else>>
<<unset _grump>>
<</if>>
<<if _grump>>
Even the usually grumpy <<rep _grump>> couldn't resist petting a neko's head, or two, or three...
<</if>>
)
Just by looking
at them, you can tell they had a great time, and their morale is at an all-time high.
They will surely perform better on their duties for some time.
</p>
<p>
Soon after, you heard that the brothel was back to business, this time fully
owned by its workers. The brothel became one of the best brothels in the
area, and the workers paid your company back not in money, but by putting in
good words about your company's deeds and the time they had with your
slavers.
</p><<run new setup.Event(
'a_merchant_s_revenge_an_unfortunate_report', /* key */
"A Merchant\'s Revenge: An Unfortunate Report", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'fort',
],
'Event_a_merchant_s_revenge_an_unfortunate_report',
{ /* roles (LEGACY) */
},
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
},
[ /* outcomes */
setup.qc.Return('merchant'),
setup.qc.VarSet('mlang_merchantrevenge_caravancount', '0', -1),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>>/* Variable Notes
mlang_merchantrevenge_questrival 1 = Player is aware of the rival. Will receive jobs from both
mlang_merchantrevenge_questrival 5 = Player has decided not to take jobs from rival
*/
<<dialogue $g.merchant>>
You said this was urgent? How urgent, exactly?
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'tankard of mead'>>
<<elseif $unit.player.isHasAnyTraitExact(['bg_monk', 'bg_priest'])>>
<<set _pdrink = 'cup of tea'>>
<<else>>
<<set _pdrink = 'glass of wine'>>
<</if>>
When<<name $g.merchant>> finally arrives at <<lore location_princeofcups>> <<they $g.merchant>> appear harried, and gesture curtly to the wait staff, who hurriedly bring over the usual amphora of wine for <<them $g.merchant>> and another _pdrink for you.<br>
"All right," <<they $g.merchant>> says. "What's the emergency?"<br>
<<if $unit.player.isHasTrait('per_slow')>>
"I raided one of your caravans."
<<elseif $unit.player.isHasTrait('per_smart')>>
"I received a note asking me to attack one of your caravans—and I think it was meant to look like a note from you."
<<else>>
"I got a job attacking a caravan—one of your caravans."
<</if>>
<br>
<<Their $g.merchant>> face stills. "And you did it?" <<they $g.merchant>> asks.<br>
"I didn't know it was yours," you say defensively. "Actually I still don't, but I think it was, right?"<br>
You slide the documents over the table towards <<them $g.merchant>>, who takes them and glances down, <<their $g.merchant>> face blanching.<br>
<<if $unit.player.isHasTrait('per_smart')>>
"And you say you got a note that looked like one of mine?"<br>
"Yes. Nice paper, expensive ink, unsigned. Said time was of the essence. The hand was a bit different, but that didn't mean it wasn't you."
<<else>>
"Did someone tell you about my caravan specifically? It's not your normal thing, even with pay."<br>
You nod. "I got a note. Looked like yours."
<</if>>
"Do you bring it?"<br>
Shoving a slice of fig into your mouth, you reach into your bag and pull out a folded sheet of parchment and slide it across the table. Unfolding it, <<name $g.merchant>> examines the message, <<their $g.merchant>> jaw clenching as their eyes dart over it. Turning it over, they examine the map.<br>
<<if $unit.player.isHasTrait('per_smart')>>
"All right," <<they $g.merchant>> says, putting the note down. "If it's not in my hand, then it's not from me, got it?"
<<else>>
"All right," <<they $g.merchant>> say with a sigh, placing the parchment down in front of you and turning it around so you can read the text. Taking out another sheet and lifting out a pen and inkwell <<they $g.merchant>> writes out the message again. "You see how that's not my writing?" <<they $g.merchant>> asks.
<<if $unit.player.isHasTrait('per_slow')>>
It takes a while for <<them $g.merchant>> to explain it to you, but an hour or so later you feel you're going to be able to recognise any more fake letters that get sent to you.
<<else>>
Laid out side by side as they are, the differences are obvious.<br>
"Yeah, I see it," you say, nodding. "I'll just keep an old note handy so I'll be able to see it if it happens again."<br>
"When it happens again," <<name $g.merchant>> says, taking a sip of <<their $g.merchant>> wine. "It'll happen again."
<</if>>
<br>
<</if>>
<br>
Folding up the note you brought, <<name $g.merchant>> slips it into a jacket pocket. <br>
"I'll take this," <<they $g.merchant>> says. "If they got sloppy, maybe I can use it to find them. You're going to get more of these," <<they $g.merchant>> adds seriously. "Can I trust that you won't take those?"
<<choose>>
<<opt "Of course not (Truth)">>
"Of course not," you say easily. "I don't see them wining and dining me, after all."<br>
<<name $g.merchant>> smiles. "I suppose not," <<they $g.merchant>> says, slipping out of the booth and rising to <<their $g.merchant>> feet. "I'll keep sending work your way. And if I do figure out who's behind this, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '5', -1).apply($gQuest)>>
<<opt "Of course not (Lie)">>
"Of course not," you say easily. "I don't see them wining and dining me, after all."<br>
<<name $g.merchant>> smiles. "I suppose not," <<they $g.merchant>> says, slipping out of the booth and rising to <<their $g.merchant>> feet. "I'll keep sending work your way. And if I do figure out who's behind this, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '1', -1).apply($gQuest)>>
<<optif $unit.player.isHasAnyTraitExact(["per_cautious", "per_frugal", "per_honorable"])>>
<<opt "It's not in my interest to work against you">>
"You've already hired me on a longer term basis," you say with a shrug. "I'm not throwing that away for a small bribe."<br>
<<name $g.merchant>> eyes you carefully. "What about a big one?"<br>
<<if $unit.player.isHasTrait('per_honorable')>>
"It would have to be exceptionally large for me to go back on my word."
<<else>>
You sip your _pdrink and grin. "I don't know. They haven't offered me one yet."
<</if>>
<br>
"I see. Well. I guess I'd better get a move on then. If I do figure out who's behind this, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '5', -1).apply($gQuest)>>
<<optif $unit.player.isHasAnyTraitExact(["per_evil", "per_lavish"])>>
<<opt "What would you pay me not to?">>
"What would you pay me not to?" you ask with a grin.<br>
"I wouldn't," <<name $g.merchant>> says cooly. "But I wouldn't send any further work your way if you did."<br>
"Is that a threat?" you ask.<br>
"No more than what you asked," <<name $g.merchant>> says with a shrug. "Consider it a statement of intent." Nodding <<their $g.merchant>> head to you, <<they $g.merchant>> slips out of the booth and leaves. Moments later, there is a cough at your elbow as the waiter presents you with the bill.
<<run setup.qc.Money(-50).apply($gQuest)>>
<<run setup.qc.VarSet('mlangmerchantprinceflirt', '0', -1).apply($gQuest)>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '1', -1).apply($gQuest)>>
<<opt "I'll make the decision that's best for my company">>
"I'll have to make the decision that's best for my company."<br>
<<name $g.merchant>> nods. "I can respect that. Let me put it this way then. Assuming you consider both myself and my rivals equal threats, especially in the absence of solid information telling you otherwise, perhaps ask which of us is willing to be seen with you in public and is therefore going to be more useful as contact down the line if things go well."<br>
"That's a very one sided argument," you note.<br>
"And if you were to meet the person who sent you the fake note, maybe they'd be able to make their pitch do you. Assuming they cared to."<br>
"And you're convinced they wouldn't?"
<<name $g.merchant>> takes a long drink from their cup. "There's a certain type of merchant in this city who likes to pretend that people who aren't like them don't exist. Or at least, they don't exist other than to serve the 'real' people. Them. I can't tell you for certain that this person is one of those. But then how they've interacted with you so far, I'd be surprised if they weren't."<br>
Draining <<their $g.merchant>> cup, <<they $g.merchant>> slip out of the booth and gesture to a waiter, handing him some gold to cover the bill. "Do right by me and I'll do right by you," <<they $g.merchant>> say. "And if I find out who is behind all this mess, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '1', -1).apply($gQuest)>>
<<optif setup.qres.VarLte("mlangmerchantprinceflirt", "0").isOk($gQuest)>>
<<opt "And completely give up my chances of getting into your pants? Never.">>
<<name $g.merchant>> quirks an eyebrow. "And is that what's going to save my caravans? The fact that you think you're going to get into my trousers?"<br>
"Of course not. Mostly it's fact that you're paying me. And you treat me like a person. The fact that you're hot is just a bonus. As for actually getting into your pants, a <<girl $unit.player>> can dream, right?"<br>
A brief smile flashes across <<name $g.merchant>>'s face. "Dreams are wonderful things," <<they $g.merchant>> says. "And who knows? Sometimes they even come true." Winking at you, <<they $g.merchant>> slips out of the booth and heads out the door. Moments later, there is a cough at your elbow as the waiter presents you with the bill.
<<run setup.qc.Money(-50).apply($gQuest)>>
<<run setup.qc.VarSet('mlangmerchantprinceflirt', '1', -1).apply($gQuest)>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '5', -1).apply($gQuest)>>
<<optif setup.qres.VarGte("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
<<opt "Just when we have a good thing going? Why would I mess that up?">>
"Money, usually," <<they $g.merchant>> says seriously. "Or the promise of power. Those are the usual reasons."<br>
"Well, I'm not a usual person."<br>
<<name $g.merchant>> smiles. "That you aren't. And if we weren't in public I'd show you exactly how much I value that. I'll see you soon. And in the meantime, I'll keep sending work your way. If I find out who is behind all this mess, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<run setup.qc.VarSet('mlang_merchantrevenge_questrival', '5', -1).apply($gQuest)>>
<</choose>><<run new setup.Event(
'a_merchant_s_revenge_complications', /* key */
"A Merchant\'s Revenge: Complications", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
],
'Event_a_merchant_s_revenge_complications',
{ /* roles (LEGACY) */
},
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
},
[ /* outcomes */
setup.qc.Return('merchant'),
setup.qc.VarSet('mlang_merchantrevenge_questrival', '1', -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('mlangmerchantprinceflirt', '1'),
setup.qc.DoAll([
setup.qc.SetCooldownOpportunity('a_merchant_s_revenge_payback_is_sweet', 12)
], undefined),
setup.qc.DoAll([
], undefined)),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<dialogue $g.merchant>>
All right. What's all this about that's so urgent?
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'tankard of mead'>>
<<elseif $unit.player.isHasAnyTraitExact(['bg_monk', 'bg_priest'])>>
<<set _pdrink = 'cup of tea'>>
<<else>>
<<set _pdrink = 'glass of wine'>>
<</if>>
<p>
The smile on <<name $g.merchant>>'s face fades as you slide the note you'd received across the table.<br>
"I didn't send you that," <<they $g.merchant>> says, frowning.<br>
You remain silent, enjoying your _pdrink as a server brings over a platter of bread, preserved olives, goat cheese and cured sausages from Cathay, before stepping courteously away.<br>
<<if $unit.player.isHasTrait('per_smart')>>
"I didn't think you did," you say when you're alone at the table again. "I thought you'd want to know."
<<else>>
"I wasn't sure, but it didn't feel safe to go in without checking."
<</if>>
<br>
<<name $g.merchant>> sights and slumps back into the padded leather of the booth. "It looks like one of my rivals is attempting to use you against me. I should have expected this."
</p>
<<choose>>
<<opt "Try to console them">>
<<if $unit.player.getSpeech() == setup.speech.bold>>
"Yeah, but so what? Now you know."<br>
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
"What are you going to do about it then?"<br>
<<else>>
"Maybe. They could just be sending notes to every mercenary company in the area."<br>
<</if>>
<<name $g.merchant>> takes a deep breath, fortifies <<themselves $g.merchant>> with a hearty swig of wine and sits up. "You're right. I'm going to keep the note. It might help me figure out exactly which of them is doing this." Popping an olive into <<their $g.merchant>> mouth, <<they $g.merchant>> chews thoughtfully as <<they $g.merchant>> stares at the note thoughtfully.<br>
"I'll check this against the ciphered documents you gave me earlier. Thank you for telling me. I'll make sure I send more work your way. And if I do find out who's behind this, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<</if>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
<br>
"I really want to kiss you right now," <<name $g.merchant>> says with a tight grin, raising <<their $g.merchant>> wine goblet towards you. "Possibly more. Ah well. Until next time."
<</if>>
<<opt "Reassure them">>
<<if $unit.player.getSpeech() == setup.speech.bold>>
"Okay," you say, helping yourself to smokey, fatty sausage. "What next?"<br>
<<name $g.merchant>> takes a deep breath, fortifies <<themselves $g.merchant>> with a hearty swig of wine and sits up. "
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
"Why? You're not the boss of them."<br>
<<name $g.merchant>> takes a deep breath, fortifies <<themselves $g.merchant>> with a hearty swig of wine and sits up. "You're right.
<<elseif $unit.player.getSpeech() == setup.speech.witty>>
"Well, maybe if you find someone who can do time magic, you can sort out. Actually I hear there's a seer in the vales who can see the future. Maybe check with them?"<br>
<<name $g.merchant>> stares at you for a long moment, mouth open. Then <<they $g.merchant>> laughs. "Okay, that's fair.
<<else>>
"Well it didn't work, so what's the problem?"<br>
<<name $g.merchant>> stares at you for a long moment, mouth open. Then <<they $g.merchant>> laughs. "Okay, that's fair.
<</if>>
I'm going to keep the note. It might help me figure out exactly which of them is doing this." Popping an olive into <<their $g.merchant>> mouth, <<they $g.merchant>> chews thoughtfully as <<they $g.merchant>> stares at the note thoughtfully.<br>
"I'll check this against the ciphered documents you gave me earlier. Thank you for telling me. I'll make sure I send more work your way. And if I do find out who's behind this, you may find yourself with some lucrative merchandise to sell."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"You mean, you'll let me take them as sl—"<br>
"New indentured servants," <<name $g.merchant>> says, interrupting you.<br>
"Oh. Right."
<<else>>
"I look forward to meeting my new employees," you say, raising your _pdrink towards <<name $g.merchant>>.
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
<br>
"I really want to kiss you right now," <<name $g.merchant>> says with a tight grin, raising <<their $g.merchant>> wine goblet towards you. "Possibly more. Ah well. Until next time."
<</if>>
<</if>>
<<optif setup.qres.VarLte("mlangmerchantprinceflirt", "0").isOk($gQuest)>>
<<opt "Flirt with them. And reassure them, but mostly flirt.">>
<<if $unit.player.getSpeech() == setup.speech.friendly>>
"Sure, but last I checked, they didn't buy me drinks and sit delectably across the table from me with a whole 'look don't touch' thing going on."<br>
<<name $g.merchant>> quirks an eyebrow. "And is that all that saved my caravan? The fact that you'd like to...touch?"<br>
"Of course not. Mostly it was the fact that you're paying me. And you treat me like a person. The fact that you're hot is just a bonus."<br>
<<elseif $unit.player.getSpeech() == setup.speech.bold>>
"Well, unless they start buying be lunch and showing more skin than you do, they're out of luck."<br>
<<name $g.merchant>> quirks an eyebrow. "And is that what saved my caravan? The fact that you like free food and my...physique?"<br>
"Of course not. Mostly it was the fact that you're paying me. And you treat me like a person. The fact that you're hot is just a bonus."<br>
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
You shrug. "I like you," you tell <<them $g.merchant>>. "I don't know them at all."<br>
<<name $g.merchant>> quirks an eyebrow. "And is that all that saved my caravan? The fact that you 'like' me?"<br>
"Sure. You're paying me and you treat me like person. You being sexy as fuck is just a bonus."<br>
<<elseif $unit.player.getSpeech() == setup.speech.witty>>
"And if they were to wine and dine me the way you have, maybe they'd have had more luck."<br>
<<name $g.merchant>> quirks an eyebrow. "And is that all that saved my caravan? The free food?"<br>
"Of course not. Mostly it was the fact that you're paying me. And you treat me like a person. The fact that you're hot is just a bonus."<br>
<<elseif $unit.player.getSpeech() == setup.speech.debauched>>
"I like to know who I'm dealing with," you say with a shrug. "Although it does help when they're as sexy as you are."<br>
<<name $g.merchant>> quirks an eyebrow. "And is that all that saved my caravan? The fact that you like my body?"<br>
"Of course not. Mostly it was the fact that you're paying me. And you treat me like a person. The fact that you're hot is just a bonus."<br>
<</if>>
<<They $g.merchant>> coughs and pours <<themselves $g.merchant>> another goblet of wine. "Well, um. That's actually one of the nicest things anyone's said to me recently. Uh. Thank you. I'll uh, keep this note for now. Maybe it'll help me figure out exactly which of my rivals is doing this. An uh... maybe we can pick up the specifics of this conversation later?"<br>
<<They $g.merchant>>'s cute when <<they $g.merchant>>'s flustered. Smiling your acquiescence, you get up from the table and make for the door. Turning back, you catch <<them $g.merchant>> looking at you and give them a wink before you leave. Best to go while you still have <<their $g.merchant>> attention.
<<run setup.qc.VarSet('mlangmerchantprinceflirt', '1', -1).apply($gQuest)>>
<<opt "Extort more money for your cooperation">>
"Maybe" you say, taking a sip from your _pdrink. "The point is I turned down work to let you know, and I trust that's not going to go unnoticed."<br>
A series of emotions flicker across <<their $g.merchant>>'s face faster than you can decipher them, and then <<they $g.merchant>> smiles broadly. "Of course not," <<they $g.merchant>> says, folding up the note and putting it into <<their $g.merchant>> jacket pocket. When <<their $g.merchant>> hand returns to the table, it's clutching a small pouch of coin. "For your services today. And I'll ensure there's plenty more work coming your way in the future."<br>
With a smile and a nod, you take the coin pouch and leave <<lore location_princeofcups>>. Free food and drink is all very well and good, but business is business, and you have a company to run.
<<run setup.qc.Money(500).apply($gQuest)>>
<<run setup.qc.VarSet('mlangmerchantprinceflirt', '0', -1).apply($gQuest)>>
<</choose>><<run new setup.Event(
'banditry_', /* key */
"Banditry!", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'vale',
],
'Event_banditry_',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-240),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>The banditry on the roads hasn't gotten any better, and the Lords of Lucgate have, as you expected, done nothing to curb their activities. Unfortunately this has meant you're getting even fewer traders and travellers coming to your fort, and your actual income has been down this month from what you had expected.</p>
<p>Maybe you need to train your fighters up to take on the bandits next time you get the opportunity...</p><<run new setup.Event(
'hospital_visit', /* key */
"Hospital Visit", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'fort',
'special',
'unknown',
],
'Event_hospital_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'injured': [
setup.qres.IsInjured(1),
setup.qres.Job(setup.job.slaver),
setup.qres.Not(setup.qres.YourLover()),
],
'you': [
setup.qres.You(),
setup.qres.Available(),
],
},
[ /* outcomes */
setup.qc.Opportunity('visiting_the_injured', {
covalescent: "injured",
you: "you",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hospital),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.uncommon, /* Rarity */
)>>Your slaver, <<rep $g.injured>> has been hurt in the line of duty and is currently convalescing in hospital. Given you're at home at the moment, you consider dropping by to say hello and maybe lift their spirits. Or something...<<run new setup.Event(
'hospital_visit_lover', /* key */
"Hospital Visit (Lover)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'fort',
'special',
'unknown',
],
'Event_hospital_visit_lover',
{ /* roles (LEGACY) */
},
{ /* actors */
'injured': [
setup.qres.IsInjured(1),
setup.qres.Job(setup.job.slaver),
setup.qres.YourLover(),
],
'you': [
setup.qres.You(),
setup.qres.Available(),
],
},
[ /* outcomes */
setup.qc.Opportunity('visiting_the_injured', {
covalescent: "injured",
you: "you",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hospital),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.uncommon, /* Rarity */
)>><p>
Your lover, <<rep $g.injured>>, has been hurt in the line of duty and is currently convalescing in the
<<rep setup.buildingtemplate.hospital>>.
<<They $g.injured>> surely have nothing better to do right now, and perhaps you could ditch some of
your work to go visit the <<uadjgood $g.injured>> <<urace $g.injured>>...
</p><<run new setup.Event(
'outlaw_raid', /* key */
"Outlaw Raid", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
],
'Event_outlaw_raid',
{ /* roles (LEGACY) */
},
{ /* actors */
'lostslave': [
setup.qres.Job(setup.job.slave),
setup.qres.ZeroTitle(),
],
},
[ /* outcomes */
setup.qc.MissingUnit('lostslave'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _guard = setup.getAnySlaver()>>
<p>
You awaken to shouts of alarm and the sounds of running footsteps.
<<if $unit.player.isHasTrait('per_brave')>>
Shoving your feet into your <<uequipslot $unit.player 'feet'>>, you grab a weapon and head out into the corridor.<br>"What's going on?" you demand.
<<elseif $unit.player.isHasTrait('per_aggressive')>>
Shoving your feet into your <<uequipslot $unit.player 'feet'>>, you grab a weapon and head out into the corridor.<br>"What's going on?" you demand.
<<elseif $unit.player.isHasTrait('per_calm')>>
You don't hear the sounds of combat though, so you calmly get dressed and head out into the corridor.<br>
"What's going on?" you ask.
<<elseif $unit.player.isHasTrait('per_cautious')>>
You don't hear the sounds of combat though, so you calmly get dressed and head out into the corridor.<br>
"What's going on?" you ask.
<<elseif $unit.player.isHasTrait('per_submissive')>>
Hurriedly you jam your feet into your <<uequipslot $unit.player 'feet'>> and walk out into the corridor.<br>
"Um, what's going on?" you ask.
<<else>>
Jamming your feet into your <<uequipslot $unit.player 'feet'>>, you head out into the corridor.<br>
"What's happening?" you ask.
<</if>>
</p>
<p>
<<name _guard>> is the first person you see, apparently <<they _guard>> were heading to your room anyway.<br>
"We have a slave missing," <<name _guard>> says <<uadv _guard>>.<br>
That gets your attention. "Did they escape?"<br>
<<name _guard>> shakes their head. "No, they were taken. We found this in their cell.
</p>
<p>
Unfolding the dirty slip of paper, you find a short note in scratchy handwriting.
</p>
<p>
<i>Thanks for the fucktoy. Since you didn't send one we thought we'd come and help ourselves. You should really do something about your guards. Someone could get in and kill you all in your sleep.</i>
</p>
<p>
"Boss?" <<name _guard>> asks, taking a step back.<br>
<<if $unit.player.isHasTrait('per_aggressive')>>
"Fucking bandits," you say, crumpling the paper in your fist. "Should have fucked them up when I had the chance."
<<elseif $unit.player.isHasTrait('per_calm')>>
"Bandits took them," you say, turning the paper over to ensure there's nothing else written on the back. "I suppose we should have anticipated that."
<<else>>
"Bandits," you say shortly. "We really should do something about them."
<</if>>
</p>
<p>
<<if $fort.player.isHasBuilding('rescueroffice')>>
Hopefully you'll be able to track the bandits down and find your slave again. On the other hand, a free spot in the cells isn't necessarily a bad thing. You'll have to think about that.
<</if>>
You know you have some good trackers amongst your slavers. Maybe you should officially give one of them the duty of recovering slaves—or slavers, should it come to that in the future. Building a <b><<rep setup.buildingtemplate.rescueroffice>></b> would be a good start.
</p><<run new setup.Event(
'a_merchant_s_revenge_payback_is_sweet', /* key */
"A Merchant\'s Revenge: Payback is Sweet", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'unknown',
],
'Event_a_merchant_s_revenge_payback_is_sweet',
{ /* roles (LEGACY) */
},
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
'player': [
setup.qres.You(),
],
},
[ /* outcomes */
setup.qc.Opportunity('a_merchant_s_revenge_payback_is_sweet', {
merchant: "merchant",
player: "player",
}),
],
[ /* restrictions */
setup.qres.UnitGroupNotBusy('a_merchant_s_revenge1'),
setup.qres.VarEqual('mlangmerchantprincequest', '2'),
setup.qres.NoOpportunity('a_merchant_s_revenge_payback_is_sweet'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_a_merchant_s_revenge_payback_is_sweet">><<run new setup.Event(
'a_merchant_s_revenge_visiting_the_captured', /* key */
"A Merchant\'s Revenge: Visiting the Captured", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'watersport',
'fort',
'order',
],
'Event_a_merchant_s_revenge_visiting_the_captured',
{ /* roles (LEGACY) */
},
{ /* actors */
'pc': [
setup.qres.You(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_merchant_s_bandit_0'),
],
'merchant': 'a_merchant_s_revenge1',
},
[ /* outcomes */
setup.qc.Opportunity('a_merchant_s_revenge_visiting_the_captured', {
pc: "pc",
slave: "slave",
merchant: "merchant",
}),
setup.qc.SetCooldownEvent(null, 1000),
],
[ /* restrictions */
setup.qres.VarGte('mlangmerchantprincequest', 1),
],
100, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include 'Opportunity_a_merchant_s_revenge_visiting_the_captured'>><<run new setup.Event(
'a_merchant_s_rage', /* key */
"A Merchant\'s Rage", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'fort',
'city',
],
'Event_a_merchant_s_rage',
{ /* roles (LEGACY) */
},
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
},
[ /* outcomes */
setup.qc.Return('merchant'),
setup.qc.VarSet('mlang_merchantrevenge_caravancount', '0', -1),
setup.qc.VarSet('mlang_merchantrevenge_questrival', '1', -1),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<dialogue $g.merchant>>
You raided one of MY caravans! What were you thinking!?
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'tankard of mead'>>
<<elseif $unit.player.isHasAnyTraitExact(['bg_monk', 'bg_priest'])>>
<<set _pdrink = 'cup of tea'>>
<<else>>
<<set _pdrink = 'glass of wine'>>
<</if>>
The air at the table is tense, despite the wine in front of <<name $g.merchant>> and the _pdrink before you.<br>
"Take me through it again. You got a message that you thought was from me telling you about a new caravan?"<br>
<<if $unit.player.getSpeech() == setup.speech.bold>>
"Yeah. Said to destroy it as usual."
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
"Yep."
<<else>>
"Yes, one leaving the city," you say.<br>
You both pause as a server places a platter of bread, cheese, honey and figs at your table, withdrawing speedily and quietly. Reaching out you prepare a plate and slide it over to <<name $g.merchant>>'s side of the table.
<</if>>
<br>
"And it looked like one of my notes?"<br>
<<if $unit.player.isHasTrait('per_slow')>>
You frown. "Yes?"
<<elseif $unit.player.isHasTrait('per_smart')>>
"Nice paper, expensive ink, unsigned. Said time was of the essence. The hand was a bit different, but that didn't mean it wasn't you."
<<else>>
"Nice paper, expensive ink, unsigned. Said time was of the essence. I mean, sure."
<</if>>
<br>
"Do you bring it?"<br>
Shoving a slice of fig into your mouth, you reach into your bag and pull out a folded sheet of parchment and slide it across the table. Unfolding it, <<name $g.merchant>> examines the message, <<their $g.merchant>> jaw clenching as their eyes dart over it. Turning it over, they examine the map.<br>
<<if $unit.player.isHasTrait('per_smart')>>
"All right," <<they $g.merchant>> says, putting the note down. "If it's not in my hand, then it's not from me, got it?"
<<else>>
"All right," <<they $g.merchant>> say with a sigh, placing the parchment down in front of you and turning it around so you can read the text. Taking out another sheet and lifting out a pen and inkwell <<they $g.merchant>> writes out the message again. "You see how that's not my writing?" <<they $g.merchant>> asks.
<<if $unit.player.isHasTrait('per_slow')>>
It takes a while for <<them $g.merchant>> to explain it to you, but an hour or so later you feel you're going to be able to recognise any more fake letters that get sent to you.
<<else>>
Laid out side by side as they are, the differences are obvious.<br>
"Yeah, I see it," you say, nodding. "I'll just keep an old note handy so I'll be able to see it if it happens again."<br>
"When it happens again," <<name $g.merchant>> says, taking a sip of <<their $g.merchant>> wine. "It'll happen again."
<</if>>
<br>
<</if>>
<br>
Folding up the note you brought, <<name $g.merchant>> slips it into a jacket pocket. <br>
"I'll take this," <<they $g.merchant>> says. "If they got sloppy, maybe I can use it to find them."<br>
Draining <<their $g.merchant>> wine, <<they $g.merchant>> slips out of the booth an rises to <<their $g.merchant>> feet. "I need to get onto this. Enjoy the libations."
<p>
As you sit there using the bread to dredge up the last of the honey and cheese,
<<if $unit.player.isHasTrait('per_evil')>>
you wonder if it's worth taking the other raiding jobs anyway. After all, you're a mercenary and you get paid either way. There's a good chance you can play both <<name $g.merchant>> and <<their $g.merchant>> rival off against one another and profit handsomely from doing so. At least for a while.
<<elseif $unit.player.isHasTrait('per_honorable')>>
you idly wonder if it's worth taking the jobs <<name $g.merchant>>'s rival is going to send your way. It wasn't ever stated that <<they $g.merchant>> was hiring you exclusively. However, that does appear to be the expectation. And you haven't at any point stated that you'd take whatever job came your way. Despite what <<rep $company.player>> does, you've always prided yourself in keeping your sense of honour. And now you'll have to decide what it really means.
<<else>>
you reflect on the fact that <<name $g.merchant>> seems certain <<their $g.merchant>> rival is going to keep sending you jobs. It certainly seems like you could make some quick money raiding both sides, but you can't be certain what the longer term repercussions of that would be.
<</if>>
</p><<run new setup.Event(
'a_very_special_wine_order2', /* key */
"A Very Special Wine Order", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'watersport',
'money',
'order',
'city',
],
'Event_a_very_special_wine_order2',
{ /* roles (LEGACY) */
},
{ /* actors */
'mlangmerchantprince': 'a_merchant_s_revenge1',
'wineagent': 'city_all',
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([
'training_toilet_basic', 'training_toilet_advanced', 'training_toilet_master',
], true),
setup.qres.SlaveUsableByYou(),
],
},
[ /* outcomes */
setup.qc.SlaveMarker('wineagent'),
setup.qc.SlaveOrderFlex(
'Order: The Prince of Cups', /* name */
'independent', /* company */
12, /* expires in */
2000, /* base price */
200, /* trait multi */
0.8, /* value multi */
[ /* crit traits */
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master,
setup.trait.training_toilet_basic,
setup.trait.training_toilet_advanced,
setup.trait.training_toilet_master,
setup.trait.eq_blind,
],
[ /* disaster traits */
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.training_mindbreak,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_toilet_basic, setup.trait.training_toilet_advanced, setup.trait.training_toilet_master], true),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.training_oral_basic,
setup.trait.training_masochist_basic,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.vagina_loose,
setup.trait.anus_loose,
setup.trait.face_attractive,
setup.trait.per_lustful
], 2, 0, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
[ /* restrictions */
setup.qres.VarGte('mlangmerchantprincequest', 1),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.uncommon, /* Rarity */
)>><<dialogue $g.wineagent>>
I'm looking for an...employee with special qualities. I understand you can help me obtain them?
<</dialogue>>
<p>The late morning finds you in your office, bored and with little to do except paperwork that you're putting off until at least this afternoon. The day is overcast and cloudy, and with nothing else to do you
<<set _eq = $unit.player.getGenitalCovering()>>
<<if _eq>>
<<ustripverb $unit.player _eq>> revealing
<<else>>
reach down to play with
<</if>>
your <<ugenital $unit.player>>.
<<set _slave = $g.slave>>
<<if _slave>>
Crooking your finger at <<name _slave>> you sit down on the edge of your chair and spread your legs.<br>
"Get on it," you say, pointing at your <<ugenital $unit.player>>.<br>
<<if $unit.player.isHasDick()>>
<<name _slave>> takes your cock into <<their _slave>> mouth and you lean back, willing yourself to relax and let loose, when there is a knock on your door. Looking up you see a <<therace $g.wineagent>> <<woman $g.wineagent>> who is looking at you with interest.<br>
"Don't stop on my account," <<they $g.wineagent>> says, leaning against the door. "I'm just here to talk business and I <i>like</i> to watch."<br>
<<if $unit.player.isHasTrait('per_chaste')>>
A flush creeps up your face at your leering audience. Shoving <<name _slave>> away you pull back behind your desk and grab for you clothes.<br>
"That's fine," you say. "Who are you?"
<<elseif $unit.player.isHasTrait('per_submissive')>>
You freeze, a trickle of piss seeping out of your cock and down into <<name _slave>>'s eager throat. For a moment you're unsure of what to do and then give in and let go, the gentle sucking on your penis draining you and relieving your bladder. When you're done, <<name _slave>> continues to suckle, familiar enough with you to know what follows a drink.<br>
"Beautiful," the <<woman $g.wineagent>> says, entering the room and taking the seat opposite yours. "I do love seeing such devotion."<br>
For a moment you aren't sure if she's talking about you or <<name _slave>> but decide it doesn't matter. "Who are you, exactly?"
<<elseif $unit.player.isHasTrait('per_lustful')>>
Grinning, you spread your legs wider, grab the back of <<name _slave>>'s neck and pull <<them _slave>> into your crotch. "Great, I love an audience."<br>
There's a spin...a rush.... a vibration in your cock when you piss normally. The feeling of liquid leaving your aptly named piss slit at high speed. When there's a slave on your dick drinking you down, the feeling is different. Not really there. Just the deflation of pressure in your belly and the knowledge that <<name _slave>> is drinking your piss.
<br><br>
You start to stiffen before you're fully done, but you're empty enough that it doesn't bother you. As <<name _slave>> starts bobbing up and down your shaft, you look up at the <<therace $g.wineagent>> by the door.<br>
"Well, now that I've drained my bladder, why don't you come in and we can talk. This could take a while."<br>
The <<woman $g.wineagent>> smiles and walks into the room. "Can I sit on the desk? I'll get a better view there."<br>
You shrug. "Be my guest. Who are you anyway?"
<<elseif $unit.player.isHasTrait('per_sexaddict')>>
Grinning, you spread your legs wider, grab the back of <<name _slave>>'s neck and pull <<them _slave>> into your crotch. "Great, I love an audience."<br>
There's a spin...a rush.... a vibration in your cock when you piss normally. The feeling of liquid leaving your aptly named piss slit at high speed. When there's a slave on your dick drinking you down, the feeling is different. Not really there. Just the deflation of pressure in your belly and the knowledge that <<name _slave>> is drinking your piss.
<br><br>
You start to stiffen before you're fully done, but you're empty enough that it doesn't bother you. As <<name _slave>> starts bobbing up and down your shaft, you look up at the <<therace $g.wineagent>> by the door.<br>
"Well, now that I've drained my bladder, why don't you come in and we can talk. Unless you want to join in?"<br>
The <<woman $g.wineagent>> smiles and walks into the room. "I'm strictly a voyeur. Can I sit on the desk? I'll get a better view there."<br>
You shrug. "Be my guest. Who are you anyway?"
<<else>>
You fight the urge to push back to your desk and hide. Whoever this <<woman $g.wineagent>> is, <<they $g.wineagent>> clearly knows who you are and what business to run—and <<they $g.wineagent>>'s still here.<br>
"I'll just finish up then," you say. Closing your eyes you finish relaxing, and feel your piss start to flow into the eager suckling mouth of your slave, <<name _slave>>. <<They $g.slave>> gulp you down dutifully, and when your flow finally slows to a trickle, <<they $g.slave>> starts to nurse you to backhardness.
<<if $unit.player.isHasTrait('per_cruel')>>
You slap <<them _slave>> away from your crotch and push <<them _slave>> under your desk.<br>
"I'm working," you say bluntly. "Keep me hard but don't distract me."<br>
You smile as you feel <<name _slave>> get to work.
<<elseif $unit.player.isHasTrait('per_kind')>>
You gently push <<them _slave>> under your desk.<br>
"I'm working," you say. "Keep me hard but don't distract me."<br>
You smile as you feel <<name _slave>> get to work.
<<elseif $unit.player.isHasTrait('per_empath')>>
You gently push <<them _slave>> under your desk.<br>
"I'm working," you say. "Keep me hard but don't distract me."<br>
You smile as you feel <<name _slave>> get to work.
<<else>>
You push <<them _slave>> off your cock and snap your fingers, pointing under your desk.<br>
"I'm working," you say. "Get in there, keep me hard but don't distract me."<br>
<<name _slave>> scrambles to obey and you slide your chair in so that your crotch is back within range of <<their _slave>> mouth. You smile as you feel <<them _slave>> get to work.
<</if>>
<</if>>
<<else>>
<<name _slave>> presses <<their _slave>> lips to your pussy, doing <<their _slave>> best to not make a mess as you relax. Still, <<they _slave>> ends up with a lot of piss over <<their _slave>> face.<br>
"You're cleaning up anything you miss," you remind <<them _slave>>.<br>
"Is that why you've gone with stone floors and no rugs?"<br>
Looking up you see a <<therace $g.wineagent>> <<woman $g.wineagent>> who is looking at you with interest.<br>
"Yes," you say, arching your eyebrows. "And who exactly are you?"
<</if>>
<<else>>
<<set _slave = setup.getUnit({job: 'slave'})>>
<<if $unit.player.isHasDick()>>
<<name _slave>> leans forward and starts to suck on your <<udick $unit.player>>, <<their _slave>> lips sliding down over your manhood as <<they _slave>> attempts to get down to the base of your dick.<br>
"Oh, that's nice," you sigh, as lean your head back against the back of your chair, eyes closed as you push <<name _slave>> further and further down on your cock.<br>
"Yes it is."<br>
Looking up you see a <<therace $g.wineagent>> <<woman $g.wineagent>> who is looking at you with interest.<br>
"Don't stop on my account," <<they $g.wineagent>> says, leaning against the door. "I'm just here to talk business and I <i>like</i> to watch."<br>
<<if $unit.player.isHasTrait('per_chaste')>>
You close your legs so suddenly that your knees slam into <<name _slave>>'s head. Thankfully the pain makes <<them _slave>> cry out, rather than bite down, and you pull your cock out of their mouth, grabbing at your clothing to cover your crotch.<br>
"Who the hell are you?" you ask as you push <<name _slave>> away and drag your chair in under the desk so that your lower body is hidden from the <<woman $g.wineagent>>'s gaze.
<<elseif $unit.player.isHasTrait('per_submissive')>>
You feel the familiar flush creep up your belly, over your chest and tint your cheeks. It's embarrassing how easily you get embarrassed. It's also embarrassing how horny it makes you.<br>
"All...all right," you say as you shove your cock further down <<name _slave>>'s throat, causing <<them _slave>> to cough and sputter around your girth. "Who are you again?"
<<elseif $unit.player.isHasTrait('per_lustful')>>
"I didn't plan to," you say as you scooch back to give <<them $g.wineagent>> a better view. "Who are you anyway?"
<<elseif $unit.player.isHasTrait('per_sexaddict')>>
"I didn't plan to," you say as you scooch back to give <<them $g.wineagent>> a better view. "Want to join in?"
The <<woman $g.wineagent>> smiles and walks into the room. "I'm strictly a voyeur. Can I sit on the desk? I'll get a better view there."<br>
You shrug. "Be my guest. Who are you anyway?"
<<else>>
You fight the urge to push back to your desk and hide. Whoever this <<therace $g.wineagent>> is, <<they $g.wineagent>> clearly knows who you are and what business to run—and <<they $g.wineagent>>'s still here.<br>
"I won't then," you say cheerfully. "Slave, show the nice <<woman $g.wineagent>> how you treat your <<Mistress $unit.player>>.<br>
<<name _slave>> redoubles their efforts as the <<therace $g.wineagent>> walks closer, seating herself on the side of your desk to maintian her view.<br>
"So," you say. "Who are you anyway?"<br>
<</if>>
<<else>>
<<name _slave>> leans forward and starts tonguing your pussy, aware that <<their _slave>> welfare depends on how well <<they _slave>> do.
"Oh yeah," you moan as you grind into their face. "You look so fucking nasty down there between by legs you little bitch."<br>
"Yes <<they _slave>> does."<br>
Looking up you see a <<therace $g.wineagent>> <<woman $g.wineagent>> who is looking at you with interest.<br>
"Don't stop on my account," <<they $g.wineagent>> says, leaning against the door. "I'm just here to talk business and I <i>like</i> to watch."<br>
<<if $unit.player.isHasTrait('per_chaste')>>
You close your legs so suddenly that your knees slam into <<name _slave>>'s head. Thankfully the pain makes <<them _slave>> cry out, rather than bite down, and <<they _slave>> don't lose their tongue. Shoving them away, you grab at your clothing to cover your crotch.<br>
"Who the hell are you?" you ask as you drag your chair in under the desk so that your lower body is hidden from the <<woman $g.wineagent>>'s gaze.
<<elseif $unit.player.isHasTrait('per_submissive')>>
You feel the familiar flush creep up your belly, over your chest and tint your cheeks. It's embarrassing how easily you get embarrassed. It's also embarrassing how horny it makes you.<br>
"All...all right," you say as you grind harder against <<their _slave>> mouth. "Who are you again?"
<<elseif $unit.player.isHasTrait('per_lustful')>>
"I didn't plan to," you say as you scooch back to give <<them $g.wineagent>> a better view. "Who are you anyway?"
<<elseif $unit.player.isHasTrait('per_sexaddict')>>
"I didn't plan to," you say as you scooch back to give <<them $g.wineagent>> a better view. "Want to join in?"
The <<woman $g.wineagent>> smiles and walks into the room. "I'm strictly a voyeur. Can I sit on the desk? I'll get a better view there."<br>
You shrug. "Be my guest. Who are you anyway?"
<</if>>
<</if>>
<</if>>
</p>
<p>"My name is <<name $g.wineagent>>, and I'm an procurement agent for <<lore location_princeofcups>>. "<br>
<<if $unit.player.isHasTrait('per_slow')>>
" What do you procure?" you ask.<br>
"Whatevever is needed. Wine. Food, employees and indentured servants."<br>
"Indentured servants?"<br>
"You might call them slaves.<br>
Oh. Suddenly you understand. "Well, I sell slaves," you say.<br>
"I know," she says with a smile. "That's why I'm here."
<<else>>
"And you're here for slaves."<br>
<<name $g.wineagent>> holds up a hand. "My client prefers the term 'indentured servants'. For purely legal reasons, you understand.<br>
You shrug. "If you like," you say. "I don't sell out my clients."<br>
<<They $g.wineagent>> smile. "I'm so very glad to hear that."
<</if>>
<br>
<<dialogue $g.wineagent>>
I do not have information on whether you visited the toilets during your visit to my client's establishment. But I need an...indentured servant who will be able to serve in that capacity. And I'm authorised to pay well.
<</dialogue>>
<<if $unit.player.isHasTrait('per_direct')>>
"You need a piss slave," you say flatly.<br>
<<name $g.wineagent>> sighs. "If you want to be crude about it, yes."<br>
"I like to keep things simple," you say <<uadv $unit.player>>. "Let's talk terms."
<<elseif $unit.player.isHasTrait('per_slow')>>
"You want to buy a piss slave?" you venture.<br>
<<name $g.wineagent>> sighs. "Yes. I want to buy a piss slave."<br>
"You want them to do anything else?"
<<else>>
"I can help with that."
<</if>>
<br>
"Excellent," <<name $g.wineagent>> says, pulling a piece of parchement from the inside of her coat. "I have our requirements—and payment offer—here. Have one of your...crew deliver the employee to their new workplace and you'll be paid on delivery. Just don't tell the guards."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"I ain't that thick," you say with a chuckle.
<<name $g.wineagent>> smiles. "Glad to hear it. Well, thank you for your time"<br>
<<else>>
"Why would I do that?" you ask.<br>
"You'd be amazed how many other mercenary companies don't seem to understand that concept," <<name $g.wineagent>> says drily. "Well, thank you for your time."
<</if>>
<br>
<<if $unit.player.isHasTrait('per_chaste')>>
"And you for your business," you say. "I won't rise if that's all right by you."<br>
<<else>>
<<if $unit.player.isHasDick()>>
Beneath your desk the constant ministrations of your slave have been keeping you on edge the entire meeting and as <<name $g.wineagent>> stands to leave, <<name _slave>> redoubles <<their _slave>> efforts, sending you over the edge as you grip the edge of your desk and cry out in release as you shoot your load down <<their _slave>> throat.<br>
"Thank you for yours too, <<name $g.wineagent>>. I'll stay seated if that's all right by you."<br>
<<else>>
Beneath the desk the oral ministrations of <<name _slave>> have kept you dripping all through the meeting, and now they tip you over the edge as <<name _slave>> guzzles your pussyjuice.<br>
"Thank you for yours too, <<name $g.wineagent>>. I'll stay seated if that's all right by you."<br>
<</if>>
"I am disappointed, I won't lie," <<name $g.wineagent>> says. "But business is business. I'll see myself out."
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'another_new_path', /* key */
"Another New Path", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
],
'Event_another_new_path',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_living_pawst_0'),
],
},
[ /* outcomes */
setup.qc.RemoveTitleGlobal('quest_living_pawst_0'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Since you've decided to promote <<yourrep $g.slaver>> into a slaver, whatever plan the
<<if !$varstore.get('quest_furging_a_new_path_completed')>>
mysterious benefactor
<<else>>
old neko
<</if>>
had for <<rep $g.slaver>> can no longer go through.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'furging_a_new_path', /* key */
"Furging a New Path", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: "",
},
[ /* tags */
'forest',
],
'Event_furging_a_new_path',
{ /* roles (LEGACY) */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
setup.qres.HasTitle('quest_living_pawst_0'),
setup.qres.NoTraits([setup.trait.training_mindbreak, setup.trait.will_defiant, setup.trait.will_indomitable], true),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
],
'you': [
setup.qres.You(),
],
},
[ /* outcomes */
setup.qc.Favor('neko', 100),
setup.qc.Opportunity('furging_a_new_path', {
slaver: "slaver",
slave: "slave",
you: "you",
}),
],
[ /* restrictions */
setup.qres.NoOpportunity('furging_a_new_path'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<if !$varstore.get('quest_furging_a_new_path_completed')>>
<p>
<<Yourrep $g.slave>>'s mind has been restored, thanks to the recent treatment you have arranged for <<therace $g.slave>>.
You have done exactly as asked by the mysterious person behind a letter you received some time ago.
And new reports from your contacts in the <<lore region_forest>> reveal that this same person has apparently fulfilled their
part of the deal. As promised, multiple groups of neko see <<rep $company.player>>
as an ally. An ally for what, you aren't sure, but you don't look at a gift…
neko, in the fang, you guess? While you try to untangle the mind puzzle you
brought upon yourself, you notice another envelope just like the one before
slipped precariously between the other reports detailing multiple slimes
sightings in the vicinity of the <<lore region_city>>.
</p>
<<else>>
<p>
As soon as you sit in your office to relax, you notice an awfully familiar
letter on top of you desk.
It appears the old neko got his whiskers back in your business and had found out of the success
of your treatment for <<rep $g.slave>>.
Time to see what the neko writes to you this time.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_living_pawst_0", /* key */
"Living Pawst", /* name */
"A certain letter has asked you to attempt to restore this slave's mind", /* description */
"a|have been requested by a certain letter to be cured of a|their mindbroken-ness", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Event(
'paws_from_the_past', /* key */
"Paws from the Past", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: "",
},
[ /* tags */
'forest',
],
'Event_paws_from_the_past',
{ /* roles (LEGACY) */
},
{ /* actors */
'neko': [
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('quest_neko_statue_marker'),
setup.qres.AllTraits([setup.trait.training_mindbreak], true),
],
},
[ /* outcomes */
setup.qc.Opportunity('paws_from_the_past', {
neko: "neko",
}),
],
[ /* restrictions */
setup.qres.NoOpportunity('paws_from_the_past'),
setup.qres.NoUnitWithTitle('quest_living_pawst_0', {
}),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
0, /* Cooldown */
setup.rarity.common, /* Rarity */
)>><<if !$varstore.get('quest_furging_a_new_path_completed')>>
<<set _u = setup.getAnySlaver()>>
<p>
As you were reading the reports of what occurred last week,
(including how <<yourrep _u>> broke a plate, again),
a strange letter falls
from between a wage breakdown and an order for more “slave food”.
The envelope has floral designs on its borders and the handwriting is very elegant; clearly,
the person who sent it is a very traditional person, old enough to not know how a mail
room works. Even so, sneaking a letter without being detected hints much about
their skills and determination, so it may be worth to at least see what they
want, and in a possible future, teach them how to contact you without resorting to so much
intrigue.
</p>
<<else>>
<p>
A letter with a familiar envelope is among the mountain of papers on your desk today.
Seems like the old neko has heard about your activities again and in particular about how you have recently found <<rep $g.neko>>. He wants to
make another deal with your company.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'change_to_position', /* key */
"Change to Position", /* Title */
{ /* Author */
name: "Quiver",
url: "https://www.reddit.com/r/FortOfChains/comments/ktx1fr/new_event_post_for_playing_a_submissive_slaver/",
},
[ /* tags */
'fort',
'special',
'unknown',
],
'Event_change_to_position',
{ /* roles */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.AllTraits([setup.trait.per_submissive, setup.trait.per_sexaddict], true),
setup.qres.Trait(setup.trait.join_senior),
setup.qres.NoTitle('quest_slave_leader_of_the_company_0'),
],
'them': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.per_submissive),
],
},
[ /* outcomes */
setup.qc.Opportunity('change_to_position', {
you: "you",
them: "them",
}),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.common, /* Rarity */
)>><<include "Opportunity_change_to_position">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_faraway_land', /* key */
"A Gift from Faraway Land", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'sea',
],
'Event_a_gift_from_faraway_land',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_tease),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_tease),
setup.qres.FavorAtLeast('humansea', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Some culture in the faraway land beyond the <<lore region_sea>> consider sex
as a form of art. They have developed numerous sex techniques to support this, the
infamous of them being their teasing techniques. Even when
fully clothed, you can never know when one of these people would suddenly
approach you, and tease
<<if $unit.player.isHasDick()>>
your dick over their asses,
<<else>>
their dick over your pussy,
<</if>>
forcing an
<<if $unit.player.isHasDick()>>
erection
<<else>>
arousal
<</if>>.
</p>
<p>
Thanks to your incredible relationship with the <<rep $company.humansea>>,
however, now you are in possession of the rare and ancient tome: the <<rep
setup.item.sexmanual_tease>>. From inside the book you can sense unimaginable
power — the power of teasing genitals without actually doing the penetration.
You can already imagine the many uses of such knowledge, and frankly
speaking, you can't wait to try it out. Grinning to yourself, you decide to
visit
<<set _l = $unit.player.getLover()>>
<<if _l>>
your lover <<rep _l>> later during work for some mid-work teasing.
<<else>>
your dungeons later for some fun.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_bank', /* key */
"A Gift from the Bank", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'forest',
],
'Event_a_gift_from_the_bank',
{ /* roles (LEGACY) */
},
{ /* actors */
'neko': 'subrace_neko',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_lick_feet),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_lick_feet),
setup.qres.FavorAtLeast('bank', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Through a series of appropriately placed bribes and investments, your
standings with the <<rep $company.bank>> has grown. They have trusted your
company a great deal now, and in fact, an emissary has just arrived at your fort today to seal
the alliance with a gift.
A proper gift for a person such as you, the <<rep setup.item.sexmanual_lick_feet>>.
</p>
<p>
The book details many sexual pleasures one could derive from getting their
feet worshipped and licked clean. While the book itself is certainly a
valuable gift, you can't feel but notice that the neko messenger smirks a
little at the gift — a bootlicker for a bootlicker perhaps? Either way, this
is a valuable gift, and you grudgingly thank the messenger before putting
the book in your shelf for later perusal.
</p>
<p>
You can see <<yourrep _u>> smirking at you for receiving such a gift and for the connotation it
brings. You make a mental note to put the <<uadjgood _u>> <<urace _u>> in a
dangerous mission later this week.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_city_of_lucgate', /* key */
"A Gift from the City of Lucgate", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'city',
],
'Event_a_gift_from_the_city_of_lucgate',
{ /* roles */
},
{ /* actors */
'them': 'subrace_humankingdom',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_breasts_kiss),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_breasts_kiss),
setup.qres.FavorAtLeast('humankingdom', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Recently, you have built a number of strong lasting friendship with several important
people in the <<lore region_city>> and the <<rep $company.humankingdom>>. Today,
an emissary they dispatched has arrived in your compound, bringing you a
gift suitable for a... "mercenary" company such as yours. As the messenger
bows and exits the room, <<yourrep _u>> opens the gift, revealing the
<<rep setup.item.sexmanual_breasts_kiss>> within.
</p>
<p>
The gift is a sex manual, certainly an interesting way to express that while they actually know what your
company is all about, they still appreciate your efforts nonetheless. Thinking
of a thoughtful gift in return, you shelf the manual for now and begin to work.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_dark', /* key */
"A Gift from the Dark", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'desert',
],
'Event_a_gift_from_the_dark',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_tentacle_spitroast),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_tentacle_spitroast),
setup.qres.FavorAtLeast('demon', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _w = $company.player.getUnits({job: setup.job.slaver}).filter(u => !u.isYou() && u.isHasTrait('magic_earth_master'))>>
<<set _u = setup.getAnySlaver()>>
<<if _w.length>>
<<set _u = _w[0]>>
<</if>>
<p>
As you go around per your usual schedule, the sky surrounding your fort suddenly
turns dark, and you can see purple magical vortex swirling far up on the sky above
you. As you and your slavers brace for the incoming rain of corruption,
what comes outside of it instead is a single box, which harmlessly lands on the
courtyard before the sky clears itself again. From your window, you see
<<yourrep _u>> curiously poking a stick to the seemingly harmless box, before
<<uadv _u>> opening it, revealing a dense tome inside.
</p>
<p>
The tome turns out to be an incredibly rare <<rep
setup.item.sexmanual_tentacle_spitroast>>, describing what one could possibly
do to slaves should they are blessed with tentacles.
Well, that's not very useful, as neither you nor any of your slavers happens to possess
tentacles, but then <<yourrep _u>> reminds you that certain masters of <<lore
magic_earth>> are capable of summoning tentacles.
<<if $unit.player.isHasTrait('magic_earth_master')>>
You happen to be one of those select people, and after studying the tome for
a good while you've concluded that you should be able try some of these techniques
out on the slaves later...
<<elseif _u.isHasTrait('magic_earth_master')>>
<<Yourrep _u>> happens to be one of those gifted people, and you can see the
<<if _u.isHasTrait('per_honorable')>>
honorable slaver's disgust towards you and your degenerate ideas.
<<else>>
slaver's delight in trying the technique out.
<</if>>
<<else>>
Unfortunately, none of your slavers are currently capable of using that magic,
so the tome shall remain shelved for the time being.
<</if>>
</p>
<<if $unit.player.isHasTrait('per_submissive')>>
<p>
Later that night, you woke up in the middle of the night to
<<if $unit.player.isHasDick()>>
an erection,
<<else>>
a wet dream,
<</if>>
after dreaming having all your available orifices penetrated by big, viny tentacles.
You should probably get that submissive mind of yours checked by the resident doctor...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_desert', /* key */
"A Gift from the Desert", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'sea',
],
'Event_a_gift_from_the_desert',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_grope),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_grope),
setup.qres.FavorAtLeast('humandesert', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Your friendship with the <<rep $company.humandesert>> has not gone unnoticed
by the many kingdoms that lie even further east of the deserts. Today, you've received a gift
from one such kingdoms, but instead of gold or jewelry it is... a sex manual.
In fact, it is the famous <<rep setup.item.sexmanual_grope>>, detailing the various finer points of
groping one's body.
</p>
<p>
You can overhear <<yourrep _u>> chuckles as <<they _u>> sees you open the gift, and
<<they _u>> helpfully suggests that perhaps this is simply a gesture of good will from
the infamous Kurdwisec, a king infamous for his lunacy in the deserts.
Sighing in acknowledgement, you decide to shelf the book for now, but give
yourself a mental reminder to come back to the book later during "fun time"
hours.
</p>
<p>
For once, there are much to be done today, and reading a sex manual is not
one of them yet.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_dragonkins', /* key */
"A Gift from the Dragonkins", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'sea',
],
'Event_a_gift_from_the_dragonkins',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
setup.qres.Home(),
],
'dragon': 'subrace_dragonkin',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_bodypart_tail),
setup.qc.SlaverMarker('dragon'),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_bodypart_tail),
setup.qres.FavorAtLeast('dragonkin', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
A winged dragonkin messenger clad in full armor has come to your compound
today. The mighty messenger brings you a gift, as a token of your strong
friendship with <<rep $company.dragonkin>>. You open the carefully wrapped
gift, and discover the <<rep setup.item.sexmanual_bodypart_tail>> instead.
This book is the "karmasutra" of the dragonkins, depicting the various sexual
acts one could do if should they are blessed with a tail. A fitting gift for a
slaving company such as yours.
</p>
<<if $unit.player.getTail()>>
<p>
Your <<utail $unit.player>> twitches as you continue to read the book, as if
your tail has a mind of its own, eager to try the techniques out.
You do not blame your tail, and you proceed to pick up <<yourrep $g.slave>> from
the dungeons. Following the book's instruction, you slither your tail into the
entrance of <<their $g.slave>> <<uhole $g.slave>>, before <<uadv
$unit.player>> shoving it inside <<them $g.slave>>. As you are inexperienced,
you shove it hard and rough, eliciting a pained moan from <<yourrep
$g.slave>>. To your surprise, the sensation of having your tail rub against
the inner walls of <<rep $g.slave>> is quite pleasurable, and you reach
climax soon-after.
All the while the messenger watches amusedly as you learn firsthand how
pleasurable it is using your own tail to penetrate a slave.
</p>
<<else>>
<p>
You might not have the tail to use the techniques in this book for now, but
who knows? Maybe one day you'll somehow be able to experience the
sensation of having a tail penetrate another.
</p>
<</if>>
<p>
You thank the messenger for the kind gift, and <<they $g.dragon>> departs
from your fort accompanied with a blast of wind from <<their $g.dragon>> powerful wing
muscles.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_elves', /* key */
"A Gift from the Elves", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'item',
],
'Event_a_gift_from_the_elves',
{ /* roles */
},
{ /* actors */
'elf': 'subrace_elf',
},
[ /* outcomes */
setup.qc.SlaveMarker('elf'),
setup.qc.Item(setup.item.sexmanual_deepthroat),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_deepthroat),
setup.qres.FavorAtLeast('elf', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Today, you receive a gift, brought by one of the elven messengers to
celebrate your lasting friendship with <<rep $company.elf>>. A simple book,
detailing vairous deep-throating techniques. As you recall, the elves have a long
tradition of using their alchemical prowess to concoct elixirs capable of
making one safely deep-throat even the longest of phallus. But you never know
the technique has been passed down for generations in the form a book, that is now
your <<uhands $unit.player>>.
</p>
<p>
The elves are reclusive people however, and the messenger seems to have no
intention whatsoever of demonstrating the techniques in the book for your
amusement. Instead, the messenger simply bows and goes on <<their $g.elf>>
separate way, far away from your fort. All's that's left is you and the <<rep
setup.item.sexmanual_deepthroat>>, sitting on your desk, waiting your
perusal.
</p>
<p>
Perhaps you can make time to visit a slave or two in your dungeon today.
<<if $unit.player.isHasTrait('per_submissive')>>
Preferably one with the longest cocks, to try the techniques yourself... wait
what are you thinking about you submissive slut!
<<else>>
<<if $unit.player.isHasDick()>>
You can already feel your cock twitching at the thought of forcing it deep down a slave's unprepared throat.
<<else>>
You'd best prepare your longest and scariest strap-on for the sure to be fun little event.
<</if>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_lizardkins', /* key */
"A Gift from the Lizardkins", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'sea',
],
'Event_a_gift_from_the_lizardkins',
{ /* roles (LEGACY) */
},
{ /* actors */
'lizardkin': 'subrace_lizardkin',
},
[ /* outcomes */
setup.qc.SlaverMarker('lizardkin'),
setup.qc.Item(setup.item.sexmanual_nibble_neck),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_nibble_neck),
setup.qres.FavorAtLeast('lizardkin', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
In the recent weeks, you've made great allies with the reclusive <<rep
$company.lizardkin>>. These people are rather awkward at communicating with
people outside of their tribe, and it shows even now. They've come to your fort
today, bearing a strange gift. While the gift happens to be suitable for a slaving
company such as yours, it would be awkward anywhere else: the <<rep
setup.item.sexmanual_nibble_neck>>.
</p>
<p>
The book explains in great details, perhaps in too much details, of how these lizardkin
people make love with each other.
<<if $unit.player.isHasTrait('subrace_lizardkin')>>
Being a lizardkin yourself, you know these techniques well, but you can
only guess what kind of face your other slavers would make when they read this book
once it's stored in your classroom...
<<elseif $unit.player.isHasTrait('race_lizardkin')>>
As a <<urace $unit.player>>, you are closely related to lizardkins, and hence
you are somewhat familiar with these mating rituals. Despite that, the depth
to which this book goes to explicitly describe the acts still intrigues you,
and before you know it you have finished reading the book.
<<else>>
Still, the book describes these raunchy acts very well, and you become absorbed in the book.
Before you know it, you've finished reading the book.
<</if>>
Reading the entire sexy tome somehow jots your creativity, and
you can't wait to try out some of these new knowledge on some unsuspecting slave...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_nekos', /* key */
"A Gift from the Neko", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_a_gift_from_the_nekos',
{ /* roles */
},
{ /* actors */
'neko': 'subrace_neko',
},
[ /* outcomes */
setup.qc.SlaveMarker('neko'),
setup.qc.Item(setup.item.sexmanual_earsblowjob),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_earsblowjob),
setup.qres.FavorAtLeast('neko', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
A lone neko has arrives at your fort today, bearing a gift for you from the
<<lore location_npc>>. Apparently, the neko have somehow trusted your
company, and would like to express their trust in the way they know best. As
the lone neko neko|enter your office, <<they $g.neko>> neko|lock the door and neko|close the
curtain before opening <<their $g.neko>> present to you. A rare and valuable manual: the
<<rep setup.item.sexmanual_earsblowjob>>.
</p>
<<set _eq = $unit.player.getGenitalCovering()>>
<p>
Without warning, the sensual neko neko|push you to your chair and neko|kneel down.
<<if !$unit.player.isHasDick()>>
<<set _d = 'strap-on'>>
<<They $g.neko>> neko|affix a strap-on on your genital area, before proceeding to
<<elseif _eq>>
<<set _d = 'dick'>>
<<They $g.neko>> neko|undo your <<rep _eq>> and neko|proceed to
<<else>>
<<set _d = 'dick'>>
<<They $g.neko>> neko|see your naked <<ugenital $unit.player>> and neko|proceed to
<</if>>
suck on the <<= _d>>.
<<Their $g.neko>> ears neko|twitch all the time, much more frequent than
other neko you've had the pleasure to face-fuck before,
and you have the bright idea to use them as handles for
an even harder face-fuck.
The two of you made love until you reach climax,
<<if $unit.player.isHasDick()>>
spluttering all your cum down the neko's clearly experienced throat.
<<else>>
shuddering in ecstacy.
<</if>>
Having fulfilled <<their $g.neko>> goal of teaching you the new knowledge
inside the manual, the neko professionally neko|bid you and your company farewell,
leaving you and the <<rep setup.item.sexmanual_earsblowjob>> alone.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_orcs', /* key */
"A Gift from the Orcs", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'desert',
],
'Event_a_gift_from_the_orcs',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_cockaction),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_cockaction),
setup.qres.FavorAtLeast('orc', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Today, an emissary from the <<rep $company.orc>> has arrived in your
compound. He brings a gift from the orc king himself, as a gesture of
goodwill towards the new friendship you are building with them. This gift
comes in the form of a rare sex manual, the <<rep
setup.item.sexmanual_cockaction>>, passed from generation to generation in
the orcish camp.
</p>
<p>
To demonstrate the techniques hidden within,
the emissary wordlessly descends into your dungeons together with
you, before grabbing the nearby <<rep $g.slave>>. He then strips his leg
armors, revealing a massive dong to the horror of <<yourrep $g.slave>>.
<<ustripmouth $g.slave>>. The orc then roughly shoves the length of the shaft
down the slave's throat, before pulling it out and slapping the slimy and
massive erection across the poor slave's face, covering <<their $g.slave>>
face is a mixture of saliva and precum.
</p>
<p>
Once the orc finishes by cumming down the slave's throat, you escort the
emissary back to the entrance while leaving the poor slave to recover from
choking on and being slapped by such a massive hard-on. You swear you can see
<<yourrep _u>> writing down some notes about the newly unlocked sex action,
no doubt eager to try it with some unsuspecting slave.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_outlaws', /* key */
"A Gift from the Outlaws", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'fort',
],
'Event_a_gift_from_the_outlaws',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Home(),
],
'outlaw': 'all',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_nipple_pinch),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_nipple_pinch),
setup.qres.FavorAtLeast('outlaws', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
An anonymous package has arrived at your fort today. Despite bearing no
obvious information about its sender, judging from the markings left on the
packaging this is no doubt being sent by one of your <<rep $company.outlaws>>
contacts, as a result of your excellent relations with them. As you <<uadv
$unit.player>> open the package, <<yourrep _u>> arrives just in time as the
content is unveiled: a rare <<rep setup.item.sexmanual_nipple_pinch>>.
</p>
<p>
Unsure how to use this gift, <<rep _u>> <<uadv _u>> reads it on your behalf
instead, before heading straight to the dungeons to pick up <<yourrep
$g.slave>>. Without warning, <<reps _u>> invading <<uhand _u>> slither straight into the
slave's <<ubreasts $g.slave>> and into <<their $g.slave>> nipples.
Helpless to do anything, the slave is forced to watch and moan as <<rep _u>>
plays with the nipples, first tentatively twisting it before pinching it
hard. At the end of the play, the slave is panting in heat, <<their
$g.slave>> nipples hard from the rough play.
</p>
<p>
Placing the book on the shelf, you can feel the heat starting to rise from under you as well.
No doubt you'll be revisiting this shelf very soon, to test this new
technique out<<if $unit.player.isHasTrait('per_submissive')>>
on your own submissive little nipples<</if>>...
</p><<run new setup.Event(
'a_gift_from_the_royals', /* key */
"A Gift from the Royals", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'item',
'city',
],
'Event_a_gift_from_the_royals',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_upsidedown, 1),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_upsidedown),
setup.qres.FavorAtLeast('royal', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
A strange, anonymous gift has arrived at your fort today. While it does not have the identity of its senders anywhere, judging from the faint scent of roses as well as the impeccably ribbon wrapping, you have little doubt it comes from one of your contacts within the high class <<rep $company.royal>>. Indeed, you've made quite an impression with some members of the court, and perhaps this is their way of showing goodwill without anything to tie you back to them.
</p>
<p>
Opening up the wrapping reveals an exotic tome: the <<rep setup.item.sexmanual_upsidedown>>, depicting the many sexual pleasure one could derive from having their partner in bondage. Amongst the many sex instructions found within, one stuck out the most — the so-called standing 69. With the help of manacles hanging from the ceiling, one could potentially hang their partner upside down from the ceiling, ensuring that your genital would be just at the right height of their mouth and vice-versa.
</p>
<p>
While you do need specialized furniture to enact this pleasurable position, you remember that you do have some manacles hanging from the ceiling of your dungeons. Perhaps one of your slaves might be up for testingj next time...
</p>
<p>
Why would the royals have access to this kind of kinky book, though?
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_valefolks', /* key */
"A Gift from the Valefolks", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'vale',
],
'Event_a_gift_from_the_valefolks',
{ /* roles */
},
{ /* actors */
'outlaw': 'all',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_slap_ass),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_slap_ass),
setup.qres.FavorAtLeast('humanvale', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
Recently, your bond with the <<rep $company.humanvale>> has grown quite
considerably, and you can be considered their allies now.
In fact, you've been hosting several of the northern vale leaders recently.
In the last feast, one of the valefolks haned over to you a gift — a gift representing
an important part of their culture in the form of a book:
the <<rep setup.item.sexmanual_slap_ass>>.
</p>
<p>
The valefolks are rough and tumble people, and they consider slapping each
other's ass as a common greeting. Rubbing your <<uhands $unit.player>> over your ass, you still
remember the stinging slap delivered by one of the vale leaders, which turns out
to be a rather amiable greeting for them.
<<if $unit.player.isHasTrait('per_submissive')>>
As a (secretly!) submissive little slut, you relish the memory every now and
then.
<<else>>
You can never get used to such an odd greeting.
<</if>>
But perhaps this... greetings... can be made more useful in the bedroom.
</p>
<p>
As you put the book in your shelf you can hear <<yourrep _u>> yelping, no
doubt receiving one of the greetings being delivered playfully by one of your
other slavers. They certainly have learned much from the <<rep $company.humanvale>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_gift_from_the_werewolves', /* key */
"A Gift from the Werewolves", /* Title */
"darko", /* Author */
[ /* tags */
'item',
'vale',
],
'Event_a_gift_from_the_werewolves',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_balls),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_balls),
setup.qres.FavorAtLeast('werewolf', 800),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
A werewolf warrior has arrived today at your fort, bearing a gift from his pack,
no doubt thanks to your excellent relatio with <<rep $company.werewolf>>.
A classic and valuable werewolf tome, the <<rep setup.item.sexmanual_balls>>,
details the various sexual acts one could perform upon another's balls.
Without saying any word, you and the werewolf head over into your dungeons,
with understanding between the two of you of what would unfold next.
</p>
<p>
<<Yourrep $g.slave>> slave|is roughly yanked from <<their $g.slave>> resting
place, and the werewolf shoves his considerable member down into the slave's
throat. As the slave struggles to breathe, the werewolf suddenly slide his
member out of the <<umouth $g.slave>>, before pushing the slave down and pressing <<their
$g.slave>> face into his balls. With a commanding tone, the werewolf orders
the slave to lick his hairy balls, and in the face of such an alpha, <<they
$g.slave>> slave|have no choice but to obey.
</p>
<p>
This goes on for quite a while, and you can feel the warmth rising from under
as you watch the entire hot scene unfolds.
<<if $unit.player.isHasTrait('per_submissive')>>
You secretly fantasize being in the slave's position, servicing your alpha
with your tongue.
<<else>>
<<if $unit.player.isHasDick()>>
Your balls are jealous at the servicing the werewolf's balls are currently being given,
but there is no doubt you'll get the opportunity sooner or later
now that you have obtained the <<rep setup.item.sexmanual_balls>>.
<<else>>
While you may not have balls, you can certainly put this knowledge to good use.
<</if>>
<</if>>
</p>
<p>
With the demonstration over, the werewolf solemnly nods to you before
reequipping his trousers and leaving your fort. All that's left from the werewolf is
a sex manual sitting nicely on your desk, and the demonstrative act that has been burned
into your memory.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
As you were going by your usual business, the sky above your fort (and only
above your fort) suddenly turns 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 any flesh unlucky enough to be touched by the corruption.
</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 are currently at home
become noticably corrupted.
</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>>, whom you have angered recently.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Recently, you have somehow made a very dangerous enemy: a dark dragon
lord of the <<lore region_sea>>.
With your relationship finally reaching breaking point, the great dark dragon
has personally come to visit your fort and unleash woes upon it.
Before you can even react, the walls of your fort has melted into a slimy substance,
and tentacled abominations starting to spawn from these walls,
touching and corrupting the many flesh they touch.
Eventually, the dragon lord feels that punishment has been delivered and leaves your fort.
The fort's structures surprisingly 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'revenge_of_the_elves', /* key */
"Revenge of the Elves", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_revenge_of_the_elves',
{ /* roles */
},
{ /* actors */
'elf': 'subrace_elf',
},
[ /* 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 */
setup.rarity.always, /* Rarity */
)>><p>
A strange visitor has come to your fort, a <<male $g.elf>> of unknown origin.
<<They $g.elf>> elf|come 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 reveals <<themself $g.elf>>
to be 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 turns 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 both you
and your slavers.
</p>
<p>
When you awake next day, the elf is 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(
'curse_bestowed', /* key */
"Curse Bestowed", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_curse_bestowed',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('demon', -20),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
],
[ /* restrictions */
setup.qres.IreAtLeast('demon', 20),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Bad luck happens to everyone. Sometimes you'd just stumble on a rock for no reason, while some other times a bird shite or two would just so happen to drop right on top of you. But when several of your slavers just so happens to fell flat into the ground from a bump on the earth shaped exactly just like a penis, fell flat onto the phallus on their asses before some kind of liquidy substance just so happen to drop from the sky and into their mouths, you know it's not bad luck at play anymore.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> thinks that some of your slavers might just have been cursed by demonic beings. As you recall, your relationship with the <<rep $company.demon>> has rather soured in the recent weeks, and perhaps they've decided to exact karma upon you by cursing some of your slavers.
</p>
<p>
There's nothing you can do at this point, except maybe to try and cleanse the curses by blessing them one way or another. And not to anger the demons again next time!
</p><<run new setup.Event(
'elvish_hex', /* key */
"Elvish Hex", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_elvish_hex',
{ /* roles (LEGACY) */
},
{ /* actors */
'elf': 'subrace_elf',
},
[ /* outcomes */
setup.qc.Ire('elf', -20),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
setup.qc.CurseRandomSlaverHome(),
],
[ /* restrictions */
setup.qres.IreAtLeast('elf', 20),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Your slavers don't spend all their free time inside the fort.
Sometimes, they would go out into the nearby taverns to enjoy something else other than slave sex and
peruse the local selection of wares.
They usually return to your fort with nothing but smile on their face, but sometimes, they would also get something else during the r&r.
</p>
<p>
Yesterday, some of your slavers returned from those taverns and bragged about how they had
been blessed by a
<<if $g.elf.isMale()>>
ruggedly handsome
<<else>>
exotically beautiful
<</if>>
elven priest they just so happen to find in the tavern while being quite drunk.
You raised an eyebrow on this, of course, since there was so many things wrong with the story.
What's an elven priest doing in the vales, far from their home?
A priest going into the taverns?
And why would they bless your slavers known for their depravities?
</p>
<p>
Your questions are answered today, as instead of a blessing, it seems that your slavers
were bestowed by a terrible curse instead. Throughout the day, they would find themself in strange
precarious situations. It seems that instead of a blessing, your slavers were bestowed with
an elven hex instead. Come to think of it, you did anger some factions among the
<<rep $company.elf>> recently, and perhaps this is their way of showing their "gratitude"
for all you've done...
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Today has been a stressful day, with many new assignments and many antics
from your slavers occupying your mind. As you contemplate using <<yourrep
$g.victim>> to ease the stress, a sudden magical circle
forms under <<yourrep $g.victim>>. Before your eyes, <<their $g.victim>> body
disintegrates, no doubt being transported to another plane via portal magic.
As the magic finishes, there are no trace left of <<rep $g.victim>>, outside
of their equipment which falls into the floor.
</p>
<p>
The elves are said to be masters 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 decide to retaliate. Still, somehow you are able to
track down <<reps $g.victim>> location. <<uneedrescue $g.victim>>, but it
will sure be an incredibly difficult job to do.
</p>/* PROOFREAD COMPLETE */
<<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': 'subrace_dragonkin', },
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.MissingUnitRecapture('victim', 'escapehard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
The sun shines brightly today, and just as you thought the day is perfect for once,
a sudden chill freezes your entire compound. Paralyzed from an unknown force, you
can't do anything but watch as a majestic blue-colored dragonkin descend
from the sky into your compound. <<They $g.dragon>> calmly walks around your
compound as if nothing had happened, inspecting some of your slaves until settling
at <<yourrep $g.victim>>. "You will do," the dragonkin says calmly as <<they $g.dragon>>
takes <<rep $g.victim>> and carries <<them $g.victim>> effortlessly back into
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>/* PROOFREAD COMPLETE */
<<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': 'subrace_dragonkin', },
[ /* outcomes */
setup.qc.Ire('bank', -20),
setup.qc.MissingUnitRecapture('victim', 'escapehard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('bank', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Through your recent actions, your reputation with the powerful <<rep
$company.bank>> has suffered greatly. And now, it has come to bite you in
the ass as a representative of the bank comes today to your fort demanding <<yourrep
$g.victim>> as payment for your grievances against them.
</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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Despite the long distance, your company has somehow maintain a positive
relationship with the <<rep $company.humansea>>. But recent events have
painted your company in a much worse light for them, and apparently they have
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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_dragonkin_disapprove', /* key */
"The Dragonkins Disapprove", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_the_dragonkin_disapprove',
{ /* roles */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.Favor('dragonkin', -500),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20),
setup.qres.FavorAtLeast('dragonkin', 500), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Your company has maintained a friendly relationship with the elusive <<rep $company.dragonkin>> --
a truly remarkable feat. But due to recent events, your company has simultaneously irked
these aloof species, and they have finally have enough of you.
It seems that they've cut relations with you, and you'll have to rebuild it
should you still with to regain their trust...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_nekos_disapprove', /* key */
"The Neko 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 */
setup.rarity.always, /* 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 have boycotted your
company from the city. As a result, your relationship with the neko suffer
greatly. Perhaps you should not have irked the cats too much.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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 has been shaken to the core. Today, you receive a messenger from them,
indicating their wishes to become more distant with your company. Ah well,
perhaps they make better pets than allies.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Several of your slavers report to work today with heavy injuries. 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'gift_of_the_lizardkin', /* key */
"Gift of the Lizardkins", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_gift_of_the_lizardkin',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('lizardkin', -20),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
setup.qc.InjureRandomSlaverHome(),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('lizardkin', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Some of your slavers report to duty today while sustaining injuries.
Apparently, someone has planted
numerous booby traps just outside of your fort's compound.
Judging from the design of the traps, you can only guess that this must be the work of
<<rep $company.lizardkin>>, who has harbored quite a bit of grudge against your company in the past
months.
</p>
<p>
Sighing, you organize the rest of your slavers to sweep the area clean. Some additional slavers are
injured during the sweeping, but at least the compound becomes safe again now.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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,
while 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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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 your slavers'
injuries as best as you could. Perhaps making enemies of the orcs were not
such a bright idea after all...
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
You have made dangerous enemies in the recent weeks, including
some executives in 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 the 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 in the future.
You consider 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'court_gossip', /* key */
"Court Gossip", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_court_gossip',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('royal', -20),
setup.qc.IreSpread('royal'),
],
[ /* restrictions to generate */
setup.qres.IreAtLeast('royal', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Recently, you have somehow made crucial enemies within the vindictive <<rep $company.royal>> of the
<<rep $company.humankingdom>>.
In particular, many ladies there is starting to show disdain towards your company.
Given your slavery background, it would not do for these ladies should their connections
towards you be well known, and hence they resorted to something they are incredibly familiar with
to undermine your company: gossips.
Within days, gossips spread very fast about the multiple inadequacies of your company,
and before long many other companies starting to view your company with much less respect than before...
</p>
<p>
Perhaps it would be a sound advice not to make enemies of these women, but what is done is done.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Recently, your company's evil deeds is at the tip of the tongue of the many women
on the <<lore region_vale>>. They spread the words quickly, and soon enough many are made aware
of the atrocious crimes your companies may or may not have done in the past.
There is nothing you can do right now, but perhaps it would be wiser not to
anger these gossip-frenzied women of the <<lore region_vale>> next time...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'daylight_robbery', /* key */
"Daylight Robbery", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_daylight_robbery',
{ /* roles */
'slaver': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
},
{ /* actors */
},
[ /* outcomes */
setup.qc.MoneyCustom(-15000),
setup.qc.Ire('royal', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('royal', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
A strange letter has arrived at your fort today, smelling faintly of roses.
But it contains nothing even remotely sweet.
It is a threat, and one you could not refuse: you have irked some people
within the <<rep $company.royal>> who threatened to reveal your atrocities to the
rest of the court. Given how much the king abhors slavery, this would no doubt
plunge your company's reputation to the dirt, and there would be no more job you
could possibly pick up afterwards.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
The letter demanded you pay repatriations for your crimes against them -- a hefty sum of
<<money 15000>> to be delivered to a specific spot near the city.
With no other way around it, you sighed and ordered <<rep _u>> to pack up some of your hard-earned
coins and set off to the spot.
</p>
<p>
Perhaps you should rethink your actions more carefully in the future -- nothing good ever comes
from antagonizing these powerful people...
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
As you are doing the daily accounting for your money, you notice a large sum
has recently went missing. Upon further scrutiny, it seems that your company
has made a very bad purchase some time in an eastern city. Apparently <<yourrep
$g.slaver>> slaver|was swindled by an unscrupulous merchant from the east,
losing much of your money. The <<uadjbad $g.slaver2>> slaver <<rep
$g.slaver2>> slaver2|was also swindled, and probably many more of your slavers.
</p>
<p>
In fact, talking to the rest of the fort reveals 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. You consider being more careful in the future, and to avoid
making these people as your enemy, but in the meantime you can always channel your
frustration into one of your slaves.
</p>/* PROOFREAD COMPLETE */
<<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,
setup.rarity.always, /* Rarity */
)>><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>>
slaver|have a very good reason this time. According to
the slaver, your coffers have been robbed a group of ninjas, who came in the
dead of the night, infiltrated 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 <<lore region_sea>>, whom your company
have irked in the recent past.
</p>/* PROOFREAD COMPLETE */
<<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,
setup.rarity.always, /* Rarity */
)>><p>
Your slavers wake up today with a light feeling in their pockets. Literally,
this time, as somehow a huge sum of money has 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>> alone.
</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 stolen 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'tax_collector', /* key */
"Tax Collector", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_tax_collector',
{ /* roles */
'slaver': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
},
{ /* actors */
'tax': 'subrace_humankingdom',
},
[ /* outcomes */
setup.qc.MoneyCustom(-10000),
setup.qc.Ire('humankingdom', -20), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('humankingdom', 20), ],
0, /* Cooldown */
setup.rarity.always, /* 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 comes to your office
to collect some... tax?
It turns 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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><<include 'Quest_angry_peasants'>>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><<include 'Quest_desert_raider'>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'lizardkins_at_your_doorstep', /* key */
"Lizardkins at Your Doorstep", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_lizardkins_at_your_doorstep',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Ire('lizardkin', -20),
setup.qc.QuestDirect('lizardkins_at_your_doorstep'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('lizardkin', 20),
setup.qres.Building('veteranhall'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include 'Quest_lizardkins_at_your_doorstep'>>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><<include 'Quest_orc_invasion'>>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Today, you have half a mind to tie up <<yourrep $g.slaver>> in your office as
decoration. <<Theslaver $g.slaver>> had fallen victim to a pick-up scam: <<they $g.slaver>>
slaver|was promised great rewards 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 partner disappears into the vast deserts of the
east...
</p>
<p>
As much as you'd like to castrate <<yourrep $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 transgressions against the <<rep
$company.humandesert>>. Either way, the task now falls onto your <<uhands $unit.player>>.
<<uneedrescue $g.victim>>.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Ever since slavery was banned ten years ago, the people of the <<rep $company.humankingdom>>
abhor 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 the representatives of the <<rep
$company.humankingdom>>, comes into your fort and launches a surprise attack on your
fort. While you and your slavers manages to fend off their attacks from
damaging the compound, there are nobody to guard the dungeons. When the
assault ends, <<yourrep $g.victim>> victim|is nowhere to be seen, quite
possibly being rescued by the adventurers on order from the <<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 restore 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 region_city>>...
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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
kidnapped one of your slavers, <<yourrep $g.victim>>, straight from your
fort. You have a mind to scold <<rep $g.slaver>> for allowing such a
brazen kidnapping to happen, but on the other hand you should probably spend
your time thinking how to get the slave back, if you wish.
<<uneedrescue $g.victim>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'cold_blooded', /* key */
"Cold-Blooded", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_cold_blooded',
{ /* 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('lizardkin', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('lizardkin', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
As you walk around the fort, you see <<yourrep $g.victim>> making <<their $g.victim>> way walking past
the river next to the fort, just after <<they $g.victim>> finish <<uhobbyverb $g.victim>>.
A ripple forms in the water and suddenly a lizardkin warrior leaps from the water.
You are too far to do anything but watch as <<rep $g.victim>> victim|is
dragged away from your fort and into the water.
By the time you arrive at the river, neither the lizardkin nor your <<urace $g.victim>> slaver
are anywhere to be seen.
</p>
<p>
This is no doubt a retaliation attempt from <<rep $company.lizardkin>> for
the relatively evil deeds you have performed against them.
No use in dwelling on that for now though -- <<uneedrescue $g.victim>>.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
In the recent months, you have somehow made enemies with the local brigand
gang. And today, you reap the consequences as <<yourrep $g.slaver>> reports
that <<yourrep $g.victim>> victim|is nowhere to be seen. Searching through the
entire fort, from their room to the empty dungeon cells yields nothing, as
if <<rep $g.victim>> victim|have just vanished into thin air. That is, until you see
the news that <<rep $g.victim>> 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 have 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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Today, you are greeted by <<yourrep $g.slaver>>, who brings bad news. Last
night, when <<they $g.slaver>> slaver|was 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 had 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 urgent 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>/* PROOFREAD COMPLETE */
<<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': 'subrace_neko', },
[ /* outcomes */
setup.qc.Ire('neko', -20),
setup.qc.MissingUnit('victim'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('neko', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Recently, you noticed <<yourrep $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>> victim|have been missing from your compound.
</p>
<p>
Given the pristine state of <<their $g.victim>> room, it seems that <<rep
$g.victim>> had been lured into voluntarily quitting from your company. You
start 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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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 cannot get any worse, the
sky suddenly turns dark. As you stare into the sky cursing your luck, a dark
tendril lurches very fast into your compound, grabbing <<yourrep $g.victim>>, and
within moments sucks <<theslaver $g.victim>> back 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 in the land beyond <<lore concept_mist>>.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
Your sleep today is disrupted by the sound of smoke and explosion coming
from the <<rep setup.buildingtemplate.lodgings>>. When you arrive, you see
several ninjas standing on the roof of your fort with <<yourrep $g.victim>>
bound and gagged within 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 against them. 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'knight_of_honor', /* key */
"Knight of Honor", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_knight_of_honor',
{ /* roles */
'victim': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.NotYou(),
],
},
{ /* actors */
'knight': 'all', },
[ /* outcomes */
setup.qc.Ire('royal', -20),
setup.qc.MissingUnitRecapture('victim', 'capturedhard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('royal', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
<<Rep $g.victim>> would often to go the surrounding taverns, be it to engage in a drunken
brawl, or simply to waste the time away.
But <<they $g.victim>> always come back to the fort one day or two after.
Not this time, however, and after the fourth day you're starting to suspect that something went horribly wrong.
</p>
<p>
Going to the tavern yourself and asking the wenches, you've learned that a challenger
has challenged <<therace $g.victim>> to a duel.
<<if $g.victim.isHasTrait('per_cautious')>>
The cautious fool refuses, of course, but one way or another your slaver departed together
with the challenger from the tavern.
<<elseif $g.victim.isHasTrait('per_brave')>>
The brave fool accepted, of course, and departed with the challenger from the tavern.
<<else>>
After the promise of money, your slaver accepted and departed the tavern together with the challenger.
<</if>>
When you press a little harder, the wench indicated something was completely off
about the challenger -- the manner of speaking was too high classed,
the posture too proud, and most importantly she could hear the clink of armor or two
underneath.
</p>
<p>
It seemed that a knight, no doubt sent by someone within the <<rep $company.royal>>,
has come to retaliate against your recent actions by kidnapping one of your trusted slavers.
You sighed to yourself, and reminds yourself not to mess with the <<rep $company.royal>>
too much. But that's been done, and you'll just have to rescue <<rep $g.victim>> now, although
it sure as hell won't be easy.
</p>/* PROOFREAD COMPLETE */
<<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': 'subrace_dragonkin', },
[ /* outcomes */
setup.qc.Ire('dragonkin', -20),
setup.qc.MissingUnitRecapture('victim', 'capturedhard'), ],
[ /* restrictions to generate */
setup.qres.IreAtLeast('dragonkin', 20), ],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
The sun shines brightly today, and just as you thought the day is perfect for once,
a sudden chill freezes the entire compound. Paralyzed from an unknown force, you
cannot do anything but watch as a majestic blue-colored dragonkin descends
from the sky and into your compound. <<They $g.dragon>> calmly walks around your
compound as if nothing has happenned, inspecting some of your slavers until settling
at <<yourrep $g.victim>>. "You will do," the dragonkin says calmly as <<they $g.dragon>>
takes <<rep $g.victim>> and carries <<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>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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
such as dreams of falling into an endless pit, lately the nightmares have become more
intrusive. At one point you dreamt of being held in front of a succubus, being
forced to watch as your <<uadjgood $g.slaver>> <<urace $g.slaver>> slaver
<<rep $g.slaver>> slaver|was 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 companies out there, perhaps as a
result of you angering the <<rep $company.demon>> recently.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* 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 badly.
</p>
<p>
From what you gather from the mess that is your traumatized slavers, they
dreamt of various
evil spirits, which kept plaguing their dreams in the past few weeks. The
description of the spirit
matches a certain furry guardian of the werewolves, and you are now certain
this must be the work
of some werewolf tribe out there who bears some grudge against your company.
Maybe next time you should be more careful when dealing with these pups.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'waking_dream', /* key */
"Waking Dream", /* Title */
"darko", /* Author */
[ ], /* tags */
'Event_waking_dream',
{ /* roles */
},
{ /* actors */
'elf': 'subrace_elf',
},
[ /* 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 */
setup.rarity.always, /* Rarity */
)>><p>
Recently, you notice 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>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"a_discerning_letter0",
"Master of Waves",
'subrace_humansea', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_boss),
setup.qc.TraitsReplace('unit', [setup.trait.magic_wind_master, setup.trait.per_cruel, setup.trait.per_playful]),
],
)>> <<run new setup.UnitGroup(
"a_discerning_letter1",
"Slave of Waves",
'sea_all', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
setup.qc.TraitsReplace('unit', [setup.trait.bg_maid, setup.trait.per_submissive, setup.trait.training_obedience_master, setup.trait.per_loyal, setup.trait.per_humble, setup.trait.per_chaste]),
],
)>>
<<run new setup.Event(
'an_offer_for_a_slave', /* key */
"An Offer for a Slave", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
],
'Event_an_offer_for_a_slave',
{ /* roles (LEGACY) */
},
{ /* actors */
'master': 'a_discerning_letter0',
'slave': 'a_discerning_letter1',
},
[ /* outcomes */
setup.qc.SlaverMarker('master'),
setup.qc.SlaveMarker('slave'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Today, you've received an extremely well-written letter in your mailbox.
</p>
<div class='lettercard'>
<p>
Esteemed <<name $unit.player>> of <<rep $company.player>>,
</p>
<p>
My name is <<name $g.slave>>, or so my <<master $g.master>> has named me. It
has come to the attention of my <<master $g.master>>, <<lord $g.master>> <<name $g.master>>,
that you have acquired a particularly rare slave — a
defiant specimen that would not break from even the harshest trainings. My
<<master $g.master>> delights in breaking such hardy slaves, as I was once,
and would make a generous offer should you wish to sell the slave to <<them
$g.master>>. If you are interested in this offer, please seek my <<master
$g.master>> out in the <<lore region_sea>>.
</p>
<p>
Your most humble slave,<br/>
<<name $g.slave>>
</p>
</div>
<p>
An interesting offer. It seems if you are tired of breaking your defiant slaves, there is demand for these specimens somewhere in the <<lore region_sea>>. You could try to scout the area should you wish to follow-up on this offer.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'defiant_slave', /* key */
"Defiant Slave", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
],
'Event_defiant_slave',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.technology_research),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.technology_research),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
After a few days, it becomes clear that your newly acquired slave, <<rep
$g.slave>>, slave|is rather special. Unlike most of your other slaves, <<they
$g.slave>> slave|is not reduced to begging and crying after the first few
training sessions, and still remain as defiant as ever. It seems the usual
training regime you have for your normal slaves would not work for this
particularly strong-willed <<urace $g.slave>>.
</p>
<p>
Thankfully, <<yourrep $g.slaver>> slaver|have came up with a plan, which
<<they $g.slaver>> slaver|hand over to you in the form of <<rep
setup.item.technology_research>>. Reading the plan, you would first have to
build the <<rep setup.buildingtemplate.researchroom>>. Having that built, you
can then assign a few of your slavers to research <<yourrep $g.slave>>,
figuring out how to break the resistant slave, possibly with outside help. It
should not be too hard to find such ways, but there is no doubt that each
would require extreme measures and will be very difficult to actually
complete.
<<if $unit.player.isHasTrait('per_dominant')>>
You can't help but let out a dominant grin as you imagine the once resistant
slave being broken to the point of compliance.
<<elseif $unit.player.isHasTrait('per_submissive')>>
Your submissive mind starts to conjure various images of you being put in the
slave's no doubt extensive training, but realizing that <<rep $g.slaver>>
slaver|is still in the room you quickly shoo the thoughts away.
<</if>>
</p>
<p>
You thank <<yourrep $g.slaver>> before sitting on your desk alone with the
<<rep setup.item.technology_research>> on your desk, staring back at you.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'fort_clearing', /* key */
"Fort Clearing", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_fort_clearing',
{ /* roles */
},
{ /* actors */
'slaver': [
setup.qres.NotYou(),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_bodypart_anus),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_bodypart_anus),
setup.qres.FortLevelAtLeast(3),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
It has been several weeks since you've settled at the fort, and its starting
to shape up. Many rubbles have been cleared up — some personally by you — and
the place is starting to feel like home. But there are still many more ruins
to unlodge, and together with <<yourrep $g.slaver>> you look towards the
still ruinous part of your fort.
</p>
<p>
Thinking you might get some more work done today, you decide to go and clean up a
little bit of rubble by the ruined tower next to your fort. As you move the
rocks around, <<yourrep $g.slaver>> slaver|come to join you, and both of you work
your asses around until the sun starts to set. By the end, the first floor of
the tower is starting to look habitable, with most of the big ruins cleared
out of the place.
</p>
<p>
As you are about to head back to your fort, <<yourrep $g.slaver>> slaver|grab you by the shoulders
before handing you a little encouragement present — an acknowledgement and
thanks for all the hard work you have done so far. It's an interestingly
graphic book, depicting various races engaging in anal sex, surely a valuable
addition to a slaving company such as yourself.
<<if $unit.player.isHasTrait('per_chaste')>>
Given your... relatively chaste background, you are horrified by some of the
images shown in the book. But you make sure to keep up appearances, feigning
approving nods, at least until <<rep $g.slaver>> slaver|is out of sight.
<<else>>
You can't wait to read through the book to receive new kind of pleasures from
the various slaves your company will surely gather in the future, and you
swear <<rep $g.slaver>> slaver|smirk a little as <<they $g.slaver>> slaver|watch your
expression turn lewd for a second.
<</if>>
Thanking <<therace $g.slaver>>, you bring the <<rep
setup.item.sexmanual_bodypart_anus>> back with you into your fort.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'library_inauguration', /* key */
"Library Inauguration", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
],
'Event_library_inauguration',
{ /* 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 */
'slaver': [
setup.qres.Job(setup.job.slaver),
],
'gender': 'subrace_humanvale',
},
[ /* outcomes */
setup.qc.Item(setup.item.sexmanual_sixtynine),
setup.qc.SlaverMarker('gender'),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.sexmanual_sixtynine),
setup.qres.Building(setup.buildingtemplate.library),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Your fort finally has a proper <<rep setup.buildingtemplate.library>> now.
The grand structure costs you quite a fortune, but you have no doubt it will
be very useful for you and your career.
The bookshelves are lined up neatly with books of various origins, be it
detailing the various lores of this region, or explaining how magic works in
the world.
</p>
<p>
<<Yourrep $g.slaver>> slaver|is here too, seemingly busy reading a book. But
something is off about the book <<theslaver $g.slaver>> slaver|is reading — it is too colorful,
and lacking texts, compared to most other books here. Instead it looks like...
picture book? As you approach closer, <<theslaver $g.slaver>> slaver|notice you and
<<if $g.slaver.isHasTrait('per_chaste')>>
immediately close the book and straightened up <<their $g.slaver>> posture,
as if hiding something embarrassing...
<<else>>
slaver|give you a wily smile before continuing drooling over the book.
<</if>>
Sensing something incredibly wrong, you sneak up behind <<theslaver $g.slaver>> and are greeted
by explicit images of a <<man $g.gender>> engaging in sex in a rather
auspicious position. Surprised by your sudden appearance, <<rep $g.slaver>>
accidentally slaver|drop the book to the floor, which you then pick up and identify as the <<rep
setup.item.sexmanual_sixtynine>>. Glaring daggers at your slaver, you wonder
if this is the reason why the library was so expensive to build...
</p><<run new setup.Event(
'open_for_visitors', /* key */
"Open for Visitors", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_open_for_visitors',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Favor('humanvale', 50),
setup.qc.Favor('humankingdom', 50),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Ever since the <<rep setup.buildingtemplate.grandhall>> was completed, your fort has been receiving a growing number of visitors and guests. At first, it was mostly the acquaintance of your slavers and yourself, but lately it also includes the acquaintance of the acquaintance of the acquaintance of your slavers — you get the idea. Your little fort is starting to attract a number of visitors into it, and some are even thinking to build permanent residence on the vast empty land surrounding your fort.
Their opinion of your company grows a little from the open-ness of your fort.
</p>
<p>
With the growing number of visitors to your fort, you have a larger number of options to build now at your disposal. You can build the <<rep setup.buildingtemplate.market>> now that you have a steady stream of visitors, where peddlers can sell their goods both to the visitors and to you and your motley band of slavers. Alternatively, you can also transform the right wing of your fort into a <<rep setup.buildingtemplate.recreationwing>> complex, where you can offer some of your higher quality slavers for visitor entertainment. With some pimps, you might just be able to net some profit off them.
</p>
<p>
All in all, your fort is growing into a cozy little place in no time at all!
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.qc.Item(setup.item.sexmanual_sit),
],
[ /* restrictions to generate */
setup.qres.NoItem(setup.item.sexmanual_sit),
setup.qres.Building('grandhall'),
],
0,
setup.rarity.always, /* Rarity */
)>><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 finally fully built.
You decide to do a little tour of the fort for today.
</p>
<p>
You find <<yourrep $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 arrive at an open space designated as the
<<rep setup.buildingtemplate.hiringsquare>>, where you can hire new slavers
into your fort, who will then go into the <<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 and celebrations. It is empty right now, save for <<yourrep
$g.slaver2>> who slaver2|is busy <<uadv $g.slaver2>> arguing with <<rep $g.slaver3>>.
</p>
<p>
Not wanting to get into their argument, you enter the work area of your fort: a series of
office rooms to sort out the various 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 into the basements of your fort. While initially it was
full of rubble, they have been mostly cleared up and part of the basement has
been turned into a dungeons complex. Here, you can keep your slaves either to sell
them later, or for your own and your slavers' amusement. Who knows, maybe one
day you'll be able to afford 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>> slaver4|greet you, and
slaver4|express <<their $g.slaver4>> appreciation for all 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>
<p>
Later, you find a <<rep setup.item.sexmanual_sit>> sitting on your desk
wrapped nicely with a bow.
A "thank you" card was attached on top of it, and judging from the
<<if $g.slaver4.isHasTrait('per_studious')>>
beautiful
<<elseif $g.slaver4.isHasTrait('per_active')>>
horrible
<<else>>
decent
<</if>>
handwriting you can only guess
that <<yourrep $g.slaver4>> must have written it. It seems that all your slavers have decided to pool a little bit
of their
<<if $settings.challengemode>>
outrageously large
<<else>>
modest
<</if>>
wage and get you a little present for the achievement.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.qc.Item(setup.item.sexmanual_penetration_mouthhole),
],
[ /* restrictions to generate */
setup.qres.NoItem(setup.item.sexmanual_penetration_mouthhole),
setup.qres.Building('veteranhall'),
],
0,
setup.rarity.always, /* Rarity */
)>><p>
This week marks the <<= $calendar.getWeek()>>-th week of your slaving career.
Finally, the fort is looking like a proper villains 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>>. <<Yourrep
$g.slaver1>> slaver1|was busy <<uadv $g.slaver1>> admiring the equipments in the <<rep
setup.buildingtemplate.armory>>, which is located next to the <<rep
setup.buildingtemplate.warehouse>>, where you store all your other items.
From the windows of your fort you can see <<yourrep $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) to perform important duties in your fort.
</p>
<p>
Down into the basement, you see <<yourrep $g.slaver2>> <<uadv $g.slaver2>> <<if
$g.slaver2.isHasTrait('per_kind')>>
frowning while
<<else>>
licking <<their $g.slaver2>> lips while
<</if>>
imagining what kind of pain you can inflict upon the slaves in the <<rep
setup.buildingtemplate.trainingchamber>>.
</p>
<p>
Returning to your newly minted desk, you find a large present box neatly
wrapped on top of your desk.
Inside, you find a thank you letter signed by all your slavers, and an
expensive book that you've
always wanted: the <<rep setup.item.sexmanual_penetration_mouthhole>>.
This is an expensive and valuable gift, and your slavers must have
<<if $settings.challengemode>>
spent a small fraction of their
outrageously large wage
<<else>>
pooled a significant chunk of their wages
<</if>>
in order to gift this present to you. You feel thankful for being blessed with such loyal and
worthy allies.
</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
all around the region may start to offer your company the 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.Event(
'best_ass_rescue', /* key */
"Best Ass Rescue", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
],
'Event_best_ass_rescue',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
],
},
[ /* outcomes */
setup.qc.Money(8000),
setup.qc.Opportunity('best_ass_rescue', {
a: "a",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<include "Opportunity_best_ass_rescue">>/* PROOFREAD COMPLETE */
<<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_night_shift231'),
setup.qc.Favor('humandesert', 250),
setup.qc.MoneyCustom(3000), ],
[ /* restrictions to generate */
],
0,
setup.rarity.never, /* Rarity */
)>><p>
It seems your actions have finally stopped the bodyswapper's activities in the
<<lore region_desert>>, at least for now.
The grateful citizens pool up some money for your company, which you <<uadv $unit.player>> accept.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'nectar_of_the_gods', /* key */
"Nectar of the Gods", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'sea',
'item',
],
'Event_nectar_of_the_gods',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_bewitchment_alternative', '1', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_bewitchment_alternative'),
setup.qres.VarGte('quest_bewitchment_progress', 2),
setup.qres.QuestDone('finding_fairy'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _t = $company.player.getUnits().filter(unit => unit.isHasTitle('quest_bewitched_1'))>>
<<if _t.length>>
<p>
The recent disappearance of <<yourrep _t[0]>> in the <<lore region_forest>>
is not the first time this has happened. As you recall, a mischievous fairy
was responsible for when it happened last time, and you've no doubt this is
done by yet another mischivious fairy.
</p>
<</if>>
<p>
You're not the only one who has connected the dots. As you ponder on the
idea, <<yourrep $g.slaver>> slaver|come to your office, bringing good news.
Apparently, <<they $g.slaver>> slaver|have found a potential lead on how to
possibly get back on that fairy — it all begins with finding a rare and
exotic <<rep setup.item.quest_bewitchment_nectar>> somewhere in the <<lore
region_sea>>. It is said that fairies cannot resist the allure of this rare
nectar, and you might just be able to use this to your advantage.
</p>
<p>
Getting a nectar is probably sufficient to get back at the fairy in some way.
However, if your vindictiveness goes beyond normal, it might also be possible
to combine the nectar with a specifically-designed trap from a famous
rat-catcher in the <<lore region_city>>. After all, fairies are pretty much
flying rats, so this should work well. There is no doubt getting the trap
will be difficult however, considering that the rat-catcher is an infamous
lunatic, and will demand absurd things in exchange for the services
rendered...
</p>
<p>
Then again, it might just be as wise to simply rescue your lost slavers, if
you so choose...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_fire_giveth', /* key */
"The Fire Giveth", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'veteran',
'trait',
],
'Event_the_fire_giveth',
{ /* roles */
},
{ /* actors */
'student': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_consumed_by_fire_0'),
],
'wizard': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AnyTrait([setup.trait.magic_fire_master,
setup.trait.magic_water_master, setup.trait.magic_wind_master,
setup.trait.magic_earth_master, setup.trait.magic_light_master,
setup.trait.magic_dark_master, setup.trait.magic_fire,
setup.trait.magic_water, setup.trait.magic_wind, setup.trait.magic_earth,
setup.trait.magic_light, setup.trait.magic_dark], true),
],
},
[ /* outcomes */
setup.qc.QuestDirect('the_fire_taketh', null),
],
[ /* restrictions */
setup.qres.NoQuest('the_fire_taketh'),
setup.qres.VarNull('be_cleansed_in_fire_event_timeout'),
],
0, /* Cooldown */
setup.rarity.common, /* Rarity */
)>><p>
As <<rep $g.student>> pass by, gazing emptily, you are reminded by how much
you miss the old <<urace $g.student>>, before <<they $g.student>> had <<their
$g.student>> spirit taken away from them. You used to have fun together with
<<theslaver $g.student>>, but it felt like such a distant memory by now.
</p>
<p>
As you <<uadv $unit.player>> sighed at the predicament, you are approached by
<<yourrep $g.wizard>>. <<Therace $g.wizard>> wizard|is a fairly powerful
magic user, and <<they $g.wizard>> wizard|share your despair towards <<rep
$g.student>>. But in a good news, <<rep $g.wizard>> wizard|claim to have found a
possible cure for what plagues <<rep $g.student>> — a ritual to restore some
semblance of personality back to <<therace $g.student>>.
</p>
<p>
<<Rep $g.wizard>> wizard|have promised to drop the details of the ritual
later in your office, for you to take a better look at. Today might not be so
bad at all, after all, and you went on with your day with a slightly lighter
step in your feet.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_love_trialist_0", /* key */
"Love Trialist", /* name */
"Participant in the Trials of Love", /* description */
"a|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 */
setup.rarity.always, /* 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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'animal_tamer__payment_cancelled', /* key */
"Animal Tamer: Payment Cancelled", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
],
'Event_animal_tamer__payment_cancelled',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarRemove('animal_tamer_slave_order_active'),
setup.qc.VarRemove('animal_tamer_slave_being_trained'),
setup.qc.VarRemove('animal_tamer_slave_order_fulfilled'),
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
[ /* restrictions */
setup.qres.VarEqual('animal_tamer_slave_being_trained', '1'),
setup.qres.VarNull('animal_tamer_slave_order_active'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<set _v = setup.getAnySlaver()>>
<<if _u>>
<p>
A delivery has come to your fort today in the form of a very large box.
As <<yourrep _v>> helps you open the box, you notice that there are breathing
holes in various corners of the box, which gives you a good guess of what is contained inside. Indeed, you
found <<yourrep _u>> in full bondage gear inside, apparently having finished training from the animal
trainer's training. It seems the animal trainer has decided to return the
slave to you.
However, you can see that the slave is still full-on defiant,
and remains unbroken — perhaps the animal trainer actually restores the
animal's spirit, seeing that you have never made the requisite payment...
Back to square one it is for you then.
</p>
<<set _g = setup.costUnitHelper(_u)>>
<<run setup.qc.Return('unit').apply(_g)>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'animal_tamer__payment_received', /* key */
"Animal Tamer: Payment Received", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
],
'Event_animal_tamer__payment_received',
{ /* roles */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarRemove('animal_tamer_slave_order_active'),
setup.qc.VarRemove('animal_tamer_slave_being_trained'),
setup.qc.VarRemove('animal_tamer_slave_order_fulfilled'),
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
[ /* restrictions */
setup.qres.VarEqual('animal_tamer_slave_order_fulfilled', '3'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<set _v = setup.getAnySlaver()>>
<<if _u>>
<p>
A delivery had come to your fort today in the form of a very large box.
As <<yourrep _v>> helped you open the box, you noticed there were breathing
holes punched at the corners of the box, and you could guess what is inside.
Indeed, you
found <<yourrep _u>> in full bondage gear inside, having graduated from the animal
trainer's training. Upon closer inspection, the slave indeed no longer had
any of the defiant flame that used to burn so brightly in <<their _u>> eyes.
It seemed the trainer spoke truly — the slave has now been fully broken, and
<<their _u>> training to become a proper slave can finally begin in earnest.
</p>
<<set _g = setup.costUnitHelper(_u)>>
<<run setup.qc.TraitRemove('unit', setup.trait.will_defiant).apply(_g)>>
<<run setup.qc.Trait('unit', setup.trait.bg_slave).apply(_g)>>
<<run setup.qc.Trait('unit', setup.trait.bg_unemployed).apply(_g)>>
<<run setup.qc.TraitReplace('unit', setup.trait.per_slow).apply(_g)>>
<<run setup.qc.Return('unit').apply(_g)>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_permanent_solution', /* key */
"A Permanent Solution", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_a_permanent_solution',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
'boss': [
],
},
[ /* outcomes */
setup.qc.VarRemove('rival_blackmail_progress'),
setup.qc.Opportunity('subtle_retaliation', {
slaver: "slaver",
boss: "boss",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
It has been several weeks ever since that damnable <<rep $g.boss>> got hold
of <<yourrep $g.slaver>>. It will simply not do for you to keep paying
<<their $g.slaver>> "accomodation costs", and a more permanent solution would
be desirable.
</p>
<p>
Given that <<reps $g.slaver>> life is at stake, however, a full-on assault would
not be advisable. No, this is a war where you must use subterfuge and your
connections to win. Consulting <<yourrep _u>>, it seems if you truly wish to
end this problem once and for all, you will simply have to bankrupt the
slaving company to the ground...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'blackmail_due', /* key */
"Blackmail Due", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_blackmail_due',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarRemove('rival_blackmail_cancel'),
setup.qc.IfThenElse(
setup.qres.VarEqual('rival_blackmail_active', '1'),
setup.qc.DoAll([
setup.qc.MoneyCustom(-2000),
setup.qc.Event('blackmail_due', 4),
], undefined),
setup.qc.DoAll([
], undefined)),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _progress = $varstore.get('rival_blackmail_progress') || 0>>
<<if $varstore.get('rival_blackmail_active')>>
<p>
An emissary from the bastard rival slaving company that has come to your fort demanding
payment for your slaver's continued... ahem, "luxury accomodation" under their care. You
grudgingly pay the slaver,
<<if _progress >= 3>>
while sensing a desperation in the messenger's voice, no doubt thanks to your
efforts to crumble your rival' company so far...
<<elseif _progress >= 2>>
knowing full well that soon, retaliation is at hand...
<<elseif _progress >= 1>>
your current retaliation plan in the front of your mind...
<<else>>
while wondering if this will continue on forever...
<</if>>
</p>
<p>
The emissary promised to return again next month.
</p>
<<else>>
<<if $varstore.get('rival_blackmail_cancel')>>
<p>
You've made up your mind to not continue the monthly installments.
The messenger will return empty-handed.
But your former slaver's fate is now sealed...
</p>
<<else>>
<p>
Having defeated your rival's company, the monthly "accomodation fee" you
have been paying for your slaver's continued safety has finally ended. It
feels good.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_former_leader_of_a_slaving_company_0", /* key */
"Former Leader of a Slaving Company", /* name */
"Formerly led a slaving company", /* description */
"a|was a former leader in a slaving company whom you bankrupted", /* unit text */
25000, /* slave value */
{ /* skill additives */
combat: 1,brawn: 1,survival: 1,intrigue: 1,slaving: 1,knowledge: 1,social: 1,aid: 1,arcane: 1,sex: 1,},
)
>>
<<run new setup.UnitGroup(
"blackmailed1",
"Slaving Company Leader",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.AddTraitsRandom('unit', [setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, 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_master, setup.trait.magic_water_master, setup.trait.magic_wind_master, setup.trait.magic_earth_master, setup.trait.magic_light_master, setup.trait.magic_dark_master], 1, false, true),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_extremelystrong, setup.trait.face_beautiful, setup.trait.per_smart], 1, false, true),
setup.qc.TraitsReplace('unit', [setup.trait.per_frugal]),
setup.qc.AddTitle('unit', 'quest_former_leader_of_a_slaving_company_0'),
],
)>>
<<run new setup.Event(
'blackmailed', /* key */
"Blackmailed", /* Title */
{ /* Author */
name: "darko",
url: "FCdev and darko",
},
[ /* tags */
'fort',
'special',
'unit',
],
'Event_blackmailed',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': 'missingslavers',
'boss': 'blackmailed1',
'messenger': 'all',
},
[ /* outcomes */
setup.qc.VarSet('rival_blackmail_active', '1', -1),
setup.qc.Opportunity('blackmailed', {
slaver: "slaver",
boss: "boss",
messenger: "messenger",
}),
setup.qc.RemoveFromUnitGroup('slaver'),
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.VarNull('rival_blackmail_active'),
setup.qres.UnitGroupHasUnit('missingslavers'),
],
0, /* Cooldown */
setup.rarity.uncommon, /* Rarity */
)>><<include "Opportunity_blackmailed">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'end_of_a_company', /* key */
"End of a Company", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
],
'Event_end_of_a_company',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
'boss': [
],
},
[ /* outcomes */
setup.qc.QuestDirect('end_of_a_company', {
slaver: "slaver",
boss: "boss",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<include 'Quest_end_of_a_company'>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'sabotage_success', /* key */
"Sabotage Success", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unit',
],
'Event_sabotage_success',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
'boss': [
],
},
[ /* outcomes */
setup.qc.VarAdd('rival_blackmail_progress', 1, -1),
setup.qc.IfThenElse(
setup.qres.VarGte('rival_blackmail_progress', 3),
setup.qc.DoAll([
setup.qc.Event('end_of_a_company', 2, {
slaver: "slaver",
boss: "boss",
})
], undefined),
setup.qc.DoAll([
setup.qc.Opportunity('subtle_retaliation', {
slaver: "slaver",
boss: "boss",
})
], undefined)),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _progress = $varstore.get('rival_blackmail_progress') || 0>>
<<set _u = setup.getAnySlaver()>>
<p>
Your sabotage over <<reps $g.boss>> company is a success!
<<if _progress >= 2>>
In fact, <<yourrep _u>> informs you that <<their $g.boss>> company is
crumbling down as of now, with many of <<their $g.boss>> slavers mysteriously
disappearing one way or another.
The end to this affair might be soon at <<uhand $unit.player>>...
<<elseif _progress >= 1>>
With the successes you've amassed, you can feel the conflict ending anytime
now. All you need is a little bit more push in the right direction.
<<else>>
This is merely the first step, however, and you would need to dedicate more
effort should you wish to see your plan come into fruition.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'taste_of_revenge', /* key */
"Taste of Revenge", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
'Event_taste_of_revenge',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
'boss': [
],
},
[ /* outcomes */
setup.qc.Opportunity('from_hero_to_zero', {
boss: "boss",
slaver: "slaver",
}),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<include "Opportunity_from_hero_to_zero">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'broken_soul', /* key */
"Broken Soul", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'unknown',
],
'Event_broken_soul',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_ascent_0'),
],
'wizard': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AnyTrait([setup.trait.magic_dark, setup.trait.magic_dark_master, setup.trait.magic_light, setup.trait.magic_light_master, setup.trait.magic_earth, setup.trait.magic_earth_master, setup.trait.magic_wind, setup.trait.magic_wind_master, setup.trait.magic_water, setup.trait.magic_water_master, setup.trait.magic_fire, setup.trait.magic_fire_master], true),
],
},
[ /* outcomes */
setup.qc.QuestDirect('broken_soul', {
slave: "slave",
wizard: "wizard",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.traininggrounds),
setup.qres.NoQuest('broken_soul'),
setup.qres.VarNull('broken_wings_cooldown'),
],
15, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include 'Quest_broken_soul'>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"broken_soul_wanders_in0",
"Broken Ascent",
'subrace_angel', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTitle('unit', 'quest_broken_ascent_0'),
setup.qc.TraitReplace('unit', 'subrace_humankingdom'),
setup.qc.RemoveTraitsWithTag('unit', 'per'),
setup.qc.RemoveTraitsWithTag('unit', 'wings'),
setup.qc.RemoveTraitsWithTag('unit', 'skill'),
setup.qc.RemoveTraitsWithTag('unit', 'bg'),
setup.qc.Trait('unit', 'will_indomitable'),
setup.qc.ResetInnateTraits('unit'),
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.Event(
'broken_soul_wanders_in', /* key */
"Broken Soul Wanders In", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'unit',
],
'Event_broken_soul_wanders_in',
{ /* roles */
},
{ /* actors */
'slave': 'broken_soul_wanders_in0',
},
[ /* outcomes */
setup.qc.VarSet('broken_wings_cooldown', '1', 15),
setup.qc.Slave('slave'),
],
[ /* restrictions */
setup.qres.VarNull('broken_wings_cooldown'),
setup.qres.NoUnitWithTitle('quest_broken_ascent_0', {
}),
setup.qres.NoUnitWithTitle('quest_broken_descent_0', {
}),
setup.qres.Building(setup.buildingtemplate.slavepens),
],
500, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<<if $fort.player.isHasBuilding('trainingchamber')>>
<p>
A strange dazed person has wandered into your fort, seemingly fully mindbroken,
and <<their $g.slave>> only
possession is <<their $g.slave>> clothes bearing <<their $g.slave>> name:
<<rep $g.slave>>.
Gazing aimlessly, the slave eventually hit <<yourrep _u>> who was busy
<<uhobbyverb _u>>. As punishment, <<rep _u>> brings the <<man $g.slave>>
into your <<rep setup.buildingtemplate.slavepens>> — perhaps the only
productive use of such a mindbroken slave.
</p>
<<else>>
<p>
With the <<rep setup.buildingtemplate.dungeons>> and the <<rep
setup.buildingtemplate.slavepens>> ready, your company can finally begin its
career as a proper slaving company. The incoming slaves will be temporarily located
in the <<rep setup.buildingtemplate.slavepens>>, and you can keep them
permanently in the <<rep setup.buildingtemplate.dungeons>> complex,
waiting either to be used or to be sold for profit.
</p>
<p>
As your slavers continue to clear more rubbles from the underground complex of the fort,
<<yourrep _u>> is surprised to find a living prisoner seemingly abandoned
in the ruins. <<They $g.slave>> slave|is a little bit malnourished, but is fine
otherwise — maybe one of the captives of the many raiding bands living in
the area. Your slaver's question as to why the slave was left alone here is
soon answered as they notice a blank look coming from the slave — it seems the slave
has been mindbroken and would worth nothing in the markets. From a nearby
parchment, you learn that slave's name is <<rep $g.slave>>.
</p>
<p>
With your dungeons mostly empty, it might be fine to take such a slave for now. Who
knows, maybe <<they $g.slave>> will be worth something to the right buyer.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'broken_wings', /* key */
"Broken Wings", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
],
'Event_broken_wings',
{ /* roles */
},
{ /* actors */
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
setup.qres.HasTitle('quest_joy_restored_2'),
setup.qres.HasTitle('quest_lust_restore_3'),
setup.qres.HasTitle('quest_empathy_restored_4'),
setup.qres.HasTitle('quest_spirit_restored_5'),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('broken_wings', null),
],
[ /* restrictions */
setup.qres.VarNull('broken_wings_cooldown'),
setup.qres.NoQuest('broken_wings'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Over the course of your company, you and your slavers have unknowingly
successfully restore bit by bit parts of <<yourrep $g.slave>>. <<Yourrep
$g.slaver>> thinks that it might be possible now to actually heal the slave
from whatever destroyed the slave's mind. It might restore the slave back to
working condition, suitable to be used by you and your slavers. But is it
worth the efforts?
</p>
<p>
Either way, the quest is now sitting on your desk, should you wish to complete it...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_high_class_brothel', /* key */
"A High-Class Brothel", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_a_high_class_brothel',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_progress', '500', -1),
setup.qc.VarSet('quest_brothel_high_income', '400', -1),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '116'),
],
53, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<<if _class >= 20>>
<<if $g.head.isHasDick()>>
<<questimage 'a_high_class_brothel_male_classy.jpg'>>
<<else>>
<<questimage 'a_high_class_brothel_female_classy.jpg'>>
<</if>>
<<else>>
<<if $g.head.isHasDick()>>
<<else>>
<</if>>
<</if>>
<p>
By now, <<attach _describe>> has become one of the main attractions in the <<lore location_npc>>.
<<if _class >= 20>>
The brothel has a reputation for being one of the classiest brothels around, and occasionally some neko or even visiting nobles can be seen enjoying the luxury inside.
<<elseif _class <= -20>>
As a den of debauchery, the brothel draws many criminals into the venue, and
occasionally infamous mafia bosses can be seen visiting the venue with
<<their $g.owner>> entourage.
<<else>>
The brothel caters to a wide variety of audience, and it is balanced properly between class and debauchery. Various people can occasionally be seen patroning the venue, from low nobles to white collar criminals.
<</if>>
The many <<if $g.head.isHasDick()>>manly<<else>>feminine<</if>> courtesans found within are very well-versed in their arts too.
<<if _dom == 'sub'>>
These courtesans specialize in being submissive little sluts, and would satisfy even the most demanding tasks their dominant customers would require.
<<elseif _dom == 'dom'>>
These <<if $g.head.isHasDick()>>muscular<</if>> courtesans specialize in dominance, and they can satisfy clients wishing for another dominant to guide the sex through, or even those secretly submissive clients who keeps fantasizing about being sexually abused.
<<else>>
These courtesans are trained in a variety of roles, be it as a submissive little slut or a dominant. Sex with them could go either way, which draws in a wide variety of customers.
<</if>>
</p>
<p>
The venue itself is a wonder. The entire complex looks like
<<if _class >= 20>>
a royal palace, with the receptions designed like a throne room, complete with a grand red carpet to welcome customers.
<<elseif _class <= -20>>
a demonic palace, with fiery chandeliers hanging in the receptions, powered by magic.
<<else>>
an exotic palace, with bamboo trees surrounding the reception hall, their growth accelerated by magic.
<</if>>
Various amenities can be found inside, be it a bar, private rooms for rent, and a full-blown sex dungeons for the kinkier customers.
But the main attraction in the grand brothel palace complex has to be the newly-built
<<if _attraction == 'gravity'>>
Magic Gravity Room.
With the help of the slave-turned-head-courtesan <<name $g.slave>>, who is quite adept at using magic, the various magical crystals scattered throughout the room can be activated, which would send a steady stream of wind upwards, cancelling gravity out. This allows your courtesans to engage in positions that would normally be impossible with their customers.
<<if _sub == 'sub'>>
The customers can enjoy the unmatched feeling of fucking a well-behaving submissive slut while floating in the air. When they climax, their produce will even float harmlessly, which can be used for some kinky <<ucum $unit.player>> play.
<<elseif _dom == 'dom'>>
The customers can enjoy the unmatched feeling of being fucked by the masterful dominant courtesans in the air. When your courtesan
<<if $g.head.isHasDick()>>cums<<else>>climaxes<</if>>,
their <<ucum $g.head>> would float harmlessly in the air, which can be used for some exciting <<ucum $g.head>> play as well.
<<else>>
The customers can enjoy the unmatched feeling of either being fucked or fucking a courtesan in mid-air. When either climax, their produce will even float harmlessly, and a kinky enough customer could use this for some rather un-traditional cum play.
<</if>>
<<else>>
Magic Bondage Room.
With the help of the slave-turned-head-courtesan <<name $g.slave>>, who is quite adept at using magic, the various magical crystals scattered affixed throughout the walls and equipments within the room can be activated. The room's apparatus would then come to live — the restraints can be made to float in mid-air, which can be used to
<<if _dom == 'sub'>>
restrain the submissive courtesans in whatever sexy pose their clients desire.
<<elseif _dom == 'dom'>>
restrain the more submissive clients in whatever sexy pose your dominant courtesans come up with.
<<else>>
force either your courtesan or the client in some fixed mid-air position.
<</if>>
But that's not all — the sex toys scattered throughout the room are enchanted too. When they are channeled with magic, the dildos, buttplug, and even the nipple clamps would start to vibrate and shock its wearer, which allows for even kinkier rough play inside.
<</if>>
</p>
<p>
<<Yourrep $g.owner>> owner|have been serving as the manager of the place for quite some time by now, and <<they $g.owner>> owner|is very familiar with the place and its worker. Several bouncers are always posted near the entrance to keep the venue safe. Your <<urace $g.slave>> former-slave <<name $g.slave>> now serves as the head courtesan, and <<their $g.slave>> slave training holds strong. On <<reps $g.owner>> command, <<they $g.slave>> would obediently serve customers or use <<their $g.slave>> magical prowess to activate the various enchantments within the facility. The former head-whore <<name $g.head>> has been promoted as the
<<if _promotion == 'money'>>
business manager, and <<they $g.head>> works diligently ensuring that the brothel's financials are always in the green. <<They $g.head>> has not completely forgotten <<their $g.head>> past life, and can occasionally be seen employing <<their $g.head>> seduction and charm to negotiate a better deal for the various necessities in your brothel.
<<else>>
customer relations officer, and <<they $g.head>> works diligently ensuring that the brothel's customers always leave satisfied. <<They $g.head>> has not completely forgotten <<their $g.head>> whoring skills neither, and can occasionally be found giving a complimentary blowjob or two to the customers.
<</if>>
</p>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
With all these upgrades, <<attach _describe>> is as complete as it could ever be.
Nobody thought it was possible, but you and <<yourrep $g.owner>> have transformed a once decrepit brothel into the envy of the city,
<<if _class >= 20>>
a high-class brothel fit for a royal.
<<elseif _class <= -20>>
a paradise of debauchery.
<<else>>
an exotic sex complex.
<</if>>
It is making quite a bit of money every week now, and as long as <<yourrep $g.owner>> remains staffed as the brothel's manager, the revenue will keep on coming. Time to sit back and enjoy the results of your hard work!
</p><<run new setup.Event(
'a_most_noble_extortion', /* key */
"A Most Expensive Extortion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_a_most_noble_extortion',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'noble': 'forest_all',
},
[ /* outcomes */
setup.qc.QuestDirect('a_most_noble_extortion', {
head: "head",
noble: "noble",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '76'),
setup.qres.NoQuest('a_most_noble_extortion'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_a_most_noble_extortion">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'a_name', /* key */
"A Name", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_a_name',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('a_name', {
owner: "owner",
head: "head",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '44'),
setup.qres.NoOpportunity('a_name'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_a_name">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'bouncer_needed', /* key */
"Bouncer Needed", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_bouncer_needed',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('head', setup.qres.AllTraits([setup.trait.gender_male], true)),
setup.qc.DoAll([
setup.qc.SlaveOrderFlex(
'Bouncer', /* name */
'player', /* company */
50, /* expires in */
0, /* base price */
1000, /* trait multi */
0, /* value multi */
[ /* crit traits */
setup.trait.bg_thug,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_submissive,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.gender_male], true),
setup.qres.XTraits([setup.trait.bg_thug, setup.trait.height_tall, setup.trait.height_giant, setup.trait.muscle_strong, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong, setup.trait.face_hideous, setup.trait.face_scary, setup.trait.per_dominant, setup.trait.skill_intimidating, setup.trait.magic_earth, setup.trait.magic_earth_master], 1),
setup.qres.AnyTrait([setup.trait.training_dominance_advanced, setup.trait.training_dominance_master], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.HideAll([
setup.qc.VarSet('quest_brothel_progress', '44', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
], "Increase your brothel's profit",),
],
[ /* unfulfilled outcomes */
],
)
], undefined),
setup.qc.DoAll([
setup.qc.SlaveOrderFlex(
'Bouncer', /* name */
'player', /* company */
50, /* expires in */
0, /* base price */
1000, /* trait multi */
0, /* value multi */
[ /* crit traits */
setup.trait.bg_thug,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_submissive,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.gender_female], true),
setup.qres.XTraits([setup.trait.bg_thug, setup.trait.height_tall, setup.trait.height_giant, setup.trait.muscle_strong, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong, setup.trait.face_hideous, setup.trait.face_scary, setup.trait.per_dominant, setup.trait.skill_intimidating, setup.trait.magic_earth, setup.trait.magic_earth_master], 1),
setup.qres.AnyTrait([setup.trait.training_dominance_advanced, setup.trait.training_dominance_master], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.HideAll([
setup.qc.VarSet('quest_brothel_progress', '44', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
], "Increase your brothel's profit",),
],
[ /* unfulfilled outcomes */
],
)
], undefined)),
],
[ /* restrictions */
setup.qres.VarEqual('quest_brothel_progress', '36'),
setup.qres.VarNull('quest_brothel_wait'),
],
53, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
The bandit attack last month on <<attach _describe>> highlights an important issue with your brothel: the lack of security.
<<if $g.owner.getSkill(setup.skill.combat) >= 40>>
While <<yourrep $g.owner>> owner|is no slouch in combat, <<they $g.owner>> alone won't be sufficient to keep the compound safe.
<<else>>
This is further compounded by <<yourrep $g.owner>>'s lack of combat ability.
<</if>>
</p>
<p>
The head whore, <<name $g.head>>, head|have suggested to your slaver to hire a bouncer or two, to keep the place safe from degenerates. While that's certainly a good idea, a bouncer's services won't come cheap. However, as the leader of a slaving company, you are in a unique position to offer an alternative solution: offer one of your dominant but obedient slaves as a permanently-stationed bodyguard instead. The slave would need to be sufficiently good as a bouncer, however, and must exhibit at least some qualities befitting of a proper bouncer. While the slave will be "freed", as long as they have been sufficiently trained and stamped out of their free will, they will become a free person in title only.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"brothel_cleanup0",
"Brothel Head",
[], /* pools */
1, /* reuse chance */
[ /* unit post process */
],
)>>
<<run new setup.Event(
'brothel_cleanup', /* key */
"Brothel Cleanup", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_cleanup',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_cleanup', {
owner: "owner",
head: 'head',
}),
],
[ /* restrictions */
setup.qres.VarEqual('quest_brothel_progress', '8'),
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.NoQuest('brothel_cleanup'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_cleanup">><<run new setup.Event(
'brothel_decline', /* key */
"Brothel Decline", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_decline',
{ /* roles (LEGACY) */
},
{ /* actors */
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_high_income_warning', '1', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_high_income_warning'),
setup.qres.VarNull('quest_brothel_high_income'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
<<Yourrep $g.owner>> owner|come to you with bad news.
Unfortunately, <<attach _describe>> is getting old, and as a result it is no longer drawing as many customers as it used to. Expect the revenue to steeply decline from now on.
</p>
<p>
There are a couple of options you can take from here. There might be a possibility to rejuvenate the brothel from time to time, but it is unclear how effective this would. Alternatively, you can also close your brothel if you feel it is no longer making enough profit for you — you can do so by asking <<yourrep $g.owner>> directly about it. Finally, you might consider selling the brothel, should an offer come...
</p>
<p>
Should you wish to close or sell your brothel, you might be able to recruit
some of its workers back into your company.
</p><<run new setup.Event(
'brothel_expansion', /* key */
"Brothel Expansion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_expansion',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_expansion', {
head: "head",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.NoQuest('brothel_expansion'),
setup.qres.NoOpportunity('brothel_expansion'),
setup.qres.VarEqual('quest_brothel_progress', '68'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_expansion">><<run new setup.Event(
'brothel_focus', /* key */
"Brothel Focus", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_focus',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_focus', {
head: "head",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '52'),
setup.qres.NoQuest('brothel_focus'),
setup.qres.NoOpportunity('brothel_focus'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_focus">><<run new setup.Event(
'brothel_focus_ii', /* key */
"Brothel Focus II", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_focus_ii',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_focus_ii', {
head: "head",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '92'),
setup.qres.NoQuest('brothel_focus_ii'),
setup.qres.NoOpportunity('brothel_focus_ii'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_focus_ii">><<run new setup.Event(
'brothel_palace', /* key */
"Brothel Palace", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_palace',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_palace', {
head: "head",
owner: "owner",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '108'),
setup.qres.NoQuest('brothel_palace'),
setup.qres.NoOpportunity('brothel_palace'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_palace">><<run new setup.Event(
'brothel_promotion', /* key */
"Brothel Promotion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_promotion',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('brothel_promotion', {
head: "head",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '84'),
setup.qres.NoOpportunity('brothel_promotion'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_brothel_promotion">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'brothel_reopening', /* key */
"Brothel Reopening", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_reopening',
{ /* roles (LEGACY) */
},
{ /* actors */
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('brothel_reopening', {
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarEqual('quest_brothel_progress', '1'),
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.NoOpportunity('brothel_reopening'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_brothel_reopening">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'brothel_security', /* key */
"Brothel Security", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_security',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_security', {
head: "head",
owner: "owner",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '28'),
setup.qres.NoQuest('brothel_security'),
],
10, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_security">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'brothel_training', /* key */
"Brothel Training", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_training',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.QuestDirect('brothel_training', {
owner: "owner",
head: "head",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '20'),
setup.qres.NoQuest('brothel_training'),
setup.qres.NoOpportunity('intense_brothel_training'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_brothel_training">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'end_of_management', /* key */
"End of Management", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_end_of_management',
{ /* roles (LEGACY) */
},
{ /* actors */
},
setup.dutytemplate.questbrothelmanager.resetChain().concat([
/* outcomes */
]),
[ /* restrictions */
setup.qres.NoUnitWithTitle('quest_brothel_owner_0'),
setup.qres.VarLte('quest_brothel_progress', 499),
setup.qres.Not(setup.qres.VarNull('quest_brothel_progress')),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Unfortunately, due to one way or another,
the brothel you used to own in the <<lore location_npc>> has to close.
While this marks the end of your little brothel adventure for now, who
knows if you'll get another opportunity in the future?
</p><<run new setup.Event(
'end_of_management2', /* key */
"End of Management", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_end_of_management2',
{ /* roles (LEGACY) */
},
{ /* actors */
'courtesan': 'brothel_head_courtesan',
'head': 'brothel_cleanup0',
},
setup.dutytemplate.questbrothelmanager.resetChain().concat([
/* outcomes */
setup.qc.Slave('courtesan', "", undefined),
setup.qc.AddHistory('courtesan', 'a|was appointed head courtesan in your brothel, but returned as a slave to your company when it closes'),
setup.qc.Slaver('head', "a|was the former head-whore of your brothel", undefined),
]),
[ /* restrictions */
setup.qres.NoUnitWithTitle('quest_brothel_owner_0', {}),
setup.qres.Not(setup.qres.VarNull('quest_brothel_progress')),
setup.qres.VarGte('quest_brothel_progress', 500),
setup.qres.UnitGroupHasUnit('brothel_head_courtesan'),
setup.qres.UnitGroupHasUnit('brothel_cleanup0'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Event_end_of_management">>
<p>
Luckily, you were able to pick up both the former-slave-turned-head-courtesan <<rep $g.courtesan>>, as well as the
former head-whore <<rep $g.head>>. The courtesan has been obediently returned to your
slave pens, while you can decide if you want to hire the former head-whore.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"brothel_head_courtesan",
"Head Courtesan",
[], /* pools */
1, /* reuse chance */
[ /* unit post process */
],
)>>
<<run new setup.Event(
'head_courtesan', /* key */
"Head Courtesan", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_head_courtesan',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.SlaveOrderHeadCourtesan(),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '100'),
],
53, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Thanks to your recent efforts, <<attach _describe>> is almost ready to become a high-class sex venue. There is still a glaring emptiness in one position, however. With <<name $g.head>> serving as the brothel's
<<if _promotion == 'money'>>
business manager,
<<else>>
customer relations officer,
<</if>>
the prestigious position of head courtesan is now empty. A new highly qualified courtesan is required.
</p>
<p>
In order to bring your venue to the highest level, <<yourrep $g.owner>>
owner|suggest that whoever you hire as the head courtesan to be a wonder in
<<themself $g.owner>>. Hiring such a person would normally cost an
astronomical amount of money, but for a final time your position as the
leader of a slaving company put you in a unique position. You can instead
supply the head courtesan from among your stable of slaves. Still, given the
requirements, you would need something very special indeed for the position.
First, the slave should have a mastery over some domain of magic -- it would
certainly make for an interesting sex play.
In addition,
<<if _dom == 'sub'>>
since you've decided to make <<= _name>> a heaven of submissive debauchery,
the head courtesan <<themself $g.head>> must be similarly submissive.
<<elseif _dom == 'dom'>>
since you've decided to make <<= _name>> a heaven of dominant courtesans,
the head courtesan <<themself $g.head>> must be similarly dominant.
<<else>>
since you've decided to make <<= _name>> to cater to both dominants and submissives,
the head courtesan <<themself $g.head>> must be neither dominant and submissive,
but remain a highly valuable slave.
<</if>>
Finally, and perhaps more importantly, the slave <<themself $g.head>> should
be a valuable slave, which should translate to a highly sought-after courtesan.
</p>
<p>
Given the stringent requirements, it may take you some time to find the special, lucky slave...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'more_whore_for_your_brothel', /* key */
"More Whore for Your Brothel", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_more_whore_for_your_brothel',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.SlaveOrderMoreWhoreForYourBrothel(),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '60'),
],
53, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
As the number of customers to <<attach _describe>> keeps growing, the lack of manpower becomes an issue again. <<Yourrep $g.owner>> owner|have asked you for help to recruit a new worker for the place. But unlike last time, not just any whore will do. The whore will need to match the vision of the brothel that you've been building so far.
<<if _class < 0>>
A most debauched whore is needed, as submissive as possible and pliant to <<their $g.head>> customer's will.
<<elseif _class > 1>>
A high-class courtesan is needed, capable of maintaining class in the face of sexual intercourse.
<<else>>
A balanced entertainer is needed, who can serve in both pure sexual debauchery as well as classy sex.
<</if>>
As usual, hiring one properly is going to be too expensive, so you leverage the fact that you run a slaving company and instead choose from among your stable of slaves...
</p><<run new setup.UnitGroup(
"boss_visit0",
"NPC Boss",
'forest_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_boss),
setup.qc.TraitRemove('unit', setup.trait.per_submissive),
setup.qc.TraitRemove('unit', setup.trait.per_dominant),
setup.qc.AddTraitsRandom('unit', [setup.trait.skill_intimidating, setup.trait.skill_connected, setup.trait.skill_hypnotic, setup.trait.face_hideous], 2, true, false),
],
)>>
<<run new setup.Event(
'boss_visit', /* key */
"Boss Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_boss_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': 'boss_visit0',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.QuestDirect('boss_visit', {
head: "head",
owner: "owner",
slave: "slave",
target: "target",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarNull('quest_brothel_royal_visit'),
setup.qres.VarGte('quest_brothel_class', -19),
setup.qres.VarLte('quest_brothel_class', 19),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Quest_boss_visit">><<run new setup.Event(
'brothel_ex_whore', /* key */
"Brothel Ex-Whore", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_ex_whore',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
There are many people working in <<attach _describe>>, and not all of them are courtesans. There is of course <<yourrep $g.owner>>, who is responsible for managing the brothel. There are also the bouncers, including one of your former slave. And finally, there is <<name $g.head>>, a former whore who you have promoted as the brothel's
<<if _promotion == 'money'>>
business manager.
<<else>>
customer relations officer.
<</if>>
</p>
<p>
<<if _promotion == 'money'>>
As the business manager, the <<girl $g.head>> is almost always busily working in <<their $g.head>> office. <<They $g.head>> must ensure that resources are used within an appropriate limit, and also ensure that no expense went unrecorded. At the end of each day, <<name $g.head>> can often be seen working downstairs, ensuring that all the customer have paid for the services rendered.
<<else>>
As the customer relations officer, the <<girl $g.head>> is almost always seen working within the brothel. Whenever a customer looks unhappy, <<they $g.head>> approaches them, and tries <<their $g.head>> best to appease them. At the end of each day, <<name $g.head>> can usually be found near the entrance, bowing and thanking the customers for their patronage.
<</if>>
It's quite a busy life.
</p>
<<choose>>
<<opt "Give <<them $g.head>> a week of well-deserved vacation">>
<p>
The next day, you wait for <<them $g.head>> in <<their $g.head>> office, and give them an all-expenses-paid trip to the <<lore region_vale>>. When the diligent <<man $g.head>> tries to refuse, you insist, and eventually <<therace $g.head>> relents and agree to go on a vacation.
</p>
<p>
The vacation does wonder for the overworked <<name $g.head>>, and they never realize how jaded they had been up until the vacation. When <<they $g.head>> returns, <<they $g.head>> appears much more cheerful than before, and is able to work more efficiently than before. Your brothel's reputation increased slightly as a result.
</p>
<<run setup.qc.Money(-2000).apply($gQuest)>>
<<run setup.qc.VarAdd('quest_brothel_high_income', 6, -1).apply($gQuest)>>
<<opt "Enjoy some consensual sex with the hard-working <<man $g.head>>">>
<p>
When <<name $g.head>> head|return to <<their $g.head>> luxurious bedroom, <<they $g.head>> head|was surprised to find you lying on the bed naked. Taking the hint, <<they $g.head>> head|leap into the bed, and you slowly caress the overworked <<urace $g.head>>. You make out for a while under the sheets, before going raunchier and raunchier into the night. Neither of you get too much sleep that night, but despite that, in the next day <<name $g.head>> appears more refreshed and less jaded than ever.
</p>
<<run setup.qc.VarAdd('quest_brothel_high_income', 2, -1).apply($gQuest)>>
<</choose>><<run new setup.Event(
'brothel_high_season', /* key */
"Brothel High Season", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_high_season',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_sub', 'sub'),
setup.qc.DoAll([
setup.qc.QuestDirect('high_brothel_season_sub_', {
owner: "owner",
head: "head",
slave: "slave",
})
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_sub', 'dom'),
setup.qc.DoAll([
setup.qc.QuestDirect('high_brothel_season_dom_', {
owner: "owner",
head: "head",
slave: "slave",
})
], undefined),
setup.qc.DoAll([
setup.qc.QuestDirect('high_brothel_season', {
owner: "owner",
head: "head",
slave: "slave",
})
], undefined))
], undefined)),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Quest_high_brothel_season_dom_">><<run new setup.Event(
'brothel_rejuvenation', /* key */
"Brothel Rejuvenation", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_rejuvenation',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.QuestDirect('brothel_rejuvenation', {
owner: "owner",
head: "head",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarNull('quest_brothel_high_income'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Quest_brothel_rejuvenation">><<run new setup.Event(
'brothel_suite', /* key */
"Brothel Suite", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_suite',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.Opportunity('brothel_suite', {
owner: "owner",
head: "head",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_brothel_suite">><<run new setup.UnitGroup(
"brothel_volunteer0",
"Brothel Volunteer (Male)",
'forest_allmale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_unemployed),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_lustful, setup.trait.per_playful, setup.trait.per_dreamy, setup.trait.per_lavish], 2, true, false),
],
)>>
<<run new setup.UnitGroup(
"brothel_volunteer1",
"Brothel Volunteer (Female)",
'forest_allfemale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_unemployed),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_lustful, setup.trait.per_playful, setup.trait.per_dreamy, setup.trait.per_lavish], 2, true, false),
],
)>>
<<run new setup.Event(
'brothel_volunteer', /* key */
"Brothel Volunteer", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_brothel_volunteer',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'volunteer_male': 'brothel_volunteer0',
'volunteer_female': 'brothel_volunteer1',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_gender', 'male'),
setup.qc.Opportunity('brothel_volunteer', {
owner: "owner",
head: "head",
slave: "slave",
volunteer: "volunteer_male",
}),
setup.qc.Opportunity('brothel_volunteer', {
owner: "owner",
head: "head",
slave: "slave",
volunteer: "volunteer_female",
}),
),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<if $g.head.isFemale()>>
<<set $g.volunteer = $g.volunteer_female>>
<<else>>
<<set $g.volunteer = $g.volunteer_male>>
<</if>>
<<include "Opportunity_brothel_volunteer">><<run new setup.Event(
'busy_brothel', /* key */
"Busy Brothel", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_busy_brothel',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Given the sexual nature of the neko living in the <<lore location_npc>>, brothels there occupy an important part of the culture. Citizens visit the brothel often to select from the available merchandise, relieve their sexual needs, and leave. Some brothels even simulate affection, companionship, or emotional guidance.
</p>
<p>
Your brothel, <<attach _describe>> is one of the best establishment of its kind in the <<lore location_npc>>.
Citizens who patronize it can expect themselves to be very satisfied by the skilled courtesans.
<<if _dom == 'sub'>>
The courtesans have been extensively trained to specialize in the act of being submissive sluts, and your place is often voted best brothel for doms in the region.
<<elseif _dom == 'dom'>>
The proud and dominant courtesans are quite famous in the city, and many citizens harbor a secret desire to be dominated by the tough bitches.
<<else>>
The brothel has it all — be it to dominate others, to be dominated, or somewhere in between.
<</if>>
<<if _promotion == 'favor'>>
The customer relations officer <<name $g.head>> makes extra sure that the customers always leave the compound with a smile on their faces (not to mention the lighter feeling in their pockets).
<</if>>
</p>
<p>
The brothel really reflects well on you and your company, and perhaps you could so something with it.
</p>
<<choose>>
<<opt "Surprise the hardworking courtesans with a week of rest">>
<p>
The problem with assembly-line sex is that it has a tendency to destroy any sense of intimacy or fun. So, you make some simple preparations and close the brothel for a week. Several freelancers were hired to staff the brothel, and the brothel is then made available exclusively to all your brothel's workers, including the grateful courtesans. They are free to do anything they want, and many spend the days playing games, enjoying light amusements, and perusing the brothel's many services as a customer.
The <<girl $g.slave>>s are surprised by your generosity, but they have fun. When the brothel reopens, your customer give glowing reviews for the courtesans newfound enthusiasm, which increases the brothel's fame.
</p>
<<run setup.qc.VarAdd('quest_brothel_high_income', 2, -1).apply($gQuest)>>
<<opt "Eliminate prices for one day to promote the brothel">>
<p>
The news that
<<if _class > 0>>
entertainment
<<else>>
sex
<</if>>
will be free at the brothel travels like wildfire.
You had to pay to hire extra security measures to control the throng that spends the entire day entering and leaving the brothel, though as the day goes on the crowds thin. By noon,
<<if _dom == 'dom'>>
<<if $g.head.isHasDick()>>
all the pricks on offer are so sore that only those who fetishize cum-less orgasms stick around.
<<else>>
all the doms are already so tired that only those who fetishize reverse power play stick around.
<</if>>
<<elseif _dom == 'sub'>>
all the holes on offer are so fucked out that only those who fetishize that sort of thing stick around.
<<else>>
all the holes on offer <<if $g.head.isHasDick()>> as well as the pricks<</if>> are so sore that only those who fetishize that sort of thing stick around.
<</if>>
The brothel is a real seminal sewer by afternoon,
and it smells like it. Nevertheless, free sex is a short route to public approval, although you do miss out on the fees.
</p>
<<run setup.qc.Money(-2000).apply($gQuest)>>
<<run setup.qc.Favor('neko', 100).apply($gQuest)>>
<</choose>><<run new setup.UnitGroup(
"demon_visit0",
"Demon Royal",
'subrace_demon', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_royal),
setup.qc.TraitsReplace('unit', [setup.trait.magic_dark_master, setup.trait.per_cruel]),
],
)>>
<<run new setup.Event(
'demon_visit', /* key */
"Demon Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_demon_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': 'demon_visit0',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.QuestDirect('demon_visit', {
head: "head",
owner: "owner",
slave: "slave",
target: "target",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarNull('quest_brothel_royal_visit'),
setup.qres.VarLte('quest_brothel_class', -20),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Quest_demon_visit">><<run new setup.Event(
'head_courtesan_meeting', /* key */
"Head Courtesan Meeting", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_head_courtesan_meeting',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Your head courtesan of <<attach _describe>>, <<rep $g.slave>>, is a
<<if $g.slave.isHasTrait('per_dreamy')>>
resourceful
<<else>>
perceptive
<</if>>
whore mistress.
The brothel manager <<rep $g.owner>>owner|is a
<<uadjgood $g.owner>> manager, of course, and
the
<<if _promotion == 'money'>>
business manager <<name $g.head>>
is as well-informed as <<they $g.head>> could be with the brothel's financials,
<<else>>
customer relations officer <<name $g.head>>
is as well-informed as <<they $g.head>> could be with the brothel's customers,
<</if>>
but the head courtesan has special insight. <<They $g.slave>> slave|see more sex in person than anyone in the brothel, and may even know some of the brothel courtesans better than anyone else. This certainly extends to <<their $g.slave>> sexualities and skills; if <<they $g.slave>> ever slave|have any doubts about any of them,
<<if _dom == 'dom'>>
<<they $g.slave>> usually invite the troubled dominant for some private time
<<else>>
<<they $g.slave>> usually fucks
the
<<if _dom == 'sub'>>
submissive courtesan
<<else>>
flexible courtesan
<</if>>
<<themself $g.slave>> to get at the truth.
<</if>>
</p>
<<choose>>
<<opt "Review <<their $g.slave>> charges' skills with <<them $g.slave>>">>
<p>
You've decided to go to the brothel and into <<reps $g.owner>> office, before calling the head courtesan <<name $g.slave>> inside.
Upon seeing the both of you,
<<they $g.slave>> immediately slave|assume slave mentality and slave|get ready with the clear anticipation of being thrown over the desk, but instead slave|find <<themself $g.slave>> sitting across it from you and your slaver, taking part in a three-way strategy session between you and <<yourrep $g.owner>>.
The three of you carefully review the sexual advantages and disadvantages of each of the brothel's courtesans. <<They $g.slave>> is properly deferential, but definitely slave|have insight to offer about how many of them satisfy customers. With <<their $g.slave>> input, you together put a plan to address their issues with instruction and hands-on correction. Your brothel's fame increases slightly.
</p>
<<run setup.qc.VarAdd('quest_brothel_high_income', 2, -1).apply($gQuest)>>
<<opt "Remind <<them $g.slave>> of <<their $g.slave>> status as a slave">>
<p>
You've decided to go to the brothel and into <<reps $g.owner>> office, before calling the head courtesan <<name $g.slave>> inside.
Upon seeing the both of you,
<<they $g.slave>> immediately slave|assume slave mentality and slave|get ready with the clear anticipation of being thrown over the desk.
And <<they $g.slave>> is right.
You push <<them $g.slave>> down across the desk, giving <<them $g.slave>> a playful swat across the rump. When you begin to grope <<their $g.slave>> ass, <<yourrep $g.owner>>,
<<if !$g.owner.isHasDick()>>
already donning a strap-on,
<<else>>
already stripping of <<their $g.owner>> pants,
<</if>>
roughly shove the <<udickorstrap $g.owner>> into the head courtesan's <<umouth $g.slave>>.
At the same time, you work your way towards <<their $g.slave>> backdoor.
When <<they $g.slave>> slave|feel
<<if $unit.player.isHasDick()>>
your lubed cockhead
<<else>>
a lubed strap-on
<</if>> sliding between <<their $g.slave>> buttocks and then pressing against <<their $g.slave>> anus, <<rep $g.slave>> slave|close <<their $g.slave>> eyes, being reminded that despite being a head courtesan for your brothel, <<they $g.slave>> still remains your slave at heart.
You give <<them $g.slave>> a few seconds to get used to your girth and then begin to fuck <<their $g.slave>> <<uanus $g.slave>>.
The oral and <<if !$g.slave.isHasDick()>>anal stimulations get <<them $g.slave>> wet.<<else>>prostate stimulations get <<them $g.slave>> hard.<</if>>
<<They $g.slave>> slave|continue to muffle incoherently into <<reps $g.owner>>
<<if $g.owner.isHasDick()>>prick,<<else>>rubber dick,<</if>> and
<<if !$g.slave.isHasDick()>>
you reach around to cup <<their $g.slave>> soaking cunt possessively.
<<else>>
<<they $g.slave>> slave|start to leak precum.
<</if>>
You finally orgasm, and <<yourrep $g.owner>> too judging from <<their $g.owner>> expression.
</p>
<p>
If <<rep $g.slave>> ever forgot that <<they $g.slave>> slave|is a slave, <<they $g.slave>> won't forget anytime soon. In fact, some customer who are in the know within your brothel are also reminded of the fact that the main attraction of your prestigious brothel remains your obedient slave, and view your company with a little more respect.
</p>
<<run setup.qc.Favor('neko', 50).apply($gQuest)>>
<</choose>><<run new setup.Event(
'job_change', /* key */
"Job Change", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_job_change',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.Opportunity('job_change', {
head: "head",
owner: "owner",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_job_change">><<run new setup.Event(
'magic_bondage_room', /* key */
"Magic Bondage Room", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_magic_bondage_room',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarEqual('quest_brothel_attraction', 'bondage'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
<<attach _describe>> is
<<if _class >= 2>>
a high-class establishment, drawing even nobles inside.
<<elseif _class <= -2>>
a debauched little brothel, drawing even the richest of criminals to the establishment.
<<else>>
a renowned brothel in the area, known for its skilled <<= _gender>> courtesans.
<</if>>
It is located in a large
<<if _class >= 2>>
palace-like
<<elseif _class <= -2>>
demonic palace-like
<<else>>
exotic palace-like
<</if>>
complex.
The centerpiece of the complex is without doubt the Magic Bondage Room, secluded within its innermost chamber.
The room hosts various enchanted sex toys, which can be activated to various effects by the resident whore-wizard <<name $g.slave>>.
Paying customers can tailor their bondage experience by using these various enchanted toys.
</p>
<p>
As the proprietor of the place, you can use the various sex toys on your head courtesan <<name $g.slave>> too. Of course, the fee is completely exempt for you.
</p>
<<choose>>
<<opt 'Have some dominant fun'>>
<p>
You set <<name $g.slave>> all fours on the floor, and place the many dildo contraptions on the floor, surrounding <<therace $g.slave>>.
You order <<them $g.slave>> to activate the enchantments, and the dildos come to live.
One by one, they are moving rhythmically;
<<if $g.slave.isHasTrait('vagina_gape')>>Two large dildo machines are working their way past <<their $g.slave>> gaping cunt, and <<elseif $g.slave.isHasTrait('vagina_loose')>>A large dildo machine is working its way past <<their $g.slave>> cunt, and <<elseif $g.slave.isHasVagina()>>
a dildo machine is working its way past <<their $g.slave>> tight pussy, and
<<else>>
Soon after,
<</if>>
<<if $g.slave.isHasTrait('anus_gape')>>two large dildos are fucking <<their $g.slave>> enormous butthole. <<elseif $g.slave.isHasTrait('anus_loose')>>a large dildo is fucking <<their $g.slave>> butthole. <<else>>a dildo is fucking <<their $g.slave>> tight butt. <</if>>
<<if $g.slave.isHasTrait('breast_huge')>>
<<They $g.slave>>
has lubricated <<their $g.slave>> cavernous cleavage to titfuck another,
<<elseif $g.slave.isHasTrait('breast_medium')>>has lubricated <<their $g.slave>> cleavage to titfuck another.<</if>>
In addition, <<they $g.slave>> is performing two <<uhand $g.slave>>jobs at once, to either side, and also
<<if $g.slave.isHasTrait('training_oral_master')>>
making use of <<their $g.slave>> masterful oral skills to suck off two more.
<<elseif $g.slave.isHasTrait('training_oral_advanced')>>
making use of <<their $g.slave>> outstanding oral skills to suck off two more.
<<elseif $g.slave.isHasTrait('training_oral_basic')>>taking a throatfuck from one more.<<else>>giving a final one a blowjob.<</if>>
</p>
<<choose>>
<<opt "Just spectate and let them relax afterwards">>
<p>
You leave for a moment, but return quickly with a chair and a refreshing beverage from the brothel's bar so you can sit and enjoy the spectacle. The hard fucking however means that <<they $g.slave>> is unable to go for a long time, and eventually exhaustin takes them over and <<their $g.slave>> magic was depleted, but not before retracting all the phalli. <<name $g.slave>> collapses weakly to the sweat-stained floor. You gather the limp courtesan in your <<uarms $unit.player>> and carry <<them $g.slave>> to the brothel bath, which is all ready and filled with steaming water. <<name $g.slave>> groans with pleasure as you lower <<them $g.slave>> into the water.
</p>
<<opt "Tour <<their $g.slave>> holes">>
<p>
The polite thing to do would be to instruct <<them $g.slave>> to retract a dildo before replacing it with <<if !$unit.player.isHasDick()>>a strap-on<<else>>your dick<</if>>. You are not, however, feeling particularly polite.
<<name $g.slave>> writhes in anguish when <<they $g.slave>> feels an additonal phallus forcing its way past <<their $g.slave>> lips. <<They $g.slave>> tries to relax but loses control and spasms; the throat fucking continues unmercifully and in short order <<they $g.slave>> is gagging desperately. Each of <<their $g.slave>> holes receives the same treatment in turn; all <<they $g.slave>> manages to do in response is writhe here and there, and squeal incoherently whenever <<their $g.slave>> <<umouth $g.slave>> isn't totally full.
</p>
<</choose>>
<<opt 'Decline'>>
<p>
You're not in the mood for some dominant sex action right now, so you decline and get back to your mounting work. It turned out working makes you some money.
</p>
<<run setup.qc.Money(500).apply($gQuest)>>
<</choose>><<run new setup.Event(
'magic_gravity_room', /* key */
"Magic Gravity Room", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_magic_gravity_room',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 300),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarEqual('quest_brothel_attraction', 'gravity'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
<<attach _describe>> is
<<if _class >= 2>>
a high-class establishment, drawing even nobles inside.
<<elseif _class <= -2>>
a debauched little brothel, drawing even the richest of criminals to the establishment.
<<else>>
a renowned brothel in the area, known for its skilled <<= _gender>> courtesans.
<</if>>
It is located in a large
<<if _class >= 2>>
palace-like
<<elseif _class <= -2>>
demonic palace-like
<<else>>
exotic palace-like
<</if>>
complex.
The centerpiece of the complex is without doubt the Magic Gravity Room, located within its innermost chamber.
The room is decorated with crystals, which when activated by the resident magic-adept head courtesan <<name $g.slave>>, will send a steady stream of wind upwards, emulating zero gravity to anyone inside. This could be used to great effect during sex, and many customers paid for the experience.
</p>
<p>
As the proprietor of the place, you can use the room too to fuck the head courtesan <<name $g.slave>>. Of course, you don't need to pay any fee.
</p>
<<choose>>
<<opt 'Have "sitting" sex'>>
<p>
<<if !$unit.player.isHasDick()>>
Donning a strap-on, you
<<else>>
You
<</if>>
<<ustripequipmentand $unit.player>> step into the chamber.
<<name $g.slave>> then worked <<their $g.slave>> magic (literally) and the crystals flared alive, wind blowing upwards from them.
With the anti-gravity activated, you effortlessly lift <<them $g.slave>> in a bridal carry, your <<uarms $unit.player>> behind <<their $g.slave>> shoulders and the backs of <<their $g.slave>> knees.
You then sit on the air, while letting <<their $g.slave>>
<<if $g.slave.isHasTrait('muscle_strong')>>muscular<<elseif $g.slave.isHasTrait('muscle_thin')>>trim<<else>>healthy<</if>>
bottom sink down into your lap.
</p>
<p>
<<They $g.slave>> shimmies <<themself $g.slave>> atop your <<if !$unit.player.isHasDick()>>phallus<<else>><<udick $unit.player>><</if>>, gently seating it between <<their $g.slave>> buttocks, and cranes <<their $g.slave>> neck back to kiss the bottom of your chin.
<<They $g.slave>> gradually comes out of <<their $g.slave>> heat stupor, riding <<themself $g.slave>> back and forth more and more until the
<<if $g.slave.isHasTrait('anus_gape')>>slit of <<their $g.slave>> asspussy<<elseif $g.slave.isHasTrait('anus_loose')>>opening of <<their $g.slave>> anus<<else>>pucker of <<their $g.slave>> butt<</if>> rests against your <<if !$unit.player.isHasDick()>>strap-on<<else>>cock<</if>>.
You take <<their $g.slave>> hips and firmly thrust into <<their $g.slave>> rectum, eliciting a little whimper, but <<they $g.slave>> begins to bounce gently in the anti-gravity room, sodomizing <<themself $g.slave>>,
<<if $g.slave.isHasBreasts()>>
<<their $g.slave>> <<ubreasts $g.slave>> moving up and down, exaggerated by the low gravity.
<<else>>
<<their $g.slave>> <<ubreasts $g.slave>> heaving in and out as <<their $g.slave>> breath quickens.
<</if>>
<<Their $g.slave>> first orgasm takes <<them $g.slave>> by surprise,
<<if $g.slave.isHasDick()>>
<<their $g.slave>> cum floating into the air<<if $g.slave.isCanSee()>>; <<they $g.slave>> points at it
<<else>>; <<they $g.slave>> feels it brush <<their $g.slave>> skin<</if>>
and
<<if $g.slave.isFemale()>>giggles<<else>>smirks<</if>>
before getting<<else>>
making <<them $g.slave>> twitch and shudder with aftershocks as <<they $g.slave>> gets<</if>>
<<their $g.slave>> feet up on a nearby pillar to ride you harder.
</p>
<p>
When you're done, you let <<them $g.slave>> float in the air, but curiosity about how <<their $g.slave>> fucked butt feels in the low gravity leads you to reach a <<uhand $unit.player>> between <<their $g.slave>> <<ulegs $g.slave>> and grope <<their $g.slave>> anus.
<<Their $g.slave>> warm, relaxed <<if $g.slave.isHasTrait('anus_gape')>>asspussy<<elseif $g.slave.isHasTrait('anus_loose')>>backdoor<<else>>tightness<</if>> is so enticing you push <<them $g.slave>> to <<their $g.slave>> feet and take <<them $g.slave>> a second time, before again floating into the air. By the time you're done <<they $g.slave>>'s so sexually exhausted that you carry <<them $g.slave>> to the brothel showers.
</p>
<<opt 'Have "standing" sex'>>
<p>
Per your direction, <<name $g.slave>> activates the magical crystals in the room, and wind started to gush upwards, letting the both of you float around.
<<They $g.slave>> then hugs you impulsively, intentionally giving you a
<<if $g.slave.isHasTrait('breast_huge')>>
huge faceful of boob.
<<else>>
pressing <<their $g.slave>>
<<if $g.slave.isHasBreasts()>>
soft
<<elseif $g.slave.isHasTrait('muscle_strong')>>
hard
<</if>>
<<ubreasts $g.slave>> against your face.
<</if>>
You pull <<them $g.slave>> down and then <<ustrippantsand $unit.player>>
<<if ($unit.player.isHasVagina())>>
spread <<their $g.slave>> knees so you can scissor your pussy against <<them $g.slave>> in the near-zero gravity, the tangle of limbs
<<if $g.slave.isHasBreasts()>>
and breasts swaying
<<elseif $g.slave.isHasTrait('muscle_strong')>>
and muscle flexing
<</if>>
as you grind.
<<else>>
insert yourself into the <<if $g.slave.isHasTrait('anus_gape')>>loose slit of <<their $g.slave>> asspussy<<elseif $g.slave.isHasTrait('anus_loose')>>welcoming pucker of <<their $g.slave>> anus<<else>>tight pucker of <<their $g.slave>> butt<</if>>.
<<They $g.slave>> exaggerates <<their $g.slave>> discomfort, wriggling against <<their $g.slave>> feet and squealing as you <<uadv $unit.player>> sodomize <<them $g.slave>> in the zero-gravity chamber.
<<if $g.slave.isHasBreasts()>>
<<Their $g.slave>> <<ubreasts $g.slave>> quiver in near-zero gravity with each thrust, until you notice the delicious motion and take one in each <<uhand $unit.player>>.
<<else>>
<<Their $g.slave>> <<ubreasts $g.slave>> quiver in near-zero gravity with each thrust, until you notice the hardening nipples and pinch them with your <<uhands $unit.player>>.
<</if>>
You eventually came, inside the courtesan, and
<<if $unit.player.isHasTrait('balls_huge')>>
a large amount of cum from your <<uballs $unit.player>>
<<else>>
trace of cum
<</if>>
could be seen floating as you pull your shaft away. You turned the courtesan around and made them suck all the floating cum with <<their $g.slave>> <<umouth $g.slave>>.
<</if>>
</p>
<</choose>><<run new setup.Event(
'pants_of_competence', /* key */
"Pants of Competence", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_pants_of_competence',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.Opportunity('pants_of_competence', {
owner: "owner",
head: "head",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_pants_of_competence">><<run new setup.Title(
"quest_royal_visit0", /* key */
"Neko Port City Royalty", /* name */
"A symbolic royalty of the Neko Port City", /* description */
"a|is part of the symbolic royal family of the Neko Port City", /* unit text */
20000, /* slave value */
{ /* skill additives */
social: 5,
sex: 3,
},
)
>>
<<run new setup.UnitGroup(
"royal_visit0",
"Neko Submissive Royal",
'subrace_neko', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_royal),
setup.qc.TraitsReplace('unit', [setup.trait.per_submissive, setup.trait.per_attentive, setup.trait.face_beautiful, setup.trait.magic_earth_master]),
setup.qc.AddTitle('unit', 'quest_royal_visit0'),
],
)>>
<<run new setup.Event(
'royal_visit', /* key */
"Royal Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_royal_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': 'royal_visit0',
},
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent(null, 300),
setup.qc.QuestDirect('royal_visit', {
head: "head",
owner: "owner",
slave: "slave",
target: "target",
}),
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_wait'),
setup.qres.VarEqual('quest_brothel_progress', '500'),
setup.qres.VarGte('quest_brothel_class', 20),
setup.qres.VarNull('quest_brothel_royal_visit'),
],
53, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Quest_royal_visit">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'understaffed', /* key */
"Understaffed", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_understaffed',
{ /* roles (LEGACY) */
},
{ /* actors */
'head': 'brothel_cleanup0',
'owner': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('head', setup.qres.AllTraits([setup.trait.gender_male], true)),
setup.qc.DoAll([
setup.qc.SlaveOrderFlex(
'New Employee for your Brothel', /* name */
'player', /* company */
50, /* expires in */
500, /* base price */
500, /* trait multi */
0, /* value multi */
[ /* crit traits */
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.skill_entertain,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.magic_dark_master,
setup.trait.magic_dark,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.gender_male], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.HideAll([
setup.qc.VarSet('quest_brothel_progress', '20', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1)
], "Increase your brothel\'s profits"),
],
[ /* unfulfilled outcomes */
],
)
], undefined),
setup.qc.DoAll([
setup.qc.SlaveOrderFlex(
'New Employee for your Brothel', /* name */
'player', /* company */
50, /* expires in */
500, /* base price */
500, /* trait multi */
0, /* value multi */
[ /* crit traits */
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.skill_entertain,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[ /* disaster traits */
setup.trait.anus_gape,
setup.trait.vagina_gape,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.magic_dark_master,
setup.trait.magic_dark,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.gender_female], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.HideAll([
setup.qc.VarSet('quest_brothel_progress', '20', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1)
], "Increase your brothel\'s profits"),
],
[ /* unfulfilled outcomes */
],
)
], undefined)),
],
[ /* restrictions */
setup.qres.VarEqual('quest_brothel_progress', '12'),
setup.qres.VarNull('quest_brothel_wait'),
],
53, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
It's still very little, but <<attach _describe>> is starting to make some profit
now. The various dockworkers and other low-class workers have started to
flock to your little whorehouse. The number of customer is steadily growing,
and in fact, it's starting to get somewhat unwieldy.
</p>
<p>
One the whores in the place, <<name $g.head>>, (the one you recalled
being particularly diligent last time), had asked the manager of the place,
<<yourrep $g.owner>>, to provide more <<uhands $unit.player>> on deck. That is, it might finally be
time to hire more whores into the place to help attend to the increasing
demand. A problem with hiring new whores is that you'd need to pay them, so
as a slaving company you are in a unique position and have a different option
at <<uhand $unit.player>>: "hire" a new whore from among your obedient slaves instead. Whoever
slave you choose will be "freed" to work there, but <<they $g.head>> needs to be already trained
well enough so that even once <<they $g.head>> becomes freed, <<they $g.head>>'ll still be your slave at
heart.
</p>
<p>
You might not profit off the slave immediately, but it'll increase the brothel's profit little by little!
</p><<run new setup.Event(
'choose_your_own_adventure_chapter_2', /* key */
"Choose Your Own Adventure: Chapter 2", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_choose_your_own_adventure_chapter_2',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '2a', -1),
setup.qc.Opportunity('choose_your_own_adventure__chapter_2', null),
],
[ /* restrictions */
setup.qres.VarEqual('choose_your_own_adventure_progress', '2'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_choose_your_own_adventure__chapter_2">><<run new setup.Event(
'choose_your_own_adventure_chapter_3', /* key */
"Choose Your Own Adventure: Chapter 3", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_choose_your_own_adventure_chapter_3',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '4a', -1),
setup.qc.Opportunity('choose_your_own_adventure__chapter_3', null),
],
[ /* restrictions */
setup.qres.VarEqual('choose_your_own_adventure_progress', '4'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_choose_your_own_adventure__chapter_3">><<run new setup.Event(
'choose_your_own_adventure_chapter_4', /* key */
"Choose Your Own Adventure: Chapter 4", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_choose_your_own_adventure_chapter_4',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '6a', -1),
setup.qc.Opportunity('choose_your_own_adventure__chapter_4', null),
],
[ /* restrictions */
setup.qres.VarEqual('choose_your_own_adventure_progress', '6'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_choose_your_own_adventure__chapter_4">><<run new setup.Event(
'choose_your_own_adventure_final_chapter', /* key */
"Choose Your Own Adventure: Final Chapter", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_choose_your_own_adventure_final_chapter',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarSet('choose_your_own_adventure_progress', '8a', -1),
setup.qc.IfThenElse(
setup.qres.VarGte('choose_your_own_adventure_changes', 4),
setup.qc.DoAll([
setup.qc.Opportunity('choose_your_own_adventure__final_chapter', null)
], undefined),
setup.qc.DoAll([
setup.qc.Opportunity('choose_your_own_adventure__final_chapter_true_end', null)
], undefined)),
],
[ /* restrictions */
setup.qres.VarEqual('choose_your_own_adventure_progress', '8'),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><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><<run new setup.Event(
'blame_on_you', /* key */
"Blame on You", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_blame_on_you',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
setup.qres.Home(),
],
'dop': setup.contacttemplate.quest_doppelganger,
'slave': 'all',
},
[ /* outcomes */
setup.qc.Ire('humanvale', 1),
setup.qc.VarSet('quest_doppelganger_progress', '4', -1),
setup.qc.SetCooldownEvent('nearby_violations', 5),
setup.qc.SlaveMarker('slave'),
],
[ /* restrictions */
setup.qres.VarEqual('quest_doppelganger_progress', '3'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Your fort is located in a particularly lawless region of <<lore continent_main>>, and random bandit ambush as well as slave hunting parties are rather common in the area. Despite that, something rather eccentric would happen from time to time, and the rumors spread quickly among the many gossipwomen of the vale. The latest of such rumors is regarding the recent cases that seems to only target young, idyllic, and virginal <<men $g.slave>>. The victims would be later found a far cry from their once pure and innocent self — their holes would be gaped beyond repair and their faces locked in permanent ahegao (or at least for a couple of weeks). Despite that, nothing valuable was lost, and it seems that the perpetrator's only goal was to simply enjoy the rape.
</p>
<p>
Because of such uncommon motive, the blame somehow fell into your company, and your reputation takes a little hit with the surrounding people. You round up your slavers, asking if anyone would happen to know something related to this. Unsurprisingly, nobody claims any connection.
<<if $unit.player.isHasTrait('per_attentive')>>
Although most looks trustworthy (at least to your very low standards of trustworthy), you are perceptive enough to note that <<rep $g.slaver>> behaved unnaturally. <<They $g.slaver>> might know something more, but decided not to tell you. You don't have any proof though, so you just shrugged and go on with the rest of your day.
<<elseif $unit.player.isHasTrait('per_dreamy')>>
You roll your eyes upwards, and being the inattentive slaver that you are, you simply get back to work and just hope for the best.
<<else>>
Still, you somehow sense that something was off regarding <<reps $g.slaver>> behavior, and <<therace $g.slave>> might actually know something. But that's all your intuition, and without any proof, you decide to just go on with the rest of your day.
<</if>>
</p><<run new setup.Event(
'doppelganger_epilogue', /* key */
"Doppelganger Epilogue", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_doppelganger_epilogue',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
setup.qres.Home(),
],
'dop': setup.contacttemplate.quest_doppelganger,
},
[ /* outcomes */
setup.qc.Opportunity('doppelganger_epilogue', {
dop: "dop",
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.VarEqual('quest_doppelganger_progress', '6'),
setup.qres.NoOpportunity('doppelganger_epilogue'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Opportunity_doppelganger_epilogue">><<run new setup.Event(
'doppelganger_show', /* key */
"Doppelganger Show", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_doppelganger_show',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
setup.qres.Home(),
],
'dop': setup.contacttemplate.quest_doppelganger,
},
[ /* outcomes */
setup.qc.VarSet('quest_doppelganger_event_cooldown', '1', 100),
],
[ /* restrictions */
setup.qres.VarNull('quest_doppelganger_progress'),
setup.qres.VarNull('quest_doppelganger_event_cooldown'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'doppelganger_show2', /* key */
"Doppelganger Show", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_doppelganger_show',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
setup.qres.Home(),
],
'dop': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganger'),
setup.qres.Available(),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_doppelganger_event_cooldown', '1', 100),
],
[ /* restrictions */
setup.qres.VarNull('quest_doppelganger_progress'),
setup.qres.VarNull('quest_doppelganger_event_cooldown'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _guest = $gQuest.getTemplate().key == 'doppelganger_show'>>
<p>
<<Rep $g.slaver>> and <<their $g.slaver>> doppelganger <<rep $g.dop>> now both live at your fort —
<<if _guest>>
<<rep $g.slaver>> slaver|remain your slaver, of course, while <<rep $g.dop>> stays at your guest.
<<else>>
they are both now working as your slavers.
<</if>>
<<if $g.slaver.getLover() == $g.dop>>
Since they are lovers,
<<elseif $g.slaver.getLover()>>
Despite already having a lover,
<<else>>
As <<they $g.slaver>> slaver|do not yet have a lover,
<</if>>
<<rep $g.slaver>> would occasionally enjoy the sex with <<their $g.slaver>> own clone, occasionally enjoying
<<if $g.slaver.isHasDick()>>
the taste of <<their $g.slaver>> own dick,
<<else>>
the taste of <<their $g.slaver>> own cunt,
<</if>>
as well as the feeling of being serviced by what is basically <<their $g.slaver>> own <<umouth $g.slaver>>.
</p>
<p>
Today, they decide to pay you back for your generosity by giving you some private show, if you'd like?
</p>
<<choose>>
<<opt "Enjoy watching some self-sex action">>
<p>
They invited you to their room, knowing how much you enjoy watching sex. Once inside, they shuffle around, making you unable to distinguish who is who, and their bodies become nothing but interchangeable pair of flesh. They begin by caressing each other, touching their own sensitive spots that are also present in their other body, before eagerly kissing with each other. They then jump on the bed, and press their
<<if $g.dop.isHasDick()>>cocks<<else>>pussies<</if>> against one another, making sure everything is pleasantly symmetrical.
One of them breaks the symmetry by rotating their body, and positioning <<their $g.dop>> <<umouth $g.dop>> just right in front of the other's <<ugenital $g.slaver>>, before
<<if $g.slaver.isHasDick()>>
sucking it eagerly with the pace <<they $g.dop>> dop|know <<they $g.dop>> dop|like best.
<<else>>
eating it eagerly with the pace <<they $g.dop>> dop|know <<they $g.dop>> dop|like best.
<</if>>
They roll over the bed every now and then, their symmetrical body making the experience of watching them unlike any other.
In the end, they climaxes simultaneously, and both ends up lying on the bed together, giving each other a tired but satisfied kiss.
</p>
<<opt "Pass on the offer">>
<p>
With the stable of slaves being kept deep down in your dungeons, if you want to enjoy sex, you can skip the watching part and get straight to action. With this in mind, you decline the offer, telling them that if they want to pay you back, just work hard as a slaver under your employ.
</p>
<p>
It seems your words did motivate <<rep $g.slaver>> to work a little harder in the coming weeks.
</p>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<</choose>><<run new setup.Event(
'missing_doppelganged', /* key */
"Missing Doppelganged", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_missing_pair',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_doppelganger')],
[setup.qc.RemovePerkChoice('unit', 'perk_doppelganger'), setup.qc.RemoveTitle('unit', 'quest_doppelganger')],
),
setup.qc.ContactLose(setup.contacttemplate.quest_doppelganger),
setup.qc.VarRemove('quest_doppelganger_progress'),
],
[ /* restrictions */
setup.qres.HasUnitWithTitle('quest_doppelganger', {
}),
setup.qres.NoUnitWithTitle('quest_doppelganged', {
}),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getUnit({title: 'quest_doppelganger'})>>
<<if _u>>
<p>
Unfortunately, it seems that whichever unit the doppelganger <<rep _u>> was copying has somehow left the continent.
The doppelganger is now stuck in whichever body <<they _u>> is currently occupying.
</p>
<</if>><<run new setup.Event(
'missing_doppelganger', /* key */
"Missing Doppelganger", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_missing_doppelganger',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_doppelganged')],
[setup.qc.RemovePerkChoice('unit', 'perk_doppelganged'), setup.qc.RemoveTitle('unit', 'quest_doppelganged')],
),
setup.qc.VarRemove('quest_doppelganger_progress'),
],
[ /* restrictions */
setup.qres.HasUnitWithTitle('quest_doppelganged', {
}),
setup.qres.NoUnitWithTitle('quest_doppelganger', {
}),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getUnit({title: 'quest_doppelganged'})>>
<<if _u>>
<p>
Unfortunately, <<reps _u>> doppelganger has somehow left the continent.
The benefits provided by having a doppelganger no longer affects the slaver.
</p>
<</if>><<run new setup.UnitGroup(
"nearby_violations0",
"Victim",
'subrace_humanvale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_gape),
],
)>>
<<run new setup.Event(
'nearby_violations', /* key */
"Nearby Violations", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_nearby_violations',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
],
'violated': 'nearby_violations0',
'dop': setup.contacttemplate.quest_doppelganger,
},
[ /* outcomes */
setup.qc.Ire('humanvale', 2),
setup.qc.QuestDirect('nearby_violations', {
dop: "dop",
slaver: "slaver",
violated: "violated",
}),
setup.qc.SetCooldownEvent(null, 30),
],
[ /* restrictions */
setup.qres.NoQuest('nearby_violations'),
setup.qres.NoOpportunity('nearby_violations'),
setup.qres.VarEqual('quest_doppelganger_progress', '4'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_nearby_violations">><<run new setup.Event(
'out_of_character', /* key */
"Out of Character", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_out_of_character',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.HasTag('quest_doppelganged'),
],
'you': [
setup.qres.You(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_doppelganger_progress', '2', -1),
setup.qc.SetCooldownEvent('room_mate', 5),
],
[ /* restrictions */
setup.qres.VarEqual('quest_doppelganger_progress', '1'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
In the recent days, <<yourrep $g.slaver>> occasionally act very strange around you and your slavers. When you greeted <<therace $g.slaver>>, for example, <<they $g.slaver>> instead just run away from you. Your other slavers often found <<therace $g.slaver>> skulking around in your fort too, seemingly trying to avoid attention although having the exact opposite effect. But on other occasions, <<therace $g.slaver>> is perfectly normal, and <<they $g.slaver>> can still often be found <<uhobbyverb $g.slaver>> in <<their $g.slaver>> free time.
</p>
<p>
But maybe you're just imagining things, since you've been working a little too hard, and maybe just need a couple of weeks of rest.
Still, you also recall hearing strange noises coming from somewhere in your fort during night,
but perhaps it is again due to you being too tired...
</p><<run new setup.UnitGroup(
"room_mate0",
"Doppelganger",
'subrace_humandesert', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_wildman),
setup.qc.AddTraitsRandom('unit', [setup.trait.skill_animal, setup.trait.magic_water_master], 1, false, false),
],
)>>
<<run new setup.Event(
'room_mate', /* key */
"Room Mate", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_room_mate',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.HasTag('quest_doppelganged'),
],
'dop': 'room_mate0',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 15),
setup.qc.QuestDirect('room_mate', {
dop: "dop",
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.NoQuest('room_mate'),
setup.qres.NoOpportunity('room_mate'),
setup.qres.VarEqual('quest_doppelganger_progress', '2'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<include "Quest_room_mate">><<run new setup.Event(
'dungeons_and_dragons', /* key */
"Dungeons and Dragons", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_dungeons_and_dragons',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior, setup.trait.bg_adventurer], true),
],
},
[ /* outcomes */
setup.qc.AddTitle('slaver', 'quest_heroic_withdrawal_0'),
setup.qc.VarRemove('dungeons_and_dragons_withdrawal_progress'),
setup.qc.QuestDirect('dungeons_and_dragons', null),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.NoUnitWithTitle('quest_heroic_withdrawal_0', {
}),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _w = setup.getAnySlaver([_u])>>
<p>
Your slavers originate from many disciplines.
There's <<rep _w>>, who loves nothing but <<uhobbyverb _w>>. And then there's <<rep $g.slaver>>, who loves nothing but to
<<if $g.slaver.isHasTrait('per_humble')>>
tell tales
<<else>>
brag
<</if>>
about <<their $g.slaver>> many adventures before joining your company.
To your knowledge, some of your other slavers love (or at least feign interest) in the stories, which apparently has affected the slaver...
</p><<run new setup.Event(
'dungeons_and_dragons_fetch_quest', /* key */
"Dungeons and Dragons: Fetch Quest", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'unknown',
'fort',
],
'Event_dungeons_and_dragons_fetch_quest',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.VarRemove('dungeons_and_dragons_withdrawal_progress'),
setup.qc.Opportunity('dungeons_and_dragons_fetch_quest', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.VarEqual('dungeons_and_dragons_withdrawal_progress', '3'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Having successfully completed a heroic quest you gave <<them $g.slaver>> sometime ago, the "hero" grew bolder, and today <<yourrep $g.slaver>> asks your for another "heroic" quest suitable for a "hero" such as <<themself $g.slaver>>.
</p><<run new setup.Event(
'dungeons_and_dragons_lair_of_evil', /* key */
"Dungeons and Dragons: Lair of Evil", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'prep',
'unknown',
],
'Event_dungeons_and_dragons_lair_of_evil',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
},
[ /* outcomes */
setup.qc.VarRemove('dungeons_and_dragons_withdrawal_progress'),
setup.qc.Opportunity('dungeons_and_dragons_lair_of_evil_captive', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.VarEqual('dungeons_and_dragons_withdrawal_progress', '4'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> has come to demand the last quest to prove <<their $g.slaver>> heroism once and for all, to your great dismay.
</p>
<p>
You still want the adventure-deprived slaver to return to normal, of course, but
prior experiences have taught you that perhaps there is a merit to this.
<<yourrep $g.slaver>> slaver|have a knack of finding a quest where there
shouldn't be, so you might be able to use this to your advantage. A quest to
save a certain royal from the evil cluthes of... something. You might just
get yourself an easy royal slave this way!
</p>
<p>
Should you think this is a good idea, best grab your pen and start writing.
Otherwise, you can always refuse the absurd request, although your slaver
will probably become dejected in the months to come...
</p><<run new setup.UnitGroup(
"sacred_duel0",
"Lucgate Knight",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_knight),
setup.qc.Trait('unit', setup.trait.will_defiant),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_honorable, setup.trait.magic_light_master, setup.trait.per_loyal, setup.trait.per_brave], 2, false, false),
],
)>>
<<run new setup.Event(
'a_letter_of_challenge', /* key */
"A Letter of Challenge", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
],
'Event_a_letter_of_challenge',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.Equipped('slaving_weapon_master'),
],
'k': 'sacred_duel0',
},
[ /* outcomes */
setup.qc.QuestDirect('a_letter_of_challenge', {
k: "k",
}),
setup.qc.VarSet('quest_excalibur_radiant', '1', 250),
],
[ /* restrictions */
setup.qres.VarNull('quest_excalibur_radiant'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<includereplace "Quest_a_letter_of_challenge">>/* PROOFREAD COMPLETE */
<<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),
],
0, /* cooldown */
setup.rarity.never, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
"Hear ye, hear ye. Brave adventurers are wanted, for the legendary sword
Excalibur has been stolen from the walls of the <<lore region_city>>."
</p>
<<if $varstore.get('quest_excalibur_done')>>
<p>
Oh no, not again.
It seems that the legendary sword has once again been lost soon after your
company's heist into the city treasury.
Given your company's history with the sword, obviously none of your slavers would have dared to
bring or touch the sword. Still, you ask
<<yourrep _u>> whether <<they _u>> stole the sword, which <<therace _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 actually 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 ask <<yourrep _u>> whether
the sword was one of the items stolen during the heist. <<They _u>> shakes
their head, "Sorry boss, but no". You have a thoughts or two about giving your
slavers a well-earned 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
<<rep $company.humankingdom>> your company's mortal enemy.
</p>
<p>
You wonder 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 aspects. You dismissed
the tale as dumb before, but maybe now it's your only hope for recovering the sword for yourself.
</p>
<p>
Then again, recovering the sword is not really your business. What use does a
band of slaver possibly have with some petty sword, after all? You should
really get going with your day.
Chivalry, experience, and wisdom, huh?
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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_radiant', '1', 250),
setup.qc.VarSet('quest_excalibur_done', '1', -1),
],
[ /* restrictions to generate */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
You have recently heard from <<yourrep _u>> that the <<lore region_city>>
actually stores a massive amount of Excalibur swords in its vaults.
Those swords are dangerous in the wrong <<uhands $unit.player>>, possessing
their wielders and forcing them to do terribly good things.
Surely a slaving company such as yours has nothing to do with them.
</p>
<p>
You do your best to reassure yourself of this in the coming days.
"You surely have no need of the awesome-sounding sword Excalbiur", you repeat to yourself
in the coming days just to convince yourself that it's true.
</p><<run new setup.Event(
'fort_restoration_awards', /* key */
"Fort Restoration Awards", /* Title */
{ /* Author */
name: "darko",
url: "darko",
},
[ /* tags */
'fort',
],
'Event_fort_restoration_awards',
{ /* roles (LEGACY) */
},
{ /* actors */
'inspector': 'all',
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 50),
setup.qc.Opportunity('fort_restoration_awards', {
inspector: "inspector",
}),
],
[ /* restrictions */
setup.qres.VarEqual('quest_fort_restoration_progress', '2'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_fort_restoration_awards">><<run new setup.Event(
'fort_restoration_awards_efficiency', /* key */
"Fort Restoration Awards: Efficiency", /* Title */
{ /* Author */
name: "darko",
url: "darko",
},
[ /* tags */
'fort',
],
'Event_fort_restoration_awards_efficiency',
{ /* roles (LEGACY) */
},
{ /* actors */
'inspector': 'all',
},
[ /* outcomes */
setup.qc.Opportunity('fort_restoration_awards_semi_finals', {
inspector: "inspector",
}),
setup.qc.SetCooldownEvent(null, 50),
],
[ /* restrictions */
setup.qres.VarEqual('quest_fort_restoration_progress', '1'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<run setup.qc.VarSet(
'quest_fort_restoration_room',
setup.rng.choice(['questoffice', 'market', 'hospital', 'library']),
-1,
).apply($gQuest)>>
<<include "Opportunity_fort_restoration_awards_semi_finals">><<run new setup.Event(
'fort_restoration_awards_preliminaries', /* key */
"Fort Restoration Awards: Theme", /* Title */
{ /* Author */
name: "darko",
url: "darko",
},
[ /* tags */
'fort',
],
'Event_fort_restoration_awards_preliminaries',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Opportunity('fort_restoration_awards_preliminaries', {
}),
setup.qc.SetCooldownEvent(null, 50),
],
[ /* restrictions */
setup.qres.VarNull('quest_fort_restoration_progress'),
setup.qres.Building('veteranhall'),
setup.qres.Money(50000),
],
10, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<run setup.qc.VarSet(
'quest_fort_restoration_skill',
setup.rng.choice(setup.skill).keyword,
-1,
).apply($gQuest)>>
<<include "Opportunity_fort_restoration_awards_preliminaries">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_fruit_of_lewdity', /* key */
"The Fruit of Lewdity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_the_fruit_of_lewdity',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
},
[ /* outcomes */
setup.qc.Return('slaver'),
setup.qc.TraitReplace('slaver', setup.trait.magic_earth_master),
setup.qc.SetCooldownQuest('the_plant_of_lewdity', 100),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
After more than a year, the (literal) fruit of <<reps $g.slaver>> labor is finally here.
The Plant of Lewdity has finally borne fruit — an innocuous looking fruit
shaped just like an apple, but rainbow-colored. The fruit is completely
attuned to <<yourrep $g.slaver>> after being imbued with so much of <<their
$g.slaver>> magic and essence. When any other slaver approach the plant, viny
tendrils come out of the ground, protecting the fruit and threatening
interlopers with a painful assrape. But when <<rep $g.slaver>> slaver|approach, the
vines withdraw,
before releasing the three now-mindbroken slaves that has been violated for months by the plant.
The fruit sits alone, invitingly, at the center of the plant.
</p>
<p>
Gently plucking the fruit, <<rep $g.slaver>> slaver|watch as the plant immediately withers around <<them
$g.slaver>>. The fruit almost glows, and <<rep $g.slaver>> <<uadv $g.slaver>>
slaver|take a bite, then another. The fruit tastes amazing to <<yourrep $g.slaver>>
— <<theslaver $g.slaver>> couldn't describe the taste precisely, but it has the sweet taste of
virgins, the full taste of milk, and some faraway salty taste to complete the flavor.
</p>
<p>
As <<they $g.slaver>> slaver|continue to chomp down the fruit, you can see magical
power gathering around <<therace $g.slaver>>. The earth rises, forming an
earthly throne for <<theslaver $g.slaver>> to sit on. Viny tendris grows from all around,
blossoming beautifully with flowers, and your makeshift farm becomes a
small forest, as if coronating <<rep $g.slaver>> for <<their $g.slaver>> new
mastery over <<rep setup.trait.magic_earth_master>>. <<Rep $g.slaver>>
finally slaver|finish eating the fruit within the canopy of <<their $g.slaver>>
foresty throne room, and with a flick of <<their $g.slaver>> finger, all the
plants withdraw, returning the place to a barren field, as if nothing had
happened. But there are no doubt power coming from <<therace $g.slaver>> now,
<<if $unit.player.isHasTrait('magic_earth_master')>>
the same power with yours, making <<them $g.slaver>> slaver|feel strangely familiar to you.
<<elseif $unit.player.isHasTrait('magic_earth')>>
a much bigger power than the one you command.
<<elseif $unit.player.getTraitWithTag('magic')>>
a different domain from the magic you command, but powerful nonetheless.
<<else>>
and even you, who is without magic, can even feel it.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_essence_of_life', /* key */
"The Essence of Life", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_the_essence_of_life',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('the_essence_of_life', {
slaver: "slaver",
}),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
It has been a couple of weeks since <<yourrep $g.slaver>> decided to work
fulltime as a gardener, tending to <<their $g.slaver>> Plant of Lewdity, for
the sake of mastering <<rep setup.trait.magic_earth_master>>. It might be a
good time to check up on <<them $g.slaver>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_sour_and_salty_taste', /* key */
"The Sour and Salty Taste", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_the_sour_and_salty_taste',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('the_sweet_and_sour_essence', {
slaver: "slaver",
}),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
It has been four months since <<yourrep $g.slaver>> began nurturing the Plant
of Lewdity. It might be time to check up on <<them $g.slaver>>...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'the_sweet_taste_of_virginity', /* key */
"The Sweet Taste of Virginity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_the_sweet_taste_of_virginity',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Opportunity('the_sweet_taste_of_virginity', {
slaver: "slaver",
}),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
After more than three months, your slaves who were drained non-stop of their
bodily fluids have finally been released by the notorious Plant of Lewdity, seemingly
bored of the now fully mindbroken toys. <<Yourrep $g.slaver>>, who had been
nurturing the plant all this time with <<their $g.slaver>> magic, comes to
you for the next and final step in the plant's growth...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'withering_plant', /* key */
"Withering Plant", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_withering_plant',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
},
[ /* outcomes */
setup.qc.Return('slaver'),
setup.qc.TraumatizeRandom('slaver', 5),
setup.qc.SetCooldownQuest('the_plant_of_lewdity', 25),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Unfortunately, without the required ingredients and rituals, the plant that
<<rep $g.slaver>> slaver|have been nurturing withered away, leaving nothing
behind. All the efforts you've spent on the plant is completely wasted, and
<<rep $g.slaver>> slaver|look more dejected than usual. But at least <<they
$g.slaver>> slaver|is fine and uninjured, and you can always try again in the
future, should another chance present itself to you...
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.common, /* Rarity */
)>><<set _u = setup.getAnySlaver([$g.victim])>>
<p>
Today, you receive a most dreadful news.
Your lover <<rep $g.victim>> victim|was apparently assaulted in <<their $g.victim>>
room last night by a mysterious assailant. Luckily, <<yourrep _u>> happened
to be nearby, and together they managed to repel the assailant. But damn, it
did make your heart skip 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
<<if !$unit.player.isHasTrait('per_honorable')>>evil<</if>>
plans on what to do
with them once you get your <<uhands $unit.player>> on them. But in the meantime, maybe you
should reward <<yourrep _u>> for <<their _u>> great service.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.common, /* Rarity */
)>><<include "Quest_stolen_flame">>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'half_werewolf__epilogue', /* key */
"Half-Werewolf: Epilogue", /* Title */
"darko", /* Author */
[ /* tags */
],
'Event_half_werewolf__epilogue',
{ /* roles */
},
{ /* actors */
'child': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_avenger_0'),
setup.qres.NotInjured(),
],
'father': [
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('half_werewolf_father'),
],
},
[ /* outcomes */
setup.qc.VarRemove('half_werewolf_epilogue'),
setup.qc.RemoveTagGlobal('half_werewolf_father'),
setup.qc.AddTraitsRandom('child', [setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.skill_hypnotic, setup.trait.skill_connected, setup.trait.skill_creative, setup.trait.skill_entertain, setup.trait.skill_alchemy, setup.trait.skill_animal], 1, false, true),
],
[ /* restrictions */
setup.qres.VarEqual('half_werewolf_epilogue', '1'),
],
0, /* Cooldown */
setup.rarity.common, /* Rarity */
)>><p>
It has been a few weeks since <<yourrep $g.child>> finally got <<their $g.child>>
revenge. Having <<rep $g.father>> locked securely in the dungeons seems to
finally work, bringing an end to <<reps $g.child>> nightmares. <<Theslaver $g.child>>
child|look mighty peaceful nowadays, cheerful even.
</p>
<p>
Nowadays, <<therace $g.child>> can usually be found busy learning a new
hobby. This can only bode well for <<their $g.child>> career as a slaver. But
more importantly, it seems to be the proof you require that whatever had
plagued the slaver's heart, it has been completely cleared now.
</p>
<p>
You sit back at your desk while reminiscing back about your first meeting
with <<them $g.child>>...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_mysterious_wanderer_0", /* key */
"Mysterious Wanderer", /* name */
"A mysterious wonderer who one day showed up at your fort", /* description */
"a|have 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 */
"a|is a shapeshifter capable of shifting form between an ordinary northerner and a hulking werewolf", /* unit text */
3000, /* slave value */
{ /* skill additives */
brawn: 1,social: 1,},
)
>>
<<run new setup.UnitGroup(
"wanderer_joins1",
"Wanderer",
'subrace_humanvale', /* pools */
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.trait.per_cautious]),
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.SetCooldownEvent('wanderer_missing', 4),
setup.qc.VarRemove('half_werewolf_father_seen'),
setup.qc.VarRemove('half_werewolf_father_encountered'),
setup.qc.VarRemove('half_werewolf_epilogue'),
],
[ /* restrictions */
setup.qres.Building('prospectshall'),
setup.qres.NoUnitWithTitle('quest_mysterious_wanderer_0', {
}),
setup.qres.NoUnitWithTitle('quest_shapeshifter__werewolf_1', {
}),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Your fort has received a guest today — a hooded northerner who claims to seek
the company of <<their $g.wanderer>> fellow <<women $g.wanderer>>. Seeing your company occupying a
previously abandoned fort, <<they $g.wanderer>> saw an opportunity, which
wanderer|lead <<them $g.wanderer>> to where <<they $g.wanderer>> wanderer|is now.
</p>
<p>
You are not able to gather much information 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>> anyways.
</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>/* PROOFREAD COMPLETE */
<<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.And([
setup.qres.VarGte('wanderer_joins_missing', 2),
setup.qres.Building('mailroom'),
]),
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 */
],
8, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _iter = $varstore.get('wanderer_joins_missing') || 0>>
<<set _u = setup.getAnySlaver([$g.wanderer])>>
<p>
Your usually <<uadj $g.wanderer>> <<rep $g.wanderer>> wanderer|is nowhere to be seen.
<<if _iter > 2>>
But you're not a little bit surprised by now — It has almost become a routine
that <<rep $g.wanderer>> must disappear from your fort every now and then.
<<if $fort.player.isHasBuilding(setup.buildingtemplate.mailroom)>>
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>> frequent disappearances...
<<else>>
Perhaps once you build the <<rep setup.buildingtemplate.mailroom>>, you can
try to find the root cause of <<their $g.wanderer>> frequent disappearances.
But until then, you'll just have to adjust <<their $g.wanderer>> schedule
every now and then.
<</if>>
<<elseif _iter > 0>>
As you recall, this isn't the first time the mysterious slaver wanderer|have disappeared
from your fort. The last time <<they $g.wanderer>> disappeared, <<they
$g.wanderer>> dodged all of your questions asking where <<they $g.wanderer>>
had gone to. You're starting to think if you should dock the <<uadjper
$g.wanderer>> slaver's pay...
<<else>>
Even with <<yourrep _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 <<theslaver $g.wanderer>> just wanderer|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>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'worried_wolf', /* key */
"Worried Wolf", /* Title */
"darko", /* Author */
[ /* tags */
'unit',
],
'Event_worried_wolf',
{ /* roles */
},
{ /* actors */
'child': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_shapeshifter__werewolf_1'),
setup.qres.NoTag('half_werewolf_told_backstory'),
],
},
[ /* outcomes */
setup.qc.AddTag('child', 'half_werewolf_told_backstory'),
],
[ /* restrictions */
setup.qres.VarEqual('half_werewolf_father_encountered', '1'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Entering your office today, you are surprised to find <<yourrep $g.child>>
waiting anxiously for you inside. <<They $g.child>> child|has come to talk about your
company's recent quest in the
<<lore region_vale>>, where your slavers encountered a certain werewolf that bear
striking similarity to <<them $g.child>>.
</p>
<p>
For the first time ever, <<they $g.child>> child|tell you <<their $g.child>> full
backstory. As you recall, <<rep $g.child>> child|is the child of a werewolf
father and a human mother. But that's not the entire story — the mother was an innocent
villager until one day the village was attacked and burned to the ground by
a werewolf raiding party. In that fateful day, one of the more lusty werewolf
apparently raped the poor lady, impregnating her in the process. <<Rep
$g.child>> child|was the end result of that, and has been gathering
information about the evil werewolf, who is responsible for <<their $g.child>> cursed existence.
</p>
<p>
Seeing this as a potential lead, <<they $g.child>> child|ask you to send <<them
$g.child>> over should you receive a similar request in the future.
As <<they $g.child>> exited your office, you
ponder on <<their $g.child>> request before going on with the rest of your day.
</p><<run new setup.Event(
'curse_of_misfortune', /* key */
"Curse of Misfortune", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_curse_of_misfortune',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('quest_harbinger_of_luck_tagged'),
],
},
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_harbinger_of_luck_tagged'),
setup.qc.AddTitle('a', 'quest_harbinger_of_misfortune_0'),
setup.qc.VarSet('quest_harbinger_of_luck_progress', '3', -1),
setup.qc.SetCooldownEvent('luck_chaser', 5),
setup.qc.Blessing('a', 1, null, true),
],
[ /* restrictions */
setup.qres.VarEqual('quest_harbinger_of_luck_progress', '2'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Being unlucky is one thing, but having found a stuck piece of rock in <<their $g.a>> meal, after having a bird dropped right on top of <<their $g.a>> head during the same day an errant arrow from a practice session grazed
<<if $g.a.getTail()>>
<<their $g.a>> <<utail $g.a>>
<<elseif $g.a.getWings()>>
<<their $g.a>> <<uwings $g.a>>
<<else>>
on top of <<their $g.a>> head
<</if>>
simply could not be explained by sheer coincidence. <<Yourrep $g.a>> is cursed, there is no other way around it, and <<therace $g.a>> a|know it too.
</p>
<p>
According to <<therace $g.a>>, they had been rather "unlucky", to put it mildly, throughout <<their $g.a>> entire life. This would just not do, especially for a slaver, and you finally urge <<them $g.a>> to try and spend a couple of weeks investigating whether there are ways to undo this accursed luck of <<them $g.a>>.
</p>
<p>
You will probably hear back from <<rep $g.a>> in a couple of weeks...
</p><<run new setup.Title(
"quest_harbinger_of_chaos_0", /* key */
"Harbinger of Chaos", /* name */
"Blessed with both good and bad luck in excess", /* description */
"a|is blessed with both good and bad fortune in an excess", /* unit text */
0, /* slave value */
{ /* skill additives */
arcane: 4,},
)
>>
<<run new setup.Event(
'harbinger_of_chaos', /* key */
"Harbinger of Chaos", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_harbinger_of_chaos',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.VarRemove('quest_harbinger_of_luck_done'),
setup.qc.VarRemove('quest_harbinger_of_luck_crit'),
setup.qc.VarRemove('quest_harbinger_of_luck_progress'),
setup.qc.VarRemove('quest_harbinger_of_luck_magic'),
setup.qc.VarRemove('quest_harbinger_of_luck_lucky'),
setup.qc.VarRemove('quest_harbinger_of_luck_horse'),
setup.qc.VarRemove('quest_harbinger_of_luck_clover'),
setup.qc.VarRemove('quest_harbinger_of_luck_bath'),
setup.qc.VarSet('quest_harbinger_of_crows_radiant', '1', 250),
setup.qc.RemoveTitle('a', 'quest_harbinger_of_misfortune_0'),
setup.qc.AddTitle('a', 'quest_harbinger_of_chaos_0'),
setup.qc.PerkChoice('a', 'perk_harbinger_of_chaos'),
],
[ /* restrictions */
setup.qres.VarGte('quest_harbinger_of_luck_done', 3),
setup.qres.VarGte('quest_harbinger_of_luck_crit', 2),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
In the past weeks, you and <<yourrep $g.a>> had tried your hardest to remove the curse of misfortunate that has somehow been placed upon <<therace $g.a>>. And it is starting to borne... a strange fruit.
</p>
<p>
It does not seem to have done anything for <<reps $g.a>> misfortune. <<Therace $g.a>> would continue to be shat upon by flying birds, and to fall victim to the most awkwardly placed bumps on the floor.
</p>
<p>
On the other hand, <<they $g.a>> a|is also starting to receive some awkwardly good luck. Last week, the tavern <<they $g.a>> happened to patron was just celebrating their first anniversary, and the drinks were all entirely on the house. Before arriving at your office today, <<they $g.a>> had just found a shiny gem lying on the road, which they sold for a good fortune to one of the merchants in your fort.
</p>
<p>
The rituals seem to indeed boost <<their $g.a>> luck one way or another, but apparently luck and misfortune are two separate entities.
As it stands right now <<rep $g.a>> is now blessed with both good luck and bad luck at the same time.
</p>
<p>
Still, <<therace $g.a>> a|seem to be awfully happy about the result. Indeed, if you were to be cursed with a bad luck, might as well also be blessed with good luck. For every misfortune in <<their $g.a>> life will now be a boon later in <<their $g.a>> life. A much more desirable results, compared to just suffering through your bad luck with nothing to gain.
</p><<run new setup.Title(
"quest_harbinger_of_misfortune_0", /* key */
"Harbinger of Misfortune", /* name */
"Seems to attract bad luck around", /* description */
"a|is a beacon for misfortune, drawing bad luck much more than the average person", /* unit text */
-1000, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_harbinger_of_crows_1", /* key */
"Harbinger of Crows", /* name */
"May have a lower than average luck than the average person, but has resolved to offset it with hard work", /* description */
"a|is cursed with bad luck, but that does not stop a|them from doing a|their hardest in a|their lot in life", /* unit text */
1000, /* slave value */
{ /* skill additives */
combat: 1,brawn: 1,survival: 1,intrigue: 1,slaving: 1,knowledge: 1,social: 1,aid: 1,arcane: 1,sex: 1,},
)
>>
<<run new setup.Event(
'harbinger_of_crows', /* key */
"Harbinger of Crows", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_harbinger_of_crows',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
},
[ /* outcomes */
setup.qc.VarRemove('quest_harbinger_of_luck_done'),
setup.qc.VarRemove('quest_harbinger_of_luck_crit'),
setup.qc.VarRemove('quest_harbinger_of_luck_progress'),
setup.qc.VarRemove('quest_harbinger_of_luck_magic'),
setup.qc.VarRemove('quest_harbinger_of_luck_lucky'),
setup.qc.VarRemove('quest_harbinger_of_luck_horse'),
setup.qc.VarRemove('quest_harbinger_of_luck_clover'),
setup.qc.VarRemove('quest_harbinger_of_luck_bath'),
setup.qc.VarSet('quest_harbinger_of_crows_radiant', '1', 250),
setup.qc.RemoveTitle('a', 'quest_harbinger_of_misfortune_0'),
setup.qc.AddTitle('a', 'quest_harbinger_of_crows_1'),
setup.qc.PerkChoice('a', 'perk_harbinger_of_crow'),
],
[ /* restrictions */
setup.qres.VarGte('quest_harbinger_of_luck_done', 3),
setup.qres.VarLte('quest_harbinger_of_luck_crit', 1),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
In the past weeks, you and <<yourrep $g.a>> had tried your hardest to remove the curse of misfortunate that has somehow been placed upon <<therace $g.a>>. But despite the various rituals you've conducted both, <<rep $g.a>> remains as unlucky as ever. In fact, just before <<they $g.a>> arrived at your office, an errant slave bumped into <<therace $g.a>>, accidentally scalding the slaver with hot water that the slave was carrying with them.
</p>
<p>
However, despite the looming failure, <<rep $g.a>> a|look more resolved than ever. Having a bad luck does not kill <<their $g.a>> future, after all, and <<therace $g.a>> a|is resolved to make up for <<their $g.a>> lot in life with a lot and a lot of hard work.
<<if $g.a.isHasTrait('per_active')>>
In fact, <<they $g.a>> has been working out harder and practicing more than normal.
<<else>>
In fact, <<they $g.a>> has been devouring books after books in order to hone <<their $g.a>> mind.
<</if>>
The results is starting to show too — <<they $g.a>> a|is becoming better in everything.
</p>
<p>
<<Rep $g.a>> might not be able to lift the curse entirely, but <<they $g.a>> a|have learnt how to make the curse into their strength — it becomes a constant motivation and reminder that <<they $g.a>> should work diligently in life. You have no doubt that as long as <<they $g.a>> a|continue to do so, no matter what the gods had planned for <<them $g.a>>, a good thing or two will surely come to <<them $g.a>>
</p><<run new setup.Event(
'herald_of_misfortune', /* key */
"Herald of Misfortune", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_herald_of_misfortune',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.Available(),
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
'you': [
setup.qres.You(),
],
},
[ /* outcomes */
setup.qc.VarRemove('quest_harbinger_of_luck_done'),
setup.qc.VarRemove('quest_harbinger_of_luck_crit'),
setup.qc.VarRemove('quest_harbinger_of_luck_progress'),
setup.qc.VarRemove('quest_harbinger_of_luck_magic'),
setup.qc.VarRemove('quest_harbinger_of_luck_lucky'),
setup.qc.VarRemove('quest_harbinger_of_luck_horse'),
setup.qc.VarRemove('quest_harbinger_of_luck_clover'),
setup.qc.VarRemove('quest_harbinger_of_luck_bath'),
setup.qc.VarSet('quest_harbinger_of_luck_progress', '1', -1),
setup.qc.SetCooldownEvent('just_coincidence', 10),
setup.qc.AddTag('a', 'quest_harbinger_of_luck_tagged'),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.NoUnitWithTitle('quest_harbinger_of_misfortune_0', {
}),
setup.qres.NoUnitWithTitle('quest_harbinger_of_crows_1', {
}),
setup.qres.NoUnitWithTitle('quest_harbinger_of_chaos_0', {
}),
setup.qres.NoUnitWithTag('quest_harbinger_of_luck_tagged'),
],
500, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.a>> a|is a relatively new recruit to your slaving company. <<Therace $g.a>> a|is a great addition, and <<their $g.a>> <<upraisenoun $g.a>> is certainly going to be an asset for the company. As you look out of the windows of your office, you can see <<them $g.a>> walking before seemingly tripping on absolutely nothing. Surely nothing more than an accident, and perhaps <<they $g.a>> just still need a bit more time to be more familiar with the workings of your fort...
</p><<run new setup.Event(
'just_coincidence', /* key */
"Just Coincidence", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_just_coincidence',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTag('quest_harbinger_of_luck_tagged'),
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_harbinger_of_luck_progress', '2', -1),
setup.qc.SetCooldownEvent('curse_of_misfortune', 8),
],
[ /* restrictions */
setup.qres.VarEqual('quest_harbinger_of_luck_progress', '1'),
],
0, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Today <<yourrep $g.a>> reported on duty drenched wet despite the clear sky. Apparently, <<they $g.a>> somehow happened to be in the wrong time and at the wrong place when a sudden, extremely concentrated shower just happened to drench <<therace $g.a>>, almost as if it was targeted specifically for <<them $g.a>>. Coupled with some other "coincidences" last week like how
<<if $g.a.getTail()>>
<<their $g.a>> tail got stuck between the door,
<<else>>
<<their $g.a>> clothes stuck between the door causing <<them $g.a>> to bang <<their $g.a>> heads against the wall,
<</if>>
it seems that <<rep $g.a>> might not have the strongest luck in the company...
</p><<run new setup.Event(
'luck_chaser', /* key */
"Luck Chaser", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_luck_chaser',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
},
[ /* outcomes */
setup.qc.Opportunity('luck_chaser', {a: 'a'}),
setup.qc.SetCooldownEvent(null, 100),
],
[ /* restrictions */
setup.qres.VarEqual('quest_harbinger_of_luck_progress', '3'),
setup.qres.VarLte('quest_harbinger_of_luck_done', 2),
setup.qres.NoOpportunity('luck_chaser'),
setup.qres.NoQuest('seven_petal_baths'),
setup.qres.NoQuest('lucky_horseshoe'),
setup.qres.NoQuest('clover_witch'),
setup.qres.NoQuest('blessings_of_the_south'),
setup.qres.NoQuest('luckiest_person_on_mestia'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
<<if $varstore.get('quest_harbinger_of_luck_done')>>
Having failed yet another attempt at removing the source of <<their $g.a>> bad luck does not seems to diminish <<reps $g.a>> determination to get rid of it permanently. <<They $g.a>> has once more come with several leads for potential ways to rid <<themself $g.a>> of the curse...
<<else>>
Having made up <<their $g.a>> mind to try and rid <<themself $g.a>> of <<their $g.a>> bad luck, <<rep $g.a>> spent the last few weeks searching for ways to get rid of <<their $g.a>> curse. <<They $g.a>> comes to you today with a list of such "leads", although looking at them, you can't help but feels that <<they $g.a>> did not actually found anything useful and just grasping for straws...
<</if>>
</p><<run new setup.Event(
'defying_odds', /* key */
"Defying Odds", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_defying_odds',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.AllTraits([setup.trait.perk_harbinger_of_crow], true),
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_harbinger_of_crows_radiant', '1', 250),
setup.qc.Blessing('a', 1, null, true),
],
[ /* restrictions */
setup.qres.VarNull('quest_harbinger_of_crows_radiant'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.a>> a|is a particularly unlucky slaver, and despite your efforts in the past, the bad luck that haunts <<rep $g.a>> never went away. In fact, you can sense <<they $g.a>> had somehow got cursed yet again. However, <<therace $g.a>> a|have taken it upon <<themself $g.a>> to work harder than most to compensate — they would
practice longer than your other slavers,
<<if $g.a.isHasTrait('muscle_strong')>>
work out longer than your other slavers,
<</if>>
<<if $g.a.isHasTrait('per_studious')>>
spend more time in the library than the rest,
<</if>>
<<if $g.a.isHasTrait('per_active')>>
run laps around the track,
<</if>>
<<if $g.a.isHasTrait('skill_ambidextrous')>>
practice <<their $g.a>> dual wielding abilities,
<</if>>
<<if $g.a.isHasTrait('per_gregarious')>>
practice <<their $g.a>> speech in the mirror,
<</if>>
<<if $g.a.isHasTrait('per_lustful')>>
spend time making sure <<they $g.a>> look presentable,
<</if>>
and as a result often wakes up earlier than most.
They would occasionally get cursed here and there, but it did not stop <<theslaver $g.a>> from moving forwards with <<their $g.a>> life.
</p>
<p>
A vendor has come to your office today, offering several heavy-looking tomes for study. It's far too heavy and too time-consuming for your ordinary slavers to even bother looking at it, but perhaps you could make it a suitable gift for <<rep $g.a>>. It costs <<money 5000>> to buy.
</p>
<<choose>>
<<opt "Purchase: Dual Wielding and Its Applications">>
<<set _skill = setup.skill.combat>>
<<set _name = "Dual Wielding and Its Applications">>
<<set _practicing = "practicing 'dual-wielding' with the kitchen knives">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Beauty and the Brawn">>
<<set _skill = setup.skill.brawn>>
<<set _name = "Beauty and the Brawn">>
<<set _practicing = "flexing muscles in time with the music">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: A Shot in the Dark">>
<<set _skill = setup.skill.survival>>
<<set _name = "A Shot in the Dark">>
<<set _practicing = "shooting with a blindfold on">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Ninjas: Real or Fake?">>
<<set _skill = setup.skill.intrigue>>
<<set _name = "Ninjas: Real or Fake">>
<<set _practicing = "sneaking around the fort's rooftops'">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Badly Breaking">>
<<set _skill = setup.skill.slaving>>
<<set _name = "Badly Breaking">>
<<set _practicing = "breaking a dummy-slave">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Introduction to Everything">>
<<set _skill = setup.skill.knowledge>>
<<set _name = "Introduction to Everything">>
<<set _practicing = "learning about supposedly everything">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: The Silver Snake">>
<<set _skill = setup.skill.social>>
<<set _name = "The Silver Snake">>
<<set _practicing = "practicing strange and mystical sales speeches">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Healing Division">>
<<set _skill = setup.skill.aid>>
<<set _name = "Healing Division">>
<<set _practicing = "healing the void">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: Magic 101">>
<<set _skill = setup.skill.arcane>>
<<set _name = "Magic 101">>
<<set _practicing = "casting imaginary spells">>
<<includereplace 'EventDefyingOddsCommon'>>
<<opt "Purchase: The Lusty Lizardkin Maid">>
<<set _skill = setup.skill.sex>>
<<set _name = "The Lusty Lizardkin Maid">>
<<set _practicing = "projecting lusty gaze on passerbies">>
<<includereplace 'EventDefyingOddsCommon'>>
<</choose>><p>
You paid the money, and the tome of <<= _name >> exchanged <<uhands $unit.player>>. You wrap the expensive book in a nice packaging and leave it in <<reps $g.a>> room for a little surprise.
</p>
<p>
<<Yourrep $g.a>> a|is always eager to learn, and <<they $g.a>> absolutely a|adore your present. In the coming days, you can see <<them $g.a>> reading the book and <<= _practicing>>. Judging by what the book instructs <<rep $g.a>> to practice, you have serious doubts about the effectiveness of the book, but practice never lies, and before long <<their $g.a>> skills in <<= _skill.getName()>> have improved.
</p>
<<run setup.qc.Money(-5000).apply($gQuest)>>
<<run setup.qc.SkillBoost('a', _skill).apply($gQuest)>><<run new setup.Event(
'paradoxical_slaver', /* key */
"Paradoxical Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_paradoxical_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'a': [
setup.qres.Job(setup.job.slaver),
setup.qres.AllTraits([setup.trait.perk_harbinger_of_chaos], true),
setup.qres.Available(),
setup.qres.Home(),
],
'you': [
setup.qres.You(),
],
},
[ /* outcomes */
setup.qc.VarSet('quest_harbinger_of_crows_radiant', '1', 250),
setup.qc.Blessing('a', 1, null, true),
],
[ /* restrictions */
setup.qres.VarNull('quest_harbinger_of_crows_radiant'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.a>> a|is a particularly unlucky slaver, and despite your efforts in the past, the bad luck that haunts <<rep $g.a>> never went away. In fact, you can sense <<they $g.a>> had somehow got cursed yet again. However,
<<they $g.a>> a|is also, and simultaneously, blessed with great amount of luck.
At one moment, they would trip over nothing,
<<if $g.a.isHasTrait('muscle_thin')>>
accidentally eat a stale bread,
<</if>>
<<if $g.a.isHasTrait('per_lustful')>>
got cuckolded,
<</if>>
<<if $g.a.isHasTrait('per_direct')>>
got scammed,
<</if>>
or just happened to be in the way of a rampaging goat.
But at other times, they easily win small lotteries,
<<if $g.a.isHasTrait('per_frugal')>>
find a ridiculously good deal in the markets,
<</if>>
<<if $g.a.isHasTrait('per_chaste')>>
have <<their $g.a>> armor torn to pieces without revealing <<their $g.a>> genitals,
<</if>>
<<if $g.a.isHasTrait('face_attractive')>>
got a present from a secret admirer,
<</if>>
and just happened to be in the right place at the right time during a rain, avoiding being wet.
<<Their $g.a>> existence is quite a paradox.
</p>
<p>
<<Their $g.a>> luck would sometimes even rub off other people too, especially those <<they $g.a>> respects. That small group of people happens to include you, and in fact, since you both have some free time today, you can consider spending your time today with <<therace $g.a>>. How are you feeling today?
</p>
<<choose>>
<<opt "Powerful">>
<<set _blessing = setup.trait.blessing_protection8>>
<<set _powerful = "powerful">>
<<set _take = "take on the most risky missions">>
<<includereplace "EventParadoxicalSlaverCommon">>
<<opt 'Focused'>>
<<set _blessing = setup.trait.blessing_sanity8>>
<<set _powerful = "focused">>
<<set _take = "face the greatest of horrors">>
<<includereplace "EventParadoxicalSlaverCommon">>
<<opt 'Pure'>>
<<set _blessing = setup.trait.blessing_purity8>>
<<set _powerful = "pure">>
<<set _take = "delve deep into the demonic realm">>
<<includereplace "EventParadoxicalSlaverCommon">>
<<opt 'Safe'>>
<<set _blessing = setup.trait.blessing_life8>>
<<set _powerful = "safe">>
<<set _take = "take on the most dangerous missions">>
<<includereplace "EventParadoxicalSlaverCommon">>
<<opt 'Lucky'>>
<<set _blessing = setup.trait.blessing_luck8>>
<<set _powerful = "lucky">>
<<set _take = "take on the most difficult missions">>
<<includereplace "EventParadoxicalSlaverCommon">>
<<opt 'Tight'>>
<<set _blessing = setup.trait.blessing_virginity8>>
<<set _powerful = "tight">>
<<set _take = "take even by the largest phallus without being stretched">>
<<includereplace "EventParadoxicalSlaverCommon">>
<</choose>><p>
After staying, chatting, and <<uhobbyverb $g.you>> together with <<rep $g.a>> for the entire day, you do feel a little more <<= _powerful>>, ready to <<= _take>>.
</p>
<<run setup.qc.Blessing('you', 1, _blessing).apply($gQuest)>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'houndmaster_s_boon', /* key */
"Houndmaster\'s Boon", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
],
'Event_houndmaster_s_boon',
{ /* roles */
},
{ /* actors */
'master': 'the_dog_whisperer0',
},
[ /* outcomes */
setup.qc.VarRemove('houndmaster_pets_delivered'),
setup.qc.Opportunity('houndmastery', null),
],
[ /* restrictions */
setup.qres.VarEqual('houndmaster_pets_delivered', '2'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
You've received a letter from the hound<<master $g.master>>, who has received
both of your slaves in good condition. The letter describes the new puppies playing in
their kennel in great details, but that's of no interest to you. What
interest you is the promise of rewards, and the letter does not disappoint.
You set the letter on your desk, for reading later.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'lost_hound', /* key */
"Lost Hound", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
],
'Event_lost_hound',
{ /* roles */
},
{ /* actors */
'master': 'the_dog_whisperer0',
},
[ /* outcomes */
setup.qc.VarRemove('houndmastery_sniffer_lent'),
setup.qc.RemoveTitleGlobal('quest_houndmaster_s_sniffer_0'),
setup.qc.Ire('neko', 20),
setup.qc.Ire('elf', 20),
setup.qc.Ire('werewolf', 20),
setup.qc.Ire('lizardkin', 20),
setup.qc.Ire('dragonkin', 20),
setup.qc.Ire('orc', 20),
setup.qc.Ire('outlaws', 20),
setup.qc.Ire('humansea', 20),
setup.qc.Ire('humandesert', 20),
],
[ /* restrictions */
setup.qres.VarEqual('houndmastery_sniffer_lent', '1'),
setup.qres.NotExistUnit([
setup.qres.HasTitle('quest_houndmaster_s_sniffer_0'),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.AllTraits([setup.trait.arms_neko, setup.trait.legs_neko, setup.trait.mouth_neko, setup.trait.body_neko, setup.trait.ears_neko, setup.trait.tail_neko], true)
]),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Either due to negligence, miscare, or just plain bad luck, you and your
company has somehow managed to either lose or damage the tigerkin slave lent
so generously by the hound<<master $g.master>>. <<They $g.master>> master|is
far from pleased from this, and although <<they $g.master>> personally will
not harm your company, <<they $g.master>> master|use <<their $g.master>> vast
connections to spread growing ire to your company. Even if you were to
survive the onslaughts of retaliations upon your company, there is no doubt
that you'll never hear from the hound<<master $g.master>> ever again...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'puppy_return', /* key */
"Puppy Return", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
],
'Event_puppy_return',
{ /* roles */
},
{ /* actors */
'master': 'the_dog_whisperer0',
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_houndmaster_s_sniffer_0'),
setup.qres.AllTraits([setup.trait.ears_neko, setup.trait.mouth_neko, setup.trait.arms_neko, setup.trait.legs_neko, setup.trait.tail_neko, setup.trait.body_neko], true),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
},
[ /* outcomes */
setup.qc.VarRemove('houndmastery_sniffer_lent'),
setup.qc.SetCooldownQuest('houndmastery', 25),
setup.qc.MissingUnitForever('slave'),
],
[ /* restrictions */
setup.qres.VarEqual('houndmastery_sniffer_lent', '1'),
setup.qres.VarNull('houndmastery_sniffer_lent_deadline'),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><p>
Unexpectedly, today the hound<<master $g.master>> of the <<lore
region_forest>> master|have personally come to your fort to pick up the puppy <<they
$g.master>> had lent to your company some time ago. Upon seeing <<their
$g.master>> owner, the puppy immediately leaps and runs on all fours to greet
<<their $g.master>> owner in the way <<they $g.slave>> know best: by licking
the <<master $g.master>>'s boots. Seeing the puppy all healthy and well, the
hound<<master $g.master>> master|thank you and your company for all the business
and go on <<their $g.master>> separate way. Parting in such a good terms,
there is no doubt you will meet the <<man $g.master>> again in some future
endeavor.
</p><<run new setup.Event(
'in_debt', /* key */
"In Debt", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_in_debt',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.Event('loan_tiger_payment_due', 53, null),
setup.qc.SetCooldownEvent('loan_tiger_payment_due2', 27),
],
[ /* restrictions */
setup.qres.VarNull('tiger_bank_loan'),
setup.qres.HaveMetCompany('bank'),
setup.qres.MoneyAtMost(-1),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _loan = 10000 + -$company.player.getMoney()>>
<<set _total = Math.round(1.75 * _loan)>>
<p>
Unfortunately, due to one reason or another, your company has fallen into a crippling debt. Fortunately, the <<rep $company.bank>> has come to the rescue, lending your company <<money _loan>> to offset the debt. However, the loan does not come free, and you will have to pay them back with a steep interest, totaling <<money _total>> by next year. Given your financial situation, you are in unfortunately no situation to decline, and begrudgingly takes the money. Better start planning for how to pay them back...
</p>
<<run setup.qc.Money(_loan).apply($gQuest)>>
<<run setup.qc.VarSet('tiger_bank_loan', _total, -1).apply($gQuest)>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_event_loan_tiger1',
"Loan Tiger Agent",
'subrace_neko', /* pools */
1, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_clerk),
setup.qc.TraitReplace('unit', setup.trait.per_frugal), ],
)>>
<<run new setup.Event(
'loan_tiger', /* key */
"Loan Tiger", /* Title */
"darko", /* Author */
[ 'special',
], /* tags */
'Event_loan_tiger',
{ /* roles */
'you': [
setup.qres.You(),
],
},
{ /* actors */
'tiger': 'quest_event_loan_tiger1', },
[ /* outcomes */
setup.qc.SlaverMarker('tiger'),
setup.qc.Favor('bank', 100),
setup.qc.Opportunity('loan_tiger'),
],
[ /* restrictions to generate */
],
1,
setup.rarity.never, /* Rarity */
)>><p>
It's not everyday that a slaver such as yourself receive 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 <<lore region_forest>> predominantly inhabited by <<rep setup.trait.subrace_neko>> people.
</p>
<p>
<<They $g.tiger>> tiger|introduce <<themself $g.tiger>> as <<rep $g.tiger>>.
"You must be <<name $g.you>>, the leader of a" - <<they $g.tiger>> tiger|pause a bit -
"new mercenary company in this area. <<name $g.tiger>> 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 <<rep $g.tiger>> tiger|proceed to open
<<their $g.tiger>> expensive-looking suitcase filled to the brim with
documents, and tiger|hand you over a loan agreement. "The bank and also <<name
$g.tiger>> trust that your company can benefit from this offer." - <<they
$g.tiger>> tiger|add.
</p>
<p>
You put the documents on your desk to read later. You then ask one of your
slavers to give the good <<urace $g.tiger>> a tour of your fort while you get back to
work.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'loan_tiger__payment', /* key */
"Loan Tiger: Payment", /* Title */
"darko", /* Author */
[ 'special',
], /* tags */
'Event_loan_tiger__payment',
{ /* roles */
},
{ /* actors */
'tiger': 'quest_event_loan_tiger1', },
[ /* outcomes */
setup.qc.SlaverMarker('tiger'),
setup.qc.Money(-15000), ],
[ /* restrictions to generate */
],
1,
setup.rarity.never, /* Rarity */
)>><p>
A year ago, you borrowed some money from the <<rep $company.bank>>. Today,
the charming representative of the bank is back at your company to collect the loan together with the interest.
<<if $company.player.getMoney() >= 15000>>
You have allocated some funds for this purpose, which <<rep $g.tiger>>
happily takes.
"<<name $g.tiger>> is pleased to do business with you." - <<they $g.tiger>>
cordially tiger|say as they tiger|leave your fort with the bag of money.
<<else>>
Paying the money unfortunately puts your company in significant debt, but a promise is a
promise and <<rep $g.tiger>> takes the money away.
"<<name $g.tiger>> is pleased to do business with you, but <<name $g.tiger>>
hopes your company will continue doing well." - <<they $g.tiger>> apologetically
tiger|say as they leave your fort with the bag of money.
<</if>>
</p><<run new setup.Event(
'loan_tiger_payment_due', /* key */
"Loan Tiger: Payment Due", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
'Event_loan_tiger_payment_due',
{ /* roles (LEGACY) */
},
{ /* actors */
'neko': 'subrace_neko',
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.company.player.getMoney() >= State.variables.varstore.get('tiger_bank_loan');
}),
setup.qc.DoAll([
setup.qc.Function((quest) => {
setup.qc.Money(-State.variables.varstore.get('tiger_bank_loan')).apply(quest);
}),
setup.qc.VarRemove('tiger_bank_loan'),
setup.qc.IfThenElse(
setup.qres.VarNull('tiger_bank_loan_extension'),
setup.qc.DoAll([
setup.qc.Favor('bank', 100)
], undefined),
setup.qc.DoAll([
], undefined)),
setup.qc.VarRemove('tiger_bank_loan_extension')
], undefined),
setup.qc.DoAll([
setup.qc.VarAdd('tiger_bank_loan', 10000, -1),
setup.qc.VarSet('tiger_bank_loan_extension', '1', -1),
setup.qc.Ire('bank', 5),
setup.qc.Event('loan_tiger_payment_due', 53, null)
], undefined)),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _money = $varstore.get('tiger_bank_loan')>>
<p>
Some time ago, your company has fallen into a debt, and you had to borrow some money from the <<rep $company.bank>>. The loan is due today however, and a representative has come to collect your due pay: a sum of <<money _money>>, and not a single penny missing.
</p>
<<set _repeat = $varstore.get('tiger_bank_loan_extension')>>
<<if $company.player.getMoney() >= _money>>
<<if _repeat>>
<p>
Not wanting to anger and increase your debt any further, you finally managed to scrounge the money this time. You grudgingly paid the money via the bank's representative, and they took your money graciously. You are finally debt-free once again, and it feels to be a debt-free <<urace $unit.player>> again.
</p>
<<else>>
<p>
Fortunately, you've recovered your coffers ever since you've fallen into debt. You took the required money from the fort vaults and gave it to the bank, who took it graciously. You parted in good terms with the bank, both of you happy with how the deal went. It feels good to be debt-free once again.
</p>
<</if>>
<<else>>
<p>
Unfortunately, you keep mismanaging your finances, and the money you're supposed to pay with is nowhere inside your coffers.
<<if _repeat>>
This is not the first this might have happened either.
<</if>>
The bank is understandably displeased with you, and decided to add a hefty <<money 10000>> on top of your existing loan. They will try and collect the money again next year, but in the meantime, their view of your company has soured.
</p>
<</if>><<run new setup.UnitGroup(
"loan_tiger_payment_due0",
"Neko Swindler",
'subrace_neko', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_thief),
setup.qc.TraitsReplace('unit', [setup.trait.per_evil, setup.trait.per_sly]),
],
)>>
<<run new setup.Event(
'loan_tiger_payment_due2', /* key */
"Loan Tiger: Payment Due", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_loan_tiger_payment_due2',
{ /* roles (LEGACY) */
},
{ /* actors */
'neko': 'loan_tiger_payment_due0',
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.VarGte('tiger_bank_loan', 1),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Some time ago, your company has fallen into a debt, and you had to borrow some money from the <<rep $company.bank>>. Today, a representative from the bank has arrived at your fort, demanding advance interest for your loan: a sum of <<money 5000>>.
<<if $unit.player.isHasTrait('per_attentive')>>
However, you are perceptive enough to notice that you are not yet at the deadline for your payment. In fact, the representative neko does not dress like a normal <<rep $company.bank>> representative at all — all you could know, <<they $g.neko>> might just be a swindler trying to trick you into paying something you should never pay to begin with.
<<elseif $unit.player.isHasTrait('per_dreamy')>>
<<else>>
You are perceptive enough to note that it is not yet time for the payment deadline, but perhaps this is just part of the bank's standard procedure.
<</if>>
</p>
<<choose>>
<<opt "Pay">>
<p>
You paid the money, and the neko departed immediately.
</p>
<p>
A few days later, you receive a missive from the <<rep $company.bank>> that a neko impersonator has been going around, pretending to be an employee of the bank.
It appears that you have been swindled by this particularly unscrupulous character...
</p>
<<run setup.qc.Money(-5000).apply($gQuest)>>
<<opt "Enslave the representative">>
<<set _u = setup.getAnySlaver()>>
<p>
You decided to instead enslave the representative.
Pretending to go to your coffers to collect the pay, you instead summoned
<<yourrep _u>>, and together you knocked the neko unconscious, before storing
<<them _u>> in the <<rep setup.buildingtemplate.slavepens>>.
</p>
<p>
A few days later, you receive a thank you letter from the <<rep $company.bank>> for arresting the neko impersonator. Supposedly, the thief has been masquerading as the bank's employee for some time, tarnishing its reputation. Your goodwill with the bank has increased as a result.
</p>
<<run setup.qc.Favor('bank', 100).apply($gQuest)>>
<<run setup.qc.Slave('neko', 'a|was trying to swindle you by pretending to be a representative of the Tiger bank').apply($gQuest)>>
<</choose>>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'mist_apprentice_final_payment', /* key */
"Mist Apprentice: Final Payment", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'unknown',
'trait',
],
'Event_mist_apprentice_final_payment',
{ /* roles (LEGACY) */
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.HasTitle('quest_mist_apprentice_0'),
setup.qres.HomeExceptOnLeave(),
],
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.Trait(setup.trait.join_senior)),
setup.qc.DoAll([
setup.qc.Opportunity('consumed_by_darkness', {
master: "master",
slaver: "slaver",
})
], undefined),
setup.qc.DoAll([
setup.qc.QuestDirect('to_master_the_dark', {
master: "master",
slaver: "slaver",
})
], undefined)),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
The final letter demanding your pay for <<reps $g.slaver>> tuition is finally
here. Best make your time to read the letter thoroughly, for surely it is
going to be the most demanding payment...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'mist_apprentice_first_payment', /* key */
"Mist Apprentice: First Payment", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'trait',
],
'Event_mist_apprentice_first_payment',
{ /* roles (LEGACY) */
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.HasTitle('quest_mist_apprentice_0'),
setup.qres.HomeExceptOnLeave(),
],
},
[ /* outcomes */
setup.qc.OneRandomSeed([
setup.qc.QuestDirect('mist_apprentice_payment_the_first', {
master: "master",
slaver: "slaver",
}),
setup.qc.QuestDirect('mist_apprentice_payment_the_first2', {
master: "master",
slaver: "slaver",
})
]),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
A demonkin messenger has arrived at your fort today, bearing a message from
<<rep $g.master>>. Apparently, the first payment for <<reps $g.slaver>>
training is due. You sighed as you shelf the letter in your office for
reading later...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'mist_apprentice_second_payment', /* key */
"Mist Apprentice: Second Payment", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'trait',
],
'Event_mist_apprentice_second_payment',
{ /* roles (LEGACY) */
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.HasTitle('quest_mist_apprentice_0'),
setup.qres.HomeExceptOnLeave(),
],
},
[ /* outcomes */
setup.qc.OneRandomSeed([
setup.qc.QuestDirect('mist_apprentice_payment_the_second', {
master: "master",
slaver: "slaver",
}),
setup.qc.QuestDirect('mist_apprentice_payment_the_second2', {
master: "master",
slaver: "slaver",
})
]),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Another letter demanding pay for <<reps $g.slaver>> continued tuition is here. Here we go again...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Event(
'return_shipping', /* key */
"Return Shipping", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
],
'Event_return_shipping',
{ /* roles (LEGACY) */
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.AllUnitSatisfyDo(
[setup.qres.HasTag('mist_apprentice_victim')],
[setup.qc.Injury('unit', 3), setup.qc.TraumatizeRandom('unit', 12), setup.qc.Return('unit')],
),
setup.qc.Return('slaver'),
setup.qc.Trait('slaver', setup.trait.per_sexaddict),
setup.qc.Injury('slaver', 30),
setup.qc.TraumatizeRandom('slaver', 90),
setup.qc.SetCooldownQuest('mist_apprenticeship', 20),
setup.qc.RemoveTitleGlobal('quest_mist_apprentice_0'),
setup.qc.RemoveTagGlobal('mist_apprentice_victim'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<set _onleave = $company.player.getUnits({tag: 'mist_apprentice_victim'})>>
<p>
A suspiciously large box has arrived at your fort today. Knowing full well
that you've failed to complete the payment to the demon who's holding
<<yourrep $g.slaver>> hostage, you hurriedly order your slavers to open the
box. Indeed, <<rep $g.slaver>> slaver|is stuffed in full bondage inside,
seemingly drenched in aphrodisiacs before being returned to you. <<Their
$g.slaver>> eyes look completely unfocused, and <<their $g.slaver>>
<<if $g.slaver.isHasDick()>>
cock is steadily leaking precum.
<<else>>
pussy is steadily leaking pussyjuice.
<</if>>
It'll take quite a while before <<therace $g.slaver>> slaver|is functional again...
</p>
<<if _onleave.length>>
<p>
In the coming days, your other slaver<<if _onleave.length > 1>>s<</if>> who
<<if _onleave.length > 1>>were<<else>>was<</if>>
being held hostage by the demon <<if _onleave.length >
1>>are<<else>>is<</if>> returned back to you one by one in similar fashion, although
much less broken compared to <<rep $g.slaver>>.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_certified_instructor_0", /* key */
"Certified Instructor", /* name */
"Has completed the instructor certifications from the Institute of Higher Learning ", /* description */
"a|have completed the instructor certifications from the Institute of Higher Learning ", /* unit text */
1000, /* slave value */
{ /* skill additives */
slaving: 2,knowledge: 1,},
)
>>
<<run new setup.Event(
'an_educated_opportunity', /* key */
"An Educated Opportunity", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'unknown',
],
'Event_an_educated_opportunity',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_certified_instructor_0'),
],
},
[ /* outcomes */
setup.qc.SetCooldownEvent(null, 30),
setup.qc.Opportunity('an_educated_opportunity', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.NoItem(setup.item.technology_obediencemaster),
],
0, /* Cooldown */
setup.rarity.uncommon, /* Rarity */
)>><<include "Opportunity_an_educated_opportunity">>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_author_of_the_teachings_of_obedience_0", /* key */
"Author of the Teachings of Obedience", /* name */
"The sole author of the Teaching of Obedience book", /* description */
"wrote the \"Teachings of Obedience\" book", /* unit text */
7500, /* slave value */
{ /* skill additives */
slaving: 4,knowledge: 2,},
)
>>
<<run new setup.Event(
'teachings_of_obedience', /* key */
"Teachings of Obedience", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'upgrade',
],
'Event_teachings_of_obedience',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.technology_obediencemaster),
setup.qc.BoonizeRandom('slaver', 100),
setup.qc.Return('slaver'),
setup.qc.AddTitle('slaver', 'quest_author_of_the_teachings_of_obedience_0'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
It's been almost three months after <<yourrep $g.slaver>> asked for a break
from <<their $g.slaver>> slaving duties, and you have not heard any wind from
<<therace $g.slaver>>. Out of concern, you've decided to enter <<their
$g.slaver>> room in the fort as quietly as you can.
</p>
<p>
Peeking through the gap in the door, you see your slaver apparently asleep on
<<their $g.slaver>> small desk, next to what appears to be a large tome. Not
wanting to disturb the slaver, you tiptoe and approach the desk, before sneaking
glance at the tome deftly titled the "Training of Obedience". The tome
details a wealth of knowledge on how to properly break a slave's will
permanently, but with proper care as not to damage the slave nor make them
snap.
<<if $g.slaver.isHasTrait('per_studious')>>
The book is written meticulously — as expected from your studious slaver,
which makes it very easy for you to read in its entirety.
<<elseif $g.slaver.isHasTrait('per_active')>>
While the writing is sloppy, the book's storytelling is very engaging, and
before long you've finished reading the entire tome.
<<else>>
The book's writing is great, and before you know it you've finished reading
the book.
<</if>>
</p>
<p>
Having finished reading the tome, you are surprised to find <<yourrep $g.slaver>>
smiling amusedly behind you, before thanking you for the break and offering
you the book as the result of their work. You can see <<theslaver $g.slaver>> beaming proudly
at the book, no doubt <<their $g.slaver>> magnum opus. You would too, if you
were to write such a well-written piece of work!
</p><<run new setup.UnitGroup(
"assassin_benefits0",
"Assassin",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_assassin),
],
)>>
<<run new setup.Event(
'assassin_benefits', /* key */
"Assassin Benefits", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_assassin_benefits',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_assassin], true),
setup.qres.AllTraits([setup.trait.join_senior], true),
],
'slave': 'assassin_benefits0',
},
[ /* outcomes */
setup.qc.Slave('slave', "a|was a spy sent over by one of your many enemies", undefined),
setup.qc.BoonizeRandom('slaver', 5),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> used to be a master
<<if $g.slaver.isHasTrait('subrace_humansea')>>ninja<<else>>assassin<</if>>, and is used to doing many espionage mission be it spying, stalking, or even the occasional assassinations.
<<if $g.slaver.isHasTrait('per_dreamy')>>
Nobody would have guessed it, looking at the carefree <<man $g.slaver>>, but
<<elseif $g.slaver.isHasTrait('per_playful')>>
Nobody would have guessed it, looking at the playful-looking <<man $g.slaver>>, but
<<else>>
It's hard to think that the <<uadjper $g.slaver>> <<man $g.slaver>> slaver|possess such as highly-valued skills, but
<</if>>
<<their $g.slaver>> skills are for real, as you come to learn today.
</p>
<p>
When you enter your office today, <<rep $g.slaver>> is waiting, sitting on your desk while
a <<urace $g.slave>> is bound and gagged, naked and struggling on the floor.
The victim's clothes were folded neatly around — the clothes of an assassin, which makes you raise an eyebrow.
<<if $g.slaver.getSpeech() == setup.speech.friendly>>
"I've spotted someone stalking you in the last few weeks, and I'd thought I'd do you a favor and capture the <<man $g.slaver>>", <<they $g.slaver>> reports cheerfully.
<<elseif $g.slaver.getSpeech() == setup.speech.bold>>
"Found this spy following you in the last week or so. <<They $g.slave>> thought <<they $g.slaver>> could avoid catching my attention. The nerve!", says <<rep $g.slaver>>.
"I've spotted someone stalking you in the last few weeks, and I'd thought I'd do you a favor and capture the <<man $g.slaver>>", <<they $g.slaver>> reports cheerfully.
<<elseif $g.slaver.getSpeech() == setup.speech.cool>>
"Spy. Your enemy.", the stoic <<man $g.slaver>> reports efficiently.
<<elseif $g.slaver.getSpeech() == setup.speech.witty>>
"Heya Boss, I caught this snake slithering behind your back in the last few week or so, no doubt being sent over by an enemy of yours. Which dragonkin did you anger again this time?" <<they $g.slaver>> reports cheerfully.
<<elseif $g.slaver.getSpeech() == setup.speech.debauched>>
"Heya Boss, got a new slave for you. An former spy who I found trailing you in the last week. Given <<their $g.slave>> skills, the slave would surely make for a fun night or two. Don't forget to invite me for the fun!" <<they $g.slaver>> reports cheerfully.
<</if>>
</p>
<p>
Seems like your own spy slaver is quite resourceful. You're quite grateful to have such a slaver under your employ, loyally serving you, but you have an image to maintain and you can't just say it out loud. So you settled with a grunt and a friendly "good work" towards the slaver, although it seems the slaver already know how much you appreciate their work and looks more cheerful in the days to come.
</p><<run new setup.OpportunityTemplate(
'attractive_slaver', /* key */
"Attractive Slaver", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unit',
],
1, /* expiration weeks */
'Opportunity_attractive_slaver',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_attractive_slaver_0',
outcome_passage: 'Opportunity_attractive_slaver_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Slave('slave', "asked to be enslaved out of a naive infatuation with one of your slavers", undefined),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_attractive_slaver_1',
outcome_passage: 'Opportunity_attractive_slaver_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Slaver('slave', "asked to be enslaved out of a naive infatuation with one of your slavers, but got recruited into the company instead", undefined),
setup.qc.Friendship('slaver', 'slave', 500),
setup.qc.TraitReplace('slave', setup.trait.per_loyal),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_attractive_slaver_2',
outcome_passage: 'Opportunity_attractive_slaver_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.BoonizeRandom('slaver', 15),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
'slaver': [
],
'slave': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver([$g.slaver])>>
<p>
<<Yourrep _u>> alerts you that a hopeful has arrived at your fort, asking to meet with <<yourrep $g.slaver>>. You almost berates <<rep _u>> for wasting your time with such unimportant information, that is until <<rep _u>> <<uadv _u>> points out that the <<girl $g.slave>>, whose name is <<rep $g.slave>>, is willing to be enslaved for some reason. Sensing a potential, you invites both the <<girl $g.slave>> and <<rep $g.slaver>> into your office.
</p>
<p>
The <<girl $g.slave>> who is admitted to your office quails a bit at the sight of <<rep $g.slaver>>, and you believe you can detect a bit of infatuation there, too. You wordlessly query <<rep _u>>, and <<they _u>> shakes <<their _u>> head, trying to come up with a possible explanation. Meanwhile, you start interviewing the potential slave. It appears that <<they $g.slave>> left home, in a settlement near the fort, just very recently. <<They $g.slave>>'s no innocent, and not destitute, and you're surprised <<they $g.slave>>'s done something this foolish.
</p>
<p>
After a short while, <<yourrep _u>> whispers to you,
"<<name $unit.player>>, I think I've seen the <<girl $g.slave>> around your fort for a couple of times now, and I remember spotting <<them $g.slave>> staring at <<yourrep $g.slaver>> with limpid eyes."
Rather than confronting <<them $g.slave>> directly, you probe the subject, and after some evasion <<they $g.slave>> finally admits that yes, <<they $g.slave>> did come here out of infatuation with <<rep $g.slaver>>.
Given how gorgeous <<therace $g.slaver>> slaver|is,
<<if $g.slaver.isHasTrait('muscle_verystrong')>>
as well as <<their $g.slaver>> bulging muscles,
<<elseif $g.slaver.isHasTrait('muscle_strong')>>
as well as <<their $g.slaver>> toned body,
<<elseif $g.slaver.isHasTrait('muscle_verythin')>>
as well as <<their $g.slaver>> very attractive waist,
<<elseif $g.slaver.isHasTrait('muscle_thin')>>
as well as <<their $g.slaver>> attractive waist,
<<elseif $g.slaver.isHasTrait('breast_large')>>
as well as <<their $g.slaver>> bountiful bosoms,
<<elseif $g.slaver.isHasTrait('dick_large')>>
as well as <<their $g.slaver>> eye-catching bulge,
<</if>>
it's not a surprise that <<rep $g.slaver>> slaver|attract an admirer or two, but not to the point of enslaving <<themself $g.slave>> just to get near with <<their $g.slave>> love.
"Pretty fuckin' stupid," <<they $g.slave>> admits. "But I've come too far now. I just really want to live here with. With <<rep $g.slaver>>, I guess. If that means being a slave, that's okay. Can I be your servant, maybe?"
</p>Enslave <<them $g.slave>><p>
You ask <<rep $g.slaver>> to personally escort <<them $g.slave>> into the <<rep setup.buildingtemplate.slavepens>> to begin <<their $g.slave>> new life.
<<They $g.slave>> looks doubtful, obviously wondering whether <<they $g.slave>> slave|have made a huge mistake. <<They $g.slave>>'s legally your property, now; you can fulfill <<their $g.slave>> wishes for a gentler duty in your fort, or not. <<Their $g.slave>> suspicion that <<they $g.slave>> slave|have blundered into something terrible no longer matters.
</p>Recruit <<them $g.slave>> and try to make <<rep $g.slaver>> reciprocate back<p>
You decided that this is <<reps $g.slave>> lucky day, and instead offers the hopeful <<urace $g.slave>> a position in your company as a slaver. When <<they $g.slave>> just sits there in disbelief, you repeat your offer.
"Thank you, thank you, I will never forget this," <<they $g.slave>> almost tearfully says, "I promise to be loyal and be dedicated to your cause.".
</p>
<p>
In the coming days, <<rep $g.slave>> would "accidentally" be assigned to the same tasks with <<rep $g.slaver>>. The two of them might not become instant lovers, but their relationship progresses significantly.
</p>Send <<them $g.slave>> away<p>
You're not that cruel to enslave someone who does not deserve to be enslaved, and while the <<girl $g.slave>> may not appreciate your actions now, <<they $g.slave>> will understand how lucky <<they $g.slave>> slave|was once <<they $g.slave>> sees how used and abused the life of a slave is. <<Rep $g.slaver>> approves of your deed.
</p><<run new setup.Event(
'bedroom_lessons', /* key */
"Bedroom Lessons", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_bedroom_lessons',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_whore, setup.trait.bg_courtesan], true),
setup.qres.Not(setup.qres.OnDuty('entertainmentpimp')),
],
'pimp': [
setup.qres.OnDuty('entertainmentpimp'),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AllTraits([setup.trait.bg_courtesan], true)),
setup.qc.DoAll([
setup.qc.Trauma('pimp', setup.trait.boon_slaving, 16)
], undefined),
setup.qc.DoAll([
setup.qc.Trauma('pimp', setup.trait.boon_slaving, 11)
], undefined)),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.recreationwing),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
You've recently noticed that <<yourrep $g.pimp>> pimp|have been much more effective at <<their $g.pimp>> duty. <<They $g.pimp>> pimp|is directing the slaves more passionately, which translates to a higher income from your <<rep setup.buildingtemplate.recreationwing>>.
</p>
<p>
Our of pure curiosity, you asked <<therace $g.pimp>> what had changed. Apparently, <<they $g.pimp>> pimp|have received some pointers from <<yourrep $g.slaver>>. As you recall, <<rep $g.slaver>> used to be
<<if $g.pimp.isHasTrait('bg_courtesan')>>
a high-class courtesan, trading in flesh but only to the most deserving and wealthy clients.
<<else>>
a free whore, trading in flesh to everyone paying.
<</if>>
It seems <<they $g.slaver>> still recall the experience of <<their $g.slaver>> past life, and have decided to put them to good use by imparting them unto your pimp.
</p>
<p>
Given <<reps $g.pimp>> <<uinsultnoun $g.pimp>>, however, you've little doubt that whatever lesson the <<man $g.pimp>> pimp|have learned, it will be gone and forgotten before long. But at least for the next few weeks, you can expect increased expected profits from the <<rep setup.buildingtemplate.recreationwing>>.
</p><<run new setup.Event(
'bondage_cage', /* key */
"Bondage Cage", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_bondage_cage',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior, setup.trait.bg_metalworker], true),
],
'tenant': setup.contacttemplate.blacksmithpeddler,
},
[ /* outcomes */
setup.qc.Item(setup.item.f_slavebed_good_slaver),
setup.qc.BoonizeRandom('slaver', 5),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.workshop),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Among the many shops that now reside within your fort complex is the <<rep
setup.buildingtemplate.workshop>> is the blacksmith shop, currently being run by a <<urace
$g.tenant>> named <<rep $g.tenant>>. The <<man $g.tenant>> is a burly
grizzled <<urace $g.tenant>>, and <<their $g.tenant>> arms are covered by
bulky muscles from <<their $g.tenant>> daily work.
</p>
<p>
<<Yourrep $g.slaver>> can often be seen in the fort too — sometimes just chatting with the owner, and some other times actually helping out with <<them $g.tenant>>. As you recall, <<rep $g.slaver>> used to be a blacksmith <<themself $g.slaver>>, when they often made
<<if $g.slaver.getHomeland() == setup.Text.Race.REGIONS.city>>
craftmen's tools for the various people living in the <<lore region_city>>.
<<elseif $g.slaver.getHomeland() == setup.Text.Race.REGIONS.vale>>
slave cages for the various taverns in the <<lore region_vale>>.
<<elseif $g.slaver.getHomeland() == setup.Text.Race.REGIONS.forest>>
iron bows for the hunters of the <<lore region_forest>>.
<<elseif $g.slaver.getHomeland() == setup.Text.Race.REGIONS.desert>>
weapons for the raiders of the <<lore region_desert>>.
<<elseif $g.slaver.getHomeland() == setup.Text.Race.REGIONS.sea>>
various devices from the many needs in the land beyond the <<lore region_sea>>.
<<elseif $g.slaver.getHomeland() == setup.Text.Race.REGIONS.mist>>
demonic bondage tools in the land beyond <<lore concept_mist>>
<<else>>
many weapons in the land far beyond <<lore continent_main>>.
<</if>>
The resident blacksmith enjoys the company of your slaver, and occasional help too.
</p>
<p>
When you enter your office today, you found a big box covered with a clothes, together with a small card on top of it. It's a gift from <<yourrep $g.slaver>>, for the long time you've been having <<therace $g.slaver>> in your company. Opening the covering, you find a <<rep setup.item.f_slavebed_good_slaver>> inside — unlike normal slave cages, there are holes for all four limbs to be secured in, for more kinky plays or for punishment when they get too naughty. A unique present, that must surely be hand-crafted by your slaver and the resident blacksmith of your fort.
</p>
<p>
It doesn't happen often, but sometimes being the leader of a slaving company brings warmth to your heart, knowing that your slavers, despite how lazy, greedy, and incompetent they usually appear to be, still appreciate your leadership.
</p><<run new setup.Event(
'bounties_of_the_sea', /* key */
"Bounties of the Sea", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
],
'Event_bounties_of_the_sea',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
'slave': 'subrace_humansea',
},
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AllTraits([setup.trait.bg_pirate], true)),
setup.qc.DoAll([
setup.qc.Slave('slave', "a|was an unfortunate traveler in the Southern Seas who got captured by your ex-pirate slaver", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(5000)
], undefined)),
setup.qc.BoonizeRandom('slaver', 5),
setup.qc.Return('slaver'),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
After four full weeks, <<yourrep $g.slaver>>
slaver|have returned from their voyage into the <<lore region_sea>>, and it was a great success.
<<if $g.slaver.isHasTrait('bg_pirate')>>
With <<their $g.slaver>> hired crew, the ex-pirate was able to raid an undefended ship, just like <<their $g.slaver>> good ol' times. It seems the sea-dog has not lost <<their $g.slaver>> edge, and after splitting the bounties with <<their $g.slaver>> motley crew, your share comes out in the form of a rare slave, who is now waiting in the slave pens.
<<else>>
With <<their $g.slaver>> hired fishing boat, the ex-seaman was able to catch a myriad of strange sea creatures, which fetch for quite a large amount of sum in the markets of your fort. In the end, your profit amounts to a whopping <<money 5000>>, surely more than enough to cover the expenses of the trip.
<</if>>
</p>
<p>
Having voyaged into the sea once more, the slaver looks quite content with themselves, and <<their $g.slaver>> mood is much better in the coming weeks.
</p><<run new setup.Event(
'clerk_exercise', /* key */
"Clerk Exercise", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_clerk_exercise',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_clerk], true),
setup.qres.NoTraits([setup.trait.muscle_verythin, setup.trait.muscle_extremelythin, setup.trait.muscle_strong, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong, setup.trait.tough_tough], true),
],
},
[ /* outcomes */
setup.qc.Opportunity('clerk_exercise', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.traininggrounds),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_clerk_exercise">><<run new setup.Event(
'clerk_exercise_outcome', /* key */
"Clerk Exercise Outcome", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_clerk_exercise_outcome',
{ /* roles (LEGACY) */
},
{ /* actors */
'slaver': [
],
},
[ /* outcomes */
setup.qc.BoonizeRandom('slaver', 5),
setup.qc.OneRandomSeed([
setup.qc.Trait('slaver', setup.trait.muscle_strong),
setup.qc.Trait('slaver', setup.trait.tough_tough)
]),
setup.qc.Return('slaver'),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.traininggrounds),
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Two months ago, <<yourrep $g.slaver>> asked to take a short break from <<their $g.slaver>> slaving duties to work on <<their $g.slaver>> physique. And today, the results of <<their $g.slaver>> hard work is finally here.
The slaver indeed looks better than ever.
<<if $gQuest.getSeed() % 2 == 0>>
You can see the obvious muscles on the slaver now, a far cry from <<their $g.slaver>> previously lanky form.
<<elseif $gQuest.getSeed() % 2 == 1>>
The slaver is running laps almost effortlessly on the <<rep setup.buildingtemplate.traininggrounds>> now, <<their $g.slaver>> endurance having increased so much from before.
<</if>>
And <<therace $g.slaver>> slaver|know it too. <<They $g.slaver>> slaver|is now ready to return to <<their $g.slaver>> slaving duties, and with a good mood too.
</p><<run new setup.Event(
'combat_training', /* key */
"Combat Training", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_combat_training',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_knight, setup.trait.bg_mercenary, setup.trait.bg_soldier], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.traininggrounds),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Even after joining your company as a slaver, <<yourrep $g.slaver>> still have some of their old habits from <<their $g.slaver>> days as a
<<if $g.slaver.isHasTrait('bg_knight')>>
knight.
<<elseif $g.slaver.isHasTrait('bg_mercenary')>>
mercenary.
<<else>>
soldier.
<</if>>
One of them is the daily combat practice that <<they $g.slaver>> almost religiously do on the <<rep setup.buildingtemplate.traininggrounds>>.
<<if $g.slaver.isHasTrait('bg_knight')>>
The daily combat practice is necessary to allow <<them $g.slaver>> to wear <<their $g.slaver>> knight armor in the past, and <<they $g.slaver>> slaver|is unable to break out of the habit of practicing for this purpose.
<<elseif $g.slaver.isHasTrait('bg_mercenary')>>
The daily combat practice had ensured <<their $g.slaver>> survival as a mercenary, and <<they $g.slaver>> slaver|is not keen on forgetting it anytime soon.
<<else>>
The daily combat practice was drilled deep within <<their $g.slaver>> psyche by <<their $g.slaver>> previous army instructor, and it stays true even to the current day.
<</if>>
</p>
<p>
In fact, right now <<they $g.slaver>> slaver|is practicing, swinging <<their $g.slaver>> <<uweapon $g.slaver>> back and forth while counting.
<<They $g.slaver>> is
<<if $g.slaver.isHasBreasts()>>
shirtless, with only <<their $g.slaver>> underwear to cover <<their $g.slaver>> <<ubreasts $g.slaver>>. The muscles underneath contract and flex with <<their $g.slaver>> every move.
<<else>>
shirtless, <<their $g.slaver>>
<<ubreasts $g.slaver>> contracting and flexing with <<their $g.slaver>> every move.
<</if>>
It is actually quite sexy looking at <<therace $g.slaver>> training the various parts of <<their $g.slaver>> muscles.
</p>
<<choose>>
<<opt "Spar with <<them $g.slaver>>">>
<p>
You bring your own <<uweapon $g.you>> and approach <<yourrep $g.slaver>>. <<Therace $g.slaver>> slaver|is more than happy to have a training partner, breaking the monotony of training alone, and the two of you proceed to spar earnestly.
</p>
<<set _res = setup.Skill.skillCheckCompare($unit.player, $g.slaver, setup.skill.combat)>>
<p>
<<if _res == 2>>
Unfortunately, your combat prowess is simply too good, and before you realize it, <<yourrep $g.slaver>> slaver|is lying injured in front of you.
<<run setup.qc.Injury('slaver', 1).apply($gQuest)>>
<<elseif _res == 1>>
It was close, but you manage to clutch the sparring fight out and win against the
former
<<if $g.slaver.isHasTrait('bg_knight')>>
knight.
<<elseif $g.slaver.isHasTrait('bg_mercenary')>>
mercenary.
<<else>>
soldier.
<</if>>
<<elseif _res == -1>>
It was close, but the former <<if $g.slaver.isHasTrait('bg_knight')>>
knight
<<elseif $g.slaver.isHasTrait('bg_mercenary')>>
mercenary
<<else>>
soldier
<</if>>
catches you off-guard and cause you to fall flat into the ground, signifying your defeat.
<<else>>
Unfortunately, your combat prowess is nowhere near <<reps $g.slaver>>, and <<they $g.slaver>> accidentally injured you during the practice even after so much holding back.
<<run setup.qc.Injury('you', 1).apply($gQuest)>>
<</if>>
Still, it was all in good fun, and the two of you become closer through the exercise.
<<run setup.qc.FriendshipWithYou('slaver', 200).apply($gQuest)>>
</p>
<<opt "Watch <<them $g.slaver>> train">>
<p>
It's quite mesmerizing how <<rep $g.slaver>> slaver|is able to maintain a rhythm swinging <<their $g.slaver>> <<uweapon $g.slaver>> while counting out loud. Your focus starts to switch too — while initially you were just looking at <<their $g.slaver>> sweaty <<ubody $g.slaver>>, you start to catch some of the techniques <<they $g.slaver>> slaver|was using to keep the weapon steady. In the end, you feel you've learned a thing or two from just watching the slaver exercised.
</p>
<<run setup.qc.ExpUnit('you', 2).apply($gQuest)>>
<</choose>><<run new setup.Event(
'company_history_ledger', /* key */
"Company History Ledger", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_company_history_ledger',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_scholar, setup.trait.join_senior], true),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.f_object_good_slaver),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.bedchamberwing),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
As you work as usual in your office today, <<yourrep $g.slaver>> slaver|come knocking on the office door. Entering, the slaver slaver|is carrying a large stack of books, almost covering <<their $g.slaver>> entire face.
<<if $g.slaver.isHasTrait('per_attentive')>>
But despite that, the attentive <<urace $g.slaver>> managed to maintain <<their $g.slaver>> balance and place the tall stack of books on your desk. You
<<else>>
You are not surprised when <<therace $g.slaver>> lost balance and the books scattered across the floor of your office.
After you help the
<<if $g.slaver.isHasTrait('per_dreamy')>>
clumsy
<</if>>
slaver pick up all the books and place them on your desk, you
<</if>>
then ask what these books are about.
</p>
<p>
Apparently, the ex-scholar has been spending quite a time chronicling your company's misdeeds into a series of books. Indeed, the first book seemingly detail the start of your company, from its humble beginnings where the fort is nothing but a ruined remnants of a long-lost castle.
<<if $g.slaver.getSpeech() == setup.speech.friendly>>
The book is very fun to read, almost like a storybook.
<<elseif $g.slaver.getSpeech() == setup.speech.bold>>
The book tells your company's story in a grand way, and sometimes even take creative liberties in explaining the more mundane things.
<<elseif $g.slaver.getSpeech() == setup.speech.cool>>
The book gets straight to the point, and is very easy to complete in one go.
<<elseif $g.slaver.getSpeech() == setup.speech.witty>>
The book is full of humor, and you laugh at some of the jokes being told here and there.
<<elseif $g.slaver.getSpeech() == setup.speech.debauched>>
The book is very fun to read, no small thanks to the many sexual snippets being inserted here and there — accurate ones too!
<</if>>
</p>
<p>
This is an amazing chronicle, and while the book won't go anywhere, you might want to share it with the rest of your company.
</p>
<<choose>>
<<opt "Share it with the rest of your company">>
<p>
You share the great news with the rest of your slaving company, and they greatly enjoy the read. Meanwhile, <<yourrep $g.slaver>>
<<if $g.slaver.isHasTrait('per_humble')>>
slaver|is completely humbled
<<else>>
slaver|look very pleased with <<themself $g.slaver>>
<</if>>
by the book's reception. <<name $g.slaver>> slaver|is on the tongue of every conversation that night, and <<therace $g.slaver>>'s mood increase in the coming weeks.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 5).apply($gQuest)>>
<<opt "Keep it in your office for a day and share it with visitors">>
<p>
For the rest of the week, you keep the tomes in your office. Many visitor takes interest in them, and they gain a new appreciation for how far the company has come from its humble beginnings. Your company's reputation increase slightly among the nearby residents.
</p>
<<run setup.qc.Favor('humankingdom', 20).apply($gQuest)>>
<<run setup.qc.Favor('humanvale', 20).apply($gQuest)>>
<</choose>><<run new setup.Event(
'company_rug', /* key */
"Company Rug", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_company_rug',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_artisan, setup.trait.join_senior], true),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.f_tile_good_slaver),
setup.qc.BoonizeRandom('slaver', 5),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.bedchamberwing),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> slaver|is pretty good with <<their $g.slaver>> <<uhands $g.slaver>>, and often slaver|use them to make various small crafts before and still after your joining your company.
In fact, <<they $g.slaver>> slaver|have just gifted you one of <<their $g.slaver>> creations: a rug embroided with the logo of your company.
</p>
<p>
It's a very well-crafted rug, and it must have taken <<therace $g.slaver>> quite some time to finish it. The edges are soft, the materials are durable, and the logo is most certainly drawing attention to the rug. After thanking the slaver, you retreat to your office and place the rug at its entrance for the time being, before you decide on a more permanent use for it.
</p><<run new setup.Event(
'connected_slaver', /* key */
"Connected Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_connected_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_boss, setup.trait.bg_informer, setup.trait.skill_connected], true),
],
'rescue': 'missingslavers',
},
[ /* outcomes */
setup.qc.Slaver('rescue', "", undefined),
],
[ /* restrictions */
setup.qres.UnitGroupHasUnit('missingslavers'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Today, you are greeted with the strangest of good news.
One of your missing slavers, <<rep $g.rescue>>, rescue|have somehow reappear inside the <<rep setup.buildingtemplate.prospectshall>>, and ready to join your company back.
</p>
<p>
Apparently, <<they $g.rescue>> rescue|have been independently rescued by <<yourrep $g.slaver>>.
<<if $g.slaver.isHasTrait('bg_informer')>>
<<Therace $g.slaver>> slaver|have utilized <<their $g.slaver>> prior connections from when <<they $g.slaver>> slaver|was making <<their $g.slaver>> living as an informer, and slaver|have rescued your missing slaver.
<<elseif $g.slaver.isHasTrait('bg_boss')>>
<<Therace $g.slaver>> slaver|have decided to borrow utilize <<their $g.slaver>> vast connection in the criminal underworld to locate and rescue your missing slaver.
<<else>>
<<Therace $g.slaver>> slaver|have used <<their $g.slaver>> wide network of connections to ultimately rescue your missing slaver.
<</if>>
An incredible feat, and you make notes to thank <<theslaver $g.slaver>> personally later.
</p><<run new setup.Event(
'entertainer_dance', /* key */
"Entertainer Dance", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_entertainer_dance',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_entertainer], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hiringsquare),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> slaver|is known for having a beautiful voice, as well as expert dancing skills. Today, a small commotion is forming on the <<rep setup.buildingtemplate.hiringsquare>>, and <<rep $g.slaver>> slaver|is in the center of it. <<Therace $g.slaver>> slaver|is dancing and singing to celebrate the nice weather, and slaver|have gathered quite a crowd of both slavers and visitors around <<them $g.slaver>>.
</p>
<<choose>>
<<opt "Just watch">>
<p>
<<if $g.slaver.isHasTrait('skill_entertain')>>
<<Yourrep $g.slaver>> is a region-class entertainer, and you were captivated
in no time at all. By the time the performance ended, almost the entire fort were gathered in the square. The performance was indeed very good, and you feel inspired just from watching it.
<<run setup.qc.BoonizeRandom('you', 15).apply($gQuest)>>
<<else>>
While <<yourrep $g.slaver>> may not be a famous entertainer, <<they $g.slaver>> slaver|is still very good, and you were captivated in no time. By the time the performance ended, almost half of the entire fort were gathered in the square. The performance was indeed quite good, and you feel inspired just from watching it.
<<run setup.qc.BoonizeRandom('you', 5).apply($gQuest)>>
<</if>>
</p>
<<opt "Join <<them $g.slaver>>">>
<p>
You step into the center of the square, and <<yourrep $g.slaver>> slaver|stop temporarily, waiting for you to make your move.
<<if $unit.player.isHasAnyTraitExact(['skill_entertain', 'bg_entertainer'])>>
<<if $unit.player.isHasTrait('bg_entertainer')>>
As a former entertainer yourself,
<<else>>
You are no slouch when it comes to dancing or singing, and
<</if>>
you easily continue <<their $g.slaver>> performance. Soon the two of you were dancing and singing for the growing crowd. By the end of the performance, almost the entire fort were in attendance, and many threw in some tips for the both of you. While the tips are nice, you feel you've also grown closer with <<therace $g.slaver>>.
<<run setup.qc.Money(500).apply($gQuest)>>
<<else>>
But you're not a professional dancer, and despite your best efforts, you are no match for <<their $g.slaver>> skills in dancing. Still, <<they $g.slaver>> slaver|appreciate your gesture, and soon starting to guide you into the performance. Before long a larger crowd starts to gather around the two of you, and <<yourrep $g.slaver>> slaver|continue to expertly lead you along the performance until the end. While you may not have contributed much to it, you feel you've become closer with <<therace $g.slaver>> nonetheless.
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slaver', 100).apply($gQuest)>>
<</choose>><<run new setup.Event(
'ex_leader', /* key */
"Ex-Leader", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_ex_leader',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior], true),
setup.qres.HasTitle('ex_leader'),
],
},
[ /* outcomes */
setup.qc.Opportunity('ex_leader', {
you: "you",
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<includereplace 'Opportunity_ex_leader'>><<run new setup.Event(
'fallen_knight', /* key */
"Fallen Knight", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_fallen_knight',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.SlaveUsableByYou(),
setup.qres.Available(),
setup.qres.AllTraits([setup.trait.bg_knight], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slave>> slave|have been quite well-broken to slavery. Looking at <<therace $g.slave>> now, it would be hard to believe that <<they $g.slave>> slave|was once an upstanding knight in service to <<their $g.slave>> liege.
<<if $g.slave.isHasTrait('muscle_verystrong')>>
<<Their $g.slave>> well-trained and extremely chiseled body now only serve to pleasure other <<men $unit.player>>.
<<elseif $g.slave.isHasTrait('muscle_strong')>>
<<Their $g.slave>> well-honed and muscular body now only exists to pleasure other <<men $unit.player>>.
<</if>>
<<if $g.slave.isHasTrait('per_chaste')>>
<<They $g.slave>> still slave|retain a vestige of <<their $g.slave>> former chastity oath, but would not hesitate the slightest to fulfill any of <<their $g.slave>> owner's depraved desires.
<</if>>
<<if $g.slave.isHasTrait('per_honorable')>>
While you can still sense some honor remaining inside the slave, it takes a back seat to all the slave conditioning <<they $g.slave>> slave|have acquired.
<</if>>
<<if $g.slave.isHasTrait('per_brave')>>
<<They $g.slave>> slave|remain considerably brave by slave's standard, and is able to take a hard assfucking with a stoic face.
<</if>>
All in all, you have done quite a marvelous job with the once pure and innocent.
</p>
<<choose>>
<<opt "Goad <<them $g.slave>> while you use <<them $g.slave>>">>
<p>
You order <<them $g.slave>> to present <<their $g.slave>> ass for a good hard assfucking.
<<They $g.slave>> obediently <<ustripanusand $g.slave>> spreads <<their $g.slave>> <<ulegs $g.slave>> wide, hardening <<themself $g.slave>> for the pain of the upcoming assrape.
You <<ustrippantsand $g.you>> tease your <<udickorstrap $g.you>> along <<their $g.slave>> ass while teasing <<them $g.slave>> if <<they $g.slave>> crave the penetration, despite being so utterly chaste back before.
<<They $g.slave>> slave|know that there is only one correct answer to this,
<<if $g.slave.isCanTalk()>>
but <<their $g.slave>> gag prevents them from saying anything but guttural moans.
<<else>>
and they meekly says, "Yes, <<master $g.you>>".
<</if>>
Hearing the submissive declaration, you give your phallus a push and it slides deliciously into the <<uanus $g.slave>>, and you keep taunting <<them $g.slave>> as you fuck <<them $g.slave>> <<uadv $g.you>> throughout the rest of the night.
Looking at the formerly pure and headstrong ex-knight reduced to an exhausted and well-used slut
<<if $unit.player.isHasDick()>>with cum dripping out of <<their $g.slave>> well-fucked asspussy<</if>> brings
a smile to your face at how you've utterly broken such a difficult-to-break specimen.
</p>
<<run setup.qc.FriendshipWithYou('slave', -50).apply($gQuest)>>
<<opt "Knight <<them $g.slave>> with your <<udickorstrap $g.you>>">>
<p>
With an evil grin, you order <<therace $g.slave>> to kneel before you. The obedient slave hurriedly obeys, of course, and looks at you curiously. You
<<if $unit.player.isHasDick()>>
<<ustrippantsand $g.you>>
<<else>>
don a strap-on and
<</if>>
position it right above <<reps $g.slave>> head.
</p>
<p>
<<Their $g.slave>> confusion at your action slave|was answered as <<they $g.slave>> hear you starting to enact a mock knighting ceremony. "<<name $g.slave>>, do you acknowledge me to be your true and lawful master?". Realizing what you're trying to do, <<their $g.slave>> last remnant of knightly pride was unable to suppress <<their $g.slave>> slave conditioning, and <<they $g.slave>> <<ustripmouthand $g.slave>> answers, "I so swear.".
You continue, "Do you pledge fealty to me, and swear your <<if $g.slave.isHasDick()>>asspussy<<else>>pussy<</if>> to me, to be forever at my whim and want?".
"I so swear.", repeats <<therace $g.slave>>.
"Then repeat after me: I, <<name $g.slave>>, do solemnly swear and pledge my <<if $g.slave.isHasDick()>>asspussy<<else>>pussy<</if>> to <<name $g.you>>, my liege and master, to worship and obey <<them $g.you>> forever, and to understand that my destiny is to be a slave forever."
Despite taken a little aback by your corruption of the knight oath, <<they $g.slave>> obediently repeated the oath. You lower your <<udickorstrap $g.you>> onto <<their $g.you>> shoulders while saying "Then I dub thee Sir <<name $g.slave>>, and present to you this <<udickorstrap $g.you>> that you now live and die for. You may now suck on it for my pleasure." You finish the ceremony by sliding your <<udickorstrap $g.you>> upwards into <<their $g.slave>> <<umouth $g.slave>> and <<uadv $unit.player>> facefuck <<therace $g.slave>> afterwards,
<<if $g.slave.isCanOrgasm()>> and <<they $g.slave>> cums multiple time from the dominant treatment
<<else>>
while <<they $g.slave>> slave|do <<their $g.slave>> best to not get aroused lest
<<if $g.slave.isInChastity()>>
<<their $g.slave>> dick would throb painfully against its tiny cage.
<<else>>
<<they $g.slave>> broke <<their $g.slave>> slave rules.
<</if>>
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slave', 50).apply($gQuest)>>
<<questauthorcardtext 'parody of Knighting Ceremony in Oaths of Crows'>>
<</choose>><<run new setup.Event(
'farmer_harvest', /* key */
"Farmer Harvest", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_farmer_harvest',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_farmer], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Your slavers come from quite a variety of backgrounds, and most have not forgotten their old craft even as slavers. This includes <<yourrep $g.slaver>>, who slaver|was a farmer before <<they $g.slaver>> slaver|become your slaver. As a hobby, <<therace $g.slaver>> slaver|tend to a small garden just outside of your fort, growing various mundane crops like tomatoes and corn.
</p>
<p>
Today, <<they $g.slaver>> slaver|is reaping quite the harvest, and <<therace $g.slaver>> slaver|is beaming quite proudly about it. Indeed, the produce is of high quality, having been tended carefully both by <<themself $g.slaver>>, and also by some of the fort's slaves. <<Rep $g.slaver>> slaver|have given you a sizable portion of the harvest. Baskets of tomatoes and corn are now sitting in your office, and you wonder what to do with them.
</p>
<<choose>>
<<opt "Sell them">>
<p>
<<Reps $g.slaver>> produce is of quite a high quality, since <<they $g.slaver>> slaver|was able to tend it more thoroughly with the help of the fort's slaves.
The produce was sold for quite a sum, which goes into the company's coffers.
</p>
<<run setup.qc.Money(800).apply($gQuest)>>
<<opt "Throw a feast">>
<p>
Today's dinner will be cooked personally by you, and despite your questionable cooking skills, the fresh ingredients greatly make up for it.
The food comes out very good, and all your slavers eat heartily today. <<Yourrep $g.slaver>> slaver|become the <<man $g.slaver>> of the night, and <<their $g.slaver>> mood significantly increase in the coming days.
</p>
<<run setup.qc.BoonizeRandom('slaver', 10).apply($gQuest)>>
<<opt "That's a nice large cucumber you have there...">>
<p>
You select a particularly large cucumber and fashion it into a make-shift dildo.
<<if $unit.player.getTraitWithTag('magic')>>
Using your own magic mastery, you enchant the cucumber to keep it fresh for a good long while.
<<else>>
<<run setup.qc.Money(-1000).apply($gQuest)>>
You then proceed to find an enchanter inside your fort, and pay them to enchant the cucumber
with a spell of everlasting. This should keep the cucumber fresh for a good long while.
<</if>>
Why you have decided to do such a thing, you never know, but you got yourself one rather
unfortunate enchanted vegetable ready to be inserted into some unwilling anus...
</p>
<<run setup.qc.EquipmentDirect('dildo_cucumber').apply($gQuest)>>
<</choose>><<run new setup.Event(
'fetters_with_pulleys', /* key */
"Fetters with Pulleys", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_fetters_with_pulleys',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior, setup.trait.bg_engineer], true),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.f_punishment_good_slaver),
setup.qc.BoonizeRandom('slaver', 5),
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AllTraits([setup.trait.per_frugal], true)),
setup.qc.DoAll([
setup.qc.MoneyCustom(-4000)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AllTraits([setup.trait.per_lavish], true)),
setup.qc.DoAll([
setup.qc.MoneyCustom(-500)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(-2000)
], undefined))
], undefined)),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.forge),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> is quite the crafty <<urace $g.slaver>>. Ever since <<they $g.slaver>> joined your company years ago, <<they $g.slaver>> slaver|have been using <<their $g.slaver>> experience as an ex-inventor to craft various bondage devices.
<<if $g.slaver.isHasTrait('per_kind')>>
Being the kind slaver that <<they $g.slaver>> contradictory slaver|is, <<they $g.slaver>> slaver|do not use them <<themself $g.slaver>>, but mostly to fulfill a request or two from <<their $g.slaver>> friends.
<<elseif $g.slaver.isHasTrait('per_cruel')>>
<<They $g.slaver>> particularly delights in crafting the most painful-looking devices, and hearing the slaves scream in pain is fun for the cruel slaver.
<<else>>
<<They $g.slaver>> crafts most of the bondage tools <<they $g.slaver>> needs to use on the slaves, sometimes with a personal flair to spice up slave trainings.
<</if>>
<<if $g.slaver.isHasTrait('skill_creative')>>
<<Their $g.slaver>> creativity also means that these devices tend to be inventive, with a few nudges here and there that looks innocuous, but would often pleasurize the slave in inopportune times.
<</if>>
</p>
<p>
Recently, <<theslaver $g.slaver>> slaver|have been spending quite a lot of time in the fort's <<rep setup.buildingtemplate.forge>>, together with the resident blacksmith. And you finally know why today — the slaver comes to your office bringing a unique contraption: a set of pulleys and sturdy rope ending with a pair of fetters.
The contraption could be installed in some bedchamber, and can be used to hang a slave or two from the ceiling for some fun bondage nights. Alternative, you can always find a buyer that is willing to purchase such a unique contraption for their perverted uses.
</p>
<p>
<<if $g.slaver.isHasTrait('per_lavish')>>
Surprisingly, the slaver only asks for a pittance pay in return, just <<money 500>> to barely cover the costs — fitting, considering how generous the slaver is. You're not going to complain either way!
<<elseif $g.slaver.isHasTrait('per_frugal')>>
But of course, there is a matter of costs involved in making the contraption, and according to your slaver, it amounts to a whopping <<money 4000>>. You have your doubts, especially considering how greedy the slaver is, but decide that it's worth the price for such a unique piece of furniture.
<<else>>
All your slaver asks for is some money to cover the materials — a reasonable sum of <<money 2000>>, which you <<uadv $unit.player>> pay.
<</if>>
</p>
<p>
Now that you have your <<uhands $unit.player>> on the <<rep setup.item.f_punishment_good_slaver>>,
<<if $inventory.isHasItem('sexmanual_upsidedown')>>
you might want to reconsult your <<rep setup.item.sexmanual_upsidedown>> to see if there's any interesting use you can get out of this furniture...
<<else>>
you can't help but wonder if there's something kinky you could do with it...
<</if>>
</p><<run new setup.Event(
'good_slaver_bad_slaver', /* key */
"Good Slaver Bad Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_good_slaver_bad_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'good': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.AllTraits([setup.trait.per_kind], true),
],
'bad': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.AllTraits([setup.trait.per_cruel], true),
],
'slave': [
setup.qres.NotBusy(),
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.training_none, setup.trait.join_junior], true),
],
},
[ /* outcomes */
setup.qc.Opportunity('good_slaver_bad_slaver', {
good: "good",
bad: "bad",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.trainingchamber),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_good_slaver_bad_slaver">><<run new setup.Event(
'grand_lunacy', /* key */
"Grand Lunacy", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'unit',
'unknown',
],
'Event_grand_lunacy',
{ /* roles (LEGACY) */
},
{ /* actors */
'lunatic': [
],
},
[ /* outcomes */
setup.qc.QuestDirect('grand_lunacy', {lunatic: 'lunatic'}),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><<include "Quest_grand_lunacy">><<run new setup.Event(
'healer_slaver', /* key */
"Healer Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_healer_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_healer], true),
],
'injured': [
setup.qres.Job(setup.job.slaver),
setup.qres.IsInjured(5),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hospital),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
In the past few weeks, <<yourrep $g.injured>> spent most of <<their $g.injured>> time resting in the <<rep setup.buildingtemplate.hospital>>, recuperating from <<their $g.injured>> grave injuries.
But today, something interesting happens.
<<Yourrep $g.slaver>> slaver|have come to visit the injured slaver. If you recall correctly, <<therace $g.slaver>> used to become a healer before becoming one of your slavers, and <<they $g.slaver>> might just have a cure or two for the injured <<urace $g.injured>>.
</p>
<<set _heal = 1>>
<p>
<<Rep $g.slaver>> slaver|sit next to <<rep $g.injured>>, and begin to administer some home-made curatives.
<<if $g.slaver.isHasTrait('skill_alchemy')>>
The curative is highly potent, thanks to <<reps $g.slaver>> knowledge in <<rep
setup.trait.skill_alchemy>>.
<<set _heal += 2>>
<</if>>
<<if $g.slaver.isHasTrait('per_slow')>>
The slow slaver might have misplaced an ingredient or two, however.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_smart')>>
The slaver is smart enough to add several specialized ingredients to cure the specific ailment that plagues <<rep $g.injured>>.
<<set _heal += 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_attentive')>>
<<They $g.slaver>> slaver|make sure to double-check <<they $g.slaver>> slaver|is not missing a single ingredient on every step of the process.
<<set _heal += 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_dreamy')>>
<<They $g.slaver>> may have also forgotten an ingredient or two, being as inattentive as <<they $g.slaver>> slaver|is.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('race_lizardkin') or $g.slaver.isHasTrait('subrace_humansea')>>
The recipe is a secret one — passed generation from generation in the land beyond the <<lore region_sea>>.
<<set _heal += 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_evil')>>
The evil slaver may have put some questionable ingredients such as frog's eyes, but surely it's just a baseless rumor.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_lunatic')>>
Your other slavers can hear <<therace $g.slaver>> giggling to <<themself $g.slaver>> lunatically as <<they $g.slaver>> mix the potion.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('magic_dark_master')>>
The potion accidentally absorbs the vast dark energy within <<therace $g.slaver>>,
corrupting it and surely making it less effective.
<<set _heal -= 2>>
<<elseif $g.slaver.isHasTrait('magic_dark')>>
The potion accidentally absorbs the dark energy within <<therace $g.slaver>>,
corrupting it and surely making it less effective.
<<set _heal -= 1>>
<</if>>
</p>
<p>
<<Rep $g.slaver>> <<uadv $g.slaver>> make the patient drink the potion.
<<if $g.slaver.isHasTrait('corruptedfull')>>
However, the rampant corruption plaguing <<their $g.slaver>> body seeps into the potion, making it much less effective.
<<set _heal -= 2>>
<<elseif $g.slaver.isHasTrait('corrupted')>>
However, the corruption plaguing <<their $g.slaver>> body seeps a little into the potion, reducing its effectiveness.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_aggressive')>>
The treatment is pretty rough — the slaver isn't known for <<their $g.slaver>> calm and measured approach.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_calm')>>
The treatment is delivered very gently, making it more effectiveness.
<<set _heal += 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_cruel')>>
When the patient winces in pain, the cruel slaver simply shuts <<them $g.slaver>> down with even more pain.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('per_kind')>>
When the patient winces in pain, the kind slaver soothes <<them $g.slaver>> with kind words.
<<set _heal += 1>>
<</if>>
<<if $g.slaver.isHasTrait('muscle_verystrong')>>
<<Rep $g.slaver>> slaver|is a little too strong as a healer, and sometimes <<they $g.slaver>> slaver|exert too much power, making the treatment less gentle than it should.
<<set _heal -= 1>>
<</if>>
<<if $g.slaver.isHasTrait('magic_light_master')>>
<<Rep $g.slaver>> also slaver|use <<their $g.slaver>> advanced mastery of the light magic to enhance the healing.
<<set _heal += 2>>
<<elseif $g.slaver.isHasTrait('magic_light')>>
<<Rep $g.slaver>> also slaver|use <<their $g.slaver>> small mastery of light magic to enhance the healing.
<<set _heal += 1>>
<</if>>
</p>
<<if _heal >= 3>>
<p>
The treatment was very effective, and <<rep $g.injured>> injured|become visibly much better after gulping down the potion. <<Yourrep $g.slaver>> slaver|look quite satisfied with the result.
</p>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<<run setup.qc.Heal('injured', _heal).apply($gQuest)>>
<<elseif _heal > 0>>
<p>
The treatment works, and <<rep $g.injured>> injured|recover a little more from <<their $g.injured>> injuries.
</p>
<<run setup.qc.Heal('injured', _heal).apply($gQuest)>>
<<elseif _heal <= -2>>
<p>
In a strange twist, the potion instead ravaged <<reps $g.injured>> body, injuring it even further...
<<run setup.qc.Injury('injured', Math.round(-_heal / 2)).apply($gQuest)>>
</p>
<<else>>
<p>
Unfortunately, the treatment was a bust, and despite gulping down the potion, <<reps $g.injured>> injuries do not get any better.
</p>
<</if>><<run new setup.Title(
"quest_archangel_of_knowledge_0", /* key */
"Archangel of Knowledge", /* name */
"An angel envoy from the heavens who obliviouslyl came to your fort in hopes of enlisting your skilled slavers in the war against the demons", /* description */
"a|was an envoy from the heavens who obliviouslyl came to your fort in hopes of enlisting your skilled slavers in the war against the demons, but ended up locked behind your bars", /* unit text */
100000, /* slave value */
{ /* skill additives */
knowledge: 5,aid: 5,},
)
>>
<<run new setup.Title(
"quest_angel_touched_1", /* key */
"Angel-Touched", /* name */
"Was head-hunted by an angel to participate in the battle against the demons", /* description */
"a|was head-hunted by an angel to participate in the battle against the demons, but turned the tables on the angel instead", /* unit text */
3000, /* slave value */
{ /* skill additives */
combat: 1,brawn: 1,survival: 1,intrigue: 1,slaving: 1,knowledge: 1,social: 1,aid: 1,arcane: 1,sex: 1,},
)
>>
<<run new setup.UnitGroup(
"heavenly_recruit1",
"Angel of Knowledge",
'subrace_angel', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTitle('unit', 'quest_archangel_of_knowledge_0'),
setup.qc.TraitsReplace('unit', [setup.trait.per_smart]),
],
)>>
<<run new setup.Event(
'heavenly_recruit', /* key */
"Heavenly Recruit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'unit',
],
'Event_heavenly_recruit',
{ /* roles (LEGACY) */
},
{ /* actors */
'angel': 'heavenly_recruit1',
},
[ /* outcomes */
setup.qc.Slave('angel', "a|was an envoy from the skies who came to your fort, lured by skilled slavers, but ended up enslaved", undefined),
setup.qc.AllUnitSatisfyDo([setup.qres.Or([
setup.qres.HasTitle('quest_master_of_aid_0'),
setup.qres.HasTitle('quest_master_of_arcane_0'),
setup.qres.HasTitle('quest_master_of_brawn_0'),
setup.qres.HasTitle('quest_master_of_combat_0'),
setup.qres.HasTitle('quest_master_of_intrigue_0'),
setup.qres.HasTitle('quest_master_of_knowledge_0'),
setup.qres.HasTitle('quest_master_of_sex_0'),
setup.qres.HasTitle('quest_master_of_slaving_0'),
setup.qres.HasTitle('quest_master_of_social_0'),
setup.qres.HasTitle('quest_master_of_survival_0')
])],
[setup.qc.AddTitle('unit', 'quest_angel_touched_1')],
),
],
[ /* restrictions */
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_aid_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_arcane_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_brawn_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_combat_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_intrigue_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_knowledge_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_sex_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_slaving_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_social_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_master_of_survival_0'),
setup.qres.NoTitle('quest_angel_touched_1')
], 1),
],
100, /* Cooldown */
setup.rarity.legendary, /* Rarity */
)>><p>
By this point, within your motley band of slavers are slavers of different skills and backgrounds, each with their own specialities that are known far and wide.
A master of combat, a master of brawn, a master of intrigue, even a master of sex, your company has it all. Your fame has grown widely as a result, and many would come to your fort to seek expert knowledge, which they sometimes get, and sometimes don't.
</p>
<p>
And apparently, it has transcend mortal plane too, as you learned today. An errant real-life angel has apparently made an appearance at your fort, seemingly oblivious to your actual business of slaving, and thought that your fort is some kind of academy for the most talented. <<They $g.angel>> angel|was seen talking around with your slavers, trying to talk them into joining the angel's plight in their eternal war against the demons. It's quite irritating, really.
</p>
<p>
Seeing the completely naive angel gave you a different idea, however, and before long you've ordered your slavers to bring a large net from your basement, and set up a trap for the cute little bird. Before long, the oblivious bird was trapped, and <<they $g.angel>> only realized <<their $g.angel>> mistake when you personally came and secured a sturdy slave collar around <<their $g.angel>> neck. Ahh, nothing like a free slave to begin your day.
</p>
<p>
The heavens will surely know of this, and while they are unlikely to retaliate, you just know that all of your current slavers has been marked as "not-recruitable". It might be possible to attract yet another foolish angel to your fort — just with not your current set of slavers.
</p><<run new setup.Event(
'heroic_lunatic', /* key */
"Heroic Lunatic", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_heroic_lunatic',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.per_lunatic], true),
],
},
[ /* outcomes */
setup.qc.Leave('slaver', "a|is trying to fulfill a|their dream of becoming a hero... or just being stark ravingly mad", undefined),
setup.qc.Event('grand_lunacy', 4, {
lunatic: "slaver",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Among your slavers, <<yourrep $g.slaver>> slaver|stand out for being particularly... eccentric, to say the least. <<Therace $g.slaver>> slaver|is often prone to flights of fancy, bordering of mad, sometimes in very inopportune moments. More than once had the slaver found
<<if $g.slaver.isHasTrait('per_playful')>>
playfully dancing in the middle of an intense fight,
<<else>>
dancing in the middle of a sparring fight
<</if>>
or
<<if $g.slaver.isHasTrait('per_chaste')>>
putting clothes on the various animals inside your fort to make them less sexually obscene.
<<else>>
running around the fort naked while screaming various obscenities around.
<</if>>
</p>
<p>
And the latest flight of fancy from <<therace $g.slaver>> is apparently here. <<They $g.slaver>> suddenly announces that <<they $g.slaver>> slaver|is going to become a hero, and slaver|take off from your fort. You sigh to yourself, sometimes wondering why you have decided to make such a lunatic as one of your slavers...
</p><<run new setup.Event(
'living_god', /* key */
"Living God", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
],
'Event_living_god',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior, setup.trait.bg_mythical], true),
],
},
[ /* outcomes */
setup.qc.AddTitle('slaver', 'quest_living_god'),
setup.qc.QuestDirect('living_god', {}),
setup.qc.VarSet('quest_living_god_active', '1', -1),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.market),
setup.qres.NoUnitWithTitle('quest_living_god', {
}),
setup.qres.VarNull('quest_living_god_active'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Even among your slavers, <<yourrep $g.slaver>> is rather special. <<Therace $g.slaver>> exudes an aura unlike any other, drawing many people in. In fact, before <<they $g.slaver>> became a slaver, <<they $g.slaver>> slaver|was quite used to being worshipped by others.
</p>
<p>
Despite having known the slaver for quite some time, you're still unsure what is it exactly that draws people to <<them $g.slaver>>, but you have no plan on making the talent go to waste. Instead, you <<uadv $unit.player>> approached <<rep $g.slaver>>, suggesting to put the talent to good use. Why not setup a small shrine in your <<rep setup.buildingtemplate.market>>, dedicated to <<their $g.slaver>> likeliness, where people can come and worship <<them $g.slaver>> as some sort of deity? Surely there are some fun to be had, as well as coin if one can look carefully enough...
</p>
<p>
<<if $g.slaver.isHasTrait('per_honorable')>>
Of course you don't phrase it like that to the honorable <<urace $g.slaver>>. Instead, you word it as making a platform for <<them $g.slaver>> to share <<their $g.slaver>> wisdom. You skipped the part where the "grateful sheeps" would happily donate <<their $g.slaver>> worldy belongings, of course.
<<else>>
<<if $g.slaver.isHasTrait('per_evil')>>
You didn't even have to try to convince the slaver — the evil slaver relishes your cruel idea, and happily go with the plan.
<<else>>
It took you some convincing, but the jingling of coin finally convinces the slaver to go with the plan.
<</if>>
Setup a shrine, get some followers, and take whatever "offerings" the grateful worshippers would surely bring.
<</if>>
</p>
<p>
All you need to do is some money to fund the shrine, as well as a couple of slavers to build it.
</p><<run new setup.Event(
'living_god_s_end', /* key */
"Living God\'s End", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_living_god_s_end',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
setup.qc.VarRemove('quest_living_god_active'),
setup.qc.VarRemove('quest_living_god_isfavor'),
setup.qc.MoneyCustom(1000),
setup.qc.RemoveDuty('questlivinggod'),
],
[ /* restrictions */
setup.qres.VarEqual('quest_living_god_active', '1'),
setup.qres.NoUnitWithTitle('quest_living_god', {
}),
],
0, /* Cooldown */
setup.rarity.always, /* Rarity */
)>><<set _u = setup.getAnySlaver()>>
<p>
With the slaver gone, your little shrine dedicated to your once <<rep setup.trait.bg_mythical>> slaver lies desolate. Nobody ever comes to the place anymore, and before long plants start to overgrow the place. Sighing, you order <<yourrep _u>> to cleanup the shrine, recouping what little you could get from reselling its materials.
</p><<run new setup.Event(
'magical_candlestick', /* key */
"Magical Candlestick", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_magical_candlestick',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.join_senior], true),
setup.qres.AnyTrait([setup.trait.bg_mystic, setup.trait.bg_apprentice]),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.Available(),
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], true),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.f_lighting_good_slaver),
setup.qc.BoonizeRandom('slaver', 5),
setup.qc.Injury('slave', 5),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.bedchamberwing),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
In the past few weeks, you've seen <<yourrep $g.slaver>> doing something with
one of your slaves, <<rep $g.slave>>. It's unclear what <<therace $g.slaver>>
slaver|have been doing, but given <<their $g.slaver>>
<<their $g.slaver>> past as a
<<if $g.slaver.isHasTrait('bg_mystic')>>
wizard
<<else>>
student of magic
<</if>>
and hence <<their $g.slaver>>
proclivity towards
magic, and given the slave's magical abilities, it's probably something
related to the arcane.
</p>
<p>
Today, <<rep $g.slaver>> slaver|have come over to you, thanking you for all
the things you've done for your company and for <<them $g.slaver>>. Just when
you suspect the worst, <<they $g.slaver>> instead slaver|give you a present
of gratitude: a magically enchanted candlestick to decorate your bedchamber
with. Despite looking like a regular candlestick, it emits no heat, and
perpetually glistens with a reddish color — no doubt fueled by magic.
According to <<therace $g.slaver>>, <<they $g.slaver>> slaver|have been
draining all the magical energies from the slave into the candlestick,
leaving the slave severely drained and needing a few weeks to recover.
</p>
<p>
You thank your slaver for such a thoughtful gift, and stow it in your office
for the time being. Judging from how severely drained the slave is, however,
you can only imagine the pain the slave must have endured being drained of
<<their $g.slave>> magical essence again and again.
<<if $g.slaver.isHasTrait('per_cruel')>>
Given <<reps $g.slaver>> sadistic nature, you have a feeling that the real reason why the slaver decide to make such an enchanted candlestick is to make the slave suffer from it...
<<elseif $g.slaver.isHasTrait('per_dominant')>>
Given <<reps $g.slaver>> dominant nature, you have a feeling that the real reason why the slaver decide to make such an enchanted candlestick is to satisfy <<their $g.slaver>> need to dominate others...
<<elseif $g.slaver.isHasTrait('per_evil')>>
Given <<reps $g.slaver>> evil nature, you have a feeling that the real reason why the slaver decide to make such an enchanted candlestick is because <<they $g.slaver>> slaver|want to torture the slave by making it...
<</if>>
</p><<run new setup.Event(
'man_woman_of_the_sea', /* key */
"Man/Woman of the Sea", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
],
'Event_man_woman_of_the_sea',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_pirate, setup.trait.bg_seaman], true),
],
},
[ /* outcomes */
setup.qc.Opportunity('man_woman_of_the_sea', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.scoutharbor),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_man_woman_of_the_sea">><<run new setup.Event(
'manual_labor', /* key */
"Manual Labor", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_manual_labor',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_laborer], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.NotBusy(),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.bath),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Your fort residents need a lot of supplies, including building materials, tool maintenance equipment, as well as food ingredients. As a result, crates and crates of the stuff have to be hauled into your fort, a task usually delegated to your slaves. But today, right behind <<yourrep $g.slave>> is <<yourrep $g.slaver>>, who is also hauling a particularly heavy-looking create into your fort.
<<if $g.slaver.isHasTrait('muscle_verystrong')>>
The slaver certainly has the muscles for it too, <<their $g.slaver>> bulging muscles flex considerably as <<they $g.slaver>> lift another up.
<<elseif $g.slaver.isHasTrait('muscle_strong')>>
The slaver certainly has the physique for it too, <<their $g.slaver>> toned muscles flex as <<they $g.slaver>> lift a crate up.
<<elseif $g.slaver.isHasTrait('muscle_verythin')>>
Despite the awkwardly thin waist, <<theslaver $g.slaver>> surprisingly pack quite a power and is able to lift one of the crates up.
<<elseif $g.slaver.isHasTrait('muscle_thin')>>
Despite the narrow waist, <<theslaver $g.slaver>> surprisingly pack quite a power and is able to lift one of the crates up.
<<else>>
Despite <<their $g.slaver>> average figure, the slaver does not seem any exhausted lifting the heavy-looking crates along.
<</if>>
<<They $g.slaver>> slaver|is extremely familiar with manual heavy labor from <<their $g.slaver>> prior occupation before becoming a slaver, and perhaps <<theslaver $g.slaver>> is just wanting to relive the experience by helping out with the slave's menial duties.
</p>
<<choose>>
<<opt "Help out too">>
<p>
Wanting to work your muscles as well, you join in the crate hauling team and haul up
<<if $unit.player.isHasTrait('muscle_verystrong')>>
four crates simultaneously, using your extreme strength.
<<elseif $unit.player.isHasTrait('muscle_strong')>>
two crates simultaneously, using your considerable muscle strength.
<<else>>
a crate.
<</if>>
<<Yourrep $g.slaver>> slaver|look quite surprised
<<if $g.slaver.isHasTrait('per_humble')>>
and slightly embarrassed
<</if>>
seeing you joining along with <<their $g.slaver>> silly little hobby.
But <<they $g.slaver>> slaver|is actually quite glad to have another slaver helping out, and the two of you talk amiable as you carry the crates over to your fort between the rest of the slaves. The exercise is quite good for the both of you too.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 50).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('slaver', 3).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('you', 3).apply($gQuest)>>
<<opt "Prepare a nice relaxing bath for <<rep $g.slaver>> later">>
<p>
Not wanting to get yourself sweaty, you instead head into the fort's <<rep setup.buildingtemplate.bath>> and prepare a nice, relaxing bath for <<yourrep $g.slaver>>. When <<rep $g.slaver>> finishes with the menial task, you invite <<therace $g.slaver>> over for some relaxing bath-time.
The sore slaver enjoys the bath quite thoroughly, and <<they $g.slaver>> much appreciate your good gesture.
<<if State.variables.settings.isCanBecomeLovers($unit.player, $g.slaver)>>
<<They $g.slaver>> slaver|is so tired that <<they $g.slaver>> slaver|do not realize that you are quite busy
stealing a glance or two on <<their $g.slaver>> delicious-looking <<ugenital $g.slaver>>, as well as
<<their $g.slaver>> exposed <<ubreasts $g.slaver>>.
<<if $unit.player.isHasTrait('per_chaste')>>
A chaste part of you is quite embarrassed by your actions.
<<elseif $unit.player.isHasTrait('per_lustful')>>
Before long, your fantasies get the better of you and you
<<if $unit.player.isHasDick()>>
cum secretly inside the water.
<<else>>
climax secretly inside the water.
<</if>>
<</if>>
<</if>>
</p>
<<run setup.qc.FriendshipWithYou('slaver', 200).apply($gQuest)>>
<</choose>><<run new setup.Event(
'masochist_slaver', /* key */
"Masochist Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'gore',
],
'Event_masochist_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.per_masochistic], true),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
'other': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.per_masochistic], true),
],
},
[ /* outcomes */
setup.qc.Injury('slaver', 2),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hospital),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> has been with your company for some time now, and by now, it is not a secret that <<their $g.slaver>> brain is wired a little differently than most others. While other people tend to avoid pain, <<therace $g.slaver>> instead often seek the embrace of the pain to a dangerous extent. Instead of running in the face of danger, <<therace $g.slaver>> sometimes choose to do foolish things.
</p>
<p>
In fact, <<yourrep $g.other>> has just informed you that strange sounds could be heard from inside <<reps $g.slaver>> room. As you approach the lodgings area, you hear the distinct sound of whip hitting flesh, and both of you rush into the room. Once inside, you are greeted with bruised back of <<therace $g.slaver>>, who apparently has somehow got <<their $g.slaver>> <<uhands $g.slaver>> on a horse whip, and got too excited with trying it out on <<themself $g.slaver>>. The naked slaver is in a very excruciating pain, which translates to excruciating pleasure for the masochist slaver, and
<<their $g.slaver>>
<<if $g.slaver.isHasDick()>>
<<udick $g.slaver>> stands proudly erect.
<<else>>
<<uvagina $g.slaver>> is leaking wet.
<</if>>
</p>
<<choose>>
<<opt "Tend to <<their $g.slaver>> wounds">>
<p>
You can't really blame the <<man $g.slaver>> for being born that way<<if $unit.player.isMasochistic()>> — in fact, as a fellow masochist you understand the urge as well — <<else>>,<</if>>
but as a slaver under your employ this behavior just cannot be maintained. Still, what's done is done, and you immediately carried the battered <<urace $g.slaver>> into your
<<rep setup.buildingtemplate.hospital>>.
Your quick action saved <<therace $g.slaver>> a lot of pain, and while that's a good thing for your company, you are unsure if the utter masochist feels similarly.
</p>
<p>
You make a mental note to hide all manners of self-harming tools far, far away from <<reps $g.slaver>> reach.
</p>
<<run setup.qc.Heal('slaver', 1).apply($gQuest)>>
<<opt "Whip <<them $g.slaver>> some more">>
<p>
Seeing <<their $g.slaver>> blissful face in front of such excruciating pain,
<<if $unit.player.isHasTrait('per_cruel')>>
you cruelly lick your lips in anticipation of a rare opportunity to whip your own slaver.
You know this is what they want too, so
<<else>>
you sighed deeply.
<<if $unit.player.isMasochistic()>>
As a fellow masochist, you understand what needs to be done in such a situation.
<<else>>
Since the milk is already spoiled, might as well make use of the opportunity to increase <<therace $g.slaver>>'s morale, and you only know one way to do that.
<</if>>
Letting out another sigh,
<</if>>
you raise the whip high before raining it down on <<reps $g.slaver>> <<uback $g.slaver>>, earning a shriek that's most certainly not a shriek of pain from <<rep $g.slaver>>.
Eventually,
<<they $g.slaver>>
<<if $g.slaver.isHasDick()>>
cums
<<else>>
climaxes
<</if>>
from the pain alone, before losing consciousness.
You finally bring the well-beaten
<<urace $g.slaver>> to the
<<rep setup.buildingtemplate.hospital>>. While <<they $g.slaver>> slaver|become quite injured from the whipping, <<their $g.slaver>> morale is as high as it could be right now.
</p>
<p>
<<if $unit.player.isHasTrait('per_cruel')>>
You secretly get off too from your sadism fetish, and starting to wonder if you could arrange with <<them $g.slaver>> to make the relationship permanent...
<</if>>
<<run setup.qc.FriendshipWithYou('slaver', 300).apply($gQuest)>>
</p>
<<run setup.qc.BoonizeRandom('slaver', 8).apply($gQuest)>>
<</choose>><<run new setup.Event(
'meek_slaver', /* key */
"Meek Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_meek_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_unemployed, setup.trait.bg_slave], true),
setup.qres.NoTraits([setup.trait.per_dominant], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
],
'other': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
],
},
[ /* outcomes */
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> came from a rather unflattering background.
Prior to becoming your slaver, <<they $g.slaver>> slaver|was
<<if $g.slaver.isHasTrait('bg_unemployed')>>
unemployed, living on the streets.
<<else>>
a lowly slave.
<</if>>
As a result, <<theslaver $g.slaver>> slaver|is awkwardly meek, and some would even go as far to say that <<they $g.slaver>> slaver|is not suitable as slaver.
<<if $g.slaver.isHasTrait('per_aggressive')>>
Nobody dares to say it out loud in front of the aggressive <<urace $g.slave>> though.
<<elseif $g.slaver.isHasTrait('face_scary') or $g.slaver.isHasTrait('skill_intimidating')>>
Nobody dares to say it out loud in front of the intimidating <<urace $g.slave>> though.
<<elseif $g.slaver.isHasTrait('muscle_verystrong')>>
Nobody dares to say it out loud in front of the hulkingly muscular <<urace $g.slave>> though.
<<elseif $g.slaver.isHasTrait('height_giant')>>
Nobody dares to say it out loud in front of the gigantic <<urace $g.slave>> though.
<</if>>
</p>
<p>
<<Their $g.slaver>> meekness makes for an awkward scene today. <<Yourrep $g.other>> is in the middle of playing with a slave <<rep $g.slave>> in the dungeons, and when <<therace $g.other>> other|shout a degrading command, <<rep $g.slaver>> goes perfectly stiff, <<their $g.slaver>>
<<if $g.slaver.isHasTrait('bg_unemployed')>>
prior life living on the streets makes them extra sensitive to any and all potential source of "income".
<<else>>
prior life as a slave making them involuntarily pay more attention to dominant commands.
<</if>>
Not wanting <<rep $g.other>> to realize what has happened, <<rep $g.slaver>> quietly exits the place, not realizing that you were watching all the time.
</p>
<<choose>>
<<opt "Try to address this issue">>
<p>
This is a concerning behavior as slaver, so you approach <<therace $g.slaver>> some time later when <<they $g.slaver>> slaver|is alone. <<They $g.slaver>> slaver|try to feign ignorance, but when switch to a more commanding tone, <<their $g.slaver>> stiffness returned.
You tell <<them $g.slaver>> that this won't do, and you spend the next couple of days trying to train the habit out of the slaver.
</p>
<p>
Unfortunately, days of specialized training are not sufficient to remove the years-induced habit. Despite this, the slaver seems to appreciate your concern, and the two of you grow closer throughout the attempt.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 200).apply($gQuest)>>
<<opt "Take advantage of the issue">>
<p>
Deciding for some fun, you approach <<therace $g.slaver>> before using your most commanding tone to order the slaver to kneel before you. <<They $g.slaver>> reflexively does so, and before <<they $g.slaver>> slaver|realize what's happening you
<<ustrippantsand $g.you>>
shove your
<<udickorstrap $g.you>> down <<reps $g.slaver>> throat.
<<They $g.slaver>> slaver|gag at the feeling of your shaft lodged inside slaver|their throat, but before slaver|they slaver|was able to protest, you again use your commanding tone to order slaver|them to take it all in.
Eventually, slaver|their
<<if $g.slaver.isHasTrait('bg_slave')>>
slave
<<else>>
beggar
<</if>>
mentality takes over, and slaver|they helplessly serve you all night long.
</p>
<p>
<<if $g.slaver.isSubmissive()>>
Surprisingly, the submissive slut quite like the rough treatment, and your relationship somehow grow as a result.
<<run setup.qc.FriendshipWithYou('slaver', 200).apply($gQuest)>>
<<else>>
Understandably, <<they $g.slaver>> slaver|like you less now.
<<run setup.qc.FriendshipWithYou('slaver', -200).apply($gQuest)>>
<</if>>
</p>
<</choose>><<run new setup.Event(
'mist_vacation', /* key */
"Mist Vacation", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
],
'Event_mist_vacation',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_mist], true),
setup.qres.AllTraits([setup.trait.join_senior], true),
],
},
[ /* outcomes */
setup.qc.QuestDirect('mist_vacation', null),
setup.qc.RemoveTagGlobal('mist_guide_slaver'),
setup.qc.AddTag('slaver', 'mist_guide_slaver'),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _w = setup.getAnySlaver([$g.slaver])>>
<p>
Your slavers are quite a handful to manage, each having their own quirks and personalities you'd have to take care of. For example, just this morning you have to scold <<rep _w>> for <<uhobbyverb _w>> instead of doing <<their _w>> duties. It's quite a stressful job, being the leader of a slaving company.
</p>
<p>
<<Yourrep $g.slaver>>, one of the longer serving member of your company, notices you being down as well, and invite you for one of <<their $g.slaver>> pastime — a vacation! Just when you get your hopes high that one of your slavers is actually a pretty decent <<urace $g.slaver>>, <<they $g.slaver>> non-chalantly mentions the location to be... the land beyond <<lore concept_mist>>.
You have half the idea to deduct <<their $g.slaver>> pay and throw <<therace $g.slaver>> out from your office window, but then you remember that <<rep $g.slaver>> slaver|was a mistwalker — a rare occupation whose main duty is to guide people in and out of <<lore concept_mist>>.
<<if $unit.player.isHasTrait('race_demon')>>
While you're pretty familiar with the realm (given the demonic blood flowing in you), the act of entering and exiting the realm is still painfully difficult without a skilled mistwalker.
<</if>>
Perhaps this is indeed a rare opportunity for you to enjoy a vacation nobody else could enjoy, and perhaps your slaver's pay would not get deducated after all.
</p>
<p>
The trip should be much safer with an experienced mistwalker, but it's still a trip into <<lore concept_mist>>, and poses considerable danger always.
Should you wish to follow through with this stupid idea, you should prepare for a
</p><<run new setup.Event(
'noble_pardon', /* key */
"Noble Pardon", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_noble_pardon',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_royal, setup.trait.bg_noble], true),
],
},
[ /* outcomes */
setup.qc.Opportunity('noble_pardon', {
slaver: "slaver",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.moraleoffice),
setup.qres.Or([
setup.qres.IreAtLeast('humankingdom', 10),
setup.qres.IreAtLeast('humanvale', 10),
setup.qres.IreAtLeast('humansea', 10),
setup.qres.IreAtLeast('elf', 10),
setup.qres.IreAtLeast('neko', 10)
]),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_noble_pardon">><<run new setup.Event(
'painting_of_your_company', /* key */
"Painting of Your Company", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_painting_of_your_company',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_artist, setup.trait.join_senior], true),
],
'slaver2': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
'slaver3': [
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
},
[ /* outcomes */
setup.qc.Item(setup.item.f_wall_good_slaver),
setup.qc.BoonizeRandom('slaver', 5),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.museum),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> slaver|have been with you for a long time now, and you know <<therace $g.slaver>> to be a good painter.
Ever since you've built the <<rep setup.buildingtemplate.museum>>, <<they $g.slaver>> slaver|have often be seen spending <<their $g.slaver>> free time inside, doing something you're not sure what exactly it is.
</p>
<p>
Today, you finally know what <<theslaver $g.slaver>> slaver|have been doing all the time inside: apparently drawing. The slaver
<<if $g.slaver.isHasTrait('per_proud')>>
pridefully
<<else>>
humbly
<</if>>
slaver|present the finished painting to you. It is a beautiful painting of your company, including many slavers within. You can see a drawing of
<<yourrep $g.slaver2>> <<uhobbyverb $g.slaver2>>, and also
<<yourrep $g.slaver3>> standing next to <<them $g.slaver2>>.
In the middle of the painting, there is a <<uadjphys $g.you>> <<man $g.you>> — a painting of your own liking.
Some of your favorite slaves are also drawn in the painting. Overall, the painting is a fitting one for a slaving company such as yourself, and <<yourrep $g.slaver>> slaver|have gifted the painting to you, to do with as you see fit.
</p><<run new setup.Event(
'pilgrim_visit', /* key */
"Pilgrim Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_pilgrim_visit',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'pilgrim': 'subrace_humansea',
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.temple),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Your fort hosts a rather grand <<rep setup.buildingtemplate.temple>> that attracts visitors from near and far. One such visitors came from the <<lore region_sea>>, and, suitable impressed with your temple, would like to give something back in return. To your dismay, the pilgrim is poor and is lacking in money, but <<they $g.pilgrim>> pilgrim|is wise and knowledgeable in the southern arts of blessings. This could be a rare opportunity for you to personally ask for a blessing.
</p>
<<choose>>
<<opt "Something to protect my body">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete. You do feel a little more
robust now, and the next time injury you would suffer is going to be protected by your new blessing.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_protection8).apply($gQuest)>>
<<opt "Something to protect my spirit">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete. You do feel different now, the world looks seemingly clearer to you. The next time you would get traumatized, it would be prevented by your new blessing.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_sanity8).apply($gQuest)>>
<<opt "Something to protect my soul">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete. You do feel a little more
pure now, and the next time you would become corrupted, it would be prevented by the blessing.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_purity8).apply($gQuest)>>
<<opt "Something to protect my life">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete. You don't really feel any different,
but the blessing has been bestowed.
The next time something terrible would befall you, the blessing would do its work and save your life.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_life8).apply($gQuest)>>
<<opt "Something to protect my money">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete. You feel a little luckier now, and the next time a disastrous result would hit your company, it may be prevented by your new blessing.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_luck8).apply($gQuest)>>
<<opt "Something to protect my ass">>
<p>
After a whooshing and gestures of hand that are entirely unusual to you, the blessing was complete.
Your ass twitches, as the blessing seeps into your butt, protecting
<<if $unit.player.isHasVagina()>>
both your holes
<<else>>
your anus
<</if>>
from overly large invaders.
</p>
<<run setup.qc.Blessing('you', 1, setup.trait.blessing_virginity8).apply($gQuest)>>
<</choose>><<run new setup.Event(
'priest_blessing', /* key */
"Priest Blessing", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_priest_blessing',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_priest], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.temple),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Even after becoming a slaver, the former priest <<rep $g.slaver>> can still often be found praying inside the <<rep setup.buildingtemplate.temple>>.
<<if $g.slaver.isHasTrait('per_evil')>>
Judging from the eldritch-like chants, however, you've little doubt of what kind of prayer the evil slaver immerse <<themself $g.slaver>> in.
<<else>>
The slaver almost look serene inside the temple, praying to whatever deity <<they $g.slaver>> chose to believe in<<if $g.slaver.isHasTrait('per_aggressive')>>,
a complete turn from <<their $g.slaver>> usually aggressive self.
<<elseif $g.slaver.isHasTrait('per_active')>>,
a complete turn from <<their $g.slaver>> usually hyper-active self.
<</if>>.
<</if>>
Some of your other slavers like to ask the slaver for <<their $g.slaver>>
<<if $g.slaver.isHasTrait('per_evil')>>
dark
<</if>>
blessing, and perhaps you could ask for one today.
</p>
<<choose>>
<<opt "Ask for a blessing">>
<p>
When you ask for a blessing, <<rep $g.slaver>>
<<if $g.slaver.isHasTrait('per_evil')>>
slaver|cackle evilly before chanting an eldritch blessing onto you. Instead of feeling good and empowered, you feel feebled instead, as if a curse has been bestowed upon you. <<Therace $g.slaver>>, on the other hand, certainly look much better than before. You have the suspicion that the evil slaver had just cast the blessing unto <<themself $g.slaver>>, while using you as the payment to <<their $g.slaver>> dark deity. Well, it's your own fault for asking a dark priest for a blessing.
<<run setup.qc.Blessing('you', 1, null, true).apply($gQuest)>>
<<run setup.qc.Blessing('slaver', 2).apply($gQuest)>>
<<else>>
slaver|smile gently, before patting you on the shoulder and saying soothing words into your ears. The words have power, and soon you feel better than ever. At the end of the small ritual, you feel you can take on the world, but it will wait until you've thanked <<therace $g.slaver>>.
<<run setup.qc.Blessing('you', 1).apply($gQuest)>>
<</if>>
</p>
<<opt "Denounce <<their $g.slaver>> faith">>
<p>
Instead of asking for a blessing, you've have enough of <<their $g.slaver>> so-called "faith" and finally decide to denounce them. A short theological debate ensues after, filled with many curse words, before the two of you parting bitterly from the experience.
</p>
<<run setup.qc.FriendshipWithYou('slaver', -200).apply($gQuest)>>
<</choose>><<run new setup.UnitGroup(
"raider_instincts0",
"Vale Farmer",
'subrace_humanvale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_farmer),
],
)>>
<<run new setup.Event(
'raider_instincts', /* key */
"Raider Instincts", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_raider_instincts',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_raider, setup.trait.bg_thug], true),
],
'slave': 'raider_instincts0',
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.scouttower),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Before joining your company, <<yourrep $g.slaver>> slaver|live as a lowlife,
<<if $g.slaver.isHasTrait('bg_raider')>>
raiding other people as a living.
<<else>>
roughly up other people as a thug.
<</if>>
Their skills have been quite handy being a slaver right now, but you've never noticed how handy they are until today.
<<Therace $g.slaver>> slaver|have apparently spotted from the <<rep setup.buildingtemplate.scouttower>>, a newly established farmstead just a few distance away from your fort, ripe for
<<if $g.slaver.isHasTrait('bg_raider')>>
pillaging.
<<else>>
extorting.
<</if>>
</p>
<<choose>>
<<optif $g.slaver.isHasTrait('bg_raider')>>
<<opt "Pillage it and kidnap its inhabitants">>
<p>
The farmers are quite oblivious to the dangers of the land, and have no idea that they were so close to the headquarters of a slaving company. Your
former raider makes quick work of the defenseless farmstead, pillaging things of value and kidnapping the farmer's sole <<son $g.slave>>. While <<therace $g.slaver>> slaver|get to keep the valuables, the slave is your share of the loot.
</p>
<p>
Pillaging an innocent farmstead so close to your fort is sure going to damage your reputation with the <<rep $company.humanvale>>, however.
</p>
<<run setup.qc.Slave('slave').apply($gQuest)>>
<<run setup.qc.Ire('humanvale', 2).apply($gQuest)>>
<<optif $g.slaver.isHasTrait('bg_thug')>>
<<opt "Extort them">>
<p>
The farmers are quite oblivious to the dangers of the land, and have no idea that they were so close to the headquarters of a slaving company. Hence, your former thug is doing them a favor by paying them a visit, and "educates" them on the dangers of the land. The sizable sum of money the "grateful" farmers pay generously is no doubt far less than what could have happened to them otherwise.
</p>
<<run setup.qc.Money(500).apply($gQuest)>>
<<opt "Warn the farmers of the dangers of the land">>
<p>
Not wanting to damage your reputation with the valefolks, you order <<yourrep $g.slaver>> not to do anything to the defenseless farmstead. Instead, you ask <<them $g.slaver>> to warn these honest folks of the dangers of the land. <<Yourrep $g.slaver>> slaver|is quite surprised by your sudden change of heart, but before <<they $g.slaver>> slaver|is able to rebuke your order, you tell them that you've spotted a
<<if $g.slave.isMale()>>
handsome lad
<<else>>
beautiful lass
<</if>>
working there that might "reward" <<them $g.slaver>> for <<their $g.slaver>> generosity.
<<Therace $g.slaver>>'s scowl immediately turn upside down, and heads to the farmstead with gusto.
</p>
<p>
When <<they $g.slaver>> slaver|return,
<<if $g.slaver.isHasTrait('per_chaste')>>
<<they $g.slaver>> slaver|blush furiously, embarrassed by
<<else>>
<<they $g.slaver>> slaver|have a dreamy face, no doubt thanks
<</if>>
the "rewards" given personally by the farmer's <<daughter $g.slave>>.
Your company's reputation increase slightly with the valefolks thanks to your actions.
</p>
<<run setup.qc.Favor('humanvale', 25).apply($gQuest)>>
<</choose>><<set _old_thres = 60>>
<<set _new_thres = 0.3>>
<<set _cooldown = 2 * setup.EVENT_DEFAULT_COOLDOWN>>
<<set _allcooldown = Math.round(0.5 * setup.EVENT_DEFAULT_COOLDOWN)>>
<<run new setup.Event(
'retired_fighter', /* key */
"Retired Fighter", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_fighter',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.combat, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.combat, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.traininggrounds),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_brawler', /* key */
"Retired Brawler", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_brawler',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.brawn, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.brawn, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.gym),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_scout', /* key */
"Retired Scout", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_scout',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.survival, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.survival, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.scouttower),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_thief', /* key */
"Retired Thief", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_thief',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.intrigue, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.intrigue, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.market),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_slaver', /* key */
"Retired Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.slaving, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.slaving, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.trainingchamber),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_scholar', /* key */
"Retired Scholar", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_scholar',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.knowledge, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.knowledge, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.library),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_trader', /* key */
"Retired Trader", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_trader',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.social, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.social, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.market),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_healer', /* key */
"Retired Healer", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_healer',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.aid, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.aid, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.hospital),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_wizard', /* key */
"Retired Wizard", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_wizard',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.arcane, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.arcane, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.library),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>>
<<run new setup.Event(
'retired_whore', /* key */
"Retired Whore", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retired_whore',
{ /* roles (LEGACY) */
},
{ /* actors */
'old': [
setup.qres.Job(setup.job.retired),
setup.qres.SkillAtLeast(setup.skill.sex, _old_thres),
],
'new': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.join_junior], true),
setup.qres.SkillModifierAtLeast(setup.skill.sex, _new_thres),
],
},
[ /* outcomes */
setup.qc.VarSet('event_retired_training', '1', _allcooldown),
],
[ /* restrictions */
setup.qres.VarNull('event_retired_training'),
setup.qres.Building(setup.buildingtemplate.recreationwing),
],
_cooldown, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<capture _skill, _fighter, _fighting, _sparring, _building>>
<p>
<<Rep $g.old>> used to be one of your slavers, but <<they $g.old>> had retired from slaving and is now
mostly busy
<<if $g.old.isRetired()>>
<<= $g.old.getLiving().repBusiness($g.old)>>.
<<= setup.DOM.Card.livingvisitdescription($g.old, $g.old.getLiving())>>
<</if>>
And today, <<they $g.old>> has decided to visit your quaint little fort.
</p>
<p>
As you recall, <<they $g.old>> used to be one of the better <<= _fighter>>s under your employ, and although a little rusty, <<they $g.old>> is still better than most other <<urace $g.old>> at <<= _fighting>>.
When looking around your new recruits, <<they $g.old>> saw a potential <<= _fighter>> among your new recruits, <<rep $g.new>>. <<Rep $g.old>> old|is <<uadv $g.old>> offering to train <<rep $g.new>> for a while, and making <<them $g.new>> grow somewhat closer to mastering the art of <<name _skill>>.
</p>
<<choose>>
<<opt "Give <<them $g.old>> your blessings">>
<p>
The two of them spend the day <<= _sparring>> in your <<rep _building>>. By the end of the day, <<rep $g.new>> has learned a useful trick or two about <<= _fighting>>.
</p>
<<run setup.qc.SkillBoost('new', _skill).apply($gQuest)>>
<<opt "You have other plans for <<name $g.new>>">>
<p>
<<They $g.old>> looks slightly dejected at your refusal, but understands. Instead, <<they $g.old>> just <<uadv $g.old>> share <<their $g.old>> many experiences with the recruit, which should help <<them $g.new>> mature a little.
</p>
<<run setup.qc.ExpUnit('new', 1).apply($gQuest)>>
<</choose>>
<</capture>><<set _skill = setup.skill.combat>>
<<set _fighter = 'fighter'>>
<<set _fighting = 'fighting other people'>>
<<set _sparring = 'sparring with each other'>>
<<set _building = setup.buildingtemplate.traininggrounds>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.brawn>>
<<set _fighter = 'brawler'>>
<<set _fighting = 'brawling'>>
<<set _sparring = 'brawling with each other'>>
<<set _building = setup.buildingtemplate.gym>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.survival>>
<<set _fighter = 'scout'>>
<<set _fighting = 'scouting for leads'>>
<<set _sparring = 'keeping watch from atop the tower'>>
<<set _building = setup.buildingtemplate.scouttower>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.intrigue >>
<<set _fighter = 'thief'>>
<<set _fighting = 'sneaking without being detected'>>
<<set _sparring = 'skulking around the market'>>
<<set _building = setup.buildingtemplate.market>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.slaving >>
<<set _fighter = 'slaver'>>
<<set _fighting = 'breaking slaves'>>
<<set _sparring = "breaking a slave's will">>
<<set _building = setup.buildingtemplate.trainingchamber>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.knowledge >>
<<set _fighter = 'scholar'>>
<<set _fighting = 'learning new knowledge'>>
<<set _sparring = "browsing through the library's books">>
<<set _building = setup.buildingtemplate.library>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.social >>
<<set _fighter = 'trader'>>
<<set _fighting = 'making profit'>>
<<set _sparring = 'browsing through the market wares'>>
<<set _building = setup.buildingtemplate.market>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.aid >>
<<set _fighter = 'healer'>>
<<set _fighting = 'healing the wounded'>>
<<set _sparring = 'practicing closing wounds'>>
<<set _building = setup.buildingtemplate.hospital>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.arcane >>
<<set _fighter = 'wizard'>>
<<set _fighting = 'casting destructive spells'>>
<<set _sparring = 'chanting difficult spells'>>
<<set _building = setup.buildingtemplate.library>>
<<include 'Event_retiredCommon'>><<set _skill = setup.skill.sex >>
<<set _fighter = 'whore'>>
<<set _fighting = 'seducing others'>>
<<set _sparring = 'attracting passerbies to their bodies'>>
<<set _building = setup.buildingtemplate.recreationwing>>
<<include 'Event_retiredCommon'>><<run new setup.Event(
'rivals', /* key */
"Rivals", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_rivals',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.BestFriendFriendshipAtMost(-500),
setup.qres.RememberUnit(),
],
'bf': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.BestFriendWithRememberedUnit(),
setup.qres.NoTraits([setup.trait.join_junior], true),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.moraleoffice),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<set _diff = setup.Unit.getAnyConflictingPerTraits($g.slaver, $g.bf)>>
<p>
Teamwork between your slavers is essential in this kind of slaving work, as they will often need to cooperate during a mission together. While some of your slavers have grown fond of each other and become friends, some others develop rivalries instead. <<Yourrep $g.slaver>>'s relationship with <<utheirrel $g.slaver $g.bf>> <<rep $g.bf>> is one of them, and
<<if _diff>>
it is quite clear why the two dislikes each other.
<<Rep $g.slaver>> slaver|is quite the <<= _diff[0].repAdjective()>> <<urace $g.slaver>>, and <<they $g.slaver>> greatly slaver|dislike <<reps $g.bf>>
excessive <<= _diff[1].repNounBad()>>.
<<else>>
it is unclear why they dislike each other, but they just do.
<</if>>
</p>
<<choose>>
<<opt "Rivalry is good">>
<<set _diff = setup.Unit.getAnyConflictingPerTraits($g.slaver, $g.bf)>>
<p>
Rivalry has its own benefits, as a good rival motivates the other, making each of them work harder as a result.
With this in mind, you spend the next few days goading the two and heighten their rivalry.
<<if _diff>>
Whenever <<rep $g.slaver>> slaver|show <<their $g.slaver>> <<= _diff[0].getName()>> side, you draw <<reps $g.bf>> attention to the act.
You also arrange their schedules so that <<rep $g.slaver>> would stumble across when <<rep $g.bf>> is busy
<<= setup.Text.Hobby.verb($g.bf, _diff[1])>>.
<</if>>
After a couple of days, the rivalry between the two has visibly intensified.
</p>
<<run setup.qc.Friendship('slaver', 'bf', -100).apply($gQuest)>>
<<opt "Try to reconcile them">>
<<set _diff = setup.Unit.getAnyConflictingPerTraits($g.slaver, $g.bf)>>
<<set _same = setup.Unit.getAnySamePerTraits($g.slaver, $g.bf)>>
<<if !_same>>
<p>
Despite your best efforts, <<rep $g.slaver>> and <<utheirrel $g.slaver $g.bf>> <<rep $g.bf>> did not visibly get along better with each other. The two are simply too different, sharing no common interest in all their hobbies. After a few days of trying, you have to give up trying to reconcile the two.
</p>
<<else>>
<<set _hobby = setup.Text.Hobby.verb($g.bf, _same)>>
<p>
It's not easy to reconcile the two slavers, given their very differing opinions on each other. Your breakthrough comes when you noted that the two share a common interest in <<= _hobby>>.
After that, you give the two slavers some free time where they can go <<= _hobby>> together.
The two slavers seemingly reconciled, thanks to their shared interest in the hobby. When they returned to your fort, they have decided to try and put aside their differences, and begin their relationship anew.
</p>
<<run setup.qc.Friendship('slaver', 'bf', 'reset').apply($gQuest)>>
<</if>>
<</choose>><<run new setup.Event(
'slave_recapture', /* key */
"Slave Recapture", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_slave_recapture',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_hunter, setup.trait.bg_wildman, setup.trait.bg_woodsman], true),
],
'slave': 'missingslaves',
},
[ /* outcomes */
setup.qc.Slave('slave', "", undefined),
],
[ /* restrictions */
setup.qres.UnitGroupHasUnit('missingslaves'),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> slaver|hail from the woods, where <<they $g.slaver>> used to spend most of <<their $g.slaver>> time in.
<<if $g.slaver.isHasTrait('bg_wildman')>>
As a wildman, <<they $g.slaver>> subsisted almost entirely by foraging the forests, living off the wildlife and fruit abundantly found within.
<<elseif $g.slaver.isHasTrait('bg_hunter')>>
As a hunter, <<they $g.slaver>> slaver|was used to scouring for wild game inside the vast forests.
<<else>>
As a woods<<man $g.slaver>>, <<they $g.slaver>> slaver|was used through scouring the forest for a living.
<</if>>
From time to time, <<therace $g.slaver>> can be seen spending a week venturing into the forests to relax and relive <<their $g.slaver>> past.
</p>
<p>
It turns out having such a slaver has its own considerably benefit.
Some time ago, <<they $g.slaver>> again slaver|venture into the forests, but this time return with a rather sizable catch. <<Rep $g.slave>> — your former slave — was found within the vast forests, and the
<<if $g.slaver.isHasTrait('per_attentive')>>
sharp-eyed
<</if>>
slaver made sure the slave did not escape this time.
The slave is now waiting fully bound in the <<rep setup.buildingtemplate.slavepens>>, awaiting <<their $g.slave>> punishment for escaping from the cruel clutches of your fort.
Looking at <<their $g.slaver>> handiwork, <<yourrep $g.slaver>>
<<if $g.slaver.isHasTrait('per_frugal')>>
slaver|rub <<their $g.slaver>> <<uhands $g.slaver>> together in front of you, no doubt demanding payment for <<their $g.slaver>> services. You almost forgot the slaver is a greedy little <<urace $g.slaver>>...
<<run setup.qc.Money(-1000).apply($gQuest)>>
<<elseif $g.slaver.isHasTrait('per_lavish')>>
slaver|grin <<uadv $g.slaver>>, feeling a little more confident from <<their $g.slaver>> pastime.
<</if>>
</p><<run new setup.Event(
'special_cake', /* key */
"Special Cake", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_special_cake',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_foodworker], true),
setup.qres.NoTraits([setup.trait.per_chaste], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.balls_large, setup.trait.balls_huge, setup.trait.balls_titanic, setup.trait.breast_large, setup.trait.breast_huge, setup.trait.breast_titanic], true),
setup.qres.Available(),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.grandhall),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
For today's dinner, <<yourrep $g.slaver>> slaver|have whipped up a surprise dessert: a cake, complete with delicious-looking frostings! Everyone in your company cheers at the delicious-looking dessert, and <<rep $g.slaver>>
<<if $g.slaver.isHasTrait('per_proud')>>
slaver|beam proudly.
<<elseif $g.slaver.isHasTrait('per_humble')>>
slaver|is quite humbled by the reception.
<<else>>
slaver|grin happily at the reception.
<</if>>
Before long, your other slavers are almost rioting trying to get a slice of the cake before it inevitably run out.
</p>
<<choose>>
<<opt "Try to get some too">>
<p>
Not wanting to lose out on free cake,
you roll up your sleeves and rush into the fray. It was a chaotic affair, with everyone trying to get a slice of the rare dessert, but you managed to get yourself a nice plateful of it. And the cake does not disappoint. The base is already delicious, but it's the topping that brings it to the next level.
<<if $g.slave.isHasTrait('balls_large')>>
The combination of sweetness, sourness, and a slight taste of saltiness is
<<else>>
The combination of sweetness with a tint of sourness is
<</if>>
otherworldly, to put in words.
Your other slavers agree too, and all of you shower <<rep $g.slaver>> with praises.
In the coming days, <<therace $g.slaver>> slaver|look quite uplifted by the cake's reception, and <<their $g.slaver>> overall mood increase.
</p>
<p>
In the same night, one of your slaves <<rep $g.slave>> slave|was injured from too much abuse inflicted upon <<their $g.slave>>
<<if $g.slave.isHasTrait('balls_large')>>
dick,
<<else>>
breasts,
<</if>>
surely a coincidence and nothing more.
</p>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<<run setup.qc.Injury('slave', 1).apply($gQuest)>>
<<opt "Sit back and compliment the chef instead">>
<p>
Deciding your slavers would enjoy it more than you, you simply sit back and relax, while approaching the chef personally. You thank <<therace $g.slaver>> for the kind gesture, but for some reason <<therace $g.slaver>> seems to avert <<their $g.slaver>> gaze from you as if hiding something. Only then you notice that one of your slaves, <<rep $g.slave>>, slave|is tied up in the kitchen, naked and seemingly completely exhausted.
<<if $g.slave.isHasTrait('balls_large')>>
<<Their $g.slave>> <<udick $g.slave>> is more flaccid than normal, the balls seemingly completely emptied.
<<else>>
<<Their $g.slave>> <<ubreasts $g.slave>> are more soggy than normal, seemingly completely drained of its content.
<</if>>
Turning your head to <<rep $g.slaver>>, <<therace $g.slaver>>
<<if $g.slaver.isHasTrait('per_sly')>>
acts completely normal, as if nothing was wrong, and the only hint you get is the slight wink from the sly slaver.
<<else>>
looks sideways, whistling along pretending nothing had happened in the kitchen.
<</if>>
</p>
<p>
Despite the questionable ingredients, your slavers seem to greatly enjoy the treat, and everybody's moods improve as a result. You decided that the benefits outweigh the "costs", and decide to let it slip by.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 50).apply($gQuest)>>
<<run setup.qc.Injury('slave', 1).apply($gQuest)>>
<</choose>><<run new setup.UnitGroup(
"thief_benefits0",
"Thief",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_thief),
],
)>>
<<run new setup.Event(
'thief_benefits', /* key */
"Thief Benefits", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_thief_benefits',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_thief], true),
],
'thief': 'thief_benefits0',
},
[ /* outcomes */
setup.qc.Slave('thief', "a|was a thief who tried to steal from your market, but a|was deftly caught by a former thief in your employ", undefined),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.market),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
It has been several months since <<yourrep $g.slaver>> joined your company, and the former thief has been quite a boon to your business.
<<They $g.slaver>> slaver|have nimble fingers, and
<<if $g.thief.isHasTrait('per_smart')>>
paired with <<their $g.slaver>> intellect,
<<elseif $g.thief.isHasTrait('face_attractive')>>
paired with <<their $g.slaver>> good-looking face,
<<elseif $g.thief.isHasTrait('muscle_strong')>>
paired with <<their $g.slaver>> strength,
<<elseif $g.thief.isHasTrait('tough_nimble')>>
paired with <<their $g.slaver>> nimble limbs,
<<else>>
paired with <<their $g.slaver>> experience,
<</if>>
<<they $g.slaver>> slaver|is able to rob people blind in the middle of the day.
But that's not the only benefit to having <<therace $g.slaver>> around.
</p>
<p>
Today, <<rep $g.slaver>> slaver|have apparently caught a thief trying to steal from your <<rep setup.buildingtemplate.market>>. As a fellow thief, <<yourrep $g.slaver>> is quite familiar with the mindset of other thieves, and can easily see if an attempt was about to be made, which explains the capture. Nobody will miss a thief, so you've decided to introduce <<therace $g.thief>> to <<their $g.thief>> new occupation as your slave.
</p>
<p>
It sure is good having <<rep $g.slaver>> around.
</p><<run new setup.Event(
'trader_booth', /* key */
"Trader Booth", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_trader_booth',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_merchant], true),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.breast_huge, setup.trait.breast_titanic, setup.trait.balls_huge, setup.trait.balls_titanic], true),
setup.qres.Available(),
],
},
[ /* outcomes */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.market),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
About this time of the day, <<yourrep $g.slaver>> can usually be found
<<uhobbyverb $g.slaver>>. However, today <<they $g.slaver>> slaver|is not in
<<their $g.slaver>> usual spot. Instead, you spot the ex-merchant opening up
a small booth in your <<rep setup.buildingtemplate.market>>.
</p>
<p>
Coming over, you see that <<therace $g.slaver>> is opening up a one-day-only booth, selling a "specialty product" of your company with a steep discount: the slave <<rep $g.slave>> is fully bound and placed on the table, while
<<if $g.slave.isHasTrait('breast_huge')>>
the nipples on <<their $g.slave>> milky breasts are attached to some sort of suction pipe, which ends in
<<else>>
some sort of pip is attached deep inside <<their $g.slave>> urethra, and ending in
<</if>>
a box with a tap.
</p>
<p>
As you recall, <<rep $g.slaver>> used to be a merchant before joining your company, and it seems <<therace $g.slaver>> sees the potential profit in your particularly well-endowed <<urace $g.slave>> slave. Seeing you approach, <<they $g.slaver>>
<<if $g.slaver.getSpeech() == setup.speech.friendly>>
give you a friendly smile and asks if you'd like to try some of the product first.
<<elseif $g.slaver.getSpeech() == setup.speech.bold>>
almost screams to greet you and ask you to come and try the product.
<<elseif $g.slaver.getSpeech() == setup.speech.cool>>
gives you a stoic nod, before inviting you to come and sample the product.
<<elseif $g.slaver.getSpeech() == setup.speech.witty>>
points invitingly at the slave's
<<if $g.slave.isHasTrait('breast_huge')>>
tits.
<<else>>
balls.
<</if>>
<<elseif $g.slaver.getSpeech() == setup.speech.debauched>>
slaps the slave's exposed ass cheeks, before asking you to come over and sample the produce of the well-abused slave.
<</if>>
</p>
<<choose>>
<<opt "Sample it">>
<p>
When you said yes, <<therace $g.slaver>> <<uadv $g.slaver>> grins and takes
a large dildo from under the booth table. The slave's eyes' widen at its
size, and your slaver unceremoniously shove it up inside the slave's anus
while simultaneously stimulating <<their $g.slave>> <<ugenital $g.slave>>.
Before long, you can see the slave climaxing, and at the same time, a steady stream of
<<if $g.slave.isHasTrait('breast_huge')>>
milk
<<else>>
cum
<</if>>
pours from the tap and into the glass below.
The
<<if $g.slave.isHasTrait('breast_huge')>>
gigantic tits aren't just for show, and it produces a glass of milk effortlessly.
<<else>>
gigantic balls aren't just for show, and it produces a pint of cum effortlessly.
<</if>>
Other visitors near the <<rep setup.buildingtemplate.market>> see the demonstration and become quite interested in the booth. Soon, many people visit to the impromptu booth, and by the end of the day, <<yourrep $g.slaver>> looks quite satisfied with <<themself $g.slaver>>, having cashed in quite a bit of money from the fully-drained slave.
</p>
<<run setup.qc.BoonizeRandom('slaver', 5).apply($gQuest)>>
<<opt "Help with the booth">>
<p>
With a different goal in mind, you order for a
<<if $g.slave.isHasTrait('breast_huge')>>
glass of milk.
<<else>>
pint of cum.
<</if>>
<<Therace $g.slaver>> grins <<uadv $g.slaver>> and takes a large dildo from under the booth table. The slave's eyes' widen at its size, and your slaver unceremoniously shove it up inside the slave's anus while simultaneously stimulating <<their $g.slave>> <<ugenital $g.slave>> Before long, you can see the slave climaxing, and at the same time, stream of
<<if $g.slave.isHasDick()>>
cum
<<else>>
milk
<</if>>
pours from the tap and into the glass below.
The
<<if $g.slave.isHasTrait('breast_huge')>>
gigantic tits aren't just for show, and it produces a glass of milk effortlessly.
<<else>>
gigantic balls aren't just for show, and it produces a pint of cum effortlessly.
<</if>>
</p>
<p>
Instead of tasting it, however, you walk around the busy <<rep setup.buildingtemplate.market>> and offer the sample to other visitors around. Intrigued by the taste, many decide to come to the impromptu booth, and the booth makes quite a lot of profit by abusing <<rep $g.slave>> that day, forcing the slave to
<<if $g.slave.isHasTrait('breast_huge')>>
lactate painfully
<<else>>
cum painfully
<</if>>
over and over again.
By the end of the day, the slave is on the brink of losing consciousness, but you and <<yourrep $g.slaver>> make quite a large profit from selling the goods.
</p>
<<run setup.qc.Money(800).apply($gQuest)>>
<</choose>><<run new setup.Event(
'vacation_over', /* key */
"Vacation Over", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_vacation_over',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
],
'them': [
],
},
[ /* outcomes */
setup.qc.BoonizeRandom('you', 20),
setup.qc.Return('you'),
setup.qc.Return('them'),
],
[ /* restrictions */
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
After five full weeks, you feel refreshed and ready to go back to your work.
But that's not all! In your absence, <<yourrep $g.them>> also
<<if $gQuest.getSeed() % 3 == 0>>
made a lot of money out of seasonal contracts.
<<run setup.qc.Money(5000).apply($gQuest)>>
<<elseif $gQuest.getSeed() % 3 == 1>>
found a particularly rare potion.
<<run setup.qc.Item(setup.item.potion_luck).apply($gQuest)>>
<<elseif $gQuest.getSeed() % 3 == 2>>
smoothed things out with the <<rep $g.them.getHomeCompany()>>.
<<run setup.qc.Favor($g.them.getHomeCompany(), 250).apply($gQuest)>>
<</if>>
All in all, it was a good five weeks for you, and you are quite eager to return back to your company, after thanking the experienced <<rep $g.them>> for <<their $g.them>> help, of course.
</p><<run new setup.Event(
'veteran_slaver', /* key */
"Veteran Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_veteran_slaver',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_slaver], true),
],
'slave': [
setup.qres.AllTraits([setup.trait.job_slave, setup.trait.training_none], true),
setup.qres.NotBusy(),
],
},
[ /* outcomes */
setup.qc.Opportunity('veteran_slaver', {
slaver: "slaver",
you: "you",
slave: "slave",
}),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.trainingchamber),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><<include "Opportunity_veteran_slaver">><<run new setup.Event(
'wandering_nomad', /* key */
"Wandering Nomad", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_wandering_nomad',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AllTraits([setup.trait.bg_nomad], true),
],
},
[ /* outcomes */
setup.qc.BoonizeRandom('slaver', 5),
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.subrace_humandesert, setup.trait.race_greenskin], true)),
setup.qc.DoAll([
setup.qc.QuestDelay(setup.questpool.desert, 2)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.subrace_humanvale, setup.trait.race_wolfkin], true)),
setup.qc.DoAll([
setup.qc.QuestDelay(setup.questpool.vale, 4)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.race_elf, setup.trait.race_catkin], true)),
setup.qc.DoAll([
setup.qc.QuestDelay(setup.questpool.forest, 3)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.race_demon, setup.trait.race_lizardkin, setup.trait.subrace_humansea], true)),
setup.qc.DoAll([
setup.qc.QuestDelay(setup.questpool.sea, 1)
], undefined),
setup.qc.DoAll([
setup.qc.QuestDelay(setup.questpool.city, 3)
], undefined))
], undefined))
], undefined))
], undefined)),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.scoutharbor),
setup.qres.Building(setup.buildingtemplate.scoutcarriage),
setup.qres.Building(setup.buildingtemplate.scoutoffice),
setup.qres.Building(setup.buildingtemplate.scouttower),
setup.qres.Building(setup.buildingtemplate.scouthut),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
<<Yourrep $g.slaver>> often slaver|leave the comfort of the fort during <<their $g.slaver>> free times. Nomad blood runs thick in <<therace $g.slaver>>, and <<they $g.slaver>> often slaver|have the urge to simply go out and explore.
<<They $g.slaver>>
<<if $g.slaver.isHasTrait('race_greenskin')
or
$g.slaver.isHasTrait('subrace_humandesert')
>>
often slaver|venture eastwards, towards the great dunes <<they $g.slaver>> once called home.
<<elseif $g.slaver.isHasTrait('subrace_humanvale')
or
$g.slaver.isHasTrait('race_wolfkin')>>
often slaver|venture northwards, towards the cold vales <<they $g.slaver>> once called home.
<<elseif $g.slaver.isHasTrait('race_elf') or $g.slaver.isHasTrait('race_catkin')>>
often slaver|venture westwards, towards the vast forests <<they $g.slaver>> once called home.
<<elseif $g.slaver.isHasTrait('race_lizardkin') or $g.slaver.isHasTrait('subrace_humansea')>>
often slaver|venture southwards, towards the oceans <<they $g.slaver>> once called home.
<<elseif $g.slaver.isHasTrait('race_demon')>>
travel haphazardly, as <<their $g.slaver>> demonic heritage means <<their $g.slaver>> original home lays in a land beyond the mortal plane.
<<elseif $g.slaver.isHasTrait('subrace_humankingdom')>>
often slaver|venture back into the <<lore region_city>>, whom <<they $g.slaver>> once called home.
<<else>>
often slaver|venture far, sometimes even reaching into the <<lore region_sea>>.
<</if>>
</p>
<p>
Today, <<rep $g.slaver>> slaver|have just returned from one such wandering, and slaver|come back with some bonus for you.
During <<their $g.slaver>> venture this time, <<they $g.slaver>> slaver|discover some quest leads in the
<<if $g.slaver.isHasTrait('race_greenskin')
or
$g.slaver.isHasTrait('subrace_humandesert')
>>
<<lore region_desert>>.
<<elseif $g.slaver.isHasTrait('subrace_humanvale')
or
$g.slaver.isHasTrait('race_wolfkin')>>
<<lore region_vale>>.
<<elseif $g.slaver.isHasTrait('race_elf')
or
$g.slaver.isHasTrait('race_catkin')>>
<<lore region_forest>>.
<<elseif $g.slaver.isHasTrait('race_lizardkin')
or $g.slaver.isHasTrait('subrace_humansea')
or
$g.slaver.isHasTrait('race_demon')>>
<<lore region_sea>>.
<<else>>
<<lore region_city>>.
<</if>>
Judging from <<their $g.slaver>> elated face, <<they $g.slaver>> probably found it when <<they $g.slaver>> patroned one of the
<<if $g.slaver.isHasTrait('per_lustful')>>
whorehouses of the region, no doubt also sampling some of the wenches offered.
<<elseif $g.slaver.isHasTrait('per_studious')>>
libraries, no doubt also perusing the vast trove of knowledge for their own studious gain.
<<elseif $g.slaver.isHasTrait('per_frugal')>>
markets, no doubt selling off some of the contraband <<they $g.slaver>> managed to hide from you.
<<elseif $g.slaver.isHasTrait('per_kind')>>
temples, no doubt feeling a bit better from all the atrocious acts <<they $g.slaver>> did as part of your company.
<<else>>
taverns, no doubt getting <<themself $g.slaver>> drunk to the point of uselessness.
<</if>>
The good mood will probably last a couple of weeks, and this might be an opportune time for you to assign <<them $g.slaver>> to a more difficult quest.
</p><<run new setup.Event(
'wise_words', /* key */
"Wise Words", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_wise_words',
{ /* roles (LEGACY) */
},
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
setup.qres.AnyTrait([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], true),
],
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Available(),
setup.qres.NoTraits([setup.trait.join_junior], true),
setup.qres.Home(),
setup.qres.AnyTrait([setup.trait.bg_monk, setup.trait.bg_wiseman], true),
],
},
[ /* outcomes */
setup.qc.TraumaHeal('you', 20),
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.moraleoffice),
],
setup.EVENT_DEFAULT_COOLDOWN, /* Cooldown */
setup.rarity.rare, /* Rarity */
)>><p>
Your mood has been quite sour in the recent weeks, and the future looks kinda bleak to you these few days. In fact, you
<<set _trait = $unit.player.getTraitWithTag('trauma')>>
<<if _trait>>
<<= setup.Text.Unit.Trait.description($unit.player, _trait)>> these days.
<</if>>
But you won't stop that from messing with your work, and as you recall,
<<yourrep $g.slaver>> slaver|have arranged to meet personally with you today.
</p>
<p>
To your surprise, <<they $g.slaver>> slaver|want to address the
<<if _trait>>
<<= setup.Text.Unit.Trait.noun($unit.player, _trait)>>
<</if>>
that slaver|have been plaguing you.
<<if $g.slaver.isHasTrait('per_evil')>>
You know the slaver is generally evil, but you're too tired to think about that and just hope that <<they $g.slaver>> slaver|have your best interest for now.
<<elseif $g.slaver.isHasTrait('per_lunatic')>>
You know the slaver is a lunatic, but you're too tired to think about that and just hope that <<they $g.slaver>> slaver|have your best interest for now.
<<elseif $g.slaver.isHasTrait('per_cruel')>>
You know the slaver is generally cruel, but you're too tired to think about that and just hope that <<they $g.slaver>> slaver|have your best interest for now.
<<else>>
Seeing no reason to mistrust the slaver, you tiredly sigh and just follow along with whatever <<they $g.slaver>> slaver|have planned for you.
<</if>>
<<They $g.slaver>> then gently guide you in a spiritual meditation, a discipline
the
<<if $g.slaver.isHasTrait('bg_monk')>>
ex-monk
<<else>>
wiseman
<</if>>
is very familiar with.
Initially, it is difficult for you to clean your thoughts, but <<theslaver $g.slaver>> keeps guiding you, almost hypnotically through the entire procedure.
</p>
<p>
Before you realize, you feel the burderns starting to lift from your shoulders. At the end of the procedure, you are fast asleep, and <<they $g.slaver>> slaver|decide to leave you be for today and leave your office. When you wake up sometime later, you feel refreshed, as if a great burden has been lifted from you.
</p>
<p>
<<if $g.slaver.isHasTrait('per_evil') or
$g.slaver.isHasTrait('per_lunatic') or
$g.slaver.isHasTrait('per_cruel')>>
You've noticed that your pockets are slightly lighter now — it seems the
<<if $g.slaver.isHasTrait('per_lunatic')>>
lunatic
<<elseif $g.slaver.isHasTrait('per_cruel')>>
cruel
<<else>>
evil
<</if>>
slaver has taken some of your money as payment for <<their $g.slaver>> services. But considering how effective it was, you'd gladly pay twice over for the same treatment anywhere else.
<<run setup.qc.Money(-1000).apply($gQuest)>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.never, /* Rarity */
)>><<include "Opportunity_at_what_cost">>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.never, /* Rarity */
)>><<include "Opportunity_equivalent_exchange">>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.common, /* Rarity */
)>><<include "Opportunity_flickering_flame">>/* PROOFREAD COMPLETE */
<<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 */
setup.rarity.always, /* Rarity */
)>><p>
You never realized how you and your <<urace $g.lover>> lover <<rep $g.lover>>
have grown distant over the past 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>> lover|come 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(
'retirement', /* key */
"Retirement", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_retirement',
{ /* roles (LEGACY) */
},
{ /* actors */
},
[ /* outcomes */
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
It's been quite a long while since you've started commanding this company. With the inauguration of the <<rep setup.buildingtemplate.veteranhall>>, the once decrepit fort is now a mighty fortress, fit for a slaving company such as yourself. Staring at the building reminds you of just how far you have come so far.
</p>
<p>
You never really consider it until now, but there is now an option for you to simply retire. After all, you know better than anyone the dangers of being in a slaving company, and it might just be in your best interest to retire while you're still healthy and has all limbs intact.
</p>
<p>
<<successtextlite 'Important:'>>
You can retire from the current company and start a <<successtext 'New Game+'>> from the bottom of the "Company" menu.
</p><<run new setup.Event(
'slavecoming', /* key */
"Slavecoming", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
],
'Event_slavecoming',
{ /* roles (LEGACY) */
},
{ /* actors */
'slave': 'new_game_plus_slaves',
},
[ /* outcomes */
setup.qc.Slave('slave', "", undefined),
setup.qc.IfThenElse(
setup.qres.UnitGroupHasUnit('new_game_plus_slaves'),
setup.qc.DoAll([
setup.qc.Event('slavecoming', 30, null)
], undefined),
setup.qc.DoAll([
], undefined)
),
],
[ /* restrictions */
],
0, /* Cooldown */
setup.rarity.never, /* Rarity */
)>><p>
Today, you receive a large shipment of crate delivered straight into your fort.
Curious, you decided to open the crate personally, and inside you found a slave tied and all ready for <<their $g.slave>> new home in the dungeons of your fort.
</p>
<<if $unit.player.isHasTitle('ex_leader')>>
<p>
You recognize the slave — it's the slave you've taken with you from your previous company and whom you have stored away safely until now. With the <<rep setup.buildingtemplate.veteranhall>> built, there was no more reason to keep <<them $g.slave>> a secret. You take the slave's leash by <<uhand $unit.player>> and <<uadv $unit.player>> guide <<them $g.slave>> to <<their $g.slave>> new living arrangements.
</p>
<<else>>
<p>
You do not recognize the slave, but you're not going to turn away a free gift such as this!
</p>
<<set _unit = setup.getUnit({title: 'ex_leader'})>>
<<if _unit>>
<p>
Meanwhile, <<yourrep _unit>> smirked at seeing the familiar slave once more, no doubt planning to enjoy the slave in a cruel remembrance of <<their _unit>> pastbringing...
</p>
<</if>>
<</if>><<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'])>>
<<run new setup.FamilyRelation('sister', 'sister', ['sibling'])>>
<<run new setup.FamilyRelation('twinbrother', 'twin brother', ['twin', 'sibling'])>>
<<run new setup.FamilyRelation('twinsister', 'twin sister', ['twin', 'sibling'])>>
<<run new setup.FamilyRelation('father', 'father', ['parent'])>>
<<run new setup.FamilyRelation('mother', 'mother', ['parent'])>>
<<run new setup.FamilyRelation('son', 'son', ['child'])>>
<<run new setup.FamilyRelation('daughter', 'daughter', ['child'])>><<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'],
{},
{ /* texts */
bedchamber: "It's probably better for their health if you give them something better to drink from.",
}
)>>
<<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,
},
{ /* texts */
ambience: [
"the small amount of water left in the a|rep ripples from the wind",
],
bedchamber: "They have to go on all fours to lap up the water from the bowl.",
},
)>>
<<run new setup.Furniture(
'f_drinktray_good',
'[UNOBTAINABLE] 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,
},
{ /* texts */
ambience: [
"the small amount of water left in the a|rep ripples from the wind",
],
bedchamber: "They have to go on all fours to lap up the water from the bowl.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the luxurious a|rep makes for an odd backdrop for the upcoming sex",
],
bedchamber: "The luxurious chalice is placed on the floor, forcing the slaves to crawl on all four to lap the water from the chalice.",
},
)>>
<<run new setup.Furniture(
'f_drinktray_good_slaver',
'"guard dog" drink tray',
'A purple-colord drink tray decorated with spikes, fitting for a guard dog in demonic realms',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.drinktray,
['good'],
{
slaving: 1,
social: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
"a small amount of water can be seen wasting inside the a|rep"
],
bedchamber: "The slaves have to go on all fours to lap up their drink from the tray, careful not to touch any of its sharp spikes.",
},
)>>
<<run new setup.Furniture(
'f_drinktray_normal_pitfight',
"charity bowl",
"A small bowl you can place in front of you in the hopes that others will take pity and toss you a coin or two",
/* value = */ 100,
setup.furnitureslot.drinktray,
['normal'],
{
social: setup.FURNITURE_SKILL_NORMAL,
aid: 1,
},
{ /* texts */
ambience: [
"The mis-used charity bowl can be seen in the room, filled with water instead of with donations",
],
bedchamber: "The slaves are used to going down on all fours to lap up their drink from the charity bowl. Sometimes other things are generously put inside it too to spice up the taste",
},
)>><<run new setup.Furniture(
'f_foodtray_none',
'floor',
'Eat from the floor',
/* value = */ 0,
setup.furnitureslot.foodtray,
['basic'],
{},
{ /* texts */
bedchamber: "Perhaps you can find a more proper place for the slaves to eat.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the remains of food in the a|rep is blown away by the wind",
],
bedchamber: "Some of your slavers find it cute to watch slaves eating from their doggy bowls.",
},
)>>
<<run new setup.Furniture(
'f_foodtray_good',
'[UNOBTAINABLE] 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,
},
{ /* texts */
ambience: [
"the remains of food in the a|rep is blown away by the wind",
],
bedchamber: "The slaves are taught to slurp whatever food is in their bowl clean lest they face punishment.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep glows purple out of the sudden, before returning to its usual decrepit-looking color",
],
bedchamber: "The wooden bowl looks old and decrepit, making it only slightly better for the slaves to eat from compared to the floor. It occasionally glows an unnerving dim purple glow when the lights are out.",
},
)>><<run new setup.Furniture(
'f_lighting_none',
'candle',
'Some candles to dimly light the room',
/* value = */ 0,
setup.furnitureslot.lighting,
['basic'],
{},
{ /* texts */
ambience: [
"the a|rep tries its best to light up the room",
],
bedchamber: "It is not very bright, and perhaps a better lighting would be much nicer.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep continues to light the room",
],
bedchamber: "It sufficiently lights up the room allowing the slaves to be used day and night.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep hanging from above enhances the atmosphere",
],
bedchamber: "The elven chandelier hangs beautifully from the top, illuminating the room, and also double as a place to hang the slaves from.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_lighting_good_slaver',
'magical candlestick',
'An enchanted candlestick given by one of your magical-oriented slavers. It burns perpetually with a slight reddish color',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.lighting,
['good'],
{
slaving: 1,
survival: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
"the a|rep continues to burn brightly, tinting the room slightly red",
],
bedchamber: "It emits a reddish glow, tinting the entire room in a lustful shade of red.",
},
)>><<run new setup.Furniture(
'f_object_none',
'old end table',
"Old decrepit end table you found abandoned in the fort. Ugly, but at least it's functional",
/* value = */ 0,
setup.furnitureslot.object,
['basic'],
{},
{ /* texts */
bedchamber: "Some statues would do wonder for the room.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep watches over with its stony eyes",
],
bedchamber: "The statue casts an eerie gaze on your slaves their owner is not in the room."
},
)>>
<<run new setup.Furniture(
'f_object_good',
'[UNOBTAINABLE] 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,
},
{ /* texts */
ambience: [
"the a|rep watches sexily with its stony eyes, adding to the exoticism",
],
bedchamber: "The statue is a work of art, greatly increasing the appeal of the room.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_object_master_tigerkinstatuemale',
'Male Tigerkin Statue',
'A living statue of a male ancient tigerkin, mounted eternally on an anal pole. Its dick is kept painfully hard by ancient magic, leaking precum every now and then. Unlocks "Statue Spitroast" sex action',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.object,
['master'],
{
brawn: setup.FURNITURE_SKILL_MASTER,
},
{ /* texts */
ambience: [
"the dick of the a|rep leaks precum",
`the dick of the a|rep continues to stand proudly erect`,
],
bedchamber: "The statue's dick continues to stand proudly erect, leaking a slight amount of precum.",
},
)>>
<<run new setup.Furniture(
'f_object_master_tigerkinstatuefemale',
'Female Tigerkin Statue',
'A living statue of a female ancient tigerkin, mounted eternally on an anal pole. Its pussy is kept deliciously wet by ancient magic, leaking girlcum every now and then. Unlocks "Statue Spitroast" sex action',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.object,
['master'],
{
brawn: setup.FURNITURE_SKILL_MASTER,
},
{ /* texts */
ambience: [
"the pussy of the a|rep leaks girlcum",
`the pussy of the a|rep continues to permanently wet itself`,
],
bedchamber: "The statue's pussy is permanently wet, leaking a slight amount of girlcum.",
},
)>>
<<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 - 1,
sex: 1,
},
{ /* texts */
ambience: [
"the a|rep lies motionlessly for once",
`the a|rep's dildo stands motionless`,
],
bedchamber: "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.",
},
)>>
<<run new setup.Furniture(
'f_object_master_pole',
'Pole',
'CURRENTLY UNOBTAINABLE. A tall silver pole arresting the attention of anyone who happens upon it. An obedient and <<rep setup.trait.skill_entertain>>, <<rep setup.trait.bg_entertainer>>, or <<rep setup.trait.bg_courtesan>> slave might be able to use it to its full potential...',
/* value = */ setup.FURNITURE_PRICE_MASTER,
setup.furnitureslot.object,
['master'],
{
brawn: setup.FURNITURE_SKILL_MASTER - 1,
intrigue: 1,
},
{ /* texts */
ambience: [
"the a|rep is left abandoned in the room",
],
bedchamber: "The silver pole in the room draws attention to it.",
},
)>>
<<run new setup.Furniture(
'f_object_good_slaver',
'company history ledger',
"A bookshelf containing several volumes of your company's history, written by a scholastic slavver under your employ",
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.object,
['good'],
{
slaving: 1,
brawn: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
'the a|rep stand still, as if questioning whether to write the current events into future ledgers',
],
bedchamber: "The bookshelf distracts from the debauched nature of the room, offering a glimpse of your company's history instead.",
},
)>><<run new setup.Furniture(
'f_punishment_none',
'nothing',
'Spanks for naughty slaves!',
/* value = */ 0,
setup.furnitureslot.punishment,
['basic'],
{},
{ /* texts */
bedchamber: "The slave will be continuously spanked until their rear form a delicious red. Perhaps you could buy a tool to make the job easier.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep is forgotten and not used for once",
],
bedchamber: "Secured and tied, the slave will be mercilessly whipped until they learn from their mistake.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep watches over, as if remembering all the time slaves were tied up on it",
],
bedchamber: "Secured on the cross, the slave will be tormented until they learn from their mistake.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_punishment_good_slaver',
'Fetters with Pulleys',
'A pulley contraption connected to a pair of fetters hanging from the ceiling, where slaves can be hanged upside down for punishment.',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.punishment,
['good', 'upsidedown'],
{
knowledge: 1,
slaving: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
"the fetters hanging from the ceiling makes a rattling noise as wind blew on the ropes connected to them",
],
bedchamber: "The fetters are connected via a series of rope to a pulley down, and can be used to hang a slave upside-down from the ceiling.",
},
)>>
<<run new setup.Furniture(
'f_punishment_none_dungeons',
'ceiling restraints',
'A set of manacles hanging from the ceiling',
/* value = */ 0,
setup.furnitureslot.punishment,
['normal', 'upsidedown'],
{},
{ /* texts */
bedchamber: "",
},
)>><<run new setup.Furniture(
'f_reward_none',
'nothing',
'Pets for your pets!',
/* value = */ 0,
setup.furnitureslot.reward,
['basic'],
{},
{ /* texts */
bedchamber: "They should focus all their attention servicing you instead.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep rolls over slightly from the wind",
],
bedchamber: "The slaves can be taught to play fetch with the ball.",
},
)>>
<<run new setup.Furniture(
'f_reward_good',
'[UNOBTAINABLE] 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,
},
{ /* texts */
ambience: [
"the well-used a|rep is abandoned for once",
],
bedchamber: "The climbing wall is perfect for the pets living in the room.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_reward_other_indoor_garden',
'indoor garden',
'A beautiful exotic indoor garden',
/* value = */ 0,
setup.furnitureslot.reward,
['unobtainable'],
{
},
{ /* texts */
ambience: [
"sunlight shines brightly from the glass roof down into the small a|rep",
`the a|rep adds a refreshing smell, washing away the rigid smell of sex`,
],
bedchamber: "It is quite beautiful to look at, especially when the sun is shining down on it.",
},
)>><<run new setup.Furniture(
'f_slavebed_none',
'floor',
'Sleep on the floor',
/* value = */ 0,
setup.furnitureslot.slavebed,
['basic'],
{},
{ /* texts */
bedchamber: "If you are feeling generous, you can replace it with something nicer.",
},
)>>
<<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,
},
{ /* texts */
bedchamber: "The slaves are locked inside every night.",
},
)>>
<<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,
},
{ /* texts */
bedchamber: "As nice as the cages are, the slaves are still confined inside every night.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_slavebed_good_slaver',
'bondage cage',
"An iron cage equipped with slots to secure the slave's limbs and neck, for maximum bondage.",
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.slavebed,
['good'],
{
slaving: 1,
intrigue: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
bedchamber: "When the slaves are in need of punishment, their limbs can be further secured inside the cage at night, forcing them in a doggy-style position all night long.",
},
)>><<run new setup.Furniture(
'f_slaverbed_none',
'bedroll',
'A worn-out bedroll',
/* value = */ 0,
setup.furnitureslot.slaverbed,
['basic'],
{},
{ /* texts */
bedchamber: "It is rather shoddy --- perhaps a better bed would be much better.",
},
)>>
<<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,
},
{ /* texts */
bedchamber: "The wooden bed is sturdy enough to withstand most uses.",
},
)>>
<<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,
},
{ /* texts */
bedchamber: "The luxurious bed commands attention.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the furs decorating the a|rep sway with the wind",
],
bedchamber: "The grand tribally-decorated canopy bed sets the posh mood of the room.",
},
)>>
<<run new setup.Furniture(
'f_slaverbed_other_dungeons_bench',
'bench',
'A hard bench in the dungeons cell',
/* value = */ 0,
setup.furnitureslot.slaverbed,
['unobtainable'],
{},
{ /* texts */
bedchamber: "The bench is hard and unremarkable.",
},
)>><<run new setup.Furniture(
'f_tile_none',
'floor',
'Dirty floor with nothing covering it',
/* value = */ 0,
setup.furnitureslot.tile,
['basic'],
{},
{ /* texts */
ambience: [
"the dirty floor is waiting for more questionable stain to be spilled all over it",
],
bedchamber: "Perhaps it would be nicer if there are something to cover the cracks and dust on the floor.",
},
)>>
<<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,
},
{ /* texts */
ambience: [
"the a|rep hides the dirty floor underneath",
],
bedchamber: "The rug makes a great place for the slaves to play rough at.",
},
)>>
<<run new setup.Furniture(
'f_tile_good',
'[UNOBTAINABLE] 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,
},
{ /* texts */
ambience: [
"the a|rep looks almost out of place in the degeneracy",
],
bedchamber: "The beautiful rug lifts the overall beauty of the room.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_tile_good_slaver',
'company rug',
'A rug embroided with the logo of your company',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.tile,
['good'],
{
slaving: 1,
combat: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
'the a|rep draws attention to the logo of your company embroided on it',
],
bedchamber: "Your company logo is proudly embroided on it.",
},
)>><<run new setup.Furniture(
'f_wall_none',
'wall',
'The walls are unevenly painted',
/* value = */ 0,
setup.furnitureslot.wall,
['basic'],
{},
{ /* texts */
bedchamber: "Perhaps something could help cover the worn-outness of the walls.",
},
)>>
<<run new setup.Furniture(
'f_wall_normal',
'painting',
'Some paintings bought for cheap in the <<lore region_city>>',
/* value = */ setup.FURNITURE_PRICE_NORMAL,
setup.furnitureslot.wall,
['normal'],
{
arcane: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
"the man in the a|painting eyes the sex menacingly",
],
bedchamber: "The cheap painting does its job well enough diverting attention from the worn-down areas of the walls.",
},
)>>
<<run new setup.Furniture(
'f_wall_good',
'[UNOBTAINABLE] exotic painting',
'Beautiful paintings of various natural sceneries',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.wall,
['good'],
{
arcane: setup.FURNITURE_SKILL_GOOD,
},
{ /* texts */
ambience: [
"the exotic painting makes for quite a backdrop in the background of the ensuing debauchery",
],
bedchamber: "The beautiful painting lifts the spirit of anyone who gaze upon it.",
},
)>>
<<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,
},
{ /* texts */
},
)>>
<<run new setup.Furniture(
'f_wall_good_slaver',
'painting of your company',
'A painting of your company, drawn by one of your more artistic slavers',
/* value = */ setup.FURNITURE_PRICE_GOOD,
setup.furnitureslot.wall,
['good'],
{
slaving: 1,
arcane: setup.FURNITURE_SKILL_NORMAL,
},
{ /* texts */
ambience: [
'your figure inside the a|rep watches over the ensuing debauchery',
],
bedchamber: "A figure much to your liking is painted on it too, alongside some of the slavers you are very familiar with.",
},
)>>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.
For tileset credits, see [[here|TilesetCredits]].
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)
[[Shield by Sanislav Cherenkov, RU|https://thenounproject.com/term/shield/20570/]] (trait: defiance_defiant)
[[Castle by Andrew Doane from the Noun Project|https://thenounproject.com/term/castle/1157138/]] (trait: defiance_indomitable)
<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)
<h4>Sex</h4>
[[person by irene hoffman from the Noun Project|https://thenounproject.com/term/person/19734/]] (pose: stand)
[[Prayer by Sergey Demushkin from the Noun Project|https://thenounproject.com/term/prayer/138429/]] (pose: kneel)
[[sit by Rudez Studio from the Noun Project|https://thenounproject.com/term/sit/1717622/]] (pose: sit)
[[crawl by Marco Fleseri from the Noun Project|https://thenounproject.com/term/crawl/485414/]] (pose: allfours)
[[relax by Gan Khoon Lay from the Noun Project|https://thenounproject.com/term/relax/643312/]] (pose: lieup)
[[Sex position 69 by mikicon from the Noun Project|https://thenounproject.com/term/sex-position-69/728758/]] (pose: sixtynine)
[[missionary by corpus delicti from the Noun Project|https://thenounproject.com/term/missionary/663243/]] (pose: missionary)
[[Rocking Horse by corpus delicti from the Noun Project|https://thenounproject.com/term/rocking-horse/663244/]] (pose: cowgirl)
[[Arrow by Alice Design from the Noun Project|https://thenounproject.com/search/?q=arrow&i=1920765]] (arrows in sex positinos)
[[Sad by Alexander Skowalsky from the Noun Project|https://thenounproject.com/term/sad/200377/]] (discomfort icon)
[[Lightning by Dmitry Kovalev from the Noun Project|https://thenounproject.com/term/lightning/3562642/]] (energy icon)
<h4>Sex icons</h4>
[[sex book by corpus delicti from the Noun Project|https://thenounproject.com/search/?q=sex+manual&i=1176269]] (icon: sexmanual)
[[orgasm by Luis Prado from the Noun Project|https://thenounproject.com/term/orgasm/127458/]] (orgasm)
[[penetration by I Create Stuff from the Noun Project|https://thenounproject.com/term/penetration/95174/]] (penetration)
[[pain by Adrien Coquet from the Noun Project|https://thenounproject.com/term/pain/1784952/]] (discomforting)
[[bandaid by Creative Stall from the Noun Project|https://thenounproject.com/term/bandaid/147621/]] (relif)
[[pose by Lluisa Iborra from the Noun Project|https://thenounproject.com/search/?q=pose&i=945931]] (pose)
[[armor by Eucalyp from the Noun Project|https://thenounproject.com/search/?q=armor&i=1943931]] (equiipment)
[[Scale by Vectorstall from the Noun Project|https://thenounproject.com/search/?q=scales&i=3673126]] (normal)
<h4>Race icons</h4>
[[Viking by Andrejs Kirma from the Noun Project|https://thenounproject.com/term/viking/3091722/]] (race_human)
[[dragon by prasong tadoungsorn from the Noun Project|https://thenounproject.com/term/dragon/1878522/]] (race_lizardkin)
[[dragon by BGBOXXX Design from the Noun Project|https://thenounproject.com/term/dragon/1646679/]] (subrace_dragonkin)
[[Wolf by Denis Shumaylov from the Noun Project|https://thenounproject.com/term/wolf/3504220/]] (subrace_werewolf)
[[Elf by Rodrigo Vidinich from the Noun Project|https://thenounproject.com/term/elf/82764/]] (subrace_elf)
[[Sakura Flower by Alberto Venegas from the Noun Project|https://thenounproject.com/term/sakura-flower/153672/]] (subrace_elf)
[[fairy by parkjisun from the Noun Project|https://thenounproject.com/term/fairy/1005193/]] (subrace_fairy)
[[Angel by parkjisun from the Noun Project|https://thenounproject.com/term/angel/1005195/]] (subrace_angel)
[[Dinosaur by Rfourtytwo from the Noun Project|https://thenounproject.com/term/dinosaur/3398473/]] (subrace_lizardkin)
[[Cat by Alina Oleynik from the Noun Project|https://thenounproject.com/term/cat/1486586/]] (subrace_neko)
[[Tiger head silhouette|https://freesvg.org/tiger-head-silhouette]] (subrace_tigerkin)
[[Orc by Gan Khoon Lay from the Noun Project|https://thenounproject.com/term/orc/659845/]] (orc)
[[Devil by Anna Neyshtadt from the Noun Project|https://thenounproject.com/term/devil/1927125/]] (subrace_demon)
[[Vacation by Vadim Solomakhin from the Noun Project|https://thenounproject.com/term/vacation/3282039/]] (busy_leave)
[[Satyr by Icons Producer from the Noun Project|https://thenounproject.com/search/?q=satyr&i=1891323]] (subrace_demonkin)
[[Snake by Alice Noir from the Noun Project|https://thenounproject.com/term/snake/1998432/]] (per_sly)
[[Jewelry by ProSymbols from the Noun Project|https://thenounproject.com/term/jewelry/1976692/]] (per_lavish)
[[piggybank by alison from the Noun Project|https://thenounproject.com/term/piggybank/2976133/]] (per_frugal)
[[waist slim by Maxicons from the Noun Project|https://thenounproject.com/term/waist-slim/2056780/]] (muscle_thin)
[[Apron by Eucalyp from the Noun Project|https://thenounproject.com/term/apron/2699789/]] (maid_torso)
[[Skirt by shashank singh from the Noun Project|https://thenounproject.com/term/skirt/1750134/]] (maid_legs)
[[heels by iconsmind.com from the Noun Project|https://thenounproject.com/term/heels/71371/]] (maid_feet)
[[maid by Eucalyp from the Noun Project|https://thenounproject.com/term/maid/3218275/]] (maid_head)
[[sign post by Katrine Kolström from the Noun Project|https://thenounproject.com/term/sign-post/155987/]] (QuestBrothelManager)
[[Torii gate by Hamza Wahbi from the Noun Project|https://thenounproject.com/term/torii-gate/2023030/]] (QuestLivingGod)
[[Cucumber by Michał Czekała from the Noun Project|https://thenounproject.com/term/cucumber/357160/]] (cucumber equipment)
[[blessings by Phạm Thanh Lộc from the Noun Project|https://thenounproject.com/term/blessings/3068015/]] (blessings hand base)
[[https://thenounproject.com/term/weapon-shield/2360317/|weapon shield by Maxicons from the Noun Project]] (blessing protection)
[[Helmet by João Filipe F. Rocha from the Noun Project|https://thenounproject.com/term/helmet/937034/]] (blessing sanity)
[[life by Sarote Impheng from the Noun Project|https://thenounproject.com/term/life/3623322/]] (blessing life)
[[Dice by Artdabana@Design from the Noun Project|https://thenounproject.com/term/dice/1577398/]] (blessing luck)
[[Flag by AFY Studio from the Noun Project|https://thenounproject.com/term/flag/1108961/]] (leader icons)
[[Calculator by wira wianda from the Noun Project|https://thenounproject.com/search/?q=calculator&i=3781919]] (computed trait icon)
[[magic by rivercon from the Noun Project|https://thenounproject.com/term/magic/1462965/]] (null magic)
[[Wrench by emel çelik from the Noun Project|https://thenounproject.com/term/wrench/192666/]] (null skill)
[[background by mikicon from the Noun Project|https://thenounproject.com/term/background/631758/]] (null bg)
[[bookshelf by Laymik from the Noun Project|https://thenounproject.com/search/?q=bookshelf&i=1355192]] (perk generalist)
[[counseling by IconTrack from the Noun Project|https://thenounproject.com/term/counseling/1681709/]] (perk reduce trauma)
[[Profit by vectorstudio10 from the Noun Project|https://thenounproject.com/term/profit/2088934/]] (perk increase boon)
[[job by Larea from the Noun Project|https://thenounproject.com/search/?q=job&i=3266610]] (perk duty)
[[salary by I Putu Kharismayadi from the Noun Project|https://thenounproject.com/search/?q=salary&i=2344407]] (perk specialist)
[[blessings of god by Maxicons from the Noun Project|https://thenounproject.com/term/blessings-of-god/2157936/]] (perk blessings)
[[skill magic dark by Maxicons from the Noun Project|https://thenounproject.com/term/skill-magic-dark/2360226/]] (corruption)
[[effect magic circle by Maxicons from the Noun Project|https://thenounproject.com/term/effect-magic-circle/2360027/]] (purification perk)
[[effect light by Maxicons from the Noun Project|https://thenounproject.com/maxicons/collection/role-playing-game/?i=2360039]] (purification perk)
[[dictionary by sofi from the Noun Project|https://thenounproject.com/term/dictionary/1647039/]] (lorebook)
[[Sword by Nurutdinov Timur from the Noun Project|https://thenounproject.com/term/sword/30510/]] (master sword)
[[Sword by Nurutdinov Timur from the Noun Project|https://thenounproject.com/term/sword/30431/]] (master sword 2)
[[doppelganger by emilegraphics from the Noun Project|https://thenounproject.com/term/doppelganger/1301424/]] (doppelganger perk)
[[blessings of god by Maxicons from the Noun Project|https://thenounproject.com/maxicons/collection/christmas-glyph/?i=2157936]] (curse)
[[classes magician by Maxicons from the Noun Project|https://thenounproject.com/maxicons/collection/role-playing-game/?i=2360012]] (curse)
[[serpent by Kyle Tezak from the Noun Project|https://thenounproject.com/term/serpent/96277/]] (perk harbinger of chaos)
[[Crow by tulpahn from the Noun Project|https://thenounproject.com/term/crow/3329360/]] (perk harbinger of crows)
[[Retired by Lemon Liu from the Noun Project|https://thenounproject.com/term/retired/8231/]] (job: retired)
[[battle axe by parkjisun from the Noun Project|https://thenounproject.com/term/battle-axe/440119/]] (gravity axe)
[[Dog on Leash by Luis Prado from the Noun Project|https://thenounproject.com/term/dog-on-leash/982774/]] (pet pimp)
[[bartender by ProSymbols from the Noun Project|https://thenounproject.com/term/bartender/2110537/]] (dining pimp)
[[Architect by Luis Prado from the Noun Project|https://thenounproject.com/term/architect/43500/]] (scenery pimp)
[[circus by Gan Khoon Lay from the Noun Project|https://thenounproject.com/search/?q=entertainer&i=974204]] (entertainment pimp)
[[Cigar by Zulfa Mahendra from the Noun Project|https://thenounproject.com/term/cigar/3628941/]] (pimp icon)
[[Door by The Icon Z from the Noun Project|https://thenounproject.com/search/?q=doors&i=3845306]] (blessing virginity)
[[Megaphone by tulpahn from the Noun Project|https://thenounproject.com/search/?q=megaphone&i=2216877]] (blessing amplifier)
[[Volatility by Piotrek Chuchla from the Noun Project|https://thenounproject.com/search/?q=volatile&i=2454135]] (volatile)
[[swear by Simcoach Games from the Noun Project|https://thenounproject.com/term/swear/3460565/]] (ire quest tag)
[[Flower by Royyan Wijaya from the Noun Project|https://thenounproject.com/search/?q=flower&i=2695393]] (decoration building tag)
[[Park by Adrien Coquet from the Noun Project|https://thenounproject.com/search/?q=outdoors&i=3105648]] (outdoors)
[[Box by icon 54 from the Noun Project|https://thenounproject.com/term/box/691250/]] (nodoor)
[[entrance by Sumit Saengthong from the Noun Project|https://thenounproject.com/term/entrance/3870460/]] (passable)
[[statue by Eucalyp from the Noun Project|https://thenounproject.com/term/statue/2746043/]] (nodoor)
[[Lock by Martin Smith from the Noun Project|https://thenounproject.com/term/lock/133096/]] (fixed)
[[Recycle by fauzan akbar from the Noun Project|https://thenounproject.com/search/?q=recycle&i=2218550]] (optional)
[[roof by Adrien Coquet from the Noun Project|https://thenounproject.com/search/?q=roof&i=2409371]] (indoors)
[[brick wall by Hassan ali from the Noun Project|https://thenounproject.com/search/?q=bricks&i=1912641]] (structural)
[[Bed by Adrien Coquet from the Noun Project|https://thenounproject.com/search/?q=bed&i=3194630]] (accomodation)
[[other by Caesar Dwiky Darmawan from the Noun Project|https://thenounproject.com/search/?q=others&i=3546743]] (misc)
[[whip by ProSymbols from the Noun Project|https://thenounproject.com/term/whip/2430914/]] (whip image)
[[personality by Adrien Coquet from the Noun Project|https://thenounproject.com/term/personality/3884297/]] (chaotic personalities)
[[switch by Saifurrijal from the Noun Project|https://thenounproject.com/search/?q=switch&i=2559299]] (switch)
[[clover by Nick Abrams from the Noun Project|https://thenounproject.com/search/?q=clover&i=54787]] (rare)
[[Unicorn by Jennifer Ann Rött from the Noun Project|https://thenounproject.com/term/unicorn/125665/]] (legendary)
[[motivation by Gregor Cresnar from the Noun Project|https://thenounproject.com/search/?q=motivation&i=426114]] (perk_boon)
[[tail by priyanka from the Noun Project|https://thenounproject.com/search/?q=tail&i=2958638]] (perk_tail)
[[deflect by Rflor from the Noun Project|https://thenounproject.com/search/?q=deflect&i=366998]] (deflect)
[[lawnmower by Danil Polshin from the Noun Project|https://thenounproject.com/search/?q=lawnmower&i=3561800]] (perk_sidejob)
[[Hyena by Matthew Davis from the Noun Project|https://thenounproject.com/search/?q=scavenger&i=304830]] (perk_scavenger)
[[History by Vectors Point from the Noun Project|https://thenounproject.com/search/?q=history&i=3306251]] (history)
[[History by Adrien Coquet from the Noun Project|https://thenounproject.com/search/?q=history&i=3812126]] (history)
[[Waterfall by Eucalyp from the Noun Project|https://thenounproject.com/search/?q=mountain+river&i=3152066]] (geo)
[[roleplay by priyanka from the Noun Project|https://thenounproject.com/search/?q=roleplay&i=2120590]] (roleplay)
[[staff by Benjamin Jackson from the Noun Project|https://thenounproject.com/benjamjackson/collection/rpg-game-icons/?i=3653184]] (staff master)<<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 if (sv.devtooltype == 'activity') {
return `Dev Tool (activity): ${sv.dtquest.name}`;
} else {
throw new Error(`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 InitTitle>>
<<include InitSpeech>>
<<include InitItemClass>>
<<include InitItem>>
<<include InitRarity>>
<<include InitFurniture>>
<<include InitGenericQuestDifficulties>>
<<include InitGenericUnitCriterias>>
<<include InitCompanyTemplate>>
<<include InitUnitPools>>
<<include InitUnitGroups>>
<<include InitEquipmentPool>>
<<include InitEquipment>>
<<include InitLiving>>
<<include InitQuestPool>>
<<include InitContactTemplate>>
<<include InitDutyTemplates>>
<<include InitBuildingTemplate>>
<<include InitOpportunity>>
<<include InitQuestTemplate>>
<<include InitUnitAction>>
<<include InitEvent>>
<<include InitInteraction>>
<<include InitFamilyRelation>>
<<include InitLore>>
<<include InitActivity>>
<!-- Init setup -->
<<run setup.initSetup.call(setup)>>
<!-- Init state -->
<<run setup.initState.call(State.variables)>>
<<set setup.INIT_DONE = true>><<set setup.qdiff = {}>>
<<run setup.QuestDifficulty.generate()>><<run setup.Rarity.initRarities()>><<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 _decay = setup.SKILL_BOOST_DECAY_RATE>>
Skills that have been boosted permanently have a chance to decay whenever you boost another skill.
The chance is equal to <<= Math.round(_decay * 100)>>% per boost.
For example, if you have boosted <<rep setup.skill.combat>> three times and
have boosted <<rep setup.skill.brawn>> two times,
then when you try to boost any other skill,
there is a
<<= Math.round(_decay * 300)>>%
chance that
your <<rep setup.skill.combat>> will decrease by 1,
and a
<<= Math.round(_decay * 200)>>%
chance that
your <<rep setup.skill.brawn>> will decrease by 1.<<message '(?)'>>
<div class='helpcard'>
<<include "SkillBoostHelpTextContent">>
</div>
<</message>><<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 */
'a|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 */
'a|is occupying a body not necessarily a|their own', /* unit description */
0, /* slave value */
{
},
)>>
<<run new setup.Title(
'ex_slave', /* key */
'Ex-Slave', /* name */
'Used to be a slave', /* name */
'a|was a slave at some point in a|their life', /* unit description */
-2000, /* slave value */
{
slaving: -3,
},
{
is_negative: true,
},
)>>
<<run new setup.Title(
'ex_slaver', /* key */
'Ex-Slaver', /* name */
'Used to belong to another slaving company', /* name */
'a|was a slaver in a different slaving company some time in a|their past career', /* unit description */
2000, /* 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(
'ex_leader', /* key */
'Retired Leader of a Company', /* name */
'Once held the title of the Leader of the Company', /* name */
'a|used to lead a slaving company in some distant past', /* 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,
},
)>>
/* ============================
RANDOM QUEST RELATED TITLES
========================= */
<<run new setup.Title(
'high_society_demon', /* key */
'High Demon Society Member', /* name */
'Is a member of the High Demon Society who entered the mortal realm by possessing an unfortunate mortal body', /* name */
'a|is a member of the High Demon Society currently possessing an unfortunate mortal body', /* unit description */
10000, /* slave value */
{
arcane: 4,
sex: 2,
slaving: 2,
},
)>>
<<run new setup.Title(
'quest_doppelganged', /* key */
'Doppelganged', /* name */
'Is the model of a doppelganger living in your company', /* name */
'a|is the model of a doppelganger living in your company', /* unit description */
5000, /* slave value */
{},
)>>
<<run new setup.Title(
'quest_doppelganger', /* key */
'Doppelganger', /* name */
'A doppelganger living in your company', /* name */
'a|is a doppelganger living in your company', /* unit description */
5000, /* slave value */
{},
)>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_abuse',
'Abuse',
'FCdev', /* author */
[], /* tags */
'InteractionAbuse',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_caress',
'Caress',
'FCdev', /* author */
[], /* tags */
'InteractionCaress',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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.
$i.His eyes demand an answer: is that it?
<</if>>
<<unset $i>><<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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_embrace',
'Embrace',
'FCdev', /* author */
[], /* tags */
'InteractionEmbrace',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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>>
$i.His 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.
$i.His 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>>
$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 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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fist_ass',
'Fist ass',
'FCdev', /* author */
[], /* tags */
'InteractionFistAss',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_bodypart_anus'),
],
[
setup.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fist_vagina',
'Fist vagina',
'FCdev', /* author */
[], /* tags */
'InteractionFistVagina',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fondle_butt',
'Fondle butt',
'FCdev', /* author */
[], /* tags */
'InteractionFondleButt',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_grope'),
],
[
setup.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fondle_breasts',
'Fondle dick',
'FCdev', /* author */
[], /* tags */
'InteractionFondleDick',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_grope'),
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.dick_tiny),
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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fondle_vagina',
'Fondle vagina',
'FCdev', /* author */
[], /* tags */
'InteractionFondleVagina',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_grope'),
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fuck_anus',
'Fuck ass',
'FCdev', /* author */
[], /* tags */
'InteractionFuckAnus',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_bodypart_anus'),
],
[
setup.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fuck_butt',
'Fuck both holes',
'FCdev', /* author */
[], /* tags */
'InteractionFuckButt',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_bodypart_anus'),
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
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 <<urace _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 <<urace _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fuck_lips',
'Fuck mouth',
'FCdev', /* author */
[], /* tags */
'InteractionFuckLips',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_fuck_vagina',
'Fuck vagina',
'FCdev', /* author */
[], /* tags */
'InteractionFuckVagina',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
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 <<urace _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_titfuck',
'Titfuck',
'FCdev', /* author */
[], /* tags */
'InteractionTitfuck',
[], /* Cost */
[ /* Requirements */
setup.qres.HasItem('sexmanual_penetration_penisbreasts'),
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.breast_tiny),
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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_together_anal',
'Anally DP a slave',
'FCdev', /* author */
[], /* tags */
'InteractionTogetherAnal',
[], /* Cost */
[
setup.qres.HasItem('sexmanual_bodypart_anus'),
setup.qres.HasSlave(),
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
], /* Requirements */
[
setup.qres.Job(setup.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>>
<<yourrep _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, <<yourrep _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 <<yourrep _u>> for some additional fun time in $i.locgeneral together.
<<else>>
Approaching <<yourrep _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 <<yourrep _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_together_punish',
'Punish a disobedient slave',
'FCdev', /* author */
[], /* tags */
'InteractionTogetherPunish',
[], /* Cost */
[
setup.qres.HasSlave(),
], /* Requirements */
[
setup.qres.Job(setup.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 <<yourrep _u>> for some additional fun time in $i.locgeneral together.
<<else>>
Approaching <<yourrep _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_together_use',
'Use an obedient slave',
'FCdev', /* author */
[], /* tags */
'InteractionTogetherUse',
[], /* Cost */
[
setup.qres.HasSlave(),
], /* Requirements */
[
setup.qres.Job(setup.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'>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'assrape_on_the_bed', /* key */
"Assrape on the bed", /* Title */
"FCdev", /* Author */
[ ], /* tags */
'Interaction_assrape_on_the_bed',
[ /* costs */
],
[ /* prerequisites */
setup.qres.HasItem('sexmanual_bodypart_anus'),
],
[ /* 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.isHasDick()>>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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'double_penetrate_with_the_fuckmachine', /* key */
"Double penetrate with the Fuckmachine", /* Title */
"FCdev", /* 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.getUnitIfAvailable('doctor')>>
<<if _doctor>>your doctor <<rep _doctor>>
<<else>>a doctor
<</if>>
to breathe life back into your exhausted fuckpuppet./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'double_penetrate_with_the_owner', /* key */
"Double penetrate with the owner", /* Title */
"FCdev", /* 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 <<yourrep _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'fuck_the_mindbroken_slave', /* key */
"Fuck the mindbroken slave", /* Title */
"FCdev", /* 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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'gentle_sex', /* key */
"Gentle sex", /* Title */
"FCdev", /* 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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'join_their_owner_in_punishing_the_slave', /* key */
"Join their owner in punishing the slave", /* Title */
"FCdev", /* 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 <<yourrep _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 occasionally 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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'make_love_on_the_bed', /* key */
"Make love on the bed", /* Title */
"FCdev", /* 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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'play_with_the_slave', /* key */
"Play with the slave", /* Title */
"FCdev", /* 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 $i.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 thighs between $i.his <<ulegs _u>> like a pincer, not letting them go until
$i.his climax finishes. Feeling $i.his juices squired all over your lap,
<<else>>
your <<udick $unit.player>> between $i.his asscheeks,
bringing you to climax.
At the feeling of your warm cum
between $i.his thighs,
<</if>>
$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>>./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'rough_sex', /* key */
"Rough sex", /* Title */
"FCdev", /* 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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'torture_chastitied_dick', /* key */
"Torture chastitied dick", /* Title */
"FCdev", /* 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 <<yourrep _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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'use_both_bedchamber_slaves', /* key */
"Use both bedchamber slaves", /* Title */
'FCdev', /* 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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'use_both_obedient_bedchamber_slaves', /* key */
"Use both obedient bedchamber slaves", /* Title */
"FCdev", /* 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 <<therace _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 <<therace _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>>/* PROOFREAD COMPLETE */
<<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>>
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.
<br/>
<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 <<therace _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)>>
<br/>
<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 <<therace _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 <<therace _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>>
<br/>
<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 <<therace _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 <<therace _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 <<therace _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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_banter_slaver_positive',
'Build friendship',
'darko', /* author */
[], /* tags */
'InteractionBanterSlaverPositive',
[setup.qc.MoneyMult(-0.3)], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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.qres.Job(setup.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.qres.Job(setup.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.qres.Job(setup.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>>/* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'unit_remove_knight_in_training',
'Retract knight training',
'darko', /* author */
[], /* tags */
'InteractionRemoveKnightInTraining',
[], /* Cost */
[], /* Requirements */
[
setup.qres.Job(setup.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(
'abandon_your_brothel', /* key */
"Abandon your brothel", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
],
'Interaction_abandon_your_brothel',
[ /* costs */
],
[ /* restrictions */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_brothel_owner_0'),
],
[ /* outcomes */
setup.qc.RemoveTitle('target', 'quest_brothel_owner_0'),
],
1,
setup.interactionpool.unit,
)>><<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
Seeing no future left in <<attach _describe>>, you've decided to abandon the brothel. You should hear more about this in the coming week...
</p>/* PROOFREAD COMPLETE */
<<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', "a|is exhausted from bodyshifting", 1),
],
0,
setup.interactionpool.unit,
)>><p>
<<= setup.Text.Unit.Bodyswap.bodyswap($g.target, $bodyshift.getBody($g.target))>>
</p>
<p>
<<Yourrep $g.target>> target|is exhausted from the bodyshifting and will rest for the rest of this week.
</p>/* PROOFREAD COMPLETE */
<<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 in 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>/* PROOFREAD COMPLETE */
<<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./* PROOFREAD COMPLETE */
<<run new setup.Interaction(
'make_a_slave_custard', /* key */
"Make a slave custard", /* Title */
"FCdev", /* 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>>/* PROOFREAD COMPLETE */
<<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>> approach <<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>> target|accept 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><<run new setup.Interaction(
'stop_being_a_living_god', /* key */
"Stop being a Living God", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
],
'Interaction_stop_being_a_living_god',
[ /* costs */
],
[ /* restrictions */
],
[ /* unit requirements */
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('quest_living_god'),
],
[ /* outcomes */
setup.qc.RemoveTitle('target', 'quest_living_god'),
],
1,
setup.interactionpool.unit,
)>><p>
Deciding that <<rep $g.target>> target|is better off as a full-time slaver under your employ, you decided it is time for <<them $g.target>> to stop going into <<their $g.target>> sermons in the little shrine setup over the <<rep setup.buildingtemplate.market>>.
</p><<set setup.interaction = {}>>
<<set setup.interactionpool = {}>>
<<run new setup.InteractionPool('unit')>>
<<set _passages = Story.lookup('tags', 'interaction')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<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.isBasic()>>
<<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>>
<<include InitSexManuals>>
<<include InitLorebook>>
<<run new setup.ItemPool(
'all',
{
reset_potion: 0.004,
potion_perk: 0.002,
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,
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,
potion_combat_boost: 0.0002,
potion_brawn_boost: 0.0002,
potion_survival_boost: 0.0002,
potion_intrigue_boost: 0.0002,
potion_slaving_boost: 0.0002,
potion_knowledge_boost: 0.0002,
potion_social_boost: 0.0002,
potion_aid_boost: 0.0002,
potion_arcane_boost: 0.0002,
potion_sex_boost: 0.0002,
}
)>>
<<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,
potion_perk: 0.002,
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,
potion_boon: 0.004,
potion_transformation: 0.001,
potion_submissive_cure: 0.002,
potion_slavertraining: 0.004,
potion_combat_boost: 0.0002,
potion_brawn_boost: 0.0002,
potion_survival_boost: 0.0002,
potion_intrigue_boost: 0.0002,
potion_slaving_boost: 0.0002,
potion_knowledge_boost: 0.0002,
potion_social_boost: 0.0002,
potion_aid_boost: 0.0002,
potion_arcane_boost: 0.0002,
potion_sex_boost: 0.0002,
}
)>>
<<run new setup.ItemPool(
'potion_blessing',
{
potion_protection: 1.0,
potion_sanity: 1.0,
potion_purity: 1.0,
potion_life: 1.0,
potion_luck: 1.0,
}
)>>
<<run new setup.ItemPool(
'potion_boost',
{
potion_combat_boost: 1.0,
potion_brawn_boost: 1.0,
potion_survival_boost: 1.0,
potion_intrigue_boost: 1.0,
potion_slaving_boost: 1.0,
potion_knowledge_boost: 1.0,
potion_social_boost: 1.0,
potion_aid_boost: 1.0,
potion_arcane_boost: 1.0,
potion_sex_boost: 1.0,
}
)>>/* ========================
GOOD EFFECT POTIONS
======================== */
<<run new setup.ItemUnitUsable({
key: 'healing_potion',
name: 'Potion of Healing',
description: 'Reduces the injury of a unit by one week',
value: Math.round(1.5 * setup.MONEY_PER_SLAVER_WEEK), /* value */
unit_restrictions: [ /* restrictions */
setup.qres.IsInjured(),
],
effects: [ /* effects */
setup.qc.Heal('unit', 1),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'healing_potion_greater',
name: 'Potion of Greater Healing',
description: 'Reduces the injury of a unit by two weeks',
value: Math.round(2.5 * setup.MONEY_PER_SLAVER_WEEK), /* value */
unit_restrictions: [ /* restrictions */
setup.qres.IsInjured(),
],
effects: [ /* effects */
setup.qc.Heal('unit', 2),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_trauma_reduce',
name: 'Potion of Trauma Cure',
description: "Reduces a unit's trauma duration by 2 weeks",
value: 1500, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.AnyTrait(setup.TraitHelper.TRAUMA),
],
effects: [ /* effects */
setup.qc.TraumaHeal('unit', 2),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_boon',
name: 'Potion of Virtue',
description: 'Grant a unit a boon for 10 weeks',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.BoonizeRandom('unit', 10),
],
tags: [],
})>>
/* ========================
LEVEL POTIONS
======================== */
<<run new setup.ItemUnitUsable({
key: 'level_up_potion_basic',
name: 'Potion of Level Up',
description: 'Increases the level of a unit by 1. Usable only on units with level lower than ' + setup.LEVEL_PLATEAU,
value: Math.round(2 * setup.MONEY_PER_SLAVER_WEEK), /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.LevelAtMost(setup.LEVEL_PLATEAU - 1),
],
effects: [ /* effects */
setup.qc.levelUp('unit'),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_perk',
name: 'Potion of Past-Erasure',
description: "Resets a unit's perks, allowing them to learn other ones",
value: 10000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['perk'])),
setup.qres.Building('warroom'),
],
effects: [ /* outcomes */
setup.qc.RemoveTraitsWithTag('unit', 'perk'),
],
tags: [],
})>>
/* ========================
BLESSING POTIONS
======================== */
<<run new setup.ItemUnitUsable({
key: 'potion_protection',
name: 'Potion of Protection',
description: 'Grant a unit one stack of Blessing of Protection, which can prevent injuries',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_protection8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_protection8),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_sanity',
name: 'Potion of Sanity',
description: 'Grant a unit one stack of Blessing of Sanity, which can prevent trauma',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_sanity8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_sanity8),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_purity',
name: 'Potion of Purity',
description: 'Grant a unit one stack of Blessing of Purity, which can prevent purity',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_purity8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_purity8),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_life',
name: 'Potion of Life',
description: 'Grant a unit one stack of Blessing of Life, which can prevent unit from going missing',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_life8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_life8),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_luck',
name: 'Potion of Luck',
description: 'Grant a unit one stack of Blessing of Luck, which can prevent a disastrous quest outcome',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_luck8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_luck8),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_virginity',
name: 'Potion of Virginity',
description: 'Grant a unit one stack of Blessing of Virginity, which can prevent anus or vagina from being loosened',
value: 5000, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.NoTrait(setup.trait.blessing_virginity8),
],
effects: [ /* effects */
setup.qc.Blessing('unit', 1, setup.trait.blessing_virginity8),
],
tags: [],
})>>
/* ========================
SKILL BOOST POTIONS
======================== */
<<set _desc_base = 'Grant a permanent <span data-tooltip="<<include ' + "'SkillBoostHelpTextContent'" + '>>"><<successtextlite "skill boost">> (?)</span> to '>>
<<set _pot_price = 25000>>
<<run new setup.ItemUnitUsable({
key: 'potion_combat_boost',
name: 'Potion of Boost Combat',
description: _desc_base + '<<rep setup.skill.combat>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.combat),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_brawn_boost',
name: 'Potion of Boost Brawn',
description: _desc_base + '<<rep setup.skill.brawn>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.brawn),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_survival_boost',
name: 'Potion of Boost Survival',
description: _desc_base + '<<rep setup.skill.survival>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.survival),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_intrigue_boost',
name: 'Potion of Boost Intrigue',
description: _desc_base + '<<rep setup.skill.intrigue>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.intrigue),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_slaving_boost',
name: 'Potion of Boost Slaving',
description: _desc_base + '<<rep setup.skill.slaving>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.slaving),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_knowledge_boost',
name: 'Potion of Boost Knowledge',
description: _desc_base + '<<rep setup.skill.knowledge>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.knowledge),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_social_boost',
name: 'Potion of Boost Social',
description: _desc_base + '<<rep setup.skill.social>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.social),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_aid_boost',
name: 'Potion of Boost Aid',
description: _desc_base + '<<rep setup.skill.aid>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.aid),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_arcane_boost',
name: 'Potion of Boost Arcane',
description: _desc_base + '<<rep setup.skill.arcane>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.arcane),
],
tags: [],
})>>
<<run new setup.ItemUnitUsable({
key: 'potion_sex_boost',
name: 'Potion of Boost Sex',
description: _desc_base + '<<rep setup.skill.sex>>',
value: _pot_price, /* value */
unit_restrictions: [ /* restrictions */
setup.qres.Job(setup.job.slaver),
],
effects: [ /* effects */
setup.qc.SkillBoost('unit', setup.skill.sex),
],
tags: [],
})>><<run new setup.ItemUsable({
key: 'potion_submissive_cure',
name: 'Potion of Submissive Cure',
description: "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",
value: Math.round(48 * setup.MONEY_PER_SLAVER_WEEK), /* value */
restrictions: [ /* restrictions */
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.per_submissive),
setup.qres.NotYou(),
]),
setup.qres.NoQuest('slaver_training__submission_cure'),
],
effects: [ /* effects */
setup.qc.QuestDirect('slaver_training__submission_cure'),
],
tags: [],
})>><<run new setup.ItemNotUsable({
key: 'reset_potion',
name: 'Potion of Youth',
description: "Said to recover the youth of whoever drinks the potion. Can be used in treatments to reset a unit's level. Requires <<rep setup.buildingtemplate.treatmentroomresetlevel>> Said to be found somewhere hidden in a grove in the western forests...",
value: Math.round(18 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_alternative',
name: 'Potion of Alternative',
description: "Have you ever wondered if you had made a different decision in the past? Can be used in treatments to reset a unit's skills to a new set of skill focus. Requires <<rep setup.buildingtemplate.treatmentroomalternative>>",
value: Math.round(96 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'blank_potion',
name: 'Potion of Blankness',
description: "Said to render whoever drinks it into a blank malleable state of mind. Can be used in treatments to reset a slave's trainings.",
value: Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'mindmend_potion',
name: 'Potion of Mind Mending',
description: "Sold exclusively by the <<rep $company.elf>> to their staunchest allies, this potion is said to be able to restore mind functions to even the most broken of units. Can be used in treatments to remove mindbrokenness. Requires <<rep setup.buildingtemplate.treatmentroommindmend>>",
value: Math.round(24 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'hate_potion',
name: 'Potion of Rivalry',
description: "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.",
value: Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'love_potion',
name: 'Potion of Friendship',
description: "The color swirls and shifts randomly, just like how friendship works. Can be used in treatments to (forcefully) increase friendship between two units. Requires <<rep setup.buildingtemplate.treatmentroomhate>>",
value: Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'love_potion_true',
name: 'Potion of Love',
description: "Smells sweetinengly sick... and also a faint smell of cum? Can be used in treatments to (forcefully) increase friendship between two units. Requires <<rep setup.buildingtemplate.treatmentroomlovetrue>>",
value: Math.round(36 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'forget_potion',
name: 'Potion of Amnesia',
description: "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. Requires <<rep setup.buildingtemplate.treatmentroomforget>>",
value: Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_transformation',
name: 'Potion of Chimeratic Transformation',
description: "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. Requires <<rep setup.buildingtemplate.treatmentroomtransformation>>",
value: Math.round(48 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_slavertraining',
name: 'Potion of Suggestion',
description: "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. Requires <<rep setup.buildingtemplate.brainwashingroom>>",
value: Math.round(18 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_isolation',
name: 'Potion of Isolation',
description: "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. Requires <<rep setup.buildingtemplate.treatmentroomisolation>>",
value: Math.round(24 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_tight',
name: 'Potion of Orifice Tightening',
description: "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. Requires <<rep setup.buildingtemplate.anuslab>> or <<rep setup.buildingtemplate.vaginalab>>",
value: Math.round(12 * setup.MONEY_PER_SLAVER_WEEK), /* value */
tags: [],
})>>
<<run new setup.ItemNotUsable({
key: 'potion_portal',
name: 'Potion of Portal-Shaping',
description: "The content of this potion rise and fall, as if perpetually absorbed and expulsed by a tiny portal within. With the right technology, can be used in a procedure to restore anus or vagina to almost virgin-like tightness. Required for building and upgrading <<rep setup.buildingtemplate.portalindoors>> or <<rep setup.buildingtemplate.portaloutdoors>>.",
value: 0, /* cannot be sold */
tags: [],
})>><<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')>>
/* Unlocks sex actions */
<<run new setup.ItemClass('sexmanual', 'Sex Manual')>>
/* Unlocks lore entries */
<<run new setup.ItemClass('lorebook', 'Lorebook')>>/* ==============
RACE
============== */
<<run new setup.ItemLorebook({
key: 'lorebook_doppelganger',
name: 'Lorebook: Doppelganger',
description: "Unlocks the doppelganger lore once you build the <<rep setup.buildingtemplate.library>>",
tags: [],
})>>/* key items involved in quests */
<<run new setup.ItemQuest({
key: 'quest_for_science_list',
name: 'Inventor item list',
description: 'A list of items to procure for the inventor in the <<lore region_city>>. 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.',
tags: [],
})>>
<<run new setup.ItemQuest({
key: 'quest_for_science_box',
name: 'Thick sturdy box',
description: "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 region_city>>.",
tags: [],
})>>
<<run new setup.ItemQuest({
key: 'quest_for_science_fruit',
name: 'Sine Pregnol fruit',
description: "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 region_city>>.",
tags: [],
})>>
<<run new setup.ItemQuest({
key: 'quest_for_science_stick',
name: 'Long strong pole of iron',
description: "A long pole of conducting iron. The third item on the list given by the inventor in the <<lore region_city>>.",
tags: [],
})>>
<<run new setup.ItemQuest({
key: 'quest_bewitchment_nectar',
name: 'Nectar of the gods',
description: "An incredibly rare honey found in the <<lore region_sea>>. It is said that fae creatures would often trade their services in exchange for a mere taste of this goodness.",
tags: [],
})>>
<<run new setup.ItemQuest({
key: 'quest_bewitchment_trap',
name: 'Giant rat trap',
description: "An incredibly large rat trap. You don't think anyone would fall for such an obvious trap, even the most gullible ones...",
tags: [],
})>>/* ==============
POSES
============== */
<<run new setup.ItemSexManual({
key: 'sexmanual_sit',
name: 'Sex Manual: Sit',
description: "A thank-you gift given to you by your slavers to celebrate the inauguration of the <<rep setup.buildingtemplate.grandhall>>. Unlocks <<rep setup.sexpose.sit>>.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_sixtynine',
name: 'Sex Manual: Sixty-Nine',
description: "Found in your library, no doubt one of the culprits for the library's expensive cost. Unlocks <<rep setup.sexpose.sixtynine>>.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_allfours',
name: 'Sex Manual: All-Fours',
description: "A reward for building the <<rep setup.buildingtemplate.classroom>>. Unlocks <<rep setup.sexpose.allfours>>.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_facesit',
name: 'Sex Manual: Facesit',
description: "Received from one of the members of the High Demon Community in exchange for a corrupted slave to their exacting specifications. Unlocks <<rep setup.sexpose.facesit>>.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_upsidedown',
name: 'Sex Manual: Upside-Down',
description: "Who knew the royalties of the <<rep $company.humankingdom>> are into these kind of kinks? Unlocks <<rep setup.sexpose.upsidedown>>, which is only usable in room with the right equipments. Incidentally, your dungeons has those.",
tags: [],
} )>>
/* ==============
BODYPART
============== */
<<run new setup.ItemSexManual({
key: 'sexmanual_bodypart_anus',
name: 'Sex Manual: Anal Sex',
description: "Found in the ruins of your fort. Unlocks using the anus as a sexual organ.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_bodypart_tail',
name: 'Sex Manual: Tail Sex',
description: "A token of friendship from the mysterious dragonkin kingdom somewhere beyond the southern seas. Unlocks using the tail as a sexual organ.",
tags: [],
} )>>
/* ==============
PENETRATION
============== */
<<run new setup.ItemSexManual({
key: 'sexmanual_penetration_mouthhole',
name: 'Sex Manual: Ass Eating',
description: "A second gift of gratitude given to you by your slavers, this time to celebrate the inauguration of the <<rep setup.buildingtemplate.veteranhall>>. Unlocks using the tongue to penetrate anus and vagina.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_penetration_penisbreasts',
name: 'RESERVED FOR KITSUNE. Sex Manual: Titfuck / Pecjob',
description: "Placeholder. Unlocks tit and pec fucking on sufficiently voluptuous / muscular units.",
tags: [],
} )>>
/* ==============
SEX ACTION
============== */
<<run new setup.ItemSexManual({
key: 'sexmanual_cockaction',
name: 'Sex Manual: Cock Action',
description: "A gift from the orcs as a token of their approval towards your company's acts. Unlocks the 'Cock slap' and 'Lick cockhead' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_balls',
name: 'Sex Manual: Balls Action',
description: "A gift from the werewolves as a token of their support for your company's endeavors. Unlocks the 'Lick Balls' and 'Focus Balls' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_earsblowjob',
name: 'Sex Manual: Fun with Ears',
description: "A gift from the neko as a token of their affection with your company's antics. Unlocks the 'Grab ears' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_deepthroat',
name: 'Sex Manual: Deep Throating',
description: "A gift from the elves as a symbol of friendship. Unlocks the 'Deep throat' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_tease',
name: 'Sex Manual: Penetration Tease',
description: "A gift from the people living beyond the southern seas, as a symbol of their interest in you. Unlocks the 'Dick-tease' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_grope',
name: 'Sex Manual: Grope',
description: "A gift from the people living in the eastern deserts, as a symbol of their acknowledgement for your deeds. Unlocks 'Grope breasts' and 'Grope balls' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_nipple_pinch',
name: 'Sex Manual: Nipple Pinch',
description: "A gift from the outlaws as a symbol of mutual cooperation. Unlocks 'Pinch nipples' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_slap_ass',
name: 'Sex Manual: Slap Ass',
description: "A gift from the humans of the northern plains as a symbol of your camaraderie with them. Unlocks 'Slap ass' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_breasts_kiss',
name: 'Sex Manual: Kiss Chest',
description: "A gift from the residents of the City of Lucgate for your continuous support in their endeavors. Unlocks 'Kiss chest' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_tentacle_spitroast',
name: 'Sex Manual: Tentacle Spitroast',
description: "A gift from an... entity from beyond <<lore concept_mist>> that took a liking to your company. Unlocks 'Tentacle spitroast' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_nibble_neck',
name: 'Sex Manual: Nibble Neck',
description: "A gift from the lizardkins, as a sign of their respect. Unlocks 'Nibble neck' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_lick_feet',
name: 'Sex Manual: Bootlicker',
description: "A gift from the Tiger Bank, as a return of your investment in them. Unlocks 'Lick feet' sex action.",
tags: [],
} )>>
<<run new setup.ItemSexManual({
key: 'sexmanual_titfuck_mouth',
name: 'UNOBTAINABLE Sex Manual: Titfuck / Pecjob into Mouth',
description: "Unlocks 'Titfuck / Pecjob into mouth' sex actions. Requires <<rep setup.item.sexmanual_penetration_penisbreasts>> to use.",
tags: [],
} )>>/* ================== */
/* Unlocks Slave Training */
/* ================== */
<<run new setup.ItemTechnology({
key: 'technology_obediencemaster',
name: 'Technology: Obedience Master Training',
description: "A book detailing the proper trainings require to transform the mind of any slave into sheer and pure obedience. It is said that a certain school in the city excels in instilling obedience to its students...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_domesticmaster',
name: 'Technology: Domestic Master Training',
description: "How to pervert the act of cleaning. A mansion in dire need of cleaning within the City of Lucgate may ultimately unlock this secret...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_petmaster',
name: 'Technology: Pet Master Training',
description: "Teaching pups how to behave with proper reward and punishment measures. They say that a certain abode in the forests is choked full of humanlike puppies...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_hornymaster',
name: 'Technology: Horny Master Training',
description: "Anyone can be a sex addict, with the right mindset. The demons of the Mist are said to be master of the art, and the Mist are abound in the deserts...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_research',
name: 'Technology: Willbreaking',
description: "Unlocks the <<rep setup.buildingtemplate.researchroom>>, in which your slavers can research a way to remove <<rep setup.trait.will_defiant>> from a slave.",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'brainwash_technology',
name: 'Technology: Brainwashing',
description: "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...",
tags: [],
})>>
/* ================= */
/* Unlocks flesh-shaping */
/* ================= */
<<run new setup.ItemTechnology({
key: 'water_technology',
name: 'Technology: Flesh Shaping Advanced',
description: "Secret technology that allows you to modify yours and your slavers' physical attributes to some extent. Said to be found deep within the sea...",
tags: [],
} )>>
<<run new setup.ItemTechnology({
key: 'rear_technology',
name: 'Technology: The Rear Deal',
description: "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...",
tags: [],
})>>
/* ================= */
/* Unlocks treatment */
/* ================= */
<<run new setup.ItemTechnology({
key: 'transformation_technology',
name: 'Technology: Transformation',
description: "The secret of the gods that govern how bodies are formed. May be revealed upon the destiny completion of a certain fated adventurer...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'isolation_technology',
name: 'Technology: Memory Isolation',
description: "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...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_blank',
name: 'Technology: Blankness',
description: "The key to demonic manipulation of the mortal mind. They say that a certain demonic slave auction will award this to the most difficult slave order...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'love_technology',
name: 'Technology: Cupid Arrow',
description: "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...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'technology_alternative',
name: 'Technology: Alternate Timeline',
description: "UNOBTAINABLE. An hourglass, said to be able to reverse the flow of time.",
tags: [],
})>>
/* ================== */
/* Unlocks Corruption */
/* ================== */
<<run new setup.ItemTechnology({
key: 'dark_technology',
name: 'Technology: Dark Bargain',
description: "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 <<lore concept_mist>> is said to exist somewhere in the desert...",
tags: [],
})>>
<<run new setup.ItemTechnology({
key: 'wings_technology',
name: 'Technology: Way of the Wings',
description: "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.",
tags: [],
})>>
/* ================== */
/* Unlocks Buildings */
/* ================== */
<<run new setup.ItemTechnology({
key: 'technology_portal',
name: 'Technology: Thinking with Portals',
description: "A tome on how one could harness the chaotic flow of magic to open short-distance portals for fast traveling. Unlocks <<rep setup.buildingtemplate.portalindoors>> and <<rep setup.buildingtemplate.portaloutdoors>>.",
tags: [],
})>><<set _passages = Story.lookup('tags', 'living')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<run new setup.Living({
key: 'cleaning_agent',
name: 'Cleaning Agent',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_maid: setup.LIVING_COMMON_PREFERENCE,
per_submissive: setup.LIVING_MORECOMMON_PREFERENCE,
per_dominant: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
"sending a|their boys and girls to clean a client's mansion",
"personally cleaning a client's mansion",
'managing a|their cleaning company',
],
location: 'agency',
})>><p>
With a|their hard-earned money, <<rep $g.a>> had decided to seize an opening in the market
niche and opens a cleaning company.
The company offers temporary cleaning services to the many opulent mansion littering
the <<lore region_city>>.
The niche turns out to be attractive, and soon <<rep $g.a>> has a steady stream of clients
for a|their boys and girls to send to.
<<if $g.a.isHasTrait('per_submissive')>>
<<Rep $g.a>> would occassionally offer to clean the mansions a|themself,
while secretly enjoying the ordering and occasional abuse by the hiring nobles.
<</if>>
</p><<run new setup.Living({
key: 'clerk',
name: 'Clerk',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_clerk: setup.LIVING_COMMON_PREFERENCE,
per_attentive: setup.LIVING_MORECOMMON_PREFERENCE,
per_dreamy: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'sorting out red tape',
'writing important-looking documents',
'doing paperwork',
],
location: 'office',
})>><p>
After retiring, <<rep $g.a>> took up
<<if $g.a.isHasTrait('bg_clerk')>>
a|their old occupation and began anew
<</if>>
a desk job.
a|They would spend a|their day seated behind the desk writing and stamping
various bureaucratic papers.
<<if !$g.a.isHasTrait('per_chaste')>>
A visitor could occasionally hear strange slurping noise whenever they come into
<<reps $g.a>> office, coming from the slave <<rep $g.a>> had bought using some
of a|their money, and who is chained under the desk to service a|them as a|they work.
<</if>>
</p><<run new setup.Living({
key: 'farmer',
name: 'Farmer',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_farmer: setup.LIVING_COMMON_PREFERENCE,
magic_earth: setup.LIVING_MORECOMMON_PREFERENCE,
magic_earth_master: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'growing crops',
'tending to a|their crops',
'sowing crops',
],
location: 'farm',
})>><p>
<<Rep $g.a>> got a|themself a patch of land just next to your fort with
the money a|they amassed during a|their career.
With the help of some obedient slaves a|they purchased,
<<if $g.a.isHasTrait('bg_farmer')>>
as well as a|their knowledge in farming,
<<elseif $g.a.isHasTrait('magic_earth')>>
as well as using a little bit of a|their earth magic,
<</if>>k
the land is transformed
into a small farm, growing various crops which are then sold into your fort.
The slave workhands would be laboring hard during day, and kept rested
during the night in one of the many slave stables built around the land.
<<if !$g.a.isHasTrait('per_chaste')>>
Some "lucky" slaves would occasionally gone missing from a|their resting
area during the night, and would find themself inside the a|race's bedroom.
<</if>>
</p><<run new setup.Living({
key: 'fisherman',
name: 'Fisherman',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_seaman: setup.LIVING_COMMON_PREFERENCE,
bg_pirate: setup.LIVING_MORECOMMON_PREFERENCE,
per_calm: setup.LIVING_MORECOMMON_PREFERENCE,
per_aggressive: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'fishing',
'catching fish and other strange sea creatures',
'sailing into the seas',
],
location: 'home',
})>><p>
The a|race returned to the sea,
<<if $g.a.isHasTrait('bg_pirate') || $g.a.isHasTrait('bg_seaman')>>
a place the <<man $g.a>> dearly calls home,
<<else>>
a place a|they becomes quite fond of,
<</if>>
and decided to pursue honest work in fishing.
Using the money a|they saved up, a|they built a small hut next to the <<lore region_sea>>,
and spend most of a|their time away at the sea, catching the various sea creatures living there.
The job might be boring to most people, but the a|race loves every moment of it.
</p><<run new setup.Living({
key: 'juggler',
name: 'Juggler',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_entertainer: setup.LIVING_COMMON_PREFERENCE,
skill_entertain: setup.LIVING_MORECOMMON_PREFERENCE,
per_playful: setup.LIVING_MORECOMMON_PREFERENCE,
per_serious: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'practicing juggling',
'performing for a crowd',
'travelling with a|their troupe',
],
location: 'troupe',
})>><p>
After leaving your company, <<rep $g.a>> found new friends in a travelling
circus troupe.
a|They joined as the troupe's resident juggler, and the exslaver's
<<if $g.a.isHasTrait('bg_entertainer')>>
past as an entertainer ensured a|their success.
<<elseif $g.a.isHasTrait('skill_entertain')>>
entertaining skills ensured a|their success.
<<elseif $g.a.isHasTrait('per_playful')>>
playful attitude helped a|them succeed.
<<else>>
deft a|hands helped a|them succeed.
<</if>>
a|They now spends a|their days traveling the land and performing for the adoring masses.
</p><<run new setup.Living({
key: 'day_laborer',
name: 'Day Laborer',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_laborer: setup.LIVING_COMMON_PREFERENCE,
per_slow: setup.LIVING_MORECOMMON_PREFERENCE,
per_smart: -setup.LIVING_UNCOMMON_PREFERENCE,
per_direct: setup.LIVING_MORECOMMON_PREFERENCE,
per_sly: -setup.LIVING_UNCOMMON_PREFERENCE,
muscle_strong: setup.LIVING_MORECOMMON_PREFERENCE,
muscle_verystrong: setup.LIVING_MORECOMMON_PREFERENCE,
muscle_extremelystrong: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'taking a nap',
'helping out with heavy labor around',
'lugging cargos out of a ship',
],
location: 'home',
})>><p>
With enough money to retire comfortably, <<rep $g.a>> did just that, and bought
a home in one of the nearby villages around your fort.
a|They does not just spend a|their entire time snoozing around and using
a|their own slaves, however, and a|they would occasionally
<<if $g.a.isHasTrait('muscle_verystrong')>>
show off a|their massive musculature
<<elseif $g.a.isHasTrait('muscle_strong')>>
show off a|their considerable musculature
<<elseif $g.a.isHasTrait('per_direct')>>
do honest work
<<elseif $g.a.isHasTrait('per_slow')>>
be goaded into doing honest work
<<else>>
ward off boredom
<</if>>
by doing random day labor available in the village.
When a trading ship arrive, they would offer a|their help to lug off the many
crates off the ship.
When it is draught season, they would travel far to carry buckets and buckets of water into the village.
While most people do it for the money, a|they just do it for fun now.
</p><<run new setup.Living({
key: 'lumberjack',
name: 'Lumberjack',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_woodsman: setup.LIVING_COMMON_PREFERENCE,
per_direct: setup.LIVING_MORECOMMON_PREFERENCE,
per_sly: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'chopping a tree',
'hefting a|their heavy axe',
'making firewood',
],
location: 'hut',
})>><p>
<<Rep $g.a>> took all a|their money away and build a|themself a wooden hut
at the outskirts of a forest, as well as purchasing a sturdy wood axe.
a|They enjoys the simplicity of chopping down trees and cutting wood,
a refreshing break from having to use a|their a|arms wielding the <<uweapon $g.a>>.
<<if !$g.a.isHasTrait('per_chaste')>>
Unknown to most people, a|they did spend quite a fortune building a secret dungeon
complex underneath the innocent looking hut, housing who-knows-what...
<</if>>
</p><<run new setup.Living({
key: 'pirate',
name: 'Pirate',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_pirate: setup.LIVING_COMMON_PREFERENCE,
bg_seaman: setup.LIVING_MORECOMMON_PREFERENCE,
per_independent: setup.LIVING_MORECOMMON_PREFERENCE,
per_loyal: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'sailing the seven seas',
'plundering booties',
'stowing away treasures',
],
location: 'ship',
})>><p>
The a|race returned to the sea,
<<if $g.a.isHasTrait('bg_pirate') || $g.a.isHasTrait('bg_seaman')>>
a place the <<man $g.a>> dearly calls home,
<<else>>
a place a|they becomes quite fond of,
<</if>>
and decided to renew a|their career in piracy.
Like pirates of legends, a|they began a|their career by stowing away the
money and treasures a|they had amassed at one of the more secluded islands
of the <<lore region_sea>>.
With that settled, a|they recruited a group of wannabe pirates, and become
a proper pirate by raiding ships and taking away virginities.
a|They becomes quite infamous, and it is rumored that many expensive slaves are
being kept away in the hull of a|their ship, as entertainment of a|their many <<men $g.a>>.
</p><<run new setup.Living({
key: 'raider',
name: 'Raider',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_raider: setup.LIVING_COMMON_PREFERENCE,
bg_thug: setup.LIVING_MORECOMMON_PREFERENCE,
per_playful: setup.LIVING_MORECOMMON_PREFERENCE,
per_serious: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'raiding and raping',
'laying waste to innocent villages',
'burning down villages',
],
location: 'camp',
})>><p>
Despite having accumulated enough money to retire, it seems that <<rep $g.a>>
did not raid for the money, and the a|race resumed raiding by simply joining
yet another raiding company.
a|They now spends a|their days raiding innocent villages and raping its villagers,
while a|their nights are spend drinking and getting drunk with a|their new friends.
</p><<run new setup.Living({
key: 'soldier',
name: 'Soldier',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_soldier: setup.LIVING_COMMON_PREFERENCE,
per_brave: setup.LIVING_MORECOMMON_PREFERENCE,
per_cautious: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'practicing with a|their a|weapon',
'doing combat drills',
'marching',
],
location: 'barracks',
})>><p>
<<Rep $g.a>> decided to
<<if $g.a.isHasTrait('bg_soldier')>>
return to being a soldier, this time
<<else>>
try a|their a|hands at being a proper soldier, but
<</if>>
not for the money, but rather for the thrill that comes with the job.
a|They spends most of a|their time drilling and practicing,
and it was obvious to a|their superiors that the a|race is so much better at combat
than the average person.
a|They would quickly rise up the ranks, and become a respected soldier in the army.
</p><<run new setup.Living({
key: 'tavern_owner',
name: 'Tavern Owner',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_foodworker: setup.LIVING_COMMON_PREFERENCE,
per_dominant: setup.LIVING_MORECOMMON_PREFERENCE,
per_submissive: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'washing dishes',
'serving liquor to the tavern patrons',
'regaling a tale of a|their past to the tavern patrons',
],
location: 'tavern',
})>><p>
The money <<rep $g.a>> had accumulated during a|their career in your company was spent
to establish a tavern just next to your fort.
The a|race
<<if $g.a.isHasTrait('bg_foodworker')>>
has plenty of experience in the area,
<<else>>
is enthusiastic about the opportunity of owning a|their own drinking establishment,
<</if>>
and soon the place becomes quite crowded with visitors as well as some of your slavers
alike.
<<Rep $g.a>> would often tell the many tales a|they had amassed working under your employ.
</p><<run new setup.Living({
key: 'honorable_thief',
name: 'Honorable Thief',
tags: ['common', ],
unit_restrictions: [
setup.qres.NoTrait(setup.trait.per_evil),
],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_thief: setup.LIVING_COMMON_PREFERENCE,
},
business: [
'stealing from the rich',
'giving away to the poor',
'skulking around in the middle of the night',
],
location: 'home',
})>><p>
Having secured a significant chunk of money,
<<rep $g.a>> decided to
pursue a|their long-held dream
of becoming an honorable thief.
Oh yes, the kind that steals from the rich and give away to the poor.
They would infiltrate the many rich mansions of the <<lore region_city>>,
stealing valuables and slaves alike, and while the valuables are given to the poor,
it is unknown what happens to the slaves.
Rumors said that a|they used a|their considerably wealth to buy a mansion in a secluded
area in the <<lore region_vale>> for who-knows-what...
</p><<run new setup.Living({
key: 'thug',
name: 'Thug',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_thug: setup.LIVING_COMMON_PREFERENCE,
skill_intimidating: setup.LIVING_MORECOMMON_PREFERENCE,
per_cruel: setup.LIVING_MORECOMMON_PREFERENCE,
per_kind: -setup.LIVING_UNCOMMON_PREFERENCE,
face_scary: setup.LIVING_MORECOMMON_PREFERENCE,
face_hideous: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'intimidating others',
'extorting money from fine establishments',
'scaring away visitors',
],
location: 'home',
})>><p>
<<Rep $g.a>> returned to the life of crime.
a|They would visit taverns and shops and demand money, but unlike before,
a|their threats feel much more genuine now.
a|They now knows the full depravity of what one could do to another, having worked
in a slaving company, and a|they used it to full effect in a|their intimidations.
<<if $g.a.isHasTrait('skill_intimidating')>>
a|Their intimidating skills helped a lot too.
<<elseif $g.a.isHasTrait('face_scary')>>
a|Their a|face helped a lot too.
<</if>>
</p><<run new setup.Living({
key: 'trader',
name: 'Trader',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_merchant: setup.LIVING_COMMON_PREFERENCE,
per_frugal: setup.LIVING_MORECOMMON_PREFERENCE,
per_lavish: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'buying at a cheap price',
'selling at a high price',
'traveling between settlements',
],
location: 'caravan',
})>><p>
Sometime after retiring, <<rep $g.a>> bought a personal caravan,
and a|they
<<if $g.a.isHasTrait('bg_merchant')>>
resumed a|their old occupation and become an independent trader.
<<else>>
learned how to be an independent trader.
<</if>>
a|They would travel from settlements to settlements, buying cheap goods in one and selling
them at a profit at another place.
The caravan is mostly staffed with obedient slaves, and being an ex-slaver
a|they a|is experienced in how to ensure the slaves would stay in line.
</p><<run new setup.Living({
key: 'vagabond',
name: 'Vagabond',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_nomad: setup.LIVING_COMMON_PREFERENCE,
bg_unemployed: setup.LIVING_MORECOMMON_PREFERENCE,
bg_slave: setup.LIVING_MORECOMMON_PREFERENCE,
per_curious: setup.LIVING_MORECOMMON_PREFERENCE,
per_stubborn: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'wandering aimlessly',
'exploring the unknown',
'sleeping under the full moon',
],
location: 'tent',
})>><p>
With a|their slaving job over, the a|race decided to
<<if $g.a.isHasTrait('bg_slave')>>
enjoy their newly found freedom by living
<<elseif $g.a.isHasTrait('bg_nomad')>>
return to their nomadic lifestyle and live
<<elseif $g.a.isHasTrait('bg_unemployed')>>
return to being jobless and live
<<else>>
not pursue any particular occupation, but live
<</if>>
a|their live wandering the land.
a|They would travel from land to land seeking wonders and beautiful sights, and spend
a|their money buying the strangest trinkets a|they could find in faraway lands.
</p><<run new setup.Living({
key: 'whore',
name: 'Whore',
tags: ['common', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_whore: setup.LIVING_COMMON_PREFERENCE,
per_lustful: setup.LIVING_MORECOMMON_PREFERENCE,
per_sexaddict: setup.LIVING_MORECOMMON_PREFERENCE,
per_chaste: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'selling a|their body',
'sexually servicing a customer',
'blowing a paying customer',
],
location: 'home',
})>><p>
Being a slaver means one would be sexually satisfied, but <<rep $g.a>> seeks something more
than sex between a master and a slave.
a|Their pursue of sex between equals ends in the a|race
<<if $g.a.isHasTrait('bg_whore')>>
returning to a|their prior occupation
<<else>>
trying out a new occupation
<</if>>
in being a free whore.
They would stay around near your fort, offering a sexual service from a free
<<man $g.a>> in exchange for a meager amount of gold.
a|They don't need the gold -- a|they already have quite a plenty of them --
this, as well as the tale of a slaver that turns into a whore makes a|them
rather famous already around your fort.
</p><<run new setup.Living({
key: 'criminal_boss',
name: 'Criminal Boss',
tags: ['rare', ],
unit_restrictions: [
setup.qres.AnyTrait([
'bg_boss', 'bg_assassin', 'bg_thug', 'bg_thief',
], true),
],
default_preference: 0,
trait_preferences: {
bg_boss: setup.LIVING_RARE_PREFERENCE,
skill_connected: setup.LIVING_COMMON_PREFERENCE,
},
business: [
'making grand evil schemes',
'making a silly amount of illegal money',
'overseeing a big underworld slaving operations',
],
location: 'villa',
})>><p>
<<if $g.a.isHasTrait('bg_boss')>>
With a|their vacation over, <<rep $g.a>> returns to a|their main occupation
as the leader of a certain underworld criminal networks.
<<else>>
After a|they retired from slaving, <<rep $g.a>> takes up crime once again.
The experiences being a slaver under your employ
<<if $g.a.isHasTrait('skill_connected')>>
as well as a|their many connections
<</if>>
propel a|them to leadership.
<</if>>
a|Their job consists mainly of overseeing all the illegal and underhanded operations,
<<if $g.a.isHasTrait('per_studious')>>
a task a|they much prefers than getting a|their a|hands dirty.
<<else>>
and sometimes a|they miss the days working under your command and getting a|their a|hands dirty.
<</if>>
</p><<run new setup.Living({
key: 'darkgod',
name: 'Dark God',
tags: ['rare', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_mythical),
setup.qres.Trait(setup.trait.per_evil),
],
default_preference: setup.LIVING_RARE_PREFERENCE,
trait_preferences: {
},
business: [
'bestowing curses upon others',
'converting a worshipper or two into slaves',
'being serviced by a|their devout worshippers and slaves alike',
],
location: 'temple',
})>><p>
After a|their relatively short adventure as a slaver,
<<rep $g.a>>
returned to <<uhomeland $g.a>> where a|their worshippers obediently waited
all these years.
In truth, these worshippers are treated as nothing by slaves by the evil
<<rep $g.a>>, who would often demand many strange tasks out of these blindly obedient
cult members.
</p><<run new setup.Living({
key: 'demon',
name: 'Demon',
tags: ['rare', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.subrace_demon),
],
default_preference: setup.LIVING_RARE_PREFERENCE,
trait_preferences: {
},
business: [
'doing god-knows-what in the land beyond the Mist',
],
location: 'castle',
})>><p>
After spending all a|their money buying the rarest slaves
<<lore continent_main>> has to offer,
<<rep $g.a>> vanished completely from the mortal plane.
It is rumored that the demon had returned back to a|their home,
far beyond <<lore concept_mist>>, taking all these poor slaves
for god-knows what purpose.
Still, a|they would occasionally be seen back in the mortal plane,
being one of the few demons with the luxury of being able to go
and away to this plane as a|they please.
</p><<run new setup.Living({
key: 'god',
name: 'Living God',
tags: ['rare', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_mythical),
setup.qres.NoTrait(setup.trait.per_evil),
],
default_preference: setup.LIVING_RARE_PREFERENCE,
trait_preferences: {
},
business: [
'bestowing wisdom on others',
'being worshipped',
'being serviced by a|their devout worshippers',
],
location: 'temple',
})>><p>
With a|their relatively short excursion over, <<rep $g.a>>
returned to <<uhomeland $g.a>> where a|their worshippers obediently waited
all these years.
<<Rep $g.a>> spends a|their days advising a|their followers and giving away sermons,
and the sermons are much more worldlier now compared to before a|their short slaving career.
</p><<run new setup.Living({
key: 'mistwalker',
name: 'Mistwalker',
tags: ['rare', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_mist: setup.LIVING_RARE_PREFERENCE,
magic_dark: setup.LIVING_MORECOMMON_PREFERENCE,
magic_dark_master: setup.LIVING_COMMON_PREFERENCE,
},
business: [
'guiding people in and out from the mist',
'going back and forth between this world and the next',
'delivering mortal slaves to the world beyond the mist',
],
location: 'home',
})>><p>
Despite the amount of money a|they had made being a slaver,
boredom eventually came over the a|race and <<rep $g.a>>
<<if $g.a.isHasTrait('bg_mist')>>
resumes a|their old occupation of
<<else>>
takes up a new occupation in
<</if>>
being a mistwalker.
<<if $g.a.isHasTrait('magic_dark')>>
With a|their mastery of dark magic, a|they almost effortlessly weave between
this world and the next.
<<else>>
a|They might not possess dark magic, but a|their wealth of expertise as well as the harrowing
encounters a|they met during a|their slaving tenure help a|them in the difficult task.
<</if>>
</p><<run new setup.Living({
key: 'ruler',
name: 'Ruler',
tags: ['rare', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_royal),
],
default_preference: setup.LIVING_RARE_PREFERENCE,
trait_preferences: {
},
business: [
'ruling a|their subjects',
'governing a|their lands',
'making laws',
],
location: 'castle',
})>><p>
<<Rep $g.a>> returned to a|their kingdom, and resumed a|their rule.
<<if $g.a.isHasTrait('per_chaste')>>
a|They gives little hint that a|they a|was once a slaver, ruling a|their
kingdom with nothing but temperance and chastity.
<<else>>
a|Their experiences as a slaver are reflected in the newly built sex dungeons
hidden away under a|their castle, where prisoners are trained and secretly
sold as slaves.
<</if>>
</p><<run new setup.Living({
key: 'adventurer',
name: 'Adventurer',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_adventurer: setup.LIVING_COMMON_PREFERENCE,
per_curious: setup.LIVING_MORECOMMON_PREFERENCE,
per_active: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'traveling the land',
'taking up a quest from a village',
'going on an adventure',
],
location: 'home',
})>><p>
Money alone is unable to satiate <<reps $g.a>> wanderlust, and last you heard,
the a|race has
<<if $g.a.isHasTrait('bg_adventurer')>>
once again
<</if>>
taken up the mantle of an adventurer.
a|They spends a|their days scouring the land in search of treasure and adventure.
</p><<run new setup.Living({
key: 'alchemist',
name: 'Alchemist',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.skill_alchemy),
],
default_preference: setup.LIVING_UNCOMMON_PREFERENCE,
trait_preferences: {
},
business: [
'brewing potions',
'mixing ingredients for a new potion',
'testing a concoction on a slave',
],
location: 'hut',
})>><p>
<<Rep $g.a>> has used a|their saving to purchase a small alchemical laboratory,
where a|they now spend a|their days in.
a|They would try to concoct new potions as sort of a hobby, in would use
a|their money to purchase a slave or two to test the concoctions on.
</p><<run new setup.Living({
key: 'assassin',
name: 'Assassin',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_assassin: setup.LIVING_COMMON_PREFERENCE,
bg_thief: setup.LIVING_MORECOMMON_PREFERENCE,
per_cruel: setup.LIVING_MORECOMMON_PREFERENCE,
per_kind: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'skulking around a|their target',
'claiming bounties',
'stealthily poisoning a|their bounties',
],
location: 'home',
})>><p>
<<Rep $g.a>>
<<if $g.a.isHasTrait('bg_assassin')>>
resumes a|their old occupation as
<<else>>
takes up the occupation of
<</if>>
being an assassin.
Unlike most other assassins, however, a|they has the luxury of not doing it for the pay.
Instead, a|they would a|take up the most
<<if $g.a.isHasTrait('per_cruel')>>
devilish
<<else>>
challenging
<</if>>
contracts for fun.
Sometimes, a|they would simply make a|their target disappear, which would then appear
in a|their personal sex dungeons.
</p><<run new setup.Living({
key: 'blacksmith',
name: 'Blacksmith',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_metalworker: setup.LIVING_COMMON_PREFERENCE,
muscle_strong: setup.LIVING_MORECOMMON_PREFERENCE,
muscle_verystrong: setup.LIVING_MORECOMMON_PREFERENCE,
muscle_extremelystrong: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_water: -setup.LIVING_COMMON_PREFERENCE,
magic_water_master: -setup.LIVING_COMMON_PREFERENCE,
muscle_thin: -setup.LIVING_COMMON_PREFERENCE,
muscle_verythin: -setup.LIVING_COMMON_PREFERENCE,
muscle_extremelythin: -setup.LIVING_COMMON_PREFERENCE,
},
business: [
'working away in the forge',
'working the metal',
'hammering the anvil',
],
location: 'forge',
})>><p>
With the money a|they saved during a|their slaving tenure,
<<rep $g.a>> opens a blacksmith shop in one of the nearby villages around your fort.
a|They becomes famous for
<<if $g.a.isHasTrait('muscle_verystrong')>>
a|their
extremely hardy crafts, a product of a|their bulging muscles.
<<elseif $g.a.isHasTrait('muscle_strong')>>
a|their
hardy crafts, a product of a|their strong a|hands.
<<elseif $g.a.isHasTrait('magic_fire')>>
a|their
use of fire magic in smithing a|their crafts.
<<elseif $g.a.isHasTrait('per_chaste')>>
a|their
more mundane items such as shovels and rakes.
<<else>>
crafting
specifically designed bondage cages.
<</if>>
</p><<run new setup.Living({
key: 'brothel_owner',
name: 'Brothel Owner',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_courtesan: setup.LIVING_COMMON_PREFERENCE,
bg_whore: setup.LIVING_MORECOMMON_PREFERENCE,
skill_entertain: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'managing a|their brothel expenses',
'training a|their brothel slaves',
'attending to an important customer',
],
location: 'brothel',
})>><p>
<<Rep $g.a>> uses the money a|they have hard-earned to make even more money
by employing the oldest trade known to a|race: selling sex.
But this time, a|they would not be selling a|their own body,
but rather a|they acquires a stable of slaves and begin selling a|their body.
<<if $g.a.isHasTrait('skill_entertain')>>
<<Rep $g.a>> a|is rather good at entertaining others too, which helps grow
the popularity of the brothel.
<</if>>
In time, the brothel becomes rather popular,
<<if $g.a.isHasTrait('per_chaste')>>
although <<reps $g.a>> own <<ubody $g.a>> always remain off-limit regardless of how
high a customer is willing to pay.
<<else>>
and it is said that <<reps $g.a>> own <<ubody $g.a>> would be available for the right price.
<</if>>
</p><<run new setup.Living({
key: 'dark_priest',
name: 'Dark Priest',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.per_evil),
],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_priest: setup.LIVING_COMMON_PREFERENCE,
magic_dark: setup.LIVING_MORECOMMON_PREFERENCE,
magic_dark_master: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'praying for power',
'performing a dark ritual',
'sacrificing a slave',
],
location: 'temple',
})>><p>
<<Rep $g.a>> bought many slaves with the money a|they had gathered for a very sinister purpose.
Once a|they corralled them into a secluded valley, a|they began performing a dark ritual,
sacrificing them in exchange for dark power.
a|They becomes known as the Dark Priest,
and opened a small but secret temple somewhere in <<lore continent_main>>.
It is said that slaves are continuously sacrificed to the power beyond
<<lore concept_mist>> in exchange for more and more power every day...
</p><<run new setup.Living({
key: 'engineer',
name: 'Engineer',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_engineer: setup.LIVING_COMMON_PREFERENCE,
skill_creative: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'inventing new devices',
'designing machineries',
'building new and exotic machineries',
],
location: 'home',
})>><p>
<<Rep $g.a>> uses the money a|they has collected to purchase a large quantity
of mechanical gears and cogs.
a|They would spend many days combining these into strange contraptions,
often with its own unique sexual uses, no doubt inspired by a|their past
working away as a slaver.
</p><<run new setup.Living({
key: 'healer',
name: 'Healer',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_healer: setup.LIVING_COMMON_PREFERENCE,
per_kind: setup.LIVING_MORECOMMON_PREFERENCE,
per_cruel: -setup.LIVING_UNCOMMON_PREFERENCE,
magic_light: setup.LIVING_MORECOMMON_PREFERENCE,
magic_light_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_dark: -setup.LIVING_COMMON_PREFERENCE,
magic_dark_master: -setup.LIVING_COMMON_PREFERENCE,
},
business: [
'healing others',
'relieving the pain of others',
'treating the wounded',
],
location: 'clinic',
})>><p>
Using the money a|they has amassed throughout a|their slaving career,
<<rep $g.a>>
<<if $g.a.isHasTrait('bg_healer')>>
resumes a|their prior calling by
<<else>>
fulfills a|their dream of
<</if>>
opening a|their own clinic.
<<if $g.a.isHasTrait('magic_light')>>
Being gifted with light magic means that a|they is able to heal much more
efficiently than regular healers,
<<else>>
a|They has long experience with wounds, having been working as a slaver,
<</if>>
and a|their clinic quickly becomes popular.
<<if !$g.a.isHasTrait('per_chaste')>>
Sometimes, a|they would waive payment in exchange for a buttfuck or two.
<</if>>
</p><<run new setup.Living({
key: 'hedge_wizard',
name: 'Hedge Wizard',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_apprentice: setup.LIVING_COMMON_PREFERENCE,
bg_mystic: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire: setup.LIVING_MORECOMMON_PREFERENCE,
magic_water: setup.LIVING_MORECOMMON_PREFERENCE,
magic_wind: setup.LIVING_MORECOMMON_PREFERENCE,
magic_earth: setup.LIVING_MORECOMMON_PREFERENCE,
magic_dark: setup.LIVING_MORECOMMON_PREFERENCE,
magic_light: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'casting a cantrip',
'brewing a spell amplifier',
'casting a spell of self-improvement',
],
location: 'tower',
})>><p>
After storing most of a|their personal wealth in the safe and secure vaults
of the <<rep $company.bank>>, <<rep $g.a>>
chose to pursue magic before finally becoming a resident hedge wizard.
They would offer a|their magical services for a meager price, and while it is nowhere
near as spectacular as those magic cast by full wizards, a|their magic is sufficient
for the more mundane tasks such as summoning water during draughts or blessing a harvest.
<<if !$g.a.isHasTrait('per_chaste')>>
The magic also makes for great party tricks, and a|they would often employ it to spice
up sex with a|their newly bought slaves.
<</if>>
</p><<run new setup.Living({
key: 'hunter',
name: 'Hunter',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_hunter: setup.LIVING_COMMON_PREFERENCE,
bg_woodsman: setup.LIVING_MORECOMMON_PREFERENCE,
per_loner: setup.LIVING_MORECOMMON_PREFERENCE,
per_gregarious: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'hunting game',
'trudging away through the forests',
'patiently watching a|their prey',
],
location: 'abode',
})>><p>
With enough money to retire comfortably, <<rep $g.a>> decided to build a small
hut in the depths of the <<lore region_forest>> and spend a|their days
secluded there, living off the many game in the forest.
a|They keeps an obedient slave to watch over a|their abode, of course,
but outside of the slave, a|they rarely interact with others.
<<if $g.a.isHasTrait('per_loner')>>
The loner a|race would not have it any other way.
<</if>>
</p><<run new setup.Living({
key: 'information_broker',
name: 'Information Broker',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_informer: setup.LIVING_COMMON_PREFERENCE,
bg_thief: setup.LIVING_MORECOMMON_PREFERENCE,
skill_connected: setup.LIVING_MORECOMMON_PREFERENCE,
per_sly: setup.LIVING_MORECOMMON_PREFERENCE,
per_direct: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'trading in secrets',
'holding a meeting under the guise of darkness',
'tailing a target',
],
location: 'office',
})>><p>
Using the money a|they had gathered during a|their career as a slaver,
a|they decided to
<<if $g.a.isHasTrait('bg_informer')>>
return to a|their former area of information gathering.
<<else>>
a|try a|their a|hands at information gathering.
<</if>>
<<if $g.a.isHasTrait('skill_connected')>>
With the help of a|their many connections,
<<elseif $g.a.isHasTrait('per_sly')>>
With the help of a|their slithery tongue,
<<else>>
With the help of a|their experiences as a slaver,
<</if>>
a|they a|was able to secure a handful of reliable informants, and before long,
a|their name starts to spread across the underworld.
Before long, a|they would be known as the information broker of the underworld,
specializing in trading and dealing secrets.
</p><<run new setup.Living({
key: 'knight',
name: 'Knight',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_knight),
setup.qres.NoTrait(setup.trait.per_evil),
],
default_preference: setup.LIVING_UNCOMMON_PREFERENCE,
trait_preferences: {
},
business: [
'going on a quest',
'practicing jousting',
'protecting a noble',
],
location: 'room',
})>><p>
Despite having being a slaver for a few years, <<rep $g.a>> somehow remains
a knight in body and soul.
Last you heard, a|they has resumed a|their knightly duties of protecting
damsels and slaying evil, and rumors said that the a|adjgood knight wield
both his massive and not-as-massive "swords" skilfully.
</p><<run new setup.Living({
key: 'mercenary',
name: 'Mercenary',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_mercenary: setup.LIVING_COMMON_PREFERENCE,
bg_soldier: setup.LIVING_MORECOMMON_PREFERENCE,
per_frugal: setup.LIVING_MORECOMMON_PREFERENCE,
per_lavish: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'taking up mercenary work',
'slaying monsters for pay',
'haggling reward for a mercenary quest',
],
location: 'home',
})>><p>
Despite already having enough money to simply retire, <<rep $g.a>> grew too restless
and decided to
<<if $g.a.isHasTrait('bg_mercenary')>>
once again
<<else>>
try a|their a|hands at something new and
<</if>>
take up being a mercenary job.
a|They would spend
<<if $g.a.isHasTrait('per_frugal')>>
days haggling the rewards before taking up any quest, making sure to squeeze every potential
coin out of the contract.
<<else>>
hours haggling the rewards for any quest a|they take.
<</if>>
<<if !$g.a.isHasTrait('per_kind')>>
a|Their services would grow quite famous, especially when it comes to recapturing slaves.
<</if>>
Occasionally, some quests would bring a|them over to the fort, either to seek help
or to resupply.
</p><<run new setup.Living({
key: 'monk',
name: 'Monk',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_monk: setup.LIVING_COMMON_PREFERENCE,
bg_priest: setup.LIVING_MORECOMMON_PREFERENCE,
per_serious: setup.LIVING_MORECOMMON_PREFERENCE,
per_playful: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'meditating under the waterfall',
'honing a|their body',
'watching over a|their junior monks',
],
location: 'monastery',
})>><p>
Using the money a|they had saved throughout a|their slaving career,
a|they built a small monastery in the mountains on <<lore region_vale>>.
The monastery is open to wanderers as well as people who are looking for a purpose
in a|their life,
<<if $g.a.isHasTrait('per_evil')>>
although little do they know that <<rep $g.a>> would secretly corrupt a|their thoughts
and turn them into a|their evil monk minions.
a|They secretly has a|their eyes on domination, but who knows how long it would take
them to see a|their goal to fruition with such a strange plan?
<<else>>
and <<rep $g.a>> would personally guide them in the path of self-reflection.
<</if>>
</p><<run new setup.Living({
key: 'mystic',
name: 'Mystic',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_mystic: setup.LIVING_COMMON_PREFERENCE,
bg_apprentice: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_water_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_wind_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_earth_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_dark_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_light_master: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'studying magic',
'practicing a|their magic',
'researching the deeper arts of magic',
],
location: 'tower',
})>><p>
<<Rep $g.a>> uses the money a|they had amassed to
<<if $g.a.isHasTrait('bg_mystic')>>
continue a|their prior engagement and
<<else>>
pursue a|their new interest in magic and
<</if>>
advance a|their understanding of magic.
It is said that a|their home is a big mess of
tomes, scrolls, and staves, scattered around the entire place.
</p><<run new setup.Living({
key: 'noble',
name: 'Noble',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_noble),
],
default_preference: setup.LIVING_UNCOMMON_PREFERENCE,
trait_preferences: {
},
business: [
'attending a high-class party',
'mingling in high society',
'drinking high-quality wine',
],
location: 'mansion',
})>><p>
<<Rep $g.a>> a|retires back to a|their noble abode.
<<if $g.a.isHasTrait('per_kind')>>
Being a slaver meant the a|race has known the worst in a <<man $g.a>>,
and as a result a|they is said to treat a|their lessers magnanimously.
<<else>>
While never confirmed, it is rumored that all maids and butlers serving
in the noble's new home must undergone what is akin to slave training.
<</if>>
</p><<run new setup.Living({
key: 'painter',
name: 'Painter',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_artist: setup.LIVING_COMMON_PREFERENCE,
skill_creative: setup.LIVING_MORECOMMON_PREFERENCE,
per_dreamy: setup.LIVING_MORECOMMON_PREFERENCE,
per_attentive: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'coloring a painting',
'sketching a painting',
'finishing a painting',
],
location: 'workshop',
})>><p>
With enough money and personal slaves to guarantee a|them a comfortable life,
<<rep $g.a>> is finally free to
<<if $g.a.isHasTrait('bg_artist')>>
pursue a|their hobby of painting
<<else>>
pursue a|their new hobby in painting
<</if>>
in the earnest.
a|They had dreamed to draw the many wondrous landscape a|they had
encountered throughout a|their slaving career, and a|they now do
it slowly, enjoying every step in the process.
</p><<run new setup.Living({
key: 'priest',
name: 'Priest',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.NoTrait(setup.trait.per_evil),
],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_priest: setup.LIVING_COMMON_PREFERENCE,
magic_light: setup.LIVING_MORECOMMON_PREFERENCE,
magic_light_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire: setup.LIVING_MORECOMMON_PREFERENCE,
magic_fire_master: setup.LIVING_MORECOMMON_PREFERENCE,
magic_water: setup.LIVING_MORECOMMON_PREFERENCE,
magic_water_master: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'praying to the higher beings',
'performing a ritual',
'giving a sermon',
],
location: 'temple',
})>><p>
With enough money to satisfy all a|they need for living comfortably, a|they
<<if $g.a.isHasTrait('bg_priest')>>
returned to a|their calling
<<else>>
pursued a|their new calling
<</if>>
and became a priest.
<<if $g.a.isHasTrait('magic_fire')>>
a|They would travel the land, purifying corruption whenever a|they go.
<<elseif $g.a.isHasTrait('magic_light')>>
a|They would travel the land, healing the wounded whenever a|they go.
<<elseif $g.a.isHasTrait('magic_water')>>
a|They would join one of the many flesh-shaping temples on the <<lore region_vale>>.
<<else>>
a|They would open a small temple, and the devout or the lost could come and find guidance there.
<</if>>
</p><<run new setup.Living({
key: 'rogue_knight',
name: 'Rogue Knight',
tags: ['uncommon', ],
unit_restrictions: [
setup.qres.Trait(setup.trait.bg_knight),
setup.qres.Trait(setup.trait.per_evil),
],
default_preference: setup.LIVING_UNCOMMON_PREFERENCE,
trait_preferences: {
},
business: [
'taking the virginities of innocent villagers',
'fighting good-meaning heroes',
'scouring the land for virgins',
],
location: 'home',
})>><p>
<<Rep $g.a>> picks up a|their <<uweapon $g.a>>, dons a black armor, and travels
the land as a dark evil knight.
Rumors say that many unsuspecting villagers have their virginities taken by the
evil a|race.
</p><<run new setup.Living({
key: 'scholar',
name: 'Schoolar',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_scholar: setup.LIVING_COMMON_PREFERENCE,
bg_wiseman: setup.LIVING_MORECOMMON_PREFERENCE,
per_studious: setup.LIVING_MORECOMMON_PREFERENCE,
per_active: -setup.LIVING_UNCOMMON_PREFERENCE,
},
business: [
'reading new books',
'writing manuscripts',
'expanding a|their knowledge',
],
location: 'library',
})>><p>
<<Rep $g.a>>
<<if $g.a.isHasTrait('bg_scholar')>>
resumes a|their scholarly interest by
<<else>>
explores a|their new interest in scholarly tasks by
<</if>>
purchasing many strange and exotic books from travelers all around the continent,
which a|they would then keep in a|their personal library.
<<if !$g.a.isHasTrait('per_chaste')>>
A shelf is dedicated to storing the many sex manuals scattered around the land
that a|they has learned to exist thanks to a|their time in your employ.
<</if>>
</p><<run new setup.Living({
key: 'slaver',
name: 'Slaver',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_slaver: setup.LIVING_COMMON_PREFERENCE,
bg_thug: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'going on a Lv. 60 hard quest',
'training a slave',
'enjoying the services of a slave',
],
location: 'company fort',
})>><p>
Once a slaver, always a slaver.
After leaving your company, <<rep $g.a>> simply join another one of the many
slaving companies in the area.
a|They would rise in the ranks,
no small part thanks to a|their <<upraisenoun $g.a>> as well as a|their wealth
of experience,
before eventually becoming the second in command of a|their new company.
</p><<run new setup.Living({
key: 'tailor',
name: 'Tailor',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_artisan: setup.LIVING_COMMON_PREFERENCE,
skill_creative: setup.LIVING_MORECOMMON_PREFERENCE,
per_calm: setup.LIVING_MORECOMMON_PREFERENCE,
per_aggressive: -setup.LIVING_COMMON_PREFERENCE,
},
business: [
'weaving new clothes',
'working the needle',
'peddling a|their freshly-knit clothes',
],
location: 'tailorshop',
})>><p>
With the money a|they had collected, a|they purchased a small tailor shop
in the small town that has been developing around your fort.
<<if $g.a.isHasTrait('skill_creative')>>
a|Their embroidery becomes famous for its complex and mind-evoking designs.
<<elseif $g.a.isHasTrait('per_calm')>>
a|Their embroidery becomes famous for its intricate designs, which must have
taken the patient slaver quite a while to sew.
<<else>>
a|Their embroidery becomes rather famous, no small thanks to a|their <<upraisenoun $g.a>>.
<</if>>
As a|they receive more and more orders, would buy several slaves to help with a|their duties.
<<if $g.a.isHasTrait('per_kind')>>
a|They would treat a|their slaves fairly, punishing them when a|they make a mistake and
rewarding them for good work.
<<else>>
The live of a slaver never truly leave the a|race, however, and these slaves serve other
purposes during the many nights.
<</if>>
</p><<run new setup.Living({
key: 'wildman',
name: 'Wildman',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: 0,
trait_preferences: {
bg_wildman: setup.LIVING_COMMON_PREFERENCE,
per_gregarious: -setup.LIVING_UNCOMMON_PREFERENCE,
per_loner: setup.LIVING_MORECOMMON_PREFERENCE,
},
business: [
'spending a|their days away lost in the wilds',
'venturing out in the wilds',
'braving the unknown',
],
location: 'hut',
})>><p>
After making sure a|their money are stored safely in the <<rep $company.bank>>'s vaults,
<<rep $g.a>> retreated back into the wilderness of
<<uhomeland $g.a>>
<<if $g.a.isHasTrait('bg_wildman')>>
The wild<<man $g.a>> resumes a|their old lifestyle, and seems perfectly content with it.
<<else>>
The loner a|race has always felt uncomfortable near other people, and living as a recluse seems
like a perfect fit for a|them.
<</if>>
a|They keeps a single slave with a|them, no doubt a warm reminder of a|their past as a slaver.
</p><<run new setup.Living({
key: 'wiseman',
name: 'Wiseman',
tags: ['uncommon', ],
unit_restrictions: [],
default_preference: setup.LIVING_VERYCOMMON_PREFERENCE,
trait_preferences: {
bg_wiseman: setup.LIVING_COMMON_PREFERENCE,
per_smart: setup.LIVING_MORECOMMON_PREFERENCE,
per_slow: -setup.LIVING_COMMON_PREFERENCE,
},
business: [
'advising the less wise',
'relaxing in a|their home',
'receiving guests in a|their new home',
],
location: 'home',
})>><p>
<<Rep $g.a>> knows that a|they a|is lucky to leave the slaving business relatively intact,
and spends the money a|they had earned to purchase a humble home in one of the villages
near your fort.
Despite planning to retire there in peace,
<<if $g.a.isHasTrait('bg_wiseman')>>
a|their reputation as a former wiseman spreads,
<<elseif $g.a.isHasTrait('per_smart')>>
a|their reputation as an intellectually gifted a|race spreads,
<<else>>
a|their reputation as an experienced <<man $g.a>> spreads,
<</if>>
and before long many villagers would patron a|their home, seeking a|their wisdom in many fields.
</p><<run new setup.Living({
key: 'retiree',
name: 'Retiree',
tags: ['basic',],
unit_restrictions: [],
default_preference: setup.LIVING_EXTREMELYCOMMON_PREFERENCE,
trait_preferences: {},
business: [
'taking care of a|themself',
'relaxing at home',
'using one of a|their slaves at home',
],
location: 'home',
})>><p>
<<Rep $g.a>> does not do anything particularly interesting now.
a|They has a large stash of money from a|their time working under your employ, and
a|they uses it to purchase a modest abode, as well as a few slaves, and spends most
of a|their time there.
Despite a|their age, a|they mostly lives like a retired old <<man $g.a>> now.
</p><<run new setup.Living({
key: 'electrician',
name: 'Electrician',
tags: ['unicorn', ],
unit_restrictions: [
setup.qres.HasTitle('quest_electricmaster_the_electrician'),
],
default_preference: setup.LIVING_UNICORN_PREFERENCE,
trait_preferences: {
},
business: [
'torturing a|their slaves with electricity',
'watching new challenger trying to rob a|their mansion',
'displaying one of a|their many mansion slaves within the hallways',
],
location: 'mansion',
})>><p>
The Electrician <<rep $g.a>> returned to a|their home in the <<lore region_city>>,
and resumed a|their prior business as usual.
The mansion is once again fully fitted with traps, and every now and then
the Electrician would enjoy a|themself breaking a new slave or two who was
foolish enough to try to rob a|their dangerous mansion.
</p><<run new setup.Living({
key: 'author',
name: 'Author',
tags: ['unicorn', ],
unit_restrictions: [
setup.qres.HasTitle('quest_author_of_the_teachings_of_obedience_0'),
],
default_preference: setup.LIVING_UNICORN_PREFERENCE,
trait_preferences: {
},
business: [
'writing new passages',
'reading books for inspirations',
'signing one of a|their books',
],
location: 'library',
})>><p>
<<Yourrep $g.a>> decided to put down the whip and take up the pen as a permanent job.
Thanks to <<their $g.a>> runaway success with <<their $g.a>> prior book, The
Teachings of Obedience, <<they $g.a>> quickly find new readers with <<their $g.a>>
subsequent books.
Their fourth book,
<<if $g.a.isHasTrait('per_lustful')>>
The Slaver's Many Lovers,
<<elseif $g.a.isHasTrait('per_chaste')>>
A Chaste Slaver
<<elseif $g.a.isHasTrait('per_brave')>>
The Dragon and the Slave
<<elseif $g.a.isHasTrait('per_cruel')>>
The Whipping Slave
<<elseif $g.a.isHasTrait('per_kind')>>
Touch of Sympathy
<<else>>
The Slaver's Guide to Everything
<</if>>
became a best-seller in <<lore continent_main>>.
</p><<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>>
You remember that your slavers
<<message 'refuse to wear slutty clothings'>>
<div class='helpcard'>
Most slavers will refuse to wear clothes whose Sluttiness
rating is <<= setup.EQUIPMENT_SLAVER_SLUTTY_LIMIT_NORMAL >> or higher.
On top of this,
<<rep setup.trait.per_chaste>> slavers will refuse to wear
even slightly slutty clothings, while
<<rep setup.trait.per_lustful>> or <<rep setup.trait.per_sexaddict>> might
be willing to wear sluttier clothings.
</div>
<</message>>, but there are no such
restriction for your slaves or even you, if you are willing.
Some equipments also have restrictions on who can possibly use them.
<br/>
<<focmove "(See spare equipment list)" "ArmoryEquipment">>
<<if $armory.isCanAddNewEquipmentSet()>>
<<link '(Add new equipment set)'>>
<<run $armory.newEquipmentSet()>>
<<focgoto 'Armory'>>
<</link>>
<</if>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'equipmentset',
filter_objects: _sets,
display_callback: equipment_set => {
if ($menufilter.get('equipmentset', 'display') == 'compact') {
return setup.DOM.Card.equipmentsetcompact(equipment_set);
} else {
return setup.DOM.Card.equipmentset(equipment_set);
}
},
})>>
<<attach _dom>><<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])>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'equipment',
filter_objects: _forfilter,
display_objects: _display,
display_callback: equipment_obj => {
if ($menufilter.get('equipment', 'display') == 'compact') {
return setup.DOM.Card.equipmentcompact(equipment_obj[0]);
} else {
return setup.DOM.Card.equipment(equipment_obj[0]);
}
},
})>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _equipmentset = $equipmentset[$gEquipmentSet_key]>>
<p>
Choose unit to equip <<= _equipmentset.rep() >> on:
<<focreturn '(cancel)'>>
</p>
<<if _equipmentset.getSluttiness() >= setup.EQUIPMENT_SLAVER_SLUTTY_LIMIT_NORMAL>>
<p>
This equipment sluttiness rating of <<= _equipmentset.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>>
<<set _dom = setup.DOM.Roster.equipmentsetequip(_equipmentset)>>
<<attach _dom>><<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]>>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.link(
'Confirm [space]',
() => {
const res = State.variables.gEquipmentSetChangeReturnPassage;
delete State.variables.gEquipmentSetChangeReturnPassage;
setup.DOM.Nav.goto(res);
},
)
)>>
<div>
<<foclink '(Confirm)'>>
<<set _res = $gEquipmentSetChangeReturnPassage>>
<<unset $gEquipmentSetChangeReturnPassage>>
<<focgoto _res>>
<</foclink>>
</div>
<<set _dom = setup.DOM.Menu.equipmentsetedit(_equipmentset)>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _bedchamberx = $bedchamber[$gBedchamber_key]>>
You enter <<= _bedchamberx.getName()>>.
<<bedchambercard _bedchamberx>>
<<focmove '(Exit room)' 'BedchamberList'>>
<<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>>
<<set _dom = setup.DOM.Menu.interactionpool(setup.interactionpool.unit, _slave)>>
<<attach _dom>>
<</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 _dom = setup.DOM.Roster.bedchambersetslaver(_bedchamberx)>>
<<attach _dom>><<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)'>>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.return(
'Confirm [space]',
)
)>><<set $gMenuVisible = false>>
<<set _bedchamber = $bedchamber[$gBedchamber_key]>>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.link(
'Confirm [space]',
() => {
const res = State.variables.gBedchamberChangeFurnitureReturnPassage;
delete State.variables.gBedchamberChangeFurnitureReturnPassage;
setup.DOM.Nav.goto(res);
},
)
)>>
<div>
<<foclink '(Confirm)'>>
<<set _res = $gBedchamberChangeFurnitureReturnPassage>>
<<unset $gBedchamberChangeFurnitureReturnPassage>>
<<focgoto _res>>
<</foclink>>
</div>
<<set _dom = setup.DOM.Menu.bedchamberedit(_bedchamber)>>
<<attach _dom>><<set _owner = _bedchamber.getSlaver()>>
<<set _slaves = _bedchamber.getSlaves()>>
<<set _isyou = (_owner == $unit.player)>>
<p>
<<rep _bedchamber>>
belongs to
<<if _isyou>>
you.
<<else>>
<<rep _owner>>
<</if>>
<<if !_slaves.length>>
There are currently <<dangertextlite 'no slaves'>> in the room.
You can assign some by assigning slaves into the
<<for _duty range _bedchamber.getDuties()>>
<<rep _duty>>
<</for>>
duties.
<<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>>
<</if>>
<</if>>
</p>
<<set _busyslaves = _bedchamber.getAssignedSlaves().filter(unit => !unit.isAvailable())>>
<<if _busyslaves.length>>
<p>
<<for _busyslave range _busyslaves>>
<<Yourrep _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 <<ucmouth _slaves[0]>>
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 <<ucmouth _slaves[1]>>
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 <<ucmouth _slaves[0]>>
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 <<ucmouth _slaves[1]>>
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 <<ucmouth _slaves[0]>>
most of the time.
<</if>>
<<if _slaves.length > 1 && _slaves[1].isHasTrait(setup.trait.eq_gagged)>>
<<= _slaves[1].rep()>> also wears <<ucmouth _slaves[1]>>
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>>
<<= _f.getBedchamberText()>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.slavebed)>>
On its feet is the <<rep _f>>, where the slaves sleep.
<<= _f.getBedchamberText()>>
</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>>
<<= _f.getBedchamberText()>>
<<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>>
<<= _f.getBedchamberText()>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.reward)>>
<<if _f.isBasic()>>
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>>
<<= _f.getBedchamberText()>>
<<if _bedchamber.getOption('walk') == 'crawl'>>
The slaves must remain on all fours, of course.
<</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.isBasic()>>
nothing but bare <<uhands $unit.player>>.
<<else>>
<<rep _f>>.
<</if>>
<<= _f.getBedchamberText()>>
<<if _f.getTags().includes('upsidedown')>>
<<rep _f>> allows you to hang slaves upside-down from the ceiling,
<<if $inventory.isHasItem('sexmanual_upsidedown')>>
which unlocks the <<rep setup.sexpose.upsidedown>> for sex in the room.
<<else>>
but you <<dangertext "don't know">> how to use that in sex for now...
<</if>>
<</if>>
</p>
<p>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.lighting)>>
The room is illuminated by the <<rep _f>>.
<<= _f.getBedchamberText()>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.tile)>>
<<if _f.isBasic()>>
Nothing is covering the worn-out floor.
<<else>>
The floor is covered with <<rep _f>>.
<</if>>
<<= _f.getBedchamberText()>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.object)>>
<<if _f.isBasic()>>
There are no decorative furniture placed on the floor.
<<else>>
On the corner of the room is a decorative <<rep _f>>.
<</if>>
<<= _f.getBedchamberText()>>
<<set _f = _bedchamber.getFurniture(setup.furnitureslot.wall)>>
<<if _f.isBasic()>>
Nothing is covering the worn out walls of the room.
<<else>>
The walls of the room is decorated with <<rep _f>>.
<</if>>
<<= _f.getBedchamberText()>>
</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>> <<ucmouth _slave>>
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.rng.choice(_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'>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.dutyroom)>>
<<set _trainer = $dutylist.getDuty('trainer')>>
<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>>
<<set _tmproom = $fort.player.isHasBuilding('specialistoffice')>>
<<if _tmproom>>
The neighboring room has been designated as the <<rep setup.buildingtemplate.specialistoffice>>,where
contractual specialists can work in lieu of your on-duty slavers when they are busy,
although these specialists command a hefty pay.
<<set _replaced = $dutylist.getDuties().filter(duty => duty.isSpecialistActive())>>
<<if _replaced.length>>
Currently, there
<<if _replaced.length > 1>>
are <<= _replaced.length>> duties that are
<<else>>
is one duty that is
<</if>>
currently being staffed by these specialists, costing you
<<set _money = _replaced.length * setup.DUTY_SPECIALIST_WEEKLY_UPKEEP>>
<<money _money>>
each week.
<</if>>
<<else>>
Slavers on duty can only perform their duties when they are available,
although you may have another option once you build the <<rep setup.buildingtemplate.specialistoffice>>.
<</if>>
Would you like to make changes to the unit duty assignments?
</p>
<<set _dutylist = $dutylist.getDuties().sort(setup.DutyInstance.Cmp)>>
<<filterall 'duty' _dutylist>>
<<if $menufilter.get('duty', 'display') == 'compact'>>
<<dutycardcompact _displayobj>>
<<else>>
<<dutycard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _duty = $duty[$gDuty_key] >>
Select unit to be assigned to <<rep _duty>>.
<<focreturn '(Cancel)'>>
<<set _dom = setup.DOM.Roster.dutyassign(_duty)>>
<<attach _dom>><<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 _level = State.variables.fortgrid.getTotalExpansions()>>
<<if _level == 0>>
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.
<<message '(Help)'>>
<div class='helpcard'>
Improvements are the main way you progress in the game.
Most improvement comes with a room, and
you will need to place the improvement on the fort map.
Many of the improvement unlocks a new menu on the left sidebar --- which unlocks a new part
of the game.
</div>
<</message>>
<br/>
<<focbutton 'Build' 'FortBuild'>>
<</focbutton>>
<<focbutton 'Fort' 'FortGrid'>>
<</focbutton>>
<<set _forfilter = $fort.player.getBuildings()>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'buildinginstance',
filter_objects: _forfilter,
display_callback: buildinginstance => {
if ($menufilter.get('buildinginstance', 'display') == 'compact') {
return setup.DOM.Card.buildinginstancecompact(buildinginstance);
} else {
return setup.DOM.Card.buildinginstance(buildinginstance);
}
},
})>>
<<attach _dom>>
</div>
<</focwidget>>
<<focwidget 'refreshbuildings'>>
<<replace '#buildingholder'>>
<<loadbuildings>>
<</replace>>
<<refreshmenu>>
<</focwidget>>
<div id='buildingholder'>
<<loadbuildings>>
</div><<set $gMenuVisible = true>>
<<focwidget 'loadbuildingtemplates'>>
<h2>Build an improvement</h2>
<<if !$fort.player.isHasBuilding(setup.buildingtemplate.scouthut)>>
<div class='helpcard'>
<p>
You can build various improvements from this menu.
At the moment, only the <<rep setup.buildingtemplate.scouthut>> is available
for you to build, but as you progress in the game and gather more money,
you will be able to afford more options.
</p>
<p>
Click <<successtext "Build">> next to the "Scout Hut" to proceed.
Alternatively, you can click <<successtext "Build and auto-place">> to automatically
place the building on your fort, if there are enough space for it.
</p>
</div>
<<elseif $calendar.getWeek() == 2>>
<div class='helpcard'>
<p>
Now that you have built your <<rep setup.buildingtemplate.scouthut>>, you can either
return to the <<successtextlite "Quest">> menu to continue the game,
or, you can go to the <<successtextlite "Slaver">> menu to customize your slaver's progression.
</p>
</div>
<</if>>
<<focbutton 'View / Upgrade' 'Fort'>>
<</focbutton>>
<<focbutton 'Fort' 'FortGrid'>>
<</focbutton>>
<br/>
<<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>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'buildingtemplate',
filter_objects: _forfilter,
display_callback: buildingtemplate => {
if ($menufilter.get('buildingtemplate', 'display') == 'compact') {
return setup.DOM.Card.buildingtemplatecompact(buildingtemplate);
} else {
return setup.DOM.Card.buildingtemplate(buildingtemplate);
}
},
})>>
<<attach _dom>>
</div>
<</focwidget>>
<div id='buildingtemplateholder'>
<<loadbuildingtemplates>>
</div>
<<focwidget 'refreshbuildings'>>
<<replace '#buildingtemplateholder'>>
<<loadbuildingtemplates>>
<</replace>>
<<refreshmenu>>
<</focwidget>><div class='helpcard'>
<p>
There are some restrictions where you can place your rooms.
First, the rooms <b>cannot overlap</b> each other.
Second, the room <b>entrances must be empty</b>.
Third, each room has a restriction that it can either be build in the indoor area or in the outdoor area
of your fort.
Finally, the remaining empty spaces must be reachable from one another.
In particular, this means you cannot surround an empty space completely with buildings.
</p>
<p>
You can press the "[" or "]" keys as a shortcut to rotate your room.
</p>
</div><div class='helpcard'>
<p>
This is the current state of your fort. It is in a rather sorry state right now,
having minimum room for building, but as you progress in the game, you will be able
to afford expanding the fort further.
</p>
<p>
You should continue by going into the <<successtext "Build">> menu and build the
<<rep setup.buildingtemplate.scouthut>>.
</p>
</div><<set $gMenuVisible = true>>
<<if !$fort.player.isHasBuilding(setup.buildingtemplate.scouthut)>>
<<include 'FortGridHelp'>>
<</if>>
<<if !$company.player.isCanAddUnitWithJob(setup.job.slaver) &&
$fort.player.getBuilding(setup.buildingtemplate.lodgings).getLevel() == 1>>
<div class='helpcard'>
Looks like your slaver capacity is full. You can increase the number of slavers
you can hire by <<successtext "Upgrading">> your <<rep setup.buildingtemplate.lodgings>>.
Click on the "View / Upgrade" button to proceed.
</div>
<</if>>
<<unset $gFortGridControl>>
<<set _dom = setup.DOM.Menu.fortgrid({mode: 'view'})>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.fortgrid({mode: 'edit'})>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.fortgrid({})>>
<<attach _dom>><<set $gMenuVisible = false>>
<p>
Building <<rep $roominstance[$gFortGridBuildRoomKey]>>:
<<message '(?)'>>
<<include 'FortGridConstructionHelpText'>>
<</message>>
</p>
<<if !$fort.player.isHasBuilding(setup.buildingtemplate.scouthut)>>
<div class='helpcard'>
<p>
To complete building your <<rep setup.buildingtemplate.scouthut>>, you must select
a valid orientation and a valid place to place the new structure.
Since <<rep setup.buildingtemplate.scouthut>> is an
<<successtext "outdoors">> improvement, it must be placed on the green
area of your fort, i.e, the "outdoor" location.
There are some other restrictions for placing buildings, e.g.,
they cannot overlap each other, cannot have their entrances blocked,
and cannot cut off the empty spaces into two or more segments.
Click
<<message 'here'>>
<<include 'FortGridConstructionHelpText'>>
<</message>>
for the full restrictions on structure placement.
</p>
<p>
For your <<rep setup.buildingtemplate.scouthut>>, there is actually only one possible
location AND orientation to place it.
You can click the "Rotate" button (or press the "[" and "]" keys) to rotate your building.
Can you figure out where?
If you are stuck, you can click on the <<successtextlite "Auto-place">> to let
the game place it automatically for you.
</p>
<p>
As you expand and continue playing the game, you will unlock more options, as well as
being able to move your existing buildings to a different location.
</p>
<p>
When you have placed the building successfully, proceed by either clicking the
<<successtextlite "Confirm placement">> button, or by pressing the Spacebar key.
</p>
</div>
<</if>>
<<set _dom = setup.DOM.Menu.fortgrid({mode: 'build', room_key: $gFortGridBuildRoomKey })>>
<<attach _dom>><<set $gMenuVisible = true>>
<<focbutton 'Fort' 'FortGrid'>>
<</focbutton>>
<<set _dom = setup.DOM.Menu.roomlist()>>
<<attach _dom>><<set $gMenuVisible = false>>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.link(
'Back',
() => {
State.variables.gFortGridControl.mode = 'edit';
},
'FortGridRenovate',
)
)>>
<div>
Select room to build:
<<foclink '(back)' 'FortGridRenovate'>>
<<set State.variables.gFortGridControl.mode = 'edit'>>
<</foclink>>
</div>
<<set _dom = setup.DOM.Menu.roomlist()>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.grandhall)>>
<<set _veteranroom = $fort.player.getBuilding(setup.buildingtemplate.veteranhall)>>
<<set _viceleader = $dutylist.getDuty('viceleader')>>
<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 highest number of quests you ever have in your office at the same time is
<<= $statistics.get('quest_max_simultaneous_have') >>.
The highest level of a quest your company ever scouted 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.market>>,
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>
<p>
<<if $statistics.get('new_game_plus_count')>>
<b>Past glory.</b>
Somehow, you get the feeling that you have been in charge of
as many as <<= $statistics.get('new_game_plus_count') + 1>> companies by this point.
<</if>>
Should you choose, you could
<<foclink 'retire' 'NewGamePlus'>>
<</foclink>>
from the position of being the leader of this slaving company...
</p>
<</if>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.newgameplus()>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.recreationwing)>>
<<set _entertainment = $dutylist.getDuty('entertainmentslave')>>
<<set _analfuckhole = $dutylist.getDuty('analfuckholeslave')>>
<<set _vaginafuckhole = $dutylist.getDuty('vaginafuckholeslave')>>
<<set _oralfuckhole = $dutylist.getDuty('oralfuckholeslave')>>
<<set _sissy = $dutylist.getDuty('sissyslave')>>
<<set _toilet = $dutylist.getDuty('toiletslave')>>
<<set _maid = $dutylist.getDuty('maidslave')>>
<<set _furniture = $dutylist.getDuty('furnitureslave')>>
<<set _punchingbag = $dutylist.getDuty('punchingbagslave')>>
<<set _dog = $dutylist.getDuty('dogslave')>>
<<set _decoration = $dutylist.getDuty('decorationslave')>>
<<set _pony = $dutylist.getDuty('ponyslave')>>
<<set _dominatrix = $dutylist.getDuty('dominatrixslave')>>
<<set _theatre = $dutylist.getDuty('theatreslave')>>
<<set _cumcow = $dutylist.getDuty('cumcowslave')>>
<<set _milkcow = $dutylist.getDuty('milkcowslave')>>
<<set _duties = [_entertainment, _analfuckhole, _vaginafuckhole, _oralfuckhole,
_sissy, _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>>
<<set _pimp = $dutylist.getDuty('entertainmentpimp')>>
<<if _pimp>>
<<set _unit = _pimp.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
You see <<yourrep _unit>> making <<their _unit>> best efforts to entice
the visitors to try out some of the entertainment slaves,
<<= setup.Text.Duty.competence(_pimp)>>.
<<elseif _unit>>
<<Yourrep _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>>
<<set _pimp5 = $dutylist.getUnitIfAvailable('sexpimp')>>
<<if _pimp5>>
<<Yourrep _pimp5>> a|is around, <<uadv _pimp5>> selling the various slave holes available
to the recreation wing patrons.
<</if>>
<<set _pimp2 = $dutylist.getUnitIfAvailable('servicepimp')>>
<<if _pimp2>>
An area has been designated as the dining complex, and here, you can see <<yourrep _pimp2>>
<<uadv _pimp2>> pampering to customer, making sure the food and the slaves available are both delectable.
<</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 <<yourrep _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 <<yourrep _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 <<yourrep _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.
<<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 <<yourrep _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 _sissy>>
<<set _unit = _sissy.getAssignedUnit()>>
<<if _unit && _unit.isAvailable()>>
Some kinky customers can be seen patroning the Rent-A-Sissy booth.
<<Rep _unit>> is currently stationed there,
advertising <<themself _unit>> as an available <<rep _sissy>>.
<<= setup.Text.Duty.slavevalue(_sissy)>> wants to rent the confusingly-gendered slave.
<<if _unit.isHasTrait('training_sissy_master')>>
Without the big sissy signpost, 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()>> performing debauched sex actions 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 use.
<</if>>
<<elseif _unit>>
While <<yourrep _unit>> is assigned here, <<they _unit>> is currently
unavailable to attend to <<their _unit>> duty.
<<else>>
Unfortunately, it is empty right now.
You can additionally staff it with a <<rep _sissy>> 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 <<yourrep _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>>
<<elseif _unit>>
While <<yourrep _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.
<<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 <<yourrep _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>>
occasionally <<they _unit>> shamelessly begs for mercy --- a clear indicator that further training is required.
<</if>>
<<elseif _unit>>
While <<yourrep _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 <<yourrep _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 <<yourrep _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 <<yourrep _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 <<yourrep _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 believable plays to the customers.
<<= setup.Text.Duty.slavevalue(_theatre)>> enjoy the performance.
/* unlock scenes here */
<<if _unit.isHasTrait('training_roleplay_master')>>
<<Rep _unit>> is an expert at acting, and many customers fap eagerly to <<their _unit>>
almost realistic make-believes.
<<elseif _unit.isHasTrait('training_roleplay_advanced')>>
<<Rep _unit>> is an established <<if _unit.isMale()>>actor<<else>>actress<</if>>,
<<their _unit>> extensive training in role-playing clearly showing in
<<their _unit>> many plays.
<<else>>
If one watches the performance closely, however, one could detect the occasional hints of
displeasure in <<reps _unit>> gestures.
<</if>>
<<elseif _unit>>
While <<yourrep _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 <<yourrep _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.
<<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 <<yourrep _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('doctor')>>
<<set _mystic = $dutylist.getDuty('mystic')>>
<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>>
<<They _unit>> greets you briefly before returning back to attend <<their _unit>> patients.
<<else>>
Your doctor has no patients right now, and <<they _unit>> seems to be busy relaxing.
<</if>>
<<elseif _unit>>
<<Yourrep _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 _mystic>>,
including making charms for luck,
<<= setup.Text.Duty.competence(_mystic)>>.
<<elseif _unit>>
<<Yourrep _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 occasionally
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)>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'item',
filter_objects: _forfilter,
display_objects: _display,
display_callback: item_obj => {
if ($menufilter.get('item', 'display') == 'compact') {
return setup.DOM.Card.itemcompact(item_obj.item);
} else {
return setup.DOM.Card.item(item_obj.item);
}
},
})>>
<<attach _dom>><<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())>>
<<set _dom = setup.DOM.Roster.selectunit({
units: _unitlist,
unit_callback: (unit) => setup.DOM.Menu.useitemonunit(setup.item[$gUseItem_key], unit),
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.classroom)>>
<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 "classroom" of your fort, where you store all your sex manuals
for anyone to study.
<<if _u && !_u.isYou()>>
You can see <<yourrep _u>> here right now,
<<if _u.isHasTrait('per_studious')>>
diligently reading through some questionable manuals with one <<uhand _u>> under the table.
<<elseif _u.isHasTrait('per_curious')>>
curiously looking through some of the picture books with a <<uhand _u>> under the table.
<<elseif _u.isHasTrait('per_lustful')>>
vigorously stroking something under the table while reading through the manuals.
<<elseif _u.isHasTrait('per_chaste')>>
sighing as the chaste slaver closes yet another debauched manual.
<<elseif _u.isHasTrait('per_dominant')>>
grinning in delight as the dominant slaver found another new technique to try out.
<<elseif _u.isHasTrait('per_submissive')>>
no doubt fantasizing a dominant to top <<their _u>> submissive ass.
<<elseif _u.isHasTrait('dick_huge')>>
looking for a way to fit <<their _u>> gigantic dong inside particularly tight holes.
<<elseif _u.isHasTraitExact('dick_tiny')>>
looking if there's some extra fun <<they _u>> can have even with their embarrassment of a dick.
<<elseif _u.isHasTrait('vagina_gape')>>
trying to see if there's some interesting actions <<they _u>> can do with their gaping pussy.
<<elseif _u.isHasTrait('anus_gape')>>
trying to see if there's some interesting actions <<they _u>> can do with their gaping anus.
<<elseif _u.isHasTrait('per_smart')>>
filtering through the many graphic books stored in the room for some actually valuable information.
<<elseif _u.isHasTrait('per_slow')>>
trying to improve <<their _u>> intelligence... but <<they _u>> probably chose the wrong place for it unfortunately.
<<elseif _u.isHasTrait('per_active')>>
no doubt looking for new exotic sexual poses to try out.
<<elseif _u.isHasTrait('per_stubborn')>>
trying to prove the superiority of standard normal sex.
<<elseif _u.isHasTrait('per_evil')>>
getting as much knowledge as possible for <<their _u>> not-so-secret evil plans.
<<elseif _u.isHasTrait('per_honorable')>>
disgusted by the many exotic positions described in the manuals.
<<elseif _u.isHasTrait('per_dreamy')>>
seemingly fell asleep when reading one of the manuals.
<<else>>
unsure what they are doing.
<</if>>
<<else>>
Nobody is in the classroom right now.
<</if>>
While you certainly have better things to do today, there's surely no harm in sitting
here and reading a manual or two...
</p>
<<set _forfilter = setup.sexaction.filter(a => a.isVisibleInClassroom())>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'sexaction',
filter_objects: _forfilter,
display_callback: sexaction => {
if ($menufilter.get('sexaction', 'display') == 'compact') {
return setup.DOM.Card.sexactioncompact(sexaction);
} else {
return setup.DOM.Card.sexaction(sexaction);
}
},
})>>
<<attach _dom>><<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 && !_u.isYou()>>
<<Yourrep _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'>>
<<lorecardcompact _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.getUnitIfAvailable('viceleader')>>
<<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 _dom = setup.DOM.Card.opportunity_option_selected($opportunityinstance[$gOpportunity_key])>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _dom = setup.DOM.Menu.opportunityautoanswer()>>
<<attach _dom>><<if !$gPassage>>
<<set $gPassage = 'QuestHub'>>
<</if>>
<<set $gOldPassage = null>>
<div id='allcontainer'>
<<include $gPassage>>
</div><<set $gMenuVisible = true>>
<<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
can peddle their goods.
<<if $fort.player.isHasBuilding(setup.buildingtemplate.workshop)>>
A <<rep setup.buildingtemplate.workshop>> is situated just next door, and its
many craftsmen sell their work here.
<<else>>
While some seasonal merchants would set up temporary shops here, you might be
able to attract more permanent ones once you build the
<<rep setup.buildingtemplate.workshop>>.
<</if>>
<<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 _dom = setup.DOM.Card.market({
market: $market.combatequipmentmarket,
is_can_delete: true,
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.market)>>
<<set _objects = $market.itemmarket.getMarketObjects()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
<<if $fort.player.isHasBuilding(setup.buildingtemplate.booths)>>
You have transformed the small clearing behind your grand hall into a bustling
market. Various people sell their goods
from the many booths setup in the <<rep setup.buildingtemplate.booths>>.
<<else>>
You have transformed the small clearing behind your grand hall into a
market area. It is a bit barren right now -- perhaps you can consider
building the <<rep setup.buildingtemplate.booths>> to populate the place.
<</if>>
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.mindmend_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 occasionally (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>>. occasionally,
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>>
<<set _god = setup.dutytemplate.questlivinggod.getLivingGod()>>
<<if _god>>
A small shrine has been erected for the sole worship of <<rep _god>>. When staffed,
<<if setup.dutytemplate.questlivinggod.isFavor()>>
<<set _company = setup.dutytemplate.questlivinggod.getFavorCompany()>>
<<they _god>> would hold divine sermons for <<their _god>> worshippers, who are mostly from
<<rep _company>>. This indirectly helps the reputation of your company among these people.
<<else>>
<<they _god>> would hold speeches for <<their _god>> worshippers, including asking
for a generous amount of tithe, some of which goes into your company's coffers.
<</if>>
<</if>>
</p>
<<set _dom = setup.DOM.Card.market({
market: $market.itemmarket,
is_can_delete: true,
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<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 _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>>,
occasionally 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 _dom = setup.DOM.Card.market({
market: $market.sexequipmentmarket,
is_can_delete: true,
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<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.isCanAddUnitWithJob(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 _dom = setup.DOM.Card.market({
market: $market.slavemarket,
is_can_delete: true,
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<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.isCanAddUnitWithJob(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>>
<<set _favor = $favor.getFavor($company.royal)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
A particularly capable slaver
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
A noticably skilled slaver
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
An expert slaver
<</if>>
would occasionally appear here,
citing that they hear from some "very credible sources" there are lucrative work to be done here.
</p>
<<set _dom = setup.DOM.Card.market({
market: $market.slavermarket,
is_can_delete: true,
})>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.marketingoffice)>>
<<set _orders = $slaveorderlist.getSlaveOrders()>>
<<set _marketer = $dutylist.getDuty('marketer')>>
<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>>
<<Yourrep _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>
<<filterall 'slaveorder' $slaveorderlist.getSlaveOrders()>>
<<if $menufilter.get('slaveorder', 'display') == 'compact'>>
<<slaveordercardcompact _displayobj>>
<<else>>
<<slaveordercard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<div>
Choose unit to fulfill order <<rep $slaveorder[$gSlaveOrder_key]>>
<<focreturn '(Cancel)'>>
</div>
<<set _dom = setup.DOM.Roster.slaveorderselect($slaveorder[$gSlaveOrder_key])>>
<<attach _dom>><<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>
<<filterall 'contact' _contacts>>
<<if $menufilter.get('contact', 'display') == 'compact'>>
<<contactcardcompact _displayobj>>
<<else>>
<<contactcard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.moraleoffice)>>
<<set _parties = $partylist.getParties()>>
<h2><<= _room.getTitleRep()>></h2>
<div>
You enter the morale office,
where you can manage the increasing number of units that are under your employ.
<<if _parties.length>>
Currently, you have organized
<<if _parties.length > 1>>
a single party.
<<else>>
<<= _parties.length>> parties.
<</if>>
<<else>>
You have not yet organized your units into parties.
<</if>>
<<message '(?)'>>
<div class='helpcard'>
<p>
Here, you can organize your units into parties.
This can help you keep track and manage your units better.
Units that belong to a party <<dangertextlite "cannot be dismissed or sold">>,
but aside from this, parties <<successtextlite "has no other gameplay effects">>.
A unit can only belong to at most one party.
</p>
<p>
Parties can be used to filter units, to sort units, and to prevent units from accidentally
being sold / dismissed from your company.
In addition, once you organize some parties,
you can also choose to assign units to quests only from a certain party
from the quest menu.
</p>
</div>
<</message>>
</div>
<div>
<<if $partylist.isCanAddNewParty()>>
<<focbutton 'New party'>>
<<run $partylist.newParty()>>
<<focgoto>>
<</focbutton>>
<<else>>
<<dangertextlite 'You already have too many parties.'>>
<</if>>
</div>
<<set _partylist = $partylist.getParties()>>
<<filterall 'party' _partylist>>
<<if $menufilter.get('party', 'display') == 'compact'>>
<<partycardcompact _displayobj>>
<<else>>
<<partycard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _party = $party[$gParty_key]>>
<div>
Change <<rep _party>>'s name to
<<textbox "_newpartyname" _party.getName() autofocus>>
</div>
<div>
<<focbutton 'Confirm'>>
<<run $party[$gParty_key].setName(_newpartyname)>>
<<unset $gParty_key>>
<<run setup.DOM.Nav.gotoreturn()>>
<</focbutton>>
</div>
<div>
<<foclink '(Cancel)'>>
<<unset $gParty_key>>
<<run setup.DOM.Nav.gotoreturn()>>
<</foclink>>
</div><<set $gMenuVisible = false>>
<<set _party = $party[$gPartySelected_key]>>
<div>
Choose units to be added to <<rep _party>>:
</div>
<div>
<<foclink '(Finish and return)'>>
<<unset $gPartySelected_key>>
<<run setup.DOM.Nav.gotoreturn()>>
<</foclink>>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.link(
'Finish [space]',
() => {
delete State.variables.gPartySelected_key;
setup.DOM.Nav.gotoreturn();
},
)
)>>
</div>
<<set _dom = setup.DOM.Roster.selectunitforparty(_party)>>
<<attach _dom>><<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'>><<set $gMenuVisible = false>>
<<set _quest = $questinstance[$gAdhocQuest_key]>>
<<set _dom = setup.DOM.Menu.questassign(_quest)>>
<<attach _dom>><<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('scoutvale')>>
<<set _forest = $dutylist.getDuty('scoutforest')>>
<<set _city = $dutylist.getDuty('scoutcity')>>
<<set _desert = $dutylist.getDuty('scoutdesert')>>
<<set _sea = $dutylist.getDuty('scoutsea')>>
<<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>>
<<Yourrep _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>>
<<Yourrep _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 region_city>>
as you <<rep _city>>,
<<= setup.Text.Duty.competence(_city)>>.
<<elseif _unit>>
<<Yourrep _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>>
<<Yourrep _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>>
<<Yourrep _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.lizardkin)>>
<<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.lizardkin>>,
you occasionally receive several rare quest leads from the lizardkin's masterful scouts each week.
<<elseif _favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
Thanks to your good relations with the <<rep $company.lizardkin>>,
you receive a rare quest lead from the lizardkin's masterful scouts each week.
<<elseif _favor3 >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Thanks to your warm relations with the <<rep $company.lizardkin>>,
you occasionally receive a rare quest lead from the lizardkin's masterful 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 can 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 'Fort'>> menu on the left.
<</if>>
<</if>>
<<include 'QuestAssignHelp'>>
</p><<message '(?)'>>
<div class='helpcard'>
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.
A <<= setup.trait.tough_nimble.rep() >> <<= setup.trait.muscle_strong.repNegative() >>
next to the slaver means that the slaver matches the critical trait <<rep setup.trait.tough_nimble>>,
but also matches the disaster trait <<rep setup.trait.muscle_strong>>
(notice the red cross on top of the disaster trait).
</div>
<</message>><<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>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'quest',
filter_objects: _quests,
display_callback: quest => {
if ($menufilter.get('quest', 'display') == 'compact') return setup.DOM.Card.questcompact(quest);
if ($menufilter.get('quest', 'display') == 'short') return setup.DOM.Card.questcompact(quest);
return setup.DOM.Card.quest(quest);
},
})>>
<<attach _dom>>
</div>
<</focwidget>>
<<focwidget 'refreshquests'>>
<<replace '#questholder'>>
<<loadquests>>
<</replace>>
<<refreshmenu>>
<</focwidget>>
<div id='questholder'>
<<loadquests>>
</div><p>
<<set _manager = $dutylist.getUnitIfAvailable('relationshipmanager')>>
<<if _manager>>
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 _manager>> is currently managing the favors of the following companies:
<<for _company range _managed>><<rep _company>> <</for>>.
To do so, <<rep _manager>> requires an upkeep of
<<money $favor.getRelationshipManagerUpkeep()>> each week.
<<if _managed.length < $favor.getMaxManagedCompanies()>>
<<They _manager>> can still manage more companies, and you can assign more, although
this will increase <<their _manager>> upkeep costs.
<</if>>
<<else>>
<<They _manager>> 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>>
<<else>>
<<set _duty = $dutylist.getDuty('relationshipmanager')>>
<<if _duty>>
Nobody is working as the <<rep _duty>> right now. When staffed,
this duty is able to prevent favor decay with the companies.
<</if>>
<</if>>
</p><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.relationsoffice)>>
<<set _manager = $dutylist.getDuty('relationshipmanager')>>
<<set _officer = $dutylist.getDuty('damagecontrolofficer')>>
<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>>
<<Yourrep _unit>> usually works here, but <<they _unit>>
is currently unavailable to attend to <<their _unit>> duties.
<<else>>
It is unoccupied right now. If you have someone attending to this duty,
you can prevent relations decay with some companies.
<</if>>
<<else>>
Relations will decay each week, but you can prevent some of this
by building the <<rep setup.buildingtemplate.relationshipmanageroffice>>.
<</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>>
<<Yourrep _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 a display of good will.
<</if>>
<<set _favor = $favor.getFavor($company.dragonkin)>>
<<if _favor >= setup.FAVOR_EFFECT_THRESHOLDS[2]>>
occasionally, you receive delegation from other companies offering their modest
respect to you and increasing their favor without any particular reason,
but you know it's no doubt due to your warm relations with the
intimidating <<rep $company.dragonkin>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[1]>>
You often receive delegation from other companies showing their
respect for your company, and offering their favor with nothing in exchange.
This is no doubt thanks to your friendly relations with the
rare and elusive <<rep $company.dragonkin>>.
<<elseif _favor >= setup.FAVOR_EFFECT_THRESHOLDS[0]>>
Many delegations from other companies come to pay
respect to your company, and offering plenty of favor without asking for anything
in exchange.
No doubt they wish to learn your secret of having an
extremely well-maintained relations with <<rep $company.dragonkin>>.
<</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'>>
<<companycardcompact _displayobj>>
<<else>>
<<companycard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _manager = $dutylist.getDuty('relationshipmanager')>>
<p>
Select the companies
for your <<rep _manager>> to manage their favors.
When managed, their favors will no longer decay when below
<<successtextlite "85.0">> favor. Their decay will also be much slower when the favor
is above <<successtextlite "85.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>>
<<Yourrep _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>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.move(
'Finish [space]',
'RelationsOffice',
),
)>>
<<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>
<<set _dom = setup.DOM.Roster.rosterlist(_unitlist, 'unitslave')>>
<<attach _dom>><<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 area of your fort which has been designated as 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>
<<if $fort.player.isHasBuilding('warroom')>>
<<set _need = _unitlist.filter(unit => unit.isCanLearnNewPerk())>>
<<if _need.length>>
<p>
There are <<dangertext _need.length>> slavers who <<successtext 'can learn a new perk'>>.
You should assign new perks to them, or you can
<<foclink '(Auto Assign)'>>
<<run setup.Unit.autoAssignPerks()>>
<<focgoto>>
<</foclink>>.
</p>
<</if>>
<</if>>
<<if $calendar.getWeek() == 2>>
<div class='helpcard'>
<p>
Welcome to the roster screen. You can interact and customize with your slavers here.
The most important menu that you need to learn is perhaps the <<successtext "Skill focus">>
menu. Using this menu, you can change how the units will progress their skills as they level up.
Click on any of the Skill Focus menu to try it out!
</p>
</div>
<</if>>
<<set _dom = setup.DOM.Roster.rosterlist(_unitlist, 'unitslaver')>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _room = $fort.player.getBuilding(setup.buildingtemplate.inn)>>
<<set _unitlist = $retiredlist.getUnits()>>
<<set _maxretired = $retiredlist.getMaxTrackedUnits()>>
<h2><<= _room.getTitleRep()>></h2>
<p>
You enter the lodgings area designated as the guest rooms.
You can host your guests here, including
<<if _unitlist.length > 1>>
your former slavers when they decide to revisit your fort.
<<elseif _unitlist.length == 1>>
<<yourrep _unitlist[0]>>.
<<else>>
slavers that you may retire in the future.
<</if>>
<<if _room && _room.getLevel() > 1>>
It has been extended with <<= _room.getLevel() - 1>> additional rooms.
<</if>>
<<if _unitlist.length>>
Currently, you have <<successtext _unitlist.length>>
retired slaver<<if _unitlist.length > 1>>s<</if>>
that you are keeping contacts with, out of a maximum of
<<= _maxretired>> retired slavers.
<</if>>
<<if _unitlist.length >= _maxslavers>>
If you want to keep track of more, consider
furnishing more rooms by upgrading
your <<rep _room>>, or by removing contact with some of your retired slavers.
<</if>>
<<message '(?)'>>
<div class='helpcard'>
Once your slaver has stayed with you for long enough time and obtained the
<<rep setup.trait.join_senior>> trait, instead of dismissing them,
you can also end their services by retiring them instead.
You will continue to keep in touch with retired slavers, and they
can be viewed in this menu.
</div>
<</message>>
</p>
<<set _dom = setup.DOM.Roster.rosterlist(_unitlist, 'unitretired')>>
<<attach _dom>><<set $gMenuVisible = true>>
<<set _dom = setup.DOM.Menu.unitdetail($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.changeskillfocus($unit[$gUnit_skill_focus_change_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.changeactivetitles($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.dismissConfirm($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.retireConfirm($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.retireAftermath($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.retiredDismissConfirm($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.rehireRetiredConfirm($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _dom = setup.DOM.Menu.equipmentsetpickequip($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
/* Assumes $gUnit_key is set */
Change <<rep $unit[$gUnit_key]>>'s nickname to
<<textbox "$unit[$gUnit_key].nickname" $unit[$gUnit_key].getName() autofocus>>
<br/>
<<focreturn 'Done'>><<set $gMenuVisible = false>>
/* Assumes $gUnit_key is set */
<<set _unit = State.variables.unit[$gUnit_key]>>
<p>
Select which perk that <<rep _unit>> should learn.
<<message '(?)'>>
<div class='helpcard'>
<p>
A unit can learn a perk first when they reach level
<<= setup.PERK_GAIN_AT_LEVEL[0]>>, then once again when
they reach level
<<= setup.PERK_GAIN_AT_LEVEL[1]>>.
A perk grants the unit some gameplay bonuses.
</p>
</div>
<</message>>
<<if _unit.getPerkChoices().filter(perk => perk.isSpecial() && !_unit.isHasTrait(perk)).length>>
There are also some <<successtextlite 'special perks'>> that
<<rep _unit>> can learn.
<<message '(?)'>>
<div class='helpcard'>
<p>
In addition to standard perks, units may get access to special perks as their
career progress.
A unit can learn at most
<<= setup.TRAIT_MAX_HAVE.perkstandard >>
standard perks and
<<= setup.TRAIT_MAX_HAVE.perkspecial >>
special perks, for a total of maximum
<<= setup.TRAIT_MAX_HAVE.perkstandard + setup.TRAIT_MAX_HAVE.perkspecial >>
perks.
</p>
</div>
<</message>>
<</if>>
<<focreturn '(cancel)'>>
</p>
<<set _dom = setup.DOM.Menu.perklearn(_unit)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.activity()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.activity_debug_one(
setup.activitytemplate[$qDebugActivityTemplate_key],
/* is debug all = */ false,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.activity_debug_all()>>
<<attach _dom>><<include 'LivingDebugDoAll'>>
<<include 'ActivityDebugAll'>>
<<include 'EventDebugAll'>>
<<include 'InteractionDebugAll'>>
<<include 'OpportunityDebugAll'>>
<<include 'QuestDebugAll'>>
<<run setup.DOM.Menu.devtoolcheckall()>><<set _dom = setup.DOM.Menu.Settings.Debug.event()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.event_debug_one(
setup.event[$qDebugEventTemplate_key],
/* is debug all = */ false,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.event_debug_all()>>
<<attach _dom>><h2>Adjust your favor with other companies</h2>
<<focmove 'Done' 'SettingsMenu'>>
<<for _icompany, _company range $company>>
<<if _company != $company.player>>
<br/>
You have <<favor $favor.getFavor(_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.getAllQuestsAndOpportunities()>>
<<run _generatable.sort((a, b) => a.template.getDifficulty().getLevel() - b.template.getDifficulty().getLevel())>>
<<for _can range _generatable>>
<<if _can.template.isCanGenerate()>>
<div>
<<rep _can.rarity>>: (<<= _can.template.getDifficulty().rep()>>) <<= _can.template.getName() >>
</div>
<</if>>
<</for>>
<</message>>
<</capture>>
<br/>
<</for>><<set _dom = setup.DOM.Menu.Settings.Debug.interaction()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.interaction_debug_one(
setup.interaction[$qDebugInteractionTemplate_key],
/* is debug all = */ false,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.interaction_debug_all()>>
<<attach _dom>><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>><<focreturn '(cancel)'>>
<<set _living = setup.living[$gDebugLiving_key]>>
<<set _unit = $unit[$gUnit_key]>>
<p>
Testing: <<= _living.getName()>>
</p>
<<set _dom = setup.DOM.Card.livingdescription(_unit, _living)>>
<<attach _dom>>
<hr/><<set _units = $company.player.getUnits({job: setup.job.slaver})>>
<<for _living range setup.living>>
<<set _unit = setup.rng.choice(_units)>>
<p>
Testing: <<= _living.getName()>>
</p>
<<set _dom = setup.DOM.Card.livingdescription(_unit, _living)>>
<<attach _dom>>
<hr/>
<</for>><<set _dom = setup.DOM.Menu.Settings.Debug.opportunity()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.opportunity_debug_all()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.opportunity_debug_one(
setup.opportunitytemplate[$qDebugOpportunityTemplate_key],
/* is debug all = */ false,
$gDebugOpportunityOption,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.opportunity_debug_description(
setup.opportunitytemplate[$qDebugOpportunityTemplate_key],
/* is debug all = */ false,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.quest()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.quest_debug_all()>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.quest_debug_one(
setup.questtemplate[$qDebugQuestTemplate_key],
/* is debug all = */ false,
$qDebugQuestResult,
)>>
<<attach _dom>><<set _dom = setup.DOM.Menu.Settings.Debug.quest_debug_description(
setup.questtemplate[$qDebugQuestTemplate_key],
/* is debug all = */ false,
)>>
<<attach _dom>><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" "">><<set _dom = setup.DOM.Menu.settingsbase()>>
<<attach _dom>><<set _preferenceoption = {}>>
<<for _keypref, _pref range setup.SETTINGS_GENDER_PREFERENCE>>
<<set _preferenceoption[_pref.name] = _keypref>>
<</for>>
<b>Gender preferences</b> (click to change):
<<message '(?)'>>
<div class='helpcard'>
This settings determines how the game will skew the genders of the units that are generated by the game.
</div>
<</message>>
<div>
Slave: <<cycle '$settings.gender_preference.slave' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div>
<div>
Slaver: <<cycle '$settings.gender_preference.slaver' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div>
<div>
Other: <<cycle '$settings.other_gender_preference' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div><h2>Save Game / Settings</h2>
<<set _dom = setup.DOM.Menu.settingsmain()>>
<<attach _dom>><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>
<<focreturn '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>><<set _dom = setup.DOM.Menu.imagepacks()>>
<<attach _dom>>
<p>
<<focreturn 'Done'>>
</p>/* NOTE: this can be called from both content creator and main mode */
<<set _dom = setup.DOM.Menu.unitdebug($unit[$gUnit_key])>>
<<attach _dom>><<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('rescuer')>>
<<set _insurer = $dutylist.getDuty('insurer')>>
<h2><<= _room.getTitleRep()>></h2>
You enter the mission control room, where you can view your teams that are currently going on a mission.
<<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>>
<<Yourrep _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>>
<<Yourrep _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,
<<= _teams.length>> teams are away on a mission.
You can have at most
<<successtext $company.player.getMaxActiveTeams()>> different teams on a mission at the same time.
If you want to increase this limit, you can upgrade your <<rep _room>>.
You proceed to sit on a desk to view your teams.
<br/>
<<set _teamlist = State.variables.company.player.getTeams()>>
<<filterall 'team' _teamlist>>
<<if $menufilter.get('team', 'display') == 'compact'>>
<<teamcardcompact _displayobj>>
<<else>>
<<teamcard _displayobj>>
<</if>>
<</filterall>><<set $gMenuVisible = false>>
<<set _traits = setup.UnitActionHelper.getTraitChoices($unit[$gUnitMultiTraining_key])>>
<<if !_traits.length>>
<p>
There are no available alteration for <<rep $unit[$gUnitMultiTraining_key]>>.
</p>
<div>
<<focreturn '(Return)'>>
</div>
<<else>>
<p>
Choose which traits you want to have on <<rep $unit[$gUnitMultiTraining_key]>>.
</p>
<<if _chosentraits>>
<<set _chosentraits = _chosentraits.filter(trait => _traits.includes(trait))>>
<<elseif $gMultiTrainingTraitKeys>>
<<set _chosentraits = $gMultiTrainingTraitKeys.map(key => setup.trait[key]).filter(trait => _traits.includes(trait))>>
<<else>>
<<set _chosentraits = []>>
<</if>>
<<run setup.UnitActionHelper.populateTraits($unit[$gUnitMultiTraining_key], _chosentraits)>>
<div>
<<focbutton 'Begin'>>
<<if _chosentraits.length>>
<<set $gMultiTrainingTraitKeys = _chosentraits.map(trait => trait.key)>>
<<run setup.UnitActionHelper.generateQuest($unit[$gUnitMultiTraining_key], _chosentraits)>>
<<focgoto 'QuestHub'>>
<<else>>
<<run setup.notify('Please select at least one trait')>>
<<focgoto>>
<</if>>
<</focbutton>>
<<focreturn '(Cancel)'>>
</div>
<div class='traitlistcard card'>
<<run _dom = setup.DOM.Menu.traitpickermulti({
raw_traits: _traits,
init_selected: _chosentraits,
no_overlap: true,
on_change_callback: traits => setup.UnitActionHelper.populateTraits($unit[$gUnitMultiTraining_key], traits),
})>>
<<attach _dom>>
</div>
<div class='slaveordercard card'>
<div>
<b>Your slave orders</b>
</div>
<<filterall 'slaveorder' $slaveorderlist.getSlaveOrders()>>
<<if $menufilter.get('slaveorder', 'display') == 'compact'>>
<<slaveordercardcompact _displayobj 1>>
<<else>>
<<slaveordercard _displayobj 1>>
<</if>>
<</filterall>>
</div>
<</if>><<set $gMenuVisible = false>>
<<set _unit = $unit[$gUnitSelected_key]>>
What would you like to do for <<rep _unit>>?
<<unitactionlist setup.unitaction _unit>><<capture $g, $gTeam, $gQuest, $gOutcome>>
<<includereplace _outcome_passage>>
<</capture>><<capture $g, $gTeam, $gQuest, $gOutcome>>
<<set _dom = setup.DOM.Card._activityrender(_activity_card_key)>>
<<attach _dom>>
<</capture>><<set _dom = setup.DOM.Menu.weekend()>>
<<attach _dom>><<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 purplish 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
occasionally 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 */
'geo',
],
[ /* 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(
'continent_cathay', /* key */
'Cathay', /* name */
[ /* tags */
'geo',
],
[ /* visibility requirements */
],
)>><p>
Cathay is both the name of the largest continent in the <<lore region_sea>>, and the name of the biggest empire that calls it home. The continent of Cathay is generally warmer than <<lore continent_main>> and boasts tropical jungles, swamps, fertile grasslands and tall, forest covered mountains.
</p><<run new setup.Lore(
'geo_cassian', /* key */
'Cassian Mountains', /* name */
[ /* tags */
'geo',
],
[ /* visibility requirements */
],
)>><p>
Running north to south through much of <<lore continent_main>>, the Cassian Mountains form a natural boundary
between the Kingdom of Tor and the <<lore region_desert>>. The source of the <<lore geo_cerna>> is somewhere in the northern
end of the Cassian Mountains, high up in the everwhite peaks of the frozen north.
</p><<run new setup.Lore(
'geo_cerna', /* key */
'River Cerna', /* name */
[ /* tags */
'geo',
],
[ /* visibility requirements */
],
)>><p>
The largest river on <<lore continent_main>>.
The River Cerna passes right next to <<lore location_fort>>
before meeting the sea at the port of the <<lore region_city>>.
</p><<run new setup.Lore(
'geo_pawninsula', /* key */
'Pawninsula', /* name */
[ /* tags */
'geo',
],
[ /* 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(
'geo_varde', /* key */
'River Varde', /* name */
[ /* tags */
'geo',
],
[ /* visibility requirements */
],
)>><p>
A river making its way through the icy valleys of the <<lore region_vale>>.
</p><<run new setup.Lore(
'history_sylvancatkinwar', /* key */
'Sylvan-Catkin War', /* name */
[ /* tags */
'history',
],
[ /* visibility requirements */
],
)>><p>
A long time ago, long before the <<lore race_neko>> become the dominant species
of the catkin,
the <<lore race_tigerkin>> and the <<lore race_elf>> were engaged in a bitter,
decades long war.
Accounts of the war are mixed. The elves call it the Sylvan-Catkin war, while
the tigerkin and Neko know it as the War of the Open Paw, and the accounts only diverge more from there.
The scars of the war remain scattered throughout the <<lore region_forest>>
to this day, and many ruins, both elven and catkin have been swallowed up by the forest.
</p>
<p>
Both the tigerkin and the elves of old were master of the <<lore magic_earth>>,
but they use it in fairly different ways.
The tigerkin use the magic to enhance their combat prowess, while the elves opted for more subtle applications.
Perhaps the most infamous elven spell was that of petrification -- the ability
to turn flesh to stone -- which was responsible for the many petrified tigerkin
statues one could found deep within the forests.
The magic has been lost to the ages, however, which is probably a good thing.
</p><<run new setup.Lore(
'location_fort', /* key */
'Your Fort', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
Your home.
</p><<run new setup.Lore(
'location_institute_of_higher_learning', /* key */
'Institute of Higher Learning', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
The Institute of Higher Learning is an infamous academy in <<lore region_city>>.
The name "institute" is only in appearance -- in reality they are more akin to prisons
or jail -- nobles having problem children would often send them away to "study" in
the institute.
It is unclear what happens within the institute, but all of its graduates came out
sweet and pliable regardless of how obstinate or headstrong they were at the time of admission.
</p>
<p>
The school strictly separate its men and women divisions, aptly named
the Institute of Higher Learning for Men and the Institute of Higher Learning for Women.
While the school officially stated that they do so in order to keep their
students chaste and free of temptations, rumors speak of a very, very different reasons...
</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 geo_pawninsula>>,
and many traders call this port a home.
</p>
<p>
The Neko Port City is mostly governed by a circle of commoners, and while the
Neko royalty still exists, they are mostly considered symbolic and usually take no
part in the government of the city.
</p><<run new setup.Lore(
'location_princeofcups', /* key */
'The Prince of Cups', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
A quiet and very exclusive wine house in <<lore region_city>>, known for its private booths and the discretion of its staff.
Serving sumptuous wines, excellent food, and commanding a view far enough away from the lower city for the buildings to look beautiful, The Prince of Cups is favoured by the city's Merchant Princes, and those merchants aspiring to join their ranks. It is said that many deals, both commercial and dubious, are struck here, and it is not uncommon to see scruffy mercenaries and other less savoury characters walking tentatively through the doors, unsure of their reception in such a place.
</p><<run new setup.Lore(
'location_purrloin', /* key */
'Purrloin', /* name */
[ /* tags */
'location',
],
[ /* visibility requirements */
],
)>><p>
A famous high-end whore-house in the <<lore location_npc>>, specializing in delivering neko and
elven whores for the most tasteful clients.
As a high-end brothel, it maintains a highly professional workforce, although there are rumors
that deep down in its basement dwell many unfortunate slaves offered only to the wealthiest
clients...
</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(
'magic_water', /* key */
'Magic: Water', /* name */
[ /* tags */
'concept',
],
[ /* visibility requirements */
],
)>><p>
Related aspects: Calmness, stillness, peace
</p>
<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.subrace_humanvale>> villages or
the <<rep setup.trait.subrace_werewolf>> encampments, you are bound to find one capable of bending
water to their will. Alternatively, the <<rep setup.trait.subrace_lizardkin>> are also known
adepts of the water craft.
</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>
Related aspects: Wrath, anger, bravery, dominance
</p>
<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>> are 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.subrace_humandesert>> living in the desert cities, or the
<<rep setup.trait.subrace_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>
Related aspects: Freedom, chaos, change
</p>
<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 occasionally spot talented
<<rep setup.trait.subrace_humankingdom>> among those living in the <<lore region_city>>,
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>
Related aspects: Tradition, growth, nourishment
</p>
<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.subrace_elf>> and the <<lore race_tigerkin>> used their vast
mastery over this domain of magic in everyday life.
The current modern <<rep setup.trait.subrace_elf>> and <<rep setup.trait.subrace_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>
Related aspects: Good, kindness, submissiveness
</p>
<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.subrace_humansea>> and <<rep setup.trait.subrace_dragonkin>> are gifted with this
specialized and pure form of magic. If one were to look for wielders of this magic,
the best advice 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>
Related aspects: Selfishness, envy, hatred
</p>
<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
both the <<rep setup.trait.subrace_demonkin>> and
the
<<rep setup.trait.subrace_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_humankingdom', /* key */
'Toran', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
This subspecies of the <<rep setup.trait.race_human>> is perhaps the most populous species in <<lore continent_main>>.
They usually call themselves the Torans, after the Kingdom of Tor,
and live within the boundaries of the <<rep $company.humankingdom>>,
which is blessed with fertile lands.
Living in the city and in close proximity with other people makes them especially good
at smooth-talking, and many have the <<rep setup.trait.skill_connected>> trait.
Torans are often gifted in the domain of <<lore magic_wind>>.
</p><<run new setup.Lore(
'race_humanvale', /* key */
'Human (vale)', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
<<rep setup.trait.race_human>> born on the <<lore region_vale>>.
These people are often strong, honest, loyal, and brave, sometimes to a fault.
Many are gifted with the ability of using both hands equally well, making them
highly <<rep setup.trait.skill_ambidextrous>>.
The harsh winters also make these people attuned to the domain of <<lore magic_water>>.
</p><<run new setup.Lore(
'race_humandesert', /* key */
'Human (desert)', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
<<rep setup.trait.race_human>> born on the <<lore region_desert>>.
The desolate land they call home mold these people into tough, stubborn and serious folks.
Many are quite attractive, however, and desertfolk dancers are widely renowned throughout
<<lore continent_main>>.
Living in the harsh deserts means these people often need to get
<<rep setup.trait.skill_creative>> with foraging food.
The harsh sunlight also gives these people a natural affinity to <<lore magic_fire>>.
</p><<run new setup.Lore(
'race_humansea', /* key */
'Human (sea)', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
<<rep setup.trait.race_human>> born far on the land beyond the <<lore region_sea>>.
They have diverse culture which is considered exotic within <<lore continent_main>>, and
many of these people have traits rarely found within the continent.
Some of these people are quite <<rep setup.trait.skill_hypnotic>>, making their gaze
a rather dangerous thing to stare at.
Some of them are gifted in the domain of the <<lore magic_light>>, making them exceptional healers.
</p><<run new setup.Lore(
'race_werewolf', /* key */
'Werewolf', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
A subspecies of <<rep setup.trait.race_wolfkin>> who live on the northernmost
border of the <<lore region_vale>>.
These hulking people often live in small packs, as they are loners and independent
by nature.
They are naturally strong, and also have strong dominant tendencies, both a product of
having descended from a predatory evolution line.
Some retain strong connection with animals, and posses <<rep setup.trait.skill_animal>>.
Living in the cold front attunes them to the domain of <<lore magic_water>>.
</p><<run new setup.Lore(
'race_elf', /* key */
'Wood elf', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
The most common <<rep setup.trait.race_elf>> within <<lore continent_main>>.
These people are known to be quite graceful, as well as smart and studious.
Many possess attractively narrow waist, which many find attractive.
Living in the proximity of various forest plants make these people exceptional
at <<rep setup.trait.skill_alchemy>>.
They are also often attuned to the domain of <<lore magic_earth>>, which grants
them minor power to manipulate the surrounding plants.
</p><<run new setup.Lore(
'race_neko', /* key */
'Neko', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
These <<rep setup.trait.race_catkin>> are the modern descendants of the long-extinct <<lore
race_tigerkin>>, and many call the <<lore location_npc>> their home.
Their furry
pedigree has worn off almost completely, usually leaving only their ears, tails, and
occasionally eyes being similar to that of a cat.
They still share quite a bit of heritage with normal cats, and it sometimes is reflected
on their playful, dreamy, active, and lustful behavior.
These traits make them excellent at <<rep setup.trait.skill_entertain>>.
Like their neighbors, the elves, neko often are attuned to the domain of <<lore magic_earth>>.
</p>
<p>
The plural form of neko is neko.
</p><<run new setup.Lore(
'race_orc', /* key */
'Orc', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
A large <<rep setup.trait.race_greenskin>> who call the <<lore region_desert>> their home.
Orcs are not known for their intelligence, but for their brawn and aggression instead, although
there are exceptions.
These big lugs often have naturally <<rep setup.trait.skill_intimidating>> face, making them excellent raiders.
They are quite attuned to <<lore magic_fire>>, and orc warlocks are feared wide and large.
</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>
<hr/>
<p>
Now goblins are cruel, wicked, and bad-hearted. They make
no beautiful things, but they make many clever ones. They
can tunnel and mine as well as any but the most skilled
miners, when they take the trouble, though they are usually
untidy and dirty. Hammers, axes, swords, daggers, pickaxes,
tongs, and also instruments of torture, they make very well,
or get other people to make to their design, prisoners and
slaves that have to work till they die for want of air and
light.
</p>
<<questauthorcardtext 'adapted from "The Hobbit", by J.R.R. Tolkien'>><<run new setup.Lore(
'race_dragonkin', /* key */
'Dragonkin', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
An almost mythical subrace of <<rep setup.trait.race_lizardkin>> said to dwell
somewhere beyond the <<lore region_sea>>.
These proud and honorable relatives of the <<rep setup.trait.subrace_lizardkin>>
are extremely rare, found almost exclusively in secluded islands and dragon fortresses.
They possess majestic wings, allowing them <<rep setup.trait.skill_flight>>.
Their heritage makes them quite haughty, and they often find jobs such as raiding or
cleaning beneath them, and employ slaves in every part of their culture.
Attuned to <<lore magic_light>>, which they consider the purest form of magic.
</p>
<hr/>
<p>
"One whom the dragons will speak with," he said, "that is a
dragonkin, or at least that is the center of the matter. It's
not a trick of mastering the dragons, as most people think.
Dragons have no masters. The question is always the same, with
a dragon: will he talk to you or will he eat you? If you can
count upon his doing the former, and not doing the latter, why
then you're a dragonkin."
</p>
<<questauthorcardtext 'adapted from "The Tombs of Atuan", by Ursula K. Le Guin'>><<run new setup.Lore(
'race_demon', /* key */
'Demon', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
Pure-blooded <<rep setup.trait.race_demon>> that lives on the other side
of the <<lore concept_mist>>.
These demons often hold great power, much more compared to common <<rep setup.trait.subrace_demonkin>>,
but the power often corrupts their personalities. Demons are known to be cruel, evil lunatics,
and being caught by a demon is a fate nobody would with even upon their worst enemy.
Their corrupted wings allow them to take <<rep setup.trait.skill_flight>>.
Not surprisingly, they are attuned to the <<lore magic_dark>>, which governs corruptions.
They have adapted to having demonic bodyparts, and suffer no penalties from having them.
</p><<run new setup.Lore(
'race_tigerkin', /* key */
'Tigerkin', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
These now-extinct <<rep setup.trait.race_catkin>> are ancestors of the
<<rep setup.trait.subrace_neko>>.
Unlike their modern counterpart, tigerkins posses fully furry bodies.
In times past, these tiger anthros
inhabited the <<lore region_forest>> alongside their enemies, the ancient elves.
Books tell of many dual-wielding <<rep setup.trait.skill_ambidextrous>>,
and their great mastery over <<lore magic_earth>>.
</p>
<hr/>
<p>
Tyger! Tyger! burning bright <br/>
In the forests of the night, <br/>
What immortal hand or eye <br/>
Could frame thy fearful symmetry? <br/>
</p>
<<questauthorcardtext '"The Tyger", by William Blake'>><<run new setup.Lore(
'race_angel', /* key */
'Angel', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
Celestial beings who greatly oppose the demons. It is said that they are locked in an eternal
battle with the residents of <<lore concept_mist>>.
They cannot enter the mortal plane by any means, except when their divinity
has been stripped from them and made mortal.
Possess a beautiful pair of feathery wings -- while most come in white,
there are occasional anomalies, possessing wings of different colors.
The wings allow them to take <<rep setup.trait.skill_flight>>.
It is said that angels are attuned to the <<lore magic_light>>, but since angel sightings are so rare,
this has never been confirmed.
</p><<run new setup.Lore(
'race_fairy', /* key */
'Fairy', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
These offshoots from the <<rep setup.trait.race_elf>> looks like common elves in everything, except for the
gorgeous wings sprouting from their back that allows them to <<rep setup.trait.skill_flight>>.
There have been tales of travelers visiting the <<lore region_forest>> who
has sighted what appears to be fairies frolicking nearby, but no reports
have been so verily confirmed, and the race remains a fairy-tale.
It is said that unlike other residents of the forests, fairies are attuned
to <<lore magic_wind>> instead.
</p><<run new setup.Lore(
'race_lizardkin', /* key */
'Lizardkin', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
The most populous species of the relatively rare <<rep setup.trait.race_lizardkin>>.
Although rarely found within <<lore continent_main>>, they are a rather common sight
far beyond the <<lore region_sea>>.
They share many traits with their close relative, the <<rep setup.trait.subrace_dragonkin>>,
being a big, tall, proud, brave, and dominant species, but unlike the dragonkins, lizardkins are also
quite aggressive, and would take jobs such as raiders and thugs that dragonkins abhor with passion.
They are quite <<rep setup.trait.skill_intimidating>> to look at.
Lizardkins are excellent swimmers, and many are attuned to <<lore magic_water>>.
</p><<run new setup.Lore(
'race_demonkin', /* key */
'Demonkin', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
],
)>><p>
Demonkins hail from the same location with their more demonic counterpart,
the <<rep setup.trait.subrace_demon>>, but their corruptions are generally much more subdued.
Most demonkins still have almost normal limbs, although their body, tail, and horns
still make them stand out from others.
Many lives beyond <<lore concept_mist>>, serving their pureblooded demon masters, and demonkins
that are found within the mortal plane are often in the middle of doing some biddings of their masters.
There are exceptions however, and tales of brave but evil demonkin adventurers are quite popular
across the land.
</p>
<p>
Like most demons, demonkins tend to be evil, cruel lunatics.
In addition,
demonkins eyes are quite something, some even possessing qualities that make them good at
<<rep setup.trait.skill_hypnotic>> which they use to lure in potential slaves.
Thanks to their demonic heritage, they are unaffected by the negative effects of demonic bodypart.
</p><<run new setup.Lore(
'race_doppelganger', /* key */
'Doppelganger', /* name */
[ /* tags */
'race',
],
[ /* visibility requirements */
setup.qres.HasItem('lorebook_doppelganger'),
],
)>><p>
There has been numerous rumors that somewhere within the continent of
<<lore continent_main>> lives a race of humanoid capable of shapeshifting
into others.
These aptly-named doppelgangers have no self or form they can recall, only
those it decides to imitate. Should they encounter a hermit, they too become
completely indistinguishable from a regular hermit, be it from themself
or by others.
In fact, many villagefolks believe that half of their friends are in reality,
a doppelganger, who had been accustomed so much to their culture that they themself
even forget that they was once a doppelganger.
</p>
<hr/>
<p>
"Then we can only give thanks that this is in the middle of the <<lore region_sea>>,
where there is not one, single, solitary, living thing for it to
imitate, except these animals deep in the sea."
</p>
<p>
"Us," Blair giggled. "It can imitate us. Dogs can't make four
hundred miles to the sea; there's no food. There aren't any
sea gulls to imitate at this season. There aren't any
penguins this far inland. There's nothing that can reach the
sea from this point - except us. We've got brains. We can do
it. Don't you see - it's got to imitate us - it's got to be one
of us - that's the only way it can sail a boat - sail a boat
for two hours, and rule - be - all <<lore continent_main>>'s inhabitants.
A world for the taking - if it imitates us!
</p>
<<questauthorcardtext 'adapted from "Who Goes There?", by John W. Campbell'>><<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
<<lore race_humankingdom>>s,
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>>
<</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>><<if $gUpdatePostProcess>>
<<run setup.updatePostProcess()>>
<</if>>
<<focwidget 'loadmenu'>>
<<if $gMenuVisible>>
<<set _dom = setup.DOM.Menu.mainmenu()>>
<<attach _dom>>
<<elseif $devtooltype>>
<<set _dom = setup.DOM.Menu.devmainmenu()>>
<<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>><<focwidget 'loadmenutopdata'>>
<div>Fort of Chains <<= setup.VERSION.join('.')>>
<<if $gDebug>>
<<dangertextlite '[DEBUG]'>>
<</if>>
</div>
<<if $calendar>>
<div>
<<= State.variables.company.player.getName()>> / Week <<= $calendar.getWeek() >>
</div>
<div>
<<money $company.player.getMoney()>>
<<if $fort.player.isHasBuilding('recreationwing')>>
/ Prestige: <<= State.variables.company.player.getPrestige() >>
<</if>>
</div>
<div id='topleftnavdiv'>
<<if $gMenuVisible>>
<<if $opportunitylist.isHaveMustAnswerOpportunities()>>
<span class='press_on_space'>
<<focmove 'ANSWER MAIL' 'OpportunityList'>>
</span>
<<message '(?)'>>
You have some <<dangertext 'Important'>> mail that have to be answered
before you can end week.
<</message>>
<<else>>
<span class='press_on_space'>
<<set _text = 'END WEEK'>>
<<set _deployable = $company.player.getDeployableTeams()>>
<<if _deployable > 0>>
<<linkreplace _text>>
<span class='press_on_space'>
<<link 'REALLY END WEEK?'>>
<<run setup.deleteEndOfWeekCaches()>>
<<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>>
<<else>>
<div id='topleftnavigation'>
</div>
<</if>>
</div>
<</if>>
<</focwidget>>
<<focwidget 'refreshmenu'>>
<<replace "#menutopdata">>
<<loadmenutopdata>>
<</replace>>
<<replace "#notifheader">>
<<if $notification>>
<<loadnotification>>
<</if>>
<</replace>>
<<replace "#notiffooter">>
<</replace>>
<<replace "#menudiv">>
<<loadmenu>>
<</replace>>
<<run setup.DOM.Menu.refreshRightSidebar()>>
<</focwidget>>
<span id='menutopdata'>
<<loadmenutopdata>>
</span><div id='menurightdata'>
<<timed 0s>>
<<set _dom = setup.DOM.Menu.rightsidebar()>>
<<attach _dom>>
<</timed>>
</div><<set setup.VERSION = [1, 7, 0, 1]>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'coming_of_age', /* key */
"Coming of Age", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ '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', "a|was the child of one of your slavers who a|have 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()>>
<<yourrep _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 <<yourrep _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 world, giving <<them $g.child>> some money to jumpstart <<their $g.child>> life./* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'enlightenment_of_the_soul___prelude', /* key */
"Enlightenment of the Soul - Prelude", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[
'city',
'breeding',
'special',
'veteran',
'trait',
], /* tags */
4, /* opportunity expiration weeks */
'Opportunity_enlightenment_of_the_soul___prelude',
setup.qdiff.normal50, /* difficulty */
[ /* options */
[
'Opportunity_enlightenment_of_the_soul___prelude_0',
'Opportunity_enlightenment_of_the_soul___prelude_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SetCooldownOpportunity(null, 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.SetCooldownOpportunity(null, 30),
],
], [
'Opportunity_enlightenment_of_the_soul___prelude_2',
'Opportunity_enlightenment_of_the_soul___prelude_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SetCooldownOpportunity(null, 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.SetCooldownQuest('enlightenment_of_the_mind', 100),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoOpportunity('infiltration_of_the_soul'),
],
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1',
'pupil': [
setup.qres.Trait('gender_female'),
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>> pupil|have 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', pupil: 'pupil'}).apply(
setup.costUnitHelperDict({child: _child, pupil: $g.pupil})
)>>
<<run setup.qc.Leave('pupil', 'a|is preparing a|themself for getting pregnant', 1).apply($gQuest)>>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 . . .
<<run setup.qc.Leave('pupil', 'a|is preparing a|themself for getting pregnant', 1).apply($gQuest)>>
<<set _dom = setup.DOM.Roster.quest_enlightenmentofthesoul($g.pupil)>>
<<attach _dom>>Tear this stupid letter to shredsEnough is enough! <<rep $g.pupil>> pupil|is one of your slavers, not some perpetual student you're supporting./* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'infiltration_of_the_soul', /* key */
"Infiltration of the Soul", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[
'city',
'breeding',
'special',
'veteran',
'trait',
], /* tags */
4, /* opportunity expiration weeks */
'Opportunity_infiltration_of_the_soul___prelude',
setup.qdiff.normal50, /* difficulty */
[ /* options */
[
'Opportunity_infiltration_of_the_soul___prelude_0',
'Opportunity_infiltration_of_the_soul___prelude_0_flavor',
[ /* costs */
setup.qc.Money(-50000),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraitReplace('pupil', setup.trait.magic_light_master),
setup.qc.RemoveTitleGlobal('quest_enlightenment_2_graduate_1'),
setup.qc.SetCooldownQuest('infiltration_of_the_mind', 200),
setup.qc.SetCooldownQuest('enlightenment_of_the_mind', 200),
],
],
[
'Opportunity_infiltration_of_the_soul___prelude_2',
'Opportunity_infiltration_of_the_soul___prelude_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SetCooldownQuest(null, 50),
],
],
[
'Opportunity_infiltration_of_the_soul___prelude_3',
'Opportunity_infiltration_of_the_soul___prelude_3_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitleGlobal('quest_enlightenment_2_graduate_1'),
setup.qc.SetCooldownQuest('infiltration_of_the_mind', 100),
setup.qc.SetCooldownQuest('enlightenment_of_the_mind', 100),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoOpportunity('enlightenment_of_the_soul___prelude'),
],
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1',
'pupil': [
setup.qres.Trait('gender_male'),
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>
It has come to our attention that a ward of yours, <<rep $g.pupil>>, has
passed through the first two
Gates of Enlightenment. While "her" wits and diligence have brought the Enlightenment
of the Mind and the Enlightenment of the Heart, the final part,
Enlightenment of the Soul, is unofortunately out of reach for "her" and "her"
unique biology.
</p>
</div>
<p>
Biology? Did the master...
</p>
<div class='lettercard'>
<p>
While we have appreciated greatly "her", or should we say his diligence and
dedication for the Light, the final step is simply not possible for a man,
no matter how prettily disguised he is.
</p>
</div>
<p>
...The master knew about this all the time. What happens now? Does that mean you've been paying
all those tuition for nothing?
</p>
<div class='lettercard'>
<p>
Now I know what you think, if we know about the ward's gender, we should have refused the student
from the start. But alas, his dedication to the craft blinded us all, and we were unable to muster
the courage to expel the student.
</p>
<p>
Fortunately, we have a solution should you wish to advance the mastery.
</p>
</div>
<p>
You scowl your face, knowing what's coming next.
</p>
<div class='lettercard'>
<p>
A meager sum of <<money 50000>> should be enough to buy one of our spellbooks,
which could grant the tutee the knowledge they seek...
</p>
</div>
<p>
You almost want to throw the letter outside of your window, but this could be <<reps $g.pupil>>
only chance to master <<rep setup.trait.magic_light_master>>...
</p>Pay the outrageous fee<p>
Sighing to yourself, you pay the outrageous fee and receive the book.
If only your slaver should just blow somebody and get the damn spellbook...
</p>
<p>
It only took <<yourrep $g.pupil>> a day to master the craft by using the spellbook.
You are unsuer if this was the fruit of <<their $g.pupil>> previous classes,
or whether the book was all that was needed to master the craft...
</p>Delay answering by a year.You will not receive the same letter until at least next year.Tear this stupid letter to shredsEnough is enough! You will not be scammed any longer!/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"schools_out0",
"dropout",
"subrace_humankingdom_male", /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.UnitGroup(
"schools_out1",
"Graduate",
'subrace_humankingdom_male', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.Trait('unit', setup.trait.per_submissive),
setup.qc.Trait('unit', setup.trait.training_obedience_basic),
],
)>>
<<run new setup.OpportunityTemplate(
'schools_out', /* key */
"Schools Out", /* Title */
{ /* Author */
name: "Da_Shem",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804270432689455104',
},
[ /* tags */
'maleonly',
'city',
'unit',
],
1, /* expiration weeks */
'Opportunity_schools_out',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_schools_out_0',
'Opportunity_schools_out_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slave('dropout1', "a|was a dropout from a harsh institute", true),
setup.qc.Slave('dropout2', "a|was a dropout from a harsh institute", true),
setup.qc.Slave('dropout3', "a|was a dropout from a harsh institute", true),
setup.qc.Slave('dropout4', "a|was a dropout from a harsh institute", true),
],
],
[
'Opportunity_schools_out_1',
'Opportunity_schools_out_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slave('graduate', "a|was a graduate from a harsh institute", true),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'dropout1': 'schools_out0',
'dropout2': 'schools_out0',
'dropout3': 'schools_out0',
'dropout4': 'schools_out0',
'graduate': 'schools_out1',
'headteacher': [],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>>Turns out the head of the institute, <<name $g.headteacher>>, was as good as
<<their $g.headteacher>> word.
<<They $g.headteacher>> has sent a missive inquiring about your preferences.
<<They $g.headteacher>> can provide you either with a good number of dropouts or a single graduate.DropoutsYou are sure you can find buyers for some empty headed young men. Your buyer
are shown in to basement of the institute where they can choose freely from a
small groupGraduatesThere are not many clients who are interested in an already broken slaves.
You decide it is better to choose a nice submissive young plaything./* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'romeo_and_slave', /* key */
"Romeo and Slave", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
1, /* expiration weeks */
'Opportunity_romeo_and_slave',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_romeo_and_slave_0',
'Opportunity_romeo_and_slave_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Ire('humanvale', 1),
],
],
[
'Opportunity_romeo_and_slave_1',
'Opportunity_romeo_and_slave_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
[
'Opportunity_romeo_and_slave_2',
'Opportunity_romeo_and_slave_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('slave', setup.qres.IsCanBeSold()),
],
[ /* outcomes */
setup.qc.MissingUnitForever('slave'),
setup.qc.FavorUnitValue('slave', 'humanvale', 0.01),
setup.qc.FavorUnitValue('slave', 'humankingdom', 0.01),
setup.qc.IfThenElse(
setup.qres.Actor('slave', setup.qres.SlaveValueAtLeast(5000)),
setup.qc.DoAll([
setup.qc.MoneyUnitValue("slave", 0.8, 20000)
], undefined),
setup.qc.DoAll([
setup.qc.Money(4000)
], undefined)),
],
],
[
'Opportunity_romeo_and_slave_3',
'Opportunity_romeo_and_slave_3_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('slave', setup.qres.IsCanBeSold()),
],
[ /* outcomes */
setup.qc.MissingUnitForever('slave'),
setup.qc.FavorUnitValue('slave', 'humanvale', 0.02),
setup.qc.FavorUnitValue('slave', 'humankingdom', 0.02),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [ ],
'slave': [ ],
'blacksmith': [ ],
'lumberjack': [ ],
'tailor': [ ],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<if $gQuest.getSeed() % 3 == 0>>
<<set _title = 'blacksmith'>>
<<set $g.tenant = $g.blacksmith>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<set _title = 'tailor'>>
<<set $g.tenant = $g.tailor>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<set _title = 'woodworker'>>
<<set $g.tenant = $g.lumberjack>>
<</if>>
<p>
By now, your fort is a bustling hub of activity. Your slavers can be seen
doing errands around your fort, while various merchants peddle their goods in
your <<rep setup.buildingtemplate.market>>, which is bustling with
visitors. Some of your slaves are stationed in the <<rep
setup.buildingtemplate.recreationwing>>, where your slavers and visitors can
come and spend their hard-earned coins on.
</p>
<p>
Today, one of your tenants, <<rep $g.tenant>>, requests an interview.
<<They $g.tenant>>'s
<<if $gQuest.getSeed() % 3 == 0>>
a worn, grey-haired tank of a <<man $g.tenant>>, and you know <<them
$g.tenant>> as your resident blacksmith.
<<Them $g.tenant>> makes working <<their $g.tenant>> anvil away looks so
easy, and is a little intimidating somewhat.
<<elseif $gQuest.getSeed() % 3 == 1>>
an educated <<man $g.tenant>>, complete with spectacles, and you know <<them
$g.tenant>> as your resident tailor.
<<They $g.tenant>> is a rather creative <<urace $g.tenant>>, and many often seek <<their $g.tenant>>
talents when it comes to finding the best gift for others.
<<elseif $gQuest.getSeed() % 3 == 2>>
a powerfully built <<man $g.tenant>>, spotting a lumberjack axe on <<their $g.tenant>> <<uwaist $g.tenant>>. You know <<them $g.tenant>> quite well by now as your resident woodworker, and you know <<them $g.tenant>> to be pretty stoic.
<</if>>
But as <<they $g.tenant>> sits at your invitation and accepts a wine proffered by an attentive slave, <<they $g.tenant>> seems almost bashful.
</p>
<<if $g.slave.getSlaveValue() >= 5000>>
<<set _price = Math.min($g.slave.getSlaveValue() * 0.8, 20000)>>
<<else>>
<<set _price = 4000>>
<</if>>
<p>
"<<if $unit.player.isMale()>>Sir<<else>>Ma'am<</if>>, I'll say this straight. I'd like to buy one of your slaves. I've been seeing <<rep $g.slave>> a lot in the <<rep setup.buildingtemplate.recreationwing>>, and <<they $g.slave>> makes the years sit a little lighter on me.
I've scraped together what I can, and I can pay you <<money _price>>.
<<if $g.slave.getSlaveValue() < 3000>>
It's a very good price for the slave, and must be
<<elseif $g.slave.getSlaveValue() > 30000>>
It's a poor price, but still
<<else>>
It's a decent price, probably a little less than you could get for a proper slave order. It's
<</if>>
a huge sum for a humble <<= _title >>;
it's probably <<their $g.tenant>> entire savings.
You ask what <<they $g.tenant>> would do with <<them $g.slave>>.
"Well," <<they $g.tenant>> says, actually blushing,
"I'd free <<them $g.slave>>. And marry <<them $g.slave>>, if <<they $g.slave>>'d have me."
</p><<if $g.slave>>Decline, and tell <<rep $g.slave>> not to see the tenant ever again<</if>><<if $gQuest.getSeed() % 3 == 0>>
<<set _title = 'blacksmith'>>
<<set $g.tenant = $g.blacksmith>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<set _title = 'tailor'>>
<<set $g.tenant = $g.tailor>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<set _title = 'woodworker'>>
<<set $g.tenant = $g.lumberjack>>
<</if>>
<p>
<<Rep $g.slave>> obeys your orders not to see the old <<= _title>>. Though neither <<them $g.tenant>> nor <<rep $g.slave>> says a word about it, the other people in your <<rep setup.buildingtemplate.market>> are not so closemouthed.
Soon the tragic story of The <<= setup.capitalize(_title)>> and the Slave <<if $g.slave.isFemale()>>Girl<<else>>Boy<</if>> is being told in
bars and brothels across the nearby region, with you naturally playing the role of the villain.
</p>Politely decline<p>
"Ah well," he says, "didn't think you would, but I had to ask. If you'd be so kind as to keep <<them $g.slave>> assigned so I can keep seeing <<them $g.slave>>, I would be grateful. That was a fine victory, <<if $unit.player.isMale()>>Sir<<else>>Ma'am<</if>>; come down to the <<rep setup.buildingtemplate.market>> and visit me some time. Devils know, thanks to you I can afford a moment of pleasure here and there."
</p>Accept<<if $gQuest.getSeed() % 3 == 0>>
<<set _title = 'blacksmith'>>
<<set $g.tenant = $g.blacksmith>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<set _title = 'tailor'>>
<<set $g.tenant = $g.tailor>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<set _title = 'woodworker'>>
<<set $g.tenant = $g.lumberjack>>
<</if>>
<p>
The <<= _title>> leaves to collect <<their $g.tenant>> purchase. You discreetly follow, and you can see that <<rep $g.slave>> can hardly believe what's happened.
<<They $g.slave>> hugs <<them $g.tenant>>, sobbing into <<their $g.tenant>> shoulder. As they walk hand in hand down towards <<their $g.tenant>> place, <<they $g.slave>> suddenly turn <<their $g.slave>> head towards you, gives a little nod and silently mouths the words 'thank you, <<master $unit.player>>.' Thanks to the gossipers in the market, soon the romantic story of The <<= setup.capitalize(_title)>> and the Slave <<if $g.slave.isFemale()>>Girl<<else>>Boy<</if>> is being told in bars and brothels across the nearby region, with you naturally playing a supporting role.
</p><<if $g.slave>>Give <<them $g.slave>> to the tenant as a gift<</if>><<if $gQuest.getSeed() % 3 == 0>>
<<set _title = 'blacksmith'>>
<<set $g.tenant = $g.blacksmith>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<set _title = 'tailor'>>
<<set $g.tenant = $g.tailor>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<set _title = 'woodworker'>>
<<set $g.tenant = $g.lumberjack>>
<</if>>
<<set _u = setup.getAnySlaver()>>
<p>
The <<= _title>> cannot believe <<their $g.tenant>> ears.
After you repeat yourself twice, <<they $g.tenant>> leaves to collect your gift, thanking you clumsily.
After you give your orders to <<yourrep _u>>,
you secretly follow after, and you see that <<rep $g.slave>> can hardly believe what's happened. <<They $g.slave>> hugs <<them $g.tenant>>, sobbing into <<their $g.tenant>> shoulder. As they walk hand in hand down towards <<their $g.tenant>> quarters,
<<they $g.slave>> suddently turns <<their $g.slave>> head towards you, and giving you a little nod and silently mouths the words 'thank you, <<master $unit.player>>.'
</p>
<p>
You smile to yourself; when they get there they'll find flowers that you asked <<rep _u>> to collect and a paid reservation at one of the most famous restaurants in the <<lore region_city>>. Thanks to the gossippers in the market, soon the story is being told in bars and brothels across nearby region, with you naturally playing a starring role.
</p><<run new setup.UnitGroup(
"an_offering_accepted0",
"DemontoyMistwalker",
[ /* pools */
[setup.unitpool.subrace_demonkin_male, 0.10],
[setup.unitpool.subrace_demonkin_female, 0.10],
[setup.unitpool.subrace_dragonkin_male, 0.01],
[setup.unitpool.subrace_dragonkin_female, 0.01],
[setup.unitpool.subrace_humandesert_male, 0.24],
[setup.unitpool.subrace_humandesert_female, 0.24],
[setup.unitpool.subrace_orc_male, 0.15],
[setup.unitpool.subrace_orc_female, 0.15],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.bg_mist),
setup.qc.Corrupt('unit', null, 10),
setup.qc.PermanentlyCorrupt('unit'),
setup.qc.PermanentlyCorrupt('unit'),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_empath, setup.trait.per_playful, setup.trait.per_kind, setup.trait.per_submissive, setup.trait.per_masochistic, setup.trait.per_lunatic, setup.trait.per_gregarious, setup.trait.per_loyal, setup.trait.per_dreamy, setup.trait.per_slow], 2, false, false),
setup.qc.TraitReplaceExisting('unit', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_huge),
setup.qc.AddTraitsRandom('unit', [setup.trait.magic_earth, setup.trait.magic_wind, setup.trait.magic_fire, setup.trait.skill_entertain, setup.trait.skill_hypnotic, setup.trait.muscle_verythin], 1, true, false),
setup.qc.DoAll([
setup.qc.AddTraitsRandom('unit', [setup.trait.magic_earth_master, setup.trait.magic_wind_master, setup.trait.magic_fire_master], 1, false, false)
], 0.30),
setup.qc.DoAll([
setup.qc.Mindbreak('unit')
], 0.5),
],
)>>
<<run new setup.OpportunityTemplate(
'an_offering_accepted2', /* key */
"An Offering Accepted", /* Title */
{ /* Author */
name: "Fae",
url: "",
},
[ /* tags */
'desert',
'veteran',
'upgrade',
'unit',
'rare',
],
1, /* expiration weeks */
'Opportunity_an_offering_accepted2',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_an_offering_accepted2_1',
outcome_passage: 'Opportunity_an_offering_accepted2_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.NoItem(setup.item.technology_hornymaster),
],
outcomes: [ /* outcomes */
setup.qc.ItemIfNew(setup.item.technology_hornymaster, 1),
setup.qc.VarSet('fae_DemonBuisnessRelationship', '1', -1),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_an_offering_accepted2_2',
outcome_passage: 'Opportunity_an_offering_accepted2_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Slave('demonslave', "a|was the former property of a particularly haughty demon", undefined),
setup.qc.VarSet('fae_DemonBuisnessRelationship', '1', -1),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_an_offering_accepted2_0',
outcome_passage: 'Opportunity_an_offering_accepted2_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.NoUnitWithTitle('quest_demon_raider_0', {
job_key: "slave",
}),
],
outcomes: [ /* outcomes */
/* setup.qc.QuestDirect('capturing_a_sex_demon', null), */
setup.qc.VarRemove('fae_DemonBuisnessRelationship')
],
visibility_restrictions: [
setup.qres.Never(),
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'demonkinnegotiator': 'an_offering_accepted0',
'demonslave': 'an_offering_accepted0',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
It would at least appear that the demon whom you have been dealing with has accepted your offering, or at least that's what you assume as later in the day, after handing the slave to the required transporter, a demonkin arrived at <<rep $company.player>> to speak with you. <<rep $g.demonkinnegotiator>> introduces <<themselves $g.demonkinnegotiator>> as an individual under the employ of your demon acquaintance, and the two of you sit in your office for a brief discussion.
</p>
<p>
<<Rep $g.demonkinnegotiator>> informs you that <<their $g.demonkinnegotiator>> demon overlord specializes in corruption, and while that in itself covers a very wide range of possibilities,
the demon is willing to grant you a rare tome detailing how to turn even the most chaste individuals into drooling sex addict, the <<rep setup.item.technology_hornymaster>>.
<<if $inventory.isHasItem(setup.item.technology_hornymaster)>>
As you recall, you already have it though, so the demonkin moves on.
<</if>>
</p>
<p>
Alternatively <<rep $g.demonkinnegotiator>> informs you that the demon is willing to part with their previous toy, in essence a slave for slave trade. The slave they are offering you is at the very least a mistwalker, and people with that skillset may be hard to find anywhere else. That being said the slave in question was the toy of a demon who seems to take great pleasure in corruption, so you really have no idea what state they will be in when they arrive. <<Rep $g.demonkinnegotiator>>, however, assures you that they would be a valuable slave to add to your collection nonetheless.
</p>
/*
<p>
Of course there is always the option to tell the demonkin to piss off, and make it clear you have no interest in further business with the demon and just want to move on with your life. Of course this would all be a lie, as they took one of your slavers hostage and you cant let something like that stand. Your slavers have been whispering and scheming for weeks and you believe they are equipped with the knowledge on how to return to the demons hideout. Making the demon think you have no interest is a great way to set up a surprise raid, and even if it was borderline suicidal your group would have the best possible opportunity to lay the demon at your <<ulegs $unit.player>> in chains for daring to challenge <<rep $company.player>>.
</p>
*/Raid<p>
After patiently hearing out the demonkins offers, you stand and extend your hand for a handshake. As the demonkin clasps your hand you yank <<them $g.demonkinnegotiator>> over your desk, grabbing <<their $g.demonkinnegotiator>> <<uneck $g.demonkinnegotiator>> with your other hand. As <<rep $g.demonkinnegotiator>> is trying to figure out what happened to cause this, you drag <<their $g.demonkinnegotiator>> squirming body all through the halls before throwing them out your front gate. Loudly you tell the demonkin that you have no interest in further business dealings with them and order them off your property.
</p>Demonic Knowledge<p>
You choose to accept the trade of knowledge from the demonkin, hoping to improve your company from this whole ordeal. <<rep $g.demonkinnegotiator>> thanks you and leaves your fort promising that your new tome would arrive "soon".
</p>
<p>
With that out of the way, you finish the rest of your day with more mundane
discussions. As you are finishing up your office work for the day,
you accidentally knock over a book on top of your desk.
Leaning down to pick it up, you realize its a leather bound tomb. Quickly thumbing through the pages, you realize that
you have never seen the book before.
Inside the book are the most debauched and degenerate instructions to instill sex addiction to any slave --
this must have been the prize you have been promised.
You smile to yourself before tucking the book away for now,
thinking about all the ways you want to use the information within the book to train your slaves.
</p>Trade<p>
You choose to accept the trade and be done with this whole mess, hoping to at the very least be able to make some of your money back. <<rep $g.demonkinnegotiator>> thanks you and leaves your fort promising that the slave would arrive soon.
</p>
<p>
As you finish up your office work for the day, you retreat to your bedchambers your shocked to find a <<urace $g.demonslave>> bound tightly in rope, a thick piece of cloth in their mouth seemingly as a makeshift gag, and seemingly unconscious. In front of them lies a note that reads
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
Enjoy the gift! I look forward to working with you again.
</p>
<p>
More Kisses,
</p>
<p>
Your demon business partner!
</p>
</div>
</p>
<p>
You feel the pull of mild annoyance again as you crumple the note, slapping the slave lightly a few times to wake <<them $g.demonslave>>.
</p>
<<if $g.demonslave.isHasTrait('training_mindbreak')>>
<p>
As <<rep $g.demonslave>> wakes, your eyes meet and you feel your annoyance build into borderline rage, as the slave has a look you've become familiar with over your time as a slaver. That <<uadjbad $g.demonkinnegotiator>> demon whore gave you a slave whos mind clearly was shattered, destroying their value and only serving to add to the pile of funds you've sunk into this endeavor already.
</p>
<p>
Well at the very least, you have a mindbroken slave in your bedroom to take your frustration out on
</p>
<<else>>
<p>
As <<rep $g.demonslave>> awakens, <<their $g.demonslave>> <<ueyes $g.demonslave>> begin darting around the room before locking with yours, as <<they $g.demonslave>> exclaims <<ugaggeddiscomfort $g.demonslave>>. Not the most philosophical thing you've ever heard, but at the very least it lets you know that <<they $g.demonslave>> is still all their mentally. You gently run your hand over the still yelling slaves cheek before giving <<them $g.demonslave>> a light pat and stating coyly
<<dialogue $unit.player>>
Dont worry <<unicknamebad $g.demonslave>>, you belong to me now.
<</dialogue>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
],
false, /* 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 occasionally 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>> remained in the forefront of your thoughts in the days to come, which occasionally 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 <<theslaver $g.rival>> 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 setup.qc.BoonizeRandom('you', 2).apply($gQuest)>>
<<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>> 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 setup.qc.BoonizeRandom('you', 3).apply($gQuest)>>
<<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 setup.qc.TraumatizeRandom('you', 3).apply($gQuest)>>
<</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>> 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 setup.qc.BoonizeRandom('you', 3).apply($gQuest)>>
<<run setup.qc.Injury('rival', 1).apply($gQuest)>>
<<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 setup.qc.BoonizeRandom('you', 2).apply($gQuest)>>
<<run setup.qc.Injury('rival', 1).apply($gQuest)>>
<<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.getUnitIfAvailable('viceleader')>>
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, <<theslaver $g.rival>> pinned you there, while removing your and giving several spanks to your ass as your face is in the dirt.
After <<they $g.rival>> had 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 setup.qc.BoonizeRandom('rival', 2).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('you', 1).apply($gQuest)>>
<<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>> 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 setup.qc.BoonizeRandom('rival', 3).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('you', 3).apply($gQuest)>>
<</if>>
<</if>><<run new setup.OpportunityTemplate(
'a_merchant_s_revenge_payback_is_sweet', /* key */
"A Merchant\'s Revenge: Payback is Sweet", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'unknown',
],
1, /* expiration weeks */
'Opportunity_a_merchant_s_revenge_payback_is_sweet',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_0',
outcome_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Actor('player', setup.qres.You()),
],
outcomes: [ /* outcomes */
setup.qc.VarSet('mlangmerchantprincequest', '5', -1),
setup.qc.VarRemove('mlang_merchantrevenge_caravancount'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_1',
outcome_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_1_flavor',
costs: [ /* costs */
setup.qc.MoneyCustom(-50),
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarSet('mlangmerchantprincequest', '5', -1),
setup.qc.VarRemove('mlang_merchantrevenge_caravancount'),
setup.qc.BoonizeRandom('player', 5),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_2',
outcome_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarSet('mlangmerchantprincequest', '5', -1),
setup.qc.VarRemove('mlang_merchantrevenge_caravancount'),
setup.qc.SlaveOrderFlex(
'Slave Order: The Prince of Cups\' New Pissoir', /* name */
'independent', /* company */
12, /* expires in */
1500, /* base price */
200, /* trait multi */
0.1, /* value multi */
[ /* crit traits */
setup.trait.per_submissive,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_oral_advanced,
setup.trait.training_oral_master,
],
[ /* disaster traits */
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.muscle_extremelythin,
setup.trait.face_hideous,
setup.trait.per_stubborn,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_toilet_basic, setup.trait.training_toilet_advanced, setup.trait.training_toilet_master], true),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.per_lustful,
setup.trait.training_masochist_advanced,
setup.trait.training_masochist_basic,
setup.trait.training_horny_basic,
setup.trait.training_horny_advanced
], 1, 0, 0),
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.per_dominant,
setup.trait.per_chaste,
setup.trait.corrupted,
setup.trait.training_dominance_basic
], 0, 1, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
visibility_restrictions: [
setup.qres.TagNotBanned('watersport'),
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_3',
outcome_passage: 'Opportunity_a_merchant_s_revenge_payback_is_sweet_3_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarSet('mlangmerchantprincequest', '5', -1),
setup.qc.VarRemove('mlang_merchantrevenge_caravancount'),
setup.qc.SlaveMarker('slaves'),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '2'),
setup.qres.UnitGroupNotBusy('a_merchant_s_revenge1'),
],
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
'player': [
setup.qres.You(),
],
'slaves': 'city_all',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>>/* mlangmerchantprincequest 2 = Cipher Found
mlangmerchantprincequest 5 = Caravan Raid tips incoming */
/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'tankard of mead'>>
<<elseif $unit.player.isHasAnyTraitExact(['bg_monk', 'bg_priest'])>>
<<set _pdrink = 'cup of tea'>>
<<else>>
<<set _pdrink = 'glass of wine'>>
<</if>>
<<dialogue $g.merchant>>
I'll be sending you advanced warning of their caravans and their travel routes. And paying you a bounty for each one that doesn't reach the city
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
<p>
By now, <<lore location_princeofcups>> is starting to feel familiar, from its polished wooden floors to the pressed white tablecloths, to the _pdrink waiting for you at the table, a <<uadjphys $g.merchant>> <<urace $g.merchant>> lounging on the opposite side, toying with a glass of deep red wine.<br>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"Nice to see you again." <<name $g.merchant>>'s eyes rake over your body, lingering on your
<<if $unit.player.isHasTrait('gender_male')>>
crotch for a noticeable moment.
<<else>>
breasts for a noticeable moment.
<</if>>
"It has been a while."
<<else>>
Nice to see you again." <<name $g.merchant>> says. "It's been a while."
<</if>>
<br>
<<if $unit.player.getSpeech() == setup.speech.friendly>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"You too. You know, people are going to start talking if we keep doing this."<br>
<<name $g.merchant>> chuckles. "Not here they won't. Still. Some prudence wouldn't hurt."<br>
Shrugging, you take your seat and pick up your _pdrink. "If you insist."<br>
"I'm afraid I must.
<<else>>
"You too. You know, people are going to start talking if we keep doing this."<br>
"Not here they won't," <<name $g.merchant>> says grimly. "And besides. You aren't the only... mercenary I'm meeting here. Just the first, since you brought me the evidence I asked for."<br>
Taking a sip from your _pdrink you enjoy the flavour for a moment before swallowing. "All right, I'm listening."<br>
"Good.
<</if>>
<<elseif $unit.player.getSpeech() == setup.speech.bold>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"Are we at the part where we fuck yet?"<br>
<<name $g.merchant>> leans back in their chair, regarding you cooly. "No. Anyway.
<<run setup.qc.VarSet("mlangmerchantprinceflirt", "0").apply($gQuest)>>
<<else>>
"We meet on your timetable," you say with a shrug. "What's going on?"
"Straight to the point, eh? Fine."<br>
<</if>>
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"You too. What's going on?"<br>
<<name $g.merchant>> smiles, "Quite a lot.
<<else>>
"What do you have for me?"<br>
<<name $g.merchant>> smiles, "Straight to the point, eh? Fine.
<</if>>
<<elseif $unit.player.getSpeech() == setup.speech.witty>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"We can meet as often as you like," you say with a wink. "All you have to do is ask."<b>
<<name $g.merchant>> drops <<their $g.merchant>> head and chuckles. "True. Well, until such a time as I'm at liberty to do so, I have a proposal for you.
<<else>>
"Well, send me more invitations and you'll see a lot more of me."<br>
<<name $g.merchant>> arches an eyebrow. "Hmm. I suppose that's true. In any case, to business.
<</if>>
<<elseif $unit.player.getSpeech() == setup.speech.debauched>>
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
"Did you want me to take my clothes off so you can get a better look?" you say, bringing your hands to the buttons of your shirt. "How far does the discretion of this place go, anyway?"<br>
<<name $g.merchant>> flushes, a deep crimson blossoming over <<their $g.merchant>> cheeks. "Uh.... quite far. Um. I...uh... have never seen anyone t-try it and I'd honestly rather not be the first."<br>
"Spoilspot," you say, pouting as you drop your hands and slide into the booth. "So what am I here for if not to
<<if $unit.player.isHasTrait('per_submissive')>>
be ravished on the table?"
<<else>>
ravish you on the table?"
<</if>>
<br>
"Well.
<<else>>
"It's always nice to see you too," you say, running your eyes over <<their $g.merchant>> body. "Even if it's just for business."<br>
"Ah yes. Business.
<</if>>
<</if>>
I deciphered the note you found and I'm reasonably confident I know who's behind the attacks on my caravans. I'm...surprised, and well, I want to make sure I'm right. So I'm going to ask you to turn the tables on them."<br>
<<if $unit.player.isHasTrait('per_slow')>>
"But how would I know if I'm at a table with them?"<br>
<<name $g.merchant>> pauses. "I mean that they run caravans and I want you to attack them."<br>
"Oh. Okay. How do I find them?"<br>
"
<<elseif $unit.player.isHasTrait('per_smart')>>
"So they're a merchant then?"<br>
"Yes. They are.
<<else>>
"All right. I'm sure you have an idea of how you want that to happen?"<br>
"I want you to raid their caravans," <<name $g.merchant>> says, running a finger around the rim of <<their $g.merchant>> wineglass. "
<</if>>
I'll be sending you advanced warning of their caravans—when they're coming, and the routes that they're taking. And I'll be paying you a bounty for each one that doesn't reach the city."<br>
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_aggressive", "per_cruel"])>>
"Kill them all?"<br>
"If that's what you want to do, sure.
<<elseif $unit.player.isHasAnyTraitExact(["per_kind", "per_empath"])>>
"Steal or destroy the cargo?"<br>
"If that's what you want to do, sure.
<<else>>
"Never arrive, or never arrive with sellable goods?"<br>
"Either one is fine by me," <<name $g.merchant>> says, taking a gulp of <<their $g.merchant>>, a drop of crimson spilling over <<their $g.merchant>> chin. <<They $g.merchant>> wipe of the excess with a napkin. "
<</if>>
Just be aware that if you leave any survivors it's more likely that the attack will the traced back to you and your company—and you may find the city becomes an increasingly hostile place. By all means use your judgement as to whether it's prudent to attack. I have other mercenaries I can hire. I'm just giving you first shot at the prize."
<<if $unit.player.isHasTrait('per_slow')>>
<br>
<<name $g.merchant>> hold up a hand as your brow begins to furrow. "I mean I'm telling you before I tell any of them."
<<else>>
<</if>>
<br>
"Thanks," you say, "How much of a head start?"<br>
"Depends on the caravan," <<uequipment $g.merchant>> says. "A few weeks. A month if possible."<br>
"Well then," you say, raising your drink in a toast. "I'd say you have yourself a deal."
</p>
<p>
Is there anything else you'd like to do while you're at the Prince of Cups?
</p>Finish your drink and leave<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
You spend a few hours getting to know <<name $g.merchant>> a bit better over several rounds of drinks, and you smile when <<their $g.merchant>> foot pushes against yours underneath the table. Eventually, however, you pull yourself away and head back into the city.
<<else>>
<<if $unit.player.getSpeech() == setup.speech.friendly>>
You chat amiably with <<name $g.merchant>> while you finish your drink. Afterwards, you head out into the city. <<They $g.merchant>> remain behind, probably ready for the next meeting—whoever that's with.
<<elseif $unit.player.getSpeech() == setup.speech.bold>>
You spend some time pushing for more information from <<name $g.merchant>>, but their cagey answers leave you with more questions than before. Downing your drink in frustration, you stomp out of <<lore location_princeofcups>>. You have better things to do with your time today, and now you're going to go and figure out what they were.
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
You sip your _pdrink in near silence, enjoying the peace and calm of <<lore location_princeofcups>>. When you're done, you bid <<name $g.merchant>> farewell and head off into the city.
<<elseif $unit.player.getSpeech() == setup.speech.witty>>
You regale <<name $g.merchant>> with some of the funnier tales from your life and time passes more quickly than either of you seem to want. Eventually though, you finish your _pdrink and head off into the city as the sun starts to dip lower on the horizon.
<<elseif $unit.player.getSpeech() == setup.speech.debauched>>
You flirt outrageously with the <<urace $g.merchant>> as you finish your drink, but they seem generally uninterested in you. Eventually, you head out into the city. Hopefully you'll find a more receptive audience elsewhere.
<</if>>
<</if>>Buy some drinks for later/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'barrel of mead'>>
<<set _pcontainer = 'barrel'>>
<<elseif $unit.player.isHasAnyTraitExact(['bg_monk'])>>
<<set _pdrink = 'small box of tea'>>
<<set _pcontainer = 'box'>>
<<else>>
<<set _pdrink = 'cask of wine'>>
<<set _pcontainer = 'cask'>>
<</if>>
After finishing your drink, you head over to the bar, determined to bring a _pdrink back to the fort for your own private stash. You try not to appear shocked at the price, but hand over the coin and leave with the _pcontainer clutched in your hands.See if The Prince of Cups would like to buy a slave (Watersports Kink)It takes a few minutes before your
<<if $unit.player.isHasTrait('per_direct')>>
direct query to speak to the manager about slaves
<<else>>
discreet query to speak to the manager about indentured servants
<</if>>
finds its way to the duty manager. <br>
<<if $unit.player.isHasTrait('per_direct')>>
"Slavery is illegal in the Kingdom of Tor and all of our employees are under contract and appropriately compensated," he says, a little too loudly. Dropping his voice, he continues "We'll have an order sent around to your company. Thank you for your patronage."
<p>
Oh right. These people and their doublespeak. Still, that's good enough, and you head back out into the city.
</p>
<<else>>
"Well, I trust you've visited our toilets and have seen our special amenities. I'll have an employment request sent to your company. If you can fill it, we'd be happy to pay you a finders fee.
<p>
Remembering that slavery is technically illegal in the Kingdom of Tor, you nod you agreement and slip out into the city.
</p>
<</if>>
<<successtext "You have gained a new slave order">>Visit the toilets<<if !$settings.bannedtags.watersport>>
Walking into the toilets you head around the corner, past the attendant and straight for the special attractions.
<<if $unit.player.isHasDick()>>
Pulling your soft cock out of your <<uequipslot $unit.player 'legs'>>, you head over to the <<woman $g.slaves>> on the right and shove your prick through the circular gag and into <<theirs $g.slaves>> mouth.
<p>
Grabbing <<their $g.slaves>> head for leverage you pull them into your crotch and let go, forcing them to swallow rapidly. This time though, your bladder is full from several rounds of drinking, and the volume proves to be too much for <<them $g.slaves>>, causing <<them $g.slaves>> to choke around your cock as the piss splashes out, splattering the front of your <<uequipslot $unit.player 'legs'>>. <br>
"That's going to stink," you tell them sternly. "If you weren't gagged I'd have you clean me up."<br>
"Uh orri, ease et e keean yu" the slave manages around the gag.<br>
"No, I'll just get a real piss pig I own to do it later. <<they $g.slaves>> love licking dried piss and spunk of my body before getting fresh loads of both.
</p>
<p>
The slave whines pathetically as you finish up and tuck your cock away, begging you to fuck <<their $g.slaves>> mouth, almost seeming fearful of the consequences should you leave unsatisfied. Maybe you should see about offering to replace of the slave. <<They $g.slaves>>'s attractive enough, but clearly need more training.
</p>
<<else>>
<p>
Removing your <<uequipslot $unit.player 'legs'>> and undergarments you position yourself over the <<woman $g.slaves>> on the right and let it flow. <<They $g.slaves>> gulp furiously as your piss splatters over their face, the metal gag preventing them from getting their lips around your pussy. It also prevents <<their $g.slaves>> tongue from reaching you, which is disappointing, but still, that was fun.
</p>
<</if>>
<<else>>
As you walk into the toilet area you wonder how much the all the marble cost and if there's any way you can possibly afford to have your baths done up with elegant stone. Although whether that should be white marble or black marble is something you
<<if $unit.player.isHasAnyTraitExact(["bg_artist", "skill_creative"])>>
still haven't made a decision on despite the number of sketches and plans you've drawn up. There always seems to be something more pressing than marble floors and piped water.
<<else>>
never really thought about one way or another. Not affordable, so why bother?
<</if>>
<p>
Finishing your business, you wash your hands and head off into the city, a map showing the location of the bandit camp tucked away into a pocket.
</p>
<</if>><<run new setup.OpportunityTemplate(
'a_merchant_s_revenge_visiting_the_captured', /* key */
"A Merchant\'s Revenge: Visiting the Captured", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'watersport',
'fort',
'order',
],
2, /* expiration weeks */
'Opportunity_a_merchant_s_revenge_visiting_the_captured',
setup.qdiff.normal20, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_0',
outcome_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_1',
outcome_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.MoneyCustom(200),
setup.qc.Favor('humankingdom', 10),
setup.qc.SlaveOrderFlex(
'A Merchant\'s Revenge: A Trained Bandit', /* name */
'humankingdom', /* company */
1, /* expires in */
1500, /* base price */
500, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.training_obedience_basic,
setup.trait.training_anal_basic,
setup.trait.training_toilet_basic,
],
[ /* disaster traits */
setup.trait.training_dominance_basic,
setup.trait.training_dominance_advanced,
setup.trait.training_dominance_master,
setup.trait.training_sissy_basic,
setup.trait.training_sissy_advanced,
setup.trait.training_sissy_master,
setup.trait.training_mindbreak,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_merchant_s_bandit_0'),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
setup.trait.training_masochist_basic,
setup.trait.training_masochist_advanced,
setup.trait.training_masochist_master,
setup.trait.training_toilet_advanced,
setup.trait.training_toilet_master
], 2, 0, 0),
],
[ /* fulfilled outcomes */
setup.qc.Favor('humankingdom', 35),
setup.qc.VarSet('mlang_merchantrevenge_banditslave', '1', -1),
],
[ /* unfulfilled outcomes */
],
),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_2',
outcome_passage: 'Opportunity_a_merchant_s_revenge_visiting_the_captured_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Or([
setup.qres.VarEqual('mlangmerchantprinceflirt', '1'),
setup.qres.And([
setup.qres.VarNull('mlangmerchantprinceflirt'),
setup.qres.Player(setup.qres.AnyTrait([setup.trait.face_attractive, setup.trait.face_beautiful], true))
])
]),
],
outcomes: [ /* outcomes */
setup.qc.MoneyCustom(200),
setup.qc.Favor('humankingdom', 20),
setup.qc.SlaveOrderFlex(
'A Merchant\'s Revenge: A Trained Bandit', /* name */
'humankingdom', /* company */
20, /* expires in */
1500, /* base price */
500, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.training_obedience_basic,
setup.trait.training_anal_basic,
setup.trait.training_toilet_basic,
],
[ /* disaster traits */
setup.trait.training_dominance_basic,
setup.trait.training_dominance_advanced,
setup.trait.training_dominance_master,
setup.trait.training_sissy_basic,
setup.trait.training_sissy_advanced,
setup.trait.training_sissy_master,
setup.trait.training_mindbreak,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_merchant_s_bandit_0'),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
setup.trait.training_masochist_basic,
setup.trait.training_masochist_advanced,
setup.trait.training_masochist_master,
setup.trait.training_toilet_advanced,
setup.trait.training_toilet_master
], 2, 0, 0),
],
[ /* fulfilled outcomes */
setup.qc.Favor('humankingdom', 35),
setup.qc.VarSet('mlang_merchantrevenge_banditslave', '1', -1),
],
[ /* unfulfilled outcomes */
],
),
setup.qc.IfThenElse(
setup.qres.VarNull('mlangmerchantprinceflirt'),
setup.qc.DoAll([
setup.qc.VarSet('mlangmerchantprinceflirt', '1', -1)
], undefined),
setup.qc.DoAll([
], undefined)),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'pc': [
setup.qres.You(),
setup.qres.Home(),
],
'slave': [
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_merchant_s_bandit_0'),
setup.qres.Home(),
],
'merchant': 'a_merchant_s_revenge1',
},
[ /* expiration outcomes */
setup.qc.Favor('humankingdom', -20),
],
false, /* is must be answered */
)>>You find the following letter on your desk.
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
I would like to visit your establishment and sample the services of our re-educated friend. I will, of course, compensate you for the use of your indentured servant.
<<if setup.qres.VarEqual("mlangmerchantprinceflirt", "1").isOk($gQuest)>>
If you are home, perchance you will join me.
<<elseif $unit.player.isHasAnyTraitExact(['face_attractive', 'face_beautiful'])>>
<<if setup.qres.VarNull("mlangmerchantprinceflirt").isOk($gQuest)>>
If you are of a mind to show me <<their $g.slave>> talents, I would not object to the company.
<</if>>
<</if>>
</p>
<p>
Please send word to our usual meeting place if this is acceptable. I do look forward to visiting and paying my respects upon your servant.
</p>
<p>
Until later,
</p>
<p>
<<name $g.merchant>>
</p>
</div>
All you have to decide now is what message you'll leave with the bartender at <<lore location_princeofcups>>.Politely Decline<<set _u = setup.getAnySlaver()>>
You send <<name _u>> to <<lore location_princeofcups>> with a note for <<name $g.merchant>> explaining that the servant he requested is currently unwell and perhaps he'd like to visit later.Invite the merchant to your fort<<set _u = setup.getAnySlaver()>>
<p>
A few days after having <<name _u>> drop a message off at <<lore location_princeofcups>>, <<name $g.merchant>> arrives at your fort, accompanied by a number of guards. After some small talk, you lead <<them $g.merchant>> to the cell where the former bandit leader, <<name $g.slave>> is shackled.
<<if !$g.slave.isCanSee()>>
<<Their $g.slave>> head turns unseeingly toward the door, straining to for clues as to who is entering the cell.
<<else>>
<<They $g.slave>> turns toward the door, eyes widening as <<they $g.slave>> sees the <<man $g.merchant>> entering <<their $g.slave>> cell.
<</if>>
<br>
"So," <<name $g.merchant>> says. "You're the dipshit who decided to raid my caravans. Now I know it was just for money, but you've made me very upset. And now you're going to pay for it."
</p>
<p>
Eventually the screaming turns into sobs and eventually, <<name $g.merchant>> exits the cell, <<their $g.merchant>> clothing impeccable, but <<their $g.merchant>> hair damp with sweat and a wolfish grin on <<their $g.merchant>> face. Peeking into the cell behind <<them $g.merchant>>, you see your slave,
<<if $g.slave.isHasAnyTraitExact(["training_toilet_basic", "training_toilet_advanced", "training_toilet_master"])>>
lying on the floor, crying
<<else>>
lying on the floor, face and <<ubreasts $g.slave>> covered in urine which you suspect isn't <<theirs $g.slave>>,
<</if>>
<<if $g.slave.isHasAnyTraitExact(["per_submissive", "per_lunatic", "training_masochist_basic", "training_masochist_advanced", "training_masochist_master"])>>
with
<<if $g.slave.isHasDick()>>
<<their $g.slave>> cock hard and throbbing
<<else>>
<<their $g.slave>> pussy wet and slick
<</if>>
despite the puffiness of <<their $g.slave>> asshole.
<<else>>
and <<their $g.slave>> asshole puffy and red.
<</if>>
<<if $g.merchant.isHasDick()>>
White globs of cum ooze from <<their $g.slave>> ring and the skin of <<their $g.slave>> bottom is red from spanking.
<<else>>
The skin of <<their $g.slave>> bottom is also visibly red, probably from spanking.
<</if>>
</p>
<p>
"That was wonderful," <<name $g.merchant>> says happily as <<they $g.merchant>> hands you a pouch of gold. "If you're able to train <<them $g.slave>> up to my preferences, I'll buy <<them $g.slave>> off you if you like."
</p>Invite the merchant to your fort and join them in using your slave<<if $unit.player.isHasDick()>>
<<set _ucock = 'cock'>>
<<else>>
<<set _ucock = 'strap-on'>>
<</if>>
<<if $g.merchant.isHasDick()>>
<<set _mcock = 'cock'>>
<<else>>
<<set _mcock = 'strap-on'>>
<</if>>
<<set _u = setup.getAnySlaver()>>
A few days after having <<name _u>> drop a message off at <<lore location_princeofcups>>, <<name $g.merchant>> arrives at your fort, accompanied by a number of guards. After some small talk, you lead <<them $g.merchant>> to the cell where the former bandit leader, <<name $g.slave>> is shackled.
<<if !$g.slave.isCanSee()>>
<<Their $g.slave>> head turns unseeingly toward the door, straining to for clues as to who is entering the cell.
<<else>>
<<They $g.slave>> turns toward the door, eyes widening as <<they $g.slave>> sees the two of you entering <<their $g.slave>> cell.
<</if>>
<br>
"So," <<name $g.merchant>> says. "You're the dipshit who decided to raid my caravans. Now I know it was just for money, but you've made me very upset. And now you're going to pay for it."<br>
<<name $g.merchant>> carefully removes <<their $g.merchant>> clothing and folds it carefully, placing it down on the provided table. Your eyes feast on <<their $g.merchant>> <<ubody $g.merchant>> as you hurry to follow suit. When <<they $g.merchant>>'s naked,
<<name $g.merchant>>
<<if $g.merchant.isHasDick()>>
fists his cock a couple of times,
and then thrusts it into the former bandit leader's mouth.
<<else>>
secures a ring gag into the slave's mouth, before
positioning <<their $g.merchant>> ass just above the former bandit leader's mouth.
<</if>>
<br>
"Drink pig," <<they $g.merchant>> growls. "And you'd better not spill a drop."<br>
<<name $g.slave>>
<<if $g.slave.isHasTraitExact('training_toilet_basic')>>
swallows the stream dutifully, although <<their $g.slave>> eyes tear up as <<they $g.slave>> performs <<their $g.slave>> duties. You run your hand down the
<<if $g.merchant.isMale()>>
taut muscles
<<else>>
smooth and well-maintained skin
<</if>>
of <<name $g.merchant>>'s back, and <<they $g.merchant>> uses <<their $g.merchant>> free hand to draw you into a kiss.<br>
"I see you've been giving this pig some training," <<they $g.merchant>> says.
"You got a load for <<them $g.slave>> too?"<br>
You grin and nod, an run <<name $g.merchant>>'s back as <<they $g.merchant>> finishes draining <<their $g.merchant>> bladder.<br>
<<if $g.merchant.isHasDick()>>
"Better get me nice, hard and wet, slut," <<name $g.merchant>> tells the teary eyed slave. "Because the wetter my cock is the easier it's going to be on your ass."
<</if>>
<<elseif $g.slave.isHasTraitExact('training_toilet_advanced')>>
swallows the stream, drinking it down without a hint of complaint. You run your hand down the
<<if $g.merchant.isMale()>>
taut muscles
<<else>>
smooth and well-maintained skin
<</if>>
of <<name $g.merchant>>'s back, and <<they $g.merchant>> uses <<their $g.merchant>> free hand to draw you into a kiss.<br>
"I see you've been giving this pig some training," <<they $g.merchant>> says. "You got a load for <<them $g.merchant>> too?"<br>
You grin and nod, an run <<name $g.merchant>>'s back as <<they $g.merchant>> finishes draining <<their $g.merchant>> bladder.<br>
<<if $g.merchant.isHasDick()>>
"Better get me nice, hard and wet, slut," <<name $g.merchant>> tells the teary eyed slave. "Because the wetter my cock is the easier it's going to be on your ass."
<</if>>
<<elseif $g.slave.isHasTraitExact('training_toilet_master')>>
swallows the stream eagerly<<if $g.merchant.isHasDick()>>, straining at <<their $g.slave>> bonds to take more of <<name $g.merchant>>'s dick into <<their $g.slave>> mouth<</if>>.
You run your hand down the
<<if $g.merchant.isMale()>>
taut muscles
<<else>>
smooth and well-maintained skin
<</if>>
of <<name $g.merchant>>'s back, as <<they $g.merchant>> moans,
<<if $g.merchant.isHasDick()>>
one hand gripping <<name $g.slave>>'s skull and the other wrapping around your waist and pulling you in closer.
<<else>>
before pulling you in closer.
<</if>>
<p>
You slap <<name $g.slave>>'s face
<<if $unit.player.isHasDick()>>
with your cock
<</if>>
as you kiss <<name $g.merchant>>'s shoulder.<br>
"Good, isn't <<they $g.slave>>?"<br>
<<name $g.merchant>> looks down at the slave, who is
<<if $g.slave.isHasDick()>>
now nursing his cock to full hardness.
<<else>>
quite visibly wet from arousal.
<</if>>
<br>
"Amazing," <<they $g.merchant>> pants. "You got a load for <<them $g.slave>> too?"<br>
You nod and smile<<if $g.merchant.isHasDick()>> as <<name $g.merchant>> thrusts into <<name $g.slave>>'s lips, enjoying the hot wetness of <<their $g.slave>> mouth and throat.<<else>>.<</if>>
</p>
<<else>>
chokes and splutters as the acrid taste of urine fills <<their $g.slave>> mouth, causing it to cascade down over <<their $g.slave>> chin, chest and torso, also soaking into <<name $g.merchant>>'s groin and splattering onto <<their $g.merchant>> thighs.<br>
"You dirty pig, you'll pay for that," <<name $g.merchant>> growls, but you can see the delight in <<their $g.merchant>> eyes and the smile on <<their $g.merchant>> lips as <<they $g.merchant>> pulls you toward <<them $g.merchant>>, kissing you soundly as <<they $g.merchant>> continues to relieve <<themself $g.merchant>>.<br>
"You have a load for <<them $g.slave>> too?" <<they $g.merchant>> asks as <<they $g.merchant>> forces <<their $g.merchant>> still pissing
<<if $g.merchant.isHasDick()>>
cock back into <<name $g.slave>>'s throat.
<<else>>
ass into the gagged mouth.
<</if>>
"I said swallow bitch."<br>
You smile and nod as you watch <<them $g.merchant>>
<<if $g.merchant.isHasDick()>>
pull his fully erect cock from <<name $g.slave>>'s face and stalk around to the slave's rear.
<<else>>
pull up and stalk <<their $g.slave>> strap-on just around the slave's rear.
<</if>>
<</if>>
<p>
<<if $unit.player.isHasDick()>>
You slide your own cock into <<name $g.slave>>'s mouth.
"No biting,"
<<else>>
You position your own ass above <<reps $g.slave>>'s mouth.
"Don't spill a single drop,"
<</if>>
you remind <<them $g.slave>> sternly as you relax and let your piss start to flow.
<br>
<<name $g.slave>> stiffens as <<name $g.merchant>> kneels between <<their $g.slave>> thighs, shoving the slave's knees further apart on the bed as <<they $g.merchant>> spreads <<name $g.slave>>'s asscheeks and thwacks <<their $g.merchant>> spit covered
_mcock
against the slave's <<uanus $g.slave>>.<br>
"No, you concentrate on me," you say sternly, tapping <<name $g.slave>> on the forehead.
</p>
<<if $g.slave.isHasTraitExact('training_toilet_basic')>>
<<name $g.slave>> dutifully swallows your piss, tears running down <<their $g.slave>>
<<if $unit.player.isHasDick()>>
cheeks as you harden in <<their $g.slave>> mouth.
<<else>>
cheeks.
<</if>>
<<elseif $g.slave.isHasTraitExact('training_toilet_advanced')>>
<<name $g.slave>> swallows your piss as quickly as you release it, and grunts as you
<<if $unit.player.isHasDick()>>
finish, and then start fucking <<their $g.slave>> face slowly as your cock hardens in <<their $g.slave>> mouth.
<<else>>
finish.
<</if>>
<<elseif $g.slave.isHasTrait('training_toilet_master')>>
<<name $g.slave>> glares up at you pleadingly as you let slow and careful spurts of piss into <<their $g.slave>> mouth, working <<their $g.slave>> tongue on your
<<if $unit.player.isHasDick()>>
shaft
<<else>>
asshole
<</if>>
and begging you to give <<them $g.slave>> more to drink.
<<Their $g.slave>> eyes close in bliss when you finally let
<<if $unit.player.isHasDick()>>
go, and he continues sucking long after you finish, not seeming to care as your <<udick $g.pc>> stiffens in <<their $g.slave>> mouth.
<<else>>
go.
<</if>>
<<else>>
<<name $g.slave>> struggles to breathe as you hold <<them $g.slave>>
<<if $unit.player.isHasDick()>>
forcefully onto your cock,
<<else>>
forcefully,
<</if>>
hooking your fingers into <<their $g.slave>> mouth with your free <<uhand $unit.player>> to stop <<them $g.slave>> from
<<if $unit.player.isHasDick()>>
biting down on you
<<else>>
struggling
<</if>>
as you fill <<their $g.slave>> mouth with even more piss.
<<Their $g.slave>> chocking and sputtering is mixed with cries of pain as <<name $g.merchant>> starts unloading smacks on each of <<name $g.slave>>'s asscheeks in turn, keeping the slaps coming until it becomes clear that you've finished
<<if $unit.player.isHasDick()>>
pissing and start fucking <<name $g.slave>>'s face.
<<else>>
pissing.
<</if>>
<</if>>
<p>
<<name $g.slave>> screams as <<name $g.merchant>> shoves <<their $g.merchant>> <<udickorstrap $g.merchant>> into <<their $g.slave>> ass in one sudden, harsh movement, not giving <<name $g.slave>> any time to get used to it as <<they $g.merchant>> forcefully pulls out and pushes back in. Leaning forward, <<name $g.merchant>> rests <<their $g.merchant>> chest against <<name $g.slave>>'s back, resting <<their $g.merchant>> hands on the bed for extra leverage as <<they $g.merchant>> slams into the slave's ass, each thrust pushing <<them $g.merchant>> further onto your _ucock.
</p>
<<if $g.merchant.isHasDick() && $g.slave.isHasDick() && $unit.player.isHasDick()>>
Reaching down, you lift <<name $g.merchant>>'s head up so you can kiss <<them $g.merchant>> again.<br>
<<if $g.slave.isHasAnyTraitExact(["training_anal_advanced", "training_anal_master"])>>
"Want to really stretch this fucker out?" you ask.<br>
<<name $g.merchant>>'s eyes widen and <<they $g.merchant>> nods eagerly.<br>
You lie down on the bed next to them both and then you and <<name $g.merchant>> manoeuvre <<name $g.slave>> so <<they $g.slave>>'s kneeling over your body, <<their $g.slave>> ass lined up with your
_ucock.
He moans as <<name $g.merchant>> shoves him down onto you, and shudders as you hold him still, bent helplessly forward as <<name $g.merchant>> kneels up behind, and you feel the heat of <<name $g.merchant>>'s cockhead pushing up against the point where <<name $g.slave>>'s ass wraps snugly around your cock.
<p>
<<name $g.slave>> whimpers into your neck as <<name $g.merchant>>'s hard cock pushes into him, stretching him even further, and you feel your cock squeezed even tighter by his ass as <<name $g.merchant>> starts to fuck gently, his cock rubbing deliciously against yours as he does so.<br>
"So...fucking...good..." <<name $g.merchant>> groans as he starts thrusting harder, and you feel his cock twitch as he starts to cum, filling <<name $g.slave>>'s ass with even more hot, slick heat and setting off your own orgasm.
</p>
<<else>>
"Mmmm," he hums into your mouth, his kiss hard, passionate and somewhat frantic as his thrusts become faster, and then more erratic as he slams deep into <<name $g.slave>>'s ass, moaning into your mouth as he cums. The sight of <<name $g.merchant>>'s body twitching, every muscle taut and covered in a sheen of sweat, pushes you over the edge as you unload into <<name $g.slave>>'s mouth again, this time with a load of cum rather than piss.
<</if>>
<</if>>
When you finally untangle yourselves from the slave and kick <<them $g.slave>> down onto the floor, you
<<if $g.slave.isHasAnyTraitExact(["training_toilet_basic", "training_toilet_advanced", "training_toilet_master"])>>
curl up against each other, enjoying the post sex haze and the feeling of holding each other.
<<else>>
spend a few moments cuddled together before the wetness starts becoming clammy, driving you both to get up and take advantage of the cauldron of hot water you'd had delivered for exactly this purpose.
<</if>>
<br>
"You know," <<name $g.merchant>> says, "Maybe next time we can fill <<their $g.slave>> ass with piss before we fuck <<them $g.slave>>."<br>
<<if $g.slave.isHasAnyTraitExact(["per_submissive", "per_lunatic", "training_masochist_basic", "training_masochist_advanced", "training_masochist_master"])>>
You hear a squeak of dismay from <<name $g.slave>>, but when you look over, you can see <<they $g.slave>>
<<if $g.slave.isHasDick()>>
has a raging hard
<<else>>
is still flush with arousal
<</if>>
despite the punishment already dished out on <<them $g.slave>>.
<<else>>
You hear a sob from <<name $g.slave>>, but ignore it, focusing on cleaning up and getting dressed.
<</if>>
<p>
Before you exit the chamber, <<name $g.merchant>> pulls you into a long kiss.<br>
"That was great," <<they $g.merchant>> says quietly. "Oh, and if you train <<them $g.slave>> up into something I'd like, I'd be interested in buying <<them $g.slave>> off you."<br>
When you exit through the cell door back into view of <<their $g.merchant>> guards, <<their $g.merchant>> more distant manner is back, and <<they $g.merchant>> hands you a pouch of gold, gives you a formal 'thank you' and heads back out of your fort, riding back towards the city of Lucgate.
</p><<run new setup.OpportunityTemplate(
'flesh_shaper_temple_patronage', /* key */
"Flesh Shaper Temple: Patronage", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'transformation',
'vale',
'prep',
'trait',
'rare',
'veteran',
],
1, /* expiration weeks */
'Opportunity_flesh_shaper_temple_patronage',
setup.qdiff.harder40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_flesh_shaper_temple_patronage_0',
outcome_passage: 'Opportunity_flesh_shaper_temple_patronage_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SetCooldownOpportunity(null, 100),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_flesh_shaper_temple_patronage_1',
outcome_passage: 'Opportunity_flesh_shaper_temple_patronage_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('flesh_shaper_temple_patronage_attractiveness', null),
setup.qc.SetCooldownOpportunity(null, 100),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_flesh_shaper_temple_patronage_2',
outcome_passage: 'Opportunity_flesh_shaper_temple_patronage_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('flesh_shaper_temple_patronage_fearsomeness', null),
setup.qc.SetCooldownOpportunity(null, 100),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.OpportunityUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Building(setup.buildingtemplate.surgery),
],
{ /* actors */
'watermage': [
setup.qres.AnyTrait([setup.trait.magic_water, setup.trait.magic_water_master], true),
setup.qres.Job(setup.job.slaver),
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<dialogue $g.watermage>>
It doesn't happen often but sometimes one of the Flesh Shaper temples opens their doors and will help people change their bodies—for a price.
<</dialogue>>
<<if $g.watermage.isYou()>>
<<set _u = setup.getAnySlaver()>>
<p>
"Why can't we push flesh shaping further?" <<name _u>> asks. "I'm not complaining, or nothing, but the Flesh Shapers can do more, right?"<br>
You sigh <<uadv $unit.player>>. "Because there's delicate magical requirements for that sort of thing that cannot be achieved here in this fort," you say. "Basically, because magic."<br>
"Oh. Right."<br>
It wasn't much of a conversation, but it got you thinking, and you remember that every now and again, Flesh Shaper Temples will open up to those brave, rich, hardy and/or desperate enough to pay to have their features changed. They never provide extreme alterations, as those are considered sacred, but they could offer a few things that cannot be done at your own facilities. It would just cost a fair amount of coin, and given that more people are likely to show up than the cult is willing to offer services to, a bribe in the form of a suitable slave would allow you to jump the queue. As it happens, <<name _u>> had mentioned they'd heard rumours that one of the temples would be opening their doors soon, and this might provide you with an opportunity to hire their services. If you can afford it.
</p>
<<else>>
<p>
"Why can't we push flesh shaping further?" you asked. "I know it's possible.<br>
You were standing in the hallway, talking to one of your resident flesh shapers, <<rep $g.watermage>> outside the <<rep setup.buildingtemplate.biolab>>.<br>
<<name $g.watermage>> shrugs, "Because our fort won't handle that sort of magical stress, <<unickname $g.watermage>>."<br>
"What do you mean?<br>
"The fort's not set up for it. It's not built on a nexus of water magic we can tap into and there's structures and buildings you have here that interfere with more...delicate operations."<br>
"Any chance of a Flesh Shaper Temple going some body modifications for us?" you ask.<br>
"More than we can do ourselves?" <<name $g.watermage>> asks. "Maybe. They do open their doors every now and again..."
</p>
<p>
<<name $g.watermage>> goes on explain that occasionally, Flesh Shaper Temples will open up to those brave, rich, hardy and/or desperate enough to pay to have their features changed. They never provide extreme alterations, as those are considered sacred, but they could offer a few things that cannot be done at your own facilities. It would just cost a fair amount of coin, and given that more people are likely to show up than the cult is willing to offer services to, a bribe in the form of a suitable slave would allow you to jump the queue. As it happens, <<name $g.watermage>> mentioned one of the temples should be opening their doors soon, and this might provide you with an opportunity to hire their services. If you can afford it.
</p>
<</if>>
<p>
<<dangertext 'WARNING'>>: a face altered via flesh-shaping will never match
a natural one. Having a face altered this way will surely have a
<<dangertextlite 'permanent'>> negative effect on the unit.
</p>Ignore the opportunityWhatever the Flesh Shapers might do, it would take a lot of time, and that would be a few slavers gone for several weeks while they did that. No doubt hiring their services would also be costly, both in terms of coin, and, if you wanted to ensure they see your slavers rather than anyone else seeking their services, a bribe in the form of a suitable slave offering.Increase a slaver's attractivenesThere's only so much you can do with <<rep setup.buildingtemplate.surgery>> in the fort. Or the <<rep setup.buildingtemplate.biolab>> for that matter. The Flesh Shapers have abilities and mystical resources far beyond what you're able to provide, and you know they can make a plain or even disfigured person look if not beautiful, at least less scary. This is something that might be useful for someone in the company.Increase a slaver's fearsomenessThere's only so much you can do with <<rep setup.buildingtemplate.surgery>> in the fort. Or the <<rep setup.buildingtemplate.biolab>> for that matter. The Flesh Shapers have abilities and mystical resources far beyond what you're able to provide, and you know they can make a plain or even beautiful person look if not horrendous, at least more scary. This is something that might be useful for someone in the company.<<run new setup.OpportunityTemplate(
'visiting_the_injured', /* key */
"Visiting the Injured", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'fort',
'special',
'unknown',
],
1, /* expiration weeks */
'Opportunity_visiting_the_injured',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_visiting_the_injured_0',
outcome_passage: 'Opportunity_visiting_the_injured_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Player(setup.qres.AnyTrait([setup.trait.per_lustful, setup.trait.per_sexaddict], true)),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AnyTrait([setup.trait.per_chaste], true)),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('you', -50)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AllTraits([setup.trait.per_lustful], true)),
setup.qc.FriendshipWithYou('covalescent', 50),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AllTraits([setup.trait.per_sexaddict], true)),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 100)
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 30)
], undefined))
], undefined))
], undefined))
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 50)
], undefined)),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_1',
outcome_passage: 'Opportunity_visiting_the_injured_1_flavor',
costs: [ /* costs */
setup.qc.MoneyCustom(-5),
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Player(setup.qres.AnyTrait([setup.trait.per_kind, setup.trait.per_empath], true)),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('you', 100)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Player(setup.qres.AllTraits([setup.trait.per_cruel], true)),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AnyTrait([setup.trait.per_submissive], true)),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', -20),
setup.qc.BoonizeRandom('covalescent', 5)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AllTraits([setup.trait.per_masochistic], true)),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 100)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AnyTrait([setup.trait.per_dominant, setup.trait.per_stubborn], true)),
setup.qc.DoAll([
setup.qc.DoAll([
setup.qc.TraumatizeRandom('covalescent', 5)
], undefined),
setup.qc.FriendshipWithYou('you', -5)
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', -50)
], undefined))
], undefined))
], undefined))
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 50)
], undefined))
], undefined)),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_2',
outcome_passage: 'Opportunity_visiting_the_injured_2_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Player(setup.qres.SkillAtLeast(setup.skill.aid, 40)),
setup.qc.DoAll([
setup.qc.DoAll([
setup.qc.Heal('covalescent', 1)
], 0.2),
setup.qc.FriendshipWithYou('covalescent', 200)
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 50)
], undefined)),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_4',
outcome_passage: 'Opportunity_visiting_the_injured_4_flavor',
costs: [ /* costs */
setup.qc.MoneyCustom(-10),
],
restrictions: [ /* restrictions */
setup.qres.Building(setup.buildingtemplate.market),
setup.qres.Player(setup.qres.NoTraits([setup.trait.per_cruel, setup.trait.per_frugal], true)),
],
outcomes: [ /* outcomes */
setup.qc.FriendshipWithYou('you', 10),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_3',
outcome_passage: 'Opportunity_visiting_the_injured_3_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Or([
setup.qres.Actor('covalescent', setup.qres.YourLover()),
setup.qres.Player(setup.qres.NoTraits([setup.trait.per_chaste], true))
]),
],
outcomes: [ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.YourLover()),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 200)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AllTraits([setup.trait.per_chaste], true)),
setup.qc.DoAll([
], undefined),
setup.qc.DoAll([
setup.qc.FriendshipWithYou('covalescent', 100)
], undefined))
], undefined)),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_5',
outcome_passage: 'Opportunity_visiting_the_injured_5_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Player(setup.qres.AnyTrait([setup.trait.per_cruel, setup.trait.per_dominant, setup.trait.per_lustful, setup.trait.per_sexaddict], true)),
setup.qres.Player(setup.qres.NoTraits([setup.trait.per_submissive, setup.trait.per_chaste, setup.trait.per_kind], true)),
],
outcomes: [ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AllTraits([setup.trait.per_chaste], true)),
setup.qc.MissingUnitForever('covalescent'),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('covalescent', setup.qres.AnyTrait([setup.trait.per_lustful, setup.trait.per_sexaddict, setup.trait.per_submissive, setup.trait.per_masochistic], true)),
setup.qc.DoAll([
setup.qc.BoonizeRandom('covalescent', 5),
setup.qc.FriendshipWithYou('you', 200)
], undefined),
setup.qc.DoAll([
setup.qc.BoonizeRandom('you', 5),
setup.qc.FriendshipWithYou('covalescent', -500)
], undefined))
], undefined)),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_visiting_the_injured_6',
outcome_passage: 'Opportunity_visiting_the_injured_6_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.hospital),
],
{ /* actors */
'you': [
setup.qres.You(),
setup.qres.Home(),
],
'covalescent': [
setup.qres.Job(setup.job.slaver),
setup.qres.IsInjured(1),
setup.qres.Home(),
setup.qres.HasTag('Convalescing'),
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>It's been a surprisingly slow week at <<rep $company.player>> and you find
yourself wandering the Fortress. It's come a long way from the ruin you first
came across. In your mind's eye you can still see the scorch marks on the
cracked pavers where you built your first fire, and the nook over there were you
set your bedroll and.... </p>
<p>Well. Memories.</p>
<p>
<<if $g.you.getLover() == $g.covalescent>>
Passing your hospital reminds you that your lover <<name $g.covalescent>> is currently recovering there,
and you caught
<<else>>
Passing the hospital you glance in and see <<name $g.covalescent>>,
<</if>>
a grimace of pain on <<their $g.covalescent>> face as <<they $g.covalescent>> stare moodily out the window. Being injured is a bitch. Well, you have some time.
</p>
<p>Entering the hospital, you head over to <<reps $g.covalescent>> bed and pull the privacy drapes out to, well, give you both a bit of privacy.<br><br>
<<if $g.covalescent.isHasTrait('per_submissive')>>
<<rep $g.covalescent>> looks up as you approach. "Hello Boss."
<<else>>
<<rep $g.covalescent>> looks up as you approach. "Hi <<name $g.you>>."
<</if>>
</p>
<p>What do you decide to do?</p>Spend some time with <<them $g.covalescent>><p>"I just came to talk," you say with a grin. "Take your mind off everything."<br><br>
"Great," <<rep $g.covalescent>> says. "I could use a distraction.</p>
<p>
<<if $unit.player.getSpeech() == setup.speech.friendly>>
You spend some time in idle banter, and get to know each other better as a result.
<<elseif $unit.player.getSpeech() == setup.speech.bold>>
You spend a few hours regaling <<rep $g.covalescent>> with tales of <<uhomeland $g.you>>.
<<elseif $unit.player.getSpeech() == setup.speech.cool>>
Since you have a captive audience, so to speak, you spend some time boasting of your recent exploits.
<<elseif $unit.player.getSpeech() == setup.speech.witty>>
You catch <<rep $g.covalescent>> up with the latest gossip and happenings since they've been sick, picking the most outrageous tales you can think of and exaggerating them for comic effect. Before long your stomachs remind you that you both need food and when you glance out the window the sun has begun to set.
<<elseif $unit.player.getSpeech() == setup.speech.debauched>>
You spend some time telling <<rep $g.covalescent>> some of your more ribald exploits. It's not exactly that you mean to, but it is probably your favourite topic. <<if $g.covalescent.isHasTrait('per_chaste')>>
Before long it becomes clear that <<rep $g.covalescent>> isn't really comfortable talking about sex so openly, and you make your excuses and leave.
<<elseif $g.covalescent.isHasTrait('per_sexaddict')>>
<<rep $g.covalescent>> eggs you on, and it soon goes from storytelling to explicit masturbation instructions that make a mess of their bedding.<br><br>
"That was exactly what I needed," <<rep $g.covalescent>> says with a contented smile. "We should do that more often."<br><br>
"Maybe when you're back on your feet," you say, rising to your own, <<if $g.you.isHasDick()>>
trying to ignore the stiffness in your pants and the smell of cum filling the area.
<<else>>
trying to ignore the ache in your pussy and the smell of cum filling the area.
<</if>>
<br><br>
"I'll hold you to that."<br><br>
<<if $g.you.isHasTrait('per_cruel')>>
Smiling, you leave the room. Best to keep them hungry for more.
<<else>>
You lean down and give <<rep $g.covalescent>> a long, lingering kiss.<br><br> "I look forward to it.
<</if>>
<<elseif $g.covalescent.isHasTrait('per_lustful')>>
<<rep $g.covalescent>> enjoys your stories and shares some of their own with you. When you finally leave, you find yourself thinking about finding a partner to relieve your pent up arousal. That said. This is <<rep $company.player>>. You've got options.
<<else>>
<<rep $g.covalescent>> asks you a fair few questions about escapades. If nothing else, they're used to how you speak by now.
<</if>>
<</if>>
</p>Bring <<them $g.covalescent>> food<p>"Hi <<rep $g.covalescent>>. I thought you could use some food."<br><br>
<<if $g.you.isHasTrait('per_empath')>>
<<rep $g.covalescent>> looks at the bowl in your hands. "That's my favourite! How did you know?"<br><br>
You shrug. "You're my crew. It's my job to know."<br><br>
<<rep $g.covalescent>> smiles broadly and reaches for the bowl. "Thank you so much. You are the best boss ever."<br><br>
"I try to be," you say with a smile as you take a seat next to their bed.<br><br>
<p>You spend an hour or so just talking in general before you take your leave, bringing the bowl and spoon with you.</p>
<<elseif $g.you.isHasTrait('per_kind')>>
<<rep $g.covalescent>> looks at the bowl in your hands. "That's my favourite! How did you know?"<br><br>
You shrug. "You're my crew. It's my job to know."<br><br>
<<rep $g.covalescent>> smiles broadly and reaches for the bowl. "Thank you so much. You are the best boss ever."<br><br>
"I try to be," you say with a smile as you take a seat next to their bed.
<p>You spend an hour or so just talking in general before you take your leave, bringing the bowl and spoon with you.</p>
<<elseif $g.you.isHasTrait('per_cruel')>>
<<rep $g.covalescent>> looks at the bowl and their face pales as you try to suppress a grin. It's nourishing, absolutely, but it's heavily laced with the red chillis from across the seas. An acquired taste and one that you love, but <<rep $g.covalescent>> is known for not being great with the spice. "Burns twice" as the joke goes.<br><br>
<<if $g.covalescent.isHasTrait('per_submissive')>>
<<rep $g.covalescent>> meets your gaze for a moment and then drops their eyes.<br><br>
"Yes boss," <<they $g.covalescent>> say, opening their mouth.<br><br>
With two injured arms, they accept you spooning the curry into them and swallow without complaint, even as sweat starts to dot their brow. You almost consider letting them have some milk, or yoghurt to help with the heat but then, maybe this will incentivise them to not get injured in the future.
<<elseif $g.covalescent.isHasTrait('per_masochistic')>>
<<rep $g.covalescent>> meets your gaze for a moment and then drops their eyes, and for a moment you see the ghost of a smile on their face.<br><br>
"Yes <<mistress $g.you>>," <<they $g.covalescent>> say, opening their mouth.<br><br>
With two injured arms, they accept you spooning the curry into them and swallow without complaint, even as sweat starts to dot their brow. You almost consider letting them have some milk, or yoghurt to help with the heat but then, why take away that delicious pain you know they crave?
<<elseif $g.covalescent.isHasTrait('per_dominant')>>
<<name $g.covalescent>> shakes their head firmly.<br><br>
"I'm not eating that. You know I'm not good with chilli at the best of times, and I'm not going to suffer through that while I'm hurt."<br><br>
<<if $g.you.isHasTrait('per_submissive')>>
"Fine," you say turning around to leave. "I'll have someone send something else up to you."<br><br>
Honestly, sometimes you wonder why you even try.
<<elseif $g.you.isHasTrait('per_dominant')>>
You smile your best smile at them. You're proud of your smile. It's the one that makes all the slaves cower when it's turned on them. "That's fair," you say. "And it's not like I can force you."<br><br>
You see the realisation in <<Reps $g.covalescent>> eyes as it hits <<them $g.covalescent>>, and the way they try not to glance down at their injured arms—both injured arms—is really adorable.<br><br>
"Oh wait," you say. "I can."<br><br>
Placing the bowl of curry on the bedside table you reach out and grab their nose. "Open," you say firmly.
<p>Eventually the need to breathe forces them to comply, and you spoon in a mouthful of the extra spicy curry, and then use your spare hand to force their jaw closed.<br><br>
"Swallow."<br><br>
It's a fight to the last mouthful, but they've eventually eaten the entire bowl.<br><br>
"Good <<girl $g.covalescent>>," you say, patting their head gently. "Now next time you're in the field, remember this and do try harder to avoid careless injuries, hmm?"<br><br>
You hear <<rep $g.covalescent>> cursing under <<their $g.covalescent>> breath as you leave, bowl in hand.<br><br>
"What was that?" you call back over your shoulder.<br><br>
"...yes, Boss."</p>
<<else>>
You shrug and place the bowl down on the bedside table.<br><br>
"That's up to you, but this is your food. You won't be getting anything else today. Maybe think about that next time you're out in the field and try a bit harder to avoid careless injuries."
<p>Turning on your heel, you leave the room. Plenty of other things to get on with today, even if you don't know exactly what they are yet.</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_stubborn')>>
<<name $g.covalescent>> shakes their head firmly.<br><br>
"I'm not eating that. You know I'm not good with chilli at the best of times, and I'm not going to suffer through that while I'm hurt."<br><br>
<<if $g.you.isHasTrait('per_submissive')>>
"Fine," you say turning around to leave. "I'll have someone send something else up to you."<br><br>
Honestly, sometimes you wonder why you even try.
<<elseif $g.you.isHasTrait('per_dominant')>>
You smile your best smile at them. You're proud of your smile. It's the one that makes all the slaves cower when it's turned on them. "That's fair," you say. "And it's not like I can force you."<br><br>
You see the realisation in <<Reps $g.covalescent>> eyes as it hits <<them $g.covalescent>>, and the way they try not to glance down at their injured arms—both injured arms—is really adorable.<br><br>
"Oh wait," you say. "I can."<br><br>
Placing the bowl of curry on the bedside table you reach out and grab their nose. "Open," you say firmly.
<p>Eventually the need to breathe forces them to comply, and you spoon in a mouthful of the extra spicy curry, and then use your spare hand to force their jaw closed.<br><br>
"Swallow."<br><br>
It's a fight to the last mouthful, but they've eventually eaten the entire bowl.<br><br>
"Good <<girl $g.covalescent>>," you say, patting their head gently. "Now next time you're in the field, remember this and do try harder to avoid careless injuries, hmm?"<br><br>
You hear <<rep $g.covalescent>> cursing under <<their $g.covalescent>> breath as you leave, bowl in hand.<br><br>
"What was that?" you call back over your shoulder.<br><br>
"...yes, Boss."</p>
<<else>>
You shrug and place the bowl down on the bedside table.<br><br>
"That's up to you, but this is your food. You won't be getting anything else today. Maybe think about that next time you're out in the field and try a bit harder to avoid careless injuries."
<p>Turning on your heel, you leave the room. Plenty of other things to get on with today, even if you don't know exactly what they are yet.</p>
<</if>>
<<else>>
"Really?" <<rep $g.covalescent>> looks up at you in resignation. "You're punishing me for getting hurt?"<br><br>
"For getting unnecessarily hurt, yes," you say firmly. "Next time you might not come back—or someone else might not come back. Anyway, it's what we're having tonight and you're not getting special treatment just because you fucked up.
<p>You place the bowl down on the table and head out of the hospital. Hopefully they'll do better out there next time."</p>
<</if>>
<<else>>
"Thanks, smells good. What is it?"<br><br>
"Rabbit, bacon and potato stew," you say as you hand the bowl to them. "Nothing fancy, but it'll fill you up."<br><br>
You spend some time talking with them once they've finished their food, but they tire quickly, and you leave them to sleep as you head back out into the fort once more.
<</if>>
</p>Tend <<their $g.covalescent>> wounds<p>There comes a point where time is the only thing that can heal fully, but you have some knowledge of ways to help the body along, or at the very least, ease some of the pain.<br><br>
"Hello <<rep $g.covalescent>>, you say. Just here to check on your injuries."<br><br>
<<if $g.you.getSkill(setup.skill.aid) >= 40>>
You're fairly confident in your ability with medicine and cures, and you decide to attempt a healing poultice in addition to a painkiller. The downside of course, is the smell.<br><br>
"Gods, that's rank," <<rep $g.covalescent>> says as you slather the sticky mixture onto a bandage.<br><br>
"That's the idea," you say lightly. "If it smelled nice then you might decide you want to stay here longer than you need to."<br><br>
<<rep $g.covalescent>> sighs. "Look, as long as it stops the itching I'm good."<br><br>
"It will help," you promise. "But some itching is inevitable. It's art of healing."<br><br>
"So you keep telling me," <<rep $g.covalescent>> says, grimacing as you wrap the bandage over their injury. "Fuck that's cold."<br><br>
"It'll warm," you say firmly. "I thought you were a tough slaver."<br><br>
"Boss with all due respect... fuck you."<br><br>
You chuckle as you tie off the bandage and start cleaning up. Hopefully you got this one right.
<<else>>
You're not confident in your knowledge of herbs to really do much more than make their time in the hospital a bit more pleasant, so you mix up a salve to help numb the pain they're in—and smell pleasant while you're at it. <<rep $g.covalescent>> sighs in relief as you apply it to their body.<br><br>
"Thanks, <<name $unit.player>>, that feels great."<br><br>
"You're welcome," you say. "Just rub it on whenever you feel you need it."<br><br>
<<name $g.covalescent>> nods agreeably. "I will."
<p>You spend a bit of time talking about the company and your goals and dreams, but <<rep $g.covalescent>> tires quickly and is soon nodding off. Smiling, you put away the rest of the herbs and supplies and head back out into the fort.</p>
<</if>>
</p>Give <<them $g.covalescent>> some...reliefYou pause to look at <<them $g.covalescent>>, lying there on the bed, both arms splinted and strapped. They have to rely on someone else for just about everything—eating, bathing, getting to the outhouse, or more often than not, chamber pot. Looking down over their <<utorso $g.covalescent>> and crotch you wonder if anyone's been helping with any other source of tension.<br><br>
"Uh, boss, why are you looking at me like that?"<br><br>
You smile and reach for their <<uequipslot $g.covalescent 'legs'>>. "It's been hard enough for you here. I thought I'd help ease some of your tension."<br><br>
<<if $unit.player.getLover() == $g.covalescent>>
<<rep $g.covalescent>> smiles up at you. "As if I'd turn you down, lover. I've been pent up for days."<br><br>
You chuckle as you remove their <<uequipslot $g.covalescent 'legs'>> and
undergarments, revealing the familiar
<<if $g.covalescent.isHasDick()>>
sight of <<their $g.covalescent>> rapidly
stiffening cock. The smell of male musk hits
<<else>>
smell of <<their $g.covalescent>> rapidly increasing arousal.
The smell hits
<</if>>
your nostrils and you can feel
<<if $unit.player.isHasDick()>>
yourself hardening in response.
<<else>>
yourself getting moist down below.
<</if>>
<p>
<<if !$g.covalescent.isHasDick()>>
Looking up into <<reps $g.covalescent>>'s eyes you lower your head to <<their
$g.covalescent>> pussy and eat <<them $g.covalescent>> with <<their
$g.covalescent>> mouth, running your tongue inside the <<them
$g.covalescent>> and exploring the sensitive area that always sets <<them $g.covalescent>> off.<br><br>
"Fuck, <<name $unit.player>> I'm gonna-"
<<their $g.covalescent>> body shudders in response as they climax in ecstacy.
<<else>>
Looking up into <<reps $g.covalescent>>'s eyes you lower your head to <<their
$g.covalescent>> groin and take <<them $g.covalescent>> into <<their
$g.covalescent>> mouth, running your tongue into the spot beneath <<their
$g.covalescent>> cockhead that always sets <<them $g.covalescent>> off.<br><br>
"Fuck, <<name $unit.player>> I'm gonna-" <<their $g.covalescent>> cock swells in
your mouth and you feel <<them $g.covalescent>> shoot, sweet, salty and bitter
all at once filling your mouth and coating your tongue as you swallow rapidly,
some of it spilling out down the sides of <<their $g.covalescent>> cock despite
your best efforts.
<</if>>
</p>
"That was quick," you say, pulling back with your mouth as you
<<if $g.covalescent.isHasDick()>>
stroke <<their $g.covalescent>> still hard cock.
<<else>>
withdraw your tongue.
<</if>>
<br><br>
"Sorry love," <<they $g.covalescent>> says sheepishly. "Like I said, I've been a bit pent up."
<br><br>
<<if $g.covalescent.isHasDick()>>
<p>
"Well," you say as you let go of <<their $g.covalescent>> cock and remove your own <<uequipslot $unit.player 'legs'>>. "You're still hard. Why don't we take care of that?"</p>
<p><<rep $g.covalescent>> smiles as you climb up onto the bed, and lower yourself down, <<their $g.covalescent>> hard cock slipping into your
<<if $unit.player.isHasDick()>>
<<uanus $unit.player>>.
<<else>>
<<uvagina $unit.player>>.
<</if>>
A sigh of pleasure escapes you as <<they $g.covalescent>> fills you, and stares up at you, <<their $g.covalescent>> face a mixture of lust, love and frustration.
</p>
"What's wrong?" you ask, as you rest your hands on <<their $g.covalescent>> chest, absently toying with <<their $g.covalescent>> nipples just because you can.<br><br>
"Kiss me?" <<they $g.covalescent>> asks. "Please?"<br><br>
You smile as you meet <<their $g.covalescent>> lips with yours and slowly start
to ride <<them $g.covalescent>>. Given <<their $g.covalescent>> condition,
you're going to be doing most of the work, but that's okay. At least this
time.
<<else>>
<p>
You say nothing but
smile at <<them $g.covalescent>>, before slowly meeting your lips with <<theirs $g.covalescent>>,
hospital rules be damned.
</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_chaste')>>
<<rep $g.covalescent>> moves <<their $g.covalescent>> crotch away from your hands. "Thanks, but I'm okay. I'm not really...you know. I appreciate the offer and all, but if you're looking for fun maybe go use one of the slaves?"
<p>It takes you a moment to remember that <<rep $g.covalescent>> tends not to care for casual sex.<br><br>
"Sure," you say, pulling your hand back. "Sorry."<br><br>
"It's fine boss. I'm sure some of the others would have really appreciated it.</p>
<<else>>
<<rep $g.covalescent>> looks up at you in surprise. "Really? You mean it? Fuck yes! I've been pent up for days."<br><br>
You chuckle as you remove their <<uequipslot $g.covalescent 'legs'>> and undergarments, revealing
<<their $g.covalescent>>
<<if $g.covalescent.isHasDick()>>
<<udick $g.covalescent>>, dark and throbbing with excitement.
The smell of male musk hits
<<else>>
<<uvagina $g.covalescent>>, wet with excitement.
The smell of female arousal hits
<</if>>
your nostrils and you can feel
<<if $unit.player.isHasDick()>>
yourself hardening in response.
<<else>>
yourself getting moist down below.
<</if>>
<<if !$g.covalescent.isHasDick()>>
<p>Looking up into <<reps $g.covalescent>>'s eyes you lower your head to <<their
$g.covalescent>> pussy and eat <<them $g.covalescent>> with <<their
$g.covalescent>> mouth, running your tongue inside the <<them
$g.covalescent>> and exploring the sensitive area hidden within.<br><br>
Given how horny <<they $g.covalescent>> is, it doesn't take long for <<them $g.covalescent>> to
lose control as you feel <<their $g.covalescent>> body tense as
<<they $g.covalescent>> gets closer to closer to release.<br><br>
"Fuck, <<name $unit.player>> I'm gonna-"
<<their $g.covalescent>> body shudders in response as they climax in ecstacy.
</p>
<<else>>
<p>Looking up into <<reps $g.covalescent>>'s eyes you lower your head to <<their
$g.covalescent>> groin and take <<them $g.covalescent>> into <<their
$g.covalescent>> mouth, using your tongue to tease <<their $g.covalescent>>
cockhead and suck as <<their $g.covalescent>> precum starts flowing, sweet and
tasty.<br><br>
Given how horny <<they $g.covalescent>> is, it doesn't take long for <<them $g.covalescent>> to stuck pushing up towards your face and soon you feel <<their $g.covalescent>> body tense and <<their $g.covalescent>> balls contract.<br><br>
"Fuck, <<name $unit.player>> I'm gonna-" <<their $g.covalescent>> cock swells in
your mouth and you feel <<them $g.covalescent>> shoot, sweet, salty and bitter
all at once filling your mouth and coating your tongue as you swallow rapidly,
some of it spilling out down the sides of <<their $g.covalescent>> cock despite
your best efforts.
</p>
<</if>>
"Oh gods, I needed that," <<they $g.covalescent>> says when <<their
$g.covalescent>> breathing returns to normal.<br><br>
You chuckle and wipe your mouth with the back of your hand.
"Glad I could
help."<br><br>
"Guess I owe you a favour next time you get injured," <<rep $g.covalescent>>
says, gazing up at you.<br><br>
"Or I might just collect that when you're back on your feet," you say with a
smirk. "Why wait?"<br><br>
<<rep $g.covalescent>> chuckles. "Why indeed. Well, still. Thanks."
<</if>>Bring <<them $g.covalescent>> a gift"I figured you'd be bored, so I picked up something at the market for you."<br><br>
"You did? Wow, thanks
<<if $g.covalescent.isHasTrait('per_submissive')>>
Boss!
<<else>>
<<name $unit.player>>!
<</if>>
What is it?"<br><br>
Pulling your hand out from behind your back you show them
<<if $g.covalescent.isHasTrait('per_slow')>>
a clockwork toy. Turning the key in the back you wind it up and place it down on the bedside table where it whirs and clanks as it 'walks' across the surface, and promptly walks off the edge into your waiting hands.<br><br>
"Pretty cool, right?"<br><br>
"That's amazing!" <<rep $g.covalescent>> says, <<their $g.covalescent>> eyes wide. "How does it do that?"<br><br>
"Clockwork or something. I'm told it's definitely not magic."<br><br>
<<rep $g.covalescent>> shrugs. "Might as well be to me. Thank you."<br><br>
You smile and hand over the toy. "You're welcome. And get well soon yeah?"<br><br>
"Sure. I'll get better sooner if you give me one of those healing potions."<br><br>
You chuckle. "We'll see," you say, waving jauntily as you leave the room and head back to the rest of your day.
<<else>>
a book of adventure stories. Books are rare and hard to come by, but one of the city traders sometimes brings some second hand books with her when she visits the fort. It cost a pretty penny, but you know it'll make its way around the fort.<br><br>
"Brand new to us. No one else has read it yet. Not even me."<br><br>
<<Reps $g.covalescent>> eye's widen. "Really? Wow, thanks!"<br><br>
"You're welcome," you say as you hand the book over. "I hope it helps pass the time. But get well soon yeah?"<br><br>
"Sure. I'll get better sooner if you give me one of those healing potions."<br><br>
You chuckle. "We'll see," you say, waving jauntily as you leave the room and head back to the rest of your day.
<</if>>Take advantage of <<their $g.covalescent>> helpless stateYou pause to look at <<them $g.covalescent>>, lying there on the bed, both arms splinted and strapped. <<They $g.covalescent>> has to rely on someone else for just about everything—eating, bathing, getting to the outhouse, or more often than not, chamber pot. Looking down over <<they $g.covalescent>> <<utorso $g.covalescent>> crotch and butt you have the urge to take <<them $g.covalescent>>. It's not like <<they $g.covalescent>> could stop you. Of course, you have slaves, but slaves are...easy. And always available. A slaver like <<rep $g.covalescent>> on the other hand...<br><br>
"Uh, boss, why are you looking at me like that?"<br><br>
You grin as you move forward and raise your hand, revealing the ball gag you were hiding behind your back. "Because you and me are going to have some fun," you say calmly. "After all, you're just lying here...not doing anything or really being able to move much or work. Might as well get some use out of you."<br><br>
You have the ball gag in their mouth and secured around their head before they can raise much of a protest,
<<if $unit.player.getLover() == $g.covalescent>>
but you see <<them $g.covalescent>> smile around the gag as they relax onto the bed, ready for whatever game you have in store for <<them $g.covalescent>> today.<br><br>
Reaching forward you ease <<theirs $g.covalescent>> <<uequipslot $g.covalescent 'legs'>> and underwear down of <<theirs $g.covalescent>> body, helping <<them $g.covalescent>> raise up to get the clothing out from beneath <<theirs $g.covalescent>> hips.
<<if $g.covalescent.isHasDick()>>
<<reps $g.covalescent>> cock flicks up as you bare <<their $g.covalescent>> crotch, the hard length hitting <<their $g.covalescent>> belly with an audible slap.
<<else>>
<<reps $g.covalescent>> pussy glistens as you pull off her panties.
<</if>>
<br><br>
"I love it when you're so
<<if $g.covalescent.isHasDick()>>
hard
<<else>>
wet
<</if>>
for me," you say with a grin as you step around towards the window, letting the sunlight strike you from behind.<br><br>
<<reps $g.covalescent>> eyes follow your every move as you slowly draw your <<uequipslot $unit.player 'torso'>> over your head, revealing your <<ubreasts $g.you>> before tossing it aside.<br><br>
"Hey, babe, my eyes are up here," you say, earning a snort of laughter not quite muffled by the gag.<br><br>
Raising your head you run your hands down the length of your neck, over your <<ubreasts $g.you>>, lingering over your abs before reaching your hips. When you finally look at them their eyes are glued to your crotch, and you slip one hand inside your <<uequipslot $unit.player 'legs'>> to
<<if $g.you.isHasDick()>>
stroke your cock.
<<else>>
rub your pussy.
<</if>>
<br><br>
"Want me to keep going?" you ask softly.<br><br>
<<Reps $g.covalescent>> eyes snap back to meet yours and <<they $g.covalescent>> nods eagerly.<br><br>
"Eees" they say, trying to force the word past the gag.<br><br>
"Please...what?"<br><br>
<<if $g.covalescent.isHasTrait('per_submissive')>>
<<rep $g.covalescent>> whimpers. "Eees
<<if $unit.player.isHasTrait('gender_male')>>
Aataa,"
<<else>>
"Issess,"
<</if>>
<<they $g.covalescent>> manages around the gag.<<else>>
<<rep $g.covalescent>> rolls <<their $g.covalescent>> eyes. "Eees
<<if $unit.player.isHasTrait('gender_male')>>
Aataa,"
<<else>>
"Issess,"
<</if>>
<<they $g.covalescent>> manages around the gag. Well, that's probably as good as you're going to get.
<</if>>
<p>Smiling, you sway your hips <<if $g.you.isHasTrait('tough_nimble')>> seductively in time to a slow imaginary beat
<<else>>
in an approximation of the entertainment slaves
<</if>>
as you work your <<uequipslot $unit.player 'legs'>> lower a bit at a time, getting closer and closer to your <<ugenital $g.you>>. Before you get there you turn around, and push the waistband down over your ass instead, bending forward to give <<rep $g.covalescent>> a good view as you push your <<uequipslot $unit.player 'legs'>> and undergarments down off your legs.</p>
<<if $g.you.isHasDick()>>
Turning around your present your hard cock to <<their $g.covalescent>> hungry gaze, letting <<them $g.covalescent>> soak in your body for just long enough.<br><br>
<<if $g.covalescent.isHasDick()>>
Stalking to the foot of the bed you climb onto it, pushing <<reps $g.covalescent>> legs up until they're resting on <<their $g.covalescent>> shoulders, and revealing <<their $g.covalescent>> <<uhole $g.covalescent>> to your lustful gaze. You press the head of your cock up against <<their $g.covalescent>> entrance. Not hard enough to enter, but enough to rub, excite and just start to maybe slip in by accident. Reaching forward you rub <<their $g.covalescent>> chest with your left hand, teasing <<their $g.covalescent>> nipples as your right hand gently grasps <<their $g.covalescent>> cock, and starts gently stroking, working the precum dripping from <<their $g.covalescent>> penis over <<their $g.covalescent>> shaft.
<p><<rep $g.covalescent>> is torn between pushing into your hand or back onto your cock, and you're forced to hold <<their $g.covalescent>> hips down. Just to keep <<them $g.covalescent>> from hurting <<themself $g.covalescent>> of course. A frustrated
<<if $g.covalescent.isHasTrait('per_submissive')>>
moan
<<else>>
growl
<</if>>
leaves <<their $g.covalescent>> throat as you tease <<them $g.covalescent>>.<br><br>
"You know you're not supposed to be moving, right?" you say. "So today, I'm setting the pace, and we're going slow... very slow... achingly...slow...." You punctuate each word with a long, languid stroke of <<reps $g.covalescent>> cock. "And there's....nothing...you can do about it. Isn't that going to be fun?"<br><br>
<<rep $g.covalescent>> looks at you with pleading eyes, words obviously failing <<them $g.covalescent>> right now.<br><br>
"What?" you say. "I can't fuck you yet. You're far too dry. Know what I'm going to use to lube you up?"<br><br>
"Mmm?"<br><br>
"That's right, your precum," you say with a
<<if $g.you.isHasTrait('race_lizardkin')>>
toothy grin.
<<elseif $g.you.isHasTrait('race_greenskin')>>
toothy grin.
<<elseif $g.you.isHasTrait('race_wolfkin')>>
toothy grin.
<<elseif $g.you.isHasTrait('subrace_tigerkin')>>
toothy grin.
<<elseif $g.you.isHasTrait('race_demon')>>
devilish grin.
<<else>>
grin.
<</if>>
"So be a good boy and coat my fingers, because that's all your going to get."<br><br>
A strangled cry rips from <<reps $g.covalescent>> throat as <<they $g.covalescent>> pumps rapidly into your fist, your words taking <<them $g.covalescent>> over the brink as <<they $g.covalescent>> shoots <<their $g.covalescent>> load all over <<their $g.covalescent>> body—and your hand.<br><br>
"Well that's just rude," you say as you rub your hand through the mess on <<their $g.covalescent>> torso. "You know what this means, right?"<br><br>
<<rep $g.covalescent>> pauses, unsure of which answer is better right at this moment. Finally, <<they $g.covalescent>> shakes <<their $g.covalescent>> head 'no', <<their $g.covalescent>> face flushed and chest still heaving from orgasm.<br><br>
"It means, I'm going to have to fuck you anyway until I cum... and you won't have the benefit of being really horny when I do..."</p>
<p><<rep $g.covalescent>>moans as you slick your cock up with <<their $g.covalescent>> cum and then work the rest of <<their $g.covalescent>> load into <<their $g.covalescent>> ass with your fingers. It's a game you both enjoy, and <<they $g.covalescent>> knows <<they $g.covalescent>> can take you. The fact that <<they $g.covalescent>>'s not in any position to stop you physically just adds to the experience.</p>
<p>When <<they $g.covalescent>>'s sufficiently lubed—or at least as sufficiently lubed as <<they $g.covalescent>>'s going to get before <<their $g.covalescent>> cum starts drying on you—you line yourself up with <<their $g.covalescent>> hole and nudge gently, signaling your intentions.<br><br>
"Now
<<if $g.covalescent.isHasTrait('subrace_werewolf')>>
puppy,
<<elseif $g.covalescent.isHasTrait('race_catkin')>>
kitty,
<<else>>
babe,
<</if>>
go ahead and scream for me," you say as you push home, your cock meeting only slight resistance as you push into <<their $g.covalescent>> delicious and familiar heat, feeling <<them $g.covalescent>> open up and welcome you into <<them $g.covalescent>>, even as <<they $g.covalescent>> groans at the intrusion.</p>
<p>
When you're both finally spent, <<rep $g.covalescent>> is a cumsoaked mess and you're little better, barely managing to fall to one side, rather than on top of <<them $g.covalescent>>. Reaching up you gently remove the gag and give <<them $g.covalescent>> a deep kiss.<br><br>
"I love you," you whisper as you drop the ball gag off the side of the bed.<br><br>
<<They $g.covalescent>> licks <<their $g.covalescent>> lips and swallows a few times, getting <<their $g.covalescent>> mouth back in working order before replying. "I love you too, <<name $unit.player>>."<br><br>
You are tempted to just lie there with <<them $g.covalescent>>, hoping that you can find a snuggle position that doesn't put pressure on <<their $g.covalescent>> arms, but instead, you sigh and push yourself up onto your elbows.<br><br>
"I should probably find something to clean up with. This place reeks of sex now."<br><br>
<<rep $g.covalescent>> snorts. "We've been at it for ages, love. The entire fort knows what we've been up to. Just come here."<br><br>
And so you do.</p>
<<else>>
<p>Stalking to the foot of the bed you climb onto it, pushing <<reps $g.covalescent>> legs apart and lowering yourself between them until the tip of your cock rests at the entrance of her pussy. You both moan as you slip into her and lean forward for a kiss.</p>
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<<else>>
Turning around your present your dripping pussy to <<their $g.covalescent>> hungry gaze, letting <<them $g.covalescent>> soak in your body for just long enough.
<<if $g.covalescent.isHasDick()>>
Climbing onto the bed, you straddle <<their $g.covalescent>> body and grip <<their $g.covalescent>> cock, sliding it into you in one smooth motion.
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<<else>>
Climbing onto the bed you swing your body around so that she can reach you with her mouth, and her inviting snatch is right by your face. It takes a moment for you to find a position that doesn't put pressure on her arms, but the pleasure as her lips find your pussy is worth everything.
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_chaste')>>
but you can see a rising panic in their eyes as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> starts to shake <<their $g.covalescent>> head, their eyes begging you not to do this, but you're high on the power trip, and after spitting on
<<if $g.covalescent.isHasDick()>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
and <<their $g.covalescent>> hole, you bury yourself in <<their $g.covalescent>> ass, <<their $g.covalescent>> cries and sobs muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell <<them $g.covalescent>>. "Take it like a <<man $g.covalescent>>. And hey, we've got all day..."
<p>
When it's all over, you leave <<rep $g.covalescent>> a huddles mess in the their bed, refusing to look at you. Oh well. They'll get over it. Won't they?</p>
<<else>>
your
<<if $g.you.isHasDick()>>
cock,
<<else>>
strap on,
<</if>>you bury yourself in her pussy, her <<their $g.covalescent>> cries and sobs muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "And hey, we've got all day..."
<p>
When it's all over, you leave <<rep $g.covalescent>> a huddles mess in the their bed, refusing to look at you. Oh well. They'll get over it. Won't they?</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_submissive')>>
but you can see desire in their eyes as they submit to your will.<br><br>
"Good <<girl $g.covalescent>>," you say as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> moans around their gag as you spit on
<<if $g.covalescent.isHasDick()>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
and <<their $g.covalescent>> hole, working your spit into <<their $g.covalescent>> ass with first one finger, than two. You feel <<their $g.covalescent>> hole relax around your fingers as <<their $g.covalescent>> <<udick $g.covalescent>> rises in front of your eyes, a strand of precum falling down towards <<their $g.covalescent>> belly.<br><br>
"Someone's excited," you say, glancing up towards <<their $g.covalescent>> face.
<p><<Reps $g.covalescent>> eye's are glazed with lust as <<they $g.covalescent>> drops into sub space, <<their $g.covalescent>> body existing only for you and your pleasure.<br><br>
"You want my cock up your ass?" you ask.<br><br>
"Mmmhmm!" <<they $g.covalescent>> replies, nodding <<their $g.covalescent>> head rapidly.<br><br>
"Oh I don't know," you say. "You don't sound very enthusiastic about this, you know."<br><br>
<<Reps $g.covalescent>> eye's widen at the threat and starts begging incoherently through the gag for you to fuck <<them $g.covalescent>>. You let <<them $g.covalescent>> go on for a few minutes before you withdraw your fingers from <<their $g.covalescent>> needy ass.<br><br>
"All right, slut," you say. "But only because you asked so nicely."</p>
<p>You both moan as you sink into <<their $g.covalescent>> willing hole, and <<they $g.covalescent>> eagerly wraps <<their $g.covalescent>> legs around your <<uwaist $g.you>>, drawing you in deeper, <<their $g.covalescent>> eyes rolling back as you rub up against <<their $g.covalescent>> prostate.<br><br>
"Oh yeah," you groan into <<their $g.covalescent>> ear. "You know what's better than fucking you while you're all helpless like this?"<br><br>
"Mmmm?"<br><br>
"Fucking you all day while you're helpless like this."<br><br>
<<reps $g.covalescent>> body tenses beneath you as <<they $g.covalescent>> unloads between your bellies, your words having sent <<them $g.covalescent>> over the edge, but you keep on fucking, not giving <<them $g.covalescent>> time to recover. After all, this isn't about <<them $g.covalescent>> at all.</p>
<<else>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
before burying yourself in her pussy, her moans muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "Take my cock. And hey, we've got all day..."
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_dominant')>>
but you see a fear in their eyes as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> starts to shake <<their $g.covalescent>> head, glaring at you in anger, but you're high on the power trip, and after spitting on
<<if $g.covalescent.isHasDick()>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
and <<their $g.covalescent>> hole, you bury yourself in <<their $g.covalescent>> ass, <<their $g.covalescent>> cries muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell <<them $g.covalescent>>. "Take it like a <<man $g.covalescent>>. And you what I really love about this?"<br><br>
<<rep $g.covalescent>> shuts <<their $g.covalescent>> eyes, refusing to give you an answer. Grinning you continue anyway.<br><br>
"The part where I know you'd love to be doing this...if you were me."
<<else>>
your
<<if $g.you.isHasDick()>>
cock,
<<else>>
strap on,
<</if>>
you bury yourself in her pussy, her <<their $g.covalescent>> cries and muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. " You know what I really love about this?"<br><br>
<<rep $g.covalescent>> shuts her eyes, refusing to give you an answer. Grinning you continue anyway.<br><br>
"The part where I know you'd love to be doing this...if you were me."
<</if>>
<<elseif $g.covalescent.isHasTrait('per_lustful')>>
but you can see desire in their eyes as they work out that they're going to get some. You take pity on them and reach out to stroke their
<<if $g.covalescent.isHasDick()>>
bulge.
<<else>>
pussy.
<</if>>
<br><br>
"I know, you're a horndog, but it's okay. Boss is here to take care of you," you say as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> moans around their gag as you spit on
<<if $g.covalescent.isHasDick()>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
and <<their $g.covalescent>> hole, working your spit into <<their $g.covalescent>> ass with first one finger, than two. You feel <<their $g.covalescent>> hole relax around your fingers as <<their $g.covalescent>> <<udick $g.covalescent>> rises in front of your eyes, a strand of precum falling down towards <<their $g.covalescent>> belly.<br><br>
"Someone's excited," you say, glancing up towards <<their $g.covalescent>> face.
<p><<rep $g.covalescent>> just grunts into the gag, a grunt that you easily translate into "Just fuck me already damn it!"<br><br>
Knowing subbing isn't really their thing, you line yourself up with their hole and slowly push your way in, giving them time to get used to your girth. <<Reps $g.covalescent>> head falls back onto the pillows as you fill <<them $g.covalescent>>, and <<they $g.covalescent>> manages to push back against you as rock your hips, pushing your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
further into <<them $g.covalescent>>. You soon settle into a comfortable rhythm, and you angle your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
to hit <<their $g.covalescent>> prostate as much as you can, until
<<if $g.you.isHasDick()>>
you feel <<them $g.covalescent>> tense around you as <<they $g.covalescent>> orgasm, hot cum painting <<their $g.covalescent>> belly as <<they $g.covalescent>> screams <<their $g.covalescent>> release into the ball gag. Feeling <<them $g.covalescent>> clench sets you off as you lose control of your hips, slamming into <<their $g.covalescent>> ass repeatedly as you shoot your load deep into <<them $g.covalescent>> before collapsing on top of <<their $g.covalescent>> body, spent.
<p>
You lie there for a few moments before <<they $g.covalescent>> squirms beneath you, and you gently pull yourself out from <<their $g.covalescent>> <<uanus $g.covalescent>>, the squelching sound as you do making you both chuckle.</p>
<<else>>
you feel <<their $g.covalescent>> body tense as <<they $g.covalescent>> orgasms, <<their $g.covalescent>> cum splattering all over <<their $g.covalescent>> chest and belly.<br><br>
"Oh yeah, shoot that load, stud," you say as you slow your thrusts, before coming to a stop as <<they $g.covalescent>> collapses onto the bed.<br><br>
After a moment you feel <<them $g.covalescent>> start to push you out, and you pull back, your strap on leaving <<their $g.covalescent>> ass with a squelch and something close to a fart, making <<them $g.covalescent>> blush.
<</if>>
You take the ball gag off <<their $g.covalescent>> head and <<rep $g.covalescent>> thrusts <<their $g.covalescent>> jaw out, working out the stiffness. "That was...something," <<they $g.covalescent>> says, grinning up at you.<br><br>
"A good something, I hope."
"Hey, I'll take what I can get right now," <<they $g.covalescent>> says. "But maybe we can do something else when my arms are back in action."
</p>
<<else>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
before burying yourself in her pussy, her moans muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "Take my cock. And hey, we've got all day for this."
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_sexaddict')>>
but you can see desire in their eyes as they work out that they're going to get some. You take pity on them and reach out to stroke their
<<if $g.covalescent.isHasDick()>>
bulge.
<<else>>
pussy.
<</if>>
<br><br>
"I know, you're a horndog, but it's okay. Boss is here to take care of you," you say as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> moans around their gag as you spit on
<<if $g.covalescent.isHasDick()>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
and <<their $g.covalescent>> hole, working your spit into <<their $g.covalescent>> ass with first one finger, than two. You feel <<their $g.covalescent>> hole relax around your fingers as <<their $g.covalescent>> <<udick $g.covalescent>> rises in front of your eyes, a strand of precum falling down towards <<their $g.covalescent>> belly.<br><br>
"Someone's excited," you say, glancing up towards <<their $g.covalescent>> face.
<p><<rep $g.covalescent>> just grunts into the gag, a grunt that you easily translate into "Just fuck me already damn it!"<br><br>
Knowing subbing isn't really their thing, you line yourself up with their hole and slowly push your way in, giving them time to get used to your girth. <<Reps $g.covalescent>> head falls back onto the pillows as you fill <<them $g.covalescent>>, and <<they $g.covalescent>> manages to push back against you as rock your hips, pushing your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
further into <<them $g.covalescent>>. You soon settle into a comfortable rhythm, and you angle your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
to hit <<their $g.covalescent>> prostate as much as you can, until
<<if $g.you.isHasDick()>>
you feel <<them $g.covalescent>> tense around you as <<they $g.covalescent>> orgasm, hot cum painting <<their $g.covalescent>> belly as <<they $g.covalescent>> screams <<their $g.covalescent>> release into the ball gag. Feeling <<them $g.covalescent>> clench sets you off as you lose control of your hips, slamming into <<their $g.covalescent>> ass repeatedly as you shoot your load deep into <<them $g.covalescent>> before collapsing on top of <<their $g.covalescent>> body, spent.
<p>
You lie there for a few moments before <<they $g.covalescent>> squirms beneath you, and you gently pull yourself out from <<their $g.covalescent>> <<uanus $g.covalescent>>, the squelching sound as you do making you both chuckle.
</p>
<<else>>
you feel <<their $g.covalescent>> body tense as <<they $g.covalescent>> orgasms, <<their $g.covalescent>> cum splattering all over <<their $g.covalescent>> chest and belly.<br><br>
"Oh yeah, shoot that load, stud," you say as you slow your thrusts, before coming to a stop as <<they $g.covalescent>> collapses onto the bed.<br><br>
After a moment you feel <<them $g.covalescent>> start to push you out, and you pull back, your strap on leaving <<their $g.covalescent>> ass with a squelch and something close to a fart, making <<them $g.covalescent>> blush.
<</if>>
You take the ball gag off <<their $g.covalescent>> head and <<rep $g.covalescent>> thrusts <<their $g.covalescent>> jaw out, working out the stiffness. "That was...something," <<they $g.covalescent>> says, grinning up at you.<br><br>
"A good something, I hope."
"Hey, I'll take what I can get right now," <<they $g.covalescent>> says. "But maybe we can do something else when my arms are back in action."
</p>
<<else>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
before burying yourself in her pussy, her moans muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "Take my cock. And hey, we've got all day for this."
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<<elseif $g.covalescent.isHasTrait('per_masochistic')>>
but you can see desire in their eyes as they work out that what you have in mind. <<rep $g.covalescent>> helps as much as they can as you remove their <<uequipslot $g.covalescent 'legs'>> and reveal their
<<if $g.covalescent.isHasDick()>>
ass,
<<else>>
pussy,
<</if>>
speading their legs to give you access.<br><br>
"Huh. Eager slut, are you?" you say playfully. "So eager to have my hard cock inside of you."<br><br>
<<rep $g.covalescent>> moans around the gag as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
Climbing up onto the bed, you lift their legs and slam home in one quick motion. <<rep $g.covalescent>> screams into their gag, but
<<if $g.covalescent.isHasDick()>>
<<their $g.covalescent>> <<udick $g.covalescent>> is raging hard and drooling onto <<their $g.covalescent>> belly as you go to town on <<their $g.covalescent>> ass, the exquisite mixture of pleasure and pain sending <<them $g.covalescent>> over the edge rapidly as <<they $g.covalescent>> shoots, covering <<their $g.covalescent>> chest and belly with cum.<br><br>
<<if $g.you.isHasDick()>>
The clenching of <<their $g.covalescent>> ass around you sets you off and you slam into <<them $g.covalescent>> as your orgasm rushes through your body, your hands digging into <<their $g.covalescent>> shoulder as you pump <<them $g.covalescent>> full of your load. Pulling out, you look down at <<their $g.covalescent>> recumbent form, <<their $g.covalescent>> eyes aglow with happiness but also a bit of discomfort.<br><br>
"That was hot," you say as you put your clothing back on, and pull back the curtain, exposing <<their $g.covalescent>> sex stained nudity to the rest of the room. "And you look great. Maybe I should just leave you like this for the next person who comes along."<br><br>
<<rep $g.covalescent>> moans into <<their $g.covalescent>> gag, <<their $g.covalescent>> cock stiffening. You can tell <<they $g.covalescent>> both likes and fears the idea, and the far only makes <<them $g.covalescent>> like it more.<br><br>
"You know, that's exactly what I'm going to do," you say. "Leave you lying here in your juices like the slut you are, where anyone can see it, just waiting for the next person to come along and take advantage of you."<br><br>
<<rep $g.covalescent>> whimpers as you turn and stride out of the hospital and into the hallway. You don't go far, stopping just out of sight, relishing <<their $g.covalescent>> whines of frustration. You pull out a book and start to read. You'll go back in eventually, but a good dom always stays close when they've got a sub in bondage. Of course, <<rep $g.covalescent>> doesn't have to know that.
<<else>>
You keep pounding <<their $g.covalescent>> ass with your strap on as <<they $g.covalescent>> comes—and keep going afterward until <<they $g.covalescent>>'s soft and begging you to stop. Pulling out, you look down at <<their $g.covalescent>> recumbent form, <<their $g.covalescent>> eyes aglow with happiness but also a bit of discomfort.<br><br>
"That was hot," you say as you put your clothing back on, and pull back the curtain, exposing <<their $g.covalescent>> sex stained nudity to the rest of the room. "And you look great. Maybe I should just leave you like this for the next person who comes along."<br><br>
<<rep $g.covalescent>> moans into <<their $g.covalescent>> gag, <<their $g.covalescent>> cock stiffening. You can tell <<they $g.covalescent>> both likes and fears the idea, and the far only makes <<them $g.covalescent>> like it more.<br><br>
"You know, that's exactly what I'm going to do," you say. "Leave you lying here in your juices like the slut you are, where anyone can see it, just waiting for the next person to come along and take advantage of you."<br><br>
<<rep $g.covalescent>> whimpers as you turn and stride out of the hospital and into the hallway. You don't go far, stopping just out of sight, relishing <<their $g.covalescent>> whines of frustration. You pull out a book and start to read. You'll go back in eventually, but a good dom always stays close when they've got a sub in bondage. Of course, <<rep $g.covalescent>> doesn't have to know that.
<</if>>
<<else>>
your
<<if $g.you.isHasDick()>>
cock
<<else>>
strap on
<</if>>
before burying yourself in her pussy, her moans muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "Take my cock. And hey, we've got all day for this."
<p>(Author's note. I do not write vagina based sex, have zero experience with it and at the present time have zero interest in experiencing it. If you or someone else wants to fill this in with sexytimes, please feel free).</p>
<</if>>
<<else>>
but you see a fear in their eyes as you strip off your <<uequipslot $g.you 'legs'>> and undergarments, revealing
<<if $g.you.isHasDick()>>
your cock, stiff with excitement.
<<else>>
your strap on, large and ready for action.
<</if>>
<<rep $g.covalescent>> starts to shake <<their $g.covalescent>> head, but you're high on the power trip, and after spitting on
<<if $g.covalescent.isHasDick()>>
your <<udickorstrap $g.you>> and <<their $g.covalescent>> hole, you bury yourself in <<their $g.covalescent>> ass, <<their $g.covalescent>> cries muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell <<them $g.covalescent>>. "I'm going to enjoy this."
<<else>>
your <<udickorstrap $g.you>> you bury yourself in her pussy, her <<their $g.covalescent>> cries and muffled by the gag.<br><br>
"Good <<girl $g.covalescent>>," you tell her. "I'm going to enjoy this."<br><br>
<</if>>
<</if>>On second thought, just leave.<p>"Hi <<name $unit.player>>," you say. "Just checking in on you. How are you doing?"</p>
<p>You make some small talk but quickly excuse yourself and head back out into the fort.</p><<run new setup.OpportunityTemplate(
'a_merchant_s_revenge_a_careless_raid', /* key */
"A Merchant\'s Revenge: A Careless Raid", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'unknown',
],
1, /* expiration weeks */
'Opportunity_a_merchant_s_revenge_a_careless_raid',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_a_merchant_s_revenge_a_careless_raid_0',
outcome_passage: 'Opportunity_a_merchant_s_revenge_a_careless_raid_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Leave('merchant', "", undefined),
setup.qc.Event('a_merchant_s_revenge_an_unfortunate_report', 2, {
merchant: "merchant",
}),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_a_merchant_s_revenge_a_careless_raid_1',
outcome_passage: 'Opportunity_a_merchant_s_revenge_a_careless_raid_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Leave('merchant', "", undefined),
setup.qc.Event('a_merchant_s_rage', 3, {
merchant: "merchant",
}),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'merchant': 'a_merchant_s_revenge1',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
It was only later that you found the paperwork. Your contact, <<name $g.merchant>>, never said which trading company—or trading companies—<<they $g.merchant>> ran, but you'd seen the name on the documents you'd already handed over. Clearly, someone had set you up. This left you with a choice:
</p>
<p>
Do you contact <<them $g.merchant>> to report the incident, or keep things quiet and hope <<they $g.merchant>> doesn't find out?
</p>Report the incident<p>
You leave a message for <<name $g.merchant>> with the staff at <<lore location_princeofcups>>. Hopefully <<they $g.merchant>> get back to you soon.
</p>Keep things quiet<p>
Caravans go missing all the time. You just have to hope the raid on this particular one isn't linked back to you and <<rep $company.player>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'furging_a_new_path', /* key */
"Furging a New Path", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: "",
},
[ /* tags */
'furry',
'forest',
'item',
'favor',
],
1, /* expiration weeks */
'Opportunity_furging_a_new_path',
setup.qdiff.normal46, /* difficulty */
[ /* options */
[
'Opportunity_furging_a_new_path_0',
'Opportunity_furging_a_new_path_0_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('slave', setup.qres.IsCanBeSold()),
],
[ /* outcomes */
setup.qc.VarSet('quest_furging_a_new_path_completed', '1', -1),
setup.qc.MissingUnitForever('slave'),
setup.qc.Favor('neko', 750),
setup.qc.IfThenElse(
setup.qres.Actor('slave', setup.qres.Trait('subrace_tigerkin')),
setup.qc.EquipmentDirect('aid_torso_master'),
setup.qc.DoAll([]),
),
setup.qc.RemoveTitleGlobal('quest_living_pawst_0'),
setup.qc.SetCooldownEvent('paws_from_the_past', 10),
],
],
[
'Opportunity_furging_a_new_path_1',
'Opportunity_furging_a_new_path_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitleGlobal('quest_living_pawst_0'),
setup.qc.SetCooldownEvent('paws_from_the_past', 10),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
setup.qres.OpportunityUnique(),
],
{ /* actors */
'you': [],
'slaver': [],
'slave': [],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<if !$varstore.get('quest_furging_a_new_path_completed')>>
<p>
After opening the letter, you see the same handwriting as before, the one that were
asking you to cure <<yourrep $g.slave>>'s mind. But this time, you can
notice the enthusiasm of the sender in the text. They were profoundly grateful
to you for bringing <<rep $g.slave>>'s mind back, and was extremely excited to meet <<them $g.slave>>
in person so they could talk with <<them $g.slave>>.
It seemed weird that, considering your
line of work, someone was willing to rent a slave just to talk with them, but
the mysterious person had something more shameless in mind: this time, their
petition was that you would free <<yourrep $g.slave>> so <<they $g.slave>> could
finally get back to <<their $g.slave>> people.
Sheer force of will prevented you from tearing apart the letter in
that instant, and after pressing your fingers against your forehead in an
attempt to calm yourself, the next lines explained the possible benefits for
<<rep $company.player>>.
More people of the woods will appreciate you doing such a good deed,
and this brings many benefits,
including the possibility of acquiring high quality
equipment that would be otherwise impossible to find anywhere else. Angry
but at the same time intrigued for the audacity of the persona behind such
requests, maybe there was something in it for you should you decide to follow through with
this outrageous request...
</p>
<p>
On one hand, releasing a slave that you have just found, for whom you had
spent so many resources for sounds entirely crazy.
But an opportunity like this could be equally as valuable, just in a
different way. On the other hand, maybe it was better to forget all of this,
to quit while you are ahead and maybe even appreciate the benefits of having
<<rep $g.slave>> between your ranks.
</p>
<<else>>
<p>
The old neko got his whiskers back in your
business and had found out of the success of your treatment for <<rep $g.slave>> and,
just like before, wanted you to consider the option of freeing <<them $g.slave>> just so
<<they $g.slave>> could share <<their $g.slave>> knowledge (and questionable abilities) with the
rest of the world. The rewards for it were the same as before: favor with the
neko tribes of the region, which includes the ability to obtain a piece of high quality equipment
that would be almost impossible to find anywhere else. On a second thought, it
was pretty weird that such a “poor and secluded” village had items so
valuable in such quantities to give them away in exchange for this kind of
favors, but maybe it was better to follow the common wisdom of “the curiosity
killed the neko” and not ask too many questions.
</p>
<p>
Of course, if what the old man offered was not up to par with the quality of
the slave that you were going to lose in the trade, or if you already have a
particular plan for <<rep $g.slave>>, then you could always write him a letter thanking
him for his continuous (and creepy) interest in your company, but rejecting
his offer this time. He may get a little sad, but his mood will surely improve the
moment he hears you freed another petrified neko and will surely write to you
again.
</p>
<</if>>Release the slave<<if !$varstore.get('quest_furging_a_new_path_completed')>>
<p>
Against your better judgement, you decided to follow the instructions of an
anonymous letter and found yourself taking <<yourrep $g.slave>> through the forest
towards the famous village described in the letter.
You asked for the help of <<yourrep $g.slaver>> to escort you
while you guide the shackled <<urace $g.slave>> between the swaying trees and brambles.
A pair of extra eyes and <<uhands $g.slaver>> would help a lot should the slave
try to escape during the journey or, in the worst case, were you to be ambushed by your hosts.
If something like that were to happen, your slavers back in the fort have very
detailed instructions about what to do with the bastards that dared set up a
trap for you.
</p>
<p>
Surprisingly, the trip ended without any problems, and your small group found a
small and rudimentary village in the depths of the forest. All the inhabitants
of the place were neko that looked at you with great interest while you walk
between the huts, asking for the chieftain that had invited you. After
several whispers and looks of mistrust, a couple of them went and call for the chief.
When you finally saw eye-to-eye with the mysterious mailer, several things made sense. The chief
was a very, very old neko, so much that it surprised you he could still move on
his own, and his features and body were very similar to <<reps $g.slave>>, revealing
that, among every other inhabitants of the village, he had the strongest
connection with his tigerkin ancestors. The old man was happy to see you and
invited your group into his home. There, you both started to talk about the
deals that were made regarding freeing <<rep $g.slave>>, and you managed to come to
an agreement that seemed much fairer to you.
</p>
<p>
The old man promised to spread good words about your company to all the other
neko village and towns that he had connections with, spreading word about your generosity and support
towards his people. This could open up new business opportunities for your company.
Of course, he understood you may not trust him on his words, and arranged for a way
to let you keep track of his progress, that could prove that
he will be fulfilling his part of the deal.
<<if $g.slave.isHasTrait('subrace_tigerkin')>>
Even more, given your huge contribution, he presented to you a wooden box, within which
you found a high-quality robe, the kind of which you had never seen before.
At first glance the robe looked really expensive, and you were
sure that it would be very useful to your slavers
should they ever need to dress themselves elegantly. But the moment you laid your finger on it,
you felt a powerful aura exhuding from its threads: looked like it was magical too. Maybe all this
was worth it after all.
<</if>>
And since you now know the
location of this small village filled with defenseless neko, there is always the
possibility of taking a couple of “honored guests” to your fort, just in case he decided not keep his
words.
</p>
<p>
After releasing <<rep $g.slave>> from <<their $g.slave>> shackles, the townsfolks gave
new clothes to the <<urace $g.slave>> and invited <<them $g.slave>> to dine with them. The old man
invited you and <<yourrep $g.slaver>> too, but <<rep $g.slaver>> rejected his offer, given that
it would be quite awkward to sit at the same table with the former slave after
everything you made them “eat”
<<if !$settings.bannedtags.watersport>>
and "drink"
<</if>>
under your care. You bid farewell to the chieftain and
set out back to the fort, but not before explaining to the old man how a mail
room works so you can avoid getting more letters sneaked into your office.
</p>
<<else>>
<p>
Like last time, you decided to take the deal the old man offered you.
You handed him <<yourrep $g.slave>> so <<they $g.slave>> can be free,
to live together with the rest of <<their $g.slave>> people. This
time, you invited the chieftain to your fort so you can settle in the details
of the deal and at the same time save up the costs of having to transport the
former-slave to the confines of the <<lore region_forest>>.
</p>
<p>
A couple of days later, the old man showed up, accompanied by a couple of
young neko, who were all very curious about your employees and their jobs,
both the slavers and the slaves. After inviting him to
your office and talking for a bit, you managed to close the deal and <<yourrep $g.slave>> was
free to go with them. You tried to tempt your guests to use some of your
“facilities” and maybe get juicy information or even some blackmail material,
but the old cat was savvier than he looks and turned down your offer. You
and <<yourrep $g.slaver>> bid farewell to the group before noting down what you just got
out of the trade:
</p>
<<if !$g.slave.isHasTrait('subrace_tigerkin')>>
<p>
...Support from the old man's village to help you improve your reputation
with the groups of neko living in the forest.
This will surely help your company in your future endeavors.
</p>
<<else>>
<p>
...Improvement of the reputation of <<rep $company.player>> with the
different tribes and small towns of neko that live in the forest, and even
better, a magical ancient robe that only the old man and his village have
access to, for some weird and disturbing reason.
</p>
<</if>>
<</if>>Ignore the letter<p>
There is no way you'd turn <<yourrep $g.slave>> over.
You have grand plans for <<therace $g.slave>> after all, and you began
by teaching the slave <<their $g.slave>> appropriate place -- between your
legs and servicing your <<ugenital $unit.player>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'milking_the_oasis', /* key */
"Milking the Oasis", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804975758111670272',
},
[ /* tags */
'desert',
'order',
'unit',
],
1, /* expiration weeks */
'Opportunity_milking_the_oasis',
setup.qdiff.hardest57, /* difficulty */
[ /* options */
[
'Opportunity_milking_the_oasis_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SlaveOrderFlex(
'Order from The Milk Bar', /* name */
'humandesert', /* company */
8, /* expires in */
3000, /* base price */
1000, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.bg_maid,
setup.trait.bg_foodworker,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_attentive,
setup.trait.per_playful,
setup.trait.skill_entertain,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_domestic_basic,
setup.trait.training_domestic_advanced,
setup.trait.training_domestic_master,
],
[ /* disaster traits */
setup.trait.subrace_humandesert,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.per_dreamy,
setup.trait.per_serious,
setup.trait.ears_demon,
setup.trait.mouth_demon,
setup.trait.body_demon,
setup.trait.wings_demon,
setup.trait.arms_demon,
setup.trait.legs_demon,
setup.trait.tail_demon,
setup.trait.dick_demon,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.dick_huge, setup.trait.balls_huge, setup.trait.breast_huge]),
],
[ /* addons */
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
],
[
'Opportunity_milking_the_oasis_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('raiding_the_oasis', null),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
The successful scouting of the Milk Bar has given your company valuable
information. One information tells you that the security level of the bar and its
surroundings is way too high to perform a robbery without paying someone from
inside to literally open all the doors in the building for you. Judging
for the level of opulence of the place, the bribe would be way too expensive to make
the operation not profitable.
</p>
<p>
On the other side, you also found out about something with more
potential: a caravan is about to arrive at the oasis in a few weeks, carrying
the most recent shipment of prospects for new employees. Of course, given the
peculiarities of the butlers and maids of the bar, these slaves will have
certain assets that would snatch you a high price in the market.
With this limited but valuable information, it's up to you to choose what to
do: an assault to the caravan could get the company some rather huge and
voluptuous "merchandise", but the mission is definitely a dangerous one,
and messing with a rich group like this could certainly bring down some retribution
later down the road. Alternatively, you can play it safe
and take the slave order from The Milk Bar.
The order would no doubt be asking for slaves with certain "assets", but
the bar would appreciate this so much and are willing to pay very well for these slaves.
</p>Sell them a slaveRaid the caravan/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'paws_from_the_past', /* key */
"Paws from the Past", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: "",
},
[ /* tags */
'furry',
'forest',
'prep',
'item',
'favor',
],
1, /* expiration weeks */
'Opportunity_paws_from_the_past',
setup.qdiff.normal46, /* difficulty */
[ /* options */
[
'Opportunity_paws_from_the_past_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
setup.qc.AddTitle('neko', 'quest_living_pawst_0'),
],
],
[
'Opportunity_paws_from_the_past_1',
'Opportunity_paws_from_the_past_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
setup.qc.SetCooldownEvent('paws_from_the_past', 20),
],
],
[
'Opportunity_paws_from_the_past_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
setup.qc.SetCooldownEvent('paws_from_the_past', 1000),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
setup.qres.OpportunityUnique(),
],
{ /* actors */
'neko': []
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<if !$varstore.get('quest_furging_a_new_path_completed')>>
<p>
The letter comes from a small neko village in the <<lore region_forest>>, and the
apparently it is their leader who sent the letter. The next paragraph is full of
information about their culture, traditions and other useless details that
almost makes you want to throw away the letter and continue with your work,
but just before you do, a line catches your attention.
</p>
<p>
Apparently, this small
and recondite village somehow found out about one of your latest missions,
where you freed an ancient <<urace $g.neko>>
by breaking the spell that kept them as a living statue.
This group of neko has great interest in their ancestors, the
tigerkins, and also on the war between the elves and the neko from centuries ago.
Thanks to their obsession, they believe
that someone who had lived in those ancient times can be an incredible source of
information and wisdom. Unfortunately (and concerningly for you), they also know
about <<their $g.neko>> current mental state after being trapped for so long within the statue.
</p>
<p>
However, the neko are quite resourceful, and they are fully aware that
the elves have potions and rituals that could possibly recover a mind no matter how terribly lost
it was.
That's why they are asking, if possible, that you use your resources
to give <<rep $g.neko>> <<their $g.neko>> sanity back, and nothing else.
Whatever you decide to do with the slave afterwards,
just the knowledge that
one of their ancestors has regained their mind would be enough to cheer up all
the villagers there.
</p>
<p>
All this seems really strange. They want you to heal your slave, and no
matter what you do with <<them $g.neko>> afterwards, they'll be thankful to you?
Sounds incredibly suspicious,
especially when you read that because they are such a “small and poor”
village, they can't pay you for it. Of course...
</p>
<p>
Well, you can do what they asked of you and restore <<yourrep $g.neko>>'s mind,
if you have or willing to gather the facilities and materials to do so.
Maybe this will net you some favor with the neko.
Or, you could simply ignore the letter and use
your new slave as the brainless sexdoll it currently is.
After all, not healing <<them $g.neko>> now doesn't mean you can't heal <<them $g.neko>>
in the future, if you consider it necessary.
And what slaving company worth their name does charity
work without the possibility of a juicy reward?
</p>
<p>
Either way, it might be your best interest to start
<<successtext "building your relationship with the">> <<rep $company.elf>>.
</p>
<<else>>
<p>
The terms are just as last time: you
restore the mind of your new furry “employee” and he will spread much good word about
your company with his people and the neighboring villages, improving your reputation
with the neko of the area and opening new possibilities of juicy deals in
the future. And considering the costs of the treatment, he better speaks
wonders about you with them.
</p>
<p>
Of course, you can always ignore his request, and while you are sure
he will be a little disappointed by your rejection, he'll get over it as soon
as he finds out that you freed another one of kind again. It makes
you wonder, though, why he wants so many old neko soldiers loose around the village,
and you still ignore how he knows whenever you release one of them…
</p>
<</if>>Accept their requestIgnore the letter<<if !$varstore.get('quest_furging_a_new_path_completed')>>
<p>
You crumple up the paper and throw it outside. Sweet words and pretty
envelopes aren't enough to convince you to spend resources without the chance
of getting something good in return. While the person writing the
letter may have good intentions, your company simply cannot survive on “good intentions”
alone. You get back to work with the pile of papers that are mounting in front of you and soon
enough, you forget everything related to that mysterious letter.
</p>
<</if>>Ignore the letter and ignore all future letters/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_slave_leader_of_the_company_0", /* key */
"Slave Leader of the Company", /* name */
"Slave who has been allowed to act as the companies leader until such time as someone who can turn a greater profit appears.", /* description */
"\"a|lead\" the company, but in reality \"a|serve\" the slavers in a much less upstanding position", /* unit text */
2500, /* slave value */
{ /* skill additives */
intrigue: 1,knowledge: 2,social: 2,sex: 5,},
)
>>
<<run new setup.OpportunityTemplate(
'change_to_position', /* key */
"Change to Position", /* Title */
{ /* Author */
name: "Quiver",
url: "https://www.reddit.com/r/FortOfChains/comments/ktx1fr/new_event_post_for_playing_a_submissive_slaver/",
},
[ /* tags */
'special',
'unknown',
'fort',
],
1, /* expiration weeks */
'Opportunity_change_to_position',
setup.qdiff.easiest1, /* difficulty */
[ /* options */
[
'Opportunity_change_to_position_0',
'Opportunity_change_to_position_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTitle('you', 'quest_slave_leader_of_the_company_0'),
setup.qc.EquipmentDirect('metal_collar'),
],
],
[
'Opportunity_change_to_position_1',
'Opportunity_change_to_position_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
'them': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
One day, you are sitting in the fort, among your fellow slavers, when
you find yourself reflecting upon your own submissive nature. As lewd ideas
about casting aside your position as a slaver and joining the rest of the
submissive sluts in the dungeon play unbidden within your mind, you suddenly
feel as though this is more than just an idle daydream. As the growing urge
to give in to your submissive nature grows within your chest, you feel as if
a serious choice has presented itself before you, although the nature of that
choice is not immediatly apparent.
</p>Give in to your submissive urges<p>It is no secret within the company that you are submissive, so it is not all that surprising when several slavers, led by <<rep $g.them>> approach you, a heavy slave collar in <<their $g.them>> hand. </p>
<p>Without a word of protest, you obediently expose your neck, allowing <<rep $g.them>> to place the collar in its rightful place. As the cold metal band snaps into place, you feel a rush of relief as it sinks in that you can finally stop living a lie and assume your true position in society. Your arousal is obvious as you stand and begin walking towards to slave pens, assuming the company is as eager as you to see you in your rightful place.</p>
<p> What does come as a surprise then, is when <<rep $g.them>> stops you, shaking their head as they pull you away from your current path. </p>
<p>"Sorry boss, or former boss, I guess. We all discussed this beforehand, and while we all agree that your proper place is serving the company, we also agreed that you have been doing a good job as our leader. That's why we have decided that until someone better comes along, you're going to continue to be the come making the decisions around here."</p>
<p>"But what about this?" you gesture toward your new slave collar, already you feel proud to be wearing it, and somehow the idea of returning to a life at the top seems frightening, even if that was your life just moments ago.</p>
<p>"The collar is there to remind you, and all of us, that even though you're technically the leader, your also going to be a free fuck for everyone in the company. From today forward you're the absolute bottom of the pile, the entire forts toy, and while we let you, the one who will make decisions on what jobs we take and so on, instead of thinking like the boss, you should start thinking about what the best way to serve all of us is."</p>
<p>With that, <<yourrep $g.them>> pulls you over toward your office. The inside looks much the same as when you left, the last pile of paperwork you were working on is still waiting on your desk, most of the decor is still in place, however your chair has been replaced with a small, cushioned platform designed for kneeling on, and a ring has been driven into the table, with a chain attached to it. As your guide forced you onto your new kneeling arrangement behind your desk, he takes the end of the chain not connect to the desk and connects it to your collar, locking it in place and trapping you at your new work-space. </p>
<p> "Hope your comfortable, because your going to be staying like this for most of the time now, course everyone expect you has a key to that, and is allowed to come and use you however they please." </p>
<p> Rather than argue against this, you simply shift in place, hoping <<rep $g.them>> will give you a physical demonstration of what he means. Somewhat dissapointingly, he doesn't, instead turning and leaving you to your work. </p>
<p> Finally alone, the reality of what just happened finally sets in. Giving your submissive nature, you only feel a brief twinge of regret at having lost your former life, before you shrug and let that feeling fade away. Picking up a pen, you get back to work, eager to impress your former collegues, now your expectant Masters. </p>Reject the rising feeling<p> Shaking off the momentary compusion, you push down upon your more submissive instincts, reminding yourself of all the effort that when into getting to the position you are in today.</p>
<p> As your thought process returns to normal, you shiver at how close you came to throwing everything away. The moment past, you get up and go back to your office, you have a fort to run after all. </p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_the_abominable_valeman_abominable_valeman", /* key */
"Abominable Valeman", /* name */
"A local legend of the North", /* description */
"a|was a local legend that menaced the towns in the <<lore region_vale>>", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"abominable_valeman",
"valeman",
[ /* pools */
[setup.unitpool.subrace_werewolf_male, 0.3125],
[setup.unitpool.subrace_werewolf_female, 0.3125],
[setup.unitpool.subrace_humanvale_male, 0.15625],
[setup.unitpool.subrace_humanvale_female, 0.15625],
[setup.unitpool.subrace_neko_male, 0.03125],
[setup.unitpool.subrace_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.subrace_werewolf_male, 0.3125],
[setup.unitpool.subrace_werewolf_female, 0.3125],
[setup.unitpool.subrace_humanvale_male, 0.15625],
[setup.unitpool.subrace_humanvale_female, 0.15625],
[setup.unitpool.subrace_neko_male, 0.03125],
[setup.unitpool.subrace_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>> tracker|notice 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>> tracker|lead <<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>> fighter|step 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>> fighter|stumble
across a starved-looking, but unusually large
<<if _vman.isHasTrait('race_wolfkin')>>
werewolf,
<<elseif _vman.isHasTrait('race_human')>>
human, wrapped in furs,
<<elseif _vman.isHasTrait('race_catkin')>>
lynx-eared neko,
<</if>>
muttering in their sleep. <<Rep $g.hunter>> vaguely hunter|recall 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 <<name _vman>>, <<rep $g.hunter>> hunter|confer with the other slavers,
and they decide to:
</p>
<<else>>
<<set _vman = $g.valeman>>
<p>
On a hunch, <<they $g.tracker>> tracker|lead <<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>> fighter|step ahead of them and into the dark.
</p>
<p>
What <<they $g.fighter>> fighter|find is a surprise to everyone: an incredibly large
<<if _vman.isHasTrait('race_wolfkin')>>
werewolf,
<<elseif _vman.isHasTrait('race_human')>>
human, wrapped in furs,
<<elseif _vman.isHasTrait('race_catkin')>>
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>> tracker|dig
out a hunk of cured meat rations that the slavers had just purchased from the
village. <<Rep $g.hunter>> hunter|watch in quiet trepidation as the caveman <<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>> tracker|explain that they want to invite <<them _vman>> to join
<<rep $company.player>>. The negotiations are terse and unproductive until
<<rep $g.tracker>> tracker|make a promise to pay for <<rep _vman>>'s food and board,
at which point <<their _vman>> eyes light up and <<they _vman>> agrees 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 fighter|signal <<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>> fighter|haul <<their _vman>> struggling <<if
_vman.isHasTrait('race_wolfkin')>>
furry
<<else>>
fur-wrapped
<</if>> body down the mountainside.
</p>
<p>
<<Rep $g.fighter>> <<uadv $g.fighter>> fighter|complain about the smell of
<<if _vman.isHasTrait('race_wolfkin')>>
wet dog
<<elseif _vman.isHasTrait('race_human')>>
sweaty human
<<elseif _vman.isHasTrait('race_catkin')>>
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 hunter|lead <<rep $g.fighter>>
and <<rep $g.tracker>> back out of the cave, where they make haste back to
the <<if _vman.isHasTrait('race_wolfkin')>>
human
<<run setup.qc.Favor('humanvale', 300).apply($gQuest)>>
<<elseif _vman.isHasTrait('race_human')>>
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 the caveman.
</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>/* PROOFREAD COMPLETE */
<<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, setup.rarity.always],],
[
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 to your fort, addressed to the knight-in-training that you apparently
have in your company now.
An innocent daughter of a noble family in the <<rep $company.humankingdom>> 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 in the market...
</p>Save the noble daughterEnslave the noble daughter/* PROOFREAD COMPLETE */
<<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, setup.rarity.rare],], /* questpool */
[ /* requirement */
setup.qres.Building(setup.buildingtemplate.prospectshall),
setup.qres.Building(setup.buildingtemplate.dungeons),
setup.qres.Building(setup.buildingtemplate.trainingchamber),
],
)>><p>
The <<lore region_vale>> is infamous for its harsh winters and freezing temperature.
These lend its inhabitants an affinity for both ice and water domain. Masters of these crafts
are often called flesh-shapers, and they
have some control over altering one's body's composition.
Some of the more superstitious northerners often turn to worshipping the humanlike bodies themselves.
</p>
<p>
There are numerous flesh-shaping temples on the <<lore region_vale>>,
each usually consist of several flesh priests, as well as apprentices, all adept one way or another
in the art of <<lore magic_water>>.
Your scouts have recently discovered one such temple, and this opens up several possibilities for you.
The simplest option is to raid the temple, which should yield you a good amount of gold from
selling the valuable flesh-shaping tools stored within.
Alternatively, you could also attempt to kidnap some of these priests, who has the potential to become
a highly valuable slave once trained properly.
Finally, these temples often accept humanlike offerings, to flesh-shape as their beliefs require.
You can attempt to barter one of your slaves in order to recruit one of these priests.
Surely having a slaver capable of altering flesh at will is going to be useful for your company's future.
</p>Raid the templeKidnap a priestRecruit a priest/* PROOFREAD COMPLETE */
<<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 <<dangertext 'temporary'>> contact or a slave order.
</p>Gain slave orderGain contact/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'human_vs_were', /* key */
'Human vs Werewolf', /* name */
'darko', /* author */
['vale', 'furry', '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, setup.rarity.uncommon],],
[],
)>><<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> informed you that
the werewolves of the <<lore region_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.
Alternatively, you can wait until the attack begins and kidnap some of the villagers during the chaos.
</p>Kidnap villagersDefend with the villagers/* PROOFREAD COMPLETE */
<<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, setup.rarity.uncommon],], /* questpool */
[ /* requirement */
],
)>><p>
The <<rep $company.humankingdom>> had outlawed
outlawed slavery over ten years ago.
But that does not mean
all of the numerous slaves in the city were immediately freed. Some unscrupulous owner proceeded to sell them
immediately to the undercity.
It is mostly unknown where to then these slaves would go, but
rumors often tell that many end up in one of the many factories located within the undercity...
</p>
<p>
Little is known about what is produced within those factories, but rumors often
tell of weird noises and industrial chugging noises coming out from the factory.
In the coming weeks, one of these factories will undergo renovation, which would potentially
allow some of your slavers to sneak in and obtain some of the factory slaves for yourselves.
Alternatively, the rumors also said that the factory is always looking for more "employees" to hire...
</p>Steal valuablesKidnap a male workerKidnap a female workerOffer some of your slaves as "employees"/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'a_fair_y__offer', /* key */
"A Fair(y) Offer", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'unknown',
'veteran',
],
1, /* expiration weeks */
'Opportunity_a_fair_y__offer',
setup.qdiff.hard49, /* difficulty */
[ /* options */
[
'Opportunity_a_fair_y__offer_0',
'Opportunity_a_fair_y__offer_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.HasItem(setup.item.quest_bewitchment_nectar),
setup.qres.HasItem(setup.item.quest_bewitchment_trap)
]),
setup.qc.DoAll([
setup.qc.SetCooldownQuest('finding_fairy2', 400),
setup.qc.Slave('fairy', "a|was a lecherous fairy in the western forests who kidnapped both travelers and adventurers and remade them as a|their personal harem", undefined),
setup.qc.EquipmentDirect('survival_neck_master'),
setup.qc.OneRandomSeed([
setup.qc.Favor('humankingdom', 150),
setup.qc.Favor('neko', 150),
setup.qc.Favor('elf', 150),
setup.qc.LoseItem('quest_bewitchment_nectar', 1),
setup.qc.LoseItem('quest_bewitchment_trap', 1),
])
], undefined),
setup.qc.DoAll([
setup.qc.SetCooldownQuest('finding_fairy2', 12),
setup.qc.Equipment(setup.equipmentpool.survival_good),
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Equipment(setup.equipmentpool.brawn_good),
setup.qc.Equipment(setup.equipmentpool.knowledge_good)
], undefined)),
],
],
[
'Opportunity_a_fair_y__offer_1',
'Opportunity_a_fair_y__offer_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Through(setup.qres.HasItem(setup.item.quest_bewitchment_nectar), '???'),
],
[ /* outcomes */
setup.qc.SetCooldownQuest('finding_fairy2', 200),
setup.qc.Slaver('fairy', "a|was a lecherous fairy in the western forests who drugged both travelers and adventurers and remade them as a|their personal harem", undefined),
setup.qc.TraumatizeRandom('tracker', 12),
setup.qc.TraumatizeRandom('rescuer', 12),
setup.qc.LoseItem('quest_bewitchment_nectar', 1),
setup.qc.LoseItem('quest_bewitchment_trap', 1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'fairy': 'all',
'rescuer': [
],
'tracker': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Having rescued all of your captured slavers in somewhat intact conditions, your slavers
are offered a truce by the unscrupulous fairy: let <<them $g.fairy>> walk
away in good graces, and your slavers can loot the fairy's former lair for
all its worth!
</p>
<<if $inventory.isHasItem('quest_bewitchment_nectar')>>
<p>
Seeing the <<rep setup.item.quest_bewitchment_nectar>> that your slavers are carrying,
however, the fairy's eyes lit up in surprise. Unexpectedly, <<they $g.fairy>>
fairy|offer your slaver an
alternative deal: the nectar in exchange for the fairy's services by joining
your company. It might be good to have such a powerful slaver in your
company, but choosing this means your slavers will never be able to exact
their revenge on the fae...
</p>
<<unitcard $g.fairy 1>>
<</if>>
<<if $inventory.isHasItem('quest_bewitchment_trap') and
$inventory.isHasItem('quest_bewitchment_nectar')>>
<p>
Remembering the <<rep setup.item.quest_bewitchment_trap>> at <<uhand $unit.player>>, however,
your slavers could pretend to accept the truce with a more sinister goal in
mind...
</p>
<</if>><<if $inventory.isHasItem('quest_bewitchment_trap') and $inventory.isHasItem('quest_bewitchment_nectar')>> Pretend to accept the truce and set up the trap <<else>> Accept the truce <</if>><<if $inventory.isHasItem('quest_bewitchment_trap') and
$inventory.isHasItem('quest_bewitchment_nectar')>>
<p>
With a knowing nod, <<rep $g.rescuer>> rescuer|borrow as much time as
possible from the fairy, delaying the answer with while dangling some of the
<<rep setup.item.quest_bewitchment_nectar>> in front of the fae. Meanwhile,
<<yourrep $g.tracker>> tracker|disappear from view into the forest, setting up an
irresistable trap: the <<rep setup.item.quest_bewitchment_trap>> is setup
just on the outskirts of the fairy's lair with the <<rep
setup.item.quest_bewitchment_nectar>> inside.
With the trap set, <<rep $g.rescuer>> rescuer|pretend to agree to the truce,
but not to the nectar exchange. Your slavers watch carefully as the fairy
somewhat dejectedly begins to pack up <<their $g.fairy>> slaves to move to a
new lair.
</p>
<p>
Your slavers then waited for the signal — and there it is. A shriek can be
heard from just outside the lair. <<Rep $g.tracker>> <<uadv $g.tracker>>
tracker|rush to the trap set — lo and behold: the fairy is lodged inside,
trapped within the enchanted rat cage, glaring daggers at your slavers.
With the quarry safely in tow, <<rep $g.rescuer>> high rescuer|five <<rep
$g.tracker>> before taking the fairy's prized <<rep
setup.equipment.survival_neck_master>>, and properly packaging the trapped
fairy in full bondage gear for the long journey to <<their $g.fairy>> new
lair: in one of your dungeon cells.
</p>
<p>
The trap dispels all of the fairy's magic too, which apparently releases all
of <<their $g.fairy>> harem's minds.
Among them,
<<if $gQuest.getSeed() % 3 == 0>>
a grateful noble from the <<rep $company.humankingdom>>
<<elseif $gQuest.getSeed() % 3 == 1>>
a grateful neko adventurer
<<elseif $gQuest.getSeed() % 3 == 2>>
a grateful elven herbalist
<</if>>
promises to spread the good deeds of your slavers around.
</p>
<<else>>
<p>
Despite feeling slightly disgruntled, your slavers agree to the fairy's offer of a
truce. That settled, the fairy performs an enchantment across <<their
$g.fairy>> lair, before commanding <<their $g.fairy>> remaining slave puppets
to follow the fairy into a no-doubt newly hidden lair.
Once the fairy is out of sight, your slavers scoured through the former lair,
finding numerous discarded pieces of clothing no doubt formerly belonging to
the fairy's current harem.
</p>
<p>
Still, all your slavers are rescued and accounted for, although some may bear
permanent mark from their time under the fairy's cruel management. Your slavers are
concerned, however, by the fairy's parting words: "Well then, see you
gentle<<men $g.rescuer>> in a year or so!". ...you have a feeling this won't
be the last time you meet the fairy, and perhaps a more permanent solution is
required...
</p>
<</if>><<if $inventory.isHasItem('quest_bewitchment_nectar')>> Recruit the fairy <<else>> ??? <</if>><p>
The deal is struct — your <<rep setup.item.quest_bewitchment_nectar>> in
exchange for the fairy's services as a slaver in your company.
<<They $g.fairy>> fairy|perform a final enchantment on <<their $g.fairy>>
current harem, ensuring the slaves would take care of <<themself $g.fairy>>
while the fairy is away on official business with your company. Once that's
done, <<they $g.fairy>> greedily fairy|take the <<rep
setup.item.quest_bewitchment_nectar>>, before introducing <<themself
$g.fairy>> to your slavers as <<rep $g.fairy>>.
</p>
<p>
<<Yourrep $g.tracker>> can't help but feel slightly disgruntled that the
fairy who has kidnapped so many of <<their $g.tracker>> comrades were unable
to be justly punished, but in time <<they $g.tracker>> will understand just
how useful it is to have a highly powerful slaver in a slaving company.
</p>
<<if $inventory.isHasItem('quest_bewitchment_trap')>>
<p>
Given your decision to recruit the unscrupulous fairy, there is no longer a
need for your <<rep setup.item.quest_bewitchment_trap>>, which has been
thrown away by <<yourrep $g.rescuer>>.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
setup.qres.Actor('slave', setup.qres.IsCanBeSold()),
],
[ /* 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>
A noble has taken a liking to one of their
captures during the great noble hunt: <<yourrep $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 is completed. The gamemaster herds their new <<if $g.slave.isHasTrait('training_none')>>disobedient<<else>>meek<</if>> animal while you <<uadv $unit.player>> count the money
you've just received from the exchange.
</p>Decline the offer<p>
You decide that <<rep $g.slave>> slave|is worth more than what the gamemaster has
offered, and decide to decline the offer.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'an_educated_opportunity', /* key */
"An Educated Opportunity", /* Title */
"darko", /* Author */
[ /* tags */
'unknown',
'fort',
],
1, /* expiration weeks */
'Opportunity_an_educated_opportunity',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_an_educated_opportunity_0',
'Opportunity_an_educated_opportunity_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Leave('slaver', "a|is writing a book", undefined),
setup.qc.Event('teachings_of_obedience', 10, {
slaver: "slaver",
}),
],
],
[
'Opportunity_an_educated_opportunity_1',
'Opportunity_an_educated_opportunity_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('slaver', 5),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
<<Yourrep $g.slaver>> slaver|have asked for a short break from <<their
$g.slaver>> slaving duties. That isn't too surprising, but you are caught
completely off guard when you asked <<them $g.slaver>> for the reason: <<theslaver $g.slaver>>
wants to a write a book.
</p>
<p>
As you recall, <<rep $g.slaver>> slaver|have indeed been certified and would be a
qualified instructor in the <<lore location_institute_of_higher_learning>>.
It seems <<they $g.slaver>> slaver|want to write down the teachings <<they
$g.slaver>> slaver|have learned from the course, and slaver|spread the knowledge around.
<<if $g.slaver.isHasTrait('per_active')>>
Given that <<rep $g.slaver>> slaver|have never been known as a studious
slaver, you have your doubts, and in all likelihood
<<else>>
<<Yourrep $g.slaver>> slaver|is reasonably studious, so <<they $g.slaver>> might
be telling the truth, or
<</if>>
<<they $g.slaver>> just give you the excuse because it sounds pretty cool.
But ultimately the decision is yours, should you wish to grant <<theslaver $g.slaver>> a few months break...
</p>Give <<them $g.slaver>> your blessing<p>
<<Reps $g.slaver>> <<uears $g.slaver>> perk up hearing your reply, and
without saying any other work <<they $g.slaver>> slaver|decide to get to work
immediately and <<uadv $g.slaver>> slaver|head to <<their $g.slaver>> room.
</p>Delay it<p>
<<Rep $g.slaver>> slaver|look slightly dejected hearing your refusal, but you're
sure <<they $g.slaver>> will be back to <<their $g.slaver>> normal <<uadjgood
$g.slaver>> self in a gusto.
</p>
<p>
You have no doubt <<theslaver $g.slaver>> will ask you for another opportunity sooner or
later, and maybe you'll grant it next time.
</p><<run new setup.OpportunityTemplate(
'best_ass_rescue', /* key */
"Best Ass Rescue", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
'unit',
'money',
'special',
],
1, /* expiration weeks */
'Opportunity_best_ass_rescue',
setup.qdiff.hardest57, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_best_ass_rescue_0',
outcome_passage: 'Opportunity_best_ass_rescue_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Event('best_ass_rescue', 30, {
'a': 'a',
}),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_best_ass_rescue_1',
outcome_passage: 'Opportunity_best_ass_rescue_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Actor('a', setup.qres.And([
setup.qres.NotYou(),
setup.qres.IsCanBeSold()
])),
],
outcomes: [ /* outcomes */
setup.qc.MoneyUnitValue("a", 1, 100000),
setup.qc.MissingUnitForever('a'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_best_ass_rescue_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('second_best_ass', {
a: "a",
}),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'a': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Today, a messenger from the <<lore region_desert>> has come to your fort, surprisingly bringing you a part of <<reps $g.a>> "salary" at <<their $g.a>> new occupation as the orc's assy plaything. Apparently <<rep $g.a>> is "working" under the orc's employ after <<they $g.a>> had won Best Ass in the festival.
There are a number of options for you here.
</p>
<p>
If you think <<rep $g.a>> would do better as a "salary<<man $g.a>>" than a slaver, you could just do nothing and you would no doubt get another cut of the salary in the future...
</p>
<p>
Alternatively, the orc is surely willing to arrange a more permanent contract with you for <<reps $g.a>> future. You could cash in a large amount of sum in exchange for never seeing <<rep $g.a>> ever again nor receiving any "future salary". You estimate you would get
<<set _money = Math.min(100000, $g.a.getSlaveValue())>>
<<money _money>>
from the deal.
</p>
<p>
Finally, if you are feeling bold and brash, you could try to launch a rescue mission and save <<rep $g.a>> once and for all...
</p>Do nothing and expect another "salary" soon...<p>
Perhaps <<rep $g.a>> in <<their $g.a>> current state would simply be better off earning money in <<their $g.a>> "new occupation" rather than being one of your slavers...
</p>Give up on <<rep $g.a>> and grant <<them $g.a>> a "permanent leave"<p>
You <<uadv $unit.player>> wrote a contract in return, and before long you and the orcs found a common ground. <<Rep $g.a>> a|is now permanently reassigned as the orc's "secretary", while you receive a large sum of gold in exchange.
Profit?
</p>Try to rescue <<them $g.a>> instead<<run new setup.OpportunityTemplate(
'blessing_of_protection', /* key */
"Blessing of Protection", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'unit',
'trait',
],
1, /* expiration weeks */
'Opportunity_blessing_of_protection',
setup.qdiff.harder48, /* difficulty */
[ /* options */
[
'Opportunity_blessing_of_protection_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('prayer_of_protection', null),
],
],
[
'Opportunity_blessing_of_protection_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('protection_abduction', null),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('prayer_of_protection'),
setup.qres.NoQuest('protection_abduction'),
],
{ /* actors */
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Many <<rep setup.trait.subrace_humansea>> are keen healers and priests. People suffering from grievous injuries or ravaging disease often brave the <<lore region_sea>> in search for these people, whose mastery over their craft is said to be so vast that they can do more than just heal. Indeed, particularly gifted ones are capable of bestowing the Blessing of Protection upon others, which can prevent such injuries from happening altogether in the first place.
</p>
<p>
A particular monastery exists in the <<lore region_sea>>, which specializes in bestowing such a blessing. The monastery opens its doors to pilgrims of all sorts who are looking for protective enlightenment. This presents an opportunity for you.
</p>
<p>
You can try to send a group of slavers into the monastery to patron them and ask for the blessings — surely your infamy won't be able to reach such an isolated place, and they would not know at all that your slavers are in fact, bad people.
</p>
<p>
An alternative, but far more dangerous option is to send a group of slavers pretending to be patrons, but whose real goal is to kidnap one of these priests. These priests are often gifted in <<rep setup.trait.magic_light>>, making them a potentially high-valued slaves. Kidnapping a magic user of any kind is sure going to be a dangerous affair, however. The monastery will also probably close its door for a good long while after such an incident...
</p>PatronAbduct/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],
],
[ /* 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
largest slave market in the region. All kinds of slaves are available
in the market — from nearby ex-raiders who were captured and turned into slaves, to exotic
travelers unlucky enough to found their way into 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 here.
The safest option is to simply browse
through the wares, while noting particularly interesting slaves for you to purchase.
Another option is to sell your own stock to the market — the market is highly
competitive, however, and you would not get too hot of a price there. But it
would be very easy to get plenty of the orders.
The last option is to attempt to sneak in during the night and steal some of the merchandise
— 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/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'consumed_by_darkness', /* key */
"Consumed by Darkness", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'trait',
'favor',
'unit',
'unknown',
'special',
],
1, /* expiration weeks */
'Opportunity_consumed_by_darkness',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_consumed_by_darkness_0',
'Opportunity_consumed_by_darkness_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('to_master_the_dark', {
master: "master",
slaver: 'slaver',
}),
],
],
[
'Opportunity_consumed_by_darkness_1',
'Opportunity_consumed_by_darkness_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('slaver', setup.qres.IsCanBeSold()),
],
[ /* outcomes */
setup.qc.AllUnitSatisfyDo(
[
setup.qres.NoTag('mist_apprentice_victim'),
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
[
setup.qc.TraumatizeRandom('unit', 20),
],
),
setup.qc.AllUnitSatisfyDo(
[setup.qres.HasTag('mist_apprentice_victim')],
[setup.qc.Injury('unit', 3), setup.qc.TraumatizeRandom('unit', 12), setup.qc.Return('unit')],
),
setup.qc.MissingUnitForever('slaver'),
setup.qc.SetCooldownQuest('mist_apprenticeship', 100),
setup.qc.Favor('demon', 2000),
setup.qc.Slave('demonkin', "a|was a slave given in exchange for one of your slavers", undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'master': 'mist_apprenticeship0',
'demonkin': 'subrace_demonkin',
'slaver': [],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Unexpected, instead of a simple demand of payment like all your previous
letters, this time the demon that is currently tutoring <<yourrep $g.slaver>> is actually
offering you an offer.
</p>
<p>
The demon is offering to buy <<therace $g.slaver>> from you — no doubt to be remade as
one of <<their $g.master>> personal sex toys. It seems <<they $g.master>> master|have
taken quite a liking to <<theslaver $g.slaver>>. The promised reward is mouth-watering:
the demon promises to champion your company's reputation among other demons,
propelling your company's reputation so much that it'll be on the tip of
every demon's conversations. If that's not reward enough, the demon even
promises to throw in one of <<their $g.master>> demonkin sex toys over to you
as well.
</p>
<p>
However, you have known <<rep $g.slaver>> for quite some time now, and
<<theslaver $g.slaver>> slaver|have served you
<<if $g.slaver.isHasTrait('per_loyal')>>
very loyally
<<elseif $g.slaver.isHasTrait('per_independent')>>
well, although you question <<their $g.slaver>> loyalty from time to time
<<else>>
loyally
<</if>>
thus far. Do you really have the heart to exchange one of your slavermates
in exchange for a demon's bargain?
</p>No, just complete the training by offering your body as payment<p>
You reject the offer. <<Reps $g.slaver>> loyalty and long term of service
to you will not go punished with a betrayal.
</p>Accept the offer<p>
Despite <<reps $g.slaver>> long service in your company, the demon's offer
is just too tempting, and you have fallen for it.
The moment you sign the parchment, it burns itself to cinders, sealing
the deal. You will never again see <<yourrep $g.slaver>>, whose destiny is now to
be one of the no-doubt many playthings of the demon. All in exchange for a
lot of goodwill from the demonkins, as well as a shipment of slave to be
delivered to your address very soon.
</p>
<p>
You've tried all you can to prevent the news from reaching your other slavers, but
somehow they know, and they are distressed by the turn of events...
</p>/* PROOFREAD COMPLETE */
<<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, setup.rarity.epic],
],
[ /* 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 basic fire mastery lends itself to destruction,
individuals blessed with advanced fire magic sometimes are able summon purifying
fire instead, which can cleanse corruptions and demons alike.
These people are often sought after for their services, and is
widely considered capable of blessing whoever happened to bathed in their flames.
</p>
<p>
You have caught wind of a small group of purifiers that are journeying through the
<<lore region_desert>>. This is a rare opportunity for you — you can try to either purify some of
your slavers using their services, or you can
try to recruit some of these purifiers into your slaving company.
Alternatively, if you are feeling particularly 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/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'gorgon_cave', /* key */
"Hydra Cave", /* Title */
"darko", /* Author */
[ 'forest', 'item', 'unit', 'rare',
], /* 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, setup.rarity.epic],
],
[ /* 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
growth, including the ability to accelerate the 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 <<lore region_forest>>
whose mastery over the earth domain is so vast that they are able to conjure multiple tentacled guardians to
watch over their lair. It is believed that those guardians makes the lair extremely
dangerous and risky to invade,
even though the lair contains the wizard's personal harem and many arcane and
mystical treasures.
</p>
<p>
Your scouts have recently located on the wizard's lairs, which gives you several options to choose from.
The simplest option is to raid the caverns — according to the rumors, the wizard stores multiple
powerful artifacts there, all ripe for stealing.
There is also another option: you can
attempt to contact the wizard instead, and recruit them into your company.
Having a slaver with such proficiency of earth magic will surely prove
very useful in a slaving company such as yours.
</p>RaidRecruit/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_houndmaster_s_sniffer_0", /* key */
"Houndmaster\'s Sniffer", /* name */
"A slave lent to you by the master of hounds, with a very sensitive nose. Must be returned to the master of hounds intact and untransformed, at a later date", /* description */
"a|is lent to you temporarily by the master of hounds, and must be returned later or face the consequences", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"houndmastery0",
"Sniffer",
'subrace_tigerkin', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTitle('unit', 'quest_houndmaster_s_sniffer_0'),
setup.qc.TraitsReplace('unit', [
setup.trait.training_obedience_basic,
setup.trait.training_pet_basic,
setup.trait.per_curious,
setup.trait.arms_neko,
setup.trait.body_neko,
setup.trait.legs_neko,
setup.trait.ears_neko,
setup.trait.tail_neko,
setup.trait.mouth_neko,
]),
setup.qc.ResetInnateTraits('unit'),
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
],
)>>
<<run new setup.OpportunityTemplate(
'houndmastery', /* key */
"Houndmastery", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'item',
'unknown',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_houndmastery',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_houndmastery_0',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.NoItem(setup.item.technology_petmaster),
],
[ /* outcomes */
setup.qc.Item(setup.item.technology_petmaster),
],
],
[
'Opportunity_houndmastery_1',
null,
[ /* costs */
setup.qc.Money(-4000),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.EquipmentDirect('tailplug_dog_master'),
],
],
[
'Opportunity_houndmastery_2',
'Opportunity_houndmastery_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasItem(setup.item.technology_petmaster),
],
[ /* outcomes */
setup.qc.VarSet('houndmastery_sniffer_lent', '1', -1),
setup.qc.VarSet('houndmastery_sniffer_lent_deadline', '1', 30),
setup.qc.Slave('sniffer', "a|is a rare slave lent to you by the master of hounds", undefined),
setup.qc.SetCooldownQuest('houndmastery', setup.INFINITY),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'master': 'the_dog_whisperer0',
'sniffer': 'houndmastery0',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Having fulfilled the strange slave order, the hound<<master $g.master>>,
satisfied with the slave, offers you a wealth of rewards for your choosing.
</p>
<<if !$inventory.isHasItem(setup.item.technology_petmaster)>>
<p>
First, <<they $g.master>> offers to teach you the secret to training pets.
A remarkably valuable reward!
</p>
<</if>>
<p>
If you are willing to shell a little more coin out of your pocket, the
hound<<master $g.master>> is willing to part with one of <<their $g.master>>
rarest creation: the <<rep setup.equipment.tailplug_dog_master>>. This is
likely the only place in <<lore continent_main>> where you can get this very rare
equipment!
</p>
<<if $inventory.isHasItem(setup.item.technology_petmaster)>>
<p>
<<if $settings.bannedtags.furry>>
<<dangertext 'Warning:'>> This option contains <<dangertext 'furry'>> content, which you have banned!
<</if>>
Finally, you've been eyeing one of the more... exotic pets of the
hound<<master $g.master>>. An extremely rare tigerkin slave,
which makes you wonder how the <<man $g.master>> caught
one in the first place. Nonetheless, you are sure that <<they $g.master>>
will be willing to lend you the slave, as long as you promise to return the
pet at a later date (which you should not break or face dire consequences...)
</p>
<</if>>Get the <<rep setup.item.technology_petmaster>>Pay to get the <<rep setup.equipment.tailplug_dog_master>>Borrow the tigerskin slave for seven months<p>
In your infinite wisdom, you have decided to borrow the slave <<rep
$g.sniffer>> instead. Well <<they $g.sniffer>> sniffer|is certainly an incredibly rare
slave, and you can definitely have some fun with the tigerkin for a while, but
<<they $g.sniffer>> will have to be returned eventually. If the slave is ever
gone from your company, or if the slave was to be returned transformed, no doubt
the consequences will be dire, and the hound<<master $g.master>> will easily
sever all connections with your company forever.
</p>
<p>
The hound<<master $g.master>> brags about the slave's particularly sensitive
nose — perhaps it could be put to good use somewhere in the <<lore
region_forest>>, if one knows where to look...
</p>/* PROOFREAD COMPLETE */
<<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 target|lie in wait in the
<<rep setup.buildingtemplate.treatmentroomisolation>>, awaiting the decision
which of <<their $g.target>> memory to suppress.
</p>Choose memory to isolate<<set $gMenuVisible = false>>
<p>
Choose which of <<reps $g.target>> trait 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 is already spent on the training.
</p>
<<set $gIsolateMemoryUnitKey = $g.target.key>>
<<set _traits = $unit[$gIsolateMemoryUnitKey].getRemovableTraits().filter(
trait => trait.getTags().includes('skill') || trait.getTags().includes('bg'))>>
<<if !_traits.length>>
<div>
<<Reps $g.target>> 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>>/* PROOFREAD COMPLETE */
<<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, setup.rarity.rare],
],
[ /* 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 in the undercity of
Lucgate will feature a very special slave: an exotic specimen from the
<<lore region_sea>> gifted in the domain of <<lore magic_light>>.
The price will be astronomical and there is no way that buying the slave would be
anywhere profitable for your company. But
there is an option for you to send your slavers over to
kidnap the goods.
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 and if you manage to 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/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'lizardkin_settlement', /* key */
"Lizardkin Settlement", /* Title */
"darko", /* Author */
[ /* tags */
'unit',
'danger',
'favor',
'sea',
'scaley',
'veteran',
],
1, /* expiration weeks */
'Opportunity_lizardkin_settlement',
setup.qdiff.hardest54, /* difficulty */
[ /* options */
[
'Opportunity_lizardkin_settlement_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('stand_with_the_lizardkins', null),
],
],
[
'Opportunity_lizardkin_settlement_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('betray_the_lizardkins', null),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('stand_with_the_lizardkins'),
setup.qres.NoQuest('betray_the_lizardkins'),
setup.qres.Cooldown(10),
],
{ /* actors */
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
You have just received the news that a ferocious pirating company is planning
an assault on a small lizardkin settlement in the <<lore region_sea>>.
Normally, this would not be yours or your company's problem, but <<yourrep
_u>> suggests that this might be a rare opportunity for to gain the trust of
these scaled people. You could try to send a group of able fighters
to help out fend the pirates away.
</p>
<p>
However, you have a brighter idea. The battle between the pirates and the
lizardkin will surely be intense, so that means you can send a group of
slavers "pretending" to help out, and kidnap a downed lizardkin or two in the
heat of battle. No doubt this will be incredibly dangerous, as well as
earning you a lot of ire from these folks. But such is the price you have
to pay for a lizardkin slave...
</p>Stand with the lizardkinsBetray the lizardkins<<run new setup.OpportunityTemplate(
'lonely_alchemist', /* key */
"Alchemist Orders", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'item',
'order',
'forest',
],
1, /* expiration weeks */
'Opportunity_lonely_alchemist',
setup.qdiff.harder54, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_lonely_alchemist_0',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('healing_potion_greater'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_3',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('potion_perk'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_6',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('potion_boon'),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'alc': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'lonely_alchemist2', /* key */
"Alchemist Orders", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'item',
'order',
'forest',
],
1, /* expiration weeks */
'Opportunity_lonely_alchemist',
setup.qdiff.harder54, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_lonely_alchemist_1',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('level_up_potion_basic'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_4',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('reset_potion'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_7',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('potion_purity'),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'alc': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'lonely_alchemist3', /* key */
"Alchemist Orders", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'item',
'order',
'forest',
],
1, /* expiration weeks */
'Opportunity_lonely_alchemist',
setup.qdiff.harder54, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_lonely_alchemist_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('potion_trauma_reduce'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_5',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('blank_potion'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_lonely_alchemist_8',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.SlaveOrderLonelyAlchemist('forget_potion'),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'alc': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Your slavers had successfully made contact with the crazed alchemist <<name $g.alc>> in the
<<lore region_forest>>, and your slavers were able to convince the <<uadjbad $g.alc>> <<urace $g.alc>>
to brew some rare potions for you in exchange for a high-quality slave.
This is a rare opportunity.
You will get a number of potions depending on the
value of the slave — the higher it is, the more potions you'll get. <<They
$g.alc>> had given you a selection of one of <<their $g.alc>> several
potions, for you to choose from.
</p>
<p>
Given how erratic the alchemist is, there is no doubt that you would never see
whichever slave unlucky enough to be sold to the
<<urace $g.alc>> ever again.
</p><<rep setup.item.healing_potion_greater>><<rep setup.item.level_up_potion_basic>><<rep setup.item.potion_trauma_reduce>><<rep setup.item.potion_perk>><<rep setup.item.reset_potion>><<rep setup.item.blank_potion>><<rep setup.item.potion_boon>><<rep setup.item.potion_purity>><<rep setup.item.forget_potion>>/* PROOFREAD COMPLETE */
<<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, setup.rarity.rare],
],
[ /* restrictions to generate */
setup.qres.NoQuest('mist_merge_complete23'),
setup.qres.NoQuest('mist_merge_disrupt2'),
setup.qres.OpportunityUnique(), ],
)>><<set _u = setup.getAnySlaver()>>
<p>
Many residents from beyond <<lore concept_mist>> have attempted to cross to this
world, but only very few succeed.
A direct trip is extremely dangerous for the demons,
and the preferrred method seems to be of that of possession: With a proper sacrifice
and high level <<lore magic_dark>>, one could invite one of <<lore
concept_mist>> residents to come to this world by entering a sacrifice's
body and overriding their mind.
The sacrifice's real self will be locked securely deep within their body
while the demon will be granted full control over the body, potentially forever.
</p>
<p>
An eastern settlement has come asking for your company's help to thwart an
upcoming dark ritual held too close to their village.
But <<yourrep _u>> informs you that this is no ordinary dark ritual — this
is actually a powerful dark wizard's attempt to try and wrest control a demon over to their
side, using the sacrificial possession ritual.
</p>
<p>
There are a number of options for you here.
First, if you are feeling particularly good-hearted,
you could try do as the village ask and send your best purifiers to
thwart and disrupt the ritual. This will surely earn the gratitude of the
settlement.
On the other hand, demons make for incredibly powerful allies.
You could try to send your slavers to help the wizard in exchange
for recruiting one of the possessive demons as a slaver.
Just be warned that should the ritual fails, the consequences will be disastrous.
</p>DisruptComplete/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],
],
[ /* 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 <<lore region_forest>>, there is an
oddly fenced area managed by an enterprising slaving agency.
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 would last for an hour,
complete with a tranquilizer dart. Once inside, they are free to shoot as
many of the animals as possible within the hour — all the animals bagged can
be brought home as pets.
</p>
<p>
Only, the "animals" are not your usual fare of animals. Instead of deers and
other wildlife, the Safari Zone prides 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 managed to remain uncaught until the end of the hunting season, which further
motivates the slaves. The Safari Zone serves a large and diverse
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 illegally hunt one of the
slaves there.
</p>Sell slavesIllegal hunt/* PROOFREAD COMPLETE */
<<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, setup.rarity.uncommon],
],
[ /* restrictions to generate */
],
)>><p>
Many of the people living in the <<lore region_desert>> make their living as a shepherd.
These people raise livestock, and usually are forced to travel great distances to let them feed.
Various types of livestock are raised, including 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 durable yet obedient slaves.
This presents an opportunity to you:
first, you can try to abduct one of the livestock in the farm -- after all,
your company can always use a pre-trained slave.
Or, you can simply raid the farm for as many valuables as possible, if all you care about is money.
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<<set _order_high =
setup.qc.SlaveOrderFlex(
'Slave Merchant Order - High Quality', /* name */
'independent', /* company */
12, /* expires in */
750, /* base price */
1500, /* trait multi */
0.8, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom(setup.TraitHelper.getAllTraitsOfTags(['bg']).filter(trait => !trait.getTags().includes('unicorn') && !trait.getTags().includes('rare')), 3, 2, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
)>>
<<set _order_medium =
setup.qc.SlaveOrderFlex(
'Slave Merchant Order - Medium Quality', /* name */
'independent', /* company */
12, /* expires in */
300, /* base price */
500, /* trait multi */
0.65, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom(setup.TraitHelper.getAllTraitsOfTags(['bg']).filter(trait => !trait.getTags().includes('unicorn') && !trait.getTags().includes('rare')), 3, 2, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
)>>
<<set _order_low =
setup.qc.SlaveOrderFlex(
'Slave Merchant Order - Low Quality', /* name */
'independent', /* company */
12, /* expires in */
200, /* base price */
300, /* trait multi */
0.5, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom(setup.TraitHelper.getAllTraitsOfTags(['bg']).filter(trait => !trait.getTags().includes('unicorn') && !trait.getTags().includes('rare')), 3, 2, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
)>>
<<run new setup.OpportunityTemplate(
'slave_merchant_low_level', /* key */
"Slave Merchant", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'order',
],
1, /* expiration weeks */
'Opportunity_slave_merchant',
setup.qdiff.normal20, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_slave_merchant_0',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_high,
_order_high,
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_slave_merchant_1',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_medium,
_order_medium,
_order_medium,
_order_medium,
_order_medium,
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_slave_merchant_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>>
<<run new setup.OpportunityTemplate(
'slave_merchant_high_level', /* key */
"Slave Merchant", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'order',
],
1, /* expiration weeks */
'Opportunity_slave_merchant',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_slave_merchant_0',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_high,
_order_high,
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_slave_merchant_1',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_medium,
_order_medium,
_order_medium,
_order_medium,
_order_medium,
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_slave_merchant_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
_order_low,
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
Having secured a deal, you can now cash in from a selection of possible slave orders.
A few good orders, a bunch of very cheap slave orders, or something in between.
</p>Two alright ordersFive less than average ordersTen wholesale orders/* PROOFREAD COMPLETE */
<<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 */
setup.qres.Actor('wanderer', setup.qres.IsCanBeSold()),
],
[ /* 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 a|them for what a|they is"),
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': 'subrace_werewolfmale',
'werefemale': 'subrace_werewolf_female',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
You have uncovered <<reps $g.wanderer>> secret: <<they $g.wanderer>> wanderer|is actually an
unnatural half-man half-werewolf. <<Their $g.wanderer>> heritage had
shunned the poor <<man $g.wanderer>> from the company of both the northerners and the werewolves.
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 $g.wanderer>> wanderer|is<p>
<<Rep $g.wanderer>> did not respond when you said you were happy to accept
<<them $g.wanderer>> for what <<they $g.wanderer>> is. You had 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 <<theslaver $g.wanderer>> hopeless to find a company that would accept <<them
$g.wanderer>>, even though <<their $g.wanderer>> heritage was not in any way
<<their $g.wanderer>> own fault.
</p>
<p>
With this,
<<their $g.wanderer>> journey has come to an end, and in the
strangest of company: the company of slavers. No longer <<they $g.wanderer>>
wanderer|need to excuse <<themself $g.wanderer>> during the full moon nights. A happy
ending all around, including for you who just gained 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 <<them $g.wanderer>>, and then choosing the <<successtextlite 'Bodyshift'>> interaction.
</p>/* PROOFREAD COMPLETE */
<<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 <<yourrep $g.knight>> knight|is
currently staying fully bound in one of the nicer dungeon cells. You need to make a
decision how to save <<therace $g.knight>> from the influence of
the sword.
</p>
<<set _u = setup.getDutySlaver('viceleader', 'rescuer')>>
<p>
You can try to return the sword back to the vaults — with the sword far, far away
from its wielder, hopefully <<yourrep $g.knight>> will return back to <<their
$g.knight>> <<uadjgood $g.knight>> self. Alternatively, <<yourrep _u>>
suggested a very different idea: corrupt the sword entirely until it becomes
nothing but an instrument for
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 treasuries<<include 'Quest_treasury_assault_finale'>>Corrupt the sword<<include 'Quest_dark_excalibur'>>/* PROOFREAD COMPLETE */
<<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, setup.rarity.always],
],
[ /* 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 _headunit>> human-like arms,
Gluttony - represented by <<their _headunit>> werewolf tail,
Lust - represented by <<their _headunit>> addled neko eyes,
Greed - represented by <<their _headunit>> twitching elven ears,
Wrath - represented by <<their _headunit>> orcish tusks,
Envy - represented by <<their _headunit>> painful hooves,
and Pride - represented by <<their _headunit>> lizard-like scales.
This can only means that the destiny
that awaits <<rep _headunit>> is to be an exalted plaything of one of the
demon lords of <<lore concept_mist>>, who loves nothing more than the most
debauched and the rarest 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 within the <<lore region_sea>>, and furthemore it will be both lengthy
and incredibly dangerous. But if done properly, the demon lord might be
willing to bestow some of the otherwordly technology upon your unworthy
company.
</p>
<p>
Choosing to complete the ritual will surely condemn <<yourrep _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 <<umouth $unit.player>>-watering.
</p>
<p>
However, there is hope if you instead foolishly wish to save the slave. If
you somehow have grown too attached to a mere slave such as <<rep _headunit>>,
you can try to contact some
of the strongest purifiers living off the <<lore region_sea>> for the slight chance
that they will be able to lift the curse from <<rep _headunit>> forever,
freeing <<them _headunit>> from the terrible fate that awaits 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 at a later date..., so why would anyone choose this option?
</p>
<</if>>Seal the dealSave the slave/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'tigerkin_statue', /* key */
"Tigerkin Statue", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'item',
'unit',
],
1, /* expiration weeks */
'Opportunity_tigerkin_statue',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_tigerkin_statue_0',
'Opportunity_tigerkin_statue_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Actor('gender', setup.qres.Trait(setup.trait.gender_male)),
setup.qc.DoAll([
setup.qc.Item(setup.item.f_object_master_tigerkinstatuemale)
], undefined),
setup.qc.DoAll([
setup.qc.Item(setup.item.f_object_master_tigerkinstatuefemale)
], undefined)),
],
],
[
'Opportunity_tigerkin_statue_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('anal_overload', {
gender: "gender",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'gender': 'all',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Having acquired an extremely rare tigerkin statue from your slavers'
misadventure, it is time to decide what to do with them.
</p>
<p>
The first option is to simply keep the statue as prestigious decorations.
After being imprisoned for so long, there is no doubt that the minds of these
tigerkins are long gone, and it might best to leave them as statues which
will surely worth more than the actual tigerkins. Plus,
<<if $g.gender.isHasDick()>>
there is surely fun to be had with a statue blessed with a permanently erect and leaking dick...
<<else>>
there is surely fun to be had with a statue blessed with a permanently wet and leaking pussy...
<</if>>
</p>
<p>
Alternatively you could try to undo the petrification in the same way with
all other statues — via anal overload. Given the age of the statue, it will
require a special kind of anal overload ritual however, and the resulting
slave will also no doubt came out mindbroken. Is it really worth all these
efforts?
</p>Keep the statue as a decoration<p>
The tigerkin statue will surely look nice in whoever slaver is lucky enough to have
it being installed in their bedchamber!
</p>Try to reverse the petrification and get yourself a tigerkin slave/* PROOFREAD COMPLETE */
<<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', {prince: 'prince'}), ],
], [
'Opportunity_tower_of_roses__point_of_love_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('tower_of_roses__fatal_attraction', {prince: 'prince'}), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* 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), ],
{ /* actors */
'prince': 'quest_tower_of_roses1',
},
[ /* expired outcomes */
],
false, /* must be answered */
)>><<set _headunit = setup.getUnit({title: "tower_of_roses_admirer", job: setup.job.slaver})>>
<<if !_headunit>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _headunit>> received a letter from an elven <<prince $g.prince>> in
the <<lore region_forest>>, asking <<them _headunit>> to come privately on a full
moon night to <<their $g.prince>> tower. It seems that <<reps _headunit>>
efforts have borne fruit, and the <<prince $g.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 and fulfill the <<prince
$g.prince>>'s dream and send the <<prince $g.prince>> <<their $g.prince>>
<<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 $g.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 $g.prince>>.
Of course, <<rep _headunit>> will probably be devastated by this
turn of events should you go through with it, but it's surely a small price
for such a valuable slave?
</p>
<</if>>
<<unitcard $g.prince 1>>Love winsKidnap/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'blackmailed', /* key */
"Blackmailed", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'unit',
],
1, /* expiration weeks */
'Opportunity_blackmailed',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_blackmailed_0',
'Opportunity_blackmailed_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('a_permanent_solution', 10, {
slaver: "slaver",
boss: "boss",
}),
setup.qc.Event('blackmail_due', 4, null),
],
],
[
'Opportunity_blackmailed_1',
'Opportunity_blackmailed_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarRemove('rival_blackmail_active'),
setup.qc.SetCooldownEvent('blackmailed', 400),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'boss': [
],
'messenger': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
Today, you receive a good news and a bad news.
</p>
<p>
The good news is that you've heard back from <<yourrep $g.slaver>>, who went missing sometime ago.
</p>
<p>
The bad news is that <<therace $g.slaver>> seems to have found <<themself
$g.slaver>> under the tender care of a rival slaving company. Their boss, the
<<urace $g.boss>> named <<rep $g.boss>>, has the nerve the demand payment for <<reps $g.slaver>> "continued safe hospitality" — a sum of <<money 2000>> payable every month.
</p>
<p>
If you want to ensure <<reps $g.slaver>> safety, best to acquiesce to this
reasonable demand. Otherwise you will never see <<rep $g.slaver>> ever again,
as <<they $g.slaver>> will be shipped to a place somewhere far, far away...
</p>Acquiesce... for now<p>
Not wanting to put <<rep $g.slaver>> in any peril, you acquiesced to the
demand for now. You'll have to start pooling money for the monthly
installments, if you want to maintain the status quo...
</p>Forget it, <<if $g.slaver>><<rep $g.slaver>><</if>> isn't worth it!<p>
<<if $unit.player.isHasTrait('per_logical')>>
Making up your mind, you coldly tell the messenger that you have no need of
such a <<uadjbad $g.slaver>> slaver anymore, and they can do whatever they
want with the former slaver.
The answer sent chills down the messenger's spine, and <<they
$g.messenger>> almost meekly exited your fort, unnerved by your cold
decision.
<<elseif $unit.player.isHasTrait('per_empath')>>
With a gulp down your throat, you make the painful decision to decline after
weighing <<reps $g.slaver>> utility and the money it would cost you to rescue <<them $g.slaver>>. The
messenger can clearly see the hesitation in your empathetic mind, but decides
not to push it further and exits your fort without a word.
<<else>>
Making up your mind, you tell the messenger that you decide to decline the offer.
The messenger looks almost surprised at your cold answer, but <<they
$g.messenger>> knows how to shut <<their $g.messenger>> mouth and exits your
fort without asking questions.
<</if>>
</p>
<p>
This decision will surely seal <<reps $g.slaver>> fate, and you will never see
<<them $g.slaver>> ever again...
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'from_hero_to_zero', /* key */
"Taste of Revenge", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
1, /* expiration weeks */
'Opportunity_from_hero_to_zero',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_from_hero_to_zero_0',
'Opportunity_from_hero_to_zero_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Trait('boss', setup.trait.training_obedience_basic),
setup.qc.Slave('boss'),
setup.qc.Slaver('slaver'),
setup.qc.AllUnitSatisfyDo([setup.qres.Job(setup.job.slaver), setup.qres.Home()],
[setup.qc.BoonizeRandom('unit', 15)],
),
],
],
[
'Opportunity_from_hero_to_zero_1',
'Opportunity_from_hero_to_zero_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slave('boss'),
setup.qc.Slaver('slaver'),
setup.qc.BoonizeRandom('slaver', 200),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'boss': [
],
'slaver': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
It has been some time since your victory over <<rep $g.boss>>, now a slave
under your care, awaiting yours and your slavers' pleasure. If you are
feeling generous, you could share <<them $g.boss>> with the rest of your
slaving family. Or you can let <<yourrep $g.slaver>> takes <<their
$g.slaver>> well-deserved revenge against the former boss who had abused
<<them $g.slaver>> so...
</p><<if $g.slaver>>Break <<their $g.boss>> ass and make it available for the
entire fort to use<</if>><p>
<<Rep $g.boss>>, who has been fairly dignified up to this point, breaks down
when <<they $g.boss>> boss|is placed in stocks with <<their $g.boss>> ass in the
air in the middle of your fort.
<<Their $g.boss>> sobs become screams when,
for the first time in <<their $g.boss>> life, <<they $g.boss>> boss|feel the
burning sensation of a well-lubricated
<<if $unit.player.isHasDick()>>cockhead<<else>>strap-on<</if>>
forcing its way past <<their $g.boss>> virgin sphincter. Raping a virgin anus is not a new pleasure for you,
but the usual shrieking, struggling and spasming is all the sweeter this time.
By the end of the first day, more than half of your slavers at home have used
<<their $g.boss>> poor injured butthole, which remains available for use
throughout the rest of the week.
Your slavers are enjoying the priviledge of having to fuck such a prestigious
slave, while the experience paves the way for <<reps $g.boss>> training as a
slave.
</p><<if $g.slaver>>Let <<rep $g.slaver>> slaver|have <<their $g.slaver>> revenge<</if>><p>
<<Rep $g.slaver>> slaver|lead <<them $g.boss>> out into the fort square, before
locking <<them $g.boss>> securely in a makeshift pillory. In full view from
the fort, <<rep $g.slaver>> slaver|proceed to
<<if !$g.slaver.isHasDick()>>don a strap-on and<</if>>
orally rape <<therace $g.boss>>, who
was until recently a leader of a slaving company <<themself $g.boss>>.
Seeing such a prestigious slave all devoted for <<reps $g.slaver>> singular
pleasure instills some jealousy to your other slavers, but they understand how
much well-deserved the punishment is. <<Rep $g.slaver>>, meanwhile, slaver|is almost
unsufferably pleased with your decision to force <<rep $g.boss>> to pleasure
<<them $g.slaver>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'subtle_retaliation', /* key */
"Subtle Retaliation", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
'unit',
'special',
],
1, /* expiration weeks */
'Opportunity_subtle_retaliation',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_subtle_retaliation_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('direct_sabotage', {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Opportunity_subtle_retaliation_1',
'Opportunity_subtle_retaliation_1_flavor',
[ /* costs */
setup.qc.Favor('humankingdom', -250),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('sabotage_success', 4, {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Opportunity_subtle_retaliation_2',
'Opportunity_subtle_retaliation_2_flavor',
[ /* costs */
setup.qc.Favor('humanvale', -250),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('sabotage_success', 4, {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Opportunity_subtle_retaliation_3',
'Opportunity_subtle_retaliation_3_flavor',
[ /* costs */
setup.qc.Favor('werewolf', -250),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('sabotage_success', 4, {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Opportunity_subtle_retaliation_4',
'Opportunity_subtle_retaliation_4_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarRemove('rival_blackmail_active'),
setup.qc.VarSet('rival_blackmail_cancel', '1', -1),
setup.qc.SetCooldownEvent('blackmailed', 400),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'boss': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<<set _progress = $varstore.get('rival_blackmail_progress') || 0>>
<p>
You've been blackmailed for a couple of weeks by now by that unscrupulous
<<name $g.boss>>, leader of another slaving company who had taken hold of
<<yourrep $g.slaver>>.
<<if _progress >= 2>>
You've heard that recently, some of <<their $g.boss>> <<women $g.boss>> had gone either
missing or deserted, no doubt partially thanks to your earlier actions. This
conflict might soon come to a conclusion, and you only need to deal the
final blow to end this once and for all.
<<elseif _progress >= 1>>
You have heard that your rival's coffers have starting to grow thin, since
<<they $g.boss>> boss|is starting to find it strangely difficult to find contract works
or buyers for <<their $g.boss>> slaves...
<<else>>
If you don't want to keep being humiliated like this, <<yourrep _u>> suggests
that you act fast, but subtle, as to not draw attention lest bad things could
happen to <<rep $g.slaver>>.
<</if>>
</p>
<p>
To advance this agenda,
you can either send a team of slaver with some money to sabotage <<their
$g.boss>> company, or you could leverage your existing favors with the other
factions to make life difficult for your rival...
</p>Dedicate time and money sabotaging your rivalAsk your contacts in the City of Lucgate for assistance<p>
Despite having outlawed slavery, the <<lore region_city>> still provides
numerous opportunities for slaving companies, if one knows where to look. But
in the recent weeks, <<rep $g.boss>> finds <<their $g.boss>> dealings with
these people becoming strangely difficult...
</p>Ask your valefolk contacts for assistance<p>
Situated on the <<lore region_vale>>, your rival's slaving company depends
greatly on the surrounding populace for many necessities. But in the recent
weeks, even finding basic necessities prove difficult and challenging
for <<name $g.boss>>, no doubt thanks to your contacts in the vale...
</p>Ask your werewolf contacts for assistance<p>
In the coming days, you have heard reports that a slaver or two employed to
<<name $g.boss>> had gone missing. While these things happen all the time for
slaving companies, the timing almost matches exactly with when your werewolf
contacts agreed to work something out, and you have no doubt that this was not
mere coincidence...
</p>Give up on <<if $g.slaver>><<rep $g.slaver>><</if>> and refuse all future blackmails<p>
Having grown tired with the blackmails, you've chosen to forsake <<rep $g.slaver>>,
and refuse to heed all future blackmail attempts. You never hear from your
former slaver ever again, and you force yourself to take solace in the fact
that your treasury remains mostly intact for now...
</p>
<<run setup.qc.TraumatizeRandom('unit', 5).apply(setup.costUnitHelper($unit.player))>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'the_price_of_revenge', /* key */
"The Price of Revenge", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'fort',
],
1, /* expiration weeks */
'Opportunity_the_price_of_revenge',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_price_of_revenge_0',
'Opportunity_the_price_of_revenge_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Money(40000),
setup.qc.Slaver('slaver', "", undefined),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
],
],
[
'Opportunity_the_price_of_revenge_1',
'Opportunity_the_price_of_revenge_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Friendship('slaver', 'boss', -1000),
setup.qc.Event('taste_of_revenge', 1, {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Opportunity_the_price_of_revenge_2',
'Opportunity_the_price_of_revenge_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slaver('slaver', "", undefined),
setup.qc.Slaver('boss', "a|was a leader of a slaving company whom you defeated", undefined),
setup.qc.Friendship('slaver', 'boss', -1000),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'boss': [
],
'dps': [
],
'healer': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
For the first time, you come face to face with your adversary.
You're the victor in this warfare, and with none of <<their $g.boss>> fellow
slaver in sight, <<they $g.boss>> boss|know it too. Despite the odds being
stacked against <<them $g.boss>>, the still-dignified leader of the slaving
company remains self-possessed despite the situation.
</p>
<p>
"For what it's worth," <<they $g.boss>> boss|say without preamble,
"I had nothing against you. It was all business — a little harmless blackmail
is something you would also do in my position. I never took any sexual
pleasure from your slaver, and <<they $g.slaver>> slaver|remain healthy under my
care."
<<They $g.boss>> boss|look nervous for the first time.
"So, what do we do now? I've amassed enough personal wealth in my fort,
enough to pay you back all the money you've sent over to me and then some.
Let me go. I'll walk away, and I'll give away all the money I have left,
and also <<rep $g.slaver>> of course."
</p>
<<unitcard $g.boss 1>>Accept<p>
You accept, magnanimous in victory.
"I don't think I would have done that," <<they $g.boss>> replies.
"Thank you. I'll not forget this."
</p>
<p>
With that, <<they $g.boss>> left you at the entrance of a hidden door inside
the fort before leaving for good. A wealth of treasure lies behind, no doubt
were saved for when <<they $g.boss>> boss|was planning to retire.
But more importantly, you've also rescued your long-lost slaver.
</p>
<<include 'ThePriceOfRevengeCommonRescue'>><p>
Upon seeing you,
<<rep $g.slaver>>
<<if $g.slaver.isFemale()>>dives<<else>>runs<</if>>
into your <<ubreasts $unit.player>>,
<<if $g.slaver.isHasTrait('per_cautious')>>
sobbing
<<elseif $g.slaver.isHasTrait('per_brave')>>
<<else>>
holding back <<their $g.slaver>> tears while saying
<</if>>
"<<They $g.boss>> made me do such humiliating things...".
You <<uadv $unit.player>> wrap your <<uarms $unit.player>> around <<them
$g.slaver>> in a comforting hug.
True to the former leader's word, <<they $g.slaver>> slaver|look exactly as you
remember, to your great relief.
</p>Refuse and enslave <<if $g.boss>><<them $g.boss>><</if>><p>
You coldly decline. "That was a mistake," <<they $g.boss>> boss|reply, before
taking a magical scroll and chanting it out loud. As a loud magical sound can be
heard from all across the fort, the former leader continues.
"All the remaining valuables in this fort has been teleported away. You'll
get nothing from me." It's true. Even after <<rep $g.dps>> and <<utheirrel
$g.dps $g.healer>> <<rep $g.healer>> scour through the entire fort,
everything of value seems to have gone completely missing.
</p>
<p>
Still, <<rep $g.dps>> makes quick work and soon you are treated to the
delicious moment of finding the former leader on <<their $g.boss>> knees in
front of you with a black bag over <<their $g.boss>> head and <<their $g.boss>>
<<uhands $g.boss>> tied securely
behind <<them $g.boss>>, ready for a long trip home. <<They $g.boss>> boss|is one
of your slaves now, fundamentally no different than any other.
</p>
<p>
As delicious as the sight of a former slave company leader being put in
<<their $g.boss>> place, you are also here to rescue <<rep $g.slaver>>.
Fortunately, <<rep $g.slaver>> slaver|was not teleported away, and after some
scouring <<yourrep $g.dps>> managed to find the <<man $g.slaver>> stowed away in
the basement of the fort.
</p>
<p>
<<include 'ThePriceOfRevengeCommonRescue'>>
</p>
<p>
You will hear back from this in a week from now...
</p>Recruit <<if $g.boss>><<them $g.boss>><</if>> instead<p>
You decline, with a different idea in mind. "That was a mistake," <<they
$g.boss>> boss|reply, before taking a magical scroll and chanting it out.
Realizing your mistake, you immediately try to convey your true message: that
you approve of <<their $g.boss>> doings and would like to recruit <<them
$g.boss>> into your company instead. But by the time your message reaches the <<man
$g.boss>>, it was already too late — many valuables in the fort has been
teleported away.
</p>
<p>
You have to repeat your offer a few times before the thick-headed <<urace
$g.boss>> finally boss|get it. As the former slaver boss realizes <<their $g.boss>> luck, you
can see <<their $g.boss>> dignity returns. "That is incredibly benevolent of
you, but also a very smart decision," <<they $g.boss>> says after a long pause.
Having been rescued from a surefire future of slavery will surely earn you
the loyalty of the slaver, and although <<they $g.boss>> will not lead a
slaving company again, retirement as a slaver is surely much preferable to
that of being a slave.
</p>
<p>
Still, you are also here to rescue <<rep $g.slaver>>.
With <<rep $g.boss>> on your side, you locate your <<man $g.slaver>> quickly
in the basement of the fort. True to <<their $g.boss>> words, your slaver was
relatively untouched, although you can still sense <<their $g.slaver>> hatred
towards your new slaver <<rep $g.boss>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'restore_the_empathy', /* key */
"Restore the Empathy", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'desert',
],
1, /* expiration weeks */
'Opportunity_restore_the_empathy',
setup.qdiff.hard36, /* difficulty */
[ /* options */
[
'Opportunity_restore_the_empathy_0',
'Opportunity_restore_the_empathy_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Trait('slave', setup.trait.per_lavish),
setup.qc.AddTitle('slave', 'quest_empathy_restored_4'),
],
],
[
'Opportunity_restore_the_empathy_1',
'Opportunity_restore_the_empathy_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
[ /* outcomes */
setup.qc.VarAdd('broken_wings_dark', 1, -1),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Trait('slave', setup.trait.per_frugal),
setup.qc.AddTitle('slave', 'quest_empathy_restored_4'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slave': [
],
'orc': 'subrace_orc',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
Having obtained the yellow-colored shard from the scary orc <<lady $g.orc>>,
it is time to return the essence back to your unresponsive slave
<<rep $g.slave>>. Right?
</p>Bless with generosity<p>
A bright yellow light emanates from the shard as you bring it closer to <<yourrep
$g.slave>>. The shard is then absorbed directly into <<their $g.slave>> head.
Yellowish substance visibly flows from the shard into <<their $g.slave>> mind, until
the shard is reduced to nothingness.
While <<their $g.slave>> mind still remains broken, the color of <<therace $g.slave>>'s face
is healthier now, perhaps this is part of the correct path to restore <<them
$g.slave>> back to a that of a functional sex toy.
</p>Corrupt the essence<<set _u = $company.player.getUnits({job: setup.job.slaver}).filter(u => u.isHasTrait('magic_dark'))[0]>>
<<if _u>>
<p>
<<if _u.isYou()>>
With an evil smirk, you focus the darkest energy within you, channeling your
<<else>>
<<Yourrep _u>>
flashes a grin as you tell <<them _u>> your about depraved plan. <<They _u>>
immediately gets to work, channeling <<their _u>>
<</if>>
mastery over <<rep setup.trait.magic_dark>> over to the shard. Soon, the
shard's color turns from bright yellow to purplish, a sure sign that the
corruption is successful.
Despite the corruption, <<reps $g.slave>> body still accepts the shard as part
of <<them $g.slave>>, absorbing it fully until the shard is reduced to
nothingness. Even though there are seemingly no trace of the corruption in the slave,
<<if _u.isYou()>>
you can feel
<<else>>
<<rep _u>> tells you that <<they _u>> can feel
<</if>>
a dark, evil presence inside the slave's mind now...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'restore_the_joy', /* key */
"Restore the Joy", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'vale',
],
1, /* expiration weeks */
'Opportunity_restore_the_joy',
setup.qdiff.hard26, /* difficulty */
[ /* options */
[
'Opportunity_restore_the_joy_0',
'Opportunity_restore_the_joy_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Trait('slave', setup.trait.per_kind),
setup.qc.AddTitle('slave', 'quest_joy_restored_2'),
],
],
[
'Opportunity_restore_the_joy_1',
'Opportunity_restore_the_joy_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
[ /* outcomes */
setup.qc.VarAdd('broken_wings_dark', 1, -1),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Trait('slave', setup.trait.per_cruel),
setup.qc.AddTitle('slave', 'quest_joy_restored_2'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slave': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
A stone powerful enough to turn an evil, vindictive witch into a caring woman
— this must be the essence of kindness that once belonged to <<rep $g.slave>>.
It is time for the essence to perhaps return to its owner...
</p>Bless with kindness<p>
Reddish light begins to shine brighly from inside the sphere as you bring it
closer to <<yourrep $g.slave>>. Once pressed again <<their $g.slave>>
<<ubreasts $g.slave>>, you can see the stone visibly melts, being absorbed
into the slave's heart until it is swallowed entirely. Immediately the
slave's complexion begins to shift from pure pale to a livelier color, as if
<<their $g.slave>> heart works better now that it is filled with kindness.
Perhaps this is the correct path to eventually unlocking the slave's
true personality...
</p>Corrupt the essence<<set _u = $company.player.getUnits({job: setup.job.slaver}).filter(u => u.isHasTrait('magic_dark'))[0]>>
<<if _u>>
<p>
This world does not need kindness, and you are doing the slave's a service by
<<if _u.isYou()>>
personally using your mastery over <<rep setup.trait.magic_dark>> to corrupt the stone.
<<else>>
asking <<yourrep _u>> to use <<their _u>> mastery over <<rep setup.trait.magic_dark>> to corrupt the stone.
<</if>>
The once reddish stone soon turns dark purple, and once it's fully corrupted,
you return to the slave's cell. Pressing the stone onto <<their $g.slave>>
<<ubreasts $g.slave>>, the slave lets out a moan as the stone slowly dissolves
into them, spreading the corrupted essence directly into <<their $g.slave>>
heart. With the stone entirely absorbed, the slave's complexion starts to
shift from entirely pale into a livelier color, although you can sense trace
of malice here and there from the slave's body...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'restore_the_lust', /* key */
"Restore the Lust", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'forest',
],
1, /* expiration weeks */
'Opportunity_restore_the_lust',
setup.qdiff.hard31, /* difficulty */
[ /* options */
[
'Opportunity_restore_the_lust_0',
'Opportunity_restore_the_lust_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.AddTitle('slave', 'quest_lust_restore_3'),
setup.qc.Trait('slave', setup.trait.per_chaste),
],
],
[
'Opportunity_restore_the_lust_1',
'Opportunity_restore_the_lust_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
[ /* outcomes */
setup.qc.VarAdd('broken_wings_dark', 1, -1),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.AddTitle('slave', 'quest_lust_restore_3'),
setup.qc.Trait('slave', setup.trait.per_sexaddict),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slave': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
Given what happened to the neko, this green-tinted stone must be the essence
of chastity, perhaps part of the former identity of what makes <<rep
$g.slave>> <<therace $g.slave>> <<they $g.slave>> is. And it is time to
return it, unless...?
</p>Bless with chastity<p>
A pleasant green light shines from within the stone, filling the room in
a relaxing green color. Within moments, all the green energy is absorbed into
<<reps $g.slave>> <<ugenital $g.slave>>, visibly taking shape into a green
lock-like image, before vanishing entirely without trace.
You can see <<their $g.slave>> <<ugenital $g.slave>> becoming healthier now,
no longer perfectly pale in color.
Perhaps chastity is a part of <<their $g.slave>> former identity, and
restoring it might bring you one step closer to restoring the slave's
mind...
</p>Corrupt the essence<<set _u = $company.player.getUnits({job: setup.job.slaver}).filter(u => u.isHasTrait('magic_dark'))[0]>>
<<if _u>>
<p>
If what you guess is right, then this must be the spirit of chastity, which would
ensure that <<rep $g.slave>> would want for nothing more than just one
partner. But what a shame that would be, not knowing the joy of having
multiple lovers. And hence with an evil smirk,
<<if _u.isYou()>>
you project your mastery over darkness unto the stone,
<<else>>
you ask <<yourrep _u>>
to project <<their _u>> mastery over darkness unto the stone,
<</if>>
channeling dark corrupted energy into the stone of chastity.
Soon enough, the green glow turns purple, and that's when you know it's time
to bring it to <<yourrep $g.slave>>.
</p>
<p>
The stone's essence is absorbed seemingly into the slave's <<ugenital
$g.slave>>, until the stone entirely vanish. You can see <<their $g.slave>>
<<ugenital $g.slave>> briefly turn purplish in color,
becoming painfully <<wet $g.slave>> for a moment before returning back to normal.
Perhaps you have made the right decision if you would like to eventually transform
the unresponsive slave into a sex toy that behaves more to your liking...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'restore_the_spirit', /* key */
"Restore the Spirit", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'trait',
],
1, /* expiration weeks */
'Opportunity_restore_the_spirit',
setup.qdiff.hard41, /* difficulty */
[ /* options */
[
'Opportunity_restore_the_spirit_0',
'Opportunity_restore_the_spirit_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTitle('slave', 'quest_spirit_restored_5'),
setup.qc.TraitReplace('slave', setup.trait.per_studious),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
],
],
[
'Opportunity_restore_the_spirit_1',
'Opportunity_restore_the_spirit_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_dark]),
],
[ /* outcomes */
setup.qc.AddTitle('slave', 'quest_spirit_restored_5'),
setup.qc.TraitReplace('slave', setup.trait.per_active),
setup.qc.VarAdd('broken_wings_dark', 1, -1),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slave': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _u = setup.getAnySlaver()>>
<p>
Having obtained the essence of spirit, it is time to return it to your
broken slave <<rep $g.slave>>. But perhaps there is something you'd like to
do first?
</p>Bless with diligence<p>
The stone begins to emit a faint blue glow as you press it into <<reps $g.slave>>
<<ubreasts $g.slave>> — the essence flowing from within into <<their
$g.slave>> limbs. Eventually the stone is reduced to nothingness, and while
there does not seem to be anything that have changed about <<yourrep $g.slave>>, you
can see <<their $g.slave>> limbs colors changing into a livelier shade of color. Surely
this is the correct path to restoring <<their $g.slave>> spirit?
</p>Corrupt the essence<<set _u = $company.player.getUnits({job: setup.job.slaver}).filter(u => u.isHasTrait('magic_dark'))[0]>>
<<if _u>>
<p>
Without any specific reason,
<<if _u.isYou()>>
using your
mastery over <<rep setup.trait.magic_dark>>,
you begin to chant corruption magic, pushing it all into the stone.
<<else>>
you ask <<yourrep _u>> to use <<their _u>>
mastery over <<rep setup.trait.magic_dark>> to corrupt the stone.
<</if>>
Within moments, the once clear-blue stone begins to darken, and purple swirls
can be seen from inside. Satisfied, you then press the stone into <<rep
$g.slave>>, whose body visibly absorbs the corrupted essence. It's unclear
what effect this have, but once the essence is entirely absorbed, the change
in <<their $g.slave>> physique is apparent. <<Their $g.slave>> limbs are
healthier now, although you can see traces of evil emanating from <<therace
$g.slave>>...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'a_name', /* key */
"A Name", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unknown',
],
1, /* expiration weeks */
'Opportunity_a_name',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_a_name_0',
'Opportunity_a_name_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '52', -1),
],
],
[
'Opportunity_a_name_1',
'Opportunity_a_name_1_flavor',
[ /* costs */
setup.qc.MoneyCustom(-3000),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Favor('neko', 150),
setup.qc.VarSet('quest_brothel_progress', '52', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
It has been several months since the grand reopening of <<attach _describe>>,
and the brothel is starting to take shape.
The structure is servicable, the security is present, and your <<men
$g.head>> working there now possess a working knowledge on the art of
<<if _class > 0>>
entertaining clients in the middle of sex.
<<else>>
giving
sexual pleasure.
<</if>>
All in all, it's turning into a quaint little brothel.
</p>
<p>
But as it is, your brothel is simply known as "the brothel" by the customers and workers alike.
<<Yourrep $g.owner>> as well as the head whore <<name $g.head>> both come with a proposal to properly name the establishment.
A name would do much for the morale of the workers, and will make it easier for your brothel's name to spread by word of mouth.
</p>
<p>
The responsibility of picking the name of the brothel thus falls to you. You
can also celebrate the official naming by letting customers enjoy your
establishment's services for free for a day, if you wish.
</p>Name your establishment, but don't celebrate<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<p>
You've decided to be frugal and save up on your money. After all, a brothel's
purpose is to make money, and celebrations only serve to waste them. Thus the
brothel is renamed without much outside fanfare, although your <<men $g.head>>
still celebrate the new name with a drink or two,
as well as giving their customers for the day
<<if _class < 0>>
a free extra blowjob or two.
<<else>>
a peek inside their butts as they dance.
<</if>>
</p>
<<include 'Opportunity_a_name_brothelCommon'>>Name your establishment, and make the establishment free for a day<<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
With the money from your company's coffers, the brothel has been decorated for the grand celebration. Customers are free to peruse make use of all the brothel's facilities for the day,
including
<<if _class < 0>>
using the whore's experienced orifices.
<<else>>
watching the whore's dance and performance.
<</if>>
Many citizens of <<lore location_npc>> come to the brothel, and they view your company with a better light after such generosity.
</p>
<<include 'Opportunity_a_name_brothelCommon'>><<set $gMenuVisible = false>>
<<set _name = setup.dutytemplate.questbrothelmanager.randomizeBrothelName()>>
<p>
From today on, your brothel shall be known as
<<textbox "_brothelname" _name>>.
</p>
<div>
<<focbutton 'Confirm and continue' 'OpportunityList'>>
<<run setup.dutytemplate.questbrothelmanager.setBrothelName(_brothelname)>>
<</focbutton>>
</div>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'brothel_expansion', /* key */
"Brothel Expansion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_brothel_expansion',
setup.qdiff.normal49, /* difficulty */
[ /* options */
[
'Opportunity_brothel_expansion_0',
'Opportunity_brothel_expansion_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', 10, -1),
setup.qc.VarSet('quest_brothel_progress', '76', -1),
setup.qc.VarSet('quest_brothel_facility', 'rooms', -1),
],
],
[
'Opportunity_brothel_expansion_1',
'Opportunity_brothel_expansion_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', -10, -1),
setup.qc.VarSet('quest_brothel_progress', '76', -1),
setup.qc.VarSet('quest_brothel_facility', 'dungeons', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
You have expanded <<attach _describe>>, but there is still space for one more facility in the brothel. You have a choice between building a set of private rooms, or a full-blown sex dungegons.
</p>
<p>
The private rooms would allow guests and the whore of their choice some much-needed privacy, and they can engage in an even more intimate and raunchy actions, including
<<if _sub == 'sub'>>
dominating the whores to their heart content.
<<else>>
allowing themself to be dominated by their chosen whores without anybody knowing.
<</if>>
Having a luxurious rooms such as this will no doubt increase your revenue, and may also increase the classiness of your fine establishment.
</p>
<p>
Meanwhile, a sex dungeons is made for bondage, and each room will be fully furnished with manacles and other bondage devices.
<<if _sub == 'sub'>>
Paying customers would be able to punish their chosen whores as they see fit — no permanent damage of course.
<<else>>
Your dominant whores would be able to satisfy the darkest desires of the more submissive clients — no permanent damage of course.
<</if>>
Having such an option will no doubt increase your revenue, and also make your brothel appear raunchier than ever...
</p>Private rooms<p>
It is done. Several rows of high-quality luxury rooms have been furnished within your brothel. They are available for paying customers to peruse, no doubt increasing the brothel's revenue.
</p>Sex dungeons<p>
It is done. Several dungeon cells have been constructed, complete with manacles in various positions. These can be rented by paying customers, no doubt increasing the brothel's revenue.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'brothel_focus', /* key */
"Brothel Focus", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_brothel_focus',
setup.qdiff.normal44, /* difficulty */
[ /* options */
[
'Opportunity_brothel_focus_0',
'Opportunity_brothel_focus_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', 10, -1),
setup.qc.VarSet('quest_brothel_progress', '60', -1),
setup.qc.VarSet('quest_brothel_sub', 'dom', -1),
setup.qc.Trait('head', setup.trait.per_dominant),
],
],
[
'Opportunity_brothel_focus_1',
'Opportunity_brothel_focus_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', -10, -1),
setup.qc.VarSet('quest_brothel_progress', '60', -1),
setup.qc.VarSet('quest_brothel_sub', 'sub', -1),
setup.qc.Trait('head', setup.trait.per_submissive),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
<<Yourrep $g.owner>> spent the last few weeks increasing the skills of the many <<male $g.head>> whores working in <<attach _describe>>. While their general skills have certainly improved, it might be good to let your brothel specialize in a direction.
</p>
<p>
The first option is to further direct them to become the perfect submissive sluts, capable of satisfying even the most demanding clients. This will no doubt attract them more dominant or sadistic clients, and your place will surely increase in debauchery.
</p>
<p>
Alternatively, you could try to go for style and class instead. Direct your whores to
take control during sex, guiding their customers along the way. The sex
direction will be relatively tasteful, and you can even satisfy those
secretly submissive clients that are abundant throughout the city.
</p>Dominant dominatrix<p>
You've made up your mind, and the whores have heard about your decision. In the coming weeks, <<yourrep $g.owner>> as well as the head whore <<name $g.head>> will try their best to guide the whores to act more dominant towards their sexual pleasure. They should learn how to guide an inexperienced customer, and teach them that pleasure exists in both being a top and being a bottom. In time, this will hopefully turn your establishment into a somewhat classy one, where the whores are not just simple-minded sluts.
</p>Submissive sluts<p>
You've decided to lead the whores towards a path of complete submission. In the coming weeks, <<yourrep $g.owner>> as well as the head whore <<name $g.head>> will try their best to teach the whores the pleasure of bottoming. They should learn how to offer all their orifices towards their customers, and how to thoroughly enjoy the feeling of being penetrated. In time, this will hopefully turn your establishment into the center of debauchery, where the submissive sluts would beg for nothing more but being dominated by their customers.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'brothel_focus_ii', /* key */
"Brothel Focus II", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_brothel_focus_ii',
setup.qdiff.hard59, /* difficulty */
[ /* options */
[
'Opportunity_brothel_focus_ii_0',
'Opportunity_brothel_focus_ii_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '100', -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_sub', 'sub'),
setup.qc.DoAll([
setup.qc.VarAdd('quest_brothel_class', -10, -1)
], undefined),
setup.qc.DoAll([
setup.qc.VarAdd('quest_brothel_class', 10, -1)
], undefined)),
],
],
[
'Opportunity_brothel_focus_ii_1',
'Opportunity_brothel_focus_ii_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '100', -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_sub', 'sub'),
setup.qc.DoAll([
setup.qc.VarAdd('quest_brothel_class', 10, -1)
], undefined),
setup.qc.DoAll([
setup.qc.VarAdd('quest_brothel_class', -10, -1)
], undefined)),
setup.qc.VarSet('quest_brothel_sub', 'switch', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
With the bulk of the training done, it is time for the final touch.
Per your prior direction, the courtesans so far have been directed to do their best as
<<if _sub == 'sub'>>
submissive little sluts.
<<else>>
a high-class dominatrix.
<</if>>
You must now decide whether to advance this further, or to switch to something else.
</p>
<p>
The first option is to dedicate the courtesans in your brothel fully to being
<<if _sub == 'sub'>>
the most submissive little sluts anyone would ever get in the region.
This will turn your establishment into a paradise for dominants, with needy submissive courtesans ready to be rented to satisfy your clients' desires. A high-class den of debauchery, if you will.
<<else>>
the most dominant courtesans you'll ever seen in your life. This will turn your establishment into a paradise for secretive sluts, with the most dominant courtesans ready to whip discipline into submissive little clients, or simply to enjoy lovemaking between to perfectly equal doms. And it will all be done in style.
<</if>>
</p>
<p>
Alternatively, you could make your courtesans more flexible. Instead of going full
<<if _sub == 'sub'>>
submissive,
<<else>>
dominant,
<</if>>
the courtesans could be taught how to enjoy both being a submissive and also
being a dominant. A "switch", if you'd like. While they won't be able to match a pure
submissive slut's desire to be dominated, nor a pure dominant's ego, their
flexibility will attract a wider range of clients.
</p><<if setup.dutytemplate.questbrothelmanager.sub() == 'sub'>>Full submissive<<else>>Full dominant<</if>><<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<p>
Having heard your decision to double down on the courtesans'
<<if _sub == 'sub'>>
submissive
<<else>>
dominant
<</if>>
tendencies, <<yourrep $g.owner>> immediately owner|resume <<their $g.owner>> work.
<<if $g.owner.isHasTrait('per_active')>>
(Which is nothing short of a miracle, considering how lazy <<theslaver $g.owner>> usually owner|is.)
<<elseif $g.owner.isHasTrait('per_studious')>>
(Completely in character with the diligent slaver.)
<</if>>
Using the
<<if _facility == 'dungeons'>>
sex dungeons
<<else>>
private rooms
<</if>>
as a makeshift classroom, <<therace $g.owner>> owner|hold a meeting letting the now high-class courtesans know about the direction of the brothel.
<<if _sub == 'sub'>>
Their customers are kings and queens now, and they must worship them like one.
<<else>>
Their customers are their slaves now, and they must treat them as they deserve.
<</if>>
As the next days pass, the sounds of whipping can be heard coming from the complex, which sometimes make you wonder who is it that got lucky with the right side of the whip.
</p>Switch<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<p>
Having heard your decision to
broaden the courtesans' scopes,
<<yourrep $g.owner>> immediately owner|resume <<their $g.owner>> work.
<<if $g.owner.isHasTrait('per_active')>>
(Which is nothing short of a miracle, considering how lazy <<theslaver $g.owner>> usually owner|is.)
<<elseif $g.owner.isHasTrait('per_studious')>>
(Completely in character with the diligent slaver.)
<</if>>
Using the
<<if _facility == 'dungeons'>>
sex dungeons
<<else>>
private rooms
<</if>>
as a makeshift classroom, <<therace $g.owner>> owner|hold a meeting letting the now high-class courtesans know about the new direction of the brothel.
They must learn to both top and bottom, and to extract pleasure from their customers as both roles.
Sounds of moaning and guttural scream of pleasure could be heard coming from the complex in the next few days...
</p><<run new setup.OpportunityTemplate(
'brothel_palace', /* key */
"Brothel Palace", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_brothel_palace',
setup.qdiff.normal64, /* difficulty */
[ /* options */
[
'Opportunity_brothel_palace_0',
'Opportunity_brothel_palace_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', 10, -1),
setup.qc.VarSet('quest_brothel_progress', '116', -1),
setup.qc.VarSet('quest_brothel_attraction', 'gravity', -1),
],
],
[
'Opportunity_brothel_palace_1',
'Opportunity_brothel_palace_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarAdd('quest_brothel_class', -10, -1),
setup.qc.VarSet('quest_brothel_progress', '116', -1),
setup.qc.VarSet('quest_brothel_attraction', 'bondage', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The luxurious new building of <<attach _describe>> is complete, and there is a room for one final amenity. You should choose a special attraction that cannot be found anywhere else but in your brothel, and <<yourrep $g.owner>> owner|have given you two options to choose from, both making full use of the head courtesan <<name $g.slave>>'s magical affinity.
</p>
<p>
The first option is to construct a magical gravity room. This room will use magical crystals to channel wind and pressure upwards, cancelling gravity out. Anyone inside the room will be suspended in the air, which will allow them to engage in sexual activity unlike any others, including the sensation of flying while being fucking mercilessly. Truly a classy attraction fit for your high-class brothel.
</p>
<p>
Alternatively, if you'd prefer something more raunchy, you could transform the room into a magical bondage room. The room will be fitted with enchanted manacles and sex toys, which can be used to many great effects, including forcing a hard-on as well as inflicting pain.
<<if _sub == 'sub'>>
Your clients could use these devices to punish your submissive courtesans to great effect.
<<elseif _sub == 'dom'>>
Your dominant courtesans could get very creative using these devices to punish their submissive clients.
<<else>>
The client is free to choose how they would prefer to use this, either to inflict pain and pleasure upon the willing courtesan or the other way around.
<</if>>
</p>Magic Gravity Room<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The centermost chamber of your brothel has been transformed into the Magic Gravity Room. (Expensive) Magical crystals are planted on the bottom of the floor, and the head courtesan <<name $g.slave>> can channel <<their $g.slave>> magic in order to activate these crystals. Once activated, a moderate stream of wind pushes out from underneath, countering the gravity and letting anyone inside the room to float harmlessly.
</p>
<p>
With the room fully functional, it is now up to the client's creativity how wild they want the sex to be.
<<if _sub == 'sub'>>
They could experience the joy of fucking your submissive sluts in the air, the feeling of anti-gravity fucking must be exhilarating.
<<elseif _sub == 'dom'>>
They could experience the joy of being fucked by your dominant courtesans in the air, including the sensation of a <<if $g.head.isHasDick()>>cock<<else>>strap-on<</if>> grazing their inner walls without being affected by gravity.
<<else>>
They could try both the experience of fucking and being fucked in the air — the feeling of anti-gravity fucking would be a new and an exciting territory.
<</if>>
All that remains now is to wait for the prospective and definitely well-paying customer.
</p>Magic Bondage Room<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The centermost chamber of your brothel has been transformed into the Magic Bondage Room. While there are still traditional manacles and fetters scattered throughout the walls of the rooms, the main attraction has to be the various floating restraints, as well as the enchanted sex toys available within the room. The head courtesan <<name $g.slave>> can channel <<their $g.slave>> magic in order to activate these crystals. Once activated, the sex toys and manacles would come to live, with various shocking effects.
</p>
<p>
With the room fully functional, it is now up to the client's creativity how wild they want the sex to be.
<<if _sub == 'sub'>>
They could experience a sadistic delight in torturing and pleasuring your submissive and borderline masochistic courtesans at the same time with advanced magical bondage, spreading their bodies in however unnatural way they wish.
<<elseif _sub == 'dom'>>
They could experience the masochistic delight in being tortured and pleasured at the same time by your dominant courtesans, be it with the magical bondage bending their bodies in unnatural positions, or by the careful ministration of the vibrating and electrifying sex toys.
<<else>>
They could experience both the sexual delight from receiving and inflicting pain and discomfort, including using the vibrating and magically electrifying sex toys.
<</if>>
All that remains now is to wait for the prospective and definitely well-paying customer.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'brothel_promotion', /* key */
"Brothel Promotion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
'money',
'favor',
],
1, /* expiration weeks */
'Opportunity_brothel_promotion',
setup.qdiff.normal56, /* difficulty */
[ /* options */
[
'Opportunity_brothel_promotion_0',
'Opportunity_brothel_promotion_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '92', -1),
setup.qc.VarSet('quest_brothel_promotion', 'money', -1),
setup.qc.Trait('head', setup.trait.skill_connected),
],
],
[
'Opportunity_brothel_promotion_1',
'Opportunity_brothel_promotion_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '92', -1),
setup.qc.VarSet('quest_brothel_promotion', 'favor', -1),
setup.qc.Trait('head', setup.trait.skill_entertain),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Since the beginning of your ownership of <<attach _describe>>, the head whore
<<name $g.head>> had been nothing but a resourceful, helpful <<girl
$g.head>>. In fact, <<they $g.head>> managed to persuade the
<<if _class > 0>> noble <<else>> local mafia boss <</if>> to waive their
<<if _class > 0>> tax <<else>> protection money <</if>> on your establishment
last time. The manager of your brothel, <<yourrep $g.owner>>,
owner|think that <<their $g.head>> talents are wasted working as a simple
whore, and maybe a promotion is appropriate.
</p>
<p>
<<Their $g.head>> negotiation talents as well as <<their $g.head>> smarts make them the perfect fit if you are looking for a business manager to help manage the brothel's growing business. <<They $g.head>> should be able to optimize expenses, which in turn saves you some of the operation costs of your brothel each week.
</p>
<p>
Alternatively, <<they $g.head>> head|have also shown <<their $g.head>> shrewdness in dealing with other people, and <<they $g.head>> would make an excellent customer relations officer. <<They $g.head>> would ensure that all the brothel's customer leave the establishment satisfied, which should earn you some amount of favor each week from the grateful citizens of <<lore location_npc>>.
</p>Business manager<p>
The promotion was done in a simple way, within <<reps $g.owner>> office inside the brothel. From now on, <<name $g.head>> is no longer a whore — <<they $g.head>> is the business manager of the brothel now, and <<they $g.head>> is expected to manage the financials of the establishment.
</p>
<p>
You seem to have chosen well, as <<they $g.head>> set out to work immediately. <<Their $g.head>> work has been exemplary — while the changes look minimal here and there, it adds up, and eventually quite a lot of unnecessary expenses are cut. The "bring-your-own-lube" may have caused a little scandal within the establishment, but a little application of <<their $g.head>> charm and the incident was soon forgotten. It seems that despite being a business manager, <<they $g.head>> has not lost <<their $g.head>> wits and skills.
</p>Customer relations<p>
The promotion was done in a simple way, within <<reps $g.owner>> office inside the brothel. From now on, <<name $g.head>> is no longer a whore — <<they $g.head>> is the customer relations of the brothel now, and <<they $g.head>> is expected to ensure all your customers left the establishment with a smile on their faces.
</p>
<p>
You seem to have chosen well, as <<they $g.head>> set out an exemplary work. Whenever a customer looked disappointed, <<they $g.head>> dutifully attend to them, sometimes personally, and made sure their complaints were addressed.
Sometimes, <<they $g.head>> even gives a complimentary blowjob or two. It seems that despite being a customer relations officer, <<they $g.head>> has not lost <<their $g.head>> sexual skills.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"brothel_reopening0",
"Girl Whore",
'forest_allfemale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_whore),
setup.qc.TraitsReplace('unit', [setup.trait.per_studious]),
],
)>> <<run new setup.UnitGroup(
"brothel_reopening1",
"Boy Whore",
'forest_allmale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_whore),
setup.qc.TraitsReplace('unit', [setup.trait.per_studious]),
],
)>>
<<run new setup.OpportunityTemplate(
'brothel_reopening', /* key */
"Brothel Reopening", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_brothel_reopening',
setup.qdiff.normal26, /* difficulty */
[ /* options */
[
'Opportunity_brothel_reopening_0',
'Opportunity_brothel_reopening_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddUnitToUnitGroup('boy', 'brothel_cleanup0'),
setup.qc.VarSet('quest_brothel_progress', '8', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_gender', 'male', -1),
],
],
[
'Opportunity_brothel_reopening_1',
'Opportunity_brothel_reopening_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddUnitToUnitGroup('girl', 'brothel_cleanup0'),
setup.qc.VarSet('quest_brothel_progress', '8', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_gender', 'female', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
],
'girl': 'brothel_reopening0',
'boy': 'brothel_reopening1',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
You've purchased <<attach _describe>> some time ago, and
<<yourrep $g.owner>>, who is responsible for managing the place,
had worked hard trying to bring the place back up and running.
After a month of work,
<<they $g.owner>> owner|declare the place ready to open.
<<They $g.owner>> owner|is as excited as you are to own a brothel, but owner|remain level-headed.
<<if $g.owner.isHasTrait('per_aggressive')>>
(An extremely rare occurrence for the aggresive slaver.)
<</if>>
</p>
<p>
<<Rep $g.owner>> had spent the last few weeks doing some research over to the other brothels in <<lore location_npc>>, and has come to the conclusion that your brothel will need to focus in order to draw in more customers. As the de-facto owner of the place, you'll need to make the decision on whether you want to focus providing the best girls in town, or the best dicks in town. Once the decision is made, the workers with the right genders will be employed as whores, while the rest will help out with the running of the brothel.
</p>Offer boys<<set _u = $g.boy>>
<<include "QuestBrothelReopeningCommon">><p>
You make up your mind, and designated your brothel to provide the best
<<if _u.isHasDick()>>stiff dicks<<else>>wet pussies<</if>> in town.
<<Yourrep $g.owner>> owner|announce the re-opening, and the workers of the brothel
cautiously cheer. The door to your brothels is now open for public,
although given the state of the brothel and its workers, you wonder if it'll
actually drawn in any customers at all...
</p>Offer girls<<set _u = $g.girl>>
<<include "QuestBrothelReopeningCommon">>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'intense_brothel_training', /* key */
"Brothel Training", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
1, /* expiration weeks */
'Opportunity_intense_brothel_training',
setup.qdiff.normal32, /* difficulty */
[ /* options */
[
'Opportunity_intense_brothel_training_0',
'Opportunity_intense_brothel_training_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '28', -1),
setup.qc.VarAdd('quest_brothel_class', 10, -1),
],
],
[
'Opportunity_intense_brothel_training_1',
'Opportunity_intense_brothel_training_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '28', -1),
setup.qc.VarAdd('quest_brothel_class', -10, -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
],
'head': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
Having finished supervising training the employees of <<attach _describe>>,
<<yourrep $g.owner>> asked for your input on what skills these <<men $g.head>>
should try to focus on.
</p>
<p>
The first option is to focus on ther entertainment skills, which includes
singing, seductive dancing and strip-tease.
They will still need to perform sex on their clients, but it will occasionally
take a back set to entertainment.
Hopefully, they will one day
reach professional level of proficiency, which may ultimately bring your
brothel's class up a notch or two.
</p>
<p>
Alternatively, you could prioritize the more primal aspect of the brothel:
the pure act of sex itself. The workers would learn how to make their partner
more satisfied by not only with their
<<if $g.head.isHasDick()>>stiff pricks<<else>>wet pussies<</if>>, but also
with every other parts of their bodies that should be made available for
their partner for the night. This would certainly make your brothel somewhat
raunchier.
</p>Focus on entertainment<p>
Having made up your decision, you ask <<yourrep $g.owner>> to let the whores
focus on their entertainment skills. <<Rep $g.owner>> and the newly elected
head whore <<name $g.head>> spend the next few days teaching various
entertainment skills to the whore, starting easily from how to properly sway
their bodies in time with the music, and how to make love with a wooden pole.
At the end of the week, the workers are more confident in their entertainment
skills, and your brothel begins its first step to gain reputation as a
higher-class entertainment venue.
</p>Focus on sex<p>
Having made up your decision, you ask <<yourrep $g.owner>> to let the whores focus on their sexual skills. <<Rep $g.owner>> and the newly elected head whore <<name $g.head>> spend the next few days
<<if $g.owner.isHasDick() and $g.head.isHasDick()>>using both their stiff pricks<<elseif $g.owner.isHasVagina() and $g.head.isHasVagina()>>using both their pussies
<<else>>
using their dick and pussy<</if>>
to teach the various sexual acts one could do with every part of their
bodies. The whores learn, probably for the very first time in their life,
that their <<if $g.head.isHasDick()>>dicks<<else>>pussies<</if>> are not the
only sexual organ they have.
By the end of the week, the workers are much raunchier than before, ready to
engage and introduce their customers to an entirely new dimension of sex.
With this, your brothel begins its first step to become a fully debauched
whorehouse.
</p><<run new setup.OpportunityTemplate(
'brothel_suite', /* key */
"Brothel Suite", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
],
1, /* expiration weeks */
'Opportunity_brothel_suite',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_brothel_suite_0',
'Opportunity_brothel_suite_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Opportunity_brothel_suite_1',
'Opportunity_brothel_suite_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Opportunity_brothel_suite_2',
'Opportunity_brothel_suite_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _dom = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Your brothel <<attach _describe>> is housed within
<<if _class >= 20>>
a grand palace complex,
<<elseif _class <= -20>>
an intimidating demonic palace complex,
<<else>>
an exotic palace complex,
<</if>>
standing out from the rest of the buildings in the area.
You have your own personal suite inside too, which
<<if _class >= 20>>
is luxuriously furnished with furniture made with highest grade wood.
<<elseif _class <= -20>>
is fully equipped with all sort of bondage equipments.
<<else>>
is complete with an indoor garden.
<</if>>
Whenever you decide to visit or stay in your brothel, you stay there, and sometimes you get one of the two lucky courtesans to join you as well.
</p>
<p>
<<successtext "This is a rare opportunity for you to have sex with these people.">> But there are no other effects.
</p>Have sex with your ex-whore <<name $g.head>><<set $gInteractiveSexUnitIds = [$unit.player.key, $g.head.key]>>
<<set $gInteractiveSexLocation_key = 'brothelsuite'>>
<<include "SexSetup">>Have sex with the head courtesan <<name $g.slave>><<set $gInteractiveSexUnitIds = [$unit.player.key, $g.slave.key]>>
<<set $gInteractiveSexLocation_key = 'brothelsuite'>>
<<include "SexSetup">>Have sex with <<yourrep $g.owner>><<set $gInteractiveSexUnitIds = [$unit.player.key, $g.owner.key]>>
<<set $gInteractiveSexLocation_key = 'brothelsuite'>>
<<include "SexSetup">><<run new setup.OpportunityTemplate(
'brothel_volunteer', /* key */
"Brothel Volunteer", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unit',
'ire',
],
1, /* expiration weeks */
'Opportunity_brothel_volunteer',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_brothel_volunteer_0',
'Opportunity_brothel_volunteer_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarAdd('quest_brothel_high_income', 2, -1),
],
],
[
'Opportunity_brothel_volunteer_1',
'Opportunity_brothel_volunteer_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.Slave('volunteer', "offered a|themself to work in your brothel to escape a life of boredom, only to be enslaved instead", undefined),
setup.qc.Ire('neko', 3),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
setup.qres.Home(),
],
'volunteer': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
<<Yourrep $g.owner>> who is responsible for managing <<attach _describe>> owner|send you a discreet message that <<they $g.owner>> may have found a slave for you. <<They $g.owner>> owner|have sent the <<girl $g.volunteer>> together with the head courtesan <<name $g.slave>> into your fort and into your office. The <<girl $g.volunteer>> volunteer|look like a dissolute party <<girl $g.volunteer>>. Face to face with the proprietor of the place — you that is — <<they $g.volunteer>> slave|bite <<their $g.volunteer>> lip nervously, and looks to <<name $g.slave>> for guidance. <<name $g.slave>> slave|nod at <<them $g.volunteer>> reassuringly, so <<they $g.volunteer>> explains <<themself $g.volunteer>>.
</p>
<p>
"<<if $unit.player.isMale()>>Sir<<else>>Ma'am<</if>>, my name is <<name $g.volunteer>>. I'm, um, bored, I guess. I go to brothels and get drunk and fuck
<<if $g.head.isMale()>>guys<<else>>girls<</if>> and it's just kinda boring. But when I go into <<= _name>>, I saw <<name $g.slave>>, and <<they $g.slave>> was just so
<<if _sub == 'dom'>>
dominant and
<<elseif _sub == 'sub'>>
graceful and
<<else>>
skillful and
<</if>>
<<if $g.slave.isMale()>>
handsome, and
<<else>>
beautiful, and
<</if>>
<<if _sub == 'sub'>>
despite being a submissive slut,
<</if>>
<<They $g.slave>> seemed so confident in what <<they $g.slave>> was doing and who <<they $g.slave>> was and I talked to <<them $g.slave>> and <<they $g.slave>> said <<they $g.slave>> was your head courtesan and... I want to be like <<them $g.slave>>.
Can I work at <<= _name>>? I'd be good,
I'm good at
<<if _sub == 'dom'>>
dominating others
<<else>>
sucking dicks
<</if>>
and stuff."
<<They $g.volunteer>> seems to be a little naive about whoring, and seemingly completely unaware of your company's actual business, but there's no need to tell <<them $g.volunteer>> that.
</p>
<<unitcard $g.volunteer 1>>Let <<them $g.volunteer>> work in the brothel<p>
You accept <<their $g.volunteer>> offer to volunteer, and direct <<name $g.slave>> to begin <<their $g.volunteer>> courtesan training immediately.
Hearing that <<they $g.slave>> will receive <<name $g.volunteer>>'s attention personally, the <<girl $g.volunteer>> visiblly bounces joyfully on <<their $g.volunteer>> heels. Courtesan training will be hard and expensive for you, but later down the road the <<girl $g.volunteer>> becomes quite adept at <<their $g.volunteer>> job, and your brothel's reputation increases as a result.
</p>Enslave <<them $g.volunteer>><p>
You accept <<their $g.volunteer>> offer to "volunteer". <<Rep $g.volunteer>> bounces nervously on <<their $g.volunteer>> heels.
Finally <<they $g.volunteer>> volunteer|work up <<their $g.volunteer>> courage and asks,
"Can I work with <<name $g.slave>>?"
You sternly tell <<them $g.slave>> to call you <<Master $unit.player>>, to ask questions only with permission, and to strip. <<They $g.slave>> looks at <<name $g.slave>>, but <<they $g.slave>> slave|return <<their $g.volunteer>> look with no compassion at all and tells <<them $g.volunteer>> to do what you say. Looking suddenly fearful, <<name $g.volunteer>> volunteer|strip. Once your inspection of <<their $g.volunteer>> body reaches <<their $g.volunteer>> anus, <<they $g.volunteer>> volunteer|become suddenly nervous. "A-am I going to have t-to do butt stuff, <<Master $unit.player>>?"
As you finish your inspection on the poor unsuspecting <<girl $g.volunteer>>, you ask <<name $g.slave>> to bring <<them $g.volunteer>> over to the slave pens.
As <<name $g.slave>> slave|restrain the disbelieving <<girl $g.volunteer>>, you tell <<them $g.volunteer>> <<they $g.volunteer>> is your slave now, so <<they $g.volunteer>> can be sure <<they $g.volunteer>> won't be bored. <<They $g.volunteer>> volunteer|release a wail of utter despair, quickly cut off by a sturdy bag being fastened over <<their $g.volunteer>> head.
</p>
<p>
Unfortunately, the story of your cruelty spreads within the <<lore location_npc>>, and its citizens view you with some disdain as a result.
</p><<run new setup.OpportunityTemplate(
'job_change', /* key */
"Job Change", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'favor',
'money',
],
1, /* expiration weeks */
'Opportunity_job_change',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_job_change_0',
'Opportunity_job_change_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Opportunity_job_change_1',
'Opportunity_job_change_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent('job_change', setup.INFINITY),
],
],
[
'Opportunity_job_change_2',
'Opportunity_job_change_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.IfThenElse(
setup.qres.VarEqual('quest_brothel_promotion', 'money'),
setup.qc.DoAll([
setup.qc.VarSet('quest_brothel_promotion', 'favor', -1)
], undefined),
setup.qc.DoAll([
setup.qc.VarSet('quest_brothel_promotion', 'money', -1)
], undefined)),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
The former head whore of <<attach _describe>>, that is <<rep $g.head>>, is currently working as the brothel's
<<if _promotion == 'money'>>
business manager. <<They $g.head>> dutifully makes sure that the brothel's financials remains in the green, and ensure that there are no excess expenses leaking from the daily operations. This indirectly increases the brothel's operating profit.
<<else>>
customer relations officer. <<They $g.head>> dutifully makes sure that the customers leave the brothel satisfied. Your company's popularity among the residents of the <<lore location_npc>> increases week by week as a result.
<</if>>
</p>
<p>
While <<they $g.head>> head|have been doing a very good job so far, <<yourrep $g.owner>> owner|suggest that it may be time to let <<them $g.head>> switch job.
<<if _promotion == 'money'>>
Instead of a business manager, <<they $g.head>> could be reassigned as the customer relations officer. As a customer relations officer, <<they $g.head>> would then be responsible to ensure that all your customers leave your venue satisfied. In turn, this can increase your company's popularity among the neko, but in exchange for lowered profit.
<<else>>
Instead of a customer relations officer, <<they $g.head>> could be reassigned as the business manager. <<They $g.head>> would be responsible to ensure that the brothel remains profitable, which directly increases the operating profit. Without a customer relations officer, however, your favor with the neko will no longer increase week by week.
<</if>>
</p>Stay as <<if setup.dutytemplate.questbrothelmanager.promotion() == 'money'>>business manager<<else>>customer relations officer<</if>><p>
<<They $g.head>> head|have been doing a great job so far, and you have decided that there are no reason to change <<their $g.head>> occupation.
</p>Stay as <<if setup.dutytemplate.questbrothelmanager.promotion() == 'money'>>business manager<<else>>customer relations officer<</if>> and never ask again<p>
<<They $g.head>> head|have been doing a great job so far, and you have decided that there are no reason to change <<their $g.head>> occupation.
</p>
<p>
You've instructed <<yourrep $g.owner>> to never bother with this issue again in the future.
</p>Change to <<if setup.dutytemplate.questbrothelmanager.promotion() == 'favor'>>business manager<<else>>customer relations officer<</if>><<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
After a simple ceremony, <<yourrep $g.head>> head|is now the brothel's new
<<if _promotion == 'money'>>
customer relations officer.
<<They $g.head>> will work hard ensuring that your courtesans have satisfied the visiting customers, either with words or with a complimentary blowjob. While your brothel's profit will decline, expect your relations with the neko to improve in the future.
<<else>>
business manager. <<They $g.head>> will work hard ensuring that your brothel's expenses remain manageable from now on. Expect your brothel's profit to increase in the future, but your relations with the neko will no longer improve week by week.
<</if>>
</p><<run new setup.OpportunityTemplate(
'mistwalker_visit', /* key */
"Demon Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unit',
'ire',
],
1, /* expiration weeks */
'Opportunity_mistwalker_visit',
setup.qdiff.hardest69, /* difficulty */
[ /* options */
[
'Opportunity_mistwalker_visit_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarSet('quest_brothel_royal_visit', '1', -1),
setup.qc.Slaver('target', "a|was a mistwalker impressed by your brothel and decided to join your company out of boredom", undefined),
],
],
[
'Opportunity_mistwalker_visit_1',
'Opportunity_mistwalker_visit_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.magic_fire_master]),
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarSet('quest_brothel_royal_visit', '1', -1),
setup.qc.RemoveTitleGlobal('quest_brothel_owner_0'),
setup.qc.Ire('demon', 20),
setup.qc.Slave('target', "a|was a mistwalker impressed by your brothel and decided to join your company out of boredom, but got enslaved instead", undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The demon royalty who had patroned your brothel has appeared at your office, to personally meet with you, the proprietor of the brothel. While <<their $g.target>> face feigns indifference, <<their $g.target>> <<if $g.target.isHasDick()>>stiff prick<<else>>wet cunt<</if>> tells a very different story about the quality of your brothel's services. It seems that they were able to satisfy the demon client quite well.
</p>
<p>
With that, the demon surprisingly offers to join your company. No doubt <<they $g.target>> target|is hoping that <<they $g.target>> will get <<their $g.target>> <<uhands $g.target>> on even more submissives of the mortal plane, having grown bored with the likes found in the land beyond <<lore concept_mist>>. Having such a powerful and intimidating slaver would no doubt be useful for your company.
</p>
<p>
However, if you are feeling particularly brave and foolish, you could feign acceptance, only to enslave the demon later. You would need a slaver proficient with <<rep setup.trait.magic_fire_master>> to bind the demon into this plane forever, however, and you will also no doubt anger the demon's court. They may even retaliate against your brothel, and choosing this option is very likely to <<dangertext "cut your brothel career short">>. But this could be an extremely rare opportunity to get your <<uhands $unit.player>> on a demon royalty...
</p>
<<unitcard $g.target 1>>RecruitEnslave<p>
Your contacts in the <<lore region_desert>> tell you that a small demonic army was seen marching for <<lore location_npc>>, no doubt to exact revenge on the brothel for the fallen demonic royalty.
Your brothel is effectively exchanged for a slave. But seeing the dominant slave quivering in anger having being bound to the mortal plane with advanced fire magic makes all of these worth it. Nothing feels better than breaking a former master, after all.
</p><<run new setup.OpportunityTemplate(
'pants_of_competence', /* key */
"Pants of Competence", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'item',
],
1, /* expiration weeks */
'Opportunity_pants_of_competence',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_pants_of_competence_0',
'Opportunity_pants_of_competence_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Opportunity_pants_of_competence_1',
'Opportunity_pants_of_competence_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.SetCooldownEvent('pants_of_competence', setup.INFINITY),
],
],
[
'Opportunity_pants_of_competence_2',
'Opportunity_pants_of_competence_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.RemoveTitleGlobal('quest_brothel_owner_0'),
setup.qc.EquipmentDirect('sex_legs_master'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
As the manager of <<attach _describe>>, <<yourrep $g.owner>> owner|have to deal with many problems. There are the occasional fist-fights, a customer who refuses to pay, or a courtesan who fell ill. There are also occasional swindlers who tried to fool <<therace $g.owner>>, but so far <<they $g.owner>> owner|have been doing a good job resolving all these issues.
</p>
<p>
In a latest report, <<they $g.owner>> owner|have rejected an offer to "purchase" the brothel in exchange for a legendary piece of clothing, the <<rep setup.equipment.sex_legs_master>>. According to the prospective buyer, these pants are made from magnificent fabric, a magical piece of clothing that would turn invisible to whoever dumb or unfit for their positions.
<<if $g.owner.isHasTrait('per_smart')>>
The smart slaver did not trust any of those words, of course, and refused the deal.
<<elseif $g.owner.isHasTrait('per_logical')>>
The logical slaver knew better to trust those words, of course, and refused the deal.
<<elseif $g.owner.isHasTrait('per_proud')>>
The proud slaver claims to you that <<they $g.owner>> obviously could see the magnificent piece of clothes, (being easily the best slaver in your company bar none, according to <<therace $g.owner>>) but ultimately decided that there is no way a piece of clothes could match the value of your brothel and refused the deal.
<<else>>
<<Yourrep $g.owner>> claims to you that <<they $g.owner>> can obviously see the clothes, (being one of the best slavers in your employ and all) but refused the deal simply because it could not match the value of your brothel.
<</if>>
</p>
<p>
Still, this piece of clothings do intrigue you. After all, you are obviously fit for your job,
and
<<if $g.owner.isHasTrait('per_proud')>>
your somewhat excessive pride
<<else>>
your pride
<</if>>
demands that you should test this fact out.
You could complete the deal by exchanging your brothel for this magnificent piece of invisible pants. Would you?
</p>Reject the absurd trade<p>
Of course you are not going to trade your brothel for such a scam.
They'll have to think twice before they could swindle you.
</p>Reject and reject all future trades<p>
Of course you are not going to trade your brothel for such a scam.
They'll have to think twice before they could swindle you.
</p>
<p>
You instruct <<yourrep $g.owner>> to reject all similar offers in the future.
</p>Accept<p>
Against your and <<yourrep $g.owner>>'s obviously better judgment, you decided to trade your brothel for a pants. Your hard work over these past few months is gone now, but in exchange you have the elusive <<rep setup.equipment.sex_legs_master>>.
</p>
<p>
The pants now "lie" on your desk. It's very light, almost air-light, as if there are no pants at all.
The fabric is so thin that you can't feel anything when touching or wearing the pants, as if the air freely permeates through the pants itself.
And most importantly, you can definitely see the pant. Yes indeed, if you squeeze your eyes hard enough, there is a faint blurry trace of... something on your desk. Definitely not just your work papers. After all, you are the most competent <<man $unit.player>> for the position of leading your company, and there is no way you are too dumb to not be able to see the pants.
</p>
<p>
Truly a magnificent artifact worthy of being traded with your brothel.
</p><<run new setup.OpportunityTemplate(
'royal_visit', /* key */
"Royal Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unit',
'ire',
],
1, /* expiration weeks */
'Opportunity_royal_visit',
setup.qdiff.hardest69, /* difficulty */
[ /* options */
[
'Opportunity_royal_visit_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarSet('quest_brothel_royal_visit', '1', -1),
setup.qc.Slaver('target', "a|was a royal impressed by your brothel and decided to join your company out of curiosity", undefined),
],
],
[
'Opportunity_royal_visit_1',
'Opportunity_royal_visit_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarSet('quest_brothel_royal_visit', '1', -1),
setup.qc.RemoveTitleGlobal('quest_brothel_owner_0'),
setup.qc.Slave('target', "a|was a royal who took patron your brothel, only to be remade as a slave", undefined),
setup.qc.Ire('neko', 20),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The neko royal who had patroned your brothel has arrived at your fort, to personally meet with you, the proprietor of the place. <<They $g.target>> target|is greatly impressed by the brothel, and especially the head courtesan <<name $g.slave>>, who managed to satisfy the royal's secretly submissive tendencies with a masterful show of dominance.
</p>
<p>
With that, the royal surprisingly asks if your company would allow <<them $g.target>> to join your ranks. <<They $g.target>> would consider this venture as a sort of vacation from <<their $g.target>> daily job, a welcome change from the endless paperwork that <<they $g.target>> would normally do. Having such a prestigious slaver would no doubt be useful for your company.
</p>
<p>
There is a sinister alternative, however. With the royal all alone and vulnerable here within your fort, you could in theory try to capture the <<man $g.target>> and make <<them $g.target>> your slave. This could be an extremely rare opportunity to get your <<uhands $unit.player>> on a royalty of <<lore location_npc>>. However, there is no doubt that the brothel will be held responsible for the disappearance, and the brothel will almost guaranteed to close afterwards. Not to mention the anger you will no doubt receive from the neko...
</p>
<<unitcard $g.target 1>>RecruitEnslave<p>
The news of your new slave's disappearance will no doubt spready very quickly. Your brothel is effectively exchanged for a slave. But seeing your new slave quivering in anger, being fully bound right in your office makes all of these worth it.
</p><<run new setup.Title(
"quest_brothel_owner_0", /* key */
"Brothel Owner", /* name */
"The Legal Owner of <<= setup.dutytemplate.questbrothelmanager.brothelName()>>.", /* description */
"a|is the legal owner of <<= setup.dutytemplate.questbrothelmanager.brothelName()>> located in the <<lore location_npc>>", /* unit text */
1500, /* slave value */
{ /* skill additives */
knowledge: 2,social: 2,sex: 2,},
)
>>
<<run new setup.OpportunityTemplate(
'under_new_management2', /* key */
"Under New Management", /* Title */
{ /* Author */
name: "darko (+Kyrozis)",
url: "",
},
[ /* tags */
'forest',
'money',
'unknown',
],
1, /* expiration weeks */
'Opportunity_under_new_management2',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_under_new_management2_0',
'Opportunity_under_new_management2_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyCustom(3000),
],
],
[
'Opportunity_under_new_management2_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('brothel_takeover', null),
],
],
[
'Opportunity_under_new_management2_2',
'Opportunity_under_new_management2_2_flavor',
[ /* costs */
setup.qc.MoneyCustom(-2500),
],
[ /* restrictions */
setup.qres.FavorAtLeast('neko', 500),
],
[ /* outcomes */
setup.qc.Leave('guard1', "a|is on a well-deserved vacation with the brothel\'s staff", undefined),
setup.qc.Leave('guard2', "a|is on a well-deserved vacation with the brothel\'s staff", undefined),
setup.qc.Leave('pimp', "a|is on a well-deserved vacation with the brothel\'s staff", undefined),
setup.qc.Event('under_new_management_quality_time', 1, {guard1: 'guard1', guard2: 'guard2', pimp: 'pimp'}),
],
],
[
'Opportunity_under_new_management2_3',
'Opportunity_under_new_management2_3_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Favor('neko', 150),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'guard1': [
setup.qres.Home(),
],
'guard2': [
setup.qres.Home(),
],
'pimp': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
The workers and whores of the brothels understandably did not have any money left to pay your slavers for dispatching the bandits who had been abusing them so. Your slavers contemplated taking them as slaves instead, but doing so brazenly in the middle of the city were deemed too dangerous. Instead, they considered several of the possible options.
</p>
<p>
First, were you to lack any heart, the slavers could simply ransack whatever remained of the brothel. This would rob the remaining whores and workers of their last line of livelihood, however, but that's probably not your concern...
</p>
<p>
Alternatively, you could try to buy the place out. <<Yourrep $g.pimp>> estimated that it would cost your treasury <<money 5000>> to do so.
Still, given how decrepit the place had become thanks to the bandits' regime, who knows if you'll ever get back your capital should you choose to buy the place out...
</p>
<<if setup.qres.FavorAtLeast('neko', 500).isOk($gQuest)>>
<p>
Since your company is in very good terms with the neko,
as another option, you could try to convince your slavers, the whores, and
the workers to spend the week together, all costs covered from your coffers.
After all, it's not evey day that one gets the chance to spend all their free time with
one of the cuddliest animals/people on this plane of existence.
Surely it's worth every single gold coin, is it not?
</p>
<</if>>
<p>
Finally, your slavers could simply just walk away. After all, isn't a good deed its own reward?
</p>Ransack the brothel for valuables<p>
The remaining whores were helpless to do anything as they watched their livelihood ransacked by the very same people they were pleading for help. Your slavers discovered some still intact furniture and valuables, which they sold to pay for their services.
</p>Purchase the brothelAsk for some quality time<p>
The whores were a little taken aback by your strange request, some of them
even blushing a little. However, since <<rep $company.player>> has a good
reputation among the <<rep $company.neko>>,- and because <<they
$unit.player>> offered to cover the costs- they agreed to take a week off
with the people that just freed them from some vile bandits.
</p>
<p>
After all, a little relaxation is what your slavers might just need right now.
</p>Demand no payment<p>
The whores rejoiced when <<yourrep $g.pimp>> <<uadv $g.pimp>> demanded no payment, and simply wished them all the best. Soon after, you heard that the brothel was back to business, this time fully owned by its workers. The brothel became one of the best brothels in the area, and the workers paid your company back not in money, but by putting in good words about your company's deeds.
</p>/* PROOFREAD COMPLETE */
<<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 head 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 artifacts,
<</if>>
the pair of siblings go to the desert with the help of the same mercenary
company they have been patroning thus far. They travel for days, each day becoming
closer and closer to their destination.
And finally, the destination is just one more day of travel.</p>
<<set _oldg = $g>>
<<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 decides 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>>
<<name $g.hero1>> touches <<their $g.hero1>>
<<ugenital $g.hero1>> against <<name $g.hero2>>'s <<ugenital $g.hero2>>,
enjoying the sensation of rubbing against each other.
As the night continues, they explore each other's body further and further,
putting their tongue in places where it should have never gone to.
Lust and desire overcome them, and the nervousness was soon a thing of the
past as they fall asleep
<<if $g.hero1.isHasVagina()>>
with their breasts pushing against each other.
<<else>>
with <<name $g.hero1>>'s <<udick $g.hero1>> inside
<<name $g.hero2>>.
<</if>>
<<elseif $varstore.get('choose_your_own_adventure_lovers') == 'rivals'>>
dropping their rivalry for one fateful and calm night. They share good
memories and drink away the bad, and in time they forget about the
nervousness and fall asleep next to each other.
<<else>>
enjoying the company of their most trusted friend. They share good memories
and drink away the bad, and in time they forget about the nervousness and
fall 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>
<<set $g = _oldg>><<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 head 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 vanishes right as you finish reading the chapter, leaving
no hint on what's to come.
</p>Caution (Default)CautionCourageCourage (Default)/* PROOFREAD COMPLETE */
<<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('choose_your_own_adventure__the_beginning___relation2'),
setup.qc.Opportunity('choose_your_own_adventure__the_beginning___relation'),
])
],
],
[
'Opportunity_choose_your_own_adventure__1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SetCooldownOpportunity(null, 500),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.common],
[setup.questpool.forest, setup.rarity.common],
[setup.questpool.city, setup.rarity.common],
[setup.questpool.desert, setup.rarity.common],
[setup.questpool.sea, setup.rarity.common],
],
[ /* 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 open 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 should do.
</p>
<p>
You can try to read the book, if it interests you.
</p>You have no time for games/* PROOFREAD COMPLETE */
<<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 */
],
[ /* restrictions to generate */
],
)>><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.../* PROOFREAD COMPLETE */
<<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 */
],
[ /* restrictions to generate */
],
)>><p>
Without fanfare, a 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.../* PROOFREAD COMPLETE */
<<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 */
],
[ /* restrictions to generate */
],
)>><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.../* PROOFREAD COMPLETE */
<<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 */
],
[ /* restrictions to generate */
],
{ /* 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 */
],
[ /* restrictions to generate */
],
{ /* actors */
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><<include 'Event_choose_your_own_adventure_final_chapter'>>
<<include 'Opportunity_choose_your_own_adventure__final_chapterCommon'>>
<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 move your <<uhands $unit.player>> onto the book, dark
tendrils 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 stands 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 so far 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 continue reading...
<<else>>
As usual, you would like to make certain 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>> onto 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 only tampered very little
with the book's story 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 spawns from all around the
crater, surrounding the
<<= $varstore.get('choose_your_own_adventure_lovers')>> and the mercenaries.
While they are busy fending off the invading horse, the leader of
the demons appears before them.
With the mercenaries backing them up, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
carefully
<<else>>
bravely<</if>>
come into blows with the demon leader.
</p>
<p>
After a long and fierce battle, the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
are victorious. The
<<= $varstore.get('choose_your_own_adventure_lovers')>>
stood there, unmoving, staring at the remnants of what 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 pierced their souls.
Was the demon truly the one responsible for the destruction of their village?
</p>
<p>
They think 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
when their village got raided into the ground and they
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
swore revenge.
<<else>>
looked for peace.
<</if>>
Who was it that they met during 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 time, 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 real demonic master. But you know that a certain doom is looming
upon your company, and sooner or later you must act on this.
</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 events unfold from somewhere. There must be another piece to
this story that does not fit 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 story once and for all.
</p>
<p>
The book never disappears this time.
</p>/* PROOFREAD COMPLETE */
<<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 life with the rest of the village. But one day,
raiders from the mountain come to the villager without warning, burning it down and raping all the
men and women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> happen to be outside
when the raid happens, and are spared from the attack. But when they come back,
all they hold dear have been lost.
With nothing left in their name, they swear to...
</p>Get revenge (Default)Get revengeFind peaceFind peace (Default)/* PROOFREAD COMPLETE */
<<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_1_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_2_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_1_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_2_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_1_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_2_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 life with the rest of the village. But one day,
raiders from the mountain come to the villager without warning, burning it down and raping all the
men and women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> happen to be outside
when the raid happens, and are spared from the attack. But when they come back,
all they hold dear have been lost.
With nothing left in their name, they swear 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 life with the rest of the village. But one day,
raiders from the mountain come to the villager without warning, burning it down and raping all the
men and women.
The <<= $varstore.get('choose_your_own_adventure_siblings')>> happen to be outside
when the raid happens, and are spared from the attack. But when they come back,
all they hold dear have been lost.
With nothing left in their name, they swear 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
<<= _gender_description>>
on their journey of a lifetime.
</p><<set _gender_description = 'two men'>>
<<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><<set _gender_description = 'a man and a woman'>>
<<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><<set _gender_description = 'two women'>>
<<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)/* PROOFREAD COMPLETE */
<<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('choose_your_own_adventure__path_of_divergence___revenge2'),
setup.qc.Opportunity('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('choose_your_own_adventure__path_of_divergence___revenge2'),
setup.qc.Opportunity('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('choose_your_own_adventure__path_of_divergence___revenge2'),
setup.qc.Opportunity('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('choose_your_own_adventure__path_of_divergence___revenge2'),
setup.qc.Opportunity('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/* PROOFREAD COMPLETE */
<<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 */
setup.qres.Through(
setup.qres.Not(setup.qres.VarEqual('choose_your_own_adventure_siblings', 'siblings')),
'Siblings cannot become lovers',
),
],
[ /* 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 */
setup.qres.Through(
setup.qres.Not(setup.qres.VarEqual('choose_your_own_adventure_siblings', 'siblings')),
'Siblings cannot become lovers',
),
],
[ /* 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 */
setup.qres.Through(
setup.qres.Not(setup.qres.VarEqual('choose_your_own_adventure_siblings', 'siblings')),
'Siblings cannot become lovers',
),
],
[ /* 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 accumulate enough money, with the help of a kind mercenary company, the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
are 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 is 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 accumulate enough money, with the help of a kind mercenary company, the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
are 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 is 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.
Having known each other for a long time, the feeling they receive upon exploring
each other's body is exceedingly good.
<<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 receive 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 until they believe it to be a premonition, telling them
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)/* PROOFREAD COMPLETE */
<<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')>>
manage to make their living off slaying minor beasts and completing bounties.
But it is not just for the sake of 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')>>
manage to make their living off slaying minor beasts and completing bounties.
But it is not just for the sake of 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 accumulate 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/* PROOFREAD COMPLETE */
<<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('choose_your_own_adventure__the_showdown___approach2'),
setup.qc.Opportunity('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('choose_your_own_adventure__the_showdown___approach2'),
setup.qc.Opportunity('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('choose_your_own_adventure__the_showdown___approach2'),
setup.qc.Opportunity('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('choose_your_own_adventure__the_showdown___approach2'),
setup.qc.Opportunity('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 go to the desert with the help of the same mercenary
company they have been patroning thus far. They travel 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 decides to camp in the ...
</p>OasisOasis (Default)Caverns (Default)Caverns/* PROOFREAD COMPLETE */
<<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'),
setup.qc.SetCooldownQuest('choose_your_own_adventure_', 300),
]>>
<<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.IfThenElse(
setup.qres.VarEqual('choose_your_own_adventure_lovers', 'lovers'),
setup.qc.Hookup('hero1', 'hero2'),
),
setup.qc.Slaver('hero1', "a|was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined),
setup.qc.Slaver('hero2', "a|was an ordinary villagefolk-turned-hero whose journey was prophesied in a mysterious book", undefined),
setup.qc.RemoveFromUnitGroup('hero1'),
setup.qc.RemoveFromUnitGroup('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.Slave('demon', "a|was a demon lord who toyed with mortals using a modified necronomicon", undefined),
setup.qc.RemoveFromUnitGroup('hero1'),
setup.qc.RemoveFromUnitGroup('hero2'),
]),
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
demon: [],
hero1: [],
hero2: [],
},
[ /* 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')>>
tear 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>>
go to the forest in search of the "sage". Upon seeing them,
the sage morphs 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')>>
defeat the evil demon.
The mastermind behind this book's adventure has been defeated, and is now at their mercy.
But the mercenary company implores 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 slaving company above, a choice.
Should you slay the demon, they shall agree to join your company.
But should you choose to spare the demon, they shall depart the land,
never again to be seen...
</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>
<<unitcard $g.hero1 1>>
<<unitcard $g.hero2 1>>Slay the demon<p>
The deed is done. The demon lays dead as their remains 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 do not complain.
</p>
<p>
Some time later, you receive a farewell letter from them as they voyage
southwards into the <<lore region_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 $g.demon>>.
</p><<run new setup.OpportunityTemplate(
'doppelganger_epilogue', /* key */
"Doppelganger Epilogue", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unit',
'money',
'trait',
],
1, /* expiration weeks */
'Opportunity_doppelganger_epilogue',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_doppelganger_epilogue_0',
'Opportunity_doppelganger_epilogue_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyCustom(50000),
setup.qc.TraumatizeRandom('slaver', 30),
setup.qc.ContactLose(setup.contacttemplate.quest_doppelganger),
setup.qc.VarRemove('quest_doppelganger_progress'),
setup.qc.SetCooldownQuest('the_virgin_raider', 200),
setup.qc.RemoveTitleGlobal('quest_doppelganged'),
setup.qc.RemoveTitleGlobal('quest_doppelganger'),
],
],
[
'Opportunity_doppelganger_epilogue_1',
'Opportunity_doppelganger_epilogue_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.PerkChoice('slaver', 'perk_doppelganged'),
setup.qc.VarRemove('quest_doppelganger_progress'),
setup.qc.VarSet('quest_doppelganger_event_cooldown', '1', 100),
],
],
[
'Opportunity_doppelganger_epilogue_2',
'Opportunity_doppelganger_epilogue_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarRemove('quest_doppelganger_progress'),
setup.qc.ContactLose(setup.contacttemplate.quest_doppelganger),
setup.qc.PerkChoice('dop', 'perk_doppelganger'),
setup.qc.Slaver('dop', "a|is a doppelganger who copied one of your slavers and ended up hired by you", undefined),
setup.qc.VarSet('quest_doppelganger_event_cooldown', '1', 100),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'dop': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Having healed the trauma that your doppelganger <<rep $g.dop>> had from being violated by a desert pirate, <<they $g.dop>> had finally stopped involuntarily transforming every night. You made sure of this by watching <<them $g.dop>> for a week, and indeed, the <<rep $g.slaver>> lookalike now slept peacefully every such night.
</p>
<p>
With the threat over, it's time to decide what to do with the doppelganger for good. You can of course, reclaim the bounty placed on <<their $g.dop>> head, although this will for sure make <<rep $g.slaver>> a little grumpy. Alternatively, you could let <<them $g.dop>> keep staying at your fort as your guest, as if nothing changed. Finally, now that <<their $g.dop>> mind is no longer switching every now and then, you could try to recruit <<them $g.dop>> into being one of your slavers. Having a perfect clone of <<rep $g.slaver>> would surely be beneficial for your company, no?
</p>Fulfill bounty<p>
Money is the most important thing for you, and you made the decision to sell the doppelganger away and fulfill <<their $g.dop>> bounty. <<Rep $g.slaver>> slaver|is a little saddened at the departure of <<their $g.slaver>> friend, but you have no doubt <<they $g.slaver>> will quickly get over it with a couple of drinks or two.
</p>Let <<them $g.dop>> stay<p>
With the threat over, there is no reason for you to not let <<them $g.dop>> continue to stay at your fort. This has a positive effect on <<rep $g.slaver>> — somehow, having a doppelganger of yourself around seems to make <<them $g.slaver>> recover more quickly from injuries, as if any injury they suffer is divided into two.
</p>Recruit <<them $g.dop>><p>
In your infinite wisdom, you've decided to recruit a doppelganger into your employ. <<They $g.dop>> will take up the form of <<rep $g.slaver>>, and unfortunately, <<they $g.dop>> might not be able to change <<their $g.dop>> form at will, given <<their $g.dop>> circumstances. Still, when properly trained, <<they $g.dop>> may be able to relearn a trick or two that would allow them to morph back into the exact likeliness of <<rep $g.slaver>> every few weeks, reverting all corruptions in the process.
</p><<run new setup.OpportunityTemplate(
'nearby_violations', /* key */
"Nearby Violations", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
'special',
],
1, /* expiration weeks */
'Opportunity_nearby_violations',
setup.qdiff.normal58, /* difficulty */
[ /* options */
[
'Opportunity_nearby_violations_0',
'Opportunity_nearby_violations_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.MoneyCustom(20000),
setup.qc.ContactLose(setup.contacttemplate.quest_doppelganger),
setup.qc.VarRemove('quest_doppelganger_progress'),
setup.qc.TraumatizeRandom('slaver', 10),
setup.qc.SetCooldownQuest('the_virgin_raider', 100),
setup.qc.RemoveTitleGlobal('quest_doppelganged'),
setup.qc.RemoveTitleGlobal('quest_doppelganger'),
],
],
[
'Opportunity_nearby_violations_1',
'Opportunity_nearby_violations_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.VarSet('quest_doppelganger_progress', '5', -1),
setup.qc.Money(-10000),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
'dop': [
setup.qres.Home(),
],
'visitor': 'all',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Now that you've uncovered <<rep $g.dop>> as the culprit the midnight virgin raider, you should decide what to do with the treacherous doppelganger. <<Yourrep $g.slaver>> slaver|maintain that <<they $g.slaver>> believe in the doppelganger's innocence, and that the midnight transformation was completely involuntary, but <<they $g.slaver>> resigns to whatever you decide to choose, and won't begrudge you (too much) for whatever it is you decide to do.
</p>
<p>
Maybe it's finally time to collect your bounty over the doppelganger.
</p>
<p>
Or, you could try to invest a large amount of money, if you really believe <<reps $g.slaver>> claim that the doppelganger is actually innocent in all this...
</p>Fulfill bounty<p>
Violating your hospitality is a crime punishable with slavery, and hence you decided to sell the doppelganger away and fulfill <<their $g.dop>> bounty.
</p>
<p>
Having irrefutable proof that <<they $g.dop>> dop|was the midnight virgin raider, <<rep $g.slaver>> slaver|is only a little saddened at the departure of <<their $g.slaver>> friend, and will quickly get over it with a couple of drinks or two.
</p>Invest money to investigate<p>
Against your better judgment,
<<if $unit.player.isHasTrait('per_frugal')>>
as well as your greedy nature,
<</if>>
you decide to spend money on money on trying to figure out that maybe <<rep $g.slaver>> is not a total liar and there is something wrong with the doppelganger.
</p>
<p>
You let a bounty for information be spread around your fort, and while waiting, you spend a day reading your own <<rep setup.item.lorebook_doppelganger>><<set _unit = $dutylist.getUnitIfAvailable('doctor')>><<if _unit>>
, as well as consulting the resident doctor <<rep _unit>><</if>>.
You find that there has been several such occurrences of doppelgangers involuntarily transforming into people they've copied in the past — and there is one common thread among all of them. The person they copied involuntarily has done something terrible to all of them — and it is likely this is a doppelganger's coping mechanism against such things.
</p>
<p>
As you ponder on the information, a visitor comes to your office to claim the bounty you posted for information. The visitor introduces <<themself $g.visitor>> as a traveling bard, (a synonym with traveling con-artist in your head), and has information about the doppelganger, or rather, the person <<rep $g.dop>> has copied. As it happens, the bard was visiting a tavern in the <<lore region_desert>> when <<they $g.visitor>> met a desert human much alike the <<man $g.dop>> in the wanted poster you posted in your fort. It is a very strong clue, and you might be able to find the source of the doppelganger somewhere there...
</p>
<p>
You are experienced enough to know the old age saying of "never trust a <<man $g.visitor>> with the strange hat", but then you recall a quest you've taken some time ago from a desert bandit. Indeed, now that you think about it, <<their $g.dop>> face dop|was strikingly similar to your little doppelganger's transformed visage. You begrudgingly paid the bard for the information before deciding to get yourself drunk to forgot the large amount of sum you've just paid to learn something you already know.
</p>
<p>
Best get moving and scout the <<lore region_desert>>.
</p><<run new setup.OpportunityTemplate(
'room_mate', /* key */
"Room Mate", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
'unknown',
],
1, /* expiration weeks */
'Opportunity_room_mate',
setup.qdiff.normal53, /* difficulty */
[ /* options */
[
'Opportunity_room_mate_0',
'Opportunity_room_mate_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_doppelganged'),
setup.qc.MoneyCustom(10000),
setup.qc.VarRemove('quest_doppelganger_progress'),
setup.qc.TraumatizeRandom('slaver', 5),
setup.qc.SetCooldownQuest('the_virgin_raider', 100),
],
],
[
'Opportunity_room_mate_1',
'Opportunity_room_mate_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTagGlobal('quest_doppelganged'),
setup.qc.VarSet('quest_doppelganger_progress', '3', -1),
setup.qc.AddTitle('slaver', 'quest_doppelganged'),
setup.qc.AddTitle('dop', 'quest_doppelganger'),
setup.qc.Contact(setup.contacttemplate.quest_doppelganger, 'dop', null),
setup.qc.BoonizeRandom('slaver', 20),
setup.qc.SetCooldownEvent('blame_on_you', 15),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
'dop': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
After accidentally witnessing something you won't be forgetting anytime soon, it is time to decide what to do with <<reps $g.slaver>> doppelganger friend.
</p>
<p>
<<Their $g.dop>> bounty in the <<lore region_desert>> is still active, so you could turn <<them $g.dop>> in for a quick nice profit.
</p>
<p>
Alternatively, you could allow <<them $g.dop>> to stay as your guest for the time being. <<Rep $g.slaver>> will probably be happy about this decision. You'll just have to figure out a way to determine who is who, everytime you meet <<rep $g.slaver>> or <<their $g.slaver>> doppelganger <<rep $g.dop>>...
</p>Fulfill bounty<p>
As the leader of a slaving company, kind-heartedness is not part of the job description<<if $unit.player.isHasTrait('per_kind')>>
despite how much your actually kind heart wishes for<</if>>.
Claiming a bounty is surprisingly not dissimilar to selling a slave — the flesh is exchanged, and the money switched <<uhands $unit.player>>. <<Rep $g.slaver>> will be slightly downed that <<their $g.slaver>> friend was sold away, but give <<therace $g.slaver>> a month or two and you're sure <<they $g.slaver>> will be back to <<their $g.slaver>> usual <<uadjgood $g.slaver>> self.
</p>Let <<them $g.dop>> stay as a guest<p>
Against your better judgment, you let <<rep $g.dop>> stay as your guest for the time being. <<They $g.dop>> will take one of the empty rooms in the basement of your fort — it's not the most comfortable room around, but it's livable and certainly better than the slave dungeons.
</p>
<p>
<<Rep $g.slaver>> slaver|is overjoyed at your decision, and <<therace $g.slaver>> slaver|look much more cheerful in the coming days. The "strange noises" coming from <<reps $g.slaver>> room would occasionally continue to be heard in the coming days...
</p><<run new setup.OpportunityTemplate(
'dungeons_and_dragons_fetch_quest', /* key */
"Dungeons and Dragons: Fetch Quest", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'unknown',
'fort',
],
1, /* expiration weeks */
'Opportunity_dungeons_and_dragons_fetch_quest',
setup.qdiff.normal42, /* difficulty */
[ /* options */
[
'Opportunity_dungeons_and_dragons_fetch_quest_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dungeons_and_dragons_wolfstone', null),
],
],
[
'Opportunity_dungeons_and_dragons_fetch_quest_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dungeons_and_dragons_woodsgem', null),
],
],
[
'Opportunity_dungeons_and_dragons_fetch_quest_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dungeons_and_dragons_desert_pearl', null),
],
],
[
'Opportunity_dungeons_and_dragons_fetch_quest_3',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitle('slaver', 'quest_heroic_withdrawal_0'),
setup.qc.TraumatizeRandom('slaver', 50),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<include 'Event_dungeons_and_dragons_fetch_quest'>>
<p>
You silently shake your head at the idiocy, but the slaver did complete the task you made up some time ago, so it was partly your fault that you've indulged <<them $g.slaver>> at all from the start.
There are several options you can take here.
</p>
<p>
You can flatly refuse, and end this farce here once and for all. <<Therace $g.slaver>> will surely get grumpy in the coming weeks, but much better than if you were to refuse <<them $g.slaver>> later.
</p>
<p>
Or alternatively, you can try to come up with a surely impossible task for the slaver. Having failed a "heroic" quest would surely bring the slaver back to reality, and can resume being your slaver properly once more. Clearly the quest you thought up before was not as impossible as it sounds, however, and you need something else this time.
</p>
<p>
<<if $unit.player.isHasTrait('bg_scholar')>>
You recall the many adventure stories you've read when you were working a scholar in your past.
<<elseif $unit.player.isHasTrait('bg_wiseman')>>
You recall the many stories you know, from the times in the past where you worked as a wiseman.
<<elseif $unit.player.isHasTrait('per_studious')>>
As a studious slaver, you are quite well-read, and you know many adventure stories.
<<else>>
You may not have read too many books, but you do know one or two adventure stories being told in taverns.
<</if>>
Among them, the hero always, without exception, do a fetch quest or two in their career. You could try to ask <<rep $g.slaver>> to fetch something that clearly does not exist in the world.
A magical Wolfstone in the <<lore region_vale>>, maybe? Or a rare culinary artifact in the <<lore region_forest>> dubbed the Woodstone? Or maybe a Desert Pearl of inordinary value...
</p>The... Wolfstone, yesWoodsgem in the forests...A... Desert Pearl?Enough is enough! Ignore <<their $g.slaver>> request and move on with your day<<run new setup.OpportunityTemplate(
'dungeons_and_dragons_lair_of_evil_captive', /* key */
"Dungeons and Dragons: Lair of Evil: Captive", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'prep',
'unknown',
],
1, /* expiration weeks */
'Opportunity_dungeons_and_dragons_lair_of_evil_captive',
setup.qdiff.harder45, /* difficulty */
[ /* options */
[
'Opportunity_dungeons_and_dragons_lair_of_evil_captive_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity('dungeons_and_dragons_lair_of_evil_final_boss', {
prince: "prince",
slaver: "slaver",
}),
],
],
[
'Opportunity_dungeons_and_dragons_lair_of_evil_captive_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity('dungeons_and_dragons_lair_of_evil_final_boss', {
slaver: "slaver",
prince: "princess",
}),
],
],
[
'Opportunity_dungeons_and_dragons_lair_of_evil_captive_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_heroic_withdrawal_0')],
[setup.qc.TraumatizeRandom('unit', 100)],
),
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
'prince': 'sea_allmale',
'princess': 'sea_allfemale',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<include "Event_dungeons_and_dragons_lair_of_evil">>
<p>
Should you decide to write one, you already have an idea for the possible "quest": a classic story where an evil entity stole a well-beloved royalty, and a hero is needed to rescue them. But first, what kind of royalty should you write about?
</p>A princeA princessEnough is enough! Ignore <<their $g.slaver>> request and move on with your day<<run new setup.OpportunityTemplate(
'dungeons_and_dragons_lair_of_evil_final_boss', /* key */
"Dungeons and Dragons: Lair of Evil: Final Boss", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'prep',
'unknown',
],
1, /* expiration weeks */
'Opportunity_dungeons_and_dragons_lair_of_evil_final_boss',
setup.qdiff.harder45, /* difficulty */
[ /* options */
[
'Opportunity_dungeons_and_dragons_lair_of_evil_final_boss_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dungeons_and_dragons_lair_of_evil', {
boss: "demon",
prince: "prince",
}),
],
],
[
'Opportunity_dungeons_and_dragons_lair_of_evil_final_boss_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('dungeons_and_dragons_lair_of_evil', {
boss: "dragonkin",
prince: "prince",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'prince': [
],
'dragonkin': 'subrace_dragonkin',
'demon': 'subrace_demon',
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
Finally, you'll have to invent some kind of evil boss that have kidnapped the <<prince $g.prince>>. A big bad dragon maybe? Or a dark, corrupted demon...
</p>DemonDragon/* PROOFREAD COMPLETE */
<<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 */
"a|was known to uphold honor and morality at some point in a|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",
'subrace_humandesert', /* pools */
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', "a|was a princess of a faraway country in the eastern deserts captured by an evil wizard, rescued, before being captured again by an evil slaving 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>> makes <<their $g.slave>> way to the
stables and grabs a nearby horse. But <<they $g.slave>> does not immediately
escape — rather, <<they $g.slave>> shrewdly comes 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 from 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, your slavers can 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 tie <<them $g.slave>> for 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>> knight|is a little <<uadjbad $g.knight>>, <<they
$g.knight>> knight|have proven their valor some time ago by letting another <<princess
$g.knight>> go in a similar situation for free. <<They $g.knight>> can make
this plan work, although this will surely sully <<their $g.knight>> mood and reputation.
<<else>>
Looking at the assigned knight <<rep $g.knight>> however, you doubt any
chivalrious thought ever cross <<therace $g.knight>>'s <<uadjbad $g.knight>> mind.
<</if>>
</p>
<p>
Finally there is always the option of escorting the <<princess $g.slave>>
home safely without demanding any pay. But why would ever you do this? Out of the goodness of
<<reps $g.knight>> heart, perhaps? You actually doubt any of your slavers still have a heart to begin with.
</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 event-free, and 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,
<<rep $g.knight>> led your slavers back home.
</p>Enslave<p>
Somehow, <<yourrep $g.knight>> knight|was known to be chivalrious in
character. The <<princess $g.slave>> apparently knew it too, and decided to
put <<their $g.slave>> trust in the supposed knight. As the <<princess
$g.slave>> lowered <<their $g.slave>> guard, once <<they $g.slave>> no longer
slept with one eye open your slavers got to work. During one of the nights,
your slavers secured the <<princess $g.slave>> limbs and tied them up. 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 managed built thus far is completely 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 escort the <<princess $g.slave>> through
the hot sand dunes of the <<lore region_desert>> back to <<their $g.slave>> country.
</p>
<p>
Refusing any pay, your slavers are instead treated to a banquet at the palace. <<Rep
$g.knight>> knight|seem 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.slave>> personally makes sure that <<reps $g.knight>>
chivalry is known far and wide for defeating an evil wizard and saving a
helpless <<princess $g.slave>> from a land afar.
<<else>>
Unfortunately, <<yourrep $g.knight>> knight|make <<their $g.knight>>
<<if _trait == setup.trait.magic_dark>>
mastery over <<rep setup.trait.magic_dark>> known during the banquet.
<<elseif _trait == setup.trait.per_evil>>
horrifyingly evil personality known during a drunkon stupor.
<<else>>
cruelty known when a maid accidentally spilled a drink on <<their $g.knight>> <<uclegs $g.knight>>.
<</if>>
Seeing this, the <<princess $g.slave>> slave|drop all of <<their $g.slave>>
plans of rewarding <<theslaver $g.knight>> with good words.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<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 */
"a|was known far and wide to possess a vast amount of experience, at least at some point in a|their life", /* unit text */
0, /* slave value */
{ /* skill additives */
sex: 2,
},
)
>>
<<run new setup.UnitGroup(
'opportunity_aspect_of_experience1',
"Aspect of Experience: Chief",
'subrace_humanvale', /* pools */
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 */
setup.qres.Actor('slave', setup.qres.IsCanBeSold()),
],
[ /* 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_mist], true)),
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 <<reps $g.knight>>
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 offers a flat amount of <<money
12000>> to buy <<yourrep $g.slave>> permanently, to be reassigned as the first
member as <<their $g.chief>> no doubt soon 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 <<yourrep $g.slave>>, <<they $g.chief>>
chief|offer 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 original offer of
making <<yourrep $g.knight>> learn as much as "experience" 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>>Sell the slave<p>
The deal made, <<yourrep $g.knight>> threw one last <<uadjgood $g.knight>> glance
over to <<rep $g.slave>> before the overjoyed chief put a permanent collar around
<<reps $g.slave>> neck, no doubt eager to introduce <<them $g.slave>> to the
benefits of becoming the chieftain's personal sex toy.
Your slavers tried not to dwell too much on the loss of <<rep $g.slave>> and
assured themselves that the huge bag of money they returned with was much more
than enough as a compensation for <<rep $g.slave>>.
</p>Get the slave order<p>
<<Rep $g.knight>> finalized the slave order with the chieftain. The slave
order detailed the almost exact likeliness with <<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
<<yourrep $g.knight>> knight|was a bit too successful in
introducing the previously inexperienced chief to the world of carnal pleasure...
</p>Get the knowledge<p>
Ah yes, the teachings of the chieftain. What other reward would your slavers ever wanted?
Money? Slaves? Nothing could certainly compare with the chieftain's
experience, or so <<yourrep $g.knight>> thought.
</p>
<p>
The coming days passed in a blur as <<rep $g.knight>> spent every waking moment
sitting in front of the chief, who had returned (at least for the time being)
to their previous occupation as the wise<<man $g.chief>> of the encampment. <<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_mist')>>
<p>
<<if $g.knight.isHasTrait('bg_mist')>>
Hailing from beyond <<lore concept_mist>>, <<rep $g.knight>> knight|was no
stranger to the art of slaving and has plenty of experience in the field.
<<elseif $g.knight.isHasTrait('bg_whore')>>
Coming from a whorehouse, <<rep $g.knight>> surely qualified
as an "experienced" slaver.
<<elseif $g.knight.isHasTrait('bg_slaver')>>
Having been a slaver long before joining your company,
<<rep $g.knight>> no doubt qualified as an experienced slaver.
<<else>>
Having been with your company for over two years now,
there was no doubt that <<rep $g.knight>> was an experienced slaver.
<</if>>
Their experiences combined with the new wealth of stories from the chief
made <<rep $g.knight>> appeared 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_mist>><<rep setup.trait.bg_slaver>><<rep setup.trait.bg_whore>><<rep setup.trait.join_senior>>,
there were only so much that <<reps $g.knight>> thick <<uhead $g.knight>>
could absorb from the stories. Still, the stories were rather inspiring and you can
definitely see a lighter step coming from <<yourrep $g.knight>> in the coming days.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"aspect_of_wisdom", /* key */
"Aspect of Wisdom", /* name */
"Known to possess great wisdom (at some point in their life)", /* description */
"a|was known to possess wisdom much beyond their peers at some point in a|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>
Somehow, <<yourrep $g.knight>> knight|turn to be virtuous enough to lead your
slavers to the long-lost library of A'ssera. Standing in front of the gates to the
library, your slavers must now decide what to do.
</p>
<p>
As the first option, ancient and pristine libraries such as these must surely hold
artifacts hidden somewhere 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<p>
With some hesitation, <<yourrep $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. At the end of the narrow corridor lied a single treasure chest, containing a valuable and
rare piece of sage's clothes, together with some random baubles.
</p>
<p>
Mysteriously, as your slavers leave the library, the books and bookcases
that your slavers scattered around the place
magically sorted themselves back into their proper positions in the bookshelves,
and the library returned to its pristine state as if nothing had happened before...
</p>
<<if $g.knight.isHasTitle('aspect_of_wisdom')>>
<p>
Having stolen from a pristine trove of knowledge,
<<rep $g.knight>> can no longer call <<themself $g.knight>> as having the
<<rep setup.title.aspect_of_wisdom>>.
</p>
<</if>>Study<p>
Your slavers spent a week studying in the trove of knowledge.
While most of them probably did not learn anything interesting,
<<yourrep $g.knight>> knight|was different.
The normally <<uadjper $g.knight>> <<urace $g.knight>> knight|is now capable of speaking
as if <<they $g.knight>> knight|was possessed by a wise sage, spouting advice upon advice.
Eventually the "wisdom-ish" trance stopped, and <<yourrep $g.knight>> returned
to their normal <<uadjgood $g.knight>> self.
</p>
<p>
Still, <<rep $g.knight>> somehow knight|have gained a reputation for being
quite wise now. Only time will tell whether or not this will prove useful...
</p>/* PROOFREAD COMPLETE */
<<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.subrace_humankingdom,
setup.trait.subrace_humanvale,
setup.trait.subrace_humandesert,
setup.trait.subrace_humansea,
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.race_wolfkin,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
], 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_roleplay_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 with your own money from your own coffers.
Second, the smith has plenty of orders in the upcoming 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/* PROOFREAD COMPLETE */
<<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.AllUnitSatisfyDo(
[setup.qres.Job(setup.job.slave)],
[
setup.qc.TraitIncreaseExisting('unit', 'anus_gape'),
setup.qc.TraitIncreaseExisting('unit', 'anus_gape'),
setup.qc.TraitIncreaseExisting('unit', 'vagina_gape'),
setup.qc.TraitIncreaseExisting('unit', 'vagina_gape'),
],
),
],
], ],
[ /* 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 in 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>
First, you can auction it, which will fetch you so much more money compared to if
you were to later sell it in your <<rep setup.buildingtemplate.bazaar>>.
<<set _vice = $dutylist.getUnitIfAvailable('viceleader')>>
<<if _vice>>
Per your vice leader <<reps _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 from selling it...
<</if>>
</p>
<p>
Alternatively, if your vanity eclipses your need of money,
you can simply keep the contraption 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
misuse, and will be worth nothing afterwards. But your slaves will surely all
end up with permanently gaping holes, for whatever it is that you are planning for them...
</p>Auction it<p>
It is done. The <<rep setup.item.f_object_master_fuckmachine>> has been sold
in one of the most busy auctions ever, with a very loud sequence of bids until
a high noble decided to splurge a silly amount of gold for the contraption.
</p>
<p>
Whatever the noble is planning to do with the <<rep
setup.item.f_object_master_fuckmachine>>, you don't really care as you are
swimming
in your newfound gold. Perhaps you can ask the inventor <<rep $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 planning to do to them, and they do not have to imagine as
you grabbed <<yourrep _slaves[0]>> and forcefully place <<them _slaves[0]>> atop
the dildo sitting quietly over the machine.
</p>
<p>
Sensing the inviting <<uhole _slaves[0]>> above it, the machine magically
starts its raping procedure, moving its large dildo up and down
<<if _slaves[0].isHasVagina()>>
both of the slave's rear orifices until both gape permanently.
<<else>>
the slave's anus until it becomes a permanent gape.
<</if>>
After a while that must have been excruciatingly long for the slave,
the machine finally release the spent <<rep _slaves[0]>> as
you order the next slave to step onto the machine.
</p>
<p>
Screams can be heard from all around your fort as the machine continues its
mindless rape on your slaves. Once all the slaves are done and gaping, the
machine finally break down, as if sensing that its horrific duties are finally over.
</p>/* PROOFREAD COMPLETE */
<<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 have gathered crosschecked with <<reps $g.biologist>> vast
knowledge, it seems harvesting it will not be an easy task at all. The fruit will
simply rot if harvested carelessly, and one of some specific rituals needs to be performed.
You have to make decision for them.
</p>
<p>
The first option is to conduct the so-called "Gag Ritual", where <<yourrep
$g.offering>> must caress and service the shapely fruit as if it is a deity's
sexual organ. While that sounds harmless, the ritual will apparently permanently
alters <<reps $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 instead offer <<their $g.offering>> <<if
$g.offering.isHasVagina()>>pussy<<else>><<uanus $g.offering>><</if>> to the
fruit, before inserting the fruit deep within the offered hole. Rumors said
that such a stimulation will induce incredible growth on the fruit, no doubt
gaping <<reps $g.offering>> hole permanently if
<<if $g.offering.isHasVagina()>>
they were
<<else>>
it was
<</if>>
not already gaped to begin with.
</p>
<p>
Finally, there's always the option to summon demonic entities and ask
them for help instead, using <<yourrep $g.offering>> as an offering.
For such a simple task, they will unlikely take <<reps $g.offering>> soul forever,
but <<rep $g.offering>> will almost guaranteed to end up more being much more corrupted than before.
<<if $g.offering.isHasTrait('corruptedfull')>>Considering <<rep $g.offering>>
offering|is already fully corrupted, this might be your best bet among the options provided...<</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 <<reps $g.offering>>
<<umouth $g.offering>>.
<<if $g.offering.isHasTrait('per_chaste')>>
Being the chaste slaver that <<they $g.offering>> was,
<<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>> had always
been this slutty.
<<else>>
<<rep $g.offering>> mechanically sucked on the fruit, trying to imagine that
the fruit was their lover's genital instead.
<</if>>
The fruit grew in size inside <<reps $g.offering>> <<umouth $g.offering>>,
eventually choking <<them $g.offering>>, whose gag reflex kicked in and vomited the fruit, before
gasping in jaw pain. Plucked from its tree, but satisfied with the performance,
the fruit rolled down innocently to <<reps $g.wizard>> <<ucfeet $g.wizard>>,
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>> became
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 $g.offering>> 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 <<reps $g.offering>> <<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>> offering|was 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>> offering|was a slaver, not
a slave.
<<else>>
<<rep $g.offering>> steeled <<themself $g.offering>> for the incoming rape.
<</if>>
After tentatively touching <<their $g.offering>> buttcheeks, the fruit proceeded to penetrate <<reps
$g.offering>> <<uhole $g.offering>>, earning a shriek followed by a moan from
<<theslaver $g.offering>>.
As the rape continued, the fruit grew in size,
<<if $g.offering.isHasTrait('vagina_gape')>>
stretching <<their $g.offering>> already gaping vagina to the limits.
<<elseif $g.offering.isHasTrait('vagina_loose')>>
and <<their $g.offering>> formerly loose vagina became a permanently gape.
<<elseif $g.offering.isHasTrait('vagina_tight')>>
and <<their $g.offering>> formerly tight vagina became permanently loose.
<<elseif $g.offering.isHasTrait('anus_gape')>>
stretching <<their $g.offering>> already gaping anus to the limits.
<<elseif $g.offering.isHasTrait('anus_loose')>>
and <<their $g.offering>> formerly loose anus became a permanently gape.
<<else>>
and <<their $g.offering>> formerly tight anus became permanently loose.
<</if>>
The fruit kept growing in size until eventually it snapped from the tree,
and lodged deep within <<reps $g.offering>> <<uhole $g.offering>>, who had
became quite a mess.
<<Yourrep $g.wizard>> tended to <<rep $g.offering>> while
<<rep $g.biologist>> helped to carefully dislodge the fruit from <<their $g.offering>>
abused <<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, your slavers opted 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 appeared,
<<else>>
<<run $company.player.substractMoney(1000)>>
using an demonic amulet they managed to procure for <<money 1000>>.
The amulet then shattered,
<</if>>
and from within a demon appeared to grant your slavers wish, in exchange for
a brief sexy moment with <<yourrep $g.offering>>.
As the demon fucked <<rep $g.offering>> senseless, your slavers could see
clearly the corruption spreading into <<them $g.offering>>. Once the payment
was concluded, the demon used <<their $g.offering>> powerful magic to snap
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>/* PROOFREAD COMPLETE */
<<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 on how 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 of the village are
defeated. Given their skills, this is completely within your slaver's
prowess, but they will no doubt sustain great injuries afterwards.
</p>
<p>
The second option is to undergo the Trial by Fire. Here, your slavers must
withstand fiery abuse inflicted by the orcs upon their bodies 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, <<yourrep $g.tank>> prepared <<their $g.tank>>
<<ubodyall $g.tank>> for the no-doubt abusive fight.
<<Rep $g.healer>> stood at the ready to undo the damage as much as possible,
while <<rep $g.dps>> <<uadv $g.dps>> sharpened <<their $g.dps>> <<uweapon
$g.dps>> for the upcoming onslaught.
</p>
<p>
When the horn was blown, the first wave of orcish warriors came descending down on
slavers. Still full of energy, <<rep $g.tank>> managed to fend off the bulk of
the forces while <<rep $g.dps>> <<uadv $g.dps>> dispatched them one by one,
until all of the first wave is defeated. But your slavers knew that there are many
waves to come, and this was only the beginning.
</p>
<p>
Eventually, your slavers lost count on the number of waves they had
defeated. Wounded (but not dead) bodies were scattered throughout the battlefield, and
your slavers had been badly injured by stray hits by the time they reach the final wave.
The final fight was 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>> fended off one final attack
before collapsing to the ground. But it was not in vain, as <<yourrep $g.dps>>
managed to use the opening to launch a sneak attack on the chieftain, who was
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 bask in the victory. <<They
$g.healer>> grabbed the <<rep setup.item.quest_for_science_stick>> off the
chieftain's arms, and heaved both slavers back to recover before heading home
to the fort.
</p>Trial by fire<p>
The Trial of Fire began 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()>>
almost couldn't contain <<their $g.tank>> masochistic excitement at the upcoming pain.
<<elseif $g.tank.isHasTrait('per_brave')>>
bravely steeled <<themself $g.tank>> for the incoming pain.
<<elseif $g.tank.isHasTrait('per_cautious')>>
looked skywards trying not to imagine the excruciating pain about to be
inflicted on <<their $g.tank>> cowardly self.
<<else>>
<<uadv $g.tank>> steeled <<themself $g.tank>> for the upcoming pain.
<</if>>
The orcs seared 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 seared again and again, in the attempt to
prove their worth. After the grueling hour, the orcs untied your slavers, whom all
collapsed to the ground with heavy injuries and trauma. Still, seeing the braveries
(and mostl foolishness) exhibited by
your slavers, the chieftain kept the promise and handed over the "pole of
heavens" to your slavers' well deserved <<uhands $g.tank>>.
</p>Trial by darkness<p>
After your slavers chose the Trial of darkness, they could
see an orc servant scuttled outside of the encampment,
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 transpired inside the caverns, but when your slavers
returned with the <<rep setup.item.quest_for_science_stick>> in <<uhand $g.tank>>,
their eyes were
blank and lifeless. They remained motionless for an hour, until an escort
from the orc encampment found them just standing there and brought them back to the
encampment. Your slavers eventually recovered enough of their wits to return
back to the fort, but the experience had greatly traumatized them.
</p><<run new setup.OpportunityTemplate(
'fort_restoration_awards', /* key */
"Fort Restoration Awards", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
'unknown',
],
1, /* expiration weeks */
'Opportunity_fort_restoration_awards',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_fort_restoration_awards_0',
outcome_passage: 'Opportunity_fort_restoration_awards_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.QuestFortRestorationAwards(),
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_progress'),
setup.qc.SetCooldownEvent('fort_restoration_awards_preliminaries', 200),
setup.qc.IfThenElse(
setup.qres.HasItem(setup.item.technology_portal),
setup.qc.DoAll([
setup.qc.Item(setup.item.potion_portal, 1)
], undefined),
setup.qc.DoAll([
setup.qc.Item(setup.item.technology_portal, 1),
setup.qc.Item(setup.item.potion_portal, 1),
setup.qc.Item(setup.item.potion_portal, 1)
], undefined)),
setup.qc.VarAdd('quest_fort_restoration_win', 1, -1),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_1',
outcome_passage: 'Opportunity_fort_restoration_awards_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_progress'),
setup.qc.SetCooldownEvent('fort_restoration_awards_preliminaries', 200),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'inspector': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
setup.qc.VarRemove('quest_fort_restoration_room'),
],
false, /* is must be answered */
)>><<set _wins = $varstore.get('quest_fort_restoration_win') || 0>>
<p>
You have received another somewhat expected visitor, another forst inspector from the so-called "History Preservation" society located in some hidden land in <<lore continent_main>>. As you recall, you've been patronizing them for quite some time, even changing your fort layout to fit whatever idealistic ideals they impose upon your fort, all for the sole reason of obtaining the secret technology held by the community.
</p>
<p>
The inspector happily begin by showering you with praises, about how much you've contributed to the society by restoring such a magnificent fort. But the most interesting part to you is how this final inspection would be the "final test", which no doubt carry with it a "final reward". And it's exceedingly simple too — all you have to do is just make your fort as beautiful as you can in every single area. That's right, you'll just have to maximize the skill bonuses that your fort gives out. How hard could it be?
<<if _wins>>
(Perhaps harder than you thought last time...)
<</if>>
</p>Receive the grant<<set _wins = $varstore.get('quest_fort_restoration_win') || 0>>
<p>
You did it, you have successfully somehow beautified your fort enough
<<if _wins >= 4>>
to the point of being perhaps one of the few wonders of <<lore continent_mestia>>. The inspector better be satisfied with this pinnacle of engineering.
<<elseif _wins >= 3>>
to the point of almost unnatural beauty and cohesiveness.
That damned inspector has better be satisfied by this.
<<elseif _wins >= 2>>
to the point of peak-like effectiveness and beauty.
The inspector will surely appreciate this efforts.
<<elseif _wins >= 1>>
to the point of even more so that last time you did it.
The inspector is surely happy with this.
<<else>>
to the point where everything just looks nice.
Hopefully the inspector is satisfied with this outcome.
<</if>>
And <<they $g.inspector>> does — with the forf "fully restored to its former glory", on behalf of the community of "history preservation", <<they $g.inspector>> bestows upon you
<<if _wins>>
another bottle of <<rep setup.item.potion_portal>>,
which allows you to build another portal within your fort.
<<else>>
the elusive technology held secret by the society, the <<rep setup.item.technology_portal>>, as well as two bottles of <<rep setup.item.potion_portal>>. May these aid you to restore even more decrepit and abandoned forts! Or so they hopes.
<</if>>
</p>
<<if !_wins>>
<<set _u = setup.getAnySlaver()>>
<p>
Only when the inspector is finally a great distance away that <<yourrep _u>> quips how useful portal technology might be for training slaves. But such a rare potion has much better use for your fort management, to <<their _u>> great dismay.
</p>
<</if>>Decline for now<p>
The inspector tells you that <<they $g.inspector>> will be back in a year or so, should you change your mind by then.
</p>Decline and drop all connections with the community<<run new setup.OpportunityTemplate(
'fort_restoration_awards_preliminaries', /* key */
"Fort Restoration Awards: Theme", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'money',
'unknown',
'fort',
],
1, /* expiration weeks */
'Opportunity_fort_restoration_awards_preliminaries',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_fort_restoration_awards_preliminaries_0',
outcome_passage: 'Opportunity_fort_restoration_awards_preliminaries_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.QuestFortRestorationAwardsTheme(),
],
outcomes: [ /* outcomes */
setup.qc.MoneyCustom(10000),
setup.qc.VarSet('quest_fort_restoration_progress', '1', -1),
setup.qc.VarRemove('quest_fort_restoration_skill'),
setup.qc.SetCooldownEvent('fort_restoration_awards_efficiency', 25),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_preliminaries_1',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_skill'),
setup.qc.VarRemove('quest_fort_restoration_progress'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_preliminaries_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_skill'),
setup.qc.VarRemove('quest_fort_restoration_progress'),
setup.qc.SetCooldownEvent('fort_restoration_awards_preliminaries', 2000),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
},
[ /* expiration outcomes */
setup.qc.VarRemove('quest_fort_restoration_skill'),
setup.qc.VarRemove('quest_fort_restoration_progress'),
],
false, /* is must be answered */
)>><p>
The fort you are currently occupying used to belong to some long-lost civilization. As a result, every now and then visitors would come to your fort to see the glory of the past, restored somewhat by your rebuilding efforts.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
Apparently, the news of your "charitable deeds" have reached a community of history-lovers, and they seem to be completely unaware of the reason behind your fort refurbishment ventures.
According to <<yourrep _u>>, the community has decided to award you for your efforts by sending a fort inspector, who is already here by the way, to donate some more money for your fort development attempts. <<Rep _u>> has been doing a good job entertaining the inspector and making sure to hide all your less publicly approvable work, but the inspector stubbornly refuses to give out the grant without seeing progress on the fort restoration.
</p>
<<set _skill = setup.skill[$varstore.get('quest_fort_restoration_skill')]>>
<<if !_skill>>
<<set _skill = setup.skill.brawn>>
<</if>>
<p>
Specifically, the inspector somehow believes that your fort was once
<<if _skill == setup.skill.combat>>
a formidable bastion, hosting a large group of army,
<<elseif _skill == setup.skill.brawn>>
a famous destination for hardened gladiators,
<<elseif _skill == setup.skill.survival>>
an academy for aspiring archers,
<<elseif _skill == setup.skill.intrigue>>
a den of skullduggery and piracy,
<<elseif _skill == setup.skill.slaving>>
a vast prison complex,
<<elseif _skill == setup.skill.social>>
a grand and luxurious castle,
<<elseif _skill == setup.skill.knowledge>>
a trove of knowledge,
<<elseif _skill == setup.skill.aid>>
a place of healing,
<<elseif _skill == setup.skill.arcane>>
a necromancer den,
<<elseif _skill == setup.skill.sex>>
an artistic center,
<</if>>
and demands that the fort must have a sufficiently high
<<rep _skill>> rating.
If you want to get that grant money, you must raise your fort's <<rep _skill>> bonus to sufficiently high level.
This might be a lot of effort, but
rumors say that the community have access to an extremely rare portal-making technology that you might just be able to get your grubby <<uhands $unit.player>> on should you play your cards right...
</p>Receive the grant<<set _skill = setup.skill[$varstore.get('quest_fort_restoration_skill')]>>
<<if !_skill>>
<<set _skill = setup.skill.brawn>>
<</if>>
<p>
You've re-arranged and decorated your fort all in the name of
<<rep _skill>>, and it was enough to impress the fort inspectors. Your efforts to "restore the lost legacy of the past" has been deemed exemplary, and you receive some funds for your continued maintenance of the fort, as well as promise for another possible refurbishment grant in the future...
</p>DeclineDecline and decline all future offers<<run new setup.OpportunityTemplate(
'fort_restoration_awards_semi_finals', /* key */
"Fort Restoration Awards: Efficiency", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
'unknown',
],
1, /* expiration weeks */
'Opportunity_fort_restoration_awards_semi_finals',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_fort_restoration_awards_semi_finals_0',
outcome_passage: 'Opportunity_fort_restoration_awards_semi_finals_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.QuestFortRestorationAwardsEfficiency(),
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_room'),
setup.qc.MoneyCustom(20000),
setup.qc.VarSet('quest_fort_restoration_progress', '2', -1),
setup.qc.SetCooldownEvent('fort_restoration_awards', 25),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_semi_finals_1',
outcome_passage: 'Opportunity_fort_restoration_awards_semi_finals_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_room'),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_fort_restoration_awards_semi_finals_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.VarRemove('quest_fort_restoration_progress'),
setup.qc.VarRemove('quest_fort_restoration_room'),
setup.qc.SetCooldownEvent('fort_restoration_awards_preliminaries', 200),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'inspector': [
],
},
[ /* expiration outcomes */
setup.qc.VarRemove('quest_fort_restoration_room'),
],
false, /* is must be answered */
)>><p>
Some time ago, a fort inspector from a history-reservator community has come and given some money for your "history preservation efforts". Another instructor has come to your fort today, also carrying a large bag of gold. Like before, however, <<they $g.inspector>> demands to see the results of your restoration efforst first before <<they $g.inspector>> hands over the money.
</p>
<<set _room = $roomlist.getRoomInstances({template: setup.roomtemplate[$varstore.get('quest_fort_restoration_room')]})[0]>>
<<if !_room>>
<<set _room = $roomlist.getRoomInstances()[0]>>
<</if>>
<p>
The inspector this time is similarly delusional as before, and <<they $g.inspector>> stubbornly thinks that your fort was once
<<if _room.getTemplate() == setup.roomtemplate.questoffice>>
a center of bureaucracy,
<<elseif _room.getTemplate() == setup.roomtemplate.library>>
a scholarly academy,
<<elseif _room.getTemplate() == setup.roomtemplate.market>>
a bustling hub of commerce,
<<elseif _room.getTemplate() == setup.roomtemplate.hospital>>
a serene place of healing,
<</if>>
and demands that your <<rep _room>> be as efficient as possible. This means that the room must provide a sufficiently high skill bonus by being near the other various improvements that grant it bonus.
You may even need to <<dangertextlite 'built new buildings'>> to grant those bonuses.
</p>
<p>
You sighed to yourself while thinking just how far you are willing to go for a big fat bag of money... actually who wouldn't go far for that?
</p>Receive the grant<<set _room = $roomlist.getRoomInstances({template: setup.roomtemplate[$varstore.get('quest_fort_restoration_room')]})[0]>>
<<if !_room>>
<<set _room = $roomlist.getRoomInstances()[0]>>
<</if>>
<p>
It took you quite a bit of efforts to move things around, but now connections with your <<rep _room>> is much better.
The inspector is impressed, and hands you over the money.
The money is always appreciated, but perhaps you will be able to also appreciate that
<<if _room.getTemplate() == setup.roomtemplate.questoffice>>
you will be able to access everything easier from your office now.
<<elseif _room.getTemplate() == setup.roomtemplate.library>>
everyone will be able to reach the library faster now.
<<elseif _room.getTemplate() == setup.roomtemplate.market>>
more visitors will appear in your market now.
<<elseif _room.getTemplate() == setup.roomtemplate.hospital>>
everyone can have easy access to the hospital now.
<</if>>
You get the feeling this isn't the end of this, however, and an even more challenging task is up ahead...
</p>Decline for now<p>
The inspector tells you that <<they $g.inspector>> will be back in a year or so, should you change your mind by then.
</p>Decline and drop all connections with the community/* PROOFREAD COMPLETE */
<<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', "a|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', 1000),
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', "a|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', 1000),
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>
<<unitcard $g.child 1>>Recruit<p>
And so it ends.
You welcome your surprise <<daughter $g.child>> into your <<uarms
$unit.player>>. <<They $g.child>> child|is your <<daughter $g.child>> now,
and despite not hailing from this timeline,
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) child|is gagged and
sent over to the slave pens, for you to decide what to do with later. A time traveler
will surely fetch a nice price in the market, if anything.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'branching_timeline__decision', /* key */
"Branching Timeline: Decision", /* Title */
"darko", /* Author */
[ /* tags */
'special',
'unknown',
'fort',
],
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 finally 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>
<<unitcard $g.child 1>>Become lovers with <<if $g.parent>><<rep $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 the warmth of 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 exhude confidence 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>>.
</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 <<yourrep _u>> makes
your heart feels giddy, and the world would not be the same without <<therace
_u>> by your side.
</p>
<p>
Seeing your decision, <<rep $g.child>> child|resign to <<their $g.child>> fate.
Soon enough, <<their $g.child>> body begins to glow white — but not
disappearing! In fact, as you and <<yourrep _u>> continue to be locked in a
tight embrace, your <<daughter $g.child>> visibly child|transform before you.
</p>
<<set _father = $unit.player>>
<<set _mother = _u>>
<<if !_father.isHasDick() && _mother.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 $family.unsetRelation($g.child, $g.parent)>>
<<run $family.setParent(_mother, $g.child)>>
<<run $family.setParent(_father, $g.child)>>
<<run _w.delete()>>
<p>
The transformation ended, <<reps $g.child>> appearance has drastically
changed. <<Therace $g.child>> lost all resemblance to <<rep $g.parent>>, and
instead much child|resembles 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(
'luck_chaser', /* key */
"Luck Chaser", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'trait',
'prep',
],
1, /* expiration weeks */
'Opportunity_luck_chaser',
setup.qdiff.harder57, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_luck_chaser_0',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Through(setup.qres.And([
setup.qres.VarNull('quest_harbinger_of_luck_bath')
]), 'Must have not tried this before'),
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('seven_petal_baths', null),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_luck_chaser_1',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Through(setup.qres.And([
setup.qres.VarNull('quest_harbinger_of_luck_clover')
]), 'Must have not tried this before'),
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('clover_witch', null),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_luck_chaser_2',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Through(setup.qres.And([
setup.qres.VarNull('quest_harbinger_of_luck_lucky')
]), 'Must have not tried this before'),
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('luckiest_person_on_mestia', null),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_luck_chaser_3',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Through(setup.qres.And([
setup.qres.VarNull('quest_harbinger_of_luck_horse')
]), 'Must have not tried this before'),
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('lucky_horseshoe', null),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_luck_chaser_4',
outcome_passage: null,
costs: [ /* costs */
],
restrictions: [ /* restrictions */
setup.qres.Through(setup.qres.And([
setup.qres.VarNull('quest_harbinger_of_luck_magic')
]), 'Must have not tried this before'),
],
outcomes: [ /* outcomes */
setup.qc.QuestDirect('blessings_of_the_south', null),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'a': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
<<if !$varstore.get('quest_harbinger_of_luck_done')>>
<<Yourrep $g.a>> has presented to you several options that might be able to cleanse <<their $g.a>> unluckiness. How effective these methods, you're not sure, but what's the harm in trying out one or two?
<<else>>
It's time to try another method. <<Yourrep $g.a>> has yet again suggested several leads worth pursuing...
<</if>>
</p>A certain lucky activity in the vales...A certain lucky plant in the forest...An incredibly lucky person in the city...A certain lucky object in the desert...A certain lucky ritual in the seas.../* PROOFREAD COMPLETE */
<<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('pet_shopping__gender'), ],
], [
'Opportunity_pet_shopping_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('pet_shop_of_woes'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions to generate */
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('pet_shop_of_wonders'),
setup.qres.NoQuest('pet_shop_of_woes'),
setup.qres.Building(setup.buildingtemplate.veteranhall), ],
)>><p>
The citizens of the <<lore region_city>> loves to keep pets of every kind —
dogs, cats, ravens, fish, you name it! In the undercity, humanlikes 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 warehouses are rumored to be
fully stocked with humanlike pets of every race and 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 10000>>.
</p>
<p>
If you are interested in buying such a slave, you can start by filling up the
form specifying the particulars of the perfect slave you desire.
Otherwise, you also heard that the pet shop is accepting part-timer slavers right now
due to the high demand that comes with the promotion.
You could send a group of slavers to work there and, who knows, you
may be able obtain rare pet equipment or two if they work sufficiently well.
</p>Go shoppingGo intern/* PROOFREAD COMPLETE */
<<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.TraitReplaceExisting('pet', setup.trait.dick_small),
setup.qc.TraitReplaceExisting('pet', setup.trait.balls_small),
setup.qc.TraitReplaceExisting('pet', setup.trait.breast_small),
setup.qc.Opportunity('pet_shopping__personality', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__asset_size_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraitReplaceExisting('pet', setup.trait.dick_medium),
setup.qc.TraitReplaceExisting('pet', setup.trait.balls_medium),
setup.qc.TraitReplaceExisting('pet', setup.trait.breast_medium),
setup.qc.Opportunity('pet_shopping__personality', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__asset_size_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraitReplaceExisting('pet', setup.trait.dick_large),
setup.qc.TraitReplaceExisting('pet', setup.trait.balls_large),
setup.qc.TraitReplaceExisting('pet', setup.trait.breast_large),
setup.qc.Opportunity('pet_shopping__personality', {pet: 'pet'}),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
pet: [],
},
[ /* 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/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_pet_shop_of_wonders1',
"Pet (Male)",
'allmale', /* pools */
0, /* reuse chance */
[
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_pet_advanced),
],
)>>
<<run new setup.UnitGroup(
'quest_pet_shop_of_wonders1_female',
"Pet (Female)",
'allfemale', /* pools */
0, /* reuse chance */
[
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_pet_advanced),
],
)>>
<<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.Opportunity('pet_shopping__talent', {pet: 'petmale'}),
],
], [
'Opportunity_pet_shopping__gender_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity('pet_shopping__talent', {pet: 'petfemale'}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
petmale: 'quest_pet_shop_of_wonders1',
petfemale: 'quest_pet_shop_of_wonders1_female',
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Thank you for shopping with us! What kind of pet are you looking for today?
</p>MaleFemale/* PROOFREAD COMPLETE */
<<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.AddTraitsRandom(
'pet',
[setup.trait.per_aggressive, setup.trait.per_serious, setup.trait.per_attentive],
2,
true,
false),
setup.qc.QuestDirect('pet_shop_of_wonders', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__personality_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTraitsRandom(
'pet',
[setup.trait.per_lustful, setup.trait.per_empath, setup.trait.per_active],
2,
true,
false),
setup.qc.QuestDirect('pet_shop_of_wonders', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__personality_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTraitsRandom(
'pet',
[setup.trait.per_loyal, setup.trait.per_brave, setup.trait.per_direct],
2,
true,
false),
setup.qc.QuestDirect('pet_shop_of_wonders', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__personality_3',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTraitsRandom(
'pet',
[setup.trait.per_curious, setup.trait.per_logical, setup.trait.per_playful],
2,
true,
false),
setup.qc.QuestDirect('pet_shop_of_wonders', {pet: 'pet'}),
],
], [
'Opportunity_pet_shopping__personality_4',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.AddTraitsRandom(
'pet',
[setup.trait.per_evil, setup.trait.per_independent, setup.trait.per_sly],
2,
true,
false),
setup.qc.QuestDirect('pet_shop_of_wonders', {pet: 'pet'}),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
pet: [],
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Finally, choose your new pet's "taste".
</p>WatchfulLustyLoyalCuriousNaughty/* PROOFREAD COMPLETE */
<<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.TraitReplace('pet', setup.trait.muscle_verystrong),
setup.qc.Opportunity('pet_shopping__asset_size', {pet: 'pet'}), ],
], [
'Opportunity_pet_shopping__talent_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraitReplace('pet', setup.trait.face_beautiful),
setup.qc.Opportunity('pet_shopping__asset_size', {pet: 'pet'}), ],
], [
'Opportunity_pet_shopping__talent_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraitReplace('pet', setup.trait.per_smart),
setup.qc.Opportunity('pet_shopping__asset_size', {pet: 'pet'}), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
pet: [],
},
[ /* 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/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'the_essence_of_life', /* key */
"The Essence of Life", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* expiration weeks */
'Opportunity_the_essence_of_life',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_essence_of_life_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_essence_of_life', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_essence_of_life_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_very_essence_of_life', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_essence_of_life_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<include "PlantOfLewdityEssenceOfLifeCommon">>
<p>
You need quite a large quantity of the potion though. You'd either need to
supply ten bottles of <<rep setup.item.healing_potion>>, or five bottles of <<rep
setup.item.healing_potion_greater>>.
Or, if you have an actually working mind,
you'd save these potions for your actual
injured units and just ditch this stupid greedy of a plant...
</p>Supply ten bottles of <<rep setup.item.healing_potion>>Supply five bottles of <<rep setup.item.healing_potion_greater>>Forget this!/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'the_sweet_and_sour_essence', /* key */
"The Sour and Salty Essence", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* expiration weeks */
'Opportunity_the_sweet_and_sour_essence',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_sweet_and_sour_essence_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_sour_taste_of_milk', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_sweet_and_sour_essence_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_salty_taste_of_cum', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_sweet_and_sour_essence_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<include "PlantOfLewditySaltyAndSourTasteOfMilkCommon">>
<p>
You can choose to either supply the breast-milk or the cock-milk.
If you choose to
supply these milk, that means you'll have to provide several milkable cows --
a breasted cow for breast-milk and dick-slave for cock-milk.
These slaves will then be made available twenty-four hours a day for
the plant's pleasure over the next few months.
Still though, supplying a plant with valuable slave milk is absurd,
and it might just be in your best interest to abort everything...
</p>Supply milk cowsSupply cum cowsForget about this stupid plant and abort everything/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'the_sweet_taste_of_virginity', /* key */
"The Sweet Taste of Virginity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* expiration weeks */
'Opportunity_the_sweet_taste_of_virginity',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_the_sweet_taste_of_virginity_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_sweet_taste_of_virginity', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_sweet_taste_of_virginity_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('the_sweet_taste_of_anal_virginity', {
slaver: "slaver",
}),
],
],
[
'Opportunity_the_sweet_taste_of_virginity_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><<include "PlantOfLewditySweetTasteOfVirginityCommon">>
<p>
The instructions do not specify what kind of virgin the plant requires to consume,
so you could supply it with either slaves with virgin-tight vaginas, or slaves with
virgin-tight assholes...
</p><p>
By now, the Plant of Lewdity that <<yourrep $g.slaver>> nurtured has grown
into a full-blown plant. It is pretty large,
<<if $unit.player.isHasTrait('height_tall')>>
although still shorter than your tall self,
<<elseif $unit.player.isHasTrait('height_short')>>
much taller than your short self,
<<else>>
about as tall as you,
<</if>>
and
it's... viny, to say the least. <<Rep $g.slaver>> <<uadv $g.slaver>> imbued
the plant with magic each morning, and the plant had no doubt absorbed the
nutrient both magical and physical from all your efforts so far.
</p>
<p>
The final procedure to fully grow the plant is finally at <<uhand $unit.player>>.
The plant has been given the essence of sourness and saltiness, and the only remaining taste
it require would be sweetness. And what sweeter thing there is than taking other's
virginity? According to the instructions, in order to fully grow the plant,
the last step needed is to supply a group of virgins made available
for the plant and the plant only for over four months.
</p>
<p>
Unfortunately, there are no virgins whatsoever under your care. But perhaps
the lewd plant can be satisfied as long as the hole is tight enough.
While you normally scoff at the idea of letting a plant (of all things) gape your slaves,
you have already come this far and might as well complete whatever
fruit the plant is trying to produce...
</p>Vagina "virgins"Anal "virgins"Forget about this absurd plant and refuse/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'regalixir', /* key */
"Regalixir", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'trait',
],
1, /* expiration weeks */
'Opportunity_regalixir',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_regalixir_0',
'Opportunity_regalixir_0_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_ambidextrous], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_ambidextrous),
],
],
[
'Opportunity_regalixir_1',
'Opportunity_regalixir_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_intimidating], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_intimidating),
],
],
[
'Opportunity_regalixir_2',
'Opportunity_regalixir_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_connected], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_connected),
],
],
[
'Opportunity_regalixir_3',
'Opportunity_regalixir_3_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_hypnotic], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_hypnotic),
],
],
[
'Opportunity_regalixir_4',
'Opportunity_regalixir_4_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_creative], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_creative),
],
],
[
'Opportunity_regalixir_5',
'Opportunity_regalixir_5_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_entertain], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_entertain),
],
],
[
'Opportunity_regalixir_6',
'Opportunity_regalixir_6_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_alchemy], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_alchemy),
],
],
[
'Opportunity_regalixir_7',
'Opportunity_regalixir_7_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.skill_animal], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.skill_animal),
],
],
[
'Opportunity_regalixir_8',
null,
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(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)),
],
[ /* outcomes */
setup.qc.Opportunity('regalixir_magic_', {
you: "you",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
After spending much of your effort, time, and most importantly money, you've
finally gained the Regalixir, promised to unlock whatever dormant talent you
have lying within you.
The potion swirls beautifully, its color ever so shifting from red, blue,
green, and tinted yellow.
Furthermore, the potion is already tied to you and you alone, and nobody else
would reap the benefit from
consuming it.
All that's left is for you to gulp down the elixir, while focusing your
thoughts on several aspects related to the subject you wish to learn.
</p>
<p>
<<dangertext "This is a once-in-a-lifetime opportunity,">> as the Regalixir
is far too rare and it is extremely
unlikely you will ever get your <<uhands $unit.player>> on another bottle...
</p>Gain <<rep setup.trait.skill_ambidextrous>><p>
You focus your thoughts on dual wielding techniques and poise, thinking how
useful it would be to have both of your <<uarms $unit.player>> equally
capable. You proceed to gulp down the Regalixir, and the effect is immediate.
Tearing a piece of paper, you are immediately able to use either hands to
write your letters. This is no doubt just a small demonstration of what this
skills would do for your career, and you can't wait to test it out.
</p>Gain <<rep setup.trait.skill_intimidating>><p>
You focus your thoughts on instilling fear into other <<women $unit.player>>, both free and enslaved, thinking how useful it would be to have anyone fear you just from your presence alone. You proceed to gulp down the Regalixir, and the effect is immediate. The birds perching nicely around you immediately flew away, seemingly detecting a malicious aura coming from your body. This is no doubt just a small demonstration of what this skills would do for your career, and you can't wait to test it out.
</p>Gain <<rep setup.trait.skill_connected>><p>
You focus your thoughts on the art making other <<women $unit.player>> do your bidding, thinking how useful it would be to have a large connections within the region. You proceed to gulp down the Regalixir, and while the effect is not immediate, you find other people to be much, much easier to work with, and before long you've managed to form several connections within
the region, all via letters alone.
</p>Gain <<rep setup.trait.skill_hypnotic>><p>
You focus your thoughts on the art altering the subconscious minds of other <<women $unit.player>>, thinking how useful it would be to be able to control them against their will. You proceed to gulp down the Regalixir, and the effect is immediate. You test your newfound power over a nearby traveler, making them engage in long conversation with a complete stranger — you. While hypnotism would not be able to fully control the mind of others, you it will still be very useful to be able to guide where they are thinking, and you can't wait to test it out.
</p>Gain <<rep setup.trait.skill_creative>><p>
You focus your thoughts on coming up with ideas and plans, thinking how useful it would be to have a creative mind. You proceed to gulp down the Regalixir, and the effect is immediate. Ideas upon ideas come flooding into your mind, including how to fix that damned noisy door of your own room in the fort. This is no doubt just a small demonstration of what this skills would do for your career, and you can't wait to test it out.
</p>Gain <<rep setup.trait.skill_entertain>><p>
You focus your thoughts on the ability to entertain others, thinking how useful it would be to have a beautiful, captivating voice. You proceed to gulp down the Regalixir, and the effect is immediate. You can feel the muscles around your throat moving, widening your vocal range into a professional opera singer's. This is no doubt just a small demonstration of what this skills would do for your career, and you can't wait to test it out.
</p>Gain <<rep setup.trait.skill_alchemy>><p>
You focus your thoughts on the art of alchemy, thinking how useful it would be to be able to mix your own potions. You proceed to gulp down the Regalixir, and while the effect is not immediate, you feel you have a new understanding on how reagents can mix with others. You can't wait to go back home and test your newfound knowledge out.
</p>Gain <<rep setup.trait.skill_animal>><p>
You focus your thoughts on the various animals living around your fort, thinking how useful it would be to communicate with them. You proceed to gulp down the Regalixir, and the effect is immediate. Suddenly the birds surrounding you is shown under a different light — each animal telling you a tale of their surroundings. This is no doubt just a small demonstration of what this skills would do for your career, and you can't wait to test it out.
</p>Gain a magic skill/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'regalixir_magic_', /* key */
"Regalixir (Magic)", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'trait',
'special',
],
1, /* expiration weeks */
'Opportunity_regalixir_magic_',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_regalixir_magic__0',
'Opportunity_regalixir_magic__0_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_fire, setup.trait.magic_fire_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_fire),
],
],
[
'Opportunity_regalixir_magic__1',
'Opportunity_regalixir_magic__1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_water, setup.trait.magic_water_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_water),
],
],
[
'Opportunity_regalixir_magic__2',
'Opportunity_regalixir_magic__2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_wind, setup.trait.magic_wind_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_wind),
],
],
[
'Opportunity_regalixir_magic__3',
'Opportunity_regalixir_magic__3_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_earth, setup.trait.magic_earth_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_earth),
],
],
[
'Opportunity_regalixir_magic__4',
'Opportunity_regalixir_magic__4_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_light, setup.trait.magic_light_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_light),
],
],
[
'Opportunity_regalixir_magic__5',
'Opportunity_regalixir_magic__5_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Player(setup.qres.NoTraits([setup.trait.magic_dark, setup.trait.magic_dark_master], true)),
],
[ /* outcomes */
setup.qc.Trait('you', setup.trait.magic_dark),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
You've decided to use the Regalixir to try and learn a new magical ability. You should focus your mind into one of the aspects, in order to get the magic discipline that you are hoping to get...
</p>Gain <<rep setup.trait.magic_fire>><p>
You focus your thoughts on the concepts of fire: wrath, anger, and bravery. With these concepts flying around your mind, you gulp down the Regalixir, feeling its burning sensation down your throat. Your <<ubody $unit.player>> becomes unbearably hot, and you can feel fire burning from within you until it settles. Testing your newfound power — you flick a finger and sparks of fire erupt from your fingertips. Grinning <<uadv $unit.player>>, you feel powerful, and ready to unleash your new mastery over <<rep setup.trait.magic_fire>> upon the world.
</p>Gain <<rep setup.trait.magic_water>><p>
You focus your thoughts on the concepts of water: calmness, meditation, and peace of mind. With your mind empty and focused, you gulp down the Regalixir, feeling its soothing sensation down your throat. Your body feels unbelievably calm, and enjoying this sensation of stillness, you test your newfound power. With a flick of your finger water sprayed from your fingertips, forming a small but beautiful little rainbow. Smiling <<uadv $unit.player>>, you feel serene, and ready to utilize your new mastery over <<rep setup.trait.magic_water>>.
</p>Gain <<rep setup.trait.magic_wind>><p>
You focus your thoughts on the concepts of wind: entropy, chaos, and freedom. With your thoughts scattered around these concepts, you gulp down the Regalixir, and you feel your body and mind becoming free of burden. You feel incredibly free, and still within such a trance, you test your newfound power. With a flick of your finger gust of wind forms in front of you into a miniature tornado, sucking everything nearby. Smiling <<uadv $unit.player>>, you feel incredibly good, and ready to unleash your new mastery over <<rep setup.trait.magic_wind>> upon the masses.
</p>Gain <<rep setup.trait.magic_earth>><p>
You focus your thoughts on the concepts of earth: plenty, nourishment, and growth. With these rooted inside your mind, you gulp down the Regalixir, feeling its earthly sensation down your throat. Your <<ubody $unit.player>> becomes unbelievably heavy, and you are forced to lie down, but it also offers a strange, stoical strength. Testing your newfound power — you flick a finger and you can see the earth moving upwards, forming a small upheaval where you pointed. Closing your eyes <<uadv $unit.player>>, you feel strange — powerful, and yet peaceful at the same time — ready to use your mastery over <<rep setup.trait.magic_earth>> for the betterment of your company.
</p>Gain <<rep setup.trait.magic_light>><p>
You focus your thoughts on the concepts of light: kindness, care, and everything good. With your heart as pure as you could try to muster, you gulp down the Regalixir, feeling its soothing presence even deep inside your mind. Your <<ubody $unit.player>> becomes feels lighter, and smells faintly sweet. Still under the influence of the potion, you test your newfound power — flicking a finger and causing a small ray of light to form from your fingertip. You feel very strange, as if your mind is rejecting your current evil occupation as a slaver, and wish to use your newfound mastery over <<rep setup.trait.magic_light>> to bring much good into the world.
</p>Gain <<rep setup.trait.magic_dark>><p>
You focus your thoughts on the concepts of darkness: envy, selfishness, and everything bad. With your heart blackened by these thoughts, you gulp down the Regalixir, feeling its corrupting presence spreading within you.
Your mind immediately wanders, with many evil schemes suddenly coming into fray. Grinning <<uadv $unit.player>>, you test your newfound power by flicking a finger, which causes a small dark energy to escape from your fingertip and into the walls. You can't help but feel a little ambitious at the prospect of using your newfound mastery over <<rep setup.trait.magic_dark>> to rule over other <<women $unit.player>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"a_domestic_matter0",
"Master \"Maid\"",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.training_obedience_advanced, setup.trait.training_domestic_master, setup.trait.per_sly]),
],
)>>
<<run new setup.OpportunityTemplate(
'a_domestic_matter', /* key */
"A Domestic Matter", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'city',
'unknown',
'order',
'prep',
'veteran',
],
1, /* expiration weeks */
'Opportunity_a_domestic_matter',
setup.qdiff.hardest48, /* difficulty */
[ /* options */
[
'Opportunity_a_domestic_matter_0',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.QuestDirect('a_domestic_matter', {
rich: "rich",
maid: "maid",
master: "master",
}),
setup.qc.VarRemove('quest_seasonal_training_success'),
],
],
[
'Opportunity_a_domestic_matter_1',
'Opportunity_a_domestic_matter_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.SetCooldownOpportunity(null, 50),
setup.qc.VarRemove('quest_seasonal_training_success'),
setup.qc.SlaveMarker('maid'),
setup.qc.SlaverMarker('master'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.OpportunityUnique(),
setup.qres.NoQuest('seasonal_training'),
setup.qres.NoQuest('a_domestic_matter'),
setup.qres.NoOpportunity('domestic_rewards'),
setup.qres.VarGte('quest_seasonal_training_success', 2),
],
{ /* actors */
'yourslaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.HasTitle('seasonal_cleaning_head_full'),
],
'rich': 'quest_seasonal_cleaning1',
'master': 'all',
'maid': 'a_domestic_matter0',
},
[ /* expiration outcomes */
setup.qc.SetCooldownOpportunity(null, 50),
setup.qc.VarRemove('quest_seasonal_training_success'),
],
false, /* is must be answered */
)>><<include "Quest_a_domestic_matter">>AcceptReject<p>
Making you pay for selling your own slaves?
There are no way you would acquiesce to such an outrageous demand, no matter the potential rewards.
</p>/* PROOFREAD COMPLETE */
<<run new setup.OpportunityTemplate(
'domestic_rewards', /* key */
"Domestic Rewards", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'city',
'upgrade',
'item',
],
1, /* expiration weeks */
'Opportunity_domestic_rewards',
setup.qdiff.hardest48, /* difficulty */
[ /* options */
[
'Opportunity_domestic_rewards_0',
'Opportunity_domestic_rewards_0_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.NoItem(setup.item.technology_domesticmaster),
],
[ /* outcomes */
setup.qc.Item(setup.item.technology_domesticmaster),
],
],
[
'Opportunity_domestic_rewards_1',
'Opportunity_domestic_rewards_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Equipment(setup.equipmentpool.maid),
setup.qc.Equipment(setup.equipmentpool.maid),
setup.qc.Equipment(setup.equipmentpool.maid),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'master': [
],
'maid': [
],
'rich': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
It turns out that your client is not a free <<woman $g.maid>>. <<They $g.maid>> maid|turn out to be an extremely well-trained domestic slave belonging to <<their $g.maid>> <<master $g.master>>, who finally meet with your slavers to finalize the exchange.
</p>
<p>
In exchange for the noble and the two maid slaves your slavers have brought along, the <<master $g.master>> master|is offering your slavers a choice of two rewards.
First, <<they $g.master>> master|is offering three pieces from <<their $g.master>> very rare magical maid outfit collection. While these clothes are a little bit slutty, it is said that wearing them will make the wearer heals better. Alternatively, the <<master $g.master>> is willing to each your slavers the secret behind training masterful domestic slavers.
<<if $inventory.isHasItem('technology_domesticmaster')>>
But since you already know the secret from before, this option is no longer available to you, and there's only really one option for you to take here...
<<else>>
This is also a very lucrative offer, which may finally allow you to mold that perfectly submissive maids and butlers you have been always been dreaming of...
<</if>>
</p>The secret knowledge<p>
Your slavers watched as the <<master $g.master>> proceeded to command <<their
$g.master>> masterful slave to demonstrate what <<they $g.maid>> could do. The
<<maid $g.maid>> slave immediately stripped <<their $g.maid>> clothes, and wore a nearby
apron. With the apron covering <<their $g.maid>> front but leaving <<their
$g.maid>> back completely exposed, the <<maid $g.maid>> got down on all
fours, before using <<their $g.maid>> tongue to lick and clean the floor
while wiggling <<their $g.maid>> exposed buttchecks invitingly.
</p>
<p>
Wasting no time, the <<master $g.master>> unbuckled <<their $g.master>> pants before
<<if !$g.master.isHasDick()>>donning a strap-on an forcing it<<else>>forcing <<their $g.master>> erection<</if>> roughly into the open ass.
Your slavers as well as your sold slaves watched as the slave gasped, before
<<if $g.maid.isHasTail()>>
continuing to scrub the floor by using <<their $g.maid>> still available tail.
<<elseif $g.maid.isHasDick()>>
scrubbing the floor, cleaning whatever little <<they $g.maid>> can using <<their $g.maid>> own erection.
<<else>>
pressing <<their $g.maid>> boobs together before sliding them on the floor, trying to clean whatever little <<they $g.maid>> can.
<</if>>
This is what a true domestic slut would be — their passion for sex and cleaning unrivaled to the point where they have an intense strong desire to clean while being fucked, as the <<master $g.master>> and <<their $g.master>> slave had demonstrated to your slavers.
</p>
<p>
After a few more days of further demonstration, your slavers felt they had understood what is required to train a slave to be the ultimate domestic slut.
</p>The pieces of maid outfit<p>
The exchange was done. The two (three) slaves changed <<uhands $unit.player>> — they now belong to the <<master $g.master>>, while you are now in possession of three new rare maid equipments. While these equipments look just like regular slave gears, you can feel power from within them, which will improve the healing ability of whoever wear them. They are a bit slutty however...
</p>/* PROOFREAD COMPLETE */
<<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('the_serial_bodyswapper__ritual_runaway',
{
target: 'fighter',
shifter1: 'shifter1',
shifter2: 'shifter2',
shifter3: 'shifter3',
}),
],
], [
'Opportunity_the_serial_bodyswapper__reward_1',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity('the_serial_bodyswapper__ritual_runaway',
{
target: 'exploder',
shifter1: 'shifter1',
shifter2: 'shifter2',
shifter3: 'shifter3',
}),
],
], [
'Opportunity_the_serial_bodyswapper__reward_2',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Opportunity('the_serial_bodyswapper__ritual_runaway',
{
target: 'distractor',
shifter1: 'shifter1',
shifter2: 'shifter2',
shifter3: 'shifter3',
}),
],
], [
'Opportunity_the_serial_bodyswapper__reward_3',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slave('shifter1', 'a|was a living body storage of the serial bodyswapper'),
setup.qc.Slave('shifter2', 'a|was a living body storage of the serial bodyswapper'),
setup.qc.Slave('shifter3', 'a|was a living body storage of the serial bodyswapper'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'fighter': [],
'exploder': [],
'distractor': [],
'shifter1': [],
'shifter2': [],
'shifter3': [],
},
[ /* expired outcomes */
],
true, /* is must be answered */
)>><p>
Your slavers have the opportunity to reenact for one last time the bodyswapping
ritual in the stronghold of the serial bodyswapper.
The eligible slavers are:
<<rep $g.fighter>>,
<<rep $g.exploder>>, and
<<rep $g.distractor>>.
They can swap bodies with one of the bodyswapper's slaves:
<<rep $g.shifter1>>,
<<rep $g.shifter2>>, or
<<rep $g.shifter3>>.
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.
Note that your slavers would <<dangertext 'refuse to swap bodies with units of the opposite gender'>>!
</p>
<p>
The alternative is to forget about the bodyswap and just take all three of
these mindbroken slaves home.
</p>
<<unitcard $g.shifter1 1>>
<<unitcard $g.shifter2 1>>
<<unitcard $g.shifter3 1>>Choose <<rep $g.fighter>>Choose <<rep $g.exploder>>Choose <<rep $g.distractor>>Just take the slaves/* PROOFREAD COMPLETE */
<<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 */
setup.qres.SameGender('target', 'shifter1'),
],
[ /* outcomes */
setup.qc.Bodyswap('target', 'shifter1'),
],
], [
'Opportunity_the_serial_bodyswapper__ritual_runaway_1',
'Opportunity_the_serial_bodyswapper__ritual_runaway_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.SameGender('target', 'shifter2'),
],
[ /* outcomes */
setup.qc.Bodyswap('target', 'shifter2'),
],
],
[
'Opportunity_the_serial_bodyswapper__ritual_runaway_2',
'Opportunity_the_serial_bodyswapper__ritual_runaway_2_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.SameGender('target', 'shifter3'),
],
[ /* outcomes */
setup.qc.Bodyswap('target', 'shifter3'),
],
],
[
'Opportunity_the_serial_bodyswapper__ritual_runaway_3',
null,
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Slave('shifter1', 'a|was a living body storage of the serial bodyswapper'),
setup.qc.Slave('shifter2', 'a|was a living body storage of the serial bodyswapper'),
setup.qc.Slave('shifter3', 'a|was a living body storage of the serial bodyswapper'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
{ /* actors */
'target': [],
'shifter1': [],
'shifter2': [],
'shifter3': [],
},
)>><p>
<<Yourrep $g.target>> can swap bodies with one of the bodyswapper's slaves:
<<rep $g.shifter1>>,
<<rep $g.shifter2>>, or
<<rep $g.shifter3>>.
</p>
<<unitcard $g.shifter1 1>>
<<unitcard $g.shifter2 1>>
<<unitcard $g.shifter3 1>><p>
The preparations ready, <<yourrep $g.target>> moved into the bodyswapping
circle. Familiar arcane energy envelops <<theslaver $g.target>> who physically transformed
before your other slavers' eyes.
<<ubodyswap $g.target _slave>>
The bodyswapping complete, your slavers escaped from the place before the
ritual attracted unwanted attention.
</p>Choose <<rep $g.shifter1>><<set _slave = $g.shifter1>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>>Choose <<rep $g.shifter2>><<set _slave = $g.shifter2>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>>Choose <<rep $g.shifter3>><<set _slave = $g.shifter3>>
<<include 'Opportunity_the_serial_bodyswapper__ritual_runawayCommon'>>Change your mind and just take the slaves<<run new setup.OpportunityTemplate(
'clerk_exercise', /* key */
"Clerk Exercise", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'trait',
],
1, /* expiration weeks */
'Opportunity_clerk_exercise',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_clerk_exercise_0',
'Opportunity_clerk_exercise_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Leave('slaver', "a|is training to become more fit", undefined),
setup.qc.Event('clerk_exercise_outcome', 8, {
slaver: "slaver",
}),
],
],
[
'Opportunity_clerk_exercise_1',
'Opportunity_clerk_exercise_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('slaver', 1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
Not everyone under your employ comes from a physical background. Take <<yourrep $g.slaver>>, for example. Before joining your company, <<therace $g.slaver>> slaver|was mostly working behind the desk. Given <<their $g.slaver>> previous occupation, it's not really surprising that <<their $g.slaver>> body isn't as well-developed as some of your other slavers, and tire somewhat easily too.
</p>
<p>
<<Theslaver $g.slaver>> slaver|think so too. <<They $g.slaver>> apparently slaver|have been eyeing the <<rep setup.buildingtemplate.traininggrounds>>, and thinking to train up <<their $g.slaver>> body and make it fitter there. It'll take a few weeks of intensive training, but <<they $g.slaver>> will come out stronger and better than before.
</p>
<p>
<<They $g.slaver>> won't be available for any job at all during the intensive training, however, and hence you should decide whether you'd allow the silly-sounding self-improvement training or not.
</p>Allow<p>
Full of enthusiasm, <<yourrep $g.slaver>> makes a beeline for your <<rep setup.buildingtemplate.traininggrounds>>. The training will take quite a toll on <<therace $g.slaver>>, and <<they $g.slaver>> won't be available for any duty for the time being, but you hope that the results would be worth it.
</p>Disallow<p>
Your company does not always accept physical jobs. There are also jobs where you're supposed to negotiate or even write reports. <<Yourrep $g.slaver>> would not need to be very fit for those, and you feel <<their $g.slaver>> current stature is already fine. <<Theslaver $g.slaver>> slaver|feel a little down from your refusal, however good its intention.
</p><<run new setup.OpportunityTemplate(
'ex_leader', /* key */
"Ex-Leader", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
1, /* expiration weeks */
'Opportunity_ex_leader',
setup.qdiff.normal40, /* difficulty */
[ /* options */
{
description_passage: 'Opportunity_ex_leader_0',
outcome_passage: 'Opportunity_ex_leader_0_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.Leave('you', "a|is going on a vacation far away from the burdens of leadership", undefined),
setup.qc.Leave('slaver', "a|is currently substituting you as the leader of the company", undefined),
setup.qc.Event('vacation_over', 5, {
you: "you",
them: "slaver",
}),
],
visibility_restrictions: [
],
},
{
description_passage: 'Opportunity_ex_leader_1',
outcome_passage: 'Opportunity_ex_leader_1_flavor',
costs: [ /* costs */
],
restrictions: [ /* restrictions */
],
outcomes: [ /* outcomes */
setup.qc.MoneyCustom(1000),
],
visibility_restrictions: [
],
},
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'you': [
],
'slaver': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
Among your many slavers, <<yourrep $g.slaver>> is a particularly mysterious one. <<Therace $g.slaver>> has a particularly experienced aura, and
<<if $g.slaver.isHasTrait('per_loner')>>
although they rarely talk about it,
<<else>>
given how much they like to brag about it,
<</if>>
you get the feeling that <<they $g.slaver>> is far wiser beyond <<their $g.slaver>> years.
In fact, you recall that <<they $g.slaver>> had once led a similar slaving company such as yours some time in <<their $g.slaver>> past.
</p>
<p>
In fact, as fellow leader of the company (or former leader in <<their $g.slaver>> case), <<they $g.slaver>> knows intimately the burdens that come with the duty. <<Therace $g.slaver>> has <<uadv $g.slaver>> offers to you to take over of your duties for the coming several weeks, should you want to.
</p>Go on a vacation<p>
Once the words have come out of your lips, you could feel the temporary feeling of the heavy weight of leadership lifted from your shoulders. For the next few days, you are free from the burdens of leadership, and you plan to make good use of it by going on a vacation.
You'll leave your company in the capable hands of <<yourrep $g.slaver>>, who will be similarly busy managing your company.
</p>Refuse<p>
You thank <<therace $g.slaver>> for the kind offer, but ultimately decline. After all,
<<if $g.you.isHasTrait('per_masochistic')>>
you are a masochist, and find the torturous rigor of the work rather pleasurable.
<<elseif $g.you.isHasTrait('per_studious')>>
you are known for diligence, and would not neglect your duties.
<<elseif $g.you.isHasTrait('per_loyal')>>
you have your responsibilities to your slavers, something you would not trade for anything else.
<<else>>
you have work to do, and you best get back to it.
<</if>>
You made some money in the coming days.
</p><<run new setup.OpportunityTemplate(
'good_slaver_bad_slaver', /* key */
"Good Slaver Bad Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'trait',
],
1, /* expiration weeks */
'Opportunity_good_slaver_bad_slaver',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_good_slaver_bad_slaver_0',
'Opportunity_good_slaver_bad_slaver_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Trait('slave', setup.trait.training_obedience_basic),
setup.qc.Friendship('good', 'slave', 300),
setup.qc.Friendship('bad', 'slave', -300),
],
],
[
'Opportunity_good_slaver_bad_slaver_1',
'Opportunity_good_slaver_bad_slaver_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Mindbreak('slave'),
],
],
[
'Opportunity_good_slaver_bad_slaver_2',
'Opportunity_good_slaver_bad_slaver_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'good': [
],
'bad': [
],
'slave': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
<<Yourrep $g.good>> is an oddity among slavers — slaving naturally requires the slavers to be ruthless, but <<theslaver $g.good>> is actually a kind <<urace $g.good>>.
It is unclear how or why <<they $g.good>> good|choose to become a slaver in the first place,
<<if $g.good.isHasTrait('per_honorable')>>
especially considering how honorable <<they $g.good>> good|is,
<<elseif $g.good.isHasTrait('per_submissive')>>
further augmented by the submissiveness you know <<they $g.good>> secretly good|is,
<<elseif $g.good.isHasTrait('per_humble')>>
especially considering how down-to-earth <<they $g.good>> is,
<</if>>
<<if $g.good.isHasTrait('per_evil')>>
but you do note that <<theslaver $g.good>> good|have a particularly evil side to <<them $g.good>>.
<<elseif $g.good.isHasTrait('per_lunatic')>>
although questioning a lunatic like <<rep $g.good>> is futile.
<<elseif $g.good.isHasTrait('per_dominant')>>
although given how dominant <<they $g.good>> good|is in sex, it might just be that.
<<elseif $g.good.isHasTrait('per_proud')>>
although you would guess its <<their $g.good>> pride that demands <<them $g.good>> to continue on this job.
<<elseif $g.good.isHasTrait('per_stubborn')>>
although the slaver is too stubborn to admit <<their $g.good>> incompatibility with the job.
<<elseif $g.good.isHasTrait('per_logical')>>
although the slaver probably do the job simply because it's the logical thing to do in this world.
<<elseif $g.good.isHasTrait('per_lustful')>>
although perhaps <<their $g.good>> excessive lust is the reason.
<<else>>
and you know absolutely no reason why <<they $g.good>> ended up in such an odd predicament.
<</if>>
</p>
<p>
<<Yourrep $g.bad>>, on the other hand, is the polar opposite.
You know the <<urace $g.bad>> to be borderline sadistic, and enjoy using slaves until they scream for mercy.
In fact, <<they $g.bad>> bad|have just recently used one of the newer slaves just now — <<rep $g.slave>>,
<<if $g.bad.isHasDick()>>
brutally sodomizing the slave and <<their $g.slave>> <<uanus $g.slave>>
<<else>>
brutally penetrating the slave's <<uanus $g.slave>> with an oversized strap-on.
<</if>>
</p>
<p>
You expect the slave to be left to recover alone from the abuse in <<their $g.slave>> dungeon cells, but to your surprise, the <<rep $g.good>> is in there, tending and reassuring the slave. It seems the kind <<urace $g.good>> good|is moved by the slave's plight, and could not help but try to make it somewhat more comfortable for the suffering slave. <<They $g.good>> lovingly kiss and hug the slave, before massaging <<their $g.good>> broken anus. The slave even reciprocated the affection on some occasion, seeing <<rep $g.good>> as <<their $g.good>> only ray of light in your accursed fort.
</p>
<p>
Once <<rep $g.good>> good|leave the cell, <<rep $g.slave>> slave|is left alone to ponder on the strangeness of the situation. The combination of <<reps $g.bad>> abuse and <<reps $g.good>> care has left an impact on the slave — a perfect reenaction of the infamous "good cop bad cop" action. You see an opportunity here: with a little more push, you could instill a permanent obedience into the slave's mind. Alternatively, you could just abuse the slave again, which will probably break <<their $g.slave>> mind. If you have other plans for slave, you could alternatively simply ignore this opportunity and move on with your day.
</p>Instill obedience<p>
You come up with the plan to let <<rep $g.bad>> and <<rep $g.good>> continue alternating abusing and caring for the slave. <<Yourrep $g.bad>> bad|agree easily, as expected, but it took you some convincing to make the kind <<rep $g.good>> agree on the plan. <<They $g.good>> eventually see that the slave's suffering would be smaller should <<they $g.slave>> decide to be obedient quickly, and reluctantly agree to go through with the plan.
</p>
<p>
In the coming days, the cycle of abuse and care continues on the poor <<rep $g.slave>>, and before long <<they $g.slave>> sees <<rep $g.good>> as <<their $g.good>> only source of comfort in their seemingly endless cycle of rape. In the end, <<they $g.slave>> slave|is willing to do anything that <<rep $g.good>> commanded, and good|have become a good obedient little <<urace $g.slave>>.
</p>Break the slave's mind<p>
It is a simple matter for you to personally descend into the slave's cell and
make <<them $g.slave>> relive the horror of unwanted sex again. <<Their
$g.slave>> mind finally break from the treatment, and at the end of the day,
<<rep $g.slave>> slave|have become a drooling mess of a hollowed-out sex toy.
</p>Do nothing<p>
You have other plans for <<rep $g.slave>>, and it does not involve training or breaking <<their $g.slave>> mind.
</p><<run new setup.OpportunityTemplate(
'living_god', /* key */
"Living God", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
'favor',
],
1, /* expiration weeks */
'Opportunity_living_god',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_living_god_0',
'Opportunity_living_god_0_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('god', setup.qres.NoTraits([setup.trait.per_honorable], true)),
],
[ /* outcomes */
setup.qc.VarRemove('quest_living_god_isfavor'),
setup.qc.Duty('questlivinggod'),
],
],
[
'Opportunity_living_god_1',
'Opportunity_living_god_1_flavor',
[ /* costs */
],
[ /* restrictions */
setup.qres.Actor('god', setup.qres.NoTraits([setup.trait.per_evil], true)),
],
[ /* outcomes */
setup.qc.VarSet('quest_living_god_isfavor', '1', -1),
setup.qc.Duty('questlivinggod'),
],
],
[
'Opportunity_living_god_2',
'Opportunity_living_god_2_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.RemoveTitle('god', 'quest_living_god'),
setup.qc.VarRemove('quest_living_god_active'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'god': [
],
},
[ /* expiration outcomes */
],
true, /* is must be answered */
)>><p>
With the shrine completed, you could try to ask <<yourrep $g.god>> to direct <<their $g.god>> worship in a particular way...
</p>
<p>
You can ask <<them $g.god>> to base <<their $g.god>> worship towards money — asking the followers to donate a generous amount of tithe. <<Rep $g.god>> will take most of it, of course, but as the proprietor of the fort the naturally you would get a small cut of the tithe.
<<if $g.god.isHasTrait('per_honorable')>>
Unfortunately, <<reps $g.god>> honorable nature means <<therace $g.god>> immediately scoffs at the suggestion, and refuses to follow through with this.
<</if>>
</p>
<p>
Alternatively, you can ask <<them $g.god>> to simply hold honest-to-goodness sermons, no strings attached, except maybe the inclusion of some good words about your company.
<<if $g.god.isHasTrait('per_evil')>>
The evil slaver however likes the idea of getting a "generous amount of tithe", and refuses to go through with this option...
<</if>>
</p>Generous tithe<p>
You directed <<yourrep $g.god>> to focus <<their $g.god>> worshippers towards "donating" a generous amount of tithe. While <<they $g.god>> will pocket most of them for the "greater good", your company will take a small cut for lending the shrine for the worship.
</p>Sermons<p>
You directed <<yourrep $g.god>> to just hold honest sermons.
</p>
<p>
In the coming days, you notice that <<their $g.god>> many followers would often talk well about your company.
</p>Forget this stupid idea<p>
<<Rep $g.god>> is a slaver, not some deity to worship!
</p><<run new setup.OpportunityTemplate(
'man_woman_of_the_sea', /* key */
"Man/Woman of the Sea", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'unknown',
],
1, /* expiration weeks */
'Opportunity_man_woman_of_the_sea',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_man_woman_of_the_sea_0',
'Opportunity_man_woman_of_the_sea_0_flavor',
[ /* costs */
setup.qc.Money(-3000),
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.Leave('slaver', "a|is venturing to the Southern Seas to relive a|their past life", undefined),
setup.qc.Event('bounties_of_the_sea', 4, {
slaver: "slaver",
}),
],
],
[
'Opportunity_man_woman_of_the_sea_1',
'Opportunity_man_woman_of_the_sea_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.TraumatizeRandom('slaver', 1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
In the recent days, you've often seen <<yourrep $g.slaver>> gazing at the seas from your <<rep setup.buildingtemplate.scoutharbor>>. You don't need to guess why very hard, since today the
<<if $g.slaver.isHasTrait('bg_pirate')>>
ex-pirate
<<else>>
ex-<<man $g.slaver>>-of-the-sea
<</if>>
comes to your office, and asks to borrow some money from you.
A sum of <<money 3000>>, to borrow a ship and set sail southwards into the
<<lore region_sea>>.
Apparently, <<they $g.slaver>> slaver|have not lost <<their $g.slaver>> love of the sea, and would like to relive it if just for a little while.
</p>
<p>
It seems working as your slaver mostly as a landlubber is making the
<<if $g.slaver.isHasTrait('bg_pirate')>>
ex-pirate
<<else>>
ex-<<man $g.slaver>>-of-the-sea
<</if>>
miss the sea. You could lend the money to <<therace $g.slaver>>, although who knows if you'll get them back.
</p>Allow<p>
<<if $g.slaver.isHasTrait('bg_pirate')>>
With the money you lent, <<rep $g.slaver>> slaver|rouse a motley pirating crew before setting sail southwards from
<<else>>
With the money you lent, <<rep $g.slaver>> slaver|hire a crew and set sail southwards from
<</if>>
your <<rep setup.buildingtemplate.scoutharbor>>.
You'll probably hear back from <<therace $g.slaver>> in a couple of weeks.
</p>Disallow<p>
<<Rep $g.slaver>> slaver|look a little dejected from the refusal, but <<they $g.slaver>> must understand that <<they $g.slaver>> slaver|is a slaver now, and you have no doubt a future assignment will send <<them $g.slaver>> into the <<lore region_sea>>.
</p><<run new setup.OpportunityTemplate(
'noble_pardon', /* key */
"Noble Pardon", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'favor',
],
1, /* expiration weeks */
'Opportunity_noble_pardon',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_noble_pardon_0',
'Opportunity_noble_pardon_0_flavor',
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
[ /* restrictions */
setup.qres.IreAtLeast('humankingdom', 1),
],
[ /* outcomes */
setup.qc.Ire('humankingdom', -10),
],
],
[
'Opportunity_noble_pardon_1',
'Opportunity_noble_pardon_1_flavor',
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
[ /* restrictions */
setup.qres.IreAtLeast('humanvale', 1),
],
[ /* outcomes */
setup.qc.Ire('humanvale', -10),
],
],
[
'Opportunity_noble_pardon_2',
'Opportunity_noble_pardon_2_flavor',
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
[ /* restrictions */
setup.qres.IreAtLeast('humandesert', 1),
],
[ /* outcomes */
setup.qc.Ire('humandesert', -10),
],
],
[
'Opportunity_noble_pardon_3',
'Opportunity_noble_pardon_3_flavor',
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
[ /* restrictions */
setup.qres.IreAtLeast('elf', 1),
],
[ /* outcomes */
setup.qc.Ire('elf', -10),
],
],
[
'Opportunity_noble_pardon_4',
'Opportunity_noble_pardon_4_flavor',
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
[ /* restrictions */
setup.qres.IreAtLeast('neko', 1),
],
[ /* outcomes */
setup.qc.Ire('neko', -10),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
Among the many things that you have to maintain is your relationships with the various companies out there. And recently, it has not been going so well. You've angered some important people out there, and you're trying your best to ensure that it won't do your company any harm.
</p>
<p>
Just as you were thinking about what gifts to bring to them, <<yourrep $g.slaver>> slaver|have entered your office after overhearing your woes from the outside. As you recall, <<therace $g.slaver>> is of noble blood, and it still carries with it considerable connection within <<their $g.slaver>> circle. The
<<if $g.slaver.isHasTrait('bg_noble')>>
noble
<<else>>
royal
<</if>>
slaver|offer to make use of <<their $g.slaver>> noble connections to try and appease these companies, if you wish. But it will cost quite a few gold, to cover the bribes and gifts that must be procured, as well as some "service fee" for using <<their $g.slaver>> most noble service.
</p>Lose Ire with the Kingdom of Tor<p>
A few sweet words here, and a few bribes there, and before long the <<rep $company.humankingdom>> views your company with much less disdain than before.
</p>Lose Ire with the Humans of the Northern Vale<p>
A few sweet words here, and a few bribes there, and before long the <<rep $company.humanvale>> views your company with much less disdain than before.
</p>Lose Ire with the Humans of the Eastern Deserts<p>
A few sweet words here, and a few bribes there, and before long the <<rep $company.humandesert>> views your company with much less disdain than before.
</p>Lose Ire with the Elves<p>
A few sweet words here, and a few bribes there, and before long the <<rep $company.elf>> views your company with much less disdain than before.
</p>Lose Ire with the Neko<p>
A few sweet words here, and a few bribes there, and before long the <<rep $company.neko>> views your company with much less disdain than before.
</p><<run new setup.OpportunityTemplate(
'veteran_slaver', /* key */
"Veteran Slaver", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'trait',
],
1, /* expiration weeks */
'Opportunity_veteran_slaver',
setup.qdiff.normal40, /* difficulty */
[ /* options */
[
'Opportunity_veteran_slaver_0',
'Opportunity_veteran_slaver_0_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
setup.qc.IfThenElse(
setup.qres.Player(setup.qres.AnyTrait([setup.trait.bg_slaver, setup.trait.skill_intimidating, setup.trait.magic_wind_master, setup.trait.face_hideous], true)),
setup.qc.DoAll([
setup.qc.TraitReplace('slave', setup.trait.training_obedience_advanced)
], undefined),
setup.qc.DoAll([
setup.qc.TraitReplace('slave', setup.trait.training_obedience_basic)
], undefined)),
],
],
[
'Opportunity_veteran_slaver_1',
'Opportunity_veteran_slaver_1_flavor',
[ /* costs */
],
[ /* restrictions */
],
[ /* outcomes */
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
{ /* actors */
'slaver': [
],
'you': [
],
'slave': [
],
},
[ /* expiration outcomes */
],
false, /* is must be answered */
)>><p>
<<Yourrep $g.slaver>> slaver|have been a slaver for a long time, even before joining your company.
<<if $g.slaver.isHasTrait('race_demon')>>
Not a surprising fact — many demons who lived beyond <<lore concept_mist>> practice slavery, after all.
<<elseif $g.slaver.isHasTrait('subrace_humankingdom')>>
(Not in <<their $g.slaver>> homeland, however, since they have banned slavery by now.)
<<elseif $g.slaver.isHasTrait('subrace_humansea') or $g.slaver.isHasTrait('race_lizardkin')>>
Not a surprising fact — slavery is rampant everywhere, including on those lands beyond the <<lore region_sea>>.
<<elseif $g.slaver.isHasTrait('subrace_humandesert') or $g.slaver.isHasTrait('race_greenskin')>>
Not a surprising fact — being a slaver is very commonplace in the deserts <<they $g.slaver>> once called home.
<</if>>
<<if $unit.player.isHasTrait('bg_slaver')>>
In fact, <<they $g.slaver>> slaver|have a rather similar background with you.
<<else>>
In fact, <<they $g.slaver>> might have been a slaver before you started to become one.
<</if>>
You could certainly learn a thing or two from <<therace $g.slaver>>.
</p>
<p>
As it happens, you still have a rather disobedient slave under your care, <<rep $g.slave>>. It might be fun to ask <<them $g.slaver>> to demonstrate a thing or two <<they $g.slaver>> surely slaver|know about breaking slaves...
</p>Ask for a demonstration<p>
You find <<yourrep $g.slaver>> in the middle of <<uhobbyverb $g.slaver>>, and when <<they $g.slaver>> slaver|hear about your idea, <<they $g.slaver>>
<<if $g.slaver.isHasTrait('per_kind')>>
slaver|refuse straight away. Looks like the kind slaver is averse inflicting pain upon slaves, unless absolutely necessary...
<<else>>
slaver|look quite pleased with it. Together, you descend into the dungeons to pick up <<yourrep $g.slave>>, before heading into the <<rep setup.buildingtemplate.trainingchamber>>. You sit down and let <<yourrep $g.slaver>> slaver|show you what <<they $g.slaver>> could do to the slave from <<their $g.slaver>> past experiences.
<</if>>
</p>
<p>
<<if $g.slaver.isHasTrait('bg_slaver')>>
Since <<they $g.slaver>> hailed from the land beyond <<lore concept_mist>>, <<they $g.slaver>> slaver|is quite familiar with how demons break slaves. Compared to that degenerate of a place, the bondage devices in your training chamber is lacking, but the slaver makes do. The demons break their slaves in a very simple way: by cruelly breaking their mind. It took your slaver quite some skill to push the slave's mind to the brink of being completely broken, but pull away right before, leaving nothing but a compliant slave behind.
<<elseif $g.slaver.isHasTrait('per_cruel')>>
The cruel <<urace $g.slaver>> slaver|lick <<their $g.slaver>> lips in anticipation, as <<they $g.slaver>> slowly advances on the quivering slave. <<They $g.slaver>> slaver|grab a whip and proceed to give the slave a good long session of whipping, while explaining to you the finer points of inflicting pain upon others. One of the techniques is to blindfold the slave, which enhances their other senses, including the sense of touch. It doesn't take long before the slave is reduced doing nothing but incoherently beg for mercy.
<<elseif $g.slaver.isHasTrait('per_aggressive')>>
The aggressive <<urace $g.slaver>> slaver|do not hesitate, before grabbing the nearest tool of bondage and rain it down upon the slave. Before long, the slave is reduced to begging incoherently for the pain to stop. The slaver masterfully inflicts much pain upon the slave, but not injury so that the suffering can be extended for as long as <<yourrep $g.slaver>> slaver|want to. Before long, the slave is broken to a quivering mess on the floor.
<<elseif $g.slaver.isHasTrait('per_logical') or $g.slaver.isHasTrait('per_sly') or $g.slaver.isHasTrait('per_gregarious')>>
The slaver has learned a trick or two about breaking slaves without tool of pain — words can be a powerful too if used correctly. <<They $g.slaver>> elaborate the kinds of pain and torment the slave would endure in the near future, and also expound the hopelessness of the situation to <<them $g.slave>>. By the end of the "lecture", the slave is reduced to a crying mess on the floor, promising to be a good slave.
<<elseif $g.slaver.isHasTrait('per_lustful')>>
In <<their $g.slaver>> past a slaver, <<rep $g.slaver>> slave|have learned that the most primal desire of any <<urace $g.slave>> can be exploited, that is: sex.
Without any warning, <<they $g.slave>> slave|shove <<their $g.slave>> <<udickorstrap $g.slave>> up and inside the resisting slave, drawing incoherent moan of pain from the slave. The slave was then used in various degrading positions throughout the day, before eventually reduced to a sobbing mess on the floor, promising to be a good <<boy $g.slave>>.
<<else>>
<<They $g.slaver>> slave|demonstrate quite a masterful technique in breaking down slave, and before long <<rep $g.slave>> slave|is down on the floor, sobbing and promising to be a good slave.
<</if>>
</p>
<<if $unit.player.isHasTrait('bg_slaver')
or
$unit.player.isHasTrait('skill_intimidating')
or
$unit.player.isHasTrait('magic_wind_master')
or
$unit.player.isHasTrait('face_hideous')
>>
<p>
However, you feel you could do better than the slaver.
<<if $unit.player.isHasTrait('bg_slaver')>>
You also have been a slaver for quite some time, after all, and this gig is far from being your first.
<<elseif $unit.player.isHasTrait('skill_intimidating')>>
You feel you can use your rather intimidating stature to pressure more obedience into the slave.
<<elseif $unit.player.isHasTrait('magic_wind_master')>>
Your mastery of wind magic could be used to drill even more obedience into the slave.
<<elseif $unit.player.isHasTrait('face_hideous')>>
Your frightening face could probably drill even more obedience into your slave.
<</if>>
And you are right, by the time you finish with the slave, <<they $g.slave>> slave|have been reduced to nothing but an almost mindless slave, ready to serve all and every one of yours and your slavers' whims.
<<Yourrep $g.slaver>> slaver|is understandably quite impressed by the display, and the two of you grow somewhat closer over this.
</p>
<<run setup.qc.FriendshipWithYou('slaver', 100).apply($gQuest)>>
<</if>>Forget it!<p>
You have your own twisted plan for the <<urace $g.slave>>, and training them right now in basic obedience just isn't part of your plan.
</p>/* PROOFREAD COMPLETE */
<<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 pays off, as the slavers
undo your bindings seeing the compliant slave that they think you have
became. You manage to escape during the 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 pays off, as the slavers undo your bindings seeing the
mindbroken slave that they think you have became. You managed to escape
during the 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 mind<p>
You decide to rebel against the slavers, fighting them and injuring some of
them in the struggle. In retaliation, the slavers exact 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 dump
you in one of the villages along the way.
</p>
<p>
You are 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>/* PROOFREAD COMPLETE */
<<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. They
described in great details about your future "training", to make you into a
perfectly pliable, compliant, and valuable slave.
</p>
<p>
Fortunately for you, they turns out to be a reasonable slaver.
Seeing how you lead such a successful band of outlaws, your "owner" 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 (hopefully temporary) owner will continue on with your
"training" if you delay...
</p>Trade with a valuable and untrained slavePay your exorbitant ransom/* PROOFREAD COMPLETE */
<<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 <<yourrep $g.lover>> lover|have become rather
close. You have always considered <<therace $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 find <<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 lover|grab 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 lover|grab 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 lover|grab you by your <<uwaist $unit.player>>,
putting you in an awkward position, with <<their $g.lover>> lips almost
touching yours. <<They $g.lover>> then lover|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, <<yourrep $g.lover>>
<<if $g.lover.getSpeech() == setup.speech.friendly>>
joyfully lover|close the distance between you and gently lover|kiss your <<umouth $unit.player>>.
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 lover|close the distance between you and, without saying a word, lover|kiss
your <<umouth $unit.player>>. 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 lover|raise a surprised eyebrow, before regaining <<their $g.lover>>
composure and lover|give your acceptance a witty reply. But before you are allowed
to respond, you find <<them $g.lover>> already very close to you before stealing your
lips for a kiss.
<<elseif $g.lover.getSpeech() == setup.speech.debauched>>
lover|laugh 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 was in that moment!
</p>Reject<p>
Unfortunately, you have no interest in the <<man $g.lover>>. <<Rep $g.lover>>
lover|look absolutely devastated by the refusal, and lover|leave your office without
saying a word. <<They $g.lover>> will surely be traumatized by this, but
nothing time cannot heal.
</p>/* PROOFREAD COMPLETE */
<<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 can 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 does not agree to give you a better deal.
<</if>><<set setup.opportunitytemplate = {}>>
<<set _passages = Story.lookup('tags', 'opportunity')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><p>
Your new company shall be named <<textbox "$company.player.name" $company.player.getName()>>
</p>
<hr/>
<<unitcard $unit.player 1>>
<div>
You had some time before you restart with a new company, and you've been spending them by:
</div>
<<set _dom = setup.DOM.Menu.prologueNewGamePlusPCChange()>>
<<attach _dom>><<if $gNewGamePlusExLeader>>
<p>
To kickstart your new company, you have enticed several other slavers in addition
to the friends you brought from your previous company.
</p>
<<elseif $statistics.get('new_game_plus_count') && $gNewGamePlusExtraKeys.length>>
<p>
To establish your company, you have joined forces with four other slavers that you have
befriended along the way, including some of the mysterious veteran slavers that
just happened to be in the tavern that you were patroning before...
</p>
<<else>>
<p>
To establish your company, you have joined forces with four other slavers that you have
befriended along the way.
</p>
<</if>>
<div>
<<link 'Choose your starting slavers...' 'PrologueCompanyGen'>>
<<set _preference = $settings.getGenderPreference(setup.job.slaver)>>
<<for _i to 0; _i lt setup.STARTING_SLAVER_CHOICES; _i++>>
<<run new setup.MarketObject(
setup.unitgroup.all.getUnit(_preference),
0,
1,
$market.initslavermarket,
'Starting slavers',
)>>
<</for>>
<<if $gNewGamePlusExtraKeys>>
<<for _key range $gNewGamePlusExtraKeys>>
<<run new setup.MarketObject(
$unit[_key],
0,
1,
$market.initslavermarket,
'Mysterious slavers',
)>>
<</for>>
<</if>>
<<run $notification.popAll()>>
<<unset $gNewGamePlusExtraKeys>>
<</link>>
</div><<set $gMenuVisible = false>>
<<set $gPassage = 'PrologueCompanyGen'>>
<<focwidget 'loadflavortext'>>
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 _callback = () => {
if (State.variables.company.player.getUnits().length >= 5) {
setup.qc.QuestDirect('establish_base').apply();
setup.DOM.Nav.goto('PrologueIntro');
return true;
};
}>>
<<set _dom = setup.DOM.Card.market({
market: $market.initslavermarket,
is_can_delete: false,
on_buy_callback: _callback,
})>>
<<attach _dom>><<set _dom = setup.DOM.Menu.gameinit()>>
<<attach _dom>><<if $gNewGamePlusExLeader>>
<<unset $gNewGamePlusExLeader>>
<p>
After scouring away and far from your old home, you found yet another abandoned fort
to establish your new company at.
It seems there are quite a bit of abandoned forts in the area, and you are not very sure why.
</p>
<p>
Like before, the fort would need a lot of repairs to be worthy to be called as the stronghold
of your glorious company, but as you have demonstrated in the past, it can be done.
There is much to be done, however, and you are eager to begin straight away...
</p>
<<if !setup.unitgroup.new_game_plus_slaves.isEmpty()>>
<p>
Until you build the <<rep setup.buildingtemplate.veteranhall>>,
the slaves you've brought along from your old fort will be stowed away safely
in one of the dungeons you have already paid in advance.
</p>
<</if>>
<<else>>
<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.
</p>
<p>
You open the gates to your new fort and begin your new career...
</p>
<<if !setup.unitgroup.new_game_plus_slaves.isEmpty()>>
<p>
(You get the feeling that some slaves you are destined to receive will
somehow be received once you build the <<rep setup.buildingtemplate.veteranhall>>.)
</p>
<</if>>
<div class='helpcard'>
<p>
Welcome to Fort of Chains!
</p>
<p>
This game is designed to be perfectly playable going in completely blind in your first playthrough.
There are contextual help texts such as
<<message '(?)'>>
<div class='helpcard'>
You have successfully clicked the help link and make this help text appears!
To close, click the "(?)" link again.
</div>
<</message>>
throughout the games.
You can get more hints and help by clicking on them.
In this game, please
do not be afraid of failures! The game is designed so that
<<successtext "if you fail / time out on a quest, there will be replacement quests or the quest will respawn">>.
</p>
<p>
Hint: Make sure to check the Settings menu to change your game's preferences.
Also, the [Space] key is a shortcut to press continue for most menus.
</p>
</div>
<</if>>
<div>
<<set _dom = setup.DOM.Menu.gameinit()>>
<<attach _dom>>
</div><p>
You will be playing as a head slaver, managing a slaving company.
You should give both the player character a name, as well as the slaving company they will be managing.
From now on, the player character will simply be referred to as "you".
</p>
<div>
Your company name is <<textbox "$company.player.name" $company.player.getName()>>
</div>
<<set $i = {}>>
<div>
Your first name is <<textbox "$i.firstname" "Robin">>.
</div>
<div>
Your last name is <<textbox "$i.lastname" "Doe">>.
</div>
<<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):
<<message '(?)'>>
<div class='helpcard'>
You can use this option to adjust the how often units of certain gender will be encountered in the game.
</div>
<</message>>
<div>
Slave: <<cycle '$settings.gender_preference.slave' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div>
<div>
Slaver: <<cycle '$settings.gender_preference.slaver' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div>
<div>
Other: <<cycle '$settings.other_gender_preference' autoselect>><<optionsfrom _preferenceoption>><</cycle>>
</div>
</p>
<p>
Check all the tags that you want to <<dangertext 'ban'>>:
<<message '(?)'>>
<div class='helpcard'>
Banning a tag means that content involving them will not be generated in your playthrough.
For example, banning furry will prevent most quests dealing specifically with furries
to be hidden from you.
</div>
<</message>>
<<include 'ShowBannedTags'>>
</p>
<p>
You can <<message 'change other game settings too.'>>
<div class='helpcard'>
<<include 'SettingsBase'>>
</div>
<</message>>
</p>
<p>
To proceed, choose your player character's gender:
</p>
<div>
<<focbutton 'Male' 'PrologueImagePack'>>
<<set $i.gender_key = setup.trait.gender_male.key>>
<</focbutton>>
</div>
<div>
<<focbutton 'Female' 'PrologueImagePack'>>
<<set $i.gender_key = setup.trait.gender_female.key>>
<</focbutton>>
</div><p>
Select the image packs you wish to use on this game.
If this is the first time you are playing this game, you can simply
click "Continue" below.
</p>
<<set _dom = setup.DOM.Menu.imagepacks()>>
<<attach _dom>>
<p>
<<button 'Continue' 'PrologueChoose'>>
<</button>>
</p><p>
You can either fully customize your player character:
<<message '(?)'>>
<div class='helpcard'>
Should you decide to fully customize your character, you will be asked to select
what traits your character should have amongst the myriads of traits in the game.
While these traits all have some in-game effects, they are all beneficial one way or another,
and it is recommended to pick the set of traits that you simply like to roleplay as best.
</div>
<</message>>
</p>
<p>
[[I want to fully customize myself!|PrologueRace]]
</p>
<p>
or start with a preset one:
</p>
<<rep setup.skill.combat>>-oriented
<<link 'brave desertfolk knight capable of using both arms equally well' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_humandesert'>>
<<set $i.trait_keys = [
'bg_knight',
'per_brave',
'skill_ambidextrous',
]>>
<</link>>
<br/>
<<rep setup.skill.brawn>>-oriented
<<link 'blunt orc blacksmith with an intimidating posture' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_orc'>>
<<set $i.trait_keys = [
'bg_metalworker',
'per_direct',
'skill_intimidating',
]>>
<</link>>
<br/>
<<rep setup.skill.survival>>-oriented
<<link 'loner dragonkin wildman capable of flight' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_dragonkin'>>
<<set $i.trait_keys = [
'bg_wildman',
'per_loner',
'wings_dragonkin',
]>>
<</link>>
<br/>
<<rep setup.skill.intrigue>>-oriented
<<link 'sly human assassin with many connections' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_humankingdom'>>
<<set $i.trait_keys = [
'bg_assassin',
'per_sly',
'skill_connected',
]>>
<</link>>
<br/>
<<rep setup.skill.slaving>>-oriented
<<link 'cruel engineer from a faraway land beyond the southern seas with a hypnotizing gaze' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_humansea'>>
<<set $i.trait_keys = [
'bg_engineer',
'per_cruel',
'skill_hypnotic',
]>>
<</link>>
<br/>
<<rep setup.skill.knowledge>>-oriented
<<link 'studious northerner scholar with a creative mind' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_humanvale'>>
<<set $i.trait_keys = [
'bg_scholar',
'per_studious',
'skill_creative',
]>>
<</link>>
<br/>
<<rep setup.skill.social>>-oriented
<<link 'silver-tongued neko noble with a divine voice' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_neko'>>
<<set $i.trait_keys = [
'bg_noble',
'per_gregarious',
'skill_entertain',
]>>
<</link>>
<br/>
<<rep setup.skill.aid>>-oriented
<<link 'kind elven healer with vast knowledge on how to mix potions' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_elf'>>
<<set $i.trait_keys = [
'bg_healer',
'per_kind',
'skill_alchemy',
]>>
<</link>>
<br/>
<<rep setup.skill.arcane>>-oriented
<<link 'lavish demonkin mystic gifted in the domain of the dark magic' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_demonkin'>>
<<set $i.trait_keys = [
'bg_mystic',
'per_lavish',
'magic_dark',
]>>
<</link>>
<br/>
<<rep setup.skill.sex>>-oriented
<<link 'playful werewolf courtesan capable of communicating with animals' 'PrologueGenerateChar'>>
<<set $i.race_key = 'subrace_werewolf'>>
<<set $i.trait_keys = [
'bg_courtesan',
'per_playful',
'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(['subrace'])>>
<<set _ban = [
setup.trait.subrace_demon,
setup.trait.subrace_fairy,
setup.trait.subrace_angel,
setup.trait.subrace_tigerkin,
setup.trait.subrace_dragonkin,
]>>
<<if !_ban.includes(_race)>>
<<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)'>>
<div class='helpcard'>
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.
</div>
<</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)>>
<<if _trait == setup.trait.skill_ambidextrous && $i.race_key == 'subrace_neko'>>
<<set $i.race_key = 'subrace_tigerkin'>>
<</if>>
<</link>>:
<<= _trait.getDescriptionDisplay()>>
<<if _trait == setup.trait.skill_ambidextrous && $i.race_key == 'subrace_neko'>>
(Choosing this option will change your race from
<<rep setup.trait[$i.race_key]>> to <<rep setup.trait.subrace_tigerkin>>)
<</if>>
<</capture>>
<</if>>
<</for>>
<<if ['subrace_elf',
'subrace_lizardkin',
'subrace_demonkin',
'subrace_humankingdom'].includes($i.race_key)>>
<br/>
<<set _text = `${setup.trait.skill_flight.getName()}`>>
<<rep setup.trait.skill_flight>>
<<set _target_race = $i.race_key>>
<<switch $i.race_key>>
<<case 'subrace_elf'>>
<<set _target_race = 'subrace_fairy'>>
<<case 'subrace_lizardkin'>>
<<set _target_race = 'subrace_dragonkin'>>
<<case 'subrace_humankingdom'>>
<<set _target_race = 'subrace_angel'>>
<<case 'subrace_demonkin'>>
<<set _target_race = 'subrace_demon'>>
<</switch>>
<<capture _target_race>>
<<link _text 'PrologueGenerateChar'>>
<<set $i.race_key = _target_race>>
<</link>>:
<</capture>>
<<= setup.trait.skill_flight.getDescriptionDisplay()>>
(Choosing this option will change your race from
<<rep setup.trait[$i.race_key]>> to <<rep setup.trait[_target_race]>>)
<</if>><<set _unitgroup = setup.unitgroup[$i.race_key]>>
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')>>
/* 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/>
<<button 'Proceed with this unit as your avatar' 'PrologueCompanyGenIntro'>>
<<unset $i>>
<<run setup.DOM.Menu.prologueMakePlayer(_unit)>>
<</button>>/* PROOFREAD COMPLETE */
<<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_human,], true),
setup.qres.NoTrait(setup.trait.per_chaste),
setup.qres.NotYou(),
],
{
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.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_human], true),
setup.qres.AnyTrait([setup.trait.training_obedience_basic, setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'caged_tomato', /* key */
"Caged Tomato", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/joyyfi/v100_is_here_submit_all_your_stories_bug_reports/gcqa0j9/',
},
[ 'city', 'order'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'deliverer': [_criteriadeliverer, 3],
'merchandise': _criteriamerchandise, },
{ /* actors */
'buddy': '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, setup.rarity.rare],
],
[ /* restrictions to generate */
setup.qres.HasSlaverWithTraits([setup.trait.gender_female]),
setup.qres.HasSlaveWithTraits([setup.trait.gender_female]),
],
)>><p>A specialty buyer in the <<lore region_city>> 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>> deliverer|want 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>> 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>> 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>> 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>> deliverer|is satisfied, <<rep $g.merchandise>> 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>> 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>> 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>> deliverer|have 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>> deliverer|have to pay a substantial bribe to keep herself on the right side of the cage.</p>
<</if>>/* PROOFREAD COMPLETE */
<<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_lavish,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
],
[
setup.trait.bg_mist,
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_sly,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
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 */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[
'veteran', 'trait', 'prep', 'city', 'special',
], /* tags */
3, /* 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.normal47, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.SetCooldownOpportunity('enlightenment_of_the_soul___prelude', 10),
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_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 2, true), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.SetCooldownOpportunity('enlightenment_of_the_soul___prelude', 10),
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_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 1, true), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.TraitRemove('pupil', setup.trait.per_chaste), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.MissingUnit('pupil'),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_honorable, setup.trait.per_calm], 2, true),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoQuest('infiltration_of_the_heart'),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_enlightenment_1_graduate_0'),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_female),
])
],
[ /* expiration outcomes */
],
)>><<set _trap = ($gQuest.getTemplate().key == 'infiltration_of_the_heart')>>
<p>
One of your diligent slavers has successfully graduated the first phase of Master training at the Women's Academy of Light<<if _trap>>, despite actually being a man<</if>>.
<<set _vice = $dutylist.getUnitIfAvailable('viceleader')>>
<<if _vice>> Your vice leader, <<rep _vice>>, brings you
<<else>> You have now received <</if>>
a letter from the Academy, singing them 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
<<if _trap>>
"lady"
<<else>>
lady
<</if>>
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, they has overcome all obstacles, penetrated all riddles,
taken a whetstone to their wits, and thus armed themself
on the way to obtaining all mysteries, all secrets, of the Light
Mage's knowledge. Now is their 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 their 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 theirs. . .
</p>
<p>
<I>Nuts</i>, you think. <i>Can't they 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>
<<if _trap>>
<p>
And of course, since your slaver will need to disguise themself again, add another
ten thousand for the Potion of Illusion...
</p>
<</if>><p>
<<if $g.pupil.isMale()>>
After gulping down the Potion of Illusion and embarrasedly donning <<their $g.pupil>>
best dress,
<</if>>
<<Rep $g.pupil>> returned to the unimposing stone building in Lucgate, which
still houses the Women's Academy of Light. Again <<they $g.pupil>> 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 <<their $g.pupil>> meditation
and <<their $g.pupil>> 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>>
pupil|is straitly given in charge that <<they $g.pupil>> is not to eat one
bite more than <<they $g.pupil>> is given at meals, and those are to be light
and infrequent. At breakfast <<they $g.pupil>> is to drink an alchemical
draught designed to intensify <<their $g.pupil>> feelings. <<They $g.pupil>>
is to sleep not one minute more than <<they $g.pupil>> is allowed by <<their
$g.pupil>> guide, and he will allow far less than <<they $g.pupil>> is
accustomed to. <<They $g.pupil>> is not to allow <<themself $g.pupil>> any
sexual release, not so much as a single erotic touch, and any violation of
this order will be grounds for immediate expulsion<<if $g.pupil.isMale()>>,
although this will probably for a completely different reason for your disguised slaver<</if>>.
<<Their $g.pupil>> mind
is to be bent entirely to the themes and meditations of the exercises, and
each day <<they $g.pupil>> is to write in a diary and confess to <<rep
$g.master>> all <<their $g.pupil>> failings in <<their $g.pupil>> 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 <<reps $g.pupil>> own life and failings,
each exercise a meditation, and each meditation an hour. <<They $g.pupil>> is
to consider the Tale of the Sun Child, and all occasions when <<they
$g.pupil>> has done harm to a being no less harmless; and the Verse of the
Dark River, and how each of <<their $g.pupil>> meanest deeds has reverberated
to the harm of the world. Tale follows tale and reflection follows
reflection.
</p>
<p>
<<They $g.pupil>> 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_catkin')>>
<<They $g.pupil>> is forced to
dwell on <<their $g.pupil>> own birth as a <<urace $g.pupil>>, 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 <<their $g.pupil>>
own dark dreams. <<They $g.pupil>> 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_wolfkin')>> <<They $g.pupil>> is forced to
dwell on <<their $g.pupil>> own whelping as a werewolf, on the heartless
pack-hunting ways of <<their $g.pupil>> lupine sires that sometimes fill
<<their $g.pupil>> dreams. <<They $g.pupil>> 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_greenskin')>> <<They $g.pupil>> is forced
to dwell on <<their $g.pupil>> birth and nature as <<urace $g.pupil>>, one of that
notorious race of debauched green-skinned rapists, on how <<their $g.pupil>>
very existence must surely rely on more forced ravishing than gentle
lovemaking, and the way <<their $g.pupil>> 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_lizardkin')>> <<They $g.pupil>> is forced
to dwell on <<their $g.pupil>> 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. <<They $g.pupil>> must
confront <<themself $g.pupil>> and ask how such a being could know the ways
of Light and bring healing to the world.
<<elseif $g.pupil.isHasTrait('race_demon')>> <<They $g.pupil>> is forced to
dwell <<their $g.pupil>> 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. <<They $g.pupil>> 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')>> <<They $g.pupil>> is forced to
dwell on <<their $g.pupil>> 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>>
<<themself $g.pupil>>, who yet imagines that <<they $g.pupil>> can summon the
pure light, and bring healing to the world.
<<else>> <<They $g.pupil>> is forced to dwell on <<their $g.pupil>> 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 <<their $g.pupil>> 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 <<they $g.pupil>>, 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 <<their $g.pupil>> head is swimming
with fatigue and hunger, and <<they $g.pupil>> 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.
<<They $g.pupil>> 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 <<their $g.pupil>> corrupt origins, but for the
ugliness within <<them $g.pupil>>, that has grown since the first day <<they
$g.pupil>> could think. <<Their $g.pupil>> smallest transgressions, <<their
$g.pupil>> most persistent vices, fill <<their $g.pupil>> mind for the hours
of the exercises, and mortify <<them $g.pupil>>.
<<if $g.pupil.isHasTrait('per_lunatic')>> <<They $g.pupil>> must confront
<<their $g.pupil>> own lunacy—and in <<their $g.pupil>> woozy, hungry,
sleep-deprived clarity, must ask <<themself $g.pupil>> whether
<<they $g.pupil>> is retreating from the realities of <<their $g.pupil>> own
badness into the comforting fog of a mad<<woman $g.pupil>>'s dreaming.
<</if>>
<<if $g.pupil.isHasTrait('per_lustful')>> <<They $g.pupil>> must face <<their
$g.pupil>> own unbridled lusts, and as the deprivations of the flesh take
hold of <<them $g.pupil>>, must face the truth that the creatures <<they
$g.pupil>> seeks to sate <<their $g.pupil>> 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')>> <<They $g.pupil>> must face
<<their $g.pupil>> 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 ther'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 <<they $g.pupil>> has
flung left and right, simply because there was hate in <<their
$g.pupil>> heart that wanted out, though <<they $g.pupil>> never imagined
where it might lead. <</if>>
<<if $g.pupil.isHasTrait('per_cruel')>> <<They $g.pupil>> must face the
cruelty in <<their $g.pupil>> heart and in <<their $g.pupil>> ways, and the
pleasure <<they $g.pupil>> 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, <<they $g.pupil>> must come to understand the outright sadism that
has animated <<their $g.pupil>> outwardly lovely frame, and the pain those
well-fashioned hands have inflicted for the sake of <<their $g.pupil>>
lubricious wishes, and what it has meant for the objects of
that pain, of whom <<they $g.pupil>> was thoughtless as <<they $g.pupil>>
sought only <<their $g.pupil>> own desires. <</if>>
<<if $g.pupil.isHasTrait('per_masochistic')>> Indeed, <<they $g.pupil>> must
come to understand the pleasure <<they $g.pupil>> has drawn from <<their
$g.pupil>> 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. <<Their $g.pupil>> own sexual desires may have brought much
unwelcome pain to others, and <<they $g.pupil>> must be mindful of
consequences. <</if>>
<<if $g.pupil.isHasTrait('per_sly')>> <<They $g.pupil>> must face <<their
$g.pupil>> 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 <<theirs $g.pupil>> brings a Cloud of Corrupton upon the earth,
one that the Pure Light is meant to piece, but <<they $g.pupil>> <<themself
$g.pupil>> is its greatest enemy. <</if>>
<<if $g.pupil.isHasTrait('per_evil')>> Above all things, <<they $g.pupil>>
must confront the core of <i>evil</i> within <<themself $g.pupil>>, 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 <<they $g.pupil>> 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
<<their $g.pupil>> unsated hunger, <<their $g.pupil>> unfulfilled need for
sleep, and <<their $g.pupil>> unquenchable and increasing need for sexual
release continue, <<their $g.pupil>> daily confessions of stray thoughts grow
more tearful, and the images on which <<they $g.pupil>> must meditate grow
worse. <<They $g.pupil>> must bend <<their $g.pupil>> 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 <<they $g.pupil>> can only see <<themself
$g.pupil>> in them, and ask what <<their $g.pupil>> life has been.
</p>
<p>
<<if $g.pupil.isHasTrait('bg_noble')>> Has <<they $g.pupil>> not been a
noble, supposedly the mainstay and fighting bulwark of any kingdom, yet too
often simply a pampered parasite, extracting <<their $g.pupil>> living and
pleasures from the sweat of honest folk? Precious little nobility in that.
<</if>>
<<if $g.pupil.isHasTrait('bg_mercenary')>> Has <<they $g.pupil>> 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 <<they $g.pupil>> 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 <<they $g.pupil>> and <<their
$g.pupil>> 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 <<they $g.pupil>> 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 <<their
$g.pupil>> wretched life moving forward? Toenail fungus has a more beautiful
life. <</if>>
<<if $g.pupil.isHasTrait('bg_thug')>> Has <<they $g.pupil>> not been a thug,
pushing <<their $g.pupil>> way into the lives of those who wish only to live
and find a little happiness, and beating <<their $g.pupil>> 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 <<they $g.pupil>> 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 <<themself $g.pupil>> . <</if>>
<<if $g.pupil.isHasTrait('bg_thief')>> Has <<they $g.pupil>> not been a
thief, seeing around <<their $g.pupil>> 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 <<themself $g.pupil>> the flimsiest
excuses for what <<they $g.pupil>> did to them? Worse than worthless. <</if>>
<<if $g.pupil.isHasTrait('bg_whore')>> Has <<they $g.pupil>> not been a
whore, selling <<their $g.pupil>> 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 <<they $g.pupil>> 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 <<they $g.pupil>> 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><<they $g.pupil>></i> is may be found
dripping from a donkey's dong. <</if>>
Worst of all, and worst of all creatures, <<they $g.pupil>> 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 <<name $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>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
At the end of the week, <<reps $g.pupil>> evening confessions are
increasingly tearful, and in <<their $g.pupil>> confused, deprived state,
<<they $g.pupil>> is not only wondering whether <<they
$g.pupil>> may be fit to receive and transmit the Pure Light. <<They
$g.pupil>> is wondering whether <<they $g.pupil>> is fit to
live and breathe at all. The first morning of the second week finds <<their
$g.pupil>> kneeling in a bare meditation chamber, lit only by a beam of pure
sunlight through a clear window, <<their $g.pupil>> face streaming with
tears, and <<their $g.pupil>> 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—<<their $g.pupil>> wishes are
granted. This week, <<their $g.pupil>> 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 <<they $g.pupil>> 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 <<they $g.pupil>> masters—at least for now—the
worst of <<their $g.pupil>> fleshly needs. <<Their $g.pupil>> daily
confessions of aberrant thoughts become sparser and less tearful, as <<they
$g.pupil>> comes to see <<they $g.pupil>> can perfect <<themself $g.pupil>>,
and focus on the ideals before <<their $g.pupil>>.
</p>
<p>
<<They $g.pupil>> is allowed to remember the better parts of <<their
$g.pupil>> character now, to integrate them into <<their $g.pupil>> new and
nobler self, one that is worthy to wear the robe of a master healer.
<<if $g.pupil.isHasTrait('per_chaste')>> After all, <<they $g.pupil>> has
shown restraint in controlling <<their $g.pupil>> lustful desires, however
desirable <<they $g.pupil>> might be, and so kept <<themself $g.pupil>> from
breaking hearts and causing much harm. <</if>>
<<if $g.pupil.isHasTrait('per_lavish')>> It must be said, <<their $g.pupil>>
nature has always been generous and free-handed, and maybe <<their $g.pupil>>
small acts of kindness have brought more happiness than <<they $g.pupil>>
knew. <</if>>
<<if $g.pupil.isHasTrait('per_calm')>> It has to be allowed, <<they
$g.pupil>> has always been an island of patience and calm when others around
<<their $g.pupil>> were roiled, and has nipped many a pointless feud in the
bud with <<their $g.pupil>> quietude and willingness to listen. <</if>>
<<if $g.pupil.isHasTrait('per_humble')>> <<Their $g.pupil>> sincere desire
for simplicity has sometimes let <<their $g.pupil>> bring peace to others.
<</if>>
<<if $g.pupil.isHasTrait('per_logical')>> <<Their $g.pupil>> logical ways,
<<their $g.pupil>> ability to “see reason” when others cannot, has sometimes
done them a world of good. <</if>>
<<if $g.pupil.isHasTrait('per_empath')>> <<Their $g.pupil>> natural empathy,
<<their $g.pupil>> 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_direct') ||
$g.pupil.isHasTrait('per_honorable')>> Whatever else may be said, <<rep
$g.pupil>> pupil|is a <<woman $g.pupil>> of <<their $g.pupil>> word, and
people know they can trust <<their $g.pupil>>. <</if>>
<<if $g.pupil.isHasTrait('per_kind')>> Above all, at heart, <<rep $g.pupil>>
pupil|is a kindly soul, who draws more pleasure from another's smile than
from anything else in life.<</if>>
<<Their $g.pupil>> best traits may not manifest every day, but they are
there, and <<they $g.pupil>> sees them more clearly now.
</p>
<p>
In time, <<rep $g.pupil>> pupil|is allowed to see that <i><<they
$g.pupil>></i>, even as <<they $g.pupil>> is, has worth; just as the ones
<<they $g.pupil>> 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 <<they $g.pupil>> achieves Enlightenment of the Heart, at least enough
to raise <<their $g.pupil>> another step on the way to Mastery.
</p>
<p>
On the final day, <<they $g.pupil>> enjoys a simple, communal meal with
<<their $g.pupil>> spiritual guide, <<rep $g.master>>, and <<their $g.pupil>>
one fellow pupil. The latter, a young lady from the vale, glows with a new
inner beauty, and <<rep $g.pupil>> realizes <<they $g.pupil>> is seeing a
reflection of <<their $g.pupil>> own enlightened, ennobled face. And <<their
$g.pupil>> master and guide, <<their $g.pupil>> beautiful, beautiful master
and guide, now brings effusive praise and even embraces <<their $g.pupil>>
chastely. Both pupils have withstood the darkness and conquered it, and taken
a step furt<<their $g.pupil>> into the Light. </p>
<<if $gOutcome == 'crit'>> <p> <<Rep $g.pupil>> <<themself $g.pupil>> has
overcome more ill than any other student this year. On <<reps $g.master>>
recommendation, the <i>curia honoris</i> of the Women's Academy of Light has
chosen to award <<their $g.pupil>> the Laurel of Lustration, which will not
only mean a beautifully calligraphed certificate, but a partial deferment of
<<their $g.pupil>> tuition. Which will at least please that suspicious
skinflint <<name $unit.player>>. </p> <</if>>
<p> <<Rep $g.pupil>> sleeps <<their $g.pupil>> last night at the Academy in
great peace.
<<set _pimp = $dutylist.getUnitIfAvailable('entertainmentpimp')>>
<<set _marketer = $dutylist.getUnitIfAvailable('marketer')>>
<<set _viceleader=$dutylist.getUnitIfAvailable('viceleader')>>
<<set _trainer=$dutylist.getUnitIfAvailable('trainer')>>
And then <<they $g.pupil>> 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 <<their
$g.pupil>> 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 <<their $g.pupil>> 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 <<their $g.pupil>> 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 <<their $g.pupil>> back and fills <<their $g.pupil>>
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> <<Reps $g.pupil>> Certificate of Purification
does indeed look nice on <<name $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>
<<elseif $gOutcome == 'failure'>>
<p>
And still the first week is not done, and the worst has not passed. As
<<their $g.pupil>> unsated hunger, <<their $g.pupil>> unfulfilled need for
sleep, <<their $g.pupil>> unquenchable and increasing need for sexual release
continue, <<their $g.pupil>> diary, which should be full of contrition and
self-correction, is instead full of increasingly erotic drawings, most
involving <<themself $g.pupil>> and <<rep $g.master>>. <<Their $g.pupil>>
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.”
<<They $g.pupil>> 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,” <<they $g.pupil>> says, wider-eyed still. “I know I should be
focused on my transgressions, but all I can think of is you. See!” <<They
$g.pupil>> promptly hands him <<their $g.pupil>> 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>> pupil|want done to <<their $g.pupil>>, 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>
<<They $g.pupil>> seizes his <<uhands $g.master>>, stopping his breath completely with the
intensity of <<their $g.pupil>> 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>
<<if $g.pupil.isMale()>>
<p>
And just like that, the effect Potion of Illusion, which requires the drinker to be chaste to work
effectively, was broken.
The pupil was revealed for what <<they $g.pupil>> really is -- a male <<urace $g.pupil>>,
and was prompty expelled from the academy.
The tuition is extremely non-refundable, and you have never lost so much money
within such a short period of time...
</p>
<<else>>
<p>
There is not much more – <<they $g.pupil>> is tearing off <<their $g.pupil>>
robe, and he is trying to restrain <<their $g.pupil>>, but in going for
<<their $g.pupil>> wrists he finds <<their $g.pupil>> <<ubreasts $g.pupil>>,
and in minutes all forbearance is forgotten as he plunges into <<their
$g.pupil>> <<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_catkin')
|| $g.master.isHasTrait('race_lizardkin') ||
$g.master.isHasTrait('race_wolfkin') ||
$g.master.isHasTrait('race_greenskin')>> Or <i>mortal</i>, anyway.
<<elseif $g.master.isHasTrait('race_demon')>>Or, rat<<their $g.pupil>>, he
isn't human, but a demon, and whatever the Discipline of Light has taught
him, <<rep $g.pupil>> pupil|have 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 <<their $g.pupil>> in
the bargain. If <<name $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>
<</if>>
<<else>>
<p>
At the end of the week, <<reps $g.pupil>> evening confessions are
increasingly tearful, and in <<their $g.pupil>> confused, deprived state,
<<they $g.pupil>> is not only wondering whether <<they $g.pupil>> may be fit
to receive and transmit the Pure Light. <<They $g.pupil>> is wondering
whether <<they $g.pupil>> is fit to live and breathe at all. The first
morning of the second week finds <<their $g.pupil>> kneeling in a bare
meditation chamber, lit only by a beam of pure sunlight through a clear
window, <<their $g.pupil>> face streaming with tears, and <<their $g.pupil>>
heart filled only with a wish to be cleansed of all the horrors of the
previous week.
</p>
<p>
<<Rep $g.master>> approaches <<their $g.pupil>> 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 <<they $g.pupil>> may enter into a better Way with a purer heart.”
</p>
<p>
“You don't understand,” <<they $g.pupil>> replies. “Do you know who sent me
here? That <<uadjper $unit.player>>, <<uadjper $unit.player>>,
flesh-trading pervert-monster <<name $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 hig<<their $g.pupil>>
price . . .” – and here <<they $g.pupil>> breaks down in shame
and guilt.
</p>
<p>
You can guess the rest. <<They $g.pupil>> quits the slaving trade that very
day,<<if $g.pupil.isFemale()>>
and after a whirlwind romance marries <<their $g.pupil>> Pupilmaster.
They dedicate their lives to happiness and charity until misfortune overtakes
them, perhaps as divine recompense for <<their $g.pupil>> past bad deeds.
<<else>>
and last you heard <<therace $g.pupil>> decide to open a charity for war victims to prevent
them from being enslaved.
<</if>>
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>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_enlightenment_1_graduate_0", /* key */
"Enlightenment 1 Graduate", /* name */
"Enlightenment Graduate - Level 1", /* description */
"a|have 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 Graduate - Level 2", /* description */
"a|have 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.subrace_humankingdom_male, 0.1],
[setup.unitpool.subrace_humanvale_male, 0.1],
[setup.unitpool.subrace_humandesert_male, 0.1],
[setup.unitpool.subrace_humansea_male, 0.1],
[setup.unitpool.subrace_elf_male, 0.1],
[setup.unitpool.subrace_neko_male, 0.1],
[setup.unitpool.subrace_werewolf_male, 0.1],
[setup.unitpool.subrace_orc_male, 0.1],
[setup.unitpool.subrace_lizardkin_male, 0.1],
[setup.unitpool.subrace_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_mist,
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),
setup.qres.NotYou(),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'enlightenment_of_the_mind', /* key */
"Enlightenment of the Mind", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ 'breeding',
'city',
'veteran',
'trait',
'prep',
'rare',
], /* tags */
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.normal44, /* 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_mindCrit',
[
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_mindCrit',
[
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, setup.rarity.uncommon],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoQuest('infiltration_of_the_mind'),
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),
]),
],
[ /* expiration outcomes */
],
)>><<set _trap = ($gQuest.getTemplate().key == 'infiltration_of_the_mind')>>
<<set _Mystic = $dutylist.getUnitIfAvailable('mystic')>>
<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>
<<if _trap>>
<p>
As your potential student is actually a male, as before they would just have
to gulp down many bottles of Potion of Illusion, to mask their true gender as a male
and appear female to anyone else.
The guise will hold for as long as they can hold off their arousal.
This would also offset you <<money 10000>>.
</p>
<<else>>
<p>
(Of course, there are others in this world who can bodyswap men and women,
but the Academy knows nothing of that.)
</p>
<</if>>
<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><<if $g.pupil.isMale()>>
<p>
<<Rep $g.pupil>> spent the first week preparing for the long journey, masquerading as a female.
While the Potion of Illusion will mask all their physical features,
it does nothing for their personality, and
<<they $g.pupil>> must learn what it is to feel like a female.
The week was spent embarrasingly as the slaver learnt many intricacies of being a woman.
</p>
<p>
By the end of the week, with the right disguise and clothing, and the help of the Potion of Illusion,
<<rep $g.pupil>> would pass as a gorgeous young woman to anyone else but themself.
<<They $g.pupil>>'ll just have to bear with having to crossdress all the time while attending
the classes...
</p>
<</if>><<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'>>
<<include 'Quest_enlightenment_of_the_mindCommon'>>
<p>
<<if $g.pupil.isMale()>>
With the preparation complete,
<</if>>
<<rep $g.pupil>> reports to the address in Lucgate, an unimposing stone
building in a quiet part of town. Inside, <<they $g.pupil>> is greeted by
Pupilmaster <<rep $g.master>>, the only male in the place<<if $g.pupil.isMale()>> (to their knowledge, at least)<</if>>, who gratefully
accepts <<their $g.pupil>> tuition and introduces <<them $g.pupil>> 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.
<<if $g.pupil.isMale()>>
(Fortunately, the Potion of Illusion also hides all trace of erection the slaver
felt from being surrounded by the many innocent women in the academy.)
<</if>>
The rest of their time is to be taken up with study and contemplation.
</p>
<<if $gOutcome == 'success' or $gOutcome == 'crit'>>
<p>
After a sober but convivial meal on the first evening, <<reps $g.pupil>>
studies begin. Pupilmaster <<rep $g.master>> 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>
<<if $g.pupil.isFemale() && $g.pupil.isHasTrait('per_lustful') >>
<p>
<<rep $g.pupil>>, lustful lass
that <<they $g.pupil>> is, drops a hint or two towards <<their $g.pupil>>
handsome teacher, but if he notices, he pretends not to.
<i>Why stick with female students, then?</i> <<they $g.pupil>> wonders.
<i>Unless it's because that's what he doesn't like.</i>. <<They $g.pupil>>
simply has to console <<themself $g.pupil>> in <<their $g.pupil>> room after
studies—at least until <<they $g.pupil>> makes it home to <<rep
$company.player>>, where sins of the flesh are a way of life
and an article of commerce.
</p>
<</if>>
<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 <<they $g.pupil>> 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. <<They $g.pupil>> has learned many
new facts concerning the anatomy and illnesses of the various races <<their
$g.pupil>> 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.isFemale() && $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 <<they $g.pupil>> reflects on the less advanced lightmages <<they
$g.pupil>> has known, including <<themself $g.pupil>>, and doesn't think
<i>that</i> could be it. </p> <</if>>
<<if $g.pupil.isMale()>>
<p>
The illusion spell fizzles out just as your slaver steps outside of the academy, and
none inside are any wiser of <<therace $g.pupil>>'s true gender. You just hope this won't
come back to bite you in the ass later...
</p>
<</if>>
<<else>>
<p>
The first evening, after bathing and changing, the three young
<<if $g.pupil.isMale()>>
"ladies"
<<else>>
ladies
<</if>>
join
Pupilmaster <<rep $g.master>> for their first evening meal together,
a simple repast of bread, wine, and spiced meats. <<Rep
$g.pupil>> opened the talk with some of the wounds <<they $g.pupil>> 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 <<they $g.pupil>> is feeling
<i>so</i> tired . . . .
</p>
<p>
. . .
</p>
<p>
. . .
</p>
<p>
. . .
</p>
<p>
. . . <<they $g.pupil>> awakens some days later, sore and disarrayed, and
quite alone. <<Their $g.pupil>> head is swimming and there's a
throbbing pain behind <<their $g.pupil>> eyes. The room is dark but for a
little sunlight streaming through a shuttered window, but <<they $g.pupil>>
lifts <<their $g.pupil>> <<uhands $g.pupil>> and summons a small sphere of
magic light, so <<they $g.pupil>> can take stock of <<their $g.pupil>>
situation.
</p>
<<if $g.pupil.isMale()>>
<p>
It seems the academy somehow knew about <<their $g.pupil>> use of the Potion
of Illusion. But instead of refusing the pupil outrights, the pupilmaster decided
to accept the tuition first, before "expelling" the student away.
</p>
<p>
There is nothing else to do but go home with all the money gone. <<Yourrep $g.pupil>>
also feels a strange soreness in their private parts, mostly <<their $g.pupil>> anus,
telling a story what <<they $g.pupil>> might have been used for in <<their $g.pupil>>
drugged state...
</p>
<<else>>
<p>
<<They $g.pupil>>'s been lying on a lumpy straw mattress on the floor of the
now-abandoned and –unfurnished building. <<They $g.pupil>> is
quite naked, and the tattered remains of <<their $g.pupil>> “academic robe”
were serving as <<their $g.pupil>> only blanket.
The soreness in <<their $g.pupil>> intimate parts,
the musty smell, and the white stains on the
mattress, the robe, and <<their $g.pupil>> body, tell <<their $g.pupil>> all
too well how <<they $g.pupil>> has been used in <<their $g.pupil>> drugged
state.
</p>
<p>
Revulsion overcomes <<them $g.pupil>>.
<<if $g.pupil.isHasTrait('per_lustful') >> Emotionally, <<they $g.pupil>> is torn between anger and regret—if they'd just known how to <i>ask</i> a <<girl $g.pupil>>, <<they $g.pupil>> might have some memories to go with the experience. As it is <<they $g.pupil>>'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')>> <<Their $g.pupil>> usual disgust at being part of any sex act is simply tripled by this violation. If <<they $g.pupil>> could get hold of those scum, <<they $g.pupil>>'d tear their fucking hearts out, or better still give them a special place in the slave dungeons of <<rep $company.player>>. Yes, <<they $g.pupil>> 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 <<they $g.pupil>> gets control of <<themself $g.pupil>>, <<they $g.pupil>> 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 <<themself $g.pupil>>.
</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>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<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_lavish,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
],
[
setup.trait.bg_mist,
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_sly,
setup.trait.per_evil,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
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 */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ 'veteran', 'special', 'trait', 'prep', 'city',
], /* 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.normal50, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.Event('coming_of_age', 938, {child: 'child',}),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, 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', "completed 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_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, 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', "completed all three phases of Enlightenment at the Women's Academy of Light."), ],
], [
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.SetCooldownQuest('enlightenment_of_the_mind', 100),
setup.qc.MissingUnit('pupil'),
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_2_graduate_1'),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, 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', "completed all three levels of Enlightenment at the Women's Academy of Light."),
setup.qc.AddHistory('pupil', ", under the influence of Enlightenment, quit the slaving life and married a|their Pupilmaster and raised a|their child, until and unless nameless disaster tears a|their from them."), ],
], [
'Quest_enlightenment_of_the_soulCrit',
[
setup.qc.SetCooldownQuest('enlightenment_of_the_mind', 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. <<Yourrep _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 <<reps _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_lizardkin')>>
<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 <<urace _p>>, 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_catkin')>>
<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_wolfkin')>>
<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_greenskin')>>
<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>Among 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('subrace_humandesert')>> date-palm wine
<<elseif _p.isHasTrait('subrace_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>
<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>
<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_lizardkin')>> 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_lizardkin')>> 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 <<name $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.getUnitIfAvailable('scoutcity')>>
<<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>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_gift_of_the_magi1',
"Hermit",
[
[setup.unitpool.subrace_humanvale_male, 0.5],
[setup.unitpool.subrace_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_lavish,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
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_frugal,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_sly,
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_lavish,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
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_frugal,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_sly,
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_lavish,
setup.trait.per_humble,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
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_frugal,
setup.trait.per_proud,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_sly,
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_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.per_dominant,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.SlaveValueAtLeast(30000),
setup.qres.TraitExact(setup.trait.gender_female),
setup.qres.AnyTrait([setup.trait.race_human, setup.trait.race_elf], true),
setup.qres.NoTraits([setup.trait.face_hideous, setup.trait.face_scary, 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 */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/jxmjhl/v110_is_here_submit_all_your_content_bug_report/gdhw5lw/',
},
[ 'desert',
'veteran',
'order',
'rare',
], /* 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, setup.rarity.epic],
],
[ /* 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.getUnitIfAvailable('scoutdesert')>>
<<set _Marketer = $dutylist.getUnitIfAvailable('marketer')>>
<<set _Mystic = $dutylist.getUnitIfAvailable('mystic')>>
<<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 region_city>>. 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.getUnitIfAvailable('scoutdesert')>>
<<set _Marketer = $dutylist.getUnitIfAvailable('marketer')>>
<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 <<reps $g.windmagus>> 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 <<reps $g.firemagus>> 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>> 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, <<name $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>> 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_lavish') || $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_lavish') || $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_lavish') || $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 <<name $unit.player>>. No matter how much treasure we bring back from a successful quest, <<name $unit.player>> <i>always</i> swears we stole half of it!”
</p>
<p>
<<if $g.windmagus.isHasTrait('bg_thief') || $g.windmagus.isHasTrait('per_sly') || $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_sly') || $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_sly') || $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.getUnitIfAvailable('scoutdesert')>>
<<set _Marketer = $dutylist.getUnitIfAvailable('marketer')>>
<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 <<reps $g.windmagus>> 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 <<reps $g.firemagus>> 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>> 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_frugal')>> <<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_frugal')>> <<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_frugal')>> <<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>> firemagus|have 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>> prepared to intimidate, or incinerate, the foolish hermit.
<<elseif $g.windmagus.isHasTrait('per_proud') || $g.windmagus.isHasTrait('per_aggressive')>> <<rep $g.windmagus>> windmagus|have 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 <<reps $g.loveslave>> lips. So give us what we're after.”
<<elseif $g.watermagus.isHasTrait('per_proud') || $g.watermagus.isHasTrait('per_aggressive')>> <<rep $g.watermagus>> 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. <<Reps $g.hermit>> 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>> 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>> loveslave|have 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>/* PROOFREAD COMPLETE */
<<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_lavish,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_loyal,
setup.trait.per_direct,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_calm,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
],
[
setup.trait.bg_mist,
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_sly,
setup.trait.per_evil,
setup.trait.per_aggressive,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_male),
setup.qres.HasTitle('quest_enlightenment_1_graduate_0'),
setup.qres.Trait(setup.trait.magic_light),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'infiltration_of_the_heart', /* key */
"Infiltration of the Heart", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[
'veteran', 'trait', 'prep', 'city', 'special',
], /* tags */
2, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'pupil': [_criteriapupil, 3]},
{ /* actors */
'master': 'quest_enlightenment_of_the_mind1', },
[ /* costs */
setup.qc.Money(-20000), ],
'Quest_enlightenment_of_the_heart',
setup.qdiff.normal47, /* difficulty */
[ /* outcomes */
[
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.SetCooldownOpportunity('infiltration_of_the_soul', 10),
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_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 2, true), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.SetCooldownOpportunity('infiltration_of_the_soul', 10),
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_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 1, true), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.TraitRemove('pupil', setup.trait.per_chaste), ],
], [
'Quest_enlightenment_of_the_heartCrit',
[
setup.qc.RemoveTitle('pupil', 'quest_enlightenment_1_graduate_0'),
setup.qc.MissingUnit('pupil'),
setup.qc.AddTraitsRandom('pupil', [setup.trait.per_lavish, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_loyal, setup.trait.per_direct, setup.trait.per_honorable, setup.trait.per_calm], 2, true),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoQuest('enlightenment_of_the_heart'),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.ExistUnit([
setup.qres.HasTitle('quest_enlightenment_1_graduate_0'),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_male),
])
],
[ /* expiration outcomes */
],
)>>/* PROOFREAD COMPLETE */
<<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.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
],
[
setup.trait.bg_mist,
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.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_male),
setup.qres.TraitExact(setup.trait.magic_light),
setup.qres.NotYou(),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'infiltration_of_the_mind', /* key */
"Infiltration of the Mind", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/k53ydc/enlightenment/',
},
[ 'breeding',
'city',
'veteran',
'trait',
'prep',
'rare',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.normal44, /* 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_mindCrit',
[
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_mindCrit',
[
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, setup.rarity.uncommon],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoQuest('enlightenment_of_the_mind'),
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_male),
]),
],
[ /* expiration outcomes */
],
)>>/* PROOFREAD COMPLETE */
<<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.subrace_humansea,
],
[
setup.trait.per_dreamy,
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.per_lunatic,
setup.trait.per_slow,
setup.trait.race_catkin,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
knowledge: 2,
}
)>>
<<set _criteriaseafighter = new setup.UnitCriteria(
null, /* key */
'Sea Fighter', /* name */
[
setup.trait.subrace_humansea,
setup.trait.race_lizardkin,
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.tough_nimble,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.trait.race_catkin,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
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 */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/joyyfi/v100_is_here_submit_all_your_stories_bug_reports/gcl0rho/',
},
[ 'special',
'sea',
'veteran',
'unit',
'prep'
], /* tags */
6, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'yourself': _criteriayourself,
'navigator': _criterianavigator,
'seafighter': _criteriaseafighter, },
{ /* actors */
'slaver': 'missingslavers',
'captain': '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', "took 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', "got shanghaied to serve as navigator aboard a pirate vessel."),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.rescue, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
setup.qres.QuestUnique(), ],
)>><p>
<<set _rescuer = $dutylist.getUnitIfAvailable('rescuer')>>
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)>> <<reps $g.seafighter>> 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 <<reps $g.captain>> preferred waters.
<<if $g.navigator.isHasTrait('race_catkin')>> 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>> 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 <<reps $g.captain>> 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 <<reps $g.captain>> 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 <<reps $g.captain>> progress across the island, and you lead the way yourself as you follow his track
<<else>> Eventually, you find Captain <<reps $g.captain>> 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>> captain|have 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>> 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_wolfkin')>>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_lizardkin')>>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_greenskin')>>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>> slaver|want 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('tough_nimble')>> I'd shown that I could am quick in the heat of battle. <</if>>
<<if $g.slaver.isHasTrait('per_lavish')>> 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_sly')>> 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 <<reps $g.captain>> 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)>> <<reps $g.seafighter>> 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 <<reps $g.captain>> preferred waters.
<<if $g.navigator.isHasTrait('race_catkin')>> 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('tough_nimble')>>, leaping acrobatically from your ship to the enemy's,<</if>> and cuts through two of the enemy before meeting a fearsome sight: Captain <<reps $g.captain>> 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_catkin')>> 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('tough_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>> 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 <<reps $g.captain>> 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>> 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.getUnitIfAvailable('doctor')>>
<<if _doctor and $g.slaver.isHasTrait(setup.trait.gender_male)>> But later, at <<reps $g.slaver>> 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 <<reps $g.slaver>> 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)>> <<reps $g.seafighter>> 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 <<reps $g.captain>> preferred waters.
<<if $g.navigator.isHasTrait('race_catkin')>> 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('tough_nimble')>>, leaping acrobatically from your ship to the enemy's,<</if>> and cuts through two of the enemy before meeting a fearsome sight: Captain <<reps $g.captain>> 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_catkin')>> 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('tough_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>> 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>> slaver|is not a “he.” <<else>> Sure, you're convinced <<rep $g.slaver>> 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.getUnitIfAvailable('rescuer')>>
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)>> <<reps $g.seafighter>> 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 <<reps $g.captain>> preferred waters.
<<if $g.navigator.isHasTrait('race_catkin')>> 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>> 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 <<reps $g.captain>> 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 <<reps $g.captain>> 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 <<reps $g.captain>> progress across the island, and you lead the way yourself as you follow his track
<<else>> Eventually, you find Captain <<reps $g.captain>> 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>> captain|have 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>> 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>> looked 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>> captain|have 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 <<reps $g.captain>> 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 <<reps $g.captain>> 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 <<lore concept_mist>> to under the sea to down the tavern to up the Queen of Tor's ass.
<<set _rescuer = $dutylist.getUnitIfAvailable('rescuer')>>
<<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>/* PROOFREAD COMPLETE */
<<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_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_lavish,
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),
setup.qres.NotYou(),
],
{
slaving: 3.0,
}
)>>
<<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.tough_tough,
setup.trait.per_proud,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_slave,
setup.trait.bg_maid,
setup.trait.bg_whore,
setup.trait.per_lavish,
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),
setup.qres.NotYou(),
],
{
slaving: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'slaver_training__submission_cure', /* key */
"Slaver Training: Submission Cure", /* Title */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/jxmjhl/v110_is_here_submit_all_your_content_bug_report/gd6i8cx/',
},
[
'fort', 'trait', 'special',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'discipliner': [_criteriadiscipliner, 1.5],
'trainee': [_criteriatrainee, 1.5],
},
{ /* 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.getUnitIfAvailable('trainer')>>
<<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.getUnitIfAvailable('trainer')>>
<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.getUnitIfAvailable('viceleader')>>
<<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>> 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>> trainee|is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<Rep $g.trainee>> trainee|is a little nervous when <<rep $g.discipliner>> discipliner|is late. This too is as it should be. <<Rep $g.discipliner>> discipliner|is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> 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 <<name $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 <<reps $g.trainee>> mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<Reps $g.discipliner>> 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.isHasAnyTraitExact(['dick_tiny', 'dick_small'])>>
<<rep $g.discipliner>>
discipliner|laugh aloud at <<reps $g.trainee>> 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>
<<Reps $g.discipliner>> 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>> 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 <<name $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 <<reps $g.trainee>> 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>> trainee|is not 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 <<reps $g.trainee>> 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>
“<<name $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>> had switched from invective to actual wrestling.
</p>
<p>
<<if $g.trainee.isHasTrait('per_proud')>> <<reps $g.trainee>> natural pride has overcome <<their $g.trainee>> submissiveness, and <<they $g.trainee>> 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('tough_tough') || $g.trainee.isHasTrait('per_stubborn')>> <<rep $g.trainee>> trainee|have discovered reserves of determination <<they $g.trainee>> didn't know <<they $g.trainee>> had. <</if>>.
<<if $g.trainee.isHasTrait('muscle_strong')>> <<reps $g.trainee>> 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>> discipliner|is secretly letting <<they $g.trainee>> do it. <</if>>.
</p>
<p>
Just as it seems <<rep $g.trainee>> trainee|is going to break <<reps $g.discipliner>> 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 <<reps $g.trainee>> 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 <<reps $g.trainee>> 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>> discipliner|begin to whisper into <<reps $g.trainee>> 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>> looked excited as <<they $g.discipliner>> pours the words into <<reps $g.trainee>> ears with increasing enthusiasm.
<<if $g.trainee.isHasDick()>> <<rep $g.trainee>> gets aroused, and <<rep $g.discipliner>> discipliner|begin 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 <<reps $g.discipliner>> <<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. <<Reps $g.discipliner>> face glows with enthusiasm as <<they $g.discipliner>> explains the true state of things—<<rep $g.trainee>> 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>> trainee|is cured, all right.
</p><<set _potion = setup.item.potion_submissive_cure.rep()>>
<<set _trainer = $dutylist.getUnitIfAvailable('trainer')>>
<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.getUnitIfAvailable('viceleader')>>
<<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>> 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>> trainee|is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<Rep $g.trainee>> trainee|is a little nervous when <<rep $g.discipliner>> discipliner|is late. This too is as it should be. <<Rep $g.discipliner>> discipliner|is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> 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 <<name $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 <<reps $g.trainee>> mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<Reps $g.discipliner>> 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 <<reps $g.trainee>> 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>
<<Reps $g.discipliner>> 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>> 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 <<name $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 <<reps $g.trainee>> 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>> looked 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>> 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>> 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>> <<reps $g.discipliner>> got <<rep $g.trainee>> face-down on the floor, and discipliner|is showering <<them $g.trainee>> 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 <<reps $g.trainee>> bare back, <<rep $g.discipliner>> unleashes a stream of hot piss. To your intense disappointment, <<reps $g.trainee>> 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 <<reps $g.trainee>> quarters, and see
<<elseif _viceleader>> <<rep _viceleader>> spies through a peephole into <<reps $g.trainee>> quarters, and sees
<<else>>your spy spies through a peephole into <<reps $g.trainee>> quarters, and sees<</if>>
that <<they $g.trainee>> 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.getUnitIfAvailable('trainer')>>
<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.getUnitIfAvailable('viceleader')>>
<<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>> 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>> trainee|is able to fight back, if <<they $g.trainee>> can muster the will to do it.
</p>
<p>
<<Rep $g.trainee>> trainee|is a little nervous when <<rep $g.discipliner>> discipliner|is late. This too is as it should be. <<Rep $g.discipliner>> discipliner|is watching through a spy hole of <<their $g.discipliner>> own, and doesn't enter until <<rep $g.trainee>> 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 <<name $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 <<reps $g.trainee>> mumbled reply, but <<their $g.trainee>> look is ambiguous between fear and pleasure. <<Reps $g.discipliner>> 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 <<reps $g.trainee>> 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>
<<Reps $g.discipliner>> 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>> 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 <<name $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 <<reps $g.trainee>> 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>> looked 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>> 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>> 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>> <<reps $g.discipliner>> 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 <<reps $g.trainee>> bare back, <<rep $g.discipliner>> unleashes a stream of hot piss. To your intense disappointment, <<reps $g.trainee>> 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 <<reps $g.trainee>> room, and see
<<elseif _viceleader>> <<rep _viceleader>> <<reps $g.trainee>> room, and sees
<<else>>your spy checks <<reps $g.trainee>> room, and sees<</if>>
that <<they $g.trainee>> trainee|is gone. You instigate a search, but all anyone finds is a short note. “<<rep $g.discipliner>> 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>/* PROOFREAD COMPLETE */
<<set _criteriamarriagebroker = new setup.UnitCriteria(
null, /* key */
'Marriage Broker', /* name */
[
setup.trait.subrace_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.per_sly,
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_direct,
setup.trait.per_honorable,
setup.trait.per_lavish,
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_human], true),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable], true),
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.subrace_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.per_calm,
setup.trait.per_cautious,
setup.trait.per_sly,
setup.trait.per_stubborn,
setup.trait.per_studious,
setup.trait.skill_connected,
setup.trait.per_serious,
],
[
setup.trait.subrace_humanvale,
setup.trait.subrace_humandesert,
setup.trait.subrace_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_direct,
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_human], true),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable], true),
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_human], true),
setup.qres.Trait(setup.trait.gender_male),
setup.qres.AnyTrait([setup.trait.eq_valuable, setup.trait.eq_veryvaluable], true),
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.subrace_humankingdom,
setup.trait.bg_noble,
setup.trait.bg_royal,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
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.subrace_humanvale,
setup.trait.subrace_humandesert,
setup.trait.subrace_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_direct,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.race_human], true),
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_scary),
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 */
{ /* Author */
name: "Alberich",
url: 'https://www.reddit.com/r/FortOfChains/comments/joyyfi/v100_is_here_submit_all_your_stories_bug_reports/gc6c9sa/',
},
[ 'city', 'veteran', 'order', 'favor',
], /* tags */
4, /* weeks */
12, /* quest expiration weeks */
{ /* roles */
'marriagebroker': _criteriamarriagebroker,
'ladyinwaiting': _criterialadyinwaiting,
'virtuedefender': _criteriavirtuedefender,
'blushingbride': _criteriablushingbride, },
{ /* actors */
'sgtelke': 'subrace_humankingdom_male', },
[ /* 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, setup.rarity.uncommon],
],
[ /* 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 went off without a hitch. Of course, the "lady's" "noble" "kin" wouldn't be seen talking marriage with a common soldier, so they employed a respectable marriage broker. The broker looked just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<Rep $g.sgtelke>> didn't know that.</p>
<p>
Sgt. <<Rep $g.sgtelke>> 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>> played his role to the hilt, professionally distant and cold, albeit <<uadjper $g.marriagebroker >>. A dowry was 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 would naturally understand the lady's family's straitened circumstances....
</p>
<p>
Sgt. <<Rep $g.sgtelke>> sgtelke|was taken in completely, eager as he was to slither his way into the upper reaches of society, and get his <<udick $g.sgtelke >> into one of their virgin daughters. The money changed hands. A respectable physician examined <<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 pronounced her "intact."
<<if $g.blushingbride.isHasTrait('anus_gape') || $g.blushingbride.isHasTrait('vagina_gape')>>
It was your slaver's good fortune that the physician never looked behind her, for he would
be met with a cavernous hole that is certainly not "intact".
<</if>>
</p>
<p>
And now comes the day of the wedding itself. The lower-upper classes are turning out for the occasion. So are Sgt. <<Reps $g.sgtelke>> 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>> virtuedefender|lube up <<their $g.virtuedefender>> <<udick $g.virtuedefender >> and virtuedefender|slide it into her <<uanus $g.blushingbride>> while <<rep $g.ladyinwaiting>> ladyinwaiting|knead 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 <<reps $g.blushingbride>> 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>> 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>> ladyinwaiting|give <<rep $g.blushingbride>> a careful bath and coiffure. Flanked by her "lady-in-waiting" and the "defender of her virtue," <<rep $g.blushingbride>> blushingbride|make her way to the altar while <<rep $g.marriagebroker>> marriagebroker|join 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_sly')>>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 went smoothly. Of course, the "lady's" "noble" "kin" wouldn't be seen talking marriage with a common soldier, so they employed a respectable marriage broker. The broker looked just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<Rep $g.sgtelke>> didn't know that.</p>
<p>Sgt. <<Rep $g.sgtelke>> found the arrangement distasteful, but <<rep $g.marriagebroker>> <<uadv $g.marriagebroker >> put off his objections and kept the negotiations on track. Naturally there would 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>> would hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake.
</p>
<p>
Sgt. <<Rep $g.sgtelke>> scowled and screwed up his face at this, but in the end his greed and lust overcame his objections. The money changed hands. A respectable physician examined <<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 pronounced her "intact."
<<if $g.blushingbride.isHasTrait('anus_gape') || $g.blushingbride.isHasTrait('vagina_gape')>>
It was your slaver's good fortune that the physician never looked behind her, for he would
be met with a cavernous hole that is certainly not "intact".
<</if>>
</p>
<p>
And now comes the day of the wedding itself. The lower-upper classes are turning out for the occasion. So are Sgt. <<Reps $g.sgtelke>> 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>> blushingbride|make her way to the altar while <<rep $g.marriagebroker>> marriagebroker|join 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_sly')>>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 didn't go as smoothly as they should. Of course, the "lady's" "noble" "kin" wouldn't be seen talking marriage with a common soldier, so they employed a respectable marriage broker. The broker looked just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<Rep $g.sgtelke>> didn't know that.</p>
<p> Sgt. <<Rep $g.sgtelke>> found the arrangement distasteful, and <<rep $g.marriagebroker>> had trouble keeping the negotiations on track. There was 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>> would hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake. Sgt. <<Rep $g.sgtelke>> <<uadv $g.sgtelke >> stormed out of the room at that one.
</p>
<p>
Eventually, greed overcomes wisdom, he came back, and the deal was done. The money changed hands. A respectable physician examined <<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 was a little too thorough in examining her <<utorso $g.blushingbride >>, her <<uface $g.blushingbride >>, and her <<uanus $g.blushingbride >>. The marks of her abuse were 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 looked sharply at <<rep $g.ladyinwaiting>> and began to ask pointed questions, which the "lady-in-waiting" deflected <<uadv $g.ladyinwaiting >>, but it was clear he was not going to decare <<rep $g.blushingbride>> intact. It was even clearer he was going to start talking. It was time for your slavers and the "blushing bride" to get out of town.
</p>
<p>
As they flee, your slavers were set upon by Sgt. <<Rep $g.sgtelke>> himself and a squad of soldiers who weren't in on the scheme. <<Rep $g.virtuedefender>> virtuedefender|was supposed to cover the retreat of the others, and <<they $g.virtuedefender>> did so quite <<uadv $g.virtuedefender>>, at least until he was wounded and took the "better part of valor" <<themself $g.virtuedefender>>...
</p>
<p>
In the end, your slavers all fled pell-mell, with no thought for their "precious" cargo and precious little for each other. All three are wounded and <<rep $g.blushingbride>> blushingbride|was lost completely—she couldn't run in her finery. Or maybe she preferred 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 didn't go as smoothly as they should. Of course, the "lady's" "noble" "kin" wouldn't be seen talking marriage with a common soldier, so they employed a respectable marriage broker. The broker looked just like that notorious slaver <<rep $g.marriagebroker>> in fancy clothes. But that scoundrel Sgt. <<Rep $g.sgtelke>> didn't know that.</p>
<p>Sgt. <<Rep $g.sgtelke>> found the arrangement distasteful, and <<rep $g.marriagebroker>> had trouble keeping the negotiations on track. There was 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>> would hand over the appropriate sum, they'll kick back part as "dowry" for appearance's sake. Sgt. <<Rep $g.sgtelke>> agreed in the end, and <i>appears</i> to be taken in.
</p>
<p>
The contract was made. The money changed hands. A respectable physician examined <<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 pronounced her "intact." The wedding was 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. <<Reps $g.sgtelke>> 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>> virtuedefender|slam <<their $g.virtuedefender>> <<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 <<reps $g.blushingbride>> 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>> 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>> marriagebroker|wasn't quite as smooth as he thought, or <<rep $g.ladyinwaiting>> ladyinwaiting|was not 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>> sgtelke|have penetrated your schemes, and your slavers don't hesitate. Self-preservation is the order of the day. <<Rep $g.virtuedefender>> virtuedefender|is the first to move, and the first to trip over his own disarrayed clothes. <<They $g.virtuedefender>> virtuedefender|is wounded before <<they $g.virtuedefender>> can get up, but that only speeds <<their $g.virtuedefender>> flight. <<Rep $g.marriagebroker>> marriagebroker|get out the window right behind <<them $g.marriagebroker>>, 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>> ladyinwaiting|kick Sgt. <<Rep $g.sgtelke>> in his <<uballs $g.sgtelke >>, so his loyal troops pile on <<them $g.ladyinwaiting>> 'til <<they $g.ladyinwaiting>> can't move. <<Rep $g.blushingbride>> 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>> 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>> sgtelke|have 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 <<them $g.ladyinwaiting>> back, <<they $g.ladyinwaiting>>'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 <<them $g.ladyinwaiting>> back under those conditions?
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'raid_elven_forest', /* key */
'Raid: Elven Homestead', /* Title */
'Atacama', /* Author */
[
'forest',
'unit',
'ire',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'elves': 'subrace_elf', },
[ /* costs */
],
'Quest_raid_elven_forest',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_raid_elven_forestCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Slave('elves', 'a|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_forestCrit',
[
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<questimage 'raid_elven_forest.jpg'>>
<p>
The western forests are inhabited by both neko and elves.
Most of the neko live in the <<lore location_npc>>.
The elves, however, are scattered throughout the forest in smaller settlements. Or lone homesteads.
It would be a simple task to send a group of slavers to one of those isolated dwellings
and loot them for valuables--or possibly capture the occupants if they're home.
</p><p>
Your slavers, led by <<name $g.raider1>>,
found a residence in the forest with no one home.
<<if $g.raider1.isHasTrait('per_attentive')>>
After making sure there are no traps around the small hamlet, <<name $g.raider1>>
<<uadv $g.raider1>>
ransacked
<<elseif $g.raider1.isHasTrait('per_dreamy')>>
<<name $g.raider1>> waltzed straight into the house, visions of gold, gemstones and richly woven textiles dancing through
<<their $g.raider1>> head. The humble interior snapped them out of the reverie and they ransacked
<<else>>
<<name $g.raider1>> ransacked
<</if>>
the place for all
belongings of value.
<<if $gOutcome == 'crit'>>
As they were about to leave, the resident returned, a small deer slung over their shoulders. Seeing fortune smiling down upon them, your slavers swiftly subdued the elf, adding a potential slave to their haul for the raid.
<</if>>
</p><p>
Despite spending a week in the forest looking for a homestead to rob, your slavers found nothing and returned empty-handed.
</p><p>
Your slavers found the perfect house to burgle-or so they thought.
The abode they turned out to be inhabited by a skilled elven ranger, who proved more than capable of defending their home. Even after your slavers decided to flee, the ranger continued to harry them with arrows as they fled from the forest. Two of them have injuries that will take some time to heal.
</p><<run new setup.QuestTemplate(
'snowclaw_challenge', /* key */
"Snowclaw Challenge", /* Title */
{ /* Author */
name: "AwooWolfWoof",
url: "",
},
[ /* tags */
'furry',
'vale',
'unit',
'money',
'favor',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fighter': [ setup.qu.fighter, 1],
'guardsupport': [ setup.qu.guardsupport, 1],
'defender': [ setup.qu.defender, 1],
},
{ /* actors */
'valehuman': 'subrace_humanvale',
'head': 'subrace_werewolf',
},
[ /* costs */
],
'Quest_snowclaw_challenge',
setup.qdiff.hard16, /* difficulty */
[ /* outcomes */
[
'Quest_snowclaw_challengeCrit',
[
setup.qc.Slave('valehuman', "a|was your prize in winning the Snowclaw Challenge", undefined),
setup.qc.Outcomes('success'),
],
],
[
'Quest_snowclaw_challengeCrit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('werewolf', 30),
],
],
[
'Quest_snowclaw_challengeFailure',
[
setup.qc.SlaveOrderFlex(
'Snowclaw Order', /* name */
'werewolf', /* company */
12, /* expires in */
0, /* base price */
0, /* trait multi */
0.3, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
],
[ /* addons */
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
setup.qc.Ire('werewolf', 20),
],
),
setup.qc.Ire('werewolf', 2),
],
],
[
'Quest_snowclaw_challengeDisaster',
[
setup.qc.SlaveOrderFlex(
'Snowclaw Order', /* name */
'werewolf', /* company */
12, /* expires in */
0, /* base price */
0, /* trait multi */
0.1, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
],
[ /* addons */
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
setup.qc.Ire('werewolf', 20),
],
),
setup.qc.Injury('fighter', 2),
setup.qc.Injury('guardsupport', 2),
setup.qc.Injury('defender', 2),
setup.qc.Ire('werewolf', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.common],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building('marketeroffice'),
],
[ /* expiration outcomes */
],
)>><p>
The exploits of <<rep $company.player>> have reached far and wide across the
<<lore region_vale>>. One werewolf pack in particular known as the Snowclaws
is impressed by your warriors' combat prowess and has sent a messenger to
your fort.
</p>
<p>
Once every few months, the Snowclaws and the other packs that live nearby partake in a competition they have taken into calling the trial of champions. Three representatives from each tribe would compete for honor and resources and if the winning group impresses the chieftain of the Snowclaws enough, they would not only be given gold and prestige, but allowed to take home a slave. The catch is that the losing teams would have to give up a slave of their own, not to mention any injuries they may incur.</p>
<p>
This offer is of course not mandatory but it got you thinking; what better way to prove your mettle to the werewolves but in their own playing field? The slave and the money of course is a nice bonus but you have to take the danger involved into account. A balanced team of fighters would probably be best if you do chose to send someone to participate.
</p><p>
The afternoon of the <<lore region_vale>> was filled with load roars and
cheers as the final battle was about to begin. A match between your group of
fighters against the Snowclaws own fighters composed entirely of werewolves.
The signal was rang and the battle commenced.
Your slavers' cordination with each other were tested in the ensuing battle.
<<set _dom = setup.selectUnit([$g.fighter, $g.guardsupport, $g.defender], {trait: 'per_dominant'})>>
<<if _dom>>
<<rep _dom>> took lead of the fight, <<their _dom>> dominant nature making
them the perfect leader for the occassion.
<</if>>
<<set _sub = setup.selectUnit([$g.fighter, $g.guardsupport, $g.defender], {trait: 'per_submissive'})>>
<<if _sub>>
Meanwhile, <<rep _sub>> <<if _sub.isYou()>>were<<else>>was<</if>> a little intimidated by the opposing team.
<</if>>
<<set _loner = setup.selectUnit([$g.fighter, $g.guardsupport, $g.defender], {trait: 'per_loner'})>>
<<if _loner>>
<<Reps _loner>> loner nature became a hurdle for the team, <<therace
_loner>> occasionally
hesistated to aid <<their _loner>> allies for the fight.
<</if>>
<<set _greg = setup.selectUnit([$g.fighter, $g.guardsupport, $g.defender], {trait: 'per_gregarious'})>>
<<if _greg>>
Among the team members, <<rep _greg>> had the easiest time working with othes people,
and it showed as <<therace _greg>> blocked yet another attack aimed at the
back of <<their _greg>> teammate.
<</if>>
</p>
<p>
The enemy fighters were well
coordinated, considering that they live in a single pack, but your fighters
who had been brother and sister-in-arms across many life and death
situations eventually prevailed.
Eventually,
the teamwork showcased by
<<rep $g.fighter>>, <<rep $g.guardsupport>>, <<rep $g.defender>>
<<if $gOutcome == 'crit'>>
resulted in
a victory while subduing the enemy team with no fatal injury to them.
<<else>>
while overall great,
still had some small flaws in which resulted in the three nearly hitting each
other in the middle of the battle.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
The Snowclaw chieftain was suitably impressed, congratulating your group on a such a
fine performance, talking non stop on how your group fought like a kind of
pack. <<They $g.head>> upheld <<their $g.head>> terms at the end of the trial and your group takes home
a new slave <<rep $g.valehuman>> along with the prize money and of course
the prestige earned for winning the trial.
</p>
<<else>>
<p>
The Snowclaw chieftain congratulated your group on their performance but also
pointed out the glaring flaws of your group's teamwork along with saying that if your
group had less experience, <<their $g.head>> fighters would have won. A deal is a deal
though, and your group brings home the prize money and some prestige but did
not manage to get the slave prize.
</p>
<</if>><p>
The afternoon of the <<lore region_vale>> was filled with load roars and
cheers as the final battle was about to begin.
A match against your group of
fighters between the Snowclaws own fighters composed entirely of werewolves.
The signal was rang and the battle commenced. The enemy fighters were well
coordinated considering that they live in a single pack,
and though your
fighters were fine warriors themselves, they lacked the teamwork needed to
win.
<<Rep $g.fighter>> fighter|was the first to fall, followed by <<rep
$g.guardsupport>>, and then finally <<rep $g.defender>>.
Through sheer dumb luck,
your team managed to avoid any injury aside from their bruised pride.
</p>
<p>
The Snowclaw chieftain shook <<their $g.head>> head in disappointment as <<their $g.head>> pack's
representatives raised their <<uhands $g.head>> in victory. "Your group fought well, but
not good enough." <<They $g.head>> then reminded your group of the slave you must now give <<their $g.head>> clan
for losing before leaving.
</p>
<p>
Your fighters come home to the fort with their heads hung low in disappointment.
</p><p>
The afternoon of the <<lore region_vale>> was filled with load roars and
cheers as the final battle was about to begin. A match between your group of
fighters against the Snowclaws own fighters composed entirely of werewolves.
The signal was rang and the battle commenced. The enemy fighters were well
coordinated considering, that they live in a single pack, and though your
fighters were fine warriors themselves, the difference in both skill and
coordination were clearly visible. <<Yourrep $g.fighter>> fighter|was the first to fall, taken
out by a blow <<they $g.fighter>> should had been able to avoid if <<they $g.fighter>> had not been
butting heads with <<rep $g.guardsupport>> throughout the fight. <<Rep
$g.guardsupport>> soon followed after, being double teamed by two of the
Snowclaw fighters. Only <<rep $g.defender>> defender|was left, and despite
putting up a valiant fight by knocking out one of the enemies, the
remaining two managed to overwhelm <<them $g.defender>> with a flanking maneuver.
</p>
<p>
The Snowclaw chieftain shook <<their $g.head>> head in disappointment <<their $g.head>> pack's
representatives raise their <<uhands $g.head>> in victory. "How you lot managed to survive
this long and made a name for yourselves, I'll never know." <<They $g.head>> then reminded
your group of the slave they must now give <<their $g.head>> clan for losing before leaving your
group to lick their wounds.
</p>
<p>
Your fighters come home to the fort dragging their injured bodies in disappointment.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"bounty_hunt_bandits0",
"Vale Bandits",
'subrace_humanvale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
],
)>>
<<run new setup.QuestTemplate(
'bounty_hunt_bandits', /* key */
"Bounty Hunt: Bandits", /* Title */
{ /* Author */
name: "Blueflame451",
url: 'https://www.reddit.com/r/FortOfChains/comments/l9oppz/bounty_hunt_bandits_a_simple_quest/',
},
[ /* tags */
'vale',
'money',
'ire',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'tracker': [ setup.qu.scout_vale, 1],
'merc1': [ setup.qu.mercenary, 1],
'merc2': [ setup.qu.mercenary, 1],
},
{ /* actors */
'bandit': 'bounty_hunt_bandits0',
},
[ /* costs */
],
'Quest_bounty_hunt_bandits',
setup.qdiff.normal5, /* difficulty */
[ /* outcomes */
[
'Quest_bounty_hunt_banditsCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 50),
setup.qc.Ire('outlaws', 2),
setup.qc.Slave('bandit', "a|was a bandit", undefined),
],
],
[
'Quest_bounty_hunt_banditsSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 50),
setup.qc.Ire('outlaws', 2),
],
],
[
'Quest_bounty_hunt_banditsFailure',
[
setup.qc.Ire('humanvale', 1),
],
],
[
'Quest_bounty_hunt_banditsDisaster',
[
setup.qc.Ire('humanvale', 1),
setup.qc.Injury('merc1', 1),
setup.qc.Injury('merc2', 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.uncommon],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_vale>> is the home to many northerners.
Nobody governs 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>
As it happens, these hardy peasants are currently having trouble with a group of bandits who have been attacking wagons, pillaging farms and burning crops.
To combat these, they gathered some funds and is now seeking mercenaries to drive off the bandits
from their lands.
While enforcing law and order isn't your official designation, coin is coin, and you could take up the job.
Besides, the actions of these outlaws could make your own affairs more difficult,
especially if this job was to be taken by some other mercenary company.
Plus, you could say no to the potential of acquiring some bandit for your slave collection.
</p><p>
While your slavers don't often hunt bandits, hunting men and women is not so unusual for them.
It was therefore not very surprising that <<rep $g.tracker>> tracker|was able
to track the outlaws to their hidden camp easily.
</p>
<p>
Yet it was sneaking into the bandit camp under cover of darkness that
guaranteed their victory. <<Rep $g.merc1>> and <<utheirrel $g.merc1
$g.merc2>> <<rep $g.merc2>> took the group of outlaws completely by surprise!
<<set _nimble = setup.selectUnit([$g.merc1, $g.merc2, $g.tracker], {trait: 'tough_nimble'})>>
<<set _dark = setup.selectUnit([$g.merc1, $g.merc2, $g.tracker], {trait: 'magic_dark'})>>
<<if _nimble>>
Using <<their _nimble>> superior agility, <<rep _nimble>> delivered a preemptive strike
to the unaware bandits.
<<elseif _dark>>
Using <<their _dark>> dark magic, <<rep _dark>> covered the group in a shroud of darkness,
allowing the team to strike at the unaware bandits from the shadows.
<</if>>
The sudden chaos of battle and burning tents gave the neverdowells a taste of
their own medicine.
Your slavers not only routed their enemy without taking
any wound, but were able to recover some of the bandits' meager loot and even
took one of the downed bandits as a captive.
</p>
<p>
The farmers were very pleased with the efforts of your slavers, and happily paid them the bounties for driving off the bandits. Your slavers too were quite satisfied with themselves and celebrated with a bottle of fine brandy liberated from the camp. With the captive bandit trudging behind them in chains, the group made their way back to the <<rep $company.player>>.
</p><p>
While your slavers don't often hunt bandits, hunting men and women is not so unusual for them.
It was not really surprising <<rep $g.tracker>> tracker|was able to pick up the tracks and locate the outlaws.
</p>
<p>
Following the tracks, your slavers encountered a still burning farmstead, no doubt being raided by the bandits.
A fierce and desperate fight erupted on the smoldering farm grounds, but <<rep $g.merc1>> and <<rep $g.merc2>> prove themselves more then a match for the bandits. After a bloody exchange, the wounded outlaws were routed, and your slavers emerged victorious.
</p>
<p>
The farmers were saddened to hear of yet another homestead being lost to the bandit, but still agreed that your slavers did as requested by driving off the outlaws from their lands. They paid the promised bounty to your slavers. Your team may have spent a portion of the reward at a roadside tavern before returning to the fort, but who could blame them after they risked their lives on the job?
</p><p>
Your slavers lost day after day following either an old trail or a misleading trail.
After the rain wiped out the last remaining remnants of the trail,
your slavers gave up trying to locate the bandits.
</p>
<p>
Furthermore their frustration and shame were not all they suffer.
After their failure, the farmers seemed certain your slavers were in league with the bandits.
The only thanks your slavers received for their efforts were the hateful stares of the farmers
of the land.
<<if !$g.merc1.isHasTrait('per_kind')>>
<<Yourrep $g.merc1>> suggested to you to kidnap one of the farmer's daughter later,
out of spite.
<</if>>
</p><p>
Hunting men and women is not such an unusual task for your slavers to begin with,
so when <<rep $g.tracker>> found the outlaws tracks, <<they $g.tracker>> became overconfident and <<uadv $g.tracker>> gave chase.
</p>
<p>
<<They $g.tracker>> tracker|was taken quite by surprise then when
<<they $g.tracker>> stumbled into an ambush laid by the cunning bandits they were hunting.
<<Rep $g.merc1>> and <<rep $g.merc2>> waged a desperate fight to escape from the ambush.
They managed to escape alive and able to return home, but were injured both physically
and mentally from the shame.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaphallus = new setup.UnitCriteria(
null, /* key */
'Holy Phallus', /* name */
[
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.subrace_humanvale,
],
[
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_scary,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
setup.trait.dick_small,
setup.trait.balls_small,
setup.trait.race_elf,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.race_wolfkin, setup.trait.race_catkin, setup.trait.race_greenskin, setup.trait.race_lizardkin, setup.trait.race_demon], true),
setup.qres.Trait(setup.trait.dick_tiny),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'fertility_rite', /* key */
"Fertility Rite", /* Title */
{ /* Author */
name: "Blueflame451",
url: 'https://www.reddit.com/r/FortOfChains/comments/l8wjjj/northern_vale_quest_fertility_rite_my_first/',
},
[ /* tags */
'vale',
'money',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'biologist': [ setup.qu.biologist, 1],
'phallus': [ _criteriaphallus, 1],
'guard': [ setup.qu.guard, 1],
},
{ /* actors */
'client': 'subrace_humanvale',
'shepherd': 'subrace_humanvale',
},
[ /* costs */
setup.qc.MoneyCustom(-500),
],
'Quest_fertility_rite',
setup.qdiff.easy13, /* difficulty */
[ /* outcomes */
[
'Quest_fertility_riteCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('humanvale', 25),
],
],
[
'Quest_fertility_riteCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 25),
],
],
[
'Quest_fertility_riteFailure',
[
setup.qc.MoneyNormal(0.5),
],
],
[
'Quest_fertility_riteDisaster',
[
setup.qc.Ire('humanvale', 5),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.dick_tiny]),
],
[ /* expiration outcomes */
],
)>><p>
There does not seem to be any end to the superstitious beliefs of the folk of the <<lore region_vale>>.
Were one be creative enough,
there are actually plenty of opportunities from using these beliefs for some fun and profit.
If you think your enterprising company is up for the task, then read on...
</p>
<p>
Among these beliefs, there is a tale of an old fertility rituals,
said to bestow blessings onto the land, livestock and the wombs of people.
With a small investment to secure the right garb and paraphernalia you might be able convince the simple northerners to partake in your earthy and sexual fertility rites.
Of course a slaver that understands the workings of the fields and livestocks is good.
If they know alchemy or actual Earth magic, then that's even better.
You'll also need a (lucky) slaver with a ready cock, or “holy phallus,” to be worshiped, and a reliable guard to collect and protect the tribute these gullible folk would no doubt pay for your slaver's holy services.
</p><p>
Donning their new robes, setting out the ritual accountrements, and pitching their tent on a hill overlooking a village, your slavers are ready to hold their "holy" sex rites.
<<Rep $g.guard>> <<uadv $g.guard>> invited the people of the nearby village to come receive the sacred fertility blessing.
</p>
<<set _shepherdess = 'shepherd'>>
<<if $g.shepherd.isFemale()>> <<set _shepherdess = 'shepherdess'>>
<</if>>
<p>
The first visitor was a timid <<= _shepherdess>> hoping to hear prayers for the nannies of
<<their $g.shepherd>> flock. While <<rep $g.biologist>> administered to the goats, the
<<= _shepherdess>> was told to enter into the tent where <<rep $g.phallus>> lied in wait.
There, <<they $g.shepherd>> knelt in "prayer" with the assistance of <<yourrep $g.phallus>>,
who <<uadv $g.phallus>> convinced the <<= _shepherdess>> to worship <<their $g.phallus>> <<udick $g.phallus>> as part of the ritual.
<<if $g.phallus.isHasTrait('dick_titanic')>>
The titanic dick was so very large, easily hypnotizing the <<= _shepherdess>>.
<<elseif $g.phallus.isHasTrait('dick_huge')>>
The huge dick was so very, almost hypnotizing the <<= _shepherdess>>.
<<elseif $g.phallus.isHasTraitExact('dick_small')>>
The tiny dick was so unnaturally small, poking the curiosity of the innocent <<= _shepherdess>>.
<</if>>
A long while later, after many smooching noises the blushing <<= _shepherdess>> exited the tent, face red, before collecting <<their $g.shepherd>> flock and leaving.
However it was with a secret smile that <<they $g.shepherd>> praised the sacred ritual to <<their $g.shepherd>> interested neighbors and soon the fertility blessings were much sought after,
for <<they $g.shepherd>> was much impressed by <<reps $g.phallus>> <<upraisenoun $g.phallus>> (and also <<their $g.phallus>> <<uballs $g.phallus>>).
</p>
<<if $gOutcome == 'crit'>>
<p>
In the coming days many <<women $g.shepherd>> from the village, including
<<if $g.shepherd.isFemale()>>
wives, widows and daughters,
<<else>>
husbands, widows, and sons,
<</if>>
came to receive their blessings, all eagerly slobbering or bouncing on <<rep $g.phallus>> <<udick $g.phallus>>,
<<if $g.phallus.isHasTrait('per_chaste')>>
much to the embarrassment of the chaste slaver.
<<elseif $g.phallus.isHasTrait('per_lustful')>>
to the great delight of the lustful slaver.
<<else>>
earning your slavers a lot of coins.
<</if>>
Of course <<rep $g.biologist>> stayed busy offering good advice on how to care for the "newly blessed" fields, livestock, or bodies, but many attendees seemed more interested in <<reps $g.phallus>> "holy rites". Some even returned to beg for additional blessings!
</p>
<p>
<<Rep $g.guard>> collected and secured all the generous tributes in the trusty strongbox for their eventual return to the <<rep $company.player>>.
</p>
<<else>>
<p>
Your slavers made a tidy profit exploiting these poor people seeking the holy blessing.
<<Rep $g.phallus>> <<uadv $g.phallus>> enticed many villager to worship <<their $g.phallus>> <<udick $g.phallus>>, while <<rep $g.biologist>> made sure to give actual advice on how to care their "newly blessed" fields, livestock, or bodies.
</p>
<p>
Overall the venture is a complete success, with your slavers bagging quite a heavy bag of gold.
</p>
<</if>><p>
Unfortunately, for one reason or another the scheme just did not draw the worshippers your
slavers were hoping for.
Except for that one <<man $g.shepherd>> who kept coming back for more,
the rest of the villagers never become excited for the service.
Many that did come seeking blessing remain unconvinced and skeptical.
The amount of tithe suffered as a result, and
your slavers only managed to bring in a portion of the expected profit.
</p><p>
In the mission, your slavers learned the hard way that
not every village in the <<lore region_vale>> is full of superstitious simpletons.
The particular village they were trying to dupe
didn't like <<rep $g.phallus>> <<uadjbad $g.phallus>> take on holy prayer.
In fact, the moment <<their $g.phallus>> <<udick $g.phallus>> came out from under <<their $g.phallus>> robe, it was all over...
</p>
<p>
The angry villagers tore your slavers' robes off their backs and trampled on the ritual tent.
While the team's guard <<rep $g.guard>> guard|was able to make sure everyone got away from the mob in one piece, there was no way to recoup the material cost spent on this venture.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaswimmer = new setup.UnitCriteria(
null, /* key */
'Frisky Swimmer', /* name */
[
setup.trait.race_lizardkin,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.per_dreamy,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.muscle_strong,
setup.trait.tough_tough,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.subrace_lizardkin,
],
[
setup.trait.breast_tiny,
setup.trait.balls_tiny,
setup.trait.dick_tiny,
setup.trait.per_chaste,
setup.trait.per_cautious,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1.5,
sex: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'river_spirit', /* key */
"River Spirit", /* Title */
"Blueflame451", /* Author */
[ /* tags */
'vale',
'money',
'monstersex',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'swimmer': [ _criteriaswimmer, 1],
'mage': [ setup.qu.arcanewater, 1],
'defender': [ setup.qu.defendersupport, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_river_spirit',
setup.qdiff.hard12, /* difficulty */
[ /* outcomes */
[
'Quest_river_spiritCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Outcomes("failure"),
setup.qc.SetCooldownQuest(null, 12),
],
],
[
'Quest_river_spiritCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Outcomes("failure"),
setup.qc.SetCooldownQuest(null, 6),
],
],
[
'Quest_river_spiritCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('swimmer', setup.qres.NoTraits([setup.trait.per_lustful, setup.trait.per_sexaddict, setup.trait.subrace_lizardkin, setup.trait.bg_whore], true)),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('swimmer', 2)
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_river_spiritDisaster',
[
setup.qc.Injury('swimmer', 3),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
In the recent weeks,
a mysterious river creature has been harassing fishermen, bathers, and has even capsized small boats on one of the rivers of the <<lore region_vale>>.
No one has been killed yet, but the locals are afraid of going into the river now, and want these attacks to cease all same.
Being the superstitious folks they are, they believed it would bring bad luck to kill a river spirit.
They instead offer a reward only if the creature can be subdued or driven off without doing it any harm.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
You run a slaving company, not an exorcism agency, and have no clue how to drive off such a spirit.
But <<yourrep _u>> happens to know that such spirits usually attack for a very simple and primal
reason: these spirits are simply horny.
It might be possible to satiate the spirit, if you were to send a slaver
(un)lucky enough to satiate whatever desire the spirit wants from them...
Just make sure they have fiery passions, strong hands, and most importantly good lung capacity!
</p><<if $g.swimmer.isMale()>>
<<questimage 'river_spirit_male.jpg'>>
<<else>>
<</if>>
<p>
With <<their $g.mage>> magical experties, <<yourrep $g.mage>> tracked the source of the spirit
into a particular site of the river.
After being imbued with the magic protections <<rep $g.mage>> could muster,
<<if $g.swimmer.isHasTrait('per_chaste')>>
<<yourrep $g.swimmer>> blushed, before awkwardly disrobing and entered the river.
<<elseif $g.swimmer.isHasTrait('per_lustful')>>
<<yourrep $g.swimmer>> stripped and dived into the river, without hiding <<their $g.swimmer>> eagerness at all.
<<else>>
<<rep $g.swimmer>> stripped off <<their $g.swimmer>> <<uequipment $g.swimmer>> and entered the river.
<</if>>
<<if $g.swimmer.isHasTrait('race_lizardkin')>>
Being a lizardkin, swimmming came naturally for <<them $g.swimmer>>.
<</if>>
</p>
<p>
As <<rep $g.swimmer>> swam and dove,
a musical, chiming laughter bubbled out of the flowing river.
Suddenly, cool, slim fingers began to grip and caress <<reps $g.swimmer>> <<ulegs $g.swimmer>>
while an ardent mouth kissed and sucked at <<their $g.swimmer>> body.
At the same time,
<<theslaver $g.swimmer>> felt an improbable long and flexible tongue slithering against <<them $g.swimmer>> in erotic exploration.
<<if $g.swimmer.isHasDick()>>
The tongue wrapped about <<their $g.swimmer>> <<udick $g.swimmer>> drawing <<them $g.swimmer>> between slurping lips.
<<else>>
The determined tongue discovered and fluttered deep inside <<their $g.swimmer>> <<uvagina $g.swimmer>>. The mouth follows soonafter, sealing the wiggling tongue inside with a kiss.
<</if>>
Filled with overstimulation, <<rep $g.swimmer>> took a few deep breaths before <<they $g.swimmer>> disappeared under the water.
</p>
<<if $gOutcome == 'failure'>>
<p>
The river water churned and roiled for a few tense minutes before <<rep $g.swimmer>> swimmer|was ejected back to the surface.
<<if $g.swimmer.isHasTrait('race_lizardkin')>>
Despite being a lizardkin, the magical nature of the encounter still left the <<man $g.swimmer>>
gasping for breath.
<</if>>
Sputtering and nearly drowning, <<they $g.swimmer>> swimmer|was pulled ashore by <<their $g.swimmer>> teammates.
<<if $g.swimmer.isHasTrait('per_lustful')>>
<<Theslaver $g.swimmer>> will require some time to recover after this, but a wan smile seemed to cling to <<their $g.swimmer>> lips as <<they $g.swimmer>> rested.
<<else>>
<<Theslaver $g.swimmer>> will require some time to recover after this.
<</if>>
Whatever occurred under the water did not seem to pacify the river spirit,
and the troubles continued. Your slavers did not get paid for such a sloppy job.
</p>
<<else>>
<p>
Deep down in the water, <<rep $g.swimmer>> caught a glimpse of the creature molesting
<<them $g.swimmer>>, its
<<if $g.defender.isFemale()>>
attractive and graceful
<<else>>
attractive and masculine
<</if>>
form dragging <<therace $g.swimmer>> effortlessly deep down into the churning water.
Then, the river spirit began to press its gooey body against
<<them $g.swimmer>>, its fine, delicate scales stimulating
<<reps $g.swimmer>> <<uskin $g.swimmer>>.
Soon after, <<they $g.swimmer>> found <<themself $g.swimmer>> mounted,
<<if $g.swimmer.isHasDick()>>
<<their $g.swimmer>> <<udick $g.swimmer>> penetrating an unseen but incredible snug orifice.
<<else>>
something firm and lively surging into <<their $g.swimmer>> <<uvagina $g.swimmer>>.
<</if>>
Within into desperate copulation,
the river spirit lustfully kissed <<their $g.swimmer>> lips. The kiss was very hard,
and it felt as if the spirit wanted to suck the air out of <<their $g.swimmer>> burning lungs.
</p>
<p>
Meanwhile, <<rep $g.mage>> and <<rep $g.defender>> who were waiting on the shore began to hear the musical river voice again.
Only this time, the voice is accompanied by lewd moans and contented sighs.
Just moments after that, <<rep $g.swimmer>> bursted back into the surface, gasping for breath
from the underwater ordeal.
</p>
<p>
After <<reps $g.swimmer>> strange encounter, the troublesome attacks finally ceased.
It seemed that the copulation had calmed the river spirit's passion.
The thankful villagers gave your slavers the promised reward, and your slavers
did not deem it necessary to expound how it was done.
<<if $gOutcome == 'crit'>>
On the way back to the fort, <<rep $g.swimmer>> revealed to <<their $g.swimmer>> teammates a gleaming river pearl that <<they $g.swimmer>> found after the
<<if $g.swimmer.isHasTrait('per_lustful')>>
incredible experience.
<<else>>
ordeal.
<</if>>
<<elseif $gOutcome == 'success'>>
Along the way back, <<rep $g.swimmer>>
<<if $g.swimmer.isHasTrait('per_lustful')>>
just couldn't seem to quit grinning lustfully.
<<else>>
kept shivering, slowly recovering from the cold embracce of the river water.
<</if>>
<</if>>
</p>
<</if>><p>
Your slavers found what they believe to be the site of river attacks
and <<rep $g.swimmer>>
<<if $g.swimmer.isHasTrait('per_sexaddict')>>
lustily
<<elseif $g.swimmer.isHasTrait('per_lustful')>>
eagerly
<</if>>
dived right into the river without double-checking it first.
A mistake -- instead of a mischievous river spirit, <<yourrep $g.swimmer>> found a hungry demonic rusalka!
As soon as a trace of blood started to appear in the river,
<<rep $g.defender>> <<uadv $g.defender>> leapt into the river,
rescuing <<rep $g.swimmer>>.
Still, <<they $g.swimmer>> swimmer|was already wounded by the river monster, and would need some time
to rest.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'sunken_barge_i', /* key */
"Sunken Barge I", /* Title */
"Blueflame451", /* Author */
[ /* tags */
'vale',
'money',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'explorer': [ setup.qu.explorer, 1],
'spotter': [ setup.qu.spotter, 1],
'support': [ setup.qu.support, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_sunken_barge_i',
setup.qdiff.normal11, /* difficulty */
[ /* outcomes */
[
'Quest_sunken_barge_iCrit',
[
setup.qc.MoneyCustom(1500),
setup.qc.QuestDirect('sunken_barge_ii', null),
],
],
[
'Quest_sunken_barge_iCrit',
[
setup.qc.QuestDirect('sunken_barge_ii', null),
],
],
[
'Quest_sunken_barge_iFailure',
[
setup.qc.QuestDirect('sunken_barge_i', null),
],
],
[
'Quest_sunken_barge_iDisaster',
[
setup.qc.Injury('explorer', 1),
setup.qc.Injury('support', 1),
setup.qc.QuestDirect('sunken_barge_i', null),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Your slavers efforts have finally paid off.
Somehow, they actually found an actual lead, which might lead to an actual treasure.
</p>
<p>
The northerners of old hated the <<lore race_humankingdom>>s, and it showed in their tales.
According to the tale,
some years ago a lavish pleasure barge belonging to a princeling from Lucgate was meandering up the river in the <<lore region_vale>> when disaster struck and the barge was sunk.
The story then told in great raunchy details what happened to the survivors, but that's
not the part of the tale that interests you.
What you are interested in is the sunken vessel, no doubt brimming with lost treasure.
</p>
<p>
It might still be a while until you can get your grubby <<uhands $unit.player>> on the treasure.
You'd still need to locate the sunken vessel. This would no doubt require a strong swimmer, and you
probably should select one among your slavers, unless you're up for the job yourself.
</p><p>
The days were long -- your slavers scoured the riverbanks daily and swam in the icy river water,
seeking the sunken barge.
Fortunately, the hard cold work paid off when <<rep $g.spotter>> spotted something on the river bottom that looks very much like two halves of a large boat.
</p>
<p>
It's up to <<yourrep $g.explorer>> to verify that the sighting is true.
<<if $g.explorer.isNaked()>>
Not wearing any clothings from the beginning,
<<else>>
So after stripping out of <<their $g.explorer>> <<uequipment $g.explorer>>,
<</if>>
<<they $g.explorer>> took a deep breath before diving into the river,
leaving <<rep $g.spotter>> and <<rep $g.support>> to watch expectedly from the riverbank.
</p>
<p>
After a few suspenseful moments
<<if $g.explorer.isHasTrait('race_lizardkin')>>
<<reps $g.explorer>> <<ueyes $g.explorer>> breached the river's' surface,
before <<their $g.explorer>> <<therace $g.explorer>> <<uadjphys $g.explorer>> form exited from the water to rejoin <<their $g.explorer>> companions.
<<else>>
<<rep $g.explorer>> emerged from the river gasping for breath before swimming back into the riverbank where <<their $g.explorer>> companions were waiting.
<</if>>
<<if $gOutcome == 'crit'>>
A fine prize were held in <<their $g.explorer>> <<uhand $g.explorer>> --
an elegantly wrought fragments of a silver ship's lantern, a clear proof of the barge's value.
<</if>>
<<if $g.explorer.getSpeech() == setup.speech.friendly>>
"We've found it friends, a barge full of treasure for no one else but us to loot!," <<rep $g.explorer>> announced with a smile!
<<elseif $g.explorer.getSpeech() == setup.speech.bold>>
"That barge is right down there, full of treasure for the taking," <<rep $g.explorer>> announced boldly!
<<elseif $g.explorer.getSpeech() == setup.speech.cool>>
"Looks like we have a barge to loot," <<rep $g.explorer>> informed them.
<<elseif $g.explorer.getSpeech() == setup.speech.witty>>
"It's down there alright, the snails kept the jewelries clean too, if you know what I mean," <<rep $g.explorer>> announced with a grin.
<<elseif $g.explorer.getSpeech() == setup.speech.debauched>>
"We've found the barge, no lusty river naiads in attendance, but plenty of booty," <<rep $g.explorer>> announced!
<</if>>
</p>
<p>
It seemed your slavers had found the sunken barge!
The only task remaining is to properly loot the ship,
and a final mission has been prepared for you to follow it up.
</p><p>
Led by <<rep $g.spotter>>, your slavers spent the week scouring through the riverbanks with eyes peeled for any sign of the barge and the rich treasure it may hold.
Yet day after day pass, and the only thing <<rep $g.explorer>> received for the trouble of diving into the chilly river were the wet and cold it brought.
While your slavers had no success in their mission, there was still much of the river to explore and they may yet find the sunken barge in another attempt.
</p><p>
Initially excited, after days scouring the riverbanks without any clue, your slavers became
more and more desperate.
After spotting a shadowy form in the cold river, <<rep $g.explorer>> immediately dived in to investigate only to discover a fierce river beast that was none too happy to receive a visitor.
<<rep $g.support>> support|was able to pull <<therace $g.explorer>> to safety, but not without them both suffering some bites from the unpleasant beast.
The search will have to continue later, after they recover or with another team.
</p>/* PROOFREAD COMPLETE */
<<set _criteriadiver = new setup.UnitCriteria(
null, /* key */
'Swimmer', /* name */
[
setup.trait.subrace_lizardkin,
setup.trait.subrace_humansea,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.muscle_strong,
setup.trait.per_active,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 3,
}
)>>
<<run new setup.QuestTemplate(
'sunken_barge_ii', /* key */
"Sunken Barge II", /* Title */
"Blueflame451", /* Author */
[ /* tags */
'vale',
'money',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'mage': [ setup.qu.arcanewater, 1],
'scavenger': [ setup.qu.scavenger, 1],
'diver': [ _criteriadiver, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_sunken_barge_ii',
setup.qdiff.hard14, /* difficulty */
[ /* outcomes */
[
'Quest_sunken_barge_iiCrit',
[
setup.qc.MoneyCustom(10000),
],
],
[
'Quest_sunken_barge_iiCrit',
[
setup.qc.MoneyCustom(7000),
],
],
[
'Quest_sunken_barge_iiFailure',
[
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_sunken_barge_iiDisaster',
[
setup.qc.MoneyCustom(1000),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
You have deciphered the rumors, located and verified the barge, and at last ready to reap the rewards
of your little treasure hunt.
All that's left is to salvage and loot all you can from wreck.
It won't be too easy, however, and best to make sure your slavers are up for the task.
A competent diver is required, and also a skilled water mage to help around.
</p><p>
Following <<reps $g.scavenger>> <<uadjgood $g.scavenger>> direction,
your slavers arrived at the riverbank and were set to finally loot the wrecked river vessel for good.
</p>
<p>
Again and again, <<rep $g.diver>> dived down into the sunken barge.
Each time, <<therace $g.diver>> either hauled up sacks of valuables or
affixed more rope to pull even more chests and other heavier spoils.
<<if $g.mage.isHasTrait('magic_water')>>
This would have been a difficult and life-threatening task were it not for the
<<if $g.mage.isHasTrait('magic_water_master')>>
potent water
<<else>>
water
<</if>>
magic of <<rep $g.mage>>.
<<else>>
<<run setup.qc.Injury('diver', 2).apply($gQuest)>>
Without any magical help, however, <<rep $g.diver>> suffered minor injuries when diving
down below. Perhaps it would have been better if <<rep $g.mage>> mage|was capable of using
<<rep setup.trait.magic_water>>...
<</if>>
</p>
<p>
<<if $gOutcome == 'crit'>>
It took several days to bring up the many valuables up ashore.
But your slavers did not just haul up the loose treasure, abandoned coins, jewelry and the like,
but even greedily managed to tear free the still gleaming silver fixtures of the forgotten pleasure craft, determined to loot everything of value.
<<else>>
Coins, gems, surviving art pieces and jewelry were all hauled up.
In the coming days,
your slavers spent the better part of the day working hard and the
raunchier part of the night to celebrate with the piles of booty that kept growing day by day.
<</if>>
By the end of the endeavor your slavers and by extension you must be feeling filthy rich from all the hauled cargo.
</p><p>
Following <<reps $g.scavenger>> <<uadjgood $g.scavenger>> direction,
your slavers arrived at the riverbank and were set to finally loot the wrecked river vessel for good.
</p>
<p>
Yet the ice-cold river seemed unwilling to surrender its treasures.
<<Rep $g.diver>> had to work very hard diving through the chilly waters into the vessel, and
neither <<reps $g.scavenger>> guidance nor <<reps $g.mage>> magical aid did much to make the task easier.
</p>
<p>
After days of grueling work, your slavers had assembled a modest pile of coins and jewelry from the barge.
These fetched a fair sum, although after spending so long searching for the treasure,
everyone wished the treasures were greater.
</p><p>
The foulest of luck! Just as your slavers arrived and prepared to undertake to loot the wreck,
a fierce storm rolled in from the North.
To give your slavers credits, they did try to make a go of it in spite of the weather,
but as the downpour became torrential they had no choice but to call off the task.
In fact they only narrowly made it into the higher ground to escape the surging flood waters that overflew from the river.
</p>
<p>
Following the storm, your slavers were disheartened to learn that the flood had smashed the sunken barge to splinters whatever treasure remained in the vessel.
Your slavers managed to recover some of these, but it's a pittance compared
to what they would've gotten otherwise...
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'treasure_hunt', /* key */
"Treasure Hunt", /* Title */
"Blueflame451", /* Author */
[ /* tags */
'vale',
'quest',
'money',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scout': [ setup.qu.scout_vale, 1],
'explorer': [ setup.qu.explorer, 1],
'questioner': [ setup.qu.convincer, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_treasure_hunt',
setup.qdiff.hard8, /* difficulty */
[ /* outcomes */
[
'Quest_treasure_huntCrit',
[
setup.qc.MoneyCustom(-250),
setup.qc.QuestDirect('sunken_barge_i', null),
setup.qc.SetCooldownQuest(null, 200),
],
],
[
'Quest_treasure_huntCrit',
[
setup.qc.MoneyCustom(-500),
setup.qc.QuestDirect('sunken_barge_i', null),
setup.qc.SetCooldownQuest(null, 200),
],
],
[
'Quest_treasure_huntFailure',
[
setup.qc.MoneyCustom(-250),
setup.qc.BoonizeRandom('scout', 1),
setup.qc.BoonizeRandom('explorer', 1),
],
],
[
'Quest_treasure_huntDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.TraumatizeRandom('explorer', 1),
setup.qc.TraumatizeRandom('questioner', 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
Your scouts have returned from the <<lore region_vale>> with rumors of lost treasure.
A fool's errand: treasure hunt is almost always a time-consuming affair, and does not always
yield a reward. No matter how much
<<rep $company.player>>'s coffers could use the extra coin,
the thought of following-up on a lost treasure rumor is too idiotic even for you.
</p>
<p>
But well, when had such a logical consideration stopped you from doing whatever it is that
you want?
If you want to waste your slaver's time on this fool's errand,
the first step would be to send out a group to follow up on these rumors.
They would need to explore the land while talking to the locals to see where the rumors might lead.
This will incur costs, and the payout will not be immediate, if there is any payout at all...
</p><p>
<<Rep $g.scout>> led your slavers on a jaunty trek across the <<lore region_vale>>.
Each stop at a village, a farmstead or a tavern seemed to offer another clue to the treasure, another facet to the treasure hunt tale.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.questioner>> <<uadv $g.questioner>> drew tales from the many northern folk encountered,
sometimes for free, sometimes for a bribe, sometimes for a friendly cup of ale, and some other times with just
<<if $g.questioner.getSpeech() == setup.speech.friendly>>
a friendly word and smile.
<<elseif $g.questioner.getSpeech() == setup.speech.bold>>
<<their $g.questioner>> bold claims about being a treasure hunter.
<<elseif $g.questioner.getSpeech() == setup.speech.cool>>
<<their $g.questioner>> direct questions.
<<elseif $g.questioner.getSpeech() == setup.speech.witty>>
<<their $g.questioner>> witty charm.
<<elseif $g.questioner.getSpeech() == setup.speech.debauched>>
a suggestive wink.
<</if>>
Each bit of lore helped <<uadjgood $g.explorer>> <<rep $g.explorer>> to get closer and closer to the bottom of the tale, until finally <<they $g.explorer>> explorer|was confident that <<they $g.explorer>> had uncovered enough information to really begin the treasure hunt.
</p>
<<else>>
<p>
Over many mugs of mead did <<rep $g.questioner>> get to the bottom of the rumors.
Before long, <<rep $g.explorer>> believed <<they $g.explorer>> had enough information to really begin this treasure hunt in earnest.
The information costed coin, of course, but who can say how much was spent for tales and how much might have been spent on the comfort of fair company?
</p>
<</if>><p>
<<Rep $g.scout>> spent the week leading your slavers from village to village, from lone farmsteads to sleepy taverns, but regardless of the countless rumors and stories <<rep $g.questioner>> kept drawing from the many northern folk encountered, they returned without any solid leads whatsoever.
Some coin was spent in travel and in drawing out all these useless tales, but at least <<rep $g.scout>> and <<rep $g.explorer>> had a relaxing week wandering the countryside.
</p><p>
<<Yourrep $g.explorer>> led your slavers on the north chasing rumors, and they went norther and norther.
During their stay in one of the chilly northern tavern, <<rep $g.questioner>> had simply too much to drink, and agreed to purchase a treasure map from some wizened old geezer.
</p>
<p>
The following morning, once your slavers mind cleared, they realized that they had just been fooled.
The map they purchased contained nothing but a crude dick drawing of an old man.
Swallowing their anger (but mostly shame) they returned to the <<rep $company.player>> without any leads and with much lighter pockets. Thankfully they ditched the ugly dick picture on the way so you don't have to see it too.
</p><<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Non-Dominant Slave', /* name */
[
setup.trait.bg_courtesan,
setup.trait.bg_maid,
setup.trait.bg_whore,
setup.trait.bg_slave,
setup.trait.per_calm,
setup.trait.per_loyal,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.training_obedience_master,
],
[
setup.trait.bg_royal,
setup.trait.bg_boss,
setup.trait.bg_noble,
setup.trait.bg_slaver,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_chaste,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.NoTraits([setup.trait.training_mindbreak, setup.trait.per_dominant, setup.trait.per_submissive, setup.trait.training_dominance_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'attitude_adjustment', /* key */
"Attitude Adjustment", /* Title */
{ /* Author */
name: "Choker Guy",
url: "https://tfgames.site/phpbb3/memberlist.php?mode=viewprofile&u=41811",
},
[ /* tags */
'city',
'trait',
'rare',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'neg1': [ setup.qu.negotiator, 1],
'neg2': [ setup.qu.negotiator, 1],
'tra': [ setup.qu.slavetrainer, 1],
'slave': _criteriaslave,
},
{ /* actors */
'dom': 'subrace_humankingdom',
},
[ /* costs */
setup.qc.Money(-10000),
],
'Quest_attitude_adjustment',
setup.qdiff.normal45, /* difficulty */
[ /* outcomes */
[
'Quest_attitude_adjustmentCrit',
[
setup.qc.SlaverMarker('dom'),
setup.qc.Outcomes("success"),
setup.qc.Money(5000),
],
],
[
'Quest_attitude_adjustmentSuccess',
[
setup.qc.Trait('slave', setup.trait.per_submissive),
],
],
[
'Quest_undefinedFailure',
[
setup.qc.Outcomes("success"),
setup.qc.Money(-10000),
],
],
[
'Quest_attitude_adjustmentDisaster',
[
setup.qc.TraumatizeRandom('tra', 6),
setup.qc.Injury('slave', 3),
setup.qc.Money(-10000),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
Tales of an adept domme have reached your party's ears. <<Their $g.dom>> lair, the stories say, is located deep within the <<lore region_city>>. On a tour of the city, your company stumbles upon a suspicious-looking pet store. The various slaves do not rouse suspicion, ubiquitous as they are in central Lucgate. But who buys their slave gear <i>used</i>?
</p>
<p>
Curiosity piqued, you're keen to send a party — along with a slave — to test the rumours surrounding this domme for accuracy. Supposedly, in exchange with a suitably sizable bag of gold, <<they $g.dom>> can make a submissive out of any slave of sound mind, an appealing prize. <<They $g.dom>> will not put up with those already firmly on one end of the Dom/sub spectrum, from what you've heard, so don't even try. Let's see if <<their $g.dom>> skills measure up to <<their $g.dom>> reputation.
</p><<if $g.slave.isMale()>>
<<else>>
<<questimage 'attitude_adjustment_female.jpg'>>
<</if>>
<p>
The domme was beside <<themselves $g.dom>>. <<They $g.dom>> had a trio of slaves come out to give your band a royal reception. The wait passed in a blur of inhumanly flexible slave tongues. When it was over, all non-slave gazes turned towards the domme, with <<rep $g.slave>> in tow. <<They $g.slave>> was moving on all fours, despite not being on a leash or having received an observable command to do so.
</p>
<p>
"Friends!" the domme greeted your slavers. "I'm proud to announce your property took to <<their $g.slave>> place like a fish to water. Huh, that's a good idea, actually. Hold your breath."
</p>
<p>
The order was addressed to nobody in particular, but it looked like <<rep $g.slave>> was following it. <<They $g.slave>> held out for a full-minute completely motionless. <<Their $g.slave>> body started twitching then, but <<their $g.slave>> eyes remained perfectly still.
</p>
<p>
"Alright, alright, that's enough," the domme relented, and the slave gasped momentarily. "As you can see, <<they $g.slave>>'s the perfect subordinate in every way. Treat <<them $g.slave>> well — or don't — and you'll get exactly what you ask for."
</p>
<p>
The domme could hardly stop, but eventually did. Apparently, <<rep $g.slave>> did such an excellent job during training, <<they $g.dom>> was happy to refund part of your payment, claiming the place was in such a good state, <<they $g.dom>> easily made the rest of the money back.
</p>
<p>
<<Rep $g.tra>> wasn't looking too shabby either. From <<their $g.tra>> expression, it looks like <<their $g.tra>> stay here was marked by a never-ending sequence of orgasms. Even now, <<they $g.tra>> struggles to shake loose the dozen or so slaves hanging off <<their $g.tra>> every limb. Weren't these slaves supposed to be submissive?
</p><<if $g.slave.isMale()>>
<<else>>
<<questimage 'attitude_adjustment_female.jpg'>>
<</if>>
<p>
At first, there was little fanfare. Your slavers started getting impatient, even, sitting in the room, waiting for seemingly no reason. Finally, the domme showed up, and <<they $g.dom>> had <<rep $g.slave>> in tow.
</p>
<p>
Only your slave was walking on all fours, unprompted. The domme had a smug look on <<their $g.dom>> face. So this was the extent of <<their $g.dom>> abilities. Not long ago, your slave was like any other. Now, <<they $g.slave>> seemed to struggle thinking for <<themselves $g.slave>>. When the domme stopped momentarily, <<rep $g.slave>> followed suit immediately, scared to approach your slavers, who were obviously going to call <<them $g.slave>> over in a second.
</p>
<p>
With payment having been sorted out beforehand, there was nothing left to do but to collect the newly submissive slave, <<rep $g.tra>>, and head back to the fort.
</p><p>
Your slavers were made to wait for a long time. Half an hour passed, then a full one. Inquiries were stonewalled by the nearby attendant slaves. Five hours into this existential nightmare, the domme finally deigned to show <<their $g.dom>> face. Behind <<them $g.dom>> trailed <<rep $g.slave>>, inching towards your slavers on all fours, looking somewhere between concerned and aroused.
</p>
<p>
The domme was furious. Apparently, your slave didn't take too well to the training, at least not immediately. There was a lot of slurred shouting about incurred damages and the domme's reputation. <<They $g.dom>> delivered a simple ultimatum: Either you pay the fee once over, or the slave stays here, as collateral.
</p>
<p>
The choice was an easy one. <<dangertextlite "10,000g">> shouldn't make too much of a dent, or at least that's what <<yourrep $g.neg1>> thought. It's an expense you were willing to part with initially, now you wouldn't give up the slave you already invested in so easily. <<rep $g.tra>> is looking a bit sheepish at the obvious failure. At least the training seemed to take, you tell yourself, as your slave enters the fort still on all fours.
</p><p>
The domme's entrance was explosive, and immediate. <<rep $g.slave>> was pushed towards your band, falling pitifully to the ground. Judging by the marks all over <<their $g.slave>> body, this latest fall seemed to be little more than an inconvenience.
</p>
<p>
There's hardly a coherent sentence that can be discerned from the supposedly masterful dominant. Most of it seemed to be conspiracy theories about the true nature of your slave. Apparently, <<they $g.dom>> suspected foul play, magic, a curse, anything that could justify this abhorrent failure. Because clearly, <<their $g.dom>> mastery could not be at fault. No, your slave must have been tampered with, to prevent this flawless process from taking its natural course.
</p>
<p>
The wild rambling finally came to a point. Either leave your slave as collateral, or pay twice the original fee to compensate the domme for the damaged property — which nobody has seen — and of course the damaged reputation that <<they $g.dom>> held so dear. Wanting to be done with it, your band paid the incompetent trainer to close the matter. It's just a shame it was all for naught, coming with a <<dangertextlite "10,000g">> pricetag.
</p>
<p>
And speaking of trainers, <<rep $g.tra>> was looking in bad shape. Back at the fort, your medically inclined slavers deduce <<they $g.tra>> should be fine within a month or two, but <<they $g.tra>>'ll be out of sorts until then.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"hot_springs_raid0",
"Elf: Female",
'subrace_elf_female', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.face_beautiful),
],
)>>
<<set _criteriafakemaiden = new setup.UnitCriteria(
null, /* key */
'Fake Maiden', /* name */
[
setup.trait.skill_hypnotic,
setup.trait.race_elf,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.face_attractive,
setup.trait.face_beautiful,
],
[
setup.trait.race_human,
setup.trait.race_wolfkin,
setup.trait.race_catkin,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.breast_tiny,
setup.trait.breast_titanic,
setup.trait.per_sexaddict,
setup.trait.face_hideous,
setup.trait.face_scary,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.gender_female),
],
{
survival: 1,
intrigue: 2,
}
)>>
<<run new setup.QuestTemplate(
'hot_springs_raid', /* key */
"Hot Springs Raid", /* Title */
{ /* Author */
name: "Da_Shem",
url: 'https://www.reddit.com/r/FortOfChains/comments/l3atev/new_forest_quest_first_quest/',
},
[ /* tags */
'forest',
'unit',
'femaleonly',
'ire',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': [ setup.qu.raider, 1],
'raider2': [ setup.qu.raider, 1],
'fakemaiden': [ _criteriafakemaiden, 1],
},
{ /* actors */
'elves': 'subrace_elf',
'elfmaid': 'hot_springs_raid0',
},
[ /* costs */
],
'Quest_hot_springs_raid',
setup.qdiff.normal30, /* difficulty */
[ /* outcomes */
[
'Quest_hot_springs_raidCrit',
[
setup.qc.Slave('elfmaid', "a|was an elven maid who put a|their trust on the wrong person", undefined),
setup.qc.Ire('elf', 4),
],
],
[
'Quest_hot_springs_raidSuccess',
[
setup.qc.Slave('elves', "a|was a servant whose mistress put a|their trust on the wrong person", undefined),
setup.qc.Ire('elf', 2),
],
],
[
'Quest_hot_springs_raidSuccess',
[
setup.qc.Injury('raider1', 1),
setup.qc.Injury('raider2', 1),
],
],
[
'Quest_hot_springs_raidDisaster',
[
setup.qc.MissingUnitRecapture('fakemaiden', 'capturedeasy'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.HasSlaverWithTraits([setup.trait.gender_female]),
],
[ /* expiration outcomes */
],
)>><p>
The elves of the <<lore region_forest>> have a very close bond with nature.
One of the ways they maintain this bond is by having their maidens bathe naked in the moonlight in hidden hot springs. If one of your female slavers managed to infiltrate a party travelling to the hot springs they might be able to leave clues for an armed party to follow after, and obtain these tantalizing ladies as a reward...
</p><p>
<<Rep $g.fakemaiden>> met up with a party who were on their way to bathe naked under
one of the forest springs right outside of their village.
<<Yourrep $g.fakemaiden>> proceeded to ask to accompany them.
<<if $g.fakemaiden.isHasTrait('race_elf')>>
As a fellow elf, the maiden quickly gained trust on your disguised slaver. In fact,
<<else>>
Despite <<rep $g.fakemaiden>> obviously not being an elf,
<<they $g.fakemaiden>> exuded such an aura of trustworthiness that
<</if>>
the elf maiden <<name $g.elfmaid>> elfmaid|was immediately charmed and
<<their $g.elfmaid>> eyes barely left <<them $g.fakemaiden>> long enough for <<therace $g.fakemaiden>> to leave signs for the others to follow.
Once at the hot springs, it didn't take long until <<rep $g.fakemaiden>> and <<name $g.elfmaid>> were entwined in the water, <<rep $g.fakemaiden>> letting <<their $g.fakemaiden>> <<uhands $g.fakemaiden>> caressed <<rep $g.elfmaid>>'s <<ubreasts $g.elfmaid>>,
<<if $g.fakemaiden.isHasTrait('per_playful')>>
playfully rubbing the breasts up and down.
<<elseif $g.fakemaiden.isHasTrait('per_lustful')>>
unable to fully conceal <<their $g.fakemaiden>> lust.
<<elseif $g.fakemaiden.isHasTrait('per_chaste')>>
leaving only a tease and nothing inappropriate.
<<elseif $g.fakemaiden.isHasTrait('per_cruel')>>
molesting the elf without <<them $g.elfmaid>> noticing.
<<else>>
eliciting a moan from the damsel.
<</if>>
They were interupted however by a sudden uproar and <<name $g.elfmaid>> yanked <<rep $g.fakemaiden>> out of the water and into a hidden hideout. There, they stayed naked and shivering until the rest of your slavers called out for their comrade and <<name $g.elfmaid>> discovered who exactly <<they $g.fakemaiden>> had taken into <<their $g.elfmaid>> confidence...
</p><p>
<<Rep $g.fakemaiden>> met up with a party who were on their way to bathe naked under
one of the forest springs right outside of their village.
<<Yourrep $g.fakemaiden>> proceeded to ask to accompany them.
<<if $g.fakemaiden.isHasTrait('race_elf')>>
Since <<rep $g.fakemaiden>> fakemaiden|is a fellow elf,
<<else>>
Despite <<rep $g.fakemaiden>> not being an elf,
<</if>>
the maiden <<name $g.elfmaid>> allowed it easily enough and <<rep $g.fakemaiden>> had no trouble leaving signs for the others to follow.
</p>
<<if $gOutcome == 'success'>>
<p>
Once at the hot springs however, <<yourrep $g.fakemaiden>> fakemaiden|was directed to a different pool from where <<rep $g.elfmaid>> elfmaid|was to bathe.
A servant was directed to help <<yourrep $g.fakemaiden>> however <<they $g.fakemaiden>> wished and soon <<rep $g.fakemaiden>> had the servant underwater <<uadv $g.elves>> lapping at
<<their $g.fakemaiden>> <<ugenital $g.fakemaiden>>.
In fact the servant spent so much time either gasping for breath or underwater that the <<uadjphys $g.elves>> elf didn't even realize there had been an attack until <<rep $g.raider1>> and <<rep $g.raider2>> jumped into the pool to join the party.
</p>
<p>
Of the maiden's whereabouts, however, no trace remained...
</p>
<<else>>
<p>
Once at the hot springs however <<yourrep $g.fakemaiden>> fakemaiden|was directed to a different pool from where <<rep $g.elfmaid>> elfmaid|was to bathe.
A servant was directed to help <<rep $g.fakemaiden>> however <<they $g.fakemaiden>> wished and soon <<rep $g.fakemaiden>> had the servant underwater lapping at <<their $g.fakemaiden>> <<ugenital $g.fakemaiden>>.
In fact <<rep $g.fakemaiden>> was so distracted that <<theslaver $g.fakemaiden>> didn't even realize there had been an attack until <<rep $g.elfmaid>> asked them if <<they $g.fakemaiden>> fakemaiden|was ready to go back, but at least someone had a good time.
</p>
<</if>><p>
<<Rep $g.fakemaiden>> met up with a party right outside their village and <<uadv $g.fakemaiden>> asked to accompany them.
The maiden elfmaid|was immediately charmed and <<their $g.elfmaid>> eyes barely left
<<them $g.fakemaiden>> long enough for <<therace $g.fakemaiden>> to leave signs for the others to follow.
</p>
<p>
Once at the hot springs, it didn't take long until <<rep $g.fakemaiden>> and the maiden were entwined in the water,
<<rep $g.fakemaiden>> letting <<their $g.fakemaiden>> <<uhands $g.fakemaiden>> caress <<rep $g.elfmaid>>'s <<ubreasts $g.elfmaid>>.
Their copulation was interupted however by a sudden uproar and the resourceful maiden yanked <<rep $g.fakemaiden>> out of the water and into a hidden hideout. There they stayed shivering and naked until the servants called the all clear. After they emerged, <<rep $g.fakemaiden>> was going to make <<their $g.fakemaiden>> excuses and leave when <<they $g.fakemaiden>> felt a steely grip on <<their $g.fakemaiden>> arm. The jig was apparently up and if the maiden's lustful gaze was anything to go by, <<they $g.elfmaid>> had no intention of letting <<reps $g.fakemaiden>> <<umouth $g.fakemaiden>> go to waste.
<<urescuenow $g.fakemaiden>>, before too much of whatever innocence still remain in <<them $g.fakemaiden>> is taken...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"oh_what_a_show0",
'"Tiger"',
'subrace_neko', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.muscle_verystrong),
setup.qc.Mindbreak('unit'),
],
)>>
<<set _criteriaanitrai = new setup.UnitCriteria(
null, /* key */
'Animal Handler', /* name */
[
setup.trait.per_aggressive,
setup.trait.per_brave,
setup.trait.skill_animal,
setup.trait.muscle_strong,
setup.trait.per_smart,
setup.trait.tough_nimble,
setup.trait.bg_slaver,
],
[
setup.trait.per_evil,
setup.trait.per_lunatic,
setup.trait.muscle_thin,
setup.trait.per_slow,
setup.trait.per_cruel,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
slaving: 2,
}
)>>
<<set _criteriafp1 = new setup.UnitCriteria(
null, /* key */
'Fake Peasants', /* name */
[
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_attentive,
setup.trait.subrace_humanvale,
setup.trait.bg_farmer,
setup.trait.skill_connected,
setup.trait.per_curious,
],
[
setup.trait.per_aggressive,
setup.trait.per_lunatic,
setup.trait.per_empath,
setup.trait.per_direct,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.per_dreamy,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1,
social: 2,
}
)>>
<<run new setup.QuestTemplate(
'oh_what_a_show', /* key */
"Oh What A Show", /* Title */
{ /* Author */
name: "Da_Shem",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804777235285409832',
},
[ /* tags */
'vale',
'unit',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'anitrai': [ _criteriaanitrai, 1],
'fp1': [ _criteriafp1, 1],
'fp2': [ _criteriafp1, 1],
},
{ /* actors */
'tiger': 'oh_what_a_show0',
},
[ /* costs */
],
'Quest_oh_what_a_show',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_oh_what_a_showCrit',
[
setup.qc.Favor('humanvale', 100),
setup.qc.Slave('tiger', "a|was playing the part of a tiger in a circus show", undefined),
],
],
[
'Quest_oh_what_a_showCrit',
[
setup.qc.Outcomes('crit'),
setup.qc.Injury('anitrai', 4),
],
],
[
'Quest_oh_what_a_showCrit',
[
],
],
[
'Quest_oh_what_a_showCrit',
[
setup.qc.Ire('humanvale', 5),
setup.qc.Injury('anitrai', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
<<if $statistics.isHasSuccess('oh_what_a_show')>>
The travelling circus has once again reached the <<rep $company.humanvale>> and the rumours are flying high and wide.
<<else>>
A travelling circus company has reached the <<rep $company.humanvale>> and the rumours are flying high and wide.
<</if>>
They'll bring not only acrobats and entertainers but also foreign creatures not often seen in these parts. Fire breathing dragonkin, mysterious tigerkin and also a demon and angel couple, once ancient enemies, now passionate lovers!
</p>
<p>
Or so the flyers say at least. You are personally highly sceptical to these claims (for a good reason!) but some of your slavers have pointed out that if even one of them are true you could stand to gain some very valuable pieces of merchandise.
You could send the slavers to the show.
You just hope that they are motivated by something else other than just a desire to watch and enjoy the show.
</p><p>
<<Rep $g.fp1>> and <<rep $g.fp2>> mingled with the crowd outside the giant
tent, chatting amiably and keeping their eyes open. The air was thick with
excitement and once the crew started letting people into the tent, <<rep
$g.fp1>> and <<rep $g.fp2>> had to use a liberal amount of elbowing to make
their way to the front. The shows were varied throughout the day and they had
just shown up in time for the
<<if $gQuest.getSeed() % 2 == 0>>
"Passionate Meeting Between Heaven and Hell!".
The lights dimmed and two spotlights, one red and one blue lit up entrances into the tent. Out of these strode two figures, one hulking and red skinned, the other lithe and with feathery wings. They fell on one another with a great show of force, before transforming the scene into one of passion.
The demon lifting the angel up and slamming it to the wall while the angel wrapped their legs around it's companions waist kissing them fiercely.
<<if $g.fp1.isHasTrait('per_attentive') and $g.fp2.isHasTrait('per_attentive')>>
It was obvious to both your slavers that this was a pure act of flim-flam.
The "demons" red skin had already started flaking off
and the angels" wings were fake and unmoving, still
<<elseif $g.fp1.isHasTrait('per_attentive')>>
It was obvious to <<rep $g.fp1>> that this was a pure act of flim-flam. The "demons" red skin had already started flaking off and the angels" wings were fake and unmoving, still
<<elseif $g.fp2.isHasTrait('per_attentive')>>
It was obvious to <<rep $g.fp2>> that this was a pure act of flim-flam. The "demons" red skin had already started flaking off and the angels" wings were fake and unmoving, still
<<else>>
It was a magical act of having a demon and an angel be together like this -- or so your slavers though -- but you have no doubt that whatever "angel" or "demons" were on show must be a pure act of flim-flam.
Your slavers couldn't spot the trick, but despite that
<</if>>
the performance itself was very good.
<<elseif $gQuest.getSeed() % 2 == 1>>
flaming conqueror of the south. All the lights dimmed as a slow drumbeat was started. Out of the darkness <<rep $g.fp2>> could barely make out a silhouette moving into the tent before a sudden burst of fire lit up a scaled figure standing in the middle.
He held the chains leading to two collared naked elven <<women $g.tiger>> kneeling before him,
and the fire seemed to be coming from his maw.
He roared at the public as his two captives reached up to caress him as if in supplication, the heat and sharp shadows adding to the intense showing.
<<if $g.fp1.isHasTrait('per_attentive') and $g.fp2.isHasTrait('per_attentive')>>
It was obvious to both your slavers that this was a pure act of flim-flam. The dragon was a far more common lizardkin and one of the elven women seemed to be casting a spell to control the fire, still
<<elseif $g.fp1.isHasTrait('per_attentive')>>
It was obvious to <<rep $g.fp2>> that this was a pure act of flim-flam. The dragon was a far more common lizardkin and one of the elven women seemed to be casting a spell to control the fire, still
<<elseif $g.fp2.isHasTrait('per_attentive')>>
It was obvious to <<rep $g.fp1>> that this was a pure act of flim-flam. The dragon was a far more common lizardkin one of the elven women seemed to be casting a spell to control the fire, still
<<else>>
There was no way a circus troupe could convince a dragonkin to perform in such a show.
But whatever trick was hidden in the show, your slavers couldn't spot it. Either way,
<</if>>
the performance itself was very good.
<</if>>
</p>
<p>
<<if $g.fp1.getSpeech() == setup.speech.friendly>>
<<rep $g.fp1>> enjoyed being out in the crowd and joined the crowed in their awws and ahhs
<<elseif $g.fp1.getSpeech() == setup.speech.bold>>
<<rep $g.fp1>> shouted suggestions into the ring
<<elseif $g.fp1.getSpeech() == setup.speech.cool>>
<<rep $g.fp1>> looked on with an unimpressed scowl
<<elseif $g.fp1.getSpeech() == setup.speech.witty>>
<<rep $g.fp1>> started heckling shamelessly hoping to get a rise out of the circus people
<<elseif $g.fp1.getSpeech() == setup.speech.debauched>>
<<rep $g.fp1>> got inspired from the show and started feeling up <<their $g.fp1>> neighbour
<</if>>
when suddenly a commotion was heard.
</p>
<p>
While the show had been going on <<rep $g.anitrai>> had used the distraction to make <<their $g.anitrai>> way into the backstage area, looking around for any of the exotic specimens. They found what seemed to be the tigerkin sleeping chained to a wall. Quietly and confidently <<they $g.anitrai>> unlocked the simple chain and kicked the cat awake, hoping that a strong first impression would put the big cat in it's place...
</p>
<p>
<<Rep $g.anitrai>> anitrai|was wrong about <<their $g.anitrai>> judgement.
The commotion <<rep $g.fp1>> had heard turned out to be <<rep $g.anitrai>> running for
<<their $g.anitrai>> life, with a furious giant neko at <<their $g.anitrai>> heels.
<<Rep $g.anitrai>> bowled over the performers in <<their $g.anitrai>> wake and tried desperately to climb the tent pole to get away. Some of the circus people tried to use the chain attached to the neko collar to drag <<them $g.tiger>> back but that just made them skid after the cat in the arena's sand.
</p>
<p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
It took more than an hour to get <<therace $g.tiger>> under control, much to the amusement of the crowd who enjoyed this show much more then the earlier ones.
<<if $gOutcome == 'success'>>
The neko even managed to take a bite out of <<reps $g.anitrai>> rear once he was dangling from the tent pole.
<</if>>
<<Rep $g.anitrai>> theatrically played up what a liability such a vicious creature is and how they were going to inform the guard and managed to divert any questions on how the tiger got loose in the first place. The circus quite promptly decided that whatever <<rep $g.tiger>> brought to the show wasn't worth the risk. And who would happened to be there but <<rep $g.fp1>> and <<rep $g.fp2>>? Two innocent members of the audience who just happened to be able to take the neko out of their hands.
<<if $gOutcome == 'crit'>>
Happily, your slavers made of with both <<rep $g.tiger>> and the well wishes of <<rep $company.humanvale>> for their bravado.
<</if>>
<<elseif $gOutcome == 'failure'>>
<<rep $g.anitrai>> managed to make <<their $g.anitrai>> way into the audience and the circus crew managed to get the neko under control just before <<they $g.tiger>> would have reached the crowd. With the disaster narrowly averted, you slavers decided not to stay for the second act just in case someone had any questions on how the beast had gotten lose in the first place.
<<elseif $gOutcome == 'disaster'>>
<<rep $g.anitrai>> managed to make <<their $g.anitrai>> way into the audience, The neko followed suit, and panic ensued. The packed tent was a mess of screams and panicking bodies, and it's quite frankly a miracle that nobody died.
<<Rep $g.fp1>> and <<rep $g.fp2>> managed to drag out a heavily injured <<rep $g.anitrai>> but in doing so outed themselves as <<their $g.anitrai>> companions and it didn't take long for the news of the disaster to spread, tainting the reputation of <<rep $company.player>> among the <<rep $company.humanvale>>.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"the_principle_of_the_matter0",
"headteacher1",
'subrace_humankingdom_male', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.skill_hypnotic),
setup.qc.Trait('unit', setup.trait.per_dominant),
setup.qc.Trait('unit', setup.trait.per_evil),
],
)>>
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Fake Student', /* 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_roleplay_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.Trait(setup.trait.gender_male),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_principle_of_the_matter2', /* key */
"The Principle of the Matter", /* Title */
{ /* Author */
name: "Da_Shem",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804270432689455104',
},
[ /* tags */
'maleonly',
'city',
'unit',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator': [ setup.qu.negotiator, 1.5],
'noble': [ setup.qu.conartist, 1.5],
'student': _criteriastudent,
},
{ /* actors */
'headteacher': 'the_principle_of_the_matter0',
},
[ /* costs */
],
'Quest_the_principle_of_the_matter2',
setup.qdiff.hard43, /* difficulty */
[ /* outcomes */
[
'Quest_the_principle_of_the_matter2Crit',
[
setup.qc.Slaver('headteacher', "a|was a teacher at a harsh institute", true),
setup.qc.Opportunity('schools_out', {headteacher: 'headteacher'}),
],
],
[
'Quest_the_principle_of_the_matter2Crit',
[
setup.qc.Opportunity('schools_out', {headteacher: 'headteacher'}),
],
],
[
'Quest_the_principle_of_the_matter2Crit',
[
setup.qc.Trauma('negotiator', setup.trait.trauma_social, 30),
],
],
[
'Quest_the_principle_of_the_matter2Crit',
[
setup.qc.MissingUnitRecapture('negotiator', 'capturedmedium'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The <<lore location_institute_of_higher_learning>> for Men clearly has a lot of secrets, or at least it's leader seems to do.
Its head teacher, <<rep $g.headteacher>> seemed amused by your slavers' attention to his students,
perhaps he might be interested in an arrangements of sorts.
A... change of job, if you may.
After all, someone would have to take in the poor souls who flunks out from the school.
</p><p>
<<Rep $g.noble>> arranged a meeting pretending to be a parent of a particularly <<uadjbad $g.student>> young man. Walking into his office, they found the headteacher sitting behind an enormous desk, a ticking clockwork mechanism behind him.
</p>
<p>
Here <<rep $g.negotiator>> took charge,
<<if $g.negotiator.getSpeech() == setup.speech.friendly>>
trying to charm <<rep $g.headteacher>> with flowery doublespeak about common goals.
<<elseif $g.negotiator.getSpeech() == setup.speech.bold>>
boldly laying their cards on the table, <<rep $g.headteacher>> had a product and you have a market.
<<elseif $g.negotiator.getSpeech() == setup.speech.cool>>
smoothly pointing out several incidents within the city limits that you have been involved in an attempt to impress, not breaking eye contact the once.
<<elseif $g.negotiator.getSpeech() == setup.speech.witty>>
jokingly pointing out that the institute really should outsource some work placement if they want the boys to turn into productive members of society.
<<elseif $g.negotiator.getSpeech() == setup.speech.debauched>>
Pushing <<rep $g.student>> down on his knees, while lecherously talking about all the better use you could have of all the young noblemen within the institute.
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
<<Rep $g.headteacher>> did not seem overly impressed with <<reps $g.negotiator>> <<if $g.negotiator.getSpeech() == setup.speech.friendly>>
charm
<<elseif $g.negotiator.getSpeech() == setup.speech.bold>>
boldness
<<elseif $g.negotiator.getSpeech() == setup.speech.cool>>
steely nerve
<<elseif $g.negotiator.getSpeech() == setup.speech.witty>>
jokes
<<elseif $g.negotiator.getSpeech() == setup.speech.debauched>>
leering
<</if>>
but he still listened intently and started taking notes and asking questions.
Questions like,
"how much product can you move in a year?", and "Are <<rep $company.player>> interested more in finished product or lower end?", and even things like "Are you getting sleepy?".
All the while the happy little clockwork engine kept ticking away....
</p>
<p>
While <<rep $g.noble>> had been trying to overcome <<their $g.noble>> sudden tiredness to help
<<their $g.noble>> comrade, everything turned out alright in the end.
<<Rep $g.headteacher>> had just been amusing himself but soon brought <<rep $g.negotiator>> out of <<their $g.negotiator>> trance and took them on a tour of the facility. Turned out he had been onto your fake teacher from the beginning and you slavers got a whole different level of insight into the organization which turned the nobility cast-off into quite the slutty little treasures. The upper staff levels contain quite the number of obedient young men walking collared and with their heads submissively down while the basement is full of empty-eyed failures with their minds shattered by too much manipulation.
<<if $gOutcome == 'crit'>>
He not only offers you a choice of either a few graduates or a collection of dropouts, but also offered to join you, for a price of course.
<<else>>
He offers you a choice of either a few graduates a collection of dropouts.
<</if>>
</p>
<<else>>
<p>
While <<rep $g.noble>> had been trying to overcome <<their $g.noble>> sudden tiredness to help <<their $g.noble>> comrade, <<they $g.noble>> found <<themselves $g.noble>> frozen in place as <<rep $g.headteacher>> took his time working <<rep $g.negotiator>> over. He made <<theslaver $g.negotiator>> strip and lay down over the desk putting <<their $g.negotiator>> <<uhole $g.negotiator>> on full display. He pointed out in a matter of fact tone that breaking <<uadjbad $g.negotiator>> <<if $g.negotiator.isHasTrait('gender_male')>>men
<<elseif $g.negotiator.isHasTrait('gender_female')>>people
<<else>>
people
<</if>>
was in fact his job and he saw no reason to involve grubby little slavers who could be put to better use.
</p>
<p>
After that, he took his time fucking <<reps $g.negotiator>> <<uhole $g.negotiator>> while making <<them $g.negotiator>> recite what a good little slut <<they $g.negotiator>> negotiator|was.
<<if $gOutcome == 'failure'>>
Once he finally finished inside <<them $g.negotiator>>, he whispered a few last instructions before ordering <<rep $g.noble>> to take <<their $g.noble>> slut home, before he changed his mind about letting them leave.
<<else>>
Once he finished inside <<them $g.negotiator>>, he seemed to remember that <<rep $g.noble>> and <<rep $g.student>> were still there and coldly ordered them to leave before he decided to keep them as well. They prudently took his instruction and left.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"the_school_of_hard_knobs1",
"Nice Student",
'subrace_humankingdom_male', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_loose),
setup.qc.TraitDecrease('unit', setup.trait.dick_small),
setup.qc.Trait('unit', setup.trait.muscle_thin),
setup.qc.Trait('unit', setup.trait.per_submissive),
],
)>>
<<set _criteriateacher = new setup.UnitCriteria(
null, /* key */
'teacher', /* name */
[
setup.trait.bg_scholar,
setup.trait.bg_wiseman,
setup.trait.per_studious,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_logical,
setup.trait.per_serious,
setup.trait.gender_male,
],
[
setup.trait.gender_female,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.per_slow,
setup.trait.per_playful,
setup.trait.per_kind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
knowledge: 2,
}
)>>
<<set _criteriateachersassisstant = new setup.UnitCriteria(
null, /* key */
'Teacher Assistants', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_dominant,
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.per_lustful,
],
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.per_chaste,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.eq_chastity),
],
{
slaving: 2,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_school_of_hard_knobs2', /* key */
"The School of Hard Knobs", /* Title */
{ /* Author */
name: "Da_Shem",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804270432689455104',
},
[ /* tags */
'maleonly',
'city',
'unit',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'teacher': [ _criteriateacher, 2.8],
'teachersassisstant': [_criteriateachersassisstant, 0.1],
'teachersass2': [_criteriateachersassisstant, 0.1],
},
{ /* actors */
'student1': 'the_school_of_hard_knobs1',
'headteacher': 'the_principle_of_the_matter0',
},
[ /* costs */
setup.qc.MoneyCustom(-4000),
],
'Quest_the_school_of_hard_knobs2',
setup.qdiff.hard34, /* difficulty */
[ /* outcomes */
[
'Quest_the_school_of_hard_knobs2Crit',
[
setup.qc.Slave('student1', "a|was a nobleman taken from a harsh school", undefined),
setup.qc.QuestDirect('the_principle_of_the_matter2', {
headteacher: "headteacher",
}),
setup.qc.SetCooldownQuest(null, 50),
],
],
[
'Quest_the_school_of_hard_knobs2Crit',
[
setup.qc.Slave('student1', "a|was a nobleman mysteriously broken before your slavers took ", undefined),
setup.qc.Mindbreak('student1'),
setup.qc.SetCooldownQuest(null, 20),
],
],
[
'Quest_the_school_of_hard_knobs2Crit',
[
setup.qc.SetCooldownQuest(null, 10),
],
],
[
'Quest_the_school_of_hard_knobs2Crit',
[
setup.qc.Trait('teachersassisstant', setup.trait.per_submissive),
setup.qc.Trait('teachersass2', setup.trait.per_submissive),
setup.qc.SetCooldownQuest(null, 10),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoQuest('the_principle_of_the_matter2'),
],
[ /* expiration outcomes */
setup.qc.SetCooldownQuest(null, 10),
],
)>><p>
Even among the rich living in the <<lore region_city>>, there are black sheep among the families. Even the most prominent families sometimes produce drunkards, layabouts and thrill seekers. However for people willing to pay the entrance fee they can always send the lot of them to the
<<lore location_institute_of_higher_learning>> for Men
where young men are thought far away from the temptations of drink or women. The teachers have more or less free reign to do what they wish with the young layabouts to make them less of an embarrassment. Rumor has it that whomever sent there no matter how obstinate turn sweet and pliable in the hands of the experienced teachers. If you could just infiltrate the staff you might very well have the pick of the litter.
</p>
<p>
To do that however you need someone with the actual skills to impersonate a teacher. Their assistants however could be better suited to try out the students for someone that might fetch good coin. Now to bribe your way into a teaching licence...
</p><p>
<<if $g.teacher.isHasTitle('quest_certified_instructor_0')>>
Having actually graduated some time ago from the instructor academy of
<<lore location_institute_of_higher_learning>>, <<rep $g.teacher>>
immediately makes a grand impression on the students.
<<else>>
<<Yourrep $g.teacher>> showed up for <<their $g.teacher>> first day of class bright and early
and <<their $g.teacher>> student didn't know what hit them.
<</if>>
It turned out that food and sleep deprivations were additional tools the teachers here use to enforce their will and the hollowed eyed students made the perfect victims to <<their $g.teacher>> whims.
<<if $g.teacher.isHasTrait('per_cruel')>>
<<Rep $g.teacher>>
teacher|was merciless and not a lesson went by without a student leaving with a reddened ass after <<they $g.teacher>> gleefully paddled them because <<upunishreason $g.student1>>.
<<elseif $g.teacher.isHasTrait('per_evil')>>
<<Rep $g.teacher>>
took delight in tormenting the students however <<they $g.teacher>> could.
<<elseif $g.teacher.isHasTrait('per_attentive')>>
<<Rep $g.teacher>>
had <<their $g.teacher>> gaze follow the students without fail and every inattentive moment was severely punished.
<<elseif $g.teacher.isHasTrait('per_serious')>>
<<Reps $g.teacher>> humorless smile struck fear in the hearts of the students.
<<else>>
<<Rep $g.teacher>>
teacher|was ready and willing to drive the poor students to desperation with <<their $g.teacher>> demands.
<</if>>
</p>
<p>
The poor students turned to <<rep $g.teachersassisstant>> and <<rep $g.teachersass2>>
who were more than willing to suggest various ways to get them in <<reps $g.teacher>> good graces.
Hasty
<<if $g.teachersassisstant.isHasDick()>>
blowjob sessions
<<else>>
make-out sessions
<</if>>
turned to almost full orgies as <<rep $g.teachersassisstant>> and <<rep $g.teachersass2>> had the students competing to get out of punishments and better their grades.
</p>
<p>
One <<uadjgood $g.student1>> young man in particular caught <<reps $g.teachersass2>> eyes.
<<They $g.teachersass2>> and <<rep $g.teachersassisstant>> spent a many long detention hours sharing <<rep $g.student1>> between them. <<Rep $g.teachersassisstant>> made <<rep $g.student1>>
<<if $g.teachersassisstant.isHasTrait('per_lustful')>>
pleasure <<them $g.teachersassisstant>> with his mouth while giving lustful praises
<<elseif $g.teachersassisstant.isHasTrait('per_sexaddict')>>
almost pass out as <<they $g.teachersassisstant>>
<<if $g.teachersassisstant.isHasDick()>>
forced <<their $g.teachersassisstant>> <<udick $g.teachersassisstant>> down his throat relentlessly,
<<else>>
made <<them $g.student1>> eat <<them $g.teachersassisstant>> out all night long,
<</if>>
<<elseif $g.teachersassisstant.isHasTrait('per_dominant')>>
grovel and beg for mercy as he pleasured <<them $g.teachersassisstant>>,
<<else>>
pleasure <<them $g.teachersassisstant>> with his mouth,
<</if>>
while <<rep $g.teachersass2>>
<<if $g.teachersass2.isHasTrait('dick_huge')>>
used <<their $g.teachersass2>> <<ugenital $g.teachersass2>> to make the young man scream.
<<elseif $g.teachersass2.isHasTrait('per_cruel')>>
<<if $g.teachersass2.isHasDick()>>
fucked the young man while spanking him harshly.
<<else>>
donned a strap-on and fucked the young man while spanking him harshly.
<</if>>
<<elseif $g.teachersass2.isHasTrait('per_evil')>>
whispered to him what a little dirty little slut he was.
<<elseif $g.teachersass2.isHasTrait('per_lavish')>>
<<if $g.teachersass2.isHasDick()>>fucked the young man while giving him a reach-around.
<<else>>
donned a strap-on and fucked the young man while giving him a reach-around.
<</if>>
<<else>>
were more interested in his <<uhole $g.student1>>.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
They were just finishing up with the <<uadj $g.student1>> student when they noticed they had an observer. The head teacher <<rep $g.headteacher>> headteacher|was smirking at them but while your slavers were still trying to figure out what to say <<they $g.headteacher>> left without another word. Your slavers trio hastily packed their bags, forced a gagged <<rep $g.student1>> into a trunk and fled into the night.
</p>
<p>
A few days later, you receive a follow-up offer from the head-teacher...
</p>
<<elseif $gOutcome == 'success'>>
<p>
The next night they found an empty-eyed <<rep $g.student1>> in their quarters with a note saying "leave".
They took the hint and packed the young man up and before taking off into the night. Someone had decorated the broken young man with a nice accessory, however, which should be worth something.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The next day however <<rep $g.student1>> could not be found despite <<rep $g.teachersassisstant>> and <<rep $g.teachersass2>> searching up and down the location where they safely deposited the young man the night before. This spooked your slavers bad enough they decided to return early and empty handed, which is not good but could have been so much worse.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The next day, the two assistants were called to the head principles office and were promptly fired for conducting behaviors unbecoming of teachers assistants. They apologetically spent the rest of the day taking turns under <<reps $g.headteacher>> desk, sucking him off and keeping his <<udick $g.headteacher>> warm before packing their bags and leaving during the night.
<<if $g.teachersass2.isHasTrait('per_submissive') and $g.teachersassisstant.isHasTrait('per_submissive')>>
While this isn't that out of character for your slavers they were still on the job and
<<elseif $g.teachersassisstant.isHasTrait('per_submissive')>>
While this isn't that out of character for <<rep $g.teachersassisstant>>, <<rep $g.teachersass2>> surprised you with <<theirs $g.teachersass2>> submission and
<<elseif $g.teachersass2.isHasTrait('per_submissive')>>
While this isn't that out of character for <<rep $g.teachersass2>>, <<rep $g.teachersassisstant>> surprised you with <<theirs $g.teachersassisstant>> submission and
<<else>>
This is very much out of character for your slavers and
<</if>>
you give them a stern talking to when they get back.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_goblin_resque2',
"quest_broken_by_goblins",
'subrace_humankingdom_female', /* pools */
0, /* reuse chance */
[
setup.qc.Mindbreak('unit'),
setup.qc.TraitReplace('unit', setup.trait.vagina_gape),
],
)>>
<<run new setup.QuestTemplate(
'goblin_resque2', /* key */
"Goblin Rescue", /* Title */
{ /* Author */
name: "Dporentel",
url: "https://www.reddit.com/r/FortOfChains/comments/jxmjhl/v110_is_here_submit_all_your_content_bug_report/gddbqex/",
},
[ 'femaleonly', 'breeding',
'city', 'unit', 'favor',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.MoneyCustom(500),
setup.qc.Injury('toy2', 4),
setup.qc.Slave('toy2', "a|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', "a|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, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.hospital), ],
[ /* expiration outcomes */
],
)>><p>
As a slaving company, your company does not usually get contracted for 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 about now, and many groups
formed (temporary?) dens in areas uncomfortably close to the city recently.
You could try to send an extermination squad to clear out
a couple of these dens under the guise of trying to rid the world of greater evil.
You are sure to encounter some girls inside —- Your company can certainly
put them under new management
without telling the cityfolks anything.
Truly a win-win situation.
</p><<if $g.toy1.isMale()>>
<<else>>
<<questimage 'goblin_rescue_female.jpg'>>
<</if>>
<p>
The cave den your slavers cleared out seemed abandoned at first,
but still-armed traps inside told a different story.
The den appeared to be a decoy that was made to hide the actual den where all the good stuffs
were located.
Fortunately,
<<reps $g.spotter>> attention to detail allowed the group to
eventually find a secret tunnel, which led them to the actual den.
</p>
<p>
The fight inside was fierce.
Narrow corridors combined with an overwhelming amount of opponents tested the limits of
<<reps $g.fighter>> combat skills.
<<if $g.fighter.isHasTrait('skill_ambidextrous')>>
Fortunately, <<they $g.fighter>> fighter|is ambidextrous, and fighter|was able to freely switch
between left and right <<uhand $g.fighter>> for wielding <<their $g.fighter>> <<uweapon $g.fighter>>.
<</if>>
<<if $g.fighter.isHasTrait('tough_nimble')>>
<<They $g.fighter>> fighter|is sufficiently nimble and could still move with ease in the small space.
<</if>>
Eventually, <<they $g.fighter>> managed to <<uadv $g.fighter>>
vanquish all these green 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 female bodies lining the walls,
most already too broken to be profitable to capture<<if $gOutcome == 'crit'>>,
with the exception of one that seemed quite 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 was seemingly being used as an 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 the team managed to prevail and
defeated 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 <<reps $g.healer>> 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 warmed your slavers' hearts?
Not to mention the grateful female citizens that will hopefully 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 turned 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 <<reps $g.healer>> medical talents, they'd all be steak by now.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_best_in_show_dairy_cow_0", /* key */
"Best in Show: Dairy Cow", /* name */
"Won best-in-show as a dairy cow", /* description */
"a|is remembered for winning best-in-show as a dairy cow", /* unit text */
3000, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Cow', /* name */
[
setup.trait.breast_titanic,
setup.trait.training_mindbreak,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
setup.trait.skill_animal,
],
[
setup.trait.per_cautious,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_aggressive,
setup.trait.per_logical,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_chaste,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.breast_titanic, setup.trait.breast_huge, ], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master, setup.trait.training_mindbreak], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'cow_competition', /* key */
"Cow Competition", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'femaleonly',
'desert',
'money',
'trait',
'legendary',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'handler': [ setup.qu.slavetrainer, 1.5],
'milker': [ setup.qu.milker, 1.5],
'slave': _criteriaslave,
},
{ /* actors */
'judge': 'desert_all',
},
[ /* costs */
setup.qc.MoneyCustom(-2000),
],
'Quest_cow_competition',
setup.qdiff.hard46, /* difficulty */
[ /* outcomes */
[
'Quest_cow_competitionCrit',
[
setup.qc.Outcomes("success"),
setup.qc.AddTitle('slave', 'quest_best_in_show_dairy_cow_0'),
],
],
[
'Quest_cow_competitionCrit',
[
setup.qc.MoneyCustom(5000),
setup.qc.SetCooldownQuest(null, 150),
],
],
[
'Quest_cow_competitionCrit',
[
],
],
[
'Quest_cow_competitionDisaster',
[
setup.qc.Injury('handler', 4),
setup.qc.Injury('milker', 5),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.pasture),
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_desert>> is mostly barren, and unsuitable for farming.
Many people there works for a living by growing livestock, moving from one place to another as the vegetations
run out.
While some prides themselves in traditional livestock such as goats, cattles, and so on,
some handles more delicate livestock like neko or humans, which are milked
for various liquids.
</p><<include 'Quest_cow_competition_common'>>
<p>
A famous dairy producer company in the <<lore region_desert>> is holding a livestock show in the coming weeks.
They're aware that you keep cows in your <<rep setup.buildingtemplate.pasture>>, they've sent you an invitation to enter stock to be judged, should you wish. A team of handlers should also be sent together, one to keep the slave in line and another to demonstrate the slave's quantity and quality of milk.
</p>
<p>
This is a <<dangertext "rare">> opportunity. The idea of human-like dairy is still foreign and understandingly fascinating to many important people, so winning the stock show is likely to bestow some extra value onto the slave. Were your cow to win, they would probably be remembered as a special cow.
</p><p>
<<Yourrep $g.slave>> slave|was shown in public, closely inspected by the judging committee.
<<Their $g.slave>> <<ubreasts $g.slave>> were measured for their width, their volume, and even their softness, before they were being milked.
In the next stage, <<rep $g.milker>> alongside many other slavers demonstrated the lactation quality of the slave by <<uadv $g.milker>> milking the slave, whose milk is finally taste-tested by the judge.
<<if $g.slave.isHasTrait('breast_titanic')>>
Your slaver's cow produced the most amount of milk among all the participants, no small thanks to <<their $g.slave>> gigantic, almost unnatural-looking udders.
<<else>>
Your slaver's cow produced a great quantity of milk from <<their $g.slave>> bountiful bosoms, filling an entire bucket full with <<their $g.slave>> milk by the end of the day.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
It was likely there was some bribery behind the scenes, but
<<their $g.slave>> <<ubreasts $g.slave>> and the quality of <<their $g.slave>> milk won the day.
Against all odds <<rep $g.slave>> slave|was named best in show, and will be remembered as dairy stock of the highest pedigree. Your slavers were also awarded with a great sum of money, as well as samples of milk from all the other cows participating in the competition, including a suspicious-looking purple-colored milk...
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was likely there was some bribery behind the scenes, and it was fatal to <<reps $g.slave>> chances of winning.
<<if $g.slave.isHasTrait('breast_titanic')>>
Though <<their $g.slave>> tits were easily the most impressive on display,
<<else>>
Though <<their $g.slave>> milk was easily the tastiest on display,
<</if>>
a stock of another slaver company who was more open-handed with the judges took best in show.
The judges were impressed with <<reps $g.slave>> tits anyway; and your slavers were awarded the second, still sizable consolation prize.
</p>
<<else>>
<p>
Unfortunately, the judges chose another cow as best in show.
<<if $g.slave.isHasTrait('breast_titanic')>>
Despite having the most impressive tits on display,
<<else>>
The winner cow has a much more impressive tits, and also
<</if>>
the quality of <<reps $g.slave>> milk left much to be desired, according to the judges.
Your slavers came back home empty-handed, with no prize in <<uhand $g.handler>>.
</p>
<</if>><p>
Unfortunately, an unscrupulous women-emancipation group assaulted the competition. Many cows were freed from their owners that day, but fortunately your slavers were experienced. <<Rep $g.handler>> managed to fight off the invaders while <<rep $g.milker>> hid your cow away. In the aftermath, your slavers suffered some injuries, but their cow remains safe with them.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_best_in_show_cum_cow_0", /* key */
"Best in Show: Cum Cow", /* name */
"Won best-in-show as a cockmilker", /* description */
"a|is remembered for winning best-in-show as a cockmilker", /* unit text */
3000, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Cow', /* name */
[
setup.trait.balls_titanic,
setup.trait.dick_titanic,
setup.trait.training_mindbreak,
setup.trait.per_masochistic,
setup.trait.per_sexaddict,
],
[
setup.trait.per_cautious,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.per_aggressive,
setup.trait.per_chaste,
setup.trait.per_logical,
setup.trait.per_stubborn,
setup.trait.per_cruel,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.balls_huge, setup.trait.balls_titanic], true),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master, setup.trait.training_mindbreak], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'cum_cow_competition', /* key */
"Cum Cow Competition", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'desert',
'money',
'trait',
'maleonly',
'legendary',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'handler': [ setup.qu.slavetrainer, 1.5],
'milker': [ setup.qu.milker, 1.5],
'slave': _criteriaslave,
},
{ /* actors */
'judge': 'desert_all',
},
[ /* costs */
setup.qc.MoneyCustom(-2000),
],
'Quest_cum_cow_competition',
setup.qdiff.hard46, /* difficulty */
[ /* outcomes */
[
'Quest_cum_cow_competitionCrit',
[
setup.qc.Outcomes("success"),
setup.qc.AddTitle('slave', 'quest_best_in_show_cum_cow_0'),
],
],
[
'Quest_cum_cow_competitionCrit',
[
setup.qc.MoneyCustom(5000),
setup.qc.SetCooldownQuest(null, 150),
],
],
[
'Quest_cum_cow_competitionCrit',
[
],
],
[
'Quest_cum_cow_competitionDisaster',
[
setup.qc.Injury('handler', 4),
setup.qc.Injury('milker', 5),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.tavern),
],
[ /* expiration outcomes */
],
)>><<include 'Quest_cow_competition_common'>>
<p>
A slave dairy company in the <<lore region_desert>> is holding a livestock show in the coming weeks.
They're aware that you serve fresh cockmilk in your <<rep setup.buildingtemplate.tavern>>, so they've sent you an invitation to enter an especially productive livestock to be judged, should you wish. A team of handlers should also be sent together, one to keep the slave in line and another to demonstrate the slave's quantity and quality of cockmilk.
</p>
<p>
This is a <<dangertext "rare">> opportunity. The idea of human-like cockmilk is still foreign and understandingly fascinating to many important people, so winning the stock show is likely to bestow some extra value onto the slave. Were your cow to win, they would probably be remembered as a special slave.
</p><p>
<<Yourrep $g.slave>> slave|was shown in public, closely inspected by the judging committee.
Both <<their $g.slave>> <<udick $g.slave>> and <<uballs $g.slave>> were measured for their width, girth, volume, weight, and even their softness, before they were being fully drained of their ejaculate.
In the next stage, <<rep $g.milker>> alongside many other slavers demonstrated the slave's milk quality by <<uadv $g.milker>> jerking off the slave, producing strings and strings of cum which was then taste-tested by the judges.
<<if $g.slave.isHasTrait('balls_titanic')>>
<<if $g.slave.isHasTrait('dick_titanic')>>
<<reps $g.slave>> unnaturally gigantic balls were complemented with <<their $g.slave>> equally gigantic cock, and the cum leaked out like a stream from the shaft, easily outperforming all the other livestock by quantity alone.
<<elseif $g.slave.isHasTrait('dick_large')>>
<<reps $g.slave>> unnaturally gigantic balls were complemented with an adequately big cock, the cum leaked out like a stream from the shaft, easily outperforming all the other livestock by quantity alone.
<<elseif $g.slave.isHasTrait('dick_small')>>
<<reps $g.slave>> unnaturally gigantic balls were contrasted with their relatively average penis. The tap struggled to deliver all the cum from the balls, but still the quantity easily outperform all the other livestocks on show.
<<else>>
<<reps $g.slave>> unnaturally gigantic balls was the complete opposite of <<their $g.slave>> pathetically small dick, and <<rep $g.milker>> had to work very hard to extract every single bit of cum from the overfull balls.
<</if>>
<<else>>
<<if $g.slave.isHasTrait('dick_huge')>>
Your slave was very well hung, with huge dick and balls, and the cum leaked out steadily from the shaft and into the bucket.
<<elseif $g.slave.isHasTrait('dick_large')>>
<<reps $g.slave>> huge balls were complemented with an adequately big cock, and the cum leaked out steadily from the shaft and into the bucket.
<<elseif $g.slave.isHasTrait('dick_small')>>
<<reps $g.slave>> huge balls were emptied string by string by <<reps $g.milker>> masterful stroke over the slave's <<udick $g.slave>>, and only after the 8-th orgasm in a row did the slave's balls been completely emptied.
<<else>>
<<reps $g.slave>> huge balls were the opposite of <<their $g.slave>> pathetically small dick, and <<rep $g.milker>> had to work very hard to extract every single bit of cum from the overfull balls.
<</if>>
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
It was likely there was some bribery behind the scenes, but
<<their $g.slave>> massive balls <<if $g.slave.isHasTrait('dick_huge')>>, their equally massive junk, <<else>> (despite their <<udick $g.slave>>)<</if>> and the quality of <<their $g.slave>> cockmilk won the day.
Against all odds <<rep $g.slave>> slave|was named best in show, and will be remembered as cock stock of the highest pedigree. Your slavers were also awarded with a great sum of money, as well as samples of cum from all the other dick-slaves participating in the competition, including a suspicious-looking purple-colored liquid...
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was likely there was some bribery behind the scenes, and it was fatal to <<reps $g.slave>> chances of winning.
<<if $g.slave.isHasTrait('balls_titanic') && $g.slave.isHasTrait('dick_medium')>>
Though <<their $g.slave>> balls were easily the most impressive on display,
<<else>>
Though <<their $g.slave>> cum was easily the tastiest on display,
<</if>>
a stock of another slaver company who was more open-handed with the judges took best in show.
The judges were impressed with <<reps $g.slave>> junk anyway; and your slavers were awarded the second, still sizable consolation prize.
</p>
<<else>>
<p>
Unfortunately, the judges chose another slave as best in show.
<<if $g.slave.isHasTrait('balls_titanic')>>
Despite having the most impressive tits on display,
<<else>>
The winner cow had a much more impressive tits, and also
<</if>>
<<if $g.slave.isHasTraitExact('dick_tiny')>>
<<reps $g.slave>> tiny dick proved to be <<their $g.slave>> downfall
<<elseif $g.slave.isHasTraitExact('dick_small')>>
<<reps $g.slave>> inadequately-sized dick proved to be <<their $g.slave>> downfall
<<else>>
the quality of <<reps $g.slave>> cum left much to be desired,
<</if>>
according to the judges.
Your slavers came back home empty-handed, with no prize in <<uhand $g.handler>>.
</p>
<</if>><p>
Unfortunately, an unscrupulous slave-emancipation group assaulted the competition. Many dick-cows were freed from their owners that day, but fortunately your slavers were experienced. <<Rep $g.handler>> managed to fight off the invaders while <<rep $g.milker>> hid your slave away. In the aftermath, your slavers suffered some injuries, but their slave remained safe with them.
</p><<set _criteriaabyssalnegotiator = new setup.UnitCriteria(
null, /* key */
'Abyssal Negotiator', /* name */
[
setup.trait.bg_mist,
setup.trait.per_calm,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_logical,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_lustful,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
social: 1,
arcane: 1,
sex: 1,
}
)>>
<<set _criteriaportalofferingslave = new setup.UnitCriteria(
null, /* key */
'Demon Portal Offering Slave', /* name */
[
setup.trait.bg_courtesan,
setup.trait.bg_artist,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_dreamy,
setup.trait.per_playful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.value_high4,
setup.trait.value_high5,
setup.trait.value_high6,
],
[
setup.trait.bg_knight,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_slow,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.value_low,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.training_obedience_advanced], true),
setup.qres.AnyTrait([setup.trait.face_beautiful, setup.trait.per_sexaddict, setup.trait.bg_priest, setup.trait.bg_healer], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'opening_the_obelisk_gate', /* key */
"Opening the Obelisk Gate", /* Title */
{ /* Author */
name: "Fae",
url: "",
},
[ /* tags */
'transformation',
'danger',
'order',
'upgrade',
'unknown',
'rare',
],
4, /* weeks */
24, /* expiration weeks */
{ /* roles */
'abyssalnegotiator': [ _criteriaabyssalnegotiator, 3],
'portalofferingslave': _criteriaportalofferingslave,
},
{ /* actors */
},
[ /* costs */
],
'Quest_opening_the_obelisk_gate',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_opening_the_obelisk_gateCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Equipment(setup.equipmentpool.sextoy_good),
],
],
[
'Quest_opening_the_obelisk_gateSuccess',
[
setup.qc.Leave('abyssalnegotiator', "a|is being held hostage by a demon in the mist", undefined),
setup.qc.MissingUnitForever('portalofferingslave'),
setup.qc.SlaveOrderFlex(
'A Worthy Offering ', /* name */
'independent', /* company */
40, /* expires in */
1000, /* base price */
0, /* trait multi */
0, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.NoTraits([setup.trait.training_dominance_basic, setup.trait.training_dominance_advanced, setup.trait.training_dominance_master], true),
setup.qres.XTraits([
setup.trait.training_obedience_advanced,
setup.trait.training_endurance_advanced,
setup.trait.training_masochist_advanced,
setup.trait.training_domestic_advanced,
setup.trait.training_roleplay_advanced,
], 3),
setup.qres.AnyTrait([
setup.trait.training_oral_master,
setup.trait.training_vagina_master,
setup.trait.training_anal_master,
setup.trait.training_pony_master,
setup.trait.training_pet_master,
setup.trait.training_sissy_master,
setup.trait.training_toilet_master,
], true),
setup.qres.XTraits([setup.trait.bg_priest, setup.trait.bg_healer, setup.trait.face_attractive, setup.trait.face_beautiful, setup.trait.per_lustful, setup.trait.per_sexaddict], 2),
setup.qres.AnyTrait([setup.trait.value_high3, setup.trait.value_high4, setup.trait.value_high5, setup.trait.value_high6], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.Return('abyssalnegotiator'),
setup.qc.Opportunity('an_offering_accepted2', null),
],
[ /* unfulfilled outcomes */
setup.qc.HideAll([
setup.qc.Return('abyssalnegotiator'),
setup.qc.MissingUnit('abyssalnegotiator'),
setup.qc.TraumatizeRandom('abyssalnegotiator', 50),
setup.qc.Corrupt('abyssalnegotiator', null, 4),
],
"Who knows what might happen to your slaver, who is being held hostage?",
),
],
),
],
],
[
'Quest_opening_the_obelisk_gateFailure',
[
setup.qc.Corrupt('abyssalnegotiator', null, 3),
setup.qc.TraumatizeRandom('abyssalnegotiator', 10),
setup.qc.MissingUnitForever('portalofferingslave'),
],
],
[
'Quest_opening_the_obelisk_gateDisaster',
[
setup.qc.Outcomes("failure"),
setup.qc.TraitIncreaseExisting('abyssalnegotiator', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('abyssalnegotiator', setup.trait.anus_gape),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The instructions your group of slavers obtained from the obelisk described a rather specific kind of slave, which must be offered as tribute through a "sexual ritual" in front of the obelisk. Additionally the note explains the other participant in the ritual will be the only one to be able to safely enter the portal. This means the slaver you chose to send will be negotiating directly with the entity on the other side. Unfortunately this is the mist you are dealing with, so there is a real chance whoever you send wont come back the same as they went in, if they come out at all.
</p>
<<if !$inventory.isHasItem('technology_hornymaster')>>
<p>
Still, the note did allude to some kind of lucrative reward,
some kind of secret technology you could not possibly miss out...
</p>
<</if>><<set _u = setup.getAnySlaver()>>
<p>
After two weeks passed up you anxiously awaited to learn if you had sent <<yourrep $g.abyssalnegotiator>> to get enslaved, or worse, at that stupid black monument. As the sun set you began slowly feeling a growing sense of dread, only to have <<yourrep _u>> burst in and drop a small wooden box on your desk. Curiously, and with <<rep _u>> watching on in curiosity, you opened the box to reveal a note as well as a clearly "well used" piece of sex equipment. The note reads:
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
It has come to my attention that you and your company have so graciously decided to fulfill my request! You see I've recently grown bored of the toy I have currently but they are oh so unique that finding a replacement has been difficult for me. That's why I set up this little series of interviews, and your employee <<rep $g.abyssalnegotiator>> really did a great job selling me on how wonderfully well equipped your company is to help me, so in the box you'll find a list of instructions on everything I'm looking for! We can discuss payment after you deliver what I want, your slaver here had <<their $g.abyssalnegotiator>> eye on some insider information about training that I have, but I'm always open to negotiations. And I'm sorry to do this to you but since I know you wouldn't trust me to pay you back, I'm going to be hanging onto <<yourrep $g.abyssalnegotiator>> until you complete my order. Hell I'm starting to take a liking to <<them $g.abyssalnegotiator>> so maybe if you don't give me a new toy I'll just keep them.
</p>
<p>
P.S.
I left a little something in the box, it still has the taste of <<rep $g.abyssalnegotiator>> on it if you start missing them.
</p>
<p>
Kisses,
</p>
<p>
Your most eager customer!
</p>
</div>
</p>
<p>
After reading the note you feel your blood pressure rising, but as a well adapted leader you understand that its at times like these you need to remain calm. Your <<uadjgood _u>> slaver <<rep _u>> try's to comfort you, and after you've calmed down you turn your mind to planning how to fulfill the request. It seems your slaver is alright for now, but who knows what might happen if you don't fulfill this outrageous request.
</p><<set _u = setup.getAnySlaver()>>
<p>
After two weeks passed up you anxiously awaited to learn if you had sent <<yourrep $g.abyssalnegotiator>> to die, or worse, at that stupid black rock. As the sun set you began slowly feeling a growing sense of dread, only to have <<yourrep _u>> burst in and drop a small wooden box on your desk. Curiously, and with <<rep _u>> watching on in curiosity, you opened the box to reveal a note as well as a clearly "well used" piece of sex equipment. The note reads:
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
It has come to my attention that you and your company have so graciously decided to fulfill my request! You see I've recently grown bored of the toy I have currently but they are oh so unique that finding a replacement has been difficult for me. That's why I set up this little series of interviews, and your employee <<rep $g.abyssalnegotiator>> really did a great job selling me on how wonderfully well equipped your company is to help me, so in the box you'll find a list of instructions on everything I'm looking for! We can discuss payment after you deliver what I want, your slaver here had <<their $g.abyssalnegotiator>> eye on some insider information about training that I have, but I'm always open to negotiations. And I'm sorry to do this to you but since I know you wouldn't trust me to pay you back, I'm going to be hanging onto <<yourrep $g.abyssalnegotiator>> until you complete my order. Hell I'm starting to take a liking to <<them $g.abyssalnegotiator>> so maybe if you don't give me a new toy I'll just keep them.
</p>
<p>
Kisses,
</p>
<p>
Your most eager customer!
</p>
</div>
</p>
<p>
After reading the note you feel your blood pressure rising, but as a well adapted leader you understand that its at times like these you need to remain calm. Your <<uadjgood _u>> slaver <<rep _u>> try's to comfort you, and after you've calmed down you turn your mind to planning how to fulfill the request. It seems your slaver is alright for now, but who knows what might happen if you don't fulfill this outrageous request.
</p><<set _u = setup.getAnySlaver()>>
<p>
After two weeks passed up you anxiously awaited to learn if you had sent <<yourrep $g.abyssalnegotiator>> to die, or worse, at that stupid black rock. As the sun set you began slowly feeling a growing sense of dread, only to have <<<<yourrep _u>> burst in and let you know that <<rep $g.abyssalnegotiator>> had returned, but it hadn't gone well. Apparently after the ritual <<they $g.abyssalnegotiator>> was allowed into a vast mansion in the mist to meet with the demon behind everything. According to <<them $g.abyssalnegotiator>> his memory of the encounter was fuzzy at best from then to when <<they $g.abyssalnegotiator>> found himself wandering the desert looking different, but their body clearly showed the aftermath of the time they spent in the mist. Whoever this demon was, they were no newcomer to corruption. Perhaps it was for the best <<yourrep $g.abyssalnegotiator>> got out with as unscathed as <<they $g.abyssalnegotiator>> is.
</p><<set _u = setup.getAnySlaver()>>
<p>
After two weeks passed up you anxiously awaited to learn if you had sent <<yourrep $g.abyssalnegotiator>> to die, or worse, at that stupid black rock. As the sun set you began slowly feeling a growing sense of dread, only to have <<<<yourrep _u>> burst in and let you know that <<rep $g.abyssalnegotiator>> had returned, but it hadn't gone well. Apparently after the ritual <<they $g.abyssalnegotiator>> was allowed into a vast mansion in the mist to meet with the demon behind everything. According to <<them $g.abyssalnegotiator>> his memory of the encounter was fuzzy at best from then to when <<they $g.abyssalnegotiator>> found himself wandering the desert looking different, but their body clearly showed the aftermath of the time they spent in the mist, both in the form of corruption and their clearly well used orifices. Whoever this demon was, they were no newcomer to sex or corruption. Perhaps it was for the best <<yourrep $g.abyssalnegotiator>> got out with as unscathed as <<they $g.abyssalnegotiator>> are.
</p><<run new setup.Title(
"quest_alpha_were_0", /* key */
"Alpha Were", /* name */
"An alpha werewolf you captured", /* description */
"a|was an alpha werewolf prior to being captured by you", /* unit text */
7000, /* slave value */
{ /* skill additives */
brawn: 3,slaving: 2,sex: 2,},
)
>>
<<run new setup.UnitGroup(
"raiding_the_weres0",
"Werewolf: All Gender alpha",
'subrace_werewolf', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTitle('unit', 'quest_alpha_were_0'),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_dominant, setup.trait.per_lunatic, setup.trait.per_aggressive, setup.trait.per_proud, setup.trait.per_direct, setup.trait.per_gregarious, setup.trait.per_cruel], 2, true, false),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_extremelystrong, setup.trait.height_giant, setup.trait.face_hideous, setup.trait.face_beautiful, setup.trait.per_smart, setup.trait.tough_tough, setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.skill_connected, setup.trait.per_sexaddict], 2, false, false),
],
)>>
<<set _criteriasaboteurone = new setup.UnitCriteria(
null, /* key */
'Saboteur ', /* name */
[
setup.trait.bg_assassin,
setup.trait.bg_hunter,
setup.trait.bg_informer,
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_attentive,
setup.trait.skill_creative,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.per_slow,
setup.trait.per_proud,
setup.trait.per_direct,
setup.trait.per_dreamy,
setup.trait.per_curious,
setup.trait.per_lunatic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
intrigue: 2,
}
)>>
<<run new setup.QuestTemplate(
'raiding_the_weres', /* key */
"Raiding The Weres", /* Title */
{ /* Author */
name: "Fae",
url: "",
},
[ /* tags */
'furry',
'vale',
'veteran',
'unit',
'ire',
'rare',
'danger',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'saboteurone': [ _criteriasaboteurone, 0.6],
'saboteurtwo': [ _criteriasaboteurone, 0.6],
'raiderone': [ setup.qu.raider, 0.6],
'raidertwo': [ setup.qu.raider, 0.6],
'slaver': [ setup.qu.slavecapturer, 0.6],
},
{ /* actors */
'commonwereone': 'subrace_werewolf',
'commonweretwo': 'subrace_werewolf',
'commonwerethree': 'subrace_werewolf',
'aphawere': 'raiding_the_weres0',
},
[ /* costs */
],
'Quest_raiding_the_weres',
setup.qdiff.hardest55, /* difficulty */
[ /* outcomes */
[
'Quest_raiding_the_weresCrit',
[
setup.qc.Slave('aphawere', "a|was an alpha werewolf your team managed to subdue during a raid", undefined),
setup.qc.Ire('werewolf', 5),
setup.qc.Outcomes('success'),
],
],
[
'Quest_raiding_the_weresCrit',
[
setup.qc.Slave('commonwereone', "a|was a werewolf you abducted in a raid", undefined),
setup.qc.Slave('commonweretwo', "a|was a werewolf you abducted in a raid", undefined),
setup.qc.Slave('commonwerethree', "a|was a werewolf you abducted in a raid", undefined),
setup.qc.Injury('raiderone', 5),
setup.qc.Injury('raidertwo', 5),
setup.qc.Ire('werewolf', 3),
],
],
[
'Quest_raiding_the_weresCrit',
[
setup.qc.Slave('commonwereone', "a|was a werewolf you abducted in a raid", undefined),
setup.qc.MissingUnit('raiderone'),
setup.qc.MissingUnit('raidertwo'),
setup.qc.OneRandom([
setup.qc.TraitIncreaseExisting('saboteurone', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('saboteurtwo', setup.trait.anus_gape),
]),
setup.qc.OneRandom([
setup.qc.TraitIncreaseExisting('saboteurone', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('saboteurtwo', setup.trait.vagina_gape),
]),
setup.qc.Ire('werewolf', 3),
],
],
[
'Quest_raiding_the_weresCrit',
[
setup.qc.Injury('slaver', 5),
setup.qc.Outcomes("failure"),
setup.qc.MissingUnit('saboteurone'),
setup.qc.TraumatizeRandom('saboteurone', 40),
setup.qc.TraitIncreaseExisting('saboteurone', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('saboteurone', setup.trait.vagina_gape),
setup.qc.MissingUnit('saboteurtwo'),
setup.qc.TraumatizeRandom('saboteurtwo', 40),
setup.qc.TraitIncreaseExisting('saboteurtwo', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('saboteurtwo', setup.trait.vagina_gape),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
One day, as you leisurely sit at your desk doing who-knows-what,
<<yourrep
_u>> entered to talk about a particularly lucrative idea.
Apparently <<therace _u>> has been pondering how to go
about directly abducting werewolves.
You're not sure why <<they _u>> seems to have some vested interest in
capturing the furry race, but regardless of why,
capturing them normally would be nothing
short of suicidal, as werewolves tend to travel and stay together as a savage pack.
But your slaver insists <<they _u>> has a plan, the plan being
to have a group of two slavers sneak in, and start a fire alongside some fancy explosions in order to create
a panic and draw the toughest weres to one place, so that a second group can
rush in, nab some disoriented pack members, and get the hell out, running like hell and hoping they
get far enough before anyone catches on to what happened.
</p>
<p>
Admittedly you aren't completely sold the plan isn't suicidal.
Should you decide to go about on this quest, you should definitely prepare for the worst...
</p><p>
After several weeks of scouting, prep, and rehearsals <<rep $g.saboteurone>> and
<<utheirrel $g.saboteurone $g.saboteurtwo>> <<rep $g.saboteurtwo>>
snucked into position with the equipment they bought,
quickly and quietly setting everything up and getting themselves ready for the
ensuing chaos.
<<if $gOutcome == 'crit'>>
The raiding group waited for everything to kick off when <<rep
$g.raidertwo>> noticed that the weres seemed to be in the middle of holding some kind of carnal celebration.
while this at first alarmed the slaver, the group soon realized this was actually an auspicious
coincidence as it meant that the weres were too busy drinking, and would be more inebriated than mormal,
making the overall plan easier to work.
<<else>>
The raiding group waited for everything to kick off, everyone understandably on edge about the
serious risk they were about to take.
<</if>>
</p>
<p>
When the time finally came,
<<rep $g.saboteurone>> snucked from <<their $g.saboteurone>> hiding place to sow the planned chaos.
<<if $g.saboteurone.isHasAnyTraitExact(['bg_assassin', 'bg_thief', 'bg_informer', 'bg_hunter'])>>
<<They $g.saboteurone>> saboteurone|have plenty of experience in subterfuge from <<their $g.saboteurone>>
background.
<</if>>
<<if $g.saboteurone.isHasTrait('tough_nimble')>>
<<Therace $g.saboteurone>> saboteurone|is nimble enough to slither into the territory without drawing undue attention.
<</if>>
<<if $g.saboteurone.isHasAnyTraitExact(['per_smart', 'skill_creative', 'per_attentive'])>>
<<They $g.saboteurone>> even managed to sow some extra additional unplanned chaos along the way,
including desecrating one of the larger chunk of cheese they found in the larder.
<</if>>
<<if $g.saboteurone.isHasTrait('magic_fire')>>
<<They $g.saboteurone>> saboteurone|command fire magic, meaning <<they $g.saboteurone>> could
start fire within the compound without needing to bring any sort of firestarter.
<</if>>
</p>
<p>
As soon as the saboteur team started things off, the camp erupted into pure unbridled chaos.
The raiding team turned into a blur sprinting in and
snagging some of the disoriented weres that happened to be alone,
tying them up and dragging them out of the camp.
Just when everything seemed to be going according to plan,
the alpha of the pack howled a bloodcurling roar, restoring morale and
intimidating your slavers.
Just outside of the werewolves den, your slavers were face to face with the angry
alpha, and they had to hope that <<rep $g.raiderone>> or <<rep $g.raidertwo>> got what it takes
to defeat such an opponent.
</p>
<<if $gOutcome == 'crit'>>
<p>
The alpha was a magnificent specimen, and there was no chance in hell your slavers could match
the hulking creature in one-on-one combat.
But your slavers had the advantage of numbers, at least for that moment, and
they knew it too.
While <<rep $g.raiderone>> engaged the wolf,
<<rep $g.raidertwo>>
<<if $g.raidertwo.isHasTrait('per_sly')>>
sneaked in from behind before
<<elseif $g.raidertwo.isHasTrait('per_brave')>>
charged in without warning and
<<else>>
seized an opening and
<</if>>
<<if $g.raidertwo.isHasTrait('muscle_strong')>>
choked the consciousness out of the wolf.
<<elseif $g.raidertwo.isHasTrait('magic_fire')>>
launched a fire spell, burning the wolf and knocking <<them $g.aphawere>> out cold.
<<else>>
bashed <<their $g.raidertwo>> <<uweapon $g.raidertwo>> as hard as <<they $g.raidertwo>>
could against the wolf's groins. It worked, and the wolf knelt in pain before passing out cold.
<</if>>
</p>
<p>
Your slavers knew exactly that more werewolves were pursuing them, and decided not to press their luck
even further. They packaged the downed former alpha wolf as well as some of <<their $g.aphawere>> captured
earlier and cart them all off away before the pack regained their order.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The fight was brutal, and it was clear that the alpha was more than strong enough to hold
off both of your slavers.
With the alpha's packmates approaching on the tow, your slavers realized they were running out of time.
They decided to flee, -- <<rep $g.raiderone>> and <<rep $g.raidertwo>> would need to flee while being flanked by
the wolves while the rest of the team would need to carry their new captives.
It was difficult, but the team pulled it through and managed to escape to safety.
<<Rep $g.raiderone>> and <<rep $g.raidertwo>> suffered grievous injuries, however, but
all things considered it could have been so much worse.
</p>
<p>
The incident damaged your relationship with the wolves, but you got a couple of new slaves in exchange.
All in all, that could have gone much worse.
As for <<rep $g.raiderone>> and <<rep $g.raidertwo>>, well, let's just say that your Rescuer
should stop drinking on the job and get their ass moving.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The fight was brutal, and it was clear that the alpha was more than strong enough to hold
off both of your slavers.
With the alpha's packmates approaching on the tow, your slavers realized they were running out of time.
They decided to flee, but unfortunately
both <<rep $g.raiderone>> and <<rep $g.raidertwo>> were locked in combat with no way to escape
from their predicaments.
The team had no choice but to abandon the two who were left to their fates as
the team retreated back to safety together with one the tied-up packmates of the werewolf tribe.
</p>
<p>
The incident damaged your relationship with the wolves, but you got a couple of new slaves in exchange.
All in all, that could have gone much worse.
As for <<rep $g.raiderone>> and <<rep $g.raidertwo>>, well, let's just say that your Rescuer
should stop drinking on the job and get their ass moving.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Despite the situation,
<<rep $g.slaver>> had the most idiotic idea ever to try and use the opportunity
to capture the enraged werewolf.
<<Their $g.slaver>> floppy attempt at sneaking in were met with a heavy punch,
and <<therace $g.slaver>> slaver|was out cold.
Seeing <<their $g.slaver>> teammate downed, the rest of your team panicked and scrambled to escape,
which did not end well as expected.
Everyone on the team was captured, no doubt to be used as the tribe's playthings in the coming days.
</p>
<p>
That is, except for <<rep $g.slaver>>. It seemed the werewolves had forgotten about <<therace $g.slaver>>
who had been knocked out early on during the fight.
A strange turn of events.
In either case, you best prepare your Rescuer for they will have to work very hard if you want to see your captured slavers ever again...
</p>
<</if>><<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Obelisk Scout', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_mist,
setup.trait.bg_adventurer,
setup.trait.bg_nomad,
setup.trait.tough_tough,
setup.trait.per_cautious,
setup.trait.per_direct,
setup.trait.per_attentive,
setup.trait.skill_flight,
],
[
setup.trait.subrace_humanvale,
setup.trait.subrace_werewolf,
setup.trait.bg_mystic,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_independent,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_playful,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 3,
}
)>>
<<set _criteriaresearcherone = new setup.UnitCriteria(
null, /* key */
'Researcher(Magical)', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.bg_mystic,
setup.trait.bg_apprentice,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
setup.trait.skill_creative,
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_aggressive,
setup.trait.per_gregarious,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
arcane: 2,
}
)>>
<<set _criteriaresearchertwo = new setup.UnitCriteria(
null, /* key */
'Researcher(Scholar)', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.bg_scholar,
setup.trait.bg_mystic,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
setup.trait.skill_creative,
setup.trait.skill_alchemy,
],
[
setup.trait.per_aggressive,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 2,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_mistifying_obelisk2', /* key */
"The Mistifying Obelisk", /* Title */
{ /* Author */
name: "Fae",
url: "",
},
[ /* tags */
'transformation',
'desert',
'veteran',
'unknown',
'rare',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'scout': [ _criteriascout, 1],
'researcherone': [ _criteriaresearcherone, 1],
'researchertwo': [ _criteriaresearchertwo, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_mistifying_obelisk2',
setup.qdiff.hard42, /* difficulty */
[ /* outcomes */
[
'Quest_the_mistifying_obelisk2Crit',
[
setup.qc.Equipment(setup.equipmentpool.sex_good),
setup.qc.Outcomes("success"),
],
],
[
'Quest_the_mistifying_obelisk2Success',
[
setup.qc.SetCooldownQuest(null, 100),
setup.qc.QuestDirect('opening_the_obelisk_gate', null),
],
],
[
'Quest_the_mistifying_obelisk2Failure',
[
setup.qc.Injury('scout', 2),
setup.qc.Injury('researcherone', 2),
setup.qc.Injury('researchertwo', 2),
],
],
[
'Quest_the_mistifying_obelisk2Disaster',
[
setup.qc.OneRandomSeed([
setup.qc.Injury('researcherone', 2),
setup.qc.Injury('researchertwo', 2)
]),
setup.qc.OneRandomSeed([
setup.qc.TraumatizeRandom('researcherone', 10),
setup.qc.TraumatizeRandom('researchertwo', 10)
]),
setup.qc.Injury('scout', 6),
setup.qc.Corrupt('scout', null, 1),
setup.qc.Corrupt('researcherone', null, 1),
setup.qc.Corrupt('researchertwo', null, 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoQuest('opening_the_obelisk_gate'),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Every now and then, you would discuss the recent news with <<yourrep _u>>. Normally, nothing productive comes out of it, but in one recent discussion, <<they _u>> offhandedly mentioned something that caught your attention. Rumors are spreading that somewhere in the Eastern Deserts, an eye-catchingly large obelisk has somehow made an appearance, seemingly out of nowhere. It is rife with strange inscriptions, and nobody has any clue what those inscriptions could be. One thing seems clear however — this obelisk did not come from the mortal plane, and everyone seems to agree this might have come from the Mist.
</p>
<p>
As is common sense in the land, nothing good ever comes from toying with the Mist. But <<therace _u>> leans in and smirks, <<uadvcare _u>>, trying to goad you into investigating the obelisk. After all, something so seemingly rare, magical, and otherworldly is bound to be worth something, right?
</p><p>
<<Rep $g.scout>>, <<rep $g.researcherone>>, and <<rep $g.researchertwo>> searched through the desert in the blistering heat for just under a week before <<yourrep $g.scout>> managed to spot the obelisk, standing tall in a valley surrounded by dunes, and a week ahead of schedule none the less. With a relieved sigh, <<rep $g.researcherone>> turned to <<rep $g.researchertwo>>, and the pair exchanged words of excitement. Not only would they be able to set up tents and rest in the shade, but they would have an extra week to try and decipher the secrets of the obelisk.
</p>
<p>
As the group approached the glistening obelisk however, the strangeness of the situation was starting to feel unnerving. The obelisk was an imposing monument, and to your experienced slavers the feeling was instantly recognizable. It was the same sense of unease that always infected areas tied heavily to the mist. Quickly sensing the tension, <<rep $g.scout>> lightened the mood by joking around as <<they $g.scout>> set to setting up their temporary campsite. <<rep $g.researcherone>> and <<rep $g.researchertwo>> appreciated the effort, even if it did little to stunt the growing feeling of danger in the back of their minds.
</p>
<p>
Quickly the three set up camp and for the next few leisurely weeks the researchers butted heads while <<therace $g.scout>> spent <<them $g.scout>> time sunbathing, napping, and warding off the occasional small thirsty bandit pack. Eventually
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> realized the obelisk had a magical mechanism built into its side that could be opened by activating the inscribed runes on the obelisk.
<<if $g.researcherone.isHasTrait('per_cautious')>>
Not one to act without caution however, <<they $g.researcherone>> did not rush to enter the solution. Instead <<they $g.researcherone>> got the attention of <<rep $g.researchertwo>> and together they spent the next day conducting a thorough sweep of the entire obelisk, checking for traps and creating a plan to solve the puzzle safely.
<<else>>
As <<they $g.researcherone>> told the group of <<their $g.researcherone>> findings, the sense of unease weighed heavy on them all. As this object was from the mist, there was no telling what manner of hideouts traps might be present. Together the three worked out the details of their plan, having <<rep $g.scout>> and <<rep $g.researchertwo>> stay a safe distance away while <<rep $g.researcherone>> carefully and slowly activated the runes. At least this way, if anything did happen <<rep $g.researcherone>> would have help right away.
<</if>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> realized the obelisk had a magical mechanism built into its side that could be opened by solving a riddle inscribed on the obelisk.
<<if $g.researchertwo.isHasTrait('per_cautious')>>
Not one to act without caution however, <<they $g.researchertwo>> did not rush to enter the solution. Instead <<they $g.researchertwo>> got the attention of <<rep $g.researcherone>> and together they spent the next day conducting a thorough sweep of the entire obelisk, checking for traps and creating a plan to solve the puzzle safely.
<<else>>
As <<they $g.researchertwo>> told the group of <<their $g.researchertwo>> findings, the sense of unease weighed heavy on them all. As this object was from the mist, there was no telling what manner of hideouts traps might be present. Together the three worked out the details of their plan, having <<rep $g.scout>> and <<rep $g.researcherone>> stay a safe distance away while <<rep $g.researchertwo>> carefully answered the riddles aloud. At least this way, if anything did happen <<rep $g.researchertwo>> would have help right away.
<</if>>
<</if>>
</p>
<p>
The next morning, with the plan settled on,
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> approached the obelisk, as the other two cautiously watched on. As each rune was activated the uneasy sense grew stronger until finally, while holding <<their $g.researcherone>> breath, <<rep $g.researcherone>> activated the final rune. In the next few still moments, the tension was palpable, but as seconds passed and nothing happened <<rep $g.researcherone>> began wondering if maybe <<they $g.researcherone>> had made a mistake. In that moment a small wooden box fell into the sand at <<reps $g.researcherone>><<ufeet $g.researcherone>>.
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> approached the obelisk, as the other two cautiously watched on. As each rune was activated the uneasy sense grew stronger until finally, while holding <<their $g.researchertwo>> breath, <<rep $g.researchertwo>> activated the final rune. In the next few still moments, the tension was palpable, but as seconds passed and nothing happened <<rep $g.researchertwo>> began wondering if maybe <<they $g.researchertwo>> had made a mistake. In that moment a small wooden box fell into the sand at <<reps $g.researchertwo>><<ufeet $g.researchertwo>>.
<</if>>
As the group settled back into camp, the group discussed what to do for a short while before deciding it would be best to open the box before bringing it back to <<rep $company.player>>. As the group cautiously undid the metal latch and slowly lifted the lid of the box they found a piece of rather sexual looking equipment, and a note in frilly handwriting congratulating the group for being the first to correctly solve the obelisk in one attempt. The note also contained instructions on how to provide a proper offering, which would allow an individual to enter the portal to negotiate a business deal.
</p>
<p>
When the group returned and reported their findings to you, you cant help but feel toyed with. Who ever was behind the obelisk was testing people, but there would only be one way to find out what their business proposal is... Or you could always ignore it and keep the free sex gear.
</p><p>
<<rep $g.scout>>, <<rep $g.researcherone>>, and <<rep $g.researchertwo>> searched through the desert in the blistering heat for a little over a week and a half before <<yourrep $g.scout>> managed to spot the obelisk, standing tall in a valley surrounded by dunes. The group let out a collective sigh of relief, as they could finally set up tents, get out of the sun, and shake the sand from their boots.
</p>
<p>
As the group approached the glistening obelisk however, the strangeness of the situation was starting to feel unnerving. The obelisk was an imposing monument, and to your experienced slavers they all quickly recognized the feeling in the pit of their stomachs. It was the same sense of unease that always infected areas tied heavily to the mist. As the group started setting up camp, they steeled themselves mentally to be able to handle the next few weeks with the mist.
</p>
<p>
Quickly the three set up camp and for the next few leisurely weeks the researchers butted heads while <<therace $g.scout>> spent <<them $g.scout>> time sunbathing, napping, and warding off the occasional small thirsty bandit pack. Eventually
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> realized the obelisk had a magical mechanism built into its side that could be opened by activating the inscribed runes on the obelisk.
<<if $g.researcherone.isHasTrait('per_cautious')>>
Not one to act without caution however, <<they $g.researcherone>> did not rush to enter the solution. Instead <<they $g.researcherone>> got the attention of <<rep $g.researchertwo>> and together the two spent the next day conducting a thorough sweep of the entire obelisk, checking for traps and creating a plan to solve the puzzle safely.
<<else>>
As <<they $g.researcherone>> told the group of <<their $g.researcherone>> findings, the sense of unease weighed heavy on them all. As this object was from the mist, there was no telling what manner of hideouts traps might be present. Together the three worked out the details of their plan, having <<rep $g.scout>> and <<rep $g.researchertwo>> stay a safe distance away while <<rep $g.researcherone>> carefully and slowly activated the runes. At least this way, if anything did happen <<rep $g.researcherone>> would have help right away.
<</if>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> realized the obelisk had a magical mechanism built into its side that could be opened by solving a riddle inscribed on the obelisk.
<<if $g.researchertwo.isHasTrait('per_cautious')>>
Not one to act without caution however, <<they $g.researchertwo>> did not rush to enter the solution. Instead <<they $g.researchertwo>> got the attention of <<rep $g.researcherone>> and together the two spent the next day conducting a thorough sweep of the entire obelisk, checking for traps and creating a plan to solve the puzzle safely.
<<else>>
As <<they $g.researchertwo>> told the group of <<their $g.researchertwo>> findings, the sense of unease weighed heavy on them all. As this object was from the mist, there was no telling what manner of hideouts traps might be present. Together the three worked out the details of their plan, having <<rep $g.scout>> and <<rep $g.researcherone>> stay a safe distance away while <<rep $g.researchertwo>> carefully answered the riddles aloud. At least this way, if anything did happen <<rep $g.researchertwo>> would have help right away.
<</if>>
<</if>>
</p>
<p>
The next morning, with the plan settled on,
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> approached the obelisk, as the other two cautiously watched on. As each rune was activated the uneasy sense grew stronger until finally, while holding <<their $g.researcherone>> breath, <<rep $g.researcherone>> activated the final rune. In the next few still moments, the tension was palpable, but as seconds passed and nothing happened <<rep $g.researcherone>> began wondering if maybe <<they $g.researcherone>> had made a mistake. In that moment a small slip of worn paper fell into the sand at <<reps $g.researcherone>><<ufeet $g.researcherone>>.
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> approached the obelisk, as the other two cautiously watched on. As each rune was activated the uneasy sense grew stronger until finally, while holding <<their $g.researchertwo>> breath, <<rep $g.researchertwo>> activated the final rune. In the next few still moments, the tension was palpable, but as seconds passed and nothing happened <<rep $g.researchertwo>> began wondering if maybe <<they $g.researchertwo>> had made a mistake. In that moment a small slip of worn paper fell into the sand at <<reps $g.researchertwo>><<ufeet $g.researchertwo>>.
<</if>>
As the group settled back into camp, the group sat down to read the message on the paper. The note simply contained detailed instructions on how to provide a proper offering, which confused the slavers as they wondered what could possibly be going on.
</p>
<p>
When the group returned and reported their findings to you, you cant help but feel toyed with. Who ever was behind the obelisk was testing people, but there would only be one way to find out what their goal is.
</p><p>
<<Rep $g.scout>>, <<rep $g.researcherone>>, and <<rep $g.researchertwo>> searched through the desert in the blistering heat for an entire month. Badly sunburned, chafed, and blistered the group returned to the gates of <<rep $company.player>> to tell you the bad news. Apparently there had been heavy sandstorms, only broken up by horrendous blistering heat. Even still you knew your slavers, and them not finding it seemed unlikely. Maybe some other risk taking individuals simply got to it before they did. No matter what happened your slavers looked beaten down and on the brink of death, so you graciously gave them two weeks leave to tend to their wounds and rest.
</p><p>
<<Rep $g.scout>>, <<rep $g.researcherone>>, and <<rep $g.researchertwo>> searched through the desert in the blistering heat for a little over a week and a half before <<yourrep $g.scout>> managed to spot the obelisk, standing tall in a valley surrounded by dunes. The group let out a collective sigh of relief, as they could finally set up tents, get out of the sun, and shake the sand from their boots.
</p>
<p>
As the group approached the glistening obelisk however, the strangeness of the situation was starting to feel unnerving. The obelisk was an imposing monument, and to your experienced slavers they all quickly recognized the feeling in the pit of their stomachs. Oddly though
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> found themselves strangely comforted, and aided in easing the others worry as the group prepared their camp.
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> found themselves strangely comforted, and aided in easing the others worry as the group prepared their camp.
<</if>>
</p>
<p>
For the next few unfortunate weeks the researchers spent as much time as they could studying the obelisk, but the group was seemingly plagued with misfortune. They found themselves huddled in their tents for the better part of a week as a result of a harsh sandstorm, only to need to spend the next few days defending their camp from a small group of raiders. Finally with so much time unfortunately wasted <<rep $g.researcherone>> and <<rep $g.researchertwo>> turned their attention to the obelisk while <<rep $g.scout>> disposed of the pile of raider bodies.
</p>
<p>
Eventually
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> realized the obelisk had a magical mechanism built into its side that could be opened by activating the inscribed runes on the obelisk.
<<if $g.researcherone.isHasTrait('per_cautious')>>
Even though <<rep $g.researcherone>> was normally extremely cautious, <<they $g.researcherone>> felt drawn to the obelisk deeply. Instantly after the solution click in <<their $g.researcherone>><<uhead $g.researcherone>> <<they $g.researcherone>> started the process of solving the puzzle.
<<else>>
In that moment <<rep $g.researcherone>> felt a deep longing to open the obelisk, and a pull to get the prize from within it. Instantly after the solution click in <<their $g.researcherone>><<uhead $g.researcherone>> <<they $g.researcherone>> started the process of solving the puzzle.
<</if>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> realized the obelisk had a magical mechanism built into its side that could be opened by solving a riddle inscribed on the obelisk.
<<if $g.researcherone.isHasTrait('per_cautious')>>
Even though <<rep $g.researchertwo>> was normally extremely cautious, <<they $g.researchertwo>> felt drawn to the obelisk deeply. Instantly after the solution click in <<their $g.researchertwo>><<uhead $g.researchertwo>> <<they $g.researchertwo>> started the process of solving the puzzle.
<<else>>
In that moment <<rep $g.researchertwo>> felt a deep longing to open the obelisk, and a pull to get the prize from within it. Instantly after the solution click in <<their $g.researchertwo>><<uhead $g.researchertwo>> <<they $g.researchertwo>> started the process of solving the puzzle.
<</if>>
<</if>>
</p>
<p>
As soon as
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.researcherone>> had finished the process, <<they $g.researcherone>> realized <<they $g.researcherone>> had made a terrible mistake. Instantly the trap activated, opening a small portal to somewhere deep within the mist, causing all three slavers to notice themselves beginning to become corrupted. It was at this point your <<uadjgood $g.scout>> realized something had gone wrong, and rushed grabbing <<rep $g.researcherone>>, yanking <<them $g.researcherone>> from the obelisk, shielding them from a blast of dark energy as the portal closed. The whole ordeal left <<rep $g.researcherone>> visibly shaken, and even after the group limped their way back to your company's gates weather <<they $g.researcherone>> was shaken by <<their $g.researcherone>> own mistake or the things <<they $g.researcherone>> saw in the mist remains unclear.
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.researchertwo>> had finished the process <<they $g.researchertwo>> realized <<they $g.researchertwo>> had made a terrible mistake. Instantly the trap activated, opening a small portal to somewhere deep within the mist, causing all three slavers to notice themselves beginning to become corrupted. It was at this point your <<uadjgood $g.scout>> realized something had gone wrong, and rushed grabbing <<rep $g.researchertwo>>, yanking <<them $g.researchertwo>> from the obelisk, shielding them from a blast of dark energy as the portal closed. The whole ordeal left <<rep $g.researchertwo>> visibly shaken, and even after the group limped their way back to your company's gates weather <<they $g.researchertwo>> was shaken by <<their $g.researchertwo>> own mistake or the things <<they $g.researchertwo>> saw in the mist remains unclear.
<</if>>
</p>
<p>
After hearing the story of what happened, you cant help but feel toyed with. Whoever was behind the obelisk was testing people, but it seems your group failed and what the test was even for still remains unclear.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_criminal_connection_0", /* key */
"Criminal Connection", /* name */
"A valuable partner and connection between your company and the outlaws.", /* description */
"a|have connections with the band of Outlaws of the kingdom", /* unit text */
5550, /* slave value */
{ /* skill additives */
brawn: 1,intrigue: 3,slaving: 1,sex: 1,},
)
>>
<<run new setup.UnitGroup(
"unlawfull_party0",
"Outlaw Bandits Boss",
[ /* pools */
[setup.unitpool.subrace_humanvale_male, 0.16949152542372878],
[setup.unitpool.subrace_humankingdom_male, 0.16949152542372878],
[setup.unitpool.subrace_humandesert_male, 0.16949152542372878],
[setup.unitpool.subrace_werewolf_male, 0.16949152542372878],
[setup.unitpool.subrace_orc_male, 0.16949152542372878],
[setup.unitpool.subrace_humankingdom_female, 0.033898305084745756],
[setup.unitpool.subrace_humanvale_female, 0.033898305084745756],
[setup.unitpool.subrace_humandesert_female, 0.033898305084745756],
[setup.unitpool.subrace_demon_female, 0.025423728813559317],
[setup.unitpool.subrace_lizardkin_female, 0.025423728813559317],
],
1, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.wings_demon, setup.trait.eyes_dragonkin, setup.trait.mouth_orc]),
],
)>>
<<run new setup.UnitGroup(
"unlawfull_party2",
"Elvish Arcanist",
'subrace_elf_female', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.magic_wind_master),
setup.qc.Trait('unit', setup.trait.magic_fire_master),
setup.qc.Trait('unit', setup.trait.magic_dark),
],
)>>
<<run new setup.UnitGroup(
"unlawfull_party3",
"Kingdom Knights",
[ /* pools */
[setup.unitpool.subrace_humankingdom_male, 0.8695652173913044],
[setup.unitpool.subrace_humankingdom_female, 0.13043478260869565],
],
1, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.bg_knight, setup.trait.skill_ambidextrous, setup.trait.skill_flight, setup.trait.wings_angel]),
],
)>>
<<set _criteriahandler = new setup.UnitCriteria(
null, /* key */
'Criminal Handler', /* name */
[
setup.trait.bg_slaver,
setup.trait.bg_mist,
setup.trait.per_calm,
setup.trait.per_dominant,
setup.trait.per_aggressive,
setup.trait.per_evil,
setup.trait.magic_wind_master,
setup.trait.magic_water_master,
setup.trait.magic_earth_master,
setup.trait.magic_dark_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.qres.Job(setup.job.slaver),
],
{
brawn: 0.15,
slaving: 2.7,
sex: 0.15,
}
)>>
<<set _criteriaelf = new setup.UnitCriteria(
null, /* key */
'Elvish Offer', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_mythical,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.bg_entertainer,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.tough_tough,
setup.trait.per_active,
setup.trait.per_playful,
],
[
setup.trait.training_mindbreak,
setup.trait.value_low,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.per_stubborn,
setup.trait.per_proud,
setup.trait.trauma_sex,
setup.trait.trauma_brawn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.race_elf, setup.trait.face_attractive, setup.trait.training_obedience_advanced, setup.trait.training_endurance_advanced, setup.trait.training_horny_advanced], false),
],
{
sex: 3,
}
)>>
<<set _criteriahuman = new setup.UnitCriteria(
null, /* key */
'Human Offer', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_mythical,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.bg_entertainer,
setup.trait.balls_huge,
setup.trait.dick_huge,
setup.trait.breast_huge,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.tough_tough,
setup.trait.per_playful,
setup.trait.per_active,
],
[
setup.trait.training_mindbreak,
setup.trait.value_low,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.trauma_sex,
setup.trait.trauma_brawn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.race_human], true),
setup.qres.AllTraits([setup.trait.face_attractive, setup.trait.training_obedience_advanced, setup.trait.training_endurance_advanced, setup.trait.training_horny_advanced], false),
],
{
sex: 3,
}
)>>
<<set _criterianeko = new setup.UnitCriteria(
null, /* key */
'Neko Offer', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_mythical,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.bg_entertainer,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.tough_tough,
setup.trait.per_playful,
setup.trait.per_active,
],
[
setup.trait.training_mindbreak,
setup.trait.value_low,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.per_dominant,
setup.trait.per_stubborn,
setup.trait.trauma_sex,
setup.trait.trauma_brawn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.subrace_neko),
setup.qres.AllTraits([setup.trait.face_attractive, setup.trait.training_obedience_advanced, setup.trait.training_endurance_advanced, setup.trait.training_horny_advanced], false),
],
{
sex: 3,
}
)>>
<<set _criteriaextraslave = new setup.UnitCriteria(
null, /* key */
'Extra Slave', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_mythical,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_whore,
setup.trait.bg_entertainer,
setup.trait.dick_huge,
setup.trait.balls_huge,
setup.trait.breast_huge,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.tough_tough,
setup.trait.per_playful,
setup.trait.per_active,
],
[
setup.trait.training_mindbreak,
setup.trait.value_low,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.trauma_sex,
setup.trait.trauma_brawn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.race_human, setup.trait.race_elf, setup.trait.subrace_neko], true),
setup.qres.AllTraits([setup.trait.face_attractive, setup.trait.training_obedience_advanced, setup.trait.training_endurance_advanced, setup.trait.training_horny_advanced], false),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'unlawfull_party', /* key */
"Unlawfull Party", /* Title */
{ /* Author */
name: "Fos",
url: 'https://www.reddit.com/r/FortOfChains/comments/koxn6x/unlawful_party_questoutlawkingdomoftor/',
},
[ /* tags */
'gore',
'city',
'prep',
'favor',
'money',
'veteran',
'ire',
],
6, /* weeks */
16, /* expiration weeks */
{ /* roles */
'handler': [ _criteriahandler, 3],
'elf': _criteriaelf,
'human': _criteriahuman,
'neko': _criterianeko,
'extraslave': _criteriaextraslave,
},
{ /* actors */
'boss': 'unlawfull_party0',
'arcanist': 'unlawfull_party2',
'archangel': 'unlawfull_party3',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_unlawfull_party',
setup.qdiff.normal50, /* difficulty */
[ /* outcomes */
[
'Quest_unlawfull_partyCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('handler', setup.qres.HasTitle('quest_criminal_connection_0')),
setup.qc.Item(setup.item.f_punishment_good),
setup.qc.RemoveTitleGlobal('quest_criminal_connection_0'),
),
setup.qc.AddTitle('handler', 'quest_criminal_connection_0'),
setup.qc.MoneyCustom(13500),
setup.qc.Favor('outlaws', 150),
setup.qc.Trait('elf', setup.trait.training_oral_advanced),
setup.qc.Trait('elf', setup.trait.training_vagina_advanced),
setup.qc.Trait('elf', setup.trait.training_anal_advanced),
setup.qc.Trait('human', setup.trait.training_oral_advanced),
setup.qc.Trait('human', setup.trait.training_vagina_advanced),
setup.qc.Trait('human', setup.trait.training_anal_advanced),
setup.qc.Trait('neko', setup.trait.training_oral_advanced),
setup.qc.Trait('neko', setup.trait.training_vagina_advanced),
setup.qc.Trait('neko', setup.trait.training_anal_advanced),
setup.qc.Trait('extraslave', setup.trait.training_masochist_advanced),
setup.qc.Trait('extraslave', setup.trait.training_oral_advanced),
setup.qc.Trait('extraslave', setup.trait.training_vagina_advanced),
setup.qc.Trait('extraslave', setup.trait.training_anal_advanced),
setup.qc.OneRandom([
setup.qc.Trait('elf', setup.trait.training_oral_master),
setup.qc.Trait('human', setup.trait.training_anal_master),
setup.qc.Trait('neko', setup.trait.training_vagina_master),
setup.qc.Trait('extraslave', setup.trait.training_masochist_master),
]),
setup.qc.Injury('extraslave', 32),
],
],
[
'Quest_unlawfull_partyCrit',
[
setup.qc.Trait('elf', setup.trait.training_oral_advanced),
setup.qc.Trait('elf', setup.trait.training_vagina_basic),
setup.qc.Trait('elf', setup.trait.training_anal_basic),
setup.qc.Injury('elf', 6),
setup.qc.Trait('human', setup.trait.training_oral_basic),
setup.qc.Trait('human', setup.trait.training_vagina_basic),
setup.qc.Trait('human', setup.trait.training_anal_advanced),
setup.qc.Injury('human', 6),
setup.qc.Trait('neko', setup.trait.training_oral_basic),
setup.qc.Trait('neko', setup.trait.training_vagina_advanced),
setup.qc.Trait('neko', setup.trait.training_anal_basic),
setup.qc.Injury('neko', 6),
setup.qc.Trait('extraslave', setup.trait.training_oral_basic),
setup.qc.Trait('extraslave', setup.trait.training_vagina_basic),
setup.qc.Trait('extraslave', setup.trait.training_anal_basic),
setup.qc.Trait('extraslave', setup.trait.training_masochist_basic),
setup.qc.Injury('extraslave', 32),
setup.qc.MoneyCustom(9500),
setup.qc.Favor('outlaws', 50),
setup.qc.Ire('humankingdom', 2),
],
],
[
'Quest_unlawfull_partyCrit',
[
setup.qc.Trait('elf', setup.trait.training_oral_basic),
setup.qc.Trait('human', setup.trait.training_anal_basic),
setup.qc.Trait('neko', setup.trait.training_vagina_basic),
setup.qc.Ire('humankingdom', 5),
setup.qc.MissingUnit('extraslave'),
setup.qc.Injury('handler', 5),
setup.qc.Trait('extraslave', setup.trait.training_mindbreak),
setup.qc.Injury('elf', 12),
setup.qc.Injury('human', 12),
setup.qc.Injury('neko', 12),
setup.qc.Injury('extraslave', 32),
setup.qc.Favor('outlaws', -250),
],
],
[
'Quest_unlawfull_partyDisaster',
[
setup.qc.MissingUnitForever('extraslave'),
setup.qc.MissingUnitRecapture('neko', 'escapemedium'),
setup.qc.MissingUnitRecapture('elf', 'escapemedium'),
setup.qc.MissingUnitRecapture('human', 'escapemedium'),
setup.qc.TraumatizeRandom('elf', 54),
setup.qc.TraumatizeRandom('human', 54),
setup.qc.TraumatizeRandom('neko', 54),
setup.qc.MissingUnitRecapture('handler', 'capturedhard'),
setup.qc.MoneyCustom(-15000),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.QuestUnique(),
setup.qres.Cooldown(28),
setup.qres.FavorAtLeast('outlaws', 275),
],
[ /* expiration outcomes */
],
)>><p>
Among the many new letters that arrive at your desk today, there's one that gain of your attention more the others. It's a red letter filled with several hidden criminal symbols, no doubt coming from one of your
many acquaintances in <<rep $company.outlaws>>...
</p>
<<if $unit.player.isHasTrait('bg\_boss')>>
<p>
It takes you only a few minutes to decrypt the message, making you feel some nostalgia of your criminal past, when you commanded a band of outlaws. As you read the request letter, an evil grim appear at your face, smiling as you can already imagine the debauched content of the request.
</p>
<<elseif $unit.player.isHasTrait('bg\_thug')>>
<p>
As you decipher the codes, you remember the days that you act as an enforcer, breaking legs and intimidating those who wrong your contractors. It takes a while, since you never actually used the decryption codes before, but you eventually finish the deciphering, and a sadistic smile grows on your face.
</p>
<<elseif $unit.player.isHasTrait('bg\_thief')>>
<p>
You don't even need to break the code, since you used the Thieves' Chant so many times in your former life that you can read it as a language of its own.
After you finish reading the letter, you can even hear the sweet jingle of coins in a distance location in your memory.
</p>
<<else>>
<p>
You take you almost the entire day, while asking many of your slavers and even some of your must obedient slaves, but you finally decrypt the red letter. With the transcript in hands, you finally return to your office and read the decrypted request.
</p>
<</if>>
<p>
Apparently, several of the <<rep $company.outlaws>> bands is going to congregate
within a hidden grove located somewhere in the <<rep $company.humankingdom>>'s
surroundings and they are requesting a few of your slaves as part of the
festivities.
The criminals says that they are commemorating a wealthy
trimester, and that they want to end it with a full round of debauchery with
your slaves. They are asking for pretty and submissive humans, elves and
neko, to represents each place that they have raided this trimester.
</p>
<<set _u = setup.getUnit({title: 'quest_criminal_connection_0'})>>
<<if _u>>
<p>
<<dangertext 'Warning'>>: Only one unit can hold the title of <<rep setup.title.quest_criminal_connection_0>>.
Sending a slaver other than <<rep _u>> on this quest may remove the title from
<<rep _u>>!
</p>
<</if>><p>
The travel itself took almost three full days, but your slavers finally reached the
hidden grove where the criminal festivities will take place.
Having arrived at the destination, your slavers promptly set out their merchandise:
a quartet of slaves brought to entertain these masses of outlaws.
Your slavers arrived early --
in their first day, only a few of the <<rep $company.outlaws>> had
arrived, so they took it easy on your slaves.
But as more and more men and
women of various questionable backgrounds arrived, the <<uadj $g.handler>> <<rep
$g.handler>> began to wonder if the slaves will survive such a brutal
task in hand: be fucked uninterruptedly by every outlaw of the many different races,
genders and asset sizes for three more weeks.
</p>
<p>
At the end of the first week, the group of bandits -- already surpassing sixty of them
--
had designated the specialities of each one of your slaves.
<<Yourrep $g.elf>> elf|was designated as an oral bitch.
The <<uadjbad $g.human>> <<reps $g.human>> <<uanus $g.human>> was elected the best
asshole of the party.
And finally, <<reps $g.neko>> <<ugenital $g.neko>> was always sore from being used
uninterrupted.
</p>
<p>
Meanwhile, <<yourrep $g.extraslave>> extraslave|was perhaps received the worst blunt of it all.
<<They $g.extraslave>> extraslave|was used as a punishment doll,
attracting the attention of the most sadistic of the bandits.
<<They $g.extraslave>> experienced having <<their $g.extraslave>> <<unipples $g.extraslave>> stretched to their limits and having <<their $g.extraslave>> <<utorso $g.extraslave>> marked with several whip marks made by the Chief of the band <<themselves $g.boss>>.
Each time, the bandit boss left <<their $g.extraslave>> <<utorso $g.extraslave>> filled with bruises and whip marks.
</p>
<<if $g.handler.isHasTrait('bg\_slaver')>>
<p>
Even as the weeks passed by, <<rep $g.handler>> never lost <<their $g.handler>>
mind in the lustful atmosphere of the festivities, nor did <<they $g.handler>> let the alcohol
cloud <<their $g.handler>> mind or lost the focus of the task in <<uhand $g.handler>>.
<<They $g.handler>> <<uadv $g.handler>> ensured that the slaves
were not used beyond their limitations, while still satisfying the many diverse
desires of the bandits.
</p>
<<else>>
<p>
As the weeks goes by, <<rep $g.handler>> struggled to keep the slaves
safe from the many ministrations of the bandits.
</p>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
The festivities continued, with both bandits and slaves submerged themselves in lust,
alcohol and drugs.
Even <<rep $g.handler>> <<themself $g.handler>> had a chance to enjoy having
<<if $g.handler.isHasDick()>>
<<their $g.handler>> <<udick $g.handler>> swallowed by
<<reps $g.elf>> <<umouth $g.elf>>, feeling the cockhead
rubbing deep within <<their $g.elf>> throat.
<<else>>
<<their $g.handler>> pussy,
with <<reps $g.elf>> tongue expertly dancing on <<their $g.handler>> clit.
<</if>>
<<Therace $g.elf>> often had both of <<their $g.elf>> <<uhands $g.elf>> stroking
thick cocks, while the bandit boss
<<if $g.boss.isHasDick()>>
thrusted
<<their $g.boss>> <<udick $g.boss>> inside <<them $g.elf>>.
<<else>>
inserted <<their $g.boss>> big strap-on deep inside <<them $g.elf>>.
<</if>>
Some other time, two orcs spitroasted
<<rep $g.human>> with theirs thick and
huge cocks, making <<them $g.human>> scream in an exquisite mixture of pain and pleasure.
<<Rep $g.neko>> had the pleasure of having <<their $g.neko>> <<uhole $g.neko>> penetrated and creamed again and again.
In a different chamber, <<rep $g.extraslave>> was gang-banged and tortured without time to rest.
</p>
<p>
And that was how the mission went, with lust and desire whose desperation increase day after
day.
But before long, stockholm syndrome kicked in, and <<rep $g.elf>>, <<rep $g.human>> and <<rep $g.neko>>
fully accepted their destiny as fucktoys, as sex-slaves, and even managed to enjoy the use and abuse of their bodies.
Even <<yourrep $g.extraslave>> started to feel immense pleasure as
several methods of pain infliction was administrated on <<their
$g.extraslave>> body, leaving bruises and marks on <<them $g.extraslave>>.
<<Rep $g.handler>> made sure to stop the beating, raping and suffocating, whenever
the slave is near breaking, and the task was made difficult as
<<yourrep $g.extraslave>> extraslave|was so deep within it's pleasure that
the slave <<themself $g.extraslave>> never gave strong indications of when to stop the abuse.
</p>
<p>
On the last day, the bandit boss received the information that the location
was compromised, so the band had to get away, and fast, before the knights of <<rep
$company.humankingdom>> arrive at the location.
All that's left was the scent and
stain of debauchery and a hint of pleasure.
</p>
<p>
Finally back at the gates of your fort, the bandit boss paid more than <<they $g.boss>> had promised --
<<if _u == $g.handler>>
And as a gesture of lasting friendship, the bandit boss even donated one of <<their $g.boss>>
older slave-breaking device to you: the <<rep setup.item.f_punishment_good>>.
<<elseif _u>>
The chief now remembers <<rep $g.handler>> as <<their $g.handler>> contact with your company,
and <<rep _u>> is never contacted again by the chief.
<</if>>
</p>
<<else>>
<p>
With each passing day, more and more bandits came to join the festivities,
entering in the circle of lustful debauchery.
Most of the time, <<rep $g.elf>> elf|was being used orally --
<<their $g.elf>> <<umouth $g.elf>> became very familiar
sucking the dicks and licking the clits of the bandits.
<<They $g.elf>> enjoy more and more, <<their $g.elf>> <<umouth $g.elf>>
became a cum-dumpster for the outlaws.
Meanwhile, <<rep $g.human>> and <<rep $g.neko>> were posted in the entrance of the grove,
forced to share theirs holes with whoever degenerate had arrived.
<<Rep $g.extraslave>> on the other hand extraslave|was kept ravaged, fucked and tortured
in a different chamber --
often to the point of unconsciousness, which did not even give them
a sweet reprieve from the abuse.
</p>
<<if $gOutcome == 'success'>>
<p>
<<Reps $g.handler>> inability to understand the breaking point of your slaves
made it difficult to decide when to stop, but fortunately,
some day later an informer arrived with the
news that the grove and the party had being discovered by the <<rep
$company.humankingdom>>, and a party of knights is on the way.
This meant that the festivities had to be stopped early, and the bandits was
fast on their feet.
In less than thirty minutes, the <<rep $company.outlaws>> had abandoned the grove,
leaving nothing but a mess of perversion, and also your slavers and slaves.
Slowed by the almost unconscious <<rep $g.extraslave>> and the exhausted
<<rep $g.elf>>, <<rep $g.human>> and <<rep $g.neko>>,
<<yourrep $g.handler>> had to make the run in a slower pace.
Although they managed to avoid an unpleasant
encounter with the knights, for more than once they were spotted by the knights' advance scouts.
<<if $g.human.isHasTrait('subrace_humankingdom')>>
And the fact that <<yourrep $g.human>>
<<if $g.human.isHasTrait('bg\_royal')>> was a part of
the royal family before entering <<their $g.human>> new life as a sex slave
<<elseif $g.human.isHasTrait('bg\_noble')>> was a member of the nobility
until turned into a sexual plaything
<<elseif
$g.human.isHasTrait('bg\_knight')>> was a knight in service of a proud and influential
lord before being trained as a sex toy
<<else>>
was someone under the knights' protection
before being kidnapped
<</if>>
certainly didn't help to contain their ire.
<</if>>
</p>
<p>
When <<rep $g.handler>> and the slaves eventually reached the gate of your fort,
the bandit boss was there, waiting for them with a bag of gold.
The exchange done, you are left with nothing but a big sack of gold and four very well-used slaves.
</p>
<<else>>
<p>
<<Reps $g.handler>> inability to manage the slaves turned out to be a problem.
When an informer told the bandit boss that the <<rep $company.humankingdom>> had
discovered their hideout,
it didn't even take them thirty minutes for the <<rep $company.outlaws>> to abandon the grove.
They left a half dead - and totally broken - <<urace $g.extraslave>> who was once an energetic <<rep $g.extraslave>>, together with totally spent and exhausted trio of slaves, still filled with cum and dripping every kind of bodily fluids.
With no time to waste, <<rep $g.handler>> picked up the slaves and leave, but it was too late.
A band of kingdom scouts armed with long bows were right behind their backs.
<<Rep $g.handler>> ran, fleeing within the forests border, but while the other slaves follow <<their $g.handler>> orders obediently to run,
<<rep $g.extraslave>> extraslave|was dragging them back.
And when the arrows begins to fly in their direction, it did not take long before a decision had to be made.
</p>
<p>
A burning sting was felt by <<rep $g.handler>> as an arrow hit <<them $g.handler>>.
As <<they $g.handler>> look behind, the situation was getting out of <<their $g.handler>> <<uhands $g.handler>>.
Two more arrows struct <<rep $g.elf>> right on <<theirs $g.elf>> <<uarms $g.elf>>, while both <<rep $g.human>> and <<rep $g.neko>> had one arrows deep within theirs back.
Seeing that the scouts were gaining terrain and getting nearer with each passing moment.
<<Rep $g.handler>> ordered the horse that was taking <<rep $g.extraslave>> to turn back and charged their pursuers with <<rep $g.extraslave>> still on it's back. With the distraction, the rest of the band managed to escape, only to discover that the bandit boss had informed the fort that your slaves wasn't what
<<they $g.boss>> boss|was expecting and refused to pay even a single coin.
</p>
<</if>>
<</if>><p>
When your slaver and their harem of slaves left,
nobody in <<rep $company.player>> expected the results to be so disastrous.
By the end of the fourth week, the bandit boss arrived at the gates of the fort,
injured and with only half of <<their $g.boss>> former banditry force, bearing terrible news.
In the morning of the last day, a full regiment of knights bearing the <<rep $company.humankingdom>> banner invaded the cave together with an elven mystic.
</p>
<p>
The bandit boss said that when they breached the grove, a kingdom arcanist launched an immense fireball, burning the eight bandits that was gang-raping <<rep $g.extraslave>>. Both the bandits and the slave were lost in the explosion.
The explosion alerted the rest of the grove, and a brief battle started. But the half conscious slaves and the very drunk bandits were not even able to maintain the fight for longer than five minutes. And just like that, almost every single one of the <<rep $company.outlaws>> that attended to the party got defeated, arrested, or worse. Only the boss and a few others was able to flee, and on their escape they overheard
the knights' leader giving the order to arrest <<yourrep $g.handler>> so they can punish <<them $g.handler>> for all <<their $g.handler>> crimes.
</p><<set _criteriarestrainer = new setup.UnitCriteria(
null, /* key */
'restrainer', /* name */
[
setup.trait.bg_thug,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.arms_werewolf,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_cruel,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 2,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'lost_puppy', /* key */
"Lost Puppy", /* Title */
{ /* Author */
name: "Hydrys",
url: "",
},
[ /* tags */
'furry',
'transformation',
'unit',
'trait',
'forest',
'rare',
],
2, /* weeks */
3, /* expiration weeks */
{ /* roles */
'tracker': [ setup.qu.spotter, 1],
'soother': [ setup.qu.healer, 1],
'restrainer': [ _criteriarestrainer, 1],
},
{ /* actors */
'puppy': 'all',
'target': 'subrace_werewolf',
},
[ /* costs */
],
'Quest_lost_puppy',
setup.qdiff.hardest36, /* difficulty */
[ /* outcomes */
[
'Quest_lost_puppyCrit',
[
setup.qc.Bodyswap('puppy', 'target', true),
setup.qc.Slaver('puppy', "a|was a newly transformed werewolf. Who knows what a|they used to be in the past", undefined),
setup.qc.EquipmentDirect('survival_neck'),
],
],
[
'Quest_lost_puppyCrit',
[
setup.qc.Bodyswap('puppy', 'target', true),
setup.qc.Slave('puppy', "a|was a newly transformed werewolf", undefined),
],
],
[
'Quest_lost_puppyCrit',
[
setup.qc.Trauma('tracker', setup.trait.trauma_brawn, 5),
setup.qc.Trauma('soother', setup.trait.trauma_brawn, 5),
setup.qc.Trauma('restrainer', setup.trait.trauma_brawn, 5),
],
],
[
'Quest_lost_puppyCrit',
[
setup.qc.MissingUnit('restrainer'),
setup.qc.AddTraitsRandom(
'restrainer',
setup.TraitHelper.getAllTraitsOfTags(['skin_werewolf']),
5,
false,
false
),
setup.qc.Injury('soother', 12),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
The <<rep setup.trait.subrace_werewolf>> are a group of furry-bodied people usually found
living across the <<lore region_vale>>. But while all of them are usually called werewolves,
the species differ wildly from one tribe to another.
A critical difference is in how they would grow their tribe.
Some tribes are more traditional, where they copulate and raise their young into a proper adult.
Some other tribes are gifted in the art of lycantrophy, and they could transform other race
into a werewolf given enough time and given enough bites.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> has heard that a newly bitten former-<<urace $g.puppy>> has escaped
from one of the lycanthropous werewolves' camp and ran into the forest. If you want to,
and if someone in your company has the ability to track <<them $g.puppy>> down,
you could offer them a safe place to get used to their new body and
add a strong slaver to the crew. Of course new werewolves can be dangerous and
often exhibit little control over their infection, so if the team is not careful, then they could
very well end up as part-werewolves themselves. Regardless, if you want to seize
opportunity, you should decide quickly before the escapee gets inevitably tracked down by
the werewolf clan otherwise.
</p><p>
The team ventures into the woods. <<Rep $g.tracker>> would then have to find the werewolf.
</p>
<<if $gOutcome == 'crit'>>
<p>
Given that
<<therace $g.puppy>> puppy was not native to the forest,
<<rep $g.tracker>> had an easy time finding <<them $g.puppy>>.
Once <<they $g.puppy>> was located, the difficult part started.
With sharp fangs and sharp claws, even the newest and most inexperienced werewolf
still pose a danger, so <<yourrep $g.restrainer>> had to somehow
safely wrestle the werewolf into the ground, making sure <<their $g.puppy>>
claws and fangs were far away from them.
Once the threat was somewhat neutralized,
<<rep $g.soother>> got to work.
</p>
<p>
Hidden beneath the poor puppy's furs were numerous bruises and scratches from their
predcimate, and <<rep $g.soother>> <<uadvcare $g.soother>> healed those wounds.
Only then did <<they $g.puppy>> realize that <<they $g.puppy>> was being healed, and stopped thrashing around.
<<They $g.puppy>> listened intently when the team explained that they had heard <<they $g.puppy>> had been clever enough to escape the werewolf camps.
When <<rep $g.puppy>> asked why they cared, <<rep $g.soother>> explained that <<their $g.puppy>> cunning and resourcefulness are always sought after in <<their $g.soother>> line of work,
and <<rep $unit.player>> were offering a job and a safe place, perhaps to get better acquintanced to <<their $g.puppy>> newly changed body.
After giving it some deeper thought, <<they $g.puppy>> agreed.
Once able to walk again,
<<rep $g.puppy>> grabbed a cloak from a low branch that it had blended in with, and gave it to your slavers.
</p>
<<dialogue $g.puppy>>
A down payment for helping me I suppose.
<</dialogue>>
<p>
Finally meeting someone without any malicious intent towards them,
<<rep $g.puppy>> opened up, and
regaled the team with <<their $g.puppy>> story and how <<they $g.puppy>> came to be bitten
as your slavers returned home.
</p>
<<elseif $gOutcome == 'success'>>
<p>
But despite the fact that the missing captive was not native to the forest, <<rep $g.tracker>> had to spend quite a bit of time tracking down <<them $g.puppy>>.
Once <<they $g.puppy>> was located it became obvious that there had been a fight
between <<them $g.puppy>> and <<their $g.puppy>> former capturers.
There were quite a bit of blood spattered over around some of the trees, small tatters of fabric here and there, and when they looked closely on the <<uarms $g.puppy>> and <<uback $g.puppy>>, they bore multiple long wounds.
From the way <<they $g.puppy>> was holding <<their $g.puppy>> head, <<rep $g.soother>> suspected that <<rep $g.puppy>> also had a concussion.
<<Rep $g.restrainer>> tried to quickly grab the new werewolf and maneuver <<them $g.puppy>> into a position for urgent treatment, but the disoriented <<urace $g.puppy>> panicked and misread it as a hostile maneuver. <<They $g.puppy>> fought harder than <<rep $g.restrainer>> expected, and despite all the precautions, <<rep $g.restrainer>> ended up bitten.
Angrily <<rep $g.tracker>> smacked <<their $g.tracker>> <<uweapon $g.tracker>> at <<reps $g.puppy>> head, adding yet another concussion, but finally knocking <<them $g.puppy>> unconscious.
Not taking any chances, <<rep $g.restrainer>>
subdued and tied the <<uadjphys $g.puppy>> <<urace $g.puppy>>, before <<rep $g.soother>> <<uadvcare $g.soother>> treated both the werewolf and the bitten
<<rep $g.restrainer>>.
</p>
<<if $g.restrainer.isHasAnyTraitExact([
"race_human",
"race_elf",
"race_greenskin",
"race_catkin",
])>>
<p>
About two hours past nightfall on the way out of the forest <<rep $g.restrainer>> doubled over with a scream. In front of the alarmed team,
<<rep $g.restrainer>> began shaking, <<their $g.restrainer>> body visibly transforming before their eyes.
It seems even newly infected werewolf could infect others, and <<rep $g.restrainer>> restrainer|was
not spared from the infection.
</p>
<p>
<<set _traits = setup.TraitHelper.getAllTraitsOfTags(['skin_werewolf'])>>
<<run setup.rng.shuffleArray(_traits)>>
<<set _done = 0>>
<<for _trait range _traits>>
<<if _done < 3 && $g.restrainer.isTraitCompatible(_trait) && !$g.restrainer.isHasTrait(_trait)>>
<<set _done = _done + 1>>
<<run setup.qc.Trait('restrainer', _trait).apply($gQuest)>>
<<if _trait == setup.trait.body_werewolf>>
<<Reps $g.restrainer>> bones and muscles rearranged with sharp cracks and pops.
<<elseif _trait == setup.trait.mouth_werewolf>>
<<Reps $g.restrainer>> skull elongated, before ending a long muzzle sharp teeth and a long panting tongue.
<<elseif _trait == setup.trait.ears_werewolf>>
Their ears seemed to reabsorb and became two large fluffy werewolf ears
sitting on top of <<their $g.restrainer>> head.
<<elseif _trait == setup.trait.arms_werewolf>>
Their hands transformed, becoming wide and claw tipped.
<<elseif _trait == setup.trait.legs_werewolf>>
Their feet shifted into something akin to a paw with tough pads and sharp claws.
<<elseif _trait == setup.trait.tail_werewolf>>
Moaning, <<rep $g.restrainer>>
arched <<their $g.restrainer>> back as
<<set _cover = $g.restrainer.getGenitalCovering()>>
<<if _cover>>
underneath <<their $g.restrainer>> <<rep _cover>>
<</if>>
a strong fluffy tail grew from <<their $g.restrainer>> spine.
<<elseif _trait == setup.trait.dick_werewolf>>
Between <<reps $g.restrainer>> legs <<their $g.restrainer>> <<udick $g.restrainer>> became a deep red, with a thick knot forming at base. Then a furry sheath grew over the new <<udick $g.restrainer>>.
<</if>>
<</if>>
<</for>>
</p>
<p>
Thankfully, it seems the infection was not extremely severe, and perhaps somewhat incomplete.
You could purify them in your <<rep setup.buildingtemplate.temple>>, should you have one.
<<Rep $g.tracker>> had to half carry the transformed <<rep $g.restrainer>> back home.
Given how much trouble the puppy has been causing the team,
<<rep $g.tracker>> and <<rep $g.soother>> both agreed <<rep $g.puppy>> is totally unsuitable for being a slaver, and was put into the <<rep setup.buildingtemplate.slavepens>>. It's only fair after all.
</p>
<<else>>
<p>
<<if $g.restrainer.isHasTrait('race_wolfkin')>>
Despite being bitten, as a fellow wolfkin <<rep $g.restrainer>> restrainer|was unaffected
by the lycanthropy curse.
<<else>>
Thankfully, the bite did not seem to have transformed <<rep $g.restrainer>> as well.
<<if $g.restrainer.isHasTrait('race_demon')>>
Perhaps the lycanthropy curse is incompatible with <<their $g.restrainer>> demonic heritage.
<<elseif $g.restrainer.isHasTrait('body_dragonkin')>>
Perhaps the bite could not penetrate <<their $g.restrainer>> scaly body.
<</if>>
<</if>>
With a grumble <<rep $g.restrainer>> lifted <<rep $g.puppy>> over <<their $g.restrainer>> shoulder and started heading home. <<They $g.restrainer>> decided that <<they $g.restrainer>> was going to pay the puppy some extra attention for the trouble <<they $g.puppy>> had caused, abandoning all ideas to recruit <<them $g.puppy>> as an equal.
</p>
<</if>>
<<elseif $gOutcome == 'failure'>>
<p>
<<Rep $g.tracker>> worked hard, <<they $g.tracker>> really did. <<They $g.tracker>> scoured the forest looking for the werewolf for days, but despite <<their $g.tracker>> efforts, the werewolf was nowhere to be found. After tirelessly hunting for the werewolf, <<rep $g.tracker>> finally called it quit and trekked back home, becoming tired and discouraged.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<Rep $g.tracker>> managed to only find the werewolf tracks after a long period of searching.
<<if $g.tracker.isHasTrait('per_calm')>>
Uncharacteristically,
<<else>>
Impatient,
<</if>>
<<they $g.tracker>> rushed in the hopes of finally catching <<their $g.tracker>> quarry.
With their spirits uplifted, <<rep $g.soother>> and <<rep $g.restrainer>> ran to keep up with <<rep $g.tracker>>.
Unfortunately in <<reps $g.tracker>> rush, <<they $g.tracker>> missed the four other werewolves that had caught up to their prey as well.
With too many enemies to outrun, <<rep $g.restrainer>> told <<rep $g.tracker>> and <<rep $g.soother>> to made their escape while <<they $g.restrainer>> held off the angry werewolves.
<<Rep $g.tracker>> took off immediately, but <<rep $g.soother>> had a difficult time leaving <<rep $g.restrainer>> behind, and was hurt in the skirmish before finally giving up and followed suit. Out of the corner of <<their $g.soother>> eye, <<they $g.soother>> saw <<rep $g.restrainer>> fell to the werewolves,
and perhaps when you see <<them $g.restrainer>> again, <<they $g.restrainer>> will not be the same...
</p>
<</if>><<run new setup.UnitGroup(
"werewolf_hunt0",
"Werewolf Outcast",
'subrace_werewolf', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_thief),
setup.qc.TraitReplace('unit', setup.trait.per_loner),
setup.qc.TraitRemove('unit', setup.trait.muscle_strong),
setup.qc.TraitRemove('unit', setup.trait.muscle_verystrong),
setup.qc.TraitRemove('unit', setup.trait.muscle_extremelystrong),
],
)>>
<<run new setup.QuestTemplate(
'werewolf_hunt', /* key */
"Werewolf Hunt", /* Title */
{ /* Author */
name: "J1009",
url: "",
},
[ /* tags */
'furry',
'vale',
'money',
'rare',
],
3, /* weeks */
6, /* expiration weeks */
{ /* roles */
'spotter': [ setup.qu.spotter, 1],
'hunter1': [ setup.qu.hunter, 1],
'hunter2': [ setup.qu.hunter, 1],
},
{ /* actors */
'ziggar': 'werewolf_hunt0',
},
[ /* costs */
],
'Quest_werewolf_hunt',
setup.qdiff.hard28, /* difficulty */
[ /* outcomes */
[
'Quest_werewolf_huntCrit',
[
setup.qc.Slave('ziggar', "a|was a thief", undefined),
setup.qc.Outcomes('success'),
],
],
[
'Quest_werewolf_huntCrit',
[
setup.qc.MoneyCustom(3500),
setup.qc.Favor('humanvale', 50),
],
],
[
'Quest_werewolf_huntFailure',
[
setup.qc.Ire('humanvale', 2),
],
],
[
'Quest_werewolf_huntDisaster',
[
setup.qc.Injury('spotter', 4),
setup.qc.Injury('hunter1', 4),
setup.qc.Injury('hunter2', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
Word has come to your fort that a <<female $g.ziggar>> <<urace $g.ziggar>>
has been seen terrorizing the small mountain settlements of the <<lore region_vale>>.
According to the villagefolk, the <<urace $g.ziggar>> has been
entering their homes at night and stealing their hard-earned gold, before
disappearing into the darkness.
So dire is the situation that the <<rep
$company.humanvale>> have commissioned your company <<rep $company.player>>
to take care of the threat, using any means upon which you deem necessary.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> points out that something is odd here — werewolves don't usually
go out alone under the cover of darkness to sneak around and steal goods.
These furry race usually prefers the more direct approach of simply
raiding the villages to the ground, so this could be a rare outcast of the werewolves,
which could present an opportunity for you to capture one without too many repercussions.
Dealing with any <<urace $g.ziggar>> will be no easy task, however.
First, you will need a good spotter in order to locate the
<<urace $g.ziggar>> in it's surely hidden hideout, and then two
hunters in order to take <<them $g.ziggar>> down and capture <<them
$g.ziggar>>.
It will not be an easy mission, but the money will
(hopefully?) be well worth it.
</p><<questimage 'werewolf_hunt.jpg'>>
<p>
Adventuring into the icy peaks of the <<lore region_vale>>, <<yourrep $g.spotter>>
spotter|was able to <<uadv $g.spotter>> locate and track
the <<urace $g.ziggar>>'s footsteps back into <<their $g.ziggar>> hiding
place:
a small cave on
<<if $gQuest.getSeed() % 3 == 0>>
the side of a mountain.
<<elseif $gQuest.getSeed() % 3 == 1>>
the side of an icy river.
<<else>>
the underside of a cliff.
<</if>>
Entering with caution, your
<<uadjphys $g.hunter1>> hunter <<rep $g.hunter1>> and your <<uadjphys
$g.hunter2>> hunter <<rep $g.hunter2>> caught the <<urace $g.ziggar>>
completely by surprise, and
<<set _water = setup.selectUnit([$g.spotter, $g.hunter1, $g.hunter2], {trait: 'magic_water'})>>
<<set _earth = setup.selectUnit([$g.spotter, $g.hunter1, $g.hunter2], {trait: 'magic_earth'})>>
<<set _muscle = setup.selectUnit([$g.spotter, $g.hunter1, $g.hunter2], {trait: 'muscle_strong'})>>
<<if _water>>
<<rep _water>> used <<their _water>> water magic to freeze <<them $g.ziggar>> in <<their $g.ziggar>> step and
<<elseif _earth>>
<<rep _earth>> used <<their _earth>> earth magic to conjure binding vines and
<<elseif _muscle>>
<<rep _muscle>> used <<their _muscle>> considerable muscles
<<else>>
<<rep $g.spotter>> immediately charged in
<</if>>
to try and capture <<them $g.ziggar>>.
</p>
<<if $gOutcome == 'crit'>>
<p>
Surprisingly, the <<urace $g.ziggar>> offered little resistance, and was
quickly overpowered before being bound and gagged by your hunters.
The reason, as was discovered, was quite obvious: the werewolf was rather scrawny for one of its race,
and must be one of the many reasons that the poor thing had been exiled from <<their $g.ziggar>>
pack.
Satisfied with the outcome, your
slavers collected their reward and made their way back to the fort, having
not only gained a decent sum of cash and a little more favor with the <<rep
$company.humanvale>>, but also a new and <<uadjphys $g.ziggar>> <<urace $g.ziggar>>
slave to have fun with.
</p>
<<else>>
<p>
Unfortunately for <<them $g.hunter2>>, the werewolf was a particularly tough and strong one, perhaps
exiled from <<their $g.ziggar>> pack after attempting to challenge <<their $g.ziggar>> alpha.
The <<urace $g.ziggar>> fought back fiercely, claws clashing with <<reps $g.hunter2>> <<uweapon $g.hunter2>>,
but seeing no hope of victory given that <<they $g.ziggar>> ziggar|was clearly
outnumered made the wise decision to
charge out of the cave at the first opportunity, dissapearing into the snowy lands before any of your slavers could stop <<them $g.ziggar>>.
</p>
<p>
Despite the escape, the werewolf seemed to have decided that the area was simply too well-guarded — or perhaps your hunter's performance was just good enough to scare <<them $g.ziggar>> away —
and was never seen around the area again.
For driving away the nuisance, your slavers were paid
handsomely, as well as gaining a little bit more favour with the <<rep $company.humanvale>>.
</p>
<</if>><p>
Despite your <<uadjphys $g.spotter>> spotter <<reps $g.spotter>> best
efforts, <<they $g.spotter>> was unable to locate the <<urace $g.ziggar>>
amidst the icy peaks of the <<lore region_vale>>.
Your slavers had to return to the settlement empty-handed, who lost trust in your company's
abilities to solve their problems.
</p><<questimage 'werewolf_hunt.jpg'>>
<p>
Adventuring into the icy peaks of the <<lore region_vale>>, <<yourrep $g.spotter>>
spotter|was able to <<uadv $g.spotter>> locate and track
the <<urace $g.ziggar>>'s footsteps back into <<their $g.ziggar>> hiding
place:
a small cave on
<<if $gQuest.getSeed() % 3 == 0>>
the side of a mountain.
<<elseif $gQuest.getSeed() % 3 == 1>>
the side of an icy river.
<<else>>
the underside of a cliff.
<</if>>
Entering seemingly without care,
<<if $g.hunter1.isHasTrait('per_cautious')>>
a rare thing given how cautious <<therace $g.hunter1>> normally hunter1|is,
<</if>>
<<yourrep $g.hunter1>> and <<utheirrel $g.hunter1 $g.hunter2>>
<<rep $g.hunter2>>
found the cavern completely deserted.
Ready to leave empty-handed, your slavers turned their backs around and were horrified to discover that the
<<uadjgood $g.ziggar>> <<urace $g.ziggar>> was waiting for them at the
entrance, having seemingly spotted them coming before they could get there.
<<Rep $g.spotter>>, who had been left alone outside the cave,
had already been overpowered by the <<urace $g.ziggar>> and laid unconscious at <<their
$g.ziggar>> side.
</p>
<p>
With no other way out, your slavers fought their way against the powerful enemy,
and while they were able to escape, they suffered a great many injuries and had to
stumble their way out of the <<urace $g.ziggar>>'s lair while
carrying <<rep $g.spotter>> with them.
</p><<run new setup.Title(
"quest_merchant_s_bandit_0", /* key */
"Merchant\'s Bandit", /* name */
"Former bandit leader of special interest to a certain Toran merchant", /* description */
"a|was a bandit leader hired to attack a certain Toran merchant\'s caravans", /* unit text */
500, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"merchantbandit",
"Residents of the City of Lucgate: All gender",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
setup.qc.AddTitle('unit', 'quest_merchant_s_bandit_0'),
],
)>>
<<run new setup.UnitGroup(
"a_merchant_s_revenge1",
"Merchant Prince",
[ /* pools */
[setup.unitpool.subrace_humankingdom_male, 0.16666666666666666],
[setup.unitpool.subrace_humankingdom_female, 0.16666666666666666],
[setup.unitpool.subrace_humanvale_male, 0.16666666666666666],
[setup.unitpool.subrace_humanvale_female, 0.16666666666666666],
[setup.unitpool.subrace_elf_male, 0.16666666666666666],
[setup.unitpool.subrace_elf_female, 0.16666666666666666],
],
1, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_merchant),
setup.qc.Trait('unit', setup.trait.per_lavish),
],
)>>
<<set _criteriainfiltrator = new setup.UnitCriteria(
null, /* key */
'Scout (Vale)', /* name */
[
setup.trait.race_wolfkin,
setup.trait.subrace_humanvale,
setup.trait.bg_raider,
setup.trait.per_cautious,
setup.trait.per_sly,
setup.trait.per_curious,
setup.trait.skill_flight,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.per_brave,
setup.trait.per_sly,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 2,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge2', /* key */
"A Merchant\'s Revenge", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'money',
'unit',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infiltrator': [ _criteriainfiltrator, 0.75],
'guard': [ setup.qu.fighter, 0.75],
'guard2': [ setup.qu.fighter, 0.75],
'lookout': [ setup.qu.explorer, 0.75],
},
{ /* actors */
'bandit': 'merchantbandit',
'mlangmerchantprince': 'a_merchant_s_revenge1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge2',
setup.qdiff.harder35, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge2Crit',
[
setup.qc.Slave('bandit', "a|was a bandit, formally raiding merchant caravans from the Kingdom of Tor", undefined),
setup.qc.SetCooldownEvent('a_merchant_s_revenge_visiting_the_captured', 20),
setup.qc.Outcomes("success"),
setup.qc.SlaverMarker('mlangmerchantprince'),
setup.qc.MoneyCustom(2000),
setup.qc.VarSet('mlangmerchantprincequest', '2', -1),
setup.qc.SetCooldownEvent('a_merchant_s_revenge_payback_is_sweet', 6),
],
],
[
'Quest_a_merchant_s_revenge2Crit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('humankingdom', 20),
setup.qc.VarSet('mlangmerchantprincequest', '1', -1),
],
],
[
'Quest_a_merchant_s_revenge2Crit',
[
setup.qc.Injury('infiltrator', 1),
setup.qc.OneRandom([
setup.qc.Injury('guard', 1),
setup.qc.Injury('guard', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('lookout', 1),
setup.qc.TraumatizeRandom('lookout', 5)
]),
setup.qc.Ire('outlaws', 1),
setup.qc.VarSet('mlangmerchantprincequest', '1', -1),
],
],
[
'Quest_a_merchant_s_revenge2Crit',
[
setup.qc.TraumatizeRandom('infiltrator', 5),
setup.qc.TraumatizeRandom('guard', 5),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.VarNull('mlangmerchantprincequest'),
setup.qres.UnitGroupNotBusy('a_merchant_s_revenge1'),
],
[ /* expiration outcomes */
setup.qc.VarSet('mlangmerchantprincequest', '1', -1),
],
)>>/* mlangmerchantprincequest 1 = did not find cipher 2=found cipher */
<<dialogue $g.mlangmerchantprince>>
<b>Find the outlaws responsible for raiding my caravans. And kill them. Or take them for your sexcapades. I don't care, just make them suffer.</b>
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
<p>
The increasing bandit activity in the <<lore region_vale>> is a common talking point in the taverns and teahouses of Lucgate. That and whose caravans were raided, if anyone's been losing money, and whispered rumours about which of the Merchant Prince's has paid the bandits to attack his competition's caravans.
</p>
<p>
One merchant frequently mentioned is <<name $g.mlangmerchantprince>>, most frequently as one of those who's had <<their $g.mlangmerchantprince>> caravans attacked more than almost anyone else's. That said, you never expected to receive an invitation to meet them for a glass of wine.
</p>
<p>
"Thank you for joining me," <<name $g.mlangmerchantprince>> says when you've sat down at their table at <<lore location_princeofcups>>, an exclusive winehouse overlooking the city.
<<if $unit.player.isHasTrait('bg_royal')>>
"I thought we may as well meet in comfort."<br>
"I appreciate it," you reply, accepting the glass of deep red wine <<they $g.mlangmerchantprince>> offers you. "But why exactly am I here?"<br>
<<elseif $unit.player.isHasTrait('bg_boss')>>
"I thought we may as well meet in comfort."<br>
"I appreciate it," you reply, accepting the glass of deep red wine <<they $g.mlangmerchantprince>> offers you. "But why exactly am I here?"<br>
<<elseif $unit.player.isHasTrait('bg_noble')>>
"I thought we may as well meet in comfort."<br>
"I appreciate it," you reply, accepting the glass of deep red wine <<they $g.mlangmerchantprince>> offers you. "But why exactly am I here?"<br>
<<elseif $unit.player.isHasTrait('per_lavish')>>
"I thought we may as well meet in comfort."<br>
"I appreciate it," you reply, accepting the glass of deep red wine <<they $g.mlangmerchantprince>> offers you. "But why exactly am I here?"<br>
<<elseif $unit.player.isHasTrait('bg_raider')>>
"I appreciate you're not fully comfortable here," <<name $g.mlangmerchantprince>> says apologetically, "but it is secure and the staff are discrete. I needed to make sure our discussions remain confidential - for both our sakes."<br>
Sitting gingerly down on a chair that looks flimsy enough to snap at any moment, you pick up your mug of mead and take a gulp. That at least is normal. "And what is it exactly that you want to talk to me about?"<br>
<<elseif $unit.player.isHasTrait('per_frugal')>>
"I appreciate you're not fully comfortable here," <<name $g.mlangmerchantprince>> says apologetically, "but it is secure and the staff are discrete. I needed to make sure our discussions remain confidential - for both our sakes."<br>
The place does seem excessive, but you suppose as long as <<they $g.mlangmerchantprince>> is paying for things you can go with it. "And what exactly are we talking about today?"<br>
<<else>>
"I don't know if you've been here before, but the wine is excellent and the staff are discreet," <<they $g.mlangmerchantprince>> says, pouring you a glass of rich, red wine. "And that discretion is important to me. Especially now."<br>
Picking up the wine you take a small sip, and for a moment your jaw locks up as the flavour plays across your taste buds. This is one of the best wines you've ever tasted. When you can finally move your jaw again, you swallow and settle back into your seat. "All right. And what exactly is it that you want to talk to me about?"<br>
<</if>>
<<name $g.mlangmerchantprince>>'s mouth pinches and <<their $g.mlangmerchantprince>> nostrils flare.
<<dialogue $g.mlangmerchantprince>>
<b>Someone, one of my rivals, has been paying bandits to ambush my caravans. And it's getting to become more than a mere annoyance.<br>
I've found the location of the bandits' camp—and I want you to destroy them</b>
<</dialogue>>
"Destroy them?"<br>
<<name $g.mlangmerchantprince>> waves his hand dismissively. "Kill them, run them off, enslave them as your playthings and sell them to the highest bidder, whatever you want. I want proof that you have their leader dealt with, and if you find anything leading to the Merchant Prince who hired them, I'll throw in a bonus."<br>
"What sort of bonus?"<br>
"A big sack of gold," <<name $g.mlangmerchantprince>> says with a grin, pulling out a large pouch of coin and showing it to you.
<<if $unit.player.isHasTrait('per_humble')>>
"Think of how your company could benefit from that."
<<else>>
"Think of what you buy with that."
<</if>>
<br>
You try your best not to let your surprise show on your face. They must be somewhat desperate if they're being that blatant in their negotiations.<br>
"All right," you say. "If I do that, I'll be in touch."<br>
"See that you do," <<name $g.mlangmerchantprince>> says, tucking the pouch away. "You may not be the only mercenary group I make the offer to.
<<if $settings.bannedtags.watersport>>
"
<<else>>
Oh, one more thing. Given what I know of your company, you should visit the toilets before you leave. And if you like what you see you may want to speak to the manager about becoming a supplier."<br>
"That's... interestingly non-specific," you say.<br>
<<name $g.mlangmerchantprince>> grins and takes another sip of <<their $g.mlangmerchantprince>> wine. "One of my eccentricities," <<they $g.mlangmerchantprince>> says. "I like being subtle when I have the luxury."
<</if>>
</p>
<p>
Would you like to do anything else before you leave?"
</p>
<<choose>>
<<opt "Ask about the Merchant Princes">>
<<dialogue $g.mlangmerchantprince>>
W- they're powerful. As powerful as anyone not of noble birth can get, but they're effectively nobility. And if they aren't they buy their way into the aristocracy. It's all for sale if you know who to ask.
<</dialogue>>
<<opt "Just finish your drink and leave.">>
<p>
You savour your wine and consider buying a bottle before deciding you don't really want to know how much it costs. Taking your leave of <<name $g.mlangmerchantprince>> you head back out into the city, a map showing the location of the bandit camp tucked away into a pocket.
</p>
<<opt "Visit the toilets.">>
<<if $settings.bannedtags.watersport>>
<p>
The toilets are plush. That said, any place that uses the word 'toilet' is going to be plush. There are the marble countertops, a silver pitcher of water for washing your hands, and an attendant to bring you a towel. Finishing your business, you wash your hands and head off into the city, a map showing the location of the bandit camp tucked away into a pocket.
</p>
<<else>>
<p>
The toilets are plush. That said, any place that uses the word 'toilet' is going to be plush. There are the marble countertops, a silver pitcher of water for washing your hands, and an attendant to bring you a towel. There are also discreetly partitioned areas for evacuating your bowels. However, along one wall two slaves are chained, restrained such that they are forced to kneel on the ground, their arms shackled above their heads. Their eyes are covered with thick blindfolds and their mouths held open by clever metal gags. Clearly for relieving yourself the other way. Well, who are you to ignore such an opportunity?
</p>
<<if $unit.player.isHasDick()>>
<p>
Pulling your soft cock out of your <<uequipslot $unit.player 'legs'>>, you head over to the <<woman $g.bandit>> on the left and shove your prick through the circular gag and into <<theirs $g.bandit>> mouth. <<They $g.bandit>> moans as you let your piss flow into <<theirs $g.bandit>> and swallows eagerly, not spilling a single drop. <<Their $g.bandit>> tongue massaging your cock brings you quickly to full erection, and you go from pissing into <<their $g.bandit>> mouth to fucking <<their $g.bandit>> throat, enjoying the sounds of <<them $g.bandit>> gagging before you fill their stomach with a a hot load of cum.
</p>
<<else>>
Removing your <<uequipslot $unit.player 'legs'>> and undergarments you position yourself over the <<woman $g.bandit>> on the left and let it flow. <<They $g.bandit>> gulp furiously as your piss splatters over their face, the metal gag preventing them from getting their lips around your pussy. It also prevents <<their $g.bandit>> tongue from reaching you, which is disappointing, but still, that was fun.
<</if>>
<p>
Perhaps you should speak to the owner at some point. It seems that even in a place such as this, laws mean little if you have enough wealth.
</p>
<</if>>
<</choose>><p>You ended up sending more slavers on this job than normal, but a full bandit camp was not something to take lightly.
<<set _unit = setup.selectUnit([$g.infiltrator, $g.guard, $g.guard2, $g.lookout], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> wisely urged caution, and your slavers attacked just before dawn so the rising sun at their backs to make it harder for the bandits to see them. With most of the camp still asleep, they made short work of the sentries and went from tent to tent, dispatching the outlaws they found within.
<<else>>
True to your orders, they snuck in under the cover of night, dispatching the sentries at the edge of camp and using their bandanas to help disguise their own features as they headed for the centre of camp.
<</if>>
</p>
<br/>
<<name $g.infiltrator>> found the bandit leader in the largest tent, as you'd expected,
<<if $gOutcome == 'crit'>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<br/>
<p>
Meanwhile, your slavers had found a good deal of treasure, and <<name $g.lookout>> found a number of messages on finely made parchment. Unfortunately, they were in some kind of cipher and none of your slavers were able to read them. Still, they hoped these would be the additional proof <<name $g.mlangmerchantprince>> had been looking for.
</p>
<p>Given the quiet in camp, it was a simple matter to steal back out of the camp, leaving the bandits leaderless, penniless, and with a number of dead to bury. It might not be enough to drive them away, but it should give <<name $g.mlangmerchantprince>>'s caravans a better chance at getting through the <<lore region_vale>>.</p>
<p>A few days later, you receive a message from <<name $g.mlangmerchantprince>>, written in a neat, flowing hand.</p>
<div class='lettercard'>
<i>Dear <<name $unit.player>>,
<br>
<br>
Your work has been exemplary and I am several steps closer to my goal. Please accept this bonus pay for exceptional services rendered, as previously agreed.
<br>
<br>
<<if $unit.player.isHasTrait('bg_royal')>>
I do look forward to seeing you again, and hope you may find time to join me again at <<lore location_princeofcups>>. I also look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<<elseif $unit.player.isHasTrait('bg_noble')>>
I do look forward to seeing you again, and hope you may find time to join me again at <<lore location_princeofcups>>. I also look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<<else>>
I look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<</if>>
<p>Yours faithfully</p>
<<name $g.mlangmerchantprince>></i>
</div>
<<elseif $gOutcome == 'success'>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<br/>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. <<They $g.bandit>> died in the ensuing scuffle, but your slavers were able to take <<their $g.bandit>> head. <<name $g.lookout>> had seen a wanted poster with their image on it in the area, and between the two that should be enough to prove the bandit's fate to the merchant <<name $g.mlangmerchantprince>>.</p>
<<elseif $gOutcome == 'failure'>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<br/>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. You slavers barely escaped with their lives—and thankfully with only minor injuries. However, they were forced to leave the valuables they'd looted behind, leaving you with nothing to show for this endeavour.</p>
<<elseif $gOutcome == 'disaster'>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<br/>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. You slavers barely escaped with their lives—and while their injuries were minor, the mental trauma will take longer to heal. They were forced to leave the valuables they'd looted behind, leaving you with nothing to show for this endeavour.</p>
<</if>><<set _criteriaraider = new setup.UnitCriteria(
null, /* key */
'Raider-Inventor', /* name */
[
setup.trait.bg_engineer,
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Spotter', /* name */
[
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eyes_neko,
setup.trait.eyes_dragonkin,
],
[
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 3,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_city_of_lucgate_', /* key */
"A Merchant\'s Revenge: Caravan Raid (City of Lucgate)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'money',
'unit',
'ire',
],
1, /* weeks */
2, /* expiration weeks */
{ /* roles */
'fighter': [ setup.qu.fighter, 1],
'raider': [ _criteriaraider, 1],
'scout': [ _criteriascout, 1],
},
{ /* actors */
'slaves': 'a_merchant_s_revenge_caravan_raid_western_forest_1',
'merchant': 'a_merchant_s_revenge1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_caravan_raid_city_of_lucgate_',
setup.qdiff.hard43, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_city_of_lucgate_Crit',
[
setup.qc.Slave('slaves', "a|was a member of a Toran caravan, captured by your slavers in a raid", undefined),
setup.qc.MoneyCustom(1500),
setup.qc.Outcomes("success"),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_city_of_lucgate_Crit',
[
setup.qc.Ire('humankingdom', 2),
setup.qc.VarAdd('mlang_merchantrevenge_wrongcaravancount', 1, -1),
setup.qc.Favor('humankingdom', -200),
setup.qc.Opportunity('a_merchant_s_revenge_a_careless_raid', {
merchant: 'merchant',
}),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_city_of_lucgate_Failure',
[
setup.qc.TraumatizeRandom('scout', 5),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_city_of_lucgate_Failure',
[
setup.qc.OneRandom([
setup.qc.Injury('scout', 1),
setup.qc.Injury('scout', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 1),
setup.qc.Injury('fighter', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 1),
setup.qc.Injury('raider', 2)
]),
setup.qc.Ire('humankingdom', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
setup.qres.VarNull('mlang_merchantrevenge_questrival'),
setup.qres.VarGte('mlang_merchantrevenge_caravancount', 6),
setup.qres.UnitGroupNotBusy('a_merchant_s_revenge1'),
],
[ /* expiration outcomes */
setup.qc.Leave('merchant', '', undefined),
setup.qc.Event('a_merchant_s_revenge_complications', 1, {
'merchant': 'merchant',
}),
],
)>>/* mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
mlang_merchantrevenge_questrival = If Unset, the Player is unaware the Merchant Prince's rival is sending raid requests
*/
<div class='lettercard'>
<<font 'New Rocker'>>
<p>
There is a caravan leaving the City of Lucgate and heading towards
<<if $gQuest.getSeed() % 2 == 0>>
<<set _destination = "the Northern Vales" >>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<set _destination = "the Eastern Wasteland" >>
<</if>>
_destination in the next few weeks. It is carrying a cargo of
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "bronze ingots">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "copper ingots">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "fine wines">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "garum">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "pickled cabbage">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "iron ingots">>
<</if>>
<<= _goods>>
and I would like to you to ensure it does not arrive at its destination. You will be rewarded handsomely for your help.
</p>
<</font>>
</div>
<p>
Turning the note over, you see a hastily sketched map showing
<<if $gQuest.getSeed() % 5 == 0>>
a bridge over the <<lore geo_cerna>>.
<<set _location = "river">>
<<elseif $gQuest.getSeed() % 5 == 1>>
a cobbled road leading north past large swathes of farmland.
<<set _location = "farmland">>
<<elseif $gQuest.getSeed() % 5 == 2>>
a rocky outcrop in the foothills of the western mountains.
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
a trail running through a lightly wooded area on the outskirts of some farmland.
<<set _location = "woods">>
<<elseif $gQuest.getSeed() % 5 == 4>>
a waterlogged path through marshy terrain.
<<set _location = "marsh">>
<</if>>
It would be possible to stage an ambush there, but the area is more populated than you'd like. The chances of being seen are...a lot higher.
</p>
<<if $unit.player.isHasTrait('per_smart')>>
<p>
<<dangertextlite "The handwriting on this note isn't the same as the others you've received. You suspect this might not have come from your merchant friend. Maybe you should ask him? Of course, by the time you arrange a meeting, your chance of intercepting the caravan will be long gone.">>
</p>
<<else>>
<</if>>/* Set destination */
<<if $gQuest.getSeed() % 2 == 0>>
<<set _destination = "the Northern Vales" >>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<set _destination = "the Eastern Wasteland" >>
<</if>>
/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "bronze ingots">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "copper ingots">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "fine wines">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "garum">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "pickled cabbage">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "iron ingots">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "river">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "farmland">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "woods">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "marsh">>
<</if>>
<<Rep $g.scout>> led everyone to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "river">>
a stone bridge crossing a small tributary of the <<lore geo_cerna>>, over a day's travel from your fort and off the normal trade routes. Being unencumbered by pack animals and trade goods, your slavers made good time, beating the caravan to the bridge.
<<dialogue _o1>>
They look skittish
<</dialogue>>
"Skittish?" you asked<br>
<<name _o1>> jumped down the ridge to your hiding spot, stowing <<their _o1>> spy glass away in a pouch. "They're armed to the teeth and look like they're expecting an attack."<br>
"Too many?"<br>
"Maybe. It's chancy in a fair fight."<br>
"So we don't fight fair," <<name _o2>> said with a shrug. "Spiked logs? Roll them down to block the bridge. Shoot from cover."<br>
<p>
As far as plans went, it was a good one, and it worked surprisingly well. The logs rolled down to block the bridge off, and although not as spiked as you'd wanted given the limited time you had, it was enough to block off the bridge's exit. The arrows and bolts you and your slavers then sent towards the caravan was meant to provoke a reaction, but the entire caravan turning and fleeing, abandoning their cargo was a great result, but not the one you had anticipated. Still, it meant you were able to easily liberate the _goods and bring them back to the fort
<<if $gOutcome == 'crit'>>
, along with one of the caravaneers who failed to move quickly enough.
<<else>>
.
<</if>>
</p>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving you with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'crit'>>
<p>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
Given the lack of cover, <<name _unit>> had the bright idea of donning tabards that looked, in bad light, not too dissimilar to those worn by the Knights of Tor. Given it would be nearly impossible to evade the eyes of the peasants in the fields, <<they _unit>> suggested the easiest solution was to not hide at all.
<</if>>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Your ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who you easily overpowered. After finding the cargo of _goods intact, you decided to drive it back to your fort instead. You'd find some use for it, even if it was just selling it somewhere else.
</p>
<p>
You also brought back the last surviving member of the caravan, who surrendered rather than be put to the sword. Now you just have to decide if <<they $g.slaves>>'s worth keeping.
</p>
<<elseif $gOutcome == 'success'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Your ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who you easily overpowered. After finding the cargo of _goods intact, you decided to drive it back to your fort instead. You'd find some use for it, even if it was just selling it somewhere else.
</p>
<p>
Unfortunately you didn't account for the farmers who witnessed the fight and tended to the wounded who scattered into the surrounding farmland. Your name is cursed throughout the Kingdom and you may find the Toran people harder to deal with in the future.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains,
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
and to you it felt like the first time you'd been warm in months.
<<else>>
and you started to feel uncomfortably hot.
<</if>>
You did find a small spring and pool of water at the base of the rock—this was likely a watering point, and a very promising ambush spot. You directed your slavers to find hiding places where they'd be concealed from any caravans coming through the nearby mountain pass, and then settled in to wait.
<p>
The traders came down from the foothills, wagons laden with trade goods, the _goods and barrels of water for their trek into the desert. Still, none of them appeared fully comfortable in the heat and they wasted no time heading for the spring to refill their water barrels as much as possible before heading out onto the steppes. That was when you struck, raining arrows down from above before closing in and taking on the rest in combat. The few guards were no match for your seasoned veterans, and you soon found yourself in possession of a wagonload of _goods.
</p>
<<if $gOutcome == 'crit'>>
<p>
You also had a trussed up new slave to take home with you. Or potential slave. Good times.
</p>
<<elseif _location == "woods">>
a small area of coppiced wood, frequently used by the locals for firewood, building material, foraging and charcoal. Hunters are not an uncommon sight, so your slavers donned green cloaks and headed in, waiting for the caravan to pass through on its way to _destination.
<p>
The many thin trunks of coppiced trees meant that using a tree to block the road was not going to work, so instead, your slavers came prepared with a rickety cart, which they overturned in the middle of the dirt track, and used the blood from a freshly hunted rabbit spread around the area to make it look like there had been an attack, with a trail leading off into the older trees of the copse. Then you all withdrew to a safe place to wait.
</p>
<p>
When the caravan arrived, they halted, and a fair number of their guards went to investigate the fallen wagon, and ventured off to follow the blood trail. That was when you struck from behind.
<<if _goods == "garum" or _goods == "pickled cabbage">>
Swooping, in, you and <<name _o1>> rushed the guards surrounding the water barrels, drawing the majority of the remaining guards to you, giving <<name _o2>> the chance to smash up the amphorae of _goods. While wasting such delicious food was, well, a waste, it was the job, and it was one easily finished, allowing you all to beat a quick retreat
<<if $gOutcome == 'crit'>>
, bringing with you a caravaneer <<name _o1>> managed to knock out as a bonus prize.
<<else>>
.
<</if>>
<<else>>
Swooping, in, you and <<name _o1>> rushed the guards surrounding the water barrels, drawing the majority of the remaining guards to you, giving <<name _o2>> the chance to overpower the driver in the cargo wagon, and driving off with it in the confusion. Having damaged several of their water barrels, you and <<name _o1>> retreated before the rest of the guards could make it back, pushing back to where you'd left your horses. Thankfully when you caught up to <<them _o2>> you found they'd nicked the wagon with the _goods,
<<if $gOutcome == 'crit'>>
, and had the former driver unconscious and amongst the crates as an extra bonus.
<<else>>
as opposed to food supplies or camping equipment. Perhaps luck, perhaps skill, but either way, a good thing.
<</if>>
<</if>>
</p>
<</if>>
<<else>>
the mosquito filled swampland. Why any caravan would willingly travel this route was beyond <<name $g.scout>>, but <<they $g.scout>> pushed on regardless. The marshy soil made fleeing near impossible, both for your slavers and for the caravanners, and <<name $g.scout>> had to hope they'd be able to overwhelm the caravan in combat.
<p>
The difficulty in moving meant your slavers only had to face a few opponents at a time, and while <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo and
<<if _goods == "garum" or _goods =="pickled cabbage">>
smashed the amphorae of _goods, ruining the food—especially given the damp of the swamp.
<<else>>
overpowered the driver, trying to turn the wagon around to run it away. Given the lack of decent guards though, it soon proved to be unnecessary, as you slew or overpowered any resistance, allowing you to take all the wagons back to your fort with you
<<if $gOutcome == 'crit'>>
, as well as a single survivor who you thought would make for a profitable slave.
<<else>>
.
<</if>>
<</if>>
</p>
<</if>>
<<else>>
<<if _location == "river">>
a stone bridge crossing a small tributary of the <<lore geo_cerna>>, over a day's travel from your fort and off the normal trade routes. Being unencumbered by pack animals and trade goods, your slavers made good time, beating the caravan to the bridge.
<p>
When the caravan arrived, your slavers tipped a number of carefully prepared, spiked logs down the ride to block on end of the bridge. The arrows and bolts they sent flying into the caravan as a follow up was intended to provoke a reaction, but the entire caravan turning and fleeing, abandoning their cargo wasn't one they had anticipated. Still, it meant they were able to easily liberate the _goods and bring them back to the fort
<<if $gOutcome == 'crit'>>
, along with one of the caravaneers who failed to move quickly enough.
<<else>>
.
<</if>>
</p>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving your slavers with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'crit'>>
<p>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
Given the lack of cover, <<name _unit>> had the bright idea of donning tabards that looked, in bad light, not too dissimilar to those worn by the Knights of Tor. Given it would be nearly impossible to evade the eyes of the peasants in the fields, <<they _unit>> suggested the easiest solution was to not hide at all.
<</if>>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively, and their ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who were easily overpowered. After finding the cargo of _goods intact, <<name $g.raider>> decided to drive it back to your fort instead. There'd be some use for it, even if it was just selling it somewhere else.
</p>
<p>
They also brought back the last surviving member of the caravan, who surrendered rather than be put to the sword. Now you just have to decide if <<they $g.slaves>>'s worth keeping.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively, and their ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who were easily overpowered. After finding the cargo of _goods intact, <<name $g.raider>> decided to drive it back to your fort instead. There'd be some use for it, even if it was just selling it somewhere else.
</p>
<p>
Unfortunately they didn't account for the farmers who witnessed the fight and tended to the wounded who scattered into the surrounding farmland. <<rep $company.player>> is cursed throughout the Kingdom and you may find the Toran people harder to deal with in the future.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains, and they started to feel uncomfortably hot.
<<name $g.scout>> found a small spring and pool of water at the base of the rock—likely a watering point, and a good spot for an ambush. Looking around, your slavers found some places to hide from the sight of any caravans coming through the nearby mountain pass.
<<if $gOutcome == 'crit'>>
<p>
The traders came down from the foothills, wagons laden with trade goods, the _goods and barrels of water for their trek into the desert. Still, none of them appeared fully comfortable in the heat and they wasted no time heading for the spring to refill their water barrels as much as possible before heading out onto the steppes. That was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<p>
They also brought back a potential slave, who is now awaiting your pleasure in the fort's slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The traders came down from the foothills, wagons laden with trade goods, the _goods and barrels of water for their trek into the desert. Still, none of them appeared fully comfortable in the heat and they wasted no time heading for the spring to refill their water barrels as much as possible before heading out onto the steppes. That was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<</if>>
<<elseif _location == "woods">>
a small area of coppiced wood, frequently used by the locals for firewood, building material, foraging and charcoal. Hunters are not an uncommon sight, so your slavers donned green cloaks and headed in, waiting for the caravan to pass through on its way to _destination.
<p>
The many thin trunks of coppiced trees meant that using a tree to block the road was not going to work, so instead, your slavers came prepared with a rickety cart, which they overturned in the middle of the dirt track, and used the blood from a freshly hunted rabbit spread around the area to make it look like there had been an attack, with a trail leading off into the older trees of the copse. Then they withdrew to a safe place to wait.
</p>
<p>
When the caravan arrived, they halted, and a fair number of their guards went to investigate the fallen wagon, and ventured off to follow the blood trail. That was when <<name $g.raider>> led the strike from behind.
<<if _goods == "garum" or _goods == "pickled cabbage">>
Swooping, in, <<name $g.raider>> and <<name $g.fighter>> rushed the guards surrounding the water barrels, drawing the majority of the remaining guards to them, giving <<name $g.scout>> the chance to smash up the amphorae of _goods. While wasting such delicious food was, well, a waste, it was the job, and it was one easily finished, allowing them to beat a quick retreat
<<if $gOutcome == 'crit'>>
, bringing with you a caravaneer <<name $g.fighter>> managed to knock out as a bonus prize.
<<else>>
.
<</if>>
<<else>>
Swooping, in, <<name $g.raider>> and <<name $g.fighter>> rushed the guards surrounding the water barrels, drawing the majority of the remaining guards toward them and giving <<name $g.scout>> the chance to overpower the driver in the cargo wagon, and driving off with it in the confusion. Having damaged several of their water barrels, <<name $g.raider>> and <<name $g.fighter>> retreated before the rest of the guards could make it back, pushing back to where they'd left their horses. Thankfully when they caught up to <<them $g.scout>> you found <<they $g.scout>>'d nicked the wagon with the _goods,
<<if $gOutcome == 'crit'>>
, and had the former driver unconscious and amongst the crates as an extra bonus.
<<else>>
as opposed to food supplies or camping equipment. Perhaps luck, perhaps skill, but either way, a good thing.
<</if>>
<</if>>
</p>
<<else>>
a shores of a placid blue lake out in the western marches. It seemed strange to <<name $g.scout>> that such an idyllic place had not been settled, but it was very far from the city—and it was close enough to the Western Forest that anyone settling here risked being raided - or enslaved - by the elves. Or even the catkin.
<<if $gOutcome == 'crit'>>
<p>
After a brief investigation, <<name $g.scout>>discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge your slavers set up an ambush with the track between them and the lake, and waited for the caravan to arrive. When it did, your slavers pushed them hard, and <<name $g.raider>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, your slavers saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback, <<name $g.scout>> and <<name $g.fighter>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
In the end, all that was left were floating wooden remnants of the trade wagons, and one caravanner who had surrendered rather than face a watery death. The surface of the lake bubbled and roiled for a while before going completely still once more, only the flotsam and the red clouds of blood testament to the violence that had just transpired.
</p>
<<elseif $gOutcome == 'success'>>
<p>
After a brief investigation, <<name $g.scout>>discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge your slavers set up an ambush with the track between them and the lake, and waited for the caravan to arrive. When it did, your slavers pushed them hard, and <<name $g.raider>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, your slavers saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback, <<name $g.scout>> and <<name $g.fighter>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
The surface of the lake bubbled and roiled for a while before going completely still once more, only the caravan flotsam and the red clouds of blood testament to the violence that had just transpired within its depths.
</p>
<</if>>
<</if>>
<</if>>
It was only later that you found the paperwork. Your contact, <<name $g.merchant>>
, never said which trading company—or trading companies—<<they $g.merchant>> ran, but you'd seen the name on the documents you'd already handed over. Clearly, someone had set you up. This left you with a choice.../* Set destination */
<<if $gQuest.getSeed() % 2 == 0>>
<<set _destination = "the Northern Vales" >>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<set _destination = "the Eastern Wasteland" >>
<</if>>
/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "bronze ingots">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "copper ingots">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "fine wines">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "garum">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "pickled cabbage">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "iron ingots">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "river">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "farmland">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "woods">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "marsh">>
<</if>>
It was simple enough for <<rep $g.scout>> to lead everyone to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "river">>
a stone bridge crossing a small tributary of the <<lore geo_cerna>>, over a day's travel from your fort and off the normal trade routes. Being unencumbered by pack animals and trade goods, your slavers made good time, beating the caravan to the bridge.
<<if $gOutcome == 'failure'>>
<p>
Or at least, you thought you had. As the week wore on and the caravan failed to appear, it became apparent you possibly had the wrong bridge, had been too slow, or the caravan had decided to take a different route. Regardless, you wouldn't be getting paid for this one.
</p>
<<elseif $gOutcome == 'disaster'>>
<<dialogue _o1>>
They look skittish
<</dialogue>>
"Skittish?" you asked<br>
<<name _o1>> jumped down the ridge to your hiding spot, stowing <<their _o1>> spy glass away in a pouch. "They're armed to the teeth and look like they're expecting an attack."<br>
"Too many?"<br>
"Maybe. It's chancy in a fair fight."<br>
"So we don't fight fair," <<name _o2>> said with a shrug. "Spiked logs? Roll them down to block the bridge. Shoot from cover."<br>
<p>
As far as plans went, it was a good one. Or it would have been, if it had worked. The logs rolled down the ridge to the road...and kept going past the road. There was stillness and silence as everyone, slaver and caravaneer alike, watched it roll down the riverbank and into the water. Then there was the pounding of hooves and the screech of axles as the caravan spurred its animals into a gallop and rushed forward, determined to avoid your trap.
</p>
<p>
Desperately, you led your slavers in a charge down to intercept the caravan, but the guards were prepared for you—and more importantly, they were mounted. When the dust cleared, the caravan was gone, and you and your slavers were nursing some heavy injuries.
</p>
<</if>>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving you with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'failure'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, you never saw the caravan, and after a while you felt a bit foolish standing poorly concealed within a copse of trees - especially when you noticed the farmers staring at you. You considered taking one of them as a slave, but they already knew you were there, and you didn't really feel like running after them through the fields.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, the cover was sparse, and the caravan guards spotted <<name $g.fighter>> before they got too close. You and your slavers were forced to flee under a barrage of crossbow bolts, and limped back to the fort empty handed.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains,
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
and to you it felt like the first time you'd been warm in months.
<<else>>
and you started to feel uncomfortably hot.
<</if>>
You did find a small spring and pool of water at the base of the rock—this was likely a watering point, and a very promising ambush spot. You directed your slavers to find hiding places where they'd be concealed from any caravans coming through the nearby mountain pass, and then settled in to wait.
<<if $gOutcome == 'failure'>>
<p>
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
When the sun dipped down below the horizon with no sign of the caravan, you inspected the spring more closely, and found recent tracks of humans, wagons and horses. It appeared that they'd already passed, and you'd missed the window of opportunity.
<<else>>
After several hours in the baking sun you were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate, and you decided to head back to the fort. There would be other caravans to ambush and you really couldn't be bothered with that one.
<</if>>
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, wagons laden with trade goods, the _goods and barrels of water for their trek into the desert. Still, none of them appeared fully comfortable in the heat and they wasted no time heading for the spring to refill their water barrels as much as possible before heading out onto the steppes. That was when you struck, but <<name _o2>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman _o2>> down in the fight didn't help when you were already outnumbered, and you were forced to flee, all of you nursing injuries as you headed back toward the fort.
</p>
<</if>>
<<elseif _location == "woods">>
a small area of coppiced wood, frequently used by the locals for firewood, building material, foraging and charcoal. Hunters are not an uncommon sight, so your slavers donned green cloaks and headed in, waiting for the caravan to pass through on its way to _destination.
<p>
The many thin trunks of coppiced trees meant that using a tree to block the road was not going to work, so instead, your slavers came prepared with a rickety cart, which they overturned in the middle of the dirt track, and used the blood from a freshly hunted rabbit spread around the area to make it look like there had been an attack, with a trail leading off into the older trees of the copse. Then you all withdrew to a safe place to wait.
</p>
<p>
Unfortunately, the mother bear and her cubs arrived long before the caravan, investigating the blood trail and looking for the rabbit carcass. And unfortunately, the cubs ran ahead, placing <<rep $g.scout>> between the cubs and their mother.
</p>
<<if $gOutcome == 'failure'>>
<p>
If the caravan hadn't come along and intervened, you'd all have wound up nursing some very nasty injuries. As it is, you were forced to do some very fast talking, as you explained you were hunters who had come across the overturned wagon, oh no it wasn't yours and thank you you'd just be on your way now, goodbye.
</p>
<p>
There's something very embarrassing about being rescued by the people you showed up to rob.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
That's when the caravan arrived, and recognising you as slavers, they stood well back and cheered for the bear, turning you and your slavers back towards the animal with spears if you dared run in their direction. While you all eventually managed to escape, the caravan continued on its way unimpeded by you, and you're all going to be nursing injuries for a while.
</p>
<</if>>
<<else>>
the mosquito filled swampland. Why any caravan would willingly travel this route was beyond you. The marshy soil made fleeing near impossible, both for you and for the caravanners, and you had to hope you'd be able to overwhelm them in combat. Maybe if you were sneaky about it...
<<if $gOutcome == 'failure'>>
<p>
Unfortunately, none of you ever saw the caravan. You spent days in being bitten by everything that flew, swam or wriggled in those marshes, and in the end, the caravan didn't even have the decency to show up to be raided. Maybe <<name $g.scout>> got turned around in the mess of water, dead trees and floating islands of vegetation.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The difficulty of moving in the water should have meant your slavers only had to face a few opponents at a time. While <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo. What you hadn't accounted for was the number of crossbows the caravanners had with them—in hindsight it was probably why they felt confident in going through the marshes in the first place. Your raid attempt was over almost before it began, with your slavers barely able to limp back to the fort.
</p>
<</if>>
<</if>>
<<else>>
<<if _location == "river">>
a stone bridge crossing a small tributary of the <<lore geo_cerna>>, over a day's travel from your fort and off the normal trade routes. Being unencumbered by pack animals and trade goods, your slavers made good time, beating the caravan to the bridge.
<<if $gOutcome == 'failure'>>
<p>
Or at least, they thought they had. As the week wore on and the caravan failed to appear, it became apparent they possibly had the wrong bridge, had been too slow, or the caravan had decided to take a different route. Regardless, you wouldn't be getting paid for this particular job.
</p>
<<elseif $gOutcome == 'disaster'>>
When the caravan arrived, your slavers tipped a number of carefully prepared, spiked logs down the ride to block on end of the bridge.
<p>
As far as plans went, it was a good one. Or it would have been, if it had worked. The logs rolled down the ridge to the road...and kept going past the road. There was stillness and silence as everyone, slaver and caravaneer alike, watched it roll down the riverbank and into the water. Then there was the pounding of hooves and the screech of axles as the caravan spurred its animals into a gallop and rushed forward, determined to avoid the trap.
</p>
<p>
Desperately, <<name $g.fighter>> led your slavers in a charge down to intercept the caravan, but the guards were prepared for them—and more importantly, they were mounted. When the dust cleared, the caravan was gone, and your slavers were nursing some heavy injuries.
</p>
<</if>>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving your slavers with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'failure'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, they never saw the caravan, and after a while <<name $g.scout>> felt a bit foolish standing poorly concealed within a copse of trees - especially when <<they $g.scout>> noticed the farmers staring at them. <<name $g.raider>> considered taking one of them as a slave, but the farmers already knew your slavers were there, and <<they $g.raider>> didn't really feel like running after them through the fields.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, the cover was sparse, and the caravan guards spotted <<name $g.fighter>> before they got too close. Your slavers were forced to flee under a barrage of crossbow bolts, and limped back to the fort empty handed.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains, and they started to feel uncomfortably hot.
<<name $g.scout>> found a small spring and pool of water at the base of the rock—likely a watering point, and a good spot for an ambush. Looking around, your slavers found some places to hide from the sight of any caravans coming through the nearby mountain pass.
<<if $gOutcome == 'failure'>>
<p>
After several hours in the baking sun your slavers were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate. There would be other caravans to ambush and <<name $g.raider>> really couldn't be bothered with that one - assuming it ever turned up.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, wagons laden with trade goods, the _goods and barrels of water for their trek into the desert. Still, none of them appeared fully comfortable in the heat and they wasted no time heading for the spring to refill their water barrels as much as possible before heading out onto the steppes. That was when <<name $g.scout>> launched the ambush, , but <<name $g.fighter>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman $g.fighter>> down in the fight didn't help when your slavers were already outnumbered, and they were forced to flee, all of them nursing injuries as they headed back toward the fort.
</p>
<</if>>
<<elseif _location == "woods">>
a small area of coppiced wood, frequently used by the locals for firewood, building material, foraging and charcoal. Hunters are not an uncommon sight, so your slavers donned green cloaks and headed in, waiting for the caravan to pass through on its way to _destination.
<p>
The many thin trunks of coppiced trees meant that using a tree to block the road was not going to work, so instead, your slavers came prepared with a rickety cart, which they overturned in the middle of the dirt track, and used the blood from a freshly hunted rabbit spread around the area to make it look like there had been an attack, with a trail leading off into the older trees of the copse. Then they withdrew to a safe place to wait.
</p>
<p>
Unfortunately, the mother bear and her cubs arrived long before the caravan, investigating the blood trail and looking for the rabbit carcass. And, of course, the cubs ran ahead, placing <<rep $g.scout>> between the cubs and their mother.
</p>
<<if $gOutcome == 'failure'>>
<p>
If the caravan hadn't come along and intervened, your slavers would have wound up nursing some very nasty injuries. As it is, <<name $g.scout>> was forced to do some very fast talking, as <<they $g.scout>> explained they were hunters who had come across the overturned wagon, oh no it wasn't theirs and thank you they'd just be on their way now, goodbye.
</p>
<p>
There was something very embarrassing about being rescued by the people they'd set out to rob, and none of them meet your eyes as they report their lack of success.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
That's when the caravan arrived, and recognising your slavers, they stood well back and cheered for the bear, turning your people back towards the animal with spears if they dared run in the caravan's. While they all eventually managed to escape, the caravan continued on its way unimpeded, and your slavers are all going to be nursing injuries for a while.
</p>
<</if>>
<<else>>
the mosquito filled swampland. Why any caravan would willingly travel this route was beyond <<name $g.scout>>, but <<they $g.scout>> pushed on regardless. The marshy soil made fleeing near impossible, both for your slavers and for the caravanners, and <<name $g.scout>> had to hope they'd be able to overwhelm the caravan in combat.
<<if $gOutcome == 'failure'>>
<p>
Unfortunately, none of them ever saw the caravan. Your slavers spent days in being bitten by everything that flew, swam or wriggled in those marshes, and in the end, the caravan didn't even have the decency to show up to be raided. Maybe <<name $g.scout>> got turned around in the mess of water, dead trees and floating islands of vegetation.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The difficulty of moving in the swamp should have meant your slavers only had to face a few opponents at a time. While <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo. What they hadn't accounted for was the number of crossbows the caravanners had with them—in hindsight it was probably why they felt confident in going through the marshes in the first place. The attempted raid was over almost before it began, with your slavers barely able to limp back to the fort.
</p>
<</if>>
<</if>>
<</if>><<run new setup.UnitGroup(
"a_merchant_s_revenge_caravan_raid_eastern_desert_0",
"Caravan Slaves",
'desert_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
],
)>>
<<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Scout (Desert)', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_nomad,
setup.trait.tough_tough,
setup.trait.per_cautious,
setup.trait.per_direct,
setup.trait.skill_intimidating,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.race_wolfkin,
setup.trait.subrace_humanvale,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.per_brave,
setup.trait.per_sly,
setup.trait.per_dreamy,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
survival: 2,
}
)>>
<<set _criteriafighter = new setup.UnitCriteria(
null, /* key */
'Fighter', /* name */
[
setup.trait.subrace_humandesert,
setup.trait.subrace_orc,
setup.trait.subrace_demonkin,
setup.trait.bg_adventurer,
setup.trait.bg_mercenary,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_humble,
setup.trait.per_curious,
setup.trait.eq_blind,
setup.trait.eq_restrained,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriaraider = new setup.UnitCriteria(
null, /* key */
'Raider', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_engineer,
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
setup.trait.skill_alchemy,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.subrace_humansea,
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_eastern_desert_2', /* key */
"A Merchant\'s Revenge: Caravan Raid (Eastern Desert)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'money',
'unit',
'ire',
'desert',
'danger',
],
2, /* weeks */
7, /* expiration weeks */
{ /* roles */
'scout': [ _criteriascout, 1],
'fighter': [ _criteriafighter, 1],
'raider': [ _criteriaraider, 1],
},
{ /* actors */
'slaves': 'a_merchant_s_revenge_caravan_raid_eastern_desert_0',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_caravan_raid_eastern_desert_2',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_eastern_desert_2Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Slave('slaves', "a|was a member of a Toran caravan, captured by your slavers in a raid", undefined),
setup.qc.MoneyCustom(5000),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_eastern_desert_2Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Ire('humankingdom', 2),
setup.qc.MoneyCustom(4000),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_eastern_desert_2Crit',
[
setup.qc.TraumatizeRandom('scout', 5),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_eastern_desert_2Crit',
[
setup.qc.OneRandom([
setup.qc.Injury('scout', 1),
setup.qc.Injury('scout', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 1),
setup.qc.Injury('fighter', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 1),
setup.qc.Injury('raider', 2)
]),
setup.qc.Ire('humankingdom', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
],
[ /* expiration outcomes */
],
)>>/** mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
**/
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
There is s certain a caravan carrying a shipment of
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "myrrh">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "gold">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "turquoise">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "chickpeas">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "erotic pottery">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "honey ants">>
<</if>>
<<= _goods>>
that I do not want to arrive at Lucgate. If you can intervene in this matter, the usual bonus will apply. You may, of course, loot whatever you wish from the caravan itself.
</p>
</div>
<p>
On the back of the note you find a crude map showing
<<if $gQuest.getSeed() % 5 == 0>>
an escarpment west of the <<lore geo_cassian>> where a rocky escarpment falls to the desert sands.
<<set _location = "escarpment">>
<<elseif $gQuest.getSeed() % 5 == 1>>
a winding mountain road with a sheer drop on one side.
<<set _location = "cliff">>
<<elseif $gQuest.getSeed() % 5 == 2>>
a rocky outcrop in the eastern foothills of the <<lore geo_cassian>>.
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
an oasis in the <<lore region_desert>>.
<<set _location = "oasis">>
<<elseif $gQuest.getSeed() % 5 == 4>>
a waystone marker along a well travelled road.
<<set _location = "road">>
<</if>>
It looks possible to stage an ambush there, but the desert is a very dangerous place. You should ensure the slavers you send on this mission are ready for the challenge.
</p>
<<if _location == "escarpment" or _location == "cliff">>
<p>
<<dangertext "This location could prove deadly if a slaver was to end up falling off the">><b> _location </b><<dangertext "Plan accordingly and be wary.">>
</p>
<</if>>/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "myrrh">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "gold">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "turquoise">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "chickpeas">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "erotic pottery">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "honey ants">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "escarpment">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "cliff">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "oasis">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "road">>
<</if>>
After studying the map carefully,
<<rep $g.scout>> brought your slavers to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "escarpment">>
a ridgeline where the rock of the escarpment fell away to the desert sands below—and the only paths up or down were narrow, precarious trails cut into the cliff.
<<if $gOutcome == 'crit'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if your quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing you all with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
You all snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Eventually, <<name _o1>> saw a line of bobbing lights in the distance, coming closer and closer to the cliffs. You watched them over the next several hours and soon the lights turned into dark shadows into barely discernable figures in the starlight. Your targets had arrived.
</p>
<p>
The caravan stopped at the base of the escarpment, but made no attempt to begin the climb the road.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
"What are they waiting for? <<name _unit>> asked.<br>
<<set _cautious = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _cautious>>
"Probably dawn," <<name _cautious>> said. "Would you want to lead a train of laden wagons up the side of a sheer cliff at night?" <br>
<</if>>
<</if>>
When dawn spilled across the horizon, the soft light lit up the cliffs and shone into your eyes. It also signalled a flurry of activity at the base of the cliff, as the caravan began its slow climb up to the top of the escarpment.
</p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
<p>
You let them get halfway up before <<name _unit>> made the earth of the escarpment tremble and quake, causing many in the caravan to fall and their camels to panic. Too busy trying to maintain their footing, the caravanners were in no position to fight back against your volleys of missiles and those that made it to the top were easily cut down.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_fire', 'magic_fire_master']})>>
<<if _unit>>
<p>
You let them get almost to the top before <<name _unit>> drew flames from the coals of your firepit and directed them down onto the caravan, even as everyone else started dropping pots of pitch and tar, causing gouts of flame when <<name _unit>>'s magic met the flammable substances.
<<if $unit.player.isHasAnyTraitExact(["per_kind", "per_empath"])>>
The screams of those set alight seared into your brain and turned your stomach, especially as many chose to jump than stay within range of the magic.
<<elseif $unit.player.isHasTrait("per_cruel")>>
The screams of the dying and the smell of burnt flesh brought a smile to your lips. You hadn't felt so alive in ages.
<<else>>
Many chose to jump rather than stay within range of the magic and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
<</if>>
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _unit>>
<p>
You let them almost get to the top before <<name _unit>> summoned a spirit of air and sent it, whirlwind like, down the cliff, flinging men and women to the ground far below and causing the camels to stampede back down the trail. It was carnage. But it was swift.
</p>
<<else>>
<p>
You let them get almost to the top before you started dropping pots of burning pitch and tar onto the caravan , dousing everything with the sticky, burning substances.
<<if $unit.player.isHasAnyTraitExact(["per_kind", "per_empath"])>>
The screams of those set alight seared into your brain and turned your stomach, especially as many chose to jump than charge up into the face of more fire.
<<elseif $unit.player.isHasTrait("per_cruel")>>
The screams of the dying and the smell of burnt flesh brought a smile to your lips. You hadn't felt so alive in ages.
<<else>>
Many chose to jump rather than charge up into the face of more fire and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
<</if>>
</p>
<</if>>
<</if>>
<</if>>
<<if _goods == "gold" or _goods == "turquoise">>
Carefully picking your way down the cliff you recovered the shipment of _goods and brought them back to your fort,
<<elseif _goods == "erotic pottery">>
With the pottery shattered at the bottom of the cliff, you turned and headed back to your fort,
<<else>>
The _goods didn't survive the carnage, and you barely bothered searching the remains of the caravan before heading back to your fort,
<</if>>
bringing along a single survivor. At least you could get a new slave out of this.
<<elseif $gOutcome == 'success'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if your quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing you all with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west."<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
You all snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Eventually, <<name _o1>> saw a line of bobbing lights in the distance, coming closer and closer to the cliffs. You watched them over the next several hours and soon the lights turned into dark shadows into barely discernable figures in the starlight. Your targets had arrived.
</p>
<p>
The caravan stopped at the base of the escarpment, but made no attempt to begin the climb the road.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
"What are they waiting for? <<name _unit>> asked.<br>
<<set _cautious = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _cautious>>
"Probably dawn," <<name _unit>> said. "Would you want to lead a train of laden wagons up the side of a sheer cliff at night?" <br>
<</if>>
<</if>>
When dawn spilled across the horizon, the soft light lit up the cliffs and shone into your eyes. It also signalled a flurry of activity at the base of the cliff, as the caravan began its slow climb up to the top of the escarpment.
</p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
<p>
You let them get halfway up before <<name _unit>> made the earth of the escarpment tremble and quake, causing many in the caravan to fall and their camels to panic. Too busy trying to maintain their footing, the caravanners were in no position to fight back against your volleys of missiles and those that made it to the top were easily cut down.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_fire', 'magic_fire_master']})>>
<<if _unit>>
<p>
You let them get almost to the top before <<name _unit>> drew flames from the coals of your firepit and directed them down onto the caravan, even as everyone else started dropping pots of pitch and tar, causing gouts of flame when <<name _unit>>'s magic met the flammable substances.
<<if $unit.player.isHasAnyTraitExact(["per_kind", "per_empath"])>>
The screams of those set alight seared into your brain and turned your stomach, especially as many chose to jump than stay within range of the magic.
<<elseif $unit.player.isHasTrait("per_cruel")>>
The screams of the dying and the smell of burnt flesh brought a smile to your lips. You hadn't felt this alive in ages.
<<else>>
Many chose to jump rather than stay within range of the magic and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
<</if>>
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _unit>>
<p>
You let them almost get to the top before <<name _unit>> summoned a spirit of air and sent it, whirlwind like, down the cliff, flinging men and women to the ground far below and causing the camels to stampede back down the trail. It was carnage. But it was swift.
</p>
<<else>>
<p>
You let them get almost to the top before you started dropping pots of burning pitch and tar onto the caravan , dousing everything with the sticky, burning substances.
<<if $unit.player.isHasAnyTraitExact(["per_kind", "per_empath"])>>
The screams of those set alight seared into your brain and turned your stomach, especially as many chose to jump than charge up into the face of more fire.
<<elseif $unit.player.isHasTrait("per_cruel")>>
The screams of the dying and the smell of burnt flesh brought a smile to your lips. You hadn't felt this alive in ages.
<<else>>
Many chose to jump rather than charge up into the face of more fire and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
<</if>>
</p>
<</if>>
<</if>>
<</if>>
<<if _goods == "gold" or _goods == "turquoise">>
Carefully picking your way down the you recovered the shipment of _goods and brought them back to your fort.
<<elseif _goods == "erotic pottery">>
With the pottery shattered at the bottom of the cliff, you turned and headed back to your fort.
<<else>>
The _goods didn't survive the carnage, and you barely bothered searching the remains of the caravan before heading back to your fort.
<</if>>
<<elseif $gOutcome == 'failure'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if your quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing you all with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
</p>
<p>
You all snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Unfortunately, the trek across the <<lore geo_cassian>> had taken more out of you than you realised, and when you next awoke the sun was shining outside your tent and the air was oppressive and scorching hot. Hearing more noise outside than your slavers should be making, you exited your tent to find the caravan had arrived and climbed the escarpment while you slept, and your trio of tents was now being watched by at least a dozen guards, and you decided that discretion was the better part of valour.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if your quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing you all with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
</p>
<p>
You all snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Unfortunately, the trek across the <<lore geo_cassian>> had taken more out of you than you realised, and when you next awoke it was light, and there was a blade pressed against your throat.
<<dialogue $g.slaves>>
Thought you could jump us did you? Well, not today.
<</dialogue>>
Before you could offer a denial, you felt the punch in your gut as the guard and <<their $g.slaves>> laid into you. Fortunately for you they appeared more intent on beating you up than killing you, and they only kept you until nightfall, when their own caravan packed up and left you and your slavers, bleeding in the dirt.
</p>
<</if>>
<<elseif _location == "cliff">>
a mountainous road curling around the side of a sheer rocky peak in the <<lore geo_cassian>>.
<<if $gOutcome == 'crit'>>
<p>
With no real cover to speak of, you concealed yourselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing you, or turning around. They chose to rush you, but the narrow road prevented them from really using their numbers to their advantage—and your slavers were better trained. In the end you pushed back to the caravan itself, and the ensuing panick sent the wagons with the _goods soff the cliff, which was just as well. The caravanners morale broke at that point and they started to run, allowing you to grab one of them as a new slave, even if you didn't get any of the truly valuable cargo.
</p>
<<elseif $gOutcome == 'success'>>
<p>
With no real cover to speak of, you concealed yourselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing you, or turning around. They chose to rush you, but the narrow road prevented them from really using their numbers to their advantage—and your slavers were better trained. In the end you pushed back to the caravan itself, and the ensuing panick sent the wagons with the _goods off the cliff, which was just as well. The caravanners morale broke at that point and they started to run, allowing you to pick through the remains of the caravan at leisure, even if you didn't get any of the truly valuable cargo.
</p>
<p>
Unfortunately the survivors recognised you and at least one Toran merchant is even more inclined to hate you now.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Despite spending days in the windy peaks you never saw another soul. It looks like you had the wrong path, and you're forced to return to the fort empty handed.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
With no real cover to speak of, you concealed yourselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing you, or turning around. They chose to rush you and their superior numbers proved to be your undoing.
<<if $gQuest.getSeed() % 2 == 0>>
<<name _o1>> was thrown off the mountain and hurtled out into the empty void
<<if _o1.isHasTrait('skill_flight')>>
, but was able to use their <<uwings _o1>> to stop their fall. However, with only two of you effectively in the fight, it went very badly, and you were lucky the caravanners moved on rather than throwing both you and <<name _o2>> off the mountain as well.
<<elseif _o1.isHasAnyTraitExact(['magic_wind', 'magic_wind_master'])>>
, but was able to summon air currents to bring them back to safe ground. However, with only two of you effectively in the fight, it went very badly, and you were lucky the caravanners moved on rather than throwing both you and <<name _o2>> off the mountain as well.
<<else>>
<<set _flyer = setup.selectUnit([$unit.player, _o2], {trait: 'skill_flight'})>>
<<if _flyer>>
, but <<name _flyer>> was able to swoop down and catch them, although they landed far down the mountainside in a tumble of arms and legs. Meanwhile, the caravan moved on, unimpeded by your ambush, and leaving all three of you badly injured.
<<else>>
<<set _mage = setup.selectUnit([$unit.player, _o2], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _mage>>
. <<name _mage>> summoned air currents to bring <<them _o1>> back to safe ground, but the magic went awry when <<name _mage>> was knocked unconscious. It took reinforcements from the fort the better part of a day to find you all, and recovery is going to take some time. Possibly a lot of it.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o1))>>
<<else>>
, and tumbled out of sight. It took a few days for reinforcements from the fort to find <<their _o1>> broken body in the ravine below. Or what at least was left of it.
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o1))>>
<</if>>
<</if>>
<</if>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name _o2>> was thrown off the mountain and hurtled out into the empty void
<<if _o2.isHasTrait('skill_flight')>>
, but was able to use their <<uwings _o2>> to stop their fall. However, with only two of you effectively in the fight, it went very badly, and you were lucky the caravanners moved on rather than throwing both you and <<name _o1>> off the mountain as well.
<<elseif _o2.isHasAnyTraitExact(['magic_wind', 'magic_wind_master'])>>
, but was able to summon air currents to bring them back to safe ground. However, with only two of you effectively in the fight, it went very badly, and you were lucky the caravanners moved on rather than throwing both you and <<name _o1>> off the mountain as well.
<<else>>
<<set _flyer = setup.selectUnit([$unit.player, _o1], {trait: 'skill_flight'})>>
<<if _flyer>>
, but <<name _flyer>> was able to swoop down and catch them, although they landed far down the mountainside in a tumble of arms and legs. Meanwhile, the caravan moved on, unimpeded by your ambush, and leaving all three of you badly injured.
<<else>>
<<set _mage = setup.selectUnit([$unit.player, _o1], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _mage>>
. <<name _mage>> summoned air currents to bring <<them _o2>> back to safe ground, but the magic went awry when <<name _mage>> was knocked unconscious. It took reinforcements from the fort the better part of a day to find you all, and recovery is going to take some time. Possibly a lot of it.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o2))>>
<<else>>
, and tumbled out of sight. It took a few days for reinforcements from the fort to find <<their _o2>> broken body in the ravine below. Or what at least was left of it.
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o2))>>
<</if>>
<</if>>
<</if>>
<</if>>
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains,
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
and to you it felt like the first time you'd been warm in months.
<<else>>
and you started to feel uncomfortably hot.
<</if>>
You did find a small spring and pool of water at the base of the rock—this was likely a watering point, and a very promising ambush spot. You directed your slavers to find hiding places where they'd be concealed from any caravans coming through the nearby mountain pass, and then settled in to wait.
<<if $gOutcome == 'crit'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course, that was when you struck, raining arrows down from above before closing in and taking on the rest in combat. The few guards were no match for your seasoned veterans, and you soon found yourself in possession of a wagonload of _goods.
</p>
<p>
You also had a trussed up new slave to take home with you. Or potential slave. Good times.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course, that was when you struck, raining arrows down from above before closing in and taking on the rest in combat. The few guards were no match for your seasoned veterans, and you soon found yourself in possession of a wagonload of _goods.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
When the sun dipped down below the horizon with no sign of the caravan, you inspected the spring more closely, and found recent tracks of humans, wagons and horses. It appeared that they'd already passed, and you'd missed the window of opportunity.
<<else>>
After several hours in the baking sun you were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate, and you decided to head back to the fort. There would be other caravans to ambush and you really couldn't be bothered with that one.
<</if>>
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. That was when you struck, but <<name _o2>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman _o2>> down in the fight didn't help when you were already outnumbered, and you were forced to flee, all of you nursing injuries as you headed back toward the fort.
</p>
<</if>>
<<elseif _location == "oasis">>
a lush oasis, a haven of greenery and water in an otherwise inhospitable landscape.
<<if $gOutcome == 'crit'>>
<p>
You feasted on date palms as you waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while you usually had to wait until nightfall to spring ambushes, you found yourself waiting until the sun was high in the sky before you were confident that all of the caravanners had found sleep.
</p>
<p>
<<if _goods == "myrrh" or _goods == "turquoise">>
It took you a bit of time to find the right chest, but in the end you found the small volume of _goods hidden away at the bottom of their stockpile, and decided it was easiest to leave with the most valuable of their trade goods. After all, it was the shipment you were being paid to intercept.
<<elseif _goods == "gold">>
It took you a bit of time to find the right chest, but in the end you found the small volume of _goods hidden away at the bottom of their stockpile, and decided it was easiest to leave with the most valuable of their trade goods. After all, it was the shipment you were being paid to intercept, and the chest was heavier than it looked.
<<elseif _goods == "honey ants">>
You got lucky and found the padded and ventilated box of honey ants under shade cloth near the caravan's food stores. Opening the box you were somewhat surprised to see the ant heads turn towards you, but then, of course. The sweet honey they held inside their bloated abdomens would keep them alive during travel. You contemplated eating one, as such a delicacy was typically reserved for the <<rep $company.royal>>, sometimes dipped into the finest chocolate, but decided that could wait until you were clear of the camp.
<<elseif _goods == "chickpeas">>
The sacks of hard, dried chickpeas were easy to find, and you, <<name _o1>> and <<name _o2>> spent almost an hour carrying them off into the reeds, slitting them open and letting the legumes fall into the water and the fine silt below. The reeds ensured that even if the caravan was so inclined, sifting the mud to recover the chickpeas would be a fruitless endeavour.
<<else>>
The pottery turned out to be mostly drinking bowls and a good number of amphorae, most of them depicting men engaging in various forms of sexual intercourse, although there are some depicted mixed couples or orgies, and a few that only show women. You contemplated bringing some of them back with you but the sheer amount was more than your slavers could carry.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
After some consideration, <<name _unit>> used their magic to turn most of the pottery into clay dust. Those few pieces you really liked were carried out with you.
<<else>>
In the end, there was nothing for it but to start smashing, a process that was quick, but noisy. The fact that the camp was asleep helped you escape without injury, but you're certain you were identified, and your actions will certainly be reported to the authorities in the <<lore region_city>>.
<<run setup.qc.Ire('humankingdom', 2).apply($gQuest)>>
<</if>>
<</if>>
</p>
<p>
As you were leaving, <<name $g.raider>> was able to capture a sleepy eyed caravanner stumbling from their tent, and you're able to add a potential <<urace $g.slaves>> slave to your bounty for this job.
</p>
<<elseif $gOutcome == 'success'>>
<p>
You feasted on date palms as you waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while you usually had to wait until nightfall to spring ambushes, you found yourself waiting until the sun was high in the sky before you were confident that all of the caravanners had found sleep.
</p>
<p>
<<if _goods == "myrrh" or _goods == "turquoise">>
It took you a bit of time to find the right chest, but in the end you found the small volume of _goods hidden away at the bottom of their stockpile, and decided it was easiest to leave with the most valuable of their trade goods. After all, it was the shipment you were being paid to intercept. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "gold">>
It took you a bit of time to find the right chest, but in the end you found the small volume of _goods hidden away at the bottom of their stockpile, and decided it was easiest to leave with the most valuable of their trade goods. After all, it was the shipment you were being paid to intercept, and the chest was heavier than it looked. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "honey ants">>
You got lucky and found the padded and ventilated box of honey ants under shade cloth near their food stores. Opening the box you were somewhat surprised to see the ant heads turn towards you, but then, of course. The sweet honey they held inside their bloated abdomens would keep them alive during travel. You contemplated eating one, as such a delicacy was typically reserved for the <<rep $company.royal>>, sometimes dipped into the finest chocolate, but decided that could wait until you were clear of the camp. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "chickpeas">>
The sacks of hard, dried chickpeas were easy to find, and you, <<name _o1>> and <<name _o2>> spent almost an hour carrying them off into the reeds, slitting them open and letting the legumes fall into the water and the fine silt below. The reeds ensured that even if the caravan was so inclined, sifting the mud to recover the chickpeas would be a fruitless endeavour. Unfortunately, you heard a shout of alarm as you were collecting the last few bags, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<else>>
The pottery turned out to be mostly drinking bowls and a good number of amphorae, most of them depicting men engaging in various forms of sexual intercourse, although there were some depicted mixed couples or orgies, and a few that only showed women. You contemplated bringing some of them back with you but the sheer amount was more than your slavers could carry.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
After some consideration, <<name _unit>> used their magic to turn most of the pottery into clay dust, while everyone else carried out a couple of pieces that had caught their eyes. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<else>>
In the end, there was nothing for it but to start smashing, a process that was quick, but noisy, and definitely roused the camp from their sleep.
<</if>>
<</if>>
The element of surprise helped you escape without injury, but you're certain you were identified, and your actions will certainly be reported to the authorities in the <<lore region_city>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
You feasted on date palms as you waited, venturing out from your hiding places to gather more dates and other fruits.<br>
"I'm amazed no-one's settled here," <<name _o2>> said as they waited at the base of the date palm. <br>
"Don't say that," you chided them. "Every time anyone says something like that we get to find out the answer and it's always not good."<br>
"That's—"<br>
A loud, choral warcry rent the air.<br>
"What was—" you started even as <<name _o1>> all but jumped down from the date palm.<br>
"Orc raiders!" <<name _o1>> hissed urgently. "And I'm pretty sure they saw me. Run!"<br>
Given the distance and the cover of the vegetation, you were able to outrun the orcs, but it also meant you had to abandon the job and head back to the fort. You hoped the orcs might raid the caravan, but you later hear of its safe arrival at Lucgate.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
You feasted on date palms as you waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while you usually had to wait until nightfall to spring ambushes, you found yourself waiting until the sun was high in the sky before you were confident that all of the caravanners had found sleep.
</p>
<p>
Sneaking into the encampment, you soon realised that the caravan was carrying much more than just _goods and you were going to have to do some searching.<br>
"Quietly," you whispered, glaring at your slavers.<br>
However, it wasn't long before you heard a series of loud crashes as a stack of crates toppled over, followed by the sound of pottery breaking.<br>
"Oops," was all <<name _o1>> managed to say before guards and caravanners all but erupted from the tents.
</p>
<p>
You and your slavers were soundly beaten, and the guards kept you all tied up until the caravan moved on that evening. Broken, bruised and violated, you led your slavers back to the fortress, and vowed never to speak of it ever again.
</p>
<</if>>
<<else>>
a nondescript section of road, almost lost under the sands of the desert, but marked with a weathered waystone with a number carved into it that's barely readable. You thought it was a sixty seven. Or maybe a sixty nine.
<<if $gOutcome == 'crit'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where you all were able to escape the heat of the day. When night came around, you waited just at the ridge of the dunes overlooking the road and waiting for the caravan to come by. When it finally did, <<name $g.scout>> and <<name $g.fighter>> ran towards the caravan, throwing pots of alchemist's fire and drawing the attention of the guards while <<name $g.raider>> went directly to the water barrels and laid into them with an axe.
</p>
<p>
By the time the guards realised their mistake and headed back towards the water stores, it was too late, and you were able to score a direct hit on the cargo wagons with a pot of alchemists fire. Between burning cargo, panicking camels and no water to speak of, the caravan would, at the very least, be forced to turn around. Based on your recollection, the nearest watering hole was a week away. They'd be lucky if any of them made it.
</p>
<p>
As you left, <<name $g.fighter>> managed to capture of the guards who had rushed to intercept <<them $g.fighter>>, and the <<woman $g.slaves>> is now corraled inside your slave pen, awaiting your pleasure. Or displeasure.
</p>
<<elseif $gOutcome == 'success'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where you all were able to escape the heat of the day. When night came around, you waited just at the ridge of the dunes overlooking the road and waiting for the caravan to come by. When it finally did, <<name $g.scout>> and <<name $g.fighter>> ran towards the caravan, throwing pots of alchemist's fire and drawing the attention of the guards while <<name $g.raider>> went directly to the water barrels and laid into them with an axe.
</p>
<p>
By the time the guards realised their mistake and headed back towards the water stores, it was too late, and you were able to score a direct hit on the cargo wagons with a pot of alchemists fire. Between burning cargo, panicking camels and no water to speak of, the caravan would, at the very least, be forced to turn around. Based on your recollection, the nearest watering hole was a week away. They'd be lucky if any of them made it.
</p>
<p>
Some time later, you hear the tale of a plucky survivor, who drank the blood of a camel in order to get back to civilisation alive. They also blamed <<rep $company.player>> for the raid on their caravan, and you just know that's going to get back to the merchant princes of Lucgate.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where you all were able to escape the heat of the day. Unfortunately a sandstorm blew up out of nowhere and you were all buried alive. Thankfully you managed to dig yourselves out, but with sand everywhere, heavily abraded skin and no sign of your quarry, you decided to head back to the fort to lick your wounds.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where you all were able to escape the heat of the day. When night fell, <<name $g.fighter>> had the bright idea of burying yourselves in the loose sand of the dune close to the road, so you'd be able to spring out and attack their water supplies.
</p>
<p>
With the three of you carefully hidden you settled in to wait, and it didn't take long for the caravan to appear. You waited, muscles tense for the right moment, and as their supply wagons rolled along mere feet from you, you pushed your way up out of the sand with your best warcry, only to find yourself alone, and quickly surrounded by guards. A torrent of curses drew your attention to where your slavers were stuggling, half buried in the sand with smirking caravan guards standing over them, weapons drawn.<br>
"Sorry <<unickname $g.fighter>>," <<name $g.fighter>> said sheepishly. "Got stuck."<br>
The guards left you bloody, beaten and buried up to your necks in sand. You were able to get out eventually, but by that time the sun was high in the sky and the caravan had long gone.
</p>
<</if>>
<</if>>
<<else>>
<<if _location == "escarpment">>
a ridgeline where the rock of the escarpment fell away to the desert sands below—and the only paths up or down were narrow, precarious trails cut into the cliff.
<<if $gOutcome == 'crit'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if their quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing everyone with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
They snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Eventually, <<name $g.scout>> saw a line of bobbing lights in the distance, coming closer and closer to the cliffs. <<They $g.scout>> watched them over the next several hours and soon the lights turned into dark shadows into barely discernable figures in the starlight.
</p>
<p>
The caravan stopped at the base of the escarpment, but made no attempt to begin the climb the road.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
"What are they waiting for? <<name _unit>> asked.<br>
<<set _cautious = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _cautious>>
"Probably dawn," <<name _cautious>> said. "Would you want to lead a train of laden wagons up the side of a sheer cliff at night?" <br>
<</if>>
<</if>>
When dawn spilled across the horizon, the soft light lit up the cliffs and shone into your slavers' eyes. It also signalled a flurry of activity at the base of the cliff, as the caravan began its slow climb up to the top of the escarpment.
</p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get halfway up before <<they _unit>> made the earth of the escarpment tremble and quake, causing many in the caravan to fall and their camels to panic. Too busy trying to maintain their footing, the caravanners were in no position to fight back against your volleys of missiles and those that made it to the top were easily cut down.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_fire', 'magic_fire_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get almost to the top before <<they _unit>> drew flames from the coals of the firepit and directed them down onto the caravan, even as everyone else started dropping pots of pitch and tar, causing gouts of flame when <<name _unit>>'s magic met the flammable substances. Many chose to jump rather than stay within range of the magic and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get almost to the top before <<they _unit>> summoned a spirit of air and sent it, whirlwind like, down the cliff, flinging men and women to the ground far below and causing the camels to stampede back down the trail. It was carnage. But it was swift.
</p>
<<else>>
<p>
Your slavers let them get almost to the top before they started dropping pots of burning pitch and tar onto the caravan , dousing everything with the sticky, burning substances. Many chose to jump rather than charge up into the face of more fire and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
</p>
<</if>>
<</if>>
<</if>>
<<if _goods == "gold" or _goods == "turquoise">>
Carefully picking their way down the cliff your slavers recovered the shipment of _goods and brought them back to your fort,
<<elseif _goods == "erotic pottery">>
With the pottery shattered at the bottom of the cliff, your slavers headed back to your fort,
<<else>>
The _goods didn't survive the carnage, and your slavers barely bothered searching the remains of the caravan before heading for home,
<</if>>
bringing along a single survivor, now tied up in your slave pens.
<<elseif $gOutcome == 'success'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if their quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing everyone with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
They snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Eventually, <<name $g.scout>> saw a line of bobbing lights in the distance, coming closer and closer to the cliffs. <<They $g.scout>> watched them over the next several hours and soon the lights turned into dark shadows into barely discernable figures in the starlight.
</p>
<p>
The caravan stopped at the base of the escarpment, but made no attempt to begin the climb the road.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
"What are they waiting for? <<name _unit>> asked.<br>
<<set _cautious = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _cautious>>
"Probably dawn," <<name _cautious>> said. "Would you want to lead a train of laden wagons up the side of a sheer cliff at night?" <br>
<</if>>
<</if>>
When dawn spilled across the horizon, the soft light lit up the cliffs and shone into your slavers' eyes. It also signalled a flurry of activity at the base of the cliff, as the caravan began its slow climb up to the top of the escarpment.
</p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get halfway up before <<they _unit>> made the earth of the escarpment tremble and quake, causing many in the caravan to fall and their camels to panic. Too busy trying to maintain their footing, the caravanners were in no position to fight back against your volleys of missiles and those that made it to the top were easily cut down.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_fire', 'magic_fire_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get almost to the top before <<they _unit>> drew flames from the coals of the firepit and directed them down onto the caravan, even as everyone else started dropping pots of pitch and tar, causing gouts of flame when <<name _unit>>'s magic met the flammable substances. Many chose to jump rather than stay within range of the magic and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
</p>
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _unit>>
<p>
<<name _unit>> let them get almost to the top before <<they _unit>> summoned a spirit of air and sent it, whirlwind like, down the cliff, flinging men and women to the ground far below and causing the camels to stampede back down the trail. It was carnage. But it was swift.
</p>
<<else>>
<p>
Your slavers let them get almost to the top before they started dropping pots of burning pitch and tar onto the caravan , dousing everything with the sticky, burning substances. Many chose to jump rather than charge up into the face of more fire and if you close your eyes you can still hear them, and smell the stomach churning stench of scorched flesh.
</p>
<</if>>
<</if>>
<</if>>
<<if _goods == "gold" or _goods == "turquoise">>
Carefully picking their way down the cliff your slavers recovered the shipment of _goods and brought them back to your fort,
<<elseif _goods == "erotic pottery">>
With the pottery shattered at the bottom of the cliff, your slavers headed back to your fort,
<<else>>
The _goods didn't survive the carnage, and your slavers barely bothered searching the remains of the caravan before heading for home,
<</if>>
<<elseif $gOutcome == 'failure'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if their quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing everyone with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
</p>
<p>
Your slavers snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Unfortunately, the trek across the <<lore geo_cassian>> had taken more out of them than they realised, and when they next awoke the sun was shining outside their tent and the air was oppressive and scorching hot. Hearing a lot of noise outside the tent, they looked out to find the caravan had arrived and climbed the escarpment while they slept, and their trio of tents was now being watched by at least a dozen guards. Faced with those odds, your slavers decided that discretion was the better part of valour, and returned to the fort.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Taking advantage of a small copse of mustard trees, your slavers settled in to wait, taking it in turns to peek over the edge too see if their quarry was near.
<<set _local = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['subrace_humandesert','subrace_orc']})>>
<<if _local>>
<<name _local>> picked some of the purplish mustard berries and handed them out, providing everyone with a small snack.<br>
<<set _questioner = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {notrait: ['subrace_humandesert','subrace_orc']})>>
<<if _questioner>>
"Are these what mustard's made from then?" <<name _questioner>> asked doubtfully.<br>
<<name _local>> shook <<their _local>> head. "No, I'd never even had your mustard until I went west.<br>
<</if>>
It was, if nothing else, nice to have a source of liquid in this head, no matter how tiny.
<</if>>
</p>
<p>
Your slavers snoozed throughout the day and huddled together for warmth during the night, only building a small fire, dug deep into the rocky ground to try to hide its glow. Unfortunately, the trek across the <<lore geo_cassian>> had taken more out of them than they realised, and when they next awoke it was light, and there were blades pressed against their throats.
<<dialogue $g.slaves>>
Thought you could jump us did you? Well, not today.
<</dialogue>>
Before your slavers could offer a denial, the guards laid into them. Fortunately, the guards appeared more intent on doling out beatings than death, and they only kept your slavers until nightfall, leaving them bleeding in the dirt when their own caravan packed up and moved on.
</p>
<</if>>
<<elseif _location == "cliff">>
a mountainous road curling around the side of a sheer rocky peak in the <<lore geo_cassian>>.
<<if $gOutcome == 'crit'>>
<p>
With no real cover to speak of, your slavers concealed yourselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing your slavers, or turning around. They chose to rush in, but the narrow road prevented them from really using their numbers to their advantage—and your slavers were better trained. In the end <<name $g.fighter>> and <<name $g.raider>> pushed back to the caravan itself, and the ensuing panic sent the wagons with the _goods soff the cliff, which was just as well. The caravanners morale broke at that point and they started to run, allowing your slavers to grab one of them as a new slave, even if they didn't get any of the truly valuable cargo.
</p>
<<elseif $gOutcome == 'success'>>
<p>
With no real cover to speak of, your slavers concealed yourselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing your slavers, or turning around. They chose to rush in, but the narrow road prevented them from really using their numbers to their advantage—and your slavers were better trained. In the end <<name $g.fighter>> and <<name $g.raider>> pushed back to the caravan itself, and the ensuing panic sent the wagons with the _goods soff the cliff, which was just as well. The caravanners morale broke at that point and they started to run, allowing your slavers to pick through the remains of the caravan at leisure, even if they didn't get any of the truly valuable cargo.
</p>
<p>
Unfortunately the survivors recognised <<name $g.raider>> and at least one Toran merchant is even more inclined to hate you now.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Despite spending days in the windy peaks your slavers never saw another soul. It looks like you had the wrong path, and they returned to the fort empty handed.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
With no real cover to speak of, your slavers concealed themselves around a bend and attacked the moment the first of their scouts rounded it. While their screams alerted the rest of the caravan, their choices were rushing your slavers, or turning around. They chose to rush you and their superior numbers proved to be your undoing.
<<if $gQuest.getSeed() % 3 == 0>>
<<name $g.scout>> was thrown off the mountain and hurtled out into the empty void
<<if $g.scout.isHasTrait('skill_flight')>>
, but was able to use their <<uwings $g.scout>> to stop their fall. However, with only <<name $g.fighter>> and <<name $g.raider>> in the fight, it went very badly, and your slavers were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<elseif $g.scout.isHasAnyTraitExact(['magic_wind', 'magic_wind_master'])>>
, but was able to summon air currents to bring <<them $g.scout>> back to safe ground. However, with only <<name $g.fighter>> and <<name $g.raider>> in the fight, it went very badly, and your slavers were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<else>>
<<set _flyer = setup.selectUnit([$g.fighter, $g.raider], {trait: 'skill_flight'})>>
<<if _flyer>>
, but <<name _flyer>> was able to swoop down and catch <<them $g.scout>>, although they landed far down the mountainside in a tumble of arms and legs. Meanwhile, the caravan moved on, unimpeded by the ambush, and leaving all three of your slavers badly injured.
<<else>>
<<set _mage = setup.selectUnit([$g.fighter, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _mage>>
. <<name _mage>> summoned air currents to bring <<them $g.scout>> back to safe ground, but the magic went awry when <<name _mage>> was knocked unconscious. It took reinforcements from the fort the better part of a day to find them all, and recovery is going to take some time. Possibly a lot of it.
<<run setup.qc.Injury('scout', 24).apply ($gQuest)>>
<<else>>
, and tumbled out of sight. It took a few days for reinforcements from the fort to find <<their $g.scout>> broken body in the ravine below. Or what at least was left of it.
<<run setup.qc.MissingUnitForever('scout').apply($gQuest)>>
<</if>>
<</if>>
<</if>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<name $g.fighter>> was thrown off the mountain and hurtled out into the empty void
<<if $g.fighter.isHasTrait('skill_flight')>>
, but was able to use their <<uwings $g.fighter>> to stop <<their $g.fighter>> fall. However, with only <<name $g.scout>> and <<name $g.raider>> in the fight, it went very badly, and they were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<elseif $g.fighter.isHasAnyTraitExact(['magic_wind', 'magic_wind_master'])>>
, but was able to summon air currents to bring <<them $g.fighter>> back to safe ground. However, with only <<name $g.scout>> and <<name $g.raider>> in the fight, it went very badly, and they were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<else>>
<<set _flyer = setup.selectUnit([$g.scout, $g.raider], {trait: 'skill_flight'})>>
<<if _flyer>>
, but <<name _flyer>> was able to swoop down and catch <<them $g.fighter>>, although they landed far down the mountainside in a tumble of arms and legs. Meanwhile, the caravan moved on, unimpeded by the ambush, and leaving all three of your slavers badly injured.
<<else>>
<<set _mage = setup.selectUnit([$g.scout, $g.raider], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _mage>>
. <<name _mage>> summoned air currents to bring <<them $g.fighter>> back to safe ground, but the magic went awry when <<name _mage>> was knocked unconscious. It took reinforcements from the fort the better part of a day to find them all, and recovery is going to take some time. Possibly a lot of it.
<<run setup.qc.Injury('fighter', 24).apply($gQuest)>>
<<else>>
, and tumbled out of sight. It took a few days for reinforcements from the fort to find <<their $g.fighter>> broken body in the ravine below. Or what at least was left of it.
<<run setup.qc.MissingUnitForever('fighter').apply($gQuest)>>
<</if>>
<</if>>
<</if>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<name $g.raider>> was thrown off the mountain and hurtled out into the empty void
<<if $g.raider.isHasTrait('skill_flight')>>
, but was able to use their <<uwings $g.raider>> to stop <<their $g.raider>> fall. However, with only <<name $g.fighter>> and <<name $g.raider>> in the fight, it went very badly, and they were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<elseif $g.raider.isHasAnyTraitExact(['magic_wind', 'magic_wind_master'])>>
, but was able to summon air currents to bring <<them $g.raider>> back to safe ground. However, with only <<name $g.scout>> and <<name $g.fighter>> in the fight, it went very badly, and they were lucky the caravanners moved on rather than throwing both of them off the mountain as well.
<<else>>
<<set _flyer = setup.selectUnit([$g.scout, $g.fighter], {anytrait: ['skill_flight']})>>
<<if _flyer>>
, but <<name _flyer>> was able to swoop down and catch <<them $g.raider>>, although they landed far down the mountainside in a tumble of arms and legs. Meanwhile, the caravan moved on, unimpeded by the ambush, and leaving all three of your slavers badly injured.
<<else>>
<<set _mage = setup.selectUnit([$g.scout, $g.fighter], {anytrait: ['magic_wind', 'magic_wind_master']})>>
<<if _mage>>
. <<name _mage>> summoned air currents to bring <<them $g.raider>> back to safe ground, but the magic went awry when <<name _mage>> was knocked unconscious. It took reinforcements from the fort the better part of a day to find them all, and recovery is going to take some time. Possibly a lot of it.
<<run setup.qc.Injury('raider', 24).apply ($gQuest)>>
<<else>>
, and tumbled out of sight. It took a few days for reinforcements from the fort to find <<their $g.raider>> broken body in the ravine below. Or what at least was left of it.
<<run setup.qc.MissingUnitForever('raider').apply($gQuest)>>
<</if>>
<</if>>
<</if>>
<</if>>
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains, and they started to feel uncomfortably hot.
<<name $g.scout>> found a small spring and pool of water at the base of the rock—likely a watering point, and a good spot for an ambush. Looking around, your slavers found some places to hide from the sight of any caravans coming through the nearby mountain pass.
<<if $gOutcome == 'crit'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<p>
They also brought back a potential slave, who is now awaiting your pleasure in the fort's slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
After several hours in the baking sun your slavers were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate. There would be other caravans to ambush and <<name $g.raider>> really couldn't be bothered with that one - assuming it ever turned up.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, , but <<name $g.fighter>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman $g.fighter>> down in the fight didn't help when your slavers were already outnumbered, and they were forced to flee, all of them nursing injuries as they headed back toward the fort.
</p>
<</if>>
<<elseif _location == "oasis">>
a lush oasis, a haven of greenery and water in an otherwise inhospitable landscape.
<<if $gOutcome == 'crit'>>
<p>
Your slavers feasted on date palms as they waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while your slavers usually had to wait until nightfall to spring ambushes, they found themselves waiting until the sun was high in the sky before <<name $g.scout>> was confident that all of the caravanners had found sleep.
</p>
<p>
<<if _goods == "myrrh" or _goods == "turquoise">>
It took <<name $g.raider>> a bit of time to find the right chest, but in the end <<they $g.raider>> found the small volume of _goods hidden away at the bottom of the stockpile, and decided it was easiest to leave with the most valuable of the trade goods. After all, it was the shipment your slavers were being paid to intercept.
<<elseif _goods == "gold">>
It took <<name $g.raider>> a bit of time to find the right chest, but in the end <<they $g.raider>> found the small volume of _goods hidden away at the bottom of the stockpile, and decided it was easiest to leave with the most valuable of the trade goods. After all, it was the shipment your slavers were being paid to intercept, and the chest was heavier than it looked.
<<elseif _goods == "honey ants">>
<<name $g.scout>> got lucky and found the padded and ventilated box of honey ants under shade cloth near the caravan's food stores. Opening the box <<they $g.scout>> was somewhat surprised to see the ant heads turn towards <<them $g.scout>>, but then, of course. The sweet honey the ants held inside their bloated abdomens would keep them alive during travel. <<name $g.scout>> contemplated eating one, as such a delicacy was typically reserved for the <<rep $company.royal>>, sometimes dipped into the finest chocolate, but decided that could wait until <<they $g.scout>> was clear of the camp.
<<elseif _goods == "chickpeas">>
The sacks of hard, dried chickpeas were easy to find, and your slavers spent almost an hour carrying them off into the reeds, slitting them open and letting the legumes fall into the water and the fine silt below. The reeds ensured that even if the caravan was so inclined, sifting the mud to recover the chickpeas would be a fruitless endeavour.
<<else>>
The pottery turned out to be mostly drinking bowls and a good number of amphorae, most of them depicting men engaging in various forms of sexual intercourse, although there are some depicted mixed couples or orgies, and a few that only show women. <<name $g.fighter>> contemplated bringing it back with <<them $g.fighter>> but the sheer amount ws more than your slavers could carry.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
After some consideration, <<name _unit>> used <<their _unit>> magic to turn most of the pottery into clay dust, your slavers keeping the few pieces that had especially caught their eyes.
<<else>>
In the end, there was nothing for it but to start smashing, a process that was quick, but noisy. The fact that the camp was asleep helped your slavers escape without injury, but <<name $g.scout>> was certain they were identified, and the raid will certainly be reported to the authorities in the <<lore region_city>>.
<<run setup.qc.Ire('humankingdom', 2).apply($gQuest)>>
<</if>>
<</if>>
</p>
<p>
As they were leaving, <<name $g.raider>> was able to capture a sleepy eyed caravanner stumbling from their tent, and you're able to add a potential <<urace $g.slaves>> slave to your bounty for this job.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers feasted on date palms as they waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while your slavers usually had to wait until nightfall to spring ambushes, they found themselves waiting until the sun was high in the sky before <<name $g.scout>> was confident that all of the caravanners had found sleep.
</p>
<p>
<<if _goods == "myrrh" or _goods == "turquoise">>
It took <<name $g.raider>> a bit of time to find the right chest, but in the end <<they $g.raider>> found the small volume of _goods hidden away at the bottom of the stockpile, and decided it was easiest to leave with the most valuable of the trade goods. After all, it was the shipment your slavers were being paid to intercept. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "gold">>
It took <<name $g.raider>> a bit of time to find the right chest, but in the end <<they $g.raider>> found the small volume of _goods hidden away at the bottom of the stockpile, and decided it was easiest to leave with the most valuable of the trade goods. After all, it was the shipment your slavers were being paid to intercept, and the chest was heavier than it looked. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "honey ants">>
<<name $g.scout>> got lucky and found the padded and ventilated box of honey ants under shade cloth near the caravan's food stores. Opening the box <<they $g.scout>> was somewhat surprised to see the ant heads turn towards <<them $g.scout>>, but then, of course. The sweet honey the ants held inside their bloated abdomens would keep them alive during travel. <<name $g.scout>> contemplated eating one, as such a delicacy was typically reserved for the <<rep $company.royal>>, sometimes dipped into the finest chocolate, but decided that could wait until <<they $g.scout>> was clear of the camp. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<elseif _goods == "chickpeas">>
The sacks of hard, dried chickpeas were easy to find, and your slavers spent almost an hour carrying them off into the reeds, slitting them open and letting the legumes fall into the water and the fine silt below. The reeds ensured that even if the caravan was so inclined, sifting the mud to recover the chickpeas would be a fruitless endeavour. Unfortunately, you heard a shout of alarm as you were collecting the last few bags, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<else>>
The pottery turned out to be mostly drinking bowls and a good number of amphorae, most of them depicting men engaging in various forms of sexual intercourse, although there are some depicted mixed couples or orgies, and a few that only show women. <<name $g.fighter>> contemplated bringing it back with <<them $g.fighter>> but the sheer amount ws more than your slavers could carry.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_earth', 'magic_earth_master']})>>
<<if _unit>>
After some consideration, <<name _unit>> used <<their _unit>> magic to turn most of the pottery into clay dust, your slavers keeping the few pieces that had especially caught their eyes. Unfortunately, you heard a shout of alarm as you were leaving, and you were forced to run to clear the area as guards and caravanners started stumbling out of their tents.
<<else>>
In the end, there was nothing for it but to start smashing, a process that was quick, but noisy, and definitely roused the camp from their sleep.
<</if>>
<</if>>
The element of surprise helped your slavers escape without injury, but <<name $g.scout>> was certain they were identified, and the raid will certainly be reported to the authorities in the <<lore region_city>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slaver feasted on date palms as they waited, venturing out from your hiding places to gather more dates and other fruits.<br>
"I'm amazed no-one's settled here," <<name $g.fighter>> said as <<they $g.fighter>> waited at the base of the date palm. <br>
"Don't say that," <<name $g.raider>>chided them. "Every time anyone says something like that we get to find out the answer and it's always not good."<br>
"That's—"<br>
A loud, choral warcry rent the air.<br>
"What was—" <<name $g.raider>>started even as <<name $g.scout>> all but jumped down from the date palm.<br>
"Orc raiders!" <<name $g.scout>> hissed urgently. "And I'm pretty sure they saw me. Run!"<br>
Given the distance and the cover of the vegetation, your slavers were able to outrun the orcs, but it also meant they had to abandon the job and head back to the fort. You hoped the orcs might raid the caravan, but you later hear of its safe arrival at Lucgate.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Your slavers feasted on date palms as they waited, hidden in the tall grasses beside the water. When the caravan arrived they set up camp not far from the water's edge, settling in for the day. Still, the heat of the sun was less harsh in the shade of the trees, and while your slavers usually had to wait until nightfall to spring ambushes, they found themselves waiting until the sun was high in the sky before <<name $g.scout>> was confident that all of the caravanners had found sleep.
</p>
<p>
Sneaking into the encampment, your slavers soon realised that the caravan was carrying much more than just _goods and you were going to have to do some searching. Unfortunately, <<name $g.fighter>> knocked over a stack of crates, which fell with a series of loud crashes, followed by the sound of pottery breaking.<br>
"Oops," was all <<they $g.fighter>> managed to say before guards and caravanners all but erupted from the tents.
</p>
<p>
Your slavers were soundly beaten, and the guards kept themall tied up until the caravan moved on that evening. Broken, bruised and violated, they made their back to the fortress.
</p>
<</if>>
<<else>>
a nondescript section of road, almost lost under the sands of the desert, but marked with a weathered waystone with a number carved into it that's barely readable. <<name $g.raider>> thought it was a sixty seven. Or maybe a sixty nine.
<<if $gOutcome == 'crit'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where your slavers were able to escape the heat of the day. When night came around, they waitedjust at the ridge of the dunes overlooking the road and waiting for the caravan to come by. When it finally did, <<name $g.scout>> and <<name $g.fighter>> ran towards the caravan, throwing pots of alchemist's fire and drawing the attention of the guards while <<name $g.raider>> went directly to the water barrels and laid into them with an axe.
</p>
<p>
By the time the guards realised their mistake and headed back towards the water stores, it was too late, and <<name $g.scout>> was able to score a direct hit on the cargo wagons with a pot of alchemists fire. Between burning cargo, panicking camels and no water to speak of, the caravan would, at the very least, be forced to turn around. Based on <<name $g.scout>>'s best recollection, the nearest watering hole was a week away. They'd be lucky if any of them made it.
</p>
<p>
As your slavers left, <<name $g.fighter>> managed to capture of the guards who had rushed to intercept <<them $g.fighter>>, and the <<woman $g.slaves>> is now corraled inside your slave pen, awaiting your pleasure. Or displeasure.
</p>
<<elseif $gOutcome == 'success'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where your slavers were able to escape the heat of the day. When night came around, they waitedjust at the ridge of the dunes overlooking the road and waiting for the caravan to come by. When it finally did, <<name $g.scout>> and <<name $g.fighter>> ran towards the caravan, throwing pots of alchemist's fire and drawing the attention of the guards while <<name $g.raider>> went directly to the water barrels and laid into them with an axe.
</p>
<p>
By the time the guards realised their mistake and headed back towards the water stores, it was too late, and <<name $g.scout>> was able to score a direct hit on the cargo wagons with a pot of alchemists fire. Between burning cargo, panicking camels and no water to speak of, the caravan would, at the very least, be forced to turn around. Based on <<name $g.scout>>'s best recollection, the nearest watering hole was a week away. They'd be lucky if any of them made it.
</p>
<p>
Some time later, you hear the tale of a plucky survivor, who drank the blood of a camel in order to get back to civilisation alive. They also blamed <<rep $company.player>> for the raid on their caravan, and you just know that's going to get back to the merchant princes of Lucgate.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where your slavers were able to escape the heat of the day. Unfortunately a sandstorm blew up out of nowhere and they were all buried alive. Thankfully <<name $g.fighter>> managed to dig them out, but with sand everywhere, heavily abraded skin and no sign of your quarry, your slavers headed back to the fort to lick their wounds.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<name $g.scout>> scout|was able to find a hollow of rock where you all were able to escape the heat of the day. When night fell, <<name $g.fighter>> had the bright idea to have them all of bury themselves in the loose sand of the dune close to the road, so they'd be able to spring out and attack the caravan's water supplies.
</p>
<p>
With the three of them carefully hidden they settled in to wait, and it didn't take long for the caravan to appear. <<name $g.raider>> waited, muscles tense for the right moment, and as the supply wagons rolled along mere feet from <<them $g.raider>>, <<they $g.raider>> pushed <<their $g.raider>> way up out of the sand with <<their $g.raider>> best warcry, only to find <<themselves $g.raider>> alone, and quickly surrounded by guards. A torrent of curses drew <<their $g.raider>> attention to where <<name $g.scout>> and <<name $g.fighter>> were stuggling, half buried in the sand with smirking caravan guards standing over them, weapons drawn.<br>
"Sorry <<name $g.raider>>," <<name $g.fighter>> said sheepishly. "Got stuck."<br>
The guards left your slavers bloody, beaten and buried up to their necks in sand. They were able to get out eventually, but by that time the sun was high in the sky and the caravan had long gone.
</p>
<</if>>
<</if>>
<</if>><<set _criteriaraider = new setup.UnitCriteria(
null, /* key */
'Raider-Inventor', /* name */
[
setup.trait.bg_engineer,
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Spotter', /* name */
[
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eyes_neko,
setup.trait.eyes_dragonkin,
],
[
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 3,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_kingdom_of_tor_', /* key */
"A Merchant\'s Revenge: Caravan Raid (Kingdom of Tor)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'money',
'unit',
'ire',
'city',
],
1, /* weeks */
2, /* expiration weeks */
{ /* roles */
'fighter': [ setup.qu.fighter, 1],
'raider': [ _criteriaraider, 1],
'scout': [ _criteriascout, 1],
},
{ /* actors */
'slaves': 'a_merchant_s_revenge_caravan_raid_western_forest_1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_caravan_raid_kingdom_of_tor_',
setup.qdiff.hard43, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_kingdom_of_tor_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Slave('slaves', "a|was a member of a Toran caravan, captured by your slavers in a raid", undefined),
setup.qc.MoneyCustom(1500),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_kingdom_of_tor_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.MoneyCustom(2500),
setup.qc.Ire('humankingdom', 2),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_kingdom_of_tor_Crit',
[
setup.qc.TraumatizeRandom('scout', 5),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_kingdom_of_tor_Crit',
[
setup.qc.OneRandom([
setup.qc.Injury('scout', 1),
setup.qc.Injury('scout', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 1),
setup.qc.Injury('fighter', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 1),
setup.qc.Injury('raider', 2)
]),
setup.qc.Ire('humankingdom', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
],
[ /* expiration outcomes */
],
)>>/* mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
*/
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
I have been made aware of a caravan carrying a shipment of
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "marble">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "wheat">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "apples">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "ale">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "linen">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "iron ingots">>
<</if>>
<<= _goods>>
is due to arrive at Lucgate very shortly. The matter is of urgency as the caravan originates inside the Kingdom. The usual bonus will apply if you can prevent it from reaching the city.
</p>
</div>
<p>
Turning the note over, you see a hastily sketched map showing
<<if $gQuest.getSeed() % 5 == 0>>
a shallow ford over the <<lore geo_cerna>>.
<<set _location = "river">>
<<elseif $gQuest.getSeed() % 5 == 1>>
a cobbled road leading north past large swathes of farmland.
<<set _location = "farmland">>
<<elseif $gQuest.getSeed() % 5 == 2>>
a rocky outcrop in the foothills of the western mountains.
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
a rocky beach along the southern coastline.
<<set _location = "beach">>
<<elseif $gQuest.getSeed() % 5 == 4>>
a lakeside trail in the western marches.
<<set _location = "lake">>
<</if>>
While it looks possible to stage an ambush there, but the area is more heavily populated than you'd normally like. The chances of being seen are...a lot higher.
</p>/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "marble">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "wheat">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "apples">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "ale">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "linen">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "iron ingots">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "river">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "farmland">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "foothills">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "beach">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "lake">>
<</if>>
<<if $g.scout.getHomeland() == setup.Text.Race.REGIONS.city>>
Being very familiar with the lands around the fort,
<<else>>
After a bit of time with the map,
<</if>>
<<if $g.scout.isYou()>>
you guided your slavers to
<<else>>
<<name $g.scout>> guided your slavers to
<</if>>
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "river">>
a shallow section of the <<lore geo_cerna>>, not too far from your fort, and a favoured crossing point for travellers. The issue wasn't going to be ambushing the caravan—the issue was going to be getting away unseen.
<<if $gOutcome == 'crit'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road - leaving only a token guard outside. At that point your slavers moved back from their vantage points to rest until the dark of night.
<<if $unit.player.isHasAnyTraitExact(["per_lunatic", "per_evil"])>>
Attacking the inn was always an option. Or burning it. After all, they set up business close to your fort, they knew the risks. Still, you had to be quiet. After all, you
<<else>>
You normally didn't bother the inn. It was a simple matter of not shitting where you ate. Still, killing them all meant... except, you didn't have to kill them. You
<</if>>
just needed the goods. And the ford with its rough water was right there.
</p>
With the clouds covering the moon, you led your slavers around the back of the inn, easily subduing the single guard hiding inside the doorway in an attempt to keep warm.
<<if _goods == "ale">>
Once inside you quickly smashed open the barrels of ale and headed back to the ford.
<<elseif _goods == "marble">>
<p>
It was unclear if the marble slabs were going to be continuing on road on drays, or floated down the river on barges.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their familiarity with earth magic to turn the marble into mud, which filled the bottom of the drays with a thick layer of sludge.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth_master'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their mastery of earth magic to turn the marble into sand, which immediately started to fall through the cracks of the drays to the floor.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<<elseif _goods == "wheat" or _goods == "apples">>
<p>
It was a simple enough matter to tip the _goods into the river, and you were able to call it a job well done.
</p>
<<elseif _goods == "linen">>
<p>
After securing a few bolts for
<<if $fort.player.isHasBuilding("workshop")>>
your tailor,
<<else>>
yourself,
<</if>>
you, <<name _o1>> and <<name _o2>> took your knives and started cutting and stabbing into the remaining fabric. It wouldn't make it completely unsellable, but much of it would be useless for anything except rags.
</p>
<<else>>
<p>
The heavy load of iron ingots was a problem. They were heavy and they were difficult to break.
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> mastery of fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<</if>>
<p>
As you headed back across the ford, <<name _o2>> carried the guard back over <<their _o2>> shoulder. <<They $g.slaves>> might have seen your faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road - leaving only a token guard outside. At that point your slavers moved back from their vantage points to rest until the dark of night.
<<if $unit.player.isHasAnyTraitExact(["per_lunatic", "per_evil"])>>
Attacking the inn was always an option. Or burning it. After all, they set up business close to your fort, they knew the risks. Still, you had to be quiet. After all, you
<<else>>
You normally didn't bother the inn. It was a simple matter of not shitting where you ate. Still, killing them all meant... except, you didn't have to kill them. You
<</if>>
just needed the goods. And the ford with its rough water was right there.
</p>
With the clouds covering the moon, you led your slavers around the back of the inn, easily subduing the single guard hiding inside the doorway in an attempt to keep warm.
<<if _goods == "ale">>
Once inside you quickly smashed open the barrels of ale and headed back to the ford.
<<elseif _goods == "marble">>
<p>
It was unclear if the marble slabs were going to be continuing on road on drays, or floated down the river on barges.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their familiarity with earth magic to turn the marble into mud, which filled the bottom of the drays with a thick layer of sludge.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth_master'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their mastery of earth magic to turn the marble into sand, which immediately started to fall through the cracks of the drays to the floor.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<<elseif _goods == "wheat" or _goods == "apples">>
<p>
It was a simple enough matter to tip the _goods into the river, and you were able to call it a job well done.
</p>
<<elseif _goods == "linen">>
<p>
After securing a few bolts for
<<if $fort.player.isHasBuilding("workshop")>>
your tailor,
<<else>>
yourself,
<</if>>
you, <<name _o1>> and <<name _o2>> took your knives and started cutting and stabbing into the remaining fabric. It wouldn't make it completely unsellable, but much of it would be useless for anything except rags.
</p>
<<else>>
<p>
The load of iron ingots was a problem. They were heavy and they were difficult to break.
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used their fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used their mastery of fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<</if>>
<p>
Unfortunately it appears that someone had been watching you from inside the inn, and the blame for the raid is very squarely placed at your feet. Either that, or people have just assumed given your fort's proximity to ford.
</p>
<<elseif $gOutcome == 'failure'>>
<<if _goods == "marble" or _goods == "iron ingot">>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road. At that point your slavers moved back from their vantage points to rest until the dark of night.
<<if $unit.player.isHasAnyTraitExact(["per_lunatic", "per_evil"])>>
Attacking the inn was always an option. Or burning it. After all, they set up business close to your fort, they knew the risks. Still, you had to be quiet. After all, you
<<else>>
You normally didn't bother the inn. It was a simple matter of not shitting where you ate. Still, killing them all meant... except, you didn't have to kill them. You
<</if>>
just needed the goods. And the ford with its rough water was right there, and they hadn't placed guards outside. Amateurs.
</p>
<p>
It was unclear if the _goods were going to be continuing on road on drays, or floated down the river on barges. There were barges though, and your slavers toiled for several hours to load them with the _goods, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
</p>
<p>
Unfortunately, they didn't go as far as you'd hoped, and at the end of the week you heard stories of how the caravanners had found the sunken barges and dredged up their trade goods, even if they hadn't worked out who was behind the botched theft.
</p>
<<else>>
<p>
You arrived at your vantage point overlooking the ford just in time to see the caravans had finished crossing. Caravans. Apparently your target had made friends on the road.
<<if $unit.player.isHasTrait('per_aggressive')>>
Your first instinct was to attack anyway, but you
<<elseif $unit.player.isHasTrait('per_cautious')>>
Peering down over the caravans, you
<<else>>
You
<</if>>
could tell moving against their combined numbers with your two slavers would be a recipe for disaster, and it was with some regret that you turned around and headed back to the fort.
</p>
<</if>>
<<elseif $gOutcome == 'disaster'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road - leaving only a token guard outside. At that point your slavers moved back from their vantage points to rest until the dark of night.
<<if $unit.player.isHasAnyTraitExact(["per_lunatic", "per_evil"])>>
Attacking the inn was always an option. Or burning it. After all, they set up business close to your fort, they knew the risks. Still, you had to be quiet. After all, you
<<else>>
You normally didn't bother the inn. It was a simple matter of not shitting where you ate. Still, killing them all meant... except, you didn't have to kill them. You
<</if>>
just needed the goods. And the ford with its rough water was right there.
</p>
<p>
With the clouds covering the moon, you led your slavers around the back of the inn, only to be confronted by about a dozen guards.<br>
"We thought you lot might show up," one scarred veteran said, grinning evilly. "I don't think you're going to like what we have in store for you filthy pigs<br>
</p>
<p>
You and your slavers sustained a number of injuries as you fled back to the ford, and you're all lucky to have escaped with your lives.
</p>
<</if>>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving you with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'crit'>>
<p>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
Given the lack of cover, <<name _unit>> had the bright idea of donning tabards that looked, in bad light, not too dissimilar to those worn by the Knights of Tor. Given it would be nearly impossible to evade the eyes of the peasants in the fields, <<they _unit>> suggested the easiest solution was to not hide at all.
<</if>>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Your ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who you easily overpowered. After finding the cargo of _goods intact, you decided to drive it back to your fort instead. You'd find some use for it, even if it was just selling it somewhere else.
</p>
<p>
You also brought back the last surviving member of the caravan, who surrendered rather than be put to the sword. Now you just have to decide if <<they $g.slaves>>'s worth keeping.
</p>
<<elseif $gOutcome == 'success'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Your ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who you easily overpowered. After finding the cargo of _goods intact, you decided to drive it back to your fort instead. You'd find some use for it, even if it was just selling it somewhere else.
</p>
<p>
Unfortunately you didn't account for the farmers who witnessed the fight and tended to the wounded who scattered into the surrounding farmland. Your name is cursed throughout the Kingdom and you may find the Toran people harder to deal with in the future.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, you never saw the caravan, and after a while you felt a bit foolish standing poorly concealed within a copse of trees - especially when you noticed the farmers staring at you. You considered taking one of them as a slave, but they already knew you were there, and you didn't really feel like running after them through the fields.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
You ended up taking up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, the cover was sparse, and the caravan guards spotted <<name $g.fighter>> before they got too close. You and your slavers were forced to flee under a barrage of crossbow bolts, and limped back to the fort empty handed.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains,
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
and to you it felt like the first time you'd been warm in months.
<<else>>
and you started to feel uncomfortably hot.
<</if>>
You did find a small spring and pool of water at the base of the rock—this was likely a watering point, and a very promising ambush spot. You directed your slavers to find hiding places where they'd be concealed from any caravans coming through the nearby mountain pass, and then settled in to wait.
<<if $gOutcome == 'crit'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course, that was when you struck, raining arrows down from above before closing in and taking on the rest in combat. The few guards were no match for your seasoned veterans, and you soon found yourself in possession of a wagonload of _goods.
</p>
<p>
You also had a trussed up new slave to take home with you. Or potential slave. Good times.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course, that was when you struck, raining arrows down from above before closing in and taking on the rest in combat. The few guards were no match for your seasoned veterans, and you soon found yourself in possession of a wagonload of _goods.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<if $unit.player.getHomeland() == setup.Text.Race.REGIONS.desert>>
When the sun dipped down below the horizon with no sign of the caravan, you inspected the spring more closely, and found recent tracks of humans, wagons and horses. It appeared that they'd already passed, and you'd missed the window of opportunity.
<<else>>
After several hours in the baking sun you were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate, and you decided to head back to the fort. There would be other caravans to ambush and you really couldn't be bothered with that one.
<</if>>
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. That was when you struck, but <<name _o2>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman _o2>> down in the fight didn't help when you were already outnumbered, and you were forced to flee, all of you nursing injuries as you headed back toward the fort.
</p>
<</if>>
<<elseif _location == "beach">>
a windswept gravel beach, covered with driftwood and piles of seaweed turning silver as it dried and smelling strongly of salt.
<<if $gOutcome == 'crit'>>
<p>
Taking up positions inside the treeline, you waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. Then two longboats, laden with supplies were lowered into the water and rowed their way to the shore.
</p>
<p>
Waiting until they had unloaded all their goods,
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
<<name _unit>> used their control of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
<<name _unit>> used their mastery of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
your slavers threw bottles of alchemist's fire onto the longboats, setting them aflame and cutting the smugglers on the beach off from their allies on the schooner.
<</if>>
<</if>>
</p>
<p>
You fell upon the smugglers like a pack of hungry wolves and soon had them all defeated. Looking up you saw the schooner slip out of the bay, and you could only hope the captain either wouldn't recognise you, or wouldn't speak of it. After all, they'd already been paid for their services, and hopefully handsomely enough to replace two longboats.
<<if _goods == "marble" or _goods == "iron ingot">>
The fire hadn't done significant damage to the _goods, so you ended up loading them into your own wagon. You'd find some use for it, even it was just selling them on.
<<else>>
The fire and water had damaged the _goods to the point of ruin, and your job here was done.
<</if>>
Leaving the beach you returned to the fort with the one remaining smuggler in tow. Hopefully they'd make a worthwhile—and profitable—slave.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Taking up positions inside the treeline, you waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. Then two longboats, laden with supplies were lowered into the water and rowed their way to the shore.
</p>
<p>
Waiting until they had unloaded all their goods,
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
<<name _unit>> used their control of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
<<name _unit>> used their mastery of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
your slavers threw bottles of alchemist's fire onto the longboats, setting them aflame and cutting the smugglers on the beach off from their allies on the schooner.
<</if>>
<</if>>
</p>
<p>
You fell upon the smugglers like a pack of hungry wolves and soon had them all defeated. Looking up you saw the schooner slip out of the bay, and you could only hope the captain either wouldn't recognise you, or wouldn't speak of it. After all, they'd already been paid for their services, and hopefully handsomely enough to replace two longboats.
<<if _goods == "marble" or _goods == "iron ingot">>
The fire hadn't done significant damage to the _goods, so you ended up loading them into your own wagon. You'd find some use for it, even it was just selling them on.
<<else>>
The fire and water had damaged the _goods to the point of ruin, and your job here was done.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Taking up positions inside the treeline, you waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. They paused for a while, almost as if waiting, and <<name $g.scout>> could see there was a hurried conversation happening on the deck of the ship. Then, they reversed course and rowed their way back out into open water, leaving you cursing your luck. You didn't think you'd been seen, but clearly something had spooked them.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Taking up positions inside the treeline, you waited for the smugglers to arrive. Unfortunately, the first thing to arrive were a pair of large crocodiles, who rushed up from the estuary and attacked <<name _o1>>, probably in search of an easy meal. Caught by surprise, you and your slavers fought valiantly to extricate themselves from the fight, and while the wounds you sustained weren't major, you all developed a fever and the wounds swelled painfully, probably something from the bite of those carrion eaters.
</p>
<p>
You never saw the smugglers, and after the crocodiles, you didn't feel like waiting around for them any longer
</p>
<</if>>
<<else>>
a shores of a placid blue lake out in the western marches. It seemed strange to you that such an idyllic place had not been settled, but it was very far from the city—and it was close enough to the Western Forest that anyone settling here risked being raided - or enslaved - by the elves. Or possibly you.
<<if $gOutcome == 'crit'>>
<p>
After a brief investigation, <<name _o1>> discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge you set up an ambush with the track between you and the lake, and waited for the caravan to arrive. When they did, you pushed them hard, and <<name _o2>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, you all saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback you and <<name _o1>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
In the end, all that was left were floating wooden remnants of the trade wagons, and one caravanner who had surrendered rather than face a watery death. The surface of the lake bubbled and roiled for a while before going completely still once more, only the flotsam and the red clouds of blood testament to the violence that had just transpired.
</p>
<<elseif $gOutcome == 'success'>>
<p>
After a brief investigation, <<name _o1>> discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge you set up an ambush with the track between you and the lake, and waited for the caravan to arrive. When they did, you pushed them hard, and <<name _o2>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, you all saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback you and <<name _o1>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
The surface of the lake bubbled and roiled for a while before going completely still once more, only the caravan flotsam and the red clouds of blood testament to the violence that had just transpired within its depths.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
After a brief investigation, <<name _o1>> discovered the lake was fairly deep, and dropped away quickly from the shore. <<They _o1>> also discovered the reason the lake hadn't been colonised when a large, green, slimy tentacle tried to wrap around <<their _o1>> leg. Jumping out of the water, you all backed away from the water's edge, and spied the caravan on the far side of the lake, their guards obviously having seen you. With the element of surprise lost and definitely outnumbered, you gave them a wave and turned to head back to the fort. You'd get the next caravan. This one was going to be far too much trouble.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
After a brief investigation, <<name _o1>> discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge you set up an ambush with the track between you and the lake, and waited for the caravan to arrive. When they did, you pushed them hard, and <<name _o2>> went straight for the horses, attempting to drive them into the waters of the lake.
</p>
<p>
Unfortunately, the caravan was well guarded, and one of the guards turned out to be highly proficient in water magic, creating a waterspout that picked you up and dropped you into the middle of the lake. Soon, <<name _o1>> and <<name _o2>> joined you in the water, and the caravan continued on, moving out of your reach long before you'd all reached the shore. Cursing your bad luck you headed back to the fort, hoping that you hadn't broken any bones over the course of that fight—and fall.
</p>
<</if>>
<</if>>
<<else>>
<<if _location == "river">>
a shallow section of the <<lore geo_cerna>>, not too far from your fort, and a favoured crossing point for travellers. The issue wasn't going to be ambushing the caravan—the issue was going to be getting away unseen.
<<if $gOutcome == 'crit'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road - leaving only a token guard outside. At that point your slavers moved back from their vantage points to rest until the dark of night.
</p>
With the clouds covering the moon, <<name $g.fighter>> led the way around the back of the inn, easily subduing the single guard hiding inside the doorway in an attempt to keep warm.
<<if _goods == "ale">>
Once inside your slavers quickly smashed open the barrels of ale and headed back to the ford.
<<elseif _goods == "marble">>
<p>
It was unclear if the marble slabs were going to be continuing on road on drays, or floated down the river on barges.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their familiarity with earth magic to turn the marble into mud, which filled the bottom of the drays with a thick layer of sludge.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth_master'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their mastery of earth magic to turn the marble into sand, which immediately started to fall through the cracks of the drays to the floor.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<<elseif _goods == "wheat" or _goods == "apples">>
<p>
It was a simple enough matter to tip the _goods into the river, and your slavers were able to call it a job well done.
</p>
<<elseif _goods == "linen">>
<p>
After securing a few bolts for
<<if $fort.player.isHasBuilding("workshop")>>
the tailor,
<<else>>
themselves,
<</if>>
your slavers took their knives and started cutting and stabbing into the remaining fabric. It wouldn't make it completely unsellable, but much of it would be useless for anything except rags.
</p>
<<else>>
<p>
The load of iron ingots was a problem. They were heavy and they were difficult to break.
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> mastery of fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<</if>>
<p>
As your slavers headed back across the ford, <<name $g.raider>> carried the guard back over <<their $g.raider>> shoulder. <<They $g.slaves>> might have seen your faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road - leaving only a token guard outside. At that point your slavers moved back from their vantage points to rest until the dark of night.
</p>
With the clouds covering the moon, <<name $g.fighter>> led the way around the back of the inn, easily subduing the single guard hiding inside the doorway in an attempt to keep warm.
<<if _goods == "ale">>
Once inside your slavers quickly smashed open the barrels of ale and headed back to the ford.
<<elseif _goods == "marble">>
<p>
It was unclear if the marble slabs were going to be continuing on road on drays, or floated down the river on barges.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their familiarity with earth magic to turn the marble into mud, which filled the bottom of the drays with a thick layer of sludge.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'magic_earth_master'})>>
<<if _unit>>
But the conundrum was solved when <<name _unit>> used their mastery of earth magic to turn the marble into sand, which immediately started to fall through the cracks of the drays to the floor.<br>
"Well, that was easy," <<name _unit>> said <<uadv _unit>>. "Shall we go?"
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<<elseif _goods == "wheat" or _goods == "apples">>
<p>
It was a simple enough matter to tip the _goods into the river, and your slavers were able to call it a job well done.
</p>
<<elseif _goods == "linen">>
<p>
After securing a few bolts for
<<if $fort.player.isHasBuilding("workshop")>>
the tailor,
<<else>>
themselves,
<</if>>
your slavers took their knives and started cutting and stabbing into the remaining fabric. It wouldn't make it completely unsellable, but much of it would be useless for anything except rags.
</p>
<<else>>
<p>
The load of iron ingots was a problem. They were heavy and they were difficult to break.
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
After a moment, <<name _unit>> shrugged.<br>
"Get ready to run back over the ford," <<they _unit>> said and then used <<their _unit>> mastery of fire magic to melt the ingots, turning them into a rapidly cooling mass that started both dripping through and burning the drays they were in, filling the stables with smoke. It wouldn't take long for the alarm to be raised.
<<else>>
There were barges though, and your slavers toiled for several hours to load them with the marble slabs, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
<</if>>
<</if>>
</p>
<</if>>
<p>
Unfortunately it appears that someone had been watching them from inside the inn, and the blame for the raid is very squarely placed at your feet. Either that, or people have just assumed given your fort's proximity to ford.
</p>
<<elseif $gOutcome == 'failure'>>
<<if _goods == "marble" or _goods == "iron ingot">>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road. At that point your slavers moved back from their vantage points to rest until the dark of night.
</p>
<p>
It was unclear if the _goods were going to be continuing on road on drays, or floated down the river on barges. There were barges though, and your slavers toiled for several hours to load them with the _goods, smash a hole in the side and set them adrift in the current. Hopefully by the time they sank they'd be stuck in rocks, or in deep, murky water.
</p>
<p>
Unfortunately, they didn't go as far as you'd hoped, and at the end of the week you heard stories of how the caravanners had found the sunken barges and dredged up their trade goods, even if they hadn't worked out who was behind the botched theft.
</p>
<<else>>
<p>
Your slavers arrived at their vantage point overlooking the ford just in time to see the caravans had finished crossing. Caravans. Apparently their target had made friends on the road. <<name $g.raider>> could tell moving against their combined numbers with only three slavers would be a recipe for disaster, and it was with some regret that they turned around and headed back to the fort.
</p>
<</if>>
<<elseif $gOutcome == 'disaster'>>
<p>
It was sundown when the caravan made it to the river, and rather than pitch a camp, most of them took rooms in the Inn at the far side of the road. At that point your slavers moved back from their vantage points to rest until the dark of night.
</p>
<p>
With the clouds covering the moon, <<name $g.fighter>> led the way around the back of the inn, only to be confronted by about a dozen guards.<br>
"We thought you lot might show up," one scarred veteran said, grinning evilly. "I don't think you're going to like what we have in store for you filthy pigs<br>
</p>
<p>
Your slavers sustained a number of injuries as you fled back to the ford, and you're all lucky to have escaped with your lives.
</p>
<</if>>
<<elseif _location == "farmland">>
a quiet rural road more used by farmers than traders. Unfortunately none of the crops appeared tall enough to hide in, leaving your slavers with hedgerows and the occasional strand of scrubby trees.
<<if $gOutcome == 'crit'>>
<p>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
Given the lack of cover, <<name _unit>> had the bright idea of donning tabards that looked, in bad light, not too dissimilar to those worn by the Knights of Tor. Given it would be nearly impossible to evade the eyes of the peasants in the fields, <<they _unit>> suggested the easiest solution was to not hide at all.
<</if>>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively, and their ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who were easily overpowered. After finding the cargo of _goods intact, <<name $g.raider>> decided to drive it back to your fort instead. There'd be some use for it, even if it was just selling it somewhere else.
</p>
<p>
They also brought back the last surviving member of the caravan, who surrendered rather than be put to the sword. Now you just have to decide if <<they $g.slaves>>'s worth keeping.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively, and their ambush threw the caravanners into disarray. Being a small caravan travelling along the quiet backroads, they had few guards, who were easily overpowered. After finding the cargo of _goods intact, <<name $g.raider>> decided to drive it back to your fort instead. There'd be some use for it, even if it was just selling it somewhere else.
</p>
<p>
Unfortunately they didn't account for the farmers who witnessed the fight and tended to the wounded who scattered into the surrounding farmland. <<rep $company.player>> is cursed throughout the Kingdom and you may find the Toran people harder to deal with in the future.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, they never saw the caravan, and after a while <<name $g.scout>> felt a bit foolish standing poorly concealed within a copse of trees - especially when <<they $g.scout>> noticed the farmers staring at them. <<name $g.raider>> considered taking one of them as a slave, but the farmers already knew your slavers were there, and <<they $g.raider>> didn't really feel like running after them through the fields.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Your slavers took up positions in a sloping area of covered in trees and scrub, clearly being too steep and rocky to farm productively. Unfortunately, the cover was sparse, and the caravan guards spotted <<name $g.fighter>> before they got too close. Your slavers were forced to flee under a barrage of crossbow bolts, and limped back to the fort empty handed.
</p>
<</if>>
<<elseif _location == "foothills">>
a crumbling outcrop of jagged rock, sticking up from the arid dirt of the eastern foothills. It wasn't as inhospitable as the desert over the mountains, and they started to feel uncomfortably hot.
<<name $g.scout>> found a small spring and pool of water at the base of the rock—likely a watering point, and a good spot for an ambush. Looking around, your slavers found some places to hide from the sight of any caravans coming through the nearby mountain pass.
<<if $gOutcome == 'crit'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<p>
They also brought back a potential slave, who is now awaiting your pleasure in the fort's slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, raining arrows down from above while <<name $g.fighter>> and <<name $g.raider>> charged in to engage the caravanners in melee. The few guards were no match for your seasoned veterans, and they soon found themselves in possession of a wagonload of _goods to bring home.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
After several hours in the baking sun your slavers were forced to seek shelter, and the prospect of waiting out there for several days became too much to contemplate. There would be other caravans to ambush and <<name $g.raider>> really couldn't be bothered with that one - assuming it ever turned up.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The traders came down from the foothills, although based on their garb they were bringing goods down from a mountain village rather than coming in from the desert. Still, none of them appeared fully comfortable in the heat and they headed straight for the spring to quench their thirst. Of course that was when <<name $g.scout>> launched the ambush, , but <<name $g.fighter>> stumbled as they leapt off the outcrop, and sprained their ankle upon landing. Being one <<woman $g.fighter>> down in the fight didn't help when your slavers were already outnumbered, and they were forced to flee, all of them nursing injuries as they headed back toward the fort.
</p>
<</if>>
<<elseif _location == "beach">>
a windswept gravel beach, covered with driftwood and piles of seaweed turning silver as it dried and smelling strongly of salt.
<<if $gOutcome == 'crit'>>
<p>
Taking up positions inside the treeline, your slavers waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. Then two longboats, laden with supplies were lowered into the water and rowed their way to the shore.
</p>
<p>
Waiting until they had unloaded all their goods,
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
<<name _unit>> used their control of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
<<name _unit>> used their mastery of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
your slavers threw bottles of alchemist's fire onto the longboats, setting them aflame and cutting the smugglers on the beach off from their allies on the schooner.
<</if>>
<</if>>
</p>
<p>
Your slavers fell upon the smugglers like a pack of hungry wolves and soon had them all defeated. Looking up <<name $g.scout>> saw the schooner slip out of the bay, and <<they $g.scout>> could only hope the captain either wouldn't recognise them, or wouldn't speak of it. After all, they'd already been paid for their services, and hopefully handsomely enough to replace two longboats.
<<if _goods == "marble" or _goods == "iron ingot">>
The fire hadn't done significant damage to the _goods, so your slavers ended up loading them into their own wagon. There'd be some use for the shipment, even it was just selling them on.
<<else>>
The fire and water had damaged the _goods to the point of ruin, and your slavers considered their job was done.
<</if>>
Leaving the beach they returned to the fort with the one remaining smuggler in tow. Hopefully <<they $g.slaves>>'d make a worthwhile—and profitable—slave.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Taking up positions inside the treeline, your slavers waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. Then two longboats, laden with supplies were lowered into the water and rowed their way to the shore.
</p>
<p>
Waiting until they had unloaded all their goods,
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire'})>>
<<if _unit>>
<<name _unit>> used their control of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
<<set _unit = setup.selectUnit([$g.fighter, $g.raider, $g.scout], {trait: 'magic_fire_master'})>>
<<if _unit>>
<<name _unit>> used their mastery of fire magic to set the longboats alight, cutting off the smugglers' escape routes and preventing any immediate reinforcements from the ship.
<<else>>
your slavers threw bottles of alchemist's fire onto the longboats, setting them aflame and cutting the smugglers on the beach off from their allies on the schooner.
<</if>>
<</if>>
</p>
<p>
Your slavers fell upon the smugglers like a pack of hungry wolves and soon had them all defeated. Looking up <<name $g.scout>> saw the schooner slip out of the bay, and <<they $g.scout>> could only hope the captain either wouldn't recognise them, or wouldn't speak of it. After all, they'd already been paid for their services, and hopefully handsomely enough to replace two longboats.
<<if _goods == "marble" or _goods == "iron ingot">>
The fire hadn't done significant damage to the _goods, so your slavers ended up loading them into their own wagon. There'd be some use for the shipment, even it was just selling them on.
<<else>>
The fire and water had damaged the _goods to the point of ruin, and your slavers considered their job was done.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Taking up positions inside the treeline, you waited for the smugglers to arrive. First a small, tattered schooner rowed into the bay, the wooden hull slipping into view through the mist. They paused for a while, almost as if waiting, and <<name $g.scout>> could see there was a hurried conversation happening on the deck of the ship. Then, they reversed course and rowed their way back out into open water, leaving your slavers cursing their luck. <<name $g.scout>> didn't think they'd been seen, but clearly something had spooked them.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Taking up positions inside the treeline, your slavers waited for the smugglers to arrive. Unfortunately, the first thing to arrive were a pair of large crocodiles, who rushed up from the estuary and attacked <<name $g.fighter>>, probably in search of an easy meal. Caught by surprise, your slavers fought valiantly to extricate themselves from the fight, and while the injuries they sustained weren't major, they all developed a fever and the wounds swelled painfully, probably something from the bite of those carrion eaters.
</p>
<p>
They never saw the smugglers, and after the crocodiles, they didn't feel like waiting around for them any longer
</p>
<</if>>
<<else>>
a shores of a placid blue lake out in the western marches. It seemed strange to <<name $g.scout>> that such an idyllic place had not been settled, but it was very far from the city—and it was close enough to the Western Forest that anyone settling here risked being raided - or enslaved - by the elves. Or even the catkin.
<<if $gOutcome == 'crit'>>
<p>
After a brief investigation, <<name $g.scout>>discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge your slavers set up an ambush with the track between them and the lake, and waited for the caravan to arrive. When it did, your slavers pushed them hard, and <<name $g.raider>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, your slavers saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback, <<name $g.scout>> and <<name $g.fighter>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
In the end, all that was left were floating wooden remnants of the trade wagons, and one caravanner who had surrendered rather than face a watery death. The surface of the lake bubbled and roiled for a while before going completely still once more, only the flotsam and the red clouds of blood testament to the violence that had just transpired.
</p>
<<elseif $gOutcome == 'success'>>
<p>
After a brief investigation, <<name $g.scout>>discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge your slavers set up an ambush with the track between them and the lake, and waited for the caravan to arrive. When it did, your slavers pushed them hard, and <<name $g.raider>> went straight for the horses, scaring them into the waters of the lake where they foundered and sunk, dragging the wagons in with them. Suddenly, your slavers saw slimy green tentacles wrench the horses under water, returning moments afterward to pull under those traders who had fallen into the water along with the wagons. Although momentarily taken aback, <<name $g.scout>> and <<name $g.fighter>> focused on forcing the guards back into the water and into the slimy embrace of whatever monster lived in the depths of the lake.
</p>
<p>
The surface of the lake bubbled and roiled for a while before going completely still once more, only the caravan flotsam and the red clouds of blood testament to the violence that had just transpired within its depths.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
After a brief investigation, <<name $g.fighter>> discovered the lake was fairly deep, and dropped away quickly from the shore. <<They $g.fighter>> also discovered the reason the lake hadn't been colonised when a large, green, slimy tentacle tried to wrap around <<their $g.fighter>> leg. Jumping out of the water, your slavers backed away from the water's edge, and spied the caravan on the far side of the lake, the guards obviously having seen them. With the element of surprise lost and definitely outnumbered, <<name $g.scout>> gave them a wave and turned to head back to the fort. They'd get the next caravan. This one was going to be far too much trouble.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
After a brief investigation, <<name $g.fighter>> discovered the lake was fairly deep, and dropped away quickly from the shore. With that knowledge your slavers set up an ambush with the track between you and the lake, and waited for the caravan to arrive. When they did, your slavers pushed them hard, and <<name $g.raider>> went straight for the horses, attempting to drive them into the waters of the lake.
</p>
<p>
Unfortunately, the caravan was well guarded, and one of them turned out to be highly proficient in water magic, creating a waterspout that picked <<name $g.raider>> up and dropped them into the middle of the lake. Soon, <<name $g.fighter>> and <<name $g.scout>> joined <<them $g.raider>> in the water, and the caravan continued on, moving out of their reach long before they reached the shore. Cursing their bad luck your slavers headed back to the fort, hoping that they hadn't broken any bones over the course of that fight—and fall.
</p>
<</if>>
<</if>>
<</if>><<set _criteriascout = new setup.UnitCriteria(
null, /* key */
'Scout (Sea)', /* name */
[
setup.trait.race_lizardkin,
setup.trait.subrace_humansea,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_wildman,
setup.trait.per_dreamy,
setup.trait.per_lunatic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 2,
arcane: 1,
}
)>>
<<set _criteriafighter = new setup.UnitCriteria(
null, /* key */
'Pirate', /* name */
[
setup.trait.race_lizardkin,
setup.trait.subrace_humansea,
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.tough_nimble,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_active,
setup.trait.per_playful,
setup.trait.skill_ambidextrous,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.subrace_humandesert,
setup.trait.per_studious,
setup.trait.per_dreamy,
setup.trait.per_serious,
setup.trait.per_submissive,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_blind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_southern_seas_', /* key */
"A Merchant\'s Revenge: Caravan Raid (Southern Seas)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'money',
'unit',
'ire',
'sea',
'danger',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scout': [ _criteriascout, 1],
'fighter': [ _criteriafighter, 1],
'raider': [ setup.qu.pirate, 1],
},
{ /* actors */
'slaves': 'sea_all',
'slave2': 'city_all',
'slave3': 'sea_all',
},
[ /* costs */
setup.qc.MoneyCustom(600),
],
'Quest_a_merchant_s_revenge_caravan_raid_southern_seas_',
setup.qdiff.harder46, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_southern_seas_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.MoneyCustom(4000),
setup.qc.OneRandomSeed([
setup.qc.Slave('slaves', "a|was a sailor on the southern seas before you captured them in a raid", undefined),
setup.qc.Slave('slave2', "a|was a sailor on the southern seas before you captured them in a raid", undefined),
setup.qc.Slave('slave2', "a|was a sailor on the southern seas before you captured them in a raid", undefined),
]),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_southern_seas_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Ire('humankingdom', 1),
setup.qc.MoneyCustom(5000),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_southern_seas_Crit',
[
setup.qc.TraumatizeRandom('scout', 30),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_southern_seas_Crit',
[
setup.qc.Ire('humankingdom', 4),
setup.qc.OneRandom([
setup.qc.Injury('scout', 4),
setup.qc.Injury('scout', 6)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 4),
setup.qc.Injury('fighter', 6)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 4),
setup.qc.Injury('raider', 6)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
],
[ /* expiration outcomes */
],
)>>/** mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
**/
<div class='lettercard'>
<p>
<<name $unit.player>>,
</p>
<p>
There is a trade shipment of
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "tea">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "cured sausages">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "fine silks">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "porcelain">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "spices">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "sugar">>
<</if>>
<<= _goods>>
due to arrive at the Port of Lucgate aboard
<<if $gQuest.getSeed() % 10 == 0>>
<<set _ship = "the Light of Dawn">>
<<elseif $gQuest.getSeed() % 10 == 1>>
<<set _ship = "the Nan Feng">>
<<elseif $gQuest.getSeed() % 10 == 2>>
<<set _ship = "the Dainty Sprite">>
<<elseif $gQuest.getSeed() % 10 == 3>>
<<set _ship = "the Joyful Damnation">>
<<elseif $gQuest.getSeed() % 10 == 4>>
<<set _ship = "the Kurāken no hitokuchi">>
<<elseif $gQuest.getSeed() % 10 == 5>>
<<set _ship = "the Graceful Ray">>
<<elseif $gQuest.getSeed() % 10 == 6>>
<<set _ship = "the Breath of Sobek">>
<<elseif $gQuest.getSeed() % 10 == 7>>
<<set _ship = "the Wu Lang">>
<<elseif $gQuest.getSeed() % 10 == 8>>
<<set _ship = "the Doragon Paru">>
<<elseif $gQuest.getSeed() % 10 == 9>>
<<set _ship = "the Serpant's Wing">>
<</if>>
_ship. If the winds remain good, you should be able to intercept them. Given the difficulty of this venture, a larger than normal bonus will apply should you be successful in preventing the shipment from arriving in Lucgate.
</p>
</div>
<p>
Along with the note you find a full set of navigation charts showing a plotted course to
<<if $gQuest.getSeed() % 5 == 0>>
an archipelago of tiny islands.
<<set _location = "archipelago">>
<<elseif $gQuest.getSeed() % 5 == 1>>
a coral atoll surrounded by shallow reefs.
<<set _location = "atoll">>
<<elseif $gQuest.getSeed() % 5 == 2>>
shipwreck coast. It's probably got another name, but no one uses it.
<<set _location = "shipwrecks">>
<<elseif $gQuest.getSeed() % 5 == 3>>
a secluded cove at the edge of uncharted land.
<<set _location = "cove">>
<<elseif $gQuest.getSeed() % 5 == 4>>
a busy trade port. A note is scrawled in a blank space on the map "this is the route they take - you'll find them somewhere along here.
<<set _location = "trade route">>
<</if>>
If you want to take on this contract, you'll need to hire a ship—and a ship of capable fighters. That's going to cost you.
</p>
<p>
The South Seas are a dangerous place, especially if you're heading out looking for fights. <<dangertext "There is always a chance that anyone you send out may not return, so select your slavers carefully">>
</p>/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "tea">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "cured sausages">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "fine silks">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "porcelain">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "spices">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "sugar">>
<</if>>
/* Set Ship name */
<<if $gQuest.getSeed() % 10 == 0>>
<<set _ship = "the Light of Dawn">>
<<elseif $gQuest.getSeed() % 10 == 1>>
<<set _ship = "the Nan Feng">>
<<elseif $gQuest.getSeed() % 10 == 2>>
<<set _ship = "the Dainty Sprite">>
<<elseif $gQuest.getSeed() % 10 == 3>>
<<set _ship = "the Joyful Damnation">>
<<elseif $gQuest.getSeed() % 10 == 4>>
<<set _ship = "the Kurāken no hitokuchi">>
<<elseif $gQuest.getSeed() % 10 == 5>>
<<set _ship = "the Graceful Ray">>
<<elseif $gQuest.getSeed() % 10 == 6>>
<<set _ship = "the Breath of Sobek">>
<<elseif $gQuest.getSeed() % 10 == 7>>
<<set _ship = "the Wu Lang">>
<<elseif $gQuest.getSeed() % 10 == 8>>
<<set _ship = "the Doragon Paru">>
<<elseif $gQuest.getSeed() % 10 == 9>>
<<set _ship = "the Serpant's Wing">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "archipelago">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "atoll">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "shipwrecks">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "cove">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "trade route">>
<</if>>
It takes just over a week for your hired ship to make it to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "achipelago">>
a small chain of islands, all of them small enough to sail around in a few hours.
<<if $gOutcome == 'crit'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
Your ship's captain suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<</if>>
<p>
Fortunately, hiding your ship worked, and <<rep $g.scout>> soon spied _ship from the crows nest, taking the expected route past the islands, and riding low in the water with an obviously full cargo. It looked like they might have been carrying much more than just the _goods your slavers needed to intercept. As your ship swung out on an interception route, <<rep $g.raider>> aimed the ship's ballista at the level of _ship's deck and fired, the large bolt striking one of the crew and taking them off the side.
</p>
<p>
The battle was swift and bloody, but it soon became apparent that your ship outmatched _ship and their captained wished to surrender. Do you:
<<choose>>
<<opt "Loot the cargo and let the ship go">>
<<run setup.qc.Item('f_tile_normal').apply($gQuest)>>
<<run setup.qc.Money(1000).apply($gQuest)>>
You took your time picking through the cargo, taking the _goods, the more lucrative trade items and one of the crew as a likely slave. You also secured a rug that might look good somewhere in the fort from a shipment of carpets. With a jaunty wave, you sailed off, leaving _ship's crew to repair their sails and patch their hull.
<<opt "Loot what you want, and scuttle the ship, leaving whatever crew remains ot fend for themselves">>
Your captain was uncomfortable with your decision, and started talking about a 'code of the seas', but you cut him off and set about picking out a few potential slaves before <<rep $g.fighter>> and <<rep $g.raider>> hacked large holes in _ship's hull. Given how shallow the water was, it could probably be raised and salvaged eventually, but you'd guaranteed the ship wouldn't make port. There was a lot of tension on the ship as you make for port, and when you returned to Lucgate the captain was very eager to see the back of you.
<<run setup.qc.Ire('humansea', 2).apply($gQuest)>>
<<run setup.qc.Ire('lizardkin', 2).apply($gQuest)>>
<<run setup.qc.Favor('humankingdom', -50).apply($gQuest)>>
<<run setup.qc.Money(1000).apply($gQuest)>>
<<run setup.qc.Slave('slave3', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined).apply($gQuest)>>
<</choose>>
</p>
<<elseif $gOutcome == 'success'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
Your ship's captain suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<</if>>
<p>
Fortunately it seems that hiding your ship worked, and <<rep $g.scout>> soon spies _ship from the crows nest, taking the expected route past the islands, riding low in the water with an obviously full cargo. It looks like they may be carrying much more than just the _goods your slavers needed to intercept. As your ship swung out on an interception route, <<rep $g.raider>> aimed the ship's ballista at the level of _ship's deck and fired, the large bolt striking one of the crew and taking them off the side.
</p>
<p>
The battle was fierce and bloody, and ended with the other ship sinking down into the seas. Your own ship was badly damaged, but you managed to 'rescue' one of _ship's crew, who has taken up temporary residence in your slave pen.
</p>
<<run setup.qc.Slave('slaves', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined)>>
<<elseif $gOutcome == 'failure'>>
<p>
Or it should have. With a week of unfavourable winds, you never made it out of port, and it soon became apparent that you'd missed your intercept window as _ship pulled into the Port of Lucgate.
</p>
<<elseif $gOutcome == 'disaster'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
Your ship's captain suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<</if>>
Fortunately it seems that hiding your ship worked, and <<rep $g.scout>> soon spies _ship from the crows nest, taking the expected route past the islands, riding low in the water with an obviously full cargo. It looks like they may be carrying much more than just the _goods your slavers needed to intercept. Unfortunately _ship turned out to be much better armed than you had expected and
<<if $gQuest.getSeed() % 2 == 0>>
<<name _o1>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them _o1>> back to the ship's deck, although <<their _o1>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o1))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name _o1>> was the ballista bolt and their left <<uhand _o1>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o1))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name _o2>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them _o2>> back to the ship's deck, although <<their _o2>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o2))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name _o2>> was the ballista bolt and their left <<uhand _o2>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o2))>>
<</if>>
</p>
<</if>>
<</if>>
<<elseif _location == "atoll">>
a ring of sand and a few specks of green sticking out of the ocean and surrounded by shallow, coral filled seas.
<<if $gOutcome == 'crit'>>
<p>
While there wasn't any place to hide, you arrived just as _ship was sailing past the atoll, and your ship was both faster and better armed than them. After showering the other ship with arrows, <<rep $g.fighter>> led the assault on the ship itself, where the battle was swift and decisive. Securing the most valuable of the trade goods for yourself, you gave your captain control of _ship, and they sent it back to Lucgate under new ownership with a skeleton crew.
</p>
<p>
You also took back one of the surviving crew of _ship, and <<they $g.slaves>> is now in your slave pen, awaiting your final decision.
</p>
<<elseif $gOutcome == 'success'>>
<p>
While there wasn't any place to hide, you arrived just as _ship was sailing past the atoll, and your ship was both faster and better armed than them. After showering the other ship with arrows, <<rep $g.fighter>> led the assault on the ship itself, where the battle was swift and decisive. Securing the most valuable of the trade goods for yourself, you gave your captain control of _ship, and they sent it back to Lucgate under new ownership with a skeleton crew.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately there wasn't any place to hide, and you arrived just as _ship was sailing past the atoll. The moment you came within visual range of each other, _ship set a course away from you, keeping the coral reefs between you, and were soon able to outrun you with their second mast and additional sails. Cursing you trailed them all the way back to Port Lucgate, never able to get close enough to strike.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
There wasn't any place to hide, but you arrived just as _ship was sailing past the atoll. The moment you came within visual range of each other, _ship set a course away from you, but took a strange circuitous route that gave you an easy and direct route to catch up.
</p>
And so you took it. In doing so, you found out why _ship took the route they did.
<<if $g.slaves.isHasTrait('gender_male')>>
<p>
The song was enthralling, rich baritone voices singing words you couldn't understand, but the meaning, the longing and the desire pierced your heart and went straight to your loins. And you clearly weren't the only one. Without uttering a single word, your ship's captain turned the wheel and sent your ship into the centre of the lagoon, the crew wordlessly adjusting the rigging and lowering the anchor.
</p>
<p>
Stripping off your clothing, you dove into the water, and were met by the face of a handsome merman. Smiling, he swam up and pressed his lips against yours, and suddenly the pressure in your lungs vanished and you found yourself able to breathe water as easily as air. The song of the merfolk roared in your ears, filling your soul as he guided your lips to his stiff cock and you were vaguely aware of the rest of your slavers and ship crew being similarly accosted. Above, a large shadow suggested _ship was sailing off into the distance, and you couldn't remember why that had seemed so important.
</p>
<<else>>
<p>
The song was enthralling, soaring soprano voices singing words you couldn't understand, but the meaning, the longing and the desire pierced your heart and went straight to your loins. And you clearly weren't the only one. Without uttering a single word, your ship's captain turned the wheel and sent your ship into the centre of the lagoon, the crew wordlessly adjusting the rigging and lowering the anchor.
</p>
<p>
Stripping off your clothing, you dove into the water, and were met by the face of a beautiful mermaid. Smiling, she swam up and pressed her lips against yours, and suddenly the pressure in your lungs vanished and you found yourself able to breathe water as easily as air. The song of the merfolk roared in your ears, filling your soul as she guided your lips to a slit in her fish-like abdomen. You were vaguely aware of the rest of your slavers and ship crew being similarly accosted. Above, a large shadow suggested _ship was sailing off into the distance, and you couldn't remember why that had seemed so important.
</p>
<</if>>
<p>
The merfolk kept you all for a week, using every orifice to satiate their desires. Eventually they let you go, but they decided they wanted to keep
<<if $gQuest.getSeed() % 2 == 0>>
<<name _o1>>
<<run setup.qc.MissingUnit('unit').apply(setup.costUnitHelper(_o1))>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name _o2>>
<<run setup.qc.MissingUnit('unit').apply(setup.costUnitHelper(_o2))>>
<</if>>
for a bit longer. Returning you to your ship with a large, valuable pearl, you leave with the memory of their song in your heard and part of you aches to return, even if it meant you might never leave.
</p>
<<run setup.qc.Money(1000).apply($gQuest)>>
<</if>>
<<elseif _location == "shipwrecks">>
a rocky stretch of ocean running along a coastline of cliffs and jungles. Large waves continually battered up against the rocks, and frequently battered ships up into those same rocks. Still, it was one of the only known trade routes to the distant land of <<lore continent_cathay>>, and a ship going missing here would not be suspicious. You just don't want it to be yours.
<<if $gOutcome == 'crit'>>
<p>
Your ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. You heard shouts of alarm as your slavers and your ship's crew unleashed a volley of arrows at the merchant's vessel, and it turned to flee. You weren't sure what caused the coil of rope to unspool, but you distinctly saw a trailing rope drop into the sea just before the sail yanked uselessly into the wrong position, turning the prow into the wind. A great wave caught _ship and pushed it into a group of jagged rocks. The sound of wood cracking and the cries of sailors being thrown into the sea blew back on the wind as pieces of _ship fall to the bottom of the sea.
</p>
<p>
While you lost the cargo, you did scoop a single survivor out of the sea, and <<they $g.slaves>> is now awaiting your attention in the slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. You heard shouts of alarm as your slavers and your ship's crew unleashed a volley of arrows at the merchant's vessel, and it turned to flee. You weren't sure what caused the coil of rope to unspool, but you distinctly saw a trailing rope drop into the sea just before the sail yanked uselessly into the wrong position, turning the prow into the wind. A great wave caught _ship and pushed it into a group of jagged rocks. The sound of wood cracking and the cries of sailors being thrown into the sea blew back on the wind as pieces of _ship fall to the bottom of the sea.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately you arrived just before a typhoon blew in from the sea and lashed the coast, and you spent a week alternating between throwing up and trying to prevent your own ship from sinking. You never caught a glimpse of _ship, but when you finally rowed back into port you saw them restocking and bringing on new cargo for another trip to somewhere. It looks like you're not getting paid for this one.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Your ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. You heard shouts of alarm as your slavers and your ship's crew unleashed a volley of arrows at the merchant's vessel. <<rep $g.fighter>> led the assault on the ship itself, which proved to be a terrible idea. The crew of _ship turned out to be seasoned fighters, and the boarding party was swiftly repelled.
<<if $gQuest.getSeed() % 2 == 0>>
<<name _o1>> fell into the rough seas as <<they _o1>> attempted to leap back onto your ship, and were left behind as your captain broke away lest you find yourselves boarded and taken as chattel. You can only hope that <<they _o1>> survived and you might find them again later.
<<run setup.qc.MissingUnit('unit').apply(setup.costUnitHelper(_o1))>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name _o2>> fell into the rough seas as <<they _o2>> attempted to leap back onto your ship, and were left behind as your captain broke away lest you find yourselves boarded and taken as chattel. You can only hope that <<they _o2>> survived and you might find them again later.
<<run setup.qc.MissingUnit('unit').apply(setup.costUnitHelper(_o2))>>
<</if>>
</p>
<</if>>
<<elseif _location == "cove">>
a tropical cove with sandy beaches, crystal clear water, and fish so plentiful they roll up to the beach with each wave.
<<if $gOutcome == 'crit'>>
<p>
You arrived and found _ship already inside the cove, in the process of being loaded up with smuggled cargo from an onshore cache. With their crew split between land and shore, and your own ship blocking their escape, the battle was over almost before it began, with _ship's crew fleeing into the forest leaving you with their cargo, a ship to sell, and a single captive who you've enjoyed on the voyage back to port.
</p>
<<elseif $gOutcome == 'success'>>
<p>
You arrived and found _ship already inside the cove, in the process of being loaded up with smuggled cargo from an onshore cache. With their crew split between land and shore, and your own ship blocking their escape, the battle was over almost before it began, with _ship's crew fleeing into the forest leaving you with their cargo and a ship to sell.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
You waited there for a week, catching fish, enjoying the beach and making coconut cocktails, but _ship never arrived. Whether you missed them or you got the wrong cove you aren't sure, but at least you got a bit of a holiday.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The cove was empty when you arrived, and not seeing the horizon empty of ships you and your slavers went ashore for some rest and relaxation, and were almost immediately attacked by the lizardkin who called the area their home. You managed to fight your way free, but your slavers and your ship's crew were badly injured to the point that boarding _ship was simply not a viable option, and you returned to port without even having seen them.
</p>
<</if>>
<<else>>
well, somewhere in the seas. Your captain assured you that you were on track,
<<if $unit.player.isHasAnyTraitExact(["bg_pirate", "bg_seaman"])>>
and your own knowledge of the seas confirmed that, even if there was open water as far as the eye can see in all directions.
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
and <<Rep _unit>> agreed with their assessment, even if there was open water as far as the eye can see in all directions.
<<else>>
but you had no clue where you were, and his attempts to explain celestial navigation to you made no sense at all.
<</if>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Given you were travelling on a featureless expanse of ocean, looking to raid another ship, your captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your second week at sea, you found yourself almost on top of your quarry, who were still anchored for the night. The battle was swift and bloody, but it soon became apparent that your ship outmatched _ship and their captained wished to surrender. Do you:
<<choose>>
<<opt "Loot the cargo and let the ship go">>
<<run setup.qc.Item('f_tile_normal').apply($gQuest)>>
<<run setup.qc.Money(1000).apply($gQuest)>>
You took your time to pick through the cargo, taking the _goods, the more lucrative trade items and one of the crew as a likely slave. You also secured a rug that might look good somewhere in the fort from a shipment of carpets. With a jaunty wave, you sailed off, leaving _ship's crew to repair their sails and patch their hull.
<<opt "Loot what you want, and scuttle the ship, leaving whatever crew remains ot fend for themselves">>
Your captain was very uncomfortable with your decision, and tried to explain the code of the seas, but you overruled him, and set about picking out a few potential slaves before <<rep $g.fighter>> and <<rep $g.raider>> hacked large holes in _ship's hull. There was a lot of tension on the ship as you make for port, and when you returned to Lucgate the captain seemed very eager to see the back of you.
<<run setup.qc.Ire('humansea', 2).apply($gQuest)>>
<<run setup.qc.Ire('lizardkin', 2).apply($gQuest)>>
<<run setup.qc.Favor('humankingdom', -50).apply($gQuest)>>
<<run setup.qc.Money(1000).apply($gQuest)>>
<<run setup.qc.Slave('slave3', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined).apply($gQuest)>>
<</choose>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
Given you were travelling on a featureless expanse of ocean, looking to raid another ship, your captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your second week at sea, you found yourself almost on top of your quarry, who were still anchored for the night. The battle was fierce and bloody, and ended with the other ship sinking down into the seas. Your own ship was badly damaged, but you managed to 'rescue' one of _ship's crew, who has taken up temporary residence in your slave pen.
</p>
<<run setup.qc.Slave('slaves', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined)>>
<<elseif $gOutcome == 'failure'>>
<p>
Given you were travelling on a featureless expanse of ocean, looking to raid another ship, your captain suggested running at night with limited lights. It was risky, but it gave you a better chance of getting close to _ship before they realised your intentions.
</p>
<p>
Unfortunately, what you came across first was a sandbank, having drifted off course during a cloud covered night. It took a lot of time, sweat and effort to get your ship free, and with a heavily damaged keel, you were forced to return to port for repairs, lest a sea battle send you all to a watery grave.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Given you were travelling on a featureless expanse of ocean, looking to raid another ship, your captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your second week at sea, you found yourself almost on top of your quarry, who were still anchored for the night.
</p>
Unfortunately _ship turned out to be much better armed than you had expected and
<<if $gQuest.getSeed() % 2 == 0>>
<<name _o1>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use their knowledge of water magic to bring them back to the ship's deck, although their wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o1))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name _o1>> was the ballista bolt and their left <<uhand _o1>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o1))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name _o2>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use their knowledge of water magic to bring them back to the ship's deck, although their wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper(_o2))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name _o2>> was the ballista bolt and their left <<uhand _o2>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper(_o2))>>
<</if>>
</p>
<</if>>
<</if>>
<</if>>
<<else>>
<<if _location == "achipelago">>
a small chain of islands, all of them small enough to sail around in a few hours.
<<if $gOutcome == 'crit'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
The captain your slavers hired suggested hiding around the back of one of the larger islands, and either sailing out to intercept _ship, or see if its crew come ashore for water.
<</if>>
<p>
Fortunately, hiding your ship worked, and <<rep $g.scout>> soon spied _ship from the crows nest, taking the expected route past the islands, and riding low in the water with an obviously full cargo hold. It looked like they were carrying much more than just the _goods your slavers needed to intercept. As your ship swung out on an interception route, <<rep $g.raider>> aimed the ship's ballista at the level of _ship's deck and fired, the large bolt striking one of the crew and taking them off the side.
</p>
<p>
The battle was swift and bloody, but it soon became apparent that _ship was outmatched and their captained wished to surrender. Your slavers took their time picking through the cargo, taking the _goods, the more lucrative trade items and one of the surrendering crew as a likely slave. With a jaunty wave, your slavers sailed off, leaving the remaining crew of _ship's to repair their sails and patch their hull.
<<run setup.qc.Money(1000).apply($gQuest)>>
</p>
<<elseif $gOutcome == 'success'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
The captain your slavers hired suggested hiding around the back of one of the larger islands, and either sailing out to intercept _ship, or see if its crew come ashore for water.
<</if>>
<p>
Fortunately, hiding the ship worked, and <<rep $g.scout>> soon spied _ship from the crows nest, taking the expected route past the islands, and riding low in the water with an obviously full cargo hold. It looked like they were carrying much more than just the _goods your slavers needed to intercept. As your ship swung out on an interception route, <<rep $g.raider>> aimed the ship's ballista at the level of _ship's deck and fired, the large bolt striking one of the crew and taking them off the side.
</p>
<p>
The battle was fierce and bloody, and ended with the other ship sinking down into the seas. Your own ship was badly damaged, but you managed to 'rescue' one of _ship's crew, who has taken up temporary residence in your slave pen.
</p>
<<run setup.qc.Slave('slaves', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined)>>
<<elseif $gOutcome == 'failure'>>
<p>
Or it should have. With a week of unfavourable winds, your slavers never made it out of port, and it soon became apparent that they'd missed their intercept window as _ship pulled into the Port of Lucgate.
</p>
<<elseif $gOutcome == 'disaster'>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
<<Rep _unit>> suggested hiding around the back of one of the larger islands, and either sail out to intercept, or see if _ship's crew come ashore for water.
<<else>>
The captain your slavers hired suggested hiding around the back of one of the larger islands, and either sailing out to intercept _ship, or see if its crew come ashore for water.
<</if>>
<p>
Fortunately, hiding the ship worked, and <<rep $g.scout>> soon spied _ship from the crows nest, taking the expected route past the islands, and riding low in the water with an obviously full cargo hold. It looked like they were carrying much more than just the _goods your slavers needed to intercept.
</p>
Unfortunately _ship turned out to be much better armed than they'd had expected and
<<if $gQuest.getSeed() % 3 == 0>>
<<name $g.scout>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.scout>> back to the ship's deck, although <<their $g.scout>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.scout))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.scout>> was the ballista bolt and their left <<uhand $g.scout>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.scout))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<name $g.fighter>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.fighter>> back to the ship's deck, although <<their $g.fighter>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.fighter))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.fighter>> was the ballista bolt and their left <<uhand $g.fighter>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.fighter))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<name $g.raider>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.raider>> back to the ship's deck, although <<their $g.raider>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.raider))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.raider>> was the ballista bolt and their left <<uhand $g.raider>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.raider))>>
<</if>>
</p>
<</if>>
<</if>>
<<elseif _location == "atoll">>
a ring of sand and a few specks of green sticking out of the ocean and surrounded by shallow, coral filled seas.
<<if $gOutcome == 'crit'>>
<p>
While there wasn't any place to hide, your slavers spotted _ship was sailing past the atoll, and their ship was both faster and better armed than them. After showering the other ship with arrows, <<rep $g.fighter>> led the assault on the ship itself, where the battle was swift and decisive. Securing the most valuable of the trade goods, they gave their ship's captain control of _ship, who sent it back to Lucgate with a skeleton crew and a new name.
</p>
<p>
They also took back one of the surviving crew of _ship, and <<they $g.slaves>> is now in your slave pen, awaiting your final decision.
</p>
<<elseif $gOutcome == 'success'>>
<p>
While there wasn't any place to hide, your slavers spotted _ship was sailing past the atoll, and their ship was both faster and better armed than them. After showering the other ship with arrows, <<rep $g.fighter>> led the assault on the ship itself, where the battle was swift and decisive. Securing the most valuable of the trade goods, they gave their ship's captain control of _ship, who sent it back to Lucgate with a skeleton crew and a new name.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
While there wasn't any place to hide, your slavers spotted _ship was sailing past the atoll. The moment _ship's crew caught sight of your slavers' ship, they set a course to flee, keeping the coral reefs between the two vessels. With their second mast and additional sails, _ship was soon a distant speck on the horizon, leaving your slavers to sail slowly back to port.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
While there wasn't any place to hide, your slavers spotted _ship was sailing past the atoll. The moment _ship's crew caught sight of your slavers' ship, they set a course to flee, but took a strange circuitous route that gave your slavers an easy and direct route to catch up.
</p>
And when your slavers took it, they found out why _ship took the route they did.
<<if $g.slaves.isHasTrait('gender_male')>>
<p>
The song was enthralling, rich baritone voices singing words none of your slavers could understand, but the meaning, the longing and the desire pierced their hearts and went straight to their loins. Without uttering a single word, the ship's captain turned the wheel and guided ship into the centre of the lagoon, the crew wordlessly adjusting the rigging and lowering the anchor.
</p>
<p>
<<dialogue $g.scout>>
I don't really remember everything, but I was naked, and then there was a merman, and he kissed me and I could breathe water. I just remember he was gorgeous and all I wanted to do was get his cock in my mouth.
<<if $g.scout.isHasTrait('per_chaste')>>
Which is not like me at all.
<<elseif $g.scout.isHasTrait('per_lustful')>>
<<if $g.scout.isHasTrait('gender_male')>>
And up my ass. And it felt fucking amazing.
<<else>>
And in my pussy.
<</if>>
<<elseif $g.scout.isHasTrait('per_sexaddict')>>
<<if $g.scout.isHasTrait('gender_male')>>
And up my ass. And it felt fucking amazing.
<<else>>
And in my pussy.
<</if>>
<<else>>
<</if>>
<</dialogue>>
</p>
<<else>>
<p>
The song was enthralling, harmonic soprano voices singing words none of your slavers could understand, but the meaning, the longing and the desire pierced their hearts and went straight to their loins. Without uttering a single word, the ship's captain turned the wheel and guided ship into the centre of the lagoon, the crew wordlessly adjusting the rigging and lowering the anchor.
</p>
<<dialogue $g.scout>>
I don't really remember everything, but I was naked, and then there was a mermaid, and she kissed me and I could breathe water. I just remember she was gorgeous and all I wanted to do was get my mouth on her pussy. Or whatever she had.
<<if $g.scout.isHasTrait('per_chaste')>>
Which is not like me at all.
<<elseif $g.scout.isHasTrait('per_lustful')>>
<<if $g.scout.isHasTrait('gender_male')>>
I wanted to fuck her so bad.
<<else>>
<</if>>
<<elseif $g.scout.isHasTrait('per_sexaddict')>>
<<if $g.scout.isHasTrait('gender_male')>>
I wanted to fuck her so bad.
<<else>>
<</if>>
<<else>>
<</if>>
<</dialogue>>
<</if>>
<p>
The merfolk kept your slavers for a week, using every orifice to satiate their desires. Eventually they let them go, but decided to keep
<<if $gQuest.getSeed() % 2 == 0>>
<<name $g.fighter>>
<<run setup.qc.MissingUnit('fighter').apply($gQuest)>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<name $g.raider>>
<<run setup.qc.MissingUnit('raider').apply($gQuest)>>
<</if>>
for a bit longer. Your slavers were gifted a large, valuable pearl, and left with the memory of the siren song in their heads.<br>
"You just left them?" you asked.<br>
"We had to! If changed their minds and kept us all, what then?"<br>
You can only hope you have a chance to rescue them later.
</p>
<<run setup.qc.Money(1000).apply($gQuest)>>
<</if>>
<<elseif _location == "shipwrecks">>
a rocky stretch of ocean running along a coastline of cliffs and jungles. Large waves continually battered up against the rocks, and frequently battered ships up into those same rocks. It was, unfortunately, one of the only known trade routes to the distant land of <<lore continent_cathay>>, and a ship going missing there would not be suspicious.
<<if $gOutcome == 'crit'>>
<p>
The hired ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. Your slavers heard shouts of alarm as they unleashed a volley of arrows at the merchant's vessel, which turned to flee. <<name $g.scout>> wasn't sure what caused the coil of rope to unspool, but <<they $g.scout>> distinctly saw a trailing rope drop into the sea just before the sail yanked uselessly into the wrong position, turning the prow into the wind. A great wave caught _ship and pushed it into a group of jagged rocks. The sound of wood cracking and the cries of sailors being thrown into the sea blew back on the wind as pieces of _ship fall to the bottom of the sea.
</p>
<p>
While they lost the cargo, your slavers did scoop a single survivor out of the sea, and <<they $g.slaves>> is now awaiting your attention in the slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The hired ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. Your slavers heard shouts of alarm as they unleashed a volley of arrows at the merchant's vessel, which turned to flee. <<name $g.scout>> wasn't sure what caused the coil of rope to unspool, but <<they $g.scout>> distinctly saw a trailing rope drop into the sea just before the sail yanked uselessly into the wrong position, turning the prow into the wind. A great wave caught _ship and pushed it into a group of jagged rocks. The sound of wood cracking and the cries of sailors being thrown into the sea blew back on the wind as pieces of _ship fall to the bottom of the sea.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately your slavers arrived just before a typhoon blew in from the sea and lashed the coast, and they spent a week alternating between throwing up and trying to prevent their own ship from sinking. They never caught a glimpse of _ship, but when they finally rowed back into port <<name $g.raider>> saw them restocking and bringing on new cargo for another trip to somewhere. It looks like you're not getting paid for this one.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The hired ship's captain proved to be worth every coin, as he skillfully steered through the choppy seas, bearing down upon _ship. Your slavers heard shouts of alarm as they unleashed a volley of arrows at the merchant's vessel. <<rep $g.fighter>> led the assault on the ship itself, which proved to be a terrible idea. The crew of _ship turned out to be seasoned fighters, and your boarding party was swiftly repelled.
</p>
<<if $gQuest.getSeed() % 3 == 0>>
<p>
<<name $g.scout>> fell into the rough seas as <<they $g.scout>> attempted to leap back onto their ship, and were left behind as the captain broke away lest they find themselves boarded and taken as chattel. You can only hope that <<they $g.scout>> survived and you might find them again later.
</p>
<<run setup.qc.MissingUnit('scout').apply($gQuest)>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<p>
<<name $g.fighter>> fell into the rough seas as <<they $g.fighter>> attempted to leap back onto their ship, and were left behind as the captain broke away lest they find themselves boarded and taken as chattel. You can only hope that <<they $g.fighter>> survived and you might find them again later.
</p>
<<run setup.qc.MissingUnit('fighter').apply($gQuest)>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<p>
<<name $g.raider>> fell into the rough seas as <<they $g.raider>> attempted to leap back onto their ship, and were left behind as the captain broke away lest they find themselves boarded and taken as chattel. You can only hope that <<they $g.raider>> survived and you might find them again later.
</p>
<<run setup.qc.MissingUnit('raider').apply($gQuest)>>
<</if>>
<</if>>
<<elseif _location == "cove">>
a tropical cove with sandy beaches, crystal clear water, and fish so plentiful they roll up to the beach with each wave.
<<if $gOutcome == 'crit'>>
<p>
Your slavers arrived and found _ship already inside the cove, in the process of being loaded up with smuggled cargo from an onshore cache. With their crew split between land and shore, and your slavers' ship blocking their escape, the battle was over almost before it began, with _ship's crew fleeing into the forest leaving your slavers with their cargo, a ship to sell, and a single captive who you who is now lying bound in your slave pen.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers arrived and found _ship already inside the cove, in the process of being loaded up with smuggled cargo from an onshore cache. With their crew split between land and shore, and your slavers' ship blocking their escape, the battle was over almost before it began, with _ship's crew fleeing into the forest leaving your slavers with their cargo and a ship to sell.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers waited at the cove for a week, catching fish, enjoying the beach and making coconut cocktails, but _ship never arrived. Whether they missed them or they got the wrong cove you aren't sure, but you got your slavers back nice and rested after a bit of a holiday.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The cove was empty when your slavers arrived, and not seeing the horizon empty of ships they went ashore for some rest and relaxation, and were almost immediately attacked by the lizardkin who called the area their home. With <<name $g.fighter>> and <<name $g.raider>> fighting a desperate retreat, everyone managed to get back to the ship, but with your slavers and many of ship's crew badly injured, finding and boarding _ship was simply not a viable anymore, and your slavers returned to port without even having seen their quarry.
</p>
<</if>>
<<else>>
well, somewhere in the seas. The captain your slavers hired assured them that they were on track,
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['bg_pirate', 'bg_seaman']})>>
<<if _unit>>
and <<Rep _unit>> agreed with their assessment, even if there was open water as far as the eye can see in all directions.
<<else>>
but your slavers had to take it on faith.
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Given your slavers were travelling on a featureless expanse of ocean, looking to raid another ship, the captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your slavers' second week at sea, they found themselves almost on top of their quarry, who were still anchored for the night. The battle was swift and bloody, but it soon became apparent that
_ship was hopelessly outmatched and their captained wished to surrender.
</p>
<p>
Your slavers took their time picking through the cargo, taking the _goods, the more lucrative trade items and one of the crew as a likely slave. With a jaunty wave, they sailed off, leaving the crew of _ship to repair their sails and patch their hull.
</p>
<<run setup.qc.Money(1000).apply($gQuest)>>
<<elseif $gOutcome == 'success'>>
<p>
Given your slavers were travelling on a featureless expanse of ocean, looking to raid another ship, the captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your slavers' second week at sea, they found themselves almost on top of their quarry, who were still anchored for the night. The battle was swift and bloody, and ended with the other ship sinking down into the seas. Even with their own ship being badly damaged, your slavers managed to 'rescue' one of _ship's crew, who has taken up temporary residence in your slave pen.
</p>
<<run setup.qc.Slave('slaves', "a|was a sailor on the southern seas, captured by your slavers in a raid", undefined)>>
<<elseif $gOutcome == 'failure'>>
<p>
Given your slavers were travelling on a featureless expanse of ocean, looking to raid another ship, the captain suggested running at night with limited lights. It was risky, but it gave your slavers a better chance of getting close to _ship before its crew realised the danger they were win.
</p>
<p>
Unfortunately, what the ship came across first was a sandbank, having drifted off course during a cloud covered night. It took a lot of time, sweat and effort to get it free, and with a heavily damaged keel, your slavers were forced to return to port for repairs, lest a sea battle send them all to a watery grave.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Given your slavers were travelling on a featureless expanse of ocean, looking to raid another ship, the captain suggested running at night with limited lights. It was risky, and potentially dangerous, but as the sun rose on your slavers' second week at sea, they found themselves almost on top of their quarry, who were still anchored for the night.
</p>
Unfortunately _ship turned out to be much better armed than you had expected and
<<if $gQuest.getSeed() % 3 == 0>>
<<name $g.scout>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.scout>> back to the ship's deck, although <<their $g.scout>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.scout))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.scout>> was the ballista bolt and their left <<uhand $g.scout>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.scout))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<name $g.fighter>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.fighter>> back to the ship's deck, although <<their $g.fighter>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.fighter))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.fighter>> was the ballista bolt and their left <<uhand $g.fighter>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.fighter))>>
<</if>>
</p>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<name $g.raider>> took a ballista bolt in the chest and fell into the sea—and within reach of the sharks that had been drawn to the bloody battle.
<p>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {anytrait: ['magic_water', 'magic_water_master']})>>
<<if _unit>>
Fortunately <<rep _unit>> was able to use <<their _unit>> knowledge of water magic to bring <<them $g.raider>> back to the ship's deck, although <<their $g.raider>> wounds will take a long time to heal.
<<run setup.qc.Injury('unit', 24).apply(setup.costUnitHelper($g.raider))>>
<<else>>
By the time the water had finished churning, the only thing left of <<name $g.raider>> was the ballista bolt and their left <<uhand $g.raider>>
<<run setup.qc.MissingUnitForever('unit').apply(setup.costUnitHelper($g.raider))>>
<</if>>
</p>
<</if>>
<</if>>
<</if>>
<</if>><<set _criteriaraider = new setup.UnitCriteria(
null, /* key */
'Raider-Inventor', /* name */
[
setup.trait.bg_engineer,
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.UnitGroup(
"a_merchant_s_revenge_caravan_raid_vale_1",
"Merchant Prince",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_merchant),
setup.qc.TraitRemove('unit', setup.trait.bg_merchant),
setup.qc.AddTraitsRandom('unit',
[
setup.trait.bg_merchant, setup.trait.bg_adventurer, setup.trait.bg_mercenary, setup.trait.bg_thug, setup.trait.bg_woodsman
], 1, false, true),
],
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_vale_', /* key */
"A Merchant\'s Revenge: Caravan Raid (Vale)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'vale',
'money',
'unit',
'ire',
],
1, /* weeks */
5, /* expiration weeks */
{ /* roles */
'scout': [ setup.qu.spotter, 1],
'fighter': [ setup.qu.fighter, 1],
'raider': [ _criteriaraider, 1],
},
{ /* actors */
'slaves': 'a_merchant_s_revenge_caravan_raid_vale_1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_caravan_raid_vale_',
setup.qdiff.normal41, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_vale_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Slave('slaves', "a|was a member of a Toran caravan, captured by your slavers in a raid", undefined),
setup.qc.MoneyCustom(1500),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_vale_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.MoneyCustom(2000),
setup.qc.Ire('humankingdom', 1),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_vale_Crit',
[
setup.qc.TraumatizeRandom('scout', 5),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_vale_Crit',
[
setup.qc.Ire('humankingdom', 1),
setup.qc.OneRandom([
setup.qc.Injury('scout', 1),
setup.qc.Injury('scout', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 1),
setup.qc.Injury('fighter', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 1),
setup.qc.Injury('raider', 2)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>>/* mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
*/
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
A caravan will be passing through the northern vales carrying a cargo full of
<<if $gQuest.getSeed() % 5 == 0>>
<<set _goods = "furs">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _goods = "wool">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _goods = "lumber">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _goods = "dried fish">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _goods = "blocks of ice">>
<</if>>
<<= _goods>>.
Please ensure it does not make it to Lucgate with its cargo intact. The usual fee will be provided as a bonus should you be successful in this endeavour.
</p>
</div>
<p>
On the back of the note is a rough map showing
<<if Math.round($gQuest.getSeed() / 5) % 5 == 0>>
<<set _location = "river">>
a bend in the River Varde.
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 1>>
<<set _location = "ravine">>
a ravine through the mountains.
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 2>>
<<set _location = "forest">>
a path running through the pine forests.
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 3>>
<<set _location = "werewolves">>
an unmarked track along the edge of werewolf territory.
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 4>>
<<set _location = "swampland">>
A bushy area of swampland.
<</if>>
It looks like a good spot for an ambush. You might even come away with a new slave. Of course, if you leave any survivors, you may incur the wrath of the Kingdom of Tor.
</p>/* Set caravan cargo */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _goods = "furs">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _goods = "wool">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _goods = "lumber">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _goods = "dried fish">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _goods = "blocks of ice">>
<</if>>
/* Set ambush location */
<<if Math.round($gQuest.getSeed() / 5) % 5 == 0>>
<<set _location = "river">>
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 1>>
<<set _location = "ravine">>
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 2>>
<<set _location = "forest">>
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 3>>
<<set _location = "werewolves">>
<<elseif Math.round($gQuest.getSeed() / 5) % 5 == 4>>
<<set _location = "swampland">>
<</if>>
<<name $g.scout>> easily led your slavers to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<if _location == "river">>
the banks of the River Varde. The provided map brings you to an idyllic campsite some distance off the road, but it would also be a great place to ambush the caravan at their most vulnerable. And so, you settle down to wait for their arrival.
<<if $gOutcome == 'crit'>>
<p>
When the caravan finally arrived it was clear they camped here frequently—and were used to being alone. They immediately set up a well organised camp, and posted very few guards, clearly expecting the river to keep them safe. When night rolled in, <<name $g.scout>> scout|was amazed to see the guards falling asleep at their post, and it took barely any time to
<<if _goods == "lumber">>
drag the plants of pine into the river, where the water would warp them into uselessness.
<<elseif _goods == "blocks of ice">>
push the ice blocks into the water, where they'd both melt and be swept away downstream.
<<else>>
crack open the crates and push them into the river, where the water would ruin their contents and send most of it off downstream.
<</if>>
</p>
<p>
As you were working, <<name $g.raider>> nabbed a caravanner who had woken up and left their tent to answer a call of nature, pouncing on them before they could raise the alarm. Bringing them back in their soiled pants wasn't pleasant, but it did reinforce their new position in life.
</p>
<<elseif $gOutcome == 'success'>>
<p>
When the caravan finally arrived it was clear they camped here frequently—and were used to being alone. They immediately set up a well organised camp, and posted very few guards, clearly expecting the river to keep them safe. When night rolled in, <<name $g.scout>> scout|was amazed to see the guards falling asleep at their post, and it took barely any time to
<<if _goods == "lumber">>
drag the plants of pine into the river, where the water would warp them into uselessness.
<<elseif _goods == "blocks of ice">>
push the ice blocks into the water, where they'd both melt and be swept away downstream.
<<else>>
crack open the crates and push them into the river, where the water would ruin their contents and send most of it off downstream. Unfortunately, it appears that at least someone was awake inside their tent, and while they didn't raise the alarm, they were able to lay the blame for the attack at your door, and your company will be spoken of with displeasure in certain circles for some time.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But they never came. Later you heard news of the caravan arriving in Lucgate. It appears you were too slow and missed them, leaving you with nothing to show for your efforts.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately the guards weren't as asleep as you'd thought and the noise roused them. They also turned out to be very well trained, and easily overwhelmed your slavers, who only survived by diving into the river and allowing the current to sweep them away. While everyone survived, the battering they took from both the caravanners and the underwater rocks left them with injuries that will take some time to heal.
</p>
<</if>>
<<elseif _location == "ravine">>
a ravine through the northern mountains. It was a trading shortcut, but was definitely a spot that was perfect for an ambush. Of course, being a ravine there was potentially a greater chance that some would be able to flee, which was potentially a problem. However, you hoped that any survivors would not be able to identify you or your slavers given the distances involved.
<<if $gOutcome == 'crit'>>
<p>
In the end, you went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing you to block them in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the caravan itself.
<<else>>
firing at the caravan with arrows, causing them to flee, scrambling over the fallen rocks, but leaving their goods behind.
<</if>>
When your slavers finally descended into the ravine, you were able to pick through the remnants of the goods, taking some supplies and leaving the rest to the elements. <<name $g.raider>> also found an unconscious <<woman $g.slaves>> who is now awaiting your final decision in the slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
In the end, you went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing you to block them in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the caravan itself.
<<else>>
firing at the caravan with arrows, causing them to flee, scrambling over the fallen rocks, but leaving their goods behind. Unfortunately it appears that at least some of the survivors recognised your slavers, and you have garnered more animosity from the Kingdom of Tor.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
In the end, you went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing you to block them in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the caravan itself.
<<else>>
firing at the caravan with arrows.
<</if>>
Unfortunately, the boulders didn't fall down into the ravine itself, and the caravan spurred their horses into a gallop, escaping your trap and leaving you too far behind to catch up to them. You also caught the glint of a spyglass looking back at you as they fled, and you expect your relations with the Kingdom of Tor to be a little cooler going forward.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the boulders didn't fall down into the ravine itself, and the caravan spurred their horses into a gallop, escaping your trap and racing up the mouth of the ravine. While you were close enough to engage them in combat, there were too many guards, and your slavers were forced to retreat, nursing more than a few injuries to their bodies as well as to their pride.
</p>
<</if>>
<<elseif _location == "forest">>
the forest path, the dark pine boughs laden with snow. The area beneath the trees was dark, but there were still snowdrifts ready to betray your presence. One misplaced foot would be enough to let an eagle eyed guard know that they weren't alone in this forest. Blowing on your hands to keep warm, you and your slavers took position for an ambush, and waited.
<<if $gOutcome == 'crit'>>
<p>
It was a simple matter to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. It was more a slaughter than a fight,
<<if $unit.player.isHasAnyTraitExact(["per_cruel", "per_evil"])>>
and you put them all to sword—bar one that <<name $g.fighter>> had taken a shine to. The <<woman $g.slaves>> is now in your slave pen, awaiting your final decision.
<<elseif $unit.player.isHasAnyTraitExact(["per_honorable", "per_kind", "per_empath"])>>
although you ensured their deaths were as quick and painless and possible. <<name $g.fighter>> did take a shine to one of them, and the <<woman $g.slaves>> is now in your slave pen, awaiting your final decision.
<<else>>
and you consider it a job well done. <<name $g.fighter>> did take a shine to one of them, and the <<woman $g.slaves>> is now in your slave pen, awaiting your final decision.
<</if>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was a simple matter to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. It was more a slaughter than a fight,
<<if $unit.player.isHasAnyTraitExact(["per_cruel", "per_evil"])>>
and you put them all to sword, leaving you free to pick through the remains of the caravan.
<<elseif $unit.player.isHasAnyTraitExact(["per_honorable", "per_kind", "per_empath"])>>
although you ensured their deaths were as quick and painless and possible. All in all, you consider it a job well done.
<<else>>
and you consider it a job well done.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, after days of waiting in the bitter cold, you were forced to give up and return to the fort. On the way back you found some wide tracks suggesting you were late by several days, and the caravan had long passed through.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
It was a simple matter to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. Unfortunately the sheer number of guards the caravan employed meant the advantage was short lived, and your slavers were forced to withdraw. Later, tales of their victory over <<rep $company.player>> in the northern forests spread through the city. It's exaggerated by any measure, but it seems to have caught in the popular imagination.
</p>
<</if>>
<<elseif _location == "werewolves">>
the unmarked forest track, taking care to stay out of the werewolves' hunting grounds. Crossing that near invisible boundary would almost ensure you ran the risk of being taken, fucked, eaten, or all three. Probably in that order. On the other hand, there was always the option of pushing the caravanners to flee into the waiting claws of the lycanthropes.
<<if $gOutcome == 'crit'>>
<p>
You'd had enough time to build a blockade across the road, covered in snow, and your slavers attacked from behind and the side, leaving the caravanners with a very clear escape route—and many of them took it. The guards were out of position, investigating your blockade, and some ran after the civilians, urging them not to run towards the werewolf hunting grounds. In the chaos, it was easy enough to
<<if _goods == "ice">>
smash the blocks of ice into unsellable shards that would melt before they reach Lucgate.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
With the caravanners torn between fight, flight and saving their goods, it was easy enough to pick the guards off one by one, and when the rest broke you herded them towards the werewolves, capturing one for your own amusement. If any of the caravanners survived the werewolves, they haven't returned to the city to say.
</p>
<<elseif $gOutcome == 'success'>>
<p>
You'd had enough time to build a blockade across the road, covered in snow, and your slavers attacked from behind and the side, leaving the caravanners with a very clear escape route—and many of them took it. The guards were out of position, investigating your blockade, and some ran after the civilians, urging them not to run towards the werewolf hunting grounds. In the chaos, it was easy enough to
<<if _goods == "ice">>
smash the blocks of ice into unsellable shards that would melt before they reach Lucgate.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
With the caravanners torn between fight, flight and saving their goods, it was easy enough to pick the guards off one by one, and when the rest broke you herded them towards the werewolves. If any of them survived, they haven't returned to the city to say.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
You had enough time to build a blockade across the road, covered in snow, and your slavers attacked from behind and the side, leaving the caravanners with a very clear escape route, but they never showed up. After a few days of waiting you were forced to return home, wondering if you'd even managed to find the right place.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
You'd had enough time to build a blockade across the road, covered in snow, and your slavers attacked from behind and the side, leaving the caravanners with a very clear escape route. However, the caravan was able to break through the blockade, allowing the wagons to flee, and there were enough guards that pursuit was not an option.
</p>
<p>
You were forced to abandon the fight and head home, nursing your injuries, and with nothing to show for your efforts.
</p>
<</if>>
<<else>>
the mosquito filled swampland. Why any caravan would willingly travel this route was beyond you. The marshy soil made fleeing near impossible, both for you and for the caravanners, and you had to hope you'd be able to overwhelm them in combat. Maybe if you were sneaky about it...
<<if $gOutcome == 'crit'>>
<p>
The difficulty in moving meant your slavers only had to face a few opponents at a time, and while <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo and
<<if _goods == "ice">>
smashed the blocks of ice into unsellable shards before tipping them into the marsh to melt.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
The marsh meant those who ran were easy to cut down, but the last <<woman $g.slaves>> surrendered to you, and is now confined in your slave pens awaiting your final decision.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The difficulty in moving meant your slavers only had to face a few opponents at a time, and while <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo and
<<if _goods == "ice">>
smashed the blocks of ice into unsellable shards before tipping them into the marsh to melt.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
The marsh slowed your pursuit and the caravanners scattered, meaning at least some of them survived your ambush. Still, you leave the remains of the caravan burning in the marsh, and have done enough to fulfil the contract.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, none of you ever saw the caravan. You spent days in being bitten by everything that flew, swam or wriggled in those marshes, and in the end, the caravan didn't even have the decency to show up to be raided. Maybe <<name $g.scout>> got turned around in the mess of water, dead trees and floating islands of vegetation.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The difficulty of moving in the water should have meant your slavers only had to face a few opponents at a time. While <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo. What you hadn't accounted for was the number of crossbows the caravanners had with them—in hindsight it was probably why they felt confident in going through the marshes in the first place. Your raid attempt was over almost before it began, with your slavers barely able to limp back to the fort.
</p>
<</if>>
<</if>>
<<else>>
<<if _location == "river">>
the banks of the River Varde. The provided map bought them to an idyllic campsite some distance off the road, but <<name $g.raider>> pointed out it would also be a great place to ambush the caravan at their most vulnerable. And so, they settled down to wait for their arrival.
<<if $gOutcome == 'crit'>>
<p>
When the caravan finally arrived it was clear they camped there frequently—and were used to being alone. They immediately set up a well organised camp, and posted very few guards, clearly expecting the river to keep them safe. When night rolled in, <<name $g.scout>> scout|was amazed to see the guards falling asleep at their post, and it took barely any time to
<<if _goods == "lumber">>
drag the plants of pine into the river, where the water would warp them into uselessness.
<<elseif _goods == "blocks of ice">>
push the ice blocks into the water, where they'd both melt and be swept away downstream.
<<else>>
crack open the crates and push them into the river, where the water would ruin their contents and send most of it off downstream.
<</if>>
</p>
<p>
As they were working, <<name $g.raider>> nabbed a caravanner who had woken up and left their tent to answer a call of nature, pouncing on them before they could raise the alarm. Bringing them back in their soiled pants wasn't pleasant, but it did reinforce their new position in life—assuming you decide to keep them, of course.
</p>
<<elseif $gOutcome == 'success'>>
<p>
When the caravan finally arrived it was clear they camped here frequently—and were used to being alone. They immediately set up a well organised camp, and posted very few guards, clearly expecting the river to keep them safe. When night rolled in, <<name $g.scout>> scout|was amazed to see the guards falling asleep at their post, and it took barely any time to
<<if _goods == "lumber">>
drag the plants of pine into the river, where the water would warp them into uselessness.
<<elseif _goods == "blocks of ice">>
push the ice blocks into the water, where they'd both melt and be swept away downstream.
<<else>>
crack open the crates and push them into the river, where the water would ruin their contents and send most of it off downstream. Unfortunately, it appears that at least someone was awake inside their tent, and while they didn't raise the alarm, they were able to lay the blame for the attack at your door, and your company will be spoken of with displeasure in certain circles for some time.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But they never came. Later you heard news of the caravan arriving in Lucgate. It appears your slavers were too slow and missed them, leaving you with nothing to show for their efforts.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately the guards weren't as asleep as your slavers thought and the noise of their approach roused them to wakefulness. The guards also turned out to be very well trained, and easily overwhelmed your slavers, who only survived by diving into the river and allowing the current to sweep them away. While everyone survived, the battering they took from both the caravanners and the underwater rocks left them with injuries that will take some time to heal.
</p>
<</if>>
<<elseif _location == "ravine">>
a ravine through the northern mountains. It was a trading shortcut, but was definitely a spot that was perfect for an ambush. Of course, being a ravine there was potentially a greater chance that some would be able to flee, which was potentially a problem. However, <<name $g.scout>> hoped that any survivors would not be able to identify you or your slavers given the distances involved.
<<if $gOutcome == 'crit'>>
<p>
In the end, your slavers went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing them to box the caravan in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the wagons.
<<else>>
firing at the caravan with arrows, causing the caravanners to flee. Most were easily able to scramble over the fallen rocks, but they were forced to leave their goods behind.
<</if>>
When your slavers finally descended into the ravine, they were able to pick through the remnants of the goods, taking some supplies and leaving the rest to the elements. <<name $g.raider>> also found an unconscious <<woman $g.slaves>> who is now awaiting your final decision in the slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
In the end, your slavers went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing them to box the caravan in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the wagons.
<<else>>
firing at the caravan with arrows, causing the caravanners to flee. Most were easily able to scramble over the fallen rocks, but they were forced to leave their goods behind. Unfortunately it appears that at least some of the survivors recognised your slavers, and you have garnered more animosity from the Kingdom of Tor.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
In the end, your slavers went for the "blocking them in with falling rocks" approach, which worked surprisingly well, allowing them to box the caravan in before
<<if $unit.player.isHasAnyTraitExact(["per_evil", "per_cruel"])>>
rolling more boulders directly onto the wagons.
<<else>>
firing at the caravan with arrows.
<</if>>
Unfortunately, the boulders didn't fall down into the ravine itself, and the caravan spurred their horses into a gallop, escaping the trap and leaving your slavers too far behind to catch up to them. <<name $g.scout>> also caught the glint of a spyglass looking back at them as the caravan fled, and you expect your relations with the Kingdom of Tor to be a little cooler going forward.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the boulders didn't fall down into the ravine itself, and the caravan spurred their horses into a gallop, escaping the trap and racing up the mouth of the ravine. While your slavers were close enough to engage them in combat, there were too many guards, and they were forced to retreat, nursing more than a few injuries to their bodies as well as to their pride.
</p>
<</if>>
<<elseif _location == "forest">>
the forest path, the dark pine boughs laden with snow. The area beneath the trees was dark, but there were still snowdrifts ready to betray your slavers' presence. One misplaced foot would be enough to let an eagle eyed guard know that they weren't alone in this forest. Blowing on <<their $g.scout>> hands to keep warm, <<name $g.scout>> found your slavers positions for an ambush, and waited.
<<if $gOutcome == 'crit'>>
<p>
It was a simple matter for <<name $g.fighter>> to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. It was more a slaughter than a fight, and your slavers put them all to sword—bar one that <<name $g.fighter>> had taken a shine to. The <<woman $g.slaves>> is now in your slave pen, awaiting your final decision.
</p>
<<elseif $gOutcome == 'success'>>
<p>
It was a simple matter for <<name $g.fighter>> to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. It was more a slaughter than a fight, and your slavers put them all to sword. All in all, you consider it a job well done.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, after days of waiting in the bitter cold, your slavers were forced to give up and return to the fort. On the way back <<name $g.scout>> found some wide tracks suggesting they were late by several days, and the caravan had long passed through.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
It was a simple matter for <<name $g.fighter>> to bring several trees worth of snow down onto the caravan, giving your slavers the upper hand in the fighting that commenced. Unfortunately the sheer number of guards the caravan employed meant the advantage was short lived, and your slavers were forced to withdraw. Later, tales of their victory over <<rep $company.player>> in the northern forests spread through the city. It's exaggerated by any measure, but it seems to have caught in the popular imagination.
</p>
<</if>>
<<elseif _location == "werewolves">>
the unmarked forest track, taking care to stay out of the werewolves' hunting grounds. Crossing that near invisible boundary would almost ensure your slavers ran the risk of being taken, fucked, eaten, or all three. Probably in that order. On the other hand, there was always the option of pushing the caravanners to flee into the waiting claws of the lycanthropes.
<<if $gOutcome == 'crit'>>
<p>
Your slavers had enough time to build a blockade across the road, covered in snow, allowing them to attack from behind and the side. This left the caravanners with a very clear escape route—and many of them took it. The guards were out of position, investigating the blockade, and some ran after the civilians, urging them not to run towards the werewolf hunting grounds. In the chaos, it was easy enough to
<<if _goods == "ice">>
smash the blocks of ice into unsellable shards that would melt before they reach Lucgate.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
With the caravanners torn between fight, flight and saving their goods, it was easy enough to pick the guards off one by one, and when the rest broke <<name $g.fighter>> and <<name $g.raider>> herded them towards the werewolves, while <<name $g.scout>> subdued and captured one of them who <<they $g.scout>> thought would prove valuable. If any of the caravanners survived the werewolves, they haven't returned to the city to say.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers had enough time to build a blockade across the road, covered in snow, allowing them to attack from behind and the side. This left the caravanners with a very clear escape route—and many of them took it. The guards were out of position, investigating the blockade, and some ran after the civilians, urging them not to run towards the werewolf hunting grounds. In the chaos, it was easy enough to
<<if _goods == "ice">>
smash the blocks of ice into unsellable shards that would melt before they reach Lucgate.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
With the caravanners torn between fight, flight and saving their goods, it was easy enough to pick the guards off one by one, and when the rest broke <<name $g.fighter>> and <<name $g.raider>> herded them towards the werewolves. If any of them survived, they haven't returned to the city to say.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers had enough time to build a blockade across the road, covered in snow, allowing them to attack from behind and the side. This would leave the caravanners with a very clear escape route, but they never showed up. After a few days of waiting they were forced to return home, wondering if they'd even managed to find the right place.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Your slavers had enough time to build a blockade across the road, covered in snow, allowing them to attack from behind and the side. This left the caravanners with a very clear escape route, but instead, they plunged forward, and managed to break through the blockade. The wagons fled, and there were enough guards that pursuit was not an option.
</p>
<p>
Your slavers were forced to abandon the fight and head home, nursing their injuries, and with nothing to show for their efforts.
</p>
<</if>>
<<else>>
the mosquito filled swampland. Why any caravan would willingly travel this route was beyond <<name $g.scout>>, but <<they $g.scout>> pushed on regardless. The marshy soil made fleeing near impossible, both for your slavers and for the caravanners, and <<name $g.scout>> had to hope they'd be able to overwhelm the caravan in combat.
<<if $gOutcome == 'crit'>>
<p>
The difficulty in moving meant your slavers only had to face a few opponents at a time, and while <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo and
<<if _goods == "ice">>
smashed the blocks of ice into unsellable shards before tipping them into the marsh to melt.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
The marsh meant those who run are easy to cut down, but the last <<woman $g.slaves>> surrendered, and is now confined in your slave pens awaiting your final decision.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The difficulty in moving meant your slavers only had to face a few opponents at a time, and while <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo and
<<if _goods == "ice">>
smashed the blocks of ice into unsellable shards before tipping them into the marsh to melt.
<<elseif _goods == "lumber">>
set fire to wooden planks. Even if they didn't burn completely, they'd be warped by the flame to the point of uselessness.
<<else>>
set fire to the crates, easily destroying the trade goods.
<</if>>
The marsh slowed their pursuit and the caravanners scattered, meaning at least some survived the ambush. Still, your slavers left the remains of the caravan burning in the marsh, and have done enough to fulfil the contract.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, none of them ever saw the caravan. Your slavers spent days in being bitten by everything that flew, swam or wriggled in those marshes, and in the end, the caravan didn't even have the decency to show up to be raided. Maybe <<name $g.scout>> got turned around in the mess of water, dead trees and floating islands of vegetation.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The difficulty of moving in the swamp should have meant your slavers only had to face a few opponents at a time. While <<name $g.fighter>> and <<name $g.scout>> engaged the guards, <<name $g.raider>> went straight for the cargo. What they hadn't accounted for was the number of crossbows the caravanners had with them—in hindsight it was probably why they felt confident in going through the marshes in the first place. The attempted raid was over almost before it began, with your slavers barely able to limp back to the fort.
</p>
<</if>>
<</if>>
<</if>><<run new setup.UnitGroup(
"a_merchant_s_revenge_caravan_raid_western_forest_1",
"Caravan Slaves",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.OneRandom([
setup.qc.BgTraitReset('unit', setup.trait.bg_adventurer),
setup.qc.BgTraitReset('unit', setup.trait.bg_hunter),
setup.qc.BgTraitReset('unit', setup.trait.bg_mercenary),
setup.qc.BgTraitReset('unit', setup.trait.bg_scholar),
setup.qc.BgTraitReset('unit', setup.trait.bg_woodsman)
]),
],
)>>
<<set _criteriaraider = new setup.UnitCriteria(
null, /* key */
'Raider-Inventor', /* name */
[
setup.trait.bg_engineer,
setup.trait.bg_mercenary,
setup.trait.bg_slaver,
setup.trait.bg_soldier,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_active,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_healer,
setup.trait.bg_priest,
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_studious,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_caravan_raid_western_forest_', /* key */
"A Merchant\'s Revenge: Caravan Raid (Western Forest)", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'money',
'unit',
'ire',
'forest',
],
1, /* weeks */
5, /* expiration weeks */
{ /* roles */
'scout': [ setup.qu.spotter, 1],
'fighter': [ setup.qu.fighter, 1],
'raider': [ _criteriaraider, 1],
},
{ /* actors */
'slaves': 'a_merchant_s_revenge_caravan_raid_western_forest_1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_caravan_raid_western_forest_',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_caravan_raid_western_forest_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.Slave('slaves', "a|was a member of a Toran caravan, captured by your slavers in a raid", undefined),
setup.qc.MoneyCustom(2000),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_western_forest_Crit',
[
setup.qc.VarAdd('mlang_merchantrevenge_caravancount', 1, -1),
setup.qc.MoneyCustom(2000),
setup.qc.Ire('humankingdom', 1),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_western_forest_Crit',
[
setup.qc.TraumatizeRandom('scout', 5),
],
],
[
'Quest_a_merchant_s_revenge_caravan_raid_western_forest_Crit',
[
setup.qc.Ire('humankingdom', 1),
setup.qc.OneRandom([
setup.qc.Injury('scout', 1),
setup.qc.Injury('scout', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('fighter', 1),
setup.qc.Injury('fighter', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('raider', 1),
setup.qc.Injury('raider', 2)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '5'),
setup.qres.VarLte('mlang_merchantrevenge_caravancount', 12),
],
[ /* expiration outcomes */
],
)>>/** mlangmerchantprincequest 5 = Caravan Raiding
mlang_merchantrevenge_caravancount = How many caravans successfully raided
**/
<div class='lettercard'>
<p>
Dear <<name $unit.player>>,
</p>
<p>
My contacts have discovered a caravan carrying a shipment of
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "dried herbs">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "cured meats">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "arrows">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "healing salves">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "forest fruits">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "fine wines">>
<</if>>
<<= _goods>>
will be travelling from the <<lore region_forest>> to Lucgate over the next month or so.
Please ensure it does not make it to its destination with its cargo intact. The usual bonus will apply should you be successful in this endeavour.
</p>
</div>
<p>
On the back of the note is a rough map showing
<<if $gQuest.getSeed() % 5 == 0>>
an old ruin, reclaimed by the forest.
<<set _location = "ruin">>
<<elseif $gQuest.getSeed() % 5 == 1>>
a recently abandoned elven village.
<<set _location = "village">>
<<elseif $gQuest.getSeed() % 5 == 2>>
a clearing in the middle of the forest.
<<set _location = "clearing">>
<<elseif $gQuest.getSeed() % 5 == 3>>
a winding track in the deep forest.
<<set _location = "track">>
<<elseif $gQuest.getSeed() % 5 == 4>>
a flowering meadow at the forest's edge.
<<set _location = "meadow">>
<</if>>
It looks like you may be able to set up an ambush there. It could also be an opportunity to acquire a valuable slave. Of course, if you leave any survivors, the Toran people will likely become more antagonistic toward you.
</p>/* Set cargo */
<<if $gQuest.getSeed() % 6 == 0>>
<<set _goods = "dried herbs">>
<<elseif $gQuest.getSeed() % 6 == 1>>
<<set _goods = "cured meats">>
<<elseif $gQuest.getSeed() % 6 == 2>>
<<set _goods = "arrows">>
<<elseif $gQuest.getSeed() % 6 == 3>>
<<set _goods = "healing salves">>
<<elseif $gQuest.getSeed() % 6 == 4>>
<<set _goods = "forest fruits">>
<<elseif $gQuest.getSeed() % 6 == 5>>
<<set _goods = "fine wines">>
<</if>>
/* Set ambush location */
<<if $gQuest.getSeed() % 5 == 0>>
<<set _location = "ruin">>
<<elseif $gQuest.getSeed() % 5 == 1>>
<<set _location = "village">>
<<elseif $gQuest.getSeed() % 5 == 2>>
<<set _location = "clearing">>
<<elseif $gQuest.getSeed() % 5 == 3>>
<<set _location = "track">>
<<elseif $gQuest.getSeed() % 5 == 4>>
<<set _location = "meadow">>
<</if>>
After studying at the map, <<name $g.scout>> cut through the forest, leading your slavers to
<<if $g.scout.isYou() or $g.fighter.isYou() or $g.raider.isYou()>>
<<set _notyou = []>>
<<if !$g.scout.isYou()>>
<<run _notyou.push($g.scout)>>
<</if>>
<<if !$g.fighter.isYou()>>
<<run _notyou.push($g.fighter)>>
<</if>>
<<if !$g.raider.isYou()>>
<<run _notyou.push($g.raider)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
<<if _location == "ruin">>
a quiet ruin, long overgrown by vegetation and silent bar the sounds of birds overhead.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'race_elf'})>>
<<if _unit>>
<<name _unit>> thought the ruins probably dated from the sylvan-catkin wars, but didn't want to go into further detail.
<<dialogue _unit>>
My people weren't exactly at their best during that time.
<</dialogue>>
<</if>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'race_catkin'})>>
<<if _unit>>
<<name _unit>> thought it dated from the war of the open paw, but didn't want to go into further detail.
<<dialogue _unit>>
It was a long time ago. Long before my time.
<</dialogue>>
<</if>>
<p>
Still, some of the overgrown stone walls provided a great vantage point over the overgrown cobbled road, which the map indicated the caravan would be following. There was even an old firepit showing the route was fairly well travelled.
</p>
<<if $gOutcome == 'crit'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, you decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after you.
<<elseif _goods == "fine wines">>
After taking a few skins for yourself, you, <<name _o1>> and <<name _o2>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
As you made your way back out of the camp, still unnoticed, you decided to take the paralysed guard with you. <<They $g.slaves>> might have seen your faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, it you decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after you.
<<elseif _goods == "fine wines">>
After taking a few skins for yourself, you, <<name _o1>> and <<name _o2>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
Once that was done, it was simply a matter of sneaking back out of camp. Unfortunately the guard had bled out - apparently <<name $g.scout>> had punctured an artery, and you would not be getting another slave today. At least, not from this operation.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But they never came. Upon closer inspection, the ashes in the firepit looked recent. Very recent. If you'd arrived even a day earlier, maybe you'd have found them.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> used a dart coated in a paralytic poison to incapacitate the nearest guard—or tried to. The dart went wide, and the guard raised the alarm. The ensuing battle did not go well for you, and your slavers were roundly beaten before managing to escape into the forests.
</p>
<</if>>
<<elseif _location == "village">>
a very familiar village. You'd raided it recently, and you could still see the damage from the last time you'd visited. Apparently the elves had decided not to rebuild. Still, familiarity meant you were able to easily find vantage points on the roofs of the remaining houses.
<<if $gOutcome == 'crit'>>
<p>
It appeared the caravan hadn't known about your recent raid, as they appeared surprised and unsettled when they arrived at the deserted village. They split up to search the area, giving you and <<name _o1>> a number of stealthy kills as they ventured near your hiding places. Meanwhile, <<name _o2>> carefully crept around to the almost undefended wagon. Once there, they vaulted into the driving seat and whipped the horses into a gallop, taking off with the cargo.
</p>
<p>
The remaining caravanners chased after the cargo, but with you and <<name _o1>> behind them, they stood no chance. When the dust settled, you had the shipment of _goods to onsell yourself - and a new captive to introduce to their new life of servitude.
<<if _goods == "healing salves">>
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<</if>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
It appeared the caravan hadn't known about your recent raid, as they appeared surprised and unsettled when they arrived at the deserted village. They split up to search the area, giving you and <<name _o1>> a number of stealthy kills as they ventured near your hiding places. Meanwhile, <<name _o2>> carefully crept around to the almost undefended wagon. Once there, they vaulted into the driving seat and whipped the horses into a gallop, taking off with the cargo.
</p>
<p>
The remaining caravanners chased after the cargo, forcing you and <<name _o1>> to engage them in combat to give <<name _o2>> the chance to escape. You broke off before you were overwhelmed, but the sheer number of guards meant that you've definitely left witnesses behind.
<<if _goods == "healing salves">>
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, familiarity may have led to overconfidence. After waiting for the day - and then three days - it became clear that you had the wrong village, and were forced to return empty handed.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the roof <<name _o2>> picked to hide on had been damaged, and water damage had weakened it in between your visits. It finally collapsed just as the caravan arrived, and the ensuing battle did not go well for you or your slavers. Eventually, you all fled into the forest, nursing several injuries that are going to take some time to heal.
</p>
<</if>>
<<elseif _location == "clearing">>
one of many forest clearings, a rough trail passing from one side to the other. It was peaceful, idyllic even, although perhaps not for long.
<<if $gOutcome == 'crit'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, it you decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after you.
<<elseif _goods == "fine wines">>
After taking a few skins for yourself, you, <<name _o1>> and <<name _o2>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
As you made your way back out of the camp, still unnoticed, you decided to take the paralysed guard with you. <<They $g.slaves>> might have seen your faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, you decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after you.
<<elseif _goods == "fine wines">>
After taking a few skins for yourself, you, <<name _o1>> and <<name _o2>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
Once that was done, it was simply a matter of sneaking back out of camp. Unfortunately the guard had bled out - apparently <<name $g.scout>> had punctured an artery, and you would not be getting another slave today. At least, not from this operation.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
However, the clearing remained idyllic for the entire week, and eventually you gave up waiting and returned to the fort. Later, you heard of the caravan's arrival in Lucgate, either you missed them, or had the wrong clearing entirely.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. Just as everyone was settling down to sleep, the dead tree <<name _o1>> had climbed started to creak, and then started to fall. Not only was <<name _o1>> injured in the fall, <<they _o1>> was immediately recognised by the caravan as a slaver from <<rep $company.player>>, and they immediately drew their weapons to fight. With one <<woman _o1>> down, the fight was short and brutal, and while you all managed to escape, you'll all be nursing your injuries for a while.
<<if _goods == "healing salves">>
You could really have used those healing salves right around now.
<</if>>
</p>
<</if>>
<<elseif _location == "track">>
an infrequently traversed section of the deep woods, where the trees were tall, thick and blocked out most of the light that could filter in through the canopy. With little light, the undergrowth was sparse, but the darkness made for plentiful hiding places as you set up your ambush.
<<if $gOutcome == 'crit'>>
<p>
While investigating the area you found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took you all some time to fell the tree, but after several hours of work with axes and ropes you all managed to haul it into place so that it blocked the trail. Then you and your slavers hid, waiting for the caravan to arrive.
</p>
<p>
When they made it to the fallen tree, there was some consternation, although you were certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<name $g.scout>> to shoot down the wasp nests, sending angry wasps swarming over the caravanners. Having coated yourselves in thick mud, you and your slavers were easily able to overpower the few guards who kept their wits - and ability to fight - with the rest of the caravan fleeing into the forest in search of a body of water. Moving quickly, you easily
<<if _goods == "healing salves">>
grabbed the healing salves
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
destroyed the cargo
<</if>>
and hightailed it out of there, <<name _o2>> capturing a subdued caravanner and bringing them along as an additional bonus.
</p>
<<elseif $gOutcome == 'success'>>
<p>
While investigating the area you found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took you all some time to fell the tree, but after several hours of work with axes and ropes, you managed to haul it into place so that it blocked the trail. Then you and your slavers hid, waiting for the caravan to arrive.
</p>
<p>
When they made it to the fallen tree, there was some consternation, although you were certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<name $g.scout>> to shoot down the wasp nests, sending angry wasps swarming over the caravanners. Having coated yourselves in thick mud, you and your slavers were easily able to overpower the few guards who kept their wits - and ability to fight - with the rest of the caravan fleeing into the forest in search of a body of water. Moving quickly, you easily
<<if _goods == "healing salves">>
grabbed the healing salves
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
destroyed the cargo
<</if>>
and hightailed it out of there.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
While investigating the area you found an old, dead tree that was rotted at the base and ready to fall.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<<else>>
It took you all some time to fell the tree, but after several hours of work with axes and ropes you managed to haul it into place so that it blocked the trail.
<</if>>
Unfortunately, the activity dislodged a number of wasp nests you didn't see, and you and your slavers ran for what felt like hours looking for a body of water to hide in. As you fled, <<name $g.scout>> saw the caravan just coming into view, but you were in no position to attack them - especially without the element of surprise.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
While investigating the area you found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took you all some time to fell the tree, but after several hours of work with axes and ropes, you managed to haul it into place so that it blocked the trail. Then you and your slavers hid, waiting for the caravan to arrive.
</p>
<p>
When they made it to the fallen tree, there was some consternation, although you were certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<name $g.scout>> to shoot down the wasp nests, or at least, that was the intention. With <<their $g.scout>> shots missing, the caravan guards closed in, and beat you soundly with superior numbers. Thankfully, you all managed to escape, but with all of you injured, this definitely wasn't a success.
</p>
<</if>>
<<else>>
a beautiful meadow full of wildflowers and dappled sunlight. It wasn't, at first glance, the optimal place for an ambush, but you soon realised a significant part of the meadow was actually a shallow lake, covered with mats of flowering vegetation.
<<if $gOutcome == 'crit'>>
<p>
With time on their side, you were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points for your slavers. You also found the 'path' of solid land you assumed the caravan would take to pass through the meadow. That done, you all settled in to wait.
</p>
<p>
When the caravan came into view it became apparent that they weren't all familiar with the route, relying on a guide to lead them through the meadow.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> insisted you all wait until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
<<name _unit>> forced <<themselves _unit>> to wait, second by torturous second, until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<</if>>
<</if>>
After that, picking off the caravanners was relatively easy, and you were soon left with the entire shipment of _goods,
<<if _goods == "healing salves">>
which you kept for yourselves,
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
which should fetch a good price,
<</if>>
and a new captive now confined in your slave pens.
</p>
<<elseif $gOutcome == 'success'>>
<p>
With time on their side, you were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points for your slavers. You also found the 'path' of solid land you assumed the caravan would take to pass through the meadow. That done, you all settled in to wait.
</p>
When the caravan came into view it became apparent that they weren't all familiar with the route, relying on a guide to lead them through the meadow.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> insisted you all wait until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
<<name _unit>> forced <<themselves _unit>> to wait, second by torturous second, until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<</if>>
<</if>>
After that, picking off the caravanners was relatively easy, but a fair number of them jumped into the water and fled away from you, meaning some of them survived to tell the tale of your brazen attack. Still, you now have an entire shipment of _goods,
<<if _goods == "healing salves">>
which you keep for yourselves.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
which should fetch a good price.
<</if>>
Overall, you still consider the mission a success.
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, none of you ever saw the caravan. You spent days with wet boots and damp clothes before you finally gave up. Maybe <<name $g.scout>> picked the wrong meadow. There are so many of them along the edge of the forest, after all.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
With time on their side, you were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points for your slavers. You also found the 'path' of solid land you assumed the caravan would take to pass through the meadow. That done, you all settled in to wait.
</p>
<p>
Unfortunately, you hadn't counted on the water buffalo that often like to feed in the well, water meadows. The herd you encountered had a number of calves, and were immediately aggressive—and perched half hidden in islands of land, you didn't have any easy escape routes. Battered, trampled and nearly drowned you dragged yourselves back to the fort. It looked like this caravan would get away this time. Assuming you even had the right meadow.
</p>
<</if>>
<</if>>
<<else>>
<<if _location == "ruin">>
a quiet ruin, long overgrown by vegetation and silent bar the sounds of birds overhead.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'race_elf'})>>
<<if _unit>>
<<name _unit>> thought the ruins probably dated from the sylvan-catkin wars, but didn't want to go into further detail.
<<dialogue _unit>>
My people weren't exactly at their best during that time.
<</dialogue>>
<</if>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'race_catkin'})>>
<<if _unit>>
<<name _unit>> thought it dated from the war of the open paw, but didn't want to go into further detail.
<<dialogue _unit>>
It was a long time ago. Long before my time.
<</dialogue>>
<</if>>
<p>
Still, some of the overgrown stone walls provided a great vantage point over the overgrown cobbled road, which the map indicated the caravan would be following. There was even an old firepit showing the route was fairly well travelled.
</p>
<<if $gOutcome == 'crit'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, <<name $g.scout>> decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after your slavers.
<<if _goods == "fine wines">>
After taking a few skins for themselves, <<name $g.scout>>, <<name $g.fighter>> and <<name $g.raider>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
As your slavers made your way back out of the camp, still unnoticed, <<name $g.raider>> decided to take the paralysed guard with <<them $g.raider>>. <<They $g.slaves>> might have seen your slavers' faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
</p>
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, <<name $g.scout>> decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after your slavers.
<<elseif _goods == "fine wines">>
After taking a few skins for themselves, <<name $g.scout>>, <<name $g.fighter>> and <<name $g.raider>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
<p>
Once that was done, it was simply a matter of sneaking back out of camp. Unfortunately the guard had bled out - apparently <<name $g.scout>> had punctured an artery. Still, your slavers had completed the mission, and you'd be getting paid.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But they never came. Upon closer inspection, the ashes in the firepit looked recent. Very recent. If your slavers had arrived even a day earlier, maybe they'd have been successful.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
When the caravan arrived and set up camp they made a cursory sweep of the area, but the hiding locations <<name $g.scout>> had picked out went unnoticed. When they had settled in to sleep, <<name $g.scout>> used a dart coated in a paralytic poison to incapacitate the nearest guard—or tried to. The dart went wide, and the guard raised the alarm. The ensuing battle did not go well for you slavers, and they were roundly beaten before they managed to escape into the forest.
</p>
<</if>>
<<elseif _location == "village">>
a very familiar village. They'd raided it recently, and <<name $g.scout>> could still see the damage from the last time <<they $g.scout>>'d visited. Apparently the elves had decided not to rebuild. Still, familiarity meant your slavers were able to easily find vantage points on the roofs of the remaining houses.
<<if $gOutcome == 'crit'>>
<p>
It appeared the caravan hadn't known about your company's recent raid, as they appeared surprised and unsettled when they arrived at the deserted village. They split up to search the area, giving <<name $g.fighter>> and <<name $g.raider>> a number of stealthy kills as they ventured near their hiding places. Meanwhile, <<name $g.scout>> carefully crept around to the almost undefended wagon. Once there, they vaulted into the driving seat and whipped the horses into a gallop, taking off with the cargo.
</p>
<p>
The remaining caravanners chased after the cargo, but with <<name $g.fighter>> and <<name $g.raider>> behind them, they stood no chance. When the dust settled, your slavers had the shipment of _goods in their possession - and a new captive to introduce to their new life of servitude.
<<if _goods == "healing salves">>
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<</if>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
It appeared the caravan hadn't known about your company's recent raid, as they appeared surprised and unsettled when they arrived at the deserted village. They split up to search the area, giving <<name $g.fighter>> and <<name $g.raider>> a number of stealthy kills as they ventured near their hiding places. Meanwhile, <<name $g.scout>> carefully crept around to the almost undefended wagon. Once there, they vaulted into the driving seat and whipped the horses into a gallop, taking off with the cargo.
</p>
<p>
The remaining caravanners chased after the cargo, forcing <<name $g.fighter>> and <<name $g.raider>> to engage them in combat to give <<name $g.scout>> the chance to escape. <<name $g.fighter>> and <<name $g.raider>> broke off before they were overwhelmed, but the sheer number of guards meant that they definitely left witnesses behind.
</p>
<<if _goods == "healing salves">>
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<</if>>
<</if>>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, familiarity may have led to overconfidence. After waiting for the day - and then three days - it became clear that your slavers had the wrong village, and they were forced to return empty handed.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the roof <<name $g.fighter>> picked to hide on had been damaged, and water damage had weakened it in between your company's visits. It finally collapsed just as the caravan arrived, and the ensuing battle did not go well for your slavers. Eventually, they all fled into the forest, nursing several injuries that are going to take some time to heal.
</p>
<</if>>
<<elseif _location == "clearing">>
one of many forest clearings, a rough trail passing from one side to the other. It was peaceful, idyllic even, although perhaps not for long.
<<if $gOutcome == 'crit'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, <<name $g.scout>> decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after your slavers.
<<elseif _goods == "fine wines">>
After taking a few skins for themselves, <<name $g.scout>>, <<name $g.fighter>> and <<name $g.raider>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
</p>
<p>
As they made their way back out of the camp, still unnoticed, <<name $g.raider>> decided to take the paralysed guard with <<them $g.raider>>. <<They $g.slaves>> might have seen your slavers' faces after all.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. When they had settled in to sleep, <<name $g.scout>> subdued the nearest guard with a paralytic dart, and everyone else crept into the camp, doing their best to move as quietly as possible.
<<if _goods == "healing salves">>
It was simple enough to filch the valuable healing salves and leave the camp none the wiser. It was something your slavers needed more often than not.
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<elseif _goods == "dried herbs" or _goods == "arrows">>
Given how flammable the cargo was, <<name $g.scout>> decided the simplest way to deal with it was to drop a lit torch among the crates. By the time the sabotage would be discovered, the caravan would be far too concerned with putting out the impending forest fire than chasing after your slavers.
<<elseif _goods == "fine wines">>
After taking a few skins for themselves, <<name $g.scout>>, <<name $g.fighter>> and <<name $g.raider>> started stabbing the wineskins, letting the rich alcohol soak into the forest floor. It was a waste, but the work was quick, and more importantly, silent.
<<else>>
It was simple enough to tip out all the foodstuffs and trample them into the dirt, effectively ruining them all.
<</if>>
</p>
<p>
Once that was done, it was simply a matter of sneaking back out of camp. Unfortunately one of the other guards spotted your slavers and raised the alarm, forcing them to flee. Their actions had been witnessed, but the mission was still a success.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
However, the clearing remained idyllic for the entire week, and eventually your slavers gave up waiting and returned to the fort. Later, you heard of the caravan's arrival in Lucgate, either your slavers missed them, or had the wrong clearing entirely.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The caravan arrived at nightfall, and soon set up camp in the clearing. Just as everyone was settling down to sleep, the dead tree <<name $g.fighter>> had climbed started to creak, and then started to fall. Not only was <<name $g.fighter>> injured in the fall, <<they $g.fighter>> was immediately recognised by the caravan as a slaver from <<rep $company.player>>, and the guards immediately drew their weapons to fight. With one <<woman $g.fighter>> down, the fight was short and brutal, and while your slavers managed to escape, they'll all be nursing injuries for a while.
<<if _goods == "healing salves">>
You could really have used those healing salves right around now.
<</if>>
</p>
<</if>>
<<elseif _location == "track">>
an infrequently traversed section of the deep woods, where the trees were tall, thick and blocked out most of the light that could filter in through the canopy. With little light, the undergrowth was sparse, but the darkness made for plentiful hiding places for your slavers.
<<if $gOutcome == 'crit'>>
<p>
While investigating the area <<name $g.scout>> found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took your slavers some time to fell the tree, but after several hours of work with axes and ropes they managed to haul it into place so that it blocked the trail. Then they hid, waiting for the caravan to arrive.
</p>
<p>
When they made it to the fallen tree, there was some consternation, although <<name $g.scout>> was certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<them $g.scout>> to shoot down the wasp nests, sending angry wasps swarming over the caravanners. Having coated themselves in thick mud, your slavers were easily able to overpower the few guards who kept their wits - and ability to fight - with the rest of the caravan fleeing into the forest in search of a body of water. Moving quickly, they easily
<<if _goods == "healing salves">>
grabbed the healing salves
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
destroyed the cargo
<</if>>
and hightailed it out of there, <<name $g.raider>> capturing a subdued caravanner and bringing <<them $g.slaves>> along as an additional bonus.
</p>
<<elseif $gOutcome == 'success'>>
<p>
While investigating the area <<name $g.scout>> found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took your slavers some time to fell the tree, but after several hours of work with axes and ropes they managed to haul it into place so that it blocked the trail. Then they hid, waiting for the caravan to arrive.
</p>
<p>
When the caravan made it to the fallen tree, there was some consternation, although <<theslaver $g.raider>> was certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<name $g.scout>> to shoot down the wasp nests, sending angry wasps swarming over the caravanners. Having coated themselves in thick mud, your slavers were easily able to overpower the few guards who kept their wits - and ability to fight - with the rest of the caravan fleeing into the forest in search of a body of water. Moving quickly, they easily
<<if _goods == "healing salves">>
grabbed the healing salves
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
destroyed the cargo
<</if>>
and hightailed it out of there.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
While investigating the area you found an old, dead tree that was rotted at the base and ready to fall.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<<else>>
It took your slavers some time to fell the tree, but after several hours of work with axes and ropes they managed to haul it into place so that it blocked the trail.
<</if>>
Unfortunately, the activity dislodged a number of wasp nests they didn't see, and your slavers ran for what felt like hours looking for a body of water to hide in. As they fled, <<name $g.scout>> saw the caravan just coming into view, but your slavers were in no position to attack them - especially without the element of surprise.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
While investigating the area <<name $g.scout>> found a number of useful things—firstly an old, dead tree that was rotted at the base and ready to fall. Secondly, a number of wasp nests, hanging right over the trail.
<<set _woodsman = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'bg_woodsman'})>>
<<if _woodsman>>
<<name _woodsman>> was easily able to fell the tree, angling its fall so that it blocked the trail.
<</if>>
It took them some time to fell the tree, but after several hours of work with axes and ropes, they managed to haul it into place so that it blocked the trail. Then your slavers hid, waiting for the caravan to arrive.
</p>
<p>
When the caravan made it to the fallen tree, there was some consternation, although <<name $g.raider>> was certain they would soon decide to simply go around the obstruction. However, the pause was long enough for <<name $g.scout>> to shoot down the wasp nests, or at least, that was the intention. With <<their $g.scout>> shots missing, the caravan guards closed in, and beat your slavers soundly with superior numbers. Thankfully, they all managed to escape, but with all of them injured, this definitely wasn't a success.
</p>
<</if>>
<<else>>
a beautiful meadow full of wildflowers and dappled sunlight. It wasn't, at first glance, the optimal place for an ambush, but <<name $g.scout>> soon realised a significant part of the meadow was actually a shallow lake, covered with mats of flowering vegetation.
<<if $gOutcome == 'crit'>>
<p>
With time on their side, your slavers were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points. <<name $g.fighter>> also found the 'path' of solid land <<they $g.fighter>> assumed the caravan would take to pass through the meadow. That done, they settled in to wait.
</p>
When the caravan came into view it became apparent that they weren't all familiar with the route, relying on a guide to lead them through the meadow.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> insisted your slavers waited until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
<<name _unit>> forced <<themselves _unit>> to wait, second by torturous second, until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<</if>>
<</if>>
After that, picking off the caravanners was relatively easy, and your slavers were soon left with the entire shipment of _goods,
<<if _goods == "healing salves">>
which they brought back to the fort,
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
which should fetch a good price,
<</if>>
and a new captive now confined in your slave pens.
<<elseif $gOutcome == 'success'>>
<p>
With time on their side, your slavers were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points. <<name $g.fighter>> also found the 'path' of solid land <<they $g.fighter>> assumed the caravan would take to pass through the meadow. That done, they settled in to wait.
</p>
When the caravan came into view it became apparent that they weren't all familiar with the route, relying on a guide to lead them through the meadow.
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> insisted your slavers waited until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.fighter, $g.raider], {trait: 'per_aggressive'})>>
<<if _unit>>
<<name _unit>> forced <<themselves _unit>> to wait, second by torturous second, until the caravan was in the middle of the meadow before felling the guide with a well placed arrow, leaving the caravan stranded.
<</if>>
<</if>>
After that, picking off the caravanners was relatively easy, and your slavers were soon left with the entire shipment of _goods,
<<if _goods == "healing salves">>
which they brought back to the fort,
<<run setup.qc.Item('healing_potion').apply($gQuest)>>.
<<else>>
which should fetch a good price,
<</if>>
Overall, you still consider the mission a success.
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, none of your slavers ever saw the caravan. They spent days with wet boots and damp clothes before finally giving up. Maybe <<name $g.scout>> picked the wrong meadow. There are so many of them along the edge of the forest, after all.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
With time on their side, your slavers were able to determine the lay of the land, quite literally working out where the stable ground was and finding the best vantage points. <<name $g.fighter>> also found the 'path' of solid land <<they $g.fighter>> assumed the caravan would take to pass through the meadow. That done, they settled in to wait.
</p>
<p>
Unfortunately, they hadn't counted on the water buffalo that often like to feed in the well, water meadows. The herd they encountered had a number of calves, and were immediately aggressive—and perched half hidden in islands of land, your slavers didn't have any easy escape routes. Battered, trampled and nearly drowned, they dragged themselves back to the fort.
</p>
<</if>>
<</if>>
<</if>><<run new setup.UnitGroup(
"quest_merchant_s_bandit_1",
"Residents of the City of Lucgate: All gender",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
setup.qc.AddTitle('unit', 'quest_merchant_s_bandit_0'),
],
)>>
<<set _criteriainfiltrator = new setup.UnitCriteria(
null, /* key */
'Scout (Vale)', /* name */
[
setup.trait.race_wolfkin,
setup.trait.subrace_humanvale,
setup.trait.bg_raider,
setup.trait.per_cautious,
setup.trait.per_sly,
setup.trait.per_curious,
setup.trait.skill_flight,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.per_brave,
setup.trait.per_sly,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 2,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'a_merchant_s_revenge_the_search_continues', /* key */
"A Merchant\'s Revenge: The Search Continues", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'city',
'money',
'unit',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infiltrator': [ _criteriainfiltrator, 0.75],
'guard': [ setup.qu.fighter, 0.75],
'guard2': [ setup.qu.fighter, 0.75],
'lookout': [ setup.qu.explorer, 0.75],
},
{ /* actors */
'bandit': 'quest_merchant_s_bandit_1',
'mlangmerchantprince': 'a_merchant_s_revenge1',
},
[ /* costs */
],
'Quest_a_merchant_s_revenge_the_search_continues',
setup.qdiff.harder36, /* difficulty */
[ /* outcomes */
[
'Quest_a_merchant_s_revenge_the_search_continuesCrit',
[
setup.qc.Slave('bandit', "a|was a bandit, formally raiding merchant caravans from the Kingdom of Tor", undefined),
setup.qc.Outcomes("success"),
setup.qc.SlaveMarker('mlangmerchantprince'),
setup.qc.MoneyCustom(1500),
setup.qc.VarSet('mlangmerchantprincequest', '2', -1),
setup.qc.SetCooldownEvent('a_merchant_s_revenge_payback_is_sweet', 6),
setup.qc.SetCooldownEvent('a_merchant_s_revenge_visiting_the_captured', 20),
],
],
[
'Quest_a_merchant_s_revenge_the_search_continuesCrit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('humankingdom', 20),
],
],
[
'Quest_a_merchant_s_revenge_the_search_continuesCrit',
[
setup.qc.Injury('infiltrator', 1),
setup.qc.OneRandom([
setup.qc.Injury('guard', 1),
setup.qc.Injury('guard', 2)
]),
setup.qc.OneRandom([
setup.qc.Injury('lookout', 1),
setup.qc.TraumatizeRandom('lookout', 5)
]),
setup.qc.Ire('outlaws', 1),
],
],
[
'Quest_a_merchant_s_revenge_the_search_continuesCrit',
[
setup.qc.TraumatizeRandom('infiltrator', 5),
setup.qc.TraumatizeRandom('guard', 5),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.VarEqual('mlangmerchantprincequest', '1'),
setup.qres.UnitGroupNotBusy('a_merchant_s_revenge1'),
],
[ /* expiration outcomes */
],
)>>/* mlangmerchantprincequest 1 = did not find cipher 2=found cipher
mlangmerchantprinceflirt 1 = flirting with Merchant Prince
/
<<dialogue $g.mlangmerchantprince>>
<b>Well of course it's happening again. I didn't really expect it to stop.</b>
<</dialogue>>
<<questimage "prince_of_cups.jpg">>
/*Set Player Drink*/
<<if $unit.player.isHasAnyTraitExact(['bg_farmer','bg_mercenary','bg_pirate','bg_seaman', 'bg_soldier', 'bg_thug', 'bg_unemployed', 'bg_wildman', 'bg_woodsman'])>>
<<set _pdrink = 'tankard of mead'>>
<<elseif $unit.player.isHasTrait('bg_monk')>>
<<set _pdrink = 'cup of tea'>>
<<else>>
<<set _pdrink = 'glass of wine'>>
<</if>>
<p>It's been a while since you had a glass of wine with <<name $g.mlangmerchantprince>>, but you once again walk through the polished wooden doorways of <<lore location_princeofcups>> and sit down in a leather upholstered booth opposite the <<uadj $g.mlangmerchantprince>> <<urace $g.mlangmerchantprince>>. The sounds of the city drift in through the large windows at the far end of the room,
<<if $gQuest.getSeed() % 2 == 0>>
the bright sunlight casting the corners of the room into shadow.
<<elseif $gQuest.getSeed() % 2 == 1>>
the overcast sky giving everything a washed out look.
<</if>>
</p>
<<if $unit.player.isHasTrait('per_submissive')>>
Accepting the _pdrink in front of you, you wait for <<them $g.mlangmerchantprince>> to speak.
<<elseif $unit.player.isHasTrait('per_direct')>>
"What do you want this time?" you ask.
<<else>>
Picking up the _pdrink you raise it to your lips, savouring the flavour. "You sent a message?" you ask.
<</if>>
<br>
"I've found the location of another bandit camp being paid to attack my caravans," <<name $g.mlangmerchantprince>> says <<uadv $g.mlangmerchantprince>>. "And since I still don't know which of my rivals is behind the attacks, I'd like you to raid the camp and make them stop. My reward offer for any information leading to their employer still stands."<br>
<<if $unit.player.isHasTrait('per_aggressive')>>
"A bag of gold. I'll take it."<br>
"I'm sure you will, once you bring me something leading to whoever is behind these attacks," <<name $g.mlangmerchantprince>> says, sipping his own drink slowly. "Well, I'm glad you're on the job. Do let me know when you have some results."
<<elseif $unit.player.isHasTrait('per_slow')>>
"Reward?"<br>
<<name $g.mlangmerchantprince>> "A big bag of gold," <<they $g.mlangmerchantprince>> say patiently. "You bring me something showing who's behind these attacks, and I give you the gold.
<<if $unit.player.isHasTrait('per_humble')>>
Think of how your company could benefit from that."
<<else>>
Think of what you buy with that."
<</if>>
<br>
"Okay," you say. "Where are the bandits?"
<<elseif $unit.player.isHasTrait('per_cautious')>>
"I'd like to see it again to make sure you still have it."
Smiling, <<name $g.mlangmerchantprince>> pulls out a large pouch of coin and showing it to you.<br>
<<if $unit.player.isHasAnyTraitExact(['face_attractive', 'face_beautiful'])>>
"I'm a little hurt you doubt my word," <<name $g.mlangmerchantprince>> says, pouting.<br>
Is <<he $g.mlangmerchantprince>> flriting with you?<br>
"But there, I hope you're satisfied."<br>
"Where are the bandits?" you ask.
<</if>>
"All right," you say. "Where are the bandits?"
<</if>>
<br>
<<name $g.mlangmerchantprince>> slides a small piece of parchment across the table to you, and you tuck the map away inside your clothing.
<p>Would you like to do anything else before you leave?"</p>
<<choose>>
<<optif $unit.player.isHasAnyTraitExact(['face_attractive', 'face_beautiful'])>>
<<opt "Try flirting with <<name $g.mlangmerchantprince>>" >>
<<if $unit.player.isHasAnyTraitExact(['bg_mythical', 'bg_noble', 'bg_royal'])>>
<<run setup.qc.VarSet("mlangmerchantprinceflirt", "1").apply($gQuest)>>
<<dialogue $g.mlangmerchantprince>>
I'm flattered. And, well, perhaps if circumstances were different you could be more than a diversion. Perhaps we can talk again when these circumstances resolve themselves.
<</dialogue>>
<<else>>
<<dialogue $g.mlangmerchantprince>>
I'm flattered. Perhaps if circumstances were different we could get to know each other on a...physical level.
<</dialogue>>
<<if $unit.player.isHasAnyTraitExact(['per_attentive', 'per_smart'])>>
You get the impression that anything more than a fuck isn't really on the table. You might be though - if you play your cards right.
<<else>>
<</if>>
<</if>>
<<opt "Ask about <<their $g.mlangmerchantprince>> rivals.">>
<<dialogue $g.mlangmerchantprince>>
When you get to a certain level of... political power, it feels like you get surrounded by two types of people - those who want to use you to get ahead, and those who want to see you fail to take your place. The thing is, sometimes they're the same people.
<</dialogue>>
<<opt "Just finish your drink and leave.">>
<p>You savour your _pdrink and asking to buy some for later before deciding you don't really want to know how much it costs. Taking your leave of <<name $g.mlangmerchantprince>> you head back out into the city, a map showing the location of the bandit camp tucked away into a pocket.</p>
<<optif !$settings.bannedtags.watersport>>
<<opt "Visit the toilets.">>
<p>The toilets are plush. That said, any place that uses the word 'toilet' is going to be plush. There are the marble countertops, a silver pitcher of water for washing your hands, and an attendant to bring you a towel. There are also discreetly partitioned areas for evacuating your bowels. However, along one wall two slaves are chained, restrained such that they are forced to kneel on the ground, their arms shackled above their heads. Their eyes are covered with thick blindfolds and their mouths held open by clever metal gags. Clearly for relieving yourself the other way. Well, who are you to ignore such an opportunity?</p>
<<if $unit.player.isHasDick()>>
<p>Pulling your soft cock out of your <<uequipslot $unit.player 'legs'>>, you head over to the <<woman $g.bandit>> on the left and shove your prick through the circular gag and into <<theirs $g.bandit>> mouth. <<They $g.bandit>> moans as you let your piss flow into <<theirs $g.bandit>> and swallows eagerly, not spilling a single drop. <<Their $g.bandit>> tongue massaging your cock brings you quickly to full erection, and you go from pissing into <<their $g.bandit>> mouth to fucking <<their $g.bandit>> throat, enjoying the sounds of <<them $g.bandit>> gagging before you fill their stomach with a a hot load of cum.</p>
<<else>>
<p>
Removing your <<uequipslot $unit.player 'legs'>> and undergarments you position yourself over the <<woman $g.bandit>> on the left and let it flow. <<They $g.bandit>> gulp furiously as your piss splatters over their face, the metal gag preventing them from getting their lips around your pussy. It also prevents <<their $g.bandit>> tongue from reaching you, which is disappointing, but still, that was fun.</p>
<</if>>
<</choose>><p>You sent more slavers on this job than normal, but a full bandit camp was not something to take lightly.
<<set _unit = setup.selectUnit([$g.infiltrator, $g.guard, $g.guard2, $g.lookout], {trait: 'per_cautious'})>>
<<if _unit>>
<<name _unit>> suggested an dawn raid, so the rising sun at their backs to make it harder for the bandits to see them. With most of the camp still asleep, they made short work of the sentries and went from tent to tent, dispatching the outlaws they found within.
<<else>>
True to your orders, they snuck in under the cover of night, dispatching the sentries at the edge of camp and using their bandanas to help disguise their own features as they headed for the centre of camp.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<<if $g.guard.isYou()>>
And when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for you to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<<else>>
<<name $g.infiltrator>> found the bandit leader in the largest tent, as you'd expected,
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<</if>>
<p>Meanwhile, your slavers had found a good deal of treasure, and <<name $g.lookout>> found a number of messages on finely made parchment. Unfortunately, they were in some kind of cipher and none of your slavers were able to read them. Still, they hoped these would be the additional proof <<name $g.mlangmerchantprince>> had been looking for.</p>
<p>Given the quiet in camp, it was a simple matter to steal back out of the camp, leaving the bandits leaderless, penniless, and with a number of dead to bury. It might not be enough to drive them away, but it should give <<name $g.mlangmerchantprince>>'s caravans a better chance at getting through the <<lore region_vale>>.</p>
<p>A few days later, you receive a message from <<name $g.mlangmerchantprince>>, written in a neat, flowing hand.</p>
<div class='lettercard'>
<i>Dear <<name $unit.player>>,<br>
<p>Your work has been exemplary and I am several steps closer to my goal. Please accept this bonus pay for exceptional services rendered, as previously agreed.</p>
<<if $unit.player.isHasTrait('bg_royal')>>
I do look forward to seeing you again, and hope you may find time to join me again at <<lore location_princeofcups>>. I also look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<<elseif $unit.player.isHasTrait('bg_noble')>>
I do look forward to seeing you again, and hope you may find time to join me again at <<lore location_princeofcups>>. I also look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<<else>>
I look forward to visiting your fine establishment and enjoying the services of our mutual friend.
<</if>>
<p>Yours faithfully</p>
<<name $g.mlangmerchantprince>></i>
</div>
<<elseif $gOutcome == 'success'>>
<<if $g.guard.isYou()>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for you to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<<else>>
<<name $g.infiltrator>> found the bandit leader in the largest tent, as you'd expected,
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<</if>>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> infiltrator|was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. <<They $g.bandit>> died in the ensuing scuffle, but your slavers were able to take <<their $g.bandit>> head. <<name $g.lookout>> had seen a wanted poster with their image on it in the area, and between the two that should be enough to prove the bandit's fate to the merchant <<name $g.mlangmerchantprince>>.</p>
<<elseif $gOutcome == 'failure'>>
<<if $g.guard.isYou()>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for you to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<<else>>
<<name $g.infiltrator>> found the bandit leader in the largest tent, as you'd expected,
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<</if>>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> infiltrator|was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. You slavers barely escaped with their lives—and thankfully with only minor injuries. However, they were forced to leave the valuables they'd looted behind, leaving you with nothing to show for this endeavour.</p>
<<elseif $gOutcome == 'disaster'>>
<<if $g.guard.isYou()>>
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for you to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<<else>>
<<name $g.infiltrator>> found the bandit leader in the largest tent, as you'd expected,
and when the slavers stole into <<their $g.bandit>> tent, <<they $g.bandit>> was still asleep. It was a simple matter for <<name $g.guard>> to gag and bind them, eventually muffling <<their $g.bandit>> cries by sitting on <<their $g.bandit>> crushing <<their $g.bandit>> nose up against <<their $g.guard2>> sweaty
<<if $g.guard2.isHasTrait('gender_male')>>
ass.
<<else>>
crotch.
<</if>>
<</if>>
<p>Meanwhile, your slavers had collected a good deal of treasure, but nothing that looked like a clue to the bandit's employers. <<name $g.infiltrator>> infiltrator|was confident that sneaking back out of camp would be easy enough, but the bandit leader kicked over a crate of weaponry, and the resulting clatter roused the camp. You slavers barely escaped with their lives—and while their injuries were minor, the mental trauma will take longer to heal. They were forced to leave the valuables they'd looted behind, leaving you with nothing to show for this endeavour.</p>
<</if>><<run new setup.UnitGroup(
"bandits_on_the_roads0",
"Residents of the City of Lucgate: All gender",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Trait('unit', setup.trait.bg_raider),
],
)>>
<<set _criteriawarrior = new setup.UnitCriteria(
null, /* key */
'Fighter', /* name */
[
setup.trait.bg_adventurer,
setup.trait.bg_mercenary,
setup.trait.bg_hunter,
setup.trait.bg_raider,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
],
[
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_humble,
setup.trait.per_curious,
setup.trait.eq_blind,
setup.trait.eq_restrained,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriawarrior2 = new setup.UnitCriteria(
null, /* key */
'Fighter', /* name */
[
setup.trait.bg_adventurer,
setup.trait.bg_mercenary,
setup.trait.bg_hunter,
setup.trait.bg_raider,
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.per_proud,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
],
[
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_humble,
setup.trait.per_curious,
setup.trait.eq_blind,
setup.trait.eq_restrained,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'bandits_on_the_roads', /* key */
"Bandits on the Roads", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'vale',
'unit',
'ire',
'rare',
],
2, /* weeks */
8, /* expiration weeks */
{ /* roles */
'scout': [ setup.qu.scout_vale, 1],
'warrior': [ _criteriawarrior, 1],
'warrior2': [ _criteriawarrior2, 1],
},
{ /* actors */
'trader': 'vale_all',
'capturedraider': 'bandits_on_the_roads0',
},
[ /* costs */
],
'Quest_bandits_on_the_roads',
setup.qdiff.hard8, /* difficulty */
[ /* outcomes */
[
'Quest_bandits_on_the_roadsCrit',
[
setup.qc.SlaveMarker('trader'),
setup.qc.Outcomes("success"),
setup.qc.Slave('capturedraider', "a|was a bandit", undefined),
],
],
[
'Quest_bandits_on_the_roadsCrit',
[
setup.qc.MoneyCustom(500),
setup.qc.Equipment(setup.equipmentpool.brawn),
setup.qc.DoAll([
setup.qc.Equipment(setup.equipmentpool.combat)
], 0.5),
setup.qc.ItemPool(setup.itempool.furniture_normal),
setup.qc.Favor('humankingdom', 50),
setup.qc.Ire('outlaws', 2),
],
],
[
'Quest_bandits_on_the_roadsFailure',
[
setup.qc.Injury('scout', 1),
setup.qc.Injury('warrior', 1),
setup.qc.OneRandom([
setup.qc.Injury('warrior2', 1),
setup.qc.Injury('warrior2', 2)
]),
setup.qc.TraumatizeRandom('scout', 5),
setup.qc.TraumatizeRandom('warrior', 5),
setup.qc.Trauma('warrior2', setup.trait.trauma_sex, 5),
setup.qc.Event('banditry_', 7, null),
],
],
[
'Quest_bandits_on_the_roadsFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.SetCooldownEvent(null, 13),
setup.qc.SlaveOrderFlex(
'Demand from the Outlaws', /* name */
'outlaws', /* company */
12, /* expires in */
200, /* base price */
50, /* trait multi */
0.05, /* value multi */
[ /* crit traits */
setup.trait.bg_royal,
setup.trait.bg_knight,
setup.trait.bg_noble,
setup.trait.bg_slaver,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.training_obedience_basic,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_toilet_basic,
setup.trait.training_toilet_advanced,
setup.trait.training_toilet_master,
],
[ /* disaster traits */
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_masochistic,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.Favor('outlaws', 200),
setup.qc.Ire('outlaws', -1),
],
[ /* unfulfilled outcomes */
setup.qc.Ire('outlaws', 1),
setup.qc.Event('outlaw_raid', 3, null),
],
),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoEvent('banditry_'),
setup.qres.NoEvent('outlaw_raid'),
],
[ /* expiration outcomes */
setup.qc.Event('banditry_', 7, null),
/* anti-frustration feature */
setup.qc.SetCooldownEvent(null, 60),
],
)>><<set _guard = setup.getAnySlaver()>>
<p>The sun is on it's way down towards the western horizon and <<name $g.trader>> is late. The friendly <<urace $g.trader>> was one of the first traders to visit the scary ruined fort full of folk with a reputation for kidnapping people like <<them $g.trader>>, and is
<<if $unit.player.isHasTrait('per_cruel')>>
useful in <<their $g.trader>> own way.
<<elseif $unit.player.isHasTrait('per_kind')>>
almost a friend, at this point. Enough that you're worried about <<them $g.trader>>, at least.
<<elseif $unit.player.isHasTrait('per_empath')>>
almost a friend, at this point. Enough that you're worried about <<them $g.trader>>, at least.
<<elseif $unit.player.isHasTrait('per_evil')>>
useful enough in <<their $g.trader>> own way.
<<elseif $unit.player.isHasTrait('per_lustful')>>
someone you've shared a blowjob with a time or two.
<<elseif $unit.player.isHasTrait('per_sexaddict')>>
some who can almost keep up with you in the bedroom.
<<else>>
someone who's worth more as a contact than a slave.
<</if>>
It is almost dark when <<they $g.trader>> finally staggers through the gates and into the courtyard, <<name _guard>>'s shouts of alarm alerting you to <<their $g.trader>> arrival.<br>
"Bandits," <<they $g.trader>> says eventually
<<if $fort.player.isHasBuilding('hospital')>>
from their hospital bed, an empty bowl of soup on the table nearby.
<<else>>
when <<their $g.trader>> wounds have been tended and they've been given some bread and soup to eat.
<</if>>
"The road is lousy with them. If they stick around you're going to have issues with trade. Or travel."
</p>
<p>Despite <<their $g.trader>> injuries, <<name $g.trader>> managed to escape with their goods and assure you <<they $g.trader>> will be setting up their stall in your courtyard as normal in the next few days. Of course, there's now the question of those bandits. It's not what you normally deal with, but clearing the roads would mean the safe passage of your slavers in and out of the fort—and could even net you some goodwill with the locals. There's also the outside chance that you might manage to capture a bandit as a new slave, but then again, bandits are probably tougher fighters than your slavers typically go up against.</p>
<p>On the other hand, this really isn't your problem. The Lords of Lucgate should be dealing with this, by right. They won't. But they should.</p><p>
<<if $gOutcome == 'crit'>>
Your slavers strutted home, spirits high with a bound figure in tow.<br>
<<elseif $gOutcome == 'success'>>
Your slaves came back in high spirits, with <<name $g.warrior>> whistling a jaunty tune.<br>
<</if>>
"Lazy buggers never saw us coming," <<name $g.scout>> says <<uadv $g.scout>>. </p>
<p>
With their operation located off in the borderlands, the bandits clearly didn't think that anyone would dare attack them, and their bravado collapsed the moment your slavers started laying into them. They also brought back a wagonload of spoils—including more than a few trade goods
<<if $unit.player.isHasTrait('per_cruel')>>
that you gleefully add to your stockpiles.
<<run setup.qc.Equipment(setup.equipmentpool.brawn).apply($gQuest)>>
<<if $gQuest.getSeed() % 2 == 0>>
<<run setup.qc.Item('f_tile_normal').apply($gQuest)>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<</if>>
<<elseif $unit.player.isHasTrait('per_kind')>>
that you give to <<name $g.trader>> to sell on.
<<run setup.qc.Favor('humankingdom', 50).apply($gQuest)>>
<<elseif $unit.player.isHasTrait('per_evil')>>
that you gleefully add to your stockpiles.
<<run setup.qc.Equipment(setup.equipmentpool.brawn).apply($gQuest)>>
<<if $gQuest.getSeed() % 2 == 0>>
<<run setup.qc.Item('f_tile_normal').apply($gQuest)>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<</if>>
<<elseif $unit.player.isHasTrait('per_honorable')>>
that you give to <<name $g.trader>>. The poor <<woman $g.trader>> could use the help right now and if nothing else, you do right by your allies.
<<run setup.qc.Favor('humankingdom', 50).apply($gQuest)>>
<<else>>
that will fetch a pretty penny in the marketplace. Or maybe you'll just hand them out to your slavers.
<</if>>
</p><p>Your slavers staggered back into the fort, looking worse for wear, and <<name $g.warrior2>> favouring their left leg.<br>
<<set _unit = setup.selectUnit([$g.scout, $g.warrior, $g.warrior2], {trait: 'per_lustful'})>>
<<if _unit>>
"They...were really good fighters," <<name _unit>> says, wincing. "And then as punishment they... well I might have had fun if there had been less pain."<br> <<name _unit>> shudders, "a lot less pain."
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.warrior, $g.warrior2], {trait: 'per_sexaddict'})>>
<<if _unit>>
"They...were really good fighters," <<name _unit>> says, wincing. "And then as punishment they... well I might have had fun if there had been less pain."<br> <<name _unit>> shudders, "a lot less pain."
<<else>>
<<set _unit = setup.selectUnit([$g.scout, $g.warrior, $g.warrior2], {trait: 'per_submissive'})>>
<<if _unit>>
"They...were really good fighters," <<name _unit>> says, wincing. "And then as punishment they... they treated us like slaves."
<<else>>
"I don't want to talk about it," <<name $g.warrior2>> says shortly.
<</if>>
<</if>>
<</if>>
</p>
<p>
As <<name $g.warrior2>> turns to leave, you notice <<their $g.warrior2>> <<uequipslot $g.warrior2 'legs'>> have been torn out at the ass and crotch and there's a wetness dripping from <<their $g.warrior2>> <<if $g.warrior2.isHasDick()>>
ass
<<else>>
vagina
<</if>>
that looks suspiciously familiar. Maybe you should have left the bandits to the Lords of Lucgate.</p>
<<if $gOutcome == 'disaster'>>
<p>Two days later you find an broken arrow in the fortress courtyard, a missive attached to the shaft. Unrolling it you find a short message, the letters scratchy and disjointed<br>
Thanks for sending us your whores. Why don't you send one we can keep, or we might have to pay you a visit and take our pick.</p>
<p>Looks like you have a slave order—or a demand. Sending one might get the bandits off your back for a bit, but it could also just encourage them to make further demands. Either way, you don't expect they're going to be willing to pay a fair price. </p>
<</if>><<run new setup.Title(
'fleshshape_face', /* key */
'Artificial Face', /* name */
'Had a facial restructuring at some point, making their face somewhat unnatural-looking', /* name */
'had a|their face molded via unnatural means', /* unit description */
-1000, /* slave value */
{
social: -3,
},
{
is_negative: true,
},
)>>
<<set _criteriapatron = new setup.UnitCriteria(
null, /* key */
'patron', /* name */
[
setup.trait.bg_merchant,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.face_beautiful, setup.trait.face_attractive], true),
],
{
arcane: 1.5,
brawn: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaper_temple_patronage_attractiveness', /* key */
"Flesh Shaper Temple: Patronage - Attractiveness", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'transformation',
'veteran',
'vale',
'trait',
'prep',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'offering': setup.qu.quest_offeringslave,
'patron': [ _criteriapatron, 3],
},
{ /* actors */
'apprentice': 'quest_humanvale_mystic',
'leader': 'quest_humanvale_mysticleader',
},
[ /* costs */
setup.qc.MoneyCustom(-2000),
],
'Quest_flesh_shaper_temple_patronage_attractiveness',
setup.qdiff.harder43, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaper_temple_patronage_attractivenessCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_flesh_shaper_temple_patronage_attractivenessCrit',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.Trait('patron', setup.trait.face_attractive),
setup.qc.AddTitle('patron', 'fleshshape_face'),
],
],
[
'Quest_flesh_shaper_temple_patronage_attractivenessFailure',
[
],
],
[
'Quest_flesh_shaper_temple_patronage_attractivenessDisaster',
[
setup.qc.MissingUnitForever('offering'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<questimage "flesh_shaper_temple.jpg">>
<p>
With one of the temples of the Flesh Shapers opening their doors to select clientele, you have the opportunity to send someone in to do some work that cannot be achieved in a <<rep setup.buildingtemplate.biolab>> or <<rep setup.buildingtemplate.surgery>>.
After some thought, you have decided to increase to ask the Flesh Shapers to increase the attractiveness of someone in the company. All that remains is to decide who should go, and pick a suitable bribe to convince the Flesh Shapers to move your request to the front of the queue.
</p>
<p>
<<dangertext 'WARNING'>>: upon success, the slave you bring on this quest will
most likely be given out to the flesh-shaper cult and be gone forever.
</p>
<p>
<<dangertext 'WARNING'>>: a face altered via flesh-shaping will never match
a natural one. Having a face altered this way will surely have a
<<dangertextlite 'permanent'>> negative effect on the unit.
</p><p>
<<Rep $g.patron>> arrived at the Flesh Shaper temple after travelling for several days through the wilds of <<lore region_vale>>. Already, a long line of supplicants trailed down the steps from the giant double doors that led into the mountain temple and the secret working rooms of the Flesh Shapers. Having the foresight to bring a slave , however, draws the attention of the cult, and an apprentice brings <<rep $g.patron>> into the temple where <<they $g.apprentice>> seat <<them $g.patron>> at a carved wooden table in front of a more imposing senior cultist.
</p>
<<dialogue $g.leader>>
Welcome. Thank you for offering. What can we do for you today?"
<</dialogue>>
<p>
It takes a while for the Flesh Shapers to do their work, but when <<rep $g.patron>> returns to the fort, <<they $g.patron>> have much more attractive features than they previously did,
although there are clearly visible rough edges here and there that makes <<them $g.patron>>
looks somewhat off.
</p>
<p>
<<Rep $g.offering>> offering|was given to the flesh-shaping temple as a tribute,
and <<their $g.offering>> fate is to become an object of worship — or possibly experimentation.
</p><p>
Unfortunately, <<rep $g.patron>> got lost and was unable to find the Flesh Shaper temple in time. By the time they arrived, the large double doors to the mountain temple were closed once more, and your slavers were politely but firmly turned away.
</p><p>
<<Rep $g.patron>> arrived at the Flesh Shaper temple after travelling for several days through the wilds of <<lore region_vale>>. Already, a long line of supplicants trailed down the steps from the giant double doors that led into the mountain temple and the secret working rooms of the Flesh Shapers. Having the foresight to bring a slave , however, draws the attention of the cult, and an apprentice brings <<rep $g.patron>> into the temple where <<they $g.apprentice>> seat <<them $g.patron>> at a carved wooden table in front of a more imposing senior cultist.
</p>
<<dialogue $g.leader>>
Welcome. Thank you for offering. What can we do for you today?"
<</dialogue>>
<p>
When <<rep $g.patron>> explain what <<they $g.patron>> wanted, their requests were so specific and outlandish that the priests took their attitude as an affront to their craft and beliefs, and all but ran <<them $g.patron>> out of the temple. Forced to abandon their slave, <<name $g.offering>> behind, <<they $g.patron>> returned to the fort dejected.
</p><<set _criteriapatron = new setup.UnitCriteria(
null, /* key */
'patron', /* name */
[
setup.trait.bg_merchant,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.face_scary, setup.trait.face_hideous], true),
],
{
arcane: 1.5,
brawn: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaper_temple_patronage_fearsomeness', /* key */
"Flesh Shaper Temple: Patronage - Fearsomeness", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'transformation',
'vale',
'prep',
'trait',
'rare',
'veteran',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'offering': setup.qu.quest_offeringslave,
'patron': [_criteriapatron, 3],
},
{ /* actors */
'apprentice': 'quest_humanvale_mystic',
'leader': 'quest_humanvale_mysticleader',
},
[ /* costs */
setup.qc.MoneyCustom(-2000),
],
'Quest_flesh_shaper_temple_patronage_fearsomeness',
setup.qdiff.harder43, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaper_temple_patronage_fearsomenessCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_flesh_shaper_temple_patronage_fearsomenessCrit',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.Trait('offering', setup.trait.face_scary),
setup.qc.AddTitle('patron', 'fleshshape_face'),
],
],
[
'Quest_flesh_shaper_temple_patronage_fearsomenessFailure',
[
],
],
[
'Quest_flesh_shaper_temple_patronage_fearsomenessDisaster',
[
setup.qc.MissingUnitForever('offering'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<questimage "flesh_shaper_temple.jpg">>
<p>
With one of the temples of the Flesh Shapers opening their doors to select clientele, you have the opportunity to send someone in to do some work that cannot be achieved in a <<rep setup.buildingtemplate.biolab>> or <<rep setup.buildingtemplate.surgery>>.
After some thought, you have decided to increase to ask the Flesh Shapers to increase the fearsomeness of someone in the company. All that remains is to decide who should go, and pick a suitable bribe to convince the Flesh Shapers to move your request to the front of the queue.
</p>
<p>
<<dangertext 'WARNING'>>: upon success, the slave you bring on this quest will
most likely be given out to the flesh-shaper cult and be gone forever.
</p>
<p>
<<dangertext 'WARNING'>>: a face altered via flesh-shaping will never match
a natural one. Having a face altered this way will surely have a
<<dangertextlite 'permanent'>> negative effect on the unit.
</p><p>
<<Rep $g.patron>> arrived at the Flesh Shaper temple after travelling for several days through the wilds of <<lore region_vale>>. Already, a long line of supplicants trailed down the steps from the giant double doors that led into the mountain temple and the secret working rooms of the Flesh Shapers. Having the foresight to bring a slave , however, draws the attention of the cult, and an apprentice brings <<rep $g.patron>> into the temple where <<they $g.apprentice>> seat <<them $g.patron>> at a carved wooden table in front of a more imposing senior cultist.
</p>
<<dialogue $g.leader>>
Welcome. Thank you for offering. What can we do for you today?"
<</dialogue>>
<p>
It takes a while for the Flesh Shapers to do their work, but when <<rep $g.patron>> returns to the fort, <<they $g.patron>> have much more fearsome features than they previously did,
although there are clearly visible rough edges here and there that makes <<them $g.patron>>
looks quite unnatural.
</p>
<p>
<<Rep $g.offering>> offering|was given to the flesh-shaping temple as a tribute,
and <<their $g.offering>> fate is to become an object of worship — or possibly experimentation.
</p><p>
Unfortunately, <<rep $g.patron>> got lost and was unable to find the Flesh Shaper temple in time. By the time they arrived, the large double doors to the mountain temple were closed once more, and your slavers were politely but firmly turned away.
</p><p>
<<Rep $g.patron>> arrived at the Flesh Shaper temple after travelling for several days through the wilds of <<lore region_vale>>. Already, a long line of supplicants trailed down the steps from the giant double doors that led into the mountain temple and the secret working rooms of the Flesh Shapers. Having the foresight to bring a slave , however, draws the attention of the cult, and an apprentice brings <<rep $g.patron>> into the temple where <<they $g.apprentice>> seat <<them $g.patron>> at a carved wooden table in front of a more imposing senior cultist.
</p>
<<dialogue $g.leader>>
Welcome. Thank you for offering. What can we do for you today?"
<</dialogue>>
<p>
When <<rep $g.patron>> explain what <<they $g.patron>> wanted, their requests were so specific and outlandish that the priests took their attitude as an affront to their craft and beliefs, and all but ran <<them $g.patron>> out of the temple. Forced to abandon their slave, <<name $g.offering>> behind, <<they $g.patron>> returned to the fort, dejected.
</p><<run new setup.UnitGroup(
"harvesting_the_fields0",
"Human (Vale): All gender",
'subrace_humanvale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_farmer),
],
)>>
<<run new setup.QuestTemplate(
'harvesting_the_fields', /* key */
"Harvesting the Fields", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'vale',
'money',
'unit',
'favor',
'rare',
],
1, /* weeks */
4, /* expiration weeks */
{ /* roles */
'labourer': [ setup.qu.carrier, 1],
'labourer2': [ setup.qu.carrier, 1],
'slaver': [ setup.qu.slavecapturer, 1],
},
{ /* actors */
'farmhand': 'harvesting_the_fields0',
'sexpartner': 'subrace_humanvale',
},
[ /* costs */
],
'Quest_harvesting_the_fields',
setup.qdiff.easier2, /* difficulty */
[ /* outcomes */
[
'Quest_harvesting_the_fieldsCrit',
[
setup.qc.Slave('farmhand', "a|was a farmhand", undefined),
setup.qc.MoneyCustom(1000),
setup.qc.Favor('humanvale', 50),
setup.qc.SlaveMarker('sexpartner'),
setup.qc.SetCooldownQuest(null, 52),
],
],
[
'Quest_harvesting_the_fieldsCrit',
[
setup.qc.MoneyCustom(1000),
setup.qc.Favor('humanvale', 50),
setup.qc.SetCooldownQuest(null, 52),
],
],
[
'Quest_harvesting_the_fieldsFailure',
[
setup.qc.MoneyCustom(200),
setup.qc.SetCooldownQuest(null, 52),
],
],
[
'Quest_harvesting_the_fieldsDisaster',
[
setup.qc.SetCooldownQuest(null, 52),
setup.qc.Ire('humanvale', 1),
setup.qc.Injury('slaver', 1),
setup.qc.DoAll([
setup.qc.Injury('labourer', 1)
], 0.5),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.common],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>It's late autumn and the farmers of the <<lore region_vale>> are getting ready to harvest their crops before the winter snows set in. Harvest is, of course, traditionally a time when everyone pitches in the help—and get paid. It's not exactly adventure—or the flesh trade—but it is honest work and guaranteed pay—if your slavers are up to the physical labour.</p>
<p>Of course, if your slavers make it through, farmers usually throw one hell of a harvest party. And who knows, you might even be able to pick up a drunken farmhand and bring them back to a new life that'll be even more profitable for you. And even if you don't, helping with the harvest will go some way to earning a bit of goodwill with your neighbours.</p><p>Your slavers grumbled at the job assignment—until they realised there was a party afterward. <<name $g.labourer>> and <<name $g.labourer2>> worked tirelessly cutting and stooking golden sheaves of wheat,
<<if $g.slaver.isHasTrait('bg_farmer')>>
easily keeping up with <<name $g.slaver>>, whose familiarity with the work saw <<them $g.slaver>> leading from the front of the pack.
<<elseif $g.slaver.isHasTrait('muscle_strong')>>
a task that <<name $g.slaver>> proved surprisingly adept at as well.
<<else>>
more than making up for <<name $g.slaver>>'s lack of experience with farmwork.
<</if>>
</p>
<p>The harvest party was a loud and raucous affair, drenched in mead and cider, and your slavers were stuffed with roast pork, a range of pies, freshly baked bread and apples fresh off the tree. <<name $g.labourer2>> won the apple bobbing competition, and <<name $g.labourer>> proved to be very popular with the locals,
<<if $g.labourer.isHasTrait('per_chaste')>>
but politely declined the subtle—and not so subtle—invitations for sexual intimacy that game <<their $g.labourer>> way.
<<elseif $g.labourer.isHasTrait('per_sexaddict')>>
and <<they $g.labourer>> eventually led a group of <<their $g.labourer>> admirers into the barn where they celebrated late into the night.
<<else>>
and eventually <<they $g.labourer>> disappeared into the hayloft with a well endowed young <<woman $g.sexpartner>>, <<name $g.sexpartner>>. Soon cries of passion could be heard by the revelers, who toasted the lovers, following those on with increasingly absurd toasts to everyone and everything, including 'my dog bowser', 'that piglet wot won't let us hold 'em' and 'the nail in the door'.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>All the while, <<name $g.slaver>> waited, biding <<their $g.slaver>> time, and as the people started to drift home long after the sun had fallen, <<they $g.slaver>> captured one of the farmhands and brought <<them $g.farmhand>> back to your fort.</p>
<</if>>
<p>Overall, the harvest was a great success, and your slavers were paid handsomely for their work, both in coin and food, which they bring back with them to the fort.</p><p>Your slavers grumbled at the job assignment—until they realised there was a party afterward, and they set out with high hopes.
<<set _unit = setup.selectUnit([$g.labourer, $g.labourer2, $g.slaver], {trait: 'bg_farmer'})>>
<<if _unit>>
However, it's been a long time since any of them had done serious farm work, and they didn't last beyond lunch time.
<<else>>
However, none of them were up to the physical demands of the harvest, and they didn't last beyond lunch time.
<</if>>
With the scornful laughs of the farmers ringing in their ears, your slavers slunk home with their tails between their legs, tired muscles, and a mere pittance for their pay. You just hope they'll be good for work next week...
</p><p>Your slavers grumbled at the job assignment—until they realised there was a party afterward. <<name $g.labourer>> and <<name $g.labourer2>> worked tirelessly cutting and stooking golden sheaves of wheat,
<<if $g.slaver.isHasTrait('bg_farmer')>>
easily keeping up with <<name $g.slaver>>, whose familiarity with the work saw <<them $g.slaver>> leading from the front of the pack.
<<elseif $g.slaver.isHasTrait('muscle_strong')>>
a task that <<name $g.slaver>> proved surprisingly adept at as well.
<<else>>
more than making up for <<name $g.slaver>>'s lack of experience with farmwork.
<</if>>
</p>
<p>The harvest party was a loud and raucous affair, drenched in mead and cider, and your slavers were stuffed with roast pork, a range of pies, freshly baked bread and apples fresh off the tree. <<name $g.labourer2>> won the apple bobbing competition, and night started on a good note.</p>
<p>
<<if $g.slaver.isHasTrait('per_cautious')>>
Unfortunately, <<name $g.slaver>> was too cautious to make a grab for any of the farmhands, and <<name $g.labourer>> got increasingly impatient with the whole affair. When <<they $g.labourer>> went off to find an outhouse
<<if $g.labourer.isHasDick()>>
—or a convenient bush—
<<else>>
<</if>>
they stumbled across a very drunk farmhand, <<name $g.farmhand>>, and decided to nab them right then and there. However, <<name $g.farmhand>> turned out to be a much better fighter than <<name $g.labourer>> anticipated, and was able to bellow for help, leaving your slavers hopelessly outmatched.
<<else>>
Unfortunately, <<name $g.slaver>> got impatient and moved too quickly, and <<their $g.slaver>> attempts to single out one of the farmhands and lure <<them $g.farmhand>> away from the celebration went south when they proved to be a much better fighter than anticipated. When they called for help, the still mostly sober farmers rallied against your slavers, leaving them helplessly outmatched.
<</if>>
</p>
<p>With no other options, your slavers legged it back to your fort, however, in the ensuing chase, <<name $g.slaver>> stepped into a rabbit hole and twisted <<their $g.slaver>> ankle. Your other slavers also received some superficial injuries as they made their escape, and you can only hope those don't prove to be too serious.</p><<run new setup.UnitGroup(
"noises_in_the_cellar0",
"Residents of the City of Lucgate: All gender",
'city_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_merchant),
],
)>>
<<set _criteriaexterminator2 = new setup.UnitCriteria(
null, /* key */
'Tank', /* name */
[
setup.trait.height_giant,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_stubborn,
setup.trait.skill_flight,
],
[
setup.trait.height_dwarf,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 2,
}
)>>
<<set _criteriawizard = new setup.UnitCriteria(
null, /* key */
'Ritualist', /* name */
[
setup.trait.per_smart,
setup.trait.per_brave,
setup.trait.per_calm,
setup.trait.per_studious,
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_dreamy,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.eq_blind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 2,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'noises_in_the_cellar', /* key */
"Noises in the Cellar", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'money',
'city',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'exterminator1': [ setup.qu.fighter, 1],
'exterminator2': [ _criteriaexterminator2, 1],
'wizard': [ _criteriawizard, 1],
},
{ /* actors */
'owner': 'noises_in_the_cellar0',
},
[ /* costs */
],
'Quest_noises_in_the_cellar',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_noises_in_the_cellarCrit',
[
setup.qc.MoneyCustom(700),
],
],
[
'Quest_noises_in_the_cellarCrit',
[
setup.qc.MoneyCustom(500),
],
],
[
'Quest_noises_in_the_cellarFailure',
[
setup.qc.OneRandom([
setup.qc.Injury('exterminator1', 1),
setup.qc.Injury('exterminator2', 1),
setup.qc.Injury('wizard', 1)
]),
],
],
[
'Quest_noises_in_the_cellarFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.OneRandom([
setup.qc.TraumatizeRandom('exterminator1', 5),
setup.qc.TraumatizeRandom('exterminator2', 5),
setup.qc.TraumatizeRandom('wizard', 5)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.common],
],
[ /* restrictions */
setup.qres.Not(setup.qres.QuestDone(null)),
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _newbie = setup.getUnit({
job: 'slaver',
notyou: true,
available: true,
anytraits: ['join_junior', ],
})>>
<<set _u = setup.getAnySlaver()>>
<p>
While <<name _u>> was walking through town they came across a job posting on a noticeboard. It didn't seem like the most lucrative of jobs, but if it was a slow day, maybe you'd look into it.
<<if _newbie>>
If nothing else, it might be worth sending some of the newbies on it, maybe <<rep _newbie>>. How dangerous could it possibly be?
<<else>>
If you had any green hires, this might be worth sending them on. Everyone has to start somewhere, after all.
<</if>>
</p>
<div class='lettercard'>
<p>
There are strange noises in my basement and I don't know what's going on down there. Reward offered to any brave souls willing to venture down, deal with the issue and restore my piece of mind.
</p>
<p>
Please seek out <<name $g.owner>> at the
<<if $gQuest.getSeed() % 6 == 0>>
sign of grapes near Via Franci
<<elseif $gQuest.getSeed() % 6 == 1>>
at the bakery off Via del Leccio
<<elseif $gQuest.getSeed() % 6 == 2>>
in the market at Piazza Nenni
<<elseif $gQuest.getSeed() % 6 == 3>>
at the cobblers on Via Belgica
<<elseif $gQuest.getSeed() % 6 == 4>>
near the chandlers on Via del Cale
<<elseif $gQuest.getSeed() % 6 == 5>>
at the apothecary on Via Drusa Pitino
<</if>>
for further information, please, please hurry.
</p>
</div><<if $g.exterminator1.isYou() or $g.exterminator2.isYou() or $g.wizard.isYou()>>
<<set _notyou = []>>
<<if !$g.exterminator1.isYou()>>
<<run _notyou.push($g.exterminator1)>>
<</if>>
<<if !$g.exterminator2.isYou()>>
<<run _notyou.push($g.exterminator2)>>
<</if>>
<<if !$g.wizard.isYou()>>
<<run _notyou.push($g.wizard)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
It's an easy walk through town to reach
<<if $gQuest.getSeed() % 6 == 0>>
the tavern with a wooden sign of grapes along Via Franci. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 1>>
a busy bakery off Via del Leccio, the smell of fresh baked bread filling the air as you approach. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 2>>
Piazza Nenni, which is bustling with the smells and sounds of fresh produce being bought and sold. Asking around,
<<elseif $gQuest.getSeed() % 6 == 3>>
a cobbler's shop, selling sturdy shoes and boots for working people. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 4>>
an upmarket chandler's store selling expensive dipped beeswax candles,
<<elseif $gQuest.getSeed() % 6 == 5>>
an old apothecary in the outskirts of the old quarter, full of creaky shelves, bundles of dry herbs and strange things in bottles. Asking inside,
<</if>>
you are soon directed to a worried looking <<urace $g.owner>> <<woman $g.owner>>.
<<dialogue $g.owner>>
You're here about the job? Oh thank you, thank you! I'm just two doors this way, and those sounds are so unnerving I haven't dared go down in weeks. If you can deal with that, I have some money put away for you.
<</dialogue>>
<<They $g.owner>> brings you into a fairly humble abode, and hand you a key.<br>
"It's down there" <<they $g.owner>> says, glancing nervously at the completely ordinary door down the bottom of a set of wooden stairs.
<p>
Opening the door, you stare into the darkness.<br>
"Light a lantern, <<name _o1>>," you say.<br>
You hear the strike of a match against stone as various scratching sounds come from the room. As light spills in over the threshold, you see a junkroom, with boxes of old, cracked crockery, some casks of what could be ale, and other things that mound up or gleam in the light. Then you see the eyes of three, four...several giant rats. Ah. That would explain the scratching noises, the chew marks on much of the room's contents, and the big pellet like things that cover a lot of the surfaces here.<br>
"Rats," <<name _o2>> says despondently. "What is this, an adventure story? Seriously, does it get more cliched than this?
</p>
The rats were no match for your slavers, and they dispatched them all with ease. Returning to the top of the tower, you are met with a visibly shaken <<name $g.owner>>.
<<if $unit.player.isHasTrait('per_honorable')>>
<<They $g.owner>> look relieved as you describe the rats and how you've dealt with them. As a reward, <<they $g.owner>> gives you... a whole 20 gold.
<<dialogue $g.owner>>
It's so nice to know there are young adventurers out there willing to help out us normal people. Thank you so much, and do try not to spend that all in one place!
<</dialogue>>
A day later a number of gems appear on your desk, and you see <<name _o1>> disappearing around the corner from your office. They'd never tell you if they found something valuable in the basement, and if they did, they probably kept some for themselves. Still, that's money in your coffers.
<<run setup.qc.Money(-200).apply($gQuest)>>
<<elseif $unit.player.isHasTrait('per_sly')>>
<<They $g.owner>> gasps in increased horror as you describe the swarm of gigantic, slavering rats darting from their tunnels to harry you at every turn and the valiant, nay, heroic efforts of you and you boon companions in defence of this, <<name $g.owner>>'s basement and the valued treasures within. When you finish, <<they $g.owner>> fumble for <<their $g.owner>> belt pouch and hand you 100 gold. You thank <<them $g.owner>> gracefully and leave the house with the corroded silver candlesticks and the antique
<<if $gQuest.getSeed() % 2 == 0>>
lizardkin
<<elseif $gQuest.getSeed() % 2 == 1>>
tigerkin
<</if>>
fertility sculpture tucked into your backpack. It's not as much as you'd have got on other jobs, but they'll sell for a decent amount.
<<run setup.qc.Money(+80).apply($gQuest)>>
<<else>>
<<They $g.owner>> look relieved as you describe the rats and how you've dealt with them. As a reward, <<they $g.owner>> gives you... a whole 20 gold.
<<dialogue $g.owner>>
It's so nice to know there are young adventurers out there willing to help out us normal people. Thank you so much, and do try not to spend that all in one place!
<</dialogue>>
You thank <<them $g.owner>> and leave the house with the corroded silver candlesticks and the antique
<<if $gQuest.getSeed() % 2 == 0>>
lizardkin
<<elseif $gQuest.getSeed() % 2 == 1>>
tigerkin
<</if>>
fertility sculpture tucked into your backpack. It's not as much as you'd have got on other jobs, but they'll sell for a decent amount.
<</if>>
<<else>>
It was an easy walk through town to reach
<<if $gQuest.getSeed() % 6 == 0>>
the tavern with a wooden sign of grapes along Via Franci. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 1>>
a busy bakery off Via del Leccio, the smell of fresh baked bread filling the air as your slavers approach. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 2>>
Piazza Nenni, which is bustling with the smells and sounds of fresh produce being bought and sold. Asking around,
<<elseif $gQuest.getSeed() % 6 == 3>>
a cobbler's shop, selling sturdy shoes and boots for working people. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 4>>
an upmarket chandler's store selling expensive dipped beeswax candles,
<<elseif $gQuest.getSeed() % 6 == 5>>
an old apothecary in the outskirts of the old quarter, full of creaky shelves, bundles of dry herbs and strange things in bottles. Asking inside,
<</if>>
<<name $g.wizard>> is soon directed to a worried looking <<urace $g.owner>> <<woman $g.owner>>.
<<dialogue $g.owner>>
You're here about the job? Oh thank you, thank you! I'm just two doors this way, and those sounds are so unnerving I haven't dared go down in weeks. If you can deal with that, I have some money put away for you.
<</dialogue>>
<<They $g.owner>> leads your slavers to a fairly humble abode, and hand you a key.<br>
"It's down there" <<they $g.owner>> says, glancing nervously at the completely ordinary door down the bottom of a set of wooden stairs.
<p>
Opening the door, <<name $g.exterminator2>> squinted into the darkness before <<name $g.wizard>> reached for a lantern. The scratch of the match strike rings loud in your slaver's ears as they become aware of various scratching sounds coming from the room. As light spills in over the threshold, they start picking out details of what is essentially a junkroom, with boxes of old, cracked crockery, some casks of what could be ale, and other things that mound up or gleam in the light. Then they saw the eyes of three, four...several giant rats. Well, that explained the scratching noises, the chew marks on much of the room's contents, and the big pellet like things that covered a lot of the surfaces.<br>
"Rats," <<name $g.exterminator1>> says despondently. "What is this, an adventure story? Seriously, does it get more cliched than this?
</p>
The rats were no match for your slavers, and they dispatched them all with ease. Returning to the top of the tower, they are met with a visibly shaken <<name $g.owner>>.
<<set _unit = setup.selectUnit([$g.exterminator1, $g.exterminator2, $g.wizard], {trait: 'per_honorable'})>>
<<if _unit>>
<<They $g.owner>> look relieved as <<name _unit>> describes the rats and how they dealt with them. As a reward, <<they $g.owner>> gives them... a whole 20 gold.
<<dialogue $g.owner>>
It's so nice to know there are young adventurers out there willing to help out us normal people. Thank you so much, and do try not to spend that all in one place!
<</dialogue>>
Your slavers return with 20 gold and a number of gemstones one of them—they aren't saying who—nicked from somewhere in the cluttered basement. It's likely that some of the gems made it into their pockets, but it's still some money in your coffers.
<<run setup.qc.Money(-200).apply($gQuest)>>
<<else>>
<<set _unit = setup.selectUnit([$g.exterminator1, $g.exterminator2, $g.wizard], {trait: 'per_sly'})>>
<<if _unit>>
<<They $g.owner>> gasped in increased horror as <<name _unit>> describes the swarm of gigantic, slavering rats darting from their tunnels to harry them at every turn and the valiant, nay, heroic efforts of the boon companions in defence of this, <<name $g.owner>>'s basement and the valued treasures within. When <<they _unit>> finishes, <<they $g.owner>> fumble for <<their $g.owner>> belt pouch and hand over 100 gold. <<name _unit>> thanked <<them $g.owner>> gracefully and your slavers the house with the gold, and two corroded silver candlesticks and an antique
<<if $gQuest.getSeed() % 2 == 0>>
lizardkin
<<elseif $gQuest.getSeed() % 2 == 1>>
tigerkin
<</if>>
fertility sculpture <<name _unit>> filched from the junkroom. They'll sell for a decent amount, even if it's much less than you'd normally receive for the contracts you take on.
<<run setup.qc.Money(+50).apply($gQuest)>>
<<else>>
<<set _unit = $g.exterminator1>>
<<They $g.owner>> look relieved as <<name _unit>> describes the rats and how they dealt with them. As a reward, <<they $g.owner>> gives them... a whole 20 gold.
<<dialogue $g.owner>>
It's so nice to know there are young adventurers out there willing to help out us normal people. Thank you so much, and do try not to spend that all in one place!
<</dialogue>>
<<name $g.exterminator2>> thanked <<them $g.owner>> and your slavers the house with the gold, and two corroded silver candlesticks and an antique
<<if $gQuest.getSeed() % 2 == 0>>
lizardkin
<<elseif $gQuest.getSeed() % 2 == 1>>
tigerkin
<</if>>
fertility sculpture <<name _unit>> filched from the junkroom. They'll sell for a decent amount, even if it's much less than you'd normally receive for the contracts you take on.
<</if>>
<</if>>
<</if>><<if $g.exterminator1.isYou() or $g.exterminator2.isYou() or $g.wizard.isYou()>>
<<set _notyou = []>>
<<if !$g.exterminator1.isYou()>>
<<run _notyou.push($g.exterminator1)>>
<</if>>
<<if !$g.exterminator2.isYou()>>
<<run _notyou.push($g.exterminator2)>>
<</if>>
<<if !$g.wizard.isYou()>>
<<run _notyou.push($g.wizard)>>
<</if>>
<<set _o1 = _notyou[0]>>
<<set _o2 = _notyou[1]>>
It's an easy walk through town to reach
<<if $gQuest.getSeed() % 6 == 0>>
the tavern with a wooden sign of grapes along Via Franci. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 1>>
a busy bakery off Via del Leccio, the smell of fresh baked bread filling the air as you approach. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 2>>
Piazza Nenni, which is bustling with the smells and sounds of fresh produce being bought and sold. Asking around,
<<elseif $gQuest.getSeed() % 6 == 3>>
a cobbler's shop, selling sturdy shoes and boots for working people. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 4>>
an upmarket chandler's store selling expensive dipped beeswax candles,
<<elseif $gQuest.getSeed() % 6 == 5>>
an old apothecary in the outskirts of the old quarter, full of creaky shelves, bundles of dry herbs and strange things in bottles. Asking inside,
<</if>>
you are soon directed to a worried looking <<urace $g.owner>> <<woman $g.owner>>.
<<dialogue $g.owner>>
You're here about the job? Oh thank you, thank you! I'm just two doors this way, and those sounds are so unnerving I haven't dared go down in weeks. If you can deal with that, I have some money put away for you.
<</dialogue>>
<<They $g.owner>> brings you into a fairly humble abode, and hand you a key.<br>
"It's down there" <<they $g.owner>> says, glancing nervously at the completely ordinary door down the bottom of a set of wooden stairs.
<p>
Opening the door, you stare into the darkness.<br>
"Light a lantern, <<name _o1>>," you say.<br>
You hear the strike of a match against stone as various scratching sounds come from the room. As light spills in over the threshold, you see a junkroom, with boxes of old, cracked crockery, some casks of what could be ale, and other things that mound up or gleam in the light. Then you see the eyes of three, four...several giant rats. Ah. That would explain the scratching noises, the chew marks on much of the room's contents, and the big pellet like things that cover a lot of the surfaces here.<br>
"Rats," <<name _o2>> says despondently. "What is this, an adventure story? Seriously, does it get more cliched than this?
</p>
<p>
A few minutes later, you are all outside the basement door, leaning against it to keep the devils in.<br>
"Well?" a nervous looking <<name $g.owner>> asks, peering down the stairs.<br>
"Call an exterminator," you say firmly. "Maybe a professional rat catcher if there's one who specialises in giant rats."
"How giant?"<br>
"Small pony," you say grimly as you lead your slavers out of the house. "Good luck."
</p>
<<else>>
It was an easy walk through town to reach
<<if $gQuest.getSeed() % 6 == 0>>
the tavern with a wooden sign of grapes along Via Franci. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 1>>
a busy bakery off Via del Leccio, the smell of fresh baked bread filling the air as your slavers approach. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 2>>
Piazza Nenni, which is bustling with the smells and sounds of fresh produce being bought and sold. Asking around,
<<elseif $gQuest.getSeed() % 6 == 3>>
a cobbler's shop, selling sturdy shoes and boots for working people. Asking inside,
<<elseif $gQuest.getSeed() % 6 == 4>>
an upmarket chandler's store selling expensive dipped beeswax candles,
<<elseif $gQuest.getSeed() % 6 == 5>>
an old apothecary in the outskirts of the old quarter, full of creaky shelves, bundles of dry herbs and strange things in bottles. Asking inside,
<</if>>
<<name $g.wizard>> is soon directed to a worried looking <<urace $g.owner>> <<woman $g.owner>>.
<<dialogue $g.owner>>
You're here about the job? Oh thank you, thank you! I'm just two doors this way, and those sounds are so unnerving I haven't dared go down in weeks. If you can deal with that, I have some money put away for you.
<</dialogue>>
<<They $g.owner>> leads your slavers to a fairly humble abode, and hand you a key.<br>
"It's down there" <<they $g.owner>> says, glancing nervously at the completely ordinary door down the bottom of a set of wooden stairs.
<p>
Opening the door, <<name $g.exterminator2>> squinted into the darkness before <<name $g.wizard>> reached for a lantern. The scratch of the match strike rings loud in your slaver's ears as they become aware of various scratching sounds coming from the room. As light spills in over the threshold, they start picking out details of what is essentially a junkroom, with boxes of old, cracked crockery, some casks of what could be ale, and other things that mound up or gleam in the light. Then they saw the eyes of three, four...several giant rats. Well, that explained the scratching noises, the chew marks on much of the room's contents, and the big pellet like things that covered a lot of the surfaces.<br>
"Rats," <<name $g.exterminator1>> says despondently. "What is this, an adventure story? Seriously, does it get more cliched than this?
</p>
<p>
"Well?" you ask when the three have returned to the fort and are standing in your office. "How much did <<they $g.owner>> pay you?"<br>
The three slavers shift uncomfortably, none of them willing to meet your gaze.<br>
"You lost?" you ask. "To rats?"<br>
There is an awkward silence.<br>
"Uh...yes, <<unickname $g.exterminator1>>," <<name $g.exterminator1>> says eventually.<br>
"Right," you say. "Get out of here. We'll talk about this later.<br>
You idly wonder if they're cut out for the job. Maybe you should fire them.<br>
<i>Or reload a previous save</i><br>
You shake your head to clear the intrusive and non-sensical thoughts that filled your head momentarily. What in the hells was that anyway?
</p>
<</if>><<run new setup.QuestTemplate(
'raid_elven_village', /* key */
"Raid: Elven Village", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'forest',
'unit',
'ire',
'money',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': [ setup.qu.raider, 1],
'raider2': [ setup.qu.raider, 1],
'support': [ setup.qu.raidersupport, 1],
},
{ /* actors */
'elves': 'subrace_elf',
},
[ /* costs */
],
'Quest_raid_elven_village',
setup.qdiff.normal25, /* difficulty */
[ /* outcomes */
[
'Quest_raid_elven_villageCrit',
[
setup.qc.Slave('elves', "a|was a free elf who had the misfortune of being captured by your company", undefined),
setup.qc.Outcomes('success'),
],
],
[
'Quest_raid_elven_villageCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('outlaws', 25),
setup.qc.Ire('elf', 1),
],
],
[
'Quest_raid_elven_villageFailure',
[
setup.qc.Favor('elf', 20),
],
],
[
'Quest_raid_elven_villageDisaster',
[
setup.qc.Injury('raider1', 2),
setup.qc.Injury('raider2', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<questimage 'elf_raid.jpg'>>
<p>
It's come to your attention that a new village of elves has been founded at the edge of the <<lore region_forest>>. You're not entirely certain if this is a settlement with ties to the <<rep $company.elf>>, but they don't appear to have much in the way of guards. This could be an opportunity for you to nab yourself a slave or two.</p>
<p>On the other hand you could leave them alone and see if there's interest in trading or something, but where's the fun in that?</p><<if $g.raider1.isYou() or $g.raider2.isYou() or $g.support.isYou()>>
<p>
Led by you, your slavers descended upon the village in the dead of night.
<<if $g.raider1.isHasTrait('per_attentive')>>
The careful planning <<name $g.raider1>> did beforehand meant your slavers quickly sent the villagers fleeing in a panic, allowing them to help themselves to most of the valuables in the village.
<<else>>
While some of the residents put up a fight, most fled in fear, allowing <<name $g.raider1>> to ransack many of the houses.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>The fighting is really more of a slaughter, and
<<if $unit.player.isHasTraitExact('per_cruel','per_evil')>>
You laugh as you walk through the road as your slavers pull people from their hiding places, assessing their values as slaves and dispatching the rest who fail to flee.<br>
"Found one boss"<br>
You turn and see
<<if $g.raider1.isYou()>>
<<name $g.raider2>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name $g.raider2>>, trying to pull <<their $g.raider2>> <<uhands $g.raider2>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you strike down at her once, twice, and then her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider2>>'s <<uhands $g.raider2>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
"Whatever," you say as you glance around the village. "All right, let's move out!"
<<else>>
<<name $g.raider1>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name $g.raider1>>, trying to pull <<their $g.raider1>> <<uhands $g.raider1>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you strike down at her once, twice, and then her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider1>>'s <<uhands $g.raider1>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
"Whatever," you say as you glance around the village. "All right, let's move out!"
<</if>>
<<elseif $unit.player.isHasTraitExact('per_kind','per_empath')>>
<<if $g.raider1.isYou()>>
<<name $g.raider2>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name $g.raider2>>, trying to pull <<their $g.raider2>> <<uhands $g.raider2>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you aim carefully and strike her once, dealing a mortal blow. Almost immediately her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider2>>'s <<uhands $g.raider2>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
"I know," you murmur, although you don't expect anyone to hear you. Kneeling down, you straighten her clothes and close her eyes, ensuring she'll have some dignity when the villagers return and find her.<br>
You take a deep breath to steady your nerves. The smells of the forest are overlain with blood, bile and shit from ruptured intestines.<br>
"All right," you say, turning towards your slavers. "Secure the slave, and let's move."
<<else>>
<<name $g.raider1>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name $g.raider1>>, trying to pull <<their $g.raider1>> <<uhands $g.raider1>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you aim carefully and strike her once, dealing a mortal blow. Almost immediately her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider1>>'s <<uhands $g.raider1>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
"I know," you murmur, although you don't expect anyone to hear you. Kneeling down, you straighten her clothes and close her eyes, ensuring she'll have some dignity when the villagers return and find her.<br>
You take a deep breath to steady your nerves. The smells of the forest are overlain with blood, bile and shit from ruptured intestines.<br>
"All right," you say, turning towards your slavers. "Secure the slave, and let's move."
<</if>>
<<else>>
<<if $g.raider1.isYou()>>
<<name $g.raider2>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name $g.raider2>>, trying to pull <<their $g.raider2>> <<uhands $g.raider2>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you strike her once, twice. Almost immediately her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider2>>'s <<uhands $g.raider2>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
You stare at her body for a moment, crumpled unnaturally on the floor and then turn to look for your slavers.<br>
"All right," you say. "Secure the slave, and let's move."
<<else>>
<<name $g.raider1>> hauling a young <<woman $g.elves>> out of a house.<br>
"Leave my <<girl $g.elves>> alone!"<br>
A woman throws herself at <<name _raider1>>, trying to pull <<their $g.raider1>> <<uhands $g.raider1>> from the <<girl $g.elves>>. Pulling out your <<uweapon $unit.player>> you strike her once, twice. Almost immediately her grip goes limp as she falls to the ground.<br>
"Mothe--" the <<girl $g.elves>>'s cry is muffled by <<name $g.raider1>>'s <<uhands $g.raider1>> over <<their $g.elves>> mouth.<br>
The woman's eyes dim as she stares up into your face. "Curse...you...
<<if $unit.player.isHasTrait('subrace_elf')>>
traitor...
<<else>>
invader...
<</if>>
" she says as the breath leaves her body.<br>
You stare at her body for a moment, crumpled unnaturally on the floor and then turn to look for your slavers.<br>
"All right," you say. "Secure the slave, and let's move."
<</if>>
<</if>>
All in all, you consider the day a success.</p>
<</if>>
<<else>>
<p>
Your slavers, led by <<name $g.raider1>>, descended upon the village in the dead of night.
<<if $g.raider1.isHasTrait('per_attentive')>>
The careful planning <<name $g.raider1>> did beforehand meant your slavers quickly sent the villagers fleeing in a panic, allowing them to help themselves to most of the valuables in the village.
<<else>>
While some of the residents put up a fight, most fled in fear, allowing <<name $g.raider1>> to ransack many of the houses.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<<dialogue $g.support>>
Oh and got a gift for you <<unickname $g.support>>.
Wrenched this one from the arms of <<them $g.elves>> mummy.
<</dialogue>>
Looking over at the collared figure being tugged along behind <<name $g.support>>.<br>
<<set _unit = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_cruel'})>>
<<if _unit>>
"Stuck <<their $g.elves>> mum with my knife, she really didn't want us to take <<them $g.elves>>," <<name _unit>> says with a coarse laugh.<br>
<<else>>
<<set _unit = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_evil'})>>
<<if _unit>>
"Stuck <<their $g.elves>> mum with my knife, she really didn't want us to take <<them $g.elves>>," <<name _unit>> says with a coarse laugh.<br>
<<else>>
"Had to kill the mother though," <<name $g.raider2>> says <<uadv $g.raider2>>. "She was a scrapper, but she got in our way."<br>
<</if>>
<</if>>
Glancing at your new slave, you see their shoulders tense at the mention of their mother. <br>
<<if $unit.player.isHasTrait('per_cruel')>>
This one is going to be fun to break.
<<elseif $unit.player.isHasTraitExact('per_kind')>>
"Put <<them $g.elves>> in the cells," you say, to prevent any further chatter. "I'll look in on <<them $g.elves>> later."
<<elseif $unit.player.isHasTrait('per_empath')>>
"Put <<them $g.elves>> in the cells," you say, to prevent any further chatter. "I'll look in on <<them $g.elves>> later."
<<else>>
"You've got bigger problems than her now, <<girl $g.elves>>," you say, not too unkindly. "Put <<them $g.elves>> in a cell," you tell your slavers. "And thanks for the gift."
<</if>>
<</if>>
<</if>><<set _diplomat = setup.getAnySlaver()>>
<p>
Unfortunately your slavers arrived too late. By the time they reached the village, there were defensive walls, and well armed guards on patrol. Deciding discretion was the better part of valor, your slavers returned to the fort.
</p>
<p>
Later you send <<name _diplomat>> to establish contact with the village. Might as well see if you can wrangle some favour from the <<rep $company.elf>>. Even if you'd rather have a new slave.
</p><p>
Unfortunately your slavers arrived too late. By the time they reached the village, there were defensive walls, and well armed guards on patrol. Deciding they had come too far to turn back, <<name $g.raider1>> led the assault, only for your slavers to be soundly thrashed. Even after the decision had been made to retreat, the elves pursued to the edge of the forest, peppering your slavers with arrows—and causing wounds that are going to take some time to heal.
</p><<set _criteriatracker = new setup.UnitCriteria(
null, /* key */
'Scout (Forest)', /* name */
[
setup.trait.race_catkin,
setup.trait.bg_hunter,
setup.trait.bg_woodsman,
setup.trait.per_cautious,
setup.trait.per_loner,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.race_elf,
setup.trait.subrace_humankingdom,
setup.trait.per_brave,
setup.trait.per_gregarious,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 3,
}
)>>
<<set _criteriasage = new setup.UnitCriteria(
null, /* key */
'Arcane (Light)', /* name */
[
setup.trait.subrace_angel,
setup.trait.subrace_fairy,
setup.trait.bg_priest,
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.race_elf,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
aid: 1,
arcane: 2,
}
)>>
<<set _criteriaguardian = new setup.UnitCriteria(
null, /* key */
'Light Warrior', /* name */
[
setup.trait.subrace_angel,
setup.trait.bg_mythical,
setup.trait.bg_knight,
setup.trait.bg_monk,
setup.trait.per_humble,
setup.trait.per_loyal,
setup.trait.per_kind,
setup.trait.per_serious,
setup.trait.per_empath,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.race_elf,
setup.trait.per_proud,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_intimidating,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
aid: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_wailing_woods', /* key */
"The Wailing Woods", /* Title */
{ /* Author */
name: "Matthew Lang",
url: "https://www.matthew-lang.com",
},
[ /* tags */
'danger',
'money',
'item',
'forest',
],
2, /* weeks */
10, /* expiration weeks */
{ /* roles */
'tracker': [ _criteriatracker, 1],
'sage': [ _criteriasage, 1],
'guardian': [ _criteriaguardian, 1],
},
{ /* actors */
'elfslave': 'subrace_elf',
'banshee': 'subrace_elf_female',
},
[ /* costs */
],
'Quest_the_wailing_woods',
setup.qdiff.harder41, /* difficulty */
[ /* outcomes */
[
'Quest_the_wailing_woodsCrit',
[
setup.qc.SlaveMarker('elfslave'),
setup.qc.MoneyCustom(1200),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.Equipment(setup.equipmentpool.all_combat),
],
],
[
'Quest_the_wailing_woodsCrit',
[
setup.qc.MoneyCustom(600),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.Equipment(setup.equipmentpool.all_combat),
],
],
[
'Quest_the_wailing_woodsFailure',
[
setup.qc.Injury('sage', 2),
setup.qc.TraumatizeRandom('sage', 7),
setup.qc.Injury('guardian', 3),
setup.qc.DoAll([
setup.qc.Injury('tracker', 1)
], 0.5),
],
],
[
'Quest_the_wailing_woodsFailure',
[
setup.qc.Blessing('sage', 1, null, true),
setup.qc.Injury('sage', 2),
setup.qc.IfThenElse(
setup.qres.Actor('tracker', setup.qres.NotYou()),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('tracker', setup.qres.AllTraits([setup.trait.race_elf], true)),
setup.qc.DoAll([
setup.qc.Injury('tracker', 2),
setup.qc.Blessing('tracker', 1, null, true),
setup.qc.DoAll([
setup.qc.MissingUnitForever('tracker')
], 0.1)
], undefined),
setup.qc.DoAll([
setup.qc.Injury('tracker', 2),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('tracker', 5)
], 0.5)
], undefined))
], undefined),
setup.qc.DoAll([
setup.qc.Injury('tracker', 2),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('tracker', 5)
], 0.3)
], undefined)),
setup.qc.IfThenElse(
setup.qres.Actor('guardian', setup.qres.NotYou()),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('guardian', setup.qres.AllTraits([setup.trait.race_elf], true)),
setup.qc.DoAll([
setup.qc.Injury('guardian', 3),
setup.qc.TraumatizeRandom('guardian', 8),
setup.qc.DoAll([
setup.qc.MissingUnitForever('guardian')
], 0.1)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('guardian', 8),
setup.qc.Injury('guardian', 3)
], undefined))
], undefined),
setup.qc.DoAll([
setup.qc.Injury('guardian', 3),
setup.qc.TraumatizeRandom('guardian', 8)
], undefined)),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.QuestDone('raid_elven_village'),
setup.qres.HasSlaverWithTraits([setup.trait.subrace_elf]),
],
[ /* expiration outcomes */
],
)>><<set _Elf = setup.getUnit({
job: 'slaver',
notyou: true,
available: true,
anytraits: ['subrace_elf', ],
})>>
<<if !_Elf>>
<<set _Elf = setup.getAnySlaver()>>
<</if>>
<<set _Hunter = setup.getAnySlaver([_Elf])>>
<p>
In their more recent trips through the <<lore region_forest>>, your slavers have reported the sounds of wailing and crying in an otherwise uninhabited area of the woods. They've never seen anyone in the area where the wailing is coming from.<br>
"There wasn't even any game there, either," <<name _Hunter>> says, glancing around the table nervously, <<their _Hunter>> tankard shaking slightly in <<their _Hunter>> grip. "Honestly, I think it's haunted."<br>
A general chorus of derision follows <<name _Hunter>>'s statement, but there's an element of uncertainty to it. After all, demons exist, magic exists, horny river spirits exist, why not ghosts?<br>
"What do you think, <<name _Elf>>?" you ask, glancing down the table to one of the only slavers to have said nothing at all.<br>
"It's probably a banshee," they say shortly. "And no, I really don't want to go and find out."
</p>
<p>
<<if $unit.player.isHasTrait('per_cruel')>>
It took some persuading, but eventually <<name _Elf>> told you what they knew.
<<else>>
It took a while to coax the information out of <<name _Elf>> but <<they _Elf>> eventually told you what <<they _Elf>> knew.
<</if>>
<br>In some stories, Banshees are the spirits of elves those who died under tragic circumstances, and their screams are those of grief and loss. In others, they were vain and foolish women who were cursed by the gods for being cruel and selfish.
<<if $unit.player.isHasTrait('race_elf')>>
<<if $unit.player.isHasDick()>>
Actually you knew all of that. You just also hope the stories are true in that only women can become banshees.
<<else>>
Actually, you knew all of that. And you're really hoping they aren't true. It's not like running a slaving company puts you the good books of most religious types.
<</if>>
<<else>>
<</if>>
The tales all agree that the cry of a banshee heralds the death of those who hear it, and to look upon her face is to wither, age, and turn to dust. The tales also agree that banshees hoard precious treasures—remnants that remind them of their past life, and those things that remain of those unfortunate souls who cross her path.
</p>
<p>The tales exaggerate of course. But are they exaggerating about the instant death part or the treasure part? There is, of course, always the option to not find out at all. That's definitely a thing.</p><<set _Hunter = setup.getAnySlaver()>>
<p>With <<name $g.tracker>> guiding them, your slavers were easily able to make it to the overgrown forest track with the wailing trees. Or wailing something. The woods were indeed empty. <<name $g.tracker>> found no recent tracks of elves, neko or any creatures larger than the average rodent.</p>
<<if $g.tracker.isYou() or $g.sage.isYou() or $g.guardian.isYou()>>
<p>It was night before the crying started.</p>
<p>Screaming never lasts because your throat gives out before you do. But she didn't have a throat. She didn't really have a body either. Just some light and shadows that <i>flickered</i>, leaving still afterimages burning in your eyes of a slender woman, eyes mad with grief, skin taught over the skull and emaciated to where she shouldn't be able to move.</p>
<p>But she did.</p>
<p>The moment she saw you, her cries of grief became shrieks of rage and she lunged towards you, spectral arms outstretched.<br>
<<run setup.qc.Nickname('banshee', 'Banshee').apply($gQuest)>>
<<dialogue $g.banshee 'the_wailing_woods.jpg'>>
"You...took...my...<<girl $g.elfslave>>!"
<</dialogue>>
Her voice was cold, not in tone, but hearing it was like being thrown bodily into one of the frozen lakes of the north, broken shards of ice stabbing into your veins. No, those were her fingernails.
</p>
<p>The fight was quick, they usually are,
<<if $unit.player.isHasTrait('per_cruel')>>
but in the end, you won, and your wounds will heal. And with the bitch really dead this time, maybe people will move back into the village. Really, it's a pity she only had one child.
<<elseif $unit.player.isHasTrait('per_evil')>>
but in the end, you won, and your wounds will heal. And with the bitch really dead this time, maybe people will move back into the village. Really, it's a pity she only had one child.
<<elseif $unit.player.isHasTrait('per_lunatic')>>
but that's okay. You can still hear her screaming if you close your eyes and think real hard. It's so beautiful.
<<elseif $unit.player.isHasTrait('per_empath')>>
but it's over. That said, even after a hot bath you still feel cold. And you every time you close you can see her face...and hear the screaming...
<<elseif $unit.player.isHasTrait('per_kind')>>
but it's over. You sit for a while longer, cupping your hands around a bowl of stew, and wondering you're ever going to be warm again.
<<else>>
but it's over. You member an elf you sold recently. Long hair,
<<if $g.elfslave.isHasTrait('gender_male')>>
nice butt.
<<else>>
nice tits.
<</if>>
Could've brought you in more money though. Should have given all of this crap you had to go through.
<</if>>
</p>
<<else>>
<p>It was night time before they heard the cries.</p>
<p>
"...it's like it was...cold," <<name $g.sage>> tells you when they return. "Like jumping into an ice lake at midnight and having the shards pierce your skin all at once. It made my entire body seize up."<br>
"So it was a banshee?"<br>
<<name $g.sage>> shakes their head. "I don't think so. We found a village."<br>
"You said there weren't any people there."<br>
<<if $g.sage.isHasTrait('per_evil')>>
<<name $g.sage>> "There weren't. Just dead folk we'd already killed last time we went through. Pretty sure that's where we picked up that pouty mouth slaved you sold last month. Bitch must have been <<their $g.elfslave>> mum or some shit."<br>
Giving you an easy grin, <<they $g.sage>> down the rest of their drink and stand up. "Life. Great while you have it, yeah?"
<<elseif $g.sage.isHasTrait('per_cruel')>>
<<name $g.sage>> "There weren't. Just dead folk we'd already killed last time we went through. Pretty sure that's where we picked up that pouty mouth slaved you sold last month. Bitch must have been <<their $g.elfslave>> mum or some shit."<br>
Giving you an easy grin, <<they $g.sage>> down the rest of their drink and stand up. "Life. Great while you have it, yeah?"
<<elseif $g.sage.isHasTrait('per_lunatic')>>
<<name $g.sage>> looks at you and giggles. "We did. Twice. Maybe we can go back if new elves move back in. Get more slaves. Or if not, talk to the dead. People can do that you know.
<<if $g.elfslave.isHasTrait('gender_male')>>
"I miss her son's tight little ass and enthusiastic tongue."<br>
Leaving their drink untouched on the table, <<name $g.sage>> wanders off into the fort. Sometimes you worry about <<them $g.sage>>.
<<else>>
"I miss her daughters hair. It was so soft and pretty. Just like her hips. Squish. Squish. Squish."<br>
Leaving their drink untouched on the table, <<name $g.sage>> wanders off into the fort. Sometimes you worry about <<them $g.sage>>.
<</if>>
<<else>>
<<name $g.sage>> is quiet for a while. "You remember that slave we sold a few months ago? Youngish, well, young for an elf. Long hair, pouty lips. Cried a lot?"<br>
You nod. "Yeah, spent a week crying for <<their $g.elfslave>> mother."<br>
"That's the one. I think I remember <<name _Hunter>>putting a sword through her chest to take <<them $g.elfslave>>. Guess we know ghosts are real now."<br>
You wait while <<name $g.sage>> finishes <<their $g.sage>> drink and slams the tankard back onto the table.<br>
"Look, boss, it's fine. I knew what this job was when I signed up. Just don't usually get your face rubbed in it this way."<br>
<</if>>
</p>
<</if>>
<<if $gOutcome == 'crit'>>
<p>While your slavers thought they'd already taken anything of value from the village the last time, <<name $g.guardian>> found a hidden cache of gemstones under a loose floorboard, warped now with the damp and rain. There were also some decent sets of clothing and armour from those who had fallen afoul of the spirit, as well as the contents of their pockets. Maybe you should start keeping track of places you raid.</p>
<<elseif $gOutcome == 'success'>>
<p>Your slavers had already taken anything of value from the village the last time. So this time they stole the furniture, selling most of it for less than you'd want but more than you might have got otherwise. There were also some decent sets of clothing and armour from those who had fallen afoul of the spirit, as well as the contents of their pockets. Maybe you should start keeping track of places you raid.</p>
<</if>><<set _Hunter = setup.getAnySlaver()>>
<p>With <<name $g.tracker>> guiding them, your slavers were easily able to make it to the overgrown forest track with the wailing trees. Or wailing something. The woods were indeed empty. <<name $g.tracker>> found no recent tracks of elves, neko or any creatures larger than the average rodent.</p>
<<if $g.tracker.isYou() or $g.sage.isYou() or $g.guardian.isYou()>>
<p>It was night before the crying started.</p>
<p>Screaming never lasts because your throat gives out before you do. But she didn't have a throat. She didn't really have a body either. Just some light and shadows that <i>flickered</i>, leaving still afterimages burning in your eyes of a slender woman, eyes mad with grief, skin taught over the skull and emaciated to where she shouldn't be able to move.</p>
<p>But she did.</p>
<p>The moment she saw you, her cries of grief became shrieks of rage and she lunged towards you, spectral arms outstretched.<br>
<<run setup.qc.Nickname('banshee', 'Banshee').apply($gQuest)>>
<<dialogue $g.banshee 'the_wailing_woods.jpg'>>
"You...took...my...<<girl $g.elfslave>>!"
<</dialogue>>
Her voice was cold, not in tone, but hearing it was like being thrown bodily into one of the frozen lakes of the north, broken shards of ice stabbing into your veins. No, those were her fingernails.
</p>
<p>
You don't remember running, but you must have. Because you ended up back on the road on the outskirts of the forest.</p>
<p>And the very thought of trying to find the dilapidated village again filled you with a terror that stopped you in your tracks, as though your feet had been frozen to the ground. In the end you spent the night huddled in a ball under the stars, unable to sleep, until the morning sun allowed you to find your way back to the fortress.</p>
<<if $unit.player.isHasTrait('race_elf')>>
<p>You're still not sure if the tale of the banshee is real. But you're not sure you want to go back and find out.</p>
<<else>>
<p>You're still not sure about the whole banshee thing, but hey, at least you aren't dead.</p>
<</if>>
<<else>>
<p>It was night time before they heard the cries.</p>
<p>"...it's like it was...cold," <<name $g.sage>> tells you when they return, far earlier than you'd expected. "Like jumping into an ice lake at midnight and having the shards pierce your skin all at once. It made my entire body seize up."<br>
"So it was a banshee?"<br>
<<name $g.sage>> shudders and clutches at their tankard. "I don't know.
<<if $g.sage.isHasTrait('per_brave')>>
You know I'm not scared of much, but those screams... she recognised us, boss. Said we'd taken her <<girl $g.elfslave>>."<br>
<<else>>
I remember her shrieking about us taking her <<girl $g.elfslave>>."<br>
<</if>>
"Did we?"<br>
<<if $g.sage.isHasTrait('per_evil')>>
<<name $g.sage>> shrugs "Does it matter? We're slavers. It's what we do. Usually the parents just have the decency to stay dead after to knife them."<br>
<<elseif $g.sage.isHasTrait('per_cruel')>>
<<name $g.sage>> shrugs "Does it matter? We're slavers. It's what we do. Usually the parents just have the decency to stay dead after to knife them."<br>
<<elseif $g.sage.isHasTrait('per_lunatic')>>
"Yes. I think so you. You sold <<them $g.elfslave>> some weeks back.
<<if $g.elfslave.isHasTrait('gender_male')>>
I miss her son's tight little ass and enthusiastic tongue."<br>
Still clutching <<their $g.sage>> cup, <<name $g.sage>> wanders off into the fort. Sometimes you worry about <<them $g.sage>>.
<<else>>
"I miss her daughters hair. It was so soft and pretty. Just like her hips. Squish. Squish. Squish."<br>
Still clutching <<their $g.sage>> cup, <<name $g.sage>> wanders off into the fort. Sometimes you worry about <<them $g.sage>>.
<</if>>
<<else>>
<<name $g.sage>> is quiet for a while. "You remember that slave we sold a few months ago? Youngish, well, young for an elf. Long hair, pouty lips. Cried a lot?"<br>
You nod. "Yeah, spent a week crying for <<their $g.elfslave>> mother."<br>
"That's the one. I think I remember <<name _Hunter>>putting a sword through her chest to take <<them $g.elfslave>>. Guess we know ghosts are real now."<br>
You wait while <<name $g.sage>> finishes <<their $g.sage>> drink and slams the tankard back onto the table. "Now if you'll excuse me, I'm going to get very...very...drunk."
<</if>>
</p>
<</if>>
<<if $gOutcome == 'failure'>>
<p>Both <<theslaver $g.tracker>> and <<name $g.guardian>> limp into the fortress sometime later. They're injured, but hopefully will make a full recovery in time.</p>
<<elseif $gOutcome == 'disaster'>>
<p>When neither <<theslaver $g.tracker>> nor <<name $g.guardian>> arrive at the fort overnight, you send out a search party, and find them unconscious, injured and bleeding at the edge of the forest. You bring them into the hospital as quickly as you can, but you aren't sure they're going to make it to the end of the week.</p>
<p>You just have to hope the curse of the banshee is just another elven myth</p>
<</if>>/* PROOFREAD COMPLETE */
/* PRESENT TENSE */
<<run new setup.UnitGroup(
"milk_oasis0",
"Employee",
'subrace_humandesert', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitIncreaseExisting('unit', setup.trait.dick_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.balls_huge),
setup.qc.TraitIncreaseExisting('unit', setup.trait.breast_huge),
],
)>>
<<set _criteriatrader = new setup.UnitCriteria(
null, /* key */
'Slave Trader', /* name */
[
setup.trait.subrace_humandesert,
setup.trait.bg_merchant,
setup.trait.per_smart,
setup.trait.per_frugal,
setup.trait.per_cruel,
setup.trait.per_sly,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_lavish,
setup.trait.per_kind,
setup.trait.per_direct,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
social: 2,
}
)>>
<<set _criteriasnooper = new setup.UnitCriteria(
null, /* key */
'Snooper', /* name */
[
setup.trait.subrace_humandesert,
setup.trait.bg_informer,
setup.trait.bg_thief,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_attentive,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_dreamy,
setup.trait.skill_intimidating,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 2,
social: 0.5,
sex: 0.5
}
)>>
<<set _criteriahandler = new setup.UnitCriteria(
null, /* key */
'Slave Handler', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_logical,
setup.trait.per_evil,
setup.trait.per_attentive,
setup.trait.per_calm,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_slave,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_submissive,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_dreamy,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 2.5,
brawn: 0.5,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Butler/Maid', /* name */
[
setup.trait.bg_maid,
setup.trait.bg_foodworker,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_attentive,
setup.trait.per_playful,
setup.trait.per_active,
setup.trait.skill_entertain,
],
[
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.per_dreamy,
setup.trait.per_serious,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_domestic_advanced),
setup.qres.AnyTrait([setup.trait.dick_huge, setup.trait.balls_huge, setup.trait.breast_huge]),
],
{
}
)>>
<<run new setup.QuestTemplate(
'milk_oasis', /* key */
"Milk Oasis", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804975758111670272',
},
[ /* tags */
'desert',
'veteran',
'order',
'rare',
],
2, /* weeks */
8, /* expiration weeks */
{ /* roles */
'trader': [ _criteriatrader, 1],
'snooper': [ _criteriasnooper, 1],
'handler': [ _criteriahandler, 1],
'slave': _criteriaslave,
},
{ /* actors */
'employee': 'milk_oasis0',
},
[ /* costs */
],
'Quest_milk_oasis',
setup.qdiff.hard54, /* difficulty */
[ /* outcomes */
[
'Quest_milk_oasisCrit',
[
setup.qc.Opportunity('milking_the_oasis', null),
],
],
[
'Quest_milk_oasisCrit',
[
setup.qc.SlaveOrderFlex(
'Order from The Milk Bar', /* name */
'humandesert', /* company */
8, /* expires in */
3000,/* base price */
1000, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.bg_maid,
setup.trait.bg_foodworker,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.per_attentive,
setup.trait.per_playful,
setup.trait.skill_entertain,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_domestic_basic,
setup.trait.training_domestic_advanced,
setup.trait.training_domestic_master,
],
[ /* disaster traits */
setup.trait.subrace_humandesert,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_chaste,
setup.trait.per_independent,
setup.trait.per_dominant,
setup.trait.per_dreamy,
setup.trait.per_serious,
setup.trait.ears_demon,
setup.trait.mouth_demon,
setup.trait.body_demon,
setup.trait.wings_demon,
setup.trait.arms_demon,
setup.trait.legs_demon,
setup.trait.tail_demon,
setup.trait.dick_demon,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.dick_huge, setup.trait.balls_huge, setup.trait.breast_huge]),
],
[ /* addons */
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
],
[
'Quest_milk_oasisCrit',
[
],
],
[
'Quest_milk_oasisCrit',
[
setup.qc.MissingUnit('slave'),
setup.qc.Injury('trader', 4),
setup.qc.Injury('snooper', 4),
setup.qc.Injury('handler', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.QuestUnique(),
setup.qres.NoQuest('raiding_the_oasis'),
setup.qres.NoOpportunity('milking_the_oasis'),
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_desert>> are known for their harsh conditions, its aggressive inhabitants and closeness to <<lore concept_mist>>, but once in a while, one can find a safe haven amidst all the dangers. One of such places is a bar, popular among the desertfolk, located in a huge oasis and simply called “The Milk Bar”.
</p>
<p>
While food, drink and safety would be enough to make any business in the desert successful, this establishment has a particularity that puts it above all others: its milk is of the highest quality, and it's served straight from the maids and butlers attending the local, whose proportions are so immense that sometimes they seem unearthly.
</p>
<p>
While a tourist trip would be a net negative for the company's finances, a business trip could open a chance to sell them a slave of your own. While finding one with the specific attributes they want can prove a tall order, the potential profits from it are equally big. A trader and a handler can take care of this by showing the quality of your “work”, but maybe sending someone to ask around about the source of this business' success can lead to more interesting opportunities…
</p><p>
After several days of travel, your slavers finally arrive to the famous
establishment and are presented with a vastly different image to the one of
the deserts that surrounds them: a beautiful landscape with greenery and
crystalline waters, watched over by a building equally dazzling and luxurious
as the scenery it was built upon. <<Rep $g.handler>> can hardly believe what
<<they $g.handler>> handler|see and handler|have to pinch <<their $g.handler>> arm to make sure that it
isn't a mirage, while <<rep $g.trader>> trader|start making mental notes on how to
approach the owners of a place like this, that undoubtedly have more money
and better connections than <<rep $company.player>>. When the group enters
the building, they are met with a contradictory image. While the exterior
radiates luxury and ostentation, the interior is decorated in a more humble
way, similar to the other bars in the region, with wooden floors, tables and
beams, but is far bigger than any other one.
</p>
<p>
A woman approaches the new arrivals and welcomes them to “The Milk Bar”. Her appearance makes it obvious she's one of the famous maids of the business: her uniform is very revealing, completely exposing gigantic breasts that could easily compete against a cow's udders and from which hangs a couple of milk drops, wobbling every time the girl moves. Her miniskirt is practically inexistent, with the smallest breeze unveiling a well lubricated vagina, ready to be used by any customer that pays for it.
<<if $g.trader.isHasTrait('per_chaste')>>
<<rep $g.trader>> trader|try to divert <<their $g.trader>> gaze from the hostess, but the place is full with employees wearing similar outfits, so <<they $g.trader>> trader|resign to look at the ground every time <<they $g.trader>> can.
<</if>>
<<if $g.snooper.isHasTrait('per_chaste')>>
<<rep $g.snooper>> snooper|try to divert <<their $g.snooper>> gaze from the hostess, but the place is full with employees wearing similar outfits, so <<they $g.snooper>> snooper|resign to look at the ground every time <<they $g.snooper>> can.
<</if>>
<<if $g.handler.isHasTrait('per_chaste')>>
<<rep $g.handler>> handler|try to divert <<their $g.handler>> gaze from the hostess, but the place is full with employees wearing similar outfits, so <<they $g.handler>> handler|resign to look at the ground every time <<they $g.handler>> can.
<</if>>
</p>
<p>
After explaining who they were and why they came for, the girl excuses herself and leaves to find her manager, who she comes back with a minute later. The manager is a tall, muscular man, more likely to a guard than an administrator, that invites your slavers to his office to talk about the possibility of making a deal.
</p>
<p>
<<Rep $g.trader>> trader|start talking about <<rep $company.player>> and the potential profits of both business working together, but the man doesn't seem convinced by it. To smooth things out, <<rep $g.trader>> trader|present <<rep $g.slave>> to him as an example of the quality work done by employees like <<rep $g.handler>>, and offers that <<rep $g.slave>> slave|serve a couple customers for free to show <<their $g.slave>> training and “capabilities”. The manager accepts and hands <<rep $g.slave>> an uniform that leaves <<their $g.slave>>
<<if $g.slave.isHasTrait('dick_huge')>>
<<if $g.slave.isHasTrait('dick_titanic')>>
titanic
<<else>>
huge
<</if>>
dick
<</if>>
<<if $g.slave.isHasTrait('breast_huge')>>
<<if $g.slave.isHasTrait('breast_titanic')>>
titanic
<<else>>
huge
<</if>>
breasts
<</if>>
exposed and instruct <<them $g.slave>> on how to serve patrons in the bar. <br>
<<rep $g.slave>> slave|approach a table and the clients asks for two milk mugs. After grabbing a couple of clean ones from the counter
<<if $g.slave.isHasDick()>>
the butler reaches the table, puts the mugs under his penis and invites the customers to milk him.
<<else>>
the maid puts them on the table, bends over them and invites the customers to milk her.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
A few squeezes and moans later, both mugs are full and <<reps $g.slave>> cheeks are flushed, but <<they $g.slave>> slave|thank them and goes towards another table that needs to be attended. This repeats several times until <<they $g.slave>> can barely stay on <<their $g.slave>> feet, <<their $g.slave>> stamina and “milk” production barely comparable to the rest of the employees of the bar, but the manager only laughs, praising <<rep $g.handler>> for the quality of their candidate. Between laughs he reveals them that they have their own “training” to increase the productivity of the maids and butlers and that, while it's almost impossible for any normal person to compete with them, <<rep $g.slave>> showed great potential, and he invites the group back to his office to talk about the details of their very likely arrangement.
</p>
<p>
But, while all this was happening, <<rep $g.snooper>> snooper|was in different mission. After coming in with <<rep $g.trader>> and <<rep $g.handler>>, <<they $g.snooper>> had split up with the pretext of trying the bar's famous menu. After sitting down and making sure <<they $g.snooper>> snooper|wasn't drawing attention, <<they $g.snooper>> called a
<<if $g.slave.isHasDick()>>
butler
<<else>>
maid
<</if>>
and asked them about the details of the services they offered, that went from a simple mug of the popular milk of the bar, to the gourmet dishes you would expect from a fancy place like that and even an adults' menu with rates per minute of service and type of “kinks”. Thinking about getting as close as possible to the
<<if $g.slave.isHasDick()>>
butler
<<else>>
maid
<</if>>
without getting distracted themselves, <<they $g.snooper>> asked for a 30-minute groping session. While <<rep $g.employee>> took <<their $g.snooper>> payment in advance and accommodated to give <<rep $g.snooper>> a better angle of <<their $g.snooper>> “dish”, <<they $g.snooper>> understood the reason behind the interior design of the bar: it gave a comforting and homelike touch to the place, letting the customers relax and get into the mood. While <<they $g.snooper>> snooper|was enjoying the
<<if $g.employee.isHasDick()>>
butler's
<<else>>
maid's
<</if>>
body, they started to chit-chat with them, asking them meaningless questions between their gasps and moans. The session kept going, the intensity of the groping and the questions steadily rising bit by bit, until <<rep $g.employee>> employee|was nothing more than a tangle of limbs, gasps, sweat and other bodily fluids, and <<rep $g.snooper>> had what <<they $g.snooper>> wanted.
</p>
<p>
After saying goodbye to the manager and the hostess, the three slavers started to share their opinions and information about the place, including the most important part: a caravan was coming to the oasis in the next few weeks, full of prospects of new employees for the bar.
</p>
<<elseif $gOutcome == 'success'>>
<p>
A minute of arduous work later, the mugs were half full and <<rep $g.slave>> thanked them between jagged breaths before heading to another table. This repeats a couple times before <<rep $g.handler>> handler|have to pick the
<<if $g.slave.isHasDick()>>
boy
<<else>>
girl
<</if>>
from the ground after two women treat the slave more aggressively than needed. The manager's face stays immutable during all this, his thoughts hard for guess for <<rep $g.trader>>, that <<uadv $g.trader>> trader|begin to apologize for such a poor display, looking for words to try to save the company's image. The man ponders for a bit, hearing the excuses and offers that your slaver is trying to use, and with a serious face, invites your three slavers back to his office to keep discussing the subject. After almost an hour of back and forth, they manage to get a slave order from the bar, that is willing to pay a good amount for slaves with the peculiar characteristics that all the employees of the bar have, as long as your company handles all the logistics of delivering straight to the bar. They don't even need to be trained since The Milk Bar apparently has its own training regimes, but they will add a little extra if the slave already has a solid base of obedience.
</p>
<p>
After saying goodbye to the manager and the hostess, the group sets on the journey back to the fort. Unfortunately, they didn't get a chance to collect any extra info from the bar, but it the mission certainly was a financial success. Even so, you can't shake the idea that they are more opportunities here than what your team obtained.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
A couple minutes of yanks and groans later, the mugs are half empty and the clients don't look too pleased with the service, but they thank <<rep $g.slave>> anyway, that goes to serve another table. Unfortunately, after more difficulties just like the ones with the first table, the slave's face is a mix between pain and arousal, so <<rep $g.handler>> handler|have to intervene before things escalate in the wrong way. Of course, this irritates the manager, that looks with mistrust at <<rep $g.trader>> and <<rep $g.snooper>> after the speech about “the quality of our work” they made. With a grunt, the man instructs them to wait there and goes back to his office. A few uncomfortable minutes, filled with the pants of <<rep $g.slave>>, later, their host returns with a couple of reading glasses over his nose and some papers in his hands, and gives the group the bad news that at the moment the bar didn't need more employees, between the ones already working there and the recruits bound to arrive the next day. Even so, he thanks them for their visit and invites them for a round of drinks on the house, but the group turns down the offer and bids farewell, disappointed for not closing the deal.
</p>
<p>
On their way back they try to put together the few information they got from The Milk Bar, but the details, besides the huge amount of security of the establishment, aren't enough to mount a successful operation. Although they know there's a shipment of new employees about to arrive, they don't know the route it's going to take and there's not enough time to make a plan that isn't extremely risky, so your best bet is to wait for another chance.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the men <<they $g.slave>> slave|is attending are frequent clients that start asking for more extravagant things from the <<maid $g.slave>>
, that even with the help of <<rep $g.handler>>, doesn't know how to fulfill their requests. When it seems like things are about to explode in all the wrong ways, the manager intervenes between the customers and your employees, very upset about the rude and impolite conduct of <<rep $g.handler>> and the incompetence of <<rep $g.slave>>. After apologizing to the men and offering to put their tab on the house for this occasion, the manager looks with great annoyance at your slavers. <<Rep $g.snooper>> snooper|try to pass unnoticed, but the man now clearly sees <<their $g.snooper>> true intentions, so <<rep $g.trader>> trader|have to step up, using <<their $g.trader>> best excuses to try to save the situation, but the manager shuts <<them $g.trader>> up immediately. He stays reflective for a moment and his face goes from anger to neutrality to, surprisingly, interest, after looking at the group again, and especially, <<rep $g.slave>>. This time he apologizes to the slavers, that baffled at this, cannot find the right words to answer him, not even <<rep $g.trader>>. The man tells them it was his fault for not giving a more in-depth instruction to <<rep $g.slave>>, but that, if they were willing to wait a few minutes while he, in private, explained the more advance services to the <<girl $g.slave>>
so <<they $g.slave>> could try again, he was sure they could come to a nice agreement. <<Rep $g.trader>> and <<rep $g.handler>> aren't too sure about this but, seeing it as a great opportunity to get information about the secrets of The Milk Bar, <<rep $g.snooper>> snooper|urge them to accept.
</p>
<p>
The manager takes <<rep $g.slave>> through a door in the back of the building
and invites the three slavers to sit at table while they wait. Curiously,
during this time, no butler or maid comes to take their order and they seem
to ignore <<rep $g.trader>> when <<they $g.trader>> trader|try to draw the
attention of one of the employees. After thirty uncomfortable minutes pass, <<rep
$g.handler>> handler|lose <<their $g.handler>> patience and handler|go
towards the door <<rep $g.slave>> and the manager went through, but the
latter comes from it before <<theslaver $g.handler>> gets to it. When <<they $g.handler>>
handler|see the man, <<they $g.handler>> handler|start to complain for taking
so long and demands to see <<their $g.handler>> slave, but he claims to not
know what <<they $g.handler>> handler|was talking about, and that they didn't
know who <<rep $g.handler>> handler|was. The argument keeps escalating,
mostly because of <<rep $g.handler>>, until the manager threatens with
kicking <<them $g.handler>> out of the bar if they don't calm down. The
slaver finally loses it and attacks the manager, that easily avoid such a
predictable strike and knocks them against the ground. Immediately, several
guards draw near and carry <<rep $g.handler>> towards the door between kicks
and yells. The other two slavers try to help <<them $g.handler>>, but they
are subjugated by the guards, that use more strength than necessary to throw
the three of them into the coarse sand outside of the oasis.
</p>
<p>
The group treat their multiple wounds while contemplating going back in to recover their merchandise, but it's clear that the security of the bar is too strong to perform a rescue mission without more information, a plan and reinforcements. It seems like if you want <<rep $g.slave>> back, it's going to be quite complicated.
</p>
<</if>>/* PROOFREAD COMPLETE */
/* PRESENT TENSE */
<<run new setup.UnitGroup(
"raiding_the_oasis",
"maid",
[ /* pools */
[setup.unitpool.subrace_humandesert_female, 0.5],
[setup.unitpool.subrace_humandesert_male, 0.5],
[setup.unitpool.subrace_humankingdom_female, 0.08333333333333333],
[setup.unitpool.subrace_humankingdom_male, 0.08333333333333333],
[setup.unitpool.subrace_humanvale_female, 0.08333333333333333],
[setup.unitpool.subrace_humanvale_male, 0.08333333333333333],
[setup.unitpool.subrace_humansea_female, 0.08333333333333333],
[setup.unitpool.subrace_humansea_male, 0.08333333333333333],
[setup.unitpool.subrace_elf_female, 0.08333333333333333],
[setup.unitpool.subrace_elf_male, 0.08333333333333333],
[setup.unitpool.subrace_neko_female, 0.08333333333333333],
[setup.unitpool.subrace_neko_male, 0.08333333333333333],
[setup.unitpool.subrace_orc_female, 0.08333333333333333],
[setup.unitpool.subrace_orc_male, 0.08333333333333333],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitReplaceExisting('unit', setup.trait.breast_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.dick_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.balls_huge),
],
)>>
<<set _criteriaraider1 = new setup.UnitCriteria(
null, /* key */
'Raider', /* name */
[
setup.trait.bg_mercenary,
setup.trait.bg_raider,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_lunatic,
setup.trait.per_loyal,
setup.trait.per_aggressive,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.bg_slave,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_submissive,
setup.trait.per_calm,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriaraider2 = new setup.UnitCriteria(
null, /* key */
'Raider', /* name */
[
setup.trait.bg_mercenary,
setup.trait.bg_raider,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_lunatic,
setup.trait.per_loyal,
setup.trait.per_aggressive,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.bg_slave,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_submissive,
setup.trait.per_calm,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
brawn: 1,
}
)>>
<<set _criteriakidnapper = new setup.UnitCriteria(
null, /* key */
'Kidnapper', /* name */
[
setup.trait.subrace_humandesert,
setup.trait.bg_assassin,
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_evil,
setup.trait.per_attentive,
setup.trait.skill_hypnotic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.bg_slave,
setup.trait.tough_tough,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_honorable,
setup.trait.per_dreamy,
setup.trait.per_aggressive,
setup.trait.per_playful,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1.5,
slaving: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'raiding_the_oasis', /* key */
"Raiding the Oasis", /* Title */
{ /* Author */
name: "Milk Maid Sona",
url: 'https://discord.com/channels/774271990571335710/780362824047394827/804975758111670272',
},
[ /* tags */
'desert',
'veteran',
'unit',
'ire',
'rare',
],
2, /* weeks */
8, /* expiration weeks */
{ /* roles */
'raider1': [ _criteriaraider1, 1],
'raider2': [ _criteriaraider2, 1],
'kidnapper': [ _criteriakidnapper, 1],
},
{ /* actors */
'maid': 'raiding_the_oasis',
},
[ /* costs */
],
'Quest_raiding_the_oasis',
setup.qdiff.hardest57, /* difficulty */
[ /* outcomes */
[
'Quest_raiding_the_oasisCrit',
[
setup.qc.TraitReplaceExisting('maid', setup.trait.breast_titanic),
setup.qc.TraitReplaceExisting('maid', setup.trait.dick_titanic),
setup.qc.TraitReplaceExisting('maid', setup.trait.balls_titanic),
setup.qc.Outcomes('success'),
],
],
[
'Quest_raiding_the_oasisCrit',
[
setup.qc.Slave('maid', "a|was going to become an employee in The Milk Bar", undefined),
setup.qc.EquipmentDirect('cowbell_collar'),
setup.qc.Injury('raider1', 4),
setup.qc.Injury('raider2', 4),
setup.qc.Ire('humandesert', 8),
],
],
[
'Quest_raiding_the_oasisCrit',
[
setup.qc.Injury('raider1', 8),
setup.qc.Injury('raider2', 8),
setup.qc.Injury('kidnapper', 8),
setup.qc.Ire('humandesert', 12),
],
],
[
'Quest_raiding_the_oasisCrit',
[
setup.qc.MissingUnit('kidnapper'),
setup.qc.Injury('raider1', 8),
setup.qc.Injury('raider2', 8),
setup.qc.Ire('humandesert', 12),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
After discussing with <<yourrep _u>>
about how to do this robbery, you decide that the most efficient way is a two-fronts attack: on one side, two raiders will attack the group protecting the caravan, causing enough chaos to stop the advance of the vehicle and catch the attention of most of the guards. Of course, this role is extremely dangerous: the two slavers will face the entire retinue of the caravan without additional support, so it's inevitable that they'll get badly injured.
</p>
<p>
But while this is happening, a third participant will sneaky around the back, trying to stay out of sight, and break into the wagon where the slaves are, taking the one they consider most valuable and getting out without being followed, not before sending a signal for its teammates to retire to the rendezvous point.
</p>
<p>
The plan sound good on paper, but you have enough experience in this business to know that things rarely go as planned, so it's important that the three people in charge of this mission are well prepared, equipped and ready to improvise if necessary, and that a medical team is close by to avoid any casualties.
</p><<set _officer = $dutylist.getUnitIfAvailable('damagecontrolofficer')>>
<p>
With the information collected, you know the best moment to attack the
caravan is in the middle of the night, while they travel from their last
control point to the oasis. And it's right on that route where your slavers
take their positions, hidden with a small dune near the road that the convoy
has to take to get to their destination. After the night falls,
<<rep $g.kidnapper>>, <<rep $g.raider1>> and <<rep $g.raider2>> agree on their retreat signal and
the meeting point for the group after completing the operation. <<Rep $g.kidnapper>>
kidnapper|move to a dune on the opposite side of the road and kidnapper|wait for
<<their $g.kidnapper>> companions to start the distraction, that get their weapons
and armors ready for what, undoubtedly, will be a tough fight.
</p>
<p>
After a minutes of tense wait, the raiders detect torchlights getting closer,
which reveal a huge, covered wagon pulled by four horses and escorted by
multiple guards, some on horsebacks and others on foot. The cortege looks
pretty professional: the men and women that figure as guards carries good
quality armors and different types of weapons, including, to <<reps $g.raider1>> displeasure,
bows, that surely will make things more complicated and
painful that what they had wanted. The chitchat among them is keep to a
minimum, the group entirely focused on their job, and the silence of the
desert is only interrupted by the steps on the sand and the screeches of the
wood.
</p>
<p>
<<Rep $g.raider2>> raider2|look towards where <<rep $g.kidnapper>> kidnapper|is hidden and then raider2|turn towards <<rep $g.raider1>>, who simply raider1|nod with <<their $g.raider1>> head.
They begin to run towards the caravan and when a couple of guards detect them, they let a warcry to get the attention of the rest. The clash of weapons and shields resonates in the darkness and both raiders manage to get some good hits and knock down a couple of guards, but their superior numbers and long-range weapons force your slavers to take a defensive position while also making sure they keep the attention of most of the wardens.
</p>
<p>
When <<they $g.kidnapper>> kidnapper|hear the warcry, <<rep $g.kidnapper>> kidnapper|wait for a couple of guards to leave their posts before sneaking closer to the wagon. The noise of the battle scared the horses and without its defenders, the driver was forced to stop the caravan, creating the perfect opportunity to break into it and try to take some of its merchandise before they notice it.
</p>
<<if $gOutcome == 'crit'>>
<p>
Thanks to their coordination, strength and bravery, <<rep $g.raider1>> and <<rep $g.raider2>> manage to keep their positions longer than expected, diverting blows, breaking shields, evading arrows and even knocking out several guards despite being greatly outnumbered. Because of these deeds, the guard is forced to use all their resources to stop the pair of berserkers, that despite fighting better than their opponents, are incapable of coming out triumphant in this combat. But they both know that their winning condition lays on how long they can keep the attention of the guards. And it's precisely this extra time and attention that allows <<rep $g.kidnapper>> to enter the wagon without being detected and, once inside, make a quick but meticulous inspection of the slaves they carry inside. Men and women sit naked at each side, all chained both in hands and feet. Most of them are humans, but there's also neko, elves and even orcs among them, and they all possess certain features that are far bigger than normal.
</p>
<p>
But amidst them, <<rep $g.kidnapper>> kidnapper|see one that surpasses all the others:
<<if $g.maid.isHasDick()>>
a man with one of the biggest dicks that <<theslaver $g.kidnapper>> has ever seen, under
which hangs a pair of balls equally big, capable of filling more than a
single mug in a single ejaculation.
<<else>>
a woman with breasts of a monstruous size, almost out of the world, from which hangs small droplets of milk, like if the milk inside of them barely fit and that undoubtedly could serve an entire table without issue.
<</if>>
</p>
<p>
<<Rep $g.kidnapper>> barely kidnapper|contain itself from molesting the
<<man $g.maid>>
in that moment, but <<they $g.kidnapper>> kidnapper|manage to refocus in the mission at hand and kidnapper|free the slave from the bindings that keep it seated in the wagon. Believing that <<theslaver $g.kidnapper>> is part of a rescue mission,
<<they $g.maid>>
maid|follow them outside of the carriage and starts running alongside <<rep $g.kidnapper>>, that looks towards the direction of the combat noise, throws a small bomb into the air and runs towards a safe place. A few seconds later, the bomb causes a small explosion that resounds in the desert and that <<rep $g.raider1>> raider1|recognize as the retreat signal. <<they $g.raider1>> raider1|get its partners attention, that understands and starts fighting to open a way for them to escape. After a couple of strong hits and getting multiple wounds while they run away, the raiders leave the way they came while the escort is too busy celebrating their victory to chase them, unaware of the success of their attack.
</p>
<p>
Both couples get to the meeting point, where the medics treat <<rep $g.raider1>> and <<rep $g.raider2>> most serious injuries, but the slavers will need to rest for several weeks after such fight. Meanwhile, <<rep $g.kidnapper>> kidnapper|look closely at the price of the mission. Still wearing <<their $g.maid>> cowbell collar, the slave introduces
<<if $g.maid.isHasDick()>>
himself as <<rep $g.maid>> and thanks the group for rescuing him from a live of slavery, that makes everyone there laugh at the expense of the poor man. Confused, he asks them to release him from its shackles, but <<rep $g.kidnapper>> kidnapper|make sure they are tight and kidnapper|hang a new chain, welcoming him to <<rep $company.player>>. That night, your three slavers celebrate their success giving themselves a little “test run” of <<rep $g.maid>> and his titanic characteristics.
<<else>>
herself as <<rep $g.maid>> and thanks the group for rescuing her from a live of slavery, that makes everyone there laugh at the expense of the poor woman. Confused, she asks them to release her from its shackles, but <<rep $g.kidnapper>> kidnapper|make sure they are tight and kidnapper|hang a new chain, welcoming her to <<rep $company.player>>. That night, your three slavers celebrate their success giving themselves a little “test run” of <<rep $g.maid>> and her titanic characteristics.
<</if>>
</p>
<p>
Unfortunately, a couple days after your team returns you find out that somehow, the owners of The Milk Bar found out about your little raid and are more than furious for the audacity of stealing what could have become one of their best employees. Maybe it's better if
<<if _officer>>
<<rep _officer>> starts working on patching up your relationship with the bar, before they look for revenge against the company.
<<else>>
you avoid pissing off such a powerful group again, if you don't want them taking it back against the company.
<</if>>
</p>
<<elseif $gOutcome == 'success'>>
<p>
<<Rep $g.raider1>> and <<rep $g.raider2>> fight the best they can in the middle of flurries of attacks and arrows coming from every side, and despite fighting back-to-back, they barely manage to defend themselves enough to keep most of the guards focused on them. Knowing that the success of the mission depends on how much noise they can make, they let another warcry, trying to make some guards break their formation to make theirs partners work easier, but the experienced escort doesn't fall into their ruse and stand firm, waiting for the pairs next movement. Resigned to their fates, <<rep $g.raider2>> raider2|let a huff and they throw themselves again to a fight they know lost. Meanwhile, <<rep $g.kidnapper>> kidnapper|look for a gap in the security of the wagon, that now counts with less staff, but it's still impossible to get close without being seen.
</p>
<p>
Waiting for any opportunity, the second warcry distracts a guard enough for <<them $g.kidnapper>> to get closer, take it out and quickly hide it under the wagon to avoid anyone else finding it. Knowing that <<they $g.kidnapper>> kidnapper|have little time, <<rep $g.kidnapper>> kidnapper|get into the wagon and finds <<themselves $g.kidnapper>> with rows of men and women of different races at each side of the carriage, all of them with certain features that are far bigger than normal. With few moments to choose who to take, <<they $g.kidnapper>> kidnapper|free one of the closest slaves from the chains that connect them to their seat and kidnapper|push them towards the exit, despite the confusion of it.
<<Therace $g.kidnapper>>
kidnapper|drag the stolen merchandise as quickly as possible, and once <<they $g.kidnapper>> kidnapper|get far enough, kidnapper|throw a small bomb into the air before running towards a safe place. A few seconds later, the bomb causes a small explosion that resounds in the desert and that <<rep $g.raider1>> raider1|recognize as the retreat signal. <<they $g.raider1>> raider1|get its partners attention, that understands and starts fighting to open a way for them to escape. After a couple of strong hits and getting multiple wounds while they run away, the raiders leave the way they came while the escort is too busy celebrating their victory to chase them, unaware of the success of their attack.
</p>
<p>
Both couples get to the meeting point, where the medics treat <<rep $g.raider1>> and <<rep $g.raider2>> most serious injuries, but the slavers will need to rest for several weeks after such fight. <<They $g.kidnapper>> finally kidnapper|have enough time to look at the slave they stole, who says their name is
<<rep $g.maid>>
and it's still as confused as before. Without much to explain, <<rep $g.kidnapper>> kidnapper|secure <<their $g.maid>> shackles and kidnapper|hang a new chain on <<them $g.maid>>. That same night, the three slaves relieve their stress by welcoming their new slave to the company, taking advantage of the rare opportunity of being with someone with such huge characteristics.
</p>
<p>
Unfortunately, a couple days after your team returns you find out that somehow, the owners of The Milk Bar found out about your little raid and are more than furious for the audacity of stealing what could have become one of their best employees. Maybe it's better if
<<if _officer>>
<<rep _officer>> starts working on patching up your relationship with the bar, before they look for revenge against the company.
<<else>>
you avoid pissing off such a powerful group again, if you don't want them taking it back against the company.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The raiders give their best, but they keep losing terrain and are forced to slowly and steadily back away from the caravan. Seeing the state of the combat, the leader of the guards instructs them to keep their positions and stay vigilant while the group fighting takes care of the bandits. Looking at the desperate situation of <<their $g.kidnapper>> teammates and that the ranks protecting the wagon where they surely had all the slaves hasn't moved, <<rep $g.kidnapper>> kidnapper|decide to make a bold move and kidnapper|throw several rocks against the wagon, hoping that the noise distracts one of the guards enough time to sneak into the carriage. One of them moves to check the source of the sounds and <<rep $g.kidnapper>> kidnapper|take the chance, but <<they $g.kidnapper>> kidnapper|do not make it to a blind spot before the guards detects them and calls for backup against a second attack. Several guards that were nearby quickly attend the call and surround the thief that isn't equipped to face several enemies at the same time, unlike <<their $g.kidnapper>> companions. Miraculously, <<rep $g.kidnapper>> kidnapper|manage to evade most of the attacks, not without getting several cuts and bruises while <<they $g.kidnapper>> kidnapper|escape towards the place where <<rep $g.raider1>> and <<rep $g.raider2>> are fighting. However, a pair of guards that were fighting against the raiders notices <<them $g.kidnapper>> and intercept <<their $g.kidnapper>> escape, forcing <<them $g.kidnapper>> to join <<their $g.kidnapper>> companions. This time, all the wardens surround them, and a woman they recognize as the leader of the caravan laughs at their efforts of raiding them, before commanding all her employees to attack the group without mercy.
</p>
<p>
A few days later, the slavers manage to get back to the fort, but their wounds are quite severe and they don't have any new slave with them, revealing that the mission was a complete failure. Even worse, soon after you receive a very threating note from The Milk Bar, mocking your attempt of stealing from them and making it very clear that, if someone like that happens again, your slaver's wounds will look like a joke in comparison to what's going to happen to you.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Although the start of the fight seemed encouraging, <<rep $g.raider2>> quickly raider2|realize that after losing the element of surprise, the two raiders had no opportunity against the mercenaries hired to defend the caravan. Both fighters soon begin to bleed from the multiple cuts and bruises in their bodies, and this sign of weakness only increases the aggressivity of their enemies, forcing them to retreat and move far away from the caravan, but despite distancing themselves from which they had to protect, the guards don't stop their relentless assault. Seeing that everything is under control, the leader of the caravan soon commands that everyone stays alert for possible reinforcements and that a scouting group is sent to check the rest of the road for any other possible ambushes.
</p>
<p>
One of the wagon's guards is selected as part of the group and abandons its position to join its colleagues, which <<rep $g.kidnapper>> kidnapper|see as the perfect opportunity to get into the carriage without being seen. <<their $g.kidnapper>> instinct tells them something's wrong, since <<they $g.kidnapper>> couldn't listen the noise of the battle or the screams of <<their $g.kidnapper>> teammates anymore, but the sudden movement of several guards away from their posts makes <<them $g.kidnapper>> think that maybe the raiders managed to catch their attention some other way and <<their $g.kidnapper>> boldness got the best of <<them $g.kidnapper>>. Once inside the wagon, <<they $g.kidnapper>> kidnapper|is received with an incredible image: naked men and women fill both sides of the vehicle, each one with beautiful features and gigantic attributes. Truly, it was heaven for any lover of huge boobs and horse-like cocks. The delight of the image in front of <<them $g.kidnapper>> make <<them $g.kidnapper>> kidnapper|miss the guard at <<their $g.kidnapper>> back, that knocks them unconscious with a blow to their head.
<<They $g.raider1>> and <<rep $g.raider2>> barely make it to the meeting point, where a group of medics start to treat the multiple wounds they had that could prove to be fatal if unattended. They had to run from their assailants while arrows and javelins hit them from behind, but luckily, they managed to lose them before running out of energy. <<They $g.raider1>> raider1|decide to wait half an hour to give <<rep $g.kidnapper>> enough time to come back, given that they probably had a slave with them that would only slow <<them $g.kidnapper>> down, but after waiting for a while, both realize that their partner wasn't coming back.
</p>
<p>
Sometime after, you still fear the worst about <<reps $g.kidnapper>> fate, but a letter arrives that clears all your doubts. Apparently, the owners of The Milk Bar have your slaver, and they say they'll keep <<them $g.kidnapper>> as compensation for the damage incurred by their employees after your raid attempt, but that things could change and, if your group decided to try something stupid like that again, the consequences would be more severe that the disappearance of a single person. Seems like it will be necessary to start digging around if you want to see <<rep $g.kidnapper>> again…
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_mermaid_hunter_0", /* key */
"Mermaid Hunter", /* name */
"Has committed to tracking down and enslaving a mermaid", /* description */
"has committed to tracking down and enslaving a mermaid", /* 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_scary,
setup.trait.face_hideous,
setup.trait.skill_intimidating,
setup.trait.bg_mist,
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], true),
],
{
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.never],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
There are always rumors 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 the promise of gold
coins. 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 can decide that the benefits outweigh the risks of wasted time, and you can
send a team to explore this rumor, and if possible, to capture an actual
mermaid. Oh yes, it this is successful, then it will be a valuable capture
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 rented a schooner and set forth for the atoll.
<<if $gOutcome == 'disaster'>>
<<rep $g.navigator>> suffered a sprained wrist injury as <<they $g.navigator>>
struggled to bring the ship safely through a storm.
<<elseif $gOutcome == 'failure'>>
The weather was not always their friend, and <<rep $g.navigator>> barely escaped
injury as <<they $g.navigator>> struggled to bring the ship safely through a storm.
<<else>>
The weather was not always their friend, but <<reps $g.navigator>> experience and solid instincts saw the team through to the atoll safely.
<</if>>
On the trip, <<rep $g.slaver>> and <<utheirrel $g.slaver $g.rod>> <<rep $g.rod>>
had ample time to go over a plan.
<<Rep $g.slaver>> will slip into the water and splash around. If they attracted sharks,
<<rep $g.rod>> will quickly haul them up, but if a mermaid appeared and seems interested,
then <<rep $g.slaver>> will attempt to woo her.
Meanwhile <<rep $g.navigator>> will bring the ship about and <<rep $g.rod>> will
prepare to scoop the mermaid into the schooner.
</p>
<p>
When the ship approached the atoll, the slavers could barely believe their
luck. A trio of mermaids were plainly visible, sunning themselves on rocks
just off shore. they were sleek, feral creatures, but wearing beautiful
jewelry of shell and pearl, and utterly enchanting. <<Rep $g.slaver>> slipped
in to the water and swims towards the mermaids, <<uadv $g.slaver>> calling out.
</p>
<p>
The three mermaids seemed interested, and slid nimbly into the water to
investigate. One got close enough for <<rep $g.slaver>> to snatch hold, and
<<yourrep $g.rod>> nearly had a hook in place to snatch her up and into the
boat.
<<if $g.slaver.isHasTrait('per_lustful')>>
<<rep $g.slaver>> slaver|was taken in by the mermaid's bountiful body and enticing form,
filling <<their $g.slaver>> lusty mind with dirty thoughts.
<<else>>
<<rep $g.slaver>> slaver|was 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 sprung out of the water and hauled the hook
sharply out of <<reps $g.rod>> <<uhand $g.rod>>, and another began to pull <<rep $g.slaver>> under.
Thinking quickly, <<rep $g.slaver>> managed to grab a kiss from the flummoxed mermaid who had
approached <<them $g.slaver>>, and snatched the beautiful pearl necklace off of her neck.
<<Rep $g.rod>> hauled the impudent lothario up and into the boat.
</p>
<p>
Soon the mermaids were thumping on the hull of the boat in outrage, and
<<rep $g.navigator>> exercised the better part of valor, swiftly turning the
ship around for home. On the way, it became 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 returned, thinking about next steps.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
That's when one of the other mermaids sprung out of the water and hauled the
hook sharply out of <<reps $g.rod>> <<uhand $g.rod>>, and another began to pull <<name
$g.slaver>> under. Concerned for their lives, <<rep $g.rod>> quickly hauled
<<rep $g.slaver>> up and into the boat.
</p>
<p>
Although the group returned to port empty-handed, they felt 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 sprung out of the water and hauled the
hook sharply out of <<reps $g.rod>> <<uhand $g.rod>>,
smashing <<yourrep $g.rod>>
across <<their $g.rod>> <<uface $g.rod>> with it as she did so.
The playful mermaid who had seemed so
smitten with <<rep $g.slaver>> lunged in for a kiss... a kiss that seemed to
draw some of the very essence from <<them $g.slaver>>.
<<Rep $g.rod>>
recovered from the head blow to haul <<rep $g.slaver>> up and into the boat,
and they beat a hasty retreat.
</p>
<p>
Although the group returned to port empty-handed, they feel that they may
have learned something that will help them succeed in a future attempt.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'food_for_the_pack', /* key */
"Food for the Pack", /* Title */
{ /* Author */
name: "Zerutti",
url: 'https://www.reddit.com/r/FortOfChains/comments/kk9fhu/food_for_the_pack_test_quest/',
},
[ /* tags */
'furry',
'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, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
In the <<lore region_vale>>, many werewolf tribes call the empty vales as their home long before the humans have settled into the land.
These wolves 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, and 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 was fully occupied, in order to maintain the balance.
This has taken the manpower away from hunting parties, and they hope to borrow 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 <<reps $g.hunter1>> past as a hunter, you made the wise decision to send the slaver
out on this quest. <<Therace $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')>>
<<Reps $g.hunter1>> pride was 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 were less accepting of it.
While
<<elseif $g.hunter1.isHasTrait('per_calm')>>
<<Rep $g.hunter1>> stoically nod at the idea of such an easy job. But while
<<elseif $g.hunter1.isHasTrait('per_kind')>>
<<Rep $g.hunter1>> looked 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 in addition to the promised payment, as well as promising to put in some good words for your company to the other werewolf clans.
</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 perfunctorily 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 turned to be a failure. Apparently, <<rep $g.tracker>> made the wrong call and had the entire party circling around the same 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>> hunter1|was overexcited in following up a trail. He ran into a giant bear who attacked your slaving team.
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>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"peasant_stock_piling_0",
"Dishonest Guard",
'subrace_humanvale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier),
setup.qc.TraitsReplace('unit', [setup.trait.per_sly]),
],
)>>
<<run new setup.QuestTemplate(
'peasant_stock_piling_', /* key */
"Peasant Stock(piling)", /* Title */
{ /* Author */
name: "Zerutti",
url: 'https://www.reddit.com/r/FortOfChains/comments/kk9fhu/food_for_the_pack_test_quest/gh3tqrz/',
},
[ /* tags */
'furry',
'vale',
'money',
'ire',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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', "a|was an irresponsible guard who told a|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_Success',
[
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, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
An offer has arrived on your table from one of the more militant werewolf clans.
From what you have gathered, this particular clan does not grow their numbers in the 'traditional' way of breeding. Instead use their special gift of lycanthropy to infect other 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. In time, they will begin to adapt themselves to the tribe's culture, and become a staunch member of the pack.
</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 clan members.
Maybe you can exchange notes.
You can see <<yourrep _u>>
<<if _u.getSpeech() == setup.speech.kind>>
scowling at the thought.
<<else>>
nodding in appreciation.
<</if>>
</p>
<p>
That time of the year has come again, and the clan is eager for another raid
into one of the human settlements. The clan is requesting your assistance in raiding a
village and capturing some of the peasants.
</p><p>
<<Yourrep $g.negotiator>> played the role of a great con artist,
and their exemplary skill had the militia guard near-singing the protocols in place of
what the village was 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>> merc2|was surprised to see an extra listless face among the new captures.
When pressed for information, <<rep $g.negotiator>> just <<uadv $g.negotiator>> smirked and said that <<they $g.negotiator>> negotiator|was not done with the guard just yet.
</p><p>
As far as 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 they had 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>
<<if $gOutcome == 'success'>>
<p>
After a moment of hesitation, but finding sense in <<reps $g.negotiator>> words, the militia pulled back giving the raiding party time to escape.
</p>
<<else>>
<p>
After a moment of hesitation, the militia decided that putting an end to your company's evil
career was 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('tough_nimble')>>
swiftly acted
<<else>>
took the blunt of the blows
<</if>>
and managed to pull <<yourrep $g.negotiator>> out of danger.
However, the raiding was forced to end quicker than expected, and was a failure overall.
The number of werewolves lost in the raid exceeded the number of captured peasants.
Your slavers had to decline payment in order to keep the clan from unleashing their wrath upon
your company.
</p>
<</if>><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. As a result, they took up the brunt of the aggression from the chasing militia, leaving many of them injured.
</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 recovering from their wounds.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'bounty_hunt__bear', /* key */
"Bounty Hunt: Bear", /* Title */
"", /* Author */
[ /* tags */
'vale',
'money',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
In the cold winters of the <<lore region_vale>> winter tales told around campfires or inside mead halls grow more and more outlandish with every telling. People speak of living snowstorms, screaming spirits, the risen dead, and man-eating monsters that consume the flesh of the unfortunate.
</p>
<p>
Recently, a
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
placed an open bounty on one such monster that has been plaguing their town: The "Abominable Valeman". According to the stories, it is a gigantic, elusive hairy creature that comes down from the mountain to steal their livestock during snowstorms. While stories give the valeman humanlike features, the impact it has sounds like a bear to you. So while you probably won't be able to hunt down a myth, you can probably cash in on the bounty by catching a bear.
</p><p>
The light snowfall did little to conceal fresh tracks made in powder snow, and <<name $g.tracker>> made the best of the opportunity to quickly locate a grizzly bear. Strangely enough, <<they $g.tracker>> noticed a
<<if $g.tracker.isHasTrait('per_attentive')>>
faint
<</if>>
set of secondary tracks intersecting with the ones <<they $g.tracker>> tracker|was following, but didn't stop to investigate. The tracking took only a couple hours, and <<name $g.tracker>> <<uadv $g.tracker>> signaled to <<name $g.fighter>> and <<name $g.hunter>> that their quarry had been found.
</p>
<p>
With ample time to pick an good vantage, <<rep $g.hunter>> landed a disabling shot on the bear's vitals, causing it to stumble and fall. Rushing forward, <<name $g.fighter>> only needed a single blow 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>>
readily believed the bear to be the "Abominable Valeman" they'd sought, and rewarded 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, <<name $g.hunter>> noticed a long furrow in some of the older, deeper snow. <<name $g.tracker>> confirmed them to be bear tracks, but perhaps from last night or yesterday. Since the trail was a bit old, it took <<name $g.tracker>> several hours to catch up to the bear. By then, the sky was already darkening with storm clouds.
</p>
<p>
With the wind picking up and whistling around <<their $g.hunter>> <<uears $g.hunter>>, <<name $g.hunter>> peppered the bear with arrows, driving it into a blind rage. <<name $g.fighter>> <<uadv $g.fighter>> interposed <<themselves $g.fighter>> between the grizzly and <<therace $g.hunter>>, and connected with several <<uweapon $g.fighter>> blows to finish it off. With <<rep $g.fighter>> loading the corpse up onto a sled, the slavers returned back at town only minutes before a blizzard hit, snowing them in.
</p>
<p>
The
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
accepted the bear to be the "Abominable Valeman", and thanked the slavers for solving the town's problem.
</p><p>
Unfortunately, what was a light snowfall when the slavers left soon turned into a swirling blizzard.
</p>
<<if $gOutcome == 'failure'>>
<p>
Unable to travel safely in these conditions, <<name $g.tracker>> led <<name $g.fighter>> and <<name $g.hunter>> back to the village. The
<<switch $gQuest.getSeed() % 5>>
<<case 0>>
rancher
<<case 1>>
shepherd
<<case 2>>
farmer
<<case 3>>
merchant
<<default>>
chieftain
<</switch>>
was disappointed at their early return, but not upset, given the blizzard outside. The storm didn't let up for several days, and by the time your slavers were able to leave, the trail they sought was long gone, along with any chance of payment.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<name $g.tracker>> called out to <<name $g.fighter>> and <<name $g.hunter>> as <<they $g.tracker>> lost sight of the others in the blinding snow. When the snowfall finally ceased and your slavers were able to regroup, they discovered <<switch $gQuest.getSeed() % 3>>
<<case 0>>
<<name $g.fighter>>
<<run setup.qc.Injury('fighter', 6).apply($gQuest)>>
<<case 1>>
<<name $g.hunter>>
<<run setup.qc.Injury('hunter', 6).apply($gQuest)>>
<<default>>
<<name $g.tracker>>
<<run setup.qc.Injury('tracker', 6).apply($gQuest)>>
<</switch>> slumped against a tree, bleeding from several wounds. They weren't able to describe the creature they fought, but they hope it was a bear. The wounds <i>look</i> like they could be from bear claws.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriabrewer = new setup.UnitCriteria(
null, /* key */
'Brew Inspector', /* name */
[
setup.trait.bg_foodworker,
setup.trait.per_frugal,
setup.trait.per_curious,
setup.trait.per_attentive,
setup.trait.skill_alchemy,
],
[
setup.trait.per_dreamy,
setup.trait.per_lavish,
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_scary,
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_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
],
[
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_scary,
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_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
There are several monasteries in the north. Unlike those in the lands of the <<lore region_sea>>, these are orders focused almost exclusively on their gods and their spirituality. Most of the orders accept converts of all kinds, including the poor, the deformed, and even those whose bodies have become corrupted by demonic forces. All can find a new community within the walls of their monasteries.
</p>
<p>
Although most officially take vows of poverty, and give freely to those in need, many monasteries are incredibly rich, paying nothing in the way of taxes, and producing the highest quality, most desirable, and most expensive meads and ales.
You've been observing one in particular, a smaller, less well known monastery. They seem to provide another, larger monastery with their mead once a month, who then onsell the mead under their own name for larger profits. While it would be nice to raid the bigger monastery, this does provide you with an opportunity.</p>
<p>
If a group of slavers could pose as their regular contact, you might be able to make off with their booze. Even without the additional markup, it should fetch a nice sum on the market.
</p><p>
Upon arrival at the monastery, <<name $g.monk1>> knocked and introduced
<<themselves $g.monk1>> and <<name $g.monk2>> as the delivery people for the monthly collection.
<<set _sly = setup.selectUnit([$g.monk1, $g.monk2], {trait: 'per_sly'})>>
<<if _sly>>
<<name _sly>> <<if _sly.isYou()>>are<<else>>is<</if>> an accomplished liar,
and <<they _sly>> had the monks eating out of their hands in short order.
<</if>>
While <<name $g.monk1>> ingratiated <<themselves $g.monk1>> with the locals, a senior monk led <<name $g.brewer>> and <<name $g.monk2>> to a cellar
storeroom.
<<name $g.brewer>> <<uadv $g.brewer>> sampled the merchandise, then <<they
$g.brewer>> picked out some barrels for <<name $g.monk2>> to haul onto their wagon.
Between <<name $g.monk1>>, <<name $g.monk2>> and some of the other monks, they had the wagon packed in short order.
</p>
<<if $gOutcome == 'crit'>>
<p>
By the time night fell, <<name $g.monk1>>, <<name $g.monk2>>, and <<name $g.brewer>> were seated around a cozy campfire, miles away from the monastery they had hoodwinked. <<name $g.monk2>> tapped into one of the casks and poured everyone a cup. Or two, or maybe three...
</p>
<p>
By morning, <<name $g.monk2>> monk2|was nursing a splitting headache. Worth it?
</p>
<<else>>
<p>
A few minutes after the slavers took to the road, they passed several travelers in monk robes heading the opposite way with with an empty wagon.
Shortly after, <<name $g.monk2>> heard irate shouts coming from behind them. Fearing their ruse had been uncovered, 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 <<name $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.
<<name $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, <<name $g.brewer>> waited <<uadv $g.brewer>> while the monk helped <<name $g.monk1>> and <<name $g.monk2>> load up their wagon with casks.
And with barely a word said, the slavers were out of the monastery with the ale.
</p>
<p>
To celebrate having swindled the monks, <<name $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.
<<name $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 they'd passed the previous day turned out to be the monks that the slavers were attempting to impersonate.
As soon as <<name $g.brewer>> introduced <<name $g.monk1>> and <<name $g.monk2>> as traders from the other monastery, they were met with unfriendly stares and a closed door.
</p>
<p>
With no other options, your slavers returned to the fort with an empty cart.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaoverseer = new setup.UnitCriteria(
null, /* key */
'Overseer', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_lustful,
setup.trait.per_proud,
setup.trait.per_brave,
setup.trait.per_cruel,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_attentive,
setup.trait.skill_intimidating,
],
[
setup.trait.bg_slave,
setup.trait.per_chaste,
setup.trait.per_humble,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.per_dreamy,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
slaving: 1.5,
sex: 0.5,
}
)>>
<<set _criteriatoilet1 = new setup.UnitCriteria(
null, /* key */
'Toilet Slave', /* name */
[
setup.trait.bg_slave,
setup.trait.per_lustful,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.training_toilet_master,
setup.trait.per_masochistic,
],
[
setup.trait.bg_slaver,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_toilet_basic, setup.trait.training_toilet_advanced, setup.trait.training_toilet_master], true),
],
{
}
)>>
<<set _criteriatoilet2 = new setup.UnitCriteria(
null, /* key */
'Toilet Slave', /* name */
[
setup.trait.bg_slave,
setup.trait.per_lustful,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.training_toilet_master,
setup.trait.per_masochistic,
],
[
setup.trait.bg_slaver,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_toilet_basic, setup.trait.training_toilet_advanced, setup.trait.training_toilet_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'camouflage', /* key */
"Camouflage", /* Title */
{ /* Author */
name: "anonymouse21212",
url: 'https://www.reddit.com/r/FortOfChains/comments/ksjs30/hello_and_my_first_submission/',
},
[ /* tags */
'watersport',
'city',
'money',
'favor',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'overseer': [ _criteriaoverseer, 1],
'handler1': [ setup.qu.slavehandler, 1],
'handler2': [ setup.qu.slavehandler, 1],
'toilet1': _criteriatoilet1,
'toilet2': _criteriatoilet2,
},
{ /* actors */
},
[ /* costs */
],
'Quest_camouflage',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_camouflageCrit',
[
setup.qc.MoneyCustom(3000),
setup.qc.Favor('outlaws', 100),
setup.qc.Trait('toilet1', setup.trait.training_toilet_advanced),
setup.qc.Trait('toilet2', setup.trait.training_toilet_advanced),
],
],
[
'Quest_camouflageCrit',
[
setup.qc.MoneyCustom(2000),
setup.qc.Favor('outlaws', 80),
],
],
[
'Quest_camouflageFailure',
[
setup.qc.Injury('toilet1', 1),
setup.qc.Injury('toilet2', 1),
setup.qc.MoneyCustom(500),
],
],
[
'Quest_camouflageDisaster',
[
setup.qc.Injury('handler1', 1),
setup.qc.Injury('handler2', 1),
setup.qc.TraumatizeRandom('overseer', 3),
setup.qc.Injury('toilet1', 2),
setup.qc.Injury('toilet2', 2),
setup.qc.Ire('outlaws', 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
A gang of thieves in the outskirts of the city are worried about keeping their trail covered. They've put out an unusual request: toilet slaves to accompany the gang for a while, drinking their piss so it won't leave their scent behind. They also request slave handlers to keep the slaves in line. While they promise monetary rewards, fulfilling such an ususual request would no doubt also earn much of their gratitude, and what better reward is there than friendship?
</p><p>
Outlaws rarely have time to bother with hygiene. As a result, <<rep $g.toilet1>> and <<rep $g.toilet2>> frequently found themselves faced with large amounts of disgustingly strong piss, poured down their throats straight from the bandits' filthy dicks and pussies.
</p>
<p>
<<if $g.toilet1.isHasTrait('training_toilet_master')>>
Instead of being disgusted, <<reps $g.toilet1>> training held strong, and <<they $g.toilet1>> even actually craved the next opportunity the bandits relieve themselves.
<<elseif $g.toilet1.isHasTrait('training_toilet_advanced')>>
Thankfully, <<reps $g.toilet1>> training proved to be more than enough for <<them $g.toilet1>> to be up to the task. <<They $g.toilet1>> drank <<their $g.toilet1>> share of outlaw piss without much complaint.
<<else>>
<<reps $g.toilet1>> basic toilet training was ultimately not enough to keep <<them $g.toilet1>> from choking on the piss <<they $g.toilet1>> drank, but a timely intervention by <<rep $g.overseer>>, who <<uadv $g.overseer>> bought some ring gags to help <<rep $g.toilet1>> swallow everything, resolved the issue.
<</if>>
<<if $g.toilet2.isHasTrait('training_toilet_master')>>
Meanwhile, <<rep $g.toilet2>> seemingly couldn't get enough of the gang members' acrid waste.
<<elseif $g.toilet2.isHasTrait('training_toilet_advanced')>>
<<rep $g.toilet2>>, for <<their $g.toilet2>> part, proved more than capable of doing <<their $g.toilet2>> share to keep the gang's trail clean.
<<else>>
<<reps $g.toilet2>> rudimentary training looked like it might not be enough to let <<them $g.toilet2>> stomach the strong piss at first, but with the help of a timely ring gag, <<they $g.toilet2>> found <<their $g.toilet2>> footing.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
<<rep $g.toilet1>> and <<rep $g.toilet2>> performed admirably, without causing any problem for <<yourrep $g.overseer>>, <<rep $g.handler1>>, or <<rep $g.handler2>>. At the end of the little excursion, the gang leader expressed <<their $g.overseer>> gratitude to <<rep $g.overseer>>, before paying <<them $g.overseer>> an extra, and telling <<them $g.overseer>> that he hoped he could hire the team again in the future. The duo of slaves even seem to have enjoyed their week with the gang...
</p>
<<else>>
<p>
Under <<rep $g.handler1>> and <<reps $g.handler2>> command and <<reps $g.overseer>> watchful eye, <<rep $g.toilet1>> and <<rep $g.toilet2>> proved competent toilets. At mission's end, you receive the promised reward and the gratitude of the local outlaws.
</p>
<</if>><p>
Outlaws rarely have time to bother with hygiene. As a result, <<rep $g.toilet1>> and <<rep $g.toilet2>> frequently found themselves faced with large amounts of disgustingly strong piss, poured down their throats straight from the bandits' filthy dicks and pussies.
</p>
<p>
At first, it looked like
<<if $g.toilet1.isHasTrait('training_toilet_master')>>
<<rep $g.toilet1>> would enjoy the mission greatly and
<<elseif $g.toilet1.isHasTrait('training_toilet_advanced')>>
<<rep $g.toilet1>> would perform well enough and
<<else>>
<<rep $g.toilet1>> would struggle, but would pull through with the aid of a ring gag, and
<</if>>
<<if $g.toilet2.isHasTrait('training_toilet_master')>>
<<rep $g.toilet2>> would perform admirably.
<<elseif $g.toilet2.isHasTrait('training_toilet_advanced')>>
<<rep $g.toilet2>> would prove a competent toilet.
<<else>>
<<rep $g.toilet2>> would need a few days to find <<their $g.toilet2>> footing.
<</if>>
But unfortunately, about a week in, things went very wrong.
Either <<rep $g.toilet1>> and <<rep $g.toilet2>> weren't trained quite well enough or the bandits were just too careless, because <<rep $g.overseer>> ended up having to call the mission off early after both slaves nearly choked on outlaw piss.
Luckily, they'll both be fine with a bit of rest, and the gang agreed to give <<rep $g.overseer>> partial pay.
</p><p>
Outlaws rarely have time to bother with hygiene. As a result, <<rep $g.toilet1>> and <<rep $g.toilet2>> frequently found themselves faced with large amounts of disgustingly strong piss, poured down their throats straight from the bandits' filthy dicks and pussies.
</p>
<p>
<<if $g.toilet1.isHasTrait('training_toilet_master')>>
<<rep $g.toilet1>> seemed quite content with the task at first, and
<<elseif $g.toilet1.isHasTrait('training_toilet_advanced')>>
<<rep $g.toilet1>> performed well at first, and
<<else>>
<<rep $g.toilet1>> struggled at first, but seemed determined to pull through, while
<</if>>
<<if $g.toilet2.isHasTrait('training_toilet_master')>>
<<rep $g.toilet2>> appeared to be in <<their $g.toilet2>> element.
<<elseif $g.toilet2.isHasTrait('training_toilet_advanced')>>
<<rep $g.toilet2>> looked like a capable toilet.
<<else>>
<<rep $g.toilet2>> seemed resolved to not let <<their $g.toilet2>> inexperience with the task hold <<them $g.toilet2>> back.
<</if>>
But in truth, neither of them were up for the task.
Near the end of the mission, the slaves decided to make a break for it.
Luckily, <<yourrep $g.handler1>> and <<rep $g.handler2>> caught them.
Unluckily, this led to a brutal fistfight leaving all four of them injured and
<<rep $g.overseer>> unharmed but severely rattled. The noise of the scuffle drew attention to the gang, as well, and they were understandably furious that your attempts at helping camouflage them have completely backfired.
</p>/* PROOFREAD COMPLETE */
<<set _prankster = new setup.UnitCriteria(
null, /* key */
'Prankster', /* title */
[
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_entertain,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_kind,
setup.trait.per_serious,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slaver)
], /* requirement */
{ /* skill effects, sum to 3.0 */
arcane: 2.0,
intrigue: 1.0,
}
)>>
<<set _desc1 = 'a|was a dropout from the Academy of Wind whom you convinced to join your company as a slaver'>>
<<set _desc2 = 'a|was a student in the Academy of Wind whom you enslaved 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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'recruiter': setup.qu.recruiter,
'prankster1': _prankster,
'prankster2': _prankster,
},
{ /* actors */
'dropout': 'quest_humankingdom_all_windstudent',
'victim': 'quest_humankingdom_all_windstudent',
},
[ /* costs */
],
'QuestAcademyOfWind', /* passage description */
setup.qdiff.hard32, /* difficulty */
[ /* outcomes */
[
'QuestAcademyOfWindCrit',
[
setup.qc.Slave('victim', _desc2),
setup.qc.Slaver('dropout', _desc1),
setup.qc.MoneyCrit(0.5),
],
],
[
'QuestAcademyOfWindCrit',
[
setup.qc.Slaver('dropout', _desc1),
setup.qc.MoneyNormal(0.5),
],
],
[
'QuestAcademyOfWindFailure',
[
],
],
[
'QuestAcademyOfWindDisaster',
[
setup.qc.OneRandom([
setup.qc.Trait('prankster1', setup.trait.per_submissive),
setup.qc.Trait('prankster2', setup.trait.per_submissive),
]),
setup.qc.Ire('humankingdom', 1),
],
],
],
[[setup.questpool.city, setup.rarity.uncommon],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.prospectshall)
], /* prerequisites to generate */
)>><p>
The Academy of Wind is one the most well known magic institutes spread throughout <<lore continent_main>>.
The academy accepts students of any background, so long they display aptitude for <<lore magic_wind>>.
The vast majority of them are the citizens of the wind-attuned <<rep $company.humankingdom>>, however.
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 has just been expelled.
According to the rumors, <<their $g.dropout>> natural aptitude for <<lore magic_wind>> was
the subject of much jealousy from <<their $g.dropout>> peers, which ultimately resulted in other
students bribing the academy's higher ups to drop the student out.
Having an ex-member of the academy of wind as your slaver is perhaps too tempting of an idea,
and therefore it might just be worth it to try and seek this dropout out.
You can 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 the dropout apparently already
planning <<their $g.dropout>> own somewhat shoddy revenge plan against
<<their $g.dropout>> former classmates.
As an experienced slavers, your slavers were able to improve the plan.
<<set _cre = setup.selectUnit([$g.recruiter, $g.prankster1, $g.prankster2], {trait: 'skill_creative'})>>
<<if _cre>>
In particular, <<reps _cre>> mind was particularly inventive.
<</if>>
<<set _evil = setup.selectUnit([$g.recruiter, $g.prankster1, $g.prankster2], {trait: 'per_evil'})>>
<<if _evil>>
<<Reps _evil>> true degenerate personality helped ascend the plan into something even more degenerate.
<</if>>
With the plan complete, the dropout, who introduced <<themself $g.dropout>> as <<rep $g.dropout>>, agreed
to join your company should your slavers helped <<them $g.dropout>> enact the plan.
</p>
<<if $gOutcome == 'crit'>>
<p>
The next day, your slavers went into the academy and
sneaked into <<reps $g.victim>> room, who will be the victim of the park,
and dropped the surprise package in front of <<their $g.victim>> door.
The surprise package was in fact one of the spellbooks that the dropout had written.
Upon returning to <<their $g.victim>> room, <<rep $g.victim>> found the book and,
hungry for power as <<they $g.victim>> victim|was, excitedly went to <<their
$g.victim>> room to study the book.
But the book had been tampered with -- as <<rep $g.victim>> became engrossed
with the book, <<they $g.victim>> failed to realize that the book had been modified into a
long incantation of the spell of self-binding. Within moments from finishing
the book, otherwordly tendrils were summoned out of nowhere,
coiling around <<their $g.victim>> unsuspecting body,
securing <<their $g.victim>> limbs behind their body in a hog-tied position.
The coils also wrapped tightly and painfully around
<<their $g.victim>> <<ubreasts $g.victim>> and <<ubelly $g.victim>>,
forcing <<them $g.victim>> to lay helplessly on the floor.
Another set of coil wrapped harshly around
<<if $g.victim.isHasDick()>>
the base of <<their $g.victim>>
dick, forcing the shaft to be erect but preventing <<them $g.victim>> from actually climaxing.
<<else>>
and into <<their $g.victim>> vagina, giving continuous pain while preventing
<<them $g.victim>> from actually receiving pleasure.
<</if>>
As a final touch, <<their $g.victim>> <<umouth $g.victim>> was fitted with a knot-gag,
rendering everything <<they $g.victim>> say into guttural moans.
</p>
<p>
Later that night, your slavers returned to <<reps $g.victim>> room together with
the dropout <<rep $g.dropout>>. <<Rep $g.victim>> victim|was at first almost
relieved to see someone entering
<<their $g.victim>> room, only to recognize the dropout <<rep $g.dropout>> in horror.
Having <<their $g.dropout>> revenge in spades,
<<rep $g.dropout>> happily went to your fort together with your slavers
and in tow and a new magical slave to break. All in all, it was a good day of work.
</p>
<<else>>
<p>
The plan was simple -- to humiliate the student <<rep $g.victim>> in front of as many people as they could.
The centerpoint of the Academy of Wind is the statue of their founder, posed
with one arm pointing to the sky triumphantly.
In the fateful day, as <<rep $g.victim>> victim|was just passing through the courtyard,
the dropout <<rep $g.dropout>> and your slavers unleashed the prepared wind spell.
Within seconds, a large gust of wind were summoned in the academy, and <<rep $g.victim>>
victim|was caught in the middle of it.
<<Rep $g.victim>> could do nothing but watch and struggle in horror as <<they $g.victim>>
victim|was lifted up into the air and gently placed right above the statue upwards-pointing arm.
As <<rep $g.dropout>> explained to <<them $g.victim>> what was about to happen, the wind spell
fizzled, impaling <<reps $g.victim>> ass straight into the statue's sizable arm.
<<Rep $g.dropout>> and your slavers quickly make their exit to watch from afar as the
student screamed in agony of the statuesque assrape.
</p>
<p>
With <<their $g.dropout>> revenge served in spades, <<rep $g.dropout>>
happily joined your slaving company.
<<They $g.dropout>> with <<their $g.dropout>> mastery over <<rep setup.trait.magic_wind>>
will surely make a fine slaver.
</p>
<</if>><p>
Unfortunately, your slaver was not able to locate the dropout within the vast
<<lore region_city>>.
Checking the local tavern, inn, or even asking around the academy did not yield any result.
</p><p>
With some difficulty, <<rep $g.recruiter>> managed to <<uadv $g.recruiter>>
find the dropout apparently already
planning <<their $g.dropout>> own somewhat shoddy revenge plan against
<<their $g.dropout>> former classmates.
The plan was already complete by the time your slavers arrived, but <<rep $g.dropout>> agreed
to join your company should your slavers helped <<them $g.dropout>> enact the plan.
</p>
<p>
The next day, your slavers sneaked into the prospective victim <<reps $g.victim>> room in the academy, and
dropped the surprise package in front of <<their $g.victim>> door.
The surprise package was in fact, one of the spellbooks that the dropout had written.
<<Reps $g.prankster1>> curiosity, however,
got the better of <<them $g.prankster1>> and
<<they $g.prankster1>> felt there would be no harm to read a part of the book.
But it turned out to be a big mistake.
Within moments, otherwordly tentacles appeared out of nowhere and
coiled around both <<yourrep $g.prankster1>> and <<rep $g.prankster2>> unsuspecting bodies,
securing their limbs behind their bodies
in hog-tied positions and immobilizing them completely.
Apparently, <<rep $g.dropout>> also made the spell pay very special attention to the victim's "special parts",
which were bound by even tighter coil to make them constantly stimulated but unable to reach climax.
As a final touch, their mouths were also rendered useless by being fitted with large knot-gags.
</p>
<p>
Your slavers had to endure hours of being tied in such uncomfortable positions before eventually being found
by the academy staffs in the morning.
While uninjured, this experience has deeply changed your slavers, awakening some kind of
submissive behaviors in them, as well as earning the academy's wrath for trespassing upon
their domain.
</p>/* PROOFREAD COMPLETE */
<<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.tough_nimble,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_lunatic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.subrace_humankingdom,
setup.trait.balls_large,
setup.trait.balls_titanic,
setup.trait.breast_large,
setup.trait.breast_titanic,
setup.trait.per_gregarious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
'alchemist': 'all',
'slave': 'all',
},
[ /* costs */
],
'QuestBountyHuntSlime', /* passage description */
setup.qdiff.normal26, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntSlimeCrit',
[
setup.qc.MoneyCrit(),
setup.qc.SlaveMarker('slave'),
],
],
[
'QuestBountyHuntSlimeSuccess',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestBountyHuntSlimeFailure',
[
],
],
[
'QuestBountyHuntSlimeDisaster',
[
setup.qc.Injury('merc1', 4),
setup.qc.Injury('merc2', 4),
setup.qc.Injury('negotiator', 4),
],
],
],
[[setup.questpool.city, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_city>> has a massive underground sewers system.
While most of the sewers are kept functional, some deeper parts of the sewers
were apparently built in ancient times, and it is said to be inhabited by
otherworldly monsters.
One of the most infamous among these monsters are the slimes,
who is said to feed upon the bodily fluids of other creatures.
</p>
<p>
One of the alchemists in the city is posting an open request for a vial of the slime's
liquid body for <<their $g.alchemist>> research.
<<They $g.alchemist>> is offering a great amount of reward for adventurers brave enough to best
these creatures.
</p><<if $g.slave.isMale()>>
<<questimage 'bounty_hunt_slime_male.jpg'>>
<<else>>
<<questimage 'bounty_hunt_slime_female.jpg'>>
<</if>>
<p>
During their adventure below the city,
your slavers happened upon a slime "mating" with an unlucky victim,
a resident of the undercity of Lucgate.
With the slime distracted, it was easy for your slavers to defeat the creature.
As your slavers put the slime's body into the vial,
<<set _alc = setup.selectUnit([$g.merc1, $g.merc2, $g.negotiator], {trait: 'skill_alchemy'})>>
<<if _alc>>
<<yourrep _alc>> perceptively noted that a rare alchemical component was absorbed into the vial --
<<else>>
they were lucky that a rare component flew into the vial --
<</if>>
a mixture of its latest victim cum mixed together with the slime's natural aphrodisiac.
<<Yourrep $g.negotiator>> managed to use this rare material to
<<uadv $g.negotiator>> negotiate a better pay with
the alchemist, who happily paid nearly double the rewards that was originally agreed on.
</p><p>
Your slavers turned out to be more than an even match for such a slime monstrosity,
and managed to dispatch it cleanly without any problem.
Your slavers then put samples from the slime's remains into the vial.
The vial smelled weird, and <<yourrep $g.negotiator>> could not help but somehow
became aroused by it.
It made <<them $g.negotiator>> wonder just what kind of potion the
alchemist needed such an ingredient for.
</p><p>
Unfortunately, despite having the upper hand, your slavers sloppily allowed
the slime to escape in the middle of the fight by sliding into the gutter.
Your slavers did not manage to find any other slime during their venture
and had to return back to the fort empty-handed.
</p><p>
Your slavers lost to the slime, and ended up submitting to the creature's whims.
<<if $g.negotiator.isHasDick() and $g.merc1.isHasDick() and $g.merc2.isHasDick()>>
The trio's balls were completely drained
<<elseif $g.negotiator.isHasVagina() and $g.merc1.isHasVagina() and $g.merc2.isHasVagina()>>
The trio's breasts were completely drained
<<else>>
They were drained
both from their balls and from their breasts,
<</if>>
over and over again for a few hours.
It would require several weeks for them to recover mentally from such trauma.
You have the sneaking suspicion that the slavers deliberately submitted to the slime
out of pure curiosity, but there was just no way to confirm this suspicion.
</p>/* PROOFREAD COMPLETE */
<<set _robber = new setup.UnitCriteria(
null, /* key */
'Fake Crimson Robber', /* title */
[
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.tough_nimble,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_brave,
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.skill_entertain,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_valuable,
], /* critical traits */
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_cautious,
setup.trait.per_aggressive,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.skill_intimidating,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[
setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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(),
],
],
[
'QuestCrimsonRobberCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestCrimsonRobberCrit',
[
],
],
[
'QuestCrimsonRobberCrit',
[
setup.qc.Injury('robber', 4),
],
],
],
[[setup.questpool.city, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The market square of the <<lore region_city>> 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 rumors 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 rumors 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 other slavers will gather up valuables during the distraction from
the unattended booths.
To make the show more convincing, you can try adding a love interest to the mix --
one of your own slavers who will be pretending to be a normal peddler that happened to be robbed by
the Crimson Robber only to fall in love.
Surely such a clever plan must work, no?
</p><p>
<<if $g.robber.isHasTrait(setup.trait.gender_male)>>
Donning a crimson cape and a red hunter's gear, <<yourrep $g.robber>> robber|was 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>> robber|was sure
to dazzle all the people of the market.
<</if>>
Meanwhile, <<yourrep $g.love>> <<uadv $g.love>> practiced <<their $g.love>> fake accent
and the attempt to fake loving at first sight.
<<Rep $g.thief>> also stood at the ready to <<uadv $g.thief>> rob the stalls during the ensuing commotion.
Your slavers were ready for the mission, and it was time for the stage to open.
</p>
<<if $gOutcome == 'crit'>>
<p>
In the middle of the market,
<<rep $g.love>>, who was carrying a bucket of roses, was "accidentally"
bumped by a stranger.
The stranger then revealed <<themself $g.robber>> to be Crimson Robber in the flesh.
<<They $g.robber>> then continued by demanding in a <<uadjper $g.robber>> tone
everything that <<rep $g.love>> had, including <<their $g.love>> heart.
<<set _beauty = setup.selectUnit([$g.love, $g.thief], {trait: 'face_beautiful'})>>
<<set _att = setup.selectUnit([$g.love, $g.thief], {trait: 'face_attractive'})>>
<<set _vmuscle = setup.selectUnit([$g.love, $g.thief], {trait: 'muscle_verystrong'})>>
<<set _muscle = setup.selectUnit([$g.love, $g.thief], {trait: 'muscle_strong'})>>
<<if _beauty>>
The roses surrounding them as well as <<reps _beauty>> gorgeous-looking face made them
<<elseif _att>>
The roses surrounding them as well as <<reps _att>> attention-grabbing face made them
<<elseif _vmuscle>>
The roses surrounding them as well as <<reps _vmuscle>> bulging muscles made them
<<elseif _muscle>>
The roses surrounding them as well as <<reps _muscle>> fit body made them
<<else>>
The roses that fell around them enhanced the atmosphere, making them looked like
<</if>>
a convincing pair, with mobs of merchants
leaving their stalls to watch the show unfold.
Meanwhile, <<yourrep $g.thief>> had no problem at all securing the numerous goods from the
unattended stalls, 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>
<<elseif $gOutcome == 'success'>>
<p>
In the middle of the market, <<rep $g.robber>> suddenly appeared (after hiding)
and demanded <<reps $g.love>> attention and money.
While the acting lacked character and enthusiasm, 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 <<reps $g.thief>> job of securing the goods pathetically easy.
Before the guards were called in, all of your slavers escaped from the market,
leaving none the wiser.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
In the middle of the market, <<yourrep $g.robber>> awkwardly accosted
<<rep $g.love>> and threatened <<them $g.love>> for money.
With such an amateur acting, nobody believed for a second that <<rep
$g.robber>> robber|was the true Crimson Robber
and the guards were immediately called.
Your slavers had no choice but to hurry back home to avoid being captured.
Perhaps slavers were not meant for acting after all.
</p>
<<else>>
<p>
<<Yourrep $g.robber>> attempted to climb the fountain in the middle of the market to
dramatize the declaration, only to fall horribly during the climb, injuring <<their $g.robber>>
head. Luckily, nobody suspected any foul play, but the plan had to be called off.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 a|their control over electricity to train a|their slaves', /* unit description */
5000, /* slave value */
{
slaving: 4,
knowledge: 1,
arcane: 2,
},
)>>
<<run new setup.UnitGroup(
'quest_electricmaster_electrician',
'The Electrician',
'city_all',
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',
'city_all',
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.height_short,
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_serious,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_creative,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.bg_slave,
setup.trait.dick_large,
setup.trait.balls_large,
setup.trait.breast_large,
setup.trait.muscle_strong,
setup.trait.tough_tough,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_brave,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.skill_entertain,
].concat(setup.TraitHelper.EQUIPMENT_SLUTTY), /* disaster traits */
[
setup.qres.Job(setup.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 = 'a|was a master of <<lore magic_wind>> known to most circles simply as "The Electrician"'>>
<<set _desc2 = 'a|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', 'rare',], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'electrician': [_electrician, 2],
'infiltrator1': [setup.qu.infiltrator, 0.5],
'infiltrator2': [setup.qu.infiltrator, 0.5],
},
{ /* actors */
'lord': 'quest_electricmaster_electrician',
'slave': '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.MissingUnit('electrician'),
],
],
],
[[setup.questpool.city, setup.rarity.epic],], /* 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', 'rare',], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'electrician': [_electrician2, 2],
'infiltrator1': [_infiltrator, 0.5],
'infiltrator2': [_infiltrator, 0.5],
},
{ /* actors */
'slave': 'quest_electricmaster_slave',
},
[ /* costs */
],
'QuestElectricMaster', /* passage description */
setup.qdiff.hardest39, /* difficulty */
[ /* outcomes */
[
'QuestElectricMasterCrit',
[
setup.qc.MoneyCrit(1.2),
],
],
[
'QuestElectricMasterSuccess',
[
setup.qc.Slave('slave', _desc2),
setup.qc.MoneyNormal(),
],
],
[
'QuestElectricMasterFailure',
[
setup.qc.Injury('electrician', 4),
],
],
[
'QuestElectricMasterDisaster',
[
setup.qc.MissingUnit('electrician'),
],
],
],
[[setup.questpool.city, setup.rarity.epic],], /* 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 */
)>><<set _repeat = ($gQuest.getTemplate().key == 'electric_master_clearcrit')>>
<p>
The <<lore race_humankingdom>> are known for their affinity to <<lore magic_wind>>.
These masters of wind magic are capable more than just altering
the wind -- they could shape the wind and alter electricity from their fingertips,
zapping anyone they deem fit for punishment.
While electric magic can certainly be certainly be put to good use during combat,
it is also remarkably effective as a tool for breaking slaves.
</p>
<<if !_repeat>>
<p>
In the more expensive area of the <<lore region_city>>, resides an infamouse rich lord that people
colloqually refer to as "The Electrician".
The lord is apparently gifted with <<rep setup.trait.magic_wind_master>>,
and has been using it liberally to train his staffs into fully servile servants.
It is said that the mansions hold great riches, as well as obedient "slaves", which
often tempts foolish people to try and break inside.
They never come back.
Rumors has it that the Electrician takes delight in breaking the most defiant of people,
and actually invited people to rob their mansion as to obtain even more victims to break.
</p>
<<else>>
<<set _lord = setup.getUnit({job: setup.job.slaver, title:'quest_electricmaster_the_electrician'})>>
<p>
<<if _lord>>
While you have recruited <<rep _lord>> into your company, <<they _lord>>
gives <<their _lord>> consent should you still wish to raid the mansion.
<<else>>
You recall that your slavers has been there before.
<</if>>
But even so, all the automated defenses of the mansion are still active, but so does
the prizes that await your slavers there.
</p>
<</if>><<set _repeat = ($gQuest.getTemplate().key == 'electric_master_clearcrit')>>
<p>
Given the strange layout of the mansion, there was only one possible option for a potential
thief to break in -- have
<<yourrep $g.electrician>> <<uadv $g.electrician>> lead the charge
while <<rep $g.infiltrator1>> and <<rep $g.infiltrator2>> trail from behind.
The rumors proved true: as soon as they broke into the mansion, they discovered
that it was indeed fully booby-trapped. Various traps were scattered throughout the
mansion, each one electrifying, and it was entirely up to your slavers to try
to disarm and navigate through the confusing maze.
Given the amount of electric torture devices scattered along the walkway alone, your slavers
could only imagine what kind of depravity could be found behind the closed doors.
</p>
<p>
Fortunately, <<rep $g.electrician>> electrician|was more than adept at
<<their $g.electrician>> job.
<<They $g.electrician>> managed to find and disarm the traps one by one, and your slavers
made steady progress as they
climbed the mansion little by little, doing their best to ignore all the various naked
"guards" being "posted" in the various
locations and under many daunting poses, as well as the occasional screams that would
suddenly come from the lower floors.
</p>
<<if !_repeat>>
<p>
Eventually, they arrived at the topmost floor.
The last obstacle before them was a door made of strong oaken wood,
which your slavers proceeded to open carefully.
In the small room behind the door, sat a <<man $g.lord>> with <<their $g.lord>> back facing your slavers.
The <<man $g.lord>> 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 inside.
But "The Electrician" was quite impressed by your slavers' prowess to reach this room.
Citing boredom, <<they $g.lord>> asked to join your company for a
change of scenery, and arranged for <<their $g.lord>> mansion to
be attended to by <<their $g.lord>> numerous "employees" for the time being.
</p>
<<else>>
<p>
Eventually, they arrived at the basement, where they found a stash of treasure
hidden inside one of the rooms.
They took the treasure out and sold them for quite a large profit, which perhaps could
be even larger were your slavers not steal one or two trinkets from the treasures.
</p>
<</if>><p>
The mansion were so littered by traps that
your slavers had to move very, very slowly to make progress forwards.
Eventually, they spotted a suspicious looking door, and decided to open it.
Behind the door, they found a slave whose nipples and <<ugenital $g.slave>>
were all hooked to a strange looking device.
As your slavers pondered what the device did,
it suddenly came alive, sending an electric jolt into the slave elicting a moan from both pain and ecstacy.
Upon closer inspection, the slave was not actually bound,
so this must be highly trained slave to be able to withstand and endure such a brutal shock
without trying to run away.
Your slavers decided that the slave would make a decent enough prize for the trip, and decided
to end their adventure with the room.
Perhaps next time your slavers would be able to go even further.
</p><p>
Unfortunately, <<rep $g.electrician>> electrician|was sloppy in <<their $g.electrician>> job and
managed to trigger one of the traps.
<<Rep $g.electrician>> electrician|was zapped, which caused <<them
$g.electrician>> to stumble and fall butt-first into another dildo-shaped trap that
zapped <<them $g.electrician>> directly in <<their $g.electrician>> ass.
The combination of sudden pain and pleasure caused <<rep $g.electrician>> to fall unconscious,
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
<<reps $g.electrician>> ass, and impaled <<them $g.electrician>> upwards painfully.
As <<therace $g.electrician>> continued to scream in pain,
the dining room's door closed, trapping your slavers inside.
</p>
<p>
One of the guards then appeared, slowly descended down the staircase before greeting them
as "The Electrician"'s head guard.
<<They $g.slave>> proceeded to <<man $g.slave>>handle <<yourrep $g.electrician>>,
fondling <<their $g.electrician>> <<ugenital $g.electrician>>
and <<ubody $g.electrician>> to make sure they were up to their lord's specifications
for the new "guard" opening.
Satisfied, <<they $g.slave>> 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 remains 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'fateful_auction', /* key */
'Fateful Auction', /* Title */
'darko', /* author */
[
'special', 'unit', 'city',
], /* tags */
1, /* weeks */
8, /* quest expiration weeks */
{ /* roles */
'bidder1': setup.qu.bidder,
'bidder2': setup.qu.bidder,
'escort': setup.qu.escort,
},
{ /* actors */
'target': 'missingslavers',
},
[ /* costs */
setup.qc.MoneyNormal(-0.5),
],
'QuestFatefulAuction', /* passage description */
setup.qdiff.easy35, /* difficulty */
[ /* outcomes */
[
'QuestFatefulAuctionCrit',
[
setup.qc.Slaver('target'),
setup.qc.RemoveFromUnitGroup('target'),
],
],
[
'QuestFatefulAuctionCrit',
[
setup.qc.TraumatizeRandom('target', setup.TRAUMA_MEDIUM),
setup.qc.TraumatizeRandom('target', setup.TRAUMA_MEDIUM),
setup.qc.Slaver('target'),
setup.qc.RemoveFromUnitGroup('target'),
],
],
[
'QuestFatefulAuctionCrit',
[
setup.qc.Trait('target', setup.trait.per_masochistic),
setup.qc.TraitReplaceExisting('target', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('target', setup.trait.vagina_gape),
setup.qc.Slaver('target'),
],
],
[
'QuestFatefulAuctionCrit',
[
],
],
],
[ /* quest pool and rarity */
[setup.questpool.rescue, setup.rarity.uncommon],
],
[ /* prerequisites to generate */
setup.qres.QuestUnique(),
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
],
[ /* expiration outcomes */
setup.qc.RemoveFromUnitGroup('target'),
],
)>><p>
You have been invited to an underground slave auction in the <<lore region_city>>.
Unusually, you are invited as a bidder this time, not as a seller.
Normally, such offer would not interest you or your company, but on a closer
look at the list of slaves being offered, you notice something very interesting.
<<Rep $g.target>> target|is one of the items on sale -- surely you remember
<<rep $g.target>>? <<They $g.target>> 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 for this important mission.
This could be your chance to rescue <<rep $g.target>> from their terrible fate.
</p><p>
Your slavers enthusiastically went to the <<lore region_city>>, with the sole
goal of rescuing their former mate.
They began by deriving a plan.
First, they needed to be sufficiently presentable to attend the auction.
<<Yourrep $g.escort>> would then need to lead them into the auction, and hopefully
<<reps $g.escort>> grace would be enough to convince the guards to let
them in. Once they were in, they would finally need to ensure that they win
the bid for <<rep $g.target>>.
</p>
<p>
Your slavers managed to find their way into the auction, and once inside
they slavers waited. One by one, many slaves were being auctioned, ranging
from the standard fare of human slaves freshly captured from the
<<lore region_vale>>, to the rather exotic slaves such as a former orc
warlord from the <<lore region_desert>>.
Until finally, <<rep $g.target>> target|was being auctioned.
</p>
<<if $gOutcome == 'crit'>>
<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>> target|was completely
taken by surprise, and soon a tearful reunion took place in the auction hall.
Together, they came back into your fort.
</p>
<p>
Luckily, it the experience of being a slave did not affect <<rep $g.target>>.
<<They $g.target>> target|remain fit both mentally and physically as <<they
$g.target>> target|was before.
</p>
<<elseif $gOutcome == 'success' or $gOutcome == 'failure'>>
<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 realized that being a slave
had 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, unsure of their success.
</p>
<<else>>
<p>
<<Rep $g.bidder1>> and <<rep $g.bidder2>> sloppily attended the auction,
and were unable to outbid a fellow competitor, who bought <<rep $g.target>> and
took <<them $g.target>> somewhere away...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'fine_dining', /* key */
'Fine Dining', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator1': setup.qu.negotiator,
'negotiator2': setup.qu.negotiator,
'trainer': setup.qu.slavetrainer,
'chair': setup.qu.slavefurniture,
},
{ /* actors */
'man': 'all',
},
[ /* costs */
],
'QuestFineDining', /* passage description */
setup.qdiff.normal38, /* difficulty */
[ /* outcomes */
[
'QuestFineDiningCrit',
[
setup.qc.MoneyCrit(1.4),
],
],
[
'QuestFineDiningCrit',
[
setup.qc.MoneyNormal(1.4),
],
],
[
'QuestFineDiningCrit',
[
],
],
[
'QuestFineDiningCrit',
[
setup.qc.Injury('chair', 6),
],
],
],
[[setup.questpool.city, setup.rarity.uncommon],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_endurance_basic]),
], /* prerequisites to generate */
)>><p>
Even within the undercity of Lucgate, there are rich people and criminals alike.
There are venus there that cater specifically to these criminal rich.
Of particular interest is an established high-end dining facility, which is often
used as a meetingplace to conduct shady business.
However, the dining facility is unlike any others -- all of its furniture
are actually slaves who had been trained to live the rest of their lives as furnitures.
The patrons are encouraged to bring their own furniture to the dining facility to enhance
the experience.
</p>
<p>
An aspiring business<<man $g.man>> has approached your company, asking for an escort to
guard <<them $g.man>> for one such meeting.
<<They $g.man>> promises more pay than usual, but you must supply the furniture slave to bring along.
You can send your slavers are an appropriately trained slave to the meeting, if you choose.
</p><p>
Your slavers prepared <<rep $g.chair>> as best as they could for the no doubt intense
use and abuse during the meeting.
<<set _noble = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.trainer], {trait: 'bg_noble'})>>
<<set _royal = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.trainer], {trait: 'bg_royal'})>>
<<set _boss = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.trainer], {trait: 'bg_boss'})>>
<<set _informer = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.trainer], {trait: 'bg_informer'})>>
<<if _royal>>
<<Reps _royal>> royal upbringing means <<therace _royal>> looked completely natural in the luxurious place.
<<elseif _noble>>
<<Reps _noble>> noble upbringing means <<therace _noble>> looked completely natural in the luxurious place.
<<elseif _boss>>
<<Rep _boss>> used (and maybe still do) to head a criminal network, and luxurious places like
this is not a strange place to <<therace _boss>>.
<<elseif _informer>>
<<Rep _informer>> is used to dressing for the occassion, no small thanks to <<their _informer>>
past as an informer.
<<else>>
Even after donning their best outfits, your slavers still looked awkwardly out of place in the
very classy restaurant.
<</if>>
<<if $settings.getGenderPreference(setup.job.slaver).trait_key == 'male'>>
A naked and muscularly built waiter
<<else>>
A naked and hugely endowed milf waiter
<</if>>
greeted your slavers as their hostess.
Your slavers could see the business<<man $g.man>> was slightly flustered by the waiter's apperance --
it seemed the fine establishment even studied their customers first to pick the best hostess
that fit their sexual tastes.
The establishment used slaves liberally as decoration -- one was hanged on a wall fully displaying
<<their $g.man>> <<ugenital $g.man>> as decorations, while another was serving as a mat,
busily licking all the boots that stepped on the slave.
The hostess escorted
your slavers and their client into the chair-slaves surrounding a round table that had been reserved
for them.
They then waited for their business partners to come to the negotiation while
partaking at the generous sight of the establishment.
</p>
<<if $gOutcome == 'crit'>>
<p>
With the help of <<yourrep $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 the complimentary under-the-table set of oral slaves.
The meeting conducted, the business<<man $g.man>> promised to send your company
the promised pay and more for such a splendid escort.
</p>
<p>
Once the meeting was over,
<<yourrep $g.trainer>> beamed <<uadv $g.trainer>> on <<reps $g.chair>>
mangificent endurance display during the entire commotion, acting as a furniture
almost flawlessly.
As a reward, your slavers allowed <<rep $g.chair>> to go under the table to
suck on some of the willing clients for a while before returning home.
</p>
<<elseif $gOutcome == 'success'>>
<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 you asked what went wrong, your slavers blamed the overly enthusiastic slaves
hidden under the table that continuously serviced the customers, making it
difficult to concentrate.
Still, the meeting went well enough that the business<<lady $g.man>>
happily sent the promised pay to your company.
</p>
<p>
When the meeting was over,
<<rep $g.chair>> who chair|was used as a chair throughout the meeting was completely exhausted.
Petting the slave, your slavers then <<uadv $g.trainer>> rewarded <<them
$g.chair>> by allowing the pet to
<<if $g.trainer.isHasDick()>>
suck on <<their $g.trainer>> dick.
<<else>>
eat <<their $g.trainer>> pussy.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, the meeting did not go as planned, and both parties furiously
exited the establishment earlier than planned.
The promised reward was never sent, and your slavers had to return back to
your compound with nothing to show for it. For such a terrible performance your slave
<<rep $g.chair>> chair|was punished by being edged for more than five hours,
before finally being allowed to crawl back home.
</p>
<<else>>
<p>
In the middle of the meeting, <<yourrep $g.chair>>, who was being used
as a chair by your slave, collapsed from exhaustion, causing a distraction during the meeting.
It caused a domino effect which ultimately rendered the negotiation a complete failure.
The business<<man $g.man>> scoffed at your slavers and exited without paying the promised reward.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _santa = new setup.UnitCriteria(
null, /* key */
'Santa', /* title */
[
setup.trait.per_lavish,
setup.trait.per_playful,
setup.trait.skill_flight,
], /* critical traits */
[
setup.trait.muscle_thin,
setup.trait.per_frugal,
setup.trait.per_serious,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qres.Job(setup.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_direct,
setup.trait.per_lavish,
], /* critical traits */
[
setup.trait.race_human,
setup.trait.per_sly,
setup.trait.per_frugal,
], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sum to 3.0 */
intrigue: 2.0,
brawn: 1.0,
}
)>>
<<set _slave = new setup.UnitCriteria(
null, /* key */
"A Gift", /* title */
[ /* critical traits */
setup.trait.value_high1,
setup.trait.value_high2,
setup.trait.value_high3,
setup.trait.value_high4,
setup.trait.value_high5,
setup.trait.value_high6,
],
[ /* disaster traits */
],
[ /* requirement */
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.value_low),
],
{ /* 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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'santa': [_santa, 2],
'elf1': [_elf, 0.5],
'elf2': [_elf, 0.5],
'present': _slave,
},
{ /* actors */
'gift': 'quest_all_noble',
},
[ /* costs */
],
'QuestGiftExchange', /* passage description */
setup.qdiff.hard31, /* difficulty */
[ /* outcomes */
[
'QuestGiftExchangeCrit',
[
setup.qc.MissingUnitForever('present'),
setup.qc.Slave('gift'),
setup.qc.MoneyCrit(),
],
],
[
'QuestGiftExchangeCrit',
[
setup.qc.MissingUnitForever('present'),
setup.qc.MoneyNormal(2.5),
],
],
[
'QuestGiftExchangeCrit',
[
setup.qc.MissingUnitForever('present'),
setup.qc.MoneyNormal(0.5),
],
],
[
'QuestGiftExchangeCrit',
[
setup.qc.MissingUnitForever('present'),
setup.qc.MoneyNormal(-1),
],
],
],
[[setup.questpool.city, setup.rarity.uncommon],], /* 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 region_city>>
where people blindly exchange gifts with strangers.
While traditionally people exchange standard gifts such as food or
cooking utensils, 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><<if $gOutcome == 'crit'>>
<<if $g.gift.isMale()>>
<<questimage 'gift_exchange_male.jpg'>>
<<else>>
<<questimage 'gift_exchange_female.jpg'>>
<</if>>
<</if>>
<p>
<<Yourrep $g.present>> present|was fully bound and blindfolded from head to toe,
before being placed into a holey box and tied nicely with a ribbon.
<<Rep $g.present>> present|was then shipped by your slavers, to be the new plaything
of some lucky owner.
<<set _lavish = setup.selectUnit([$g.santa, $g.elf1, $g.elf2], {trait: 'per_lavish'})>>
<<set _frugal = setup.selectUnit([$g.santa, $g.elf1, $g.elf2], {trait: 'per_frugal'})>>
<<if _lavish>>
Giving away gifts is completely within <<reps _lavish>> generous nature, adding to the
immersion.
<<elseif _frugal>>
<<Rep _frugal>> almost scoffed at the idea of giving such a slave away,
the greedy slaver clearly not seeing the benefit of the endeavor.
<</if>>
<<set _playful = setup.selectUnit([$g.santa, $g.elf1, $g.elf2], {trait: 'per_playful'})>>
<<set _serious = setup.selectUnit([$g.santa, $g.elf1, $g.elf2], {trait: 'per_serious'})>>
<<if _playful>>
<<Rep _playful>> playfully added several finishing touch to the decoration, including an
oversized candy cane shoved deep within the slave's rear.
<<elseif _serious>>
<<Rep _serious>> took the entire job extremely seriously, and did not even bother to
decorate the "gift".
<</if>>
</p>
<p>
A few weeks after the shipment, you receive a huge package yourself
delivered straight to your fort.
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 stand by and watch over
as you open the box.
</p>
<<if $gOutcome == 'crit'>>
<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? As you opened it further, you started to hear
moaning and breathing sounds coming from inside. This made you and your slavers
more eager to unwrap it faster. When all the wrapping were undone, your present
lied in full bondage before you -- a <<urace $g.gift>> blindfolded
and fully bound with all of <<their $g.gift>> holes fitted
with various festive-looking sex toys.
Happy holidays!
</p>
<<elseif $gOutcome == 'success'>>
<p>
You unwrapped the box slowly but carefully, not wishing whatever danger inside to
catch you by surprise.
But there was no such surprise -- fully unpacked, a grand golden statue of
yourself stood before you in its full glory.
You could not fathom how such statue of your liking could come to exist,
given that you have never really showed your face to any of the game's participants.
While you contemplated keeping the statue as decoration in your office, you felt the money
you can get by smelting the statue and selling the gold might be of more interest
for your business.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
You unwrapped 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.
This continued on until the very tiny boxd in the middle that contain a small lump of gold,
clearly not enough to compensate for <<reps $g.present>> 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 were subpar tend to receive misfortune
in the days to come.
</p>
<<else>>
<p>
You unwrapped the box slowly, but you accidentaly shook the box, which
then proceeded to violently explodes.
Miraculously, you and your slavers were unharmed, but a significant
damage had been done to your fort, which cost money to repair.
</p>
<p>
Perhaps sending such a subpar slave as <<rep $g.present>> was not a good idea after all.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'head_hunter', /* key */
'Head Hunter', /* Title */
'darko', /* author */
['city', 'order'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'whoreblowjob': setup.qu.whoreblowjob,
'slavetrader': setup.qu.slavetrader,
'slavetrainer': setup.qu.slavetrainer,
},
{ /* actors */
'head': 'all',
},
[ /* costs */
],
'QuestHeadHunter', /* passage description */
setup.qdiff.normal34, /* difficulty */
[ /* outcomes */
[
'QuestHeadHunterCrit',
[
setup.qc.SlaveOrderHeadHunter(/* is crit = */ true),
],
],
[
'QuestHeadHunterCrit',
[
setup.qc.SlaveOrderHeadHunter(),
],
],
[
'QuestHeadHunterCrit',
[
setup.qc.SlaveOrderHeadHunter(setup.qdiff.easy29),
],
],
[
'QuestHeadHunterCrit',
[
setup.qc.SlaveOrderHeadHunter(setup.qdiff.easiest29),
setup.qc.SlaverMarker('head'),
],
],
],
[[setup.questpool.city, setup.rarity.uncommon],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.marketingoffice),
], /* prerequisites to generate */
)>><p>
Among the many guilds in the <<lore region_city>>, 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 for 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 ups in the guild.
The "entertainment" they provide are usually lending these employees to the guests to use
as they see fit -- however, they are called the Head-Hunter because of their particular
speciality: their employees are very, very good 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 here.
To prove your capability of finding slaves that can give a good head, the standard procedure
is for one of your slavers to actually demonstrate their capability of giving head,
so bringing one rather slutty slaver is actually a requirement here.
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 here, then you are committing to actually sending the
specific slave that they will be requesting later.
</p><p>
Your arrived at the office and registered themselves to the receptions.
After a while, one of the receptionists escorted
<<yourrep $g.whoreblowjob>> for <<their $g.whoreblowjob>> "interview",
while the rest of your slavers were asked to wait just a little bit longer.
Some time later, your slavers were called upstairs to talk with one of the higher ups.
They entered <<their $g.head>> office, a sparsely decorated office with only
the desk as its centerpiece.
The higher up was dressed formally, and was seemingly busy with an endless
amount of paperwork.
Upon seeing your slavers, <<they $g.head>> greeted them, but your slavers couldn't
shake the feeling that there was something off about <<their $g.head>> demeanor.
Indeed, as your slavers grew closer, they could hear some kind of slurping noises coming from
under the desk. But they knew better than to ask.
</p>
<<if $gOutcome == 'crit'>>
<p>
Apparently, <<they $g.head>> offered your company a really good deal for a slave.
<<Yourrep $g.whoreblowjob>> apparently did such a wonderful job with <<their $g.whoreblowjob>>
"interview", which impressed <<them $g.head>> greatly.
</p>
<<elseif $gOutcome == 'success'>>
<p>
<<They $g.head>> bargained with your slavers, and it eventually reached an
adequate deal for an opportunity to sell a slave.
Throughout the bargaining process, the noises of slurping and sucking never stopped,
but your slavers did their best to put it at the back of their minds.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<They $g.head>> dealt a hard bargain with your slavers, resulting
in a sub-par deal for you.
Still, it is in your best interest for your company to fulfill the deal, for
otherwise you would need to pay for wasting <<their $g.head>> time.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Throughout the negotiation, the sucking and slurping noises were accompanied by the
occasional zapping noises and a displeased grunt, but your slavers kept their mouths
shut.
The supervisor dealt a really hard bargain with your slavers,
resulting in a terrible par deal for your company.
Still, it is in your best interest for your company to fulfill the deal, for
otherwise you would need to pay for wasting <<their $g.head>> time.
</p>
<</if>>
<p>
Once the negotiations were over and your slavers were escorted back to the exit, they regrouped with
<<rep $g.whoreblowjob>>, who looked a little worse for the wear.
<<They $g.whoreblowjob>> refused to talk about the interview at all.
<<if $gOutcome == 'disaster'>>
Still, based on the new slight burn marks on <<them $g.whoreblowjob>>, your other
slavers did not have to think hard to guess what actually had happened.
<<elseif $g.whoreblowjob.isHasTrait('per_submissive')>>
Judging from the occasional blush and knowing how submissive <<they $g.whoreblowjob>> usually
whoreblowjob|is, however, there was little room for doubt as to what might have happened under
the desk...
<<elseif $g.whoreblowjob.isHasTrait('per_dominant')>>
If anything, <<they $g.whoreblowjob>> looked a little down in the coming days,
as if <<their $g.whoreblowjob>> dominant nature had been contested somewhere within the office.
<<run setup.qc.TraumatizeRandom('whoreblowjob', 2).apply($gQuest)>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'pet_contest', /* key */
'Pet Contest', /* Title */
'darko', /* author */
['city', 'item', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.uncommon],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_pet_basic]),
], /* prerequisites to generate */
)>><p>
The <<rep $company.humankingdom>> has forbidden the atrocious act of slavery in any form since over ten years ago.
But before that, slaves were everywhere in the kingdom. Back then, having a humanlike pet
was considered one of the many signs of nobility and luxury.
Once the slave ban were passed, humanlike pets were immediately outlawed, but that does
not mean that these pets are completely gone.
Some citizens still keep humanlike pet in secret, and underground pet contests are still often being held.
</p>
<p>
As a proud owner of a humanlike pet yourself, 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 a "bone" down
their throat while wagging their tail enthusiastically.
The grand prize is a tantalizing golden pet gear.
But competition is sure to be fierce, so make sure to bring your best pet for the show!
</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.tough_nimble)>><<They $g.pet>> pet|was even flexible enough
that at one point managed to choke on its own bone.<</if>>
The judges were completely impressed by your pet and at the end of the
contest, <<yourrep $g.pet>> pet|was selected
as the winner of the competition.
Your slavers proudly brought their pet on all fours to sit
on the podium, while <<yourrep $g.head>> <<uadv $g.head>>
collected 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 later made available for public use for
an hour, before they are returned to their respective owners.
</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 was 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,
and they generously tipped<<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>>.
</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 was obvious to both your slavers and the judges.
This was unacceptable, and your slavers were 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 that wore a chastity belt brazenly
assaulted your pet without warning, leaving your pet injured and shaken from the experience.
The pet orc's owner was nowhere to be seen -- perhaps it was a stray pet?
</p>/* PROOFREAD COMPLETE */
<<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.race_human,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_elf,
setup.trait.race_wolfkin,
setup.trait.race_catkin,
setup.trait.race_greenskin,
],
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', 30),
],
],
[
'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, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_city>> is the capital city of the <<rep $company.humankingdom>>.
The city is burstling with activities, ranging from standard trading,
operas, and whorehouses.
Rare and exotic goods from outside are always in high demand within the walls of the city.
</p>
<p>
If you are not averse to honest trading, your company can actually do honest work here,
perhaps a welcome break from all the degeneracy and evil you usually partake
in. 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 safely get inside the walls of the city.
</p><p>
<<set _con = setup.selectUnit([$g.trader1, $g.trader2, $g.negotiator], {trait: 'skill_connected'})>>
<<set _gre = setup.selectUnit([$g.trader1, $g.trader2, $g.negotiator], {trait: 'per_gregarious'})>>
<<if _con>>
Using <<their _con>> vast connections, <<rep _con>> "convinced" the guards that
<<elseif _gre>>
Using <<their _gre>> silver tongue, <<rep _gre>> convinced the guards that
<<else>>
<<Rep $g.negotiator>> had no issue at all and <<uadv $g.negotiator>>
convinced the guards that
<</if>>
<<rep $gTeam>> were honest traders, and even managed to convince
the guards to let them in without the standard bribe.
This allowed 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>>
negotiator|was able to
<<uadv $g.negotiator>>
convince the guards to let
<<rep $gTeam>> in.
Still, the bribe was expensive, and your slavers only manage to
get a standard amount of profit from the trade.
</p><p>
<<Rep $g.negotiator>>
negotiator|was able to
<<uadv $g.negotiator>>
convince the guards to let
<<rep $gTeam>> in, but only after paying a ridiculous bribe.
As a result, the team was 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>> negotiator|was in the middle of negotiating for an entry,
<<rep $g.trader1>> made an unfortunate joke that ousted them as members of
a slaver company. The team had to fight their way out from the guards
to return back into your fort.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'whore_of_ministration', /* key */
'Whore of Ministration', /* Title */
'darko', /* author */
['city', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'healer1': setup.qu.healer,
'healer2': setup.qu.healer,
'guard': setup.qu.guard,
},
{ /* actors */
'healslut': 'quest_humankingdom_all_healslut',
},
[ /* costs */
],
'QuestWhoreOfMinistration', /* passage description */
setup.qdiff.harder34, /* difficulty */
[ /* outcomes */
[
'QuestWhoreOfMinistrationCrit',
[
setup.qc.Slave(
'healslut',
'a|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(),
],
],
[
'QuestWhoreOfMinistrationCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestWhoreOfMinistrationFailure',
[
],
],
[
'QuestWhoreOfMinistrationDisaster',
[
setup.qc.MoneyNormal(-1),
setup.qc.Injury('guard', 2),
],
],
],
[[setup.questpool.city, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
There are various clinics spreadout throughout the <<lore region_city>>.
These clinics are effectively the primary healthcare services
in the city.
There, healers work tirelessly to aid the citizens of the city with whatever
that ails them.
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 in 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.
</p><<if $g.healslut.isFemale()>>
<<questimage 'whore_of_ministration_female.jpg'>>
<</if>>
<p>
Your slavers have arrived at the clinic. At a first glance, it appeared to be
an ordinary clinic like any other, if not somewhat overcrowded by patients.
But once inside, they discovered several private "restoration rooms" reserved
for the biggest donators for the clinic.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers competence meant that they were able to attend to their duties
relatively easily, and had a lot of spare time.
In their spare time, they made it their mission to
observe what happened behind these rooms.
Until one day, the opportunity presented itself, as during one night they heard strange
noises coming from the main clinic building.
Through the window, they observed
one of the more recognizable healer in the clinic 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 was famous for the positive feedbacks
<<their $g.healslut>> patients always gave after each treatment.
</p>
<p>
Armed with this information, your slavers attempted
<<uadv $g.guard>>
to blackmail the heal slut
with this information, only for <<them $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 the healer's neck, a truly natural submissive
healslut who will do anything to make <<their $g.healslut>> patients feel better.
</p>
<<else>>
<p>
But there were just too many patients, and your slavers got their <<uhands $g.guard>> full
with their duties.
They had no choice but to keep ignoring the strange
moaning and sloshing sounds they kept hearing every night.
It's probably nothing but animal noises, but they were unable to confirm the truth.
</p>
<p>
At the end of the week, your slavers were completely exhausted.
<<set _kind = setup.selectUnit([$g.healer1, $g.healer2], {trait: 'per_kind'})>>
<<if _kind>>
However, <<yourrep _kind>> <<if _kind.isYou()>>are<<else>>is<</if>> kind, and having spent a week doing nothing
but healing brought much joy to <<theslaver $g.healer1>>.
<<run setup.qc.BoonizeRandom('healer1', 2).apply(setup.costUnitHelper(_kind))>>
<</if>>
Your slavers <<uadv $g.guard>> took the payment and went home.
</p>
<</if>><p>
Unfortunately, <<yourrep $g.healer1>> and <<utheirrel $g.healer1 $g.healer2>> <<rep $g.healer2>> were so
incompetent at their jobs that the head healer was
furious with their incompetence and kicked them out of the clinic.
No money were paid to your slavers.
</p><p>
Unfortunately, one of your slavers accidentally injured an important client
during a healing procedure, which apparently enraged their closest relative.
<<Yourrep $g.guard>> had to defend your slavers from hired thugs, and meanwhile
your slavers were charged some money for the damage.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'whore_square', /* key */
'The Whoring Square', /* Title */
'darko', /* author */
['city', 'money', 'trait'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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),
],
],
[
'QuestWhoreSquareCrit',
[
setup.qc.Trait('slave', setup.trait.training_obedience_basic),
setup.qc.MoneyUnitValue('slave', 0.3, 3000),
],
],
[
'QuestWhoreSquareCrit',
[
setup.qc.MoneyUnitValue('slave', 0.1, 2000),
],
],
[
'QuestWhoreSquareDisaster',
[
setup.qc.MoneyUnitValue('slave', 0.05, 2000),
setup.qc.Injury('slave', 5),
],
],
],
[[setup.questpool.city, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.HasSlave(),
], /* prerequisites to generate */
)>><p>
While slavery has been outlawed in the <<rep $company.humankingdom>>,
it is still very much alive in its undercity.
A particular famous place within the undercity is the establishment known as The Whoring Square.
While standard undercity brothels offer slaves who are permanently assigned 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 usually give generously to the slaves,
which almost always covers the booth's renting 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, but of
course there is a limit for such a thing.
</p><<if $g.slave.isMale()>>
<<questimage 'whore_square_male.jpg'>>
<<else>>
<<questimage 'whore_square_female.jpg'>>
<</if>>
<p>
Your slaver's booth was located in the corner of the place.
The booth itself was simple, just four set of manacles to chain
each of your slave's limbs to the ground.
There were multiple possible chains to choose from, which can be adjusted
based on the preferred position of the slave.
</p>
<p>
Having setup the slave and just waiting for customers,
your slavers couldn't help but look around the fine establishment.
Various other tenants were also 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.
<<set _lust = setup.selectUnit([$g.slavetrader, $g.guard1, $g.guard2], {trait: 'per_lustful'})>>
<<if $g.slavetrader.isYou() or $g.guard1.isYou() or $g.guard2.isYou()>>
Since you personally have come to the establishment,
the neighboring tenant happen to recognize you, before
offering their slave for a trial use, if you choose to.
<<message "(Partake)">>
The tenant introduced the slave, the aptly named "Cumslut" whose real named had long been stamped away.
Apparently, cumslut there was a warrior of the northern region who had accumulated quite a bit of bounty before
being captured. But according to the tenant, these warriors are very easy to break -- in fact,
he claimed to have broken this slave within only eight hours of torture. The slave was brought here as punishment
for reacting to their original name -- the punishment being that the slave must service customers since cum
will be <<their $g.slave>> only nourishment during their stay here.
The slave was positioned in a kneeling position, with mouth ring-gagged to constantly let dick in.
<<if $unit.player.isHasDick()>>
You eagerly began to feed the willing slave, willing given that <<they $g.slave>> had no choice but to suck dick
if <<they $g.slave>> did not want to starve.
You inserted your <<udick $unit.player>> into the slave's mouth, before spraying cum straight down
<<their $g.slave>> throat.
<</if>>
As you use the slave, you wonder if such punishment is effective enough to use on your own slaves...
<</message>>
<<elseif _lust>>
<<Rep _lust>>, being the rather lustful <<urace _lust>>, helped <<themself _lust>> test some
of <<their _lust>> tenants' merchandise before the establishment opened.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
At the end of the week, <<yourrep $g.slave>> slave|was covered in semen and completely exhausted from
being used by much more customers than your slavers had expected.
The experience would have broken any normal slave, if they had not been broken already.
The customers left quite a large amount of tips too.
</p>
<<elseif $gOutcome == 'success'>>
<p>
By the end of the week, <<rep $g.slave>> slave|was covered in quite a bit of semen,
<<if $g.slave.isHasTrait(setup.trait.dick_tiny)>>both from the client's orgasms
and <<their $g.slave>> own when <<they $g.slave>> was milked during the downtime
<<else>>
from the clients' orgasms.
<</if>>
The experience would have broken any normal slave, if they had not broken already.
Your slavers managed to gather quite a few tips from the customers perusing the slave.
</p>
<<else>>
<p>
Unfortunately, your neighbor's eloquent story about their slave swayed
most of the customers in your slavers' area to their slave instead.
<<Yourrep $g.slave>> slave|was only able to attract a few customers,
including one particularly well-dressed client who had a specific fetish for
<<urace $g.slave>> slaves.
</p>
<</if>><p>
Unfortunately, a particularly rowdy customer accidentally used your slave
way too hard and left <<them $g.slave>> injured.
Your slavers had no choice but to unshackle <<theslaver $g.slave>> and brought
<<them $g.slave>> home to recover, before retrying again.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_community_service1',
"Beggar",
'subrace_humankingdom', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'brawler1': setup.qu.brawler,
'brawler2': setup.qu.brawler,
'seducer': setup.qu.seducer, },
{ /* actors */
'beggar': 'quest_community_service1',
'beggar2': 'quest_community_service1', },
[ /* costs */
],
'Quest_community_service',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_community_serviceCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Slave('beggar2', 'a|was a beggar in the <<lore region_city>> that you "hired" as a slave', undefined), ],
], [
'Quest_community_serviceCrit',
[
setup.qc.Slave('beggar', 'a|was a beggar in the <<lore region_city>> that you "hired" as a slave', undefined), ],
], [
'Quest_community_serviceFailure',
[
],
], [
'Quest_community_serviceDisaster',
[
setup.qc.MoneyNormal(-1), ],
], ],
[
[setup.questpool.city, setup.rarity.common],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.dungeons), ], /* restrictions to generate */
)>><p>
The humans living in the <<rep $company.humankingdom>> are the most
populous of all the races in <<lore continent_main>>. People
from all sort of occupations live in the <<lore region_city>>, from the noblest of
nobles to the lowliest of beggars.
</p>
<p>
Occasionally, your company receive slave orders for a regular <<lore race_humankingdom>>.
If you need such a slave, one of
the easiest way is by venturing into the <<lore region_city>>, and "hire" one
of the numerous beggars living off its streets.
Nobody will miss them, and maybe they could finally be the productive member of the
society they always wanted to be by becoming your slave.
</p><p>
It was relatively easy to pick a somewhat healthy beggar with the vast city.
<<if $g.seducer.isHasTrait('per_sly')>>
<<Reps $g.seducer>> golden tongue no doubt helped quite a bit in the seduction attempt.
<<elseif $g.seducer.isHasTrait('face_attractive')>>
<<Reps $g.seducer>> attractive face no doubt helped quite a bit in the seduction attempt.
<<elseif $g.seducer.isHasTrait('breast_large')>>
<<Reps $g.seducer>> bulging crotch no doubt helped quite a bit in the seduction attempt.
<<elseif $g.seducer.isHasTrait('dick_large')>>
<<Reps $g.seducer>> voluptuous boobs no doubt helped quite a bit in the seduction attempt.
<</if>>
With the promise of easy money, <<rep $g.seducer>> managed to <<uadv
$g.seducer>> brought
<<if $gOutcome == 'crit'>>
two beggars
<<else>>
a beggar
<</if>>
outside
the city, only for <<rep $g.brawler1>> and <<rep $g.brawler2>> to "rough up" before
making
<<if $gOutcome == 'crit'>>
them
<<else>>
<<them $g.beggar>>
<</if>>
join your company as slaves.
</p><p>
Unfortunately, <<yourrep $g.seducer>> seducer|was not charismatic enough to
attract even the beggars of the city to come with <<them $g.seducer>>.
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 _criteriacenter = new setup.UnitCriteria(
null, /* key */
'Center', /* name */
[
setup.trait.bg_mystic,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_stubborn,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
],
[
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_curious,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.magic_wind], true),
],
{
arcane: 3,
}
)>>
<<set _criteriab1 = new setup.UnitCriteria(
null, /* key */
'Battery', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
setup.qres.AnyTrait([setup.trait.magic_wind, setup.trait.magic_wind_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'growing_wind', /* key */
"Growing Wind", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'trait',
'city',
'danger',
'rare',
],
10, /* weeks */
200, /* expiration weeks */
{ /* roles */
'center': [ _criteriacenter, 3],
'b1': _criteriab1,
'b2': _criteriab1,
'b3': _criteriab1,
'b4': _criteriab1,
'b5': _criteriab1,
'b6': _criteriab1,
'b7': _criteriab1,
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-10000),
],
'Quest_growing_wind',
setup.qdiff.normal44, /* difficulty */
[ /* outcomes */
[
'Quest_growing_windCrit',
[
setup.qc.OneRandomSeed([
setup.qc.Trait('center', setup.trait.per_lunatic),
setup.qc.Trait('center', setup.trait.per_masochistic)
]),
setup.qc.TraitsReplace('center', [setup.trait.magic_wind_master]),
setup.qc.TraitRemove('b1', setup.trait.magic_wind),
setup.qc.TraitRemove('b1', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b2', setup.trait.magic_wind),
setup.qc.TraitRemove('b2', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b3', setup.trait.magic_wind),
setup.qc.TraitRemove('b3', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b4', setup.trait.magic_wind),
setup.qc.TraitRemove('b4', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b5', setup.trait.magic_wind),
setup.qc.TraitRemove('b5', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b6', setup.trait.magic_wind),
setup.qc.TraitRemove('b6', setup.trait.magic_wind_master),
setup.qc.TraitRemove('b7', setup.trait.magic_wind),
setup.qc.TraitRemove('b7', setup.trait.magic_wind_master),
setup.qc.SetCooldownQuest(null, 200),
setup.qc.Injury('center', 5),
],
],
[
'Quest_growing_windCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.Injury('center', 5),
],
],
[
'Quest_growing_windCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.Injury('center', 20),
],
],
[
'Quest_growing_windCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.Injury('center', 40),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.magic_wind], true)
], 1),
],
[ /* expiration outcomes */
],
)>><p>
Wind magic is perhaps the most common magic to be found within the <<rep $company.humankingdom>>, for the sole reason that the humans living there are attuned to the element. Wind magic is very versatile — basic enchantment can simply be used to make one move faster, or to rapidly clean a building or two. Advanced wind magic, on the other hand, is something else entirely.
</p>
<p>
Master of wind magic are akin to living magical batteries, storing so much power within them that they can let them out as electric sparks. This can be used to various effects, be it as an effective combat spell, or more creatively as a tool for breaking <<men $unit.player>>. But these masters are very far and in between, and people gifted with this magic remains extra-ordinarily sought after.
</p>
<p>
While some people are born naturally with the talent, it is possible to bestow this power upon another, upgrading their mastery to mastery, but at a very steep cost. Seven other practitioner of <<rep setup.trait.magic_wind>> must sacrifice their magic in order to pool their magical reserve together and gift them to the prospective master. There are already very few of these practitioners, and understandably there are even fewer of them that are willing to part with their mastery to impart upon another.
</p>
<p>
A slaver under your employ has been known as a practitioner of <<rep setup.trait.magic_wind>> for some time now. As the leader of a slaving company, you are in a unique position where you can more easily find the required "volunteers" to donate the magic to your slaver. If you have seven slaves gifted with <<rep setup.trait.magic_wind>>, you could try to attempt the ritual, although rumors said that the ritual often <<dangertext "comes with side effects...">>
</p><p>
One by one, the magical essence were transferred from the struggling and unwilling slaves over to <<yourrep $g.center>>. Little by little, the pool of energy started to build within <<therace $g.center>>. But of course, it was without side effects. The first transfer went harmlessly, but the second was incredibly difficult and took almost a week to do. The third was incredibly painful, and your slaver refused to talk about the fourth one.
The fifth one accidentally rewired the slaver's brain,
<<if $gQuest.getSeed() % 2 == 0>>
affecting their sanity permanently.
<<elseif $gQuest.getSeed() % 2 == 1>>
rewiring pain to pleasure, and the slaver was transformed into a masochistic <<man $g.center>>.
<</if>>
The sixth
<<if $gOutcome == 'crit'>>
slightly injured
<<elseif $gOutcome == 'success'>>
injured
<<elseif $gOutcome == 'failure'>>
heavily injured
<<elseif $gOutcome == 'disaster'>>
gravely injured
<</if>>
the slaver.
It took ten entire weeks to finish all the transfers, and while <<yourrep $g.center>> now have a newfound mastery of <<rep setup.trait.magic_wind_master>>, was it worth the many drained slaves <<they $g.center>> had left behind?
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'inheritance_lottery', /* key */
"Inheritance Lottery", /* Title */
"darko", /* Author */
[ 'city', 'money', 'legendary',
], /* 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_lotteryCrit',
[
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, setup.rarity.legendary],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Cooldown(20), ],
)>><p>
This quest is <<successtext 'incredibly RARE'>>.
</p>
<p>
By pure chance, your exact name happens to be the same name as an inheritor
of a plot of land in the <<lore region_city>>. Apparently, a letter was found
addressed to you that the <<lore region_city>> would appropriate the
inheritance unless the inheritor drop by and sort the bureaucracy mess up.
</p>
<p>
Given your occupation, it would be unwise 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 red tape mess and sell
the land for a huge sum of money, before it is appropriated by the city.
</p><p>
<<Rep $g.bureaucrat1>> <<uadv $g.bureaucrat1>> shifted through the
bureaucratic mess and your slaving team were able to collect the land on your behalf.
<<set _stu = setup.selectUnit([$g.bureaucrat1, $g.bureaucrat2], {trait: 'per_studious'})>>
<<if _stu>>
Despite the boring and confusing job, <<rep _stu>> diligently shifted through the numerous
paperwokr.
<</if>>
<<set _act = setup.selectUnit([$g.bureaucrat1, $g.bureaucrat2], {trait: 'per_active'})>>
<<if _act>>
<<Reps _act>> active nature was keeping <<theslaver _act>> uneasy throughout the bureaucratic job.
<</if>>
Eventually, <<they $g.bureaucrat1>> found a prospective buyer, who
<<if $gOutcome == 'crit'>>
splurged a lot of money
for the plot of land.
Your slavers returned home carrying a crate bursting full with gold coins.
<<else>>
bought the plot of land
at a reasonable price.
Your slavers returned home carrying a crate nearly full to the brim with gold coins.
<</if>>
</p><p>
<<Rep $g.bureaucrat1>> <<uadv $g.bureaucrat1>> shifted through the
bureaucratic mess and your slaving team managed to collect the land on your behalf
in the nick of time.
There were unfortunately no time remaining to search for prospective buyer,
and they ended up selling the land at a subpar 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 in the end, the net
profit came up somewhat smaller than they were expecting.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Defiant Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.HasTag('in_training_defiant_slave'),
],
{
}
)>>
<<set _res = [
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
setup.qc.TraitRemove('slave', setup.trait.will_defiant),
setup.qc.Mindbreak('slave'),
setup.qc.AddHistory('slave', "a|was broken from a|their defiance by being used as a public sex toy in the Undercity of Lucgate for months"),
setup.qc.TraitIncreaseExisting('slave', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('slave', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('slave', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('slave', setup.trait.vagina_gape),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
]>>
<<run new setup.QuestTemplate(
'public_penance', /* key */
"Public Penance", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'city',
],
30, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'handler': [ setup.qu.slavehandler, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_public_penance',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_public_penanceCrit',
_res,
],
[
'Quest_public_penanceCrit',
[
setup.qc.Outcomes('crit'),
]
],
[
'Quest_public_penanceCrit',
[
setup.qc.Outcomes('crit'),
]
],
[
'Quest_public_penanceCrit',
[
setup.qc.Outcomes('crit'),
]
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _u>> has continued to be a stubborn little slut. If all other
methods have failed to break <<therace _u>>, there is always the option of
simply breaking <<their _u>> mind. But normal methods won't work on <<them
_u>>, and even more extreme measures have to be taken to do so.
</p>
<p>
Your slavers have managed to secure a deal with one of the more prominent
leaders of the undercity of Lucgate. These sadistic leaders enjoy slowly breaking
particularly defiant slave, and have offered to lend you a small spot in the
location, where the slave can be locked inside the stocks there.
The slave will then be made available for public use —
the sadistic public members of the undercity that is. These are
people who revel in the suffering of others, and will no doubt turn
every single passing day into living hell for the slave. Ordinary slaves
would only take one or two weeks to be completely broken this way, but this
particularly defiant slave might take longer — a few months, you would guess.
</p>
<p>
You can send the slave together with an overseer if you wish to break <<yourrep
_u>> this way. The overseer would have to unlock the slave each night, and
clean the no-doubt well-used slave before locking the slave back for the next
day. While the slave will surely be broken this way, <<their _u>> mind will
also guaranteed to be completely shattered and broken, becoming useful for
nothing else other than a living sex toy. But sometimes extreme measures need
to be taken for extreme cases...
</p>
<</if>><p>
With
<<if $g.handler.isHasTrait('per_kind')>>
a little reluctance,
<<else>>
a cruel grin,
<</if>>
<<rep $g.handler>> introduced to <<rep $g.slave>> what would be <<their
$g.slave>> home for the next few months — a non-descript stock placed
securely in the center of the undercity. At first, <<rep $g.slave>> remained
defiant, thinking that being locked in the stocks could not be that bad. But
once <<they $g.slave>> got familiar with the residents, <<they $g.slave>>
could have not been so wrong...
</p>
<p>
The undercity hosts the worst of the LucGate residents, including a
particularly large number of sadists. None of them could resist the allure of having
a helpless and defiant slave being locked in the center of the undercity. In fact, the slave's
struggles as <<they $g.slave>> slave|was being continuously raped each day only made
the assaulters more aroused, and soon all residents from all corners of the
undercity came to the square to try out the slave's orifices.
<<if !$settings.bannedtags.watersport>>
Not a single hole of <<rep $g.slave>> slave|was left unused -- and <<they
$g.slave>> experienced
many occassion of simultaneously being raped from the ass while gulping
down piss down <<their $g.slave>> throat.
<</if>>
<<if $g.handler.isHasTrait('per_cruel')>>
Being a sadist <<themself $g.handler>>, <<rep $g.handler>> helped out the
breaking process too, and <<they $g.handler>> together with your slave often
enjoy some "private time" after the day was over.
<<else>>
<<Yourrep $g.handler>> handler|was not a sadist however, and <<they
$g.handler>> even sometimes felt kinda bad for the slave.
Still, <<they $g.handler>> <<uadv $g.handler>>
unlocked the binding each night to clean the filth out of the always
well-abused slave, before locking the slave back for the night.
<</if>>
</p>
<p>
Within weeks, <<yourrep $g.handler>> could easily notice a drastic change in the
slave — <<their $g.slave>> mind getting worn down so quickly until it finally
snapped.
By the end of the ordeal, the slave was pretty much broken in mind and spirit. While
<<their $g.slave>> body remained the same — there was absolutely no trace of
<<their $g.slave>> former fighting spirit. With the very long mission finally
over, <<rep $g.handler>> brought the new fuck toy back to the fort, to be
enjoyed by the rest of <<their $g.handler>> slaver mates.
</p>/* PROOFREAD COMPLETE */
<<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', 'ire', 'prep', 'rare', ], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'knight': _knight,
'squire1': setup.qu.squire,
'squire2': setup.qu.squire,
},
{ /* actors */
'innocent': 'quest_humankingdom_nobledaughter',
'ravaged': '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', 4),
setup.qc.Ire('royal', 1),
],
],
[
'QuestDamselInDistressKidnapCrit',
[
setup.qc.Slave('ravaged'),
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
setup.qc.MoneySmall(),
setup.qc.Ire('humankingdom', 4),
setup.qc.Ire('royal', 1),
],
],
[
'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 */
)>><<include 'OpportunityDamselInDistress'>>
<p>
For better or worse, you have decided to kidnap the noble daughter.
</p><<set _kidnap = ($gQuest.getTemplate().key == 'quest_knight_in_training_complete')>>
<p>
According to the intel your slavers gathered, the daughter was being kidnapped
by a famous bandit king, who leads another slaving company such as yours.
As a fellow raider, locating the daughter were not too much of an issue.
The real issue was getting to the daughter
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 here.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.knight>> and <<their $g.knight>> "squires" <<uadv $g.knight>>
scoured the taverns efficiently, searching for defensive weakness of the bandit's fort.
Of course, they do so in the facade of saving the daughter.
A few bribe here and there, and after a few
<<if $g.knight.isHasTrait('face_attractive')>>
"knightly-good-looks"
<<elseif $g.knight.isHasTrait('skill_intimidating')>>
"knightly intimidation"
<<elseif $g.knight.isHasTrait('face_scary')>>
"knightly death glare"
<<else>>
"knightly charm"
<</if>>
was <<uadv $g.knight>> employed
by <<yourrep $g.knight>>,
the tavern wenches easily started talking about a possible escape tunnel from the tunnel,
leading into the river next to it.
Armed with this knowledge, your slavers embarked into the fort.
There, they sneaked through the escape tunnel while managing to avoid the unwanted attention of
any of the resident slavers.
They managed to find 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 <<rep $g.knight>>,
it was not an issue at all for the rest of the experienced slavers.
They lockpicked the cage and smuggled
the daughter out of the
<<if _kidnap>>
fort, only for her to be locked away again, this time in a more secure cage
and by far more experienced group of slavers.
<<else>>
fort.
<</if>>
</p>
<<if !_kidnap>>
<p>
Back in the <<lore region_city>>, your slavers were hailed as heroes for
bringing back the daughter with her innocence still completely intact.
The head of her family ensured that <<yourrep $g.knight>>
received the recognition that <<they $g.knight>> deserve.
</p>
<</if>>
<<else>>
<<if $g.ravaged.isMale()>>
<<else>>
<<questimage 'damsel_in_distress_female.jpg'>>
<</if>>
<p>
<<Rep $g.knight>> and <<their $g.knight>> squire <<uadv $g.knight>> decided
that the fastest approach was to strike headlong into the enemy fort.
And they did just that -- the enemies were no match for <<reps $g.knight>> prowess
in combat and <<they $g.knight>> felled them all.
The leader of the bandit camp, however, after seeing that <<their $g.knight>> slavers had fallen,
went to the hostage room to fume <<their $g.knight>> stress over into the noble daughter,
before escaping immediately after.
By the time your slavers managed to locate the noble daughter,
she was already broken from the abuse, sporting a blank look after being so
violently used by the leader of the bandits.
Although she was still alive, her once attractive face was no longer there.
Still, she was alive, and that was what mattered most at the time.
Your slavers unlocked her cage and brought her
<<if _kidnap>>
to her new home, in the dungeons of your fort.
She can recover there before resuming her trainings, this time in the <<uhands $unit.player>> of a
far more experienced group of slavers.
<<else>>
home.
They entertained a little about the idea of using such a high pedigree slave, but your
knight-in-training felt that it was not a very knightly act for them.
<</if>>
</p>
<<if !_kidnap>>
<p>
Back in the <<lore region_city>>,
the head of the noble daughter's family urged your slavers to come in quietly.
He apologized profusely before saying that he was unable to endorse <<reps $g.knight>>
promotion into a knight, lest the daughter's fate be known to public eyes.
He pleaded with your slavers and gave them money in return,
as well as promise of good words, including with their few connections within the elusive
<<rep $company.royal>>.
</p>
<</if>>
<</if>>
<<if _kidnap>>
<p>
Somehow, the <<lore region_city>> heard of your wrongdoings, and any pretense of
<<reps $g.knight>> knightly adventure was surely cut short.
Even the <<rep $company.royal>> caught wind of it, which is most certainly not a good sign to come...
</p>
<</if>><<set _kidnap = ($gQuest.getTemplate().key == 'quest_knight_in_training_complete')>>
<p>
<<Rep $g.knight>> and <<their $g.knight>> "squires" decided that the fastest approach
must be to strike headlong into the enemy fort.
But little that they knew that the fort's surroundings was littered with deadly traps.
Your slavers fell (literally) victim into those traps and had no choice but to
return back injured.
<<if _kidnap>>
If there was any good that came out of this, its the fact that the
<<lore region_city>> never knew of your slavers' true intentions,
and <<yourrep $g.knight>> can keep <<their $g.knight>> title of knight-in-training for now.
<</if>>
</p><p>
<<Rep $g.knight>> and <<their $g.knight>> "squires" scoured the taverns
efficiently, looking for a defensive weakness in the bandit's fort.
But all the information they gathered about how mighty the fortress was
shrunk <<reps $g.knight>> resolve.
In the end, <<yourrep $g.knight>> decided to cancel the rescue attempt, which must
looked absolutely poor on <<their $g.knight>> knightly resume.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'quest_knight_in_training_complete', /* key */
'Knight of Tor', /* name */
'Has been knighted by the Kingdom of Tor', /* name */
'a|have 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', 'rare', ], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'knight': _knight,
'squire1': setup.qu.squire,
'squire2': setup.qu.squire,
},
{ /* actors */
'ravaged': 'quest_humankingdom_nobledaughter_ravaged',
},
[ /* costs */
],
'QuestDamselInDistressSave', /* passage description */
setup.qdiff.extreme40, /* difficulty */
[ /* outcomes */
[
'QuestDamselInDistressKidnapCrit',
[
setup.qc.RemoveTitle('knight', 'quest_knight_in_training'),
setup.qc.AddTitle('knight', 'quest_knight_in_training_complete'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 100),
setup.qc.Favor('royal', 100),
],
],
[
'QuestDamselInDistressKidnapCrit',
[
setup.qc.SlaveMarker('ravaged'),
setup.qc.MoneyNormal(),
setup.qc.Favor('humankingdom', 50),
setup.qc.Favor('royal', 50),
],
],
[
'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 */
)>><<include 'OpportunityDamselInDistress'>>
<p>
For better or worse, you have decided to save the noble daughter.
</p>/* PROOFREAD COMPLETE */
<<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 */
'a|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 the past', /* name */
'a|was in service to a knight at some point in a|their life', /* unit description */
1000, /* slave value */
{},
)>>
<<set _knight = new setup.UnitCriteria(
null, /* key */
'Knight', /* title */
[
setup.trait.race_human,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_ambidextrous,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* critical traits */
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_sly,
setup.trait.per_independent,
setup.trait.per_curious,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.skill_flight,
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.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[
setup.qres.Job(setup.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', 'rare', ], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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('royal', 100),
],
],
[
'QuestToBeAKnightCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestToBeAKnightCrit',
[
setup.qc.Injury('knight', 2),
],
],
[
'QuestToBeAKnightCrit',
[
setup.qc.Injury('knight', 4),
],
],
],
[[setup.questpool.city, setup.rarity.epic],], /* 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 crown. Unlike most other kingdoms, these knights usually live their own lives
except on some occasions where their services are called upon.
While these knights are usually chosen from soldiers with a long service history,
during times of great need, the kingdom may occasionally call upon the populace to elect
new knights.
</p>
<p>
One such occasion is currently happening, and the city 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 spent a full week training for the competition --
<<if $g.knight.isHasAnyTraitExact(['bg_knight', 'bg_mercenary'])>>
Fortunately, <<rep $g.knight>> had some experience riding a horse from <<their $g.knight>>
past days as a
<<if $g.knight.isHasTrait('bg_knight')>>
knight.
<<else>>
mercenary.
<</if>>
<<else>>
after all, <<rep $g.knight>> knight|was not really used to riding a horse.
<</if>>
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 bout.
</p>
<p>
<<Rep $g.knight>> <<uadv $g.knight>>
readied <<their $g.knight>> horse and the lance lent by the competition,
while <<their $g.knight>> foe stood on the opposite side of the field.
Both of them waited for the signal before charging in, and the result went out in a flash of
blood and scream.
<<if $gOutcome == 'crit'>>
<<Rep $g.knight>> knight|was able to knock out the foe in one clean hit, earning
<<them $g.knight>> the adorations of the viewers, as well as some of the members
of the <<rep $company.royal>> who has come to visit for entertainment.
The rest of the competitors proved to be simple pushovers for <<rep $g.knight>>, and
<<therace $g.knight>> knight|was ultimately crowned champion.
<<elseif $gOutcome == 'success'>>
But it turned out that both <<rep $g.knight>> and <<their $g.knight>> foe were
knocked out, and the match ended in a draw.
Unfortunately, the tournament ruled that in such case, the higher seed shall be
declared the winner, which ended <<reps $g.knight>> hopeful knight career abruptly early.
<<elseif $gOutcome == 'failure'>>
Once the dust settled, the only one that remained seated on their horse was the opponent.
<<Yourrep $g.knight>> knight|was knocked out cleanly from <<their $g.knight>> horse.
This unfortunately ended <<reps $g.knight>> hopeful knight career abruptly early,
not even reaching the stage where the wenches would come in!
<<Rep $g.knight>> sustained minor injuries as a result, which would need some time to heal.
<<else>>
A loud crack followed by a thump and the unconscious body of <<rep
$g.knight>> marked <<their $g.knight>> opponent as the clear victor of the round.
<<Rep $g.squire1>> and <<rep $g.squire2>> hurriedly attended to <<reps $g.knight>>
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.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Yourrep $g.knight>> accepted <<their $g.knight>> prize, which turned out not to be a full knight title,
but rather, the honor of becoming a knight-in-training.
Once <<they $g.knight>> knight|manage to prove <<themself $g.knight>>
shall the full title of a knight be granted.
</p>
<<elseif $gOutcome == 'success'>>
<p>
At the end of the joust, the honorable foe who ended up winning the competition
appeared before <<yourrep $g.knight>>, apologized for the dishonorable victory
and gave <<rep $g.knight>> some money for the trouble.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'light_in_the_darkness__enslave', /* key */
"Light in Darkness: Enslave", /* Title */
"darko", /* Author */
[ 'city', 'unit', 'ire',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'trainer': setup.qu.slavetrainer, },
{ /* actors */
'light': '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', "a|was a captured traveler from the south who is gifted in healing", false),
],
], [
'Quest_light_in_the_darkness__enslaveCrit',
[
setup.qc.Ire('outlaws', 5),
setup.qc.Outcomes('crit'),
],
], [
'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 */
)>><<include 'Opportunity_light_in_darkness'>>
<p>
You have decided to enslave <<them $g.light>>.
</p><<set _recruit = ($gQuest.getTemplate().key == 'light_in_the_darkness__recruit')>>
<p>
<<Yourrep $g.infiltrator1>> and <<utheirrel $g.infiltrator1 $g.infiltrator2>> <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully.
<<set _nimble = setup.selectUnit([$g.infiltrator1, $g.infiltrator2], {trait: 'tough_nimble'})>>
<<set _dark = setup.selectUnit([$g.infiltrator1, $g.infiltrator2], {trait: 'magic_dark'})>>
<<if _dark>>
The dark shroud spell cast by <<rep _dark>> certainly helped.
<<elseif _nimble>>
<<Reps _nimble>> nimble feet certainly helped.
<</if>>
Inside, multiple cages
containing various human cargos all in full bondage were stacked on top of each
other, and the place was eerily quiet except for several moaning sounds. After
scouring through the naked bodies plugged in all their orifices, they finally found
what they were looking for: an exotic-looking slave who must be the slave they
were looking for.
<<if $gOutcome == 'crit'>>
With their prize in tow, your slavers made for the exit before any of the
guards came in to check.
<<else>>
But they managed to attract the attention of a guard, and your slavers had to
hastily rush to the exit with the slave in tow.
But the outlaws running the auction know of your company's treachery,
and now views your company with some disdain.
<</if>>
</p>
<<if _recruit>>
<p>
<<Yourrep $g.recruiter>> managed to succesfully convince the newly rescued
<<rep $g.light>> to join your company as a slaver.
<<Therace $g.light>> light|is now awaiting your final decision in the prospects hall.
</p>
<<else>>
<p>
Later, you have heard about the auction being cancelled due to "security
reasons". Satisfied, you pet the head of your new slave <<rep $g.light>> who
glared at you in defiance, before
planning <<their $g.light>> future as a slave.
</p>
<</if>><p>
<<Yourrep $g.infiltrator1>> and <<utheirrel $g.infiltrator1 $g.infiltrator2>> <<rep $g.infiltrator2>>
<<uadv $g.infiltrator1>>
infiltrated the warehouse of the auction lot successfully. Multiple cages
containing various human cargos all in full bondage were stacked on top of each
other, and the place was eerily quiet except for several moaning sounds.
But even after scouring through naked bodies stored in various ways, they
were not able to find any slave matching the description you were looking for.
Instead, they managed to attract the attention of a guard,
and your slavers had to hastily make for the exit with nothing to steal.
</p>
<p>
Later, you heard about the slave ended up being purchased at an exorbitant prize
in the auction, to serve as a trophy for some very rich noble of the east.
</p><p>
Unfortunately,
<<rep $g.infiltrator1>> and <<rep $g.infiltrator2>> were captured during
their infiltration mission in the warehouse. Ironically, they ended up being one of
the merchandise for sale in the auction and you now have the option to repurchase them if you wish
to get them back.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_light_in_the_darkness__recruit1',
"Light",
'subrace_humansea', /* pools */
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', 'ire',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'recruiter': setup.qu.recruiter, },
{ /* actors */
'light': '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', "a|was a captured traveler from the south who is gifted in healing", false),
],
],
[
'Quest_light_in_the_darkness__recruitCrit',
[
setup.qc.Ire('outlaws', 5),
setup.qc.Outcomes('crit'),
],
],
[
'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 */
)>><<include 'Opportunity_light_in_darkness'>>
<p>
You have decided to recruit <<them $g.light>>.
</p><<include 'Quest_light_in_the_darkness__enslaveCrit'>><<include 'Quest_light_in_the_darkness__enslaveFailure'>><<include 'Quest_light_in_the_darkness__enslaveDisaster'>>/* PROOFREAD COMPLETE */
<<set _desc = 'a|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.tough_nimble,
setup.trait.per_sly,
setup.trait.per_loner,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.subrace_humankingdom,
setup.trait.bg_slave,
setup.trait.per_direct,
setup.trait.per_gregarious,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
'cow': 'quest_humankingdom_cow_female',
'bigcow': 'quest_humankingdom_cow_female_titanic',
},
[ /* costs */
],
'QuestMilkFactoryKidnapFemale', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryKidnapFemaleCrit',
[
setup.qc.Slave('bigcow', _desc),
],
],
[
'QuestMilkFactoryKidnapFemaleCrit',
[
setup.qc.Slave('cow', _desc),
],
],
[
'QuestMilkFactoryKidnapFemaleFailure',
[
],
],
[
'QuestMilkFactoryKidnapFemaleDisaster',
[
setup.qc.Injury('seducer', 4),
setup.qc.TraitReplaceExisting('seducer', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('seducer', setup.trait.vagina_gape),
],
],
],
[], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to steal some of the female sla-, err, "employees".
You can follow-up on this idea by sending a team of slavers there.
</p><<set _male = ($gQuest.getTemplate().key == 'milk_factory_kidnap_male')>>
<<set _raid = ($gQuest.getTemplate().key == 'milk_factory_raid')>>
<<if $gOutcome == 'crit'>>
<<set _u = $g.bigcow>>
<<else>>
<<set _u = $g.cow>>
<</if>>
<<if _u.isMale()>>
<<questimage 'milk_factory_male.jpg'>>
<<else>>
<<questimage 'milk_factory_female.jpg'>>
<</if>>
<p>
Using <<their $g.seducer>> <<upraisenoun $g.seducer>>,
<<yourrep $g.seducer>> <<uadv $g.seducer>> distracted the guard.
Using the opening,
<<rep $g.infil1>> and <<utheirrel $g.infil1 $g.infil2>> <<rep $g.infil2>> sneaked into the factory, and found
their way inside.
Numerous rooms littered the hallways, and your slavers walked slowly across
the corridor.
The room they first entered contained samples of the factory's product:
a sealed bottle labeled simply with "milk".
It seems that the popular Fresh-Milk branded milk is produced here.
But the employees were still nowhere to be seen.
Remembering their goal, they chose the most suspicious-looking corridor to traverse.
</p>
<p>
At the end of the corridor,
they found rows and rows of what seemed to be humans, each seated on
a chair. Their nipples were all covered by what appeared to be suction pipe,
while their mouths were entirely filled with a large dildo-shaped pipe extending down
their throats.
The dicks of the male slaves were all covered in some kind of suction pump too.
As your slavers wathced in disbelief at the source of the "milk",
one of these pumps suddenly activated and they could see
white liquid being absorbed directly from the slave's pricks and breasts into the pipe.
</p>
<<if _raid>>
<p>
As their goal was to raid the place for as much valuable as possible,
your slavers started looking around for the most expensive item in the place.
<<if $gOutcome == 'crit'>>
There, they located a newly installed slave who still somehow maintain <<their $g.cow>> sanity.
Released from <<their $g.cow>> bondage, the slave coughed and gagged only for your slavers to regag <<them $g.cow>>
before smuggling <<them $g.cow>> out.
They sold the slave in the undercity before returning to your fort with a tidy amount of profit.
<<else>>
They settled with stealing as many of the industrial equipments as possible, which
should fetch a decent sum in the black market of the city.
<</if>>
</p>
<<else>>
<p>
Your slavers, remembering their original goal, scoured the hundres of slaves looking for any
particularly valuable-looking slave among the livestock.
<<if $gOutcome == 'crit'>>
<<set _u = $g.bigcow>>
<<if _male>>
They found a slave with dick and balls so gigantic it
could not be natural.
<<else>>
They found a slave with breasts so gigantic it could not be natural.
<</if>>
<<else>>
<<set _u = $g.cow>>
<<if _male>>
They found a slave with adequately large junk.
<<else>>
They found a slave with adequately large breasts.
<</if>>
<</if>>
After experimentally pressing random mechanical buttons,
they managed to release the slave from the contraption that were holding <<them _u>> there.
<<Their _u>> dildo were dislodged from <<their _u>> throat
for the first time in what must have been years, while
from beneath <<them _u>>
<<if _u.isHasVagina()>>
two huge dildos were retracted down, leaving both <<their _u>> anus and vagina
<<else>>
a huge dildo the size of a horse's dick was retracted down, leaving <<their _u>> anus
<</if>>
gaping
and uncomfortably empty.
Your slavers then grabbed the collapsed slave and with some effort managed to smuggle
<<them _u>> out.
<<Rep _u>> eventually arrived at your fort,
remaining mindbroken but ready to be used by <<their _u>> new
owners.
</p>
<</if>><p>
Unfortunately, <<rep $g.seducer>> seducer|was 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 had 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 had a different idea -- after inviting <<rep $g.seducer>> inside,
the guard knocked <<them $g.seducer>> out, and install <<them $g.seducer>> into one
of the many milking contraptions in the factory.
Inside, to the complete surprise of both <<rep $g.infil1>> and <<rep $g.infil2>>, they found
<<yourrep $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>>.
After considering the danger of continuing, they decided to leave without doing anything else.
<<Rep $g.seducer>> will need some time to rest from such an ordeal to <<their $g.seducer>> now
gaped holes.
</p>/* PROOFREAD COMPLETE */
<<set _desc = 'a|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.tough_nimble,
setup.trait.per_sly,
setup.trait.per_loner,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.subrace_humankingdom,
setup.trait.bg_slave,
setup.trait.per_direct,
setup.trait.per_gregarious,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
'cow': 'quest_humankingdom_cow_male',
'bigcow': 'quest_humankingdom_cow_male_titanic',
},
[ /* costs */
],
'QuestMilkFactoryKidnapMale', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryKidnapMaleCrit',
[
setup.qc.Slave('bigcow', _desc),
],
],
[
'QuestMilkFactoryKidnapMaleCrit',
[
setup.qc.Slave('cow', _desc),
],
],
[
'QuestMilkFactoryKidnapMaleFailure',
[
],
],
[
'QuestMilkFactoryKidnapMaleDisaster',
[
setup.qc.Injury('seducer', 4),
setup.qc.TraitReplaceExisting('seducer', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('seducer', setup.trait.vagina_gape),
],
],
],
[], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<include 'OpportunityMilkFactory'>>
<p>
You have chosen to steal some of the female sla-, err, "employees".
You can follow-up on this idea by sending a team of slavers there.
</p><<include 'QuestMilkFactoryKidnapFemaleCrit'>><<include 'QuestMilkFactoryKidnapFemaleFailure'>><<include 'QuestMilkFactoryKidnapFemaleDisaster'>>/* PROOFREAD COMPLETE */
<<set _infiltrator = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* title */
[
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_sly,
setup.trait.per_loner,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* critical traits */
[
setup.trait.subrace_humankingdom,
setup.trait.bg_slave,
setup.trait.per_direct,
setup.trait.per_gregarious,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'infil1': _infiltrator,
'infil2': _infiltrator,
},
{ /* actors */
'cow': 'quest_humankingdom_cow_female',
'bigcow': 'quest_humankingdom_cow_female_titanic',
},
[ /* costs */
],
'QuestMilkFactoryRaid', /* passage description */
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'QuestMilkFactoryRaidCrit',
[
setup.qc.MoneyCrit(),
],
],
[
'QuestMilkFactoryRaidCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestMilkFactoryRaidFailure',
[
],
],
[
'QuestMilkFactoryRaidDisaster',
[
setup.qc.Injury('seducer', 4),
setup.qc.TraitReplaceExisting('seducer', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('seducer', setup.trait.vagina_gape),
setup.qc.SlaveMarker('cow'),
setup.qc.SlaveMarker('bigcow'),
],
],
],
[], /* 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><<include 'QuestMilkFactoryKidnapFemaleCrit'>><<include 'QuestMilkFactoryKidnapFemaleFailure'>><<include 'QuestMilkFactoryKidnapFemaleDisaster'>>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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 sell your sla-, err, "employees", to the factory.
</p><p>
After several days working <<their $g.informer>> way up the hierarchy of
criminals, <<yourrep $g.informer>> finally managed to arrange a meeting with one of the
factory's supervisors. The supervisor was 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 agreed to contract your company to add up to
eight new sla-, <<they $g.host>> meant employees, to the factory. For some
reason, though, the supervisor emphasized that the slaves
<<elseif $gOutcome == 'success'>>
a great deal. The factory agreed to give your company a contract where you
can supply them with at most four new sla, <<they $g.host>> meant employees,
yes, to the factory.
For some reason, though, the supervisor emphasized that
the slaves
<<else>>
a pathetic deal, with the supervisor only trusting your company enough to
arrange for one potential sla, <<they $g.host>> meant employee. For some
reason, though, the supervisor emphasized that the slave
<</if>>
must have an... "asset"... that is... not too small, so that they could
contribute productively to the factory.
<<Rep $g.trainer>> <<uadv $g.trainer>> swore the supervisor threw
<<if $g.trainer.isHasTrait('face_attractive')>>
<<their $g.trainer>> <<uface $g.trainer>>
<<elseif $g.trainer.isHasTrait('breast_large')>>
<<their $g.trainer>> <<ubreasts $g.trainer>>
<<elseif $g.trainer.isHasTrait('dick_large')>>
<<their $g.trainer>> considerable bulge
<<elseif $g.trainer.isHasTrait('muscle_strong')>>
<<their $g.trainer>> <<ubody $g.trainer>>
<<else>>
<<them $g.trainer>>
<</if>>
some sideway glances along the discussion.
</p>
<p>
Once your slavers were back home with the contract, upon closer inspection of
the order, you found another odd criteria — the factory is willing to pay more for a
<<rep setup.trait.training_mindbreak>> slave. Very odd, but this might just be
the best possible option to offload your <<rep
setup.trait.training_mindbreak>> slaves, if you have any.
</p><p>
The last time your slavers heard from <<yourrep $g.informer>>,
<<they $g.informer>> informer|was busy trying to work <<their $g.informer>> way up in
the hierarchy of the factory criminals. Your
slavers never heard back from <<therace $g.informer>>. The only thing that
came out from the factory was the constant chugging sound of machineries.
</p>
<p>
<<uneedrescue $g.informer>>, although you suspect you may not be able to
recognize <<them $g.informer>> again...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'the_noble_games', /* key */
"The Noble Games Participant", /* name */
'Currently participating in the Noble Games', /* name */
'a|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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.MoneyNormal(), ],
], [
'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_gamesFailure',
[
setup.qc.MissingUnit('slave'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.common],
],
[ /* 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 region_city>>, 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 must demonstrate their
prowess in various disciplines, rather unorthodoxly. The winners are 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 still
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 at the conclusion
of the games.
</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 in the center of the city.
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
executed the plan drawn <<uadv $g.planner>> by <<rep $g.planner>>. <<Rep
$g.briber>> bribed your slavers' way into the mansion, with the guards
having to awkwardly look to the other way 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>> got to work by
<<if $g.thief.isHasTrait('bg_assassin')>>
<<if $g.thief.isHasTrait('subrace_humansea')>>
using <<their $g.thief>> ninja technique and threw a grappling shuriken
<<else>>
recalling <<their $g.thief>> past as an assassin and
<<uadv $g.thief>> throwing a grappling hook
<</if>>
<<elseif $g.thief.isHasTrait('bg_thief')>>
recalling <<their $g.thief>> past as a common thief and
<<uadv $g.thief>> throwing a grappling hook
<<else>>
<<uadv $g.thief>> throwing a grappling hook
<</if>>
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>> proceeded 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 seemed 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>> couldn't produce any meaningful sound
to alert the guards. Once they did, they helped themselves to the valuables in
the room, which was understood as the extra prize for being the first to
complete the first bout of The Noble Games.
<<else>>
Apparently your slavers were not the first to complete this game, as several
out of place objects and slaves were already placed eye-catchingly in the room. It
seemed some other participants also have the same idea of smuggling in a
slave. Still, your slavers were confident that the quality of <<yourrep $g.slave>>
would carry them through.
<</if>>
</p>
<p>
A few days later, you receive a congratulary mail somehow delivered directly into your
fort, together with <<yourrep $g.slave>> nicely packaged with a ribbon. It seems
your slavers were successful in completing the first bout of The 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.
<<if $gOutcome == 'failure'>>
Your slavers had to risk going a dangerous alley to
escape from the chase, getting injured in the process.
<<else>>
Your slavers had no choice but to leave their cargo
in the city as they escape the city.
<</if>>
</p>
<p>
Perhaps there will be another opportunity for another series of The Noble Games.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_the_noble_games21',
"Opponent Knight",
'city_all', /* pools */
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_adventurer), ],
)>>
<<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Knight', /* name */
[
setup.trait.bg_knight,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
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_aggressive,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_calm,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
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.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
],
[
setup.trait.height_dwarf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_curious,
setup.trait.per_masochistic,
],
[
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.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_active,
setup.trait.training_pony_basic,
setup.trait.training_pony_advanced,
setup.trait.training_pony_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
setup.trait.eq_pony,
],
[
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.per_studious,
setup.trait.per_chaste,
setup.trait.training_mindbreak,
setup.trait.training_none,
],
[
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', 'special',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_noble_games2Crit',
[
setup.qc.VarSet('the_noble_games_progress', '2', -1),
setup.qc.Slave('enemy', "a|was a participant in the Noble Games who lost to your slavers in the second bout of the games", undefined), ],
], [
'Quest_the_noble_games2Crit',
[
setup.qc.VarRemove('the_noble_games_progress'),
setup.qc.RemoveTitleGlobal('the_noble_games'),
setup.qc.Injury('knight', 12), ],
], [
'Quest_the_noble_games2Crit',
[
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, setup.rarity.always],
],
[ /* 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 receive an invitation to the second bout of the
Noble Games. This time, it is going to be held in a secret mansion just outside of
the <<lore region_city>>. 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
among those slavers and slave who were participating the previous games
can partake in this phase of the game.
The other slavers should also 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 <<yourrep $g.scout>> headed over to
the enemy team to scout the opponent. The opponent seemed like a <<uadj
$g.enemy>> <<man $g.enemy>>, with a well-trained <<ubody $g.enemy>>. The
fight wouldn't be easy, especially since it would be done on a horseback —
<<if $g.knight.isHasTrait('bg_knight')>>given <<rep $g.knight>> past,
however, it did not become an issue.
<<else>>
which <<rep $g.knight>> knight|was 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 also presented 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>> came in riding
on a white horse, seemingly ready for the fight. Meanwhile,
<<if _pony>>
<<rep $g.knight>> strode into the battlefield atop <<their $g.knight>>
specially trained pony: <<yourrep $g.pony>>. The slave struggled under the weight
of the armor, but <<their $g.pony>> training held and was able to
carry your slaver into the battlefield.
<<else>>
your own slaver <<rep $g.knight>> knight|was no less ready, <<uadv $g.knight>>
striding into the battlefield atop the borrowed horse.
<</if>>
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
<<if _pony>>
This show earned the glare of the
enemy knight, who got provoked into charging your slaver without
waiting for the bout to officially began.
<<else>>
As <<rep $g.knight>> prepared for a fight, the enemy immediately charged,
oblivious to the manners of an honorable fight. It seemed your slavers were in
luck — the enemy did not come from a noble background and had no clue about
combat etiquette.
<</if>>
Such a dishonorable show raised the ire of the Noble Game's host, who
immediately disqualified 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.
Your slavers went back home to the fort with the new slave leashed closely behind them.
They now await the
invitation for the last bout of the games with caution, unsure what the last
game would ask them to do.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers also pawned most of the new slave's previous belonging, earning
your company some good coin.
</p>
<</if>>
<<else>>
<p>
Unfortunately, after being your slavers for a while, <<rep $g.knight>> had
completely forgotten about basic 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, <<yourrep $g.knight>> knight|was stripped out of <<their $g.knight>>
armor and handed over to the enemy, to use as <<they $g.enemy>> see fit.
Last your slavers saw, <<rep $g.knight>> knight|was forced to deepthroat
<<their $g.knight>> former opponent's <<if $g.enemy.isHasDick()>>lengthy dick<<else>>fake dick<</if>>,
still in full armor (except the pants, of course).
</p>
<p>
<<if $gOutcome == 'failure'>>
Fortunately, the enemy was not a slaver, 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>> knight|was never returned back to your slavers.
<<urescuenow $g.knight>>.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriaescort = new setup.UnitCriteria(
null, /* key */
'High-Class Escort', /* 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_gregarious,
setup.trait.per_kind,
setup.trait.eq_veryslutty,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_greenskin,
setup.trait.dick_tiny,
setup.trait.breast_tiny,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_cruel,
setup.trait.per_chaste,
setup.trait.per_lunatic,
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_studious,
setup.trait.per_loyal,
setup.trait.per_submissive,
setup.trait.skill_ambidextrous,
],
[
setup.trait.per_active,
setup.trait.per_independent,
setup.trait.per_dominant,
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_studious,
setup.trait.per_curious,
setup.trait.skill_alchemy,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.per_active,
setup.trait.per_stubborn,
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_loyal,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
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_roleplay_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_loner,
setup.trait.per_stubborn,
setup.trait.per_chaste,
setup.trait.per_dominant,
],
[
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', 'special',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'escort': _criteriaescort,
'maid': _criteriamaid,
'alchemist': _criteriaalchemist,
'slave': _criteriaslave, },
{ /* actors */
'target': 'subrace_humankingdom', },
[ /* costs */
],
'Quest_the_noble_games__bed_arts',
setup.qdiff.harder40, /* difficulty */
[ /* outcomes */
[
'Quest_the_noble_games__bed_artsCrit',
[
setup.qc.Outcomes('success'),
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.Item(setup.item.f_slaverbed_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, setup.rarity.always],
],
[ /* 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
region_city>>, 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 need to get 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 but surprisingly 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>> scoured the room for the
location of the scrying magic, from which the host will watch the scene
unfold. Finding that, your slavers arranged <<yourrep $g.slave>> at
the best possible angle to be viewed from the scryer, displaying <<their
$g.slave>> <<ugenitalall $g.slave>> and <<unipplesall $g.slave>>.
<<Yourrep $g.maid>> <<uadv $g.maid>> cleaned all traces of dust from the room, while <<rep
$g.escort>> prepared <<their $g.escort>> <<ubody $g.escort>> for the
what was surely going to be a long night.
</p>
<p>
First, your slavers poured the potion concocted
<<if $g.alchemist.isHasTrait('skill_alchemy')>>
professionally
<<else>>
amateurishly
<</if>>
by <<rep $g.alchemist>> all along <<reps $g.slave>> <<ubody $g.slave>>. The
slave writhed in pain as the potion began its work, severing the barrier
between this realm and <<lore concept_mist>> and forming miniscule portals,
enough to transfer the demonic atmosphere but not much else.
With the room turning purple, <<rep $g.maid>> got ready to play <<their
$g.maid>> role as the mansion's devoted maid while <<rep $g.escort>>
started to <<uadv $g.escort>> strip <<their $g.escort>>
<<uequipment $g.escort>> sensuously.
<<Rep $g.escort>> swayed <<their $g.escort>> <<ubody $g.escort>> as <<they
$g.escort>> approached 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 breathe through the smell of <<their
$g.slave>> <<urace $g.escort>> armpits, <<rep $g.escort>> moved <<their $g.escort>>
<<uhands $g.escort>> across <<reps $g.slave>> <<ubody $g.slave>>, fondling
all the sensitive parts, while
<<if $g.escort.isHasVagina()>>using the other <<uhand $g.escort>> to rub <<their $g.escort>>
pussy.<<else>>using the other <<uhand $g.escort>> 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>> jerked themself to full
erection<</if>> and prepared it in front of the slave's <<uhole $g.slave>>.
With the body heightened in sensitivity (thanks to the potion's effect), <<yourrep
$g.slave>> moaned incoherently as <<rep $g.escort>> began to insert <<their
$g.escort>>
<<udickorstrap $g.escort>>
into the available hole,
<<if $g.escort.isHasDick()>>until it was balls-deep.<<else>>until the strap base was touching the slave's ass.<</if>>
<<Rep $g.escort>> climaxed soon after,
<<if $g.slave.isHasTrait('eq_chastity')>>
as if mocking the slave's caged cock.
<<else>>
which was followed by the slave soon after.
<</if>>
</p>
<p>
The performance concluded, your slavers returned home as you await news of their
performance. A few days later, a large shipment arrives at your fort,
containing a rare noble furniture inside.
It seems your slavers had 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 seemed 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 in. Soon after your slave's
and slavers' bodies were corrupted, transforming before the hosts' very eyes.
This caused your slavers to panic, losing all arousal during the intercourse.
It was not a surprise that they ended up losing the competition at the final and
the most crucial stage.
</p>/* PROOFREAD COMPLETE */
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Instructor Hopeful', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_stubborn,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.Through(setup.qres.NoTitle('quest_certified_instructor_0')),
],
{
brawn: 1,
slaving: 1,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'obedience_101', /* key */
"Obedience 101", /* Title */
"darko", /* Author */
[ /* tags */
'city',
'trait',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'student': [ _criteriastudent, 1],
'clerk1': [ setup.qu.bureaucrat, 1],
'clerk2': [ setup.qu.bureaucrat, 1],
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-5000),
],
'Quest_obedience_101',
setup.qdiff.hard39, /* difficulty */
[ /* outcomes */
[
'Quest_obedience_101Crit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('humankingdom', 150),
],
],
[
'Quest_obedience_101Crit',
[
setup.qc.VarRemove('obedience_lesson'),
setup.qc.AddTitle('student', 'quest_learning_instructor_0'),
],
],
[
'Quest_obedience_101Failure',
[
],
],
[
'Quest_obedience_101Failure',
[
setup.qc.MoneyCustom(-5000),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('quest_learning_instructor_0', {
}),
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_city>> hosts the <<lore
location_institute_of_higher_learning>>, very popular among many nobles.
The institute boasts that all its graduates will become a productive member
of the noble society, no matter how rowdy or undisciplined the tutee was once.
</p>
<p>
A very rare opportunity has arrived for you and your slavers: the institute
is hiring! Or more specifically, they are opening a class for people who are
interested to be certified instructors in the academy. Graduates from this
class will surely be capable of instilling obedience to even the most
stubborn of students! A most beneficial skill to have for a slaving company.
</p>
<p>
There is a matter of some registration fee and red tape to navigate through,
however. Best to accompany the prospective instructor with some slavers adept
at bureaucracy.
</p><p>
After many exchanges above and below, and sometimes even under the desk, <<yourrep
$g.clerk1>> and <<utheirrel $g.clerk1 $g.clerk2>> <<rep $g.clerk2>> managed
to finally contact the headmaster of the institution. With a knowing nod, the
headmaster accepted <<yourrep $g.student>> as a candidate instructor. Lessons
will begin shortly — after the full tuition fee was paid by your slavers of
course.
</p>
<<if $gOutcome == 'crit'>>
<p>
In fact, your slavers were so convincing that the school's opinion of your company
even managed to improve.
</p>
<</if>>
<p>
Expect <<reps $g.student>> classes to begin soon...
</p><p>
<<Yourrep $g.clerk1>> and <<utheirrel $g.clerk1 $g.clerk2>> <<rep $g.clerk2>>
were careless in their task, and information somehow leaked out that <<yourrep
$g.student>> student|is working for your slaving company. Given the <<rep
$company.humankingdom>>'s distate for slavery, the headmaster of the
institution simply could not accept your slaver as a candidate, and had to turn
the potential student away. But the explicit refusal only came after your slavers had
spent a great deal of money bribing their way through, and there was no way to
recoup these lost money...
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_learning_instructor_0", /* key */
"Learning Instructor", /* name */
"Learning the ropes on how to be a proper instructor at the Institute of Higher Learning ", /* description */
"a|is learning how to be a proper instructor at the Institute of Higher Learning ", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Student', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_stubborn,
setup.trait.per_logical,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_kind,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_learning_instructor_0'),
],
{
brawn: 1,
slaving: 1,
knowledge: 1,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Test Subject', /* name */
[
setup.trait.per_submissive,
],
[
setup.trait.per_dominant,
setup.trait.subrace_dragonkin,
setup.trait.muscle_extremelystrong,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_obedience_advanced),
setup.qres.NoTraits([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_roleplay_master, setup.trait.training_horny_master, setup.trait.training_mindbreak], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'obedience_lessons', /* key */
"Obedience Lessons", /* Title */
"darko", /* Author */
[ /* tags */
'city',
'prep',
'trait',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'student': [ _criteriastudent, 3],
'slave': _criteriaslave,
},
{ /* actors */
'teacher': 'subrace_humankingdom',
},
[ /* costs */
],
'Quest_obedience_lessons',
setup.qdiff.harder41, /* difficulty */
[ /* outcomes */
[
'Quest_obedience_lessonsCrit',
[
setup.qc.Outcomes("failure"),
],
],
[
'Quest_obedience_lessonsCrit',
[
setup.qc.Outcomes("failure"),
],
],
[
'Quest_obedience_lessonsCrit',
[
setup.qc.IfThenElse(
setup.qres.VarGte('obedience_lesson', 9),
setup.qc.DoAll([
setup.qc.SetCooldownQuest('obedience_101', 200),
setup.qc.SetCooldownEvent('an_educated_opportunity', 12),
setup.qc.RemoveTitle('student', 'quest_learning_instructor_0'),
setup.qc.AddTitle('student', 'quest_certified_instructor_0'),
setup.qc.Trait('slave', setup.trait.training_obedience_master),
setup.qc.VarRemove('obedience_lesson')
], undefined),
setup.qc.DoAll([
setup.qc.OneRandomSeed([
setup.qc.Mindbreak('slave'),
setup.qc.Injury('slave', 50),
setup.qc.MissingUnit('slave')
])
], undefined)),
],
],
[
'Quest_obedience_lessonsCrit',
[
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('quest_learning_instructor_0', {
job_key: "slaver",
}),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'quest_learning_instructor_0'})>>
<<if _u>>
<p>
The next class for <<yourrep _u>>'s training in the <<lore
location_institute_of_higher_learning>> is about the begin. As usual, your
slaver is expected to bring along a slave trained in <<rep
setup.trait.training_obedience_advanced>>, and is ready to be stamped out
entirely of whatever remains of their free will.
</p>
<<set _sc = $varstore.get('obedience_lesson')>>
<p>
<<if _sc >= 6>>
<<Yourrep _u>> looks much more confident this time, and you have no doubt
that the <<uadjgood _u>> slaver will graduate very soon from the course...
<<elseif _sc >= 3>>
While <<rep _u>> has obtained some basic knowledge, you can sense that the
<<uadjgood _u>> slaver still have some way to go before <<they _u>> can
graduate...
<<else>>
<<Yourrep _u>> is still far from graduation. Failure at this stage is inevitable,
and you should prepare that the worst will happen to whichever slave you decide to bring
along the quest...
<</if>>
</p>
<p>
<<dangertext 'Warning'>>: Slaves brought along on this quest may not come back intact and well...
</p>
<<else>>
<p>
<<dangertext 'This quest is no longer able to be completed!'>> You are missing a unit important for this quest.
</p>
<</if>><p>
<<if Math.random() < 0.33>>
<<rep $g.student>> continued <<their $g.student>> study under the watchful
guidance of the instructors.
Many example slaves were used and left either broken or blindly obedient to
the instructors.
<<elseif Math.random() < 0.5>>
Weeks passed by as <<rep $g.student>> advanced <<their $g.student>> studies in
the academy, watching <<uadv $g.student>> as <<their $g.student>> instructors
demonstrated the various applications of pain, pleasure, and despair on the
available slaves.
<<else>>
Theory and practice were combined together in a single coherent course as
<<rep $g.student>> continued to improve <<their $g.student>> understanding on
how to properly bend one's will to another.
<</if>>
<<if $g.student.isHasTrait('per_studious')>>
<<Rep $g.student>> student|love to study, and dutifully attended to the lessons.
<<elseif $g.student.isHasTrait('per_active')>>
<<Rep $g.student>> student|hate studying, but forced <<themself $g.student>> to attend the lessons.
<</if>>
<<if $gOutcome == 'crit'>>
You did not think it was possible, but <<rep $g.student>> became a model
student throughout the courses, absorbing much of the knowledge.
<<set _add = 4>>
<<elseif $gOutcome == 'success'>>
Throughout the entire course, <<yourrep $g.student>> surprisingly remained
attentive, absorbing much of the new knowledge.
<<set _add = 3>>
<<elseif $gOutcome == 'failure'>>
<<Their $g.student>> understanding of the slaving art clearly improved,
although not by too much...
<<set _add = 2>>
<<elseif $gOutcome == 'disaster'>>
While <<they $g.student>> certainly improved, it could have been so much more
if <<they $g.student>> would just pay more attention during the class, instead of sleeping
through them...
<<set _add = 1>>
<</if>>
<<if Math.random() < 0.33>>
And finally, a demonstration was due as your slaver must apply their newfound knowledge
onto <<rep $g.slave>>...
<<elseif Math.random() < 0.5>>
And finally, it was time for <<rep $g.slave>> to be trained by your slaver,
to demonstrate that <<they $g.student>> had grasped what <<they $g.student>> had
just learned...
<<else>>
But before the class ended, your slaver must demonstrate <<their $g.student>>
understanding by applying it directly to <<rep $g.slave>>...
<</if>>
</p>
<<run setup.qc.VarAdd('obedience_lesson', _add, -1).apply($gQuest)>>
<<set _sc = $varstore.get('obedience_lesson')>>
<<if _sc >= 9>>
<p>
At long last, <<yourrep $g.student>> seemed to had finally grasped the secret to
perfectly rooting out free will out of the slaves. A careful ministration
of pain, pleasure, and despair must be applied, but all must be held in
perfect balance. Too much pain and the slave's body would succumb — too much pleasure
and the slave spirit would succumb — too much despair and the slave's mind
would succumb.
</p>
<p>
<<Yourrep $g.slave>> slave|was reduced to blindly obedience, happily
lapping and licking <<therace $g.student>>'s feel.
The instructors had no doubt that your slaver had finally ready to graduate, and so <<they $g.student>> did.
</p>
<p>
The <<lore location_institute_of_higher_learning>> would clearly welcome
<<theslaver $g.student>> should <<they $g.student>> one day decided to retire from your company, but for now
<<therace $g.student>> seemd to enjoy working under your employ. The new techniques and
knowledge <<they $g.student>> had acquired will surely prove useful in their continued career.
</p>
<<else>>
<<if $gQuest.getSeed() % 3 == 0>>
<p>
Unfortunately, your slaver understanding was still incomplete, and <<they
$g.student>> accidentally applied too much despair into the slave. <<Reps
$g.slave>> mind broke, reducing the once somewhat obedient slave into a
mindless body, usable as nothing but a living sex toy. Your slaver will have
to attend more classes if <<they $g.student>> still want to master this craft...
</p>
<<elseif $gQuest.getSeed() % 3 == 1>>
<p>
However, <<reps $g.student>> understanding of the application of pain was
still incomplete. The slave's body ended up too broken and the training had
to be stopped before the slave became fully broken.
It seems more classes are still needed before your slaver can graduate...
</p>
<<elseif $gQuest.getSeed() % 3 == 2>>
<p>
Disappointingly, it seemed <<rep $g.student>> student|was still not ready for
graduation. <<They $g.student>> gave too much pleasure to the slave,
restoring the slave's will too much. One night, the slave just disappeared from
<<their $g.slave>> slave quarters, seemingly having escaped from the academy. This
was a clear indicator of failure and your slaver will still need to attend
more lectures before <<they $g.student>> student|is ready to graduate...
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'pet_shop_of_woes', /* key */
"Pet Shopping: Internship", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'item'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer1': setup.qu.slavetrainer,
'trainer2': setup.qu.slavetrainer,
'salesman': setup.qu.salesman, },
{ /* actors */
'pet': '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_woesCrit',
[
setup.qc.Equipment(setup.equipmentpool.pet_good),
setup.qc.MoneyCustom(1000), ],
], [
'Quest_pet_shop_of_woesCrit',
[
setup.qc.MissingUnitRecapture('salesman', 'capturedmedium'),
],
], [
'Quest_pet_shop_of_woesCrit',
[
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
showcased dogs, cats, and other ordinary and cute pets for sale. Coming
to work, your slavers were escored to an employee-only area.
</p>
<p>
<<Rep $g.salesman>> salesman|was 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, into the perfect pet. Fortunately, the shop has
a standard training procedure to help your slavers with the training process.
</p>
<<if $gOutcome == 'failure'>>
<p>
Either because the slave was truly unruly, or because of your slavers were
incompentence, by the end of the internship,
the slave remained defiant but badly injured.
Seeing the failure, your slavers were kicked out of the compound while
the shop salvaged 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 despite their hard work,
while <<rep $g.salesman>> salesman|was taken as due recompense.
<<urescuenow $g.salesman>>, before <<they $g.salesman>> salesman|is fully trained as just another nameless pet...
</p>
<<elseif $gOutcome == 'disaster'>>
<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>>
salesman|was taken by the shop as a payment for the damages, to be trained as
a replacement for the pet your slavers had broke.
</p>
<<else>>
<p>
With the help of various training equipment including blindfolds, gags,
chastity belt, as well as plenty and plenty of leashes and puppy gears,
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 full with a large tailplug.
<<set _slaver = setup.selectUnit([$g.trainer1, $g.trainer2], {trait: 'bg_slaver'})>>
<<if _slaver>>
<<Reps _slaver>> past as a slaver made the training slightly easier, and <<they _slaver>>
employed some rather unorthodox technique in training the slave.
<</if>>
<<set _wind = setup.selectUnit([$g.trainer1, $g.trainer2], {trait: 'magic_wind'})>>
<<if _wind>>
<<Reps _wind>> mastery over wind magic was instrumental during the trainings.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers 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>
<<else>>
<p>
When their internship ended, your slavers were given the promised reward — a
golden pet gear suitable for high class pets, for the good work they had
done. The pet they trained will live a fulfilling live in the feet of its new
<<master $unit.player>>.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'pet_shop_of_wonders', /* key */
"Pet Shopping: Dream Purchase", /* Title */
"darko", /* Author */
[ 'city',
'veteran',
'unit',
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'appraiser': setup.qu.slaveappraiser,
'buyer1': setup.qu.negotiator,
'buyer2': setup.qu.negotiator, },
{ /* actors */
'pet': [],
},
[ /* costs */
setup.qc.Money(-10000), ],
'Quest_pet_shop_of_wonders',
setup.qdiff.hardest43, /* difficulty */
[ /* outcomes */
[
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.pet_good), ],
], [
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.SetCooldownOpportunity('pet_shopping', 100),
setup.qc.Slave('pet', 'a|was bought pre-trained and customized from a famous "pet shop" in the city', undefined), ],
], [
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MissingUnitRecapture('buyer1', 'capturedmedium'),
],
], [
'Quest_pet_shop_of_wondersCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MissingUnit('buyer1'), ],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
)>><<include 'Opportunity_pet_shopping'>>
<p>
You have decided to order a
<<if $g.pet.isMale()>>
male
<<else>>
female
<</if>>
pet.
</p><p>
The pet shop was disguised as an ordinary pet shop — the front counter
showcased dogs, cats, and other ordinary and cute pets for sale. Having an
appointment, your slavers were escorted to the main atrium of their
warehouse...
</p>
<p>
While the warehouse looked unimpressive from the outside, the interior was
nothing but high class. The floors were scrubbed sparking clean and the interior was
fully decorated. Your slavers were escorted to one of the rooms containing a
single draped cage.
</p>
<p>
Inside the cage, you found a slave who immediately stood to attention and
presented <<their $g.pet>> best begging posture to your slavers, proof that
<<they $g.pet>> was already fully trained.
<<if $g.appraiser.isHasTrait('per_dreamy')>>
<<Yourrep $g.appraiser>> lazily did a quick pass
<<else>>
<<Yourrep $g.appraiser>> did a complete check
<</if>>
on the slave's personalities,
body shape, and genitals
<<if $g.appraiser.isHasTrait('per_dreamy')>>
just giving a small sanity check that
<<else>>
making sure
<</if>>
<<they $g.pet>> was exactly what you ordered.
Satisfied, your slavers concluded the deal before going home with a new and eager
pet in tow.
</p>
<<if $gOutcome == 'crit'>>
<p>
The shop even threw in a complimentary bonus to your slavers: a golden pet gear
suitable for such highly trained slave.
</p>
<<elseif $gOutcome == 'failure'>>
<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 <<them $g.buyer1>> during the
quest.
<<urescuenow $g.buyer1>>.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
It was unclear how it happened but <<yourrep $g.buyer1>> never came 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>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head \"Maid / Butler\"', /* name */
[
setup.trait.bg_maid,
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
],
[
setup.trait.muscle_thin,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_humble,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('seasonal_cleaning_head_full'),
],
{
slaving: 1,
sex: 2,
}
)>>
<<set _criteriamaid1 = new setup.UnitCriteria(
null, /* key */
'Maid Slave', /* name */
[
setup.trait.bg_maid,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_active,
setup.trait.per_kind,
setup.trait.training_domestic_master,
],
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_studious,
setup.trait.per_cruel,
setup.trait.per_lunatic,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_domestic_advanced, setup.trait.training_domestic_master], true),
],
{
}
)>>
<<set _criteriamaid2 = new setup.UnitCriteria(
null, /* key */
'Maid Slave', /* name */
[
setup.trait.bg_maid,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_active,
setup.trait.per_kind,
setup.trait.training_domestic_master,
],
[
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_studious,
setup.trait.per_cruel,
setup.trait.per_lunatic,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_domestic_advanced, setup.trait.training_domestic_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'a_domestic_matter', /* key */
"A Domestic Matter", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'city',
'order',
'prep',
'veteran',
'unknown',
],
4, /* weeks */
25, /* expiration weeks */
{ /* roles */
'head': [ _criteriahead, 3],
'maid1': _criteriamaid1,
'maid2': _criteriamaid2,
},
{ /* actors */
'rich': 'quest_seasonal_cleaning1',
'maid': 'city_all',
'master': 'city_all',
},
[ /* costs */
setup.qc.Money(-6000),
],
'Quest_a_domestic_matter',
setup.qdiff.hardest48, /* difficulty */
[ /* outcomes */
[
'Quest_a_domestic_matterCrit',
[
setup.qc.Equipment(setup.equipmentpool.social_good),
setup.qc.Outcomes('success'),
],
],
[
'Quest_a_domestic_matterCrit',
[
setup.qc.MoneyNormal(),
setup.qc.MissingUnitForever('maid1'),
setup.qc.MissingUnitForever('maid2'),
setup.qc.Opportunity('domestic_rewards', {
master: "master",
maid: "maid",
rich: "rich",
}),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head_full'),
setup.qc.SetCooldownQuest('seasonal_cleaning', 50),
setup.qc.EmptyUnitGroup('quest_seasonal_cleaning1'),
],
],
[
'Quest_a_domestic_matterFailure',
[
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head_full'),
setup.qc.SetCooldownQuest('seasonal_cleaning', 10),
setup.qc.EmptyUnitGroup('quest_seasonal_cleaning1'),
setup.qc.Money(6000),
],
],
[
'Quest_a_domestic_matterDisaster',
[
setup.qc.MissingUnit('head'),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head_full'),
setup.qc.EmptyUnitGroup('quest_seasonal_cleaning1'),
setup.qc.SetCooldownQuest('seasonal_cleaning', 30),
setup.qc.Trait('head', setup.trait.bg_maid),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<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]>>
<<set $g.headunit = _headunit>>
<p>
Your company receives a letter from the city. By now, <<yourrep _headunit>> headunit|is already accustomed to the letter, expecting it to be from the city noble <<rep $g.rich>> who <<they _headunit>> basically headunit|have enslaved.
But the letter turns out to be very different this time — in fact, it was not written by the noble at all.
</p>
<div class='lettercard'>
<p>
To <<name _headunit>>,
</p>
<p>
I have heard about your slave residing brazenly within the <<lore region_city>>. I have taken an interest in the slave, and would like to offer to buy <<them $g.rich>> from you.
If you accept my offer, you shall pay me <<money 6000>>, and also provide me with two domestic-trained slaves, and then I will lavish you with rewards appropriate for a slave of this stature.
</p>
<p>
<<name $g.maid>>
</p>
</div>
<</if>>
<<if $statistics.isHasSuccess('a_domestic_matter')>>
<p>
Having received a similar letter in the past, you carefully noted that this "<<name $g.maid>>" is the pseudonym of the same slave that made a similar deal with you last time.
This might be another opportunity should you wish to get your hands on those maid gears...
</p>
<<else>>
<p>
This looks like a scam if you see one, but
after some careful information gathering, you learn that <<name $g.maid>> is actually a famous "<<maid $g.rich>>-trainer" residing in the <<lore region_city>>. Going with this might actually reward you with something you could not find anywhere else...
</p>
<</if>><p>
As usual, <<yourrep $g.head>> found the noble already kneeling in the
entrance, just like <<they $g.rich>> had been taught to do in the presence of
<<their $g.rich>> <<master $g.head>>. But this time, <<they $g.rich>> was not
alone.
Standing next to <<them $g.rich>> was another <<man $g.maid>> dressed in full <<maid $g.maid>> outfit, who introduced <<themself $g.maid>> as <<name $g.maid>> — the same name with the person who had sent you the letter of offer.
</p>
<p>
To demonstrate <<their $g.maid>> credibility, the <<maid $g.maid>> offered to
take the two slaves that <<yourrep $g.head>> had brought. Under <<their
$g.maid>> supervision, the trio were able to clean the mansion in what must
had been record time, erasing all the cumstains that normally would take your
slavers days to clean in under an hour. While your former slaves were no
slouch in cleaning,
<<set _maid = setup.selectUnit([$g.maid1, $g.maid2], {trait: 'bg_maid'})>>
<<if _maid>>
especially <<yourrep _maid>> who used to work in the industry,
<</if>>
the master <<maid $g.maid>> <<themself $g.maid>> was a
cleaning wonder, and cleaned entire rooms by <<themself $g.maid>> in a matter
of minutes. This must be the master <<maid $g.maid>> that you had heard
about, and although <<yourrep $g.head>> head|was convinced, <<they $g.head>>
couldn't help but wonder where did <<they $g.maid>> learn those skills from.
</p>
<p>
The exchange was then made, the two slaves and the noble "slave" in exchange for a very rare reward. <<Yourrep $g.head>> gave <<their $g.head>> noble "slave" one last good fucking
<<if $gOutcome == 'crit'>>
and took <<their $g.rich>> clothes for a final time as a souvenir
<</if>>
before handing over the well-bred toy to the master <<maid $g.maid>>. Once the deal was made, however, the reward was not immediately given.
</p>
<p>
After waiting for several more days, another <<man $g.master>>, this time wearing a full suit, arrived at the mansion. The "master <<maid $g.maid>>" then immediately kneeled before <<them $g.master>>, with <<their $g.maid>> head pressed hard against the floor. As the word "<<master $g.master>>" was uttered by the maid, it finally dawned what was going on. The head <<maid $g.maid>> <<themself $g.maid>> is but a slave, and <<their $g.maid>> real <<master $g.master>> had arrived to collect <<their $g.master>> purchase. It is this <<man $g.master>> who would be giving your slavers the promised reward, and judging by how masterful <<they $g.master>> had trained <<their $g.master>> masterful <<maid $g.maid>>, the reward must be great indeed...
</p><p>
When <<yourrep $g.rich>> arrived at the mansion, the noble "slave" was nowhere to be seen. The dungeons were empty, the master bedroom was empty, even the kennels was empty. It was unknown what happened exactly to the noble, but perhaps your client had decided to simply take the noble by force without <<reps $g.rich>> consent...
</p><p>
After the mission had ended, only your slaves <<rep $g.maid1>> and <<rep $g.maid2>> returned. <<Yourrep $g.head>> never returned from the mission, and it seemed that your client had decided that <<therace $g.head>> made a better slave than both <<rep $g.maid1>> and <<rep $g.maid2>>. <<They $g.head>> and the noble slave would no doubt be trained together, as a pair of former master and slave.
<<uneedrescue $g.head>>, although <<rep $g.head>> will probably already receive basic domestic training by the time you rescue <<them $g.head>>...
</p>/* PROOFREAD COMPLETE */
<<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head Maid / Butler', /* name */
[
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
],
[
setup.trait.muscle_thin,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_humble,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('seasonal_cleaning_head'),
],
{
social: 1,
sex: 1,
aid: 1,
}
)>>
<<run new setup.QuestTemplate(
'seasonalcleaning_', /* key */
'Seasonal "Cleaning"', /* Title */
"darko", /* Author */
[ 'city', 'money', 'prep'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'head': [_criteriahead, 1],
'maid1': [setup.qu.maid, 1],
'maid2': [setup.qu.maid, 1], },
{ /* actors */
'rich': 'quest_seasonal_cleaning1', },
[ /* costs */
],
'Quest_seasonal__cleaning_',
setup.qdiff.hard38, /* difficulty */
[ /* outcomes */
[
'Quest_seasonal__cleaning_Crit',
[
setup.qc.MoneyCrit(),
setup.qc.VarRemove('quest_seasonal_training_success'),
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, setup.rarity.common],
],
[ /* 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 domestic job from a well known noble in
the city, <<rep $g.rich>>. According to the letter you have just received, the noble was
apparently very happy with the overall job last time, 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,
<<yourrep _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>><<if $g.rich.isMale()>>
<<else>>
<<questimage 'seasonal__cleaning_female.jpg'>>
<</if>>
<p>
Just like before, the noble asked <<rep $g.head>> for <<their $g.head>>
personal attention in the bedchamber.
Your other slavers never noticed the lusty and needy face that the noble
made whenever <<they $g.rich>> was near <<rep $g.head>> —
or was it never there before?
This time, <<rep $g.head>> instead
<<if $g.head.isHasTrait('per_submissive')>>
did <<their $g.head>> best (despite <<their $g.head>> submissive nature) to take
control and demand
<<else>>
took control and demanded
<</if>>
various
increasingly degenerate things from the noble in order, promising that
if the noble continued to be a good <<boy $g.rich>>, <<they $g.rich>> will be
"rewarded" with a private session in the bedchamber.
By the end of the seasonal job,
<<yourrep $g.head>> had fully trained the noble in various degenerate acts, be it
to present <<themself $g.rich>> at command, or even to lick <<reps $g.head>>
<<ucfeet $g.head>>, all for a chance to get rewarded by being allowed 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 the noble,
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, <<yourrep $g.rich>> often went missing during their stay in the
mansion. Only it was more obvious this time where <<they $g.rich>> had went,
what's with the occasional humping and moaning noises coming up from the bedchamber.
There was still a great deal of mess to clean, however, so your other 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 <<yourrep $g.head>> had no time to advance their "intimacy" with
the <<lord $g.rich>> of the mansion. Numerous questionable stains emitting various
stench littered 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 were clearly shaken by the experience.
</p><p>
Unfortunately, <<yourrep $g.head>> tried to take it too far with the noble.
When <<therace $g.head>> attempted to make the noble lick <<their $g.head>>
<<ucfeet $g.head>>, something in the noble snapped and immediately ordered all your slavers
to get out of the vicinity. Although no immediate harm befall your slavers, it is unlikely
that the noble would request specifically for <<rep $g.head>> again in the future, and
whatever it was that <<theslaver $g.head>> had schemed must restart from the beginning.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'seasonal_cleaning_head', /* key */
"A Noble's Trustee", /* name */
'A trustee of a certain lonely noble in the city', /* name */
'a|have 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 */
'a|have effectively enslaved a certain submissive noble in the city',
0, /* slave value */
{
social: 2,
knowledge: 1,
},
)>>
<<run new setup.UnitGroup(
'quest_seasonal_cleaning1',
"Inheritor",
'subrace_humankingdom', /* pools */
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.dick_large,
setup.trait.breast_large,
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
],
[
setup.trait.muscle_thin,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_humble,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'head': _criteriahead,
'maid1': setup.qu.maid,
'maid2': setup.qu.maid, },
{ /* actors */
'rich': '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_cleaningFailure',
[
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, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('seasonal_cleaning_head'),
setup.qres.NoUnitWithTitle('seasonal_cleaning_head_full'), ],
)>><p>
The nobles of the <<rep $company.humankingdom>> often 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 parties being held in the mansion. These jobs
often pay well, and well deservedly considering the various kinds of questionable mess they
will 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: the <<lord $g.rich>> <<name $g.rich>>.
<<They $g.rich>> rich|is the sole inheritor of an estate, and to the best of your
knowledge <<they $g.rich>> rich|have no other relative nor <<they $g.rich>>
rich|have married. In fact, if the rumors were to be believed, the main reason
<<they $g.rich>> looked for a 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 just get 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>>.
It probably is thanks to <<their $g.head>> <<upraisenoun $g.head>>.
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, <<yourrep $g.head>> <<uadv $g.head>> refused to answer, but
promised that the company would benefit greatly from whatever was happening
there. Only time will tell if this promise will actually be fulfilled in
the future...
</p>
<p>
Still, there was 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, restoring 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 <<yourrep $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 littered 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 <<yourrep $g.head>> had no time to
seduce or befriend the <<lord $g.rich>> of the mansion.
Numerous questionable stains emitting various
stench littered the entire mansion, be it on the sofas in the living room, the
piano, or even from inside the extinguished fireplace.
</p>
<<if $gOutcome == 'failure'>>
<p>
Your slavers managed to finish the job, but they were clearly shaken by the experience.
</p>
<<else>>
<p>
Your slavers did not have to imagine hard what happened as one of the guests
appeared to not have left the mansion yet. Given no choice, your slavers were forced to service
the guest. In the end, although your slavers were paid well for the job, they
were clearly shaken by the entire ordeal.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriahead = new setup.UnitCriteria(
null, /* key */
'Head "Maid / Butler"', /* name */
[
setup.trait.dick_large,
setup.trait.breast_large,
setup.trait.muscle_strong,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_slutty,
setup.trait.eq_valuable,
],
[
setup.trait.muscle_thin,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_humble,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'head': [_criteriahead, 2.5],
'maid1': [setup.qu.maid, 0.25],
'maid2': [setup.qu.maid, 0.25],
},
{ /* actors */
'rich': 'quest_seasonal_cleaning1', },
[ /* costs */
],
'Quest_seasonal_training',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_seasonal_trainingCrit',
[
setup.qc.Equipment(setup.equipmentpool.social_good),
setup.qc.VarAdd('quest_seasonal_training_success', 1, -1),
],
], [
'Quest_seasonal_trainingSuccess',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_seasonal_trainingSuccess',
[
setup.qc.MoneyNormal(),
setup.qc.VarRemove('quest_seasonal_training_success'),
setup.qc.Injury('head', 4), ],
], [
'Quest_seasonal_trainingDisaster',
[
setup.qc.SlaveMarker('rich'),
setup.qc.VarRemove('quest_seasonal_training_success'),
setup.qc.AddTitle('head', 'seasonal_cleaning_head'),
setup.qc.RemoveTitle('head', 'seasonal_cleaning_head_full'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoQuest('a_domestic_matter'),
setup.qres.NoOpportunity('a_domestic_matter'),
setup.qres.NoOpportunity('domestic_rewards'),
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 as far as you understand, has been effectively enslaved by <<yourrep _headunit>>.
This time, there was no longer any pretense of cleaning service — the slave
simply 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>> rich|is right now.
</p>
<</if>><<if $g.rich.isMale()>>
<<else>>
<<questimage 'seasonal_training_female.jpg'>>
<</if>>
<p>
When your slavers arrived, the noble immediately prostrated
<<themself $g.rich>> in front of <<their $g.rich>> <<master $g.head>>.
<<if $g.head.isHasTrait('per_kind')>>
Despite being a kind <<urace $g.head>>, <<yourrep $g.head>>
understood that a job is a job and
<<else>>
Grinning <<uadv $g.head>>,
<<yourrep $g.head>>
<</if>>
brought the noble-turned-slave straight away
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 pecking order within the mansion
by making their employer serve as the mansion's own
<<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 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 was starting to
waver,
<<if $g.head.isHasTrait('per_kind')>>
<<yourrep $g.head>> suppressed their kind nature, since a job is a job, and
<<else>>
<<yourrep $g.head>> spent no time wasted and immediately
<</if>>
brought the
noble-turned-slave into <<their $g.rich>> own dungeon complex to have <<their $g.rich>>
training reinforced.
</p>
<<if $gOutcome == 'success'>>
<p>
In the coming days, sounds of whipping, moaning, and begging filled the
dungeons, with <<rep $g.rich>> being in a combined sensation from the 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
bedroom of the slave itself.
</p>
<p>
By the end of the week, <<rep $g.head>> head|was confident that the slave's
obedience training will continue to hold until their next visit. Your slavers proceeded to extort
large amount of money which the slave obediently agreed to. <<Yourrep $g.head>><<if
!$g.head.isHasDick()>>, donning a strap-on<</if>> gave the slave one last
proper throat fuck before leaving the mansion.
</p>
<<else>>
<p>
But <<rep $g.head>> accidentally injured <<themself $g.head>> during one of the
training sessions, but fortunately still managed to complete the reinforcement
training in time.
Your other slavers had to carry <<yourrep $g.head>> back home together with the
money they extorted from the noble.
</p>
<</if>><p>
Unfortunately, <<rep $g.head>> tried to take it too far with the noble.
When <<rep $g.head>> attempted to make <<them $g.rich>>
<<if $g.rich.isHasDick()>>choke on their own dick<<else>>
lick their own pussy<</if>>, something in the noble snapped and immediately
ordered all your slavers to get out from the vicinity.
<<Yourrep $g.head>> head|was
shocked that the noble still have so much fight left within, and was already outside
the mansion by the time <<they $g.head>> recovered from the shock. Still,
it was simply impossible for the noble to completely rebound from your slaver's
masterful trainings so far, and this was most likely just a temporary relapse.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'snake_oil_salesman', /* key */
"Snake Oil Salesman", /* Title */
"darko", /* Author */
[ 'city', 'money'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'salesman': setup.qu.salesman,
'conner': setup.qu.conartist,
'crier': setup.qu.attentionseeker,
'cow': setup.qu.slavecow, },
{ /* actors */
'alchemist': 'all', },
[ /* costs */
],
'Quest_snake_oil_salesman',
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'Quest_snake_oil_salesmanCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('cow', setup.qres.AnyTrait([setup.trait.balls_huge, setup.trait.breast_huge])),
setup.qc.Money(3500),
setup.qc.IfThenElse(
setup.qres.Actor('cow', setup.qres.NoTraits([
setup.trait.balls_large, setup.trait.balls_medium, setup.trait.breast_large, setup.trait.breast_medium
])),
setup.qc.Money(2500),
setup.qc.Money(3000),
),
),
setup.qc.ItemPool(setup.itempool.all_normal),
],
], [
'Quest_snake_oil_salesmanCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('cow', setup.qres.AnyTrait([setup.trait.balls_huge, setup.trait.breast_huge])),
setup.qc.Money(2000),
setup.qc.IfThenElse(
setup.qres.Actor('cow', setup.qres.NoTraits([
setup.trait.balls_large, setup.trait.balls_medium, setup.trait.breast_large, setup.trait.breast_medium
])),
setup.qc.Money(1000),
setup.qc.Money(1500),
),
),
setup.qc.Item(setup.item.healing_potion), ],
], [
'Quest_snake_oil_salesmanCrit',
[
],
], [
'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, setup.rarity.common],
],
[ /* restrictions to generate */
],
)>><p>
Like many living in <<lore continent_main>>,
the cityfolks too are rather superstitious folks — a trait many immoral merchants have
taken advantage off. Trinkets and hogwashes from land afar would often 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 "milk"-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 bind the slave within, 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 secret ingredient of the elixir.
</p><p>
<<Rep $g.conner>> managed to <<uadv $g.conner>> demonstrated the effectiveness
of your <<titlefull $g.cow>> <<reps $g.cow>>
<<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 <<yourrep $g.crier>>.
<<if $g.cow.isHasDick()>>
<<if $g.cow.isHasTrait('balls_huge')>>
<<Reps $g.cow>> <<uballs $g.cow>> were mass producer of cum, increasing
the amount of profits.
<<elseif $g.cow.isHasTrait('balls_medium')>>
<<else>>
<<Reps $g.cow>> <<uballs $g.cow>> were very small, and were only able to produce
a few droplets of cum at a time, slightly decreasing profits.
<</if>>
<<else>>
<<if $g.cow.isHasTrait('breast_huge')>>
<<Reps $g.cow>> <<ubreasts $g.cow>> were mass producer of milk, increasing
the amount of profits.
<<elseif $g.cow.isHasTrait('breast_medium')>>
<<else>>
<<Reps $g.cow>> <<uballs $g.cow>> were very small, and were only able to produce
a few drops of milk at a time, slightly decreasing profits.
<</if>>
<</if>>
<<if $gOutcome == 'crit'>>
The cityfolks all
rushed in to purchase the magical elixir from <<rep $g.salesman>> before it quickly
ran out — they even attracted the city's alchemist who was interested in the
concoction, and traded <<their $g.alchemist>> own (actual working) potion for the miracle
elixir.
<<elseif $gOutcome == 'success'>>
It was not the best
performance, but apparently it was enough to draw a sufficient number of
cityfolks to buy the hard-earned produce of <<reps $g.cow>> well abused
<<if $g.cow.isHasBalls()>><<uballs $g.cow>><<else>><<ubreast $g.cow>><</if>>.
One customer even traded their own <<rep setup.item.healing_potion>> for your
special elixir.
<<else>>
Unfortunately,
the royal alchemist happened to be in the vicinity, and declared your stand as
a complete hogwash. With the declaration, nobody gave patronage to your slavers, and
they were unable to sell a single drop of
<<if $g.cow.isHasDick()>>cum<<else>>milk<</if>>
from <<reps $g.cow>> overfull
<<if $g.cow.isHasBalls()>><<uballs $g.cow>><<else>><<ubreast $g.cow>><</if>>.
<</if>>
</p>
<<if $gOutcome == 'success' or $gOutcome == 'crit'>>
<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.
<<if $gOutcome == 'crit'>>
<<Rep $g.conner>> conner|was perhaps too successful in <<their $g.conner>> job that
<<rep $g.salesman>> and <<rep $g.crier>> couldn't resist to make <<rep $g.cow>>
produce one more agonizing 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.
<<else>>
<<Rep $g.crier>> <<uadv $g.crier>> petted <<reps $g.cow>> head while <<rep
$g.salesman>> <<uadv $g.salesman>> counted their sizable profits.
<</if>>
</p>
<</if>><p>
Unfortunately, the barrel was not designed sturdily and it broke into
two in the middle of the sales. The slave was revealed and guards were subsequently
called. Your slavers had to risk their limbs in order to escape from the city guards with the slave
in tow.
</p><<run new setup.Title(
"quest_master_of_intrigue_0", /* key */
"Master of Intrigue", /* name */
"A true master of intrigue", /* description */
"a|have proven a|themself to be a master thief by completing a challenge in the City of Lucgate", /* unit text */
7599, /* slave value */
{ /* skill additives */
intrigue: 5,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Thief', /* name */
[
setup.trait.bg_assassin,
setup.trait.bg_thief,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.skill_flight,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.intrigue, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_intrigue_0')
]), 'Have not yet mastered the art of intrigue'),
],
{
intrigue: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_intrigue', /* key */
"Test of Intrigue", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'veteran',
'prep',
'item',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_test_of_intrigue',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_intrigueCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_intrigue_0'),
setup.qc.EquipmentDirect('intrigue_eyes_master'),
],
],
[
'Quest_test_of_intrigueCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_intrigueCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_intrigue, 20),
],
],
[
'Quest_test_of_intrigueDisaster',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_intrigue_0'),
setup.qres.SkillAtLeast(setup.skill.intrigue, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Your slavers came from many background and specialities, and by now it is known that one of your slavers is a particularly sneaky one. A master thief if you will. But one could not claim such as a gaudy title without achieving a feat befitting for such a master, which <<yourrep _u>> might just have the right suggestion for.
</p>
<p>
A particular mansion in the <<lore region_city>> is famous for being the host to a wide veritable of artefacts, ranging from mundane ones such as the waterproof teabag to actually useful ones like self-cleaning broom and the staff of head-bashing.
</p>
<p>
<<Yourrep _u>> suggests that infiltrating such a dangerou manse and getting away with one of the artefacts stored might just be enough for your slaver to gain the coveted title of Master of Intrigue. The mansion is extremely well guarded, however, as well as littered with traps, and you must make it absolutely sure that whoever you send on this mission is up for the task.
</p><p>
Once <<they $g.a>> sneaked past the city guards and arrived at the entrance of the manse, <<yourrep $g.a>> briefly stood <<uadv $g.a>> there, before deciding to waste no more time and infiltrate in.
<<if $g.a.isHasTrait('skill_flight')>>
<<They $g.a>> found an empty spot to unleash <<their $g.a>> <<uwings $g.a>> and swoop into one of the second floor windows.
<<elseif $g.a.isHasTrait('magic_dark')>>
<<They $g.a>> used <<their $g.a>> mastery over the dark domain to shroud <<themself $g.a>> in darkness, hiding <<their $g.a>> presence from the ever present guards.
<<elseif $g.a.isHasTrait('height_dwarf')>>
<<They $g.a>> a|is extremely short, short enough to fit inside the gutters and infiltrate the manse from the water pipes.
<<elseif $g.a.isHasTrait('height_short')>>
<<They $g.a>> a|is very short, and could crawl inside the gutters and infiltrate the manse from the water pipes.
<<else>>
<<They $g.a>> waited until night fell, before using <<their $g.a>> trusty grappling hook to latch into one of the second floor windows and sneaked in.
<</if>>
</p>
<p>
The manse is littered with both guards and traps alike.
<<They $g.a>> could see some of the traps were already sprung, likely to the surprise of some poor unprepared thief or perhaps by some of the dim-witted guards.
But <<rep $g.a>> a|is different — a master of <<their $g.a>> craft (or so <<they $g.a>> like to think), and began infiltrating deeper into the manse in search of the hidden vaults.
<<if $g.a.isHasTrait('tough_nimble')>>
<<They $g.a>> a|is rather nimble, easily dodging and making <<their $g.a>> way through the complex trap layout.
<</if>>
<<if $g.a.isHasTrait('per_cautious')>>
<<Their $g.a>> rather cautious look of everything must have surely saved <<their $g.a>> <<uskin $g.a>> or two in the mansion.
<</if>>
<<if $g.a.isHasTrait('per_brave')>>
<<They $g.a>> accidentally triggered a trap when rushing bravely into a seemingly empty passageway, but luckily it was a silent trap and only suffered minor injuries as a result.
<<run setup.qc.Injury('a', 1).apply($gQuest)>>
<</if>>
<<if $g.a.isHasTrait('per_attentive')>>
<<They $g.a>> a|is attentive enough to notice some of the more obvious traps and avoid them like a plague.
<</if>>
<<if $g.a.isHasTrait('per_dreamy')>>
<<They $g.a>> lacked the attentiveness required to notice even the most obvious traps, and had to be extra careful to avoid them.
<</if>>
<<if $g.a.isHasTrait('height_tall')>>
<<Their $g.a>> <<ubody $g.a>> is a bit too large for such delicate infiltration mission, hindering the overall progress.
<</if>>
<<if $g.a.isHasTrait('magic_light')>>
<<Their $g.a>> affinity towards light magic meant <<they $g.a>> had a harder time concealing <<their $g.a>> presence compared to others.
<</if>>
<<if $g.a.isHasTrait('bg_assassin')>>
As a former assassin, <<they $g.a>> is intimately familiar with the various emergency hiding spots a mansion could provide.
<</if>>
<<if $g.a.isHasTrait('bg_thief')>>
<<Rep $g.a>> a|is an experienced thief with plenty of years-worth experience, and knows where would be the likeliest places for the vault to be hidden at.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
It took a few days of going inside and outside of the mansion, with the vaults seemingly nowhere to be found. <<They $g.a>> turned every painting, displace every rug, and touched every wall, and yet nothing. But after a few weeks, <<rep $g.a>> had a breakthrough and decided to infiltrate the mansion library instead.
There, <<they $g.a>> found a layout plan for the mansion, and it turned out that the vault was not located inside the mansion, but rather, inside a small crypt-like building at the gardens of the mansion complex.
With that knowledge, <<rep $g.a>> sneaked into the also well-guarded crypt, before
<<if $g.a.isHasTrait('muscle_strong')>>
using <<their $g.a>> strong and powerful arms to knock the guards out
<<elseif $g.a.isHasTrait('magic_dark')>>
using <<their $g.a>> dark magic to knock the guards out
<<elseif $g.a.isHasTrait('magic_wind_master')>>
zapping both guards out with <<their $g.a>> electric magic
<<else>>
knocking both guards out
<</if>>
and finally entered the vault. A single item stood there, an extremely rare <<rep setup.equipment.intrigue_eyes_master>>. A fitting item to crown <<rep $g.a>> as the Master Thief <<they $g.a>> had proven <<themself $g.a>> to be.
</p>
<<else>>
<p>
The mansion was far too big for <<rep $g.a>> to infiltrate in one night, and <<therace $g.a>> had to sneakily went in and out of the manse in the days to come. But at one fateful night, <<they $g.a>> accidentally
<<if $gQuest.getSeed() % 3 == 0>>
alerted a guard
<<elseif $gQuest.getSeed() % 3 == 1>>
tripped on a trap
<<elseif $gQuest.getSeed() % 3 == 2>>
made a grave mistake
<</if>>
and ousted <<themself $g.a>>. All the guards on the manse was alerted to <<their $g.a>> presence, and although <<rep $g.a>> managed to made it out alive, <<their $g.a>> presence was known. The mansion security was tightened in the coming days, and any hope of <<rep $g.a>> infiltrating the mansion that day was lost.
</p>
<p>
Despite suffering some injuries, <<rep $g.a>> looked rather encouraged by the prospect of rewards, and is rather eager to try again.
<<if $gOutcome == 'success'>>
Perhaps as immediately as when <<they $g.a>> a|recover from <<their $g.a>> new injuries.
<</if>>
</p>
<</if>><p>
Unfortunately, <<rep $g.a>> a|was too sloppy and managed to get captured by the guards defending the mansion.
<<urescuenow $g.a>>, and while it won't be easy, you best resuce <<them $g.a>> as soon as possible lest <<rep $g.a>> will never be the same again...
</p><<run new setup.Title(
"quest_master_of_knowledge_0", /* key */
"Master of Knowledge", /* name */
"A true master of knowledge", /* description */
"a|have proven a|themself to be a master of knowledge by completing a challenge in the city", /* unit text */
7599, /* slave value */
{ /* skill additives */
knowledge: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Sage', /* name */
[
setup.trait.bg_scholar,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_masochistic,
setup.trait.skill_creative,
],
[
setup.trait.muscle_extremelystrong,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_stubborn,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.knowledge, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_knowledge_0')
]), 'Have not yet mastered the art of knowledge'),
],
{
knowledge: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_knowledge', /* key */
"Test of Knowledge", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'item',
'city',
'veteran',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'enemy': 'all',
},
[ /* costs */
],
'Quest_test_of_knowledge',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_knowledgeCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_knowledge_0'),
setup.qc.EquipmentDirect('knowledge_legs_master'),
],
],
[
'Quest_test_of_knowledgeCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
setup.qc.MoneyCustom(5000),
],
],
[
'Quest_test_of_knowledgeCrit',
[
setup.qc.Trauma('a', setup.trait.boon_knowledge, 20),
setup.qc.TraumatizeRandom('a', 54),
],
],
[
'Quest_test_of_knowledgeDisaster',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_knowledge_0'),
setup.qres.SkillAtLeast(setup.skill.knowledge, 100)
], 1),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _slavers = $company.player.getUnits({job: setup.job.slaver})>>
<<run _slavers.sort((a, b) => b.getSkill(setup.skill.knowledge) - a.getSkill(setup.skill.knowledge))>>
<<set _smart = _slavers[0]>>
<p>
<<set $g.smart = _smart>>
<<Yourrep $g.smart>> smart|is really knowledgeable.
Smarter than the average rock, smarter than the average person, and some even say <<they $g.smart>> smart|is smarter than the smartest of dragonkins.
<<if !$g.smart.isYou()>>
<<They $g.smart>> might even be smarter than you!
<</if>>
</p>
<p>
Thanks to this,
you had received an invitation to participate in the rare and elusive secret quiz event being held every now and then in the <<lore region_city>>. The reward is absolutely tantalizing: an extremely rare piece of clothing fit for the smartest person on <<lore continent_main>>.
But winning is going to be incredibly tough, and whoever you send on this mission would need to defeat the incredibly knowledgeable savant in a deadly quiz.
<<if $statistics.isHasSuccess('test_of_knowledge')>>
One of your slavers had won the event before, but the outcome might just be completely different this time around.
<</if>>
</p><p>
The quiz event is held deep down under the City of Lucgate, and in its dark and damp undercity. Several other contestants were there too alongside <<yourrep $g.a>>, and the event began soon after.
</p>
<p>
To prepare for the quiz, all the contestants were given access to a vast underground library you never know existed under the city for three full weeks.
The questions will be from some books in the library, and the contestants were free to prepare as much as they'd like. Some decided to spend the weeks away scouring throught the rarest of tomes there, while others instead decided to rest and rely on the knowledge they already had to begin with.
<<Yourrep $g.a>> a|is already incredibly knowledgeable, but <<they $g.a>> knew that the library would hold a secret to winning the contest.
<<if $g.a.isHasTrait('bg_scholar')>>
<<Yourrep $g.a>> used to be a scholar, and <<they $g.a>> a|was quite fascinated by some of the rarer books in the library.
<</if>>
<<if $g.a.isHasTrait('per_smart')>>
<<Rep $g.a>> a|was smart enough to be able to digest a lot of books within a short period.
<</if>>
<<if $g.a.isHasTrait('per_slow')>>
<<Rep $g.a>> took longer than most people to digest the books.
<</if>>
<<if $g.a.isHasTrait('muscle_extremelystrong')>>
<<Reps $g.a>> completely undelicate muscles made it awkwardly difficult to turn the pages.
<</if>>
<<if $g.a.isHasTrait('per_active')>>
<<Rep $g.a>> quite dislikes studying, and took frequent naps and breaks.
<</if>>
<<if $g.a.isHasTrait('per_studious')>>
<<Their $g.a>> studious nature was a boon to this task.
<</if>>
<<if $g.a.isHasTrait('per_stubborn')>>
<<They $g.a>> stubbornly sticked with the books on the bookshelves.
<</if>>
<<if $g.a.isHasTrait('per_curious')>>
<<Their $g.a>> curiosity motivated <<them $g.a>> to read the books.
<</if>>
<<if $g.a.isHasTrait('per_masochistic')>>
<<They $g.a>> took masochistic delight in torturing <<themself $g.a>> with reading non-stop.
<</if>>
<<if $g.a.isHasTrait('corrupted')>>
<<Their $g.a>> corrupted body sometimes interferes with the task, projecting lewd and time-inappropriate things into <<their $g.a>> thoughts.
<</if>>
<<if $g.a.isHasTrait('skill_creative')>>
<<They $g.a>> a|was creative enough to devise some mnemonics to help remember the more intricate details.
<</if>>
</p>
<p>
Once the three weeks passed, the contest then began.
Given how knowledgeable <<therace $g.a>> a|is, it was not a surprise that <<they $g.a>> remained undefeated until the final round, where <<they $g.a>> came face-to-face with the legendary savant <<themself $g.a>>. The questions then began, and even before the judge finished saying the entire sentence, the savant already knew and answered. It seemed that <<they $g.enemy>> had actually memorized all the questions present in all the books in the library, and know exactly what the question that was going to be asked was about.
</p>
<<if $gOutcome == 'crit'>>
<p>
But <<yourrep $g.a>> a|was way ahead of <<them $g.enemy>>. They noticed that the questions were following a particular pattern — the first question of the second book in the first shelf of the library, followed by the third question of the third book in the third shelf of the library, and so on.
While the savant was happily answering the first few questions, <<rep $g.a>> <<uadv $g.a>> schemed, until <<they $g.a>> made sure <<they $g.a>> knew exactly what was the pattern that was being used. Once <<they $g.a>> confirmed, <<they $g.a>> a|was able to answer the rest of the questions without even hearing what was the question, surprising the savant, although the judge kept a stoic face. In the end, <<therace $g.a>> a|was able to answer a majority of the questions correctly, and won the quiz event!
</p>
<p>
Both the savant and <<rep $g.a>> entered the podium as runner-up and winners, and while the savant was given a sizable sum of money as a prize,
<<rep $g.a>> received the grand prize: a <<rep setup.equipment.knowledge_legs_master>> fit for the wisest of sages, as well as the grand and truly fitting title of "Master of Knowledge".
</p>
<p>
Oddly enough, except for the runner-up, <<they $g.a>> never saw any of the other contestants ever again throughout the event...
</p>
<<else>>
<<if $gOutcome == 'success'>>
<p>
But <<yourrep $g.a>> had the same idea, and a|was able to answer some of the questions too. But the savant had the advantage of time, having participated in the event longer, and ultimately <<yourrep $g.a>> lost by a couple of questions.
</p>
<<else>>
<p>
<<Yourrep $g.a>> a|was unprepared for such strategy, and eventually <<they $g.a>> resorted to blindly guessing the answer. That of course, did not bode well, and <<they $g.a>> lost horribly. Having <<their $g.a>> most prized ability in <<their $g.a>> knowledge shattered so much traumatized <<therace $g.a>> for a good while.
</p>
<</if>>
<p>
Both the savant and <<rep $g.a>> entered the podium as winners and runner-up, and both were given a sizable sum of money as a prize.
As the winner, however, the savant received the grand prize: a <<rep setup.equipment.knowledge_legs_master>> fit for the wisest of sages, which made you a bit jealous. Perhaps you could try again in the future.
</p>
<p>
Oddly enough, except for the winner and <<themself $g.a>>, <<rep $g.a>> never saw any of the other contestants ever again throughout the event...
</p>
<</if>><p>
After being sent to the mission, you never heard back from <<yourrep $g.a>>. Instead, a letter arrived at your fort, telling you that <<rep $g.a>> had lost horribly in the contest, not even reaching second prize, and had been reappropriated as the entry fee for such a prestigious contest.
</p>
<p>
You sighed to yourself — perhaps you have overestimated <<their $g.a>> abilities.
<<urescuenow $g.a>>, and save <<them $g.a>> from this farce of a competition.
</p><<run new setup.Title(
"quest_master_of_social_0", /* key */
"Master of Social", /* name */
"A true master of social", /* description */
"a|have proven a|themself to be a master of social by completing a challenge in the city", /* unit text */
7599, /* slave value */
{ /* skill additives */
social: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Diplomat', /* name */
[
setup.trait.bg_informer,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_playful,
setup.trait.skill_creative,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_serious,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.social, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_social_0')
]), 'Have not yet mastered the art of social'),
],
{
social: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_social', /* key */
"Test of Social", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'city',
'veteran',
'prep',
'item',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'b': 'all',
},
[ /* costs */
],
'Quest_test_of_social',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_socialCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_social_0'),
setup.qc.EquipmentDirect('social_eyes_master'),
],
],
[
'Quest_test_of_socialCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
setup.qc.MoneyCustom(5000),
],
],
[
'Quest_test_of_socialCrit',
[
setup.qc.Trauma('a', setup.trait.boon_social, 20),
setup.qc.TraumatizeRandom('a', 54),
],
],
[
'Quest_test_of_socialDisaster',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_master_of_social_0'),
setup.qres.SkillAtLeast(setup.skill.social, 100)
], 1),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _slavers = $company.player.getUnits({job: setup.job.slaver})>>
<<run _slavers.sort((a, b) => b.getSkill(setup.skill.social) - a.getSkill(setup.skill.social))>>
<<set _s = _slavers[0]>>
<<set $g.s = _s>>
<p>
You have many slavers under your employ. Some specialize in the art of skulking around in the dark, while others in combat. But not all of your job requires such strenuous physical activity — some require subtle manipulation and diplomacy, and that's where <<yourrep $g.s>> would often come very handy indeed.
<<Therace $g.s>> s|is very good at using <<their $g.s>> tongue to get what <<they $g.s>> s|want.
</p>
<p>
It is no secret that the <<lore region_city>> hosts secret societies of many kind, ranging from benign ones that worship the bountiful flesh that has been wrought into <<lore continent_main>>, to those radical ones that would try to return slavery back into the kingdom. But among these secret socities, it is rumored that there is one so elusive reserved only for the most skilled diplomats. There, the diplomats would all wear masks to hide their identities, and mingle with each other with a singular goal of identifying who could be the host. It is said that the host would grant power to whoever manages to identify them...
</p><p>
<<if $g.a.isHasTrait('skill_connected')>>
Leveraging <<their $g.a>> many connections,
<<elseif $g.a.isHasTrait('skill_creative')>>
Using <<their $g.a>> wit,
<<elseif $g.a.isHasTrait('per_logical')>>
By logically piecing the hints together,
<<else>>
By sheer luck,
<</if>>
<<yourrep $g.a>> found the masked secret society and received an invitation for an upcoming ball.
<<They $g.a>> prepared and gathered as much information as <<they $g.a>> could.
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<<They $g.a>> learned that the host is a rather
<<if $g.b.isFemale()>>busty woman<<else>>well-endowed man<</if>>, but the host kept <<their $g.b>> secret well guarded and no other information surfaced.
<<else>>
But <<they $g.a>> couldn't find out much...
<</if>>
</p>
<p>
Donning a <<uadv $g.a>> purchased masquerade mask, <<therace $g.a>> attended the ball at the designated time and place. It was held in one of the thought-abandoned mansion in the city, only to reveal the extravagant interior hidden within. The ball started, and murmurs and silent whispers were abound in the hall.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, <<rep $g.a>> got distracted.
<<if $g.a.isHasTrait('per_frugal')>>
The greedy <<urace $g.a>> simply could not resist the various exquisite food on offer, and gorged on them instead of socializing.
<<elseif $g.a.isHasTrait('per_lustful')>>
The lustful <<urace $g.a>> focused too much — way too much — on a particularly well-endowed <<lady $g.b>>.
<<elseif $g.a.isHasTrait('per_submissive')>>
The many servants subserviantly servicing their betters got <<them $g.a>> all submissive and docile, fantasizing what it feels to be put in place.
<<else>>
Whether it's the exquisite food, the tasteful music, or the well-endowed participants on the ball, you could not tell for sure.
<</if>>
<<They $g.a>> never returned to your company after that fateful night. Perhaps the host thought the behavior insulting, or perhaps <<they $g.b>> were looking for a slave that just happens to fit <<reps $g.a>> description, but either way, you should get moving to save the <<uadj $g.a>> <<urace $g.a>> fast.
</p>
<<elseif $gOutcome == 'crit'>>
<p>
<<Rep $g.a>> a|is a masterful diplomat, and it showed. Using <<their $g.a>> gift of eloquence, <<they $g.a>> sweet-talked others into revealing much while at the same time revealing <<their $g.a>> own cards as little as possible. <<They $g.a>> navigated through the web of lies and deceit, rooting out the lies while extracting the singular thread of truth from within.
<<if $g.a.isHasTrait('per_sly')>>
<<Their $g.a>> aptitude for deceit certainly helped.
<</if>>
<<if $g.a.isHasTrait('per_gregarious')>>
<<Their $g.a>> natural eloquence helped quite a bit.
<</if>>
<<if $g.a.isHasTrait('bg_informer')>>
<<They $g.a>> a|was once an informer, and no stranger to this task.
<</if>>
<<if $g.a.isHasTrait('per_playful')>>
<<They $g.a>> would employ jokes during the exchanges, subtly lowering <<their $g.a>> confidant's guard.
<</if>>
<<if $g.a.isHasTrait('skill_creative')>>
<<They $g.a>> came up with various creative means of extracting every single drop of truth from others.
<</if>>
<<They $g.a>> remembered the hint <<they $g.a>> got too, and would "accidentally" bumped into many other <<women $g.b>> that night, while subtly feeling the size of <<their $g.b>> <<if $g.b.isFemale()>>melons<<else>>bulges<</if>>.
</p>
<p>
After an hour of mingling, <<they $g.a>> narrowed the target down to a singular <<woman $g.b>> in
<<if $g.b.isFemale()>>
a singularly striking black dress.
<<else>>
a singularly striking black suit.
<</if>>
<<They $g.a>> slowly approached the <<urace $g.b>>, and hosted small talks first to assert that <<their $g.a>> guess was correct. Once <<they $g.a>> a|was confident in <<their $g.a>> judgment, <<they $g.a>> invited the <<lady $g.b>> for a dance, which <<therace $g.b>> gracefully accepted.
<<if $g.a.isHasTrait('skill_entertain')>>
<<Rep $g.a>> a|is a very skilled dancer, and guided the steps masterfully, before
<<else>>
The two of them danced wordlessly for a while, before
<</if>>
finally whispering <<their $g.a>> guess into <<their $g.b>> ears.
In response, <<therace $g.b>> shut <<their $g.b>> eyes, before stopping the dance and pressing the palms of <<their $g.b>> <<uhands $g.b>> on <<reps $g.a>> chest. It felt warm, far warmer than what a normal touch would do, and it was enjoyable as well. Suddenly lost in warmth, <<reps $g.a>> mind wandered almost immediately, and when <<they $g.a>> regained consciousness next, it was on a luxuriant bed of the villa, with <<therace $g.b>> next to <<them $g.a>>.
Whether it is the no-doubt magic employed, or some potions that must have been forced down <<them $g.a>>, <<rep $g.a>> felt incredibly horny that day<<if $g.a.isHasTrait('per_chaste')>> (despite normally being ever so chaste!), <<elseif $g.a.isHasTrait('per_lustful')>> (although knowing how lusty <<therace $g.a>> usually a|is you have your doubts it's the work of magic), <<else>>, <</if>>
and made intense love with the host of the party.
</p>
<p>
The rest of the night went in a blur, and despite having only slept for what must have been an hour, <<rep $g.a>> woke up refreshed the next day, completely invigorated. There was no trace of the host, and the only proof that it was not all a dream is <<their $g.a>> own masquerade mask, who has somehow been enchanted into a piece worthy of being called an artifact.
</p>
<<else>>
<p>
<<Rep $g.a>> tried <<their $g.a>> best, mingling with the other participants and using <<their $g.a>> considerable talent at sweet talking to get as much information as possible. But <<they $g.a>> a|was careless and distracted, and got sucked into an intricate web of lies and deciet. In the end <<rep $g.a>> a|was not able to narrow down the possible suspect of the host, and lost the game of lies.
<<if $g.a.isHasTrait('per_frugal')>>
The greedy <<urace $g.a>> spent quite a great deal of time taste-testing the various delicacies provided too.
<<elseif $g.a.isHasTrait('per_lustful')>>
Contributing to it is the fact that the lustful <<urace $g.a>> focused too much —perhaps way too much — on a particularly well-endowed <<lady $g.b>>.
<</if>>
<<if $gOutcome == 'failure'>>
<<They $g.a>> a|was traumatized by the experience too, having seen how much things <<they $g.a>> would still need to learn to truly master the art of socializing.
<</if>>
But <<therace $g.a>> a|look rather upbeat from having failed such a mission, and a|is no doubt eager to try again.
</p>
<</if>><p>
After being sent to the mission, you never heard back from <<yourrep $g.a>>. Instead, a letter arrived at your fort, telling you that <<rep $g.a>> had lost horribly in the contest, not even reaching second prize, and had been reappropriated as the entry fee for such a prestigious contest.
</p>
<p>
You sighed to yourself — perhaps you have overestimated <<their $g.a>> abilities.
<<urescuenow $g.a>>, and save <<them $g.a>> from this farce of a competition.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'the_bodyswap_experiment', /* key */
"The Bodyswap Experiment", /* Title */
"darko", /* Author */
[ 'city', 'trait', 'transformation', 'rare',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': setup.qu.slave,
'scientist1': setup.qu.scientist,
'scientist2': setup.qu.scientist,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'swapper': 'all', },
[ /* costs */
],
'Quest_the_bodyswap_experiment',
setup.qdiff.harder35, /* difficulty */
[ /* outcomes */
[
'Quest_the_bodyswap_experimentCrit',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.Slave('swapper', "a|was a test subject in an underground laboratory who swapped bodies with one of your slaves", undefined),
setup.qc.MoneyCustom(2000), ],
], [
'Quest_the_bodyswap_experimentCrit',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.MoneyCustom(2000),
setup.qc.Injury('slave', 2), ],
], [
'Quest_the_bodyswap_experimentCrit',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.Corrupt('slave'),
setup.qc.PermanentlyCorrupt('slave'),
setup.qc.MoneyCustom(1000), ],
], [
'Quest_the_bodyswap_experimentCrit',
[
setup.qc.Bodyswap('slave', 'swapper'),
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.AddRandomTraitWithTags('slave', ['per']),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.epic],
],
[ /* 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 had constructed with a combination of magic and
science. Allegedly, this machine is capable of swapping the bodies of
two creatures, each retaining their own memories and personalities but not their bodies.
</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 collect the promised money. You
will never know who the slave will swap bodies with, however.
</p><p>
The laboratory was filled with strange contraptions,
<<set _inv = setup.selectUnit([$g.scientist1, $g.scientist2, $g.negotiator], {trait: 'bg_engineer'})>>
<<set _curious = setup.selectUnit([$g.scientist1, $g.scientist2, $g.negotiator], {trait: 'per_curious'})>>
<<set _stubborn = setup.selectUnit([$g.scientist1, $g.scientist2, $g.negotiator], {trait: 'per_stubborn'})>>
<<if _inv>>
a familiar settings for the ex-inventor <<rep _inv>>.
<<elseif _curious>>
drawing much curiosity from <<yourrep _curious>>.
<<elseif _stubborn>>
although it still fail to attract the curiosity from the stubborn <<rep _stubborn>>.
<<else>>
but your slavers kept their focus instead of <<uadv $g.scientist1>> gazing upon the curiosities.
<</if>>
Within the laboratory, sits the bodyswapper machine.
It looked pretty innocuous from the outside -- just two simple compartments that were
connected with a pipe, each having a chair inside.
<<Yourrep $g.scientist1>> <<uadv $g.scientist1>> strapped <<yourrep
$g.slave>> tight on one of the chairs, making sure to gag the slave to maintain silence
in the laboratory.
On the other tube is another "volunteer" that was also being tied tightly into the chair.
Once both slaves were in place, with a few click of buttons the doors of the
compartments slowly closed, trapping the slaves together with their muffles inside each compartment.
</p>
<p>
With few more presses of the buttons, the tubes started to glow strange colors.
The scientists as well as your slavers watched the experiment for quite
a while until the glowing subsided.
<<if $gOutcome == 'crit'>>
Your slavers could see a slight transparent smoke coming out from both compartments, but
it did not seem to be anything significant.
<<elseif $gOutcome == 'success'>>
Your slavers could see a black-ish smoke coming from both compartments, certainly did
not look like anything that was supposed to happen!
<<elseif $gOutcome == 'failure'>>
But then a loud explosion could be heard from inside the compartment that's holding
<<yourrep $g.slave>>.
<<else>>
Your slavers could see a purple-ish smoke coming from both compartments,
a clear indicator that something went absolutely wrong.
<</if>>
</p>
<<if $gOutcome == 'failure'>>
<p>
when the door suddenly open, <<yourrep $g.slave>> had occupied
a new, but corrupted body.
It appeared that although the bodyswap was successful, the procedure somehow
misfired and corrupted their participants. This was clearly a computation
fault from the scientists side.
Thanking your slavers, they immediately got
back to work, trying to figure out the bug in their computation.
Your slavers took their pay and the transformed, bodyswapped
wreck of a slave home.
</p>
<<else>>
<p>
The compartments slowly opened their doors revealing their participants whose bodies were
completely switched — on the compartment that used to house <<yourrep $g.slave>>
sat <<reps $g.swapper>> body instead, and vice versa.
<<if $gOutcome == 'disaster'>>
Both "volunteers" were completely dazed —
upon closer examination, it seemed that not only
their bodies had been swapped — their personalities had somewhat mixed together too.
This was clearly not within the desired specification of the bodyswap machine, 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.
<<else>>
<<if $gOutcome == 'crit'>>
The slaves were barely
conscious having undergone such a painful procedure, but upon questioning it
was clear that the bodyswapping procedure was successful.
<<else>>
But both slaves were
unconscious — it seemdd 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.
<</if>>
The scientists celebrated
with your slavers afterwards.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers were paid the promised amount, as well as given the now useless
"volunteer" <<rep $g.swapper>>, who now occupies <<reps $g.slave>> original body,
to "help bring back home".
Your slavers couldn't wait to explore the new bodies of their toys.
</p>
<<else>>
<p>
Your slavers were paid the promised amount, as well as being returned
<<yourrep $g.slave>> who now occupied an entirely new body.
Your slavers couldn't wait to explore the new body of their toy.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<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.Outcomes('crit'),
],
], [
'Quest_the_rear_dealCrit',
[
setup.qc.Outcomes('crit'),
],
], [
'Quest_the_rear_dealCrit',
[
setup.qc.Outcomes('crit'),
],
], ],
[
[setup.questpool.city, setup.rarity.common],
], /* 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 region_city>> has once again asked for a
slave trained to their 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 region_city>> 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 a perfectly trained slave exactly to the noble's demanding
specifications. The slave must be delivered in a timely manner too, or the
entire deal is forfeit.
<<if !$g.negotiator1.isYou()>>
Once <<rep $g.negotiator1>> delivered <<their $g.negotiator1>> full report to
you, you
<<else>>
You
<</if>>
started to wonder if <<yourrep $g.slavetrainer>>
slavetrainer|have what it takes to lead such a difficult series of slave trainings...
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>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'training_as_a_service', /* key */
"To-Be-Trained", /* name */
'A slave lent to your company for training', /* name */
'a|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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'salesman': setup.qu.salesman,
'trainer': setup.qu.slavetrainer,
'informer': setup.qu.informer,
'slave': setup.qu.slaveobedient, },
{ /* actors */
'trainee1': 'all',
'trainee2': 'all',
'client': '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', "a|was a freshly caught slave that your company has taken to train for a client", undefined),
setup.qc.Slave('trainee2', "a|was a freshly caught slave that your company has taken to train for a client", undefined), ],
], [
'Quest_training_as_a_serviceCrit',
[
setup.qc.SlaveOrderTrainingAsAService(),
setup.qc.AddTitle('trainee1', 'training_as_a_service'),
setup.qc.Slave('trainee1', "a|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, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('training_as_a_service'), ],
)>><p>
Since the abolishment of slavery in the <<rep $company.humankingdom>> over ten years ago,
the demand for slave training services has understandably declined. This
leads to many slave training schools to close shop, making it
difficult for undercity 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 disobedient slave
that you must break. The more trainings you manage to dish out in time,
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>
<<Yourrep $g.informer>> managed to find your company a client in the undercity of Lucgate,
<<if $gOutcome == 'crit'>>
a grizzled <<lady $g.client>> who were just gifted two fresh slaves by
<<their $g.client>> friend, completely untrained.
<<else>>
a young <<lady $g.client>> who had just acquired <<their $g.client>> first ever slave and was
completely clueless about how to possibly train the disobedient slave.
<</if>>
</p>
<p>
To prove your company's worth,
<<rep $g.trainer>> <<uadv $g.trainer>> demonstrated
<<if $g.trainer.isHasTrait('per_kind')>>
basic
<<else>>
masterful
<</if>>
slaving
technique on the slaves, which impressed the <<lady $g.client>>. <<Rep
$g.salesman>> negotiated a good deal for the training — you are to dish
whatever training you want on the
<<if $gOutcome == 'crit'>>
two slaves,
who must both
<<else>>
slave,
who must
<</if>>
be returned strictly within eight weeks. The client has a preference for certain training,
which will give greater rewards should they be fulfilled, but these are optional.
</p><p>
<<Rep $g.informer>> informer|was unable to find potential clients for your
slavers. After one week of fruitless search, your slavers returned to your
fort empty-handed.
</p><p>
The undercity of Lucgate proved to be a highly dangerous place.
Your slavers were ambushed by thugs during their search for a client and returned home injured.
</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 this kind of random result, it fortunately
not necessary to offer a slave as an offering.
But should you wish to try other types of more directed corruption, it would be
a different story.
</p><p>
The corruption went much better than expected, with the dark powers looking favorable on your company.
</p><p>
The corruption attempt was successful.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did not borne result.
</p><p>
The power behind <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_mist>>...
</p><p>
The corruption went much better than expected, with the dark powers looking favorable on your company.
<<Rep $g.offering>> offering|was lost forever to <<lore concept_mist>>.
</p><p>
The corruption attempt was successful.
<<Rep $g.offering>> offering|was lost forever to <<lore concept_mist>>.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did not borne result.
<<Rep $g.offering>> offering|was lost forever to <<lore concept_mist>>.
</p><p>
The power behind <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_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_master,
'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 <<lore concept_mist>>...
</p>/* PROOFREAD COMPLETE */
<<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.race_greenskin,
setup.trait.per_smart,
setup.trait.per_chaste,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* critical traits */
[
setup.trait.subrace_humandesert,
setup.trait.race_elf,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_slow,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.qres.Trait(setup.trait.vagina_tight),
setup.qc.Trait('merc1', setup.trait.vagina_gape)),
setup.qc.Trait('merc2', setup.trait.anus_gape),
setup.qc.IfActorSatisfyThen(
'merc2',
setup.qres.Trait(setup.trait.vagina_tight),
setup.qc.Trait('merc2', setup.trait.vagina_gape)),
],
],
],
[[setup.questpool.desert, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
Minotarus -- a half-man half-bull monsters living in the <<lore region_desert>>.
Although they have the figure of a humanlik, their thoughts consists of nothing
but plunging their massive rod into their next victim.
Such a horny creature poses constant threat onto the nearby settlements, and
occasionally bounties are posted to scare them away.
Bounties that you can take, as long as your slavers remain vigilant throughout the quest.
</p><p>
Your slavers managed to
<<uadv $g.merc1>> shoo away these minotaurs from around the nearby settlements
without using any violence.
For such splendid work,
<<if $g.negotiator.isHasTrait('per_sly')>>
as well as via <<reps $g.negotiator>> slyly delivered persuasions,
<</if>>
the settlements were more than happy to pay your
slavers an extra bonus.
</p><p>
Your slavers happened upon one such
minotaur in the middle of assaulting an unlucky traveler.
They were momentarily
mesmerized by the size of the minotaur's dick, before
<<uadv $g.merc1>> reminded the team of
their original mission and proceed to defeat and shoo away the beast from the land.
The traveler was certainly grateful for your help, and although your slavers accepted
the thanks, they did not do so out of the kindness of their hearts.
When the traveler handed over a pouch of thank-you-gold, your slavers
<<set _greedy = setup.selectUnit([$g.merc1, $g.merc2, $g.negotiator], {trait: 'per_frugal'})>>
<<if _greedy>>
(and especially the greedy bastard that is <<rep _greedy>>)
<</if>>
smiled much more sincerely.
</p><p>
Unfortunately, your slavers were lost in the vast <<lore region_desert>>.
With no minotaur in sight, they gave up after two weeks and returned to your fort.
</p><p>
Happening upon one such minotaur in the middle of assaulting an unlucky traveler,
your slavers were 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 with its sperm,
turned its gaze into your slavers and proceeded to breed them one by one.
Your slavers would need some time to recover from such ordeal, although to be
fair it was probably their own fault to begin with.
</p>/* PROOFREAD COMPLETE */
<<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_wolfkin,
setup.trait.subrace_humanvale,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
setup.qu.trader,
)
)>>
<<run new setup.QuestTemplate(
'delivery_service', /* key */
'Delivery Service', /* Title */
'darko', /* author */
['desert', 'money'], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trader1': _trader,
'trader2': _trader,
'trainer': setup.qu.slavetrainer,
'pony': [setup.qu.slavepony, 2],
},
{ /* actors */
'client': 'all',
},
[ /* 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, setup.rarity.uncommon],], /* quest pool and rarity */
[
setup.qres.HasSlaveWithTraits([setup.trait.training_pony_basic]),
], /* prerequisites to generate */
)>><p>
The eastern nomads are known for their prowess in riding and taming horses.
Amongs the multiple clans in the east, there is one in particular which specializes
in training people as ponies. These clans raise 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 transport some goods. These steeds always wear their
standard pony gear at all times -- a bit gag, a pony plug, and a pair of 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.
<<They $g.client>> specifically wants your slavers to deliver the cargo using one of your pony slaves,
to show <<their $g.client>> goodwill for the clan.
You can take the offer and give your pony slaves some fresh air in the deserts,
but a journey to the eastern desert will surely take a little 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 could be used as a reward or punishment for your pony slave.
Before heading back, your slavers spent some time looking around the camp,
observing some the camp's pony trainers training their newer and freshly captured
ponies to properly trot.
<<set _cruel = setup.selectUnit([$g.trader1, $g.trader2, $g.trainer], {trait: 'per_cruel'})>>
<<if _cruel>>
<<Rep _cruel>> cruelly smirked as <<they _cruel>> watched one of the pony-in-training yelped
through its gag as it was whipped for being too slow on the trot.
<</if>>
<<set _kind = setup.selectUnit([$g.trader1, $g.trader2, $g.trainer], {trait: 'per_kind'})>>
<<if _kind>>
<<Rep _kind>> could not watch anymore as the kind slaver was not completely fine watching
others suffer like that.
<</if>>
</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 sent <<their $g.client>> good regards to your client.
Before heading back, your slavers spent 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 seemed that <<rep $g.pony>>
pony|was just not fast enough. You made a mental note 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>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Valuable Slave', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.value_high4, setup.trait.value_high5, setup.trait.value_high6], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'a_bargainatany_price', /* key */
'A Bargain at any Price', /* Title */
'darko', /* Author */
[ 'desert', 'veteran', 'danger', 'upgrade', 'legendary',
], /* tags */
4, /* weeks */
20, /* quest expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'negotiator': setup.qu.abyssal_negotiator,
'bimbo': setup.qu.bimbo,
'offering': _criteriaslave, },
{ /* actors */
},
[ /* costs */
],
'Quest_a_bargainatany_price',
setup.qdiff.hell56, /* difficulty */
[ /* outcomes */
[
'Quest_a_bargainatany_priceCrit',
[
setup.qc.Item(setup.item.dark_technology),
setup.qc.MissingUnitForever('offering'),
setup.qc.MoneyNormal(), ],
], [
'Quest_a_bargainatany_priceCrit',
[
setup.qc.Item(setup.item.dark_technology),
setup.qc.MissingUnitForever('offering'),
setup.qc.MoneySmall(),
setup.qc.Corrupt('bimbo'), ],
], [
'Quest_a_bargainatany_priceCrit',
[
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('bimbo'),
setup.qc.Corrupt('offering'),
setup.qc.Corrupt('offering'),
setup.qc.Corrupt('offering'), ],
], [
'Quest_a_bargainatany_priceCrit',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.MissingUnit('bimbo'), ],
], ],
[
[setup.questpool.desert, setup.rarity.legendary],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.dark_technology), ], /* restrictions to generate */
)>><p>
<<lore concept_mist>> is often very thin at some
remote parts of the <<lore region_desert>>.
In these places, it is sometimes possible to communicate with the demonic
forces beyond, to bargain for demonic treasures that would not exist in the
mortal plane.
While the risk is absolutely profound, the benefits often outweights the risks.
</p>
<p>
You can try to send a group of slavers to barter a sufficiently valuable slave in exchange for
a forbidden knowledge. As a backup, one of your slavers should also be completely prepared
should the fickle demon asked for a demonstration of the slave.
This quest will long and dangerous, and it is completely unclear what kind of benefit
you could possibly reap from it, but it might just give you a knowledge far beyond anything you
could find normally.
</p><p>
Having journeyed for a week straight, your slavers arrived at the target
place. <<lore concept_mist>> was indeed very thick in the location, and your slavers swore they
could hear otherworldly moans echoing throughout the oasis,
as well as the sounds of breasts lactating milk from all around the area.
A sudden daze assaulted your team, and
within moments, they somehow found themselves having been transported into a completely
different realm that they could only describe as hell.
</p>
<p>
A minor prince from the land beyond <<lore concept_mist>> has taken an interest in your slavers'
merchandise, and also in <<yourrep $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>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<<if $gOutcome == 'crit'>>
<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 corrupted knowledge. <<Rep $g.bimbo>> bimbo|was returned to you
before <<they $g.bimbo>> took any permanent damage from being used in such an
otherworldly location.
</p>
<<else>>
<p>
The prince prolonged the negotiations as much as he can.
While the time was wasting, his many conjured
clones were violently using your wares.
Ultimately, through <<reps $g.negotiator>> deft negotiation skills, <<they $g.negotiator>>
<<uadv $g.negotiator>> reached an agreement where <<rep $g.offering>> offering|was
permanently exchanged with a small piece of corrupted knowledge.
<<Rep $g.bimbo>> bimbo|was returned to you after much use, which left <<them $g.bimbo>> rather
corrupted by the experience.
</p>
<</if>>
<p>
The demon flicked its fingers, and your slavers found themselves back at the desert,
two weeks having passed during their absence.
After recuperating in a nearby settlement, they headed home victorious, with
forbidden knowledge in <<uhand $g.bimbo>>.
</p>
<p>
<<Reps $g.offering>> fate is unknown, but there are little left to
imagination what could happen to slaves in such a debauched palace.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The prince prolonged the negotiations as much as he can.
While the time was wasting, his many conjured
clones were violently using your wares.
Even with the sacrifices of your slaves and <<yourrep $g.bimbo>>, the negotiation
did not go through.
When <<rep $g.negotiator>> <<uadv $g.negotiator>>
raised the prince's ire, your slavers found themselves transpored back at the desert,
with two weeks apparently had passed in their absence.
The cum-soaked <<rep $g.offering>> and <<rep $g.bimbo>> were also found next to them,
having been severely used, abused, and corrupted beyond recognition.
After recuperating in a nearby settlement, your slavers headed home defeated.
</p>
<<else>>
<p>Unfortunately, your slavers were deceived by the demon.
The contract sealed
both <<reps $g.negotiator>> and <<reps $g.bimbo>> fates, without gaining
anything in return.
The prince gave no chance to regain them back as
<<yourrep $g.negotiator>> and <<utheirrel $g.negotiator $g.trainer>> <<rep $g.trainer>>
suddently found themselves back at the desert, with two weeks apparently had passed in
their absence.
Having no way to contact their missing ally, they headed home, utterly defeated.
</p>
<p>
The fates of
<<rep $g.offering>> and <<rep $g.bimbo>> are unknown, but there are
surprisingly little left to imagination what could possible happen to slaves in such a
debauched palace.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Defiant Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.HasTag('in_training_defiant_slave'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'bargain_with_the_devil', /* key */
"Bargain with the Devil", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'desert',
],
4, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'guard2': [ setup.qu.guard, 1],
'guard1': [ setup.qu.guard, 1],
'negotiator': [ setup.qu.abyssal_negotiator, 1],
},
{ /* actors */
'demon': 'subrace_demon',
},
[ /* costs */
setup.qc.Favor('demon', -800),
],
'Quest_bargain_with_the_devil',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_bargain_with_the_devilCrit',
[
setup.qc.Outcomes('success'),
setup.qc.SlaverMarker('demon'),
],
],
[
'Quest_bargain_with_the_devilCrit',
[
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
setup.qc.TraitRemove('slave', setup.trait.will_defiant),
setup.qc.AddHistory('slave', "a|was broken by demons from beyond <<lore concept_mist>> using unspeakable methods"),
setup.qc.Injury('slave', 25),
setup.qc.TraumatizeRandom('slave', 9999999),
],
],
[
'Quest_bargain_with_the_devilCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_bargain_with_the_devilCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
After scouring through history books on how slaves were broken in the past,
there was one common thing that seems to guarantee success: bargain with the
demons of <<lore concept_mist>>. If one knows where to look in the history books, there
are numerous records of heroic warriors who were sent into <<lore concept_mist>> and came
out as a slut, having been trained extensively by the demon's numerous cruel
devices.
</p>
<p>
If you have some contacts in the land beyond <<lore concept_mist>>, you could perhaps ask
them to take in <<yourrep _u>> for a few weeks. Granted, the demons will
likely take this request in exchange for the favor they owed you, but
having an opportunity to break the defiant mind of <<rep _u>> is not
something you can just easily pass. Still, you have heard rumors about the
unspeakable torture the demons would inflict upon those unlucky mortal, and
you can only imagine what kind of trauma <<rep _u>> will end up <<dangertext 'permanently'>>
with should you go through with this idea...
</p>
<</if>><<if $g.demon.isMale() && $g.slave.isMale()>>
<<questimage "bargain_with_the_devil_male.jpg">>
<</if>>
<p>
Having secured a bargain with your demonic contact, your team arrived at the
predetermined location — an ancient ruins in the middle of nowhere in the
<<lore region_desert>>. Once there, <<rep $g.negotiator>> could suddenly feel the air shifted
as a demonic portal formed before your slavers' eyes. From within, a demon
<<lady $g.demon>> clad in full latex gear came out, with
<<their $g.demon>> pet mortal, an
<<if $g.slave.isMale()>>
utterly handsome and well built male dressed in nothing but a collar and a leash,
<<else>>
utterly beautiful and well-toned female dressed in nothing but a collar and a leash,
<</if>>
surely part of <<their $g.demon>> training for breaking <<yourrep $g.slave>>.
Seeing the cruel grin in the demonic lady's face, <<rep $g.guard1>> swore that
<<they $g.guard1>> saw fear starting to form in the defiant slave's eyes, but
before long both the demon and <<yourrep $g.slave>> vanished out of thin air.
</p>
<p>
Your slavers spent the next few weeks in the nearest city, getting themselves
as drunk as possible while having the tavern wenches serve their every needs,
trying their best not to imagine what fate they had sent <<rep $g.slave>> to.
Once a few weeks had passed, your slavers returned to the same ruins they
went to before. The demon <<lady $g.demon>> casually awaited them there, before
tossing the badly damaged body of <<rep $g.slave>>. Fearing the worst,
<<yourrep $g.negotiator>> approached the body, but to <<their $g.negotiator>>
relief, the slave was still breathing and well. But the change in <<their
$g.slave>> <<ueyes $g.slave>> was apparent:
<<if $g.slave.isHasTrait('per_stubborn')>>
there was almost no trace of the stubbornly defiant eyes the slave used to glare at your slavers with.
<<elseif $g.slave.isHasTrait('per_dominant')>>
the slave almost feels submissive, a strong contrast with <<their $g.slave>> dominant former slave.
<<elseif $g.slave.isHasTrait('per_brave')>>
there were traces of fear lining in <<their $g.slave>> eyes now, a strong
contrast from <<their $g.slave>> once brave self.
<<else>>
there were no trace of the fire of defiancy that once burned so brightly in <<their
$g.slave>> before.
<</if>>
The demon was good at <<their $g.demon>> job: the slave was left broken, damaged, but otherwise
not fully mindbroken.
As <<rep $g.guard1>> picked up the barely functional body of <<rep $g.slave>>
for the trip home, the demon
<<if $g.demon.isFemale()>>
blew your slavers a kiss
<<else>>
let out a menacing growl
<</if>>
before asking your slavers to send a message to you that the bargain had been completed, and then vanishing
into thin air.
</p>
<p>
Once back at the fort, your slave will definitely need a long rest after
these trials. But something else seems to have also broke inside the slave —
and a life-lasting trauma is going to haunt <<them $g.slave>> for the rest of
<<their $g.slave>> life... Ah well, it's not like a trauma or two is going to
affect a slave's purpose: to serve you and whoever you decide to be <<their
$g.slave>> <<master $unit.player>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"blacksmith_orders0",
"Desert Blacksmith",
'subrace_humankingdom', /* pools */
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.bg_royal,
setup.trait.bg_noble,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_smart,
setup.trait.tough_nimble,
setup.trait.per_gregarious,
setup.trait.skill_ambidextrous,
],
[
setup.trait.bg_slave,
setup.trait.muscle_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_slow,
setup.trait.per_direct,
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.SetCooldownQuest(null, 40),
setup.qc.Leave('taster', "a|continue to help out a master blacksmith for a while longer in exchange for a valuable weapon", 3),
],
],
[
'Quest_blacksmith_ordersCrit',
[
setup.qc.SetCooldownQuest(null, 40),
setup.qc.Injury('taster', 2),
setup.qc.Injury('apprentice1', 1),
],
],
[
'Quest_blacksmith_ordersFailure',
[
setup.qc.SetCooldownQuest(null, 40),
setup.qc.Injury('apprentice1', 3),
setup.qc.Injury('apprentice2', 2),
setup.qc.Injury('taster', 6),
],
],
[
'Quest_blacksmith_ordersFailure',
[
setup.qc.SetCooldownQuest(null, 40),
setup.qc.Leave('apprentice1', "a|is working overtime with a certain master blacksmith as recompense for a|their incompetence", 4),
setup.qc.Leave('apprentice2', "a|is working overtime with a certain master blacksmith as recompense for a|their incompetence", 4),
setup.qc.Leave('taster', "a|is working overtime with a certain master blacksmith as recompense for a|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, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
As you enter your office today, <<yourrep _u>> stood there waiting with a
letter in <<uhand _u>>. 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 <<successtext "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 <<yourrep $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>> did 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, <<reps $g.taster>> talent in ambidexterity has earned
many favors 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('tough_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>> taster|was 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 <<therace $g.taster>>'s work, <<they $g.smith>> gave
<<yourrep $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 <<theslaver $g.taster>>.
</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 <<yourrep $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 <<theslaver $g.taster>>
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. In the end, <<rep $g.apprentice1>> and
<<utheirrel $g.apprentice1 $g.apprentice2>> <<rep $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 thanks to
<<their $g.smith>> dissatisfaction with <<rep $g.taster>>.
Still, the smith did not lie, and the log bore an inscription of <<their
$g.smith>> work. It could end up worth a good amount of coins for certain
antiquity 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 <<reps $g.taster>> superb work (and your other slavers too, you
suppose), your slavers returned not with one, but with two copies of <<rep
_weapon>>. But this was in exchange for having <<rep $g.taster>> continue
toiling away for a few more weeks under the metalworker's watch. 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 passed by quickly 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,
who tossed <<rep $g.taster>> freshly hammered swords, axes, and various weapons
one after another.
</p>
<<if $gOutcome == 'failure'>>
<p>
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>
<<else>>
<p>
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 was unhappy about.
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 did not sound
good.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_capturethe_protagonist1',
'leader',
'all', /* pools */
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', 'rare',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'tank': setup.qu.tank,
'dps': setup.qu.dps,
'healer': setup.qu.healer, },
{ /* actors */
'leader': 'quest_capturethe_protagonist1', },
[ /* costs */
],
'Quest_capturethe_protagonist',
setup.qdiff.hardest44, /* difficulty */
[ /* outcomes */
[
'Quest_capturethe_protagonistCrit',
[
setup.qc.Slave('leader', 'a|was a leader of an adventurer group who sacrificed a|themself in order to let a|their friends escape'),
setup.qc.Equipment(setup.equipmentpool.combat_good), ],
],
[
'Quest_capturethe_protagonistCrit',
[
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_protagonistFailure',
[
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, setup.rarity.epic],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The <<lore region_desert>> 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 glory.
</p>
<p>
You have heard of a relatively new but particularly well equipped adventuring
company who just went into the deserts. Their 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
catch yourself some new rare breed of adventuring 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 enough -- these adventurers
were still green, and it showed.
<<set _att = setup.selectUnit([$g.tank, $g.dps, $g.healer], {trait: 'per_attentive'})>>
<<set _dreamy = setup.selectUnit([$g.tank, $g.dps, $g.healer], {trait: 'per_dreamy'})>>
<<if _att>>
<<Reps _att>> attentiveness means <<theslaver _att>> never failed to notice the next camping spots,
and
<<elseif _dreamy>>
<<Rep _dreamy>> did not help much with the tracking (given how inattentive <<therace _dreamy>> is),
but the other slavers were able to pick up the slack, and
<<else>>
A few abandoned campfires were passed by until a recent footsteps in the deserts was visible,
and
<</if>>
soon enough the party was in view.
Your slavers found the adventurers resting near an empty oasis. Your slavers waited until the night fall
before <<uadv $g.tank>> launching a sudden attack on the encampment as you see them
strip to bathe in the oasis.
</p>
<<if $gOutcome == 'crit'>>
<p>
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
<<their $g.leader>> friends some time to escape.
</p>
<p>
As a result, your slavers were able to subdue the leader alone.
They bound the still naked leader, to be carried home as a prize, but not before
looting the campsite and pawning everything of value found there, as well as taking
one of the more valuable-looking piece of armor.
</p>
<<else>>
<p>
Despite them being naked with their genitals lewdly flopping around,
the adventurers were able to put up a decent fight, until at one point their hedge
wizard was able to cast a teleportation spell, teleporting the adventurers to
safety. With nobody around the campsite anymore, your slavers got to work and
stripped the encampment of anything of value. They sold most of the valuables
before coming back with the money and a particularly valuable piece of gear that
they decided to keep.
</p>
<</if>><p>
Your slavers were able to pick up the trail easily enough.
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 ensued.
</p>
<<if $gOutcome == 'failure'>>
<p>
<<Rep $g.tank>> tried <<their $g.tank>> best to withstood all the enemy
attacks while <<rep $g.healer>> healed as much as possible from behind.
But it was not enough.
A stray arrow caught <<rep $g.healer>> in its wake and soon after
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 from
their injuries back at the fort.
</p>
<<else>>
<p>
Your slavers stood no chance as the adventurer's resident wizard overwhelmed <<reps
$g.tank>> defenses. Soon enough all three of your slavers were at the
adventurer's mercy, who decided to strip them naked and used them as the sexual
playthings for the next few nights. After few long nights of being used as toys,
they released your slavers except one that the adventurers had grown attached to and decided
to keep as a pet and a mascot.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'from_beyond', /* key */
'From Beyond', /* Title */
'darko', /* Author */
[
'special',
'unit',
'danger',
'desert',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'warrior1': setup.qu.light_warrior,
'warrior2': setup.qu.light_warrior,
'purifier': setup.qu.purifier, },
{ /* actors */
'slaver': 'missingslavers', },
[ /* costs */
],
'Quest_from_beyond',
setup.qdiff.hard42, /* difficulty */
[ /* outcomes */
[
'Quest_from_beyondCrit',
[
setup.qc.Slaver('slaver', '', false),
setup.qc.RemoveFromUnitGroup('slaver'),
setup.qc.MoneyNormal(), ],
], [
'Quest_from_beyondCrit',
[
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_beyondCrit',
[
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'),
setup.qc.Corrupt('purifier'),
setup.qc.Injury('warrior1', 2),
setup.qc.Injury('warrior2', 2), ],
], [
'Quest_from_beyondCrit',
[
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, setup.rarity.uncommon],
],
[
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslavers),
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
The <<lore region_desert>> is infamous for hosting many areas that are thick
with <<lore concept_mist>>.
These areas occasionally allow passage between this world and the next.
While normally this would be of no interest to you, there are
rumors that the lusty moans of <<rep $g.slaver>>, one of your former slavers, could occasionally
be heard from the area.
</p>
<p>
In fact,
you have heard that one of these areas has gone so unstable that
a gateway can be seen materializing, opening up a way into the land beyond <<lore concept_mist>>.
It might just be possible for a group of purifiers to attempt to cross <<lore concept_mist>>
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 no doubt very dangerous, and you must be prepared for your
slavers to come back corrupted or worse.
</p><p>
Led by <<rep $g.purifier>>, your slavers
<<uadv $g.purifier>>
braced through the narrow gap in <<lore concept_mist>> into the debauched
land beyond.
<<if $gOutcome == 'crit'>>
Ignoring all the demons and slaves writhing around them, your slavers
moved with the singular purpose of locating <<rep $g.slaver>>. Scouring room
through room without looking too much at all the broken slaves caged inside tiny
compartments, they finally found <<rep $g.slaver>> being mercilessly fucked
by a large demon. With a surprise attack, <<yourrep $g.warrior1>> and <<rep $g.warrior2>> subdued
the demon while <<rep $g.purifier>> saved <<rep $g.slaver>> before together,
they exited <<lore concept_mist>>. All in all, it was a successful mission, and
despite having just experienced such a harrowing experince, your slavers somehow managed to
keep <<rep $g.slaver>> relatively unchanged from the last time you saw <<them
$g.slaver>>.
<<elseif $gOutcome == 'success'>>
They were 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, they tried their best to ignore the many
visions within
They finally found <<rep $g.slaver>> being milked dry above a nasty looking
ritual chamber. Your slavers attempted to undo <<reps $g.slaver>> binding,
but then a slew of demonkins appeared who proceeded to cast various dark spells. <<Rep $g.purifier>>
tried <<their $g.purifier>> best to shield against the spells until finally
<<rep $g.slaver>> slaver|was freed. Together, your slavers ran back to the
entrance and escaped through the same gap they used earlier.
<<else>>
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>> purifier|was already
tied up in one of the cages while <<rep $g.warrior1>> and <<rep $g.warrior2>>
were being anally used by two demonkin guards. With the senses regained, your slavers attempted to
break free and escape the place before much 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.
<<if $gOutcome == 'disaster'>>
Or so they thought until they realize that one of them went missing.
<</if>>
<</if>>
</p>
<<if $gOutcome == 'success'>>
<p>
The experience of being a demon plaything had physically changed <<rep
$g.slaver>> — even some of your slavers were also affected during their time
there. They can be purified later, should the opportunity arises.
</p>
<<elseif $gOutcome == 'failure' || $gOutcome == 'disaster'>>
<p>
During their time beyond <<lore concept_mist>>, they found no signs of <<rep $g.slaver>>.
Perhaps you can encounter the former slaver again some other time.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criterianavigator = new setup.UnitCriteria(
null, /* key */
'Mist Navigator', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.corruptedfull,
setup.trait.per_attentive,
setup.trait.per_stubborn,
setup.trait.per_lunatic,
setup.trait.magic_fire_master,
setup.trait.magic_dark_master,
],
[
setup.trait.bg_mythical,
setup.trait.bg_priest,
setup.trait.bg_slave,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.magic_light_master,
setup.trait.magic_water_master,
setup.trait.join_junior,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.bg_mist, setup.trait.race_demon, setup.trait.magic_dark_master, setup.trait.corruptedfull, setup.trait.magic_fire_master], true),
],
{
knowledge: 1,
arcane: 2,
}
)>>
<<set _criteriamember = new setup.UnitCriteria(
null, /* key */
'High Society Member', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.face_beautiful,
setup.trait.corruptedfull,
setup.trait.per_attentive,
setup.trait.per_frugal,
setup.trait.per_lustful,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_dark_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_mythical,
setup.trait.bg_priest,
setup.trait.face_hideous,
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_lavish,
setup.trait.per_kind,
setup.trait.per_sexaddict,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_fire_master,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
social: 2,
arcane: 1,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
setup.trait.corruptedfull,
setup.trait.bg_mythical,
setup.trait.bg_royal,
setup.trait.value_high5,
setup.trait.value_high6,
setup.trait.training_mindbreak,
],
[
setup.trait.training_none,
setup.trait.value_low,
setup.trait.dick_tiny,
setup.trait.breast_tiny,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.corrupted),
setup.qres.NoTrait(setup.trait.race_demon),
],
{
}
)>>
<<run new setup.QuestTemplate(
'high_demon_society', /* key */
"High Demon Society", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'veteran',
'prep',
'order',
'rare',
],
4, /* weeks */
10, /* expiration weeks */
{ /* roles */
'wizard': [ setup.qu.arcanedarkveteran, 1],
'navigator': [ _criterianavigator, 1],
'member': [ _criteriamember, 1],
'slave': _criteriaslave,
},
{ /* actors */
'm1': 'subrace_demon',
'm2': 'subrace_demon',
},
[ /* costs */
],
'Quest_high_demon_society',
setup.qdiff.hard46, /* difficulty */
[ /* outcomes */
[
'Quest_high_demon_societyCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_high_demon_societyCrit',
[
setup.qc.SetCooldownQuest(null, 25),
setup.qc.VarRemove('high_demon_society_fulfilled'),
],
],
[
'Quest_high_demon_societyCrit',
[
setup.qc.Outcomes('success'),
setup.qc.SlaveOrderHighDemonCommunity('punishment'),
],
],
[
'Quest_high_demon_societyCrit',
[
setup.qc.Outcomes('success'),
setup.qc.SlaverMarker('m1'),
setup.qc.SlaverMarker('m2'),
setup.qc.SlaveOrderHighDemonCommunity('punishment'),
setup.qc.SlaveOrderHighDemonCommunity('punishment'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Many curiosity lies in the land beyond <<lore concept_mist>>. While most of it consists of
tools related to rough and abusive sex, some demons "prefer" a more nuanced approach to sex.
</p>
<p>
...or so <<yourrep _u>> has so <<uadv _u>> explained, while you stare at the
letter that has arrived at your fort, inviting you to participate in a gathering held by the
High Demon Society. According to the letter, your exploits have reached the
demon society, and they would be very much glad indeed if you can send a team
of slavers to attend, for the society has need of a slaving company. You have
never heard of this society before, but the letter's handwriting was
impeccable, as if written by the utmost gentle<<man $g.m1>>.
</p>
<p>
While the society has given you their address, it is a rather obscure place
within <<lore concept_mist>>. It will be incredibly difficult to actually
navigate there without getting lost in the corruption. First of all, a wizard
proficient in <<lore magic_dark>> is absolutely necessary for the task. On
top of that, a slaver familiar with navigating within <<lore concept_mist>>
is also necessary. There is no doubt mind games will be played once your
slavers arrive at their destination, and a skilled negotiator is required for
the task. A sufficiently corrupted slave is also needed to demonstrate
that your slavers are up for whatever task the demon might require.
</p>
<p>
Who knows what rewards you could possibly get from a slave order as rare as this one?
</p><<if $g.slave.isMale()>>
<<questimage 'high_demon_society_male.jpg'>>
<<else>>
<<questimage 'high_demon_society_female.jpg'>>
<</if>>
<p>
With a harrumph, <<yourrep $g.wizard>> <<uadv $g.wizard>> opened the gate for
<<rep $g.navigator>> and <<utheirrel $g.navigator $g.member>> <<rep
$g.member>> to enter together with the slave <<rep $g.slave>>. But this was
merely the start of your slavers journey inside <<lore concept_mist>>, and
<<rep $g.wizard>> must hold the fort all the while <<their $g.wizard>>
teammates ventured inside the portal...
</p>
<p>
The land beyond <<lore concept_mist>> was a confusing place, with debauchery
widespread in every step your slavers took.
<<if $g.navigator.isHasTrait('race_demon')>>
But it was a familiar settings for <<therace $g.navigator>>, and
<<rep $g.navigator>> guided <<utheirrel $g.navigator $g.member>> <<rep $g.member>> throughout the
confusing place, occasionally stealing a glance or two on the
<<maiden $g.m2>> being used cruelly by the demons on the sidewalks.
<<elseif $g.navigator.isHasTrait('bg_mist')>>
But it was a familiar settings for <<yourrep $g.navigator>>, whose past
occupation were to travel in and out of <<lore concept_mist>>.
<<elseif $g.navigator.isHasTrait('corruptedfull')>>
But <<reps $g.navigator>> fully corrupted body was attuned to the corrupted
place, giving <<them $g.navigator>> the guidance <<they $g.navigator>>
required to navigate through the accursed place.
<<elseif $g.navigator.isHasTrait('magic_fire_master')>>
Thankfully, <<reps $g.navigator>> mastery over <<rep
setup.trait.magic_fire_master>> was enough to ward off the corruption and
illuminate the path that your slavers needed to take to reach their destination.
<<elseif $g.navigator.isHasTrait('magic_dark_master')>>
But <<rep $g.navigator>> navigator|is no stranger to corruption, and using
<<their $g.navigator>> mastery over <<rep setup.trait.magic_dark_master>>,
navigator|was able to effectively guide them into their destination.
<</if>>
After a few days of journey, they arrived at the address.
</p>
<p>
In the address stood an almost pristine mansion, contrasting the backdrop of
debauchery and corruption. After gazing in awe for a few moment, <<rep
$g.member>> regained <<their $g.member>> composure before <<uadv $g.member>>
knocking on the door.
A well-dressed demon <<lady $g.m1>> opened the door for your slavers, and
with a well practiced bow greeted your slavers before escorting them into the
ball.
</p>
<p>
On a first glance, the ball looked like a regular masked party, with masked
people walking all around chatting with each other. Well, except for the
occassional tail, wings, and tentacles that were abound, as well as several
slaves on leashes held by their owners. Keeping the slave <<rep $g.slave>>
on a short leash, <<yourrep $g.member>> prepared <<themself $g.member>> as <<they
$g.member>> entered the ball...
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<<set _rewards = [
"money",
"favor",
"equipment",
"slaver",
"potion",
]>>
<<if !$inventory.isHasItem(setup.item.sexmanual_facesit)>>
<<run _rewards.push('sexmanual')>>
<</if>>
<<run setup.rng.shuffleArray(_rewards)>>
<<set _received = [_rewards[0], _rewards[1]]>>
<<if $gOutcome == 'crit'>>
<<run _received.push(_rewards[2])>>
<</if>>
<p>
<<Yourrep $g.member>> <<uadv $g.member>> navigated through the various
conversations taking place in the ball, and while each appeared innocuous on
the surface, <<rep $g.member>> member|was fully aware that every single word
carried a bigger meaning than they conveyed. It would just take a single wrong
word to come out from <<them $g.member>> for everything to fall apart. But
<<rep $g.member>> member|was sufficiently capable for the job, and member|was able to
navigate through the endless deception.
</p>
<<for _rew range _received>>
<p>
<<if _rew == 'money'>>
During one of <<their $g.member>> conversations, <<rep $g.member>> secured a
very strong deal for exchanging one of your more corrupted slaves with a
great sum of money. <<Rep $g.member>> had to basically hold their breath
throughout the exchange with the intimidating masked <<lady $g.member>>,
holding a leash to a humanlike puppy so muscular it could not have been
natural.
<<elseif _rew == 'favor'>>
<<rep $g.member>> managed to secure some time with a young demon noble — or
at least a demon noble that appeared young. The noble agreed to exchange a
particularly corrupted slave from your compound in exchange for <<their
$g.m2>> endorsement of your company. While this sounded like a scam, <<rep
$g.member>> managed to convince you that the noble was the real deal.
<<elseif _rew == 'equipment'>>
<<rep $g.member>> member|was approached by a muscle-bound demon, who asked for
a sufficiently corrupted slave to replace <<their $g.m2>> broken ones. In
exchange, the demon blacksmith, as it turned out,
offered some of <<their $g.member>> creations
to your slavers — rare equipments from beyond <<lore concept_mist>>.
<<elseif _rew == 'slaver'>>
<<rep $g.member>> member|was approached by something that was best described as
a creature. The creature was shrouded in darkness, and <<yourrep $g.member>> member|was not able to
discern nor hear the creature, but somehow at the end of the "conversation",
<<they $g.member>> had a slave order in <<uhand $g.member>>, with no memory how the
order was negotiated or formed...
<<elseif _rew == 'potion'>>
<<rep $g.member>> caught the attention of a certain sadistic <<succubus
$g.m1>>, who delights in nothing more but breaking a slave again and again.
Looking to expand <<their $g.m1>> slave repertoire, <<they $g.m1>> offered
your slaver to purchase a slave from your company, in exchange for
<<if $inventory.isHasItem(setup.item.technology_blank)>>
the rare and elusive <<rep setup.item.technology_blank>>.
<<else>>
a large amount of <<rep setup.item.blank_potion>>.
<</if>>
Truly a deal your slaver could not refuse...
<<else>>
The host — a strange half-demon half-<<if
$settings.bannedtags.furry>>human<<else>>werewolf<</if>> <<man $g.m2>> —
personally greeted your slaver. As a thank you for coming, <<they $g.m2>>
kindly offered to purchase a slave from your company, in exchange for an
elusive tome, the <<rep setup.item.sexmanual_facesit>>. As the host busily
attended to the other participants, your slaver pondered on the order at hand...
<</if>>
</p>
<<run setup.qc.SlaveOrderHighDemonCommunity(_rew).apply($gQuest)>>
<</for>>
<p>
After a few long hours, the ball drew to a close. With several slave orders
at hand, <<yourrep $g.member>> returned to where <<rep $g.navigator>> had
<<uadv $g.navigator>> waited for <<their $g.member>> return, before traveling
back through the corruption and into the portal. They eventually arrived back
at your fort, somehow suffering no corruptions despite their long stay in
<<lore concept_mist>>. Perhaps this too was thanks to the High Demon Society?
</p>
<<else>>
<p>
After a long while, <<rep $g.member>> returned from the ball to the waiting
<<rep $g.navigator>>, seemingly happy with their work, with
<<if $gOutcome == 'failure'>>
a slave order
<<else>>
two slave orders
<</if>>
to their name.
Your slavers eventually returned back home, and only then they realize that
they had been duped by demons.
The slave orders they had secured was nothing but scams, with fine-prints all abound the
slave order. After calculating, it seems you will make a profit of a mere
<<money 15>> from the order. To make matters worse, were you to disregard the
slave order all along, you will no doubt greatly raise the ire of the demons,
which is never a wise thing to do...
</p>
<p>
<<Rep $g.member>> never realized <<they $g.member>> had been duped
until much, much later. The High Demon Society was truly a
frightening place, where they could convince even your
<<uadjgood $g.member>> slaver that such a terrible deal was beneficial for the
company. There is nothing you can do now except to bear through the deal, and
hope that next time you will get a better one.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_loot_the_loot1',
"Human (Desert): All gender",
'subrace_humandesert', /* pools */
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",
'subrace_humandesert', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scavenger1': setup.qu.scavenger,
'scavenger2': setup.qu.scavenger,
'carrier': setup.qu.carrier, },
{ /* actors */
'raider': 'quest_loot_the_loot1',
'villager': 'quest_loot_the_loot2', },
[ /* costs */
],
'Quest_loot_the_loot',
setup.qdiff.normal37, /* difficulty */
[ /* outcomes */
[
'Quest_loot_the_lootCrit',
[
setup.qc.Slave('raider', 'a|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', 'a|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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The <<lore region_desert>> are choke-full of raiders.
News of a settlement being raided comes everyday, and in fact,
you have learned about one such unfortunate settlements
which just got freshly raided.
It is highly likely that the raiders were not thorough,
and whatever survived the raid would make an easy picking for
your slavers if you are looking for a cheap human slave.
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>>
raider|was unable to fight back when your slavers
<<uadv $g.scavenger1>>
decided that the raider would make a much better slave than the rest of the
settlement's survivors.
</p><p>The raiders were not at all thorough with the place — they
indulged too much in using the villagers sexually and were sloppy during the
looting.
<<set _att = setup.selectUnit([$g.scavenger1, $g.scavenger2, $g.carrier], {trait: 'per_attentive'})>>
<<if _att>>
<<Rep _att>> attentively found several buildings that are still perfectly lootable.
<</if>>
Your slavers <<uadv $g.scavenger1>>
managed to picked many of the locks and looted some of the still-locked
containers in the settlement. They also found an unfortunate villager who
they deemed sufficiently fit as a slave and brought back home.
</p><p>
Unfortunately, in an unexpected twist the ruins of the settlement were picked clean
by an unusually thorough group of raiders. On the way back,
they were attacked by several desert scorpions giving your slavers minor injuries.
</p><p>
The raiders apparently was hiding in the village, knowing full well that it
would attract scavengers, which they hoped to enslave.
Still, your slavers were not defenseless, and after a ruthless fight managed to retreat to safety
albeit sustaining heavy injuries.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'milking_season', /* key */
'Harvesting Season', /* Title */
'darko', /* Author */
[ 'desert', 'money', 'item'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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_seasonCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_milking_seasonCrit',
[
],
], [
'Quest_milking_seasonCrit',
[
setup.qc.MissingUnitRecapture('negotiator', 'capturedmedium'),
setup.qc.MoneyNormal(), ],
], ],
[
[setup.questpool.desert, setup.rarity.uncommon],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Among the various clothing materials available in <<lore continent_main>>, the soft yet
durable silk is one of the rarest and most sought-after materials. Clothings made from silk is
especially suitable for ranger-related duties. It is said that these silk are produced
at many farms in the <<lore region_desert>>, through secret techniques passed from
generation to generation. There are very few people who are privy to how these silks were actually 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.
But there must be a reason why such a seemingly easy job pays so well...
</p><<if $gOutcome == 'failure'>>
<p>
Unfortunately, by the time your slavers arrived at the farm, the harvesting
season was already over. Your slavers had no choice but to go back to the
fort, but they swore there was something completely wrong about these silks.
</p>
<<else>>
<p>
Your slavers arrived at the farm, whose outwards appearance betrayed no hint
of what lied beyond. An old-looking barn just like any other farm, but one
thing stood out — located in the middle of a desert, there was simply no place
to plant crops.
<<set _curious = setup.selectUnit([$g.milker1, $g.milker2, $g.negotiator], {trait: 'per_curious'})>>
<<if _curious>>
<<Rep _curious>>, being curious, looked even more around and yet only found more questions
as to how the farm functions.
<</if>>
</p>
<p>
The farm operators explained to your slavers what had to be done. There were
silk cocoons that they needed to harvest at the back of the farm. These cocoons are only
harvested once per year, and so during harvesting seasons such as this the
amount work became high enough to warrant the extra labor.
</p>
<<if $gOutcome == 'disaster'>>
<p>
By the time your slavers had finished the work and came back, <<rep
$g.negotiator>> negotiator|was 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
was little left to imagination what could possibly happened to <<rep $g.negotiator>>...
</p>
<<else>>
<p>
Hence your slavers went to the back barn, and began their work. They managed
to harvest <<if $gOutcome == 'crit'>>
high quality silk, which earned your company an extra reward.
<<else>>
the silk without any problem.
<</if>>
Your
slavers then went back to fort, succeeding in their tasks.
</p>
<p>
Having read such an undetailed report, you later asked your slavers for more
information.
<<if $gOutcome == 'crit'>>
Your slavers
were being extremely vague about what exactly the harvesting procedure is,
but apparently you managed to gather that in the back of the barn, there were numerous
cocoons all hanging from the ceilings wrapped in what appears to be silk.
Each cocoon had a tap that your slavers had to harvest from, but the quality
apparently differed based on how experienced your slavers were. They
<<uadv $g.negotiator>>
refused to say more about the subject, including the details of these
cocoons. Having seen no benefit in pursuing further, given the quality of
their job you dropped the subject and moved on to your other work.
<<else>>
Your slavers <<uadv $g.negotiator>>
refused to talk more, but you get the feeling that something in the barn had
completely unnerved even your slavers. You decided not to push the issue and move on with your day.
<</if>>
</p>
<</if>>
<</if>><<run new setup.UnitGroup(
"mist_vacation0",
"Mist Slave",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Corrupt('unit', null, 3),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_basic),
setup.qc.TraitReplace('unit', setup.trait.training_pet_basic),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_lunatic, setup.trait.per_evil, setup.trait.per_sexaddict, setup.trait.per_submissive, setup.trait.per_masochistic], 1, true, true),
],
)>>
<<set _criteriaguide = new setup.UnitCriteria(
null, /* key */
'Mist Guide', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_sly,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.bg_priest,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_direct,
setup.trait.per_kind,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.bg_mist),
setup.qres.HasTag('mist_guide_slaver'),
],
{
intrigue: 1.5,
arcane: 1.5,
}
)>>
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
],
[
],
{
combat: 0.5,
intrigue: 0.5,
knowledge: 0.5,
social: 0.5,
aid: 0.5,
arcane: 0.5,
}
)>>
<<run new setup.QuestTemplate(
'mist_vacation', /* key */
"Mist Vacation", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'prep',
'item',
'desert',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'guide': [ _criteriaguide, 3],
'you': _criteriayou,
},
{ /* actors */
'demon': 'subrace_demonkin',
'slave': 'mist_vacation0',
},
[ /* costs */
],
'Quest_mist_vacation',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_mist_vacationCrit',
[
setup.qc.Slave('slave', "a|was a souvenir you and your slaver bought in the land beyond the Mist during a vacation there", undefined),
setup.qc.MoneyCustom(-1000),
setup.qc.Outcomes("success"),
],
],
[
'Quest_mist_vacationCrit',
[
setup.qc.RemoveTagGlobal('mist_guide_slaver'),
setup.qc.Item(setup.item.f_drinktray_good_slaver),
],
],
[
'Quest_mist_vacationCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Corrupt('you', null, 2),
],
],
[
'Quest_mist_vacationCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Corrupt('you', null, 3),
setup.qc.Corrupt('guide', null, 2),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('mist_guide_slaver'),
],
)>><<set _u = setup.getUnit({tag: 'mist_guide_slaver'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<<set $g.slaver = _u>>
<<include 'Event_mist_vacation'>>
<</if>><p>
<<Yourrep $g.guide>> showed that <<they $g.guide>> still got <<their $g.guide>> skills as a mistwalker. <<They $g.guide>> expertly chose the most suitable location within the sea of mist in the desert, and,
<<if $g.guide.isHasTrait('magic_dark')>>
use <<their $g.guide>> mastery over dark magic
<<else>>
use a scroll <<they $g.guide>> had purchased earlier (with your company's money, of course)
<<run setup.qc.Money(-500).apply($gQuest)>>
<</if>>
to open a gateway.
<<if $g.guide.isHasTrait('per_brave')>>
Without hesitation,
<<elseif $g.guide.isHasTrait('per_cautious')>>
After double-checking its safety,
<<else>>
Afterwards,
<</if>>
<<they $g.guide>> went into the portal, and you follow suit.
</p>
<p>
The land beyond <<lore concept_mist>> is not a location one would usually pick as a vacation place. Once inside, various debauched scenes unfold, and the screams of slaves could be heard from all across the realm. While normally these would unnerve any and all people, <<rep $g.guide>> guide|is quite used to it.
<<if $g.guide.isHasTrait('per_cruel')>>
The cruel slaver would let out a sadistic smile whenever the two of you pass through a well-abused slave.
<<elseif $g.guide.isHasTrait('corruptedfull')>>
The corruption permeating the slaver's entire body might have played a role too.
<<elseif $g.guide.isHasTrait('corrupted')>>
The corruption within the slaver's entire body might have played a role too.
<</if>>
The two of you walk around the area, and with <<rep $g.guide>> by your side, it was indeed almost like a proper vacation.
</p>
<p>
After strolling through the many well-abused slaves of various races, <<rep $g.guide>> brought you to meet one of <<their $g.guide>> old acquintance — a demonkin merchant living within the mist.
Thinking this might be a good place to buy you a souvenir, <<they $g.guide>>
<<if $g.guide.isHasTrait('per_frugal')>>
haggled with <<their $g.guide>> friend before browsing
<<else>>
browsed
<</if>>
through the wares, and picked up the <<rep setup.item.f_drinktray_good_slaver>>. It's a demon-made drink tray, usually used for the many guard dogs living inside the mist. You can see some of them too, apparently being kept by the merchant, including a particularly burly <<urace $g.slave>> down on all fours lapping on <<their $g.slave>> dinner from a similar tray.
<<if $gOutcome == 'crit'>>
Apparently the guard dog is also for sale, and at a steep discount too, and the two of you decided to buy <<them $g.slave>> also to bring back home.
<</if>>
</p>
<p>
Time passed as you strolled around the mist more, mystified by the entire experience, and before you know it, four weeks have passed. As much as you'd like to forget about your work, your bunch of motley slavers probably would benefit from your guidance, and it was time to go back home. You went back into the portal, before travelling back home.
<<if $gOutcome == 'failure'>>
Unfortunately, the way back was not as smooth as before, and you got slightly corrupted in the limbo between the mortal world and the demonic world.
<<elseif $gOutcome == 'disaster'>>
Unfortunately, the way back was not as smooth as before, and both you and <<rep $g.guide>> got slightly corrupted in the limbo between the mortal world and the demonic world. This is an unfortunately way too common occurrence, and the mistwalker did not even wince at the transformation on <<their $g.guide>> body — a testament that <<they $g.guide>> is well-used already to this happening.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'mobile_brothel', /* key */
'Mobile Brothel', /* Title */
'darko', /* Author */
[ 'desert', 'order'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer1': setup.qu.slavetrainer,
'trader': setup.qu.slavetrader,
'guard': setup.qu.guard, },
{ /* actors */
'puller': 'desert_all',
'show': 'desert_all',
'madam': 'all', },
[ /* costs */
],
'Quest_mobile_brothel',
setup.qdiff.hard40, /* difficulty */
[ /* outcomes */
[
'Quest_mobile_brothelCrit',
[
setup.qc.SlaveOrderMobileBrothel(1.8),
],
], [
'Quest_mobile_brothelCrit',
[
setup.qc.SlaveOrderMobileBrothel(1.3),
],
], [
'Quest_mobile_brothelCrit',
[
setup.qc.MoneyNormal(-0.1),
],
], [
'Quest_mobile_brothelCrit',
[
setup.qc.MoneyCustom(-2000),
setup.qc.BoonizeRandom('trainer1', 2),
setup.qc.BoonizeRandom('trader', 2),
setup.qc.BoonizeRandom('guard', 2),
setup.qc.SlaveMarker('puller'),
setup.qc.SlaveMarker('show'),
setup.qc.SlaverMarker('madam'), ],
], ],
[
[setup.questpool.desert, setup.rarity.uncommon],
], /* quest pool and rarity */
[
setup.qres.Cooldown(8),
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.marketingoffice), ], /* restrictions to generate */
)>><p>
The <<lore region_desert>> has only a few permanent settlements —
which means that finding a whorehouse becomes a problem for these people.
But there certain brothels operate a moving brothel service --
a particularly strong slave is made to carry a carriage containing
many whores between settlements. Settlers can then pay money to use the carriage's
contents, which usually consists of slutty and well-behaved slaves.
</p>
<p>
Among these slaving troupes, there is a particular troupe famous for
having the highest quality sluts. While your slavers entertained the idea
of using their services, you are more interested in seeing if they are
interested in buying your stock. Rumors is that they pay very good money for high
quality slaves, which are rather difficult to obtain. To secure such a deal,
it is necessary to bring your best promotional goods to showcase as an example, so that
they can see how proficient your company is in raising slaves.
</p><<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<<if $g.show.isMale()>>
<<else>>
<<questimage 'mobile_brothel_female.jpg'>>
<</if>>
<</if>>
<p>
Your slavers spotted the caravan travelling across the desert. The first
thing they saw of course was the
muscular slave almost entirely naked pulling a carriage covered in drapes.
<<if $g.puller.isHasVagina()>>
Her breasts and vagina were both pierced and connected with a chain to a collar on her neck.
<<else>>
His cock and nipples were both pierced with thick rings, which were connected with a chain to his neck.
<</if>>
Hanging from the chains were round metal weights, that swung back and forth
with every step that <<they $g.puller>> took.
</p>
<p>
After seeing the depravity, as well as the slogan on the drapes,
your slavers were sure that the <<mistress $g.madam>> is the target they had
been looking for. When your slavers
approached, with a well practiced bow the <<mistress $g.madam>> greeted your slavers and
proceeded 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 various high-quality
<<girl $g.show>>s writhing inside the cage.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
They managed to negotiate with the <<mistress $g.madam>>, who was more than
happy to add more quality slaves to <<their $g.madam>> troupe.
<<if $gOutcome == 'crit'>>
<<Yourrep $g.trader>>
managed to negotiate an excellent deal that would yield your company a lot of
money should you find the right slave be sold.
<<else>>
With both parties happy with the deal, your slavers returned home with a new
slave order while the <<master $g.madam>> continued <<their $g.madam>> journey,
whipping <<their $g.madam>> strong pony slave to resume the journey under the hot sun.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
As a complimentary gift, the <<master $g.madam>> allowed your slavers to use
<<their $g.madam>> stock before they go back to your fort.
<<set _lustful = setup.selectUnit([$g.trainer1, $g.guard, $g.trader], {trait: 'per_lustful'})>>
<<set _chaste = setup.selectUnit([$g.trainer1, $g.guard, $g.trader], {trait: 'per_chaste'})>>
<<if _lustful>>
<<Rep _lustful>> jumped at the opportunity to use such high-quality slaves in the carriage.
<<elseif _chaste>>
<<Rep _chaste>> hesitated, but eventually got goaded by <<their _chaste>> teammates to
just accept the rare opportunity to use such prestigious slaves.
<<else>>
Your slavers did not hesitate at all to use the high-quality slaves in the carriage.
<</if>>
Even the muscular and heavily pierced pony slave was available for use.
</p>
<<else>>
<p>
Unknown to you, your slavers actually managed to scrounge
up some money to make use of the high-quality slaves the <<mistress $g.madam>>
had to offer.
</p>
<</if>>
<<else>>
<p>
They tried 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 slave they brought.
Ultimately, your slavers were unable to
make a deal with <<them $g.madam>>, and was forced to come back empty-handed.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Worse, your slavers in 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 it was worth it,
according to your slavers.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_orcish_bait1',
'Orc Raider',
[
[setup.unitpool.subrace_orc_male, 0.5],
[setup.unitpool.subrace_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_greenskin,
setup.trait.race_demon,
setup.trait.muscle_verystrong,
setup.trait.per_stubborn,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_hypnotic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.subrace_humankingdom,
setup.trait.subrace_humanvale,
setup.trait.subrace_humansea,
setup.trait.muscle_thin,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'support': setup.qu.defendersupport,
'capturer': _criteriacapturer, },
{ /* actors */
'orc': 'quest_orcish_bait1', },
[ /* costs */
],
'Quest_orcish_bait',
setup.qdiff.normal38, /* difficulty */
[ /* outcomes */
[
'Quest_orcish_baitCrit',
[
setup.qc.Favor('humandesert', 100),
setup.qc.Slave('orc', 'a|was part of an orc raiding party'), ],
], [
'Quest_orcish_baitSuccess',
[
setup.qc.TraitReplace('orc', setup.trait.per_slow),
setup.qc.Slave('orc', 'a|was part of an orc raiding party'), ],
], [
'Quest_orcish_baitSuccess',
[
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The orcs living on the eastern desert are known to be strong but also a bit dumb. This
property makes them the ideal slave for some nobles, and the demands 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 directly 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 another encampment, and capture some of
them during the raid.
As a bonus, if you successfully repelled the attack, you might even earn the
gratitude of the settlement.
</p>
<p>
You have heard about an imminent attack on one
of such settlements, and you can send your slavers on this mission
of "protection".
</p><p>
Led by <<rep $g.defender>>, your slavers
<<uadv $g.defender>>
stood in defense with the encampment, and a fight ensued.
<<set _brave = setup.selectUnit([$g.defender, $g.support, $g.capturer], {trait: 'per_brave'})>>
<<if _brave>>
<<Rep _brave>> bravely led your slavers in the fight.
<</if>>
<<set _cautious = setup.selectUnit([$g.defender, $g.support, $g.capturer], {trait: 'per_cautious'})>>
<<if _cautious>>
The fight was intense, intimidating the somewhat cowardic <<rep _cautious>>.
<</if>>
<<set _fire = setup.selectUnit([$g.defender, $g.support, $g.capturer], {trait: 'magic_fire'})>>
<<if _fire>>
<<Rep _fire>> used <<their _fire>> fire magic to give your slavers a large advantage.
<</if>>
<<set _muscle = setup.selectUnit([$g.defender, $g.support, $g.capturer], {trait: 'muscle_strong'})>>
<<if _muscle>>
Despite the size of the orcs, <<rep _muscle>> could hold <<their _muscle>> own,
using <<their _muscle>> muscles to
<<if _muscle.isHasTrait('muscle_verystrong')>>
overpower
<<else>>
contest
<</if>>
some of the assault orcs.
<</if>>
But eventually, together with the villagers your slavers managed to completely
repel the invasion.
Your slavers were showered with gifts from the settlement
for saving them from worse fate of being orcish playthings, which is worse
than death. Your slavers returned home victorious, with a new
orc slave picked up from one of the knocked out orc warriors.
</p><p>
Your slavers <<uadv $g.defender>> waited in the encampment until the fateful day came,
where they saw a horde of orcs attacking into camp.
The horde contained numerous amount of orcs -- After realizing they had no hope of actually defeating all of
them, your slavers instead decided to
isolate one of the orc raiders.
<<if $gOutcome == 'success'>>
One particular orc turned out to be rather dumb, and this made it easy for <<rep $g.capturer>>
to goad the orc away from the horde.
Once alone, <<yourrep $g.defender>> swiftly
knocked the orc out, and <<rep $g.capturer>> proceeded to tie the orc tight. 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 and distracted
throughout the long journey home
With their target in tow, your slavers went back
home with their new slave, leaving the encampment to their fate.
<<else>>
But instead, your slavers got dragged into the fight, and 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 minor
injuries.
<</if>>
</p><p>
Your slavers were sloppy in their work and managed to get themselves stuck in
the middle of the fight between the orc and the settlement.
<<Rep $g.defender>> defender|was 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>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_orcish_festival1',
'Residents of the Western Forests: All gender',
'forest_all', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'whore': setup.qu.bimbo,
'guard': setup.qu.guard,
'slave': setup.qu.slavegeneric, },
{ /* actors */
'gift': 'quest_orcish_festival1',
'orc': 'subrace_orc',
},
[ /* costs */
],
'Quest_orcish_festival',
setup.qdiff.easier39, /* difficulty */
[ /* outcomes */
[
'Quest_orcish_festivalCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('orc', 100), ],
], [
'Quest_orcish_festivalCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('orc', 100),
setup.qc.Injury('slave', 1), ],
], [
'Quest_orcish_festivalCrit',
[
setup.qc.Favor('orc', 100),
setup.qc.Injury('slave', 3), ],
], [
'Quest_orcish_festivalCrit',
[
setup.qc.SlaverMarker('orc'),
setup.qc.Injury('slave', 5), ],
], ],
[
[setup.questpool.desert, setup.rarity.common],
], /* quest pool and rarity */
[
setup.qres.HasSlave(), ], /* restrictions to generate */
)>><p>
The orc tribes of the <<lore region_desert>> believe in honoring their ancestors
through nights of debauchery. During these nights, slaves in the orcish slave dumps
are made available for all orcs and visitors to use, and debauchery competitions are often
held. Winners of these competitions receive the personal blessings of the
leader of the orc encampment themself.
</p>
<p>
Outsiders are also welcome to partake in these sacred festivals. If you want
to participate, you would need to supply a slave, as well as a performer that are proficient in
debauching themself. You 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 at best,
earning the orc tribe's favor might be useful someday.
</p><p>
The festival was a merry ground with all sort of fucking happening all around,
be it regular fucking, throat fucking or even tit fucking in some cases.
All of these penetrations were done in public
by a large number of participants. While most participants were the orcs living in the vicinity,
your slavers did notice
the occasional elf
<<if !$settings.bannedtags.furry>>
and even a werewolf
<</if>>
among both the fucker and the fuckee.
Sex dominated the atmosphere, your slavers could not help but get aroused from the smell.
<<set _chaste = setup.selectUnit([$g.trainer, $g.whore, $g.guard], {trait: 'per_chaste'})>>
<<set _lust = setup.selectUnit([$g.trainer, $g.whore, $g.guard], {trait: 'per_lustful'})>>
<<if _chaste>>
Even the usually chaste <<rep _chaste>> couldn't help but get aroused.
<<elseif _lust>>
The sex-addled <<rep _lust>> got even more aroused than usual.
<</if>>
Still, they remained focused at the task at hand.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Yourrep $g.whore>> <<uadv $g.whore>> held such a performance by using, abusing,
and at some point even being abused by <<rep $g.slave>> that many orcs in
the encampment were enraptured.
The male orcs
blew their load in the throats of whatever nearby slave available,
while the female orcs played with themselves using the abundant dildos.
At the end of the debauched festivities, the leader of orcs <<herself $g.orc>>
congratulated <<rep $g.trainer>> for the performance, and promised to put
good words about your company.
Later, <<yourrep $g.whore>> felt strange, lustful
glares coming from all around the encampment, and to avoid unnecessary danger your slavers exited
the encampment that same night, before going back to your fort.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Under <<reps $g.trainer>> watchful gaze, <<yourrep $g.slave>> and even at some
point <<rep $g.whore>> <<uadv $g.whore>> debauched themselves sufficiently wild,
enough to earn many orcs' attentions.
At the end of the debauched festivities, your slavers to had earned the
respect of some of the orcs. They even invited your slavers to use some
of their freshly captured slaves together.
After few nights of such debauchery, your slavers
felt they had achieved what they set to do there.
They collared <<rep $g.slave>> back, and returned home.
The slave will need to recover from the rough use -- a couple of weeks should do it.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Under <<reps $g.trainer>> watchful gaze, <<yourrep $g.slave>> tried <<their
$g.slave>> best to debauch <<themself $g.slave>>. But it was obvious that the slave
lacked enthusiasm, and soon enough <<rep $g.slave>> got injured from rough use,
or at least managed to convince your slavers that <<they $g.slave>> slave|was indeed
injured. Your slavers returned
much earlier than scheduled, but at least the orcs were still pleased at
the efforts your company was making to befriend them.
</p>
<<else>>
<p>
Unfortunately, <<yourrep $g.slave>> slave|was not at all able to withstand
the heavy abuse of the festival and soon went into a psychotic daze. With the slave
turning useless, your slavers had no choice but to quit the festival and head home
much earlier than expected.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'capital_of_slaves__browse_wares', /* key */
"Capital of Slaves: Browse Wares", /* Title */
"darko", /* Author */
[ 'desert', 'unit'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'appraiser1': setup.qu.slaveappraiser,
'appraiser2': setup.qu.slaveappraiser,
'trader': setup.qu.slavetrader, },
{ /* actors */
'slave1': 'desert_all',
'slave2': 'desert_all',
'slave3': 'desert_all',
'slave4': 'desert_all',
'slave5': 'desert_all',
'slave6': 'all',
'slave7': 'all',
'slave8': 'all',
'slave9': 'desert_all',
'slave10': 'subrace_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_waresCrit',
[
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_waresCrit',
[
setup.qc.Slave('slave1', '', true),
setup.qc.Slave('slave2', '', true), ],
], [
'Quest_capital_of_slaves__browse_waresDisaster',
[
],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<include 'Opportunity_capital_of_slaves'>>
<p>
You have chosen to take the safest route and send a group of slavers to browse through the wares.
</p><<if $g.slave1.isMale()>>
<<else>>
<<questimage 'capital_of_slaves_female.jpg'>>
<</if>>
<p>
The slave market of Qarma was truly a sight to behold. Naked slaves were on
full display everywhere — from a muscularly built ex-raider who was being
continuously whipped to showcase his endurance, to a lady with breasts so
large she cannot move on her own.
<<set _cur = setup.selectUnit([$g.appraiser1, $g.appraiser2, $g.trader], {trait: 'per_curious'})>>
<<if _cur>>
The various strange merchandise on display was very interesting for the curious <<rep _cur>>.
<</if>>
<<Yourrep $g.appraiser1>> and <<rep $g.appraiser2>> <<uadv $g.appraiser1>>
worked their best
to appraise the slaves under the hot sun of Qarma,
<<if $gOutcome == 'crit'>>
and they were so successful that they returned with ten decently-priced candidates for
you to browse including one particularly rare slave.
<<elseif $gOutcome == 'success'>>
and returned with five decently-priced candidates for you to browse.
<<else>>
but your slavers were incompetent
were only able to find two decently priced slaves for you to browse.
<</if>>
</p><p>
Unfortunately, your slavers were mistaken for raiders and were denied entry to
the city. They had no choice but to went back home, having wasted two weeks of work.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'capital_of_slaves__sell_wares', /* key */
"Capital of Slaves: Sell Wares", /* Title */
"darko", /* Author */
[ 'desert', 'order'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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_waresCrit',
[
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
setup.qc.SlaveOrderCapitalOfSlaves(),
],
], [
'Quest_capital_of_slaves__sell_waresCrit',
[
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 */
)>><<include 'Opportunity_capital_of_slaves'>>
<p>
You have chosen to sell your stock in the market.
</p><p>
The slave market of Qarma was truly a sight to behold. Naked slaves were on
full display everywhere — from a broad-shouldered ex-soldier who was held hogtied
and hanged to be sold as a human chandelier decoration,
to a lady with a vagina so cavernous it could probably fit two arms at once.
<<set _cur = setup.selectUnit([$g.trader1, $g.trader2, $g.trainer], {trait: 'per_curious'})>>
<<if _cur>>
The various strange merchandise on display was very interesting for the curious <<rep _cur>>.
<</if>>
<<if $gOutcome == 'failure'>>
Unfortunately, your slavers were too
engaged in window-shopping and almost completely forgot to do their job to
find slave orders, which resulted in only one slave order returned to
you.
<<else>>
<<Rep $g.trader1>> and <<rep $g.trader2>> managed to <<uadv $g.trader1>>
secured
<<if $gOutcome == 'crit'>>
several
<<else>>
two
<</if>>
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 the trader would dock
some pay if the slave came untrained.
<</if>>
</p><<include 'Quest_capital_of_slaves__browse_waresDisaster'>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_capital_of_slaves__steal_wares1',
"Trained Eastern Slave",
'desert_all', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'thief2': setup.qu.thief,
'thief1': setup.qu.thief,
'muscle': setup.qu.carrier, },
{ /* actors */
'slave1': 'desert_all',
'slave2': 'quest_capital_of_slaves__steal_wares1',
'slave3': 'subrace_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_waresCrit',
[
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 */
)>><<include 'Opportunity_capital_of_slaves'>>
<p>
You have chosen to send a team of slavers to
sneak into the market at night and score yourself some slaves.
</p><p>
The slave market of Qarma looked very different at night. Instead of naked
bodies being displayed under the scorching sun of Qarma,
there are instead plenty of crates covered in drapes, and you can hear soft
moans coming from within these crates.
But it was mostly quiet, as slave owners are required to gag their
slaves overnight to maintain peace and quiet 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
inside one crate to make them more horny.
<<set _lust = setup.selectUnit([$g.thief1, $g.thief2, $g.muscle], {trait: 'per_lustful'})>>
<<if _lust>>
And judging from
<<if _lust.isHasDick()>>
<<set _pants = _lust.getGenitalCovering()>>
<<if _pants>>
the tent forming on <<reps _lust>> <<rep _pants>>,
<<else>>
<<reps _lust>> rising naked erection,
<</if>>
<<else>>
the slight flush on <<reps _lust>> face,
<</if>>
the slaves were not the only one who got rather horny that night.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
After sneaking through the market, your slavers managed to find one
cage containing three interlocked slaves, where the slaves were locked in position
so that each one is forced to eat another's genitals.
<<Yourrep $g.thief1>> <<uadv $g.thief1>>
made quick work of the lock before <<rep $g.muscle>> carried the moaning trio of slaves
safely outside the city and ultimately back into your camp.
</p>
<<else>>
<p>
Your slavers were anxious and <<uadv $g.thief1>>
grabbed the nearest possible crate to steal. It happened to contain two slaves
making love with each other. The pair of slaves were kidnapped and smuggled outside from the city
without anyone noticing.
</p>
<</if>><p>
Unfortunately, your slavers were spotted by guards as they attempted to sneak
into the city under the cover of the night, 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 from the city.
You later received a brochure about a slave sale in the Capital of Slaves and
were not really surprised to see their names being listed 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>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_desert_purifiers_enslave',
'Purifier',
'subrace_humandesert', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'corruptor': setup.qu.corruptor,
'warrior1': setup.qu.dark_warrior,
'warrior2': setup.qu.dark_warrior, },
{ /* actors */
'guard': 'desert_all',
'purifier': 'quest_desert_purifiers_enslave', },
[ /* costs */
],
'Quest_desert_purifiers_enslave',
setup.qdiff.harder41, /* difficulty */
[ /* outcomes */
[
'Quest_desert_purifiers_enslaveCrit',
[
setup.qc.Slave('purifier', 'a|was a purifier living on the eastern desert whom you managed to enslave'),
],
], [
'Quest_desert_purifiers_enslaveCrit',
[
setup.qc.Slave('guard', 'a|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_enslaveFailure',
[
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 */
)>><<include 'Opportunity_desert_purifiers'>>
<p>
You have foolishly chosen to try and enslave a purifier.
</p><p>
The purifier had settled camp near an oasis and provided <<their $g.purifier>> services to the
surrounding settlements.
Your slavers waited until nightfall before <<rep $g.corruptor>> <<uadv $g.corruptor>>
began <<their $g.corruptor>> dark work.
</p>
<<if $gOutcome == 'crit'>>
<p>
Within moments,
dark energies 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>> had all the time
in the world to enter and capture <<rep $g.purifier>>.
</p>
<p>
Long after your slavers had left the compound,
moaning sounds could still be heard throughout the
encampment as the purifier's followers were ravaged thoroughly by the many
corrupted tendrils that kept spawning and feeding throughout the encampment.
</p>
<<else>>
<p>
Soon after, dark corrupted warriors spawn out of nowhere and invaded the
encampment. Your slavers did nothing but watch as the once pure camp followers one by one were
subdued by the demonic soldiers and fucked mercilessly.
</p>
<p>
The lead demon, having seen the <<if $g.purifier.isFemale()>> strikingly beautiful <<else>>
strikingly handsome <</if>> purifier, decided to take the purifier as payment for
their services. <<Yourrep $g.corruptor>> corruptor|was unable to do anything as
the object of your quest purifier|was taken as a living cock-sheathe by the demon and
disappeared together through <<lore concept_mist>>.
</p>
<p>
Having no option but to leave without the purifier, your slavers picked a still usable camp
followers out of the ex-purifiers and took <<them $g.guard>> home as a consolation prize.
As your slavers exited the camp, the wailing and moaning of the victims could still be
heard even from a distance...
</p>
<</if>><p>
The purifier had settled camp near an oasis and provided services to
surrounding settlements.
However, your slavers caught glimpse of the head purifier and somehow
<<their $g.purifier>> divine <<if $g.purifier.isFemale()>>beauty<<else>>handsomeness<</if>>
disarmed your slavers of all their evil intentions.
<<if $gOutcome == 'failure'>>
With their intentions gone, your
slavers decided to come in peace to the encampment. The purifier
blessed your slavers for such forthcomingness, and your slavers
later returned back home less corrupt than before.
<<else>>
Within moment
your slavers prostrated 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 but with a mounting amount of debt.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'desert_purifiers_patron2', /* key */
'Desert Purifiers: Patron', /* Title */
'darko', /* Author */
[ 'desert', 'trait'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'repentant1': setup.qu.repentant,
'repentant2': setup.qu.repentant,
'repentant3': setup.qu.repentant, },
{ /* actors */
'purifier': 'subrace_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_patron2Crit',
[
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_patron2Failure',
[
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 */
)>><<include 'Opportunity_desert_purifiers'>>
<p>
You have chosen to patron the purifiers and cleanse your slavers.
</p><p>
The purifier had settled camp near an oasis and provided services to
surrounding settlements.
<<if $gOutcome == 'crit'>>
Your slavers arrived at the compound and managed to
negotiate a very good amount of purifier work for the amount of money they
bring.
<<else>>
Your slavers arrived at the compound, but somehow
the purifiers were able to discern that your slavers were well,
slavers and hence bad people.
Still, they were low on funds and after much negotiations they agreed
to do some work for the amount of money your slavers brought with them.
<</if>>
<<Rep $g.purifier>> chanted all the required magic and within moments corruptions were purified
from your slavers, leaving their bodies
<<if $gOutcome == 'crit'>>
devoid of any corruption.
<<else>>
more pure.
<</if>>
<<if $gOutcome == 'crit'>>
Your slavers had small talks with the rest of <<their $g.purifier>> camp
followers before heading back home feeling renewed with positive energy.
<<else>>
Your slavers were
not welcome in the camp and were forced to leave once the ritual was over, but
they got their money's worth.
<</if>>
</p><p>
The purifier had settled camp near an oasis and provided services to
surrounding settlements.
Your slavers arrived at the compound and somehow,
the purifiers discerned that your slavers are well,
slavers, which made them bad people.
<<if $gOutcome == 'failure'>>
The lead purifier were so stubborn about 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
was going to be suicide.
<<else>>
Still, they were low on funds and after much negotiations they agreed
to do some work for the amount of money your slavers brought.
But during the purification ritual, otherwordly tendrils suddenly appeared out of nowhere and
ravaged the bodies of everyone in the purifier's compound, including your slavers.
Soon, the place was turned into a place of debauchery with demons and raiders
walking and owning around the place, while your slavers were continuously molested by
the incoming tendrils. Your slavers saw what became of the purifier:
crawling next to <<their $g.purifier>> new master: a
demon who decided that the purifier would make a neat pet.
After such night of debauchery, morning finally came and your slavers, after gaining their
consciousness back, hurried back and escaped the compound before anything
worse happened to them. Still, the experience had changed them
and they are now more corrupt than ever.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_desert_purifiers_apprentice',
'Purifier Apprentice',
'subrace_humandesert', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'corruptor': setup.qu.corruptor,
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
},
{ /* actors */
'purifier': 'quest_desert_purifiers_enslave',
'student': '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', 'a|was a kind purifier living on the eastern desert whom 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', 'a|was the apprentice of a purifier living off the desert whom 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_recruitFailure',
[
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 */
)>><<include 'Opportunity_desert_purifiers'>>
<p>
You have chosen to forcefully recruit a purifier.
</p><p>
The purifier had 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, corruption
the once pure <<maiden $g.purifier>>'s mind into a twisted diabolical one,
a far cry from what <<they $g.purifier>> purifier|was once.
<<if $g.corruptor.isHasTrait('per_evil')>>
An evil smile grew at <<reps $g.corruptor>> face as <<they $g.corruptor>> took in <<their $g.corruptor>> work.
<</if>>
At the end of the private session, <<rep $g.purifier>> wholeheartedly agreed 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 happened to be alone
But they were unable to manipulate the encampment and was unable to find the right opportunity.
In the end, your slavers settled with corrupting <<their $g.purifier>> student instead.
The once innocent apprentice was <<uadv $g.corruptor>> twisted by <<reps $g.corruptor>> magic into
an evil and devilish person who then wholeheartedly agreed to join your company as a slaver.
A slaver proficient in fire magic such as <<rep $g.student>> will surely prove useful in your company.
</p><<include 'Quest_desert_purifiers_enslaveFailure'>>/* PROOFREAD COMPLETE */
<<set _criteriaorc = new setup.UnitCriteria(
null, /* key */
'Orc Slave', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
setup.qres.Trait(setup.trait.race_greenskin),
setup.qres.AnyTrait([
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.dick_titanic,
setup.trait.balls_titanic,
setup.trait.breast_titanic,
setup.trait.height_giant,
], true),
],
{
}
)>>
<<run new setup.UnitGroup(
'quest_mansion_of_hypnotism_master',
"Master",
'subrace_humandesert', /* pools */
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': 'subrace_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.MissingUnitForever('orc'),
],
], [
'Quest_mansion_of_hypnotismCrit',
[
setup.qc.MissingUnitForever('orc'),
setup.qc.Item(setup.item.potion_slavertraining),
setup.qc.Item(setup.item.brainwash_technology),
],
], [
'Quest_mansion_of_hypnotismCrit',
[
setup.qc.Mindbreak('orc'),
setup.qc.TraumatizeRandom('hypnotist', 12),
setup.qc.TraumatizeRandom('assistant', 8),
setup.qc.TraumatizeRandom('trainer', 6), ],
], [
'Quest_mansion_of_hypnotismCrit',
[
setup.qc.MissingUnitForever('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, setup.rarity.common],
],
[ /* 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 inside a mansion secluded
somewhere in the <<lore region_desert>>, 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 — orcs being
orcs means they are very 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_greenskin>> 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 were 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>> radiated mystery
with <<their $g.master>> every movement.
Your slavers exchanged pleasantries and the <<master $g.master>> was
apparently indeed rather lonely, and greatly appreciated 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.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
Within moments, <<yourrep $g.orc>> fell into a trance, although not much else.
The <<master $g.master>> offered to 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 bottle of <<rep setup.item.potion_slavertraining>> to aid your slavers in mastering their newfound
knowledge.
</p>
<p>
Your slavers spent the remaining 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>>.
<<if $gOutcome == 'crit'>>
Before leaving,
the master gave your slavers some lavish gifts, which they bring back home.
<</if>>
</p>
<<else>>
<p>
But something went wrong and <<reps $g.hypnotist>>
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
<<if $gOutcome == 'failure'>>
a mindbroken <<rep $g.orc>>.
They went home, traumatized by the experience.
<<else>>
<<rep $g.orc>> nowhere in sight. They went home, greatly
traumatized by the experience.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriaorc = new setup.UnitCriteria(
null, /* key */
'Orc Slave', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
setup.qres.Trait(setup.trait.race_greenskin),
setup.qres.AnyTrait([
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.dick_titanic,
setup.trait.balls_titanic,
setup.trait.breast_titanic,
setup.trait.height_giant,
], true),
],
{
}
)>>
<<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': 'subrace_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.MissingUnitForever('orc'),
],
], [
'Quest_mansion_of_hypnotismCrit2',
[
setup.qc.MissingUnitForever('orc'),
setup.qc.Item(setup.item.potion_slavertraining),
],
], [
'Quest_mansion_of_hypnotismFailure2',
[
setup.qc.Mindbreak('orc'),
setup.qc.TraumatizeRandom('hypnotist', 12),
setup.qc.TraumatizeRandom('assistant', 8),
setup.qc.TraumatizeRandom('trainer', 6), ],
], [
'Quest_mansion_of_hypnotismFailure2',
[
setup.qc.MissingUnitForever('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, setup.rarity.rare],
],
[ /* 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 had somehow befriended a certain <<master $g.master>> living in a secluded
mansion in the middle of nowhere at the <<lore region_desert>>.
The grand mansion was 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_greenskin>> 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 with the last vist, your slavers were 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>> radiated mystery
with <<their $g.master>> every movement.
When <<they $g.master>> saw your slavers again, <<they $g.master>> visibly relaxed
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: <<rep $g.master>>.
Of course,
the bound and gagged <<rep $g.orc>> orc|was 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 came 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><<include 'Quest_mansion_of_hypnotismCrit'>>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Wonderfully Medium', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.NoTraits([setup.trait.vagina_gape, setup.trait.anus_gape, setup.trait.per_lustful, setup.trait.per_sexaddict, setup.trait.per_dominant, setup.trait.per_submissive, setup.trait.per_lunatic, setup.trait.per_masochistic, setup.trait.corrupted, setup.trait.corruptedfull, setup.trait.breast_small, setup.trait.breast_tiny, setup.trait.breast_titanic, setup.trait.breast_huge, setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.muscle_extremelystrong, setup.trait.muscle_verystrong, setup.trait.dick_tiny, setup.trait.dick_small, setup.trait.dick_titanic, setup.trait.dick_huge, setup.trait.balls_tiny, setup.trait.balls_small, setup.trait.balls_huge, setup.trait.balls_titanic, setup.trait.face_hideous, setup.trait.face_beautiful, setup.trait.height_dwarf, setup.trait.height_giant, setup.trait.training_mindbreak, setup.trait.race_demon], true),
],
{
}
)>>
<<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'slaver', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
slaving: 3,
}
)>>
<<run new setup.QuestTemplate(
'mist_apprentice_payment_the_first', /* key */
"Mist Apprentice: Payment the First", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'prep',
'danger',
'trait',
],
1, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'escort': [ _criteriaslaver, 3],
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [],
'demonkin': 'subrace_demonkin',
},
[ /* costs */
],
'Quest_mist_apprentice_payment_the_first',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.MissingUnitForever('slave'),
setup.qc.AddTag('escort', 'mist_apprentice_victim'),
setup.qc.Leave('escort', "went missing in The Mist", undefined),
setup.qc.Event('mist_apprentice_second_payment', 4, {
master: "master",
slaver: "slaver",
}),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('return_shipping', 0, {master: 'master', slaver: 'slaver', }),
],
)>><p>
<<dangertext "Warning:">> the slave you sent on this quest will likely
forever become a demonic toy — a property of their new overlord... And you
can't shake the feeling you won't be seeing whichever slaver unlucky enough to deliver
the slave to <<lore concept_mist>> for a couple of weeks either...
</p>
<p>
Alternatively, you can cancel this quest if you'd like to give up on <<reps $g.slaver>> trainings.
You'll probably get all your slavers back, but at what cost?
</p><p>
As part of <<reps $g.slaver>> continued training in the field of dark magic,
you are to supply the demonic teacher with a "wonderfully medium" slave. A slave that
excels in nothing, having medium assets in everything, and having no personality that stands out too much.
The cruel demons delights in transforming a mortal's personality
from that of a commonfolk to a depraved <<if
$g.slaver.isMale()>>slut<<else>>bimbo<</if>>.
The further it is from whatever
personality they used to have, the more exciting it becomes for the demon.
And what better material to start with other
than a perfectly blank and malleable slate?
</p>
<<include 'Quest_mist_apprentice_commonWarning'>><p>
You've sent <<yourrep $g.escort>> over to deliver your
slave <<rep $g.slave>> to the demon. The last message you received from
your slaver was <<them $g.escort>> getting ready for the final stretch to the
oasis. While you never heard back from <<therace $g.escort>>, you're
fairly confident <<they $g.escort>> escort|is now residing as the demon's
esteemed guest. ...or the demon's plaything to be more realistic.
</p>
<p>
Either way, that is one payment down the drain for <<reps $g.slaver>> tuition
costs. Easy enough, maybe two more could not be so bad after all!
</p>/* PROOFREAD COMPLETE */
<<set _criteriaescort = new setup.UnitCriteria(
null, /* key */
'slaver', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
slaving: 3,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Well-Used', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.AnyTrait([setup.trait.vagina_gape, setup.trait.anus_gape, setup.trait.face_scary, setup.trait.face_hideous, setup.trait.per_lunatic, setup.trait.per_masochistic], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'mist_apprentice_payment_the_first2', /* key */
"Mist Apprentice: Payment the First", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'prep',
'danger',
'trait',
],
1, /* weeks */
200, /* expiration weeks */
{ /* roles */
'escort': [ _criteriaescort, 3],
'slave': _criteriaslave,
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.Home(),
],
'demonkin': 'subrace_demonkin',
},
[ /* costs */
],
'Quest_mist_apprentice_payment_the_first2',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.MissingUnitForever('slave'),
setup.qc.AddTag('escort', 'mist_apprentice_victim'),
setup.qc.Leave('escort', "went missing in The Mist", undefined),
setup.qc.Event('mist_apprentice_second_payment', 4, {
master: "master",
slaver: "slaver",
}),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_firstCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('return_shipping', 0, {
master: "master",
slaver: "slaver",
}),
],
)>><p>
You are to supply the demon with an "experienced" little slut. And no, it does not
mean just a well-behaved slave — the slave must have shown some permanent
marks from their prolonged abuse, be it gaping holes or simply madness. The cruel demon
loves to compare <<their $g.master>> own work against slaves broken by other
slave owners, and would like to sample some from your company.
</p>
<<include 'Quest_mist_apprentice_commonWarning'>>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Senior but Unbroken', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.join_senior, setup.trait.training_none], true),
],
{
}
)>>
<<set _criteriaescort = new setup.UnitCriteria(
null, /* key */
'New on the Job', /* name */
[
],
[
],
[
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.per_dominant, setup.trait.per_cruel, setup.trait.per_lunatic], true),
],
{
slaving: 3,
}
)>>
<<run new setup.QuestTemplate(
'mist_apprentice_payment_the_second', /* key */
"Mist Apprentice: Payment the Second", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'prep',
'danger',
'trait',
],
1, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'escort': [ _criteriaescort, 3],
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.Home(),
],
'demonkin': 'subrace_demonkin',
},
[ /* costs */
],
'Quest_mist_apprentice_payment_the_second',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.MissingUnitForever('slave'),
setup.qc.AddTag('escort', 'mist_apprentice_victim'),
setup.qc.Leave('escort', "went missing in The Mist", undefined),
setup.qc.Event('mist_apprentice_final_payment', 4, {
master: "master",
slaver: "slaver",
}),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('return_shipping', 0, {
master: "master",
slaver: "slaver",
}),
],
)>><p>
Another demonkin messenger arrived at your fort today, bearing another
message regarding the continued training of <<yourrep $g.slaver>>. While the
training has been progressing well (whatever that means...), it is apparently
time for you to make the second payment...
</p>
<p>
Having grown bored playing with just slaves, this time the demon asks for a
slave-slaver combo to be sent over to <<their $g.master>> abode. A reverse
power-play is in the cards: a slave that has been with your company for a
long time but remained unbroken, paired with a somewhat meek slaver new on
their job. The pair will make an entertaining show for the demon, and <<they
$g.master>> master|is looking forward to your positive reply.
</p>
<p>
The demon assures you that while the slave will permanently become <<their
$g.master>> property, your slaver will be returned to you "in due time"...
</p>
<<include 'Quest_mist_apprentice_commonWarning'>><p>
Same as before, you've sent (doomed, more precisely) <<yourrep $g.escort>> over to the
demon's court, delivered together with <<rep $g.slave>>. You never heard
back from your slaver after <<they $g.slaver>> departed, and it will surely
be a long time before you will meet <<them $g.slaver>> again...
</p>
<p>
That's two payments cleared for <<reps $g.slaver>> tuition costs. Just one
more to go and if the demon is true to <<their $g.master>> words, then your
slaver can finally go home with <<their $g.slaver>> new magical prowess...
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Obedient but Chaste', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.per_chaste),
],
{
}
)>>
<<set _criteriaescort = new setup.UnitCriteria(
null, /* key */
'Chaste Slaver', /* name */
[
],
[
],
[
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.per_lustful),
],
{
slaving: 3,
}
)>>
<<run new setup.QuestTemplate(
'mist_apprentice_payment_the_second2', /* key */
"Mist Apprentice: Payment the Second", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'prep',
'danger',
'trait',
],
1, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'escort': [ _criteriaescort, 3],
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [
setup.qres.Home(),
],
'demonkin': 'subrace_demonkin',
},
[ /* costs */
],
'Quest_mist_apprentice_payment_the_second2',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.MissingUnitForever('slave'),
setup.qc.AddTag('escort', 'mist_apprentice_victim'),
setup.qc.Leave('escort', "went missing in The Mist", undefined),
setup.qc.Event('mist_apprentice_final_payment', 4, {
master: "master",
slaver: "slaver",
}),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_mist_apprentice_payment_the_secondCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('return_shipping', 0, {
master: "master",
slaver: "slaver",
}),
],
)>><p>
Another demonkin messenger arrived at your fort today, bearing another
message regarding the continued training of <<yourrep $g.slaver>>. While the
training has been progressing well (whatever that means...), it is apparently
time for you to make the second payment...
</p>
<p>
Having grown bored playing with just slaves, this time the demon asks for a
slave-slaver combo to be sent over to <<their $g.master>> abode. A slave that has
so far remains chaste despite having been entirely broken, and a similarly chaste
slaver to add into the mix.
It will be interesting to watch the slaver break and use the slave via
non-sexual means, and <<they $g.master>> master|is looking forward to your
positive reply.
</p>
<p>
The demon assures you that while the slave will permanently become <<their
$g.master>> property, your slaver will be returned to you "in due time"...
</p>
<<include 'Quest_mist_apprentice_commonWarning'>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_mist_apprentice_0", /* key */
"Mist Apprentice", /* name */
"Is supposedly \"studying\" in the land beyond the Mist in order to master dark magic", /* description */
"a|is supposedly \"studying\" in the land beyond the Mist in order to master dark magic", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"mist_apprenticeship0",
"Demonic Teacher",
'subrace_demon', /* pools */
1, /* reuse chance */
[ /* unit post process */
],
)>> <<run new setup.UnitGroup(
"mist_apprenticeship1",
"Corrupted Slave",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Corrupt('unit', null, 4),
],
)>>
<<set _criteriaapprentice = new setup.UnitCriteria(
null, /* key */
'Mist Apprentice', /* name */
[
setup.trait.bg_apprentice,
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.vagina_tight,
setup.trait.anus_tight,
setup.trait.per_submissive,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dominant,
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.join_junior,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.TraitExact(setup.trait.magic_dark),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'mist_apprenticeship', /* key */
"Mist Apprenticeship", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'desert',
'prep',
'trait',
'unknown',
'rare',
],
4, /* weeks */
10, /* expiration weeks */
{ /* roles */
'apprentice': [ _criteriaapprentice, 1],
'scout1': [ setup.qu.scout_desert, 1],
'scout2': [ setup.qu.scout_desert, 1],
},
{ /* actors */
'teacher': 'mist_apprenticeship0',
'slave': 'mist_apprenticeship1',
},
[ /* costs */
],
'Quest_mist_apprenticeship',
setup.qdiff.hardest43, /* difficulty */
[ /* outcomes */
[
'Quest_mist_apprenticeshipCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('slave', "a|was a highly corrupted slave given to your slavers during their trip in the Mist", undefined),
setup.qc.Equipment(setup.equipmentpool.sextoy_good),
],
],
[
'Quest_mist_apprenticeshipCrit',
[
setup.qc.AddTitle('apprentice', 'quest_mist_apprentice_0'),
setup.qc.Leave('apprentice', "a|is studying to master dark magic in the land beyond the mist", undefined),
setup.qc.Event('mist_apprentice_first_payment', 4, {slaver: 'apprentice', master: 'teacher'}),
],
],
[
'Quest_mist_apprenticeshipCrit',
[
setup.qc.MissingUnit('apprentice'),
setup.qc.Corrupt('apprentice', null, 1),
],
],
[
'Quest_mist_apprenticeshipCrit',
[
setup.qc.MissingUnit('apprentice'),
setup.qc.Corrupt('apprentice', null, 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.NoUnitWithTitle('quest_mist_apprentice_0', {
}),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.TraitExact(setup.trait.magic_dark)
]),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Mastering <<lore magic_dark>> is not an easy endeavor. For one, the magic is
extremely volatile, so much more than all the other domains of magic. Furthermore,
the masters of these magic often reside in the land beyond <<lore
concept_mist>>, which makes patronizing them very difficult.
And finally, these masters themselves mostly belong to the <<rep
setup.trait.subrace_demon>> race, who are known for their lunacy — equally likely to
lavish mortals with pleasure and to inflict unimaginable pain to them.
Hence, masters of dark magic are feared not only for the power they wield, but for
the things they must have done to obtain such power.
</p>
<p>
A slaver in your employ has the potential to advance their mastery over this
domain of dark magic, and <<yourrep _u>> has came up with a suggestion.
Somehow, <<they _u>> had heard a "reliable rumor" that a demonic <<lady
$g.teacher>> wizard who lives beyond <<lore concept_mist>> has been sending
<<their $g.teacher>> underlings into the mortal realm in search for mortals
gifted with dark magic. If you really want your slavers to master <<rep
setup.trait.magic_dark_master>>, you could try to send a group of slavers,
together with the prospective apprentice, to seek the <<lady $g.teacher>>
out. Who knows, maybe you are lucky enough that in all <<their $g.teacher>>
lunatic benevolence the demon would bestow upon your slaver unimaginable
knowledge...
</p><<if $g.apprentice.isMale()>>
<<questimage 'mist_apprenticeship_male.jpg'>>
<<else>>
<</if>>
<p>
With <<rep $g.scout1>> and <<utheirrel $g.scout1 $g.scout2>> <<rep
$g.scout2>> guiding the way, <<yourrep $g.apprentice>> managed to arrive at
their destination: an oasis swirling purple with mist. There, a demonic
<<lady $g.teacher>> sat naked, <<if $g.teacher.isFemale()>>
sedutively inviting <<rep $g.apprentice>> to come closer while pressing
<<their $g.teacher>> massive tits together.
<<else>>
stoically commanding <<rep $g.apprentice>> to approach, <<their $g.teacher>>
massive muscles bulging all the time.
<</if>>
As <<therace $g.apprentice>> approached the demon, <<their $g.apprentice>>
visage blurred and blurred until both the demons and <<therace $g.apprentice>>
apprentice|was out of your other slavers' visions. Unclear at what just
happened, your surviving slavers shrugged before heading home, assuming
everything was in order...
</p>
<<if $gOutcome == 'failure' || $gOutcome == 'disaster'>>
<p>
A few days later, you receive a letter with a very simple message...
</p>
<div class='lettercard'>
Help-
</div>
<p>
The handwriting looks like <<reps $g.apprentice>>. You sigh to yourself,
realizing you've probably just doomed <<therace $g.apprentice>> to a live of
demonic servitude unless you do something.
<<uneedrescue $g.apprentice>><<if $gOutcome == 'failure'>>.<<else>>,
although judging from the various purplish substance splattered on the letter, by
the time you recover your slaver, <<they $g.apprentice>> might just have been
corrupted beyond recognition...<</if>>
</p>
<<else>>
<p>
A few days later, you've received a letter with the most disturbing handwriting you've ever seen...
</p>
<div class='lettercard'>
<p>
Hmm...
</p>
<p>
So you seek to bestow this <<urace $g.apprentice>> slave ultimate power?
Foolish, but perhaps your ambition should be rewarded. Very well, but I shall
require three payments from you — three souls for forbidden knowledge. A
fair exchange, don't you think?
</p>
</div>
<p>
That went better than you expected. You'll just need to pay
whatever it is that the demon asks for in the coming days, unless you'd like
<<yourrep $g.apprentice>> to come back as a writhing mess of a <<urace $g.apprentice>>...
</p>
<<if $gOutcome == 'crit'>>
<p>
A few days later, you receive a shipment of... a highly corrupted slave. Who
could have sent such a slave to your fort? While the slave <<themself
$g.slave>> is rather worthless, <<they $g.slave>> slave|is equipped with some
high quality sex toy...
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.You(),
],
{
slaving: 3,
}
)>>
<<run new setup.QuestTemplate(
'to_master_the_dark', /* key */
"To Master the Dark", /* Title */
"darko", /* Author */
[ /* tags */
'danger',
'prep',
'desert',
'trait',
'unknown',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'you': [ _criteriayou, 3],
},
{ /* actors */
'master': 'mist_apprenticeship0',
'slaver': [],
},
[ /* costs */
],
'Quest_to_master_the_dark',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_to_master_the_darkCrit',
[
setup.qc.AllUnitSatisfyDo(
[setup.qres.HasTag('mist_apprentice_victim')],
[setup.qc.Injury('unit', 3), setup.qc.TraumatizeRandom('unit', 12), setup.qc.Return('unit')],
),
setup.qc.RemoveTagGlobal('mist_apprentice_victim'),
setup.qc.RemoveTitleGlobal('quest_mist_apprentice_0'),
setup.qc.Corrupt('you', null, 2),
setup.qc.SetCooldownQuest('mist_apprenticeship', 20),
setup.qc.TraitReplace('slaver', 'magic_dark_master'),
setup.qc.Corrupt('slaver', null, 5),
setup.qc.Return('slaver'),
],
],
[
'Quest_to_master_the_darkCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_to_master_the_darkCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_to_master_the_darkCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('return_shipping', 0, {master: 'master', slaver: 'slaver', }),
],
)>><<set _onleave = $company.player.getUnits({tag: 'mist_apprentice_victim'})>>
<p>
It has been several weeks since <<yourrep $g.slaver>> started to learn how
to master <<their $g.slaver>> dark magic. The final demand from <<their
$g.slaver>> current <<master $g.master>> has finally been made. For the final
price, the demon asks for you. Yes, you and you alone, leader of <<rep
$company.player>>.
</p>
<p>
A slave can only satisfy the demon as much as a slave is worth. But you
have been deemed a much more interesting plaything. It will not be permanent — the
demon promises only to borrow you for a couple of weeks — but would you be
willing to pay the final price, all for <<yourrep $g.slaver>> to master <<rep
setup.trait.magic_dark_master>>?
</p><p>
Sighing, you steeled yourself as you head alone to the destined oasis.
<<if $g.you.isHasTrait('race_demon')>>
As you got closer to the oasis, your demon blood boiled, longing to return to where you once came from.
<</if>>
<<if $g.you.isHasTrait('per_dominant')>>
You went with your head held up, mind focused on staying dominant throughout.
<</if>>
<<if $g.you.isHasTrait('per_submissive')>>
Secretly, your submissive mind was enjoying the degrading things the demon would no doubt force you to do.
<</if>>
<<if $g.you.isHasTrait('per_brave')>>
Venturing into <<lore concept_mist>> would be a humbling task for any normal being, but you had been known to be brave, and you head on with renewed conviction.
<</if>>
<<if $g.you.isHasTrait('per_cautious')>>
Your heartbeat quickened, and you could not help but feel a little scared inside.
<</if>>
<<if $g.you.isHasTrait('per_chaste')>>
Your chaste mind was completely unaware of what depravity was possible in the land beyond...
<</if>>
<<if $g.you.isHasTrait('per_lustful')>>
You lustfully licked your lips, knowing depravity awaited you beyond.
<</if>>
A portal awaited you at the oasis,
<<if $g.you.isHasTrait('magic_dark')>>
saving you the effort of using your own mastery over dark magic to open the gate.
<<else>>
inviting you to come closer and closer, slightly corrupting you in the process.
<<run setup.qc.Corrupt('you').apply($gQuest)>>
<</if>>
</p>
<<set _onleave = $company.player.getUnits({tag: 'mist_apprentice_victim'})>>
<p>
The demon lied in the land beyond the portal, sitting comfortably on <<their $g.master>>
throne. Surveying the room, you saw your slavers
caged inside tiny cages across the room:
<<if _onleave.length>>
<<rep _onleave[0]>> and <<rep _onleave[1]>>
<</if>>
lied motionlessly inside them, seemingly having just been used thoroughly by
the demon. In contrast, you could see fire burning within <<yourrep $g.slaver>>
<<ueyes $g.slaver>>, hatred overflowing from the slaver, no doubt at the
things the demon had done to both <<themself $g.slaver>> and <<their
$g.slaver>> slavermates.
</p>
<p>
Ignoring the glare, the demon casually walked towards you, touching your face
with <<their $g.master>> sharp nails before forcing a deep kiss into your
<<umouth $unit.player>>, thrusting <<their $g.master>> unnaturally long tongue down your
throat. You struggled to breathe from the surprise tongue deep-throating, but
you were given no chance to react as <<their $g.master>> <<uhands $g.master>> started to
wander
<<set _pants = $g.you.getEquipmentAt('legs')>>
<<if _pants>>
into your <<rep _pants>>,
<</if>>
roughly fondling your <<ugenital $g.you>>, playing with it just like another
toy at <<their $g.master>> disposal.
<<if $g.you.isSubmissive()>>
You struggled to suppress the urge to moan and give in to your submissive
tendencies, which would not bode well in front of your watching slavers.
<<elseif $g.you.isDominant()>>
You struggled to repress your anger at being used in this manner, bearing through the humiliation for
<<reps $g.slaver>> sake.
<</if>>
</p>
<p>
All the while, the hatred and anger seethed even more in <<rep $g.slaver>>.
"That's right, feel the anger, hatred building inside of you!" — the demon's
past taunts kept haunting <<therace $g.slaver>>, but only then it was starting to
make sense to <<them $g.slaver>>. After having been violated, and then seeing <<their $g.slaver>>
teammates violated, and finally seeing you yourself being violated in front
of <<their $g.slaver>> <<ueyes $g.slaver>>, only then did <<reps $g.slaver>>
hatred finally reach breaking point, and <<their $g.slaver>> true power was
unleashed. "That's right, feel the anger, hatred building inside of you!" For
hatred, anger, and all the negative energies are the key cornerstones of dark
magic. A dark aura started to build from around <<rep $g.slaver>>,
surrounding and threatening to break the cage from sheer pressure.
</p>
<p>
The demon continued <<their $g.master>> violation upon your body as if
nothing happened, and as you writhed, moaned, and cried in <<if
$g.you.isSubmissive() or $g.you.isMasochistic()>>a mixture of both pleasure
and pain<<else>>agony<</if>>, even you could feel the dark energy coming out
from your slaver until it finally broke open the cage.
</p>
<p>
Freed from <<their $g.slaver>> cage, <<yourrep $g.slaver>> walked slowly,
approaching you and the demon who had finally broken their kiss with you to face
<<therace $g.slaver>>. With an approving nod, the demon deemed <<therace
$g.slaver>>'s magic satisfactory — a mark that their training had been
completed. But <<yourrep $g.slaver>> slaver|was too blinded by rage to see
reason, and attacked futilely. You could see the demon's expression changed for
just a moment — from that of an eternally bored expression to that of a stern teacher,
before knocking out your slaver.
</p>
<p>
With the threat gone, the demon gazed back at you, surprisingly not doing
anything else and asking you to pick up your slavers (or pets as the demon
called them) both from the floor and from the other cages.
As the demon left you and your slavers alone in the room, you pondered what just happened...
</p>
<p>
In the end, you got lucky after all, and stumbled across a demon truly
capable and willing to impart the darkest of knowledge to your slavers...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_mist_merge_complete232',
'Half Possessed',
'subrace_humandesert', /* pools */
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',
'subrace_humandesert', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'corruptor2': setup.qu.corruption_assistant,
'corruptor1': setup.qu.corruption_assistant,
'guard': setup.qu.dark_warrior, },
{ /* actors */
'halfpossessed': 'quest_mist_merge_complete232',
'fullpossess': 'quest_mist_merge_complete233', },
[ /* costs */
],
'Quest_mist_merge_complete23',
setup.qdiff.extreme45, /* difficulty */
[ /* outcomes */
[
'Quest_mist_merge_complete23Crit',
[
setup.qc.Slaver('fullpossess', 'a|was fully possessed by a demon from beyond <<lore concept_mist>>, leaving their original thought locked deep down inside their mind', false),
setup.qc.MoneyNormal(),
],
], [
'Quest_mist_merge_complete23Success',
[
setup.qc.Slaver('halfpossessed', 'a|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'),
setup.qc.Corrupt('guard'),
setup.qc.Corrupt('guard'),
setup.qc.Corrupt('guard'),
setup.qc.GenName('guard', [setup.trait.race_demon]),
],
], ],
[
], /* quest pool and rarity */
[
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><<include 'Opportunity_mist_merge'>>
<p>
You have chosen to assist the ritual in hope of recruiting a demon.
</p><p>
With the assistance of your slavers, the dark wizard were able to complete the ritual.
The possessed slave who now goes by <<name $g.fullpossess>>, greeted the slavers sultry
and thanked them for summoning <<them $g.fullpossess>> into the mortal plane.
In front of your slavers' eyes,
they could see the changes to the once pure <<urace $g.fullpossess>> body —
in particular, the body "assets" are definitely larger and more demonic in nature.
</p>
<p>
After the wizard obtained the knowledge he seeked from the demon, <<name $g.fullpossess>>
became free to wander the mortal plane, and <<yourrep $g.corruptor1>> <<uadv $g.corruptor1>>
recruited the curious demon into your company.
<<set _demon = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'subrace_demon'})>>
<<set _racedemon = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'race_demon'})>>
<<set _mist = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'bg_mist'})>>
<<set _sex = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'per_sexaddict'})>>
<<set _dick = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'dick_huge'})>>
<<set _breast = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'breast_huge'})>>
<<set _dom = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'per_dominant'})>>
<<set _sub = setup.selectUnit([$g.corruptor1, $g.corruptor2, $g.guard], {trait: 'per_submissive'})>>
<<if _demon>>
The demon took great interest in <<rep _demon>>, a pure-bred demon under your employ.
<<elseif _racedemon>>
The demon took interest in <<rep _racedemon>>, who once resided in the land beyond
<<lore concept_mist>>.
<<elseif _mist>>
The demon was apparently familiar with <<rep _mist>>, who used to frequent
<<lore concept_mist>>.
<<elseif _sex>>
The demon was quite intrigued by <<rep _sex>>, and how such a sex-addled <<urace _sex>>
could still work under your employ.
<<elseif _dick>>
The demon was drawn to <<reps _dick>> <<udick _dick>>.
<<elseif _breast>>
The demon was drawn to <<reps _breast>> <<ubreasts _breast>>.
<<elseif _dom>>
The demon was naturally attracted to <<reps _dom>> dominance tendencies.
<<elseif _sub>>
The demon was naturally attracted to <<reps _sub>> submissive tendencies.
<</if>>
The presence of such powerful
creature in your company will surely be useful for your slaving career.
</p><p>
Even with the assistance of <<yourrep $g.corruptor1>> and <<rep $g.corruptor2>>,
there were simply too many factors to consider that the ritual was somehow cut short.
Only half of the demonic essence managed to get transferred into the sacrificial slave,
which means that <<they $g.halfpossessed >> still retain control of <<their $g.halfpossessed>> body.
Their personality, on the other hand, was 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><<if $g.fullpossess.isMale()>>
<<questimage 'mist_merge_disrupt_male_failure.jpg'>>
<<else>>
<</if>>
<p>
Even with the combined knowledge of both your slavers and the powerful dark wizard,
the ritual failed, makred with
the sudden burst of otherworldly tentacles surrounding the ritual chamber.
They ravaged every orifice the tentacles could catch,
corrupting both the wizard and your slavers. Fortunately for you, your
slavers were not deemed the most juicy target in the room, since they were only
assisting the wizard. While your slavers escaped with only slight corruptions,
the wizard was twisted beyond recognition. Not
wanting to anger whatever power was ravaging the wizard, your
slavers made the wise decision to escape the place in the first opportunity.
</p><p>
Despite having the best of intentions, your slavers messed up the
ritual badly, and somehow switched the corruption target from the sacrificial
slave into <<yourrep $g.guard>> instead.
Within moments, <<rep $g.guard>> writhed and moaned in a combination of agony and ecstacy.
Unable to do anything, your slavers watched as <<their $g.guard>> body twisted, wings
growing out of <<their $g.guard>> back while
<<if $g.guard.isHasDick()>>
demonic scales started to form on <<their $g.guard>> breasts.
<<else>>
<<their $g.guard>> dick deformed into those suitable for demons.
<</if>>
In the end, <<rep $g.guard>> guard|was completely possessed by the
demonic creature.
To make matters worse, the demon refused to join your company, for
they already have all of <<reps $g.guard>> memory with them and found your
company's activity to be rather boring.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_mist_merge_disrupt21',
'wizardcorrupted',
'desert_all', /* pools */
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',
'desert_all', /* pools */
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Corrupt('unit'),
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.QuestTemplate(
'mist_merge_disrupt2', /* key */
'Mist Merge: Disrupt', /* Title */
'darko', /* Author */
[ 'desert', 'unknown', 'favor',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'purifier1': setup.qu.purifier,
'purifier2': setup.qu.purifier,
'warrior': setup.qu.light_warrior, },
{ /* actors */
'corrupted': 'quest_mist_merge_disrupt21',
'mindbroken': 'quest_mist_merge_disrupt23', },
[ /* costs */
],
'Quest_mist_merge_disrupt2',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_mist_merge_disrupt2Crit',
[
setup.qc.Slave('corrupted', 'a|was a wizard attempting to summon a demon but a|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_disrupt2Success',
[
setup.qc.Injury('warrior', 2),
setup.qc.Corrupt('purifier1'),
setup.qc.Corrupt('purifier2'), ],
], [
'Quest_mist_merge_disrupt2Success',
[
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 */
)>><<include 'Opportunity_mist_merge'>>
<p>
You have chosen to disrupt the ritual and make the world a slightly better place.
</p><p>
Your slavers arrived at the nick of time as the victim's body was just about
to get ravaged by the demonic magic.
Armed with <<their $g.warrior>> trusty <<uweapon $g.warrior>>,
<<yourrep $g.warrior>> <<uadv $g.warrior>> subdued the wizard while <<rep $g.purifier1>>
and <<rep $g.purifier2>> <<uadv $g.purifier1>>
got to work and attempted to undo the corruption.
<<set _kind = setup.selectUnit([$g.purifier1, $g.purifier2], {trait: 'per_kind'})>>
<<set _honorable = setup.selectUnit([$g.purifier1, $g.purifier2], {trait: 'per_honorable'})>>
<<set _priest = setup.selectUnit([$g.purifier1, $g.purifier2], {trait: 'bg_priest'})>>
<<if _priest>>
<<Rep _priest>> recalled <<their _priest>> past as a priest and gave the prayer <<their _priest>> all,
<<elseif _kind>>
<<Reps _kind>> sincere prayers was answered
<<elseif _honorable>>
<<Reps _honorable>> honorable prayers was answered
<<else>>
The higher powers
answered to their prayers
<</if>>
and the corruptions somehow were all
transferred back into the wizard.
With the victim released from the spell, your
slavers breathed a sigh of relief as the ritual was completely disrupted,
leaving only the corrupted body of the wizard as proof that it ever took
place.
After looting the tower clean, your slavers <<uadv $g.purifier1>> took <<rep
$g.corrupted>> as a trophy home of their succesful purification attempt.
</p><<if $gOutcome != 'success'>>
<<if $g.corrupted.isMale()>>
<<questimage 'mist_merge_disrupt_male_failure.jpg'>>
<<else>>
<</if>>
<</if>>
<p>
By the time your slavers arrived, the ritual had already been completed.
Your slavers watched as the wizard finished conversing with what appeared to be a demon.
<<if $gOutcome == 'success'>>
Seeing your slavers, the demon disappeared into bats while the wizard, using their newly acquired
knowledge, teleported away. Your slavers were disappointed in the failure, but
at least they were free to <<uadv $g.purifier1>>
loot the place. They could only pray that the demon would not cause too much havoc in the vicinity.
<<else>>
Noticing your slavers, the demon went on the offensive charged at them.
<<Yourrep $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 could muster.
But the demon was too powerful for your slavers, and <<they $g.corrupted>>
injured <<rep $g.warrior>>,
<<if $gOutcome == 'failure'>>
before proceeding to corrupt your purifiers.
Your slavers managed to return home, but suffering from injuries and corruptions.
<<else>>
before proceeding to ravage all of your slavers. By the end of
the debauchery, your slavers had been completely corrupted,
but if there was any consolation, at least their personalities remain
intact.
<</if>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'night_shift2', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert', 'transformation', 'money',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'slave': 'all',
'thief': 'all',
'lord': '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, setup.rarity.rare],
],
[ /* 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 <<lore region_desert>> in the last
few weeks. The stories differ from household to household — some say the
thieves are just common thieves stealing valuables inside,
while others say they only steal rare family heirlooms 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>>
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 that were being hanged to dry.
<</if>>
Fearing for their property and more importantly their sole <<daughter $g.slave>>, they are hiring
for extra guards to help 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: <<Yourrep $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 all the weakest points of the house.
Once the preparations were 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 was a <<urace $g.thief>>
apparently caught in a trap laid by <<yourrep $g.trapper>>.
Your slavers smirked at the thief's predicament, a
well deserved punishment 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
a <<urace $g.shadow>> and another hired mercenary engaged in a fight.
With your slavers joining in, there was no hope that the thief was going to
be able to escape, and <<therace $g.thief>> thief thief|was quickly subdued.
But as your slaver smugly gazed 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
unscrupulous mercenary took the lion's share.
All the hirelings were quickly expelled from the house afterwards.
No doubt it was so that the <<lord $g.lord>> could 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 received another calling card in the next few
days, which made <<yourrep $g.trapper>> wonder if <<they $g.trapper>> actually caught
the right thief...
</p><p>
The usual occupation of your slavers were to enslave and raid, not to protect.
As a result they were clueless during these protection missions, and nobody
ever noticed when the <<daughter $g.slave>> of the
mansion went missing one night. All that was left was 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,
greatly traumatizing them.
</p>
<p>
<<Yourrep $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 were to enslave and raid, not to protect.
As a result they were clueless in these kind of protection missions. In fact,
they performed the job so poorly that it took <<rep $g.defender>> and <<rep
$g.trapper>> days before they realized that
<<yourrep $g.shadow>> had went missing.
<<if $g.shadow.getGender() == $g.slave.getGender()>>
<<rep $g.shadow>> shadow|was apparently mistaken for the <<daughter
$g.slave>> of the <<lord $g.lord>>, and seemed to have been kidnapped on
<<their $g.slave>> behalf.
<<else>>
It was unclear how <<rep $g.shadow>> went missing, but perhaps after seeing how
tightly the mansion was guarded, the thief gave up on kidnapping the
<<daughter $g.slave>> and made do with <<yourrep $g.shadow>> instead.
<</if>>
If there was a positive thing to come out from this, it's that your slavers
actually successfully guarded the <<daughter $g.slave>> and got paid for their
services. But at what cost?
</p>
<p>
<<uneedrescue $g.shadow>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'night_shift', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert', 'transformation', 'money',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'slave': '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_shiftFailure',
[
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, setup.rarity.rare],
],
[ /* restrictions to generate */
setup.qres.VarLte('nightshifter', 2),
setup.qres.NoQuest('night_shift'),
setup.qres.NoQuest('night_shift2'),
setup.qres.NoQuest('night_shift23'),
],
)>><<include 'Quest_night_shift2'>><p>
Simple problem requires simple solution: <<Yourrep $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 all the weakest points of the house.
Once the preparations were complete, they waited for the attack...
</p>
<<if $gOutcome == 'crit'>>
<p>
A few days later, during one of their night shifts, your slavers heard a loud crashing
sound coming from the second floor. <<Yourrep $g.trapper>> rushed upstairs and saw a
dark shade apparently kneeling in pain from their own entry into the mansion.
<<Rep $g.defender>> easily subdued the inexperienced thief with a
painful-looking headlock. The crash woke up all the residents of the
mansions, including the head of the mansion. Seeing the thief securely
bound within the painful embrace of <<therace $g.defender>>,
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 wandered whether this was the same thief as the rumored one, or
it was just a plain coincidence that the thief decided to rob this very mansion.
Either way, the thief got what <<they $g.slave>> 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 <<yourrep $g.trapper>>, your slavers rushed upstairs and
saw one of the other mercenaries securing what seemed to be a wannabe-thief to
the ground. The thud woke 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.
Your slavers were hurriedly sent back to your fort with plenty of money --
— no doubt so that <<they $g.slave>> can punish the wannabe thief in unspeakable ways...
</p>
<</if>>
<p>
Another unfortunate household received 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 <<yourrep
$g.shadow>>, managed to noticed when a thief broke in in the dead of the
night and stole one of the paintings off the second floor.
<<if $gOutcome == 'failure'>>
The head of the mansion was understandably furious with the mercenaries they hired, and
ordered all of them to reimburse the losses.
Your slavers were not given much choice in the matter and had to contribute
some money for the damages.
<<else>>
Worse, the painting was in the very same room that your slavers were supposed to guard that night.
With no excuses to be had, the slavers were forced to pay an exorbitant amount for the damages.
<</if>>
</p>
<<if $gOutcome == 'disaster'>>
<p>
You have a sneaking 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>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_night_shift231',
"shifter2",
'all', /* pools */
1, /* reuse chance */
[
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.QuestTemplate(
'night_shift23', /* key */
"Night Shift", /* Title */
"darko", /* Author */
[ 'desert', 'transformation', 'money',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'defender': setup.qu.defender,
'trapper': setup.qu.trapper,
'shadow': setup.qu.shadow_fighter, },
{ /* actors */
'thief': 'all',
'lord': 'all',
'slave': 'desert_all',
'shifter2': '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', "a|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, setup.rarity.uncommon],
],
[ /* restrictions to generate */
setup.qres.VarLte('nightshifter', 2),
setup.qres.NoQuest('night_shift'),
setup.qres.NoQuest('night_shift2'),
setup.qres.NoQuest('night_shift23'),
],
)>><<include 'Quest_night_shift2'>><p>
Simple problem requires simple solution: <<Yourrep $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 all the weakest points of the house.
Once the preparations were 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 a sudden
realization, <<yourrep $g.shadow>> suggested the rest of the team to remain on high alert, as this reminded
<<them $g.shadow>> of the previous quests where the <<daughter $g.slave>>
would somehow transform within a night.
Their vigilance was rewarded as after two weeks of vigilance, during one of the nights
<<rep $g.shadow>> spotted a faint purple glow coming from the second floor bedroom
— the one where the <<lord $g.lord>>'s <<daughter $g.slave>> was supposed to
rest in.
</p>
<p>
Your slavers hurriedly rushed to the room and were met with the most debauched of
scenes as the <<daughter $g.slave>> physical body was being transformed before
your slavers' eyes.
<<ubodyswap $g.slave $g.thief>>
</p>
<p>
But something was off with the transformation, and your slavers were clueless.
That is, until <<rep $g.shadow>>
perceptively recalled one of the earlier quests they had done. Apparently,
the poor <<girl $g.slave>> transformed into the exact same body with
the victim of the first nightshifting!
This could only mean that this was not actually a mere transformation — rather, it
was a bodyswapping ritual somehow performed remotely.
They were now convinced that this serial bodyswapping all came from the same
perpetrator — somewhere out there in the desert performing remote bodyswapping rituals.
</p>
<p>
Still, they were powerless to stop the transformation and were unable 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 was very similar to what happened last time in a
similar quest. They started to suspect that this was done by the same
perpetrator — a serial transformer that transformed their victim at night.
Perhaps they could try to remember this fact some other time and stay vigilant
throughout the night.
The deed had been done, however. They <<lord $g.lord>> of the mansion
was 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 this mission, it was a failure.
</p>
<</if>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Fortunately for you, the <<lord $g.lord>> of the mansion was a <<man $g.lord>>
with a big heart. <<They $g.lord>> did not care about the appearance of <<their $g.lord>>
<<daughter $g.slave>>, as long as <<they $g.slave>> <<if $g.slave.getGender()
!= $g.shifter2.getGender()>>(or <<they $g.shifter2>> now?) <</if>> remained
with <<them $g.lord>>. Your slavers were paid for their services, even though
they didn't actually do anything. But <<rep $g.defender>> defender|was certainly not
about to complain about free money!
</p>
<<else>>
<p>
As expected, the <<lord $g.lord>> lord|was completely upset by what <<they
$g.lord>> perceived 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 mansion.
With nowhere to go, your slavers offered the <<daughter $g.slave>> to come
with them, which <<they $g.lord>> agreed, 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
had difficulty trying to understand what they were supposed to do in this
kind of mission where their goal is to protect, not to 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>> became a shadow of <<their $g.slave>> former self.
Your slavers were found in the same day completely dazed in their respective guard stations
— apparently lightly affected by the same attack that transformed the poor
<<daughter $g.slave>>.
Fortunately for you, your slavers' physical appearances remained intact. But they have
lost all memories regarding the perpetrator and would also 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)>>
<<if _u.getGender() != $g.shifter2.getGender()>>
<<set _v = setup.unitgroup.desert_all.getUnit({
trait_key: _u.getGender().key,
retries: 1000,
})>>
<<run setup.qcImpl.Bodyswap.doBodySwap(_v, $g.shifter2)>>
<</if>>
<p>
Your slavers stood watch as best as they could, but nothing happened within the
first two weeks. They grew complacent — and it was during this very time that
one night,
<<yourrep _u>> accidentally stepped into the center of an ominous-looking
purple magical circle that appeared seemingly 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>>
<<if _u.isYou()>>
were
<<else>>
was
<</if>>
surprisingly not mentally affected by the ordeal
— in fact, being the direct target of the
transformation spell gave
<<them _u>> the knowledge of the exact location where the spell was being
cast from. <<Rep _u>> licked their (new) lips as
<<they _u>> began to plan <<their _u>> revenge and the things <<they _u>> would do
once <<they _u>> got <<their _u>> (new)
<<uarms _u>> around the perpetrator.
Perhaps <<their _u>> own <<ubody _u>> could even be found and be reclaimed back.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_the_serial_bodyswapper1',
"shifter1",
'desert_all', /* pools */
0, /* reuse chance */
[
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.UnitGroup(
'quest_the_serial_bodyswapper2',
"shifter3",
'subrace_humansea', /* pools */
0, /* reuse chance */
[
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.UnitGroup(
'quest_the_serial_bodyswapper3',
"Serial Bodyswapper",
'desert_all', /* pools */
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",
'all', /* pools */
0, /* reuse chance */
[
setup.qc.AddRandomBodypart('unit', false), ],
)>>
<<set _criteriadistractor = new setup.UnitCriteria(
null, /* key */
'Distractor', /* name */
[
setup.trait.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fighter': setup.qu.fighter,
'exploder': setup.qu.arcanefire,
'distractor': _criteriadistractor, },
{ /* actors */
'shifter2': 'quest_night_shift231',
'shifter1': 'quest_the_serial_bodyswapper1',
'shifter3': 'quest_the_serial_bodyswapper2',
'thief': 'quest_the_serial_bodyswapper3',
'victim': 'quest_the_serial_bodyswapper4', },
[ /* costs */
],
'Quest_the_serial_bodyswapper',
setup.qdiff.hardest47, /* difficulty */
[ /* outcomes */
[
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Bodyswap('thief', 'victim'),
setup.qc.Slave('thief', "a|was a serial bodyswapper notorious for using long-range bodyswapping magic to \"kidnap\" the bodies of a|their victims", undefined), ],
], [
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.SetCooldownQuest('night_shift23', 250),
setup.qc.SetCooldownQuest('night_shift2', 250),
setup.qc.SetCooldownQuest('night_shift', 250),
setup.qc.VarAdd('nightshifter', 10, 20),
setup.qc.VarRemove('nightshifter_bodyswapped'),
setup.qc.Opportunity('the_serial_bodyswapper__reward',
{
fighter: 'fighter',
exploder: 'exploder',
distractor: 'distractor',
shifter1: 'shifter1',
shifter2: 'shifter2',
shifter3: 'shifter3',
}),
setup.qc.Event('bodyswap_epilogue', 1),
],
], [
'Quest_the_serial_bodyswapperCrit',
[
setup.qc.Outcomes('success'),
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, setup.rarity.always],
],
[ /* 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>
Do you remember the serial bodyswapper that went rampant in the
<<lore region_desert>>, doing remote body-swapping rituals over unsuspecting victims
<<if _u>> including <<yourrep _u>><</if>>?
Well, your slavers had 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 <<they _u>> can feel that revenge is
finally within <<their _u>> grasp.
<</if>>
</p>
<p>
You can try to stop this bodyswapping crime once and for all by sending a group of
slavers to the location. You need one slaver, preferably proficient in
<<rep setup.trait.magic_fire>>, to blow up the entrance. Once the entrance is
open, you need a slaver proficient in combat 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 <<yourrep _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 spent 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 were complete, your slavers headed into the oasis.
When they arrived at a stone that looked suspiciously like a door
<<rep $g.exploder>> got to work.
<<if $g.exploder.isHasTrait('magic_fire')>>
From a safe distance, <<rep $g.exploder>> cast a large explosion spell which
punched a big hole into the wall safely.
<<else>>
<<Yourrep $g.exploder>> placed all the explosives <<they $g.exploder>>
had purchased 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>> led the
team down the hallways.
</p>
<p>
The stronghold was surprisingly small. After passing what seemed to be a
laboratory next to a bedroom, they arrived at a small ominous clearing. A
large purple magical circle filled the entire room, and at its center was
a hooded <<urace $g.thief>> deep in incantation. Your slavers could see as
<<their $g.thief>> body morphed before their eyes — it seemed they were in luck:
the serial bodyswapper was too deep in their spell to notice the loud
explosion from earlier.
</p>
<<if $gOutcome == 'crit'>>
<p>
With the serial bodyswapper deep in the ritual, <<rep $g.fighter>> led your team
of slavers to charge.
Surprised and greatly distracted by <<yourrep $g.distractor>> swaying <<their $g.distractor>> <<ubody
$g.distractor>> distractingly,
the serial bodyswapper lost control of <<their $g.thief>>
spell, causing it to misfire. Before your slavers' eyes <<their $g.thief>>
body distorted unnaturally and extremely painfully. Either way it certainly made
your slavers' job very easy as they tied up, gagged, and secured the
bodyswapper who was still in deep excruciating pain, 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 the ritual, <<rep $g.fighter>> led your team
of slavers to charge.
Despite being surprised and distracted by <<yourrep $g.distractor>> swaying <<their $g.distractor>> <<ubody $g.distractor>>,
the serial bodyswapper still managed to alter the spell <<they $g.thief>>
thief|was casting into a spell of mass flooding.
Torrents of water came out of nowhere, flooding the entire chamber and pushing
your slavers back from approaching the bodyswapper-wizard. It seemed your
slavers had underestimated the magical prowess of the bodyswapper. By the
time they managed to break through the magical flood the bodyswapper was
already nowhere to be seen.
</p>
<<else>>
<p>
But it seemed the bodyswapper was still ready for a fight — as soon as your slavers
approached, a familiar purple circle glowed brightly under <<yourrep $g.fighter>>
— instantly transforming <<them $g.fighter>> before your slavers' eyes.
<<ubodyswap $g.fighter $g.shifter1>>
While your slavers were distracted by the transformation, the
bodyswapper-wizard made <<their $g.thief>> escape from the place.
</p>
<</if>>
<p>
With its owner gone, your slavers spent some time exploring the bunker. In
the dungeons they found several slaves seemingly already mindbroken for a
long time. It seemed 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 by means of bodyswapping.
<<if $gOutcome == 'failure'>>
<<rep $g.fighter>> noticed one of the slaves were actually wearing <<their
$g.fighter>> body, which gave <<them $g.fighter>> hope that perhaps <<they
$g.fighter>> could reclaim <<their $g.fighter>> original body back.
<</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 a tome detailing the
full bodyswapping ritual. While it required an expertise outside the
capabilities of anyone in your fort, the stronghold currently already 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 afterwards. Alternatively, you can
always use more slaves in your roster, and forget about all these bodyswapping shenanigan.
<<if $gOutcome == 'failure'>>
Still, this may be the only chance for <<rep $g.fighter>> to reclaim <<their $g.fighter>> original body.
<</if>>
</p><<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 as urged by <<yourrep $g.fighter>>, in order to prevent further bodyswapping
from happening.
<<if $g.exploder.isHasTrait('magic_fire')>>
<<rep $g.exploder>> messily cast 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>> led the team down the hallways.
</p>
<p>
Your slavers were then ambushed by the waiting bodyswapper, who was 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 worked <<their $g.thief>> <<lore magic_water>>. Immobilized, they
were helpless to prevent the advancing hands of the bodyswapper as <<they
$g.thief>> <<man $g.thief>>handled your slavers, trying to choose which fresh body <<they
$g.thief>> would like most to bodyswap with. After settling with <<reps
$g.fighter>> <<ubody $g.fighter>>, your other slavers were blasted away with
magic far outside from the stronghold, and they suffered great injuries as a
result.
</p>
<p>
<<Reps $g.fighter>> fate is to be bodyswapped again and again and be used as
the bodyswapper's personal body storage. You might be able to rescue <<therace $g.fighter>>
later with a rescuer, but <<they $g.fighter>> probably would
have already 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>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_shepherd_of_men_capture1',
'Shepherd',
'desert_all', /* pools */
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.bg_slaver,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_independent,
setup.trait.per_logical,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_loyal,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.eq_restrained,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
brawn: 1,
slaving: 1,
}
)>>
<<set _criteriaraider2 = new setup.UnitCriteria(
null, /* key */
'Specialist Raider', /* name */
[
setup.trait.bg_slaver,
setup.trait.per_aggressive,
setup.trait.per_proud,
setup.trait.per_independent,
setup.trait.per_logical,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.per_calm,
setup.trait.per_humble,
setup.trait.per_loyal,
setup.trait.per_empath,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.eq_restrained,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': _criteriaraider1,
'raider2': _criteriaraider2,
'support': setup.qu.raidersupport, },
{ /* actors */
'shepherd': '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', 'a|was the leader of a group of people farmers on the eastern deserts'),
setup.qc.MoneyNormal(), ],
], [
'Quest_shepherd_of_men_captureCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_shepherd_of_men_captureCrit',
[
setup.qc.Injury('raider1', 2),
setup.qc.Injury('raider2', 2),
setup.qc.Injury('support', 2), ],
], [
'Quest_shepherd_of_men_captureCrit',
[
setup.qc.Injury('raider1', 4),
setup.qc.Injury('raider2', 4),
setup.qc.MissingUnit('support'), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<include 'Opportunity_shepherd_of_men'>>
<p>
You have chosen the most dangerous option by attempting to capture the head shepherd.
</p><p>
Your slavers waited until the weekend, where most of the guards happened to be off duty.
Even then, the cabin housing the leader of these <<men $g.shepherd>>, the head
shepherd <<themself $g.shepherd>>, was still very heavily guarded.
Seeing no other option but a head-on assault, your slavers began their assault.
<<Yourrep $g.raider1>> and <<rep $g.raider2>> <<uadv $g.raider1>>
fought like
<<if $g.raider1.isHasTrait('per_evil') or $g.raider2.isHasTrait('per_evil')>>
villains of legend
<<elseif $g.raider1.isHasTrait('per_honorable') or $g.raider2.isHasTrait('per_honorable')>>
heroes of legend
<<else>>
mad<<men $g.raider1>>
<</if>>
while <<rep $g.support>> kept them healthy
throughout the fight.
</p>
<<if $gOutcome == 'crit'>>
<p>
After a long struggle, your slavers emerged victorious, and proceeded to
assault the cabin itself.
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 headed home victorious.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The head shepherd were apparently awake throughout the fight. Seeing as
<<their $g.shepherd>> guards were dispatched one by one,
<<they $g.shepherd>> made <<their $g.shepherd>> escape.
By the time your slavers were victorious, the shepherd was already
gone from the cabin. Still, it was not a complete defeat, as your slavers were
free to ransack whatever remained in the cabin, including a portion of the profits from the
farm.
</p>
<<else>>
<p>
But then, the head shepherd <<themself $g.shepherd>> decided to join the battle.
<<They $g.shepherd>> fought like a madman, injuring all your slavers, and ultimately
chased your slavers away.
<<if $gOutcome == 'failure'>>
While the mission ended up in failure, at least all your slavers
managed to come back home.
<<else>>
When hope seemed lost, <<yourrep $g.support>> sacrificed <<themself
$g.support>> to allow <<rep $g.raider1>> and <<rep $g.raider2>> to retreat.
<</if>>
</p>
<<if $gOutcome == 'disaster'>>
<p>
You can only guess what fate awaits <<yourrep $g.support>>, but given the
nature of the farm it should not be too hard of a guess.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'shepherd_of_men_raid', /* key */
'Shepherd of Men: Raid', /* Title */
'darko', /* author */
[ 'desert', 'money'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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 */
)>><<include 'Opportunity_shepherd_of_men'>>
<p>
You have chosen the safest option, which is to simply raid the farm.
</p><p>
Your slavers decided to target a particular supply cottage which was
significantly less guarded than the others.
The guards stood no chance as
<<set _vm = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'muscle_verystrong'})>>
<<set _nimble = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'tough_nimble'})>>
<<if _vm>>
<<rep _vm>> used <<their _vm>> bulging muscles to knock them out in one hit.
<<elseif _dark>>
<<rep _dark>> used <<their _dark>> dark magic to put them out.
<<else>>
your slavers jumped out from the darkness
and knocked them out.
<</if>>
Your slavers quickly looted the entire cottage as well as some of the bondage equipments currently
being used on an unfortunate slave before escaping into the night.
</p><p>
Your slavers decided to target one of the smaller huts, which was less
guarded than the others. With number advantage on their side, the guards were
quickly dispatched, allowing your slavers to loot the hut before the
commotion drew in the rest of the guards.
</p><p>
Your slaver chose the wrong building to assault. The building
was much more well guarded than your slavers thought. In the ensuing fight,
your slavers saw their mistake, and escaped with only slight injuries on <<yourrep $g.raider1>>.
</p><p>
Your slavers ignorantly chose to attack the guard barracks, of all places.
This of course meant their swift defeat, and your slavers were forced to retreat with heavy injuries.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_shepherd_of_men_steal1',
'Animals',
'desert_all', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'thief1': setup.qu.thief,
'thief2': setup.qu.thief,
'appraiser': setup.qu.slaveappraiser, },
{ /* actors */
'animal': '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', 'a|was captured and trained at a slave farm'), ],
], [
'Quest_shepherd_of_men_stealSuccess',
[
setup.qc.MoneySmall(),
setup.qc.Slave('animal', 'a|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 */
)>><<include 'Opportunity_shepherd_of_men'>>
<p>
You have chosen to steal one of the farm's products.
</p><p>
Your slavers sneaked into the well-guarded farm in the middle of the night.
There, they found an unguarded barn, which your slavers entered from the rear door.
The slaves were all placed in their respective booths, each with their hands
restrained to the back and ankles chained to the corners of their booths,
while their necks are securely locked in stock.
With seemingly no guard watching over the barn,
<<yourrep $g.thief1>> and <<rep $g.thief2>> had all the time in the world to
loot the barn clean while <<rep $g.appraiser>> <<man $g.appraiser>>handled and appraised
the multiple slaves on display,
<<if $g.appraiser.isHasTrait('per_calm')>>
taking <<their $g.appraiser>> time leisuerly,
<<elseif $g.appraiser.isHasTrait('per_aggressive')>>
rushedly going through slave after slave,
<</if>>
before picking 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 rear entrance was left unguarded, which your slavers entered.
There were even more guards inside, and your slavers were not given much choice if they wanted to remain
undetected.
They unlocked the closest slave in the barn
from <<their $g.animal>> night bondage and kidnapped <<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 meant
your slavers had no choice but to run as fast as they could. Your slavers were
slightly injured during the chase, which was not too bad considering the other
scenarios would result in far much worse outcome.
</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 <<them $g.thief1>>. Your other slavers, being completely
outnumbered, had no choice but to abandon <<yourrep $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.Title(
"quest_ex_best_ass_0", /* key */
"Ex-Best Ass", /* name */
"Won Best Ass in some festival long time ago", /* description */
"a|won the best ass in the festival a long time ago and a|was kept as the orcish cum receptacle until a|their mind shattered completely", /* unit text */
10000, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"second_best_ass0",
"ExBestAss",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.Mindbreak('unit'),
setup.qc.TraitReplaceExisting('unit', setup.trait.anus_gape),
setup.qc.AddTitle('unit', 'quest_ex_best_ass_0'),
],
)>>
<<set _criteriaass = new setup.UnitCriteria(
null, /* key */
'Ass Inspector', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.per_attentive,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.dick_demon,
],
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'second_best_ass', /* key */
"Second Best Ass", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
'unit',
'special',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'infil1': [ setup.qu.infiltrator, 1],
'infil2': [ setup.qu.infiltrator, 1],
'ass': [ _criteriaass, 1],
},
{ /* actors */
'a': [
],
'slave': 'second_best_ass0',
},
[ /* costs */
],
'Quest_second_best_ass',
setup.qdiff.hardest57, /* difficulty */
[ /* outcomes */
[
'Quest_second_best_assCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('slave', "a|was \"rescued\" from being the orc\'s ass-only cum receptacle", undefined),
],
],
[
'Quest_second_best_assCrit',
[
setup.qc.TraitReplaceExisting('a', setup.trait.anus_gape),
setup.qc.TraitReplace('a', setup.trait.per_sexaddict),
setup.qc.Return('a'),
],
],
[
'Quest_second_best_assCrit',
[
setup.qc.Injury('ass', 30),
setup.qc.Event('best_ass_rescue', 30, {
'a': 'a',
}),
],
],
[
'Quest_second_best_assCrit',
[
setup.qc.MissingUnit('ass'),
setup.qc.TraitReplaceExisting('ass', setup.trait.anus_gape),
setup.qc.Event('best_ass_rescue', 30, {
'a': 'a',
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('best_ass_rescue', 30, {
'a': 'a',
}),
],
)>><p>
You have tracked <<reps $g.a>> whereabout to a certain orcish camp in the deserts. Apparently, <<they $g.a>> and all the previous winners of "Best ass" were still securely locked in their stockades, and being used daily as entertainment for the orcs and their guests. All their faces were covered in dark hood too, which poses a problem of identifying just which of the asses belong to <<rep $g.a>>.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
To solve this issue, <<yourrep _u>> has come up with the following plan: send your most sensitive-dicked slaver over to judge the ass one by one, accompanied with two infiltrators to infiltrate the camp at night. Surely they will be able to identify <<rep $g.a>> by the shape and the feeling of their ass, and will be able to smuggle <<them $g.a>> out safely...
</p><p>
Under the guise of the night, <<rep $g.infil1>> and <<utheirrel $g.infil1 $g.infil2>> smuggled <<rep $g.ass>> into the camp. But that was only the beginning of the task, and <<rep $g.ass>> went to work immediately. One by one, <<rep $g.ass>> assfucked the slaves one by one, relying on <<their $g.ass>> keen sense to distinguish your missing slaver <<rep $g.a>>.
<<if $g.ass.isHasTrait('per_attentive')>>
<<Rep $g.ass>> remained attentive as <<they $g.ass>> assfucked, feeling every detail of the fuck.
<</if>>
<<if $g.ass.isHasTrait('dick_demon')>>
The sensitive barbs on <<their $g.ass>> demonic dick were very helpful for identifying the exact feeling of fucking <<reps $g.a>> ass.
<</if>>
<<if $g.ass.isHasTrait('per_lustful')>>
<<Rep $g.ass>>, being the lustful <<urace $g.ass>>, ass|was quite motivated by the task.
<</if>>
<<if $g.ass.isHasTrait('per_chaste')>>
<<Rep $g.ass>>, being the chaste <<urace $g.ass>>, ass|was quite horrified by the task.
<</if>>
<<if $g.ass.isHasTrait('per_dominant')>>
Assfucking a sub felt right at home for the dominant <<urace $g.ass>>.
<</if>>
<<if $g.ass.isHasTrait('dick_huge')>>
<<Their $g.ass>> <<udick $g.ass>> ass|was instrumental in helping to gauge how gaped each slave's ass were.
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.ass>> ass|was very good at <<their $g.ass>> unorthodox job, and ass|was able to identify <<rep $g.a>> in no time at all. Your slavers had some extra time and decided to also take home the slave whose ass felt the best to <<rep $g.ass>> as an extra prize home.
</p>
<<else>>
<p>
It took a while, but <<rep $g.ass>> finally found the ass that "gripped just right". Your slavers confidently brought the slave, or rather, <<rep $g.a>> home.
</p>
<</if>>
<p>
Thankfully, <<reps $g.a>> mind remained somewhat intact despite the ordeal. <<They $g.a>> now a|sport a permanently dazed expression, however, and <<they $g.a>> would dream of being assfucked every now and then...
</p>
<<else>>
<p>
Unfortunately, <<rep $g.ass>> learned the hard way why a certain slave won best ass.
One of the slave's asshole gripped <<reps $g.ass>> <<udickorstrap $g.ass>> so tightly that it refused to let it go. <<Rep $g.ass>> struggled for a long while, long enough to alert the guards, and before long the orcish warriors were coming at your slavers in force.
</p>
<<if $gOutcome == 'failure'>>
<p>
<<Rep $g.ass>> had to risk the integrity of <<their $g.ass>>
<<udickorstrap $g.ass>> in order to escape,
injuring <<them $g.ass>> greatly both physically but mostly mentally in the process...
</p>
<<else>>
<p>
The ass was completely stubborn, gripping <<rep $g.ass>> very tightly with seemingly no intention of letting the phallus go. <<Rep $g.infil1>> and <<rep $g.infil2>> had no choice but to abandon <<rep $g.ass>> to <<their $g.ass>> fate lest they all share a place in one of the stockades for the rest of their careers...
</p>
<p>
<<uneedrescue $g.ass>>, although knowing how the encampment works, <<their $g.ass>> ass would no doubt be somewhat more gaped already by the time you rescue <<them $g.ass>>...
</p>
<</if>>
<p>
You will surely get another chance to rescue <<rep $g.a>>...
</p>
<</if>><<run new setup.Title(
"quest_master_of_sex_0", /* key */
"Master of Sex", /* name */
"A true master of sex", /* description */
"a|have proven a|themself to be a master of sex by completing a challenge in the deserts", /* unit text */
7599, /* slave value */
{ /* skill additives */
sex: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Whore', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.anus_tight,
setup.trait.tough_tough,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_masochistic,
],
[
setup.trait.dick_tiny,
setup.trait.breast_tiny,
setup.trait.anus_gape,
setup.trait.tough_nimble,
setup.trait.per_chaste,
setup.trait.per_dominant,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.sex, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_sex_0')
]), 'Have not yet mastered the art of (butt)sex'),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_sex', /* key */
"Test of Sex", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'prep',
'danger',
'item',
'desert',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'judge': 'desert_all',
},
[ /* costs */
],
'Quest_test_of_sex',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_sexCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_sex_0'),
setup.qc.EquipmentDirect('sex_nipple_master'),
setup.qc.Leave('a', "a|was nominated \"Best ass\" in the Ass Competition and a|was \"hired\" as a permanent \"employee\"", undefined),
setup.qc.MoneyCustom(20000),
setup.qc.Event('best_ass_rescue', 15, {
'a': 'a',
}),
],
],
[
'Quest_test_of_sexCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_sexCrit',
[
setup.qc.Injury('a', 10),
setup.qc.IfThenElse(
setup.qres.Actor('a', setup.qres.AllTraits([setup.trait.per_chaste], true)),
setup.qc.DoAll([
setup.qc.Trauma('a', setup.trait.trauma_sex, 20)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('a', setup.qres.AnyTrait([setup.trait.per_lustful, setup.trait.per_sexaddict], true)),
setup.qc.DoAll([
setup.qc.Trauma('a', setup.trait.boon_sex, 20)
], undefined),
setup.qc.DoAll([
], undefined))
], undefined)),
],
],
[
'Quest_test_of_sexCrit',
[
setup.qc.MissingUnit('a'),
setup.qc.TraitIncreaseExisting('a', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('a', setup.trait.anus_gape),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.sex, 100),
setup.qres.NoTitle('quest_master_of_sex_0')
], 1),
],
[ /* expiration outcomes */
],
)>><p>
The desert region of the east is infamous for its many festivals, be it the orcish ones or the desertfolk ones. Among these festivals are one celebrating the most carnal skill of all people: buttsex. Every year, the biggest orc tribe in the region would invite the most skillful whores to, (clears throat), "demonstrate their skills" in front of the orcs. Despite the degrading nature of the festival, many skillful whores and even the occasional courtesan would participate for it promises a large wealth of gold as well as an extremely lucrative reward to the winner: a
<<rep setup.equipment.sex_nipple_master>>, be it for their own amusement or to be sold for an astronomical sum.
</p>
<p>
As it happens, you have a masterful whore among your slavers. Should they enter, they might just be able to win you the legendary nipple chains. But be warned, rumors are abound that the Ass Festival carries an extra "prize", and the rumors are inconsistent whether the prize is a good thing, or a very, very bad thing...
</p><p>
<<Yourrep $g.a>> arrived at the designated orcish camp, joining a group of hopeful whores in an attempt to be nominated as "Best Ass" and win the ass championship home.
The participants were stripped naked in order to showcase their asses to the masses, and the first round was relatively easy. They were told to do nothing but mingle around with the other participants, within an orcish hut, which has been enchanted (unknowingly to the participants) with the foresight enchantment. Many orcish warriors as well as some invited gentle<<men $g.judge>> would be able to see the content of the tent from all angles from a neighboring tent, and they would discuss with each other how well-shaped the participant's fuckholes are as the hopeful whores sit and expand their asses for judge's amusement.
</p>
<<if $gOutcome == 'disaster'>>
<p>
<<Rep $g.a>> never passed even the qualification round.
Whether it's <<their $g.a>>
<<if $g.a.isHasTrait('anus_gape')>>
gaping anus,
<</if>>
<<if $g.a.isHasTrait('tough_nimble')>>
low endurance,
<</if>>
<<if $g.a.isHasTrait('per_chaste')>>
low sexual liberty,
<</if>>
<<if $g.a.isHasTrait('dick_tiny')>>
<<udick $g.a>>,
<</if>>
<<if $g.a.isHasTrait('breast_tiny')>>
<<ubreasts $g.a>>,
<</if>>
<<if $g.a.isHasTrait('per_dominant')>>
unslavelike demeanor,
<</if>>
bad luck,
or some other reason,
<<rep $g.a>> and the rest of the participants that failed the qualification round were "reassigned" as the festival's entertainment for the duration of their stay. Each were locked into a stockade, making both their mouth hole and their rear holes available for all the festival attendants to enjoy. Evidently, they must accidentally left <<rep $g.a>> hanging in the stockade long after the festival ended, as <<therace $g.a>> never made it back home.
<<uneedrescue $g.a>>, although there is little doubt that their anus will already be gaped beyond recovery by then...
</p>
<<else>>
<p>
The judging came next, and <<rep $g.a>> passed with flying colors, together with a dozen other participants. The losers were ushered outside, surely to be given some money and returned to their respective homes with pride. Meanwhile the winners are led to a different tent this time for the final bout. As the participants made themselves comfortable for the second round, they all suddenly felt very, very sleepy, and all fell asleep in the tent, which had been enchanted with the enchantment of drowsiness.
</p>
<p>
By the time <<yourrep $g.a>> regained consciousness, <<they $g.a>> were locked securely within a movable stockade.
<<if $g.a.isHasTail()>>
<<Their $g.a>> <<utail $g.a>> were raised too, and chained into <<their $g.a>> new collars, exposing <<their $g.a>> ass entirely.
<</if>>
<<Rep $g.a>> understandably panicked, <<if $g.a.isHasTrait('per_submissive')>>
although not before letting out a little submissive squeal,
<<elseif $g.a.isHasTrait('per_dominant')>>
attempting to scream a curse or two,
<</if>>
but <<their $g.a>> mouth were securely ring-gagged.
<<Their $g.a>> ass was exposed and up in the air, ready for the inspections.
Looking around, <<they $g.a>> noticed <<they $g.a>> a|was not alone, and <<they $g.a>> saw all the other finalists in the same predicament.
</p>
<p>
<<Yourrep $g.a>> a|was spared little time to process the situation as the festival master announced the start of the climax of the festival — judging the finalists for who has the best ass. It was a long grueling process, as each of the twenty or so judges would take turn feeling and assfucking the many participants one by one.
And <<rep $g.a>> a|was not spared from the judging.
<<if $g.a.isHasTrait('anus_tight')>>
The judge took great pleasure inserting <<their $g.judge>>
<<udickorstrap $g.judge>> into <<reps $g.a>> extremely tight asshole, earning an agonized muffle from <<therace $g.a>>, but earning <<them $g.a>> a lot of points in the judging.
<</if>>
<<if $g.a.isHasTrait('anus_loose')>>
Despite having an experienced ass, the sheer length of the judge's
orcish
<<if $g.judge.isFemale()>>strap-on<<else>>cock<</if>> still force the poor hole agonizingly wide, and <<rep $g.a>> let out an agonized muffle as <<their $g.a>> hole a|was violently violated.
<</if>>
<<if $g.a.isHasTrait('anus_gape')>>
The judges were disappointed by <<reps $g.a>> gaping hole, earning <<therace $g.a>> little score but still not sparing <<them $g.a>> from the rape.
<</if>>
<<if $g.a.isHasTrait('per_lustful')>>
<<Rep $g.a>> is already rather addicted to sex, and <<their $g.a>> enthusiasm being buttfucked earned <<them $g.a>> some extra score.
<</if>>
<<if $g.a.isHasTrait('per_submissive')>>
<<Rep $g.a>> is a natural submissive, and taking a phalli inside <<them $g.a>> feels natural, earning <<them $g.a>> a higher score than normal.
<</if>>
<<if $g.a.isHasTrait('per_masochistic')>>
<<Rep $g.a>> couldn't help but get masochistically aroused from having been used so, a fact the judges took a positive note of.
<</if>>
<<if $g.a.isHasTrait('dick_huge')>>
<<Reps $g.a>> huge phallus also draw the judge's attention, who appreciated the added decoration and entertainment offered by playing with the massive thing.
<</if>>
<<if $g.a.isHasTrait('breast_huge')>>
<<Reps $g.a>> huge breasts also draw the judge's attention, who appreciated the added decoration and entertainment offered by playing with the massive fleshy thing.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
After being used and passed around like a sexual plaything for hours, the final judging finally commenced.
Still not freed from <<their $g.a>> bondage, <<rep $g.a>> watched as the judges voted one by one for the best ass in the competition. <<Rep $g.a>> heard <<their $g.a>> name mentioned again, and again, and again, and eventually, <<they $g.a>> a|was announced "best ass in the festival". <<They $g.a>> watched helplessly as <<they $g.a>> a|was crowned winner, and the judge painfully clamped the prize <<rep setup.equipment.sex_nipple_master>> on <<their $g.a>> nipples. But despite the competition being over, <<rep $g.a>> a|was not freed from <<their $g.a>> bondage, and <<they $g.a>> together with the rest of the finalists were made available for public use for the rest of the festivals. <<Rep $g.a>> got used by the oh so many attendants who were very much interested in feeling an ass good enough to win best ass in festival before finally mercifully passing out mid-fuck.
</p>
<p>
A few days later, your fort receives a shipment of a large amount of gold, as well as the <<rep setup.equipment.sex_nipple_master>>. <<Rep $g.a>> a|was nowhere to be found, however, and instead you received a letter thanking you for the wonderful ass that is <<rep $g.a>> and informing you about <<their $g.a>> new "occupation" as a sex toy under the orc's employ. A toast for a new career?
</p>
<p>
Either way, an opportunity will surely come should you decide to rescue <<rep $g.a>>. Although by the time you get the opportunity, what state of mind and body would <<therace $g.a>> already be in after being so thoroughly used as nothing but a cum receptacle?
</p>
<<else>>
<p>
After being used and passed around like a sexual plaything for hours, the final judging finally commenced.
Still not freed from <<their $g.a>> bondage, <<rep $g.a>> watched as the judges voted one by one for the best ass in the competition. <<Rep $g.a>> heard <<their $g.a>> name mentioned a couple of times, but it was not enough of times, and eventually, <<they $g.a>> lost the final round. <<They $g.a>> watched as the winner was awarded the prize, and have their nipples adorned with the <<rep setup.equipment.sex_nipple_master>>. The competition over, all the finalists were made available for public use for the rest of the festivals, and <<rep $g.a>> got used by the oh so many attendants before finally mercifully passing out mid-fuck.
</p>
<p>
When <<rep $g.a>> came to, <<they $g.a>> a|was already on a carriage on the way back to your fort, courtesy of the festival.
<<Their $g.a>> ass was incredibly sore, no doubt still being used long after <<they $g.a>> passed out, and is now a lewd gape.
<<if $g.a.isHasTrait('per_lustful')>>
Still, <<they $g.a>> seemed to like it quite a bit...
<<elseif $g.a.isHasTrait('per_chaste')>>
A fact that horrified the chaste <<urace $g.a>>.
<<else>>
<<They $g.a>> tried to reduce the pain as much as possible by softly rubbing <<their $g.a>> poor and well-used rearhole.
<</if>>
Back at your fort, <<they $g.a>> would need some rest after such a brutal experience.
<<if $gOutcome == 'success'>>
Despite losing, the festival orcs appreciated your slaver's performance enough to send an invitation to yet another ass-wrecking festival...
<</if>>
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Student of Fire', /* name */
[
setup.trait.per_slow,
setup.trait.per_smart,
setup.trait.per_gregarious,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_lustful,
setup.trait.per_curious,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_lavish,
setup.trait.per_submissive,
setup.trait.per_frugal,
setup.trait.per_logical,
setup.trait.per_proud,
setup.trait.per_empath,
setup.trait.per_humble,
setup.trait.per_honorable,
setup.trait.per_brave,
setup.trait.per_evil,
setup.trait.per_cautious,
setup.trait.per_attentive,
setup.trait.per_kind,
setup.trait.per_dreamy,
setup.trait.per_cruel,
setup.trait.per_aggressive,
setup.trait.per_lunatic,
setup.trait.per_calm,
setup.trait.per_masochistic,
setup.trait.per_playful,
setup.trait.per_serious,
setup.trait.per_independent,
setup.trait.per_loyal,
setup.trait.per_studious,
setup.trait.per_active,
setup.trait.per_direct,
setup.trait.per_sly,
setup.trait.per_stubborn,
setup.trait.skill_ambidextrous,
setup.trait.skill_intimidating,
setup.trait.magic_light_master,
setup.trait.magic_light,
setup.trait.magic_earth_master,
setup.trait.magic_earth,
setup.trait.magic_wind_master,
setup.trait.magic_wind,
setup.trait.magic_water_master,
setup.trait.magic_water,
setup.trait.skill_animal,
setup.trait.skill_alchemy,
setup.trait.skill_entertain,
setup.trait.skill_creative,
setup.trait.skill_hypnotic,
setup.trait.skill_connected,
setup.trait.skill_flight,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'be_cleansed_in_fire', /* key */
"Be Cleansed in Fire", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'veteran',
'prep',
'trait',
'danger',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'student': [ _criteriastudent, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_be_cleansed_in_fire',
setup.qdiff.death1, /* difficulty */
[ /* outcomes */
[
'Quest_be_cleansed_in_fireCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_be_cleansed_in_fireCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('student', setup.qres.HasTitle('quest_consumed_by_fire_0')),
setup.qc.DoAll([]),
setup.qc.QuestDirectForceAssign('be_cleansed_in_fire', {student: 'student'}),
)
],
],
[
'Quest_be_cleansed_in_fireCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_be_cleansed_in_fireCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Alone but yet not alone, lost but yet not lost, suffering but yet at peace,
confused and yet focused, empty and yet so very full...
</p>
<<if $g.student>>
<p>
<<Rep $g.student>> continues on in <<their $g.student>> lonesome journey to
master <<their $g.student>> magic in the deserts...
</p>
<</if>><p>
<<if $gQuest.getSeed() % 5 == 0>>
<<rep $g.student>> continued to wonder in the vast desert with nothing but
<<their $g.student>> <<lore magic_fire>> by <<their $g.student>> side, losing
more and more of <<themself $g.student>> in order to obtain mastery over
it...
<<elseif $gQuest.getSeed() % 5 == 1>>
The intense heat of the desert only served to amplify the effects of <<rep
$g.student>> losing their own self little by little, all to master that
damned <<lore magic_fire>>...
<<elseif $gQuest.getSeed() % 5 == 2>>
<<lore magic_fire>> is not a forgiving mistress, taking more and more of
<<reps $g.student>> very core self if <<they $g.student>> ever want to have
mastery over it...
<<elseif $gQuest.getSeed() % 5 == 3>>
<<rep $g.student>> had to lose every single bit of <<themself
$g.student>>, if <<they $g.student>> ever want to gain mastery over the vast
magic of <<lore magic_fire>>...
<<elseif $gQuest.getSeed() % 5 == 4>>
Every passing day drained more and more of <<rep $g.student>> self, be it
<<their $g.student>> history, personality, and skills, and <<rep $g.student>>
could feel <<themself $g.student>> becoming more empty, all to let <<lore
magic_fire>> enter them...
<</if>>
</p>
<p>
<<run _cancleanse = $g.student.getRemovableTraits().filter(
trait => trait.getTags().includes("per") ||
trait.getTags().includes('skill') ||
trait.getTags().includes("bg")).filter(
trait => !trait.getTags().includes('magic')
)>>
<<run _cancleanse = _cancleanse.filter(trait => trait != setup.trait.magic_fire)>>
<<if _cancleanse.length>>
<<set _tocleanse = setup.rng.choice(_cancleanse)>>
<<set _s = setup.Text.Hobby.verb($g.student, _tocleanse)>>
<<if $gQuest.getSeed() % 6 == 0>>
The times <<rep $g.student>> used to spent enjoying <<= _s>> seems to be such
a distant memory now, and it does not seem to hold much appeal anymore for
<<therace $g.student>>.
<<elseif $gQuest.getSeed() % 6 == 1>>
<<rep $g.student>> can vaguely remember why <<they $g.student>> used to enjoy <<= _s>> so much...
<<elseif $gQuest.getSeed() % 6 == 2>>
For the current <<rep $g.student>>, <<= _s>> seems so pointless, and <<they
$g.student>> student|wonder why <<they $g.student>> used to like doing it so
much...
<<elseif $gQuest.getSeed() % 6 == 3>>
The prospect of <<= _s>> no longer excites <<rep $g.student>>...
<<elseif $gQuest.getSeed() % 6 == 4>>
As <<rep $g.student>> grew closer to closer to nothingness, not even <<= _s>>
will be able to bring joy to <<therace $g.student>> anymore...
<<elseif $gQuest.getSeed() % 6 == 5>>
The cleansing fire purifies all, and <<rep $g.student>> will find no more joy in <<= _s>>.
<</if>>
<<run setup.qc.TraitRemove('student', _tocleanse).apply($gQuest)>>
<<set _vs = $varstore.get('be_cleansed_in_fire_traits')>>
<<if !_vs>>
<<set _vs = []>>
<<run $varstore.set('be_cleansed_in_fire_traits', _vs, -1)>>
<</if>>
<<run _vs.push(_tocleanse.key)>>
<<run $varstore.set('be_cleansed_in_fire_traits', _vs, -1)>>
<</if>>
</p>
<<if !_cancleanse.length>>
<p>
As <<their $g.student>> mind finished emptying completely, <<yourrep
$g.student>> was ready to receive the blessings of fire. Alone, <<they
$g.student>> wandered aimlessly within the desert, guided vaguely by a distant
fire <<they $g.student>> and only <<they $g.student>> could see. Arriving at
the destination, <<they $g.student>> student|was greeted with an empty altar,
with nothing but a statue of a goddess looking down on <<them $g.student>>.
</p>
<p>
The now-empty husk of <<rep $g.student>> had been deemed
suitable, and <<rep $g.student>> could feel a growing heat throughout <<their
$g.student>> entire body. Magical power swirled from the statue down into
all around <<them $g.student>>, before leaping straight into <<their
$g.student>> <<umouth $g.student>> and inside <<their $g.student>> body.
The sensation was strange —
a combination of warmth and pain, but the now completely empty slaver spared
no more detail in retelling the story to anyone.
</p>
<p>
The deed was done. Back at your fort, even you can sense a powerful magic
brimming from within <<rep $g.student>>. The <<rep
setup.trait.magic_fire_master>> is now within <<reps $g.student>> grasp. But
looking at blank expression of <<theslaver $g.student>>, you started to wonder at yourself
if it was worth it to sacrifice all of your very self for power...
</p>
<<run setup.qc.TraitReplace('student', setup.trait.magic_fire_master).apply($gQuest)>>
<<if $varstore.get('be_cleansed_in_fire_traits') &&
$varstore.get('be_cleansed_in_fire_traits').length>>
<<run setup.qc.AddHistory('student', "lost all a|their personality in exchange for mastery over fire").apply($gQuest)>>
<<run setup.qc.AddTitle('student', 'quest_consumed_by_fire_0').apply($gQuest)>>
<<run setup.qc.VarSet('be_cleansed_in_fire_event_timeout', 1, 2).apply($gQuest)>>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Student of Fire', /* name */
[
setup.trait.per_gregarious,
setup.trait.per_slow,
setup.trait.per_smart,
setup.trait.per_chaste,
setup.trait.per_sly,
setup.trait.per_stubborn,
setup.trait.per_loner,
setup.trait.per_direct,
setup.trait.per_active,
setup.trait.per_studious,
setup.trait.per_independent,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.per_playful,
setup.trait.per_masochistic,
setup.trait.per_calm,
setup.trait.per_lunatic,
setup.trait.per_aggressive,
setup.trait.per_cruel,
setup.trait.per_dreamy,
setup.trait.per_kind,
setup.trait.per_attentive,
setup.trait.per_cautious,
setup.trait.per_evil,
setup.trait.per_brave,
setup.trait.per_honorable,
setup.trait.per_humble,
setup.trait.per_empath,
setup.trait.per_proud,
setup.trait.per_logical,
setup.trait.per_frugal,
setup.trait.per_submissive,
setup.trait.per_lavish,
setup.trait.per_dominant,
setup.trait.per_sexaddict,
setup.trait.per_curious,
setup.trait.per_lustful,
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.TraitExact(setup.trait.magic_fire),
setup.qres.NotYou(),
],
{
arcane: 3,
}
)>>
<<set _criteriascout1 = new setup.UnitCriteria(
null, /* key */
'Scout (Desert)', /* name */
[
setup.trait.bg_nomad,
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.tough_tough,
setup.trait.per_calm,
setup.trait.skill_intimidating,
],
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.magic_fire, setup.trait.magic_fire_master], true),
],
{
brawn: 1,
survival: 2,
}
)>>
<<set _criteriascout2 = new setup.UnitCriteria(
null, /* key */
'Scout (Desert)', /* name */
[
setup.trait.bg_nomad,
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.tough_tough,
setup.trait.per_calm,
setup.trait.skill_intimidating,
],
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.magic_fire, setup.trait.magic_fire_master], true),
],
{
brawn: 1,
survival: 2,
}
)>>
<<run new setup.QuestTemplate(
'the_fire_beckons', /* key */
"The Fire Beckons", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'prep',
'trait',
'unknown',
'danger',
'desert',
'rare',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'student': [ _criteriastudent, 1],
'scout1': [ _criteriascout1, 1],
'scout2': [ _criteriascout2, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_fire_beckons',
setup.qdiff.hell30, /* difficulty */
[ /* outcomes */
[
'Quest_the_fire_beckonsCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_the_fire_beckonsCrit',
[
setup.qc.QuestDirectForceAssign('be_cleansed_in_fire', {
student: "student",
}),
],
],
[
'Quest_the_fire_beckonsFailure',
[
setup.qc.Injury('student', 2),
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
],
],
[
'Quest_the_fire_beckonsFailure',
[
setup.qc.Injury('scout2', 5),
setup.qc.Injury('student', 5),
setup.qc.Injury('scout1', 6),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoQuest('be_cleansed_in_fire'),
setup.qres.NoUnitWithTitle('quest_consumed_by_fire_0', {
}),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.TraitExact(setup.trait.magic_fire)
]),
],
[ /* expiration outcomes */
],
)>><p>
The <<lore magic_fire>> governs fire, and hence is one of the favorite
domains of wizards. Hurling large fireballs is always an effective tool for
both actual combat, and for party tricks too.
But mastery over flame is
something else entirely — instead of focusing more on destruction, it
focuses instead on purifying the flame, summoning white flames that can repel demons
and corruptions alike.
</p>
<p>
It is said that hidden somewhere within the <<lore region_desert>> is a hidden
Temple of Fire, inviting anyone who wants to hone their mastery over fire into its
purest form. Locating it will not be easy, and you will need two experienced
scouts to accompany the prospective student.
</p>
<p>
However, if what rumors you have heard has some truth in them, then mastering
<<rep setup.trait.magic_fire_master>> bears <<dangertext 'terrible consequences'>>
for their bearer. Their mind and spirit will have to be cleansed to make way for the
purifying flame. Whatever this means, it does not sound good, and you best
prepare yourself for whatever is to come were you to send a slaver on this
journey...
</p>
<p>
<<dangertext 'Be warned'>>: The duration of this quest is highly variable, and it may incur some irreversible effects on its participants...
</p><p>
<<Rep $g.scout1>> and <<utheirrel $g.scout1 $g.scout2>> trudged through the
desert settlements, searching for information. Meanwhile, <<yourrep
$g.student>> <<uadv $g.student>> prepare <<themself $g.student>> for the
surely challenging tasks <<they $g.student>> will need to overcome. Week
scouring the scorching deserts proved fruitful as your slavers were able to
locate the hidden Temple of Flames from the information.
</p>
<p>
The ritual now needs to commence, and <<rep $g.scout1>> as well as <<rep
$g.scout2>> will have to return back to the fort first. Whatever challenges
<<rep $g.student>> will have to face, <<they $g.student>> must face
them alone...
</p><p>
Unfortunately, your slavers were unable to locate the exact location of the hidden Temple of Fire. They will just have to try again, after nursing the wounds they suffer from the nasty weather in the deserts.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_consumed_by_fire_0", /* key */
"Consumed by Fire", /* name */
"Let their entire self be consumed by fire, in order to mastery it. There might still be hope of recovering what they have lost, however...", /* description */
"sacrificed a|their entire self, body and spirit, in order to obtain mastery over the fire domain, although it might still be possible to recover some of a|them...", /* unit text */
2000, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_scorched_by_fire_1", /* key */
"Scorched by Fire", /* name */
"Their entire self has been cleansed with fire, with no hope of ever regaining their past self back, all in exchange for mastery over fire", /* description */
"sacrificed a|their entire self in order to master fire, with no hope of every gaining them back", /* unit text */
5000, /* slave value */
{ /* skill additives */
combat: 4,arcane: 4,},
)
>>
<<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Student of Fire', /* name */
[
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.per_slow,
setup.trait.per_smart,
setup.trait.per_gregarious,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_stubborn,
setup.trait.per_sly,
setup.trait.per_direct,
setup.trait.per_active,
setup.trait.per_studious,
setup.trait.per_independent,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.per_playful,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
setup.trait.per_calm,
setup.trait.per_aggressive,
setup.trait.per_cruel,
setup.trait.per_kind,
setup.trait.per_dreamy,
setup.trait.per_attentive,
setup.trait.per_cautious,
setup.trait.per_brave,
setup.trait.per_humble,
setup.trait.per_proud,
setup.trait.per_frugal,
setup.trait.per_lavish,
setup.trait.per_sexaddict,
setup.trait.per_lustful,
setup.trait.per_curious,
setup.trait.per_dominant,
setup.trait.per_submissive,
setup.trait.per_logical,
setup.trait.per_empath,
setup.trait.per_honorable,
setup.trait.per_evil,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_consumed_by_fire_0'),
],
{
arcane: 3,
}
)>>
<<set _criteriawizard1 = new setup.UnitCriteria(
null, /* key */
'Wizard', /* name */
[
setup.trait.bg_mystic,
setup.trait.magic_fire_master,
setup.trait.per_attentive,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.magic_dark_master,
],
[
setup.trait.magic_light_master,
setup.trait.magic_water_master,
setup.trait.per_kind,
setup.trait.per_dreamy,
setup.trait.per_honorable,
setup.trait.bg_slave,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.magic_fire_master, setup.trait.magic_water_master, setup.trait.magic_wind_master, setup.trait.magic_earth_master, setup.trait.magic_light_master, setup.trait.magic_dark_master], true),
],
{
knowledge: 1,
arcane: 2,
}
)>>
<<set _criteriawizard2 = new setup.UnitCriteria(
null, /* key */
'Wizard', /* name */
[
setup.trait.bg_mystic,
setup.trait.magic_fire_master,
setup.trait.per_attentive,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.magic_dark_master,
],
[
setup.trait.magic_light_master,
setup.trait.magic_water_master,
setup.trait.per_kind,
setup.trait.per_dreamy,
setup.trait.per_honorable,
setup.trait.bg_slave,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.magic_fire_master, setup.trait.magic_water_master, setup.trait.magic_wind_master, setup.trait.magic_earth_master, setup.trait.magic_light_master, setup.trait.magic_dark_master], true),
],
{
knowledge: 1,
arcane: 2,
}
)>>
<<run new setup.QuestTemplate(
'the_fire_taketh', /* key */
"The Fire Taketh", /* Title */
"darko", /* Author */
[ /* tags */
'desert',
'prep',
'special',
'veteran',
'trait',
],
4, /* weeks */
1000, /* expiration weeks */
{ /* roles */
'student': [ _criteriastudent, 1],
'wizard1': [ _criteriawizard1, 1],
'wizard2': [ _criteriawizard2, 1],
'slave': setup.qu.slave,
'slave2': setup.qu.slave,
},
{ /* actors */
},
[ /* costs */
],
'Quest_the_fire_taketh',
setup.qdiff.harder53, /* difficulty */
[ /* outcomes */
[
'Quest_the_fire_takethCrit',
[
setup.qc.Outcomes('success'),
setup.qc.OneRandomSeed([
setup.qc.TraitReplace('student', setup.trait.per_honorable),
setup.qc.TraitReplace('student', setup.trait.per_evil)
]),
],
],
[
'Quest_the_fire_takethCrit',
[
setup.qc.Mindbreak('slave'),
setup.qc.Mindbreak('slave2'),
setup.qc.RemoveTitle('student', 'quest_consumed_by_fire_0'),
],
],
[
'Quest_the_fire_takethFailure',
[
setup.qc.QuestDirect('the_fire_taketh'),
],
],
[
'Quest_the_fire_takethDisaster',
[
setup.qc.Injury('student', 16),
setup.qc.Injury('slave', 24),
setup.qc.Injury('slave2', 24),
setup.qc.Injury('wizard1', 12),
setup.qc.Injury('wizard2', 12),
setup.qc.QuestDirect('the_fire_taketh'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Function(() => {
const unit = setup.getUnit({title: 'quest_consumed_by_fire_0'});
if (unit) {
setup.qc.RemoveTitle('student', 'quest_consumed_by_fire_0').apply(setup.costUnitHelper(unit));
setup.qc.AddTitle('student', 'quest_scorched_by_fire_1').apply(setup.costUnitHelper(unit));
};
}),
setup.qc.VarRemove('be_cleansed_in_fire_traits'),
],
)>><<set _u = setup.getUnit({job: setup.job.slaver, title: 'quest_consumed_by_fire_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
You have discovered a way to recover part of <<rep _u>>'s long lost mind, if you choose to.
It will be incredibly difficult, and also requires a suitable amount of preparation.
First of all, two accomplished wizards are required to perform the
gruelingly long and challenging ritual.
But that's not the difficult part...
</p>
<p>
To restore <<rep _u>>'s personalities back, the spell requires two other units
to take the personalities from.
Two slaves, whose personalities combined matches as much as possible with <<rep _u>>
prior to being emptied.
If you recall correctly, <<rep _u>> used to have the following traits:
<<for _traitkey range $varstore.get('be_cleansed_in_fire_traits')>>
<<if _traitkey in setup.trait>>
<<rep setup.trait[_traitkey]>>
<</if>>
<</for>>.
The ritual will restore all of these traits that are also present in one of the slaves.
But of course, there is no question what will happen to the slaves once their spirits have been
entirely emptied out...
</p>
<p>
Meanwhile, <<yourrep _u>> looks perfectly content, despite looking somewhat
blank-faced and having no
enthusiasim in anything. Still, it would be also a perfectly normal
strategy to just ignore this
opportunity, and accept <<rep _u>> for what <<they _u>> is now.
</p>
<</if>><p>
<<Yourrep $g.wizard1>> and <<utheirrel $g.wizard1 $g.wizard2>> scoured the
vast deserts of the eastern land, and with <<yourrep $g.student>> in tow, they
finally found the temple of fire, hidden under the sands. Standing
magnificently there was the very same statue that blessed <<rep $g.student>>
with <<their $g.student>> magic. There could be no mistaking it, this must be
the ritual site that your slavers were looking for.
</p>
<p>
After setting and securing both <<yourrep $g.slave>> and <<rep $g.slave2>> on the altar,
<<rep $g.wizard1>> began chanting as <<rep $g.student>> stood in front of the
altar, remaining as blank and unnervingly neutral as ever.
The spell was incredibly difficult, requiring a chant to be chanted together
by your two slavers, but <<rep $g.wizard2>> and <<utheirrel $g.wizard2
$g.wizard1>> are not strangers to magic, and they <<uadv $g.wizard1>> performed
the rite.
</p>
<p>
Your slavers could see a reddish aura starting to form around the statue.
The aura then slowly transferred over into the struggling slaves, bound over
the altar, before encasing the slaves entirely within its embrace.
Then slowly, bits of histories and personality transferred over from the slaves onto
<<rep $g.student>>, and your slavers can see the living being absorbed out of
both <<rep $g.slave>> and <<rep $g.slave2>>,
and put into <<yourrep $g.student>>.
</p>
<<set _restore = $varstore.get('be_cleansed_in_fire_traits')>>
<<if _restore && _restore.length>>
<<set _recovered = 0>>
<<for _trait range _restore>>
<<if _trait in setup.trait>>
<<if $g.slave.isHasTraitExact(_trait) || $g.slave2.isHasTraitExact(_trait)>>
<<run setup.qc.TraitReplace('student', _trait).apply($gQuest)>>
<<run _recovered += 1>>
<</if>>
<</if>>
<</for>>
<</if>>
<p>
The ritual took hours to complete, but by the end the result was apparent.
Light had returned to <<reps $g.student>> eyes, and once again the color of
live had returned to <<their $g.student>> world.
All it took in exchange was two slaves who became completely mindbroken, and only
suitable to be used as fucktoys for a lucky owner.
<<if !_recovered>>
While <<their $g.student>> personality is now lost permanently, at least
<<they $g.student>> student|is slightly
more eager to learn new things now.
<<run setup.qc.TraitReplace('student', 'per_curious').apply($gQuest)>>
<</if>>
<<if $gOutcome == 'crit'>>
Also, <<rep $g.student>> seemed to also gain a personality <<they
$g.student>> never had before, a fortunate side effect.
<</if>>
With their mind somewhat returned to <<them $g.student>>, <<rep $g.student>>
student|is now back to <<their $g.student>> eager self, and <<they $g.student>>
can't wait to get back home and start <<= setup.Text.Hobby.verb($g.student)>>
again.
</p><p>
Despite the few weeks scouring through the deserts, <<rep $g.wizard1>> and
the rest of the team were unable to find the Temple of Fire, hidden
under the sands. They eventually gave up, heading back to the fort while
half-dragging <<yourrep $g.student>> along, who remained as blank as ever.
</p><p>
<<Yourrep $g.wizard1>> and <<utheirrel $g.wizard1 $g.wizard2>> scoured the
vast deserts of the eastern land, and with <<yourrep $g.student>> in tow, they
finally found the temple of fire, hidden under the sands. Standing
magnificently there was the very same statue that blessed <<rep $g.student>>
with <<their $g.student>> magic. There could be no mistaking it, this must be
the ritual site that your slavers were looking for.
</p>
<p>
After setting and securing <<yourrep $g.slave>> and <<rep $g.slave2>> on the altar,
<<rep $g.wizard1>> began chanting as <<rep $g.student>> stood in front of the
altar, remaining as blank and unnervingly neutral as ever.
The spell was incredibly difficult, requiring a chant to be chanted together
by your two slavers, but <<rep $g.wizard2>> and <<utheirrel $g.wizard2
$g.wizard1>> are not strangers to magic, and they <<uadv $g.wizard1>> performed
the rite.
</p>
<p>
Unfortunately, the ritual backfired and the magic went out of control,
swirling from the statue into all your slavers. Your slavers were scorched by
the pure fire, who detected all the evil deeds of your slavers and attempted
to purify all of them. The slaves suffered the worst blunt of the explosion,
incurring injuries that would take months to heal.
</p>
<p>
Fortunately, all the injuries seem temporary, with no permanent damage being
inflicted upon your team. You'll just have to try again later, hopefully
with a more prepared team this time.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'raid_desert_settlement', /* key */
'Raid: Desert Settlement', /* Title */
'darko', /* Author */
[ 'desert', 'money', 'ire',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'villager': 'subrace_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', 'a|was a humble villager in an eastern settlement'), ],
], [
'Quest_raid_desert_settlementCrit',
[
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The vast majority of the settlements located in the <<lore region_desert>>
do not call any particular place as their permanent home.
For them, home is where their journey brings them to, and they live by
using up resources near the area, before moving to another.
This makes their settlements an
easy target for raiders, since they are unable to erect permanent defenses to
deter these raiders.
Raiders such as your company, apparently.
You can send a group of slavers to raid one of
these settlements, if you really need the money.
</p><p>
Led by <<rep $g.raider1>>, your slavers
<<uadv $g.raider1>> raided the settlement and was met with little resistance.
<<set _evil = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_evil'})>>
<<if _evil>>
The wailings of the villagers were like music to the evil slaver <<rep _evil>>.
<</if>>
<<set _honorable = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_honorable'})>>
<<if _honorable>>
<<Reps _honorable>> honorable soul tugged at <<their _honorable>> heart at hearing the wailings
of the villagers, but decided to still stick with your company.
<<run setup.qc.TraumatizeRandom('unit', 2).apply(setup.costUnitHelper(_honorable))>>
<</if>>
They gathered up all the loot from the huts
<<if $gOutcome == 'crit'>>
and also bringing the chieftain's <<daughter
$g.villager>> home as a trophy.
<<else>>
including a particularly pricey piece of rug.
<</if>>
</p><p>
Unfortunately, the settlement had already moved to a different location by
the time your slavers arrived. They were unable to track where the new
settlement was located.
</p><p>
Your slavers attempted to raid the settlement but they were instead met with
fierce resistance befitting of the desertfolks.
In their attempt to retreat from their mistake, <<yourrep $g.raider1>> raider1|was injured.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'raid_the_mist', /* key */
"Raid the Mist", /* Title */
"darko", /* Author */
[ 'desert',
'veteran',
'unit',
'danger'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'gatekeeper': setup.qu.corruptor,
'warrior1': setup.qu.dark_warrior,
'warrior2': setup.qu.light_warrior, },
{ /* actors */
'slave': 'subrace_demonkin',
'slaver': 'subrace_demonkin', },
[ /* costs */
],
'Quest_raid_the_mist',
setup.qdiff.hardest57, /* difficulty */
[ /* outcomes */
[
'Quest_raid_the_mistCrit',
[
setup.qc.Slave('slave', "a|was a demonkin your slavers abducted from beyond the mist", false),
setup.qc.Slaver('slaver', "a|was a demonkin from beyond <<lore concept_mist>> who took interest in your slavers and followed them out", false), ],
], [
'Quest_raid_the_mistCrit',
[
setup.qc.Slave('slave', "a|was a demonkin your slavers somehow abducted from beyond the mist", false),
setup.qc.Corrupt('warrior1'), ],
], [
'Quest_raid_the_mistCrit',
[
setup.qc.Injury('warrior1', 3),
setup.qc.Injury('warrior2', 2),
setup.qc.Corrupt('warrior1'),
setup.qc.Corrupt('warrior2'), ],
], [
'Quest_raid_the_mistCrit',
[
setup.qc.MissingUnit('warrior1'),
setup.qc.MissingUnit('warrior2'), ],
], ],
[
[setup.questpool.desert, setup.rarity.uncommon],
], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.veteranhall), ], /* restrictions to generate */
)>><p>
Some corners of the <<lore region_desert>> is thick with <<lore concept_mist>>.
Normal people (whose common sense is still intact) would avoid these places at all costs.
You on the other hand think that with a sufficienly powerful dark magi, it might be possible to rip
apart the boundary between this world and the next from these thickly misted areas.
The land beyond is inhabited by many <<rep setup.trait.race_demon>> -- and although
pureblood demons would probably be too difficult for your slavers to capture, it might
be possible to capture their underlings, the <<rep setup.trait.subrace_demonkin>>.
This still pose incredible risk to whoever are unlucky enough to be
sent on this mission however. The stuffs the demons would do to whoever become trapped there is beyond degrading.
</p><p>
Once your slavers arrived at the area, <<yourrep $g.warrior1>> and
<<utheirrel $g.warrior1 $g.warrior2>> <<rep $g.warrior2>> <<uadv $g.warrior1>>
put their trusts in <<rep $g.gatekeeper>>.
<<Rep $g.gatekeeper>> opened the gate to the land beyond <<lore
concept_mist>> and must keep it open until your slavers finished their
duties there.
<<if $g.gatekeeper.isHasTrait('per_dreamy')>>
<<Rep $g.gatekeeper>> may gatekeeper|have trouble focusing, but <<they $g.gatekeeper>>
will just have to do <<their $g.gatekeeper>> utmost to keep <<their $g.gatekeeper>> allies
safe.
<<elseif $g.gatekeeper.isHasTrait('per_attentive')>>
Fortunately, <<rep $g.gatekeeper>> gatekeeper|is a rather attentive <<urace $g.gatekeeper>>,
and should have no problem holding down the fort.
<</if>>
</p>
<<if $gOutcome == 'failure'>>
<p>
Your slavers were not ready at all for the sights they encountered inside.
Dumbstruck, your slavers failed to notice the corruption spell
that were cast on them by a nearby demon. After being hit by the spell,
your slavers regained their focus, and decided that
escape was the only correct option at that point, and managed to exit back to the gate
although sustaining heavy injuries in the process.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
But the trust were misplaced.
Just right when the other two slavers entered the gate,
demons came out from the very same gate, assaulting <<yourrep $g.gatekeeper>>.
<<Their $g.gatekeeper>> gatekeeper|was broken, and the gate prematurely closed,
trapping both <<rep $g.warrior1>>
and <<rep $g.warrior2>> inside <<lore concept_mist>> with no way out.
</p>
<<else>>
<p>
Once inside, <<yourrep $g.warrior1>> and <<rep $g.warrior2>> managed to maintain their
focuses, despite the numerous distractions presented to them within,
be it the voluptuous nightmarish boob that appeared out of nowhere,
or the literal dick fountain.
<<if $gOutcome == 'crit'>>
Ultimately, they found a suitable looking demonkin in the middle of using a
slave that they managed to subdue and carry back into the gate and onto the mortal plane.
<<else>>
Ultimately, they found a suitable looking demonkin that they somehow managed to subdue,
although not without a cost.
<<Yourrep $g.warrior1>> warrior1|was caught in a corruption spell when
carrying back their prize back into the gate and towards the mortal plane.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
Once back at the desert with the new potential demonkin slave, your slavers
were completely caught by surprise as they were greeted by a second,
unfamiliar demonkin.
The masterless demonkin took interest in your slavers, and apparently
followed <<rep $g.warrior1>> and <<rep $g.warrior2>> out of the gate and into
the mortal realm.
As your slavers prepared to fight, <<rep $g.slaver>> instead assured your slavers that <<they $g.slaver>>
meant no harm, and only wished to join your company out of pure curiosity.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_rescuefor_profit1',
'mindbroken slave',
'subrace_humandesert', /* pools */
0,
[
setup.qc.Mindbreak('unit'),
],
)>>
<<run new setup.QuestTemplate(
'rescuefor_profit', /* key */
'Rescue for Profit', /* Title */
'darko', /* Author */
[ 'desert', 'money', 'ire',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infiltrator1': setup.qu.infiltrator,
'infiltrator2': setup.qu.infiltrator,
'thief': setup.qu.thief, },
{ /* actors */
'slave': '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_profitCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humandesert', 25),
setup.qc.Ire('orc', 1),
],
], [
'Quest_rescuefor_profitCrit',
[
setup.qc.Slave('slave', 'a|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, setup.rarity.uncommon],
], /* 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 this time is quite a lucrative amount of money.
In addition to that, doing occasional
honest work such as this one is always a good opportunity to become closer
with the people living in these settlements.
You can send a group of slavers to rescue the <<daughter $g.slave>>, should you wish.
</p><<if $g.slave.isMale()>>
<<else>>
<<questimage 'rescue_for_profit_female.jpg'>>
<</if>>
<p>
Led by <<rep $g.infiltrator1>>, your slavers <<uadv $g.infiltrator1>>
sneaked into the orc's encampment. The place was covered in a
permanent smell of alcohol and cum, and numerous cumstains were present
throughout the place. By the time your slavers sneaked in,
most of the orcs there were already soundly asleep from the debauchery
in the previous night — in fact, some still have their dicks up some slave's asses.
Not wanting to waste time before they wake,
<<set _cautious = setup.selectUnit([$g.infiltrator1, $g.infiltrator2, $g.thief], {trait: 'per_cautious'})>>
<<if _cautious>>
<<rep _cautious>> cautiously warned <<their _cautious>> teammates to hurry and
got to work, scouring
<<else>>
your slavers got to work and scoured
<</if>>
the camp looking for the lost <<daughter $g.slave>>.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers ultimately found the <<girl $g.slave>> inside a cage at the back of the
encampment. It seemed that they were lucky to have arrived so soon, as the <<girl $g.slave>>
still appeared unmolested, or at least as they eye could see.
<<Yourrep $g.thief>> hurriedly picked the cage's lock, before escaping the place together
with <<name $g.slave>>.
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers ultimately found the <<girl $g.slave>> chained to a post at the end
of the encampment. It seemed that the camp leader kept <<them $g.slave>> as
their own personal-use-only slave, so compared to the utterly broken slaves scattered
throughout the encampment, the poor <<daughter $g.slave>> slave|was still moderately sane.
Your slaver quickly unchained <<them $g.slave>>, and to prevent the <<urace $g.slave>>
from making too much noises, aptly gagged <<them $g.slave>> before smuggling <<them $g.slave>> out.
</p>
<<else>>
<p>
Your slavers ultimately found the <<girl $g.slave>> at one of the "slave dumps" —
a lovingly named place where the orcs store their slaves after heavy use to
recover.
With effort, they managed to pull the <<urace $g.slave>> out of the pile.
The cum-soaked <<urace $g.slave>> appeared to have been completely broken —
<<their $g.slave>> gaze kept wandering, fixed on a faraway place.
Still, a job is a job and your slavers smuggled the slave out of the encampment.
</p>
<</if>>
<p>
Normally, this would be where your slavers present the new slave collar to
their prospective slave. But this is a rescue mission for once, and instead they
returned <<name $g.slave>> back to <<their $g.slave>> village.
<<if $gOutcome == 'crit'>>
The grateful village elder showered your slavers with gifts, as well as promise to tell
their neighbors about the good deeds performed this time of your company.
<<elseif $gOutcome == 'success'>>
The village elder was shocked at the state of their <<daughter $g.slave>>,
who slave|was almost completely broken from much abuse.
Still, a promise was a promise and he gave your slavers the promised rewards.
<<else>>
But the village elder, in what seemed to be a denial, refused to acknowledge
the <<urace $g.slave>> as his <<daughter $g.slave>>.
After a long argument, your slavers were kicked out of the settlement together with
the <<girl $g.slave>>. Your slavers gave up
getting the original rewards, and decided that <<rep $g.slave>> might just make a sufficient
alternative reward.
<</if>>
</p><p>
Your slavers were discovered when attempting to sneak into the orc's camp.
They tried to escape, and while <<rep $g.infiltrator1>> and <<rep $g.thief>>
were lucky to find a way to do so, <<rep $g.infiltrator2>> infiltrator2|was not as lucky.
The orcs descended upon <<them $g.infiltrator2>> and grabbed <<them $g.infiltrator2>>
by the legs, before throwing and caging <<them $g.infiltrator2>> in the slave dump together with many other
already-broken slaves.
Your slavers had to risk their lives and their purities to save <<yourrep $g.infiltrator2>>.
</p>/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The <<lore region_desert>> 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 ended their journey crushed by some trap within such ruins.
</p>
<p>
You have a lead on a possible such ruins that has just resurfaced after a sandstorm.
If you want to follow up on this
lead, you'd have to act fast before the shifting sands rebury the ruins back to
where it was hidden.
</p><p>
The ruins turned out to be the ruins of a temple. The temple
were flanked by engravings on all sides, depicting various
raunchy sexual act. One side depicted the various methods one could pursue
in order to maximize the chance of getting a male heir, including impregnating
multiple women all with a single climax.
The other side depicted various methods
of sexual torture to break even the most resilient of prisoners. There were
depictions of men and women chained to the same dildo which pushed both at
the same time, harder when they struggled,
while another depicted multiple weights being attached to the prisoners' genitals and
nipples while they were being whipped mercilessly.
</p>
<p>
The ancient drawings were kinda sexy,
<<set _lust = setup.selectUnit([$g.explorer1, $g.explorer2, $g.scout], {trait: 'per_lustful'})>>
<<set _chaste = setup.selectUnit([$g.explorer1, $g.explorer2, $g.scout], {trait: 'per_chaste'})>>
<<if _lust>>
<<Rep _lust>> even lustfully masturbated to one, earning <<therace _lust>> strange looks from <<their _lust>>
teammates.
<<elseif _chaste>>
<<Rep _chaste>> tried <<their _chaste>> best not to look too much into the engravings as the chaste
slaver could feel
<<if _chaste.isHasDick()>>
<<their _chaste>> dick rising.
<<else>>
the heat rising from inside.
<</if>>
<</if>>
Still, sexiness alone could not pay your slavers' wages, and they <<uadv $g.explorer1>>
proceeded to carve out these engravings and gathered up the usable gold.
At the top of
the altar, they also found an ancient sex toy made of pure gold, which they decided
to keep for the company.
</p><p>
Your slavers arrived at what appears to be an ancient trading hall. It seemed
that these halls once were a center of trade, dealing in both various goods and also in slaves.
There were many ancient pots that remained intact, which your slaver took with them.
There were also numerous shackles all over the walls and the ceilings.
Your slavers could only imagine what this place must have looked like back
then, when every shackle was filled by a slave for sale.
</p><p>
Your slavers arrived at what appeared to be a tomb. But due to excitement,
they did not tread carefully. Both <<yourrep
$g.explorer1>> and <<rep $g.explorer2>> were smacked in the face by a swinging trap.
Your slavers had no choice but to head back and tend to their injuries,
instead of risking their lives by going in further.
</p><p>
Your slavers arrived at what appeared to be the ruins of a royal palace. Thinking that it
was such an easy place to loot, they rushed in only to discover that the place was
heavily trapped.
<<Rep $g.explorer1>> fell into one of the pit traps, and it is
unknown what fate awaits <<them $g.explorer1>> down there.
Your other slavers were unable to rescue <<therace $g.explorer1>>, and they had to come back
without their teammate.
</p>/* PROOFREAD COMPLETE */
<<set _criteriatrader1 = new setup.UnitCriteria(
null, /* key */
'Trader (Desert)', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.tough_tough,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.tough_nimble,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_submissive,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1,
knowledge: 1,
social: 1,
}
)>>
<<set _criteriatrader2 = new setup.UnitCriteria(
null, /* key */
'Trader (Desert)', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.tough_tough,
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.race_wolfkin,
setup.trait.tough_nimble,
setup.trait.per_direct,
setup.trait.per_lavish,
setup.trait.per_submissive,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The <<lore region_desert>> may seem like a hostile place to live in, what's
with its scorching heat and lack of vegetations.
However, the hardy people of the desert calls the place their home.
Most of these people are nomads who opportunistically move from locations to locations
in search for oasis and the sparse vegetations for their animals to graze.
These nomads often lack in basic
necessities that are commonly found in other places, and would trade much valuables
for these basic necessities.
</p>
<p>
You can send a group of slavers to attempt to trade with these nomads and made yourself
some tidy profit.
However, as with anything desert, this might turn out to be a rather dangerous trip.
</p><<if $g.trader1.isMale()>>
<<questimage 'trading_mission_desert_male.jpg'>>
<</if>>
<p>
<<Yourrep $g.trader1>> <<uadv $g.trader1>>
managed to exchange what is basic necessities for the company with various
valuable rugs and trinkets from the east.
<<set _fru = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_frugal'})>>
<<set _lav = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_lavish'})>>
<<if _fru>>
<<Rep _fru>> was a natural at picking deals, and the frugal slaver was able to
choose the best deal around.
<<elseif _lav>>
True to <<their _lav>> lavish nature, <<rep _lav>> carelessly bought more
trinkets than what would be profitable, but they still sold suprisingly well.
<</if>>
These were then sold at a high
price, netting your company a huge amount of profit in the end.
</p><p>
There were a few ambushes here and there, but <<yourrep $g.guard>> guard|was able to
<<uadv $g.guard>> fend them all off and safely escorted your traders to the eastern settlements.
They made a tidy amount of profit by exchanging basic necessities with valuable jewelries.
</p><p>
Unfortunately, your caravan were waylaid by desert bandits who stole all of
the goods your slavers had brought. They had no choice but to return to the fort with only
<<reps $g.guard>> wounds to show for it.
</p><p>
Your slavers got swindled by a particularly rowdy desert merchant. Somehow,
your company now owed them a significant amount of money, which you grudgingly paid.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'cunning_escapade', /* key */
"Cunning Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit', 'city',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* 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 clutches. To
retake back the pride of your company, you can try to recapture the slave and
let <<them $g.slave>> know that <<their $g.slave>> fate is forever to be a property of
<<their $g.slave>> betters. But to make matters complicated, <<rep $g.slave>> had apparently
escaped into the <<lore region_city>>, which bars their gate from slaving companies such
as yourself.
</p>
<p>
If you want to recapture the slave, you will 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, having escaped a life of slavery...
</p><p>
None could resist as <<yourrep $g.distractor>> <<uadv $g.distractor>> swayed
<<their $g.distractor>> <<ubody $g.distractor>> distractingly, offering <<rep $g.kidnapper>>
and <<rep $g.schemer>> plenty of time to sneak in.
Once inside, they managed to locate <<rep $g.slave>> 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>>
distractor|was 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 could resist as <<rep $g.distractor>> <<uadv $g.distractor>> swayed
<<their $g.distractor>> <<ubody $g.distractor>> distractingly, offering <<rep $g.kidnapper>>
and <<rep $g.schemer>> plenty of time to sneak in.
Once inside, they managed to locate <<rep $g.slave>> buying food
in a market. But <<rep $g.kidnapper>> slipped from the roofs and was spotted by
your former 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>> slave|is aware that you are actively
pursuing <<them $g.slave>>, and will likely make it more difficult for your future
attempts to recapture <<them $g.slave>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'daring_escapade', /* key */
"Daring Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit', 'sea',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'pirate': setup.qu.pirate,
'navigator': setup.qu.navigator,
'capturer': setup.qu.slavecapturer, },
{ /* actors */
'slave': [
setup.qres.HasTag('escaped_slave'),
],
'victim': 'subrace_humansea', },
[ /* costs */
],
'Quest_daring_escapade',
setup.qdiff.harder57, /* difficulty */
[ /* outcomes */
[
'Quest_daring_escapadeCrit',
[
setup.qc.Slave('victim', "a|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_escapadeFailure',
[
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, setup.rarity.common],
],
[ /* 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>> had opted for a very
dangerous option — into the <<lore region_sea>>. 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 posed by the <<lore region_sea>>? 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 <<lore region_sea>>, 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>>
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>> 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 <<lore region_sea>> prove too challenging for your slavers as their ship
were rocked by the heavy waves into one of the reefs.
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>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.capturer>> went missing during the chaos.
<<set _rescuer = $dutylist.getUnitIfAvailable('rescuer')>>
<<if _rescuer>>
Your rescuer <<rep _rescuer>> will have to get to work to rescue <<them $g.capturer>>.
<<else>>
Maybe you could appoint a rescuer to get the lost slaver back...
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'desperate_escapade', /* key */
"Desperate Escapade", /* Title */
"darko", /* Author */
[
'special', 'unit', 'forest',
], /* 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', "a|was a villager lost in the western forests", undefined), ],
], [
'Quest_desperate_escapadeCrit',
[
],
], [
'Quest_desperate_escapadeCrit',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'), ],
], [
'Quest_desperate_escapadeCrit',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'),
setup.qc.Injury('scout', 1),
setup.qc.Injury('spotter', 1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.escapeeasy, setup.rarity.common],
],
[ /* 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>> slave|have escaped from your fort!
<<if $g.slave.isHasTrait('training_obedience_basic')>>
It seems despite the training <<they $g.slave>> had undergone <<they
$g.slave>> remained 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 <<lore region_forest>>, 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 have a good chance
of finding the slave amidst the vast forests.
</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>
<<Yourrep $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 the slave came back to <<their
$g.slave>> little alcove.
</p>
<<if $gOutcome == 'success' or $gOutcome == 'crit'>>
<p>
Soon after, <<rep $g.slave>> came alone after gathering some fruits from the
forest. <<Rep $g.slave>> had no chance to
retaliate as your slavers' launched a surprised attack on the slave.
In no time at all, the former slave was back being a
slave — all tied up ready to go for the long trip home.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers also managed to nab an unsuspecting villager who was lost in
the forest as a bonus hazard pay.
</p>
<</if>>
<<else>>
<p>
But after they waited and waited, <<rep $g.slave>> never came back to the
encampment. Your slavers started to think that <<rep $g.slave>> laid a decoy
camp for your slavers<<if $g.slave.isHasTrait('per_slow')>>, although on a second
thought maybe the slave was 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 bruised and scratched by the
vicious brambles and vegetations littering the forest.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'dungeon_rescue', /* key */
"Dungeon Rescue", /* Title */
"darko", /* Author */
[
'special', 'unit', 'desert',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* 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
<<yourrep $g.target>>, who very recently went missing during one of your quests.
That's good, but the problem is that you tracked <<them $g.target>> 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. The conditions of these slaves
worried them as what might have been inflicted upon <<rep $g.target>>, so
they increased their pace until finally, they arrived at the newcomer cell block.
</p>
<p>
<<if $gOutcome == 'crit'>>
There, on the corner of the block lied <<rep $g.target>> unconscious body —
it looked 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 seemed that <<rep $g.target>> had been
here for a couple of days and had 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 lied <<rep $g.target>> unconscious and
badly wounded body — it seemed 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 dungeons.
</p><p>
Your slavers managed to infiltrate the dungeons without failure, but
they were unable to locate <<yourrep $g.target>>.
<<Rep $g.thief>> <<uadv $g.thief>> refused to give up the search — and your
slavers never heard back from <<rep $g.thief>> after <<they $g.thief>> tried
to enter the deeper cells in the dungeons complex...
</p>
<p>
It seems you have two slavers to rescue now.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'fresh_auction', /* key */
'Fresh Market', /* Title */
'darko', /* author */
[ /* tags */
'special', 'unit', 'city',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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),
],
],
[
'QuestFreshAuctionCrit',
[
setup.qc.TraumatizeRandom('target', 4),
setup.qc.MoneyNormal(-1),
],
],
[
'QuestFreshAuctionCrit',
[
setup.qc.MissingUnit('target'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.capturedeasy, setup.rarity.common],
],
[ /* 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>> target|have 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 region_city>>.
While it is certainly possible to try and break <<theslaver $g.target>> out by sneaking
and stealing the auction merchandise,
it is far too risky, and perhaps an easier way would be to
send a group of slavers to attend the auction properly as prospective purchasers.
</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 made aware
of the (pretended) 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 <<reps $g.target>>
<<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 watched a variety of merchandises,
including a particularly
<<if $g.target.isMale()>>
muscular lizardkin
<<else>>
busty lizardkin
<</if>>
being auctioned one by one.
Their patience was rewarded when <<rep $g.target>> target|was finally brought in chains
to the auction block.
</p>
<p>
Your slavers' eyes lit up as they began bidding in the earnest.
<<Rep $g.bidder1>> <<uadv $g.bidder1>> calculated the best strategy
for bidding while <<rep $g.bidder2>> did the actual bidding.
After a few rounds of bidding, only your slavers and another elderly
gentleman were left --
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
a tense series of bids ensued 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
was reflected by the extra expense in their report.
<</if>>
<<else>>
the gentleman proved too stubborn to let <<yourrep $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>
<<Reps $g.target>> 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 on the successful rescue.
<<if $gOutcome == 'crit'>>
It seems <<reps $g.target>> mental fortitude holds during <<their $g.target>>
short period of slavery, and <<theslaver $g.target>> target|is ready and willing
for more action back at the fort.
<<else>>
It seems the short period of slavery weighted heavily on the <<uadjgood $g.target>>
slaver.
<</if>>
</p>
<<else>>
<p>
Your slavers could do nothing but watch as <<rep $g.target>> got acquainted 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>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'just_like_trained', /* key */
"Just Like Trained", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit', 'vale',
],
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, setup.rarity.common],
[setup.questpool.escapemedium, setup.rarity.common],
[setup.questpool.escapehard, setup.rarity.common],
],
[ /* 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>> slave|have escaped! Normally any respectable slaver would be
worried that one of their slaves has escaped, but in this case you have full
convidence that <<yourrep $g.slave>>
slave|have 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 to, you can try and send a group of slavers to ensure the safe
unharmed return of <<therace $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 were 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 <<yourrep $g.slave>>
<<if $unit.player.isHasDick()>>
sucking on your dick
<<else>>
performing cunnilingus for you
<</if>>
back at your fort.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'mindbroken_escapade', /* key */
"Mindbroken Escapade", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit', 'vale',
],
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_escapadeCrit',
[
setup.qc.MissingUnitRecapture('slave', 'escapeeasy'), ],
], [
'Quest_mindbroken_escapadeCrit',
[
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, setup.rarity.common],
[setup.questpool.escapemedium, setup.rarity.common],
[setup.questpool.escapehard, setup.rarity.common],
],
[ /* 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>> slave|have escaped from your fort!
Normally, this would be much harder with any ordinary slave. But you remember
that <<rep $g.slave>> slave|have been mindbroken, and is likely just dazing
out there unsure of where <<they $g.slave>> 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 eventually 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 had 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>
<<if $gOutcome == 'failure' or $gOutcome == 'disaster'>>
<p>
Arriving at the farm, there were nothing but farm animals grazing around the
fields. But <<rep $g.informer2>> found signs that <<rep $g.slave>>
slave|was here at some point, drinking and eating from the livestock through. Your slavers gathered
more information until they finally found another lead towards <<reps
$g.slave>> 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>>
<<else>>
<p>
Lo and behold, <<yourrep $g.slave>> slave|was 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 liberated them from.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'misty_rescue', /* key */
"Faded Rescue", /* Title */
"darko", /* Author */
[ /* tags */
'special', 'unit', 'danger', 'desert',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* 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>>
target|have 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 <<theslaver $g.target>> be a
lost cause. But if you are insistent in rescuing the poor slaver, you could
try to breach <<lore concept_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, before bringing the poor soul home.
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>> channeled 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>> 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 <<lore concept_mist>>.
Ignoring all the demons and slaves around them, your slavers moved with the
singular purpose of locating <<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>> 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 was running out, your slavers
rushed back through the slew of demons back into the portal with your slaver in tow.
<<if $gOutcome == 'disaster'>>
They managed to enter the portal, but as soon as they threw <<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>> were trapped inside, with only <<yourrep $g.target>> having 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 the random many slaves around them.
<<elseif $gOutcome == 'success'>>
A few stray hits grazed 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 <<yourrep $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, <<reps $g.head>> attempt throughout the week did 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
<<yourrep $g.head>>
masterfully handling 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 <<yourrep $g.head>>.
</p><p>
The orifice tightening procedure was successful, no small thanks to <<yourrep $g.head>>.
But <<rep $g.trainee>> 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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.Title(
'fleshshape_muscle', /* key */
'Artificial Body', /* name */
'Has a body modified by intensive flesh-shaping, making them look somewhat unnatural', /* name */
'had a|their body molded via unnatural means', /* unit description */
-1000, /* slave value */
{
brawn: -3,
},
{
is_negative: true,
},
)>>
<<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),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
]
],
[
'FleshShapeMuscleGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
],
],
[
'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>
<<dangertext 'WARNING'>>: changing bodyshape is intrusive,
and will no doubt have a permanent negative impact on the slave's body.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did 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_thin),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
]
],
[
'FleshShapeMuscleShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_thin),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
],
],
[
'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>
<<dangertext 'WARNING'>>: changing bodyshape is intrusive,
and will no doubt have a permanent negative impact on the slave's body.
</p><p>
The flesh shaping went off without a hitch.
</p><p>
The flesh shaping was successful.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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 <<yourrep $g.head>>
masterfully handling 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 <<yourrep $g.head>>.
</p><p>
The orifice tightening procedure was successful, no small thanks to <<yourrep $g.head>>.
But <<rep $g.trainee>> 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>/* PROOFREAD COMPLETE */
<<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_proud,
setup.trait.per_chaste,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eq_plug_anus,
setup.trait.eq_plug_vagina,
], /* critical traits */
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator': setup.qu.negotiator,
'merc1': _mercenary,
'merc2': _mercenary,
},
{ /* actors */
'slave': 'all',
},
[ /* costs */
],
'QuestBountyHuntAberration', /* passage description */
setup.qdiff.easy16, /* difficulty */
[ /* outcomes */
[
'QuestBountyHuntAberrationCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Favor('elf', 10),
setup.qc.SlaveMarker('slave'),
],
],
[
'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.qres.Trait(setup.trait.vagina_tight),
setup.qc.Trait('merc1', setup.trait.vagina_loose)),
setup.qc.Trait('merc2', setup.trait.anus_loose),
setup.qc.IfActorSatisfyThen(
'merc2',
setup.qres.Trait(setup.trait.vagina_tight),
setup.qc.Trait('merc2', setup.trait.vagina_loose)),
],
],
],
[[setup.questpool.forest, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_forest>> is the home to two main races: the neko and the elves.
But the forests also host a myriad of other creatures.
One of the most infamous inhabitants of the forest is known as simply
the aberration:
A freakish amalgamation of countless tentacles seemingly spawning from a
central core.
This once-plant had 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 neko and the elves.
They would invite adventurers on a mission to slay these beasts, rewarding
great 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><<if $g.slave.isMale()>>
<<questimage 'bounty_hunt_aberration_male.jpg'>>
<<else>>
<<questimage 'bounty_hunt_aberration_female.jpg'>>
<</if>>
<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 were holding a few elves hostage, each deep within the
creature's embrace as their juices
were 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.
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 were 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 were immobilized, the aberration mindlessly proceeded to violate
your slavers holes, absorbing as much juice be it cum, girlcum, and milk until it is full.
Suffice to say, after such an experience your slavers orifice tightness will be but a
distant memory.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'forbidden_fruit', /* key */
'Forbidden Fruit', /* Title */
'darko', /* author */
['transformation', 'forest', 'trait', 'money', 'ire', ], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.MoneyCrit(),
setup.qc.Ire('elf', 3),
],
],
[
'QuestForbiddenFruitSuccess',
[
setup.qc.MoneyCustom(2000),
setup.qc.Ire('elf', 1),
],
],
[
'QuestForbiddenFruitFailure',
[
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.TraitDecrease('scout1', setup.trait.dick_tiny),
setup.qc.TraitDecrease('scout1', setup.trait.breast_tiny),
]),
setup.qc.DoAll([
setup.qc.TraitDecrease('scout1', setup.trait.balls_tiny),
setup.qc.TraitDecrease('scout1', setup.trait.breast_tiny),
]),
]),
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.TraitDecrease('scout2', setup.trait.dick_tiny),
setup.qc.TraitDecrease('scout2', setup.trait.breast_tiny),
]),
setup.qc.DoAll([
setup.qc.TraitDecrease('scout2', setup.trait.balls_tiny),
setup.qc.TraitDecrease('scout2', setup.trait.breast_tiny),
]),
]),
],
],
[
'QuestForbiddenFruitFailure',
[
setup.qc.Outcomes('failure'),
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.TraitDecrease('biologist', setup.trait.dick_tiny),
setup.qc.TraitDecrease('biologist', setup.trait.breast_tiny),
]),
]),
],
],
],
[[setup.questpool.forest, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
While most modern elves live just like any other people,
some particularly traditional elves are infamous for worshipping trees.
Many worship mundane and particularly old trees, but one particular elven cult
worships the so-called "Tree of Fertility".
These rare trees produce fruits which is said to grant whoever
consumed them their sexual youth back.
Whether true or not, there are sure people who would pay a lot
for such a delicious-sounding fruit.
You can try to send a group of slavers deep into the <<lore region_forest>> to locate these trees.
Just make sure your slavers keep far, far away from the other types of fruits that grow
abundantly there...
</p><p>
After a few days of searching, <<rep $g.scout1>> stumbled
into a clearing with nothing but a single large ancient-looking tree in the middle of it.
The tree was full of "endowed-looking" fruits that <<rep $g.biologist>> biologist|was so
<<uadv $g.biologist>> sure that this had to be the fruit you were looking for: the Fruit of Fertility.
Your slavers then proceeded to harvest the tree, groping the fruit by its cockheads to yank it from
their bases. White-ish plan juice spluttered from a small opening in the fruit's head, spraying
<<rep $g.biologist>> right in <<their $g.biologist>> face with salty plant juice.
</p>
<<set _ch = 0>>
<<set _g1 = false>>
<<set _g2 = false>>
<<if $g.scout1.isHasTrait('per_frugal')>>
<<set _ch = _ch + 2>>
<<set _g1 = true>>
<</if>>
<<if $g.scout2.isHasTrait('per_frugal')>>
<<set _ch = _ch + 2>>
<<set _g2 = true>>
<</if>>
<<if $gQuest.getSeed() % 20 < _ch>>
<p>
Nobody in the right mind would eat such an un-innocent-ly shaped fruit, or so
<<rep $g.biologist>> thought. After all, there are numerous similarly shaped fruit in the
<<lore region_forest>>, but with very "bad" effects.
Unfortunately, logic did not apply to
<<if _g1 && _g2>>
both of your extremely greedy scouts.
<<elseif _g1>>
your greedy slaver <<rep $g.scout1>>.
<<set _s = $g.scout1>>
<<else>>
your greedy slaver <<rep $g.scout2>>.
<<set _s = $g.scout2>>
<</if>>
Right when <<rep $g.biologist>> biologist|was not looking,
<<if _g1 && _g2>> both of them
<<else>> <<rep _s>> swiped one of the fruits and
<</if>>
gobbled the thing down <<if _g1 && _g2>> their throats, <<else>> <<their _s>> throat, <</if>>
choking at the sensation, very similar to having a juicy cock deep-throating the organ.
The effects of eating the fruit might not be noticable from the outside, but
<<if _g1 && _g2>>
they could
<<else>>
<<rep _s>> could
<</if>>
feel a certain part of their body returned to youth.
Fortunately there were enough of the fruits that your slavers still made a tidy amount of profit
after selling the ones your unscrupulous scouts did not touch,
but you made a mental note to scold your slavers later.
</p>
<<if _g1>>
<<run setup.qc.TraitDecrease('scout1', setup.trait.vagina_tight).apply($gQuest)>>
<<run setup.qc.TraitDecrease('scout1', setup.trait.anus_tight).apply($gQuest)>>
<</if>>
<<if _g2>>
<<run setup.qc.TraitDecrease('scout2', setup.trait.vagina_tight).apply($gQuest)>>
<<run setup.qc.TraitDecrease('scout2', setup.trait.anus_tight).apply($gQuest)>>
<</if>>
<<else>>
<p>
To your complete surprise, the fruit all arrived at your fort intact.
Somehow, your slavers were able to hold off eating or desecrating any of the
well-endowed little fruits, probably not in small part thanks to the white and salty juice
that coated most of the fruits.
Your slavers told you that the plant produced these substance,
but you were not taking any chances, and you ordered <<rep $g.biologist>> to
thoroughly wash all these fruits before you offloaded them to the nearest black market.
</p>
<</if>><p>
After a few days of fruitless search,
<<rep $g.scout1>> stumbled into a clearing with nothing but a single large ancient-looking tree
in the middle of it.
Surrounding the tree were numerous elves engaged in debauched ritual.
They grope and stroke the dick-shaped fruits, before the fruit shuddered and leaked
plant juice, which the elves drank lasciviously --
These elves worshipped the tree to the level of a god,
and considered its juice to grant them blessings and perpetual youth.
Your slavers waited until all the elves were completely spent from the debauchery before
sneaking in and gathering some of the fruits for resale.
Unfortunately, some of the elves also tried to bore a child sired by the tree,
which they did by inserting the fruits into holes a fruit should never have gone into.
Your slavers decided that these unlucky fruits were probably too smelly and it would be unwise
to try and sell these too.
</p><p>
After a few days of fruitless search, <<rep $g.scout1>> stumbled
into a clearing with nothing but a single large tree in its center.
Excited, <<rep $g.scout1>> and <<rep $g.scout2>> <<uadv $g.scout1>> rushed into the
clearing, without realizing that <<rep $g.biologist>> had mistaken the tree with another close relative
of the tree, but with a completely different effect.
<<if $gOutcome == 'disaster'>>
<<Rep $g.biologist>> even joined in the excitement and
tasted the fruits together, first one fruit, two fruits, until several were already consumed by the time
<<rep $g.biologist>> realized the mistake.
<<else>>
With <<rep $g.biologist>> far behind them, the scouts proceeded to sample the fruits and
taste them, first one fruit, two fruits, until several were already consumed by the time
<<rep $g.biologist>> realized the mistake.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<set _cursebreaker = new setup.UnitCriteria(
null, /* key */
'Cursebreaker', /* title */
[ /* critical traits */
setup.trait.per_humble,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_dark_master,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.per_proud,
setup.trait.per_lustful,
setup.trait.per_masochistic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sum to 3.0 */
arcane: 3.0,
}
)>>
<<run new setup.UnitGroup(
'quest_nekostatue',
'neko statue',
'subrace_neko', /* pools */
0,
[
setup.qc.TraitReplace('unit', setup.trait.muscle_strong),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.Mindbreak('unit'),
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',
'subrace_neko', /* pools */
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.Mindbreak('unit'),
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', 'furry', 'unit'], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'cursebreaker1': _cursebreaker,
'cursebreaker2': _cursebreaker,
'scout': setup.qu.scout_forest,
},
{ /* actors */
'statue': 'quest_nekostatue',
'statueleader': 'quest_nekostatueleader',
},
[ /* costs */
],
'QuestNekoStatue', /* passage description */
setup.qdiff.hard19, /* difficulty */
[ /* outcomes */
[
'QuestNekoStatueCrit',
[
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
setup.qc.AddTag('statueleader', 'quest_neko_statue_marker'),
setup.qc.Slave(
'statueleader',
'a|was a neko soldier in ancient times who a|was captured and turned into a living fuckable statue.'),
],
],
[
'QuestNekoStatueCrit',
[
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
setup.qc.AddTag('statue', 'quest_neko_statue_marker'),
setup.qc.Slave(
'statue',
'a|was a 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, setup.rarity.rare],], /* quest pool and rarity */
[ /* prerequisites to generate */
setup.qres.QuestUnique(),
],
)>><p>
In ancient times, the elves and the neko were engaged in a lengthy war.
While those empires has long gone by now, the remnants of this war are still abundantly present
in the <<lore region_forest>>.
One of the most famous ones is the so-called moai filled, where statues
of ancient neko soldiers were posed and displayed in various positions
on an empty meadow.
While the ancient elves look quite similar with the modern elves,
ancient neko often still retain strong heritage to their <<lore race_tigerkin>> ancestors.
They often look quite different than modern neko, with some sporting a full furry body or just furry limbs.
</p>
<p>
One of your contacts has informed you that those statues were supposedly
a living breathing neko once. They were in fact (if the rumors were to be believed)
neko soldiers who were defeated by the elven army, and turned into a living statue
by the elven petrification magic.
All the statues without exception are held upright with a pole seemingly shoved deep
within their asses --
Rumors said these poles ended with
a huge dildo which are stuck and lodged within their anus.
</p>
<p>
You have heard that there might still be some elven camps out there who are privy
of the rituals required to undo these spells.
While having a neko as a slave is always a good thing, and you do wonder if it is worth
risking your slavers to go on such a weird mission.
</p><p>
After successfully learning the rituals required to undo the spells,
<<yourrep $g.scout>> proceeded to
<<uadv $g.scout>> scour the forest for one of these moai fields.
<<if $gOutcome == 'success'>>
Upon finding one, they searched for a relatively unscatched statue.
After finding one,
<<else>>
Upon finding one, they found a magnificent specimen of a neko there,
with muscle covering every inch of <<their $g.statueleader>> statuesque body.
Your
<</if>>
slavers inspected the statue closer, and found the pole inserted right
up the statue's ass, just like the rumors said.
</p>
<p>
According to the information they received, the dildo is the key to undo the spell.
In order to break the spell, one must overwhelm the spell by making the dildo
far too wide to contain the spell. The easiest way is to insert another dildo into the
statue's already ravaged hole, or in some case, your slaver's dick -- effectively
double penetrating the statue.
</p>
<p>
<<Yourrep $g.cursebreaker1>>
<<if $g.cursebreaker1.isHasTrait('per_chaste')>>
reluctantly
<</if>>
volunteered for the task 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 shattered revealing
<<if $gOutcome == 'crit'>>
the magnificent specimen of a neko,
<<else>>
the neko inside,
<</if>>
who immediately collapsed unconscious, but breathing.
Who knows how long such a neko had been living as a statue like this, but the experience
had drained both their hole's tightness and their mind, leaving them useful
for nothing but a broken, unresponsive sex toy.
Your slavers gathered the new slave as well as the 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>> scout|was 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 drew the ire of one particularly sadistic elf.
She tricked your slavers, pretending to teach them how to undo the spell,
while in reality casting the petrifiation spell directly on your slavers.
Fortunately, the spell's power had been lost over time, and the partly
petrified dicks and breasts of your slavers will return to normal in time.
</p>/* PROOFREAD COMPLETE */
<<set _trader = setup.CriteriaHelper.CritTraits(
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.subrace_humankingdom,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
setup.qu.trader,
)
)>>
<<run new setup.QuestTemplate(
'trading_mission_forest', /* key */
'Trading Mission: Elven Forests', /* 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.qc.TraitIncreaseExisting('guard', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('guard', setup.trait.vagina_gape),
setup.qc.Injury('guard', 1),
],
],
],
[[setup.questpool.forest, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
Relations between the elves of the <<lore region_forest>> and the <<rep $company.humankingdom>> aren't always amiable.
The exact border between their lands is often not respected, and border raids are common from both sides.
What trade there is is sporadic, and often goes through Neko Port City, the catkin are known to charge very large markups when selling to their one time enemies. Given all of that, there is an opportunity to bring in key supplies, like bronze, iron and other forged metals yourself. As long as you undercut the prices charged by the catkin, you'll likely come out ahead. Assuming you manage to avoid the dangers of the forest.
</p><p>
<<Yourrep $g.trader1>> and <<utheirrel $g.trader1 $g.trader2>> <<rep $g.trader2>> managed to
<<uadv $g.trader1>>
find a supplier of iron in the <<lore region_city>>.
<<set _con = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'skill_connected'})>>
<<set _fru = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_frugal'})>>
<<set _lav = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_lavish'})>>
<<if _con>>
By namedropping a few of <<their _con>> connections, <<rep _con>> negotiated a further discount.
<<elseif _fru>>
Ever the hard bargainer, <<reps _fru>> spent a lot of time haggling, eventually securing a lower price.
<<elseif _lav>>
<<Rep _lav>> might not have found the best deal around, but it was still a very good one.
<</if>>
<<name $g.trader1>> shrewdly sold the iron to a number of villages at the edge of the forest, charging slightly less than the Neko traders and getting back around four times as much as they spent to buy the iron in the first place. Even allowing for travel costs, you've ended up with so much profit you don't really care about the amounts your slavers probably skimmed off the top.
</p><p>
The trading mission went about as well as expected, with your slavers
making tidy amount of profit from their visits to a number of elven villages at the edge of the forest.
The only thing of note was their encounter with a particularly nasty shapeshifting forest spirit.
called a Dolukabi by the local elves, it was known to play tricks on forest travellers, sometimes deadly, luring them into danger by taking the form of a lost traveller, or injured animal. Fortunately, <<rep $g.guard>> noticed the distressed elf they encountered had index fingers longer than her middle fingers, a clear giveaway of a Dolubaki in humanoid form, and your slavers ignored their pleas, continuing on their journey and leaving the frustrated spirit behind.
</p><p>
The roads and trails in the vast <<lore region_forest>> are not always marked, have a tendancy to get grown over by vegetation, and new game trails can create very confusing intersections. Somewhere along the line, your slavers took a wrong turn, and never found their way back to a known road. When they eventually broke out of the canopy and into the dappled meadows surrounding the forest, they gave up and returned back to the fort, selling the iron to the Toran communities on the way back for whatever price they could get.
</p><p>
The roads and trails in the vast <<lore region_forest>> are not always marked, have a tendancy to get grown over by vegetation, and new game trails can create very confusing intersections. Somewhere along the line, your slavers took a wrong turn. Just as they were about to despair, they came across a helpful elven hunter who offered to lead them to his village. Grateful for a guide, your slavers accepted, and were soon led deep into the forest, in an area where there were more dried leaves fallen to the ground than there were green leaves on the tree branches. And there was no sign of a village.<br>
"Where are--" was all that <<name $g.trader1>> was able to get out before tentacles sprouted from what your slavers had taken to be a dead tree stump.<br>
As the hunter's smile widened unnaturally and him form melted into the clawed, red bearded and green skinned shape of a Dolubaki, your slavers realised the mischevous, shapeshifting forest spirit had brought them itno the lair of a forest abomination, which grabbed <<reps $g.guard>> before anyone could react.
</p>
<p>
<<Reps $g.guard>> holes were completely ravaged by the aberration's tentacles. The others started hacking at the stump, attempting to free <<them $g.guard>> from the monster's grasp as the Dolubaki cackled from the branches overhead. With only one abberation to deal with, they managed to free <<name $g.guard>> eventually, by which time there was no trace of the trickster spirit other than a lingering laugh and the scent of lemon rind. You slavers eventually found their way out of the forest and back to the fort, but <<Rep $g.guard>> will need some time to recover from such experience.
</p>/* PROOFREAD COMPLETE */
<<set _criteriacatnipper = new setup.UnitCriteria(
null, /* key */
'Catnipper', /* name */
[
setup.trait.per_sly,
setup.trait.skill_hypnotic,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.race_catkin,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.per_direct,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 2,
}
)>>
<<run new setup.QuestTemplate(
'catnapping', /* key */
'Catnapping', /* Title */
'darko', /* Author */
[ 'forest', 'unit', 'ire',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'catnipper': _criteriacatnipper,
'kidnapper1': setup.qu.kidnapper,
'kidnapper2': setup.qu.kidnapper, },
{ /* actors */
'neko': 'subrace_neko', },
[ /* costs */
],
'Quest_catnapping',
setup.qdiff.normal19, /* difficulty */
[ /* outcomes */
[
'Quest_catnappingCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyCustom(2000),
],
], [
'Quest_catnappingCrit',
[
setup.qc.Ire('neko', 1),
setup.qc.Slave('neko', 'a|was an ordinary neko living in the forests who put a|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, setup.rarity.common],
], /* 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
undercity of Lucgate.
</p>
<p>
According to the realm history, the neko originally evolved from cats.
A particular genetic trait they share to this very day with their feline companions is
their attraction to catnips,
and you have hatched a plan based on this.
Using a specialized slaver, you can try using a catnip to lure one of the neko
into the open fields.
Once they are out in the open, far away from civilization, it would
be child's play to have two other slavers kidnap the addled slave and bring them to their new
loving home.
</p><p>
Your slavers had to travel to great length to find a catnip --- apparently the neko population
had driven catnip to almost extinction from the surrounding regions.
With a catnip in hand,
<<rep $g.catnipper>> <<uadv $g.catnipper>> went into a small neko tavern.
<<if $g.catnipper.isHasTrait('race_catkin')>>
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 seemed <<rep $g.catnipper>> had selected a particularly sensitive neko
as <<they $g.neko>> walked to the clearing already 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_catkin')>>
<p>
The catnipper apparently also put <<rep $g.catnipper>> into a similar trance,
and your other slavers ended up having to carry <<reps $g.catnipper>> unresponsive
<<ubody $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 hard-earned catnip. After spending a fruitless week they decided to give up
and head home.
</p><p>
The plan backfired as <<rep $g.catnipper>> somehow catnipper|was lured by a
group of unscrupulous neko, who proceeded to attempt to tame <<therace $g.catnipper>> and
made <<them $g.catnipper>> into their cumslut.
<<Yourrep $g.kidnapper1>> and <<rep $g.kidnapper2>> had to risk their lives
"kidnapping" <<rep $g.catnipper>> from the neko, before any permanent mental
changes were inflicted upon <<therace $g.catnipper>>.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Defiant Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.HasTag('in_training_defiant_slave'),
],
{
}
)>>
<<set _effects = [
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
setup.qc.TraitRemove('slave', setup.trait.will_defiant),
setup.qc.AddHistory('slave', "a|was broken by a drug regime administered by your slavers together with a particularly devilish elven alchemist"),
setup.qc.IfThenElse(
setup.qres.Actor('slave', setup.qres.AnyTrait([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], true)),
setup.qc.DoAll([
setup.qc.DecreaseTraitsRandom('slave', [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], 1, false)
], undefined),
setup.qc.DoAll([
setup.qc.RemoveRandomTraitWithTag('slave', 'bg')
], undefined)),
]>>
<<run new setup.QuestTemplate(
'drug_regime', /* key */
"Drug Regime", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'forest',
'prep',
],
4, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'alchemist1': [ setup.qu.alchemist, 1],
'alchemist2': [ setup.qu.alchemist, 1],
'trainer': [ setup.qu.slavetrainer, 1],
},
{ /* actors */
'elf': 'subrace_elf',
},
[ /* costs */
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.LoseItem('mindmend_potion', 1),
setup.qc.LoseItem('potion_isolation', 1),
setup.qc.LoseItem('blank_potion', 1),
], undefined),
setup.qc.DoAll([
setup.qc.LoseItem('love_potion_true', 1),
setup.qc.LoseItem('blank_potion', 1),
setup.qc.LoseItem('potion_tight', 1),
], undefined),
setup.qc.DoAll([
setup.qc.LoseItem('potion_slavertraining', 1),
setup.qc.LoseItem('potion_tight', 1),
setup.qc.LoseItem('potion_isolation', 1),
], undefined)
]),
],
'Quest_drug_regime',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_drug_regimeCrit',
[
setup.qc.Outcomes('success'),
setup.qc.SlaverMarker('elf'),
],
],
[
'Quest_drug_regimeCrit',
_effects,
],
[
'Quest_drug_regimeCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_drug_regimeCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
The elves living in the <<lore region_forest>> are great alchemists, known
for having proficiency in mixing potions far above other races. But while
most uses their gift for innocent purposes like healing, there are rumor of a certain
elven <<lady $g.elf>> living in a secluded hut who's capable of mixing
potions for more nefarious purposes. Your slavers somehow managed to get in
contact with <<them $g.elf>>, who agrees to the offer of breaking <<rep _u>>
with a liberal usage of potions.
</p>
<p>
There is a catch, however — seeing how stubborn your slave is, <<they
$g.elf>> would require the strongest of her concoctions to break the slave's
mind. And it's up to you to supply <<them $g.elf>> with the requisite
potions, all of them fairly rare in their regard. But your slavers assures
you that <<they $g.elf>> mastery over alchemy is so good that once <<they
$g.elf>> get <<their $g.elf>> <<uhands $g.elf>> on the potions, there is no
chance for <<them $g.elf>> to fail at <<their $g.elf>> job.
</p>
<p>
However, being drugged like this will definitely have permanent side effect,
including minor amnesia and loss of skills. If you are prepared for the
costs, then this could be your only chance to finally break that resistant
mind of <<rep _u>>...
</p>
<</if>><p>
The ingredients were not easy to come by at all, having to scour the entire
continent of <<lore continent_main>> to search for the potions. <<Rep
$g.trainer>> <<uadv $g.trainer>> led the team into the elven alchemist's hut,
and delivered the potions to <<them $g.trainer>>. In the coming days, <<rep
$g.alchemist1>> and <<utheirrel $g.alchemist1 $g.alchemist2>> <<rep
$g.alchemist2>> helped in any way they can as they concocted various elixirs,
ranging from elixir of nipple sensitivity to elixir of pain to break the
slave's resistance, without damaging the mind... too much. The slave was
helpless to do anything as <<they $g.slave>> remained bound throughout the
procedure, gulping elixirs upon elixirs all while <<rep $g.trainer>> <<uadv
$g.trainer>> used <<their $g.trainer>> slave training mastery to properly
shape the slave's mind.
</p>
<p>
The treatment lasted for a full month, with increasingly complex elixirs
being gulped down <<rep $g.slave>> both from <<their $g.slave>> <<umouth
$g.slave>> and occasionally inserted from <<their $g.slave>> rear and
absorbed directly into <<their $g.slave>> sternum. But the result showed:
<<rep $g.slave>> slave|is no longer showing any of <<their $g.slave>> former
defiancy, and slave|is now deemed ready by <<yourrep $g.trainer>> for proper
training. There is a noticable side-effect however, as the elixir left part
of the slave's mind somewhat blank, making <<them $g.slave>> forget some of
<<their $g.slave>> past...
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'eternal_youth2', /* key */
'Eternal Youth', /* Title */
'darko', /* Author */
[ 'forest',
'veteran',
'item'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'biologist': setup.qu.biologist,
'alchemist': setup.qu.alchemist_veteran,
'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_youth2Success',
[
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, setup.rarity.uncommon],
], /* 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 the fruit and turning the fruit into a
potion.
</p><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove
where naked elves flocked in and seemingly played 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, they somehow managed to keep
their composure and scoured the area for the rumored plant.
It was then that they found the source — above the water spring leading into the grove, a
magnificent tree grew 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>> alchemist|was able to efficiently use and ultimately produce
three 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 elves flocked and seemingly play in the water without a care in the
world. Your slavers waited until the elves finished playing — after watching
the debauchery and the elves finally left the grove, your slavers
scoured the area for the rumored plant.
</p>
<<if $gOutcome == 'success'>>
<p>
They were unable to find the source,
but from a river leading into the grove floated a single, odd looking fruit.
<<Rep $g.biologist>> biologist|was
<<uadv $g.biologist>>
convinced that this is the fruit they are after —- and <<they $g.biologist>>
biologist|was right. They brought these fruits home, which <<rep
$g.alchemist>> alchemist|was able to use and to produce two bottles 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>
<<else>>
<p>
Unable to find anything resembling the
legendary fruit, your slavers were about to give up when <<rep $g.scout>>
fell into the watery grove. <<Yourrep $g.biologist>> attempted to rescue <<rep
$g.scout>>, but the attempt proved futile, as something squishy and tangly
seemed to tie <<reps $g.scout>> <<ufeet $g.scout>> deep within the grove. A sudden thrust into <<reps
$g.scout>> rear cavity elicited a loud moan from <<them $g.scout>>, and before
<<rep $g.biologist>> could react, multiple green vines bound them together
within 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 what were effectively green tentacles.
</p>
<p>
After few long hours, the plant, seemingly satisfied, finally released your
slavers. Their holes are completely 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 pain before going back home with some
leftover.
</p>
<</if>><p>
Deep within the forests, <<rep $g.scout>> managed to locate a pristine grove
where naked elves gathered and seemingly played 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 <<reps $g.scout>> rear cavity elicited a loud moan from
<<therace $g.scout>>, followed by muffled noises as another, penis-shaped flower,
entered <<their $g.scout>> <<umouth $g.scout>> and choked <<them $g.scout>>.
Your other slavers were no more lucky as they too were prodded and poked by
various vines, while their limbs were fully bound by the flower. The plants
continued to do unspeakable things to your slavers, and your slavers were
helpless to do anything but to just simply enjoy the ride as best as they could.
</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 coughed and choked as their mouths were empty
for the first time in days while their rear ached like never before. <<Rep
$g.scout>> scout|was 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>/* PROOFREAD COMPLETE */
<<set _criteriaguardian1 = new setup.UnitCriteria(
null, /* key */
'Grove Guardian', /* name */
[
setup.trait.bg_mythical,
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.tough_nimble,
setup.trait.per_attentive,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_human,
setup.trait.bg_raider,
setup.trait.bg_pirate,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
survival: 1,
arcane: 1,
}
)>>
<<set _criteriaguardian2 = new setup.UnitCriteria(
null, /* key */
'Grove Guardian', /* name */
[
setup.trait.bg_mythical,
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.tough_nimble,
setup.trait.per_attentive,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_animal,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_human,
setup.trait.bg_raider,
setup.trait.bg_pirate,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dreamy,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1,
survival: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'grove_guardian_fill_in', /* key */
"Grove Guardian Fill-In", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unit',
'favor',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'guardian1': [ _criteriaguardian1, 1],
'guardian2': [ _criteriaguardian2, 1],
'spotter': [ setup.qu.spotter, 1],
},
{ /* actors */
'trespasser': 'all',
},
[ /* costs */
],
'Quest_grove_guardian_fill_in',
setup.qdiff.hardest29, /* difficulty */
[ /* outcomes */
[
'Quest_grove_guardian_fill_inCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('trespasser', "tried to trespass into a sacred elven site but was spotted and subdued by your slavers", undefined),
],
],
[
'Quest_grove_guardian_fill_inCrit',
[
setup.qc.Favor('elf', 100),
setup.qc.Item(setup.item.healing_potion),
],
],
[
'Quest_grove_guardian_fill_inFailure',
[
setup.qc.Ire('elf', 10),
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.TraitDecrease('guardian1', setup.trait.vagina_tight),
setup.qc.TraitDecrease('guardian1', setup.trait.anus_tight)
], undefined),
setup.qc.DoAll([
setup.qc.TraitIncreaseExisting('guardian1', setup.trait.vagina_gape),
setup.qc.Trait('guardian1', setup.trait.anus_gape)
], undefined),
setup.qc.DoAll([
setup.qc.Trait('guardian1', setup.trait.ears_elf)
], undefined),
setup.qc.DoAll([
setup.qc.Corrupt('guardian1', null, 2)
], undefined)
]),
],
],
[
'Quest_grove_guardian_fill_inDisaster',
[
setup.qc.OneRandomSeed([
setup.qc.MissingUnit('guardian1'),
setup.qc.MissingUnit('guardian2')
]),
setup.qc.Ire('elf', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Many locations in the <<lore region_forest>> are considered sacred by the
elves, and many elves serve as guardians for these dedicated grove, tasked
with keeping intruders out of these holy groves.
There are many rumors what
treasures are hiding behind these grove guardians — the rumors range from
simple things such as a healing spring to outrageous ones like the secret
of immortality. Nothing but hogwash, you are sure.
</p>
<p>
Today, <<yourrep _u>> informed you about a rather strange opportunity.
Apparently, one of the grove guardians is going to need some time to attend
to their own personal matters, and would like to hire your company's
services to help guard the grove for a few weeks.
This might be an easy opportunity to gain friendship with the elves,
should you take up the offer.
In addition, should your slavers subdue any trespasser, it is also up
to your slavers what they would do to the unlucky trespasser. All in all,
this sounds like a good mission to take.
</p>
<p>
You just need to ensure that your slavers are kept far, far away from
whatever temptation lies in the heart of the grove...
</p><p>
Arriving at the forest, <<rep $g.guardian1>> and <<utheirrel $g.guardian1
$g.guardian2>> <<rep $g.guardian2>> were guided into the sacred site after a
long lecture about the historical importance of the site.
<<if $g.guardian1.isHasTrait('per_frugal')>>
Given <<reps $g.guardian1>> predisposition towards money,
<<elseif $g.guardian1.isHasTrait('per_dreamy')>>
Given <<reps $g.guardian1>> extremely limited attention span,
<<elseif $g.guardian1.isHasTrait('per_slow')>>
Given <<reps $g.guardian1>> rather lacking intellect,
<<elseif $g.guardian1.isHasTrait('per_proud')>>
Given <<reps $g.guardian1>> vanity,
<<elseif $g.guardian1.isHasTrait('per_lunatic')>>
Given <<reps $g.guardian1>> affinity for lunacy,
<<elseif $g.guardian1.isHasTrait('per_evil')>>
Given <<reps $g.guardian1>> absolute lack of morality,
<<elseif $g.guardian1.isHasTrait('per_playful')>>
Given <<reps $g.guardian1>> playful attitude,
<<elseif $g.guardian1.isHasTrait('per_active')>>
Given <<reps $g.guardian1>> hatred towards history,
<<else>>
Given <<reps $g.guardian1>> <<uinsultnoun $g.guardian1>>,
<</if>>
you've no doubt that all these lectures were all lost in <<their $g.guardian1>> thick skull,
but somehow your slavers were able to resist the temptation of desecrating
the site and managed to finish the job properly.
</p>
<p>
<<if $gOutcome == 'crit'>>
In fact, <<rep $g.spotter>> spotted a trespasser during one of the night
shifts, whom <<rep $g.guardian1>> <<uadv $g.guardian1>> subdued. After
making sure the elves were impressed by just what sort of danger your slavers had managed to
prevent, the trespasser was neatly secured, tied on top of a carriage to bring back home as
a slave.
<<else>>
While the watch turned relatively quiet,
<<reps $g.guardian1>> <<upraisenoun $g.guardian1>> and <<reps $g.guardian2>>
<<upraisenoun $g.guardian2>> did not go unnoticed.
The elves were rather impressed by how consistent your slavers had watched over their grove,
and your company's reputation with them soared as a result.
<</if>>
The grateful elves also gifted a <<rep setup.item.healing_potion>> to your slavers
— a good gift fitting for master alchemists like the elves.
</p><p>
The secrets of the grove proved too tempting for your slavers, and <<yourrep
$g.guardian1>> guardian1|was unable to resist going into the grave and taste
whatever forbidden secret it held...
</p>
<p>
By the time <<yourrep $g.guardian2>> realized, it was already too late.
<<They $g.guardian2>> found <<utheirrel $g.guardian2 $g.guardian1>> <<rep
$g.guardian1>> deep inside the grove, gorging on one of the forbidden fruits.
<<if $gQuest.getSeed() % 4 == 0>>
<<reps $g.guardian1>> holes were tightened before your slavers' eyes, a seemingly miraculous effect.
<<elseif $gQuest.getSeed() % 4 == 1>>
Tendrils came out from within the fruit, assaulting the slaver's holes, but
the fruit kept <<rep $g.guardian1>> drugged and <<theslaver $g.guardian2>> remained
irresponsive as <<their $g.guardian1>> holes were ravaged.
<<elseif $gQuest.getSeed() % 4 == 2>>
<<if $g.guardian1.isHasTrait('ears_elf')>>
<p>
Despite eating the fruit vigorously, nothing seemed to happen to <<rep $g.guardian1>>.
</p>
<<else>>
<p>
<<Rep $g.guardian1>> now guardian1|sport a pair of sharp pointy ears...
</p>
<</if>>
<<elseif $gQuest.getSeed() % 4 == 3>>
<p>
The corrupted fruit spread its corruption deep within <<rep $g.guardian1>>,
changing their appearance.
</p>
<</if>>
It took <<rep $g.guardian2>> some effort to drag the addled <<urace
$g.guardian1>> back, but it was already too late. The elves already knew of your
slavers' treachery, and they were all banished from the grove.
</p><<if $gQuest.getSeed() % 2 == 0>>
<<set _u = $g.guardian1>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<set _u = $g.guardian2>>
<</if>>
<p>
During one of the night shifts, your slavers spotted a trespasser attempting
to cross into the grove. However, only <<yourrep _u>> happened to be awake at
that time, and <<they _u>> foolishly decided to confront the trespasser
alone.
</p>
<p>
<<Rep _u>> never returned to the rest of your slavers. It remains unknown just what
might have happened to <<rep _u>>... <<uneedrescue _u>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'healing_grove', /* key */
'Healing Grove', /* Title */
'darko', /* Author */
[ 'forest', 'item'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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_groveCrit',
[
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Several water springs in the <<lore region_forest>> are famous for their
seemingly magical ability to heal wounds.
The local residents often travel to these springs to bathe, which would heal 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 physically into your fort.
But at least you can send a group of slavers to locate the spring and scoop
the useful 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 for a decent sum.
</p>
<p>
First of all, you need to send a scout to locate the surely well-hidden spring.
A biologist can help the scout the terrains to find the likely location of the spring.
Finally, an alchemist slaver is a must, for their knowledge in potion-making is required
to bottle up these water.
</p><p>
<<if $gOutcome == 'crit'>>
Your slavers found the spring as pristine as they were rumored to be,
with animals and butterflies frolicking around the spring.
As beautiful as the sight was, there was still money to be made and your slavers got to work.
They scooped some of the water into the many vials they brought.
Using these water,
<<rep $g.alchemist>> alchemist|was able to <<uadv $g.alchemist>>
concoct several <<rep setup.item.healing_potion_greater>>.
<<else>>
<<Rep $g.scout>> scout|was unable to lead <<utheirrel $g.scout $g.biologist>> <<rep $g.biologist>> and
<<utheirrel $g.scout $g.alchemist>> <<rep $g.alchemist>> into the rumored spring.
Just before they were about to give up,
<<rep $g.biologist>> found a smalller spring with minor healing properties.
It might not be the spring your slavers were looking for, but
<<yourrep $g.alchemist>> thought it was good enough and got to work.
They scooped some of the water into the vials they brought.
While the spring's healing properties were not as strong as the rumored one, it was still pretty
potent and
<<rep $g.alchemist>> still managed to
craft several <<rep setup.item.healing_potion>> out of them.
<</if>>
You can use these potions to immediately heal your slavers of their injuries
<<inyourbuilding 'warehouse'>>.
Or, with proper treatment, can also be used to heal even very lengthy wounds.
Alternatively, there is always demand for these potions in the market,
and they
will sell decently
<<inyourbuilding 'bazaar'>>.
</p><p>
Your slavers were lost in the forest when trying to find and locate the spring.
It took <<reps $g.scout>> greatest efforts to return them back to the exit.
Still, they managed to stumble upon a small spring on the way out, which turned out to
have minor healing properties, and <<rep $g.alchemist>> alchemist|was able to
<<uadv $g.alchemist>> craft something out of it.
</p><p>
Unfortunately, during your slavers adventure into the forest, a sizable
earthstorm broke out and trapped your slavers in the forest. They had no choice
but to retreat after suffering numerous cuts and bruises here and there from the
upturned vegetations in the forest.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_hunting_season1',
'Hunter',
'forest_all', /* pools */
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_hunter), ],
)>>
<<set _criteriabait = new setup.UnitCriteria(
null, /* key */
'Slave2', /* name */
[
setup.trait.per_loyal,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.training_obedience_basic,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.training_horny_basic,
setup.trait.training_horny_advanced,
setup.trait.training_horny_master,
setup.trait.eq_valuable,
],
[
setup.trait.per_loner,
setup.trait.per_stubborn,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slave),
],
{
}
)>>
<<run new setup.QuestTemplate(
'hunting_season', /* key */
'Hunting Season', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'scout': setup.qu.scout_forest,
'trapper': setup.qu.trapper,
'bait': _criteriabait, },
{ /* actors */
'hunter': 'quest_hunting_season1', },
[ /* costs */
],
'Quest_hunting_season',
setup.qdiff.hard24, /* difficulty */
[ /* outcomes */
[
'Quest_hunting_seasonCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.survival),
setup.qc.Equipment(setup.equipmentpool.survival),
setup.qc.Equipment(setup.equipmentpool.survival), ],
], [
'Quest_hunting_seasonCrit',
[
setup.qc.Slave('hunter', 'a|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, setup.rarity.rare],
], /* quest pool and rarity */
[
setup.qres.HasSlave(), ], /* restrictions to generate */
)>><p>
Residents of the <<lore region_forest>> are used to both owning slaves and being a
slave. The lawless nature of the forests means that the forest offers itself as 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>> considerable animal hunting skills. While you have no interest in recruiting
the hunter, having one as a slave might prove an interesting endeavor. 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 forest. While others would find
that suspicious, a very green slave-hunter such as this one would have no chance to
resist such a seemingly easy victory.
</p><p>
Your slavers set up the bait: <<rep $g.bait>> bait|was gagged and tied to
a pole in the middle of a clearing in the forest. Then, your slavers waited: first a
few minutes, until what seemed to be hour.
<<set _pat = setup.selectUnit([$g.trainer, $g.scout, $g.trapper], {trait: 'per_calm'})>>
<<if _pat>>
<<Reps _pat>> patience helped them stay calm.
<</if>>
When they were about to give up out of boredom, <<yourrep $g.scout>> <<uadv $g.scout>>
spotted the hunter headed towards the clearing.
</p>
<p>
With such an alluring slave on display, the hunter had no chance to resist
and approached the slave. Overcame with excitement, <<they $g.hunter>> immediately started to
"train" the slave. But it made the perfect opportunity for your slavers to
ambush <<them $g.hunter>>, who stood no chance.
Having secured <<them $g.hunter>> in complete bondage, your slavers petted
<<rep $g.bait>> for being such a good slave and <<rep $g.trainer>>
<<uadv $g.trainer>>
<<if $g.trainer.isHasVagina()>>
permitted <<them $g.bait>> to lick <<their $g.trainer>> pussy
<<else>>
permitted <<them $g.bait>> to choke on <<their $g.trainer>> dick
<</if>>
as a reward.
<<if $gOutcome == 'crit'>>
Your slavers even managed to find the hunter's encampment before heading back
home with a new trophy in tow, which they proceeded to ransack for valuables.
<<else>>
Your slavers then head back home with a new trophy in tow.
<</if>>
</p><p>
Unfortunately, your bait never caught the prey as the hunter were nowhere to be seen
by your slavers. Even after hours of <<rep $g.bait>> tied naked to a pole in
the forest, nobody seemed to pay attention except some animals who came and
licked <<their $g.bait>> <<ugenital $g.bait>>.
</p><p>
With <<rep $g.bait>> suitably tied up on a pole, your slavers became
complacent and they never figured out just when and how <<rep $g.bait>> bait|was
stolen from the pole.
</p>
<p>
In a couple of days, you received an offer to purchase slave exactly matching <<reps
$g.bait>> specifications.
The slave is available in the <<= setup.buildingtemplate.slavepens.rep()>>.
</p>/* PROOFREAD COMPLETE */
<<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_catkin], true),
],
[ /* 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_frugal,
setup.trait.per_sly,
setup.trait.per_logical,
setup.trait.per_evil,
setup.trait.per_serious,
setup.trait.skill_connected
], 5, 0, 0),
],
[ /* fulfilled outcomes */
setup.qc.UnitValueToFavor('bank', 1.0 / 40.0, 75.0)
],
[ /* 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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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': 'subrace_elf',
'neko': 'subrace_neko',
},
[ /* costs */
],
'Quest_investment_banking',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_investment_bankingCrit',
[
setup.qc.Favor('bank', 75),
setup.qc.Outcomes('success'),
],
],
[
'Quest_investment_bankingCrit',
[
_slaveorder,
],
],
[
'Quest_investment_bankingCrit',
[
setup.qc.Outcomes('success'),
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, setup.rarity.common],
],
[ /* 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>>.
As the largest banking institution in <<lore continent_main>>,
they are one of the most powerful institutions in <<lore continent_main>>, weilding
considerable influence over many aspects of life that often go quite unnoticed by everyday people.
It is always wise to have them as 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.
</p>
<<dialogue $g.agent>>
An investment for both our benefits, <<name
$g.agent>> likes to think!
<</dialogue>>
<p>
The bank is apparently looking for new "employees" to fill out their ranks, and isn't shy
from asking your company to headhunt them a suitable candidate. Literally so if need be.
</p>
<p>
If your company is interested, <<rep $g.agent>> has invited you to send a 'recuitment' team to visit their
headquarters to further discuss the specific qualities the bank is looking for in ther perfect new 'employee'.
</p>
<p>
You just need a group of slavers clever enough to navigate through the labyrinth of red
tape that the <<rep $company.bank>>, is known for...
</p><p>
Your slavers arrived at the <<lore location_npc>> fairly quickly. Once there,
they made a beeline for the headquarters, and were greeted by an elven attendant, 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 attendant,
<<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 jiggled during <<their $g.slave>> every step.
<<else>>
dick, as it swung with <<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 sharpest suit your slavers ever laid their eyes on.
</p>
<p>
The negotiation then ensued, 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>>
occasionally distracted by the
<</if>>
ever present
<<if $g.slave.isFemale()>>
voluptuous
<<else>>
hunky
<</if>>
elf.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success' || $gOutcome == 'failure'>>
<p>
Fortunately, the negotiation went well. Your slavers managed to
secure an "employee requisition" order to fill a vacant position. The negotiations were
very intense, and your slavers almost didn't notice the slurping
sounds. <<Rep $g.banker2>> peeked under the table, and saw the elven
attendant servicing the neko's <<ugenital $g.neko>> from underneath the table.
...Perhaps this is why the slave order you have just received specifically
mentioned an elven slave?
</p>
<p>
<<if $gOutcome == 'failure'>>
While the negotiation was successful, it seemed that <<rep $g.banker1>> had
made a cultural faux pas, insulting their neko hosts.
<<elseif $gOutcome == 'crit'>>
<<Yourrep $g.banker1>> <<uadv $g.banker1>> negotiated a lucrative contract that was still
favourable for the neko, impressing their hosts and the <<rep $company.bank>> as a whole.
<<else>>
<</if>>
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unfortunately, the negotiations fell apart before they really began.
The neko were angered when
<<upunishreason $g.banker2>>.
Your slavers were kicked out of the building some time later, and your company has
earned the wrath of the <<rep $company.bank>>.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'provisions_hunt', /* key */
'Provisions Hunt', /* Title */
'darko', /* Author */
[ 'forest', 'money' ], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'hunter1': setup.qu.hunter,
'hunter2': setup.qu.hunter,
'trader': setup.qu.trader, },
{ /* actors */
'whore': 'subrace_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_huntFailure',
[
setup.qc.SlaveMarker('whore'),
setup.qc.Injury('hunter2', 2),
setup.qc.Injury('hunter1', 2), ],
], ],
[
[setup.questpool.forest, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
The <<lore region_forest>> is a ripe hunting grounds, be it for artifacts, potions, or even
the occassional neko slaves.
But on a more mundane level, the forests are also rich with
wild game and edible fruits.
This makes it 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 suffering from a drought.
This gives you an opportunity for making a 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 of 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.
<<set _animal = setup.selectUnit([$g.hunter1, $g.hunter2], {trait: 'skill_animal'})>>
<<if _animal>>
<<Rep _animal>> had <<their _animal>> way with animals, which helped in the hunt quite a bit.
<</if>>
<<set _att = setup.selectUnit([$g.hunter1, $g.hunter2], {trait: 'per_attentive'})>>
<<if _att>>
<<Reps _att>> attentiveness ensured <<they _att>> spotted the more obscured food sources in the forest.
<</if>>
<<set _dreamy = setup.selectUnit([$g.hunter1, $g.hunter2], {trait: 'per_dreamy'})>>
<<if _dreamy>>
<<Reps _dreamy>> limited attention span hindered the hunt.
<</if>>
In the end, berries, boars, and the occasional questionably-shaped fruits were 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 managed to make
a decent sum, just not as much as you would have liked. Perhaps you should have sent 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 and your slavers turned in a tidy amount of profit out of the suffering of others.
Just a regular day in your office.
<</if>>
</p><p>
Unfortunately, your slavers arrived during the forest boars' mating seasons. The sounds
of animalistic boar grunts could be heard everywhere in the forest and there were even
occasional elvish moans to accompany it. Not
willing to risk such a dangerous venture, your slavers chose to return back
to fort in shame.
<<if $gOutcome == 'disaster'>>
But not before your slavers were charged by one of the crazed boars, injuring them slightly.
<</if>>
</p><<run new setup.UnitGroup(
"alchemist_orders0",
"Erratic Alchemist",
'forest_all', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_wiseman),
setup.qc.TraitsReplace('unit', [setup.trait.skill_alchemy, setup.trait.per_lunatic, setup.trait.per_dominant]),
],
)>>
<<run new setup.QuestTemplate(
'alchemist_orders', /* key */
"Alchemist Orders", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'item',
'order',
'forest',
'veteran',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator1': [ setup.qu.negotiator, 1],
'negotiator2': [ setup.qu.negotiator, 1],
'scout': [ setup.qu.scout_forest, 1],
},
{ /* actors */
'alc': 'alchemist_orders0',
},
[ /* costs */
],
'Quest_alchemist_orders',
setup.qdiff.harder54, /* difficulty */
[ /* outcomes */
[
'Quest_alchemist_ordersCrit',
[
setup.qc.Outcomes("success"),
setup.qc.ItemPool(setup.itempool.all_good),
],
],
[
'Quest_alchemist_ordersCrit',
[
setup.qc.OneRandomSeed([
setup.qc.Opportunity('lonely_alchemist', {
alc: "alc",
}),
setup.qc.Opportunity('lonely_alchemist2', {
alc: "alc",
}),
setup.qc.Opportunity('lonely_alchemist3', {
alc: "alc",
})
]),
setup.qc.VarRemove('lonely_alchemist_progress'),
setup.qc.SetCooldownQuest(null, 100),
setup.qc.SetCooldownQuest('test_subject_wanted', 10),
],
],
[
'Quest_alchemist_ordersFailure',
[
setup.qc.VarAdd('lonely_alchemist_progress', -2, -1),
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Corrupt('negotiator1', null, 1),
setup.qc.Corrupt('negotiator2', null, 1),
setup.qc.Corrupt('scout', null, 1)
], undefined),
setup.qc.DoAll([
setup.qc.Injury('negotiator1', 7),
setup.qc.Injury('negotiator2', 7),
setup.qc.Injury('scout', 7)
], undefined),
setup.qc.DoAll([
setup.qc.Blessing('negotiator1', 30, null, true),
setup.qc.Blessing('negotiator2', 30, null, true),
setup.qc.Blessing('scout', 30, null, true)
], undefined)
]),
],
],
[
'Quest_alchemist_ordersFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.VarGte('lonely_alchemist_progress', 4),
setup.qres.QuestUnique(),
setup.qres.NoQuest('test_subject_wanted'),
setup.qres.NoOpportunity('lonely_alchemist'),
setup.qres.NoOpportunity('lonely_alchemist2'),
setup.qres.NoOpportunity('lonely_alchemist3'),
],
[ /* expiration outcomes */
],
)>><p>
Today, you receive a letter from the erratic alchemist <<name $g.alc>> living in the <<lore region_forest>>. As you recall, you've been supplying the <<urace $g.alc>> with "test subjects" for <<their $g.alc>> alchemical experiments, with various outcomes. While the slave is usually returned to you afterwards (albeit occasionally in a transformed state), the alchemist is requesting a more permanent test subject this time.
</p>
<p>
<<if $unit.player.isHasTrait('bg_scholar')>>
Despite the letter being cryptically written, your background as a scholar helps you decipher it quickly. As far as you understand,
<<elseif $unit.player.isHasTrait('bg_wiseman')>>
Despite the letter being cryptically written, your background as a wiseman helps you decipher it quickly. As far as you understand,
<<else>>
It took you a lot of effort to decipher the cryptically written letter, but in the end, you believe that
<</if>>
<<therace $g.alc>> is looking for a test subject for a lengthy experiment that <<they $g.alc>> alc|is planning to conduct in the coming weeks.
While <<they $g.alc>> alc|is lacking in money to pay you for the salve, <<they $g.alc>> is willing to exchange a large quantity of rare potions for the slave.
If the deal interest you, you could send a group of slavers to negotiate the fine details of the slave order by sending them into the <<lore region_forest>>.
</p>
<p>
But there are enough winks and tidbit calligraphies here and there that indicate that professional use is not all the slave would be responsible for doing, but that's not really your concern, are they?
</p><p>
The alchemist is a very, very crazy little <<urace $g.alc>>, and it took all your slavers' wits and smarts to decipher what it is the lunatic is trying to say.
<<set _unit = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
<<Rep _unit>> <<if _unit.isYou()>>are<<else>>is<</if>> smart enough to decipher it little by little, thankfully.
<</if>>
<<set _unit = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.scout], {trait: 'per_logical'})>>
<<if _unit>>
<<Reps _unit>> logical mind greatly helps in unraveling the lunatic's words.
<</if>>
<<set _unit = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.scout], {trait: 'per_lunatic'})>>
<<if _unit>>
As a fellow lunatic, <<Rep _unit>> effortlessly translated the gibberish to the other slavers.
<</if>>
<<set _unit = setup.selectUnit([$g.negotiator1, $g.negotiator2, $g.scout], {trait: 'per_gregarious'})>>
<<if _unit>>
<<Rep _unit>> had to use <<their _unit>> silver tongue to guide the conversation lest it would not go anywhere.
<</if>>
In the end, your slavers were able to make out the fine details of the slave order, which is now sitting quietly at your desk in front of you.
<<if $gOutcome == 'crit'>>
They were also able to negotiate an advance payment for your services in the form of a somewhat rare potion at the corner of your desk.
<</if>>
</p><p>
Unfortunately, something terribly wrong happened in the quest.
Your slavers came back home
<<if $gQuest.getSeed() % 3 == 0>>
corrupted,
<<elseif $gQuest.getSeed() % 3 == 1>>
injured,
<<elseif $gQuest.getSeed() % 3 == 2>>
cursed,
<</if>>
and they were unable to recall the details as to how it happened. When they tried to remember as hard as they could, the only things that appeared in their mind vision are dicks, pussies, and a lot of warm "liquid" being forced down their throats. It seems that they finally learned what is it that the "test subjects" have experienced each time you send a slave or two to the alchemist...
</p><<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Test Subject', /* name */
[
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.training_obedience_master,
],
[
setup.trait.race_demon,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'test_subject_wanted', /* key */
"Test Subject Wanted", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'veteran',
'item',
'order',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'alchemist1': [ setup.qu.alchemist, 1],
'alchemist2': [ setup.qu.alchemist, 1],
'scout': [ setup.qu.scout_forest, 1],
},
{ /* actors */
'alc': 'alchemist_orders0',
},
[ /* costs */
],
'Quest_test_subject_wanted',
setup.qdiff.hard49, /* difficulty */
[ /* outcomes */
[
'Quest_test_subject_wantedCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_test_subject_wantedCrit',
[
setup.qc.VarAdd('lonely_alchemist_progress', 1, -1),
],
],
[
'Quest_test_subject_wantedCrit',
[
],
],
[
'Quest_test_subject_wantedCrit',
[
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.QuestUnique(),
setup.qres.NoQuest('alchemist_orders'),
setup.qres.NoOpportunity('lonely_alchemist'),
setup.qres.NoOpportunity('lonely_alchemist2'),
setup.qres.NoOpportunity('lonely_alchemist3'),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Within the vast <<lore region_forest>>, lives a rather alchemist who goes by the name <<name $g.alc>>.
<<if $g.alc.isHasTrait('race_elf')>>
<<They $g.alc>> alc|is an elf, and even among the elves, <<their $g.alc>> gift in alchemy is remarkable.
<<else>>
<<They $g.alc>> alc|is gifted in alchemy — a very rare occurrence for a <<urace $g.alc>>.
<</if>>
However, <<their $g.alc>> personality is... eccentric, and rumors say that after an alchemical experiment that went wrong, <<they $g.alc>> had been exiled ever since. It was unclear what experiment <<they $g.alc>> had conducted, but rumors are abound that it involves the mist, big boobs, and a lot of cum.
</p>
<p>
<<Yourrep _u>> came in to your office today bearing a quest opportunity coming from the alchemist.
Apparently, the alchemist is looking for "test subjects" to help with <<their $g.alc>> latest concoction. You could try to send a group of slavers together with an obedient slave over to the alchemist. There is no way for you to know just what kind of crazy alchemical experiment the alchemist is going to conduct on the slave, but it will probably affect the slave one way or another...
</p>
<p>
<<if $statistics.isHasSuccess('test_subject_wanted')>>
You've dealt with <<name $g.alc>> in the past, and despite <<their $g.alc>> eccentricity, you know that <<their $g.alc>> potions are the real stuffs.
<<else>>
Given how eccentric the alchemist is, you're a little unsure if you'd like to take up the job, but it might just reward you with enough rare potions to make it worth your while.
<</if>>
</p><p>
<<Yourrep $g.scout>> <<uadv $g.scout>> guided the rest of the slavers into the small hut in the forests. Once there, your slavers handed over <<rep $g.slave>> to the grinning <<urace $g.alc>> alchemist, and the experiment immediately started.
<<Yourrep $g.alchemist1>> and <<utheirrel $g.alchemist1 $g.alchemist2>> <<rep $g.alchemist2>> served as assistant alchemists.
<<set _unit = setup.selectUnit([$g.slave, $g.alchemist1, $g.alchemist2, $g.scout], {trait: 'skill_alchemy'})>>
<<if _unit>>
<<Reps _unit>> alchemical skill prove handy for the experiments.
<</if>>
<<set _unit = setup.selectUnit([$g.slave, $g.alchemist1, $g.alchemist2, $g.scout], {trait: 'per_smart'})>>
<<if _unit>>
<<Rep _unit>> <<if _unit.isYou()>>are<<else>>is<</if>> sufficiently smart to prove helpful during the experiments.
<</if>>
</p>
<<set _c = [
['injury', setup.qc.Injury('slave', 10), setup.item.healing_potion_greater],
['trauma', setup.qc.TraumatizeRandom('slave', 100), setup.item.potion_trauma_reduce],
['missing', setup.qc.MissingUnit('slave'), setup.item.potion_life],
['notrain', setup.qc.RemoveTraitsWithTag('slave', 'training'), setup.item.reset_potion],
['per',
setup.qc.DoAll([
setup.qc.RemoveRandomTraitWithTag('slave', 'per'),
setup.qc.AddRandomTraitWithTags('slave', ['per']),
]),
null],
['nothing',
setup.qc.DoAll([]),
null],
]>>
<<if !$g.slave.isHasTrait('race_demon')>>
<<run _c.push([
'corrupt',
setup.qc.Corrupt('slave', null, 3),
setup.item.potion_purity,
])>>
<</if>>
<<if $favor.getFavor($company.elf) >= 750>>
<<run _c.push([
'mindbreak',
setup.qc.Mindbreak('slave'),
setup.item.mindmend_potion,
])>>
<</if>>
<<if !$g.slave.isHasTrait('anus_gape')>>
<<run _c.push([
'gape',
setup.qc.TraitIncreaseExisting('slave', setup.trait.anus_gape),
setup.item.potion_tight,
])>>
<</if>>
<<if !$g.slave.isHasTraitExact('anus_tight')>>
<<run _c.push([
'tighten',
setup.qc.TraitDecrease('slave', setup.trait.anus_tight),
null
]
)>>
<</if>>
<<set _rnd = setup.rng.choice(_c)>>
<p>
In the coming days, the trio of slavers forced down many concoctions of various colors down the slave's struggling throat, although they made sure the slave has a balanced diet by occasionally substituting the potion with
<<if $g.alc.isHasDick()>>
the alchemist's own cum.
<<else>>
the alchemist's own pussyjuice.
<</if>>
By the end of the rough treatment,
<<if _rnd[0] == 'injury'>>
the slave was understandably heavily injured by the rough treatment and choking on the thick liquid.
<<elseif _rnd[0] == 'trauma'>>
the slave was not so much affected by the potions, but greatly traumatized by the entire ordeal.
<<elseif _rnd[0] == 'missing'>>
the slave somehow went missing one way or another.
<<elseif _rnd[0] == 'notrain'>>
the slave's willpower was somehow completely restored by the strange alchemical concoction.
<<elseif _rnd[0] == 'per'>>
the slave's personality changed over the course of the treatment.
<<elseif _rnd[0] == 'nothing'>>
nothing happened, surprisingly.
<<elseif _rnd[0] == 'corrupt'>>
the slave was greatly corrupted by the dark concoction.
<<elseif _rnd[0] == 'mindbreak'>>
the slave became a complete mess, drooling on the floor, <<their $g.slave>> mind completely shattered.
<<elseif _rnd[0] == 'gape'>>
the slave's anus somehow become much more accomodating than before.
<<elseif _rnd[0] == 'tighten'>>
the slave's anus tightens considerably.
<<else>>
ERROR: UNKNOWN TYPE: <<= _rnd[0] >>.
<</if>>
</p>
<<run _rnd[1].apply($gQuest)>>
<p>
After four weeks of the experiment, the experiment was concluded.
<<if $gOutcome == 'disaster'>>
Despite the entire experiment looking like a standard success to your slavers, the alchemist deemed it an utter failure, and blame it on <<yourrep $g.slave>>. Your slavers were helpless to watch as the alchemist kicked them out while keeping your former slave with <<them $g.slave>>, supposedly to perform some more experiments on the poor <<urace $g.slave>>. Although given the amount of <<if $g.alc.isHasDick()>>cum<<else>>pussyjuice<</if>> <<they $g.alc>> had so eagerly fed the slave throughout the experiment, you have second thoughts on the real reason behind this...
<<if _rnd[1] != 'missing'>>
<<run setup.qc.MissingUnit('slave').apply($gQuest)>>
<</if>>
<<else>>
<<if $gOutcome == 'failure'>>
The alchemist in all <<their $g.alc>> crazed wisdom deemed it a complete failure, and refused to pay your slavers a single penny. When your slavers tried to protest, <<they $g.alc>> took one of <<their $g.alc>> potions from the shelf and threw it in the general direction of your slavers. Within moments, your slavers found themselves suddenly back at your fort. How could an exiled alchemist have access to the extremely rare telepotion like this?
<<else>>
<<set _item = _rnd[2]>>
<<if _item>>
<<set _qty = Math.floor(6000 / _item.getValue())>>
<<if _qty <= 0>>
<<set _qty = 1>>
<</if>>
<<run setup.qc.Item(_item, _qty).apply($gQuest)>>
<</if>>
<<if $gOutcome == 'success'>>
The alchemist deemed it a successful experiment,
<<else>>
The alchemist deemed it a great success, and paid your slavers handsomely.
<<if _item>>
But money isn't the only payment your slavers received.
<</if>>
<</if>>
<<if _rnd[0] == 'nothing'>>
<<run setup.qc.Money(6000).apply($gQuest)>>
A bag of gold was also placed in your slaver's grubby <<uhands $g.alchemist1>>, and although they brought plenty of it home, you could not help but wonder just how much fraction of it has been "accidentally misplaced" by your unscrupulous employees...
<<elseif _item>>
To cushion the "damages" that had been inflicted upon your slave, the alchemist had so kindly gave your slavers
<<if _qty > 1>>
several bottles of
<<else>>
a bottle of
<</if>>
<<rep _item>>.
<<else>>
No other payment was deemed necessary by the alchemist, however, and <<they $g.alc>> consider the changes on the slaves sufficient as payment.
<</if>>
<</if>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'a_most_noble_extortion', /* key */
"A Most Expensive Extortion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'whore': [ setup.qu.escort, 1],
'bodyguard': [ setup.qu.bodyguard, 1],
'convincer': [ setup.qu.convincer, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'noble': 'city_all',
},
[ /* costs */
],
'Quest_a_most_noble_extortion',
setup.qdiff.hard54, /* difficulty */
[ /* outcomes */
[
'Quest_a_most_noble_extortionCrit',
[
setup.qc.Outcomes("success"),
setup.qc.IfThenElse(
setup.qres.VarGte('quest_brothel_class', 1),
setup.qc.Equipment(setup.equipmentpool.social_good),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
),
],
],
[
'Quest_a_most_noble_extortionCrit',
[
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '84', -1),
setup.qc.IfThenElse(
setup.qres.VarGte('quest_brothel_class', 1),
setup.qc.Equipment(setup.equipmentpool.social_good),
setup.qc.Equipment(setup.equipmentpool.slaving_good),
),
],
],
[
'Quest_a_most_noble_extortionFailure',
[
setup.qc.QuestDirectSelf({
head: "head",
owner: "owner",
}),
setup.qc.MoneyCustom(-3000),
],
],
[
'Quest_a_most_noble_extortionFailure',
[
setup.qc.Injury('whore', 4),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
Thanks to the recent expansion of <<attach _describe>>, the brothel's growth
has been unprecedented. More and more people are aware of your brothel now,
and many flock into your brothel to try the goods. But unfortunately, the
fame also attracts unwanted people in.
</p>
<p>
<<if _class > 0>>
Since you've chosen to make a rather classy brothel, a noble of the city has
deign it fit to impose a hefty tax upon your fine establishment. While a few
tax is fair, the amount imposed is almost bordering on extortion.
<<else>>
Since you've chosen to make a rather debauched brothel,
a gang of neko mafias has deign it fit to ask your brothel for "protection money".
While your establishment would be happy to pay a reasonable fee, the amount
they asked for was just too much, bordering on extortion.
<</if>>
This is
just unacceptable, and <<yourrep $g.owner>> owner|implore you to do something
while <<they $g.owner>> and the head whore <<name $g.head>> would try their
best to delay the payment as much as possible.
</p>
<p>
As much as you'd like to order your bouncers to put
<<if _class > 0>>
the noble in <<their $g.noble>> place, harming a noble is going to be an incredibly bad decision for you, so you'll
just have to convince the noble that it is in <<their $g.noble>> best interest to
keep the brothel up and running.
<<else>>
these criminals in their place, they are also
a rather significant part of your customer, and angering them would be an
incredibly bad decision for you.
You'll just have to convince these scums that it is in <<their $g.noble>> interest to
keep the brothel up and running.
<</if>>
A convincer should be sent to spearhead the negotiation, as well as an
imposing bodyguard to add to the negotiation. Finally, to demonstrate the
worth of your brothel, you should also send one of your slavers as a "whore",
together with a real whore from the brothel. Surely with their masterful
expertise over sex,
<<if _class > 0>>
they'll convince the noble that this brothel is "good for <<them $g.noble>>".
<<else>>
they'll overwhelm the criminal's primal instincts and convince <<them $g.noble>> that this brothel
has "<<their $g.noble>> best interest at heart".
<</if>>
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<if _class > 0>>
<<set _noble = 'noble'>>
<<else>>
<<set _noble = 'boss'>>
<</if>>
<p>
As it happened,
<<if _class > 0>>
the noble
<<else>>
the mafia boss
<</if>>
was doing a surprise visit to your brothel to
collect the
<<if _class > 0>>
"tax",
<<else>>
"protection money",
<</if>>
by the time <<yourrep $g.convincer>> arrived. Using
<<their $g.convincer>> silver tongue, <<therace $g.convincer>> managed to
<<uadv $g.convincer>> convince <<them $g.noble>> to give your brothel a try first,
before collecting <<their $g.noble>> "well-deserved"
<<if _class > 0>>
tax.
<<else>>
protection money.
<</if>>
A full-on service
for an entire month, all courtesy of <<attach _describe>>.
</p>
<p>
Before the <<= _noble>>
was able to refuse, <<yourrep $g.whore>> as well as the head
whore <<name $g.head>> stripped down, before advancing slowly into
the <<= _noble>>.
Apparently having done <<their $g.head>> research, the head whore <<name
$g.head>> knew very well that the <<= _noble>>
<<if _sub == 'sub'>>
loves nothing more than to dominate other <<men $g.head>>, and <<therace
$g.head>> dropped into the floor while offering a whip into the noble.
<<else>>
harbors a secretly submissive tendencies, and <<therace $g.head>> sternly
ordered the <<= _noble>> to drop on <<their $g.noble>> knees.
<</if>>
<<Yourrep $g.convincer>> could see the <<= _noble>>
<<if $g.noble.isHasDick()>> was getting a hard-on, and a stiff prick was visibly tenting from <<their $g.noble>> pants.
<<else>>
was getting aroused, flushing all over.
<</if>>
Without saying a word, the trio went into one of the
<<if _facility == 'rooms'>>
luxurious private rooms, no doubt to enjoy some "private time" together.
<<else>>
sex dungeons, no doubt to enjoy some "private time" together.
<</if>>
</p>
<p>
Throughout the four weeks, <<yourrep $g.whore>> as well as the head whore <<name $g.head>>
serviced the <<= _noble>>, indulging in every bit of <<their $g.noble>>
<<if _sub == 'sub'>>
darkest fantasies.
<<else>>
secretly submissive tendencies.
<</if>>
Loud sounds of moaning could be heard every now and then, and they were
almost only seen outside of the room for basic necessities. In the end, the
<<= _noble>> changed <<their $g.noble>> mind completely, and decided to
<<if _class > 0>>
waive all taxes of your establishment for its "service for the people".
<<else>>
protect your establishment without collecting any pay, for the good of <<their $g.noble>>
people.
<</if>>
The head whore <<name $g.head>> had done a tremendous job this time,
and perhaps <<their $g.head>> talents are wasted working as a whore...
</p>
<p>
<<if _class > 0>>
As the noble went back to <<their $g.noble>> palace,
<<else>>
As the mafia boss went back to <<their $g.noble>> hideout,
<</if>>
<<they $g.noble>> did so
while leaving some of <<their $g.noble>> valuable clothings inside. <<Yourrep
$g.convincer>> brought them back to your fort for your perusal.
</p><<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<p>
Unfortunately, <<yourrep $g.convincer>> convincer|was unable to convince the noble of the merits of your fine establishment.
<<if $gOutcome == 'disaster'>>
When your slavers tried to protest,
<<if _class > 0>>
the noble called upon one of <<their $g.noble>> hulking bodyguards
<<else>>
the mafia boss called upon one of <<their $g.noble>> hulking bruisers
<</if>>
to rough up one of your slavers, and <<yourrep $g.whore>> ended up injured.
<</if>>
In the end, your slavers were forced to pay the month's
<<if _class > 0>>
tax
<<else>>
protection money
<</if>>
for your brothel,
which they grudgingly paid. You'll have to try again if you want to solve
this problem for good.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_cleanup', /* key */
"Brothel Cleanup", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
1, /* weeks */
40, /* expiration weeks */
{ /* roles */
'builder': [ setup.qu.builder, 1],
'cleaner': [ setup.qu.maid, 1],
'muscle': [ setup.qu.carrier, 1],
},
{ /* actors */
'head': [],
'owner': [],
},
[ /* costs */
],
'Quest_brothel_cleanup',
setup.qdiff.normal27, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_cleanupCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_brothel_cleanupCrit',
[
setup.qc.VarSet('quest_brothel_progress', '12', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.Equipment(setup.equipmentpool.brawn),
setup.qc.Equipment(setup.equipmentpool.combat),
setup.qc.Equipment(setup.equipmentpool.intrigue),
],
],
[
'Quest_brothel_cleanupFailure',
[
setup.qc.QuestDirect('brothel_cleanup', {
owner: "owner",
}),
],
],
[
'Quest_brothel_cleanupDisaster',
[
setup.qc.Injury('builder', 2),
setup.qc.Injury('cleaner', 1),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
It has been a few weeks since you've designated <<attach _describe>> as a
<<men $g.head>>-only brothel. But there was still no customers coming in, and
the reason is quite obvious: The brothel building is in a severe state of
disrepair. The long abuse from its former bandit residents had left the place
thrashed and incredibly dirty, with the smell of cum and other questionable
liquids permeating the place. Not to mention the numerous debris, upturned
tables, and broken bottles all around the place. If you want to attract
customers into your brothel, it is best to do something about this.
</p>
<p>
While your workers in the brothel can surely clean up the smaller debris,
they are not expert cleaners and you should probably send help from your
company. A few slavers with a good pair of arms to help lift the debris and
other heavy furnitures would do wonder. You should also send a slaver
proficient in cleaning, to rid the place of the questionable smell that
currently haunts your brothel. And of course <<rep $g.owner>> needs to come,
as the manager of the place.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
You sent four slavers over to <<attach _describe>> to do their magic, and they delivered.
<<Yourrep $g.builder>> and <<utheirrel $g.builder $g.muscle>> <<rep $g.muscle>> worked their muscles, lifting the heavy debris and furniture away and restoring the still usable ones to their place.
<<if $g.builder.isHasTrait('muscle_verystrong')>>
<<Reps $g.builder>> bulging muscles drew attention from the whores, and <<rep $g.owner>> could see some of them
<<if $g.head.isHasDick()>>stroking their dicks in appreciation.<<else>>
putting their fingers under them in appreciation.
<</if>>
<</if>>
Meanwhile, <<rep $g.cleaner>> worked similarly hard instructing the brothel workers to scrub the place clean, including all the stains that somehow made their way up into the ceiling.
After a long week, order is now somewhat restored to the brothel, the smell finally gone and the few remaining furniture are actually usable now.
</p>
<p>
Customers started to come too. Sure, there wasn't many customers and they were mostly the low-waged dockworkers that lived nearby, but it's a start. After a few days, it was obvious that one worker in particular stood out among your few workers in the brothel — a <<urace $g.head>> named <<name $g.head>>. <<Their $g.head>> diligence and charm did not escape <<yourrep $g.owner>>, and perhaps <<they $g.head>> would make a fine supervisor for the place later when your brothel has grown...
</p>
<p>
It seemed the bandit stashed some of their equipments in one of the rooms, which your slavers brought back home.
<<if $gOutcome == 'crit'>>
They also found one of the bandit's secret stash in another room, containing some profit the bandits made back then.
<</if>>
</p><p>
Unfortunately, the slavers you've decided were sent were similarly incompetent. Either because the debris were too heavy for them, or the stain was too deeply entrenched, your slavers was not able to restore a sense of normalcy to the place and had to return home defeated.
</p><p>
As they were trying to move a large debris away, the big rock fell on top of <<yourrep $g.builder>> and <<rep $g.muscle>>, injuring both. With the help force injured, the brothel workers were unable to continue cleaning up the place, and your slavers returned back to recover from their injuries.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_expansion', /* key */
"Brothel Expansion", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'negotiator': [ setup.qu.negotiator, 1],
'builder': [ setup.qu.builder, 1],
'planner': [ setup.qu.planner, 1],
},
{ /* actors */
'head': [
setup.qres.Home(),
],
'owner': [
setup.qres.Home(),
],
},
[ /* costs */
setup.qc.Money(-10000),
],
'Quest_brothel_expansion',
setup.qdiff.normal49, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_expansionCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Equipment(setup.equipmentpool.sex),
setup.qc.Equipment(setup.equipmentpool.sex),
setup.qc.Equipment(setup.equipmentpool.all_sex),
setup.qc.Equipment(setup.equipmentpool.all_sex),
],
],
[
'Quest_brothel_expansionCrit',
[
setup.qc.Equipment(setup.equipmentpool.sex),
setup.qc.Equipment(setup.equipmentpool.sex),
setup.qc.Equipment(setup.equipmentpool.all_sex),
setup.qc.Equipment(setup.equipmentpool.all_sex),
setup.qc.Opportunity('brothel_expansion', {
owner: "owner",
head: "head",
}),
],
],
[
'Quest_brothel_expansionFailure',
[
setup.qc.Money(10000),
setup.qc.Outcomes("disaster"),
],
],
[
'Quest_brothel_expansionDisaster',
[
setup.qc.QuestDirectSelf({
head: "head",
owner: "owner",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
Thanks to your efforts so far, <<attach _describe>> is getting quite popular. Too popular, perhaps, and the small brothelspace that it has always been situated at is starting to look a little too cramped. In fact, as you recall, aside from cleaning up the place, you've never really renovated the place.
</p>
<p>
<<Yourrep $g.owner>> owner|think so too, as well as the head whore <<name $g.head>>. In fact, <<they $g.owner>> owner|think it might be time for you to expand the place. The building next door is similarly decrepit, and its owner was looking to sell. Right now might be an auspicious time to expand your business.
</p>
<p>
First of all, you'll need a negotiator to arrange a deal with the building owner. A planner and builder is then necessary in order to rebuild the place into something good worthy of being part of your brothel. Finally, and most importantly, you need a significant chunk of money to buy the place out.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
It is done. After <<yourrep $g.negotiator>> spent a week in full terse
negotiation, followed by two weeks of renovation by <<yourrep $g.builder>>
and <<utheirrel $g.builder $g.planner>> <<rep $g.planner>>, the other
building has been made into a part of your grand brothel. The entire venue
now is almost triple the size of what it was before. Your <<girl $g.head>>s
can finally have their own rooms now, and the various amenities available
have been greatly expanded.
Per <<reps $g.planner>>
<<if $g.planner.isHasTrait('per_attentive')>>
meticulous
<<elseif $g.planner.isHasTrait('per_dreamy')>>
fun
<<elseif $g.planner.isHasTrait('per_cautious')>>
careful
<<elseif $g.planner.isHasTrait('per_smart')>>
clever
<</if>>
design,
<<if _class > 0>>
a red carpet has been arranged on its entrance, making the entire entrance looks like a classy palace complex.
<<elseif _class < 0>>
several whores are to be posted on the entrance, and their job is to submissively worship and entice potential customers into spending more.
<<else>>
the entrance looks elegant, but functional at the same time.
<</if>>
A sizeable warehouse has also been built to store various sex toys,
<<if _sub == 'sub'>>
to be used on the submissive sluts available in your brothel.
<<else>>
to be used by your whores including during their more dominant plays.
<</if>>
All in all, it is shaping to be quite a nice place, and hopefully will attract even more customers in.
</p>
<p>
To celebreate the expansion, all the sex toys were replaced and bought anew,
and there was some leftover that are given to your company.
</p>
<p>
<<Yourrep $g.owner>> owner|inform you that the renovation was not fully
completed yet, and there is still a space for one more facility to be build.
As the proprietor of the place, the decision is yours to make.
</p><p>
The building-owner next door turned out to be extremely stubborn. <<Yourrep $g.negotiator>> were not able to come to a reasonable deal with the <<man $unit.player>>, and the entire deal had to be called off. You can try again, perhaps with a more skillful negotiator this time.
</p><p>
<<Yourrep $g.negotiator>> negotiator|was terrible at their job, and instead of successfully buying the neighboring building, <<they $g.negotiator>> instead got tricked out of <<their $g.negotiator>> money. In the end, all the money were lost, and there was nothing to show in return.
</p>
<p>
<<if $g.negotiator.isYou()>>
As it was you yourself who had made the terrible deal, you really have no one else to blame but yourself.
<<else>>
You shake your head after hearing the report, and the thought of sending <<therace $g.negotiator>> on a difficult mission "by pure coincidence" crosses your mind.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_focus', /* key */
"Brothel Focus", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
2, /* weeks */
40, /* expiration weeks */
{ /* roles */
'teacher': [ setup.qu.sex_teacher, 1],
'helper1': [ setup.qu.whore, 1],
'helper2': [ setup.qu.whore, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_brothel_focus',
setup.qdiff.normal44, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_focusCrit',
[
setup.qc.Outcomes("success"),
setup.qc.BoonizeRandom('teacher', 9),
setup.qc.BoonizeRandom('helper1', 9),
setup.qc.BoonizeRandom('helper2', 9),
],
],
[
'Quest_brothel_focusCrit',
[
setup.qc.MoneyCustom(3000),
setup.qc.Opportunity('brothel_focus', {
owner: "owner",
head: "head",
}),
],
],
[
'Quest_brothel_focusFailure',
[
setup.qc.VarSet('quest_brothel_wait', '4', -1),
],
],
[
'Quest_brothel_focusDisaster',
[
setup.qc.VarSet('quest_brothel_wait', '8', -1),
setup.qc.Injury('teacher', 3),
setup.qc.Injury('helper1', 1),
setup.qc.Injury('helper2', 1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
Your brothel, which is known as <<attach _describe>>, is starting to
flourish. Customers can be seen perusing the available
<<if $g.head.isHasDick()>>stiff dicks,<<else>>wet pussies,<</if>>
<<if _class > 0>> in addition to the entertainment provided by the venue.
<<else>>
enhanced by the worker's basic sexual skills.
<</if>>
The slave bodyguard you assigned is
doing <<their $g.head>> duties properly too.
All in all, the operation seems to be going rather smoothly.
</p>
<p>
The manager of the place, that is <<yourrep $g.owner>>, owner|agree on it
too. But <<they $g.owner>> always think that the place could still be
better. Instead of settling with the current low-middle class customers,
perhaps the place can aim higher, with the goal of being luxurious enough fit
for a royal.
</p>
<p>
As a starting point, <<they $g.owner>> owner|suggest to enhance the worker's skill even further. Two weeks of dedicated classroom time should suffice. Since <<rep $g.owner>> will be plenty busy already with the daily operations of the brothel, you'll have to provide the teachers and the demonstrators from among your ranks, however.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
<<Yourrep $g.teacher>> and <<their $g.teacher>> two demonstrators spent a good two weeks enhancing the skills of the <<men $g.head>> working in the brothel. <<Rep $g.helper1>> demonstrated many advanced sexual techniques on <<utheirrel $g.helper1 $g.helper2>> <<rep $g.helper2>>, and the two
enjoyed many sex in various awkward positions across the brothel.
<<if $g.helper1.isHasTrait('per_chaste') or $g.helper2.isHasTrait('per_chaste')>> (To the great embarrasment of the chaste slaver.)<</if>>
Your brothel's workers were quite impressed with the show, and they certainly learned a thing or ten from the experience and guidance.
</p>
<p>
Throughout the two weeks, the workers learned and practice the techniques on many various day-to-day utensils, furniture, and even vegetables straight from the fridge. By the tenth day, <<yourrep $g.teacher>> teacher|was confident that the students were ready to "graduate".
</p>
<p>
In the final day of the training,
the brothel launched a new package that showcased the new skills of these whores.
Many customers were interested, and the brothel raked in quite a bit of money as your brothel's <<women $g.head>>
<<if _class < 0>>
debauched themselves including one time where one of them used a decorative plant as a substitute for a lover.
<<else>>
strutted themselves and showed off their bodies sensuously, exposing the many customers to the pleasure of watching an expert strip show.
<</if>>
<<if $gOutcome == 'crit'>>
Even your slavers themselves were "quite entertained" by the show, and enjoyed a good mood boost.
<</if>>
</p>
<p>
While the whores have considerable skills now, <<yourrep $g.owner>> owner|suggest that a focus be chosen for them to even specialize further. As the proprietor of the place, the decision falls to you and you alone.
</p><p>
Unfortunately, the workers of your brothel were simply too inexperienced to process the new techniques that your slavers had so masterfully demonstrated. In the end, <<yourrep $g.teacher>> judged that these students would need a couple more weeks of "on-the-job-practice" before another training can be attempted.
</p><p>
Your slavers were "overly enthusiastic" when they tried to demonstrate a wall sex to the <<men $g.head>> of the brothel. <<Yourrep $g.head>> fell head-first onto the floor, collapsing the "sex formation" they had precariously maintained, injuring all three of your slavers.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_focus_ii', /* key */
"Brothel Focus II", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'teacher': [ setup.qu.sex_teacher, 1],
'helper1': [ setup.qu.whore, 1],
'helper2': [ setup.qu.whore, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_brothel_focus_ii',
setup.qdiff.hard59, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_focus_iiCrit',
[
setup.qc.Outcomes("success"),
setup.qc.BoonizeRandom('teacher', 15),
setup.qc.BoonizeRandom('helper1', 15),
setup.qc.BoonizeRandom('helper2', 15),
],
],
[
'Quest_brothel_focus_iiCrit',
[
setup.qc.Opportunity('brothel_focus_ii', {
owner: "owner",
head: "head",
}),
],
],
[
'Quest_brothel_focus_iiCrit',
[
setup.qc.Leave('teacher', "a|is looking for a lost whore in the vast Neko Port City ", 4),
setup.qc.Leave('helper1', "a|is looking for a lost whore in the vast Neko Port City ", 4),
setup.qc.Leave('helper2', "a|is looking for a lost whore in the vast Neko Port City ", 4),
],
],
[
'Quest_brothel_focus_iiCrit',
[
setup.qc.Leave('teacher', "a|is looking for a lost whore in the vast Neko Port City ", 8),
setup.qc.Leave('helper1', "a|is looking for a lost whore in the vast Neko Port City ", 8),
setup.qc.Leave('helper2', "a|is looking for a lost whore in the vast Neko Port City ", 8),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
Thanks to the recent renovation, <<attach _describe>> is on the right track
to start catering to higher class clients.
However, as it stands now, the establishment is still nowhere near the level
it needs to start attracting these clients.
<<Yourrep $g.owner>> owner|think that the next step owner|need to be taken to bring
your brothel to the next level.
</p>
<p>
The former head whore, <<name $g.head>>, is now busily working <<their $g.head>>
<<if $g.head.isFemale()>>(sexy)<</if>> ass
<<if _promotion == 'money'>>
managing the brothel's financial as your newly minted business manager.
<<else>>
ensuring the satisfaction of your brothel's customer with <<their $g.head>> words, instead of with
<<their $g.head>> <<ugenital $g.head>>, as the newly minted customer relations officer.
<</if>>
In the gaping hole left by <<their $g.head>> absence, it was obvious that the other <<men $g.head>> are nowhere near as good as <<therace $g.head>>.
<<Yourrep $g.owner>> thus owner|suggest to train these whores another time,
a grueling month this time to try and bring them up to region-class level.
</p>
<p>
The training will be tough, long, and difficult, but it will be worth it. Maybe. Per usual, you will need a sex teacher as well as two demonstratees, but they have to be rather skilled this time, sufficient to teach even the hardest sexual techniques to your working whores.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
<<Yourrep $g.teacher>> and <<their $g.teacher>> two demonstratees borrowed one of the
<<if _facility == 'rooms'>>
private rooms
<<else>>
sex dungeon cells
<</if>>
for the intense month-long training.
Within the month, your slavers treated the free trainees almost like slaves, punishing them with rough painful anal sex and rewarding them by <<if $g.teacher.isHasDick()>>
cumming down their throats<<else>>
allowing them to eat <<reps $g.teacher>> ass.
<</if>>
The training was almost like training slaves — the whores were made to understand the intricacies of pleasuring others with a careful application of pain and pleasure.
<<if _facility == 'rooms'>>
The beds on the private rooms were reserved for the best of whores, who showed great understanding in their lessons and great enthusiasm in applying their new techniques, while the rest must contemplate upon their mistakes within tiny caged compartments.
<<else>>
The manacles in the dungeons were often used for punishment, and one/two whores were usually hanged as examples for the rest.
<</if>>
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
But while the method might have been questionable, the result spoke for its efficacy. Once
three weeks had passed, the whores had gained much knowledge in the art of
pleasuring others. The last week returned them to reality, that they are free
<<men $g.head>>, not slaves, and they must pleasure the client not with a
slave mentality, but with that befitting of a free <<man $g.head>>. A free <<man $g.head>>
differs from that of a slave, and sex given by a free <<man $g.head>> should
similarly feel different. To drill this into the whores' heads, <<yourrep
$g.teacher>>
opted to borrow the help of your former head whore <<name $g.head>>, who is now
the brothel's
<<if _promotion == 'money'>>
business manager.
<<else>>
customer relations officer.
<</if>>
The former whore showed that <<they $g.head>> had not forgotten <<their $g.head>> skills, and gave great examples on how a free <<man $g.head>> should pleasure another.
</p>
<p>
By the end of the harsh four-weeks long training, the whores had been transformed from ordinary street walkers to high-class sex workers. Their aura exhudes charm, and they almost radiate with sexual energy as they walked. They are now worthy to be called as courtesans. All that needs to be done is a final touch, a guidance on what route the brothel should take. This responsibility falls to you, as the proprietor of this place.
</p>
<<if $gOutcome == 'crit'>>
<p>
Seeing the initially clueless whores being transformed so thoroughly into high class made your slavers oddly happy, and you notice they become somewhat more cheerful when they came back.
</p>
<</if>>
<<else>>
<p>
Unfortunately, your whores are free <<men $g.head>>, not slaves, and they were unable to cope with the slave trainings. During one of the nights, <<if $gOutcome == 'failure'>>one<<else>>several<</if>> of them escaped from the brothel.
Since your brothel is short on workers, your three slavers had no choice but to personally scour the vast <<lore location_npc>> in search of the missing
<<if $gOutcome == 'failure'>>
whore...
<<else>>
whores...
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_palace', /* key */
"Brothel Palace", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
8, /* weeks */
40, /* expiration weeks */
{ /* roles */
'planner': [ setup.qu.planner, 1],
'builder': [ setup.qu.builder, 1],
'wizard': [ setup.qu.arcaneearthveteran, 1],
},
{ /* actors */
'head': [
setup.qres.Home(),
],
'owner': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
},
[ /* costs */
setup.qc.Money(-100000),
],
'Quest_brothel_palace',
setup.qdiff.normal64, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_palaceCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('elf', 150),
setup.qc.Favor('neko', 150),
],
],
[
'Quest_brothel_palaceCrit',
[
setup.qc.Opportunity('brothel_palace', {
owner: "owner",
head: "head",
slave: "slave",
}),
setup.qc.Favor('neko', 150),
setup.qc.Favor('elf', 150),
],
],
[
'Quest_brothel_palaceCrit',
[
setup.qc.Money(-12500),
setup.qc.Outcomes("success"),
],
],
[
'Quest_brothel_palaceCrit',
[
setup.qc.Money(-30000),
setup.qc.Outcomes("success"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
With the staff training completed, as well as having elected your former slave <<name $g.slave>> as the head courtesan, <<attach _describe>> will need only one more step to become a high-class brothel that you and <<yourrep $g.owner>> have always envisioned the place to be. And this last step would no doubt be the most expensive one, as you must transform the brothel from an ordinary brothel building into a palace suitable for hosting the most demanding of clients.
</p>
<p>
<<Yourrep $g.owner>> owner|have already drafted a plan for the place, and all it takes is to work on building it. You will need to lend a planner to crosscheck the plan, as well as recruit builders from the nearby laborers. A builder from your company is required to supervise the entire process. Finally, a wizard is also required, as some places within the brothel will be enchanted to enhance the entire experience, as well as ensure that the head courtesan <<name $g.slave>>'s talents will not go to waste.
</p>
<p>
<<if _promotion == 'money'>>
The business manager of your brothel, your former head whore <<name $g.head>>,
<<else>>
The manager of your brothel, <<rep $g.owner>>,
<</if>>
has calculated that the construction would offset you a hefty <<money 100000>>.
When you are ready to make the massive payment, the construction can begin immediately.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
It took your slavers two full months to construct the palace,
<<if $gOutcome == 'failure'>>
including a slight over-budgeting,
<<elseif $gOutcome == 'disaster'>>
including a massive over-budgeting on their side,
<</if>>
but it is finally completed. With <<yourrep $g.planner>> masterful
supervision, <<rep $g.builder>> together with the hired workers managed to complete the grand structure. The
grand palace housing <<attach _describe>> stands proudly, drawing attention
from all the nearby bystanders. The entrance is gilded with traces of gold,
and visitors are immediately greeted with
<<if _class > 1>>
a throne-room like complex, with servants lining the edge of the room while a luxurious enchanted red carpet paves the way into the complex,
<<elseif _class < 1>>
a demon-like palace complex, with various bondage devices hanging from the ceiling
while some kind of magic keeps the fire burning brightly from the chandelier,
<<else>>
an exotic palace complex, with plants thriving inside, feeding on the magical crystals underneath their roots,
<</if>>
a work of <<yourrep $g.wizard>>.
Magic is used abundantly in the place, enhancing the overall experience.
</p>
<p>
The staffs live rather luxuriously too now, with each <<man $g.head>> having <<their $g.head>> own room. Meanwhile, the
<<if _promotion == 'money'>>
business manager <<name $g.head>>
<<else>>
customer relations manager <<name $g.head>>
<</if>>
head|have <<their $g.head>> own luxurious abode, complete with a balcony, while the head courtesan <<name $g.slave>> (despite remaining your slave for all intent purposes) receives
the main bedroom all for <<themself $g.slave>>. A suite has also been reserved for you personally, should you decide to visit some time later.
</p>
<p>
While previously your dungeons only contain
<<if _facility == 'rooms'>>
the private rooms,
<<else>>
the sex dungeons,
<</if>>
there are now enough space within the palace complex and both the private rooms and the sex dungeons have been built and better than ever.
<<if _sub == 'sub'>>
Your submissive courtesans
<<elseif _sub == 'dom'>>
Your dominant courtesans
<<else>>
Your courtesans
<</if>>
would no doubt be able to use these facilities to satisfy their client's darkest desires.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
To celebrate, your brothel opened its door for free for a day, earning your company much favor from the visiting neko and elves alike.
</p>
<</if>>
<p>
However, the centralmost chamber of the palace still remains empty, and <<yourrep $g.owner>> owner|await your decision on how to best make use of it...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"brothel_security0",
"Thug",
'forest_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_thug),
],
)>>
<<run new setup.QuestTemplate(
'brothel_security', /* key */
"Brothel Security", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
2, /* weeks */
40, /* expiration weeks */
{ /* roles */
'bouncer': [ setup.qu.bodyguard, 1],
'merc1': [ setup.qu.mercenary, 1],
'merc2': [ setup.qu.mercenary, 1],
},
{ /* actors */
'owner': [
],
'thug': 'brothel_security0',
'thug2': 'brothel_security0',
'head': [
],
},
[ /* costs */
],
'Quest_brothel_security',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_securityCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('thug2', "a|was the second in command of a band of thugs who tried to occupy a brothel under your protection", undefined),
],
],
[
'Quest_brothel_securityCrit',
[
setup.qc.VarSet('quest_brothel_progress', '36', -1),
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.Slave('thug', "a|was the leader of a band of thugs who tried to occupy a brothel under your protection", undefined),
],
],
[
'Quest_brothel_securityFailure',
[
setup.qc.Injury('bouncer', 1),
setup.qc.Injury('merc1', 2),
setup.qc.Injury('merc2', 2),
setup.qc.QuestDirectSelf({
head: "head",
owner: "owner",
}),
],
],
[
'Quest_brothel_securityFailure',
[
setup.qc.Injury('bouncer', 4),
setup.qc.Injury('merc1', 5),
setup.qc.Injury('merc2', 5),
setup.qc.QuestDirectSelf({
head: "head",
owner: "owner",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
It has been a couple of months since you acquired <<attach _describe>>, and
it's steadily growing. Its selection of delectable <<if
$g.head.isMale()>>male<<else>>female<</if>> whores are starting to appeal to
a wider audience, and you can occasionally see
<<if _class > 0>>
some of the more well-off people from the city market
<<else>>
some of the sadistic criminals from the undercity
<</if>>
partaking for some fun in the brothel.
But apparently the fame also attracts unwanted people.
</p>
<p>
<<Yourrep $g.owner>> has come to you with a bad news. The brothel's profits and its lack of security had attracted a group of thugs, who wrestled control over the brothel from <<them $g.owner>>. They are now occupying your little brothel, reaping the profits from its operations.
You must immediately secure your brothel back by sending a group of capable slavers to teach these thugs a lesson.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
<<Yourrep $g.bouncer>> <<uadv $g.bouncer>> led the operation to take back <<attach _describe>> from the thugs.
They entered the brothel with a bang, and the brothel's <<men $g.head>> looked visibly relieved to see familiar faces in your slavers.
Seeing the reinforcement, the head whore <<name $g.head>> rallied the workers of your brothel, and a fight ensued soon-after.
<<Rep $g.merc1>> and <<utheirrel $g.merc1 $g.merc2>> <<rep $g.merc2>> <<uadv $g.merc1>> dispatched one thug after another in an attempt to wrest control of the facility back.
</p>
<p>
It took several hours, but at the end, your slavers were able to dispatch all ten or so thugs that were occupying the establishment.
Most were thrown out into the nearby forests as free picking for other slaving companies, but your slavers took
their leader
<<if $gOutcome == 'crit'>>
and <<their $g.thug>> second in command
<</if>>
to be made examples and turned into your slaves.
</p>
<p>
Your workers rejoiced and hugged each other as their slave drivers were finally routed from your brothels, and order (as well as profit) can finally resume. This incident highlighted an important missing aspect of your brothel, however, and that is one of security. <<Yourrep $g.owner>> owner|promise to follow up on this issue later, after taking the head whore <<name $g.head>>'s feedbacks on the matter.
</p><p>
Your slavers were unfortunately no match for the thugs. They were soundly defeated, and were forced to retreat while
<<if $gOutcome == 'failure'>>
suffering minor injuries.
<<else>>
suffering major injuries.
<</if>>
</p>
<p>
You should try again with a better team to retake your brothel.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaowner = new setup.UnitCriteria(
null, /* key */
'Brothel Owner', /* name */
[
setup.trait.skill_entertain,
setup.trait.per_sly,
],
[
setup.trait.per_direct,
],
[
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'brothel_takeover', /* key */
"Brothel Takeover", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'special',
'unknown',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'owner': [ _criteriaowner, 3],
},
{ /* actors */
},
[ /* costs */
setup.qc.Money(-5000),
],
'Quest_brothel_takeover',
setup.qdiff.normal24, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_takeoverCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Money(1500),
],
],
[
'Quest_brothel_takeoverCrit',
setup.dutytemplate.questbrothelmanager.resetChain().concat([
setup.qc.VarSet('quest_brothel_wait', '4', -1),
setup.qc.VarSet('quest_brothel_progress', '1', -1),
setup.qc.AddTitle('owner', 'quest_brothel_owner_0'),
setup.qc.Duty('questbrothelmanager'),
]),
],
[
'Quest_brothel_takeoverCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Money(-1500),
],
],
[
'Quest_brothel_takeoverCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Money(-3000),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Having decided to buy the brothel, the last remaining thing to do is to complete the formalities and pay the money. You should select which of your slavers should become the registered brothel owner. They will need to go to the <<lore location_npc>> to complete the paperwork, which should take around one week.
</p>
<p>As the registered brothel owner, the slaver you choose will likely be involved in its future day-to-day operations. To properly manage the place, they should ideally have the following qualities: possesses basic management knowledge <<rep setup.skill.knowledge>>, good at smooth-talking other people <<rep setup.skill.social>>, and also good at using their genitals <<rep setup.skill.sex>>. It would be even better if they were to possess <<rep setup.trait.skill_entertain>>. Being <<rep setup.trait.per_sly>> is also preferred, but a <<rep setup.trait.per_direct>> slaver should be avoided.
</p>
<p>
<<dangertext "This is an important decision.">> Whichever slaver you decide to send on this quest will very likely become the brothel's formal owner. Since your company funded the purchase, the ownership of the brothel basically belongs to you, and you will be the one making the important decisions regarding the brothel's future and operations. However, as the registered owner of the brothel, the slaver you choose will be better at managing the more mundane day-to-day operations of the place. Since you are already too busy managing your slaving company, you cannot become the official brothel owner.
</p><p>
The whores were understandably wary switching managers from the bandits and now to your company, but since you answered their earlier plea for help, they were somewhat hopeful that your management would be better and kinder than that of your predecessor's.
</p>
<p>
It took the entire week, but <<yourrep $g.owner>> managed to complete the formalities and purchased the brothel.
<<if $gOutcome == 'crit'>>
Thanks to <<their $g.owner>> skillful smooth talks, <<they $g.owner>> were able to negotiate for a lower price than expected.
<<elseif $gOutcome == 'failure'>>
Unfortunately, <<they $g.owner>> had to spend more bribe than expected to complete the purchase.
<<elseif $gOutcome == 'disaster'>>
Unfortunately, <<they $g.owner>> was not a very good smooth-talker, and had to spend an outrageous of money on bribes to complete the purchase.
<<else>>
<<They $g.owner>> spent the expected amount of money to complete the purchase.
<</if>>
</p>
<p>
While <<rep $g.owner>> owner|is the legal owner of the decrepit brothel now,
since it was your company who paid for it,
your company basically owns the place now.
It will take some time before the brothel could be restored to something profitable, however,
and you hope that it will be worth the efforts.
</p>
<p>
<<successtext "Important:">> the "Brothel Manager" duty is now unlocked. Staff this duty if you wish to benefit from your little brothel.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'brothel_training', /* key */
"Brothel Training", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'upgrade',
],
1, /* weeks */
40, /* expiration weeks */
{ /* roles */
'teacher': [ setup.qu.sex_teacher, 1],
'helper1': [ setup.qu.whore, 1],
'helper2': [ setup.qu.whore, 1],
},
{ /* actors */
'owner': [
],
'head': [
],
},
[ /* costs */
],
'Quest_brothel_training',
setup.qdiff.normal32, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_trainingCrit',
[
setup.qc.Outcomes("success"),
setup.qc.BoonizeRandom('teacher', 5),
setup.qc.BoonizeRandom('helper1', 5),
setup.qc.BoonizeRandom('helper2', 5),
],
],
[
'Quest_brothel_trainingCrit',
[
setup.qc.Opportunity('intense_brothel_training', {
owner: "owner",
head: "head",
}),
setup.qc.MoneyCustom(1500),
],
],
[
'Quest_brothel_trainingFailure',
[
setup.qc.VarSet('quest_brothel_wait', '2', -1),
],
],
[
'Quest_brothel_trainingFailure',
[
setup.qc.VarSet('quest_brothel_wait', '8', -1),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
A couple of weeks have passed since you've cleaned up
<<attach _describe>>.
Customers are starting to flock into the place now, but they're mostly the lower class such as dockworkers and manual laborers.
</p>
<p>
The manager of the place, <<yourrep $g.owner>>, comes to you today with an
idea of how to possibly increase your brothel's profit even further. The first
step is to give the <<men $g.head>> working there some training. It might
sound odd that sex workers such as them would need training, but apparently
<<therace $g.head>> had done <<their $g.head>> research on the other brothels
in the vicinity, and comes to this conclusion.
</p>
<p>
You could try to send a group of slavers from your employ to help teach these people the art of sex. A teacher is required, as well as two helpers to demonstrate the teachings to the students. If they are sufficiently good at their job, they might even be able to teach the workers "on the job", which could earn you some extra coin.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
The <<men $g.head>> working in the place were unskilled, to say the least.
When <<yourrep $g.teacher>> asked for a demonstration, they remained
passive, unsure what to do. Most of the current customers simply go into
your brothel for a quick, traditional fuck, and no other options were even
presented on the table.
</p>
<p>
This would not do, and <<yourrep $g.teacher>> and <<their $g.teacher>> two assistants demonstrated the various options that should have been made available to the prospective clients.
<<if $g.teacher.isHasTrait('per_calm')>>
<<Rep $g.teacher>> teacher|is a patient <<man $g.teacher>>, and it showed. <<They $g.teacher>> patiently guided the students,
<<elseif $g.teacher.isHasTrait('per_aggressive')>>
<<Rep $g.teacher>> teacher|is not a patient <<man $g.teacher>>, however, and it showed. <<They $g.teacher>> looked extremely impatient as <<they $g.teacher>> went over the techniques with the students,
<<elseif $g.teacher.isHasTrait('per_dominant')>>
<<Reps $g.teacher>> dominant tendencies came out, and a look of delight showed up occasionally in <<therace $g.teacher>> as they demonstrated the techniques to the students,
<<elseif $g.teacher.isHasTrait('per_submissive')>>
<<Reps $g.teacher>> submissive tendencies occasionally came out, however, making the training more difficult than it should. Still, <<they $g.teacher>> were able to demonstrate the techniques to the students,
<<else>>
<<Rep $g.teacher>> demonstrated advanced sex techniques to the students,
<</if>>
using <<rep $g.helper1>> and <<rep $g.helper2>> and their various holes to demonstrate the more advanced sex techniques to the whores. They learned how their anus can also be used to pleasure others, as well as the basics of taking dicks down their throats.
</p>
<p>
<<Yourrep $g.teacher>> teacher|was good at <<their $g.teacher>> job, and even managed to continue training the whores as they serviced the clients, earning some coin in the process.
<<if $gOutcome == 'crit'>>
Your slavers even managed to have their own fun as they progress the training forwards.
<</if>>
</p>
<p>
There were too many to teach, however, and your slavers could only teach so
much over the week. In the end, your input was necessary to determine which
direction the <<if $g.head.isMale()>>man<</if>>whores should continue to hone their skills on.
</p><p>
Unfortunately, <<yourrep $g.teacher>> teacher|was terrible at <<their $g.teacher>> job. <<Their $g.teacher>> teachings fell on deaf ears, and by the end of the week it was clear that the students would need some extra whoring experiences first before you could retry another of such training.
<<if $gOutcome == 'failure'>>
Give them a couple of weeks to work normally, and you can retry this quest again.
<<else>>
Give them a couple of months to work normally, and you can then retry this quest again.
<</if>>
</p><<run new setup.UnitGroup(
"boss_visit0",
"Forest Boss",
'forest_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_boss),
setup.qc.TraitRemove('unit', setup.trait.per_submissive),
setup.qc.TraitRemove('unit', setup.trait.per_dominant),
setup.qc.AddTraitsRandom('unit', [setup.trait.skill_connected, setup.trait.skill_intimidating, setup.trait.face_hideous, setup.trait.skill_hypnotic], 2, true, false),
],
)>>
<<run new setup.QuestTemplate(
'boss_visit', /* key */
"Boss Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'entertainer': [ setup.qu.performer, 1],
'whore': [ setup.qu.whore, 1],
'guard': [ setup.qu.bodyguard, 1],
},
{ /* actors */
'head': [
setup.qres.Home(),
],
'owner': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': 'boss_visit0',
},
[ /* costs */
],
'Quest_boss_visit',
setup.qdiff.hardest69, /* difficulty */
[ /* outcomes */
[
'Quest_boss_visitCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slaver('target', "a|was a criminal boss in the Neko Port City who took interest in your brothel and decided to join your company for a while", undefined),
setup.qc.VarSet('quest_brothel_royal_visit', '1', -1),
],
],
[
'Quest_boss_visitCrit',
[
setup.qc.MoneyCustom(6000),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Quest_boss_visitFailure',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.MissingUnit('whore'),
],
],
[
'Quest_boss_visitFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.MissingUnit('guard'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Your fine establishment, <<attach _describe>>, caters to a wide range of fetish.
<<if _sub == 'sub'>>
While most of the courtesans are submissive sluts, the establishment prides
itself in being able to cater to subs as well, although not very effective at
it.
<<elseif _sub == 'dom'>>
Customers can engage in a consensual dom-to-dom sex, or even fulfill their fantasies of being dominated by your masterful courtesans.
<<else>>
The many courtesans under your employ are comfortable in both topping and bottoming.
<</if>>
While it has attracted people with certain fetish, it also attracts people with relatively vanilla tastes.
</p>
<p>
One such people is apparently the leader of a criminal gang in the <<lore
location_npc>>.
The manager of your brothel, <<yourrep $g.owner>>, owner|have
informed you that
the leader of the criminal gang has decided to plan a visit into your brothel <<themself $g.target>>,
after hearing so much about your brothel's degeneracy. For such an
important client, it might be good to go the extra effort, and supply your
own experienced men for the occassion. The crime boss would no doubt expect
the three basic necessities of any brothel worth its salt: the security, the
entertainment, and most importantly the <<girl $g.head>>.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
Your three slavers performed their job admirably satisfying the important client. <<Yourrep $g.guard>> stood guard over the place, making sure that no miscreant would dare to cause problems in the venue.
Meanwhile <<yourrep $g.entertainer>>
<<if $g.entertainer.isHasTrait('skill_entertain')>>
entertainer|is a masterful entertainer, and had no trouble whatsoever making sure the boss was always entertained.
<<else>>
entertainer|is a solid entertainer, and managed to make sure that the boss remained entertained at all times.
<</if>>
<<Yourrep $g.whore>> together with the head courtesan <<name $g.slave>> are assigned to a particular private suite that have been reserved by the boss, and they engaged in many lovemaking throughout the stay.
</p>
<p>
The boss was satisfied by the services rendered — not an easy task at all considering the quality <<they $g.target>> had expected — and paid generously for it.
<<if $gOutcome == 'success'>>
<<They $g.target>> promised to visit again sometime in the future, if your brothel is still operational by then.
<<else>>
In fact, <<they $g.target>> target|was so impressed that <<they $g.target>> got inspired to take a little break from the stressful duty of managing a criminal enterprise, and offered to join your company as a slaver as a sort of vacation. You can certainly make use of such a skilled slaver, but ultimately the decision is yours.
<</if>>
</p><p>
Unfortunately, your venue did not give a great impression on the boss. The boss felt <<their $g.target>> time was wasted, and demanded pay for the lost time. In the end,
<<if $gOutcome == 'disaster'>>
<<yourrep $g.guard>> and <<rep $g.whore>> were taken as "payments".
Better get your Rescuer to work if you want to see them ever again...
<<else>>
<<yourrep $g.whore>> whore|was taken as payment.
<<uneedrescue $g.whore>>.
<</if>>
</p><<run new setup.QuestTemplate(
'brothel_rejuvenation', /* key */
"Brothel Rejuvenation", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'upgrade',
],
8, /* weeks */
35, /* expiration weeks */
{ /* roles */
'planner': [ setup.qu.planner, 1],
'builder1': [ setup.qu.builder, 1],
'builder2': [ setup.qu.builder, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [],
},
[ /* costs */
setup.qc.Money(-200000),
],
'Quest_brothel_rejuvenation',
setup.qdiff.normal74, /* difficulty */
[ /* outcomes */
[
'Quest_brothel_rejuvenationCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('elf', 300),
setup.qc.Favor('neko', 300),
],
],
[
'Quest_brothel_rejuvenationCrit',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.VarAdd('quest_brothel_high_income', 400, -1),
],
],
[
'Quest_brothel_rejuvenationCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Injury('builder1', 2),
setup.qc.Injury('builder2', 3),
],
],
[
'Quest_brothel_rejuvenationCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Injury('builder1', 16),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<p>
It has been a number of years since the exterior of <<attach _describe>> was worked on. And age has started to show its marks — the brothel's decorations are already looking a little worn down, and its interior could use some rework.
<<if _class >= 20>>
The red carpet decorating the entrance is starting to show its seams here and there,
<<elseif _class <= -20>>
The bondage devices hanged in the entrance to your brothel is starting to get rusty here and there,
<<else>>
Some of the plants in the reception area has already withered,
<</if>>
<<if _attraction == 'gravity'>>
and the magical crystals powering the Magic Gravity Room are already starting to lose power.
<<else>>
and the various enchantments in the Magic Bondage Room are waning in strength.
<</if>>
The profit suffers as a result.
</p>
<p>
<<Yourrep $g.owner>>, as well as the
<<if _promotion == 'money'>>
business manager,
<<else>>
customer relations officer,
<</if>>
are unhappy about it to. They have drafted a grand plan to rejuvenate the place, rebuilding the palace from the grounds up and ensuring everything remains shiny and in top-notch working condition.
</p>
<p>
The only problem is that it would cost you a heavy <<money 200000>>, which will all come from your coffers. However, the cost will no doubt be recouped in the long term — at least if <<yourrep $g.owner>>'s calculations were to be believed! The renovation should make the brothel highly profitable for the next seven or eight years.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
It took two months, but your three slavers had worked hard, and the brothel was rebuild from anew. Following <<yourrep $g.planner>>'s master plan, the builders <<rep $g.builder1>> and <<utheirrel $g.builder1 $g.builder2>> <<rep $g.builder2>> worked their asses hard, and finally the new brothel building was completed.
<<if _class >= 20>>
The entrance feels luxurious once again,
<<elseif _class <= -20>>
The smell of heavy bondage now permeates the entrance again,
<<else>>
The entrance induces an exotic feeling again,
<</if>>
<<if _attraction == 'gravity'>>
and the newly rebuilt Magic Gravity Room now properly hoist its customer mid-air once again.
<<else>>
and the various enchanted sex toys within the Magic Bondage Room now vibrate with great intensity once again.
<</if>>
Words of your brothel's grand renovation spreads too, and your brothel is bursting with customers once again.
<<if $gOutcome == 'crit'>>
<<Yourrep $g.owner>> had the bright idea of letting customers enjoy the facilities for free for a day, which makes a lot neko as well as visiting elves like your company more.
<</if>>
</p>
<p>
With the renovation completed, the brothel's profit should soar again for the next seven or eight years.
</p>
<<if $gOutcome == 'failure'>>
<p>
Unfortunately, your builders got injured during the hefty construction process.
</p>
<</if>>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, while working on the finishing touches of the brothel's spire, <<yourrep $g.builder1>> fell from the top of the building, sustaining heavy injuries.
</p>
<</if>><<set _criteriaslave1 = new setup.UnitCriteria(
null, /* key */
'To-Be-Mindbroken', /* name */
[
setup.trait.per_masochistic,
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
setup.qres.AllTraits([setup.trait.training_masochist_master], true),
],
{
}
)>>
<<set _criteriaslave2 = new setup.UnitCriteria(
null, /* key */
'To-Be-Mindbroken', /* name */
[
setup.trait.per_masochistic,
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.IsCanBeSold(),
setup.qres.AllTraits([setup.trait.training_masochist_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'demon_visit', /* key */
"Demon Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'unknown',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'slaver': [ setup.qu.slavehandler, 1.5],
'purifier': [ setup.qu.purify_head, 1.5],
'slave1': _criteriaslave1,
'slave2': _criteriaslave2,
},
{ /* actors */
'head': [
setup.qres.Home(),
],
'owner': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': [
setup.qres.Home(),
],
'demonkin': 'subrace_demonkin',
},
[ /* costs */
],
'Quest_demon_visit',
setup.qdiff.hardest69, /* difficulty */
[ /* outcomes */
[
'Quest_demon_visitCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('demonkin', "a|was your brothel\'s payment after their services was being used by a demonic royalty", undefined),
],
],
[
'Quest_demon_visitCrit',
[
setup.qc.Opportunity('mistwalker_visit', {
owner: "owner",
head: "head",
slave: "slave",
target: "target",
}),
setup.qc.IfThenElse(
setup.qres.Actor('slave1', setup.qres.NoTraits([setup.trait.per_masochistic], true)),
setup.qc.DoAll([
setup.qc.Mindbreak('slave1')
], undefined),
setup.qc.DoAll([
], undefined)),
setup.qc.IfThenElse(
setup.qres.Actor('slave2', setup.qres.NoTraits([setup.trait.per_masochistic], true)),
setup.qc.DoAll([
setup.qc.Mindbreak('slave2')
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_demon_visitFailure',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.MissingUnit('slaver'),
setup.qc.MissingUnit('purifier'),
setup.qc.Corrupt('slaver', null, 1),
setup.qc.Corrupt('purifier', null, 1),
],
],
[
'Quest_demon_visitFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.MissingUnit('slave1'),
setup.qc.MissingUnit('slave2'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The manager of your brothel, <<yourrep $g.owner>>, owner|have
heard that a most depraved visitor is planning a visit to <<attach
_describe>>: a demon from beyond the <<lore concept_mist>>. While demons are
already very rare, this particular demon happens to be a royalty within the
demons. <<They $g.target>> target|have taken interest in your depraved
brothel,
especially the
<<if _attraction == 'gravity'>>
Magic Gravity Room,
<<else>>
Magic Bondage Room,
<</if>>
and would like to sample the brothel's services.
</p>
<p>
Demons are usually sadists, and this one is not an exception. <<They $g.target>> no doubt target|have heard about your brothel's reputation as a haven of dominance. It is unlikely your courtesans will survive on their own against such a client, so it may be best to send a group of experienced slavers to handle this particular client. First of all, you need a slaver proficient in managing slaves. Dealing with demons means corruptions will be abound, so a slaver proficient in <<rep setup.trait.magic_fire>> is also required. Finally, the slavers would need to be accompanied by two slaves masterfully trained in masochism. Once used by the demon, these slaves will likely break forever from the severe abuse, so <<dangertext "you must choose carefully">>.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The demon royalty arrived with a small demonkin entourage, seemingly <<their $g.target>> servants. The demonkins attended to all the demon's need and arranged for your slavers as well as the two masochist slaves to be brought into the dungeons and be used as the demon's personal playthings for the month.
</p>
<p>
The demon was not gentle, to put it lightly. The slaves were put through pain unimaginable using the various apparatus available in your brothel.
<<if _attraction == 'bondage'>>
When the demon booked and used the Magic Bondage Room, <<they $g.target>> ripped a small portal into the <<lore concept_mist>>, letting the corruption atmosphere to flow in.
The effect was immediate — the sex toys vibrate with an intensity never heard before, and the electricity turned purple. Your slaves writhed and screamed in pain as they were toyed with by the cruel demon. Meanwhile, <<yourrep $g.purifier>> had to work very hard to undo the corruption as it flew into your slavers' and the slaves' bodies.
<</if>>
</p>
<p>
<<if $g.slave1.isHasTrait('per_masochistic')>>
Surprisingly, <<yourrep $g.slave1>> never broke from the cruel abuse. It seemed that the slave is a natural-born masochist, and the intense and unworldly pain only brought pleasure to the slave, and the climaxed so many times from being abused so.
<<else>>
<<Rep $g.slave1>> was the first to break — despite <<their $g.slave1>> masterful masochist training, the demon's handling was simply out of this world, and managed to inflict pain far beyond the slave's considerable pain threshold.
<</if>>
<<if $g.slave2.isHasTrait('per_masochistic')>>
<<Yourrep $g.slave2>> did not broke from the abuse, and
<<if $g.slave.isHasDick()>>their dick only grew harder and harder
<<else>>their pussy only grew wetter and wetter
<</if>>
as the intensity of the abuse kept increasing. It seems the slut is a natural masochist, and <<their $g.slave2>> brain wires pain differently than others.
<<else>>
Meanwhile, <<reps $g.slave2>> mind broke soon after from the abuse. The masterful masochist training did not prepare them for the otherworldly pain inflicted by the combination of corrupted magic and mortal tools of bondage.
<</if>>
</p>
<p>
After four long and agonizing weeks had passed, the demon's contract with the slaves was finally over.
Satisfied, the demon promised to reward the proprietor of the brothel personally, and left without saying a word.
<<if $gOutcome == 'crit'>>
However, the demon left one of <<their $g.target>> demonkin attendants as "advance-payment" for the excellent entertainment, and your slavers wondered if these attendants were slaves after all...
<</if>>
</p><p>
Dealings with demons never end well with mortals, and your slavers learn this the hard way.
Once the demon, the slavers and the slaves entered the sex dungeons,
<<if $gOutcome == 'disaster'>>
none
<<else>>
only the slaves
<</if>>
came out from the room after the four weeks.
It's unknown what might have happened to your slavers, but you better get your Rescuer to work if you want to see them ever again...
</p><<set _criteriadom1 = new setup.UnitCriteria(
null, /* key */
'Dominant Slaver', /* name */
[
setup.trait.bg_slaver,
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_proud,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_veryslutty,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_humble,
setup.trait.per_chaste,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Through(
setup.qres.Or([
setup.qres.And([
setup.qres.VarEqual('quest_brothel_gender', 'male'),
setup.qres.Trait('gender_male'),
]),
setup.qres.And([
setup.qres.VarEqual('quest_brothel_gender', 'female'),
setup.qres.Trait('gender_female'),
]),
]),
"Same gender with your brothel's courtesans",
),
setup.qres.AllTraits([setup.trait.per_dominant], true),
],
{
slaving: 1,
sex: 2,
}
)>>
<<set _criteriasub1 = new setup.UnitCriteria(
null, /* key */
'Submissive Slaver', /* name */
[
setup.trait.bg_slave,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_humble,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.eq_veryslutty,
setup.trait.eq_veryvaluable,
],
[
setup.trait.per_proud,
setup.trait.per_chaste,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Through(
setup.qres.Or([
setup.qres.And([
setup.qres.VarEqual('quest_brothel_gender', 'male'),
setup.qres.Trait('gender_male'),
]),
setup.qres.And([
setup.qres.VarEqual('quest_brothel_gender', 'female'),
setup.qres.Trait('gender_female'),
]),
]),
"Same gender with your brothel's courtesans",
),
setup.qres.AllTraits([setup.trait.per_submissive], true),
],
{
slaving: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'high_brothel_season', /* key */
"High Brothel Season", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'dom1': [ _criteriasub1, 1],
'dom2': [ _criteriadom1, 1],
'pimp': [ setup.qu.pimp, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_high_brothel_season_dom_',
setup.qdiff.normal65, /* difficulty */
[ /* outcomes */
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.MoneyCustom(12000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.Injury('dom1', 4),
setup.qc.Injury('dom2', 4),
],
],
[
'Quest_high_brothel_season_dom_Disaster',
[
setup.qc.Injury('dom1', 6),
setup.qc.Injury('dom2', 6),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>>
<<run new setup.QuestTemplate(
'high_brothel_season_sub_', /* key */
"High Brothel Season (Sub)", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'dom1': [ _criteriasub1, 1],
'dom2': [ _criteriasub1, 1],
'pimp': [ setup.qu.pimp, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_high_brothel_season_dom_',
setup.qdiff.normal65, /* difficulty */
[ /* outcomes */
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.MoneyCustom(12000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.Injury('dom1', 4),
setup.qc.Injury('dom2', 4),
],
],
[
'Quest_high_brothel_season_dom_Disaster',
[
setup.qc.Injury('dom1', 6),
setup.qc.Injury('dom2', 6),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>>
<<run new setup.QuestTemplate(
'high_brothel_season_dom_', /* key */
"High Brothel Season (Dom)", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'dom1': [ _criteriadom1, 1],
'dom2': [ _criteriadom1, 1],
'pimp': [ setup.qu.pimp, 1],
},
{ /* actors */
'owner': [
setup.qres.Home(),
],
'head': [
setup.qres.Home(),
],
'slave': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_high_brothel_season_dom_',
setup.qdiff.normal65, /* difficulty */
[ /* outcomes */
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.VarSet('quest_brothel_wait', '50', -1),
setup.qc.MoneyCustom(12000),
],
],
[
'Quest_high_brothel_season_dom_Crit',
[
setup.qc.Outcomes("success"),
setup.qc.Injury('dom1', 4),
setup.qc.Injury('dom2', 4),
],
],
[
'Quest_high_brothel_season_dom_Disaster',
[
setup.qc.Injury('dom1', 6),
setup.qc.Injury('dom2', 6),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
While <<attach _describe>> is generally busy all year round, some months are generally busier than others. And this month happens to be the busiest time of the year, and your courtesans are unable to cope with the demand.
<<Yourrep $g.owner>><<if _promotion == 'favor'>>, as well as the customer relations officer <<name $g.head>> were<<else>> was<</if>> forced to turn down some customers due to simply having not enough <<uhands $unit.player>> on deck.
</p>
<p>
You can help in the busy season by sending a group of slavers from your company to work as fill-in whores. To maintain the high standards of your brothel, however, whoever you send must be highly skilled in the act of whoring.
Furthermore,
<<if _sub == 'sub'>>
in line with the submissive sluts image your brothel maintains, the slavers you send on this mission must also be perfectly submissive sluts.
<<elseif _sub == 'dom'>>
in line with the dominant courtesan image your brothel maintains, any slaver you send on this mission must also be capable of being a perfectly dominant <<master $g.head>>.
<<else>>
since your brothel caters to a wide range of customers, you should send one dominant and one submissive slaver on this mission.
<</if>>
And most importantly, the
<<if _sub == 'sub'>>
sluts
<<else>>
slavers
<</if>>
you send on this mission must all be good <<girl $g.head>>s.
</p>
<p>
The requirements may be stringent, but this quest no doubt promises a wealth of reward should you happen to have slavers that meet the requirements.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<p>
<<Yourrep $g.owner>> owner|was not kidding that the brothel was packed. Your slavers worked very, very hard in the past four months, servicing the many clients that come flocking into your brothels during the neko's apparent mating season. <<if $gOutcome == 'failure'>>A bit too hard, perhaps, as some of your slavers ended up injured.<</if>>
Still, they reaped so much money from the venture, much more than they would normally make in a regular quest.
</p><p>
Unfortunately, your slavers' skills were not enough to satisfy the clients. Worse, early on a sadistic client's play ended up injuring your inexperienced slavers, and they were unable to continue and had to return home injured.
</p><<run new setup.QuestTemplate(
'royal_visit', /* key */
"Royal Visit", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
],
4, /* weeks */
40, /* expiration weeks */
{ /* roles */
'dom1': [ setup.qu.dom, 1],
'dom2': [ setup.qu.dom, 1],
'wizard': [ setup.qu.arcanedarkveteran, 1],
},
{ /* actors */
'head': [
setup.qres.Home(),
],
'owner': [
setup.qres.Home(),
],
'slave': 'brothel_head_courtesan',
'target': [
],
},
[ /* costs */
],
'Quest_royal_visit',
setup.qdiff.hardest69, /* difficulty */
[ /* outcomes */
[
'Quest_royal_visitCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('neko', 300),
],
],
[
'Quest_royal_visitCrit',
[
setup.qc.Opportunity('royal_visit', {
owner: "owner",
head: "head",
slave: "slave",
target: "target",
}),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_royal_visitFailure',
[
setup.qc.MissingUnit('dom1'),
setup.qc.MissingUnit('dom2'),
setup.qc.MissingUnit('wizard'),
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
],
[
'Quest_royal_visitFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.OneRandom([
setup.qc.Trait('dom1', setup.trait.per_submissive),
setup.qc.Trait('dom2', setup.trait.per_submissive),
setup.qc.Trait('wizard', setup.trait.per_submissive)
]),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.VarSet('quest_brothel_wait', '50', -1),
],
)>><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The manager of your brothel, <<yourrep $g.owner>>, owner|have
informed you that
a most noble visitor is planning a visit to <<attach _describe>>. The visitor
is no ordinary noble — in fact, <<they $g.target>> target|is a member of the
neko royalty, a title held by an extreme select few within <<lore
continent_main>>. The official reason for the visit is as follows: the royal
has heard of the many wonders provided by your brothel, especially the
<<if _attraction == 'gravity'>>
Magic Gravity Room,
<<else>>
Magic Bondage Room,
<</if>>
and would like to ensure that it meets all the required safety standard within the <<lore location_npc>>.
</p>
<p>
However, a tip from one of the brothel's worker gives a very different reason. The noble is apparently a secretly submissive slut, and
<<if _sub == 'dom'>>
having heard of the many dominant courtesans within your brothel,
<<else>>
having heard that your brothel's courtesans are also capable of domming,
<</if>>
<<they $g.target>> target|have decided that perhaps the brothel would be able to provide <<them $g.target>> with one of <<their $g.target>> darkest fantasies: being completely dominated by an evil dark wizard and their two evil hulking minions.
</p>
<p>
If you want to ensure that the royal is satisfied, you can try to send a group of slavers to help out with the client. A real dark wizard should do wonder, as well as two other slavers to act as the minions. With luck, the royal should pay very well for the outstanding service.
</p><<set _profit = setup.dutytemplate.questbrothelmanager.profit()>>
<<set _progress = setup.dutytemplate.questbrothelmanager.progress()>>
<<set _class = setup.dutytemplate.questbrothelmanager.class()>>
<<set _facility = setup.dutytemplate.questbrothelmanager.facility()>>
<<set _attraction = setup.dutytemplate.questbrothelmanager.attraction()>>
<<set _name = setup.dutytemplate.questbrothelmanager.brothelName()>>
<<set _gender = setup.dutytemplate.questbrothelmanager.gender()>>
<<set _describe = setup.dutytemplate.questbrothelmanager.describe()>>
<<set _promotion = setup.dutytemplate.questbrothelmanager.promotion()>>
<<set _sub = setup.dutytemplate.questbrothelmanager.sub()>>
<p>
The royal spent lavishly on the compound, and bought your three slavers together with the head courtesan <<name $g.slave>> for a full month. Knowing full well of the royal's submissive tendencies, once they arrive at a secluded dungeon cell, <<yourrep $g.wizard>> <<uadv $g.wizard>> began the play. <<They $g.wizard>> used <<their $g.wizard>> real mastery over dark magic to conjure darkness, enveloping the area and blocking off the exit while <<yourrep $g.dom1>> and <<utheirrel $g.dom1 $g.dom2>> <<rep $g.dom2>> began their molestations over the royal. The royal tried to struggle, but judging from
<<if $g.target.isHasDick()>>erect dick<<else>>wet pussy<</if>>, your slavers knew all too well that it was an act, and the royal was having the time of <<their $g.target>> life. Not to be outdone by your slavers, your former slave <<name $g.slave>> without warning shoved <<their $g.slave>> <<udickorstrap $g.slave>> into the royal's gaping <<umouth $g.target>>. The sound of rough sex then continued over the night, and then the next few days, and so until finally a month had passed.
</p>
<p>
The royal appeared as a mess to your slavers, with <<their $g.target>> every hole filled with questionable bodily and not-so-bodily fluids. But the royal turned out to be a level-headed <<urace $g.target>>, and once the playtime was up, <<they $g.target>> got to <<their $g.target>> slightly wobbly feet, and resumed <<their $g.target>> professional-looking face. Completely satisfied with the service, <<they $g.target>> paid generously for your brothel's services<<if $gOutcome == 'crit'>>, as well as promising to put good words about your company.<</if>>
</p>
<p>
Surprisingly, a few days after the visit, you found the royal all by <<themself $g.target>> knocking literally on your office door.
</p><p>
Unfortunately, despite being secretly submissive, the royal maintained <<their $g.target>> professional mask throughout. When your slaver tried to assume dominance, the royal took it as a personal insult, and had all three of your slavers arrested for treachery. You've never heard back from the trio, but if you have a Rescuer, they might be able to locate your slavers back if they work very hard. <<if $gOutcome == 'disaster'>>Although it's unclear if your slavers would be able to return unchanged.<</if>>
</p>/* PROOFREAD COMPLETE */
<<set _criteriapimp = new setup.UnitCriteria(
null, /* key */
'Pimp', /* name */
[
setup.trait.per_sly,
setup.trait.skill_entertain,
],
[
setup.trait.per_direct,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'under_new_management', /* key */
"Under New Management", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'money',
'rare',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'pimp': [ _criteriapimp, 1],
'guard1': [ setup.qu.guard, 1],
'guard2': [ setup.qu.guard, 1],
},
{ /* actors */
'bandit': 'all',
},
[ /* costs */
],
'Quest_under_new_management',
setup.qdiff.normal22, /* difficulty */
[ /* outcomes */
[
'Quest_under_new_managementCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_under_new_managementCrit',
[
setup.qc.SetCooldownQuest(null, 25),
setup.qc.Opportunity('under_new_management2', {
guard1: "guard1",
pimp: "pimp",
guard2: "guard2",
}),
],
],
[
'Quest_under_new_managementCrit',
[
setup.qc.Injury('guard1', 1),
setup.qc.Injury('guard2', 2),
],
],
[
'Quest_under_new_managementCrit',
[
setup.qc.Injury('guard1', 4),
setup.qc.Injury('guard2', 4),
setup.qc.TraumatizeRandom('pimp', 8),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.VarNull('quest_brothel_progress'),
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('under_new_management2'),
setup.qres.NoQuest('brothel_takeover'),
],
[ /* expiration outcomes */
],
)>><p>
Today, you have received a desperate plea for help — a brothel in the <<lore location_npc>> has been overrun by bandits, who had been controlling the place and abusing its workers for a few weeks by now. Due to the bandit's violent threats, the whores had been forced to work like slaves, and it was only through sheer ingenuity that they were able to send you this letter.
</p>
<p>
These whores must be desperate to come to a slaving company for help. You could try to send a group of slavers to liberate the place. Surely the whores would be grateful for the help, and will lavish rewards upon your slavers.
</p><p>
The bandits sat like overlords of the brothel, while the whores were overworked for money. The leader of the bandit kept some of the whores for <<themself $g.bandit>>, and these whores' life were reduced to that of slaves, being forced to lick the sole of the bandit's boots and
<<if $g.bandit.isHasDick()>>
perform cock-sheath duties.
<<else>>
service the bandit's pussy.
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
Fortunately, this caused the bandits to be complacent, and they never saw what were coming when your slavers kicked the door open and charged straight for the bandits.
<<Yourrep $g.guard1>> <<uadv $g.guard1>> knocked out the bandit one after another — not a difficult task since most are too busy either drinking or using a whore or two.
</p>
<p>
Your slavers eventually managed to dispatch all the bandits, including the bandit leader, and handed them over to the city's peacekeepers.
<<if $gOutcome == 'crit'>>
<<Rep $g.pimp>> found and collected some of the profits the bandits had apparently been making off these poor whores.
<</if>>
And now it is time to get paid.
</p>
<<else>>
<p>
Unfortunately, despite the bandit being obviously distracted, your slavers were no match for the bandit's sheer numbers.
<<if $gOutcome == 'failure'>>
<<Yourrep $g.guard2>> wisely ordered a retreat early, and your slavers only suffered an injury or two.
<<else>>
But your slavers did not see that, and charged in. They were defeated soundly, and the bandits delightfully made use of <<yourrep $g.pimp>> before kicking all of your slavers out of the brothel some time later.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_gorgon_cave__raid1',
"Tentacled Slave",
'forest_all', /* pools */
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.race_elf,
setup.trait.race_catkin,
setup.trait.muscle_thin,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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.corruptedfull,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<set _criteriafighter2 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.muscle_thin,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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.corruptedfull,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
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': 'quest_gorgon_cave__recruit1',
'slave': 'quest_gorgon_cave__raid1', },
[ /* costs */
],
'Quest_gorgon_cave__raid',
setup.qdiff.normal36, /* difficulty */
[ /* outcomes */
[
'Quest_gorgon_cave__raidCrit',
[
setup.qc.Slave('slave', 'a|was a decoration slave in a cave full of tentacles whose orifices was permanently gaped by continuous rape', undefined),
setup.qc.Equipment(setup.equipmentpool.arcane_good), ],
], [
'Quest_gorgon_cave__raidCrit',
[
setup.qc.Slave('slave', 'a|was a decoration slave in a cave full of tentacles whose orifices was 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__raidFailure',
[
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 try and raid the lair for riches.
</p><p>
Your slavers prepared as best as they could for the quest.
<<Yourrep $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 support the team.
</p><p>
Once your slavers arrived at the caverns, they were immediately beset by the
two hulking tentacled guardians.
They appeared as an amalgamation of tentacles, vaguely resembling a demon, but tinted green.
They moved eerily before
suddenly stabbing out one of its tentacles into your slaver's directions, but
<<yourrep $g.fighter1>> fighter1|was ready and skillfully blocked the attack.
<<Rep $g.fighter2>> followed up by slashing right into the guardian, which easily
cut the tentacles leaving them a slithering mess on the floor.
But the fight was far from over -- <<rep $g.support>>
healed the wounds throughout the fight as best as <<they $g.support>> could.
<<set _fire = setup.selectUnit([$g.fighter1, $g.fighter2, $g.support], {trait: 'magic_fire'})>>
<<if _fire>>
Throughout the fight, <<rep _fire>> used <<their _fire>> fire magic to burn some away.
<</if>>
Eventually, with the combined mights of your slavers, they dispatched the guardians,
and then pressed depeer into the caverns.
</p>
<p>
The slavers were met with a most debauched of scenery.
Within the caves,
many slaves were displayed along the corridors, most were moaning softly as
all their cavities, be it mouth<<if $g.slave.isHasVagina()>>, anus, or vagina,<<else>> or anus<</if>>
were filled to uncomfortable fullness with slithering tentacles.
It seemed the wizard had a thing or two for tentacles sex --
various tentacle sex actions were enacted with various slaves posted in nearby rooms —
there was one where a slave is suspended in the air with nothing but
tentacles inside <<their $g.slave>> ass,
and another one where a caged slave begged as <<they $g.slave>> slave|was surrounded by what seemed
to be a sea of tentacles.
</p><<include 'GorgonCaveCommon3'>>
<p>
Most of these slaves were already useless and far too gone from the relentless abuse, but your
slavers managed to find a relatively newly caught slave who had only been
ravaged bodily, but whose mind remained intact. They proceeded to "rescue" the slave from worse
fate and into your gentle care.
<<if $gOutcome == 'crit'>>
They also found one of the wizard's prized belongings to take home before escaping the caverns.
<<else>>
They also grabbed whatever valuables they found lying nearby, before escaping from the caverns.
<</if>>
</p><<include 'GorgonCaveCommon2'>>
<p>
Once your slavers arrived at the caverns, they were immediately beset by the
two hulking tentacled guardians.
They appeared as an amalgamation of tentacles, vaguely resembling a demon, but tinted green.
They moved eerily before
suddenly stabbing out one of its tentacles into your slaver's directions, which
caught your slavers off guard.
<<if $gOutcome == 'failure'>>
<<Yourrep $g.fighter1>> fighter1|was knocked down,
but before the guardian started to molest <<them $g.fighter1>>, <<rep
$g.fighter2>> came to the rescue.
<<Rep $g.fighter2>> managed to <<uadv $g.fighter2>> deflected all the attacks by <<themself $g.fighter2>>,
but got severely injured in the process before your slavers managed to escape from the clutches of these
tentacled guardians.
<<else>>
Having knocked <<rep $g.fighter1>> and the rest of the team to the ground,
the guardians proceeded to mindlessly molest your slaver's cavities, filling
their holes with their oversized tentacles over and over again until your
slavers were uselessly moaning in a combination of pain and pleasure.
After a brutal two hours of rough sodomy,
the guardians returned to their dormant states with the threats to the lair
completely neutralized.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_gorgon_cave__recruit1',
'Tentacle Leader',
'forest_all', /* pools */
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",
'forest_all', /* pools */
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',
'forest_all', /* pools */
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.race_elf,
setup.trait.race_catkin,
setup.trait.muscle_thin,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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.corruptedfull,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 2,
arcane: 1,
}
)>>
<<set _criteriafighter2 = new setup.UnitCriteria(
null, /* key */
'Anti-Tentacle Fighter', /* name */
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.muscle_thin,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
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.corruptedfull,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
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': 'quest_gorgon_cave__recruit1',
'student': 'quest_gorgon_cave__recruit3',
'slave': 'quest_gorgon_cave__recruit4', },
[ /* costs */
],
'Quest_gorgon_cave__recruit',
setup.qdiff.harder36, /* difficulty */
[ /* outcomes */
[
'Quest_gorgon_cave__recruitCrit',
[
setup.qc.Slaver('leader', "a|was the leader of a secluded cave full of guardian tentacles", false),
setup.qc.Slave('slave', 'a|was a decoration slave in a cave full of tentacles whose orifices was permanently gaped by continuous rape', undefined), ],
], [
'Quest_gorgon_cave__recruitCrit',
[
setup.qc.Slaver('student', 'a|was the "student" of the leader of a secluded cave full of guardian tentacles', false),
setup.qc.Slave('slave', 'a|was a decoration slave in a cave full of tentacles whose orifices was 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__recruitFailure',
[
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 try and recruit the leader of this caverns.
</p><<set $g.support = $g.recruiter>>
<<include 'GorgonCaveCommon3'>>
<p>
Ignoring all these sights as well as the numerous caged slaves ripe for kidnapping, your slavers
pressed forwards until they finally arrived at the innermost sanctum.
There, they found the wizard who was in the middle of a sex ritual,
which apparently included a slave being spitroasted by what appeared to be large ethereal
tentacles anchored from the altar.
<<They $g.leader>> greeted your slavers, seemingly aware of their presence,
before completing the ritual, leaving the unfortunate slave a
slubbering mess in <<their $g.slave>> own fluids after the tentacles withdrew their cruel appendages.
Seeing the ritual over, <<yourrep $g.recruiter>> launched <<their $g.recruiter>>
carefully prepared arguments in an attempt to recruit the wizard into your company.
<<if $g.recruiter.isHasTrait('per_studious')>>
The studious <<urace $g.recruiter>> had prepared quite a lengthy opening arguments for this.
<<elseif $g.recruiter.isHasTrait('per_gregarious')>>
<<Their $g.recruiter>> eloquence added weight to the arguments.
<<elseif $g.recruiter.isHasTrait('magic_earth')>>
As a fellow practitioner of earth magic, <<their $g.recruiter>> words carried more weight
than normal.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
After a long winded argument, <<rep $g.leader>> finally saw the benefits of joining
your slavers temporarily, and happily agreed to the deal. <<They $g.leader>>
left the management of <<their $g.leader>> caverns in <<their $g.leader>> absence
to <<their $g.leader>> student, who <<they $g.leader>> had no doubt will one day be worthy
of <<their $g.leader>> title.
As a piece of goodwill, <<rep $g.leader>> also brought the well-gaped slave
from the ritual back home to be used for whatever you see fit.
</p>
<<else>>
<p>
<<Rep $g.recruiter>> really tried to give <<their $g.recruiter>> best arguments to recruit
the wizard, but <<they $g.leader>> was not impressed. Still, the arguments and
efforts that your slavers had managed to muster seemed to have an effect, and
instead <<they $g.leader>> agreed to send one of <<their $g.leader>> students over to
your company to advance the student's trainings. As a piece
of goodwill, <<they $g.leader>> also offered your slaver the well-gaped slave
from the ritual to be brought back home as a present.
</p>
<p>
From the unnaturaly meekness exuded by the student-turned-slaver, your slavers couldn't shake the
feeling that <<they $g.student>> being a "student" must had been a mere facade...
</p>
<</if>><<set $g.support = $g.recruiter>>
<<include 'Quest_gorgon_cave__raidFailure'>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'born_tigerkin', /* key */
"Ancient Tigerkin", /* name */
'An ancient tigerkin awakened from their long imprisonment by your company', /* name */
'a|is an ancient tigerkin who was awakened from a|their long stony imprisonment by your company',
10000, /* slave value */
{
brawn: 5,
},
)>>
<<run new setup.UnitGroup(
"anal_overload0",
"Male Tigerkin Statue",
'subrace_tigerkin_male', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.anus_gape]),
setup.qc.Mindbreak('unit'),
setup.qc.AddTitle('unit', 'born_tigerkin'),
],
)>> <<run new setup.UnitGroup(
"anal_overload1",
"Female Tigerkin Statue",
'subrace_tigerkin_female', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.anus_gape]),
setup.qc.Mindbreak('unit'),
setup.qc.AddTitle('unit', 'born_tigerkin'),
],
)>>
<<set _criteriaanal1 = new setup.UnitCriteria(
null, /* key */
'Analer', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.magic_earth_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
],
{
arcane: 1,
sex: 2,
}
)>>
<<set _criteriaanal2 = new setup.UnitCriteria(
null, /* key */
'Analer', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.magic_earth_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
],
{
arcane: 1,
sex: 2,
}
)>>
<<set _res = setup.qc.IfThenElse(
setup.qres.Actor('gender', setup.qres.Trait(setup.trait.gender_male)),
setup.qc.DoAll([
setup.qc.AddTag('tigerkinmale', 'quest_neko_statue_marker'),
setup.qc.Slave('tigerkinmale', "a|was an ancient tigerkin prisoner that you freed from a|their stony prison", undefined),
]),
setup.qc.DoAll([
setup.qc.AddTag('tigerkinfemale', 'quest_neko_statue_marker'),
setup.qc.Slave('tigerkinfemale', "a|was an ancient tigerkin prisoner that you freed from a|their stony prison", undefined),
]),
) >>
<<set _criteriaanal3 = new setup.UnitCriteria(
null, /* key */
'Analer', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.magic_earth_master,
],
[
],
[
setup.qres.Job(setup.job.slaver),
],
{
arcane: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'anal_overload', /* key */
"Anal Overload", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'prep',
'unit',
'veteran',
'special',
],
1, /* weeks */
setup.INFINITY, /* expiration weeks */
{ /* roles */
'anal1': [ _criteriaanal1, 1],
'anal2': [ _criteriaanal2, 1],
'anal3': [ _criteriaanal3, 1],
},
{ /* actors */
'gender': 'all',
'tigerkinmale': 'anal_overload0',
'tigerkinfemale': 'anal_overload1',
},
[ /* costs */
],
'Quest_anal_overload',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_anal_overloadCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_anal_overloadCrit',
[
setup.qc.RemoveTagGlobal('quest_neko_statue_marker'),
_res,
],
],
[
'Quest_anal_overloadCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_anal_overloadCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
According to the tomes, the magic binding these tigerkins are concentrated in
the pole lodged deep within their anus. These statues with no exception are held upright by a
cruelly shoved stone dildo impaled from below. The dildos
are enchanted with magic, keeping these poor tigerkins barely alive in their statue
form.
</p>
<p>
The surest way to break these enchantment is by overloading the dildo. That
is, by shoving in even more dicks inside the already gaping anus of the tigerkin. But while
more recent statues can be broken by just impaling a second dick alongside them, this
particular statue you have been frozen for so long that <<yourrep _u>> estimate it
would take around three more sufficiently large dicks to break the curse.
</p>
<p>
The ideal way to do this is by having three slavers, each either possessing a
huge dick or bigger, or possessing mastery in earth magic, which can then
substitute the dick with the unworldy tentacles.
Failing that, you can always buy a large dildo for this occassion, but it has
to be suitably enchanted, which will not come cheap. <<Rep _u>> estimates
that each such dildo will set you back by around <<money 5000>>.
</p>
<p>
The ritual itself is simple, fortunately. It's just a matter of deciding how
much you are willing to shell out for this potential slave...
</p><p>
The preparations were complete.
<<Reps $g.anal1>>
<<if $g.anal1.isHasTrait('dick_huge')>>
<<udick $g.anal1>>,
<<elseif $g.anal1.isHasTrait('magic_earth_master')>>
tentacles,
<<else>>
enchanted dildo,
<<run setup.qc.Money(-5000).apply($gQuest)>>
<</if>>
<<reps $g.anal2>>
<<if $g.anal2.isHasTrait('dick_huge')>>
<<udick $g.anal2>>,
<<elseif $g.anal2.isHasTrait('magic_earth_master')>>
tentacles,
<<else>>
enchanted dildo,
<<run setup.qc.Money(-5000).apply($gQuest)>>
<</if>>
and
<<reps $g.anal3>>
<<if $g.anal3.isHasTrait('dick_huge')>>
<<udick $g.anal3>>
<<elseif $g.anal3.isHasTrait('magic_earth_master')>>
tentacles
<<else>>
enchanted dildo
<<run setup.qc.Money(-5000).apply($gQuest)>>
<</if>>
at the ready, your slavers approached the statue from behind. There, they try
their earnest to fit their respective phalluses all together alongside the
already huge stone dildo. Even with the visibly gaping hole from decades of abuse, it
still took your slavers a lot of effort to shove all their phalluses in, but
when all of them were lodged simultaneously inside, a loud popping sound could be heard.
</p>
<p>
The statue started to melt, and the tigerkin's expression quickly switch to
those of intense pain, having <<their $g.gender>> hole stretched far beyond
its original intention. Your slavers kept their phalluses inside, drawing
pained moan and scream from the melting tigerkin until the ritual ended, with
the tigerkin fully spent. Having spent years statue-fied meant that the
tigerkin's mind had long gone by now, and the pain reaction was merely
automatic physiological reflex. With the tigerkin fully melted, your slavers brought the
new toy back to the dungeons, successful in their mission.
</p>
<p>
<<if $g.anal1.isHasTrait('per_chaste')>>
Having to so painfully penetrated such a tight hole together with other slavers makes
the chaste slaver <<rep $g.anal1>>
question their chosen occupation...
<<run setup.qc.TraumatizeRandom('anal1', 9).apply($gQuest)>>
<<elseif $g.anal1.isHasTrait('per_lustful')>>
Having done such a depraved multi-penetration brought a smile to the lustful
slaver <<rep $g.anal1>>...
<<run setup.qc.BoonizeRandom('anal1', 9).apply($gQuest)>>
<<elseif $g.anal1.isHasTrait('per_cruel')>>
Having inflicted such massive amount of pain to an unwitting slave brought joy to the cruel slaver <<rep $g.anal1>>...
<<run setup.qc.BoonizeRandom('anal1', 9).apply($gQuest)>>
<<elseif $g.anal1.isHasTrait('per_dominant')>>
Having inserted their chosen phallus to such an ancient and rare hole brought confidence to the dominant slaver <<rep $g.anal1>>...
<<run setup.qc.BoonizeRandom('anal1', 9).apply($gQuest)>>
<</if>>
</p>/* PROOFREAD COMPLETE */
<<set _criteriaadventurer1 = new setup.UnitCriteria(
null, /* key */
'Elven Ruins Specialist', /* name */
[
setup.trait.race_elf,
setup.trait.bg_adventurer,
setup.trait.per_brave,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.skill_animal,
setup.trait.magic_earth_master,
],
[
setup.trait.race_human,
setup.trait.race_catkin,
setup.trait.per_cautious,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
knowledge: 1,
arcane: 1,
}
)>>
<<set _criteriaadventurer2 = new setup.UnitCriteria(
null, /* key */
'Elven Ruins Specialist', /* name */
[
setup.trait.race_elf,
setup.trait.bg_adventurer,
setup.trait.per_brave,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.skill_animal,
setup.trait.magic_earth_master,
],
[
setup.trait.race_human,
setup.trait.race_catkin,
setup.trait.per_cautious,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
knowledge: 1,
arcane: 1,
}
)>>
<<set _criteriapet = new setup.UnitCriteria(
null, /* key */
'Pet', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.ears_neko, setup.trait.arms_neko, setup.trait.mouth_neko, setup.trait.legs_neko, setup.trait.tail_neko, setup.trait.body_neko, setup.trait.training_pet_master, setup.trait.eq_pet], true),
setup.qres.HasTitle('quest_houndmaster_s_sniffer_0'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'ancient_elven_prison', /* key */
"Ancient Elven Prison", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'unknown',
'prep',
'veteran',
'rare',
],
6, /* weeks */
24, /* expiration weeks */
{ /* roles */
'adventurer1': [ _criteriaadventurer1, 1],
'adventurer2': [ _criteriaadventurer2, 1],
'muscle': [ setup.qu.carrier, 1],
'pet': _criteriapet,
},
{ /* actors */
'gender': 'all',
},
[ /* costs */
],
'Quest_ancient_elven_prison',
setup.qdiff.hardest46, /* difficulty */
[ /* outcomes */
[
'Quest_ancient_elven_prisonCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyCustom(10000),
setup.qc.SlaveMarker('gender'),
],
],
[
'Quest_ancient_elven_prisonCrit',
[
setup.qc.SetCooldownQuest(null, 35),
setup.qc.Opportunity('tigerkin_statue', {
gender: "gender",
}),
],
],
[
'Quest_ancient_elven_prisonFailure',
[
setup.qc.Injury('adventurer2', 4),
setup.qc.Injury('muscle', 4),
setup.qc.MissingUnit('adventurer1'),
setup.qc.QuestDirect('ancient_elven_prison'),
],
],
[
'Quest_ancient_elven_prisonDisaster',
[
setup.qc.MissingUnit('muscle'),
setup.qc.Leave('adventurer1', "stepped onto a teleporting trap and a|was teleported somewhere far. a|They will make a|their way back to your company in due time", 12),
setup.qc.MissingUnitRebuy('adventurer2', 1),
setup.qc.QuestDirect('ancient_elven_prison'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoQuest('anal_overload'),
setup.qres.HasUnitWithTitle('quest_houndmaster_s_sniffer_0', {
job_key: 'slave'
}),
],
[ /* expiration outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><<set _u = setup.getAnySlaver()>>
<p>
The <<lore region_forest>> is full of ancient ruins, from bygone era when
ancient elves and tigerkins inhabited the land. However, thanks to the elven
enchantments which are still present until today, most of these ruins are hidden
from human eyes and has so far remains mostly untouched.
</p>
<p>
Normally, it would be impossible for anyone to breach these compounds. But
<<yourrep _u>> reminded you that currently you are being lent a certain
tigerkin pet with you blessed with a very keen nose. As the history books tell, some
tigerkins are capable of sniffing out these ancient enchanted ruins, and
discover them even without breaking the enchantment.
Perhaps this particular pet can be used for that...
</p>
<p>
You could try to send the pet together with a group of slavers on an
adventure to the forests. With the pet on a leash, with luck it'll sniff its
way to one of the ruins. From the history books, you have learned the
location of one of the ancient elven prisons situated within the forests.
There might be valuables and dangers lurking inside, so best prepare your
team!
</p><p>
Fully geared with puppy gear, <<rep $g.pet>> pet|was led by your slavers to
scour the woods. While the first week looked fruitless, in the second week the
pup suddenly stopped mid-walk and began to sniff the surrounding
suspiciously. <<They $g.pet>> then suddenly begged for your slavers to go on
a certain direction, no doubt feeling something inhabiting the place.
</p>
<p>
Soon enough, your slavers can feel the air around them suddenly turned
ancient, and the open field before them morphed into an ancient building — no
doubt the ancient elven prison they had been looking for. It looked both
derelict and pristine, with ancient pots still unsmashed. But instead of
looking like a regular prison, the ancient elves seemed to use their
petrification magic to store their prisoners. Lines and lines of ancient
tigerkin statues filled the halls, no doubt prisoners of some bygone era forced
into a petrified state.
</p>
<p>
Many of the statues were placed behind magically barred barrier, which meant
that your slavers were unable to get these highly valuable statues. But <<rep
$g.adventurer2>> <<uadv $g.adventurer2>> stumbled into what seems to be the
interrogation room, and therein lied a single pristine tigerkin statue.
<<if $g.gender.isHasDick()>>
Like all other male tigerkin statues, his dick is permanently erect and
leaking what seems to be precum.
<<else>>
Like all the female tigerkin statues, her pussy is permanently wet and
leaking what seems to be girlcum.
<</if>>
Thanking their luck, your slavers decided to bring the statue as a valuable
loot back home, and <<yourrep $g.muscle>> heaved the heavy statue up to be carried
away.
<<if $g.muscle.isHasTrait('muscle_verystrong')>>
<<Rep $g.muscle>> looked mildly fatigued by the end of the adventure,
but that's still exceptional considering how heavy the statue must have weighted.
<<Their $g.muscle>> <<ubody $g.muscle>> certainly did good work.
<<elseif $g.muscle.isHasTrait('muscle_strong')>>
<<Rep $g.muscle>> looked mildly fatigued by the end of the adventure,
but that's still exceptional considering how heavy the statue must have weighted.
<<Their $g.muscle>> <<ubody $g.muscle>> certainly did good work.
<<else>>
<<Rep $g.muscle>> muscle|was completely exhausted by the end of the adventure,
<<therace $g.muscle>> not really build to lug such a heavy statue around.
<<run setup.qc.Injury('muscle', 1).apply($gQuest)>>
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
As luck would have it, <<rep $g.adventurer2>> accidentally uncovered a hidden
door when <<they $g.adventurer2>> <<uadv $g.adventurer2>> leaned on it for a
little break. Your slavers found valuables behind, which they pawned along the
way for a large sum of money.
</p>
<</if>>
<p>
Your pet never broke character throughout the adventure, and <<rep
$g.adventurer1>> rewarded the obedient puppy with a treat at the end of the
adventure. <<if $g.adventurer1.isHasDick()>> Fresh cream straight from the
eclair — which the puppy eagerly sucked dry.<<else>>
Fresh juice straight from the melons — which the puppy eagerly lapped up.
<</if>> Such was the happy daily life of the puppy in your company.
</p>
<p>
Pet aside, now you have to decide what to do with this tigerkin statue of yours...
</p><p>
Unfortunately, the pet <<reps $g.pet>> nose was not as keen as your slavers
had thought. <<They $g.pet>> instead led your slavers into one of the ancient
elven traps, and <<rep $g.adventurer1>> fell victim to the trap, being
teleported to who knows where. Your other slavers were not completely
unharmed either, having stepped into arrow traps which grazed some of them.
In the end, your remaining slavers returned home with the bad news. All the
while <<rep $g.pet>> stared with puppy eyes towards you and your slavers, and
nobody had the heart to punish such a good little puppy.
</p>
<p>
At least you can always give the quest another attempt, perhaps with a different team this time.
</p><p>
Unfortunately, the pet <<reps $g.pet>> nose was not as keen as your slavers
thought. <<They $g.pet>> instead led all of the team into a big ancient
elven teleporting trap, which teleported all of them all around the place.
<<Rep $g.adventurer1>> adventurer1|was teleported to a faraway land, but a
safe one and should return to your company given some time. <<Rep
$g.adventurer2>> adventurer2|was not as lucky, and got teleported into
another slaver company, which you happenped to get in contact with. You can
rebuy <<them $g.adventurer2>> immediately. And nobody knew where <<rep
$g.muscle>> muscle|was teleported to...
All the while <<rep $g.pet>> pet|was conveniently teleported back to your
office, and stared with you in confusion about everything that have just unfolded.
</p>
<p>
At least you can always give the quest another attempt, perhaps with a different team this time.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"the_dog_whisperer0",
"Dog Whisperer",
'forest_all', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.skill_animal]),
setup.qc.BgTraitReset('unit', setup.trait.bg_hunter),
],
)>>
<<set _criteriawhisperer = new setup.UnitCriteria(
null, /* key */
'Dog Whisperer', /* name */
[
setup.trait.bg_hunter,
setup.trait.per_proud,
setup.trait.per_playful,
setup.trait.per_dominant,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.bg_slave,
setup.trait.muscle_extremelythin,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_humble,
setup.trait.per_serious,
setup.trait.per_submissive,
setup.trait.skill_intimidating,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.skill_animal),
],
{
survival: 1.5,
slaving: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'houndmastery', /* key */
"Houndmastery", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'order',
'upgrade',
'forest',
'prep',
'rare',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'whisperer': [ _criteriawhisperer, 1],
'scout1': [ setup.qu.scout_forest, 1],
'scout2': [ setup.qu.scout_forest, 1],
'slave': setup.qu.slavepet,
},
{ /* actors */
'master': 'the_dog_whisperer0',
'pet': 'forest_all',
},
[ /* costs */
],
'Quest_houndmastery',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_houndmasteryCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.pet_good),
],
],
[
'Quest_houndmasteryCrit',
[
setup.qc.SetCooldownQuest('houndmastery', 20),
setup.qc.VarRemove('houndmaster_pets_delivered'),
],
],
[
'Quest_houndmasteryFailure',
[
setup.qc.SetCooldownQuest('houndmastery', 10),
setup.qc.Trait('pet', setup.trait.training_obedience_basic),
setup.qc.Trait('pet', setup.trait.training_pet_basic),
setup.qc.Slave('pet', "a|was a stray pet your slavers found in the forest, when looking for the Houndmaster", undefined),
setup.qc.Ire('neko', 10),
],
],
[
'Quest_houndmasteryDisaster',
[
setup.qc.SlaverMarker('master'),
setup.qc.SlaveMarker('pet'),
setup.qc.SetCooldownQuest('houndmastery', 10),
setup.qc.Injury('whisperer', 6),
setup.qc.Injury('scout1', 4),
setup.qc.Injury('scout2', 4),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _i = setup.item.technology_petmaster>>
<<set _u = setup.getAnySlaver()>>
<p>
There are whispers of a legendary hound<<master $g.master>> living somewhere
in the <<lore region_forest>>. According to <<yourrep _u>>, when it comes to taming
beasts, the hound<<master $g.master>> is second to none. In fact, it is
rumored that <<they $g.master>> master|have even managed to tame the most
dangerous beast of all — fellow human-likes — and <<their $g.master>> abode is stuffed
full of loving and perfectly obedient pets of various races.
</p>
<p>
Recently, the hound<<master $g.master>> is looking for additional exotic pets
to add to <<their $g.master>> loving care — two trained pets that are
opposites of each other, to help liven up <<their $g.master>> abode. This
could be a job for you, but what rewards would it bring?
</p>
<<if $inventory.isHasItem(_i)>>
<p>
While you've already obtained the <<rep _i>> from the good ol' hound<<master
$g.master>> some time ago, it couldn't hurt to get on the <<man $g.master>>'s
better side. If anything, you bet there are still a trick or two the
hound<<master $g.master>> could teach you and your company...
</p>
<<else>>
<p>
You have always wanted to know the secrets to training pets, and your
instincts are screaming right now that this might be the lead you need to get
that elusive <<rep _i>>. It's still terribly unclear what kind of slaves the
hound<<master $g.master>> wanted, but anything would be worth the price for
<<rep _i>>.
</p>
<</if>>
<p>
To take on this job, you absolutely need a slaver gifted in <<rep
setup.trait.skill_animal>>, as the hound<<master $g.master>> is very picky
when it comes to guests, and only show respect to those of similar talents.
On top of that, two scouts familiar with the forests are preferable to help
guide the whisperer to the hidden abode.
</p><p>
It took several weeks, but after dredging through the vast forests, <<rep
$g.scout1>> and <<utheirrel $g.scout1 $g.scout2>> <<rep $g.scout2>>
found the hidden abode almost by pure chance.
They were immediately greeted by a <<urace $g.pet>>,
in full pet gear. <<They $g.pet>> pet|ran on all fours to your
slavers before starting to bark at your slavers, just like a proper guard dog.
</p>
<p>
<<Yourrep $g.whisperer>> however had <<their $g.whisperer>> way with animals,
and the pet was not an exception. With a few whispers, the pet stopped
barking, before starting to lick <<reps $g.whisperer>> <<ucfeet
$g.whisperer>>. Seeing the pet calmed down, <<rep $g.whisperer>> allowed
<<their $g.whisperer>> own pet <<rep $g.slave>> to go out and play, and the
two human-like pets started to circle and lick each others.
</p>
<p>
Hearing the commotion, the head of the abode came out of the house,
accompanied with several more human-like pets. Seeing its owner, <<therace
$g.pet>> ran away from your slavers into <<their $g.pet>> owner, leaving your slavers and
their pet slave alone. As the slaves were busy licking <<their $g.master>> <<master $g.master>>'s
boots, the hound<<master $g.master>> greeted your slavers warmly, after
seeing a fellow animal enthusiast in <<rep $g.whisperer>>. The two then
engaged in a talk almost as if they were in their own world, and as if
<<rep $g.scout1>> and <<rep $g.scout2>> did not exists at all. All the while the pets
were busy servicing their owner's boots.
</p>
<<set _i = setup.item.technology_petmaster>>
<p>
<<Rep $g.whisperer>> managed to gather the important information regarding
the pet specifications that the hound<<master $g.master>> would like to have delivered to
<<their $g.master>> abode. Two pets, in fact, and should be properly trained
as a pet. More than that, however, the hound<<master $g.master>> is looking
to spice up <<their $g.master>> living abode by having the two pets paired as
polar opposites, since it'll be fun to see the two very different animals
playing with each other.
</p>
<p>
Their goal complete, your slavers agreed to deliver the slave order to your
company. As for the rewards, there is nothing to fear — the hound<<master
$g.master>> master|have plenty of secrets to share,
<<if $inventory.isHasItem(_i)>>
including a particularly rare pet that <<they $g.master>> might be willing to
lend to your company for some time.
<<else>>
including the elusive <<rep _i>>.
<</if>>
All you have to do now is to fulfill the slave order, which will no doubt be quite a challenge.
<<if $gOutcome == 'crit'>>
As a down-payment, the hound<<master $g.master>> called for one of <<their
$g.master>> hounds, before unlocking one of its valuable pet-gear and handed
it over to your slavers.
<</if>>
</p>
<p>
Back at your fort, you look at the particulars of the slave orders. Two
slaves, both trained in pet training.
<<if $gQuest.getSeed() % 4 == 0>>
One strong and one weak,
<<set _traits = ['muscle_strong', 'muscle_thin']>>
<<elseif $gQuest.getSeed() % 4 == 1>>
One playful and one serious,
<<set _traits = ['per_playful', 'per_serious']>>
<<elseif $gQuest.getSeed() % 4 == 2>>
One tough and one nimble,
<<set _traits = ['tough_tough', 'tough_nimble']>>
<<elseif $gQuest.getSeed() % 4 == 3>>
One chaste and one lustful,
<<set _traits = ['per_chaste', 'per_lustful']>>
<</if>>
both to be delivered within 4 months.
Better start working capturing the appropriate slaves if you want to fulfill
the order.
</p>
<<for _itrait range _traits>>
<<run setup.qc.SlaveOrderHoundmastery(_itrait).apply($gQuest)>>
<</for>><p>
Your slavers got lost in the forest, no small part thanks to <<reps
$g.scout1>> incompetence. But during the venture in the forests, they
encountered what appeared to be a stray human-like pet, wondering alone in the
forest on all fours. Your slavers took the <<rep $g.pet>> as a consolation
prize and brought it back home, as the company can always use more pets!
</p>
<p>
Little did they know that they were just a few steps away from the
hound<<master $g.master>> abode.
Worse still, they actually stole one of <<their $g.master>> in-training pets,
which will surely anger <<them $g.master>>.
Oh well, there is always next time if you want to go look for <<them
$g.master>> again!
</p><p>
It took several weeks, but after dredging through the vast forests <<rep
$g.scout1>> and <<utheirrel $g.scout1 $g.scout2>> <<rep $g.scout2>> finally
found the hidden abode. They were immediately greeted by a <<urace
$g.pet>>, in full pet gear. <<They $g.pet>> ran on all fours to your slavers
before starting to bark at your slavers, just like a proper guard dog.
</p>
<p>
As <<rep $g.whisperer>> tried to calm the guard dog, the guard dog viciously attacked your slavers
without warning. In the end, your slavers were no match for the
well-trained watchdog, and they retreated back to safety to nurse their wounds.
</p>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'the_essence_of_life', /* key */
"The Essence of Life", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* costs */
setup.qc.LoseItem('healing_potion', 10),
],
'Quest_the_essence_of_life',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_essence_of_lifeCrit',
[
setup.qc.Event('the_sour_and_salty_taste', 15, {
slaver: "slaver",
}),
],
],
[
'Quest_the_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewdityEssenceOfLifeCommon">>
<p>
You have chosen to supply 10 bottles of <<rep setup.item.healing_potion>>.
You'd have to deliver them yourself once you gathered enough of them, but it
shouldn't take too long.
</p><p>
After a few days, the Plant of Lewdity that <<yourrep $g.slaver>> had been
tending to sprouted.
But this is only the first step towards finishing <<reps $g.slaver>>
attempt to master <<their $g.slaver>> <<rep setup.trait.magic_earth_master>>,
but it's an important step nonetheless.
</p>
<p>
The Plant of Lewdity is rather special, and requires very specific
nourishment to grow strong and healthy. <<Rep $g.slaver>> must channel
<<their $g.slaver>> <<rep setup.trait.magic_earth>> magic every single day
into the plant, imbuing it with magic. But on top of that, there are extra
nourishment that the plant will require from time to time, including right
now.
</p>
<p>
Apparently, the plant requires so much energy that the nutrients inside the earth itself won't
be sufficient to support it. <<Rep $g.slaver>> estimated that some
essence of life would be beneficial as fertilizer for the plant, and since
<<they $g.slaver>> slaver|is going to be fully occupied taking care of the plant,
<<therace $g.slaver>> decided to ask for your help.
</p><p>
You handed over the potion to your slaver, who proceed to uncork one bottle
and generously spray it on the sapling. Before your eyes, you could see the
reddish liquid being absorbed very quickly by the roots, the ground drying almost
instantly.
<<if $g.you.isHasTrait('magic_earth_master')>>
Being a practitioner of <<rep setup.trait.magic_earth_master>> yourself, you
can definitely feel the plant's power growing from absorbing the liquid. A
strange feeling.
<<elseif $g.you.isHasTrait('magic_earth')>>
Being a beginner practitioner of <<rep setup.trait.magic_earth>>, you can
definitely sense that the plant was doing something with the liquid, but it was
quite vague.
<<else>>
Having no knowledge of earth magic, you could only guess whether it was actually
absorbed by the plant, or you were duped into buying a false healing potion...
<</if>>
</p>
<p>
All that's left is to wait for the plant to continue to grow, under the
supervision of <<yourrep $g.slaver>>...
</p>/* PROOFREAD COMPLETE */
<<set _criteriagardener = new setup.UnitCriteria(
null, /* key */
'Gardener', /* name */
[
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.bg_farmer,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.race_human,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.skill_flight,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.magic_earth], true),
],
{
knowledge: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_plant_of_lewdity', /* key */
"The Plant of Lewdity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'veteran',
'prep',
'trait',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'gardener': [ _criteriagardener, 1],
'biologist': [ setup.qu.biologist, 1],
'guard': [ setup.qu.guard, 1],
},
{ /* actors */
},
[ /* costs */
setup.qc.Money(-10000),
],
'Quest_the_plant_of_lewdity',
setup.qdiff.hardest48, /* difficulty */
[ /* outcomes */
[
'Quest_the_plant_of_lewdityCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Money(5000),
],
],
[
'Quest_the_plant_of_lewdityCrit',
[
setup.qc.Event('the_essence_of_life', 2, {
slaver: "gardener",
}),
setup.qc.SetCooldownQuest(null, 10000),
setup.qc.Leave('gardener', "a|is busy tending to the Plant of Lewdity in order to master earth magic", undefined),
],
],
[
'Quest_the_plant_of_lewdityCrit',
[
setup.qc.TraitIncreaseExisting('gardener', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('gardener', setup.trait.vagina_gape),
setup.qc.SetCooldownQuest(null, 10),
],
],
[
'Quest_the_plant_of_lewdityCrit',
[
setup.qc.MissingUnit('gardener'),
setup.qc.Corrupt('gardener', null, 2),
setup.qc.SetCooldownQuest(null, 10),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.AllTraits([setup.trait.magic_earth], true),
setup.qres.NotYou()
]),
],
[ /* expiration outcomes */
],
)>><p>
People gifted with <<rep setup.trait.magic_earth_master>> are usually born with the
talent, and there are extremely few instances where those gifted with <<rep
setup.trait.magic_earth>> can upgrade their mastery.
However, if one is sufficiently insistent, it can be done with the assistance
of the so-called Plant of Lewdity. This incredibly rare plant is grown by
some sect of elves living in the <<lore region_forest>>, and these elves make
their living by selling seeds of these plants at an astronomical price.
</p>
<p>
Since you have a slaver under your employ gifted with <<rep
setup.trait.magic_earth>>, it might be worth the efforts and money to
purchase one of the seeds from these elves. However, on top of the expensive
price, there is also the matter of growing the plant to maturity, which will no
doubt takes a lot of time and efforts from your company. But should you wish to go
along with the idea, best send the prospective slaver together with a
biologist and a guard to ensure the purchase go as expected.
</p><p>
The elves live modestly in their encampments, and your slavers received
minimal hospitality from them.
But hospitality wasn't what your slavers
expected —
they were there for a sole reason: to get the seed to the Plant of Lewdity.
</p>
<p>
After your slavers showed the crate of coins they brought, one of the elves gave
the box containing the seed to your slavers. It looked like a regular seed to
<<rep $g.gardener>>, but
<<rep $g.biologist>> <<uadv $g.biologist>> convinced the team that it was the
real deal. After all, there was no mistaking that
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
faint scent of sourness, saltiness, and sweetness
<<elseif $gOutcome == 'failure'>>
faint scent of musk
<<else>>
faint scent of corruption
<</if>>
coming from the seed.
<<Rep $g.gardener>> could also sense a faint trace of power, which was
particularly attuned to <<their $g.gardener>> mastery over <<rep setup.trait.magic_earth>>.
<<if $gOutcome == 'crit'>>
Your slavers were able to negotiate a very good price for the seed, only
spending half of the money they brought.
<</if>>
Satisfied, your slavers exchanged the goods before heading back home to your fort.
</p>
<p>
The next step would be to grow the plant to maturity. This is an arduous
task, and <<yourrep $g.gardener>> will be fully occupied until the plant
matures, being unable to do any other task whatsoever. The Seed of Lewdity is
planted on a patch of land designated as a makeshift garden within your fort.
Until the plant matures, <<they $g.gardener>> must continuously channel
<<their $g.gardener>> <<rep setup.trait.magic_earth>> over into the plant,
forcing growth onto it.
</p>
<<if $gOutcome == 'failure'>>
<p>
However, something incredibly wrong happened on the next day.
When <<rep $g.gardener>> channeled <<their $g.gardener>> magic onto the plant,
the plant suddenly grew incredibly fast, before engulfing <<therace
$g.gardener>> with its tentacle-like vines.
By the time you've arrived at the garden, the plant had already entirely
covered your slaver,
pistoning its vines in and out of <<their $g.gardener>> <<uanus $g.gardener>>.
You had no choice but to order the plant cut to save your slaver, whose holes were
no doubt gaped by the ordeal if they were not already gaped to begin with...
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
However, something incredibly wrong happened on the second day. When <<rep
$g.gardener>> channeled <<their $g.gardener>> magic onto the plant, the plant
suddenly grew incredibly fast, before engulfing <<therace $g.gardener>> with
its tentacle-like vines. By the time you arrived at the makeshift garden,
neither the plant nor <<theslaver $g.gardener>> were anywhere to be seen...
<<uneedrescue $g.gardener>>
</p>
<<else>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<set _criteriacow1 = new setup.UnitCriteria(
null, /* key */
'Cum Cow', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.balls_large, setup.trait.balls_huge, setup.trait.balls_titanic], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_salty_taste_of_cum', /* key */
"The Salty Taste of Cum", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'cow1': _criteriacow1,
'cow2': _criteriacow1,
'cow3': _criteriacow1,
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_the_salty_taste_of_cum',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_salty_taste_of_cumCrit',
[
setup.qc.Leave('cow1', "a|is imbuing the Plant of Lewdity with the saltiness of cum", 15),
setup.qc.Leave('cow2', "a|is imbuing the Plant of Lewdity with the saltiness of cum", 15),
setup.qc.Leave('cow3', "a|is imbuing the Plant of Lewdity with the saltiness of cum", 15),
setup.qc.Event('the_sweet_taste_of_virginity', 20, {
slaver: "slaver",
}),
setup.qc.Mindbreak('cow1'),
setup.qc.Mindbreak('cow2'),
setup.qc.Mindbreak('cow3'),
],
],
[
'Quest_the_salty_taste_of_cumCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_salty_taste_of_cumCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_salty_taste_of_cumCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewditySaltyAndSourTasteOfMilkCommon">>
<p>
You have chosen to help out by supplying a steady amount of cum, to be
extracted over these months. This means you'll have to supply three cum cows
for the plant's pleasure. There are little that is left to your imagination
of what horrors the plant will inflict upon these slaves, who will be reduced
into nothing but nutrient source for the plant for months, and you best be
prepared that
<<dangertext "whoever slave you decide to lend will unlikely to come back mentally intact...">>
</p><p>
After 4 long months, the Plant of Lewdity has finally grown into a healthy
plant. Throughout the last few months, it greedily absorbs the nutrients from
the healing potions you've helped supply for it, and has grown into a sturdy
little plant.
</p>
<p>
Its caretaker, <<yourrep $g.slaver>>, is again asking you for help with the next
step. Apparently, the next step is to imbue the plant with essences that
represents saltiness and sourness — which apparently somehow translates to
milk and cum.
<<if $g.slaver.isHasTrait('skill_connected')>>
<<They $g.slaver>> slaver|is <<rep setup.trait.skill_connected>>, and would
have no issue whatsoever pulling strings to get these "ingredients",
<<else>>
<<They $g.slaver>> slaver|is quite resourceful, and would be able to obtain one of
the ingredients <<themself $g.slaver>>,
<</if>>
but would like to enlist your help to obtain the other.
</p><p>
<<Yourrep $g.slaver>> had the presence of mind to gag the slaves securely
before tying them next to the plant. Sensing food, the plant extended its tendrils,
before wrapping them securely in each of the slave's dicks and balls. The
slaves gagged and moaned as they felt their balls emptied over and over again,
experiencing the painful feeling of being forced to orgasm over, and over, and over
again, draining every single drop of cum from their overused balls...
</p>
<p>
Being treated like a living nutrient source will no doubt drain these slaves
of all their sanity as well, were they to have any to begin with.
Still, the plant seemed to become healthier over the next few days, no doubt also thanks to <<yourrep
$g.slaver>> who somehow managed to secure a bucket of fresh "milk" from some
other sources. All that's left is to wait it out and hope the plant grows big
and healthy...
</p>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<set _criteriacow1 = new setup.UnitCriteria(
null, /* key */
'Milk Cow', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.breast_large, setup.trait.breast_huge, setup.trait.breast_titanic], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_sour_taste_of_milk', /* key */
"The Sour Taste of Milk", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'cow1': _criteriacow1,
'cow2': _criteriacow1,
'cow3': _criteriacow1,
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* costs */
],
'Quest_the_sour_taste_of_milk',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_sour_taste_of_milkCrit',
[
setup.qc.Leave('cow1', "a|is imbuing the Plant of Lewdity with the sourness of milk", 15),
setup.qc.Leave('cow2', "a|is imbuing the Plant of Lewdity with the sourness of milk", 15),
setup.qc.Leave('cow3', "a|is imbuing the Plant of Lewdity with the sourness of milk", 15),
setup.qc.Event('the_sweet_taste_of_virginity', 20, {
slaver: "slaver",
}),
setup.qc.Mindbreak('cow1'),
setup.qc.Mindbreak('cow2'),
setup.qc.Mindbreak('cow3'),
],
],
[
'Quest_the_sour_taste_of_milkCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sour_taste_of_milkCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sour_taste_of_milkCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewditySaltyAndSourTasteOfMilkCommon">>
<p>
You have chosen to help out by supplying a steady amount of milk, to be
extracted over these months. This means you'll have to supply three humanlike
cows for the plant's pleasure. There is little left to your
imagination of what horrors the plant will inflict upon these poor slaves, who
will be reduced into nothing but nutrient source for the plant for months to come,
and you best be prepared that
<<dangertext "whoever slave you decide to lend will unlikely to come back
mentally intact...">>
</p><p>
<<Yourrep $g.slaver>> had the presence of mind to gag the slaves securely
tying them next to the plant. Sensing food, the plant extended its tendrils,
before wrapping them securely, attaching an extractor vine to each of the
slaves' nipples. The slaves gagged and moaned as they felt their breasts emptied
over and over again, the painful feeling of forced lactation filling their minds
as their breasts were drained of every single drop of milk.
</p>
<p>
Being treated like a living nutrient source will no doubt drain these slaves
of all their sanity, were they to have any to begin with. Still, the plant
seemed to become healthier over the next few days, no doubt also thanks to <<yourrep
$g.slaver>> who somehow managed to secure a bottle of fresh cockmilk from
some other source that you had the presence of mind not to ask. <<if
$g.slaver.isHasDick()>>You have the sneaking suspicion that some of them even
come from <<theslaver $g.slaver>> <<themself $g.slaver>>... Still, it does not matter
much.<</if>> All that's left is to wait it out and hope the plant grows big
and healthy...
</p>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<set _criteriavirgin1 = new setup.UnitCriteria(
null, /* key */
'Anal \"Virgin\"', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.anus_tight], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_sweet_taste_of_anal_virginity', /* key */
"The Sweet Taste of (Anal) Virginity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'virgin1': _criteriavirgin1,
'virgin2': _criteriavirgin1,
'virgin3': _criteriavirgin1,
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
],
},
[ /* costs */
setup.qc.Money(-1000),
],
'Quest_the_sweet_taste_of_anal_virginity',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_sweet_taste_of_anal_virginityCrit',
[
setup.qc.TraitReplace('virgin1', setup.trait.anus_gape),
setup.qc.TraitReplace('virgin2', setup.trait.anus_gape),
setup.qc.TraitReplace('virgin3', setup.trait.anus_gape),
setup.qc.Leave('virgin1', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Leave('virgin2', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Leave('virgin3', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Event('the_fruit_of_lewdity', 20, {
slaver: "slaver",
}),
setup.qc.Mindbreak('virgin1'),
setup.qc.Mindbreak('virgin2'),
setup.qc.Mindbreak('virgin3'),
],
],
[
'Quest_the_sweet_taste_of_anal_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sweet_taste_of_anal_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sweet_taste_of_anal_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewditySweetTasteOfVirginityCommon">>
<p>
As you have chosen to supply the plant with anal "virgin"s, you'll have to
supply three slaves whose backdoors are still relatively intact. You have no
doubt that bad, gaping things will happen to them though — being violated for
months continuously tend to do that — so <<dangertext "be prepared for the slaves' mind to be completely empited">>.
</p><p>
Throughout the week, the sounds of sploshing, pistoning, and gagged attempt
at screaming (which makes you appreciate <<reps $g.slaver>> good thinking to gag
the slaves) could be heard whenever you pass by near the makeshift farmyard. The
three slaves you had assigned were designated as the plant's
personal sex toy for the months to come.
The plant continually assaulted the poor slaves' holes
throughout the time, and about the only time it stopped was when <<yourrep
$g.slaver>> came in every now and then to imbue the plant with <<their $g.slaver>> magic.
</p>
<p>
This will continued for months, and by the end of the ordeal,
the slaves were nothing but drooling, gaping, completely broken pieces of toys.
</p>
<p>
And now, all that's left is to wait for the plant to finally bear its fruit...
</p>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<set _criteriavirgin1 = new setup.UnitCriteria(
null, /* key */
'\"Virgin\"', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.vagina_tight], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'the_sweet_taste_of_virginity', /* key */
"The Sweet Taste of Virginity", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'virgin1': _criteriavirgin1,
'virgin2': _criteriavirgin1,
'virgin3': _criteriavirgin1,
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* costs */
setup.qc.Money(-1000),
],
'Quest_the_sweet_taste_of_virginity',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_sweet_taste_of_virginityCrit',
[
setup.qc.Leave('virgin1', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Leave('virgin2', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Leave('virgin3', "a|is imbuing the Plant of Lewdity with the sweetness of virginity", 15),
setup.qc.Event('the_fruit_of_lewdity', 20, {
slaver: "slaver",
}),
setup.qc.Mindbreak('virgin1'),
setup.qc.Mindbreak('virgin2'),
setup.qc.Mindbreak('virgin3'),
setup.qc.TraitReplace('virgin1', setup.trait.vagina_gape),
setup.qc.TraitReplace('virgin2', setup.trait.vagina_gape),
setup.qc.TraitReplace('virgin3', setup.trait.vagina_gape),
],
],
[
'Quest_the_sweet_taste_of_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sweet_taste_of_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_sweet_taste_of_virginityCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewditySweetTasteOfVirginityCommon">>
<p>
As you have chosen to supply the plant with actual "virgin"s, you'll have to
supply three slaves whose vaginas are still relatively intact. You have no doubt
that bad, gaping things will happen to them though — being violated for
months continuously tend to do that — so <<dangertext "be prepared for the slaves' minds to be completely emptied">>.
</p><<include "Quest_the_sweet_taste_of_anal_virginityCrit">>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'you', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3.0,
}
)>>
<<run new setup.QuestTemplate(
'the_very_essence_of_life', /* key */
"The Very Essence of Life", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'special',
'prep',
'trait',
],
1, /* weeks */
10, /* expiration weeks */
{ /* roles */
'you': [_criteriayou, 3],
},
{ /* actors */
'slaver': [
setup.qres.Home(),
],
},
[ /* costs */
setup.qc.LoseItem('healing_potion_greater', 5),
],
'Quest_the_very_essence_of_life',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_the_very_essence_of_lifeCrit',
[
setup.qc.Event('the_sour_and_salty_taste', 15, {
slaver: "slaver",
}),
],
],
[
'Quest_the_very_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_very_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_the_very_essence_of_lifeCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Event('withering_plant', 0, {
slaver: "slaver",
}),
],
)>><<include "PlantOfLewdityEssenceOfLifeCommon">>
<p>
You have chosen to supply 5 bottles of <<rep setup.item.healing_potion_greater>>. You'd have to deliver them yourself once you gathered enough of them, but it shouldn't take too long.
</p><<include "PlantOfLewdityEssenceOfLifeCommon">>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'safari_zone_illegal_hunt2', /* key */
'Safari Zone: Illegal Hunt', /* Title */
'darko', /* Author */
[ 'forest', 'unit'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'hunter1': setup.qu.hunter,
'hunter2': setup.qu.hunter,
'thief': setup.qu.thief, },
{ /* actors */
'animal': 'forest_all',
'animal2': 'forest_all', },
[ /* costs */
],
'Quest_safari_zone_illegal_hunt2',
setup.qdiff.hard21, /* difficulty */
[ /* outcomes */
[
'Quest_safari_zone_illegal_hunt2Crit',
[
setup.qc.Outcomes('success'),
setup.qc.Slave('animal2', 'a|was a slave in the Safari Zone whom your slavers successfully hunted', undefined), ],
], [
'Quest_safari_zone_illegal_hunt2Success',
[
setup.qc.Slave('animal', 'a|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_hunt2Failure',
[
setup.qc.Injury('hunter1', 1),
setup.qc.Injury('hunter2', 1),
setup.qc.MoneyCrit(-1), ],
], ],
[
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><<include 'Opportunity_safari_zone'>>
<p>
You have chosen to send some of your slavers to try and poach some of the Safari Zone slaves.
</p><p>
The various animals in the Safari Zone developed diverse strategies — some banded
together, some tried to survive alone.
Your slavers decided to go look for one
of the slaves that decided to band together slave groups.
The group were able to spot your slavers —
panicking, they flushed into the open. Your slavers, tranquilizer arrows in <<uhand $g.hunter1>>,
managed to shot down one of the animals.
<<set _hunter = setup.selectUnit([$g.hunter1, $g.hunter2], {trait: 'bg_hunter'})>>
<<if _hunter>>
<<Rep $g.hunter1>> went into a hunter's groove -- the former hunter then
<<else>>
<<set _hunter = setup.selectUnit([$g.hunter1, $g.hunter2], {trait: 'per_attentive'})>>
<<if _hunter>>
<<Reps _hunter>> <<ueyes _hunter>> are quite a perceptive pair, and <<therace _hunter>>
<<else>>
<<set _hunter = $g.hunter1>>
<<Rep _hunter>> then
<</if>>
<</if>>
<<uadv $g.hunter1>>
took control of the bow and aimed straight at another animal —
arrow were loosened and <<rep $g.hunter1>> triumphantly shot another animal down, for a total of
two downed animals.
</p>
<p>
Your slavers had a good day and considered the hunt a success.
They tagged the downed slaves and smuggled them out of the safari, to be
delivered to your fort and began their new lives.
</p><p>
The various animals in the Safari Zone developed diverse strategies — some banded
together, some tried to survive alone.
Your slavers decided to go look for one of the lone slaves.
They spotted one of them currently sleeping, which made
it trivial for <<rep $g.hunter2>> to <<uadv $g.hunter2>>
subdue. Once the slave was down, your slavers considered the hunt successful.
They bagged the slave and smuggled <<them $g.animal>> out, back into your
fort.
</p><p>
The various animals in the Safari Zone developed diverse strategies — some banded
together, some tried 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.
<<if $gOutcome == 'failure'>>
Your slavers fortunately managed to dodge all of the arrows, but they still received bruises
and cuts from having to run through all the brambles along in the safari.
<<else>>
Unfortunately, your slavers were downed by the arrow.
In the next few days, your slavers returned to your fort with the Safari Zone's compliments,
together with a hefty bill addressed to you for the damages incurred.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'safari_zone_sell_slaves', /* key */
'Safari Zone: Sell Slaves', /* Title */
'darko', /* Author */
[ 'forest', 'order'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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 */
)>><<include 'Opportunity_safari_zone'>>
<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 was happy to buy slaves from upstanding slaver company
such as yourself, at their standard slave price of course. Furthermore, <<rep
$g.trader>>
<<if $g.trader.isHasTrait('skill_connected')>>
pulled some strings using <<their $g.trader>> vast network of connections and
<<else>>
trader|was so <<uadv $g.trader>> convincing that
<</if>>
<<they $g.trader>> trader|was able to negotiate
multiple slave orders 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>> trader|was able to <<uadv $g.trader>>
convince them that your company is capable of supplying 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>> trader|was unable to <<uadv $g.trader>>
fully convince them of your company's capabilities and reputation,
and ultimately only able to secure one deal for a slave to be sent to the safari.
</p>
<<include 'Quest_safari_zone_sell_slavescommon'>><p>
Unfortunately, the <<lore region_forest>> is a dangerous place, as your slavers learned the hard way.
They never made it to the safari zone as they were ambushed by neko hunters along the
way, who harried them all the way back to the fort with arrows.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"dowry_of_roses0",
"King of Elves",
'subrace_elf', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_royal),
setup.qc.TraitsReplace('unit', [setup.trait.per_smart, setup.trait.face_beautiful]),
],
)>>
<<set _criteriaprince = new setup.UnitCriteria(
null, /* key */
'Prince', /* name */
[
setup.trait.per_smart,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.per_frugal,
setup.trait.per_independent,
setup.trait.per_evil,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_human,
setup.trait.race_wolfkin,
setup.trait.race_catkin,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.per_lavish,
setup.trait.per_loyal,
setup.trait.per_honorable,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('tower_of_roses_obtained'),
setup.qres.LoverExist(),
],
{
survival: 0.6,
intrigue: 0.6,
knowledge: 0.6,
social: 0.6,
aid: 0.6,
}
)>>
<<set _criterialover = new setup.UnitCriteria(
null, /* key */
'Lover', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.race_elf,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_proud,
setup.trait.per_empath,
setup.trait.skill_entertain,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_demon,
setup.trait.height_dwarf,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_humble,
setup.trait.per_logical,
setup.trait.skill_flight,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.LoverExist(),
],
{
intrigue: 1,
social: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'dowry_of_roses', /* key */
"Dowry of Roses", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'prep',
'money',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'prince': [ _criteriaprince, 1],
'lover': [ _criterialover, 1],
'bodyguard': [ setup.qu.bodyguard, 1],
},
{ /* actors */
'king': 'dowry_of_roses0',
},
[ /* costs */
],
'Quest_dowry_of_roses',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_dowry_of_rosesCrit',
[
setup.qc.Outcomes("success"),
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.Actor('prince', setup.qres.RememberUnit()),
setup.qres.Actor('lover', setup.qres.BestFriendWithRememberedUnit())
]),
setup.qc.DoAll([
setup.qc.Equipment(setup.equipmentpool.social_good),
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_dowry_of_rosesCrit',
[
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.Actor('prince', setup.qres.RememberUnit()),
setup.qres.Actor('lover', setup.qres.BestFriendWithRememberedUnit())
]),
setup.qc.DoAll([
setup.qc.MoneyNormal(),
setup.qc.BoonizeRandom('prince', 9),
setup.qc.BoonizeRandom('lover', 9),
setup.qc.Friendship('prince', 'lover', 300),
setup.qc.SetCooldownQuest(null, 25)
], undefined),
setup.qc.DoAll([
], undefined)),
],
],
[
'Quest_dowry_of_rosesFailure',
[
setup.qc.SetCooldownQuest(null, 10),
],
],
[
'Quest_dowry_of_rosesDisaster',
[
setup.qc.MissingUnitRecapture('prince', 'capturedmedium'),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('tower_of_roses_obtained'),
setup.qres.LoverExist(),
])
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'tower_of_roses_obtained'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<<if $statistics.isHasSuccess('dowry_of_roses')>>
<p>
<<Yourrep _u>> misses <<their _u>> home once again, and is back with another
request to come back to <<their _u>> home in the forests. As you recall,
whenever <<they _u>> do so, <<they _u>> comes back with a sizeable bag of
gold from <<their _u>> kingdom's coffer, so it might be a good idea to give
<<therace _u>> a little break...
</p>
<p>
Make sure to keep up the disguise, however. <<Rep _u>> must be sent together
with <<their _u>> lover, as well as a slaver posing as their bodyguard.
</p>
<<else>>
<p>
<<Yourrep _u>> came to you today with an interesting offer. Apparently, the
once-noble missed <<their _u>> home back in the forests, and would like to
give <<their _u>> parents a visit. <<Their _u>> parents would obviously
object if <<they _u>> reveals that <<they _u>> is now working as a slaver
under your employ, so the plan is to disguise and appear as if <<they _u>>
had married with another noble from a faraway land, and came back home as a
gesture of goodwill.
</p>
<p>
Right before you refused such a stupid request, <<rep _u>> added that <<their
_u>> parents would surely be grateful, and the gratefulness will be weighted
in gold.
Now that's what you'd like to hear! For the plan to work, <<rep _u>> must be
sent together with <<their _u>> lover, and a slaver who will play as their
bodyguard.
</p>
<</if>>
<</if>><<if $g.prince.getLover() == $g.lover>>
<p>
After a few weeks, the pair of lovebirds who were sent to the <<lore
region_forest>> have returned, bringing a bag of money
<<if $gOutcome == 'crit'>>as well as a very valuable piece of clothing<</if>> with
them.
Apparently, <<their $g.prince>> <<mother $g.king>> was overjoyed seeing
<<their $g.king>> <<daughter $g.prince>> all grown up and married into such a
wonderful young <<man $g.lover>>, and lavished the pair with gifts of great
value.
</p>
<p>
Even though the trip was over, you notice that the pair and especially
<<rep $g.prince>> prince|look particularly happy and cheerful nowadays, with
a noticable lighter step on their feet.
Throughout the rest of the weeks, you noticed that <<yourrep $g.bodyguard>>,
who had watched over the two last few weeks,
<<if $g.bodyguard.isHasTrait('per_attentive')>>
keeps avoiding eye contact with the lovers.
<<elseif $g.bodyguard.isHasTrait('per_dreamy')>>
sometimes stares longingly at the lovers.
<<else>>
often blush whenever <<they $g.bodyguard>> see the lovers.
<</if>>
It seemed the pair of lovers were rather raunchy during their seclusion in
the trip, and with no other option, <<rep $g.bodyguard>> just had to witness
all the lovemaking...
</p>
<<else>>
<p>
Since <<rep $g.lover>> lover|is not <<reps $g.prince>> lover, they did not
end up going to <<reps $g.lover>> home and <<rep $g.bodyguard>> had to spent
most of the weeks listening to <<rep $g.lover>> rambling about how careless
you are. You should have sent <<their $g.prince>> lover instead...
</p>
<</if>><p>
Unfortunately, your slavers' disguise were broken by one of the castle
guards. Your slavers had to eventually buy off the guard's silence with most
of the money they gained from <<reps $g.prince>> <<mother $g.prince>> in the
castle. Your slavers returned home dejected, having lose most of their money
and most of their fun being blackmailed by an elven guard...
</p><p>
In a fit of possessive rage, <<reps $g.prince>> mother: the <<queen $g.king>>
of the castle, refused to let <<their $g.prince>> <<daughter $g.prince>> go
back to your fort, and locked <<them $g.prince>> away in a secluded tower.
<<Yourrep $g.lover>> came back home without <<their $g.lover>> lover, before
<<uadv $g.lover>> asking you to rescue <<them $g.prince>>.
<<urescuenow $g.prince>>, before <<they $g.prince>> prince|is locked permanently this time inside yet another tower in the forests...
</p>/* PROOFREAD COMPLETE */
<<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 */
'a|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 hopelessly romantic elven noble who sealed themselves in a thorny tower and fell for the wrong slaver', /* name */
'a|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",
'subrace_elf', /* pools */
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.face_beautiful,
setup.trait.per_smart,
setup.trait.per_lavish,
setup.trait.per_honorable,
setup.trait.skill_entertain,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
],
[
setup.trait.bg_laborer,
setup.trait.bg_farmer,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_frugal,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer, },
{ /* actors */
'prince': '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_rosesCrit',
[
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_rosesFailure',
[
setup.qc.SlaveMarker('prince'),
setup.qc.TraumatizeRandom('admirer', 10), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.NoUnitWithTitle('tower_of_roses_obtained'),
setup.qres.NoUnitWithTitle('tower_of_roses_admirer'),
],
[ /* expiration outcomes */
setup.qc.EmptyUnitGroup('quest_tower_of_roses1'),
],
)>><<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 flower petals. 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 began <<reps $g.admirer>> adventure to woo the <<prince $g.prince>>.
Whether or not <<they $g.admirer>> succeed will depend on your decisions...
</p><<include 'Quest_tower_of_roses2Failure'>>/* PROOFREAD COMPLETE */
<<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'admirer', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_smart,
setup.trait.per_lavish,
setup.trait.per_honorable,
setup.trait.skill_entertain,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
],
[
setup.trait.bg_laborer,
setup.trait.bg_farmer,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_frugal,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer, },
{ /* actors */
'prince': '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_roses2Crit',
[
setup.qc.VarAdd('tower_of_roses_affection', 35, -1),
setup.qc.MoneyNormal(), ],
], [
'Quest_tower_of_roses2Failure',
[
],
], [
'Quest_tower_of_roses2Failure',
[
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, setup.rarity.always],
],
[ /* 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 is now 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 were
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><<include 'Quest_tower_of_rosesDescCommon'>>
<<set _headunit = setup.getUnit({title: "tower_of_roses_admirer", job: setup.job.slaver})>>
<<if !_headunit>>
<<missingunitquest>>
<<else>>
<p>
You can continue <<reps _headunit>> 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 surrounded 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>>, <<yourrep
$g.admirer>> <<uadv $g.admirer>> delivered the
<<if $gOutcome == 'crit'>>
poem in such a masterful way.
<<else>>
poem.
<</if>>
<<if $g.admirer.isHasTrait('skill_entertain')>>
<<Their $g.admirer>> beautiful voice added to the atmosphere.
<</if>>
<<if $g.admirer.isHasAnyTraitExact(['bg_noble', 'bg_knight', 'bg_royal'])>>
<<Their $g.admirer>> noble bearings were quite noticable in the delivery.
<</if>>
<<if $g.admirer.isHasTrait('face_attractive')>>
<<Their $g.admirer>> <<uface $g.admirer>> shined through.
<</if>>
<<if $gOutcome == 'crit'>>
From the porch of <<their $g.prince>> tower, the <<prince $g.prince>>
couldn't help but completely swoon over the delivery, and by extension to
<<yourrep $g.admirer>>.
<<else>>
From the porch of <<their $g.prince>> tower, the <<prince $g.prince>> couldn't
help but admires <<reps $g.admirer>> charm.
<</if>>
</p>
<p>
<<if $varstore.get('tower_of_roses_affection') >= 65>>
It seems the prince is now deeply infatuated with <<yourrep $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
<<yourrep $g.admirer>>...
<<else>>
It seems that <<yourrep $g.admirer>> admirer|have caught the <<prince $g.prince>>'s attention...
<</if>>
</p><p>
Your slavers arrived at the hidden tower in the forest.
Sharp deadly thorns surrounded the entrance of the tower, barring anyone to come in or come out.
<<if $gOutcome == 'failure'>>
<<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 turned your slavers away.
<<else>>
<<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 built towards <<rep
$g.admirer>> were all gone and have to be rebuilt from scratch.
Being so completely rejected by the <<prince $g.prince>> left <<rep $g.admirer>>
slightly traumatized.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'Admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_smart,
setup.trait.per_lavish,
setup.trait.per_honorable,
setup.trait.skill_entertain,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
],
[
setup.trait.bg_laborer,
setup.trait.bg_farmer,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_frugal,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
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',
'ire',
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'kidnapper2': setup.qu.kidnapper,
'kidnapper1': setup.qu.kidnapper, },
{ /* actors */
'prince': 'quest_tower_of_roses1', },
[ /* costs */
],
'Quest_tower_of_roses__fatal_attraction',
setup.qdiff.hardest37, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_roses__fatal_attractionCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyCustom(3000),
],
], [
'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', "a|was a hopeless romantic who a|was betrayed by a|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_attractionFailure',
[
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><p>
<<Yourrep $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 subdued the surprised
<<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,
a proper ending to <<their $g.prince>> journey of love.
</p>
<p>
Having betrayed the <<princess $g.prince>>, <<yourrep $g.admirer>>
admirer|was deeply traumatized and will need a lot of time to recover.
</p><p>
Right before your slavers executed the plan, something snapped inside <<reps
$g.admirer>> head. In the middle of the night, <<they $g.admirer>> vanished
from the team, before reaching the tower clearing alone. There, <<they $g.admirer>>
sincerely begged for the <<princess $g.prince>> forgiveness, and tell <<them
$g.prince>> about the degenerate plan. By the time the rest of your slavers
arrived,
<<if $gOutcome == 'failure'>>
the <<prince $g.prince>> were already nowhere to be seen...
<<else>>
neither the <<prince $g.prince>> nor <<rep $g.admirer>> admirer|was
anywhere to be seen...
Perhaps you will see <<yourrep $g.admirer>> again one day, if <<they
$g.admirer>> admirer|is not too busy eloping with <<their $g.admirer>> <<prince
$g.prince>>.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<set _criteriaadmirer = new setup.UnitCriteria(
null, /* key */
'admirer', /* name */
[
setup.trait.bg_noble,
setup.trait.bg_knight,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_smart,
setup.trait.per_lavish,
setup.trait.per_honorable,
setup.trait.skill_entertain,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_valuable,
],
[
setup.trait.bg_laborer,
setup.trait.bg_farmer,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_slow,
setup.trait.per_frugal,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'admirer': _criteriaadmirer,
'writer': setup.qu.writer,
'performer': setup.qu.performer,
},
{ /* actors */
'prince': 'quest_tower_of_roses1',
},
[ /* costs */
],
'Quest_tower_of_roses__true_love',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_tower_of_roses__true_loveCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.knowledge_good),
setup.qc.BoonizeRandom('admirer', 10),
],
], [
'Quest_tower_of_roses__true_loveCrit',
[
setup.qc.Favor('elf', 200),
setup.qc.VarRemove('tower_of_roses_affection'),
setup.qc.MoneyCustom(1000),
setup.qc.Slaver('prince', "a|was a hopeless romantic who found a|their true love among 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_loveFailure',
[
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, <<yourrep $g.admirer>> <<uadv $g.admirer>>
delivered a heartstruck love poem towards the <<prince $g.prince>>. When the
poem ended, before your slavers' eyes the thorny rose surrounding the tower
all started to withdraw until there was nothing but beautiful rose petals
scattered around the tower, forming a carpet for <<therace $g.admirer>>.
Wasting no time, <<rep $g.admirer>> rushed inside the tower and into the
<<prince $g.prince>>'s chamber, who lied there waiting for your slaver. A
romantic scene ensued with the two embracing and kissing each other.
<<if $g.prince.isHasTrait('face_attractive')>>
Both lovers are quite attractive, and it made for a fairy-tale-like scene.
<<elseif $g.prince.isHasTrait('face_scary')>>
Despite <<rep $g.prince>> having a face unlike any prince in a story, their love
won out and the two made for quite a fairy-tale-like scene.
<</if>>
</p>
<p>
It was not difficult for <<yourrep $g.admirer>> to convince the madly in love
<<prince $g.prince>> to become one of your slavers.
</p>
<<if $gOutcome == 'crit'>>
<p>
To commemorate the occassion, the <<prince $g.prince>> used <<their
$g.prince>> connections to order an expensive piece of clothes to be made for <<their
$g.prince>> beloved.
</p>
<<else>>
<p>
Before going back, your slavers collected whatever valuables remained in the tower.
</p>
<</if>><p>
In such an important moment, nervousness gripped <<rep $g.admirer>> who
stuttered and failed to deliver the last and final poem.
The thorny roses never withdrew from the tower and your slavers will have to
rebuild some of the <<prince $g.prince>>'s affection to try again.
</p>
<<if $gOutcome == 'disaster'>>
<p>
The experience traumatized <<rep $g.admirer>> who regretted the turn of events greatly.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'rescue_ranger', /* key */
"Rescue Ranger", /* Title */
"darko", /* Author */
[
'special', 'unit', 'forest',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'spotter1': setup.qu.spotter,
'spotter2': setup.qu.spotter,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'target': 'missingslaves',
'ranger': '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_rangerCrit',
[
setup.qc.Injury('target', 5),
setup.qc.Outcomes('crit'),
],
], [
'Quest_rescue_rangerFailure',
[
setup.qc.Slave('target', "", true),
setup.qc.RemoveFromUnitGroup('target'),
],
], [
'Quest_rescue_rangerFailure',
[
setup.qc.Slave('target', "", true),
setup.qc.RemoveFromUnitGroup('target'),
setup.qc.MissingUnitRebuy('spotter1', 0.5), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.rescue, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.UnitGroupHasUnit(setup.unitgroup.missingslaves),
],
)>><p>
The dense <<lore region_forest>> is great place for fugitives and
other degenerates 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 owners also try to find their way there and lose
themselves from their former owners.
</p>
<p>
In fact, you have just heard the news that one of your former slaves,
<<rep $g.target>>, target|was somehow loose in the <<lore region_forest>>.
<<if $g.target.isMindbroken()>>
It is unclear how the mindbroken slave could end up in the forests — perhaps
<<their $g.target>> new owner simply grow bored with the slave and let <<them
$g.target>> go.
<<elseif $g.target.isHasTrait('training_obedience_advanced')>>
Given <<their $g.target>> training history, it was unlikely that <<they
$g.target>> chose to flee to the forests on <<their $g.target>> volition — most
likely <<their $g.target>> owner let the slave loose in the forest for fun
but somehow managed to lose track of the poor obedient 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
stray slaves. You can try to send a group of slavers to contact the ranger and
locate your long lost slave.
</p><p>
The ranger together with <<rep $g.spotter1>> and <<rep $g.spotter2>> methodically
scoured through the forests, looking for signs of the slave. It was <<yourrep $g.spotter1>> who
<<uadv $g.spotter1>> spotted smoke coming from a spot in the forest. Lo and
behold, <<rep $g.target>> 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>> owner to reclaim <<them $g.target>>
<<else>>
making plans to complete their escape.
<</if>>
<<if $gOutcome == 'crit'>>
Your slavers easily subdued and secured the slave, to be brought back to your fort.
<<else>>
Your slavers easily subdued and secured the slave, to be brought back to your
fort, but you noted that the slave had suffered many injuries. You are unsure
if it was from <<their $g.target>> former owner or from the escapade, but either way you
will need to give <<theslaver $g.target>> some rest before you can use <<them $g.target>> again.
<</if>>
</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 and brambles.
<<if $gOutcome == 'failure'>>
Eventually, the ranger found and captured the missing slave alone, and
demanded extra pay for <<their $g.ranger>> basically unassisted work.
<<else>>
In fact, <<rep $g.spotter1>> got lost in the forest as well, and the
ranger had to be paid more to rescue both the slave and <<rep $g.spotter1>>.
<</if>>
</p><<run new setup.Title(
"quest_master_of_survival_0", /* key */
"Master of Survival", /* name */
"A true master of survival", /* description */
"a|have proven a|themself to be a master archer by completing a challenge in the western forests", /* unit text */
7599, /* slave value */
{ /* skill additives */
survival: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Archer', /* name */
[
setup.trait.tough_nimble,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.skill_animal,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
setup.trait.eyes_neko,
],
[
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_loyal,
setup.trait.per_dreamy,
setup.trait.skill_flight,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.survival, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_survival_0')
]), 'Have not yet mastered the art of survival'),
],
{
survival: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_survival', /* key */
"Test of Survival", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'prep',
'item',
'forest',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_test_of_survival',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_survivalCrit',
[
setup.qc.EquipmentDirect('survival_torso_master'),
setup.qc.AddTitle('a', 'quest_master_of_survival_0'),
],
],
[
'Quest_test_of_survivalCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_survivalCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_survival, 5),
],
],
[
'Quest_test_of_survivalCrit',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_survival_0'),
setup.qres.SkillAtLeast(setup.skill.survival, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
A slaver in your employ stands out from the rest by virtue of their excellent archery skills.
<<Yourrep _u>> thinks so too, and in fact, <<they _u>> thinks that perhaps your slaver has what it takes to complete the legendary challenge in the forest.
</p>
<p>
According to the tales, somewhere within the <<lore region_forest>> lives an ancient and wise deer known as the Golden Deer. It is no ordinary animal — the deer is apparently immortal, and delights in nothing but playing prey to the most skillful hunters, apparently to ward off boredom. A hunter willing to chance a game of hunter-prey would don a red ranger clothes into the forest, and it is said that the deer would make an appearance whenever so.
</p>
<p>
Given the deer's age and mastery over its surroundings, you surmise that it would be impossible for any slaver of yours to have even the slightest chance of capturing the deer. But
rumors say that wondrous treasure will be bestowed on whoever hunter good enough to land even just a single arrow on the majestic creature.
If you trust your slaver enough, they might just be able to do this, and who knows what kind of rewards it will give?
</p>
<p>
Just be warned that the deer is said to have the shortest of temper, and should the hunter by laughably unskilled, it would bestow severe punishment on them...
</p><p>
After borrowing and
then donning the awkwardly bright red ranger suit,
<<yourrep $g.a>> ventured alone into the heart of the forests.
<<if $g.a.isHasTrait('skill_animal')>>
As an animal whisperer, the wildlife makes for a pleasant companion for <<their $g.a>> otherwise lonely mission.
<</if>>
<<if $g.a.isHasTrait('per_independent')>>
<<They $g.a>> enjoyed getting some alone time.
<</if>>
Before long, night fell, and despite the dark forests, a bright golden beacon of light was visible afar.
</p>
<p>
When <<rep $g.a>> approached, <<they $g.a>> found a deer coated with golden fur staring straight back at <<them $g.a>>. After a brief staredown, the deer took flight, apparently signaling the start of the hunt.
<<if $g.a.isHasTrait('tough_nimble')>>
<<Rep $g.a>> a|was nimble enough to navigate through the forest at night without much trouble.
<</if>>
<<if $g.a.isHasTrait('tough_tough')>>
<<Rep $g.a>> a|was not nimble enough and had difficulties navigating the treacherous plants in the night.
<</if>>
<<if $g.a.isHasTrait('muscle_extremelystrong')>>
<<Reps $g.a>> extremely muscular body proved a hindrance for moving swiftly in the dense forests.
<</if>>
<<if $g.a.isHasTrait('per_attentive')>>
<<Reps $g.a>> attentive eyes made it easier to track the deer's movements.
<</if>>
<<if $g.a.isHasTrait('per_dreamy')>>
<<Reps $g.a>> dreamy eyes made it difficult for <<them $g.a>> to concentrate on the task.
<</if>>
<<if $g.a.isHasTrait('eyes_neko')>>
<<Reps $g.a>> eyes are able to see in the dark, greatly helping <<them $g.a>> in <<their $g.a>> mission.
<</if>>
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, <<rep $g.a>> lost track of the deer very much soon after. The apparent incompetence of <<therace $g.a>> angered the deer, who later returned charging at <<theslaver $g.a>>. It was unknown what happened next, but <<rep $g.a>> never returned to the company from the mission.
<<urescuenow $g.a>>
</p>
<<elseif $gOutcome == 'crit'>>
<p>
After closing the distance somehow, <<rep $g.a>> carefully aimed an arrow at the fast-moving but gleaming animal.
<<if $g.a.isHasTrait('magic_wind')>>
<<They $g.a>> used <<their $g.a>> mastery over wind magic to help guide <<their $g.a>> arrow.
<</if>>
With a floosh, the arrow flew into the air, before somehow finding its way into the deer's thick fur.
While the arrow bounced harmlessly, it was enough to impress the majestic creature of <<reps $g.a>> prowess. It awarded <<rep $g.a>> with its magnificent vision, before bestowing <<them $g.a>> a part of <<their $g.a>> fur, to be remade into a breastplate suitable for a ranger of <<reps $g.a>> caliber.
</p>
<p>
<<Rep $g.a>> took the fur into a famous artisan in the <<lore location_npc>>, who surprisingly crafted the breastplate from the fur for free, seemingly already satisfied by the chance to work with such a legendary material alone.
</p>
<<else>>
<p>
<<Rep $g.a>> managed to close the distance a little bit, before hurriedly notching an arrow into the animal. It did not arrive at its target. A few more stray hits, and before long the animal was out of <<reps $g.a>> sight.
Still, it seems the deer was rather impressed by how close some of the arrows were to hitting it, and bestowed a little boon upon <<rep $g.a>> before disappearing into the darkness of the night.
</p>
<p>
<<Rep $g.a>> might not have succeeded, but <<therace $g.a>> seemed eager to try again.
<<if $gOutcome == 'failure'>>
<<They $g.a>> suffered quite a bunch of grazes and cuts from the various brambles and vegetations in the forest, however, and would need some time to rest first.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_the_fruit_of_sluttiness1',
'Slutted (Mild)',
'subrace_elf', /* pools */
0,
[
setup.qc.TraitReplace('unit', setup.trait.per_sexaddict), ],
)>>
<<run new setup.UnitGroup(
'quest_the_fruit_of_sluttiness3',
'Slutted (Plus)',
'subrace_elf', /* pools */
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', 'ire',
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'whore1': setup.qu.whore,
'whore2': setup.qu.whore,
'biologist': setup.qu.biologist, },
{ /* actors */
'slut': 'quest_the_fruit_of_sluttiness1',
'plus': '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', 'a|was an elf whose mind you fully transform into that of a sex slave', undefined),
setup.qc.Ire('elf', 1),
],
], [
'Quest_the_fruit_of_sluttinessCrit',
[
setup.qc.Slave('slut', 'a|was an elf whose mind you transform into that of 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, setup.rarity.common],
], /* quest pool and rarity */
[ /* restrictions to generate */
setup.qres.QuestUnique(),
],
)>><p>
The <<lore region_forest>> houses dangers of many kind: wild beasts, tentacle
monsters, and even the occassional slaver company, but
among these, a particularly nasty threat is the so called Fruit of Sluttiness.
These fruit disguises itself as an ordinary edible fruit, almost indistinguishable
from other delicious fruit in the forests.
But a particularly sensitive individual can sense the strange, arousing
odors coming out of the fruit, earning it the name.
When eaten, this fruit bestows absolute sluttiness to its host,
instilling sex addiction that is impossible to cure by any 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 consuming the fruit.
Once gulped down, with the full extent of the fruit's power and some encouragement from your slaves,
no matter what the elf's previous life and preferences was,
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 slut.
</p><<if $gOutcome == 'crit'>>
<<set _plus = $g.plus>>
<<else>>
<<set _plus = $g.slut>>
<</if>>
<p>
<<if $g.biologist.isHasTrait('per_attentive')>>
Thanks to <<reps $g.biologist>> keen sense,
<<else>>
Probably by 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>> exuding their combined
sexual charm,
an unsuspecting elf was seductively lured into eating the fruit offered by your slavers.
Only when <<they _plus>> was already a few bites in that
<<they _plus>> started to realize that something was very wrong.
<<if $gOutcome == 'crit'>>
But by then, it was already far too late.
In an attempt to minimize <<their _plus>> resistance,
<<rep $g.whore1>> and <<rep $g.whore2>> molested and manhandled
<<reps _plus>> <<= setup.Text.genital(_plus)>>,
eliciting needy moans until <<their _plus>> mind was fully transformed
from an ordinary hard-working elf into that of a natural sex slave.
Once <<rep _plus>> finished gorging on the fruit, <<they _plus>> was
practically begging for your slavers to enslave <<them _plus>> and more,
which your slavers happily obliged.
<<else>>
In a show of resistance, <<they _plus>> tried to vomit the flesh <<they _plus>>
had 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 <<their $g.whore1>> cum<</if>>.
The deed done, <<rep _plus>> became one mess of a slutty elf who did not resist at all
as your slavers tied and carried the slave back home.
<</if>>
</p><p>
Your slavers failed the mission simply because <<rep $g.biologist>> was
unable to find the Fruit of Sluttiness in the first place. 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 were looking for, but was
sloppy in picking and storing them. The odors somehow permeated out of their
bags and after some time, <<rep $g.whore1>> and <<rep $g.whore2>> began to
feel much more aroused than they normally would. By the time <<rep $g.biologist>>
realized what was happening, it was already too late, and <<rep $g.biologist>>
had to quickly ditch the fruits and restored whatever mind left back to both <<rep
$g.whore1>> and <<rep $g.whore2>>.
</p>/* PROOFREAD COMPLETE */
<<set _criteriahonest = new setup.UnitCriteria(
null, /* key */
'"Woodcutter"', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_woodsman,
setup.trait.bg_laborer,
setup.trait.per_humble,
setup.trait.per_direct,
setup.trait.per_kind,
setup.trait.per_honorable,
],
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.bg_raider,
setup.trait.bg_slaver,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_sly,
setup.trait.per_cruel,
setup.trait.per_lunatic,
setup.trait.per_evil,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AnyTrait([setup.trait.per_direct, setup.trait.per_humble, setup.trait.per_kind, setup.trait.per_honorable, setup.trait.per_chaste], true),
],
{
social: 3,
}
)>>
<<run new setup.QuestTemplate(
'the_honest_slaver', /* key */
"The Honest Slaver", /* Title */
"darko", /* Author */
[ 'forest', 'money'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'honest': [_criteriahonest, 2],
'scout': [setup.qu.scout_forest, 0.5],
'schemer': [setup.qu.schemer, 0.5], },
{ /* actors */
'lady': 'subrace_elf',
'woodcutter': '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_slaverCrit',
[
setup.qc.MoneyNormal(), ],
], [
'Quest_the_honest_slaverCrit',
[
],
], [
'Quest_the_honest_slaverCrit',
[
setup.qc.TraumatizeRandom('honest', 20), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions to generate */
],
)>><p>
The folks living in the <<lore region_forest>> 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>> hid far away from the area, leaving <<rep
$g.honest>> to try and beg for the dildo's safe return all by <<themself
$g.honest>>,
being as
<<if $g.honest.isHasTrait('per_direct')>>
honest
<<elseif $g.honest.isHasTrait('per_humble')>>
humble
<<elseif $g.honest.isHasTrait('per_kind')>>
kind
<<elseif $g.honest.isHasTrait('per_honorable')>>
honorable
<<else>>
chaste
<</if>>
as <<they $g.honest>> could possibly feign while <<they $g.honest>> did so.
</p>
<<if $gOutcome == 'crit'>>
<p>
The <<lady $g.lady>> of the river obviously sensed the wickedness coming out
from <<theslaver $g.honest>>, what with such an indecent item being thrown into the
river. But upon seeing <<yourrep $g.honest>>, <<they $g.lady>> could not help but
be charmed by the aura of good emanating from <<them $g.honest>>. Instead, the
<<lady $g.lady>> invited <<them $g.honest>> to dive into the river together to
"reclaim the dildo", and so <<they $g.honest>> did. It was 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 could not help but notice that the dildo appears to have slight
dents and an unnatural smell, as if it was used before.
<<Rep $g.honest>> honest|was oddly quiet about it.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The <<lady $g.lady>> of the river obviously sensed the wickedness coming out
from <<theslaver $g.honest>>, what with such an indecent item being thrown into the
river. But <<reps $g.honest>> goodness still tugged on <<their $g.lady>> heart,
and after deciding what was best, <<they $g.lady>> decided to unceremoniously
throw a silver dildo, accidentally hitting <<reps $g.honest>> head. Sensing
that it was all they were 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>> 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 it worked out in
the end.
</p>
<<else>>
<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 wickedness from <<therace $g.honest>>,
the <<lady $g.lady>> of the river denied both that and the return of your own wooden dildo.
<<if $gOutcome == 'disaster'>>
Instead, <<they $g.lady>> bestowed a curse upon your slaver.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_vault_trophy_0", /* key */
"Vault Trophy", /* name */
"Special prize for the annual Tiger Bank vault assault", /* description */
"a|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",
'subrace_elf', /* pools */
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.race_catkin,
setup.trait.bg_clerk,
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_sly,
setup.trait.per_attentive,
setup.trait.per_evil,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.race_elf,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_direct,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 3,
}
)>>
<<set _criteriainfiltrator1 = new setup.UnitCriteria(
null, /* key */
'Infiltrator', /* name */
[
setup.trait.race_catkin,
setup.trait.bg_clerk,
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_sly,
setup.trait.per_attentive,
setup.trait.per_evil,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.race_elf,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_direct,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
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.Outcomes('success'),
setup.qc.Slave('slave', "a|is your trophy for winning the annual Tiger Bank vault assault", undefined),
],
],
[
'Quest_vault_assaultCrit',
[
setup.qc.Item(setup.item.potion_isolation),
setup.qc.SetCooldownQuest(null, 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.SetCooldownQuest(null, 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.SetCooldownQuest(null, 53),
setup.qc.Ire('bank', 3),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions */
setup.qres.FavorAtLeast('bank', 800),
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, to those who are able to breach the vault into its inner
chambers... or so <<yourrep _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 the 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>> could already see some
other shady people loosely gathering around the place.
Clearly your slaves had arrived at the right place. With many guards
surrounding the vault, it would be a daunting task to try and infiltrate the
structure.
</p>
<p>
<<Yourrep $g.banker>> began 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 sneak in from
within the security office and into the vault.
</p>
<p>
The vault complex appeared 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('tough_nimble')>>
But <<rep $g.infiltrator1>> infiltrator1|is a nimble slaver and had no
problem dodging and going through all these traps.
<<elseif $g.infiltrator1.isHasTrait('tough_tough')>>
<<reps $g.infiltrator1>> inflexible body meant that <<they $g.infiltrator1>>
hit several of the traps, injuring <<theslaver $g.infiltrator1>>.
<<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 <<theslaver $g.infiltrator1>>.
<<run $hospital.injureUnit($g.infiltrator1, 1)>>
<</if>>
</p>
<p>
They eventually arrived at what appeared to be an imposing door, surely hiding
great treasures behind it. All that's blocking your slaver's way was a simple,
or at least simple-looking lock. On a closer look, it actually resembled a
puzzle more than a lock,
<<if $g.infiltrator2.isHasTrait('bg_clerk') or $g.infiltrator2.isHasTrait('bg_scholar')>>
which was not a problem for <<yourrep $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 was not a problem for <<yourrep $g.infiltrator2>>, given <<their
$g.infiltrator2>> studious nature.
<<elseif $g.infiltrator2.isHasTrait('per_evil')>>
which your evil slaver <<rep $g.infiltrator2>> somehow infiltrator2|was able
to make short work of. Looks like there was a shortcut designed specifically
for evil slavers, but for what purpose?
<<elseif $g.infiltrator2.isHasTrait('race_catkin')>>
which turned 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 in the eyes of the bank.
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 unlocked, opening up the room behind it for your slavers. Various
baubles, trinkets, and equipments lied and 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 unlocked, opening up the room behind it for your slavers. Various
baubles, trinkets, and equipments lied and scattered around the room, ripe for
your slaver's takings.
But thanks to <<reps $g.infiltrator1>>
<<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 hid 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>> pressed forward inside the hatch.
</p>
<p>
Following the tunnel, they ended up in a small clearing,
with the <<rep setup.item.isolation_technology>> sitting
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 already have the <<rep setup.item.isolation_technology>>, but your
slavers were still able to gather the valuable
<<else>>
This truly is 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, <<reps $g.infiltrator2>> gut feeling kept telling <<therace $g.infiltrator2>>
that there was 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 could be heard
from somewhere around the room, revealing a hidden chamber for your slavers.
Behind the chamber lied an elf, probably a former employee, fully bound from
head to toe in bondage. A letter was hanged from the clamps on <<their $g.slave>> nipples,
congratulating the slavers for "winning" the Vault Assault!
</p>
<p>
With the new slave in tow and all other trophies they had 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.UnitGroup(
"wishing_well0",
"Dominant Slave",
'forest_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.TraitsReplace('unit', [setup.trait.muscle_strong, setup.trait.per_dominant, setup.trait.training_obedience_advanced, setup.trait.training_dominance_advanced]),
],
)>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Well Wisher', /* name */
[
setup.trait.bg_priest,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
survival: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'wishing_well', /* key */
"Wishing Well", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'danger',
'unknown',
'legendary',
],
3, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'dom': 'wishing_well0',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_wishing_well',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_wishing_wellCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Blessing('a', 1, null, false),
],
],
[
'Quest_wishing_wellCrit',
[
setup.qc.SetCooldownQuest(null, 250),
],
],
[
'Quest_wishing_wellFailure',
[
setup.qc.Blessing('a', 1, null, true),
],
],
[
'Quest_wishing_wellFailure',
[
setup.qc.Blessing('a', 2, null, true),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><p>
Legends say that somewhere deep within the woody mass that is the <<lore region_forest>> lies a single water well, famous for bestowing fortune on travelers lucky enough to stumble into it.
While nobody knows its exact location, very recently one of your forest scouts have somehow managed to locate the vicinity of the well. This is a <<successtext "rare">> opportunity for you to try and send one of your slavers to go and toss a few thousand coins into the well.
Rumors said that the well would grant any wish one could desire, as long as the coins flip land right... Surely it's too good to be true?
</p><p>
<<Yourrep $g.a>> brought a bag of gold into the lone, clearly enchanted well. The well is surrounded by flowers which rapidly grow and decay in an endless cycle, while its water sway and ripple deep beneath even without wind.
</p>
<p>
<<Rep $g.a>> <<uadv $g.a>> dumped the entire content of the money bag they brought into the well<<if $gOutcome == 'crit'>>, which the well immediately repiprocated with a blessing<</if>>.
<<if $g.a.isHasTrait('per_frugal')>>
Given how frugal <<they $g.a>> a|is, <<they $g.a>> lamented slightly at the loss of such fortune, but knows that a potential reward is now awaiting <<them $g.a>>.
<</if>>
Once that done, <<rep $g.a>> knelt and prayed <<if $g.a.isHasTrait('per_evil')>>(evilly)<</if>>
while concentrating on the singular wish <<they $g.a>> had been trying to get all this time...
</p>
<<set _cangenital = (
$g.a.isHasAnyTraitExact(['dick_tiny', 'dick_small', 'dick_medium', 'dick_large', 'dick_huge', 'breast_tiny', 'breast_small', 'breast_medium', 'breast_large', 'breast_huge'])
)>>
<<if $g.a.isYou()>>
<p>
Well, what is it that you wish for?
</p>
<<choose>>
<<opt 'An obedient slave'>>
<<set _rew = 'slave'>>
<<includereplace 'Quest_wishing_wellOutcome'>>
<<opt 'Power'>>
<<set _rew = 'power'>>
<<includereplace 'Quest_wishing_wellOutcome'>>
<<optif _cangenital>>
<<opt 'Endowment'>>
<<set _rew = 'size'>>
<<includereplace 'Quest_wishing_wellOutcome'>>
<<opt 'Luck'>>
<<set _rew = 'luck'>>
<<includereplace 'Quest_wishing_wellOutcome'>>
<<opt 'Money'>>
<<set _rew = 'money'>>
<<includereplace 'Quest_wishing_wellOutcome'>>
<</choose>>
<<else>>
<<set _choices = [
'slave',
'power',
'luck',
'money',
]>>
<<if _cangenital>>
<<run _choices.push('size')>>
<</if>>
<<set _options = {
'per_slow': 'slave',
'per_smart': 'power',
'per_brave': 'power',
'per_cautious': 'money',
'per_aggressive': 'power',
'per_calm': 'luck',
'per_proud': 'power',
'per_humble': 'size',
'per_direct': 'slave',
'per_sly': 'money',
'per_active': 'size',
'per_studious': 'size',
'per_loner': 'size',
'per_gregarious': 'luck',
'per_frugal': 'money',
'per_lavish': 'money',
'per_independent': 'power',
'per_loyal': 'power',
'per_attentive': 'money',
'per_dreamy': 'size',
'per_stubborn': 'power',
'per_curious': 'size',
'per_cruel': 'power',
'per_kind': 'luck',
'per_serious': 'slave',
'per_playful': 'luck',
'per_logical': 'money',
'per_empath': 'luck',
'per_chaste': 'luck',
'per_lustful': 'size',
'per_sexaddict': 'size',
'per_dominant': 'slave',
'per_submissive': 'slave',
'per_masochistic': 'size',
'per_lunatic': 'luck',
'per_evil': 'power',
'per_honorable': 'luck',
}>>
<p>
<<set _rew = null>>
<<set _keys = Object.keys(_options)>>
<<run setup.rng.shuffleArray(_keys)>>
<<for _key range _keys>>
<<if $g.a.isHasTraitExact(_key) && _choices.includes(_options[_key])>>
<<set _rew = _options[_key]>>
You know <<rep $g.a>> to be a <<= setup.trait[_key].getName()>> <<urace $g.a>>,
and it was not suprising <<they $g.a>> decided to wish
<<if _rew == 'money'>>
for a lot of wealth.
<<elseif _rew == 'slave'>>
for a slave suitable for <<them $g.a>>.
<<elseif _rew == 'size'>>
to be more well-endowed.
<<elseif _rew == 'luck'>>
for luck.
<<else>>
for the most dangerous thing in <<lore continent_main>>: power.
<</if>>
<<break>>
<</if>>
<</for>>
<<if !_rew>>
<<set _rew = 'money'>>
<<Rep $g.a>> a|is not particularly known for anything, so it was not surprising that
<<they $g.a>> chose to pray for the simplest thing in life: money.
<</if>>
</p>
<<includereplace 'Quest_wishing_wellOutcome'>>
<</if>><<if _rew == 'slave'>>
<p>
<<They $g.a>> a|is a simple <<urace $g.a>> with simple needs, and <<they $g.a>> <<if $g.a.isHasTrait('per_proud')>>proudly<<else>>humbly<</if>> requested a loyal slave to serve and fulfill <<their $g.a>>
<<if $g.a.isHasTrait('per_dominant')>>
perverted fantasies.
<<else>>
every wish.
<</if>>
</p>
<p>
Once the prayer was made, light shone from beneath the well, and <<rep $g.a>> could not believe <<their $g.a>> eyes as a <<male $g.dom>> slave materialized before <<them $g.a>>.
<<if $g.a.isHasTrait('per_submissive')>>
Being a complete submissive, <<they $g.a>> expected a fully dominant slave to fulfill <<their $g.a>> darkest fantasies, and the well granted just that.
Once fully summoned, the "slave" proceeded to dominate <<their $g.a>> "<<master $g.a>>", and the cold night in the forest was filled with <<reps $g.a>> completely insincere begs for mercy from <<their $g.a>> new "<<master $g.dom>>"...
<<else>>
<<if $g.a.isHasTrait('per_dominant')>>
Being a complete dominant,
<<else>>
Being a slaver,
<</if>>
<<they $g.a>> expected a fully submissive slave to fulfill <<their $g.a>> darkest fantasies. But instead, the well "fulfilled" <<their $g.a>> wish by summoning
the most dominant slave <<they $g.a>> had ever seen in <<their $g.a>> life. Clearly this was not what <<they $g.a>> wished for, and something was wrong, but <<their $g.a>> question was soon answered as the well rippled for a second time, its magic this time targeting <<rep $g.a>>.
Submissive thoughts flooded the
<<if $g.a.isHasTrait('per_dominant')>>
formerly completely dominant <<urace $g.a>>
<</if>>
until <<they $g.a>> became nothing but a quivering submissive on the floor.
The rest of the night was spent with the new submissive
insincerely begging for mercy from <<their $g.a>> new "<<master $g.dom>>" who used <<them $g.a>> like the sex toy <<they $g.a>> just realized <<they $g.a>> actually is...
<<run setup.qc.TraitReplace('a', setup.trait.per_submissive).apply($gQuest)>>
<</if>>
</p>
<<run setup.qc.Slave('dom', 'a|was granted by the Wishing Well to fulfill the perverted desires of one of your slavers').apply($gQuest)>>
<<elseif _rew == 'power'>>
<p>
<<They $g.a>> had always wanted to be bigger, stronger, and tougher, and <<they $g.a>> wished just for that.
Hearing the request, rippled and changed color, apparently trying to grant <<their $g.a>> wish.
<<set _success = false>>
<<set _crit = false>>
<<if $gQuest.getSeed() % 3 == 0>>
<<if $g.a.isHasTrait('muscle_verystrong')>>
But <<their $g.a>> muscles are already far too big, too bulky, and no magic, not even the strong well magic, could enhance it even further.
<<else>>
<<set _success = true>>
<<if $g.a.isHasTrait('muscle_strong')>>
<<set _crit = true>>
<<run setup.qc.TraitReplace('a', 'muscle_verystrong').apply($gQuest)>>
<<Their $g.a>> already muscular body bulged even more, giving <<them $g.a>> an extremely pleasurable sensation as <<their $g.a>> very muscles bulging into massive proportions.
<<else>>
<<run setup.qc.TraitReplace('a', 'muscle_strong').apply($gQuest)>>
<<Their $g.a>> muscles bulged out from <<their $g.a>> body, giving <<them $g.a>> a pleasurable sensation as <<their $g.a>> very body becomes bulkier and meatier.
<</if>>
<</if>>
<<elseif $gQuest.getSeed() % 3 == 0>>
<<if $g.a.isHasTrait('tough_tough')>>
<p>
But <<their $g.a>> body is already too naturally tough, and no enhancement or magic could strengthen it any further.
</p>
<<else>>
<<set _success = true>>
<p>
<<Their $g.a>> <<if $g.a.isHasTrait('tough_nimble')>>previously lithe<</if>> body stiffens, exchanging flexibility with toughness, and <<their $g.a>> lungs gained a few more capacity.
</p>
<<run setup.qc.TraitReplace('a', 'tough_tough').apply($gQuest)>>
<</if>>
<<else>>
<<if $g.a.isHasTrait('height_giant')>>
<p>
But <<they $g.a>> a|is already too large and too big, and no amount of dark magic could enhance it any further
</p>
<<else>>
<<set _success = true>>
<<if $g.a.isHasTrait('height_tall')>>
<<set _crit = true>>
<<run setup.qc.TraitReplace('a', 'height_giant').apply($gQuest)>>
<<Their $g.a>> already relatively tall figure grows even more, now towering over most other <<men $g.a>>.
<<else>>
<<run setup.qc.TraitReplace('a', 'height_tall').apply($gQuest)>>
<<Their $g.a>> body grows taller and taller until it stops just short of becoming a giant of a <<man $g.a>>.
<</if>>
<</if>>
<</if>>
</p>
<<if _success>>
<p>
However, something odd was also happening, as <<they $g.a>> soon learn that muscles were not the only thing the well enhanced for <<them $g.a>>.
Chants of dumbness and obedience echoed in <<their $g.a>> head, trying to make <<them $g.a>> dumber and dumber...
<<if $g.a.isHasTrait('per_slow')>>
<<Reps $g.a>> already simple mind is not affected, however.
<<else>>
<<run setup.qc.TraitReplace('a', setup.trait.per_slow).apply($gQuest)>>
<<Rep $g.a>> lost <<their $g.a>> mind, becoming closer to the image of a big dumb muscle <<girl $g.a>>.
<</if>>
<<if _crit>>
<<set _skills = $g.a.getRemovableTraits().filter(trait => trait.getTags().includes('skill'))>>
<<if _skills.length>>
<<set _s = setup.rng.choice(_skills)>>
<<run setup.qc.TraitRemove('a', _s).apply($gQuest)>>
<<Their $g.a>> now straightforward mind no longer able to comprehend
<<if _s.getTags().includes('magic')>>
the complexity of <<rep _s>>, which <<they $g.a>> once commanded, and it was lost...
<<else>>
the complexity of <<rep _s>>, which <<they $g.a>> a|was once famous for, and it was lost...
<</if>>
<</if>>
<</if>>
</p>
<</if>>
<<elseif _rew == 'size'>>
<p>
<<if $g.a.isHasTrait('dick_large')>>
Despite already being blessed with relatively well-endowed dick, <<they $g.a>> sometimes still wished that
<<elseif $g.a.isHasTrait('breast_large')>>
Despite already being blessed with relatively voluptuous breasts, <<they $g.a>> sometimes still wished that
<<else>>
<<They $g.a>> had always been a little self-conscious of <<their $g.a>>
<<if $g.a.isFemale()>>breasts<<else>>dick<</if>>,
and wished
<</if>>
they could be bigger.
And the well heard of the wish, and granted it.
<<Their $g.a>>
<<if $g.a.isFemale()>>breasts<<else>>dick<</if>> grew before <<their $g.a>> eyes,
becoming
<<if $g.a.isHasTrait('dick_huge')>>
gargantuanly large,
<<run setup.qc.TraitReplaceExisting('a', 'dick_titanic').apply($gQuest)>>
<<elseif $g.a.isHasTrait('breast_huge')>>
gargantuanly large,
<<run setup.qc.TraitReplaceExisting('a', 'breast_titanic').apply($gQuest)>>
<<else>>
huge and imposing.
<<run setup.qc.TraitReplaceExisting('a', 'dick_huge').apply($gQuest)>>
<<run setup.qc.TraitReplaceExisting('a', 'breast_huge').apply($gQuest)>>
<</if>>
But <<they $g.a>> soon learned that it was not without cost, as the flesh must have come from somewhere...
</p>
<p>
<<if $g.a.isHasTrait('balls_small')>>
<<Their $g.a>> <<uballs $g.a>> shrunk into a barely visible pair of marble-sized balls.
<<else>>
<<if $g.a.isHasTrait('balls_tiny')>>
The magic attempted to shrink <<their $g.a>> balls, but it was already far too tiny to be shrunk.
<</if>>
<<if $g.a.isHasTrait('height_tall')>>
It took the flesh from <<reps $g.a>> entire body, shrinking the once tall <<man $g.a>> into a regular-sized <<urace $g.a>>.
<<run setup.qc.TraitRemove('a', 'height_tall').apply($gQuest)>>
<<run setup.qc.TraitRemove('a', 'height_giant').apply($gQuest)>>
<<elseif $g.a.isHasTrait('tough_tough')>>
It took the flesh from <<reps $g.a>> once tough body, weakening it drastically.
<<run setup.qc.TraitRemove('a', 'tough_tough').apply($gQuest)>>
<<elseif $g.a.isHasTrait('muscle_verystrong')>>
It took the flesh from <<reps $g.a>> meaty body, draining it of its strength.
<<run setup.qc.TraitRemove('a', 'muscle_verystrong').apply($gQuest)>>
<<run setup.qc.TraitRemove('a', 'muscle_extremelystrong').apply($gQuest)>>
<<elseif $g.a.isHasTrait('muscle_verythin')>>
Surprisingly, instead of draining flesh, it somehow restores <<reps $g.a>> previously unnaturally thin waist to more normal proportions.
<<run setup.qc.TraitRemove('a', 'muscle_verythin').apply($gQuest)>>
<<run setup.qc.TraitRemove('a', 'muscle_extremelythin').apply($gQuest)>>
<<elseif $g.a.getWings()>>
It took away <<reps $g.a>> wings, reducing it to nothing...
<<run setup.qc.TraitRemove('a', $g.a.getWings()).apply($gQuest)>>
<<elseif $g.a.getTail()>>
It took away <<reps $g.a>> tail, reducing it to nothing...
<<run setup.qc.TraitRemove('a', $g.a.getTail()).apply($gQuest)>>
<<else>>
But strangely enough, there wasn't any noticable change on <<rep $g.a>>...
<</if>>
<</if>>
</p>
<<elseif _rew == 'luck'>>
<p>
<<Yourrep $g.a>> prays to make <<them $g.a>> the luckiest <<urace $g.a>> on <<lore continent_main>>, and the well obliged.
<<Rep $g.a>> a|was showered with blessings of luck, making <<therace $g.a>> almost like a beacon of luck.
But in exchange the well also peppered <<therace $g.a>> with an equal amount of curses...
<<run setup.qc.Blessing('a', 8, setup.trait.blessing_luck8).apply($gQuest)>>
<<run setup.qc.Blessing('a', 2, null, true).apply($gQuest)>>
<<run setup.qc.Blessing('a', 2, null, true).apply($gQuest)>>
<<run setup.qc.Blessing('a', 2, null, true).apply($gQuest)>>
<<run setup.qc.Blessing('a', 2, null, true).apply($gQuest)>>
</p>
<<elseif _rew == 'money'>>
<p>
<<Yourrep $g.a>> wishes for the most classic of all wishes: money.
Soon after bags and bags of coins suddenly materialize before <<therace $g.a>>, seemingly out of nowhere.
<<if $g.a.isHasTrait('per_frugal')>>
The greedy <<urace $g.a>>
<<else>>
The <<urace $g.a>>
<</if>>
collected them all, not bothering to count <<their $g.a>> luck that the well worked at all, and headed home with a bag of gold in tow.
</p>
<p>
Some days later, you've learned that a large amount of money has been lost from the great treasuries of the <<rep $company.bank>>, and they have somehow traced them into your vaults. They can't demand them back without proof, however, but they grow extremely suspicious of your company...
</p>
<<run setup.qc.Money(12000).apply($gQuest)>>
<<run setup.qc.Ire('bank', 18).apply($gQuest)>>
<</if>><p>
<<Yourrep $g.a>> brought a bag of gold into the lone, clearly enchanted well. The well is surrounded by flowers which rapidly grow and decay in an endless cycle, while its water sway and ripple deep beneath even without wind.
</p>
<p>
...or so <<they $g.a>> thought. When <<they $g.a>> checked <<their $g.a>> belongings, the bag of gold was nowhere to be seen.
Whether it's that
beggar <<they $g.a>> made along the way,
the tavern <<they $g.a>> stopped by along the way,
the wench <<they $g.a>> patroned along the way,
and the many other clearly important distractions along the way,
the money had been lost one way or another in its entirely.
And the well was not pleased at all.
</p>
<p>
It was unclear what had happened, but when <<rep $g.a>> came back, you can clearly see that <<they $g.a>> a|has been quite cursed by the well's magic.
</p>/* PROOFREAD COMPLETE */
<<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(150),
setup.qc.Function(() => {
setup.initEstablishBase()
}),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Outcomes('crit'),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Outcomes('crit'),
],
],
[
'QuestEstablishBaseAll',
[
setup.qc.Outcomes('crit'),
],
],
],
[], /* quest pool, rarity */
[], /* prerequisites to generate */
)>><p>
To establish your company properly,
the first order of business is to restore a semblance of the fort
that you will call your new home.
There are several crucial facilities that is desperately needed.
First, you and your slavers need somewhere to sleep.
In addition, you also need to build an office where you can plan
further improvements to the fort.
Building these two facilities takes top priority, and is the goal of this assignment.
</p>
<p>
<<successtext 'Hint:'>>
This game revolves around assigning units (i.e., you and your slavers) to go on quests.
Use the "Assign Units" button to get started.
Click the contextual "(?)" at the top of this screen for more help.
</p><p>
It was hard work, but through <<reps $g.planner>> careful planning and
the hard work of both <<rep $g.builder1>> and <<rep $g.builder2>>,
some part of the fort had been made habitable
and turned into the <<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 had established
a small office just outside the fort for storing
blueprints for future improvements to your 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'angry_peasants', /* key */
"Angry Peasants", /* Title */
"darko", /* Author */
[
'special', 'vale',
], /* 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 are now making camp just outside of your fort,
harrassing your slavers whenever they go 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 week this quest remain, some money will be deducted from your coffers to cover the repairs for the 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 fled 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'desert_raider', /* key */
"Desert Raiders", /* Title */
"darko", /* Author */
[
'special', 'fort',
], /* 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 are camping just outside of your fort,
harrassing your slavers whenever they go 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 week this quest remain, some money will be deducted from your coffers to cover the repairs for the 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 fled 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><<set _criteriagod = new setup.UnitCriteria(
null, /* key */
'God', /* name */
[
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AllTraits([setup.trait.bg_mythical], true),
setup.qres.HasTitle('quest_living_god'),
],
{
intrigue: 1,
social: 1,
aid: 1,
}
)>>
<<run new setup.QuestTemplate(
'living_god', /* key */
"Living God", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'money',
'prep',
],
2, /* weeks */
100, /* expiration weeks */
{ /* roles */
'god': [ _criteriagod, 1],
'builder1': [ setup.qu.builder, 1],
'builder2': [ setup.qu.builder, 1],
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-5000),
],
'Quest_living_god',
setup.qdiff.normal43, /* difficulty */
[ /* outcomes */
[
'Quest_living_godCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('humanvale', 150),
],
],
[
'Quest_living_godCrit',
[
setup.qc.Opportunity('living_god', {
god: "god",
}),
],
],
[
'Quest_living_godCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(-5000),
],
],
[
'Quest_living_godCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(-10000),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_living_god'),
setup.qc.VarRemove('quest_living_god_active'),
],
)>><<set _u = setup.getUnit({title: 'quest_living_god'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<<set $g.slaver = _u>>
<<include 'Event_living_god'>>
<</if>><p>
The small shrine has finally been erected.
<<if $gOutcome == 'failure'>>
Your slavers may have chosen a more expensive material than needed (costing you a fair amount of gold, by the way), but it's done.
<<elseif $gOutcome == 'disaster'>>
Your slavers may have been too inspired with the task, and chose the rarest of materials to construct the shrine (costing you a ludicrous amount of gold, by the way), but it's all done.
<</if>>
The shrine is quite eye-catching — visible directly from the bustling <<rep
setup.buildingtemplate.market>> of your fort.
Within its sanctum, lies a statue much like <<yourrep $g.god>>,
posed in a
<<uadjgood $g.god>> pose.
The shrine soonafter attracts many people from <<rep $g.god.getHomeCompany()>>, who comes to worship your slaver.
<<if $gOutcome == 'crit'>>
In fact, some nearby villagers from the <<lore region_vale>> already come to visit, and they were much impressed by <<reps $g.god>> heavenly <<ubody $g.god>>.
<</if>>
</p>
<p>
Before <<they $g.god>> god|begin the "sermons", however, perhaps you could direct <<them $g.god>> to hold them in a particular direction...
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'lizardkins_at_your_doorstep', /* key */
"Lizardkins at Your Doorstep", /* Title */
"darko", /* Author */
[
'special', 'sea',
], /* 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_lizardkins_at_your_doorstep',
setup.qdiff.extreme44, /* difficulty */
[ /* outcomes */
[
'Quest_lizardkins_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_lizardkins_at_your_doorstepCrit',
[
],
], [
'Quest_lizardkins_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_lizardkins_at_your_doorstepDisaster',
[
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('lizardkins_at_your_doorstep'),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
setup.qc.MoneyCustom(-1000),
setup.qc.QuestDirect('lizardkins_at_your_doorstep'),
],
)>><p>
Thanks to your recent actions, you have fully irked the
<<rep $company.lizardkin>>.
They have sent a formidable expedition force over to your company to harass you and your slaving operations.
You have no choice but to let a lot of your slavers join forces and repel this lizardkin threat. And by a lot, it actually means a lot...
</p>
<p>
<<dangertext 'Warning'>>: this quest will remain until you clear it! Each week this quest remain, some money will be deducted from your coffers to cover the repairs for the 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 lizardkin invasion and send the attackers back home.
<<if $gOutcome == 'crit'>>
Your slavers were so fierce during the fight that the enemy fled 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'orc_invasion', /* key */
"Orc Invasion", /* Title */
"darko", /* Author */
[
'special', 'desert',
], /* 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 orc band had 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 week this quest remain, some money will be deducted from your coffers to cover the repairs for the 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 fled 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>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"direct_sabotage0",
"Former Slaver",
'vale_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_strong, setup.trait.face_attractive, setup.trait.per_smart], 1, false, false),
setup.qc.TraitReplace('unit', setup.trait.per_independent),
],
)>>
<<run new setup.QuestTemplate(
'direct_sabotage', /* key */
"Direct Sabotage", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'special',
'unit',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'convincer': [ setup.qu.convincer, 1],
'briber': [ setup.qu.briber, 1],
'seducer': [ setup.qu.seducer, 1],
},
{ /* actors */
'slaver': [
],
'boss': [
],
'recruit': 'direct_sabotage0',
},
[ /* costs */
setup.qc.MoneyCustom(-5000),
],
'Quest_direct_sabotage',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_direct_sabotageCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slaver('recruit', "a|was a slaver under your rival\'s employ who a|was convinced to switch sides", undefined),
],
],
[
'Quest_direct_sabotageCrit',
[
setup.qc.Event('sabotage_success', 4, {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Quest_direct_sabotageFailure',
[
setup.qc.Outcomes("disaster"),
setup.qc.MoneyCustom(5000),
],
],
[
'Quest_direct_sabotageFailure',
[
setup.qc.Opportunity('subtle_retaliation', {
slaver: "slaver",
boss: "boss",
}),
setup.qc.MoneyCustom(2500),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.Opportunity('subtle_retaliation', {
slaver: "slaver",
boss: "boss",
}),
],
)>><p>
If you choose not to ask any of your contacts to do the dirty work for you,
then your slavers would have to do it themselves.
If you want to subtly sabotage your rival <<rep $g.boss>>,
then this is a task best suited for your most golden-tongued slavers.
Perhaps they can convince one or two of your rival's slavers to desert —
A convincer and a briber to play a good cop bad cop, assisted by a seducer to lure the target out...
</p><p>
After a few days of scouting, your slavers identified one potential target from among <<reps $g.boss>> many slavers: a disloyal <<urace $g.recruit>> who looked a little unsure about <<their $g.recruit>> job, preferring to spend <<their $g.recruit>> time <<uhobbyverb $g.recruit>> instead.
</p>
<p>
<<Rep $g.seducer>> <<uadv $g.seducer>>
<<if $g.seducer.isHasTrait('dick_large')>>
brandished <<their $g.seducer>> <<udick $g.seducer>> like a weapon
<<elseif $g.seducer.isHasTrait('breast_large')>>
utilized <<their $g.seducer>> <<ubreast $g.seducer>> like a bargaining chip
<<else>>
used <<their $g.seducer>>
<<ubody $g.seducer>>
<</if>>
and there was no way the target slaver <<rep $g.recruit>> was
able to resist the alluring hips.
Once alone, <<rep $g.convincer>> and <<utheirrel $g.convincer $g.briber>>
<<rep $g.briber>> used both their wits and the bribe money to convince the slaver to quit <<their $g.recruit>> job.
</p>
<p>
With the deadly combination of a golden tongue sensuously licking over a golden coin,
there was really no way <<rep $g.recruit>> could refuse the offer.
<<if $gOutcome == 'crit'>>
In fact, your slavers were so convincing that <<they $g.recruit>> offered to join your company instead,
although ultimately it's your decision whether you would have a use for such a disloyal slaver...
<</if>>
</p>
<p>
That's one less slaver in <<reps $g.boss>> employ — one less problem for you. The sabotage is successful.
</p><p>
Despite having managed to get some alone time with one of <<reps $g.boss>> slavers, your slavers had chosen the wrong target. <<Therace $g.recruit>> proved to be too loyal, and plainly refused all offers of bribe, convincing, and thing as simple as a night stand.
Eventually your slavers had to give up on <<therace $g.recruit>>, and returned home with failure and shame.
<<if $gOutcome == 'disaster'>>
Worse, your slavers already spent half of the bribe money along the way, and given their failure they were unable to hide how they had "misplaced" the money from you.
Perhaps you could consider a strict punishment for them later, but for now you
<<else>>
At least the money they brought with them remained intact, although you still
<</if>>
need to plan your next actions against your rival...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"end_of_a_company0",
"Vice-Leader",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slaver),
setup.qc.AddTraitsRandom('unit', [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),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_strong, setup.trait.face_attractive, setup.trait.height_tall, setup.trait.per_smart], 1, false, false),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_proud, setup.trait.per_brave, setup.trait.per_dominant, setup.trait.per_serious], 1, false, false),
],
)>>
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.bg_slaver,
setup.trait.bg_mercenary,
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.You(),
],
{
combat: 0.5,
brawn: 0.5,
intrigue: 0.5,
slaving: 0.5,
aid: 0.5,
arcane: 0.5,
}
)>>
<<run new setup.QuestTemplate(
'end_of_a_company', /* key */
"End of a Company", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'vale',
'special',
'unit',
],
4, /* weeks */
setup.INFINITY, /* expiration weeks */
{ /* roles */
'you': [ _criteriayou, 1],
'dps': [ setup.qu.dps, 1],
'healer': [ setup.qu.healer, 1],
},
{ /* actors */
'boss': [
],
'slaver': [
],
'viceleader': 'end_of_a_company0',
},
[ /* costs */
],
'Quest_end_of_a_company',
setup.qdiff.hard48, /* difficulty */
[ /* outcomes */
[
'Quest_end_of_a_companyCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('viceleader', "a|was the vice-leader to a slaving company that you\'ve soundly defeated", undefined),
],
],
[
'Quest_end_of_a_companyCrit',
[
setup.qc.VarRemove('rival_blackmail_progress'),
setup.qc.VarRemove('rival_blackmail_active'),
setup.qc.SetCooldownEvent('blackmailed', 400),
setup.qc.Opportunity('the_price_of_revenge', {
slaver: "slaver",
boss: "boss",
}),
],
],
[
'Quest_end_of_a_companyFailure',
[
setup.qc.QuestDirectSelf({
boss: "boss",
slaver: "slaver",
}),
],
],
[
'Quest_end_of_a_companyDisaster',
[
setup.qc.Outcomes("failure"),
setup.qc.Injury('you', 3),
setup.qc.Injury('dps', 3),
setup.qc.Injury('healer', 3),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Through your efforts in the past few weeks, your rival slaving company leader
<<rep $g.boss>> had seen many of <<their $g.boss>> <<women $g.boss>> deserted
or simply disappeared for one reason or another. With only a few slavers under
<<their $g.boss>> employ, the time has finally come should you with to launch
an attack into <<their $g.boss>> fort, rescuing <<yourrep $g.slaver>>.
</p>
<p>
As you want to savor the result yourself, you are planning to go personally
on this mission. But you also need two other slavers to accompany you.
Assaulting the fort directly will be dangerous, so best prepare yourselves.
</p><p>
After some careful preparation, you managed to find a particular time
where the few of <<reps $g.boss>> remaining slavers were away from the fort.
Seizing the opportunity, you led <<yourrep $g.dps>> and <<rep $g.healer>> on a
frontal assault. With no slavers left to defend the fort, your slavers'
assault were not met with any meaningful resistance, and before long you found yourself
deep inside the enemy fort, looking up to the office where <<rep $g.boss>> must
reside in.
</p>
<p>
Inside the fort, you and your slavers dispatched the remaining slavers who
were caught in surprise, since nobody alerted them of your presence.
Downing slaver after slaver, you finally arrived at what appears to be the
leader's office. You <<uadv $g.you>> kicked the door open, before finally
coming face to face with your rival who had been black-mailing you all the
past few weeks. <<Their $g.boss>> eyes cast downwards, <<they $g.boss>> knew
<<they $g.boss>> boss|was defeated, but still managed to tempt you with one
final offer...
</p>
<<if $gOutcome == 'crit'>>
<p>
Seeing the boss secured, <<yourrep $g.dps>> sneaked back from the room, and
managed to grab a particularly valuable-looking former slaver to bring home
as a slave.
</p>
<</if>><p>
You did not manage to choose the right time for the assault. By the time you
arrived at the fort, one of <<their $g.boss>> remaining slavers spotted you
from atop the fort, alerting the entire fort to your presence. There was no
hope of you and your slavers to successfully invade a well-alerted fort, so
you <<uadv $g.you>> ordered a retreat to fight another day. Fortunately,
<<rep $g.boss>> seemed unaware that it was you who launched the attack, and
assumed it to be the desperate act of some random bandit...
</p><p>
Your rival company leader is not a dumb <<man $g.boss>>, and it showed. In
anticipation of attacks, <<they $g.boss>> had carefully lined up layers after
layers of traps surrounding <<their $g.boss>> fort — traps you and your slavers
fell victim to. Sustaining injuries, you and your slavers were forced to
retreat and re-plan the attack for another day.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'search_for_a_willbreaker', /* key */
"Break Will", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'quest',
'trait',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'informer1': [ setup.qu.informer, 1],
'informer2': [ setup.qu.informer, 1],
'historian': [ setup.qu.scholar, 1],
},
{ /* actors */
'trainee': [
],
},
[ /* costs */
setup.qc.Money(-7000),
],
'Quest_search_for_a_willbreaker',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_search_for_a_willbreakerCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Money(3000),
],
],
[
'Quest_search_for_a_willbreakerCrit',
[
setup.qc.AddTag('trainee', 'in_training_defiant_slave'),
],
],
[
'Quest_search_for_a_willbreakerFailure',
[
],
],
[
'Quest_search_for_a_willbreakerFailure',
[
setup.qc.Ire('humankingdom', 5),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
A defiant slave cannot be broken via normal means. You must dedicate a team
of slavers to work for a few weeks in the <<rep setup.buildingtemplate.researchroom>>,
trying to find a way to break the slave. This will cost a great deal of money, but
the cost should be the least of your concern.
The coin spent would discover a way to break the slave, which will no doubt
be even more challenging than just finding a sum of money...
</p><<set _candidates = {
race_human: ['cor', 'mind', 'fav', 'pot', 'ord',],
race_wolfkin: ['cor', 'ord'],
race_elf: ['cor', 'mind', 'ord'],
race_catkin: ['cor', 'fav', 'ord'],
race_greenskin: ['mind', 'ord'],
race_lizardkin: ['fav', 'ord'],
race_demon: ['pot', 'ord'],
}>>
<<set _tr = setup.rng.choice(_candidates[$g.trainee.getRace().key])>>
<p>
After four long weeks of searching, your slavers found a lead in the
<<if _tr == 'cor'>>
<<lore region_vale>>.
<<set _questtt = 'corruption_cycle_breaker'>>
<<elseif _tr == 'pot'>>
<<lore region_forest>>.
<<set _questtt = 'drug_regime'>>
<<elseif _tr == 'fav'>>
<<lore region_desert>>.
<<set _questtt = 'bargain_with_the_devil'>>
<<elseif _tr == 'ord'>>
<<lore region_sea>>.
<<set _questtt = 'animal_trainer_of_the_south'>>
<<elseif _tr == 'mind'>>
<<lore region_city>>.
<<set _questtt = 'public_penance'>>
<</if>>
It is now up to you if you want to follow-up on this lead, or if you want to discard the lead.
</p>
<<run setup.qc.QuestDirect(_questtt).apply($gQuest)>>
<<if $gOutcome == 'crit'>>
<p>
Your slavers managed to find the information using only a fraction of the money they started with.
</p>
<</if>><p>
Unfortunately, your slavers were not able to found any contact or hint on how
to possibly break <<yourrep $g.trainee>>. After four weeks of such search, you
had to call off the mission for being a complete failure.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Worse still, <<yourrep $g.informer1>> informer1|was careless during one of
the information gathering, and leaked your fort information into some of the
dissidents in the <<rep $company.humankingdom>>. They view your slaving
company with some greater disdain now as a result.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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.
You can check whether or not a unit can be purified from their interact menu.
</p><p>
The purification went very smoothly.
The corruptions that was prevalent in <<reps $g.trainee>> body were greatly cleansed.
</p><p>
The purification attempt was successful, and some of the corruptions in <<reps $g.trainee>>
body was exorcised out.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did not borne result.
<<Yourrep $g.trainee>> remained as corrupted as <<they $g.trainee>> was before.
</p><p>
Unfortunately, the purification ritual was not performed correctly and backfired,
injuring <<rep $g.trainee>> intead.
</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_master,
'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_master,
'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_master,
'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_master,
'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_master,
'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_master,
'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_master,
'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_master,
'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_master,
'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>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_broken_ascent_0", /* key */
"Broken Ascent", /* name */
"Looks mindbroken, but somehow you sense there is more to the slave", /* description */
"a|appear mindbroken, but you can clearly sense that there is something else going on with the slave", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.QuestTemplate(
'broken_soul', /* key */
"Broken Soul", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'unknown',
'special',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'researcher1': [ setup.qu.scientist, 1.5],
'researcher2': [ setup.qu.scientist, 1.5],
},
{ /* actors */
'slave': [
],
'wizard': [
],
},
[ /* costs */
],
'Quest_broken_soul',
setup.qdiff.normal21, /* difficulty */
[ /* outcomes */
[
'Quest_broken_soulCrit',
[
setup.qc.Outcomes("success"),
setup.qc.QuestDirect('essence_of_joy', null),
],
],
[
'Quest_broken_soulCrit',
[
setup.qc.RemoveTitle('slave', 'quest_broken_ascent_0'),
setup.qc.AddTitle('slave', 'quest_broken_descent_0'),
setup.qc.VarSet('broken_wings_dark', 0, -1),
],
],
[
'Quest_broken_soulFailure',
[
],
],
[
'Quest_broken_soulFailure',
[
setup.qc.Injury('slave', 5),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
It has been several weeks since you obtain <<yourrep $g.slave>>. On the
surface, the slave appears to be a simple mindbroken slave.
But
<<set _m = $unit.player.getTraitWithTag('magic')>>
<<if _m>>
thanks to your mastery over <<rep _m>>, you can sense that
<<else>>
your instincts are telling you that
<</if>>
there is something else going on with the slave.
</p>
<p>
To confirm your suspicion, you've asked your magic-adept slaver <<rep
$g.wizard>> to conduct a simple magical test on the slave. Indeed, <<they
$g.wizard>> too can sense something different within the slave. Perhaps it
might be wise to have a group of slavers, including <<yourrep $g.wizard>>, to try
to study the slave, and figure out just what is wrong with <<them $g.slave>>...
</p><p>
At the end of the experiment, <<yourrep $g.wizard>> concluded that the
slave's soul had apparently been ripped out forcefully from <<them
$g.wizard>>. According to the divination <<they $g.wizard>> performed, the
soul was scattered throughout the region. Fortunately, the slave's body and in
particular their reproductive organs will always be attracted to their soul,
and hence you could use the slave's <<if
$g.slave.isHasDick()>>dick<<else>>clit<</if>> as sort-of a dowsing rod that will
point to the pieces of <<their $g.slave>> broken soul. It might be the only way if you
wish to restore the soul of your broken down toy... would you?
</p>
<<if $gOutcome == 'crit'>>
<p>
To start with, <<rep $g.wizard>> managed to find one potential lead in the
<<lore region_vale>>.
</p>
<</if>><p>
Unfortunately, your slavers were not skilled enough to figure out just what is
wrong with the slave. While <<rep $g.wizard>> could sense something is off
about the slave, <<they $g.wizard>> remained unable to put it into words, let
alone suggest what action to take.
<<if $gOutcome == 'disaster'>>
Worse, your slavers were careless in their handling of the slave, injuring the slave somewhat.
<</if>>
</p>
<p>
Perhaps you can try this again some other time.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_broken_descent_0", /* key */
"Broken Descent", /* name */
"A slave that looks mindbroken and non-special in every way, but somehow draws the attention of people around", /* description */
"a|is a mysterious slave you received that appears to be mindbroken, and not mindbroken at the same time", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_fallen_angel_1", /* key */
"Fallen Angel", /* name */
"A victim of the angel-demon war that is brought to the mortal realm in an ensuing chaos", /* description */
"a|was an angel torn from the celestial realms in one of the demon-angel wars, and a|was reborn as a mortal", /* unit text */
30000, /* slave value */
{ /* skill additives */
combat: 3,aid: 5,arcane: 2,},
)
>>
<<run new setup.Title(
"quest_joy_restored_2", /* key */
"Joy Restored", /* name */
"Joy has been restored to the slave", /* description */
null, /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_lust_restore_3", /* key */
"Lust Restored", /* name */
"Lust has been restored to the slave", /* description */
null, /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_empathy_restored_4", /* key */
"Empathy Restored", /* name */
"Empathy has been restored to the slave", /* description */
null, /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_spirit_restored_5", /* key */
"Spirit Restored", /* name */
"Spirit has been restored to the slave", /* description */
null, /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
],
{
}
)>>
<<set _res = [
setup.qc.TraitAndMakeInnate('slave', setup.trait.wings_angel),
setup.qc.TraitReplace('slave', 'subrace_angel'),
setup.qc.IfThenElse(
setup.qres.VarGte('broken_wings_dark', 3),
setup.qc.DoAll([
setup.qc.AddTraitsRandom('slave', [setup.trait.bg_assassin, setup.trait.bg_adventurer], 1, false, false),
setup.qc.TraitsReplace('slave', [setup.trait.magic_dark_master]),
setup.qc.AddTraitsRandom('slave', [setup.trait.per_evil, setup.trait.per_aggressive, setup.trait.per_dominant, setup.trait.per_logical], 2, false, false)
], undefined),
setup.qc.IfThenElse(
setup.qres.VarGte('broken_wings_dark', 2),
setup.qc.DoAll([
setup.qc.AddTraitsRandom('slave', [setup.trait.bg_noble, setup.trait.bg_mystic], 1, false, false),
setup.qc.TraitsReplace('slave', [setup.trait.magic_light, setup.trait.magic_dark]),
setup.qc.AddTraitsRandom('slave', [setup.trait.per_lunatic, setup.trait.per_masochistic, setup.trait.per_loner, setup.trait.per_dreamy], 2, false, false)
], undefined),
setup.qc.DoAll([
setup.qc.AddTraitsRandom('slave', [setup.trait.bg_knight, setup.trait.bg_healer], 1, false, false),
setup.qc.TraitsReplace('slave', [setup.trait.magic_light_master]),
setup.qc.AddTraitsRandom('slave', [setup.trait.per_submissive, setup.trait.per_empath, setup.trait.per_honorable, setup.trait.per_calm], 2, false, false)
], undefined))),
setup.qc.TraitRemove('slave', setup.trait.will_indomitable),
setup.qc.TraitRemove('slave', setup.trait.training_mindbreak),
setup.qc.RemoveTitle('slave', 'quest_broken_descent_0'),
setup.qc.RemoveTitle('slave', 'quest_joy_restored_2'),
setup.qc.RemoveTitle('slave', 'quest_lust_restore_3'),
setup.qc.RemoveTitle('slave', 'quest_empathy_restored_4'),
setup.qc.RemoveTitle('slave', 'quest_spirit_restored_5'),
setup.qc.AddTitle('slave', 'quest_fallen_angel_1'),
setup.qc.Trait('slave', setup.trait.will_defiant),
setup.qc.VarRemove('broken_wings_dark'),
setup.qc.VarSet('broken_wings_cooldown', 1, 400),
]>>
<<run new setup.QuestTemplate(
'broken_wings', /* key */
"Broken Wings", /* Title */
"darko", /* Author */
[ /* tags */
'fort',
'prep',
'unit',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'head': [ setup.qu.arcanelightveteran, 1],
'mender1': [ setup.qu.healer, 1],
'mender2': [ setup.qu.healer, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_broken_wings',
setup.qdiff.harder46, /* difficulty */
[ /* outcomes */
[
'Quest_broken_wingsCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.aid_good),
setup.qc.Equipment(setup.equipmentpool.aid_good),
],
],
[
'Quest_broken_wingsCrit',
_res,
],
[
'Quest_broken_wingsFailure',
[
setup.qc.TraumatizeRandom('head', 25),
setup.qc.TraumatizeRandom('mender1', 15),
setup.qc.TraumatizeRandom('mender2', 15),
setup.qc.VarSet('broken_wings_cooldown', 1, 10),
],
],
[
'Quest_broken_wingsFailure',
[
setup.qc.TraumatizeRandom('head', 40),
setup.qc.TraumatizeRandom('mender1', 30),
setup.qc.TraumatizeRandom('mender2', 30),
setup.qc.VarSet('broken_wings_cooldown', 1, 10),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.VarSet('broken_wings_cooldown', 1, 10),
],
)>><<set _u = setup.getUnit({title: 'quest_broken_descent_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
With all four mortal essence restored to the slave, the last step to awaken
the mind behind the lifeless eyes of <<yourrep _u>> is to mend whatever wound
that broke the slave before. And from your slaver's research, this wound is a
considerable one.
</p>
<p>
To attempt the awakening, three especially gifted healers must attend to the
slave for a month non-stop. Each must administer tender care to the slave to
soothe the spirit, restore joy, bring pleasure, and draw the empathy back.
<<set _score = $varstore.get('broken_wings_dark')>>
<<if _score >= 3>>
...or perhaps the opposite of it, given what you have chosen to do with the
slave thus far.
<<elseif _score <= 1>>
Oh yes, you will finally see the fruit of your labor, having chose to nurture the slave
ever so kindly thus far.
<<else>>
You will finally see the result of your ambivalence, and the slave will
awaken exactly as you specify... or not.
<</if>>
</p>
<p>
The ritual will be long and taxing for your slavers, and you best get comfortable...
</p>
<</if>><p>
<<Yourrep $g.head>> <<uadv $g.head>> led the healing ritual. In a carefully
designed room, your slavers tended non-stop to the poor slave for a month,
attempting to rouse whatever spirit lying dormant inside the husk of
<<therace $g.slave>>.
</p>
<p>
By the end of the first week, the slave began to utter what appeared to be
terrible nightmares. A war between angels and demons, in the land beyond even
farther beyond <<lore concept_mist>>. The slave continued to narrate to your slavers with
great detail — the clashes of celestial flesh against corrupted aberrations,
and how <<their $g.slave>> comrade fell one by one until only <<they
$g.slave>> remained.
</p>
<p>
It was in the midst of battle, and seeing no escape from the enroaching demons
and from <<their $g.slave>> upcoming demise, <<they $g.slave>> felt what <<they $g.slave>>
vaguely recall as a feeling of fear. But fear was a forbidden feeling for an
angel such as <<themself $g.slave>>, and the gods bestowed punishment upon <<them
$g.slave>> mid-war by banishing <<them $g.slave>> unto the mortal plane and
stripping <<them $g.slave>> of all that made them be before scattering it across
the land.
</p>
<p>
And you had collected and restored all of the essence back. But the
former-angel change was already permanent, and <<they $g.slave>> now possesses
a normal mortal body. Your slavers continued to soothe and pray for the poor
soul, until they can see the slave's eyes lit up for the first time, full
with life.
</p>
<p>
<<set _score = $varstore.get('broken_wings_dark')>>
<<if _score >= 3>>
Given how you have decided to corrupt <<their $g.slave>> essence so very
much, there was only anger reflected behind the slave's formerly pure
mind. Anger at <<themself $g.slave>>, anger at the demons, and more
importantly at the gods for cursing <<them $g.slave>> despite <<their
$g.slave>> service. The slave proceeded to lash out at your slavers and trying to escape
from <<their $g.slave>> predicament by spreading <<their $g.slave>> newly
restored wings wide.
<<elseif _score <= 1>>
<<They $g.slave>> suddenly broke into sobs, regretting all that <<they
$g.slave>> had done, and beg for forgiveness. Trying to return to <<their
$g.slave>> god, the slave attempted an escape from your slavers, spreading
<<their $g.slave>> newly restored wings wide.
<<else>>
<<They $g.slave>> remained in the room, unmoving, seemingly confused with the
moderate changes to their personality here and there, no doubt thanks to your
decisions thus far.
Seemingly coming to a conclusion of your intentions, <<they $g.slave>> tried to
escape from your slavers, spreading <<their $g.slave>> newly restored wings
wide.
<</if>>
</p>
<p>
Fortunately, <<their $g.slave>> body is of a mortal now, and given your
slavers' wealth of experience, they were able to subdue the former-angel. More
importantly, however, the former angel's mind is now restored, and
although <<they $g.slave>> will still require some work to be a proper slave,
the training can at least begin now. As your slavers finished their reports,
you lick your lips in anticipation of breaking a particularly hardy slave...
</p>
<<if $gOutcome == 'crit'>>
<p>
It seems the ritual had also restored some semblance of divine clothings to
the former angel. But the slave wouldn't be needing them for a good long while, and your
slavers will keep these clothes and put them to better use.
</p>
<</if>><p>
Unfortunately, after spending four consecutive week of tending to the slave,
<<yourrep $g.slave>>'s condition never improved past what was <<their $g.slave>>
formerly broken self. Your slavers were crushed that their tender
ministrations had no effect, and began questioning themselves.
</p>
<p>
There will surely be another chance to reattempt this quest later.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
],
{
}
)>>
<<set _criteriadowser = new setup.UnitCriteria(
null, /* key */
'Essence Dowser', /* name */
[
setup.trait.race_wolfkin,
setup.trait.bg_wildman,
setup.trait.bg_hunter,
setup.trait.bg_woodsman,
setup.trait.bg_nomad,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.per_active,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
],
[
setup.trait.bg_royal,
setup.trait.bg_boss,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_knight,
setup.trait.bg_metalworker,
setup.trait.bg_engineer,
setup.trait.bg_scholar,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_artisan,
setup.trait.bg_laborer,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_raider,
setup.trait.bg_clerk,
setup.trait.bg_maid,
setup.trait.bg_merchant,
setup.trait.bg_foodworker,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
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.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'essence_of_empathy', /* key */
"Essence of Empathy", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'desert',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'dowser': [ _criteriadowser, 1],
'distractor': [ setup.qu.seducer, 1],
'thief': [ setup.qu.thief, 1],
},
{ /* actors */
'orc': 'subrace_orc',
},
[ /* costs */
],
'Quest_essence_of_empathy',
setup.qdiff.hard36, /* difficulty */
[ /* outcomes */
[
'Quest_essence_of_empathyCrit',
[
setup.qc.Outcomes("success"),
setup.qc.EquipmentDirect('brawn_rear'),
],
],
[
'Quest_essence_of_empathyCrit',
[
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Opportunity('restore_the_empathy', {
slave: "slave",
}),
setup.qc.Favor('humandesert', 100),
],
],
[
'Quest_essence_of_empathyCrit',
[
setup.qc.TraumatizeRandom('distractor', 30),
],
],
[
'Quest_essence_of_empathyCrit',
[
setup.qc.TraumatizeRandom('dowser', 30),
setup.qc.TraumatizeRandom('distractor', 30),
setup.qc.TraumatizeRandom('thief', 30),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('restore_the_empathy'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_broken_descent_0'),
setup.qres.NoTitle('quest_empathy_restored_4')
]),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'quest_broken_descent_0'})>>
<<set _v = setup.getAnySlaver()>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
An unusual request for assistance has come from the <<lore region_desert>>. A
settlement has asked for your help in their plight against one of the orc tribes.
Normally, you'd expect this to be a combat mission, but the request is a
little different this time.
</p>
<p>
Apparently, one of the brutish orc chieftains in the desert has a recent
sudden change of heart. The orc would come to various villages to bring "joy"
and "happiness" to the villagers, embracing every one of them and smooching
them dead. The effects are horrifying — those unlucky enough to be
deep-kissed would often fall into comas and traumatized for the rest of their
lives.
</p>
<p>
<<Yourrep _v>> suggested that this might be the work of a certain essence — a
part of <<rep _u>> that went missing. Perhaps this could be an ideal mission
to take: both obtaining the gratitude of the people of the deserts as well as
advancing one more step in restoring <<rep _u>> back to usable slave state.
All you need is to send one slaver to distract the orc while another try to
steal whatever personal belonging is responsible for the orc's bizarre change
of heart.
</p>
<</if>><p>
As luck would have it, your slavers arrived at the settlement just as the
infamous orc chieftain is giving them a surprise visit. Using <<rep
$g.slave>> as a dowsing rod, <<rep $g.dowser>> confirmed your slavers'
suspicion: an essence of <<rep $g.slave>> was the culprit and it was
somewhere among the belongings of the orc. With the confirmation, <<rep
$g.distractor>> let out a huge long sigh as <<they $g.distractor>>
began to work.</p>
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<p>
<<Yourrep $g.distractor>> threaded a very careful line
distracting the orc, while making sure to avoid the smooch.
Meanwhile, <<rep $g.thief>> sneaked from behind the orc.
Searching the pockets and bag yielded nothing, and there was only really one
possible place left...
<<Rep $g.distractor>> had to work even harder to distract the orc
as <<rep $g.thief>> disgustedly shoved <<their $g.thief>> <<uhands $g.thief>>
inside the orc's unwashed pants and into <<their $g.orc>> underwear — the secret stash
location of the orcs.
<<if $gOutcome == 'crit'>>
In one fell swoop, <<rep $g.thief>> yanked <<their $g.thief>> <<uarms $g.thief>> back,
somehow taking both the underwear and the yellow-ish stone inside.
<<else>>
Sure enough, a small yellow-ish stone was found, which <<rep $g.thief>> proceeded to yanked out.
<</if>>
With the stone gone, the orc demeanor visibly reverted back to <<their
$g.orc>> brutish self, and your slavers made the right decision to flee as
fast as they can before the orc regained <<their $g.orc>> senses.
</p>
<<else>>
<p>
Unfortunately, <<reps $g.distractor>> seduction attempts proved too successful.
Without warning, the orc roughly grabbed <<yourrep $g.distractor>> before forcing a
deep kiss with <<theslaver $g.distractor>>. <<Rep $g.thief>> and <<utheirrel $g.thief
$g.dowser>> <<rep $g.dowser>> watched in horror as <<rep $g.distractor>>
struggled during the unwanted smooch — face starting to go pale from both
disgust and lack of oxygen. Eventually, the smooch mercifully ended, and <<rep
$g.distractor>> dropped to the floor, traumatized by the entire smooch...
</p>
<<if $gOutcome == 'disaster'>>
<p>
The orc mistook your other's slavers concerned eyes for jealousy, and at the
end of the day, none of your slavers were spared from the wrathful kiss.
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
],
{
}
)>>
<<set _criteriadowser = new setup.UnitCriteria(
null, /* key */
'Essence Dowser', /* name */
[
setup.trait.race_wolfkin,
setup.trait.bg_wildman,
setup.trait.bg_hunter,
setup.trait.bg_woodsman,
setup.trait.bg_nomad,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.per_active,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
],
[
setup.trait.bg_royal,
setup.trait.bg_boss,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_knight,
setup.trait.bg_metalworker,
setup.trait.bg_engineer,
setup.trait.bg_scholar,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_artisan,
setup.trait.bg_laborer,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_raider,
setup.trait.bg_clerk,
setup.trait.bg_maid,
setup.trait.bg_merchant,
setup.trait.bg_foodworker,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
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.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'essence_of_joy', /* key */
"Essence of Joy", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'vale',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'dowser': [ _criteriadowser, 1],
'alchemist': [ setup.qu.alchemist, 1],
'herbalist': [ setup.qu.herbalist, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_essence_of_joy',
setup.qdiff.normal26, /* difficulty */
[ /* outcomes */
[
'Quest_essence_of_joyCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Item(setup.item.potion_boon),
],
],
[
'Quest_essence_of_joyCrit',
[
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Opportunity('restore_the_joy', {
slave: "slave",
}),
setup.qc.Item(setup.item.healing_potion_greater),
setup.qc.Item(setup.item.level_up_potion_basic),
],
],
[
'Quest_essence_of_joyFailure',
[
setup.qc.BoonizeRandom('herbalist', 2),
setup.qc.BoonizeRandom('dowser', 2),
setup.qc.BoonizeRandom('alchemist', 2),
],
],
[
'Quest_essence_of_joyFailure',
[
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('restore_the_joy'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_broken_descent_0'),
setup.qres.NoTitle('quest_joy_restored_2')
]),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'quest_broken_descent_0'})>>
<<set _v = setup.getAnySlaver()>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
There are witches living on the <<lore region_vale>>, and many scary tales are told about what they would do to those unlucky enough to be captured by them. However, you've recently heard about rumors of a certain witch whose kindness shines, and often visit villages to give her aid to the needy. A strange anomaly, you think to yourself.
</p>
<p>
<<Yourrep _v>> suggested that there might be more to this tale — perhaps she is under the influence of an essence of <<rep _u>>? If you trust <<reps _v>> hunch, you could try to send a group of slavers under the guise of helping out the witch with her philantrophy work. With luck, they might recover whatever it is that's causing her odd reversal of personality...
</p>
<</if>><p>
The witch's abode was unlike anything your slavers have expected. Instead of a decrepit hut, they were greeted with a proper, newly built house, seemingly built by a grateful nearby village. Seeing your slavers, she greeted them with open arms, greatly unnerving your slavers.
</p>
<p>
Getting to work, <<rep $g.alchemist>> <<uadv $g.alchemist>> offered to lend her aid in whatever she was doing, which she gratefully accepted. In the coming weeks, your slavers helped her concoct various medicines and remedies for the maladies ravaging the nearby villagers, all for free.
<<if $g.alchemist.isHasTrait('per_cruel')>>
<<Their $g.alchemist>> cruel heart despised the idiocy of doing this for free,
but deep down
<<else>>
But despite the nice and warm feeling inside of <<them $g.alchemist>>,
<</if>>
<<their $g.alchemist>> instincts told them something is off about it all.
</p>
<p>
During one of the nights, <<rep $g.alchemist>> pretended to be sleeping before waking up in the middle of the night and scoured the entire hut.
Finding nothing on the ground floor, <<they $g.alchemist>> accidentally hit a hard bump in the floor, revealing a hatch to a cellar. There, a strange reddish stone sat nicely on a shelf, and <<rep $g.alchemist>> could feel strange, warm energy glowing from within. Intrigued, <<rep $g.alchemist>> pocketed the stone away, to be brought back home once <<they $g.alchemist>> finish the job.
</p>
<p>
Eventually, your slavers bid farewell to the witch. She offered some gifts for your slavers — potions for various maladies. All the while <<rep $g.alchemist>> suppressed the urge to do more good thing, trying <<their $g.alchemist>> best to think with their <<ugenital $g.alchemist>> instead of <<their $g.alchemist>> heart.
<<if $g.alchemist.isHasTrait('per_cruel')>>
A complete change of heart from the cruel slaver.
<</if>>
</p>
<p>
Few days later, you've heard rumors that the witch, the very same witch whom your slavers had kindly helped with, had renewed her reign of terror in the nearby settlements...
If there was any doubt, they are gone now — The shift of personality is due to this strange stone your slaver brought back home.
</p><p>
Your slavers were unable to locate the hut, even with <<rep $g.dowser>> using the toy <<rep $g.slave>> as a guide. They would just have to settle with a pleasant journey in the vale, enjoying the fresh air.
<<if $gOutcome == 'failure'>>
At least your slavers seemed happy with the unexpected leisurely walk?
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"essence_of_lust0",
"Neko Whore",
'subrace_neko', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_whore),
setup.qc.TraitReplace('unit', setup.trait.per_lustful),
],
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
],
{
}
)>>
<<set _criteriadowser = new setup.UnitCriteria(
null, /* key */
'Essence Dowser', /* name */
[
setup.trait.race_wolfkin,
setup.trait.bg_wildman,
setup.trait.bg_hunter,
setup.trait.bg_woodsman,
setup.trait.bg_nomad,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.per_active,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
],
[
setup.trait.bg_royal,
setup.trait.bg_boss,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_knight,
setup.trait.bg_metalworker,
setup.trait.bg_engineer,
setup.trait.bg_scholar,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_artisan,
setup.trait.bg_laborer,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_raider,
setup.trait.bg_clerk,
setup.trait.bg_maid,
setup.trait.bg_merchant,
setup.trait.bg_foodworker,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
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.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'essence_of_lust', /* key */
"Essence of Lust", /* Title */
"darko", /* Author */
[ /* tags */
'trait',
'forest',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'dowser': [ _criteriadowser, 1],
'convincer2': [ setup.qu.convincer, 1],
'convincer1': [ setup.qu.convincer, 1],
},
{ /* actors */
'neko': 'essence_of_lust0',
},
[ /* costs */
],
'Quest_essence_of_lust',
setup.qdiff.hard31, /* difficulty */
[ /* outcomes */
[
'Quest_essence_of_lustCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('neko', "a|was a former whore who \"retired\" from a|their job and \"recruited\" into your company", undefined),
],
],
[
'Quest_essence_of_lustCrit',
[
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
setup.qc.Opportunity('restore_the_lust', {
slave: "slave",
}),
],
],
[
'Quest_essence_of_lustFailure',
[
setup.qc.MoneyCustom(-3000),
],
],
[
'Quest_essence_of_lustFailure',
[
setup.qc.MoneyCustom(-6000),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('restore_the_lust'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_broken_descent_0'),
setup.qres.NoTitle('quest_lust_restore_3')
]),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'quest_broken_descent_0'})>>
<<set _v = setup.getAnySlaver()>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
Your scouts tracked one of the missing essences of <<rep _u>> into the
<<lore location_npc>>. Specifically, they tracked the source to one of the
nameless whorehouses in the city. Apparently, one of its most "productive"
neko employees had recently just retired, after <<they $g.neko>> had a
suddenly found disgust for the profession. This may just be the lead you are
looking for...
</p>
<</if>><p>
Using <<reps $g.slave>> <<if $g.slave.isHasDick()>>dick<<else>>clit<</if>> as
a living dowsing rod, <<rep $g.dowser>> pinpointed the source of the anomaly to one of
the small houses in the city. After knocking on the door, your slavers were
greeted with a neko seemingly downtrodden on <<their $g.neko>> luck, who was
looking for a job. As <<they $g.neko>> explained, <<they $g.neko>> retired
from <<their $g.neko>> previous occupation because whoring feels wrong — that
a <<man $g.neko>> should only dedicate <<themself $g.neko>> to just one
person. A strange thing to say for a neko and <<their $g.neko>> clearly very
sexual culture.
</p>
<p>
Your slavers came up on the spot with a strategy: <<rep $g.convincer1>> will
try <<their $g.convincer1>> best recruiter impression while <<rep
$g.convincer2>> would scour the place for the source of this sudden change in
personality. After a while, <<rep $g.convincer2>> found a green-ish stone
stuck on the chimney of the house. It took <<them $g.convincer2>> an hour to
pull it out, before returning back to the entrance. With the stone very close
to all parties involved, all your slavers could feel the power emanating from
the stone: the power of chastity suggestion. Your slavers' minds became very
clear, and all thoughts of sex were removed almost entirely to their sides.
This must be the essence you were looking for.
</p>
<p>
With their goal achieved, <<yourrep $g.convincer1>> <<uadv
$g.convincer1>> excused <<themself $g.convincer1>>, before going back to your
fort with the stone in tow.
<<if $gOutcome == 'crit'>>
However, it turned out that <<reps $g.convincer1>> recruiter impression was
so strong that the neko later showed up at your fort, apparently trying to
"apply" for the position offered. Well, there is always a space in your
dungeons for a willing slave!
<</if>>
</p><p>
Instead of successfully finding the source, your slavers got entirely lost in
the complex layout of the city. By the time they decided to give up and
return, they noticed their pockets were way lighter than what they had when they entered the city.
It appeared that your slavers had fallen victim to the rampant pickpocketry in the
city, and you'll have to compensate them from the company's coffers...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"essence_of_spirit0",
"wizard",
'subrace_humansea', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_mystic),
setup.qc.AddTraitsRandom('unit', [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),
setup.qc.TraitsReplace('unit', [setup.trait.per_active, setup.trait.per_sexaddict]),
],
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.HasTitle('quest_broken_descent_0'),
],
{
}
)>>
<<set _criteriainfiltrator1 = new setup.UnitCriteria(
null, /* key */
'Magical Infiltrator', /* name */
[
setup.trait.bg_mythical,
setup.trait.bg_mystic,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1.5,
arcane: 1.5,
}
)>>
<<set _criteriainfiltrator2 = new setup.UnitCriteria(
null, /* key */
'Magical Infiltrator', /* name */
[
setup.trait.bg_mythical,
setup.trait.bg_mystic,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1.5,
arcane: 1.5,
}
)>>
<<set _criteriadowser = new setup.UnitCriteria(
null, /* key */
'Essence Dowser', /* name */
[
setup.trait.race_wolfkin,
setup.trait.bg_wildman,
setup.trait.bg_hunter,
setup.trait.bg_woodsman,
setup.trait.bg_nomad,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.per_active,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_attentive,
setup.trait.per_logical,
setup.trait.per_chaste,
],
[
setup.trait.bg_royal,
setup.trait.bg_boss,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.bg_knight,
setup.trait.bg_metalworker,
setup.trait.bg_engineer,
setup.trait.bg_scholar,
setup.trait.bg_noble,
setup.trait.bg_courtesan,
setup.trait.bg_informer,
setup.trait.bg_slaver,
setup.trait.bg_artisan,
setup.trait.bg_laborer,
setup.trait.bg_thug,
setup.trait.bg_thief,
setup.trait.bg_raider,
setup.trait.bg_clerk,
setup.trait.bg_maid,
setup.trait.bg_merchant,
setup.trait.bg_foodworker,
setup.trait.bg_whore,
setup.trait.bg_unemployed,
setup.trait.bg_slave,
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.vagina_gape,
setup.trait.anus_gape,
setup.trait.per_dreamy,
setup.trait.per_empath,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
],
{
slaving: 1,
aid: 1,
arcane: 1,
}
)>>
<<run new setup.QuestTemplate(
'essence_of_spirit', /* key */
"Essence of Spirit", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'trait',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'infiltrator1': [ _criteriainfiltrator1, 1],
'infiltrator2': [ _criteriainfiltrator2, 1],
'dowser': [ _criteriadowser, 1],
},
{ /* actors */
'wizard': 'essence_of_spirit0',
},
[ /* costs */
],
'Quest_essence_of_spirit',
setup.qdiff.hard41, /* difficulty */
[ /* outcomes */
[
'Quest_essence_of_spiritCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('wizard', "a|was a wizard known for a|their vast debauchery, and had a temporary change of heart due to holding the Essence of Diligence", undefined),
],
],
[
'Quest_essence_of_spiritCrit',
[
setup.qc.Opportunity('restore_the_spirit', {
slave: "slave",
}),
setup.qc.Ire('humansea', 1),
setup.qc.Equipment(setup.equipmentpool.arcane),
setup.qc.MoneyCustom(2000),
setup.qc.VarSet('broken_wings_cooldown', '1', 10),
],
],
[
'Quest_essence_of_spiritFailure',
[
setup.qc.Injury('slave', 3),
],
],
[
'Quest_essence_of_spiritDisaster',
[
setup.qc.Corrupt('infiltrator1'),
setup.qc.Corrupt('infiltrator2'),
setup.qc.Injury('infiltrator1', 11),
setup.qc.Injury('infiltrator2', 10),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoOpportunity('restore_the_spirit'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave),
setup.qres.HasTitle('quest_broken_descent_0'),
setup.qres.NoTitle('quest_spirit_restored_5')
]),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getUnit({title: 'quest_broken_descent_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
Your scouts have located what appears to be part of <<rep _u>>'s lost essence
in the <<lore region_sea>>. They pinpointed the location to a lone wizard
tower, standing menacingly in the middle of the ocean. While the wizard is
infamous for <<their $g.wizard>> debauchery, recently <<they $g.wizard>>
wizard|have not been doing any of such sort and instead locks <<themself
$g.wizard>> inside <<their $g.wizard>> tower, seemingly deep in study.
According to your scouts, this is highly atypical for the wizard, which tipped
them that perhaps the wizard is affected by the lost essence one way or
another...
</p>
<p>
You could try to send a group of slavers to retrieve the essence. This will
be rather dangerous however, as no doubt the wizard must have set many traps
within <<their $g.wizard>> tower to ward off intruders. You must send two
particularly stealthy slavers for the job — better if they know a little bit
of magic too! And of course, you also need to send <<yourrep _u>>, together
with another slaver to use the slave as a dowsing rod to locate the hidden
tower...
</p>
<</if>><p>
Using <<yourrep $g.slave>> as a living dowsing rod, <<rep $g.dowser>> <<uadv
$g.dowser>> led your slavers on a voyage south, and eventually located the
isolated wizard tower. The tower stood imposingly on a lone island, alone
seemingly with no one watching over it. But your slavers knew better than to
let their guards down — there is no such thing as an unguarded wizard tower,
especially in the <<lore region_sea>>.
</p>
<p>
Once the boat docked on a secluded corner of the island, <<rep
$g.infiltrator1>> and <<utheirrel $g.infiltrator1 $g.infiltrator2>> <<rep
$g.infiltrator2>> got to work. They deftly avoided the various traps hidden
throughout the islands, and judging from how some of them were already
tripped, they probably don't want to be caught by the traps.
Zig-zagging across the forest, they skillfully dodged the numerous traps until they
reached the tower.
</p>
<p>
Peeking through the tower window, they could see the wizard has seemingly
fallen asleep on <<their $g.wizard>> desk. A perfect opportunity for your
slavers! Ditching the surely warded door, your slavers launched a hooked rope
into the window, before climbing it into the wizard's chambers.
</p>
<p>
The wizard's chambers were extremely messy — it seemed that <<they $g.wizard>> had
been dedicatedly studying for the past few months. Various posters of
naked <<girl $g.slave>>s, no doubt the normal hobby of the wizard, were
scattered on the floor, replaced with whiteboards full of magical
calculations. And sitting in the center of the room was a strange blue-ish
stone, glowing ever so slightly. <<Rep $g.infiltrator1>> suddenly had the
urge to study one of the tomes in the chamber,
<<if $g.infiltrator1.isHasTrait('per_studious')>>
and while the studious slaver has always been eager for new knowledge, the
urge almost defied normal desire.
<<elseif $g.infiltrator1.isHasTrait('per_active')>>
a complete change of heart from <<theslaver $g.infiltrator1>> who usually despise any kind of studying.
<<else>>
<</if>>
If it not for <<reps $g.infiltrator2>> interference, <<rep $g.infiltrator1>>
would probably refuse to leave the chamber. Clearly, this stone was exactly
the reason for wizard's change of heart in the recent days — from a
debauched sorcerer into a model studious wizard — and the object of your
search.
</p>
<p>
With <<rep $g.infiltrator1>> and the stone in tow, your slavers wisely decided
to retreat from the island.
<<if $gOutcome == 'crit'>>
But seeing the juicy target in the wizard sleeping ever so soundly, your
slavers were unable to resist and gambled on the risk, binding the wizard
before gagging <<them $g.wizard>> to prevent any spells cast and bringing the
poor soul back to your fort as a new slave, complete with some of <<their
$g.wizard>> wizarding attire.
<<else>>
Seeing the sleeping wizard however, <<rep $g.infiltrator2>> managed to strip
<<them $g.wizard>> of one of <<their $g.infiltrator2>> clothings and bring it home as a souvenir.
<</if>>
The ride home was relatively uneventful, save for the fact that your slavers
all eagerly headed to the library once they arrive back at your fort. Not something you see
everyday.
Their eagerness for study did not last long, however, and as for <<rep $g.infiltrator1>>,
<<if $g.infiltrator1.isHasTrait('per_studious')>>
while the studious slaver can still often be seen in the library, it is more
in norm of what the studious slaver used to do.
<<else>>
<<therace $g.infiltrator1>> nowadays can be seen spending <<their $g.infiltrator1>> free time back <<uhobbyverb $g.infiltrator1>>.
<</if>>
</p>
<p>
It is time to decide how to return this essence to <<rep $g.slave>>...
</p><p>
<<Yourrep $g.dowser>> dowser|was too harsh in using the slave for locating
the essence. By mid-quest, the slave's <<ugenital $g.slave>> was already far too punished
and no longer useful as a dowsing rod.
Your slavers were unable to locate the tower within the <<lore region_sea>>.
</p><p>
In a strange and unexpected twist, your slavers' ship were boarded by demonic
pirates. Although your slavers managed to repel the intruders, they were
heavily injured and corrupted during the fight, and was forced to retreat
back to the fort to recuperate.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_choose_your_own_adventure_hero1',
"Hero 1",
'subrace_humanvale', /* pools */
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",
'subrace_humanvale', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scavenger1': setup.qu.scavenger,
'scavenger2': setup.qu.scavenger,
'guard': setup.qu.guard, },
{ /* actors */
'hero1': 'quest_choose_your_own_adventure_hero1',
'hero2': 'quest_choose_your_own_adventure_hero2',
},
[ /* costs */
],
'Quest_heroic_beginnings',
setup.qdiff.normal9, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_beginningsCrit',
[
setup.qc.MoneyCrit(),
setup.qc.Outcomes('failure'),
],
], [
'Quest_heroic_beginningsCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Outcomes('failure'),
],
], [
'Quest_heroic_beginningsCrit',
[
setup.qc.VarSet('choose_your_own_adventure_progress', '2', -1),
setup.qc.SetCooldownEvent('choose_your_own_adventure_chapter_2', 5),
],
], [
'Quest_heroic_beginningsCrit',
[
setup.qc.Injury('scavenger1', 2),
setup.qc.Injury('scavenger2', 2),
setup.qc.Injury('guard', 2),
setup.qc.Outcomes('failure'),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '1'), ],
[ /* expired outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><p>
A village in the <<lore region_vale>> had been burned down by raiders,
seemingly with no survivors.
You can still send a group of slavers over to the village to scavenge what's left —
chances are that there would still be plenty of loot left unlooted by the raiders,
if you know where to look.
</p>
<p>
In the 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 couldn't be anything but a coincidence?
</p><<if $gOutcome == 'crit'>>
<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>
<<elseif $gOutcome == 'success'>>
<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 remained locked. Your slavers made quick work of the lock and loot the valuables left inside.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately the raiders burnt most of the houses down, leaving whatever valuables they left behind useless.
</p>
<<else>>
<p>
Unfortunately the raiders burnt most of the houses down, leaving whatever valuables they left behind useless. Worse, your slavers encoutered the very same raiders on their way back,
which harried them with arrows, slightly injuring your slavers.
</p>
<</if>>
<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 <<name $g.hero1>> and <<name $g.hero2>>.
With nothing left for them in their village, they were 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 made it sounds as if they know there was some greater forces in play of their village's destruction.
</p>
<p>
Seeing a potential client, however, your slavers informed the <<= $varstore.get('choose_your_own_adventure_siblings')>> of your company, who took information gathering as a secondary job. They seemed to consider your slavers' offer seriously. Perhaps you will hear from them again...
</p>/* PROOFREAD COMPLETE */
<<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.SetCooldownQuest('choose_your_own_adventure_', 50),
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', "a|was an ordinary villagefolk-turned-hero whose journey a|was prophesied in a mysterious book", undefined),
setup.qc.Slave('hero2', "a|was an ordinary villagefolk-turned-hero whose journey a|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',
'fort',
], /* tags */
3, /* weeks */
setup.INFINITY, /* quest expiration weeks */
{ /* roles */
'you': _criteriayou,
'defender': setup.qu.defender,
'healer': setup.qu.healer, },
{ /* actors */
'hero1': 'quest_choose_your_own_adventure_hero1',
'hero2': '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 the last time you read it,
all its chapters seemingly complete with the final chapter detailing the end of your company.
</p>
<p>
If you choose to heed the warning in the book, then
you must maintain being on guard, and keep watch for the upcoming assault by the
very same <<= $varstore.get('choose_your_own_adventure_lovers')>>
whose journey you have been keeping track over.
The fight will be fierce, but everything you have worked hard for 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 <<dangertext "dangerous">>, especially to yourself.
</p><p>
You and a group of your chosen slavers spent the last few weeks doing your
best preparations
— all the fort walls had been reinforced, and your office, where
the book resides, was made extra secure. Nothing else was unfortunately written on the
book, giving you no clue on how the heroes would launch an assault on your fort.
</p>
<p>
After two weeks of waiting, during a fateful night a loud crashing sound was heard from inside the fort.
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
You saw the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
having succesfully sneaked past your slavers into the courtyard, 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 advanced into your position, seemingly with the foreknowledge
of where you were hiding.
<</if>>
<<else>>
<<if $varstore.get('choose_your_own_adventure_caution') == 'caution'>>
You saw an invicibility spell fizzling out, revealing the
<<= $varstore.get('choose_your_own_adventure_lovers')>> already inside your court and heading towards you.
<<else>>
A loud bang was heard just outside your fort, which distracted your slavers while the
<<= $varstore.get('choose_your_own_adventure_lovers')>> brazenly entered your court and advanced to your position.
<</if>>
<</if>>
There was no time to waste, and you hurriedly call over <<yourrep $g.defender>> and <<utheirrel $g.defender $g.healer>> <<rep $g.healer>> to prepare for an inevitable fight.
</p>
<p>
Finally face to face with you, you could 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')>>'s
eyes, as they laid their accusations on you.
Apparently the final fight against the demon last time made them think of the
demon's parting words — how did your slavers seemingly always knew where they should
go? The final straw was the first meeting with your slavers — on that
fateful day, where they met your slavers walking away from their burning
village.
</p>
<p>
Connecting the dots, you realized that the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
now firmly believe that you were 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 your <<men $g.healer>>.
It seems there is no turning back at that point, and the only thing left was to fight it out.
</p>
<p>
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
As you saw the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
unsheathe their weapons, you prepared your trusty <<uweapon $unit.player>> while your slavers
prepared their weapons.
Soon, the sound of metal against metal could 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 dodged 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 peppering all of you in injuries.
<<else>>
<<= $g.hero1.getName()>>'s attack connected badly with your body, injuring you gravely.
<</if>>
<<else>>
As you sawa the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
starting to chant a spell, you and your slavers hurriedly rushed and attacked
them. Soon, the sound of wind and explosions could 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 managed 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 seemed to be on your side, as a stray attack hit the book, which
immediately glowed dark and drowning the room in darkness. In a stroke of luck,
apparently the book still maintained its very strong connections to the
<<= $varstore.get('choose_your_own_adventure_lovers')>> and the stray hit stunned them for a good while.
You ordered <<rep $g.defender>> to rush and rip apart the book, which <<they
$g.defender>> did <<uadv $g.defender>>.
The book emitted a loud screeching sound which disoriented both the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
and also yourself — it seemed you
too maintained a connection to the book.
But its effects were 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 seemed to be the first time in
ages you breathed a sigh of relief.
</p>
<p>
Having secured the
<<= $varstore.get('choose_your_own_adventure_lovers')>> to prepare them for their new lives as slaves,
you surveyed the damage in your fort.
Looks like everything else remained mostly fine, except perhaps the book which had been shred to smitherens. Before your eyes, the scattered pages of the book one by one flickered into black fire until nothing remained.
</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 for a good while.
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 under your management.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'heroic_guidance', /* key */
"Heroic Guidance", /* Title */
"darko", /* Author */
[ 'forest', 'money'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scout': setup.qu.scout_forest,
'wizard': setup.qu.arcaneearth,
'convincer': setup.qu.convincer, },
{ /* actors */
'hero1': 'quest_choose_your_own_adventure_hero1',
'hero2': 'quest_choose_your_own_adventure_hero2',
'sage': '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),
setup.qc.SetCooldownEvent('choose_your_own_adventure_chapter_3', 5),
],
], [
'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.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),
setup.qc.SetCooldownEvent('choose_your_own_adventure_chapter_3', 5),
],
], [
'Quest_heroic_guidanceFailure',
[
setup.qc.SetCooldownQuest(null, 10),
],
], [
'Quest_heroic_guidanceFailure',
[
setup.qc.SetCooldownQuest(null, 10),
setup.qc.Injury('scout', 3),
setup.qc.Injury('wizard', 3),
setup.qc.Injury('convincer', 3), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '3'), ],
[ /* expired outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><p>
A pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>> has approached your
company to hire your information gathering services. (You offer those too, apparently.)
In their quest for
<<= $varstore.get('choose_your_own_adventure_revenge')>>,
they need the advice of a great sage living somewhere in the <<lore region_forest>>.
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>
<<Yourrep $g.scout>> scout|was 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 was inhabited by a sole sage, who seemed to live off <<their $g.sage>> own crops alone.
</p>
<p>
Your guests <<= $g.hero1.getName()>> and <<= $g.hero2.getName()>> and the
sage spent some time, where the duo
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
passionately explained their quest to exact revenge on whoever was responsible
for the destruction of their village.
<<else>>
explained the plights that they had endured so far, and what they were trying
to do to make sure it would never happen again.
<</if>>
In the end, they implored 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'>>
sword-fighting. It would be a difficult training,
<<else>>
magic. It would be challenging study,
<</if>>
but the students seemed to be eager about it.
Having completed their mission, your slavers were paid handsomely for their services.
Before they leave, the slavers even received some blessings from the sage for the weeks to come.
</p><p>
Unfortunately, <<rep $g.scout>> scout|was never able to locate the sage.
Disappointed, your slavers apologized to the adventurers before leaving for home
with no pay in <<uhands $g.scout>>. Perhaps they can try again some day.
</p>
<<if $gOutcome == 'disaster'>>
<p>
On their way back, they were attacked by feral forest animals and suffered minor injuries.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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_direct),
]),
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_direct),
]),
]),
),
)>>
<<run new setup.QuestTemplate(
'heroic_passion', /* key */
"Heroic Passion", /* Title */
"darko", /* Author */
[ 'city', 'money', 'unknown'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'appraiser1': setup.qu.appraiser,
'appraiser2': setup.qu.appraiser,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'hero1': 'quest_choose_your_own_adventure_hero1',
'hero2': 'quest_choose_your_own_adventure_hero2',
},
[ /* costs */
],
'Quest_heroic_passion',
setup.qdiff.normal29, /* difficulty */
[ /* outcomes */
[
'Quest_heroic_passionCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyNormal(),
],
], [
'Quest_heroic_passionCrit',
[
_ifthenelse,
setup.qc.MoneyNormal(),
setup.qc.VarSet('choose_your_own_adventure_progress', '6', -1),
setup.qc.Equipment(setup.equipmentpool.all_combat),
setup.qc.SetCooldownEvent('choose_your_own_adventure_chapter_4', 5),
],
], [
'Quest_heroic_passionFailure',
[
setup.qc.SetCooldownQuest(null, 10),
],
], [
'Quest_heroic_passionDisaster',
[
setup.qc.SetCooldownQuest(null, 10),
setup.qc.MoneyCustom(-1500),
],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '5'), ],
[ /* expired outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><p>
Having seemingly finished with their training in the forests,
the pair of
<<= $varstore.get('choose_your_own_adventure_siblings')>>
<<name $g.hero1>> and <<name $g.hero2>>
once again arrives at your fort's doorsteps. During their training, they
managed to find the source of their village's demise — a demonic lord
who loves nothing but to toy with humans. To
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
exact their revenge,
<<else>>
make sure the tragedy never happen again to anyone,
<</if>>
they are planning to brave the dangers of the <<lore region_desert>>. But first,
they need good equipments from the <<lore region_city>>.
</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>
After appearing three times in a row,
this cannot be coincidence yet again. To make absolutely sure that this
is related to that "Choose Your Own Adventure" magical book you've been perusing of late,
you should ask the slavers you send on this quest to also check whether the pair of <<=
$varstore.get('choose_your_own_adventure_siblings')>>
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
are actually lovers now.
<<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 looked 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 surrounding 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, browsing through the 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 the slew of low-quality items, <<rep $g.appraiser1>> <<uadv
$g.appraiser1>> 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 sneaked into the
<<= $varstore.get('choose_your_own_adventure_siblings')>>'s
room and tried to see what raunchy things was happening inside.
<<if $varstore.get('choose_your_own_adventure_lovers') == 'lovers'>>
Indeed, they often saw the two
<<= $varstore.get('choose_your_own_adventure_siblings')>>
compassionately kissing each other with abandon.
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 peeked inside, they often see the two arguing against each
other, and trying to prove to each other that they was 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 peeked inside, they see the two
<<= $varstore.get('choose_your_own_adventure_siblings')>>
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><p>
The market was 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')>>
were actually
<<= $varstore.get('choose_your_own_adventure_lovers')>>
now.
</p><p>
Your slavers got scammed by an unscrupulous merchant who sold fake weapons
that were repainted to look brand new.
They paid a great sum of money for the fake weapons, and only after they were
outside the city did they realized their mistake.
The
<<= $varstore.get('choose_your_own_adventure_siblings')>>
understandably demanded their money back for such a sloppy job.
</p>/* PROOFREAD COMPLETE */
<<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.tough_nimble),
setup.qc.TraitReplace('hero1', setup.trait.per_curious),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.tough_nimble),
setup.qc.TraitReplace('hero2', setup.trait.per_curious),
]),
]),
setup.qc.DoAll([
setup.qc.OneRandom([
setup.qc.TraitReplace('hero1', setup.trait.tough_tough),
setup.qc.TraitReplace('hero1', setup.trait.per_stubborn),
]),
setup.qc.OneRandom([
setup.qc.TraitReplace('hero2', setup.trait.tough_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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'healer': setup.qu.healer,
'tank': setup.qu.tank,
'dps': setup.qu.dps, },
{ /* actors */
'hero1': 'quest_choose_your_own_adventure_hero1',
'hero2': 'quest_choose_your_own_adventure_hero2',
'demon': 'subrace_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),
setup.qc.SetCooldownEvent('choose_your_own_adventure_final_chapter', 8),
],
], [
'Quest_heroic_showdownCrit',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.SetCooldownEvent('choose_your_own_adventure_final_chapter', 8),
setup.qc.Corrupt('tank'),
setup.qc.MoneyCustom(4000),
setup.qc.Injury('tank', 1), ],
], [
'Quest_heroic_showdownCrit',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.MoneyCustom(3000),
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.SetCooldownEvent('choose_your_own_adventure_final_chapter', 8),
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_showdownCrit',
[
_ifthenelse1,
_ifthenelse2,
setup.qc.VarSet('choose_your_own_adventure_progress', '8', -1),
setup.qc.SetCooldownEvent('choose_your_own_adventure_final_chapter', 8),
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, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '7'), ],
[ /* expired outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><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 <<lore region_desert>>, they have located a breach in <<lore concept_mist>> where
they are certain that the demon must be 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 got very close to 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 looked ominous and foreboding — a clear indicator that your slavers
were in the right place.
Led by the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
<<rep $g.tank>> <<uadv $g.tank>> and your band of slavers ran 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 appeared 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 could 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 was then
that they heard footsteps coming from the beyond, and before long <<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 could see vindictive rage and anger burning in the
<<= $varstore.get('choose_your_own_adventure_lovers')>>' eyes,
<<else>>
your slavers could see decisive resolution in the faces of the
<<= $varstore.get('choose_your_own_adventure_lovers')>>,
<</if>>
knowing their journey was 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')>>
began their attack in the fullest,
while your slavers fought off the demonic minions that keep 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 <<name $g.hero1>> and <<name $g.hero2>> to
simultaneously
<<if $varstore.get('choose_your_own_adventure_strength') == 'strength'>>
impale their weapons into the demon, dispatching <<them $g.demon>>.
<<else>>
impale the demon with a magical spear, dispatching <<them $g.demon>>.
<</if>>
The demon turned to dust, and
as if acknowledging that the fight was 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 had up to and leading into 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 looked back 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>
<<if $gOutcome == 'success'>>
<p>Your slavers sustained minor injuries during the terrible fight.</p>
<<elseif $gOutcome == 'failure'>>
<p>Your slavers sustained great injuries during the corrupted fight.</p>
<<elseif $gOutcome == 'disaster'>>
<p>Your slavers barely made it out of the fight, and they were corrupted much from the intense fight.</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
'a|was a powerful demon playing with mortals using a corrupted necromonicon',
15000, /* slave value */
{
arcane: 4,
sex: 3,
},
)>>
<<set _traits = setup.TraitHelper.getAllTraitsOfTags(['skin']).filter(a => !a.isCorruption() && !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",
'subrace_demon', /* pools */
0, /* reuse chance */
[
setup.qc.BgTraitReset('unit', setup.trait.bg_noble),
setup.qc.TraitReplace('unit', setup.trait.per_evil),
setup.qc.TraitReplace('unit', setup.trait.will_defiant),
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',
{hero1: 'hero1', hero2: 'hero2', demon: 'demon'}),
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': 'quest_choose_your_own_adventure_hero1',
'hero2': 'quest_choose_your_own_adventure_hero2',
'demon': '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, setup.rarity.always],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.VarEqual('choose_your_own_adventure_progress', '9'), ],
[ /* expired outcomes */
setup.qc.SetCooldownQuest(null, 50),
],
)>><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 in great detail.
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 answerso to these questions... but beware. It is going to be incredibly
dangerous.
</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 pureblooded demon. A dark blast swooshed
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
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 was turned into a dessicated field of rotten flowers.
But the dead trees prove quite a hindrance for the demon as <<they $g.demon>>
demon|was unable to fly away as freely as <<they $g.demon>> wanted to.
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>>
onto the wings of the demons.
Angered, the demons turned instead to face the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
as they stood preparedly.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers fought valiantly throughout 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 demon 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
kinds 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>> promised 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 would be incomplete for as long as the demon lives.
<<else>>
Their quest for peace could not be over for as long as the demon lives.
<</if>>
But they still deferred somewhat to your slavers, whose company had been
their most trustworthy allies thus far. But they asked you now to make a choice,
the final choice in this story.
</p>
<p>
If you kill the demon, they shall join offer their services and join your company.
</p>
<p>
If you spare the demon, they shall leave the region, never to be seen again by your company.
</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 appeared too late, and the sage had somehow convinced the
<<= $varstore.get('choose_your_own_adventure_lovers')>>
that your company was the true mastermind of all the tragedies after all.
With their eyes full of
<<if $varstore.get('choose_your_own_adventure_revenge') == 'revenge'>>
hatred,
<<else>>
resolve,
<</if>>
they asked your slavers to warn you to get ready to face judgment soon.
</p><<set _criteriahero = new setup.UnitCriteria(
null, /* key */
'Hero', /* name */
[
setup.trait.bg_adventurer,
setup.trait.per_brave,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
{
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(
'dungeons_and_dragons', /* key */
"Dungeons and Dragons", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'unknown',
'vale',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'hero': [ _criteriahero, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_dungeons_and_dragons',
setup.qdiff.easy39, /* difficulty */
[ /* outcomes */
[
'Quest_dungeons_and_dragonsCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Favor('humanvale', 200),
],
],
[
'Quest_dungeons_and_dragonsCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Favor('humanvale', 100),
],
],
[
'Quest_dungeons_and_dragonsCrit',
[
setup.qc.VarSet('dungeons_and_dragons_withdrawal_progress', '3', -1),
setup.qc.SetCooldownEvent('dungeons_and_dragons_fetch_quest', 10),
],
],
[
'Quest_dungeons_and_dragonsDisaster',
[
setup.qc.RemoveTitle('hero', 'quest_heroic_withdrawal_0'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
)>><<set _u = setup.getUnit({title: 'quest_heroic_withdrawal_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<<set $g.slaver = _u>>
<<set _w = setup.getAnySlaver([_u])>>
<<include 'Event_dungeons_and_dragons'>>
<p>
Indeed, <<rep $g.slaver>> slaver|is apparently starting to miss <<their $g.slaver>> days as an adventurer, and went into a "Heroic Withdrawal". <<Theslaver $g.slaver>> slaver|enter your office, and
<<if $g.slaver.isDominant()>>
demands
<<else>>
asks
<</if>>
to be given a suitably "heroic" mission, instead of the standard raiding or slaving missions your company specialize in.
</p>
<p>
This is a rather absurd request, so it's probably best to ignore it. After all, according to <<rep _w>>, the withdrawal is temporary and will go away in a week or so. But alternatively, you could also try to "cure" the withdrawal by making up an arbitrary quest on the spot. Surely the slaver will then fail the quest, and be brought to reality that this world is in no need of a hero.
Should you wish to ignore this, you should <<dangertext 'remove this quest'>> and get it over with.
</p>
<p>
Otherwise, you'll just have to make up a story that some random settlement nearby is seeking a hero for purpose unknown...
</p>
<</if>><p>
After four long weeks, <<yourrep $g.hero>> had returned from <<their $g.hero>> heroic quest scouring the vales for settlement in need of a hero. To your complete surprise, <<they $g.hero>> "succeeded", at least according to them. Apparently, one of the settlements had just been raided by a group of vale bandits, and the village's statue of fertility was stolen in the brazen raid. Your slaver went alone into the encampment, and
<<uadv $g.hero>>
defeated all of the inexperienced bandits by <<themself $g.hero>>. The statue of fertility was returned successfully to the villagers.
<<if $gOutcome == 'failure'>>
Although the village did not show much gratitude for it (since <<they $g.hero>> somehow knew that <<rep $g.hero>> is working for the vile slaving company that is yours),
<<rep $g.hero>> still felt good from the heroic actions <<they $g.hero>> did.
<<elseif $gOutcome == 'crit'>>
The village was extremely grateful to your slaver, and your company's reputation increased much among them.
<<else>>
The village was grateful to your slaver, and your company's reputation increased among them.
<</if>>
Meanwhile, you're wondering how much money you have lost by <<them $g.hero>> returning the idol instead of giving it to you to pawn...
</p>
<p>
Instead of being "cured" of <<their $g.hero>> Heroic Withdrawal, however, it seems that having a successful adventure only reignites the flame within <<rep $g.hero>>. You should expect more absurd requests in the future from <<therace $g.hero>>, all thanks to your decision to go through with this absurd quest...
</p><p>
After four long weeks, <<yourrep $g.hero>> came back home, completely dejected. While <<they $g.hero>> indeed found many people in need of help, all of them are mundane tasks, such as fetching water from a nearby river, or unclogging a clogged chimney. Rather than feeling heroic, <<rep $g.hero>> felt quite humbled by the experience, and
<<if $g.hero.isHasTrait('per_kind')>>despite <<their $g.hero>> kind nature,<</if>> would much prefer the raiding and slaving quests <<they $g.hero>> hero|is offered daily by your company.
</p><<set _criteriahero = new setup.UnitCriteria(
null, /* key */
'Hero', /* name */
[
setup.trait.bg_adventurer,
setup.trait.per_attentive,
setup.trait.per_lunatic,
setup.trait.skill_connected,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
{
combat: 1,
survival: 1,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'dungeons_and_dragons_desert_pearl', /* key */
"Dungeons and Dragons: Desert Pearl", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
'prep',
'unknown',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'hero': [ _criteriahero, 1],
'scout1': [ setup.qu.scout_desert, 1],
'scout2': [ setup.qu.scout_desert, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_dungeons_and_dragons_desert_pearl',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_dungeons_and_dragons_desert_pearlCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(6000),
],
],
[
'Quest_dungeons_and_dragons_desert_pearlCrit',
[
setup.qc.VarSet('dungeons_and_dragons_withdrawal_progress', '4', -1),
setup.qc.MoneyCustom(6000),
setup.qc.SetCooldownEvent('dungeons_and_dragons_lair_of_evil', 10),
],
],
[
'Quest_dungeons_and_dragons_desert_pearlFailure',
[
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_dungeons_and_dragons_desert_pearlFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Injury('hero', 4),
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_heroic_withdrawal_0')],
[setup.qc.TraumatizeRandom('unit', 50)],
),
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
)>><<set _type = 'Desert Pearl'>>
<<set _u = setup.getUnit({title: 'quest_heroic_withdrawal_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
According to credible information that you totally did not just made up on the spot, somewhere within the <<lore region_desert>>
lies a treasure called the Desert Pearl. It is said to be exceedingly beautiful, and an object longing for many people. The pearl is also said to have medicinal effects, and is the main ingredient of several rare potions, or so the surely credible rumor said...
</p>
<p>
Since you have a hero in need of a quest within your company, you uhh.., suddenly remember that for some reason you don't recall, you really need the Desert Pearl. Surely a hero such as <<rep _u>> would be moved by such a tale, and would gladly fetch this Desert Pearl for the needy (that is you), out of the goodness of the hero's heart and without demanding any payment.
</p>
<p>
(While your slaver probably won't find anything, it's best to accompany <<them _u>> with two slavers knowledgeable on the desert terrains, just in case.)
</p>
<</if>><p>
Your little fetch quest has... apparently borne a result, somehow.
Before you lies the <<= _type>> that you've asked <<yourrep $g.hero>> to fetch, and <<therace $g.hero>> hero|look
<<if $g.hero.isHasTrait('per_humble')>>
overjoyed
<<else>>
so full of <<themself $g.hero>>
<</if>>
having found the object you er... so very needed. Looking at <<yourrep $g.scout1>> or <<yourrep $g.scout2>> with questioning eyes just bring even more shrugs of incomprehension.
</p>
<p>
It seems your plan to demotivate the "hero" and return <<them $g.hero>> to earth has backfired spectacularly. <<Therace $g.hero>> hero|look much more confident than before, having apparently found a rare artifact that you've asked for personally, and no doubt will demand more absurd quest in the future...
</p>
<p>
That aside, the <<= _type>> turns out to be
<<if _type == 'Desert Pearl'>>
<<if $gOutcome == 'crit'>>
extremely valuable,
<<else>>
quite valuable,
<</if>>
netting you
<<if $gOutcome == 'crit'>>
quite a lot of
<<else>>
a huge amount of
<</if>>
profit.
<<elseif _type == 'Wolfstone'>>
<<if $gOutcome == 'crit'>>
very magically-enchanted,
<<else>>
rather magical
<</if>>
and a wizard in your fort gladly traded it for
<<if $gOutcome == 'crit'>>
some
<<else>>
many
<</if>>
of their actual magical artifacts.
<<else>>
<<if $gOutcome == 'crit'>>
extremely popular
<<else>>
very popular
<</if>>
in the <<lore region_forest>>, and you are able to use it to gain
<<if $gOutcome == 'crit'>>
some
<<else>>
many
<</if>>
favor with its residents.
<</if>>
Although you never actually know what it really is.
For all you know, it might as well be
<<if $gQuest.getSeed() % 5 == 0>>
a hardened droppings of some creature.
<<elseif $gQuest.getSeed() % 5 == 1>>
a garbage some raider threw away.
<<elseif $gQuest.getSeed() % 5 == 2>>
a random stone they found along the way.
<<elseif $gQuest.getSeed() % 5 == 3>>
a regular stone dumped in paint.
<<else>>
a completely useless piece of rock.
<</if>>
</p><<set _type = 'Desert Pearl'>>
<<include 'Quest_dungeons_and_dragons_fetchCommonCrit'>><p>
<<Yourrep $g.hero>> came back home with nothing, and most certainly no <<= _type>> in their belongings. But before you're able to say anything, <<theslaver $g.hero>> hero|insist to give <<them $g.hero>> another try, as <<they $g.hero>> hero|was "so close" to finding it. <<if $gOutcome == 'disaster'>>(Well, after <<they $g.hero>> hero|recover from <<their $g.hero>> newfound injuries, that is.)<</if>>
You point your questioning eyes to <<yourrep $g.scout1>> and <<rep $g.scout2>>, but both just shrugs, unable to contain the overflowing energy from <<therace $g.hero>>.
</p>
<p>
What have you gotten yourself into...
</p><<set _type = 'Desert Pearl'>>
<<include 'Quest_dungeons_and_dragons_fetchFailure'>><<run new setup.Title(
"quest_heroic_withdrawal_0", /* key */
"Heroic Withdrawal", /* name */
"Suffers from withdrawal from lack of heroic questing", /* description */
"a|is having a heroic withdrawal, curable only by going into an epic quest or two", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"dungeons_and_dragons_lair_of_evil0",
"Demonkin Raider",
'subrace_demonkin', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
],
)>> <<run new setup.UnitGroup(
"dungeons_and_dragons_lair_of_evil1",
"Lizardkin Raider",
'subrace_lizardkin', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
],
)>>
<<set _criteriahero = new setup.UnitCriteria(
null, /* key */
'Hero', /* name */
[
setup.trait.bg_adventurer,
setup.trait.per_brave,
setup.trait.per_active,
setup.trait.per_lunatic,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
{
combat: 2,
survival: 1,
}
)>>
<<run new setup.QuestTemplate(
'dungeons_and_dragons_lair_of_evil', /* key */
"Dungeons and Dragons: Lair of Evil", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'prep',
'unknown',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'hero': [ _criteriahero, 1],
'healer': [ setup.qu.healer, 1],
'dps': [ setup.qu.dps, 1],
},
{ /* actors */
'boss': [
],
'prince': [
],
'demonkin': 'dungeons_and_dragons_lair_of_evil0',
'lizardkin': 'dungeons_and_dragons_lair_of_evil1',
},
[ /* costs */
],
'Quest_dungeons_and_dragons_lair_of_evil',
setup.qdiff.harder45, /* difficulty */
[ /* outcomes */
[
'Quest_dungeons_and_dragons_lair_of_evilCrit',
[
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
setup.qc.Slave('demonkin', "a|was an \"evildoer\" defeated by one of your more \"heroic\" slaver, but for all you know a|they could be just a simple a|race minding a|their own business unlucky enough to be found by your adventure-crazed slaver", undefined),
],
],
[
'Quest_dungeons_and_dragons_lair_of_evilCrit',
[
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
setup.qc.Slave('lizardkin', "a|was an \"evildoer\" defeated by one of your more \"heroic\" slaver, but for all you know a|they could be just a simple a|race minding a|their own business unlucky enough to be found by your adventure-crazed slaver", undefined),
],
],
[
'Quest_dungeons_and_dragons_lair_of_evilFailure',
[
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
setup.qc.MissingUnit('hero'),
],
],
[
'Quest_dungeons_and_dragons_lair_of_evilFailure',
[
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
setup.qc.MissingUnitRecapture('hero', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_heroic_withdrawal_0')],
[setup.qc.TraumatizeRandom('unit', 100)],
),
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
)>><<set _u = setup.getUnit({title: 'quest_heroic_withdrawal_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _u>> has come to demand the last quest to prove <<their _u>>
heroism once and for all, to your great dismay.
Having decided to exploit <<therace _u>>'s uncanny knack in finding impossible quests,
you've wrote one final quest for <<them _u>>...
</p>
<p>
You clear your throat, before you begin your elaborate tale.
In a nameless land, far, far to the south of <<lore continent_main>>,
live a <<princess $g.prince>>
of unimaginable
<<if $g.prince.isFemale()>>
beauty.
<<else>>
handsomeness.
<</if>>
But not only that -- the <<princess $g.prince>> is famous also for <<their $g.prince>> kindness,
and the beauty of both <<their $g.prince>> appearance and heart appeals to many.
Unfortunately, such a beacon of purity also attract unwanted attention from a terrible
<<if $g.boss.isHasTrait('race_lizardkin')>>
dragon,
<<else>>
demon,
<</if>>
who kidnapped the innocent <<princess $g.prince>> from <<their $g.prince>> tower.
The kingdom is now looking for brave heroes, who would venture forth and save the <<princess $g.prince>>...
</p>
<p>
You then give the quest a little more detail to make it more believe-able, but
you are intentionally vague with the details.
This time, however, you pay careful attention to the details of the <<prince $g.prince>>; judging from
the past experiences, your slaver has a knack of finding the reward even though it does not exist,
and surely it couldn't hurt if the <<prince $g.prince>> in your quest just happens to be the perfect
slave material, including possessing otherwordly beauty,
<<if $g.prince.isMale()>>tasteful muscles<<else>>sexy waist<</if>>, a stunning voice, and a secretly submissive tendencies too (just in case you need to break <<them $g.prince>> later).
</p>
<p>
A journey south to the <<lore region_sea>> is not a joke, however much farce your quest is, so careful preparation is still required. A healer and a damager to accompany your "hero" would be prudent to have.
</p>
<p>
There's also the alternative of just simply refusing this absurd request.
The slaver might be downed for a while, but nothing time can't heal.
Surely there's just no way the world would aligns itself so that your slaver is able to find
this very specifically detailed <<prince $g.prince>>?
</p>
<</if>><p>
After four long weeks searching and venturing in the <<lore region_sea>>, <<yourrep $g.hero>> finally came back home. Unlike all the previous ventures, however, this time <<they $g.hero>> hero|was met with failure. <<They $g.hero>> hero|was not able to find the supposed kingdom whose settlement is in dire need of a hero. In fact, most of the settlements <<they $g.hero>> visited was perfectly alright, having no need for a hero in these times.
</p>
<p>
The failure finally make the reality sinks in into the <<urace $g.hero>>. While books and tales tell of heroes of legends, in reality, there are much less opportunity for such heroism. Faced with this reality, <<their $g.hero>> mind is finally grounded back to reality, that <<they $g.hero>> hero|is a slaver now — not some damsel-saving sword-crossing hero of legends.
<<if $g.hero.isHasTrait('per_brave')>>
<<Their $g.hero>> excessive bravery will only get <<themself $g.hero>> killed or worse in this uncaring world.
<<elseif $g.hero.isHasTrait('per_cautious')>>
<<Their $g.hero>> cowardice may be an actually good thing to have, and may save <<them $g.hero>> from fate worse than death.
<</if>>
</p>
<p>
Somewhere within you, you are disappointed that your plan to get your <<uhands $unit.player>> on the perfect
little slave has failed. Then again, you have nobody to blame but yourself -- the quest is completely made-up,
after all, and there is just no way the world aligns itself to fit your fantasies so perfectly.
Still, your slaver is finally back to normal, and that's good.
</p>
<p>
Right when <<rep $g.hero>> is about to exit your office,
you notice that your slavers had carried an extra cargo with them —
<<if $gOutcome == 'crit'>>
a demonkin
<<else>>
a lizardkin
<</if>>
fully bound and gagged and currently stored within your slave pens. When asked about it, <<rep $g.hero>> just shrugged it off, saying that <<they $g.hero>> slayed a couple of evildoers here and there without managing to find the <<prince $g.hero>> in distress. Nothing worthy of mention.
</p>
<p>
...Perhaps <<they $g.hero>> might actually have what it takes to be a real hero,
but you're not going to be the <<urace $unit.player>> that tell <<them $g.hero>> so!
</p><p>
<<Yourrep $g.hero>> got too excited — way too excited for the adventure south. <<They $g.hero>> managed to indeed find a southern kingdom in need of a hero, for their <<prince $g.prince>> prince|have been kidnapped by a truly menacing
<<urace $g.boss>>.
</p>
<p>
Only <<yourrep $g.healer>> and <<utheirrel $g.healer $g.dps>> returned to your fort. In a fit of crazed bravery, <<rep $g.hero>> foolishly decided to assault the mighty <<urace $g.boss>> fort alone, and <<they $g.hero>> never returned.
Still, your other two slavers were not completely useless for once, and they were able to track your slaver should you wish to rescue the foolish <<urace $g.hero>>.
<<urescuenow $g.hero>>.
</p><<set _criteriahero = new setup.UnitCriteria(
null, /* key */
'Hero', /* name */
[
setup.trait.bg_adventurer,
setup.trait.per_attentive,
setup.trait.per_lunatic,
setup.trait.skill_connected,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
{
brawn: 1,
survival: 1,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'dungeons_and_dragons_wolfstone', /* key */
"Dungeons and Dragons: Wolfstone", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'prep',
'unknown',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'hero': [ _criteriahero, 1],
'scout1': [ setup.qu.scout_vale, 1],
'scout2': [ setup.qu.scout_vale, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_dungeons_and_dragons_wolfstone',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_dungeons_and_dragons_wolfstoneCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Equipment(setup.equipmentpool.arcane_good),
],
],
[
'Quest_dungeons_and_dragons_wolfstoneCrit',
[
setup.qc.VarSet('dungeons_and_dragons_withdrawal_progress', '4', -1),
setup.qc.Equipment(setup.equipmentpool.arcane_good),
setup.qc.Equipment(setup.equipmentpool.arcane_good),
setup.qc.SetCooldownEvent('dungeons_and_dragons_lair_of_evil', 10),
],
],
[
'Quest_dungeons_and_dragons_wolfstoneFailure',
[
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_dungeons_and_dragons_wolfstoneFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Injury('hero', 4),
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_heroic_withdrawal_0')],
[setup.qc.TraumatizeRandom('unit', 50)],
),
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
)>><<set _type = 'Wolfstone'>>
<<set _u = setup.getUnit({title: 'quest_heroic_withdrawal_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
According to credible information that you totally did not just made up on
the spot, somewhere within the <<lore region_desert>>
lies a treasure called the Wolfstone. It is said to be
exceedingly powerful,
and many wizards would pay a great amount of wealth for the stone. The stone magical uses
are rumored to be numerous, and the surely very credible rumors range from being a catalyst for opening a gateway to <<lore concept_mist>>,
to making a slave's skin almost transparent.
</p>
<p>
Since you have a hero in need of a quest within your company, you uhh.., suddenly remember that for some reason you don't recall, you really need the Wolfstone. Surely a hero such as <<rep _u>> would be moved by such a tale, and would gladly fetch this Wolfstone for the needy (that is you), out of the goodness of the hero's heart and without demanding any payment.
</p>
<p>
(While your slaver probably won't find anything, it's best to accompany <<them _u>> with two slavers knowledgeable on the vale mountains, just in case.)
</p>
<</if>><<set _type = 'Wolfstone'>>
<<include 'Quest_dungeons_and_dragons_fetchCommonCrit'>><<set _type = 'Wolfstone'>>
<<include 'Quest_dungeons_and_dragons_fetchFailure'>><<set _criteriahero = new setup.UnitCriteria(
null, /* key */
'Hero', /* name */
[
setup.trait.bg_adventurer,
setup.trait.per_attentive,
setup.trait.per_lunatic,
setup.trait.skill_connected,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
],
[
setup.trait.per_dreamy,
setup.trait.per_masochistic,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_heroic_withdrawal_0'),
],
{
arcane: 1,
survival: 1,
knowledge: 1,
}
)>>
<<run new setup.QuestTemplate(
'dungeons_and_dragons_woodsgem', /* key */
"Dungeons and Dragons: Woodsgem", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'forest',
'prep',
'unknown',
],
4, /* weeks */
100, /* expiration weeks */
{ /* roles */
'hero': [ _criteriahero, 1],
'scout1': [ setup.qu.scout_forest, 1],
'scout2': [ setup.qu.scout_forest, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_dungeons_and_dragons_woodsgem',
setup.qdiff.normal42, /* difficulty */
[ /* outcomes */
[
'Quest_dungeons_and_dragons_woodsgemCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('neko', 150),
setup.qc.Favor('elf', 150),
],
],
[
'Quest_dungeons_and_dragons_woodsgemCrit',
[
setup.qc.VarSet('dungeons_and_dragons_withdrawal_progress', '4', -1),
setup.qc.Favor('neko', 150),
setup.qc.Favor('elf', 150),
setup.qc.SetCooldownEvent('dungeons_and_dragons_lair_of_evil', 10),
],
],
[
'Quest_dungeons_and_dragons_woodsgemFailure',
[
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_dungeons_and_dragons_woodsgemFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Injury('hero', 4),
setup.qc.Injury('scout1', 2),
setup.qc.Injury('scout2', 2),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.HasTitle('quest_heroic_withdrawal_0')],
[setup.qc.TraumatizeRandom('unit', 50)],
),
setup.qc.RemoveTitleGlobal('quest_heroic_withdrawal_0'),
],
)>><<set _type = 'Woodsgem'>>
<<set _u = setup.getUnit({title: 'quest_heroic_withdrawal_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
According to credible information that you totally did not just made up on
the spot, somewhere within the <<lore region_forest>>
lies a treasure called the Woodsgem. It is said to be a highly delicious food additive,
and many would pay a great amount of money for a taste of the gem. The culinary uses
are rumored to be numerous, and the very credible rumors detail how it is the secret ingredient
of several high-class recipes used exclusively for royals.
</p>
<p>
Since you have a hero in need of a quest within your company, you uhh..,
suddenly remember that for some reason you don't recall, you really need the
Woodsgem. Surely a hero such as <<rep _u>> would be moved by such a tale, and
would gladly fetch this Woodsgem for the needy (that is you), out of the
goodness of the hero's heart and without demanding any payment.
</p>
<p>
(While your slaver probably won't find anything, it's best to accompany
<<them _u>> with two slavers knowledgeable with the way of the forests, just in
case.)
</p>
<</if>><<set _type = 'Woodsgem'>>
<<include 'Quest_dungeons_and_dragons_fetchCommonCrit'>><<set _type = 'Woodsgem'>>
<<include 'Quest_dungeons_and_dragons_fetchFailure'>><<run new setup.Title(
"quest_ex_leaders_of_a_desert_raiders_company_0", /* key */
"Ex-Leader of a Desert Raiders Company", /* name */
"Used to lead a desert raiders company", /* description */
"used to lead a desert raiders company until a|they met a|their match", /* unit text */
5000, /* slave value */
{ /* skill additives */
combat: 3,brawn: 3,sex: 3,},
)
>>
<<run new setup.UnitGroup(
"just_an_ordinary_desert_raider0",
"Desert Raider (Female)",
'subrace_humandesert_female', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_dominant, setup.trait.per_cruel, setup.trait.per_sexaddict, setup.trait.per_evil], 2, true, false),
],
)>> <<run new setup.UnitGroup(
"just_an_ordinary_desert_raider1",
"Desert Raider (Male)",
'subrace_humandesert_male', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
setup.qc.TraitReplace('unit', setup.trait.anus_gape),
setup.qc.AddTraitsRandom('unit', [setup.trait.per_dominant, setup.trait.per_cruel, setup.trait.per_sexaddict, setup.trait.per_evil], 2, true, false),
],
)>>
<<run new setup.QuestTemplate(
'desert_snakes', /* key */
"Desert Snakes", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
'unit',
'danger',
'ire',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infil1': [ setup.qu.infiltrator, 1],
'infil2': [ setup.qu.infiltrator, 1],
'con': [ setup.qu.conartist, 1],
},
{ /* actors */
'raiderf': 'just_an_ordinary_desert_raider0',
'raiderm': 'just_an_ordinary_desert_raider1',
'dop': setup.contacttemplate.quest_doppelganger,
'slaver': [
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_doppelganged'),
setup.qres.Available(),
],
},
[ /* costs */
],
'Quest_desert_snakes',
setup.qdiff.hardest63, /* difficulty */
[ /* outcomes */
[
'Quest_desert_snakesCrit',
[
setup.qc.IfThenElse(
setup.qres.Actor('dop', setup.qres.AllTraits([setup.trait.gender_male], true)),
setup.qc.DoAll([
setup.qc.Slave('raiderm', "a|was the leader of a raiding company in the eastern deserts who was unlucky to toy with the wrong doppelganger", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.Slave('raiderf', "a|was the leader of a raiding company in the eastern deserts who was unlucky to toy with the wrong doppelganger", undefined)
], undefined)),
setup.qc.SetCooldownEvent('doppelganger_epilogue', 5),
setup.qc.VarSet('quest_doppelganger_progress', '6', -1),
setup.qc.AddTitle('raiderf', 'quest_ex_leaders_of_a_desert_raiders_company_0'),
setup.qc.AddTitle('raiderm', 'quest_ex_leaders_of_a_desert_raiders_company_0'),
setup.qc.Ire('outlaws', 2),
],
],
[
'Quest_desert_snakesCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.Injury('infil1', 6),
setup.qc.Injury('infil2', 6),
setup.qc.Injury('con', 8),
],
],
[
'Quest_desert_snakesFailure',
[
setup.qc.MissingUnit('con'),
setup.qc.TraitIncreaseExisting('con', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('con', setup.trait.anus_gape),
],
],
[
'Quest_desert_snakesFailure',
[
setup.qc.MissingUnitRecapture('con', 'capturedhard'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.always],
],
[ /* restrictions */
setup.qres.VarEqual('quest_doppelganger_progress', '5'),
setup.qres.QuestUnique(),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> informs you that your scouts have finally tracked the stronghold of the desert raiders — the so called "Desert Snakes" — the very same one that hired you and led you to meet with <<rep $g.dop>>. Looking a <<their $g.dop>> bounty poster, <<they $g.dop>> indeed look strikingly similar with the other appearance of the doppelganger residing within your fort. Your slavers may actually be on to something here for once.
</p>
<p>
Should this interest you, you can send a group of slavers to try and infiltrate the compound. Given that you've solved on of their problems in the past, they would unlikely refuse a friendly visit or two from one of your slavers, who would then need to open the gates at night to let another two to sneak in. Once all three are inside at the dead of the night, they must then kidnap the leader of the encampment and smuggle <<them $g.dop>> out...
</p><p>
Thanks to
<<reps $g.con>> <<upraisenoun $g.con>>, <<they $g.con>> con|was able to made it past into the encampment as a guest, with the rest of the desert raiders oblivious to <<Their $g.con>> true purpose. Once the night fell, the plan was put into motion. Under the cover of the glittering moon, <<rep $g.con>> <<uadv $g.con>> sneaked into the entrance of the encampment, and opened the gate just a little for the waiting <<rep $g.infil1>> and <<rep $g.infil2>> to go in.
</p>
<p>
Infiltrating the compound won't be the easy part, however, and the hard part starts now.
The trio of slavers found the main tent, and sneaked inside. The leader of the encampment, as well as <<their $g.dop>> harem of slaves were all fast asleep, but the tangled bodies of flesh means that taking the leader away will likely awaken <<their $g.dop>> sex toys, alerting the entire compound of your slavers' presence. There were simply too many bodies there to gag one by one, your slavers decided to go for the dash. Yanking and gagging the leader fast, they quickly made for the exit before one of the awakened sex toys went naked outside and alerted the rest of the encampment.
</p>
<p>
Escaping from the encampment was difficult, and your slavers did their best to do so.
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'eyes_neko'})>>
<<if _unit>>
<<Reps _unit>> cat-like eyes were able to see in the dark, helping their escape.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'magic_dark'})>>
<<if _unit>>
Using <<their _unit>> mastery over dark magic, <<rep _unit>> shrouded the team in a cloak of darkness, aiding the escape.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'tough_nimble'})>>
<<if _unit>>
<<Rep _unit>> is naturally lithe, making escape easier.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'magic_light'})>>
<<if _unit>>
<<Reps _unit>> affinity to light magic unfortunately backfired as it light your slavers here and there, acting as a guiding beacon for the raiders to pursue.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'height_short'})>>
<<if _unit>>
<<Reps _unit>> short stature made it easier for <<therace _unit>> to blend into the shadows.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'height_tall'})>>
<<if _unit>>
<<Reps _unit>> <<ubody _unit>> made spotting <<therace _unit>> rather trivial, even in the darkness.
<</if>>
<<set _unit = setup.selectUnit([$g.infil1, $g.infil2, $g.con], {trait: 'tough_tough'})>>
<<if _unit>>
Flexibility isn't one of <<reps _unit>> strong suit, hampering the escape.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
Miraculously, your slavers were able to made it into the exit without anyone injured.
</p>
<<else>>
<p>
A stray arrow or two hit your slavers, but they toughed it up and managed to escape to safety before dawn.
</p>
<</if>>
<hr/>
<p>
A few weeks later, your slavers arrived at your fort with the former-desert-raider turned slave. The new slave is seen glaring daggers at you, no doubt planning to do terrible things to you should <<they $g.dop>> escape — and while <<they $g.dop>> must be thinking about resisting your slave training, you have other plans for now. You ask the new slave to be brought over into your office, with you, as well as <<rep $g.dop>> waiting.
</p>
<p>
Finally face-to-face with the desert bandit, you could see <<reps $g.dop>> figure starting to shift and morphed, until it finally settled into an exact copy of the bandit. And apparently healing a doppelganger's trauma is very simple — <<they $g.dop>> just need to inflict the same pain that <<they $g.dop>> must have suffered in the past.
<<They $g.dop>>
<<if !$g.dop.isHasDick()>>
wore an overly large strap-on and
<</if>>
positioned <<their $g.dop>> <<udickorstrap $g.dop>> just right before the slave's probably-virgin ass. In one fell swoop <<They $g.dop>> inserted themselves all the way. The pain must have been excruciating, and were the bandit not gagged, <<their $g.dop>> screams must have permeated your entire compound. The fucking was rough and hard — it is a hatred fucking after all — and eventually <<rep $g.dop>>
<<if $g.dop.isHasDick()>>
cum hard,
<<else>>
shuddered, marking <<their $g.dop>> climax and
<</if>>
completing <<their $g.dop>> revenge.
</p>
<p>
With the bandit collapsed from the sheer anal pain, <<rep $g.dop>> looked upwards, <<their $g.dop>> body again shifting and morphing. This time, however, they reverted into an almost blank slate, before settling back into <<their $g.dop>> usual form of copying one of your slavers. Like all doppelgangers, once transformed, <<they $g.dop>> retained no memory of the things <<they $g.dop>> did when <<they $g.dop>> dop|was in a different form, but seeing the collapsed bandit<<if $g.dop.isHasDick()>> as well as the cum leaking out of <<their $g.dop>> abused hole<</if>>, <<they $g.dop>> understood what had happened. It seemed that all that remains is to test the hypothesis out, and see if <<they $g.dop>> would still transform at night...
</p><p>
<<Rep $g.con>> con|was able to make it into the compound without raising anyone's suspicion, or so <<they $g.con>> thought. Later that night, <<rep $g.infil1>> and <<rep $g.infil2>> never made it in, for the gates were never opened by <<rep $g.con>>.
In fact, the other two slavers never heard back from <<rep $g.con>>. The encampment probably somehow heard of your plans, and decided to play innocent to lure an easy <<urace $g.con>> slave in...
</p>
<p>
<<if $gOutcome == 'failure'>>
<<uneedrescue $g.con>>, preferably before the desert raiders violate <<them $g.con>> too much...
<<else>>
<<urescuenow $g.con>>, although it will be incredibly hard rescuing <<them $g.con>> from a well-prepared compound.
<</if>>
</p><<set _criteriavirgin = new setup.UnitCriteria(
null, /* key */
'Totally Virgin', /* name */
[
setup.trait.bg_courtesan,
setup.trait.bg_whore,
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.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_humble,
setup.trait.per_sly,
setup.trait.per_chaste,
],
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_proud,
setup.trait.per_direct,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTraits([setup.trait.vagina_loose, setup.trait.vagina_gape, setup.trait.anus_loose, setup.trait.anus_gape], true),
],
{
sex: 3,
}
)>>
<<run new setup.QuestTemplate(
'nearby_violations', /* key */
"Nearby Violations", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'virgin': [ _criteriavirgin, 1],
'kidnapper1': [ setup.qu.kidnapper, 1],
'kidnapper2': [ setup.qu.kidnapper, 1],
},
{ /* actors */
'dop': [
],
'slaver': [
],
'violated': [
],
},
[ /* costs */
],
'Quest_nearby_violations',
setup.qdiff.hard58, /* difficulty */
[ /* outcomes */
[
'Quest_nearby_violationsCrit',
[
setup.qc.Opportunity('nearby_violations', {
dop: "dop",
slaver: "slaver",
}),
setup.qc.Slave('violated', "a|was an unfortunate resident of the vale who got violated by the Virgin Raider", undefined),
],
],
[
'Quest_nearby_violationsCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.TraitIncreaseExisting('virgin', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('virgin', setup.trait.anus_gape),
setup.qc.Injury('virgin', 2),
],
],
[
'Quest_nearby_violationsCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.TraitReplaceExisting('virgin', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('virgin', setup.trait.anus_gape),
setup.qc.Injury('virgin', 4),
],
],
[
'Quest_nearby_violationsCrit',
[
setup.qc.TraitReplaceExisting('virgin', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('virgin', setup.trait.anus_gape),
setup.qc.Injury('virgin', 4),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
As you work in your office as usual, you receive another complaint from
the surrounding villagers about your slavers actions. Apparently, another one of the village elder's many virgin <<daughter $g.violated>>s was found broken yet again, having been mercilessly violated by an unknown assailant. Since your fort is the only thing around dealing in sex slavery and organized raping, the blame again falls to you and your slavers, regardless whether or not one of your <<men $g.slaver>> actually did the act.
</p>
<p>
To prevent further ire, your only option is to uncover this mystery once and for all. <<Yourrep $g.slaver>> had volunteered for the task, and <<they $g.slaver>> somehow found a lead — the culprit, the so-called Virgin Raider of the Vale, is expected to make a certain village their next target very soon. You could try to send a group of slavers to capture whoever the culprit is and end this charade — a particularly "tight" slaver to server as a bait and two other slavers ready to kidnap whoever assailant it might be. Who knows, maybe the virgin raider is actually one of your own <<men $g.slaver>> and you'll get the awkward experience of having captured one of your own...
</p><p>
After arriving at the village where the Virgin Raider was supposed to raid next, <<yourrep $g.virgin>> flaunted <<their $g.virgin>> supposed virginity, hoping to attract <<their $g.dop>> attention tonight.
<<if $g.virgin.isHasTrait('bg_whore') or $g.virgin.isHasTrait('bg_courtesan')>>
Having a wealth of experience in selling <<their $g.virgin>> own bodies from <<their $g.virgin>> past, <<rep $g.virgin>> had no issues accosting the nearest passing stranger and lewdly pointing to <<their $g.virgin>> holes.
<</if>>
<<if $g.virgin.isHasTrait('dick_large')>>
<<Their $g.virgin>> <<ucgenital $g.virgin>> attracted quite the attention.
<</if>>
<<if $g.virgin.isHasTrait('breast_large')>>
<<Their $g.virgin>> <<ubreasts $g.virgin>> attracted quite the attention.
<</if>>
<<if $g.virgin.isHasTrait('muscle_thin')>>
The rather thin-waisted <<urace $g.virgin>> virgin|was quite the attraction.
<</if>>
<<if $g.virgin.isHasTrait('per_humble')>>
<<Their $g.virgin>> humility added to <<their $g.virgin>> story of being a reclusive virgin.
<</if>>
<<if $g.virgin.isHasTrait('per_sly')>>
<<They $g.virgin>> virgin|was sly enough to lie through being a total virgin.
<</if>>
<<if $g.virgin.isHasTrait('per_chaste')>>
<<Their $g.virgin>> natural chastity corroborated <<their $g.virgin>> claim of being a total virgin.
<</if>>
<<if $g.virgin.isHasTrait('per_lustful')>>
<<They $g.virgin>> virgin|was unable to fully contain <<their $g.virgin>> not-so-hidden libido, making <<their $g.virgin>> virginity claims weaker.
<</if>>
<<if $g.virgin.isHasTrait('per_proud')>>
<<They $g.virgin>> virgin|was too proud to sell <<their $g.virgin>> virginity outright.
<</if>>
<<if $g.virgin.isHasTrait('per_direct')>>
<<They $g.virgin>> virgin|was too blunt to lie through the masses about <<their $g.virgin>> actual virginity status.
<</if>>
</p>
<p>
<<Rep $g.virgin>> waited and waited, together with <<rep $g.kidnapper1>> and <<rep $g.kidnapper2>> who lied in ambush.
A few days passed, and there was still no signs of the Virgin Raider.
<<if $gOutcome == 'crit'>>
But your slavers kept their vigilance throughout, somehow avoiding the lulls and drags of waiting. Their patience was rewarded as after three full weeks, someone incredibly suspicious finally approached <<rep $g.virgin>>.
The raider roughly shoved <<rep $g.virgin>> into the ground, ass up in the sky,
but thanks to your slavers' vigilance, before <<they $g.dop>> could slither <<their $g.dop>> oversized <<if $g.dop.isHasDick()>>dong<<else>>fake dong<</if>> into the tight hole, <<rep $g.kidnapper1>> and <<rep $g.kidnapper2>> came into rescue and knocked the raider out, saving the "virginity" of <<rep $g.virgin>>.
Your slavers then tied the unconscious <<man $g.dop>> tightly before hauling <<them $g.dop>> back into your fort the same day.
<<else>>
The waiting was incredibly boring, and your lazy slavers decided to doze off during the mission. It was a grave mistake, as the Virgin Raider chose that weak moment to strike against <<rep $g.virgin>>.
With nobody else to defend <<their $g.virgin>> "virginity", the raider had all the time in the world to violate <<rep $g.virgin>> with <<their $g.dop>> oversized
<<if $g.dop.isHasDick()>>dong<<else>>fake don<</if>>.
The size difference meant excruciating pain for <<rep $g.virgin>>, whose holes were visibly gaped by the experience, and <<they $g.virgin>> let out many bloodcurling screams throughout the night.
<<if $gOutcome == 'success' or $gOutcome == 'failure'>>
Fortunately, the scream finally awakened the other two dozing slavers, who came to the rescue and knocked the violator out. While they succeeded in their mission to capture the culprit, <<rep $g.virgin>> virgin|was left a broken mess on the floor, <<their $g.virgin>> once virgin-tight holes now
<<if $gOutcome == 'success'>>
exceedingly accomodating.
<<else>>
cavernous to a fault.
<</if>>
<<else>>
Unfortunately, <<rep $g.kidnapper1>> and <<rep $g.kidnapper2>> were far too deep in their sleep, and they only discovered what happened the next morning when they found <<reps $g.virgin>> badly violated body on the floor of their temporary abode.
<</if>>
<</if>>
<<if $gOutcome != 'disaster'>>
Your slavers also found another well-bred villager next door -- no doubt another victim of the Virgin Raider.
They wisely decided to pick up the slave as well to bring back home. If your company is already taking
the blame for the act, might as well act like on!
<</if>>
</p>
<<if $gOutcome != 'disaster'>>
<p>
Your slavers returned home by the morning, and as they were about to drop the struggling slave in the <<rep setup.buildingtemplate.slavepens>> and go for their well-deserved rest, something odd happened. The raider transformed before their eyes, going from a desert human into what appears to be <<yourrep $g.slaver>>. As you recall, <<reps $g.slaver>> doppelganger is also living currently in your fort, and while you found the real <<rep $g.slaver>> still soundly sleeping in <<their $g.slaver>> room, the doppelganger was nowhere to be found in your fort.
</p>
<p>
It turned out that <<rep $g.dop>>, the doppelganger, was the culprit after all in the night violations. Indeed, as you recall, you completed a similar mission some time ago in the deserts where you're supposed to drive off a similarly sex-crazed raider, without knowing how. You have a solid guess now, and to confirm your suspicion, you tied the doppelganger securely for the night and watched. Indeed, once <<rep $g.slaver>> fell asleep, the doppelganger transformed back into the desert raider visage. It seemed somehow <<they $g.dop>> transformed every night, probably involuntarily too.
</p>
<p>
You must decide what to do with the doppelganger next.
</p>
<</if>><<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.bg_assassin,
setup.trait.bg_informer,
setup.trait.bg_thief,
setup.trait.tough_nimble,
setup.trait.per_sly,
],
[
],
[
setup.qres.Job(setup.job.slaver),
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,
}
)>>
<<run new setup.QuestTemplate(
'room_mate', /* key */
"Room Mate", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'unknown',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'you': [ _criteriayou, 1],
'snooper1': [ setup.qu.infiltrator, 1],
'snooper2': [ setup.qu.infiltrator, 1],
},
{ /* actors */
'dop': [
],
'slaver': [
],
},
[ /* costs */
],
'Quest_room_mate',
setup.qdiff.normal53, /* difficulty */
[ /* outcomes */
[
'Quest_room_mateCrit',
[
setup.qc.ItemIfNew(setup.item.lorebook_doppelganger),
setup.qc.BodyswapOneDirection('dop', 'slaver'),
setup.qc.Opportunity('room_mate', {
dop: "dop",
slaver: "slaver",
}),
],
],
[
'Quest_room_mateCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.TraumatizeRandom('slaver', 12),
],
],
[
'Quest_room_mateFailure',
[
],
],
[
'Quest_room_mateFailure',
[
setup.qc.TraumatizeRandom('slaver', 12),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Despite your hopes, <<rep $g.slaver>> slaver|continue to act suspiciously at your fort. The usually <<uadjgood $g.slaver>> that you can usually spot doing nothing but <<uhobbyverb $g.slaver>> now do that with much less frequency. Occasionally, the <<urace $g.slaver>> would avoid contact even with <<their $g.slaver>> closest slaver friends, <<if $g.slaver.isHasTrait('per_gregarious')>>
completely out of character for the gregarious slaver.
<<elseif $g.slaver.isHasTrait('per_loner')>>
and while the loner slaver is never known for loving the company of others, <<they $g.slaver>> don't usually outright run away from your other slavers.
<<else>>
a strange behavior for the slaver.
<</if>>
And finally, the strange noises that you have been hearing late at night has also been tracked to somewhere within <<their $g.slaver>> room's vicinity.
</p>
<p>
The evidence is mounting that there is something wrong with <<rep $g.slaver>>, and since asking <<therace $g.slaver>> did not result in anything, you may just have to investigate this yourself. You should also ask two of your other sneaky slavers to help, and try to figure out just what is wrong with <<therace $g.slaver>> these days.
</p><p>
You spent the better part of the last month tailing <<rep $g.slaver>> whenever <<they $g.slaver>> go.
<<if $g.you.isHasTrait('bg_thief')>>
You're used to staying in the shadows from your days as a thief.
<</if>>
<<if $g.you.isHasTrait('bg_assassin')>>
You're used to staying in the shadows from your days as an assassin.
<</if>>
<<if $g.you.isHasTrait('bg_informer')>>
Tailing people and gathering information was something you did in the past, and the familiarity helps with the task.
<</if>>
<<if $g.you.isHasTrait('tough_nimble')>>
You are nimble enough to tail the slaver even when <<they $g.slaver>> go to relatively difficult-to-tail places.
<</if>>
<<if $g.you.isHasTrait('per_sly')>>
Your natural slyness helps divert <<their $g.slaver>> attention from you who just "happened" to be around.
<</if>>
When you are tired for the day, <<yourrep $g.snooper1>> would take your place, and then <<rep $g.snooper2>> would, before cycling back to you.
</p>
<p>
At first, <<rep $g.slaver>> slaver|is mostly... <<themself $g.slaver>>. They would go out of <<their $g.slaver>> room,
go <<uhobbyverb $g.slaver>>, and other more mundane things. But every now and then, <<therace $g.slaver>> would completely shift in personality. They would skulk around, trying not to divert attention to <<themself $g.slaver>> as <<they $g.slaver>> went out of <<their $g.slaver>> room to shower and eat, before going back to <<their $g.slaver>> room. Moments later, <<they $g.slaver>> would exit <<their $g.slaver>> room again, completely back to normal.
It was clear that the key to this mystery lies inside the room, so you did what you had to do, and sneaked to just outside the room at night and peeped from the window.
</p>
<p>
Inside you are surprised to find not one, but two <<rep $g.slaver>>s. You pinched yourself to make sure you're not just daydreaming this, but indeed, two of <<therace $g.slaver>> is inside the room.
<<if $g.slaver.isHasAnyTraitExact(['per_lustful', 'per_lunatic', 'per_curious', 'per_sexaddict', 'per_playful'])>>
In fact, the two of them are engaged in a rather raunchy sex right now — it seemed the
<<if $g.slaver.isHasTrait('per_lunatic')>>
lunatic could not resist the rare opportunity of having a self-cest.
<<elseif $g.slaver.isHasTrait('per_lustful')>>
lusty <<urace $g.slaver>> was entirely engrossed in the thought of having sex with who is basically <<themself $g.slaver>>.
<<elseif $g.slaver.isHasTrait('per_playful')>>
playful <<urace $g.slaver>> could not resist the fun opportunity for a little rare self-cest action.
<<elseif $g.slaver.isHasTrait('per_curious')>>
slaver was too curious to know what it must feel like having sex with <<their $g.slaver>> own body copy.
<</if>>
<<if $g.slaver.isHasDick()>>
The sex reached the conclusion as they pressed their dicks together, feeling
<<if $g.slaver.isHasTrait('dick_werewolf')>>
their knots rubbing against each other before
<<elseif $g.slaver.isHasTrait('dick_dragonkin')>>
the ridges on their dicks rubbing against each other before
<<elseif $g.slaver.isHasTrait('dick_demon')>>
the sensitive barbs on their dicks rubbing against each other before
<<else>>
the sensitive skin of their dicks rubbing againg each other before
<</if>>
climaxing simultaneously.
<<else>>
The sex reached the conclusion as they pressed their boobs together,
feeling the flesh touching against each other before shuddering in climax simultaneously.
<</if>>
<</if>>
</p>
<p>
Once they basked in the aftermath, <<rep $g.slaver>> finally noticed your presence, and a growing red shade of a mixture between shame, lust, and confusion grew on <<their $g.slaver>> face. You opened the window and stare at their copy, and asked <<rep $g.slaver>> to explain <<themself $g.slaver>>. Having been caught red-handed, <<they $g.slaver>> had no choice but to explain — it seemed that some time ago, during a quest <<they $g.slaver>> went into the desert alone, <<they $g.slaver>> met a strange <<man $g.slaver>> on the brink of death in the <<lore region_desert>>.
<<They $g.slaver>> nursed <<them $g.slaver>> back
<<if $g.slaver.isHasTrait('per_kind')>>
out of the kindness of <<their $g.slaver>> heart
<<else>>
with the intention of selling <<them $g.slaver>> later
<</if>>
but then the <<man $g.slaver>> suddenly transformed into much their liking. It seemed they encountered the rare doppelganger. Having no place to go, the doppelganger asked to come with <<them $g.slaver>>, and,
<<if $g.slaver.isHasTrait('per_lunatic')>>
being the lunatic slaver that <<they $g.slaver>> slaver|was,
<<they $g.slaver>> brought <<them $g.slaver>> home, no doubt already
planning to have raunchy self-sex later.
<<elseif $g.slaver.isHasTrait('per_lustful')>>
being the lustful slaver that <<they $g.slaver>> slaver|was,
<<they $g.slaver>> brought <<them $g.slaver>> home, no doubt already
planning to have raunchy self-sex later.
<<elseif $g.slaver.isHasTrait('per_playful')>>
being the playful slaver that <<they $g.slaver>> slaver|was,
<<they $g.slaver>> brought <<them $g.slaver>> home, no doubt already
planning to have some rather exciting fun in the form of self-sex later.
<<elseif $g.slaver.isHasTrait('per_curious')>>
being the curious slaver that <<they $g.slaver>> slaver|was,
<<they $g.slaver>> brought <<them $g.slaver>> home, unable to pass the rare opportunity of being able to have sex with <<themself $g.slaver>> later.
<</if>>
After some more questioning, it turned out that the doppelganger is a wanted <<man $g.slaver>> there, and hence
<<they $g.slaver>> did not tell you, since knowing how much you like money, you would just hand over the doppelganger over to claim <<their $g.slaver>> bounty.
</p>
<p>
What should you do now?
</p>
<<if $gOutcome == 'success'>>
<p>
Having been so thoroughly watched during one of <<their $g.slaver>> more raunchy sex adventures traumatizes the slaver for some time.
</p>
<</if>><p>
Unfortunately, your attempts to sneak and tail <<rep $g.slaver>> was not as stealthy as you would have hoped it to be. <<Rep $g.slaver>> noticed all too quickly, and asked you to stop.
<<if $gOutcome == 'failure'>>
Fortunately, it was a rather amiable request, and there was no love lost in the process, but you'd have to call the mission a failure for the time being.
<<else>>
<<They $g.slaver>> slaver|was rather traumatized that you of all people would tail <<them $g.slaver>> in such a way too, and you had to stop the mission and call it a failure before the trauma worsens.
<</if>>
</p><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Virgin Raider Capturer', /* name */
[
setup.trait.race_greenskin,
setup.trait.subrace_humandesert,
setup.trait.bg_nomad,
setup.trait.per_loner,
setup.trait.per_attentive,
setup.trait.per_lunatic,
setup.trait.skill_flight,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.subrace_humanvale,
setup.trait.subrace_werewolf,
setup.trait.per_gregarious,
setup.trait.per_dreamy,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
combat: 1,
survival: 1,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_virgin_raider', /* key */
"The Virgin Raider", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'desert',
'money',
'veteran',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'slave': 'all',
},
[ /* costs */
],
'Quest_the_virgin_raider',
setup.qdiff.hardest46, /* difficulty */
[ /* outcomes */
[
'Quest_the_virgin_raiderCrit',
[
setup.qc.Outcomes("success"),
setup.qc.MoneyCustom(2000),
],
],
[
'Quest_the_virgin_raiderCrit',
[
setup.qc.IfThenElse(
setup.qres.HasUnitWithTagAndJob('quest_doppelganged', setup.job.slaver),
setup.qc.DoAll([
setup.qc.SetCooldownQuest(null, 200),
setup.qc.VarSet('quest_doppelganger_progress', '1', -1),
setup.qc.SetCooldownEvent('out_of_character', 5)
], undefined),
setup.qc.DoAll([
setup.qc.Favor('outlaws', 50),
setup.qc.MoneyCustom(1500)
], undefined)),
],
],
[
'Quest_the_virgin_raiderFailure',
[
setup.qc.MissingUnit('a'),
],
],
[
'Quest_the_virgin_raiderFailure',
[
setup.qc.MissingUnit('a'),
setup.qc.Trait('a', setup.trait.bg_slave),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.desert, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.NoUnitWithTitle('quest_doppelganger', {
}),
setup.qres.NoUnitWithTitle('quest_doppelganged', {
}),
setup.qres.NoUnitWithTag('quest_doppelganged'),
],
[ /* expiration outcomes */
],
)>><p>
Your company receives quests of many kinds, be it from the many settlements in the region, the banking institution, and occasionally the outlaws. This time, its from the latter, as apparently a raiding company in the <<lore region_desert>> has been hearing disturbing rumors of a solo raider known as the Virgin Raider. Normally, they would not bother with an independent raider such as this one, but the Virgin Raider has apparently been targeting the desert virgins at night and gaping their once virginal tight holes, reducing the potential slave values of the company's captives.
</p>
<p>
Due to the nature of the quest, however, the company requests that you only send a single slaver for this mission. With more slavers, they suspect that the Virgin Raider would caught wind of it, making it harder for your slavers to try to capture the raider. They promise quite a large amount of bounty for the raider, should your slaver succeed. Still, you can't help but feel that there is something incredibly off about all of this...
</p><<if $g.a.isHasAnyTraitExact([
'per_playful',
'per_lustful',
'per_sexaddict',
'per_curious',
'per_lunatic',
])>>
<<run setup.qc.AddTag('a', 'quest_doppelganged').apply($gQuest)>>
<p>
<<Yourrep $g.a>> a|was not able to find anything of the sort, even after four weeks of waiting and scouring through the vast <<lore region_desert>>. Understandably, the raiders did not pay your slaver, and <<they $g.a>> came back home empty-handed.
</p>
<p>
Oddly enough, the Virgin Raider seems to have ceased their operations a few days after your slaver went back home.
<<if $gOutcome == 'crit'>>
The grateful villagers even attributed it to your slaver somehow, and you receive some money in return.
<</if>>
Strange, considering what your slaver had reported, but perhaps it is just a good coincidence.
</p>
<<else>>
<p>
<<Yourrep $g.a>> went alone into the vast <<lore region_desert>> and scoured the vast deserts for information.
<<if $g.a.isHasTrait('bg_nomad')>>
<<Rep $g.a>> a|is used to traveling thanks to <<their $g.a>> background as a nomad.
<</if>>
<<if $g.a.isHasTrait('race_greenskin') or $g.a.isHasTrait('subrace_humandesert')>>
The vast deserts are <<their $g.a>> home, and <<rep $g.a>> felt natural venturing across the featureless sands.
<</if>>
<<if $g.a.isHasTrait('per_loner')>>
<<They $g.a>> is a natural loner, and traveling alone was comforting for <<them $g.a>>.
<</if>>
<<if $g.a.isHasTrait('per_gregarious')>>
Traveling alone took a toll on the gregarious slaver.
<</if>>
<<if $g.a.isHasTrait('magic_fire')>>
<<Their $g.a>> fire magic helped <<them $g.a>> ward off the heat of the deserts.
<</if>>
<<if $g.a.isHasTrait('magic_water')>>
<<Their $g.a>> affinity to water magic and the cold weather meant the harsh sunlight of the deserts were burning extra bright for <<them $g.a>>.
<</if>>
<<if $g.a.isHasTrait('subrace_humanvale') or $g.a.isHasTrait('subrace_werewolf')>>
<<Rep $g.a>> hailed from the cold plains of the north, and the searing heat of the deserts is not something <<they $g.a>> appreciate.
<</if>>
</p>
<p>
After a few weeks, <<they $g.a>> finally got a lead, as the raider was rumored to hit the village <<they $g.a>> just so happened to be in within a few days. <<They $g.a>> waited
<<if $g.a.isHasTrait('per_calm')>>
patiently
<<else>>
impatiently
<</if>>
for the raider to give the village a visit, and soon enough a small muffled scream could be heard during a night.
<<if $g.a.isHasTrait('per_attentive')>>
While other, less attentive <<man $g.a>> would not take note, <<rep $g.a>> a|is a rare breed of an attentive <<urace $g.a>>, and <<they $g.a>> tracked the source of the moans into a dark alley in the village.
<<else>>
Despite not being particularly attentive, <<rep $g.a>> a|was simply lucky to stumble across the alley where the moans were coming from.
<</if>>
</p>
<p>
<<Rep $g.a>> caught the virgin raider off guard, <<their $g.a>>
<<if $g.a.isHasDick()>>dick<<else>>strap-on<</if>> lodged deep inside a struggling villager, and <<rep $g.a>> had no trouble at all subduing the raider. With the raider captured, the grateful villagers threw <<them $g.a>> a small feast, as well as a sum of money out of <<their $g.a>> gratitude. Combined with the money that the outlaws also rewarded, <<rep $g.a>> came back home with a
<<if $gOutcome == 'crit'>>
rather sizable bag of coins.
<<else>>
large bag of coins.
<</if>>
</p>
<p>
Strangely enough, you have a hunch that there might be something more to this quest.
If you trust your hunch,
next time you should send a different slaver on this mission,
preferably someone who
<<if $gQuest.getSeed() % 4 == 0>>
is a bit not right in their head...
<<elseif $gQuest.getSeed() % 4 == 1>>
enjoys playing a little bit too much...
<<elseif $gQuest.getSeed() % 4 == 2>>
enjoys sex more than usual...
<<else>>
is curious about most things...
<</if>>
</p>
<</if>><p>
Venturing into the <<lore region_desert>> alone, <<yourrep $g.a>> never came back home. It is unclear what had happened, but you had a strange feeling that this was all just a simple ruse by the desert outlaws to get their hands on a rather valuable piece of slave...
</p><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Dark Knight', /* name */
[
setup.trait.bg_knight,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Equipped('slaving_weapon_master'),
],
{
combat: 0.6,
brawn: 0.6,
slaving: 0.6,
arcane: 0.6,
sex: 0.6,
}
)>>
<<run new setup.QuestTemplate(
'a_letter_of_challenge', /* key */
"A Letter of Challenge", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'prep',
'special',
'danger',
'unit',
],
8, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'k': [],
},
[ /* costs */
],
'Quest_a_letter_of_challenge',
setup.qdiff.hardest60, /* difficulty */
[ /* outcomes */
[
'Quest_a_letter_of_challengeCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Item(setup.item.potion_protection, 1),
],
],
[
'Quest_a_letter_of_challengeCrit',
[
setup.qc.Slave('k', "a|was a knight sent on a quest to recover the missing Excalibur, but failed miserably", undefined),
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Corrupt('a', null, 1),
setup.qc.Injury('a', 4),
],
],
[
'Quest_a_letter_of_challengeFailure',
[
setup.qc.MissingUnit('a'),
setup.qc.AddTraitsRandom('a', [setup.trait.per_chaste, setup.trait.per_honorable, setup.trait.magic_light, setup.trait.per_calm], 1, false, false),
],
],
[
'Quest_a_letter_of_challengeFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.EquipmentLose(setup.equipment.slaving_weapon_master),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
A mysterious letter has arrived at your fort, impeccably written, and challenging one of your slavers to a duel. Specifically, <<they $g.k>> k|have somehow heard that one of the missing Excalibur swords is currently in the possession of one of your slavers. Judging from the letter, it does not seem that the challenger is aware of what fate has befell the sword, but the challenge was issues nonetheless seemingly for <<them $g.k>> to get a shot a reclaiming the sword.
</p>
<p>
Chivalry and honor would be of zero interest to your company <<if $unit.player.isHasTrait('per_honorable')>>(despite how honorable you are, you know that chivalry ultimately does not make money go round)<</if>>, but the challenger must be quite confident in <<their $g.k>> abilities to issue such a challenge, and perhaps having a skilled fighter such as <<them $g.k>> as one of your slaves would be an interesting challenge...
</p>
<p>
You could try to send them to take up the challenge, but who knows what might happen should they fail...
</p><p>
<<Yourrep $g.a>> <<uadv $g.a>> arrived at a small clearing in the <<lore region_vale>>, designated as the dueling area.
There, a lone knight stood in waiting, and upon seeing <<rep $g.a>> and <<their $g.a>> sword, readied <<their $g.k>> own, and with a simple nod the combat began.
<<They $g.k>> k|is very good at combat, harrying thrust upon thrust on <<rep $g.a>>.
A stray hit or two grazed and injured <<rep $g.a>>, but the fight was far from over.
</p>
<p>
<<Rep $g.a>> a|is fully aware that <<their $g.a>> opponent is completely oblivious to the corrupted state of <<their $g.a>> sword, and a|is planning to make full advantage of it.
When a small opening is presented, <<rep $g.a>> seized it by thrusting <<their $g.a>> ethereal sword upwards.
The sky turned dark, and corrupted energy began to concentrate on the sword.
<<if $g.a.isHasTrait('face_scary')>>
The corruption turned <<rep $g.a>>'s already scary face into a terrifying visage.
<</if>>
<<if $g.a.isHasTrait('corrupted')>>
<<Reps $g.a>> corrupted body easily absorbed the corruption, empowering <<them $g.a>> greatly.
<</if>>
<<if $g.a.isHasTrait('per_cruel')>>
The corruption is well attuned to <<reps $g.a>> cruel self, making it more effective as a weapon.
<</if>>
<<if $g.a.isHasTrait('per_lustful')>>
<<Rep $g.a>> a|is a rather lusty <<urace $g.a>>, making <<them $g.a>> a perfect host for the corrupted energy.
<</if>>
<<if $g.a.isHasTrait('per_dominant')>>
<<Their $g.a>> dominant tendencies got amplified by the corruption.
<</if>>
<<if $g.a.isHasTrait('per_lunatic')>>
<<They $g.a>> let out a maniacal cackle at the sight, intimidating the enemy.
<</if>>
<<if $g.a.isHasTrait('magic_dark')>>
<<Their $g.a>> mastery over dark magic is greatly amplified by the impending energy.
<</if>>
Fully empowered by the dark energy, <<rep $g.a>> completely overpowered the enemy, pinning <<them $g.k>> to the ground and knocking <<them $g.k>> unconscious.
</p>
<p>
Once the combat was over and the corruption ended, <<rep $g.a>> stripped the knight completely naked and bound <<them $g.k>> tight, ensuring all holes were plugged for the long trip home. <<They $g.k>> even took one of <<their $g.k>> equipments that was not too tarnished by the corruption home.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.a>> also found a single rare potion inside the knight's pocket: a <<rep setup.item.potion_protection>>. The knight must have planned to use it prior to the fight, but probably forgotten about it.
</p>
<</if>><p>
<<Yourrep $g.a>> <<uadv $g.a>> arrived at a small clearing in the <<lore region_vale>>, designated as the dueling area.
There, a lone knight stood in waiting, and upon seeing <<rep $g.a>> and <<their $g.a>> sword, readied <<their $g.k>> own, and with a simple nod the combat began.
<<They $g.k>> k|is very good at combat, harrying thrust upon thrust on <<rep $g.a>>.
And perhaps a little too good for <<reps $g.a>> liking...
</p>
<p>Indeed, the knight was meticulous. <<They $g.k>> realized that <<rep $g.a>> was hiding something, and straight from the start <<they $g.a>> a|was not aiming for <<therace $g.a>>, but rather, for the cursed Excalibur.
<<Rep $g.a>> a|was no match for the sword<<man $g.k>>'s prowess as <<they $g.k>> skillfully disarmed <<therace $g.a>>, thus claming <<their $g.k>> victory.
</p>
<p>
You never heard back from <<yourrep $g.a>> after the fight. Perhaps <<they $g.a>> found <<their $g.a>> new calling as a squire for the knight, but more likely <<they $g.a>> a|have been captured to be reborn anew as an upstanding and model citizen.
<<uneedrescue $g.a>>, before <<their $g.a>> heart got purified a little too much!
</p>
<<if $gOutcome == 'failure'>>
<p>
Strangely enough, you found the <<rep setup.equipment.slaving_weapon_master>> back at your <<rep setup.buildingtemplate.armory>> after a couple of days...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'carnal_experience', /* key */
"Carnal Experience", /* Title */
"darko", /* Author */
[ 'veteran',
'vale', 'unknown'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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': 'subrace_humanvale', },
[ /* costs */
],
'Quest_carnal_experience',
setup.qdiff.hardest51, /* difficulty */
[ /* outcomes */
[
'Quest_carnal_experienceCrit',
[
setup.qc.SlaverMarker('chief'),
setup.qc.Outcomes('success'),
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, setup.rarity.common],
],
[ /* 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>> has came with a most unusual problem for your company to solve.
</p>
<p>
You see, <<they $g.daughter>> daughter|have 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>> <<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>> knows that you love nothing more than great rewards. <<Their $g.daughter>> tribe is one of the tribes with the longer history 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>
The clever <<girl $g.daughter>> surely know your weakness well.
After all, what greater rewards are there than wisdom?
</p><<if $g.slave.isFemale()>>
<<questimage 'carnal_experience_female.jpg'>>
<</if>>
<p>
The chieftain turned out to be a prude beyond what your slavers imagined 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 silently how <<they $g.chief>> could possibly have a <<daughter $g.daughter>> with that attitude, <<rep $g.knight>> started to enact the plan for slowly enacting hotter and hotter "accidental" scenes around the encampment, passing it as the, uh, "traditional culture" of whichever faraway region your slavers decided to came up with.
</p>
<p>
It started slow and bashful -- initially, the sequence of "accidents" only included things such as one where <<rep $g.slave>> accidentally tripped over when walking and fell ass-flat into the chieftain's <<if $g.chief.isHasDick()>>crotch<<else>>ample breasts<</if>>.
But it still drew no reaction from the chief,
<<set _creative = setup.selectUnit([$g.knight, $g.whore, $g.trainer], {trait: 'skill_creative'})>>
<<if _creative>>
forcing <<rep _creative>> to use <<their _creative>> mind to come up with something else...
<<else>>
and your slavers began to get desperate and creative
with their acts...
<</if>>
</p>
<p>
The "accidental" sexual events 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 <<their $g.chief>> sleep.
After all, no matter how strong <<therace $g.chief>>'s mind is, sex is still a part of <<their $g.chief>> primal instinct and surely not even the prude chief was immune to wet dreams.
Sure enough, the chief quickly <<if $g.chief.isHasDick()>>came inside <<reps $g.slave>> <<umouth $g.slave>><<else>>climaxed from <<reps $g.slave>> cunnilingus<</if>> every night.
Eventually, without knowing why, the chief started to get a little flushed each time <<rep $g.slave>> slave|was brought around for entertainment.
</p>
<p>
By the end of the first few weeks, your slavers' plan was starting to bear fruit.
<<Rep $g.chief>> started to ask your slavers raunchy 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 obliged the prude and told all sorts of degenerate stories.
</p>
<p>
In the last few days, the chief spent almost <<their $g.chief>> entire days exploring various new techniques with <<yourrep $g.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 their splendid efforts.
</p>
<</if>><p>
The chieftain turns out to be a prude beyond what your slavers imagined 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 silently how <<they $g.chief>> could possibly have a <<daughter $g.daughter>> with that attitude, <<rep $g.knight>> started to enact the plan for slowly enacting hotter and hotter "accidental" scenes around the encampment, passing it as the, uh, "traditional culture" of whichever faraway region your slavers decided to came up with.
</p>
<p>
It started slow, initially with a sequence of "accidents" including one where <<rep $g.slave>> accidentally tripped over when walking and fell ass-flat into the chieftain's <<if $g.chief.isHasDick()>>crotch<<else>>ample breasts<</if>>.
But something snapped within the chieftain's head, and it was not looking good for your slavers...
</p>
<p>
Without warning, the chieftain denounced the evils of slavery, taking the slave <<rep $g.slave>> with <<them $g.chief>> and freeing the obedient little <<urace $g.slave>> from <<their $g.slave>> bondage.
Your slavers were then swiftly kicked out of the encampment as <<they $g.chief>> no doubt will begin trying 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 coax information from <<therace $g.trainer>> on how to best undo the slave's mentality. <<urescuenow $g.trainer>>.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_chivalrious_rescue2',
"Wizard",
'desert_all', /* pools */
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 */
"Chivalrious Rescue", /* Title */
"darko", /* Author */
[ 'veteran',
'desert',
'unit',
'danger'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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', "a|was a dark wizard 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, setup.rarity.common],
],
[ /* 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 in the <<lore region_desert>>, 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 remaining is the dark wizard who stands
between you and the <<princess $g.slave>>.
From your experiences, fighting against dark wizards is always 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 could sense evil energies
swirling from around the tower.
<<else>>
Since the team's purifier lacked <<rep setup.trait.magic_fire>>, <<they
$g.purifier>> couldn'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 appeared 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 did
whatever evil work at the bottom.
</p>
<p>
Your slavers had a job to do, and they marched 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 surrounded the fort as black tendrils sprouted 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>> could.
<<else>>
Lacking <<rep setup.trait.magic_fire>>, <<rep $g.purifier>> used the seals
they purchased earlier to ward off as much corruption as <<they $g.purifier>> could.
<<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, <<yourrep $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 was 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 dissipated, revealing the tower entirely.
</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 $g.slave>>...
</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 <<yourrep $g.purifier>> in darkness, until <<they $g.purifier>>
disappeared completely leaving no trace whatsoever.
Seeing their purifier gone, your slavers made the right but heartless decision to flee.
<<else>>
The spell engulfed <<yourrep $g.knight>> in blackness, leaving <<them
$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 never 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>> knight|is transformed into the wizard's plaything.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Mounted-on-a-Sword', /* name */
[
setup.trait.per_submissive,
setup.trait.per_sexaddict,
setup.trait.training_endurance_basic,
setup.trait.training_endurance_advanced,
setup.trait.training_endurance_master,
setup.trait.training_vagina_basic,
setup.trait.training_vagina_advanced,
setup.trait.training_vagina_master,
setup.trait.training_anal_basic,
setup.trait.training_anal_advanced,
setup.trait.training_anal_master,
],
[
setup.trait.per_dominant,
setup.trait.training_mindbreak,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.vagina_gape, setup.trait.anus_gape], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'dark_excalibur', /* key */
"Dark Excalibur", /* Title */
"darko", /* Author */
[
'veteran',
'special',
'item',
'unknown',
'fort',
], /* 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_sly, 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_sly, 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.VarSet('quest_excalibur_radiant', '1', 250),
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, you need a corruptor skilled in <<rep setup.trait.magic_dark>>. The corruptor will lead the ritual, which must be prepared thoroughly by a knowledgeable slaver. A gaping slave is also required for the ritual, and although the text does not detail what the slave will need to do, you don't have to guess very much where this is going. And finally, <<yourrep $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 <<yourrep $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 seemed to have to be improvised 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 at the corner of the room with
a generous amount of chains (borrowed from the dungeons), <<rep
$g.ritualist>> watched in anticipation as <<yourrep $g.corruptor>> started the
ritual. As the chanting begins, the candles surrounding the circles turned
purple and the air turned suffocating. Sensing the depravity around it, the
Excalibur sword attempted to radiate its light again, but this time it was quickly
engulfed by the spawning darkness spreading from the center of the magic
circle. Light and darkness visibly clashed in the middle of the room,
neither willing to give 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>> trainer|was already bringing the slave <<rep
$g.slave>> closer to the circle, nearing the sword. With the darkness
gripping the sword handle, the sword now appeared 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 began as
<<therace $g.slave>> was slowly lowered into the sword's tip.
The slave screamed 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 turned dark and corrupted, although it remained
beautiful. The blade turned ethereal, no longer affecting the flesh, but now
affecting 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>>, making <<rep $g.ritualist>> winced from the cruel act.
<</if>>
</p>
<p>
Your slavers never noticed when <<reps $g.knight>> bindings were broken, and <<rep $g.knight>> calmly walked into the center of the pandemonium. Crouching, <<they $g.knight>> grabbed the pommel of the sword, and effortlessly hoisted the sword upwards still with <<rep $g.slave>> stuck on it.
<<if $gOutcome == 'crit'>>
It seemed the ritual went perfectly as your slavers could 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 seemed the ritual were successful, as your slavers could see power and corrupting transferring from the sword into <<yourrep $g.knight>>. Calmly,
<<else>>
It seems the ritual was somewhat successful, as your slavers could see power and corrupting transferring from the sword into <<yourrep $g.knight>>. But then a big backlash occurred, spreading corruption all over the room and corrupting everyone involved, both physically and mentally, from the pain caused by the sword. The room became a complete mess. Calmly,
<</if>>
<<rep $g.knight>> unsheathed the sword from the slave and stared at the sword, <<their $g.knight>> mind finally returned to <<themself $g.knight>> and <<they $g.knight>> was no longer controlled by the sword.
</p>
<p>
After a few days, <<yourrep $g.knight>> knight|was 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>> now knight|have an unbreakable bond with the
sword. 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 on what they was supposed to do in the ritual. They never noticed when
<<reps $g.knight>> bindings broke, and <<theslaver $g.knight>> wordlessly walked into the
center of the circle. Crouching, <<therace $g.knight>> grabbed the pommel of
the sword, and the darkness could be seen giving out to the forces of the light. Sensing that the ritual was about
to fail, in a last ditch effort <<yourrep $g.corruptor>> hurled <<their
$g.corruptor>> strongest dark spell towards both the sword and <<yourrep $g.knight>>,
severely corrupting <<therace $g.knight>> and the sword alike.
</p>
<p>
It seemed 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 still refused to be wielded
by anyone, even by <<rep $g.knight>>, and there is nothing else you could do
with it but to sell it to collectors for a decent sum...
</p>
<p>
A few days later, <<rep $g.knight>> knight|have finally returned to normal.
No more crusade this crusade that, <<therace $g.knight>> knight|is back to their
<<uadjgood $g.knight>> self.
Interestingly, <<they $g.knight>> knight|retain no memory of the entire sequence of events,
save for the trauma and corruption <<they $g.knight>> must now endure.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'excalibur_crusade', /* key */
"Excalibur Crusade", /* Title */
"darko", /* Author */
[
'veteran',
'special',
'unknown',
'sea',
], /* 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.Outcomes('crit'),
setup.qc.Injury('warrior', 5),
],
], [
'Quest_excalibur_crusadeCrit',
[
setup.qc.Outcomes('crit'),
setup.qc.Injury('warrior', 20),
],
], [
'Quest_excalibur_crusadeDisaster',
[
setup.qc.QuestDirect('excalibur_crusade', {knight: 'knight'}),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
<<Yourrep $g.knight>> recently went on a quest to claim the divine sword
Excalibur. But somehow, after claiming the legendary sword successfully,
<<theslaver $g.knight>> suddenly turned against <<their $g.knight>> former comrades, while
denouncing all of yours 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 <<theslaver $g.knight>>,
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>> arrives
at the doorsteps of your fort and starts a rampage inside. Fortunately,
<<rep $g.knight>> 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 your fort. But best to handle this problem as soon as possible.
</p>
<p>
An informer is needed to locate <<theslaver $g.knight>> within the vast network of islands
of the <<lore region_sea>>. Once <<theslaver $g.knight>> is located, the difficult part begins.
A skilled slaver, preferably experienced in fighting knights, must somehow
subdue <<therace $g.knight>>. To make this possible at all, you will also need a
wizard skilled in <<rep setup.trait.magic_dark>>, to corrupt the holy sword as
much as possible and weaken it during the fight.
</p><p>
<<Yourrep $g.informer>> managed to locate <<rep $g.knight>> within 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>>, <<yourrep
$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 insights of Excalibur. A fight
immediately ensued, with <<rep $g.warrior>> fighting the best <<they
$g.warrior>> could against such a legendary sword.
<<if $gOutcome == 'crit'>>
<<rep $g.warrior>> 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 inflicting griveous wound on <<their $g.warrior>>
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 was targeted towards the holy sword.
The Excalibur started to glow a small shade of purple, which in turn caused
<<rep $g.knight>> to groan in pain. Seizing the opportunity, <<rep
$g.warrior>> advanced and delivered a swift blow with <<their $g.warrior>> <<uweapon $g.warrior>>,
knocking <<rep $g.knight>> out, who then released
<<their $g.knight>> grip on the sword. Your slavers quickly and wisely
separated <<theslaver $g.knight>> 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 was placed and sealed in a secure
box your slavers wisely brought to the isle, thanks to the advise of <<yourrep
$g.informer>>. You should decide what to do with the sword and
the tied-up slaver once they get back home.
</p><p>
Four weeks of search led to nothing as <<rep $g.informer>> informer|was
unable to locate or even get a slight hint on <<reps $g.knight>> 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>/* PROOFREAD COMPLETE */
<<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 a|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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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], true),
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], true),
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, setup.rarity.common],
],
[ /* 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 spent
centuries practicing magic to enhance both their wit and their physical perfection.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
You have heard information that an ancient elven library lies somewhere in
the <<lore region_forest>>, apparently remaining untouched for centuries. That
certainly does not bode well for your company's chance to find it,
but rumors say that 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 it and let a group of slavers
spend an entire month in the western forests, looking for this mythical
place. Why, <<yourrep _u>> thinks it's a very good idea, if anything else!
</p>
<p>
A good scout is always required in the <<lore region_forest>> or else you risk your
slavers getting lost in the vast landscape. 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 <<lore region_forest>>, their perseverance
was rewarded when <<rep $g.scout>> found an empty clearing in the middle of
the forest, with ruins scattered all about. After scrutinizing the inscriptions on
the walls, <<rep $g.scholar>> scholar|was confident that this must be the
elven library complex they were looking for. Only, there did not seem to be
anything there but a large, empty space.
</p>
<p>
Thanks to <<reps $g.scholar>> vast knowledge, <<they $g.scholar>> scholar|was
able to decipher the elven writings scattered throughout the area. Apparently,
the entire area forms an otherworldly portal, which opens 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, including one already extinct.
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 <<uhands $g.scout>> 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
<<yourrep $g.knight>> knight|was simply too dumb to be able to finish
the chant.
<<elseif $g.knight.isHasTrait('per_stubborn')>>
Halfway through however, the script started to magically sway and move,
putting blank spaces here and there apparently as a test for your slaver's wit. But the
stubborn slaver <<rep $g.knight>> lacked the inquisitive mind required to
solve such a puzzle.
<<elseif $g.knight.isHasTrait('magic_wind')>>
Halfway through however, <<reps $g.knight>> <<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>>
<<reps $g.knight>> reading speed slowed down to a crawl, even with <<reps
$g.scholar>> helpful notes annotated the script all over the place. Ultimately, it was
obvious that the ritual failed. At least none of your slavers were 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 turned out to be a puzzle in itself. As <<rep $g.knight>>
continued to chant, the script itself changed and twisted, demanding answers
from <<reps $g.knight>> sharp mind.
As the first challenge, the phrases became harder and intricate.
<<set _wins = 0>>
<<if $g.knight.isHasTrait('per_smart')>>
<<set _wins = _wins + 1>>
While it would have certainly stifled any other <<man $g.knight>>, it was not a
problem at all for <<rep $g.knight>>, thanks to <<their $g.knight>> brilliant
mind.
<<else>>
It greatly challenged <<reps $g.knight>> ordinary mind, but <<rep $g.knight>>
knight|was not dumb and <<they $g.knight>> knight|was 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 <<reps $g.knight>> biggest virtue, and <<they
$g.knight>> knight|was able to pass the test with complete ease.
<<elseif $g.knight.isHasTrait('per_curious')>>
Fortunately, it was not a problem at all for the inquisitive slaver, who
improvised seemingly with great ease and familiarity.
<<else>>
This greatly challenged <<rep $g.knight>>, but since <<they $g.knight>>
knight|was not a stubborn slaver, <<rep $g.knight>> managed to overcome the
challenge still.
<</if>>
Finally, a failsafe mechanism was initiated where <<reps $g.knight>> magical
prowess was tested.
<<if $g.knight.isHasTrait('magic_earth')>>
The earth immediately rose around <<rep $g.knight>>. Sensing the familiar
earth spell emanating form <<theslaver $g.knight>>, the puzzle completed its
task of verifying that the entity before them was not an enemy.
<<elseif $g.knight.isHasTrait('magic_water')>>
The sky immediately turned dark as a torrent of rain engulfed the
forests. While this had no noticable effects on the magical scripts, it
seemed that it was satisfied by the lack of <<lore magic_wind>>.
<<elseif $g.knight.isHasTrait('magic_fire')>>
The sky immediately turned crimson as fire circled <<rep $g.knight>>. While
this had no noticable effects on the magical scripts, it seemed that it was
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 <<reps $g.knight>> innate <<lore magic_light>> covered <<their
$g.knight>> entire body, glowing brightly. While this had no noticable
effects on the magical scripts, it seemed that it was satisfied by the lack of
<<lore magic_wind>>.
<<elseif $g.knight.isHasTrait('magic_dark')>>
<<Rep $g.knight>> winced in pain as <<they $g.knight>> felt the corrupted
energy flew from within <<their $g.knight>> body and into the script, but seemingly with no
noticable effect. Either way, it seemed that the puzzle was satisfied by the
lack of <<lore magic_wind>>.
<<else>>
But <<rep $g.knight>> knight|was not known for <<their $g.knight>> magical
talents, and nothing happened. But it seemed that this was a passable grade for
the puzzle — perhaps it was 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 enhanced <<them $g.knight>>, bestowing <<them $g.knight>> with ancient
knowledge. <<Yourrep $g.knight>> came out wiser than ever<<if
!$g.knight.isYou()>>, perhaps even wiser than you if <<they $g.knight>>
knight|was not already before<</if>>.
</p>
<</if>>
<p>
As the trial completed, your slavers gazed in awe as the Library of
Wisdomglade that magically materialized 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 <<lore region_forest>>, their perseverance
was rewarded when <<rep $g.scout>> found an empty clearing in the middle of
the forest, with ruins scattered all about. After scrutinizing the inscriptions on
the walls, <<rep $g.scholar>> scholar|was confident that this must be the
elven library complex they were looking for. Only, there did not seem to be
anything there but a large, empty space.
</p>
<p>
As your slavers scoured 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 <<they $g.knight>> had no care in the
world. Apparently the ancient elven magical enchantments still held to this
very day, and 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>>
had a plan to save <<rep $g.knight>>. Before <<rep $g.scholar>> had
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 was 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 <<yourrep $g.knight>>. Oddly enough, it was signed
seemingly by <<rep $g.scout>>, who as you remembered was also nowhere to be
seen. <<uneedrescue $g.scout>>, before <<they $g.scout>> get <<themself
$g.scout>> into even 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>>/* PROOFREAD COMPLETE */
<<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 */
"a|was a knight chosen to be the wielder of Excalibur. You freed a|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 */
"a|was the knight chosen to host the Excalibur sword. Should be kept as far as possible from the Excalibur lest a|they a|get re-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.race_human,
setup.trait.bg_knight,
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_serious,
setup.trait.per_chaste,
setup.trait.per_honorable,
setup.trait.skill_ambidextrous,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_sly,
setup.trait.per_independent,
setup.trait.per_curious,
setup.trait.per_cruel,
setup.trait.per_playful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.skill_flight,
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.magic_dark,
setup.trait.magic_dark_master,
],
[
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('crit'),
setup.qc.Injury('navigator', 4),
setup.qc.Injury('diviner', 4),
],
], [
'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, setup.rarity.always],
],
[ /* 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 region_city>>
some time ago. As the rumors said, the sword tend to show itself to a worthy
swordsman who had 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 <<yourrep _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>
<<Yourrep $g.navigator>> skillfully navigated the ship through the
treacherous waters, following <<reps $g.diviner>> <<uadv $g.diviner>>-delivered
divinations on the supposed location of the sword.
<<if $g.diviner.isHasTrait('magic_light_master')>>
Thankfully, <<reps $g.diviner>> mastery of <<rep setup.trait.magic_light_master>>
was enough to guide the ship safely until they arrive at
<<else>>
<<rep $g.diviner>> only had 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 proved to be a challenge — filled to the brim with monsters,
<<yourrep $g.knight>> had to fight like a champion of legend through the
horde of monsters, while <<rep $g.diviner>> did <<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 lied a single sword shining so brightly stabbed deep down into the earth.
The light blinded both <<rep $g.diviner>> and <<rep $g.navigator>>, for it
judged them unworthy of the simple act of laying their eyes upon the divine sword Excalibur.
But it seemingly had no effect on <<yourrep $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
settled in <<reps $g.knight>> <<uhands $g.knight>>.
The blinding light ended too, and as <<rep $g.navigator>> about to <<uadv
$g.navigator>> congratulate <<rep $g.knight>>, <<therace $g.knight>>
suddenly pointed the sword against <<their $g.knight>> former allies.
Denouncing all sorts of evils your company had done, <<rep $g.knight>>
suddenly attacked the rest of your slavers, eventually forcing them to
retreat back to the ship with neither <<rep $g.knight>> nor the sword in tow.
<<if $gOutcome == 'success'>>
They suffered several gashes from the skillful assault from <<rep $g.knight>>.
<</if>>
</p>
<p>
Out in the sea, your slavers were finally safe from whatever possessed <<rep
$g.knight>>. But you just know that this will not be the last time you hear of <<rep
$g.knight>>, the current 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, <<they $g.knight>> felt as if the sword and the earth fused into
one. Frustrated, <<rep $g.knight>> vented their anger by slamming the sword
with their fists — a grave mistake as the sword absorbed one of the three
aspects of chivalry from <<rep $g.knight>> into the sword. Without all three
aspects of chivalries, <<rep $g.knight>> knight|was 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>
<<Yourrep $g.navigator>> skillfully navigated the ship through the
treacherous waters, following <<reps $g.diviner>> <<uadv $g.diviner>>-delivered
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 were no match for your slavers' prowess,
especially <<yourrep $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
appeared out of nowhere zapping the tip of
<<reps $g.knight>> <<uweapon $g.knight>>, shocking <<theslaver $g.knight>> to the core.
While your slavers managed to get away from the engagement intact, they
suffered 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>> vented <<their
$g.knight>> anger on <<rep $g.diviner>>. But such a behavior was unsuitable
for the future wielder of Excalibur, and when your slavers returned, you can
feel that <<rep $g.knight>> knight|is no longer suitable for the task.
</p>/* PROOFREAD COMPLETE */
<<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.Outcomes('success'),
setup.qc.MoneyNormal(),
],
], [
'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.Outcomes('success'),
setup.qc.Ire('humankingdom', 15),
setup.qc.Injury('disarmer', 4),
setup.qc.Injury('thief', 2),
],
], [
'Quest_treasury_assault_finaleCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Ire('humankingdom', 30),
setup.qc.Injury('disarmer', 4),
setup.qc.Injury('thief', 2),
],
], ],
[ /* quest pool and rarity */
],
[ /* restrictions to generate */
],
[ /* expiration outcomes */
],
)>><p>
You have decided to return the Excalibur back to the treasure vaults in the <<lore region_city>>,
with the hope that it will
cure <<reps $g.knight>> 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 region_city>>. This time, however, there are no longer a master
thief to aid them in their efforts, and hence your slavers must rely on
themselves and their considerable skills alone. This will be an ultimate challenge
for your slavers to overcome in this quest for Excalibur. Who knows, maybe
there are still some other things worth stealing within the treasury...
</p><p>
Bringing the Excalibur back to the city, your slavers surveyed the castle in the
coming days.
After determining the best course of action, your slavers waited until one
particular night where many of the guards were having an induction party for the new guards. When
the day came, your slavers were 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 <<yourrep $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 was tighter than ever,
with magical traps of various kinds littering the place.
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
It was no trouble for <<reps $g.disarmer>> experienced <<uhands $g.disarmer>>
however, and <<therace $g.disarmer>> <<uadv $g.disarmer>> disarmed most of
the traps, allowing your slavers to infiltrate quietly. Finally,
<<else>>
<<rep $g.disarmer>> however disarmer|was 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 was supposed to sit.
</p>
<p>
<<Rep $g.thief>> gently placed the cursed sword back on the pedestal, while quietly
thinking to <<themself $g.thief>> what a shame it was 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: the <<rep setup.item.f_drinktray_master>><<if $gOutcome == 'crit'>>, as
well as loads of treasures<</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 <<reps $g.seducer>>
masterful allure and <<reps $g.disarmer>> trap-disarming 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 evade all undue attention.
The magical trap that <<rep $g.disarmer>> triggered was apparently an identification trap,
and somehow your company was identified as the mastermind behind said theft.
<<if $gOutcome == 'disaster'>>
Worse, <<rep $g.seducer>> failed to detect the faked allure from one of the
guards, who carefully monitored your slaver and deduced <<their $g.seducer>>
identity.
<</if>>
Your company's relations with <<rep $company.humankingdom>> suffered massively
as a result, and you can expect retaliation soon...
<</if>>
</p>
<p>
A few days later, <<rep $g.knight>> knight|have finally returned to normal.
No more crusade this crusade that, <<therace $g.knight>> slaver is back to their
<<uadjgood $g.knight>> self.
Interestingly, <<they $g.knight>> knight|retain no memory of the entire sequence of events,
but still best not to keep <<theslaver $g.knight>> 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>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_treasury_assault1',
"Vault Treasure",
'subrace_humansea', /* pools */
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',
'ire',
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.Slave('treasure', "a|was a living treasure in the vaults of Lucgate", undefined),
setup.qc.Equipment(setup.equipmentpool.all_nonsex_good),
],
], [
'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, setup.rarity.common],
],
[ /* 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 structures. While the castle itself is a magnificent
building, you are most interested in its 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, <<yourrep _u>>
<<uadv _u>> informed you that an unknown 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>
You will need to send 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 treasury 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 seemed your slaver picked the right position, as guards from the
area they were in rushed to reinforce the other side of the castle. <<Rep
$g.seducer>> swayed their <<ubody $g.seducer>> sensuously towards the
few remaining guards, confusing the poor soldiers who are sure to get their pay
deducted once the rest of your slavers finished 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 numerous traps littering the place one by
one as they advanced slowly within the treasury.
<<if $gOutcome == 'crit'>>
<<Yourrep $g.thief>> <<uadv $g.thief>> spotted a hidden door in one of the
corridors, which your slavers proceeded to enter.
Behind the door, a wealth of rare equipments were scattered on the ground,
but that's not what was grabbing your slaver's attention.
Suspended in the air in the middle of a room was a naked slave, fully bound
and hung like a chandelier.
<<if $g.treasure.isHasDick()>>
<<Their $g.treasure>> dick was forced continuously hard by the tight cock ring <<they
$g.treasure>> treasure|was forced to wear, while
<<else>>
<<Their $g.treasure>> breasts were pointing downwards, weighted by heavy-looking balls attached to the nipples, while
<</if>>
<<their $g.treasure>> <<umouth $g.treasure>> was forced open with a ring gag, in
which was inserted a formidable-looking inwards-facing dildo.
But what was most impressive of all was that your slavers could see that the slave
remained sane despite all these torture — truly a remarkable species of a
properly-trained furniture slave. After grabbing a few of the scattered
equipments, <<rep $g.thief>> undid 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 struggles.
<<if $g.treasure.isHasDick()>>
<<Rep $g.disarmer>> playfully teased the slave's hard <<udick $g.treasure>>
while they escaped 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 left and
right, pulling <<their $g.treasure>> nipples painfully as your slavers escaped
the treasury with their treasures.
<</if>>
<<else>>
Not wanting to take any risks, your slavers entered the first room they
encountered. A host of equipments laid in the room for your slavers' taking.
Choosing the best ones, your slavers escaped the treasury quickly before the
rest of the guards were alarmed by their presence.
<</if>>
</p>
<p>
Once outside, <<rep $g.thief>> <<uadv $g.thief>> signaled the completion of the heist to <<rep
$g.seducer>>, who was still busy distracting the guards by seductively pointing to <<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
<<rep $company.humankingdom>> 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 seemed 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'>>
<<Reps $g.disarmer>> sneaking attempt were unsuccessful as a guard was apparently not
seduced and was alarmed by <<their $g.disarmer>> presence.
While attempting to escape, <<rep $g.disarmer>> triggered one of the
treasury's traps and a hornet nest fell straight on <<their $g.disarmer>> head,
covering <<their $g.disarmer>> head and stopping <<them $g.disarmer>> dead in <<their $g.disarmer>> tracks.
With no way to help <<therace $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 by using the distraction,
but <<rep $g.seducer>> seducer|was simply unable to seduce all one hundred plus of the
guards guarding the treasury. <<Rep $g.disarmer>> and <<rep $g.thief>> were
trapped inside the vaults, 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 your reckless slavers.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_bewitching_fairy_0", /* key */
"Bewitching Fairy", /* name */
"A fairy living in the western forests infamous for growing a harem by kidnapping lost adventurers", /* description */
"a|was living in the western forests, kidnapping lost adventurers and travelers alike and turning them into a|their personal harem", /* unit text */
10000, /* slave value */
{ /* skill additives */
survival: 2,slaving: 4,sex: 2,},
)
>>
<<run new setup.Title(
"quest_bewitched_1", /* key */
"Bewitched", /* name */
"Went missing in the Western Forests.", /* description */
"a|have went missing in the Western Forests, no doubt awaiting rescue", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"finding_fairy0",
"Fairy Kidnapper",
'subrace_fairy', /* pools */
1, /* reuse chance */
[ /* unit post process */
setup.qc.TraitsReplace('unit', [setup.trait.skill_hypnotic, setup.trait.per_dominant]),
setup.qc.BgTraitReset('unit', setup.trait.bg_wildman),
setup.qc.Trait('unit', setup.trait.magic_earth),
setup.qc.AddTitle('unit', 'quest_bewitching_fairy_0'),
],
)>>
<<run new setup.QuestTemplate(
'finding_fairy', /* key */
"Finding Fairy", /* Title */
"darko", /* Author */
[ /* tags */
'forest',
'unknown',
'veteran',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'bait': [ setup.qu.whore, 1],
'tracker': [ setup.qu.spotter, 1],
'rescuer': [ setup.qu.rescuer, 1],
},
{ /* actors */
'fairy': 'finding_fairy0',
},
[ /* costs */
],
'Quest_finding_fairy',
setup.qdiff.hard49, /* difficulty */
[ /* outcomes */
[
'Quest_finding_fairyCrit',
[
setup.qc.VarRemove('quest_bewitchment_progress'),
setup.qc.VarRemove('quest_bewitchment_alternative'),
setup.qc.SetCooldownQuest('finding_fairy2', 2),
setup.qc.Opportunity('a_fair_y__offer', {
fairy: "fairy",
rescuer: "rescuer",
tracker: "tracker",
}),
setup.qc.RemoveTitleGlobal('quest_bewitched_1'),
],
],
[
'Quest_finding_fairyCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_finding_fairyCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_finding_fairyCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarGte('quest_bewitchment_progress', 12),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
Many of your slavers have went missing in their search in the <<lore region_forest>>
for a fairy that you've come to understand as being not-so-innocent. But their
sacrifices have finally borne fruit — using the combined information left by
your slavers, <<yourrep _u>> is able to locate the approximate position of
the fairy's lair.
</p>
<p>
The time for revenge is perhaps finally at hand. You could try to send a
group of slavers — one slaver will bait the fairy into abducting them, while
the rest of the team will use the knowledge gathered so far to help them
track the bait and into the fairy's lair. You might just find the lair, and
hopefully rescue all your other slavers too...
</p>
<<if $inventory.isHasItem('quest_bewitchment_trap') and
$inventory.isHasItem('quest_bewitchment_nectar')>>
<p>
Now that you have both <<rep setup.item.quest_bewitchment_trap>> and <<rep
setup.item.quest_bewitchment_nectar>> in your <<uhand $unit.player>>, you
might even be able to finally get your revenge on this mischivious fairy...
</p>
<<elseif $inventory.isHasItem('quest_bewitchment_nectar')>>
<p>
Now that you have the <<rep setup.item.quest_bewitchment_nectar>> in your
<<uhand $unit.player>>, you might be able to get the better out of the fairy...
</p>
<<elseif $statistics.isHasSuccess('finding_fairy')>>
<p>
From your past experiences with this quest, you know that going headlong in
this quest without much preparation is going to be a fruitless affair. You
might want to scout the <<lore region_sea>> first in search of a valuable
nectar to bait the fairy...
</p>
<</if>><<set _t = $company.player.getUnits().filter(unit => unit.isHasTitle('quest_bewitched_1'))>>
<p>
It did not take long for the fairy to notice <<yourrep $g.bait>> wandering
aimlessly in the forest. But it was different this time, for <<rep
$g.tracker>> and <<utheirrel $g.tracker $g.rescuer>> <<rep $g.rescuer>> were
lying in wait, hidden behind, trying to track strange movements. Before long
they could see <<yourrep $g.bait>> suddenly lifted from ground, hovering
helplessly, before being moved quickly in one direction. Guided with the hints
that your company had collected so far, <<yourrep $g.tracker>> tracker|was able to <<uadv
$g.tracker>> track <<rep $g.bait>> down to a hidden abode...
</p>
<p>
In the abode was a harem of people of various races — elves, neko, humans —
all with dazed expressions planted on their faces, complete with drools coming out from their
mouths. While the races varied, one thing was in common between all of them:
lack of clothes — it almost looked like the fairy was keeping them as <<their
$g.fairy>> personal harem.
<<if _t.length>>
Among them, they could see your missing slavers too, including
<<if $gOutcome == 'success'>>
the freshly-captured <<rep $g.bait>>, and
<</if>>
<<yourrep _t[0]>> -- all naked and on <<their _t[0]>> knees, seemingly
prostrating <<themself _t[0]>> awaiting <<their _t[0]>> <<mistress
$g.fairy>>'s return.
<</if>>
</p>
<<if _t.length>>
<p>
With the fairy nowhere to be seen, <<yourrep $g.rescuer>> couldn't take it
any longer and immediately got to work, undoing all the bindings on your
captured slavers, and shaking their sanities back onto them. As <<rep
$g.rescuer>> shook their bodies, <<they $g.rescuer>> could see yellow-ish
powder starting to shrug off the body, and before long color returned to
their eyes. One by one, the captured slavers were dispelled from the spell,
although their conditions varied having been used quite thoroughly by the
unscrupulous fairy.
</p>
<</if>>
<p>
By the time your slavers finished rescuing your captured slavers, the fairy
was standing in front of the room, glaring at your slavers. However, with all
your slavers at the ready, there was really no hope that the fairy could win
this one out — instead, <<they $g.fairy>> gave <<them $g.rescuer>> a truce offer.
Why not just walk away with all the slavers, and everyone gets on with the
remainder of their days and their lives?
</p>
<p>
As much as your slavers hated to accept the offer, there was really no way to
capture the fairy given <<their $g.fairy>> skills and that damned wings.
Unless...?
</p>
<<if $gOutcome == 'success'>>
<<run _t.push($g.bait)>>
<</if>>
<<for _s range _t>>
<<if Math.random() < 0.33>>
<<run setup.qc.Injury('unit', 4).apply(setup.costUnitHelper(_s))>>
<<elseif Math.random() < 0.5>>
<<run setup.qc.TraumatizeRandom('unit', 10).apply(setup.costUnitHelper(_s))>>
<<else>>
<<run setup.qc.TraitIncreaseExisting('unit', setup.trait.anus_gape).apply(setup.costUnitHelper(_s))>>
<<run setup.qc.TraitIncreaseExisting('unit', setup.trait.vagina_gape).apply(setup.costUnitHelper(_s))>>
<</if>>
<<if _s != $g.bait>>
<<run setup.qc.Return('unit').apply(setup.costUnitHelper(_s))>>
<</if>>
<</for>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'finding_fairy2', /* key */
"Finding Fairy", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'danger',
'unit',
'forest',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'scout1': [ setup.qu.scout_forest, 1],
'scout2': [ setup.qu.scout_forest, 1],
'historian': [ setup.qu.scholar, 1],
},
{ /* actors */
'fairy': 'finding_fairy0',
},
[ /* costs */
],
'Quest_finding_fairy2',
setup.qdiff.hard45, /* difficulty */
[ /* outcomes */
[
'Quest_finding_fairy2Crit',
[
setup.qc.Outcomes("disaster"),
],
],
[
'Quest_finding_fairy2Crit',
[
setup.qc.Outcomes("disaster"),
],
],
[
'Quest_finding_fairy2Crit',
[
setup.qc.Outcomes("disaster"),
],
],
[
'Quest_finding_fairy2Crit',
[
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.AddTitle('scout1', 'quest_bewitched_1'),
setup.qc.Leave('scout1', "went missing in the Western Forests during a|their search for the mysterious fairy", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.AddTitle('scout2', 'quest_bewitched_1'),
setup.qc.Leave('scout2', "went missing in the Western Forests during a|their search for the mysterious fairy", undefined)
], undefined)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building('veteranhall'),
setup.qres.VarLte('quest_bewitchment_progress', 11),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
], 18)
],
[ /* expiration outcomes */
],
)>><p>
According to rumors, neko and elves are not the only inhabitants of the
<<lore region_forest>>.
A rare winged off-shoot of elves, that is, the mysterious <<lore race_fairy>> race, is also said
to exist somewhere in the forest.
They are an elusive species however, and their sightings are extremely rare.
In fact, nobody has actually verified their existence in the world.
<<if $statistics.isHasSuccess('finding_fairy')>>
(Before you do, that is!)
<</if>>
</p>
<<if $statistics.isHasSuccess('finding_fairy')>>
<p>
Your slavers had already seen the fairy up-close before, so you know that fairies
are more than just fairy tale.
You could try to send another team of slavers in search of these fairies again.
What could possibly go wrong?
</p>
<<else>>
<<set _t = $company.player.getUnits().filter(unit => unit.isHasTitle('quest_bewitched_1'))>>
<<if _t.length>>
<p>
Having already lose <<if _t.length == 1>>a<<else>>several<</if>> slavers to
your past
decision to pursue after this fairy tale, there really isn't another way out except
by sending more sheep to the slaughter and hope one of them will eventually
uncover where your slavers have disappeared into...
</p>
<<else>>
<p>
You've always dreamed of having a rare, almost mythically rare slave, and what
better idea than to send a team of slavers completely unprepared into the vast <<lore region_forest>>?
</p>
<</if>>
<</if>>
<p>
<<dangertext "Warning:">> You have a strange feeling that the slavers you send on this quest
will be gone from your company for a very, very long time...
</p><<if $gOutcome == 'crit'>>
<<set _a = 5>>
<<elseif $gOutcome == 'success'>>
<<set _a = 4>>
<<elseif $gOutcome == 'failure'>>
<<set _a = 2>>
<<elseif $gOutcome == 'disaster'>>
<<set _a = 1>>
<</if>>
<<run setup.qc.VarAdd('quest_bewitchment_progress', _a, -1).apply($gQuest)>>
<<set _t = $company.player.getUnits().filter(unit => unit.isHasTitle('quest_bewitched_1'))>>
<p>
When your slavers returned from their scouting mission in the Western Forests, only
<<if $gQuest.getSeed() % 2 == 0>>
<<rep $g.scout2>>
<<set _v = $g.scout1>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<rep $g.scout1>>
<<set _v = $g.scout2>>
<</if>>
and <<rep $g.historian>> returned.
<<if _t.length>>
Again <<rep _v>> went missing, just like what happened before to <<yourrep setup.rng.choice(_t)>>.
But given the precedence, your slavers were somewhat more prepared for this,
and they tried their best to remain
vigilant throughout the quest.
<<set _p = $varstore.get('quest_bewitchment_progress')>>
<<if _p >= 12>>
The vigilance finally borne fruit: <<rep $g.historian>> managed to see the
culprit this time — it was very difficult to see, but an almost transparent
elf-like creature with butterfly wings was visibly lifting <<yourrep _v>>
away. There is no doubt that this is the elusive fairy that you've been
hunting all this time. Perhaps this will be enough information to finally corner
the fairy and rescue all the slavers you've lost along this goose chase...
<<elseif _p >= 10>>
The vigilance is rewarded -- your slavers managed to find a trace amount of fairy
powder on their trail — perhaps a fairy is responsible for the missing case
of <<rep _v>>?
<<elseif _p >= 8>>
Thanks to the constant vigilance, <<rep $g.historian>> managed to observe as
<<rep _v>> was apparently lifted up into the air by a seemingly invinsible
force. Finally a concrete clue as to what might have happened.
<<elseif _p >= 6>>
Thanks to that, <<rep $g.historian>> historian|was able to pinpoint the exact
time and location where <<rep _v>> went missing — exactly as they are passing
through a certain clearing.
<<elseif _p >= 4>>
Despite the vigilance, <<rep $g.historian>> remained clueless and was still
unable to pinpoint exactly how
<<rep _v>> simply disappear, but <<they $g.historian>> had a rough guess now,
and looked rather eager to test <<their $g.historian>> hypothesis next time.
<<elseif _p >= 2>>
While <<rep $g.historian>> remained confused by the disappearance of their
team-mate, <<they $g.historian>> noticed that <<rep _v>> disappeared at
roughly the same location where <<rep _t[0]>> disappeared last time.
<<else>>
However, <<rep $g.historian>> remained clueless, and according to <<them
$g.historian>>, <<yourrep _v>> was simply there and then just... vanished in
a single moment. Not a very helpful observation.
<</if>>
<<else>>
Your slavers had absolutely no clue what happened to their teammate <<rep
_v>>. To make matters worse, there was no trace of any fairy whatsoever
during their search in the forests, making the entire trip appeared pointless.
An intriguing mystery, surely nothing would go wrong if you send another team
of slaver on this quest the next time it is available?
<</if>>
</p>
<p>
There is no other way but to keep reattempting this quest in order to get to
the bottom of this mystery and rescue your missing slaver...
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'nectar_of_the_gods', /* key */
"Nectar of the Gods", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'item',
'veteran',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'biologist': [ setup.qu.biologist, 1],
'fighter': [ setup.qu.fighter, 1],
'healer': [ setup.qu.healer, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_nectar_of_the_gods',
setup.qdiff.harder56, /* difficulty */
[ /* outcomes */
[
'Quest_nectar_of_the_godsCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Item(setup.item.potion_tight),
],
],
[
'Quest_nectar_of_the_godsCrit',
[
setup.qc.Item(setup.item.quest_bewitchment_nectar),
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
],
],
[
'Quest_nectar_of_the_godsFailure',
[
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('biologist', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('fighter', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('fighter', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('fighter', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('fighter', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('healer', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('healer', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('healer', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('healer', setup.trait.anus_gape),
setup.qc.TraumatizeRandom('biologist', 20),
setup.qc.TraumatizeRandom('fighter', 20),
setup.qc.TraumatizeRandom('healer', 20),
setup.qc.Injury('biologist', 5),
setup.qc.Injury('fighter', 4),
setup.qc.Injury('healer', 4),
],
],
[
'Quest_nectar_of_the_godsFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.OneRandomSeed([
setup.qc.Trait('biologist', setup.trait.per_submissive),
setup.qc.Trait('fighter', setup.trait.per_submissive),
setup.qc.Trait('healer', setup.trait.per_submissive)
]),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.quest_bewitchment_nectar),
setup.qres.VarEqual('quest_bewitchment_alternative', '1'),
],
[ /* expiration outcomes */
],
)>><p>
One of the lush islands in the <<lore region_sea>> is home to one of the
rarest substance in the world: the <<rep
setup.item.quest_bewitchment_nectar>> that you've been looking for as part of
your revenge against the damned forest fairy.
</p>
<p>
There will surely be unknown challenges for harvesting the nectar, however,
so you'd better prepare for the worst. A biologist to harvest the nectar, and
two other slavers that are prepared for anything.
</p><p>
The island was lush, to say the least. Dense vegetation covered every inch of
the island, and your slavers struggled to reach the heart of the island.
There, a lone tree stood, towering over all the other vegetations. Without
warning, vines started to sprout from the ground, as if the tree was welcoming
your slavers with the promise of penetrations.
</p>
<p>
As the vine wiggled into existence, <<yourrep $g.biologist>> recognized that
the liquid emanating from its tip was the actual <<rep
setup.item.quest_bewitchment_nectar>>. Excited at the opportunity, <<rep
$g.biologist>> attempted to gather the nectar only for another vine to
violently bursted from the ground, piercing <<their $g.biologist>> <<uanus
$g.biologist>>. By the time <<rep $g.fighter>> cut off the vine, <<reps
$g.biologist>> ass was already violated, and appeared more gaped than before.
</p>
<p>
Now fully alert, your slavers prepared for battle as <<rep $g.biologist>>
sneakily gathered the leaking plant liquid here and there. The battle was fierce,
and many vines were felled by <<reps $g.fighter>> <<uweapon $g.fighter>> while
<<rep $g.healer>> desperately tried to keep the collective damage at minimum.
Eventually <<rep $g.biologist>> managed to collect enough of the nectar, and
called out for the team to withdraw. Your slavers withdrew from battlefield,
but not before <<rep $g.fighter>> managed to snatch one of the scattered
armors on the battlefield, no doubt belonging to an unlucky adventurer who
dared ventured here in the past.
<<if $gOutcome == 'crit'>>
<<rep $g.healer>> healer|was also able to snatch a rare <<rep
setup.item.potion_tight>>, no doubt brought by some prudent but unlucky
adventurer who must have withdrawn from the fight with a leaking ass...
<</if>>
</p><p>
The island was lush, to say the least. Dense vegetation covered every inch of
the island, and your slavers struggled to reach the heart of the island.
There, a lone tree stood, towering over all the other vegetations. Without
warning, vines started to sprout from the ground, as if the tree was welcoming
your slavers with the promise of penetrations.
</p>
<p>
As the vine wiggled into existence, <<yourrep $g.biologist>> recognized that
the liquid emanating from its tip was the actual <<rep
setup.item.quest_bewitchment_nectar>>. Excited at the opportunity, <<rep
$g.biologist>> attempted to gather the nectar only for another vine to
violently bursted from the ground, piercing <<their $g.biologist>> <<uanus
$g.biologist>>.
Your other slavers were not spared either, as hundreds of tentacles started to sprout
from the ground, seeking all and any hole left open for them to pierce.
</p>
<p>
Within moments, all of your slavers were left writhing, having a vine or two inserted
into all their orifices. It lasted for a good hour or so, before your slavers
were drained of all their juices, and thrown aside. With no more willpower to
gather the nectar, your slavers crawled back onto the ship,
hoping to forget all these bad memories.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately,
<<if $gQuest.getSeed() % 3 == 0>>
<<rep $g.biologist>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<rep $g.fighter>>
<<elseif $gQuest.getSeed() % 3 == 2>>
<<rep $g.healer>>
<</if>>
seemed to get a little too addicted to the feeling of being violated, and became more submissive than ever...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'the_rat_catcher', /* key */
"The Rat-Catcher", /* Title */
"darko", /* Author */
[ /* tags */
'city',
'item',
'veteran',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'informer': [ setup.qu.informer, 1],
'trapper': [ setup.qu.trapper, 1],
'negotiator': [ setup.qu.negotiator, 1],
},
{ /* actors */
'ratcatcher': 'city_all',
},
[ /* costs */
],
'Quest_the_rat_catcher',
setup.qdiff.hardest59, /* difficulty */
[ /* outcomes */
[
'Quest_the_rat_catcherCrit',
[
setup.qc.Outcomes("success"),
setup.qc.SlaveOrderFlex(
'Anonymous Slave Order', /* name */
'humankingdom', /* company */
12, /* expires in */
-3000, /* base price */
6000, /* trait multi */
1, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
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_water,
setup.trait.magic_wind,
setup.trait.magic_earth,
setup.trait.magic_light,
setup.trait.magic_dark
], 4, 3, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
],
[
'Quest_the_rat_catcherCrit',
[
setup.qc.SlaveOrderFlex(
'Rat-Catcher Slave Order', /* name */
'humankingdom', /* company */
50, /* expires in */
100, /* base price */
0, /* trait multi */
0, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.skill_flight),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.VarRemove('quest_bewitchment_rat_trap'),
setup.qc.Item(setup.item.quest_bewitchment_trap),
],
[ /* unfulfilled outcomes */
setup.qc.VarRemove('quest_bewitchment_rat_trap'),
],
),
setup.qc.VarSet('quest_bewitchment_rat_trap', '1', -1),
],
],
[
'Quest_the_rat_catcherFailure',
[
setup.qc.MissingUnit('informer'),
],
],
[
'Quest_the_rat_catcherDisaster',
[
setup.qc.MissingUnit('trapper'),
setup.qc.MissingUnit('negotiator'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.NoItem(setup.item.quest_bewitchment_trap),
setup.qres.VarEqual('quest_bewitchment_alternative', '1'),
setup.qres.VarNull('quest_bewitchment_rat_trap'),
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
A rather infamous rat-catcher lives in the <<lore region_city>>. Everyone can
attest to <<their $g.ratcatcher>> skills, but making use of <<their
$g.ratcatcher>> services is... challenging, to say the least. The <<man
$g.ratcatcher>> is rather eccentric, and would normally only take the most
eccentric job and for the most absurd of prices.
</p>
<p>
As it happens, you have a rather eccentric "flying rat" to catch in the forests, and perhaps the
rat-catcher would be interested in the job. First, you'll need a good
informer to be able to find the ratcatcher's contact. Once that's done,
you'll need a reasonably skilled trapper to disarm the human-sized rat traps
littering the ratcatcher's vicinity. Finally, a good negotiator is needed to
unravel the ratcatcher's gibberish speak and get the offer done.
</p><p>
Following the instructions found by <<rep $g.informer>>, <<yourrep
$g.trapper>> and <<utheirrel $g.trapper $g.negotiator>> carefully trudged to
the city, closing in to the address. As they got nearer, more and more absurd
traps lied in front of them — from stale cheese suspended in the air by magic
to human-sized mousetraps — all handled <<uadv $g.trapper>> by <<yourrep
$g.trapper>>. Eventually, your slavers arrived at a small hut where the
ratcatcher appeared to live in.
</p>
<p>
The ratcatcher was... eccentric, to say the last. Fortunately, <<they
$g.ratcatcher>> seemed interested in the job: after all, not everyday you
receive an offer to catch a flying rat. But the payment was rather absurd — "a
flying rat for a flying rat," as <<they $g.ratcatcher>> put it eloquently.
You'll have to supply the ratcatcher with a living, flying rat if you want to
get your <<uhands $unit.player>> on the <<rep setup.item.quest_bewitchment_trap>> that <<they
$g.ratcatcher>> promised to deliver to your fort...
</p>
<<if $gOutcome == 'crit'>>
<p>
While waiting, <<rep $g.informer>> did not spend all <<their $g.informer>>
time idling around, and managed to find a valuable slave order from a client
in the undercity of Lucgate.
</p>
<</if>><p>
<<Yourrep $g.trapper>> and <<utheirrel $g.trapper $g.negotiator>> waited very
patiently for <<rep $g.informer>> to get back to them with the location of
the ratcatcher's abode. Very... patiently, and after four weeks of waiting,
they finally realized that something was wrong. Nobody knew what happen to
<<rep $g.informer>>, but <<reps $g.trapper>> hunch was telling <<them
$g.informer>> that <<rep $g.informer>> informer|is now living a life as the
ratcatcher's personal test subject.
</p><p>
<<Yourrep $g.informer>> returned alone from the mission. Apparently, both
<<rep $g.trapper>> and <<utheirrel $g.trapper $g.negotiator>> never returned
from their trip to the ratcatcher's abode. It is up to anyone's guess what
happened to the slavers...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_for_science1',
"Fuckmachine Inventor",
'city_all', /* pools */
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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_scienceCrit',
[
],
], [
'Quest_for_scienceCrit',
[
setup.qc.Injury('scientist', 2),
setup.qc.Injury('merc', 3),
setup.qc.Injury('convincer', 2), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.city, setup.rarity.common],
],
[ /* 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 region_city>>, Dr. <<Rep $g.inventor>>,
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 one of <<their $g.inventor>> inventions as a bonus to
the adventurers. This might be your chance to get your <<uadjper $unit.player>>
<<uhands $unit.player>> on some
very rare item, although you get the feeling that there the item might not be
what you might have 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 was filled to the brim with strange mechanical objects your slavers had
never seen before, and <<yourrep $g.scientist>> scientist|was in awe. They then
met with the professor who was surrounded by <<their $g.inventor>> assistants.
"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 was up for
the job.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
Fortunately, <<reps $g.scientist>> intellect, <<reps $g.merc>> brawn, and
<<rep $g.convincer>> wit were more than enough to convince the assistant
<<girl $g.assistant>> that your company was 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 and sturdy 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 <<lore region_forest>>
called "Sine Pregnol". None of your slavers had any idea what it means, not
even <<rep $g.scientist>>. Still, they could probably found out about it later
by asking the settlements in the <<lore region_forest>>.
</p>
<p>
Finally, the last item on the list is a strong and long pole of a material
known as the conducting iron. Conducting iron can usually be found in the
<<lore region_desert>>, 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 parted
ways.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, the assistant <<girl $g.assistant>> was not at all impressed
by your slavers. <<Yourrep $g.scientist>> scientist|was unable to answer the
difficult question posed by <<them $g.assistant>>, nor <<rep $g.convincer>>
convincer|was 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>
<<else>>
<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 very capable skills directly on your slavers. At the end
of the interview, your slavers were thoroughly defeated and suffered some
minor injuries without getting the contract.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'for_science__box_payment__labor', /* key */
"For Science: Box Payment: Labor", /* Title */
"darko", /* Author */
[ 'veteran', 'danger', 'vale',
], /* tags */
12, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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 upcoming 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 complete this quest 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 go and fulfill this role.
</p><p>
In these three long months, your slavers helped the smith measure, craft, and even test the various slave boxes ordered by the clients.
There were a great many variations of these boxes, from ones with way too many holes that made your slavers
rethink what bodyparts can be used sexually, to one with absolutely no hole no doubt to be used as a
punishment box.
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 <<utheirrel $g.smith1 $g.smith2>> <<rep $g.smith2>> managed to learn so much new techniques from the masterful smith. They became greatly inspired by the experience.
</p>
<<elseif $gOutcome == 'success'>>
<<else>>
<p>
The unscrupulous smith, however, often tested these new slave boxes on your slavers.
Being used as a substitue for slaves, especially for the isolation box, greatly traumatized your slavers.
</p>
<</if>>
<<if $g.maid.isYou()>>
<p>
Having served as the blacksmith's "maid" personally, you think the other slavers had it much luckier
than what you were forced to suffer through...
</p>
<<else>>
<p>
You also noticed <<rep $g.maid>> kept averting <<their $g.maid>> gaze from you as
<<they $g.maid>> head over to <<their $g.maid>> quarters.
The traumatized slaver deserves a rest after such a job.
</p>
<</if>><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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'for_science__eureka_', /* key */
"For Science: Eureka!", /* Title */
"darko", /* Author */
[
'city',
'veteran',
'special',
'item'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
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, setup.rarity.always],
],
[ /* 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>
After a long and exhausting process, you have completed collecting all the items
requested by the inventor <<rep $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 <<rep $g.inventor>> and claim your
well deserved reward, although seeing these items makes you think, what kind of invention
inventor|is <<they $g.inventor>> creating with these?
Not to mention the inventor had specifically asked you to 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>> was affixed to one end of the
stick, forming a spear with a dildo as its tiphead.
The other end of the stick was then inserted into the
<<rep setup.item.quest_for_science_box>>, making the entire thing look like
a dildo post.
The finished product was then brought to another room, where to your slavers'
surprise, was 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 understood the purpose of the machine as the thick long pole
started to magically move on its own, up and down, up and down, as if it was
fucking an invisible <<man $g.inventor>>. The aptly named <<rep
setup.item.f_object_master_fuckmachine>> was complete, and was ready for further
"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 could — 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 had completed <<their $g.inventor>>
research on the fascinating little object, and gifted your slavers with the
<<rep setup.item.f_object_master_fuckmachine>> itself as a reward.
</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 <<rep $g.inventor>> pointed out that
<<if $gOutcome == 'failure'>>
one
<<else>>
two
<</if>>
of the items your slavers had collected was defective. Your slavers couldn'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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'for_science__something_hard', /* key */
"For Science: Something Hard", /* Title */
"darko", /* Author */
[ 'veteran',
'forest',
], /* tags */
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
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, setup.rarity.always],
],
[ /* 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 itself is not the challenge of a task — 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>> had
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 seemed to
be fixated on the whore <<rep $g.offering>>. Using the distraction, <<rep
$g.wizard>> cast 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 were 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'for_science__something_long', /* key */
"For Science: Something Long", /* Title */
"darko", /* Author */
[ 'veteran',
'desert',
'danger'
], /* tags */
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'tank': setup.qu.tank,
'dps': setup.qu.dps,
'healer': setup.qu.healer, },
{ /* actors */
'chieftain': 'subrace_orc', },
[ /* costs */
],
'Quest_for_science__something_long',
setup.qdiff.hardest49, /* difficulty */
[ /* outcomes */
[
'Quest_for_science__something_longCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Equipment(setup.equipmentpool.brawn_good),
],
], [
'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, setup.rarity.always],
],
[ /* 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
<<lore region_desert>>. It is said that these orcs would 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 <<lore region_desert>> 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 the team, and a rogue, to
dispatch the 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
dwelled 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 had to do was to 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 find 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 <<reps $g.tank>> sacrifice anytime soon.
</p>
<<set _rescuer = $dutylist.getUnitIfAvailable('rescuer')>>
<<if _rescuer>>
<p>
Hearing the news of <<utheirrel _rescuer $g.tank>> <<rep $g.tank>> disappearance,
<<yourrep _rescuer>> sighed and began to work.
</p>
<<else>>
<p>
If you want to save <<rep $g.tank>>, perhaps you can consider hiring a rescuer...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'for_science__something_thick', /* key */
"For Science: Something Thick", /* Title */
"darko", /* Author */
[ 'veteran',
'vale'
], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.always],
],
[ /* 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 a particularly good blacksmith.
Compared to the other regions, the <<lore region_vale>> are relatively safe (although it's still plenty dangerous), so this seems like an easy and short mission.
What could possibly go wrong?
</p><p>
After many wayward trekking, your slavers finally located the smith cottage.
Surrounding the cottage are finished slave boxes and cages of various kinds.
<<Yourrep $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>>, had somehow learned of your team's arrival.
Apparently <<they $g.head>> and the inventor had known each other for a while —
The inventor back then found the smith in the middle of crafting mundane items such as fuckboxes with such high precision, and offered to make better use of <<their $g.head>> craftsmanship by ordering intricate devices for the inventor's experiments.
In fact, the smith claimed that the inventor already sent to <<them $g.head>> the exact schematics for the box,
which should make your slavers' job easier.
</p>
<p>
But apparently there was a remaining, "slight" problem. This time, the smith had not received the payment for this order, and apparently the burden of paying for it had somehow 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 a continuous assault of magic. You'll have to pay one way or another, if you want to get that box of yours...
</p>
<<if $gOutcome == 'crit'>>
<p>
Still, the master smith gave your slavers some hospitality and showed them a trick or two about smithing. This greatly inspired <<yourrep $g.smith>> and <<utheirrel $g.smith $g.crafter>> <<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! Your slavers asked for a box, got a box, but it turned out to be of too crappy quality to be used for the experiment.
You sighed heavily when looking at the slavers' expenses.
</p>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.per_sly,
setup.trait.per_cruel,
],
[
setup.trait.per_direct,
setup.trait.per_kind,
],
[
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.bg_artist,
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_masochistic,
setup.trait.skill_entertain,
],
[
setup.trait.tough_nimble,
setup.trait.per_cautious,
setup.trait.per_lunatic,
],
[
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],
'crier': [ setup.qu.attentionseeker, 1],
},
{ /* actors */
'child': [
],
},
[ /* costs */
],
'Quest_future_assassin',
setup.qdiff.hard46, /* difficulty */
[ /* outcomes */
[
'Quest_future_assassinCrit',
[
setup.qc.Opportunity('branching_timeline__decision', {
child: "child",
parent: "victim",
}),
setup.qc.Injury('victim', 1),
setup.qc.Equipment(setup.equipmentpool.intrigue_good),
],
],
[
'Quest_future_assassinCrit',
[
setup.qc.Opportunity('branching_timeline__decision', {
child: "child",
parent: "victim",
}),
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>>
<<missingunitquest>>
<<else>>
<p>
Armed with the expensive knowledge you bought from the wizard of the south, you have setup a plan.
You will denounce <<yourrep _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 the ruse 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
<<yourrep $g.victim>> on a the most comfortable pillory you've ever made,
and squashing as many tomatoes as possible around the area. As long as they
don't come too close, the scene
looked gory and scary, just as you wanted. <<Rep $g.victim>> will just
have to bear staying in the awkward position for a little while. In the
meantime, <<yourrep $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 worked. After a few weeks, a shuffling noise could be
heard from the courtyard, followed by an abrupt scream. Looking outside, you
were satisfied to see that someone had apparently fallen into the pit trap you
set under the pillory.
After waking <<yourrep $g.victim>> up (since it was night and the pillory was actually
substituted with a straw man at night),
you head together to the courtyard, and, lo and behold, an unconscious <<girl $g.child>>
was stuck deep down within the pit trap.
There was no mistaking it, <<their $g.child>> face really did resemble yours
and <<reps $g.victim>> 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
aches on <<reps $g.victim>> entire body to show for your efforts.
Perhaps you can try again once <<yourrep $g.victim>> recovers.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"magician_of_time0",
"Wizard of Time",
'sea_all', /* pools */
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.tough_tough,
setup.trait.per_brave,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
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.bg_mist,
setup.trait.tough_nimble,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_playful,
setup.trait.per_dominant,
],
[
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], true),
],
{
arcane: 3,
}
)>>
<<set _criteriabattery2 = new setup.UnitCriteria(
null, /* key */
'Magic Battery', /* name */
[
setup.trait.tough_tough,
setup.trait.per_brave,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
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.bg_mist,
setup.trait.tough_nimble,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cautious,
setup.trait.per_curious,
setup.trait.per_playful,
setup.trait.per_dominant,
],
[
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], true),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'future_delivery', /* key */
"Battery Lease", /* Title */
"darko", /* Author */
[ /* tags */
'veteran',
'money',
'sea',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.MoneyCustom(7500),
],
],
[
'Quest_future_deliveryCrit',
[
setup.qc.Leave('battery1', "a|is recharging their magic", 2),
setup.qc.Leave('battery2', "a|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', "a|is recharging their magic", 4),
setup.qc.Leave('battery2', "a|is recharging their magic", 4),
setup.qc.MoneyCustom(2000),
],
],
[
'Quest_future_deliveryCrit',
[
setup.qc.Injury('guard', 8),
setup.qc.IfThenElse(
setup.qres.And([
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.qres.Actor('guard', setup.qres.NotYou()),
]),
setup.qc.DoAll([
setup.qc.TraitReplace('guard', setup.trait.per_masochistic),
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, setup.rarity.common],
],
[ /* 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 not 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 it's probably nothing but a
meaningless hunch.
</p><<questimage 'battery_lease.jpg'>>
<p>
The ritual site took place in an abandoned ruin, lost to time and reclaimed by the earth.
A small black container was placed in the center of the circle, with a cutely drawn card
that was addressed to... the wizard <<themself $g.wizard>>? Either way, your
slavers were only hired to act as human batteries, and that was the extend of
brainpower they are willing to spend. <<Rep $g.guard>> <<uadv $g.guard>>
kept guard during the ritual, making sure nothing funny happens.
</p>
<p>
After a short preparation, the wizard <<rep $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 began 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 would be disastrous.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
Through sheer perseverance and stubbornness, <<rep $g.battery1>> and
<<utheirrel $g.battery1 $g.battery2>> <<rep $g.battery2>> managed to persevere,
holding off "climaxing" at the intense magical teasing. Eventually the wind subsided, and
the only change noticeable by your slavers were the missing box in the middle
of the circle. Odd, normally transportation magic did not require this much
magical energy. What had 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>> were 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, it's probably nothing to worry about.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Your slavers almost managed to 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
seemed 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('tough_tough')>>
Despite being ordinarily tough, <<rep $g.battery1>>
<<else>>
<<rep $g.battery1>> 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>> guard|was absorbed into the vortex, injuring <<theslaver $g.guard>> as well.
</p>
<p>
The skillful wizard eventually managed to calm down the vortex and restored a
sense of normalcy to the site, but both <<rep $g.battery1>> and <<utheirrel
$g.battery1 $g.battery2>> <<rep $g.battery2>> had been drained so very dry of
their magic and will require quite some time of rest.
</p>
<<if !$g.guard.getTraitWithTag('magic') && !$g.guard.isYou()>>
<p>
If there is anything good coming out of this, being exposed to such amount of
magic surely had a lasting effect on <<rep $g.guard>>...
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
'sea', 'unknown',
],
2, /* weeks */
10, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'battery': [ _criteriabattery, 2],
},
{ /* 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.Outcomes('success'),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.QuestDirect('future_assassin', {child: "child"}),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_price_for_conundrumCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* 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 fuel <<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, including the
identity of the mysterious assailant. And what greater wealth is there than
knowledge?
</p><p>
You swore 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 <<yourrep $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 facing 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 were 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 yours and <<yourrep $g.battery>> that
somehow got pulled into this timeline.
<<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>
To make matters worse, in this timeline you are not lovers with <<rep
$g.battery>>. If this continues, then unfortunately the mysterious
assailant would cease to be. This is probably why <<they $g.child>> child|was
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 <<yourrep $g.battery>>
got more confused than ever. But at least it was money well-spent — if the
was true, then surely the mysterious assailant would have no choice but to
come to your fort should an imminent "accident" were to befall <<yourrep
$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 this time) warning.
Sooner or later, you would have to choose between love or a life, for if you continue on with your
current lover, then the law of time 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 told you or your slavers that it was <<their $g.wizard>> own botched future box delivery
that started the whole affair.
</p>/* PROOFREAD COMPLETE */
<<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, 1],
'parent': [ _criteriaparent, 1],
'tracker': [ setup.qu.informer, 1],
},
{ /* 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', "a|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, <<therace $g.lover>> 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.
Did they actually succeeded this time?
</p>
<<set _u = setup.getAnySlaver([$g.lover])>>
<p>
As you started to worry, <<yourrep _u>> came with both a good and bad news.
The good news is that <<therace _u>> found out where your lover had gone to.
The bad news is that your lover had indeed been kidnapped by the 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. <<Yourrep _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 well enough that even without your help, <<they $g.lover>> will surely be able to 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 <<yourrep $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 appeared to be a pirate ship. They were selling your lover off as if <<they $g.lover>> lover|is some nameless slave!
</p>
<p>
Angered, you raised your <<uweapon $g.you>> and charged into the foray, with <<yourrep $g.tracker>> right behind you. Although you were few in number, you had a wealth of experience on your side, and these wannabe slavers were no match for yours and your slaver's prowess in combat. 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>> watched <<uadv $g.tracker>>.
</p>
<<if $gOutcome == 'crit'>>
<p>
Fortunately, your lover appeared 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 trials were not kind to <<rep $g.lover>>. <<They $g.lover>> looked 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, <<yourrep $g.parent>> parent|was nowhere to be seen. Unbeknownst to you, <<rep $g.parent>> observed a very familiar-looking stranger who showed deep concern while watching the entire thing unfolds. <<Yourrep $g.parent>> <<uadv $g.parent>> sneaked up into the stranger, before launching a surprise leap onto <<them _w>>.
<<Rep $g.parent>> managed to grope <<their _w>> <<ubreasts _w>> before removing the assailant's hood, revealing <<their _w>> face. To <<reps $g.parent>> shock, it deeply resembled
<<if _w.getSubrace() == $unit.player.getSubrace()>>
you, as if <<they _w>> is your own child. But <<rep $g.parent>> could 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 a simple coincidence.
In fact, <<they $g.parent>> suggested you to go back to a certain wizard in the <<lore region_sea>>, 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)
)>><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Test Subject', /* name */
[
setup.trait.anus_loose,
setup.trait.anus_gape,
setup.trait.tough_nimble,
setup.trait.per_submissive,
setup.trait.skill_alchemy,
],
[
setup.trait.anus_tight,
setup.trait.tough_tough,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_dominant,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
{
brawn: 1,
arcane: 2,
}
)>>
<<run new setup.QuestTemplate(
'blessings_of_the_south', /* key */
"Blessings of the South", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'prep',
'trait',
'sea',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 1],
'alchemist1': [ setup.qu.alchemist, 1],
'alchemist2': [ setup.qu.alchemist, 1],
},
{ /* actors */
'nun': 'sea_all',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_blessings_of_the_south',
setup.qdiff.hard61, /* difficulty */
[ /* outcomes */
[
'Quest_blessings_of_the_southCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_crit', 1, -1),
setup.qc.Outcomes("success"),
],
],
[
'Quest_blessings_of_the_southCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_done', 1, -1),
setup.qc.VarSet('quest_harbinger_of_luck_magic', '1', -1),
setup.qc.Blessing('alchemist1', 1, 'blessing_life8', undefined),
setup.qc.Blessing('alchemist2', 1, 'blessing_life8', undefined),
setup.qc.SetCooldownEvent('harbinger_of_chaos', 10),
setup.qc.SetCooldownEvent('harbinger_of_crows', 10),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_blessings_of_the_southCrit',
[
setup.qc.Blessing('a', 1, 'curse_demise8', undefined),
setup.qc.SetCooldownEvent('luck_chaser', 10),
],
],
[
'Quest_blessings_of_the_southCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Blessing('alchemist1', 1, 'curse_demise8', undefined),
setup.qc.Blessing('alchemist2', 1, 'curse_demise8', undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({title: 'quest_harbinger_of_misfortune_0'})>>
<<if !_unit>>
<<missingunitquest>>
<<else>>
<p>
Many people living in the lands beyond the <<lore region_sea>> are gifted in the domain of the <<lore magic_light>>. They can heal wounds, mend minds, and it is said that the greatest wizards over yonder is even capable of bestowing blessing and good fortune on another.
</p>
<p>
...at least, such is what <<yourrep _unit>> believed. <<They _unit>> is already so desperate to try and make <<them _unit>> somewhat luckier that <<they _unit>> had already spent time and efforts to locate one of the potential monasteries in the south that might be willing to bless a slaver such as <<themself _unit>>, by any means necessary. Given the sheer unluckiness of the slaver, however, the monastery demands payment as well as some alchemical assistance for the endeavor. These all sounds like nothing but a cheap scam to trick you out of your money, but what other ideas do you have?
</p>
<</if>><p>
After taking the offered money, the monks of the monasteries took <<yourrep $g.a>> to the innermost chamber of the sanctum, where they began the holy ritual of bestowing a blessing upon the <<urace $g.a>>. Normally, this could be done by simply having the head monk chant a scripture or two, but knowing <<rep $g.a>>, they had to go into more extreme territory. With the help of <<yourrep $g.alchemist1>> and <<rep $g.alchemist2>>, they concocted various supposedly luck-inducing potions for <<rep $g.a>> to consume.
<<if $g.a.isHasTrait('tough_nimble')>>
<<Reps $g.a>> malleable body absorbed the potions quickly.
<</if>>
<<if $g.a.isHasTrait('tough_tough')>>
<<Reps $g.a>> resilient body means the potions are less effective, however.
<</if>>
<<if $g.a.isHasTrait('corrupted')>>
The corruption spreading around <<their $g.a>> body made the potions far less effective.
<</if>>
<<if $g.a.isHasTrait('skill_alchemy')>>
As a fellow alchemist <<they $g.a>>, knows the efficacy of these potions, and <<they $g.a>> consumes them eagerly.
<</if>>
Some are even administered anally, for a reason or another that remains unknown to you even to this day.
<<if $g.a.isHasTrait('anus_gape')>>
<<Reps $g.a>> gaping anus means that the insertion apparatus slides in effortlessly into the caverns.
<<elseif $g.a.isHasTrait('anus_loose')>>
<<Reps $g.a>> anus is loose enough to comfortably take in the apparatus, thankfully.
<<elseif $g.a.isHasTrait('anus_tight')>>
The monks had to push the apparatus very hard past <<reps $g.a>> almost virgin-tight anus.
<</if>>
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
Even with the assault of chemicals, incantations, and drugs, the blessing failed to keep hold inside <<reps $g.a>> cursed body. The ritual was a success, however, as evidenced the blessing of life hovering over both <<rep $g.alchemist1>> and <<rep $g.alchemist2>>, but it just stubbornly refused to take hold within <<rep $g.a>>. In fact, <<rep $g.a>> felt even more cursed than normal, <<their $g.a>> curse holding out too strong and triggered a "self-defense-system" out of the curse itself.
</p>
<p>
It seems you would not be able to bless <<rep $g.a>> this way. Perhaps another way would be better?
</p>
<<else>>
<p>
Unfortunately, something went incredibly wrong during the ritual. Whether it's a wrong concoction, a mis-spelled incantation, or simply <<reps $g.a>> sheer unluckiness, the ritual backfired, engulfing
<<if $gOutcome == 'failure'>>
<<rep $g.a>>
<<else>>
everyone within the room
<</if>>
in a dark shroud of corruption.
When it finally settled,
<<if $gOutcome == 'failure'>>
<<rep $g.a>>
<<else>>
everyone
<</if>>
felt much more cursed than usual, and your slavers wisely decided to pull the trigger short and returned home cursed and defeated.
</p>
<</if>><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Clover Farmer', /* name */
[
setup.trait.bg_farmer,
setup.trait.balls_huge,
setup.trait.balls_titanic,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.per_lavish,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
],
[
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.per_frugal,
setup.trait.per_chaste,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
setup.qres.AnyTrait([
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.breast_medium,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.balls_medium,
setup.trait.balls_large,
setup.trait.balls_huge,
setup.trait.balls_titanic,
], true),
],
{
knowledge: 1,
sex: 2,
}
)>>
<<run new setup.QuestTemplate(
'clover_witch', /* key */
"Clover Witch", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'prep',
'trait',
'forest',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 1],
'tender1': [ setup.qu.farmer, 1],
'tender2': [ setup.qu.farmer, 1],
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_clover_witch',
setup.qdiff.harder55, /* difficulty */
[ /* outcomes */
[
'Quest_clover_witchCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_crit', 1, -1),
setup.qc.Outcomes("success"),
],
],
[
'Quest_clover_witchCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_done', 1, -1),
setup.qc.VarSet('quest_harbinger_of_luck_clover', '1', -1),
setup.qc.Blessing('tender1', 1, 'blessing_sanity8', undefined),
setup.qc.Blessing('tender2', 1, 'blessing_sanity8', undefined),
setup.qc.SetCooldownEvent('harbinger_of_chaos', 10),
setup.qc.SetCooldownEvent('harbinger_of_crows', 10),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_clover_witchCrit',
[
setup.qc.Blessing('a', 1, 'curse_madness8', undefined),
setup.qc.SetCooldownEvent('luck_chaser', 10),
],
],
[
'Quest_clover_witchCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Blessing('tender1', 1, 'curse_madness8', undefined),
setup.qc.Blessing('tender2', 1, 'curse_madness8', undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({title: 'quest_harbinger_of_misfortune_0'})>>
<<if !_unit>>
<<missingunitquest>>
<<else>>
<p>
In yet another attempt to purge <<themself _unit>> out of <<their _unit>> unluckiness, <<yourrep _unit>> has come with another absurd proposal. The four leaf clover is a symbol of luck, and surely getting a hold of one or two will purge all unluckiness away.
Or at least <<rep _unit>> seems to think so, and in fact, <<they _unit>> has located a four-leaf-clover farmer somewhere in the <<lore region_forest>> (which is something you only learn to exist today).
</p>
<p>
According to the rumors, however, getting ahold of such a symbol of luck isn't as easy as buying it off some farmer's hands. The prospective buyer can only buy the seed, which must then be planted themself in a patch of land loaned (at a small cost) from the same farmer. The clover must be personally "watered" and "fed" daily for several weeks until it mature, and only then will it grants luck and prosperity to its caretaker. And of course, "watered" and "fed" in this debauched continent could only mean one thing...
</p>
<p>
Should you wish to go ahead and try with this mad endeavor, you could send <<rep _unit>> together with two other slavers to help <<therace _unit>> take care of the clover flower. And don't forget to bring the money to rent the patch of land!
</p>
<</if>><p>
After the money is exchanged and the farmer meticulously counted every single coin, <<yourrep $g.a>> a|was finally given the clover seed and the small patch of land.
The instructions are clear — <<rep $g.a>> is to
"feed" and "water" the plant every day, once in the morning and once in the evening.
Oh yes, <<they $g.a>> must
<<if $g.a.isHasDick()>>
squeeze that <<uballs $g.a>> of <<theirs $g.a>> dry twice per day.
<<if $g.a.isHasTrait('balls_huge')>>
Considering the absolute size of <<their $g.a>> balls, it will take some time, but the plant will surely be nourished from the
<<elseif $g.a.isHasTrait('balls_medium')>>
<<They $g.a>> a|have a normal pair of balls, and hopefully their modest output would be sufficient to grow the plant.
<<else>>
<<Their $g.a>> <<uballs $g.a>> could only produce so much cum, however, and it is unclear if the plant would be sufficiently nourished with the output.
<</if>>
<<else>>
squeeze that <<ubreasts $g.a>> of <<theirs $g.a>> dry twice per day.
<<if $g.a.isHasTrait('breast_huge')>>
Considering the absolute size of <<their $g.a>> breasts, it will take some time, but the plant will surely be nourished from the
<<elseif $g.a.isHasTrait('breast_medium')>>
<<They $g.a>> a|have a normal pair of breasts, and hopefully their modest output would be sufficient to grow the plant.
<<else>>
<<Their $g.a>> <<ubreasts $g.a>> could only produce so much milk, however, and it is unclear if the plant would be sufficiently nourished with the output.
<</if>>
<</if>>
</p>
<p>
Day by day pass by as <<rep $g.a>> a|continue, with the help of <<rep $g.tender1>> and <<rep $g.tender2>>, to take care of the plant.
<<if $g.a.isHasTrait('bg_farmer')>>
<<They $g.a>> a|know how to take care of plants given <<their $g.a>> past as a farmer.
<</if>>
<<if $g.a.isHasTrait('per_sexaddict')>>
Being a sex addict means <<they $g.a>> a|was looking forward to every self-milking session.
<</if>>
<<if $g.a.isHasTrait('per_chaste')>>
<<They $g.a>> secretly abhorred the milking sessions, <<their $g.a>> chaste mind unable to comprehend its necessity.
<</if>>
<<if $g.a.isHasTrait('per_lavish')>>
<<They $g.a>> lavish <<if $g.a.isHasDick()>>cum over cum<<else>>milk over milk<</if>> generously on the plant.
<</if>>
<<if $g.a.isHasTrait('per_frugal')>>
<<They $g.a>> gave the plant the bare minimum amount of
<<if $g.a.isHasDick()>>cum<<else>>milk<</if>>,
being a little too thrifty with <<their $g.a>> own produce.
<</if>>
<<if $g.a.isHasTrait('per_masochistic')>>
<<They $g.a>> sometimes milk <<themself $g.a>> until <<their $g.a>> <<if $g.a.isHasDick()>><<udick $g.a>><<else>><<ubreasts $g.a>><</if>> hurt, the masochist secretly enjoying the self-inflicted pain and punishment.
<</if>>
Before long, three long weeks have passed, and it was time to reap the rewards.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'failure'>>
<p>
The clover blossomed beautifully, four perfect leaves jutting out from the center. <<Rep $g.a>> picked the clover, and something odd happened — a dark energy was coming out from <<therace $g.a>>, seeping into the flower. The lucky energy of the clover was visibly forced out of the plant, and surprisingly went into <<rep $g.tender1>> and <<rep $g.tender2>> instead. <<Yourrep $g.a>>, on the other hand, was left with a wilted, cursed flower, and instead of feeling blessed or lucky, <<rep $g.a>> felt more cursed than before, the ritual seemingly backfired despite the apparent success.
</p>
<p>
It seems that warding away <<reps $g.a>> sheer unluckiness would not be so easy...
</p>
<<else>>
<p>
Unfortunately, your slavers' care was simply not enough. The clover did not mature correctly, and instead wilted and dried. Instead of a blessing, <<rep $g.a>> a|was cursed with yet another curse.
<<if $gOutcome == 'disaster'>>
The failure was so much that the curse even affected both <<rep $g.tender1>> and <<rep $g.tender2>>.
<</if>>
</p>
<p>
You'd just have to try again next time, perhaps by sending more competent slavers for the task...
</p>
<</if>><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Accompanier', /* name */
[
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.skill_entertain,
],
[
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_loner,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
{
intrigue: 1,
social: 2,
}
)>>
<<run new setup.QuestTemplate(
'luckiest_person_on_mestia', /* key */
"Luckiest Person on Mestia", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'prep',
'trait',
'city',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 1],
'guard1': [ setup.qu.guard, 1],
'guard2': [ setup.qu.guard, 1],
},
{ /* actors */
'lucky': 'city_all',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_luckiest_person_on_mestia',
setup.qdiff.harder57, /* difficulty */
[ /* outcomes */
[
'Quest_luckiest_person_on_mestiaCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_crit', 1, -1),
setup.qc.Outcomes("success"),
],
],
[
'Quest_luckiest_person_on_mestiaCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_done', 1, -1),
setup.qc.VarSet('quest_harbinger_of_luck_lucky', '1', -1),
setup.qc.Blessing('guard1', 1, 'blessing_luck8', undefined),
setup.qc.Blessing('guard2', 1, 'blessing_luck8', undefined),
setup.qc.SetCooldownEvent('harbinger_of_chaos', 10),
setup.qc.SetCooldownEvent('harbinger_of_crows', 10),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_luckiest_person_on_mestiaCrit',
[
setup.qc.Blessing('a', 1, 'curse_crow8', undefined),
setup.qc.SetCooldownEvent('luck_chaser', 10),
],
],
[
'Quest_luckiest_person_on_mestiaCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Blessing('guard1', 1, 'curse_crow8', undefined),
setup.qc.Blessing('guard2', 1, 'curse_crow8', undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({title: 'quest_harbinger_of_misfortune_0'})>>
<<if !_unit>>
<<missingunitquest>>
<<else>>
<p>
In the <<lore region_city>> lives a <<man $g.lucky>> famous for being absolutely lucky. <<They $g.lucky>> would find random coins as <<they $g.lucky>> stroll by, gifted free drinks for being the 100-th patron of a new tavern, or just generally happens to be in the right place at the right time.
</p>
<p>
<<Yourrep _unit>> swallows <<their _unit>> jealousy for now and proposes to you that <<they _unit>> might accompany the <<man $g.lucky>> for a while, in the hopes that whatever luck <<they _unit>> has would rub off on <<them _unit>>. You don't believe luck works that way, but seeing how desperate <<therace _unit>> is, you might just not have a choice but to go with the silly idea this time...
</p>
<</if>><p>
With the generous amount of money <<they $g.a>> brought,
<<if $g.a.isHasTrait('skill_entertain')>>
as well as <<their $g.a>> masterful entertainment skills,
<<elseif $g.a.isHasTrait('face_beautiful')>>
as well as <<their $g.a>> absolutely gorgeous face,
<<elseif $g.a.isHasTrait('per_gregarious')>>
as well as <<their $g.a>> silver tongue,
<<elseif $g.a.isHasTrait('face_attractive')>>
as well as <<their $g.a>> attractive face,
<<else>>
<</if>>
<<rep $g.a>> got very close to the lucky <<urace $g.lucky>> very quickly. <<Yourrep $g.a>> made the effort to try and stay as close as the lucky <<man $g.lucky>> as possible throughout — <<they $g.lucky>> would go eat together everyday, enjoy the same entertainment, and would "accidentally" stumble across each other in the public baths. This continued for several weeks, and at the end it was time to test if any sort of luck had decided to stick with <<rep $g.a>>.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
The next day, <<rep $g.a>> tried to venture alone into the city, no longer together with <<their $g.a>> lucky ally.
When <<they $g.a>> a|was already at an awkward distance from the inn <<they $g.a>> a|is staying, rain started to pour, and of course <<therace $g.a>> did not bring anything to cover <<their $g.a>> clothes. They hurried into an alley, only to fall down into a gap on the mushy floor and face-down into the mud, and fell unconscious. When <<they $g.a>> awoke, <<they $g.a>> a|was already stripped naked, thieves seemingly stripping <<therace $g.a>> of everything <<they $g.a>> bought that day.
</p>
<p>
<<Yourrep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> <<rep $g.guard2>>, on the other hand, became actually luckier than normal. They would enter one of the famous brothel in the city just when it's offering a promotion for "paired customers", and later they would enjoy a complimentary ice cream from a newly opened shop.
It seemed the luck had somehow rubbed on your other two slavers instead, perhaps <<reps $g.a>> sheer unluckiness was simply too much and the luck decided to literally rub another way...
</p>
<p>
Clearly there is no way this approach would work, and perhaps it is time to try another approach.
</p>
<<else>>
<p>
It did not work, and worse, it seemed that whatever small luck <<rep $g.a>> used to retain was completely absorbed by the lucky <<urace $g.lucky>>.
<<if $gOutcome == 'disaster'>>
Worse, both <<rep $g.guard1>> and <<rep $g.guard2>> were affected too, and now you are left with nothing but three particularly unlucky slavers.
<</if>>
You sighed, thinking if maybe you should have sent a better, more competent team...
</p>
<</if>><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Horseshoe Crafter', /* name */
[
setup.trait.bg_metalworker,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_aggressive,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.per_calm,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
{
brawn: 2,
slaving: 1,
}
)>>
<<run new setup.QuestTemplate(
'lucky_horseshoe', /* key */
"Lucky Horseshoe", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'prep',
'trait',
'desert',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 1],
'smith2': [ setup.qu.blacksmith, 1],
'smith1': [ setup.qu.blacksmith, 1],
},
{ /* actors */
'smith': 'desert_all',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_lucky_horseshoe',
setup.qdiff.hard59, /* difficulty */
[ /* outcomes */
[
'Quest_lucky_horseshoeCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_crit', 1, -1),
setup.qc.Outcomes("success"),
],
],
[
'Quest_lucky_horseshoeCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_done', 1, -1),
setup.qc.VarSet('quest_harbinger_of_luck_horse', '1', -1),
setup.qc.Blessing('smith1', 1, 'blessing_protection8', undefined),
setup.qc.Blessing('smith2', 1, 'blessing_protection8', undefined),
setup.qc.SetCooldownEvent('harbinger_of_chaos', 10),
setup.qc.SetCooldownEvent('harbinger_of_crows', 10),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_lucky_horseshoeCrit',
[
setup.qc.Blessing('a', 1, 'curse_weakness8', undefined),
setup.qc.SetCooldownEvent('luck_chaser', 10),
],
],
[
'Quest_lucky_horseshoeCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Blessing('smith1', 1, 'curse_weakness8', undefined),
setup.qc.Blessing('smith2', 1, 'curse_weakness8', undefined),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({title: 'quest_harbinger_of_misfortune_0'})>>
<<if !_unit>>
<<missingunitquest>>
<<else>>
<p>
In the continent of <<lore continent_main>>, horseshoes have long been considered lucky. One would nail a horseshoe inside their room upwards, so that the horseshoe would catch luck and bestow it upon the room's resident. <<Yourrep _unit>>, being the unlucky <<urace _unit>> that <<they _unit>> is, had tried this, of course, but as expected it didn't work out. But <<they _unit>> has come to you with another attempt, this time using a specially made horseshoe from a famous blacksmith in the <<lore region_desert>>.
</p>
<p>
The <<lore region_desert>> is home to many horse-takers, be it regular horse or humanlike horses, and it is not surprising that many horse-shoe makers live there. <<Rep _unit>> has identified the creations of one particular blacksmith to be rather lucky, based on the stories <<they _unit>> had heard from the many tavern wenches. You have your doubts, of course, but given how desperate <<therace _unit>> is at removing <<their _unit>> bad luck, you might just swallow your pride and logic this time and send a group of slavers to patron the smith and help craft the lucky shoe...
</p>
<</if>><p>
Per the tradition, one must craft <<their $g.a>> own horseshoe to maximize the luck it would bestow.
An easy task, were it not for <<reps $g.a>> bad luck.
When <<they $g.a>> a|was to bellow the fire, a strong gust of wind just happen to blow through. When the horseshoe was hot and ready to be cooled off, <<they $g.a>> would trip and fell, dropping the hot horseshoe into the fire once more. And the misfortune continues to plague <<therace $g.a>> throughout.
<<if $g.a.isHasTrait('bg_metalworker')>>
<<Rep $g.a>> a|was a blacksmith before a slaver, however, and the experience did help.
<</if>>
<<if $g.a.isHasTrait('muscle_verystrong')>>
<<Their $g.a>> bulging muscles made the smithing easier, however.
<<elseif $g.a.isHasTrait('muscle_strong')>>
<<Their $g.a>> muscles made the smithing job easier, however.
<</if>>
<<if $g.a.isHasTrait('muscle_verythin')>>
<<They $g.a>> a|was too thin for the job, making the smithing harder.
<</if>>
<<if $g.a.isHasTrait('per_aggressive')>>
<<Their $g.a>> aggressiveness was channeled into the hammer, speeding up the entire process.
<</if>>
<<if $g.a.isHasTrait('per_calm')>>
<<They $g.a>> a|was a bit too patient on the craft, slowing down the entire process.
<</if>>
<<if $g.a.isHasTrait('magic_fire')>>
<<Their $g.a>> affinity to fire helped <<them $g.a>> work with the forge.
<</if>>
<<if $g.a.isHasTrait('magic_water')>>
<<Their $g.a>> instinctual water magic meant <<they $g.a>> had a harder time working in the searing heat.
<</if>>
</p>
<p>
After four long weeks and with the aid of both <<rep $g.smith1>> and <<utheirrel $g.smith1 $g.smith2>> <<rep $g.smith2>>, the job was finally over.
The horseshoe is completed, glittering and smelling of new. And it was time to test its effectiveness. Your slavers had rented a small hut in one of the many desert settlements, and nailed the horseshoe on its door. Night fell, and it was time for <<rep $g.a>> to try and sleep inside.
</p>
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<p>
Instead of feeling blessed or stronger, however, <<rep $g.a>> appeared much more haggard and restless the next day. Looking at <<therace $g.a>>, you could tell that the slaver was absolutely more cursed than before, the charm seemingly didn't work. However, you've noticed that the other two slavers who had accompanied <<therace $g.a>> did got blessed somehow instead — perhaps <<reps $g.a>> bad luck was just so strong that the blessing that was supposed to be meant for <<them $g.a>> go to <<their $g.a>> allies instead?
</p>
<p>
Either way, it seems that this method is yet another failure, and you shoudl try another one...
</p>
<<else>>
<p>
Instead of feeling blessed or stronger, however, <<rep $g.a>> appeared much more haggard and restless the next day. Looking at <<therace $g.a>>, you could tell that the slaver was absolutely more cursed than before, the charm seemingly didn't work. And the reason was obvious (or at least obvious according to <<rep $g.a>>): the horseshoe had several dents here and there from poor craftsmanship. It seemed that the slavers you've sent to the task were subpar for the job, and the horseshoe did not come up well.
</p>
<<if $gOutcome == 'disaster'>>
<p>
The poor craftsmanship is such that even <<rep $g.smith1>> and <<rep $g.smith2>> were both affected by the curse...
</p>
<</if>>
<p>
Perhaps you could try again later, when you got the chance. But send a better team next time!
</p>
<</if>><<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Bathing Enthusiast', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.trait.dick_tiny,
setup.trait.breast_tiny,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_harbinger_of_misfortune_0'),
],
{
brawn: 1,
aid: 1,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'seven_petal_baths', /* key */
"Seven Petal Baths", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'special',
'trait',
'prep',
'vale',
],
4, /* weeks */
12, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 1],
'bio1': [ setup.qu.biologist, 1],
'bio2': [ setup.qu.biologist, 1],
},
{ /* actors */
'x': 'vale_all',
},
[ /* costs */
setup.qc.MoneyCustom(-1500),
],
'Quest_seven_petal_baths',
setup.qdiff.harder53, /* difficulty */
[ /* outcomes */
[
'Quest_seven_petal_bathsCrit',
[
setup.qc.VarAdd('quest_harbinger_of_luck_crit', 1, -1),
setup.qc.Outcomes("success"),
],
],
[
'Quest_seven_petal_bathsCrit',
[
setup.qc.VarSet('quest_harbinger_of_luck_bath', '1', -1),
setup.qc.VarAdd('quest_harbinger_of_luck_done', 1, -1),
setup.qc.Blessing('bio1', 1, 'blessing_purity8', undefined),
setup.qc.Blessing('bio2', 1, 'blessing_purity8', undefined),
setup.qc.SetCooldownEvent('harbinger_of_chaos', 10),
setup.qc.SetCooldownEvent('harbinger_of_crows', 10),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_seven_petal_bathsFailure',
[
setup.qc.Blessing('a', 1, 'curse_vice8', undefined),
setup.qc.SetCooldownEvent('luck_chaser', 10),
],
],
[
'Quest_seven_petal_bathsFailure',
[
setup.qc.Blessing('bio1', 1, 'curse_vice8', undefined),
setup.qc.Blessing('bio2', 1, 'curse_vice8', undefined),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _unit = setup.getUnit({title: 'quest_harbinger_of_misfortune_0'})>>
<<if !_unit>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _unit>> has come with yet another attempt at purging <<their _unit>> unluckiness away. This time, <<they _unit>> had somehow consulted an elderly <<urace $g.x>> of the <<lore region_vale>>, who had suggested the so-called "seven-petal-baths" as a way to purge the unluckiness away. Under the full moon night, whichever maiden/lad that wishes to gain the blessing of the moon must bathe under the moonlight in the cold glade of the northern vale, whose waters have been infused with petals of seven particularly rare flowers of the north. There will only be two people in the glade that night: the prospective bather, and the elder <<themself $g.x>> to supposedly guide the ritual.
</p>
<p>
If you're mad enough to believe in such a tale, you could try to purge the unluckiness of your particularly unlucky slaver by sending them alongside two other slavers into the north. They must first spend weeks gathering the necessary flowers, before finally delivering the ritual ingredients into the elder and let <<rep _unit>> undergo the ritual.
</p>
<</if>><p>
<<Yourrep $g.bio1>> and <<utheirrel $g.bio1 $g.bio2>> <<rep $g.bio2>> spent weeks scouring through the vales for the seven flowers.
<<set _unit = setup.selectUnit([$g.a, $g.bio1, $g.bio2], {trait: 'per_studious'})>>
<<if _unit>>
<<Reps _unit>> studious nature meant that <<therace _unit>> knew exactly what flowers they were looking for.
<</if>>
<<set _unit = setup.selectUnit([$g.a, $g.bio1, $g.bio2], {trait: 'per_attentive'})>>
<<if _unit>>
The task was ultimately done no small thanks to <<reps _unit>> attentive eyes.
<</if>>
<<set _unit = setup.selectUnit([$g.a, $g.bio1, $g.bio2], {trait: 'bg_scholar'})>>
<<if _unit>>
<<Rep _unit>> had learned about the flowers from <<their _unit>> time working as a scholar, making the entire quest easier.
<</if>>
After three full weeks of searching, your slavers miraculously found all seven ingredients, and it was time for the ritual to commence.
</p>
<p>
After waiting for the full moon night, <<yourrep $g.a>> ventured alone with only the elder into the glade. Once inside, the elder chanted some gibberish before sprinkling the petals away along the glade. Surprisingly, the ritual seems to not be complete gibberish, as the waters suddenly turn lighter in color. <<Rep $g.a>> <<uadv $g.a>> stepped into the waters, while the elder followed from behind.
</p>
<p>
The elder rubber the remains of the seven flowers in <<their $g.x>> <<uhands $g.x>>, before liberally slathering it onto <<reps $g.a>> <<ubody $g.a>>.
<<if $g.a.isHasTrait('per_chaste')>>
<<Rep $g.a>> a|is a chaste slaver, and tried to cover <<their $g.a>> genitals as best as they could, but it was no match for the surprisingly experienced <<uhands $g.x>>.
<<elseif $g.a.isHasTrait('per_lustful')>>
<<Rep $g.a>> moaned lustfully at the unexpected molestation, and not-so-secretly
<<if $g.a.isHasDick()>>
manage an erection underwater.
<<else>>
got aroused from the surprisingly experienced <<uhands $g.x>>.
<</if>>
<<else>>
<<Rep $g.a>> moaned at the unexpected molestation, before giving in since it felt rather good.
<</if>>
The elder thoroughly explored every nook and cranny of <<reps $g.a>> body, with the excuse that <<they $g.x>> was making sure to coat every single part of <<reps $g.a>> <<uskin $g.a>>.
<<if $g.a.isHasTrait('muscle_verystrong')>>
The <<uhands $g.x>> traced <<reps $g.a>> massive musculature.
<<elseif $g.a.isHasTrait('muscle_strong')>>
The <<uhands $g.x>> traced <<reps $g.a>> considerable musculature.
<</if>>
<<if $g.a.isHasTrait('muscle_verythin')>>
The <<uhands $g.x>> made extra sure every bit of <<reps $g.a>> unnaturally thin waist is covered in the flower oil.
<</if>>
<<if $g.a.isHasTrait('muscle_thin')>>
The <<uhands $g.x>> made extra sure every bit of <<reps $g.a>> thin waist is covered in the flower oil.
<</if>>
<<if $g.a.isHasTrait('dick_huge')>>
<<They $g.x>> spent a lot of time with <<reps $g.a>> <<udick $g.a>>, supposedly since its considered "sacred" for the ritual.
<</if>>
<<if $g.a.isHasTrait('breast_huge')>>
<<Reps $g.x>> massive breastflesh were groped and poked in the name of the ritual.
<</if>>
<<if $g.a.isHasTrait('anus_gape')>>
The <<uhands $g.x>> went easily inside <<reps $g.a>> <<uanus $g.a>>, eliciting a gasp as <<they $g.x>> coated the insides with the flower oil.
<<else>>
Several lubricated fingers went inside <<reps $g.a>> <<uanus $g.a>>, eliciting a gasp as <<they $g.x>> coated the insides with the flower oil.
<</if>>
<<if $g.a.isHasTrait('vagina_tight')>>
<<Reps $g.a>> <<uvagina $g.a>> did not go unmolested either.
<</if>>
</p>
<p>
Unfortunately, despite the constant molestation and the power of the ritual, whatever curse plaguing <<rep $g.a>> a|was simply too strong. At the end of the ritual, instead of feeling blessed, <<rep $g.a>> felt even more cursed than usual. The ritual's blessings instead went into <<rep $g.bio1>> and <<rep $g.bio2>>, who felt purer than ever...
</p>
<p>
Maybe you should try a different ritual next time.
</p><p>
<<Yourrep $g.bio1>> and <<utheirrel $g.bio1 $g.bio2>> <<rep $g.bio2>> spent weeks scouring through the vales for the seven flowers.
But little that they knew that they have misclassified the flowers — instead of the seven flowers of purity, they collected the seven flowers of vice instead.
</p>
<p>
The ritual went about as bad as expected, given the completely opposite flowers that was being used.
Instead of being blessed and cleansed of <<their $g.a>> bad luck, <<therace $g.a>> felt more cursed than ever at the end of the ritual.
<<if $gOutcome == 'disaster'>>
Worse, the effects also seem to have went into both <<rep $g.bio1>> and <<rep $g.bio2>>, and by the end of the quest, you're left with three sufficiently cursed slavers...
<</if>>
</p>
<p>
You could try the ritual again later, but maybe you should send a more competent group of slavers next time.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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_lizardkin, setup.trait.race_demon, setup.trait.bg_boss, setup.trait.bg_royal, setup.trait.bg_mythical, setup.trait.bg_mist, 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_angel, 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, setup.rarity.common],
],
[ /* 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_lizardkin, setup.trait.race_demon, setup.trait.bg_boss, setup.trait.bg_royal, setup.trait.bg_mythical, setup.trait.bg_mist, 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_angel, 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 leading a band of slavers. Among the
friends you have made along the way, there's always
<<yourrep $g.slaver>>.
<<set _weeks = $g.slaver.getWeeksWithCompany()>>
<<They $g.slaver>> slaver|have 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>> slaver|is also <<uadjgood $g.slaver>>. Even though <<theslaver $g.slaver>> slaver|have no
outstanding skills or capabilities, <<they $g.slaver>> slaver|have 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>> looked 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 <<lore region_forest>> is,
if one knows where to look. First of all, you'd need a good scout to locate the
beach. You should then ask one of your slavers to plan a vacation in secret
for <<rep $g.slaver>>, and ask another to join in as the main entertainment.
</p>
<p>
While you probably won't gain anything but gratitude from the slaver, perhaps
this could inspire <<theslaver $g.slaver>> for greater things in the future. Ahh... the
things you'd do for your family...
</p><p>
While <<yourrep $g.scout>> searched for the elusive secret beach, <<yourrep
$g.planner>> prepared for the vacation. First of all, a strong drink the
night before, so <<they $g.slaver>> could be smuggled out of the fort in
the dead of the night. A comfortable bench would also needed, placed next to the
beach in a comfortable position. Drinks and refreshments would also be good — the
exotic fruits from nearby forests could probably make for one. Finally, a
proper whore: <<rep $g.whore>>, which would make a great change from the usual
slave entertainment. As <<rep $g.planner>> finished making the plan and preparations, <<rep
$g.scout>> audaciously returned from <<their $g.scout>> scouting mission, and
with good news too. It seemed the stars had 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>> could. The <<uadjgood
$g.slaver>> slaver obliged, until both slavers were pretty much dead from too much
drinking. <<Rep $g.scout>> and <<utheirrel $g.scout $g.whore>> <<rep
$g.whore>> then hauled <<reps $g.slaver>> 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 surroundings. Instead of the usual imposing walls of your fort, it
was to the empty and pristine beach, with the sunlight strongly shining upon
<<their $g.slaver>> <<ubody $g.slaver>>.
<<if $g.slaver.isHasTrait('per_dreamy')>>
The airheaded <<urace $g.slaver>> assumed it was all a dream, and tried to go
back to sleep.
<<else>>
A sudden sense of panic awashed <<them $g.slaver>>, as <<they $g.slaver>>
realized that <<they $g.slaver>> had been kidnapped.
<</if>>
But then <<rep $g.whore>> <<uadv $g.whore>> came over, bringing exotic fruits
found by <<yourrep $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 being usually prude, the
<<else>>
The
<</if>>
combination of vacational settings, the exotic fruit, and <<reps $g.whore>>
ample body overwhelmed <<rep $g.slaver>>, and they made love.
</p>
<p>
The next few days passed 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 <<reps $g.whore>> <<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 was 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
was 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>> had 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 vastness of the forest made
it difficult for <<rep $g.scout>> and <<utheirrel $g.scout $g.whore>> <<rep
$g.whore>> to find <<theslaver $g.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 left to continue the
the vacation and they headed back home to the fort.
<<Rep $g.slaver>> looked 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>>/* PROOFREAD COMPLETE */
<<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Studious Slaver', /* name */
[
setup.trait.bg_scholar,
setup.trait.bg_apprentice,
setup.trait.per_smart,
setup.trait.per_calm,
setup.trait.per_studious,
setup.trait.per_loyal,
setup.trait.per_curious,
setup.trait.join_senior,
],
[
setup.trait.bg_slave,
setup.trait.bg_unemployed,
setup.trait.per_slow,
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_independent,
setup.trait.per_stubborn,
setup.trait.per_sexaddict,
setup.trait.per_lunatic,
],
[
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_studious,
setup.trait.per_curious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.skill_entertain,
setup.trait.skill_creative,
],
[
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_lunatic,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
],
{
knowledge: 3,
}
)>>
<<set _criterianegotiator = new setup.UnitCriteria(
null, /* key */
'Negotiator', /* name */
[
setup.trait.per_calm,
setup.trait.per_sly,
setup.trait.per_logical,
],
[
setup.trait.per_aggressive,
setup.trait.per_direct,
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
setup.qc.ItemPool(setup.itempool.all_normal),
setup.qc.Equipment(setup.equipmentpool.all_sex),
setup.qc.BoonizeRandom('slaver', 20),
],
], [
'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.city, setup.rarity.always],
],
[ /* 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>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _unit>> has asked to borrow some of the company's money. According to the <<uadjper
_unit>> slaver, <<they _unit>> found a great bargain in the <<lore region_city>>,
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
<<if _unit.isHasTrait('per_loyal')>>
loyally
<</if>>
for quite a while now. But something is odd about <<their _unit>> overall
demeanor this time.
</p>
<p>
Still, money is money and there is no harm in sending <<them _unit>> on such
an easy quest. You'd best accompany <<them _unit>> with a negotiator to
get the best bang for the gold.
</p>
<</if>><p>
<<Yourrep $g.slaver>> had returned from <<their $g.slaver>> quest together with <<utheirrel $g.slaver
$g.negotiator>> <<rep $g.negotiator>> and <<rep $g.writer>>.
<<if $gOutcome == 'crit'>>
<<They $g.slaver>> grinned as <<they $g.slaver>> brought back quite a
selection of items, surely worth over the money borrowed from you.
<<if $unit.player.isHasTrait('per_attentive')>>
Still, you were perceptive enough to note that they were still hiding something from you.
<<else>>
Certainly a good selection of items. Still, something felt off there.
<</if>>
<<elseif $gOutcome == 'success'>>
They brought an item they claimed to have bought with the money, but it was obvious that the
item was not worth anywhere near the amount of money they borrowed. Something was
suspicious there.
<<elseif $gOutcome == 'failure'>>
They brought an item they claimed to have bought with the money, but it was
obvious that the item was not worth anywhere near the amount of money they borrowed. 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 was not hard to imagine what
happened to your slavers during their short trip.
<</if>>
Either way, your slavers looked 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 is 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>> slaver|look particularly
dejected, as if the bandit attack on their team had shattered some particular
dream <<they $g.slaver>> was chasing.
</p>
<</if>>
<<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<p>
In the coming days, you noted that <<rep $g.slaver>> slaver|is acting a
little strange. The usually <<uadjper $g.slaver>> <<urace $g.slaver>> slaver|is now often holed up in
<<their $g.slaver>> room. You decide to make a note of this for now and do nothing else.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'Yourself', /* name */
[
setup.trait.per_smart,
setup.trait.per_sly,
setup.trait.skill_hypnotic,
setup.trait.skill_creative,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.trait.per_slow,
setup.trait.per_direct,
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'slaver': _criteriaslaver,
'negotiator': setup.qu.negotiator, },
{ /* actors */
'target': 'subrace_humandesert', },
[ /* costs */
],
'Quest_mutual_loyalty',
setup.qdiff.normal36, /* difficulty */
[ /* outcomes */
[
'Quest_mutual_loyaltyCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Slave('target', "a|was the child of a leader of a certain desert settlement", undefined),
],
], [
'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, setup.rarity.always],
],
[ /* 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 were having a dispute and it's almost
reaching breaking point.
The less scrupulous of the settlements offered your company
great rewards, in exchange for stealthily kidnapping the <<daughter $g.target>> of the
other chieftain. The poor <<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 for
ensuring that your company get paid well, and two slavers who will be responsible for
infiltrating the other settlement, and kidnap the
unsuspecting <<daughter $g.target>>.
</p>
<p>
Hearing of this opportunity, one of your slavers <<rep _unit>> is offering to go
on the mission, and also asking you to go along as well. <<Yourrep _unit>> has
been with you for quite a while now, and by now you're already very familiar
with <<theslaver _unit>> — 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>> personally for this mission, and
even odder that <<they _unit>> asked 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, <<yourrep $g.slaver>>
tapped you on your shoulders. <<They $g.slaver>> slaver|ask 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>>
slaver|unsheathe a pair of daggers from <<their $g.slaver>> waist, and slaver|proceed to
masterfully wield them in both <<uhands $g.slaver>>. In a flash, both guards are knocked
out — as the dust settles, the shadow of <<yourrep $g.slaver>> appears behind them.
You never notice <<reps $g.slaver>> talent in dual wielding, slaver|have <<they
$g.slaver>> always been able to able to do this?
<<elseif _trait == setup.trait.skill_intimidating>>
slaver|walk menacingly towards the guards, instilling great fear upon the guards
who fled in terror. You never note <<rep $g.slaver>> as an intimidating
slaver — did <<they $g.slaver>> hid this skill all this time?
<<elseif _trait == setup.trait.skill_connected>>
slaver|walk calmly towards the guards, who are apparently already bought by the
connected slaver. You never notice <<rep $g.slaver>> being particularly
savvy in making connections — did it change somehow?
<<elseif _trait == setup.trait.skill_hypnotic>>
slaver|walk towards the guards, who immediately eyed <<therace $g.slaver>> suspiciously.
But the suspicion is short lived as you visibly see them relaxing in the hypnotic
slaver's presence. It makes you wonder — slaver|have <<rep $g.slaver>> always been this
hypnotic?
<<elseif _trait == setup.trait.skill_creative>>
slaver|craft a makeshift explosive from nearby materials and placed them just
on the outskirts of the tent. From a distance, <<rep $g.slaver>> slaver|detonate
the explosives, distracting the guards for a good while. The creativity makes
you wonder if <<rep $g.slaver>> slaver|have always been this creative.
<<elseif _trait == setup.trait.skill_entertain>>
slaver|retreat to the oasis. Soon after you hear <<reps $g.slaver>> unmistakable
voice, singing a tune. You never realize how beautiful <<reps $g.slaver>>
voice is. Actually, has it always been this good?
<<elseif _trait == setup.trait.skill_alchemy>>
slaver|concoct a sleeping draught which <<they $g.slaver>> slaver|disguise as booze.
The guards suspect nothing as <<rep $g.slaver>> slaver|offer 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>>
slaver|rouse the settlement's animals to create a commotion. The rampaging animals
force the guards to abandon their post. You never know that <<rep $g.slaver>> slaver|have a way
with animals — slaver|have <<they $g.slaver>> always have this skill?
<<else>>
<<run alert('unrecognized trait. please report bug to the devs')>>
<</if>>
</p>
<p>
With <<yourrep $g.slaver>> busy distracting the guard, you seize the opportunity
to personally enter the main tent. You are lucky as you find the <<daughter
$g.target>> apparently suffering from a massive hangover. You
easily subdue the dazed <<girl $g.target>> before tying <<them $g.target>>
up and smuggling <<them $g.target>> out of the encampment.
</p>
<p>
After rendezvousing with <<yourrep $g.slaver>>, you deliver 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>> home
as a slave.
<<else>>
The man greedily takes possession of the bound <<girl $g.target>>, and hands
over to your company the promised pay.
<</if>>
With the quest payment settled, you cannot help but notice that <<yourrep
$g.slaver>> slaver|look particularly cheerful after the quest. "How did you like
it, boss?", slaver|ask the <<uadjper $g.slaver>> slaver, probably about <<their
$g.slaver>> performance earlier. Apparently, <<they $g.slaver>> somehow
slaver|have 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 <<theslaver $g.slaver>> had been hard at work studying, and today the
results speak for themselves. <<Rep $g.slaver>> slaver|have now fully mastered <<rep
_trait>>.
</p>
<<run setup.qc.Trait('slaver', _trait).apply($gQuest)>>
<p>
This occupation of being a slaver is not one that usually bring warmth to
your heart, but exceptions do occur sometimes.
</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 arrive at the settlement.
You can hear <<yourrep $g.slaver>> cursing under <<their $g.slaver>> breath as you go back to
your fort. You reassure <<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, <<yourrep $g.slaver>>
tapped you on your shoulders. <<They $g.slaver>> slaver|ask 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 by your
presence. You and your slavers have no choice but to escape the encampment
before you are found.
</p>
<p>
<<Rep $g.slaver>> slaver|look particularly dejected after the unfortunate turn of events.
Whatever <<they $g.slaver>> slaver|was planning on doing seems to have
failed, which impacted <<theslaver $g.slaver>> greatly.
</p>/* PROOFREAD COMPLETE */
<<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': 'subrace_demon',
'good': 'all', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__beginnings',
setup.qdiff.abyss62, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__beginningsCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__beginningsCrit',
[
setup.qc.SetCooldownQuest('the_seven_deadly_transformations__sloth', 100),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.Purify('fated'),
setup.qc.ResetInnateTraits('fated'),
setup.qc.AddHistory('fated', "a|was destined to become a demon lord's plaything, but a|was purified from a|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__beginningsCrit',
[
setup.qc.Outcomes('success'),
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__beginningsCrit',
[
setup.qc.Outcomes('success'),
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 to try to save the slave.
</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 a ritual that can be used to
undo the claim on <<reps $g.fated>> soul. A <<maiden $g.good>>
with the purest heart must tug on <<reps $g.fated>> very soul, extracting
virtue upon virtue to counteract each one of the seven deadly transformation
<<rep $g.fated>> had 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,
<<if $gOutcome == 'disaster'>>
they found a good-enough candidate who wasn't really willing to help and had
to be kidnapped by your slavers and brought to the ritual site.
<<elseif $gOutcome == 'failure'>>
they found a good-enough candidate who was willing to help in exchange for
some promised money — not exactly the paragon of good they were looking for
but eh good enough.
<<else>>
they found a candidate who was willing to help out of the goodness of <<their
$g.good>> heart — truly the paragon of good your slavers were looking for.
<</if>>
</p>
<p>
Once they are gathered in the ritual site, the <<maiden $g.good>>
<<if $gOutcome == 'disaster'>>
was forced to chant
<<elseif $gOutcome == 'failure'>>
suspiciously chanted
<<else>>
chanted
<</if>>
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>
<<if $gOutcome == 'failure' or $gOutcome == 'disaster'>>
<<if $gOutcome == 'failure'>>
<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 abandoned the ritual and
ran 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, and redirected the corruption towards the nearby village.
</p>
<<else>>
<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 outside. While most of the corruption spread far outside
and into the nearby settlements,a sizable portion of it went into your slavers.
Your slavers writhed in agony as they are visibly transformed as well as
receiving severe injuries from the experience.
</p>
<</if>>
<p>
Your slavers can no longer sense any fateful aura emanating from the slave,
and the ritual appears to be somewhat successful.
<<if $gOutcome == 'disaster'>>
You just have to
deal with the mess that is your current state of the slavers.
<</if>>
</p>
<<else>>
<p>
With every chant, the wickedness visibly 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 a wolf tail and demonic hooves started to
appear on <<their $g.good>> previously pure 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 were fully transferred over to <<them $g.good>>.
</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 <<yourrep $g.fated>> appeared
somewhat purer than before.
No longer your slavers can sense any fateful aura emanating from the slave,
and the ritual appeared to have been successful.
</p>
<p>
Your slavers left the writhing <<maiden $g.good>> in the ritual site and come back home. Mission complete.
</p>
<<if $gOutcome == 'crit'>>
<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 out of thin air?
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'wizard': setup.qu.arcanewater,
'convincer': setup.qu.convincer,
'trainer': setup.qu.slavetrainer,
'fated': _criteriafated, },
{ /* actors */
'seer': 'vale_all', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__gluttony',
setup.qdiff.hard16, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__gluttonyCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyNormal(),
],
], [
'Quest_the_seven_deadly_transformation__gluttonyCrit',
[
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__gluttonyFailure',
[
setup.qc.MoneyCustom(-1500), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.always],
],
[ /* 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 proclaims that <<they $g.seer>> foresaw the great destiny awaiting <<rep _headunit>>, and implores 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 nourishment so delicious that <<they _headunit>> cannot help but crave for it for the remainder of <<their _headunit>> life.
</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 be a complete hogwash, faking a divination for 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 innards steak, but nothing seemed 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 werewolves living on the north, instead of a general dish in the northern areas.
</p>
<p>
Your slavers scoured the <<lore region_vale>> for a relatively friendly werewolf clan. They finally found one led by an elderly werewolf — as a gesture of goodwill, your slavers lent <<yourrep $g.fated>> to be used by the werewolf clanmates while the slavers were talking to the elder. The elder suggested various dishes but during the discussion, something strange occured. Blinding light came out from where <<rep $g.fated>> fated|was located -- <<Rep $g.fated>> shone brightly while in the middle of deepthroating a werewolf's dick, and before your slavers' eyes, a werewolf tail grow out from the slave's rear.
After the tail fully grown and the werewolf clanmate withdrew 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 <<reps $g.fated>> destiny. Perhaps this "prophecy" is not a complete hogwash.
<<if $gOutcome == 'crit'>>
For such a good fuck, your slavers were given several gifts by the werewolf tribe.
<</if>>
</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 innards steak, but nothing seemed to trigger any meaningful response from <<rep $g.fated>>.
</p>
<<if $gOutcome == 'failure'>>
<p>
Your slavers eventually run out of ideas and decided to head back home. Perhaps they can try again sometime.
</p>
<<else>>
<p>
Your slavers even tried some of the more expensive food, which still triggered no response from <<rep $g.fated>>.
After wasting much of your money, your slavers eventually ran out of ideas and decided to head back home.
Looking at your slaver's face of satisfaction of having tasted many delicious and expensive cuisine of the north,
you have your doubts that they were just wasting your money on whatever food they fancy...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'scout': setup.qu.scout_forest,
'biologist': setup.qu.biologist, },
{ /* actors */
'elf': 'subrace_elf', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__greed',
setup.qdiff.hard30, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__greedCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyNormal(), ],
], [
'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), ],
], [
'Quest_the_seven_deadly_transformation__greedFailure',
[
],
], [
'Quest_the_seven_deadly_transformation__greedFailure',
[
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, setup.rarity.always],
],
[ /* 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 dismissed the dream as nothing but a dream. But it kept
reoccurring to the point where you are now very certain that this dream is an omen
— it is yet another step you need to take in order to complete <<reps _headunit>> 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>
<</if>><p>
Your scout <<rep $g.scout>> <<uadv $g.scout>> guided the rest of the team
deep within the forest, until they arrived at a pristine grove.
Inside the grove was a hollowed out tree, and within it 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.
But neither the forced deepthroating nor the assrape triggered anything within the slave and your slavers
were at a lost.
</p>
<p>
It was then that an elderly elf came upon your slavers. Introducing <<themself
$g.elf>> as the grove keeper, <<they $g.elf>> revealed that another component
was required in order to complete the ritual — the ritual demanded that the
greed be satisfied, so one dildo was not enough.
It was 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 was 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 the massive wooden
phallus.
<<if $g.fated.isHasTrait(setup.trait.anus_gape)>>
Still, <<their $g.fated>> gaping anus had plenty of experience and will
probably be able to withstood the rape.
<<else>>
Your slaver even doubted that the slave's relatively tight anus could possibly accomodate
just the elf's member, let alone together with the wooden phallus.
<</if>>
But just as the head of the phallus grazed the slave's hole, a green-ish glow
surrounded 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 <<reps $g.fated>> ass, moving up and down, double penetrating <<them
$g.fated>>, who kept muffling from great amount of pain. As the double penetration
continued, <<reps $g.fated>> ears began to glow as well, morphing into sharp
ears akin to those of elves. The ritual continued for quite some time and
eventually, the green glow faded which signaled 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 bid
your team farewell. Your slavers had a
little fun with the fully used slave before heading back, successful in their
mission.
</p>
<<if $gOutcome == 'crit'>>
<p>
As your slavers headed back home, <<rep $g.biologist>> <<uadv $g.biologist>>
collected several valuable plants along the way, earning you some extra coin.
</p>
<</if>><p>
Your scout <<rep $g.scout>> <<uadv $g.scout>> guided the rest of the team
deep within the forest, until they stumbled upon 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.
<<if $gOutcome == 'failure'>>
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 your slavers subjected <<rep $g.fated>> to various degrading acts on
the rod, including a forced deepthroat and painful assrape, nothing seemed to trigger any
reaction.
Your slavers eventually ran out of ideas, and decided to go home.
Perhaps they could try this again sometime later.
<<else>>
But they were not alone in the grove.
Wild animals guarded the grove, and they viciously attacked your
team. Your slavers had to escape bearing injuries from the sudden and
unexpected attack.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'whore1': setup.qu.whore,
'whore2': setup.qu.whore, },
{ /* actors */
'whore': 'subrace_neko', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__lust',
setup.qdiff.hard23, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__lustCrit',
[
setup.qc.Outcomes('success'),
setup.qc.BoonizeRandom('trainer', 4),
setup.qc.BoonizeRandom('whore1', 4),
setup.qc.BoonizeRandom('whore2', 4),
],
], [
'Quest_the_seven_deadly_transformation__lustCrit',
[
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__lustCrit',
[
],
], [
'Quest_the_seven_deadly_transformation__lustCrit',
[
setup.qc.MoneyCustom(-1500),
setup.qc.SlaveMarker('whore'), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.always],
],
[ /* 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
<<lore region_forest>>. Apparently, one of your slaves, <<rep _headunit>>, has an
upcoming booking for one of the most famous whorehouses in NPC, the <<lore
location_purrloin>>.
</p>
<p>
Recalling <<reps _headunit>> 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 then and send a group of lucky 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>
<</if>><p>
Your slavers arrived the <<lore location_purrloin>> — immediately several
slutty neko threw themselves on the floor and writhed for your slavers'
attention, a normal greeting for the upstanding location.
But they were here on a mission... kinda, of uh... what mission
again?
</p>
<p>
The hostess, seeing your slavers' valid reservation for the place, escorted them
to one of the private rooms. There,
four sexy neko were strewn around in the bed, <<if $g.whore.isHasDick()>>all
with stiff pricks<<else>>all with wet pussies<</if>> ready for whatever their
clients desired.
</p>
<p>
Initially, they let <<rep $g.fated>> played with the four neko toys
available in the room. But <<rep $g.fated>> did not seem to be overly
enthusiastic by the idea and nothing seemed to happen.
</p>
<<if $gOutcome == 'failure' or $gOutcome == 'disaster'>>
<p>
Disappointed, your slavers turned to leave the establishment without perusing
any of the wares.
<<if $gOutcome == 'failure'>>
The hostess saw the dissatisfaction in your slavers, and
assumed the worst. <<They $g.whore>> promised to send another invitation to your company,
with compliments of course.
Well, at least this means you can try again for free some time later.
<<else>>
Before leaving, they made another appointment so you could try again —- albeit
having to pay quite a large sum of money for it.
<</if>>
</p>
<<else>>
<p>
Frustrated, your
slavers decided to <<uadv $g.trainer>> unleashed their frustrations by joining
in the orgy —
The mission was soon forgotten as
they made <<rep $g.fated>> join the neko as the fifth orgy slave. Your
slavers proceeded to use all five slaves with abandon. For a few hours the room
— locked tight — were filled with nothing but hard rough sex and aroused moans
coming from both the slaves and the slavers. Your slavers never noticed when or how,
but by the end of the orgy, <<rep $g.fated>> 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 collaring <<rep $g.fated>> back for a long journey home,
successful in the journey worthy of being called the trial of love.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'parader1': setup.qu.tank,
'parader2': setup.qu.light_warrior, },
{ /* actors */
'dragon': 'subrace_dragonkin', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__pride',
setup.qdiff.hardest51, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__prideCrit',
[
setup.qc.Outcomes('success'),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'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), ],
], [
'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__prideFailure',
[
setup.qc.MissingUnit('trainer'),
setup.qc.Injury('parader2', 4),
setup.qc.Injury('parader1', 4), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* 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 quite 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 in the celebrations. 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 be related with <<their
_headunit>> quest for fulfilling <<their _headunit>> destiny.
</p>
<</if>><p>
Escorted by the dragonkin messenger, your ship successfully navigated through
the treacherous seas until the dragonkin's homeland came into view. It was a
wondrous place — full of dragonkin masters with their slaves going on with
everyday's duty while a grand palace loomed 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 gathered, the dragonkin's take on slavery
was quite different than normal. Here, not only masters were proud of their
duties — the slaves were too! The march symbolized the pride of both master
and slave, each doing their best in their lot of life.
</p>
<p>
It was incredibly difficult to drill such attitude to the 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 <<reps $g.fated>>
<<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 the march next day.
</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>> started to emit a faded white aura,
which somehow kept it <<if $g.fated.isHasDick()>>erect<<else>>hard<</if>>
throughout the long brutal march. Even more, scales slowly grew out of their
entire body and by the end of the march, <<reps $g.fated>> body had been
fully transformed into that of dragonkins — covered by 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,
<<if $gOutcome == 'crit'>>
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.
<<else>>
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>>.
<</if>>
</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 on in the middle of
the journey, injuring your slavers.
<<if $gOutcome == 'disaster'>>
Even worse, <<rep $g.trainer>> trainer|was nowhere to be seen when the storm
ended — perhaps <<they $g.trainer>> trainer|was thrown out of the ship in
the middle of the chaos.
<</if>>
Upon seeing
the grave injuries on your slavers, the messenger wished them the best of luck
before advising them to go back while <<they $g.dragon>> flew back to
<<their $g.dragon>> land.
</p>/* PROOFREAD COMPLETE */
<<set _criteriafated = new setup.UnitCriteria(
null, /* key */
'fated', /* name */
[
],
[
],
[
setup.qres.IsCanBeSold(),
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': 'subrace_demon', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__pride2',
setup.qdiff.extreme62, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__pride2Crit',
[
setup.qc.Outcomes('success'),
setup.qc.Blessing('trainer', 1),
setup.qc.Blessing('warrior', 1),
setup.qc.Blessing('fated', 1), ],
], [
'Quest_the_seven_deadly_transformation__pride2Crit',
[
setup.qc.SetCooldownQuest('the_seven_deadly_transformations__sloth', 100),
setup.qc.MissingUnitForever('fated'),
setup.qc.Item(setup.item.transformation_technology),
setup.qc.Item(setup.item.potion_transformation), ],
], [
'Quest_the_seven_deadly_transformation__pride2Crit',
[
setup.qc.Outcomes('success'),
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__pride2Crit',
[
setup.qc.Outcomes('success'),
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 made the sensible but dangerous decision of trying to seal the deal.
</p><p>
Your slavers arrived at the target island — a dark shadow loomed seemingly
eternally 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>> stood guard while <<rep $g.wizard>>
prepared for the ritual. <<uslaverstripall $g.fated>> <<Yourrep $g.trainer>> then
placed the struggling slave atop of the altar, and the altar immediately
worked their magic.
</p>
<p>
<<Reps $g.fated>> human-like arms immediately grew 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, and <<rep $g.fated>> was straight-eagled to the
altar. Their wolf-like tail grew in length and two large penis-shapes tips formed
at its end, which then entered <<their $g.fated>> own <<umouth $g.fated>> while
spouting cum-like substance
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 shoved down <<their $g.fated>> <<umouth $g.fated>>.
Electric jolts both tormented and
pleasured the struggling slave, and <<they $g.fated>> would climax if not for
the demonic chastity cage appearing out of nowhere and cruelly constricting their
<<ugenital $g.fated>>. Meanwhile <<their $g.fated>> <<ubreast $g.fated>> all
the time puffed out proudly displaying it sensuously for your slavers'
entertainment.
</p>
<p>
The bondage lasted for a few hours before a thunderstorm crashed into the
crater —— from the resulting mist appeared what seemed to be the demon lord
himself, with two of his slaves crawling and leashed besides him. One stopped
and acted as his throne while the other as his footstool, and the demon made
himself comfortably to watch the scene unfolded.
</p>
<<if $gOutcome == 'success' or $gOutcome == 'crit'>>
<p>
When the debauched ritual finally ended, <<yourrep $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 harem of sex toys.
</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 together with his
three slaves then disappeared into a breach in <<lore concept_mist>>, leaving no trace that
they were ever here.
</p>
<<else>>
<p>
It was 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, flesh upon flesh were piled up on top of the altar with one filling
the other reciprocately. Lost in sexual desires, your slavers became slaves
for the demon's entertainment, which lasted for hours long.
</p>
<<if $gOutcome == 'failure'>>
<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>
<<else>>
<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 yielded 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 a little broken.
</p>
<</if>>
<</if>>
<p>
Lying on the altar is a single bottle of <<rep setup.item.potion_transformation>>, perhaps a gift from the satisfied demon lord?
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'pimp': setup.qu.pimp,
'guard': setup.qu.guard, },
{ /* actors */
'orc': 'subrace_orc', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__wrath',
setup.qdiff.hard37, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__wrathCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyCustom(2500), ],
], [
'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(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, setup.rarity.always],
],
[ /* 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 <<yourrep _headunit>> must overcome to fulfill <<their
_headunit>> destiny.
</p>
<p>
It would be impossible to subject <<rep _headunit>> directly to the rite, for the rite
is only done for new prospective members of the orcish tribe. But perhaps you can ask
some of the tribes on how the rite is actually 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 unwrathful orc encampment, and see what they can find there.
</p>
<</if>><p>
Your slavers managed to find one small orcish encampment who mostly lives off
trading. <<Yourrep $g.pimp>> managed to <<uadv $g.pimp>> represent your team well
— effectively acting as <<reps $g.fated>> pimp. Once inside, <<rep $g.fated>> fated|was
immediately rented by some of the orcs, while <<rep $g.guard>> busily search
for relevant information. They gathered much information about the rite,
including all the spanking and whipping that surprisingly comes with it.
</p>
<p>
In fact, one of the orcs had just come to age, and would be
subjected to the rite later that night. Your slavers were invited to watch,
which they gladly agreed. That night, your slavers watched as the new orc
member was chained to a post and then whipped and flogged by their fellow
orcs — you could not help but notice that the orc's
<<if $g.orc.isHasDick()>>dick<<else>>pussy<</if>> remains <<wet $g.orc>> all that time.
That looked simple enough, so your slavers eagerly tried this out on <<rep
$g.fated>> on the spot. They tied <<therace $g.fated>> on a tree, and synchronised their whipping and
spanking with the ritual — soon enough, <<rep $g.fated>> started to glow red
and tusks formed around <<their $g.fated>> mouth. By the end of the
ritual, the red glow faded, and <<reps $g.fated>> entire body was red from
the whipping. <<They $g.fated>> sported new orcish 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
<<yourrep $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 parlay with the guards of one of the orcish
encampment, they were ambushed by orcish ambusher who lied in wait precisely
for such travelers. Your
slavers somehow managed to escape from the situation, albeit sustaining heavy
injuries.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fated': _criteriafated,
'trainer': setup.qu.slavetrainer,
'wizard': setup.qu.arcanedark,
'warrior': setup.qu.dark_warrior, },
{ /* actors */
'demon': 'subrace_demon', },
[ /* costs */
],
'Quest_the_seven_deadly_transformation__envy',
setup.qdiff.hard44, /* difficulty */
[ /* outcomes */
[
'Quest_the_seven_deadly_transformation__envyCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyNormal(), ],
], [
'Quest_the_seven_deadly_transformation__envyCrit',
[
setup.qc.Trait('fated', setup.trait.training_obedience_basic),
setup.qc.Trait('fated', setup.trait.training_roleplay_basic),
setup.qc.TraitReplace('fated', setup.trait.legs_demon), ],
], [
'Quest_the_seven_deadly_transformation__envyCrit',
[
setup.qc.Corrupt('trainer'),
setup.qc.Corrupt('warrior'), ],
], [
'Quest_the_seven_deadly_transformation__envyCrit',
[
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, setup.rarity.always],
],
[ /* 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, <<yourrep _headunit>> is often found staring blankly
eastwards towards the <<lore region_desert>>, as if something was calling <<them
_headunit>> there. <<ustripmouth _headunit>> When you asked <<them _headunit>>
about it, <<they _headunit>> <<uadv _headunit>> indicated that <<they
_headunit>> kept hearing seductively disturbing voices in their head coming
from somewhere in the deserts.
</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? 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>
<</if>><p>
Your slavers scoured the <<lore region_desert>> for the potential source of the
nightmares that plagued <<rep $g.fated>> — the slave's
<<if $g.fated.isHasDick()>>dick twitched<<else>>clit twitched<</if>> whenever
they were closing into the source. Using it as some sort of dowsing rod, your
slavers managed to pinpoint what appeared to be the source of the nightmare —
a large breach in a densely-misted area near an oasis.
</p>
<<if $gOutcome == 'success' or $gOutcome == 'critical'>>
<p>
After <<yourrep $g.wizard>> <<uadv $g.wizard>> stabilized the gate, the rest of
the team went inside the breach and into the land beyond.
As is norm for the land beyond <<lore concept_mist>>,
they were met with the most debauched of scenes. Naked bodies
of various races are on display along the fleshy walls, most had one or more
of their slave holes filled either by a demon fucking them senseless or just
with demonic tentacles that appeared out of nowhere.
Before your slavers fully got their bearing back, they were
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 proceeded to claim a special connection with <<rep $g.fated>>.
When <<reps $g.fated>> body began 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>> worked with <<yourrep $g.fated>>.
</p>
<p>
To fulfill the aspect of envy, 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>> fated|was forced to service many,
many other <<if $g.fated.isHasDick()>>cocks, with many repeatedly came with
abandon inside <<their $g.fated>> <<umouth $g.fated>>.<<else>>pussies, plenty of whose juice
were absorbed into <<their $g.fated>> throat.<</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 had somehow been
transformed into a painful-looking pair of demonic hooves, glowing faintly purple.
</p>
<p>
The debaucheries ended, your slavers were safely returned back to the desert, to
the great relief of <<yourrep $g.wizard>> who had waited <<uadv $g.wizard>> in
the desert for days, all while keeping the breach stable.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers <<uadv $g.trainer>> managed to stole some treasure from the land
beyond <<lore concept_mist>>, which fetched for a good price.
</p>
<</if>>
<<else>>
<p>
After <<rep $g.wizard>> <<uadv $g.wizard>> attempted to stabilizes the gate,
the rest of the team went inside into the breach. But <<reps $g.wizard>>
stabilization was messy, and a massive corrupted blowback repelled your slavers
and your slave back into the mortal plane. While they sustained no injuries,
the demonic blowback had corrupted parts of their bodies.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.Title(
'seven_deadly_transformation', /* key */
"Chosen One", /* name */
'A self-proclaimed chosen one preordained to fulfilling an important destiny', /* name */
'a|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.subrace_humanvale_male, 0.16666666666666666],
[setup.unitpool.subrace_humanvale_female, 0.16666666666666666],
[setup.unitpool.subrace_humankingdom_male, 0.16666666666666666],
[setup.unitpool.subrace_humankingdom_female, 0.16666666666666666],
[setup.unitpool.subrace_humandesert_male, 0.16666666666666666],
[setup.unitpool.subrace_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', "received a premonition about a great fate awaiting a|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': '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.Outcomes('success'),
setup.qc.MoneyNormal(),
],
], [
'Quest_the_seven_deadly_transformations__slothCrit',
[
setup.qc.Slave('fated', "a|was trying to fulfill a|their destiny but would have failed miserably without your company's intervention", undefined), ],
], [
'Quest_the_seven_deadly_transformations__slothFailure',
[
],
], [
'Quest_the_seven_deadly_transformations__slothFailure',
[
setup.qc.Injury('tank', 1),
setup.qc.Injury('dps', 1),
setup.qc.Injury('healer', 1), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.common],
],
[ /* 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>> had 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 advance their quest without really knowing how.
<<Their $g.fated>> behaviors are so un-herolike that even the tavern wenches refuse 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 nothing but nonsense.
</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 swaying —
which made <<them $g.fated>> an easy prey for your slavers.
After a brief struggle, <<yourrep $g.tank>> had the adventurer-turned-slave tied and secured,
to be brought 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>> fated|remain 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>
<<if $gOutcome == 'disaster'>>
<p>
Oh the way back, your slavers were ambushed by road bandits and suffered minor injuries.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestCityContactCrit',
[
setup.qc.Contact(setup.contacttemplate.citylead),
setup.qc.QuestDelay(setup.questpool.city, 4),
],
],
[
'QuestCityContactFailure',
[
setup.qc.QuestDirect('city_contact'),
],
],
[
'QuestCityContactFailure',
[
setup.qc.QuestDirect('city_contact'),
],
],
],
[],
[],
)>><p>
With the <<rep setup.buildingtemplate.scoutoffice>> ready,
you should send a group of slavers to go to the <<lore region_city>>
in order to find some contacts who are willing to supply
your company with quest leads.
Finding such contact may be difficult due to how these people perceive
slavers, but every city has an undercity, and it is there your slavers will
most likely find their <<man $unit.player>>.
</p><p>
Your slavers struck a deal with one of the local city thieves.
You are not privy to the details, but
all you know is that your company will be able to receive quest leads from the thief.
</p><p>
Unfortunately, your slavers failed to find any such contact within the walls of the
<<lore region_city>>. You should try again.
</p>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestDesertContactCrit',
[
setup.qc.Contact(setup.contacttemplate.desertlead),
setup.qc.QuestDelay(setup.questpool.desert, 6),
],
],
[
'QuestDesertContactFailure',
[
setup.qc.QuestDirect('desert_contact'),
],
],
[
'QuestDesertContactFailure',
[
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 might be willing to 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 send out
their problems for your company to solve.
</p><p>
Unfortunately, your slavers failed to find any such contact. You should try again.
</p>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestForestContactCrit',
[
setup.qc.Contact(setup.contacttemplate.forestlead),
setup.qc.QuestDelay(setup.questpool.forest, 5),
],
],
[
'QuestForestContactFailure',
[
setup.qc.QuestDirect('forest_contact'),
],
],
[
'QuestForestContactFailure',
[
setup.qc.QuestDirect('forest_contact'),
],
],
],
[],
[],
)>><p>
Building <<rep setup.buildingtemplate.scouttower>> is not enough to start doing
quests in the <<lore region_forest>>. You also need
to find some promising contacts in the <<lore region_forest>> who might
be willing to send to your company quest leads, among the
elves and the neko living in the forest.
</p><p>
Your slavers happened upon a rather unscrupulous elf, who is willing
to supply your company with leads in exchange for the occasional visits to your
fort to enjoy the provided "entertainments".
</p><p>
Unfortunately, you failed to find any such contact. You should try again.
</p>/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact has send you several promising leads in the <<lore region_city>>.
You can send a group of slavers to follow up on those leads 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 returned with
several quest options.
</p><p>
Unfortunately, the leads given by your contacts turned out to be dead leads.
Your slavers returned home with nothing but shame.
</p><p>
Unfortunately, the team were ambushed by locals during their stay in the city,
and was forced to retreat earlier than expected.
</p>/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contacts in the <<lore region_desert>> have sent you several potential
leads for jobs your company can take up there.
Your slavers would need two weeks to follow up on these leads, should you wish to pursue them.
Be warned that venturing to the <<lore region_desert>> is considerably more dangerous
than the rest of the areas!
</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 returned with
several quest options.
</p><p>
Your slavers were ambushed by another slaving company 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. <<Yourrep $g.guard>> barely fended off the attack,
but not without sustaining life-threatening injuries. <<They $g.guard>> will be
out of commission for a good while.
</p>/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact has send you several promising leads in the <<lore region_forest>>.
You can send a group of slavers to follow up on those leads 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 returned with
several quest options.
</p><p>
Unfortunately, the leads given by your contacts turned out to be dead leads.
Your slavers return home with nothing.
</p><p>
Unfortunately, the team were attacked by wild feral animals during their venture into the forest,
and was forced to retreat earlier than expected.
</p>/* PROOFREAD COMPLETE */
<<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.MissingUnit('guard'),
],
],
],
[[setup.questpool.scoutsea, setup.rarity.common],],
[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 returned 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'scout_vale', /* id */
'Scout: Northern Vales', /* 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, setup.rarity.common],],
[setup.qres.QuestAvailableUnique()],
)>><p>
Your contact -- the tavern owner in the <<lore region_vale>> --
has sent you several rumors that may lead to quests in the northern vales.
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 returned with
several quest options.
</p><p>
Unfortunately, the vast majority of the rumors led to a dead end.
Still, the team managed to found at least a few quest leads.
</p><p>
Unfortunately, during their journey north your team was ambushed some locals who
disapproved of your company's morality.
They were forced to retreat earlier than what they would have wanted to.
</p>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestSeaContactCrit',
[
setup.qc.Contact(setup.contacttemplate.sealead),
setup.qc.QuestDelay(setup.questpool.sea, 6),
],
],
[
'QuestSeaContactFailure',
[
setup.qc.QuestDirect('sea_contact'),
],
],
[
'QuestSeaContactFailure',
[
setup.qc.QuestDirect('sea_contact'),
],
],
],
[],
[],
)>><p>
With your <<= setup.buildingtemplate.scoutharbor.rep()>> finally ready,
it is now possible for you to send a group of slavers on a boat trip south into the
<<lore region_sea>> for the slight
chance of obtaining a contact across the <<lore region_sea>>.
Such a contact would prove invaluable in supplying your company with precious quest leads.
It is said that venturing south is always a dangerous affair -- far more dangerous
than any other locations you've been to, and you should prepare for the worst.
</p><p>
Your slavers came back in one piece, thankfully, and they even managed to find a contact
willing to send quest leads to your fort should they find someone in need of your services.
When pressed to tell you more about the contact, your slavers froze in place and refused
to elaborate, their gaze becoming empty whenever you press even further.
What kind of creature out there have they struck a deal with?
</p><p>
Unfortunately, your slavers failed to find any such contact. You should try again.
</p>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestValeContactCrit',
[
setup.qc.Contact(setup.contacttemplate.valelead),
setup.qc.QuestDelay(setup.questpool.vale, 6),
],
],
[
'QuestValeContactFailure',
[
setup.qc.QuestDirect('vale_contact'),
],
],
[
'QuestValeContactFailure',
[
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 several northern settlements,
your slavers 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>/* PROOFREAD COMPLETE */
<<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': 'city_all',
'recruit2': 'city_all',
'recruit3': 'city_all',
'recruit4': 'city_all',
'recruit5': 'city_all',
'recruit6': 'city_all',
'recruit7': 'city_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, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
With the <<= setup.buildingtemplate.hiringsquare.rep() >> built, you can start your search for potential
new slavers by posting new job openings and sending a crier to nearby villages, as well as
to the <<lore region_city>>.
Unfortunately, your criers won't be able to go too far, and the recruits would most likely be
the residents of the <<lore region_city>>.
You'll have to recruit via other means if you want to broaden your recruit options.
</p><p>
<<Rep $g.recruiter1>> 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 would need to be paid if you want to hire them.
</p><p>
<<Rep $g.recruiter1>> managed to find four potential slavers
among 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
among the rabbles and people living in the vicinity.
<<They $g.recruit1>> recruit1|is now awaiting your decision in the prospects hall.
</p><p>
Unfortunately, there were nobody who was interested in changing job into a slaver.
</p>/* PROOFREAD COMPLETE */
<<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': 'desert_all',
'recruit2': 'desert_all',
'recruit3': 'desert_all',
'recruit4': 'desert_all',
'recruit5': 'desert_all',
'recruit6': 'desert_all',
'recruit7': '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, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
Both the <<rep setup.trait.subrace_orc>> and <<rep setup.trait.subrace_humandesert>>
are well-used to the life and culture filled with slavery.
This gives them a very pliable mould to shape a slaver from. In addition,
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.
Should any recruit show up, they will still need to be paid a hiring fee, however.
</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquaredesert>>.
</p><p>
The team's 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>
The team's 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 prevented your slavers
to get about their business as planned.
Still,
<<rep $g.recruiter1>> managed to find one potential slaver to bring back home.
</p><p>
Unfortunately, your slavers got too rowdy during one of their recruitment drives
raising the ires of the nearby citizens. They were ambushed during their way out and came
back home injured.
</p>/* PROOFREAD COMPLETE */
<<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': 'sea_all',
'recruit2': 'sea_all',
'recruit3': 'sea_all',
'recruit4': 'sea_all',
'recruit5': 'sea_all',
'recruit6': 'sea_all',
'recruit7': 'sea_all',
},
[ /* costs */
setup.qc.MoneyNormal(-1),
],
'QuestRecruitmentSea', /* passage description */
setup.qdiff.normal60, /* 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, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
The <<lore continent_main>> is not the only continent in the world.
Many people live far across the <<lore region_sea>> -- people with cultures
unlike any other you have probably ever seen.
There are hulking <<rep setup.trait.subrace_lizardkin>>
going on their everyday life there, as well as the rare and elusive
<<rep setup.trait.subrace_dragonkin>>.
These scaled people are known to be proficient in many field.
Furthermore, there are also many <<rep setup.trait.subrace_humansea>>,
perhaps most famous for their hypnotic dances.
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>
<<Reps $g.recruiter1>> and <<reps $g.recruiter2>> trip across the sea
borne fruit, as they were very successful in their trip and managed to find
seven potential slavers for your company.
These recruits from faraway lands are now waiting in the prospects hall for your
decision, and need to be paid should 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 seas were unkind to your slavers during their journey -- your slavers
shipped were washed ashore during one of the storms.
They spent most of their hiring money for fixing their boat instead, and only managed
to find one potential recruit to bring back home.
</p><p>
Unfortunately, your slavers' trip to the <<lore region_sea>> got cut short when
a kraken attacked their ship, forcing them to retreat early to your fort.
</p>/* PROOFREAD COMPLETE */
<<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': 'vale_all',
'recruit2': 'vale_all',
'recruit3': 'vale_all',
'recruit4': 'vale_all',
'recruit5': 'vale_all',
'recruit6': 'vale_all',
'recruit7': '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, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> are inhabited by honest, hardy <<rep setup.trait.subrace_humanvale>>,
and also by several <<rep setup.trait.subrace_werewolf>> clans.
Many potential recruits can be found among these people --
Both races are used to the cold areas of the north, giving them an affinity for
<<rep setup.trait.magic_water>>.
In addition, the northerners are often gifted with ambidexterity, while
some werewolves are known to be able to communicate with animals.
You can try to send a group of slavers over to the vales
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>
The team's recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> were relentless
during their recruitment drive. Thanks to 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>
The team's recruiters <<rep $g.recruiter1>> and <<rep $g.recruiter2>> scoured through the
settlements both humans and (some of the friendlier) 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' adventure in the north,
which prevented them from visiting as many settlements as they would have liked.
Still,
<<rep $g.recruiter1>> managed to find one potential slaver to bring back home.
</p><p>
Unfortunately, nobody seemed interested in joining your company.
Well either that, or your slavers slacked off during their job.
</p>/* PROOFREAD COMPLETE */
<<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': 'forest_all',
'recruit2': 'forest_all',
'recruit3': 'forest_all',
'recruit4': 'forest_all',
'recruit5': 'forest_all',
'recruit6': 'forest_all',
'recruit7': '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, setup.rarity.common],
], /* quest pool and rarity */
[
setup.qres.QuestAvailableUnique(),
], /* restrictions to generate */
)>><p>
The western forests are inhabited by both <<rep setup.trait.subrace_elf>> and
<<rep setup.trait.subrace_neko>>. People of these races have
the potential to make an excellent slavers: Neko often make great
entertainers, making them suitable for negotiation missions, while elves
are often gifted in the art of healing, making them excellent as support.
</p>
<p>
Both of these races have practiced slavery for a long time, and it would not
be too difficult to send a group of slavers to recruit some of these people into your
company. Your slavers need to bring a little incentive though in order to
entice the candidates into your fort.
</p>
<p>
This quest is available thanks to your <<rep setup.buildingtemplate.hiringsquareforest>>.
</p><p>
The team's recruiters: <<rep $g.recruiter1>> and <<rep $g.recruiter2>>, told
a great many 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>
The team's recruiters: <<rep $g.recruiter1>> and <<rep $g.recruiter2>>,
scoured through the forest looking for specific types of people they believed would
make great slavers. Your slavers promised them bountiful flesh in addition to
gold if they join, which resulted in 4 potential slavers now patiently waiting
your decision in the <<rep setup.buildingtemplate.prospectshall>>.
</p><p>
Your slavers stopped by in the first tavern they found and spent almost all of
their time getting drunk. Still, they managed to convince a random drink-mate
they befriended 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 benefits of being a slaver. Nobody joined them on their trip back home.
</p>/* PROOFREAD COMPLETE */
<<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[
setup.trait.race_lizardkin,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_loyal,
setup.trait.per_attentive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.skill_flight,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* critical traits */
[
setup.trait.race_elf,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_independent,
setup.trait.per_dreamy,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_masochistic,
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,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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(),
],
],
[
'QuestBountyHuntKrakenCrit',
[
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.Injury('merc3', 2),
setup.qc.MissingUnit('merc2'),
setup.qc.TraitReplaceExisting('merc2', 'anus_gape'),
setup.qc.TraitReplaceExisting('merc2', 'vagina_gape'),
],
],
],
[[setup.questpool.sea, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<questimage 'bounty_hunt_kraken.jpg'>>
<p>
The <<lore region_sea>> are dangerous both for what lies ahead, and for what lies within.
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, let alone penetrate.
If one could slay such a beast, it will surely make the world a little safer, earning
much coins from nearby settlements.
</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,
<<set _earth = setup.selectUnit([$g.merc1, $g.merc2, $g.merc3], {trait: 'magic_earth_master'})>>
<<if _earth>>
<<Rep _earth>> summoned <<their _earth>> own tentacle aberrations to fought away the kraken's
numerous appendages.
<</if>>
<<set _sub = setup.selectUnit([$g.merc1, $g.merc2, $g.merc3], {trait: 'per_submissive'})>>
<<if _sub>>
<<Reps _sub>> submissive tendencies came out and seeing those big strong tentacles made
<<therace _sub>> quiver in slight excitement, but quickly gained <<their _sub>> focus back
after seeing how devastatingly strong the oversized octopus was.
<</if>>
<<set _gape = setup.selectUnit([$g.merc1, $g.merc2, $g.merc3], {trait: 'anus_gape'})>>
<<if _gape>>
<<Rep _gape>> could suddenly feel <<their _gape>> gaping anus twitched -- the big tentacles
reminded <<them _gape>> of how <<their _gape>> hole was gaped a long time ago.
<</if>>
<<set _lustful = setup.selectUnit([$g.merc1, $g.merc2, $g.merc3], {trait: 'per_lustful'})>>
<<if _lustful>>
<<Rep _lustful>> fought <<uadv _lustful>>, but <<they _lustful>> could not fully hide
<<their _lustful>> perverted thoughts at seeing those big, meaty tentacles around.
<</if>>
In the end, they somehow
they managed to survive the ordeal and slay the kraken.
<<if $gOutcome == 'crit'>>
Furthermore, from inside the kraken's defeated body
they found a lot of valuables, which they proceeded to sell before returning victoriously
to the fort.
<<else>>
Some of your slavers contemplated on using the kraken's tentacles for some depraved slave
training back at the fort, but ultimately went against the idea lest since the tentacles
seemed to have a mind of their own.
<</if>>
</p><p>
Unfortunately, despite your slaver's best efforts to bait the kraken, the beast was nowhere
to be found.
</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>> 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.
<<uneedrescue $g.merc2>>, although by that time <<they $g.merc2>> would probably be already too used to
feeling tentacles around <<their $g.merc2>> body...
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'alchemist_of_the_seven_seas', /* key */
"Alchemist of the Seven Seas", /* Title */
"darko", /* Author */
[ 'sea', 'item', 'rare',
], /* tags */
6, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.extreme48, /* 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', 6),
setup.qc.Injury('biologist', 6), ],
], [
'Quest_alchemist_of_the_seven_seasDisaster',
[
setup.qc.Injury('alchemist', 12),
setup.qc.Injury('biologist', 13),
setup.qc.Injury('navigator', 8), ],
], ],
[
[setup.questpool.sea, setup.rarity.rare],
], /* quest pool and rarity */
[
setup.qres.QuestUnique(), ], /* restrictions to generate */
)>><p>
Wondrous potions are abound in the <<lore continent_main>> —
from simple potions that can heal wounds, to complex potions that can
erase memories or even restore the mind of mindbroken slaves.
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 is worth a lot. But the sea is always
dangerous, especially for unprepared adventurers, and best to prepare for the worst.
</p><p>
The voyage went smoothly, and <<rep $g.navigator>> navigator|was able to
<<uadv $g.navigator>>
lead the ship into multiple islands for <<rep $g.biologist>> and <<rep $g.alchemist>>
to hunt for ingredients.
<<set _lizardkin = setup.selectUnit([$g.biologist, $g.alchemist, $g.navigator], {anytrait: [
'subrace_lizardkin',
'subrace_dragonkin',
'subrace_humansea',
]})>>
<<if _lizardkin>>
Some of the islands were familiar to <<rep _lizardkin>> -- <<therace _lizardkin>> helped the team
with naming some of the floras in those islands.
<</if>>
<<set _curious = setup.selectUnit([$g.biologist, $g.alchemist, $g.navigator], {trait: 'per_curious'})>>
<<if _curious>>
<<Rep _curious>> curiously poked the many strange plants <<they _curious>> had never seen before.
<</if>>
In the end, <<rep $g.alchemist>> alchemist|was able to find and use many rare ingredients to
concoct two very special potions.
</p><p>
The voyage wasn't easy, but through <<reps $g.navigator>> persistence and
<<reps $g.alchemist>> 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 future endeavors.
Alternatively, you can always sell it for a tidy sum
<<inyourbuilding '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 after sustaining
debilitating injuries.
</p><p>
<<Yourrep $g.alchemist>> got too excited with the many rare ingredients <<they $g.alchemist>> found,
and mixed them incorrectly, resulting in a large explosion in the ship's makeshift laboratory.
<<Rep $g.alchemist>> and <<utheirrel $g.alchemist $g.biologist>> <<rep $g.biologist>> sustained life-threatening
injuries and need to be treated and rested immediately.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Defiant Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.HasTag('in_training_defiant_slave'),
],
{
}
)>>
<<set _so = setup.qc.SlaveOrderFlex(
'Payment for Animal Tamer Service', /* name */
'humansea', /* company */
50, /* expires in */
-2500, /* base price */
1000, /* trait multi */
0, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandomExact([
setup.trait.subrace_humankingdom,
setup.trait.subrace_humanvale,
setup.trait.subrace_humandesert,
setup.trait.subrace_humansea,
setup.trait.race_wolfkin,
setup.trait.race_elf,
setup.trait.race_catkin,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
setup.trait.race_demon
], 1, 1, 0),
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.muscle_thin,
setup.trait.muscle_strong,
setup.trait.face_scary,
setup.trait.face_attractive,
setup.trait.tough_nimble,
setup.trait.tough_tough,
setup.trait.corrupted,
setup.trait.height_short,
setup.trait.height_tall,
setup.trait.per_gregarious,
setup.trait.per_loner,
setup.trait.per_chaste,
setup.trait.per_lustful,
setup.trait.per_lavish,
setup.trait.per_frugal,
setup.trait.per_proud,
setup.trait.per_humble,
setup.trait.per_brave,
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_cruel,
setup.trait.per_loyal,
setup.trait.per_independent,
setup.trait.per_sly,
setup.trait.per_direct,
setup.trait.per_stubborn,
setup.trait.per_curious,
setup.trait.per_logical,
setup.trait.per_empath,
setup.trait.per_attentive,
setup.trait.per_dreamy,
setup.trait.per_aggressive,
setup.trait.per_calm,
setup.trait.per_playful,
setup.trait.per_serious,
setup.trait.per_studious,
setup.trait.per_active
], 7, 5, 0),
],
[ /* fulfilled outcomes */
setup.qc.HideAll([
setup.qc.VarAdd('animal_tamer_slave_order_fulfilled', 1, 100)
], "Payment for the Animal Tamer service"),
],
[ /* unfulfilled outcomes */
setup.qc.VarRemove('animal_tamer_slave_order_active'),
],
)>>
<<set _rews = [
_so,
_so,
_so,
setup.qc.VarSet('animal_tamer_slave_order_active', '1', 100),
setup.qc.VarSet('animal_tamer_slave_being_trained', '1', -1),
setup.qc.Leave('slave', "a|is being trained by an animal trainer from the southern seas", undefined),
setup.qc.SlaverMarker('master'),
]>>
<<run new setup.QuestTemplate(
'animal_trainer_of_the_south', /* key */
"Animal Trainer of the South", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'order',
'trait',
],
4, /* weeks */
200, /* expiration weeks */
{ /* roles */
'slave': _criteriaslave,
'negotiator': [ setup.qu.negotiator, 1],
'trainer': [ setup.qu.slavetrainer, 1],
'navigator': [ setup.qu.navigator, 1],
},
{ /* actors */
'master': 'sea_all',
},
[ /* costs */
],
'Quest_animal_trainer_of_the_south',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_animal_trainer_of_the_southCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_animal_trainer_of_the_southCrit',
_rews,
],
[
'Quest_animal_trainer_of_the_southCrit',
[
setup.qc.Outcomes('success'),
],
],
[
'Quest_animal_trainer_of_the_southCrit',
[
setup.qc.Outcomes('success'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
It has been made clear from the last few days that <<rep _u>> is one tough
slave to break. It seems that no amount of standard slave training will break
the highly defiant slave.
</p>
<p>
Your slavers therefore come out with an idea, fresh out of the box. Perhaps
the key is not to treat the slave as a normal humanlike slave, but as an
animal instead. Living somewhere beyond the <<lore region_sea>> is a trainer
specializing in training animals, whom your slavers have successfully
contracted to specifically train <<therace _u>> animal.
</p>
<p>
However, in securing the deal your slavers had to make a lot of concessions.
In particular, they promised to provide the trainer with one of your company's
specialities: three made-to-order slaves. If you accept this quest, then you
will no doubt receive three <<dangertext 'very specific'>> slave orders from the animal trainer as payment
for <<their $g.master>> services...
</p>
<p>
As for side effects, who knows what might happen to <<rep _u>> after being
treated like a livestock by the trainer?
</p>
<</if>><p>
Without much fanfare, your slavers dropped <<yourrep $g.slave>> at the secluded
island where the animal trainer lives. <<They $g.master>> promised to deliver
the slave as soon as <<they $g.master>> receives the payment. In the
meantime, your slavers went back to your fort as the trainer began the slave
training by ushering your lent slave into one of <<their $g.master>> stables...
</p><<run new setup.Title(
"quest_master_angler_0", /* key */
"Master Angler", /* name */
"Caught a legendarily rare fish in the Southern Seas", /* description */
"caught an extremely rare fish in the Southern Seas, becoming rather famous there", /* unit text */
4500, /* slave value */
{ /* skill additives */
brawn: 3,survival: 3,},
)
>>
<<set _criteriafish1 = new setup.UnitCriteria(
null, /* key */
'Fisherman', /* name */
[
setup.trait.bg_seaman,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_calm,
setup.trait.skill_animal,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1.5,
survival: 1.5,
}
)>>
<<set _criteriafish2 = new setup.UnitCriteria(
null, /* key */
'Fisherman', /* name */
[
setup.trait.bg_seaman,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_calm,
setup.trait.skill_animal,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.per_aggressive,
],
[
setup.qres.Job(setup.job.slaver),
],
{
brawn: 1.5,
survival: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'go_fish', /* key */
"Go Fish", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'money',
'danger',
'unknown',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fish1': [ _criteriafish1, 1],
'fish2': [ _criteriafish2, 1],
'guard': [ setup.qu.guard, 1],
},
{ /* actors */
},
[ /* costs */
],
'Quest_go_fish',
setup.qdiff.hard52, /* difficulty */
[ /* outcomes */
[
'Quest_go_fishCrit',
[
setup.qc.Outcomes("success"),
setup.qc.OneRandomSeed([
setup.qc.ItemPool(setup.itempool.potion_blessing),
setup.qc.Equipment(setup.equipmentpool.aid_good),
setup.qc.MoneyCustom(5000),
setup.qc.Item(setup.item.potion_boon),
setup.qc.DoAll([
setup.qc.Purify('fish1'),
setup.qc.Purify('fish2')
], undefined),
setup.qc.DoAll([
setup.qc.Corrupt('fish1', null, 1),
setup.qc.Corrupt('fish2', null, 1)
], undefined),
setup.qc.Favor('humansea', 250),
setup.qc.DoAll([
setup.qc.MoneyCustom(10000),
setup.qc.Ire('humansea', 10)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('fish1', 30),
setup.qc.TraumatizeRandom('fish2', 30)
], undefined),
setup.qc.DoAll([
setup.qc.Blessing('fish1', 1, 'blessing_purity8'),
setup.qc.Blessing('fish2', 1, 'blessing_purity8')
], undefined),
setup.qc.OneRandomSeed([
setup.qc.AddTitle('fish1', 'quest_master_angler_0'),
setup.qc.AddTitle('fish2', 'quest_master_angler_0')
])
]),
],
],
[
'Quest_go_fishCrit',
[
setup.qc.MoneyCustom(4000),
],
],
[
'Quest_go_fishCrit',
[
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Injury('fish1', 5),
setup.qc.Injury('fish2', 5),
setup.qc.Injury('guard', 5)
], undefined),
setup.qc.DoAll([
setup.qc.Corrupt('fish1', null, 1),
setup.qc.Corrupt('fish2', null, 1),
setup.qc.Corrupt('guard', null, 1)
], undefined),
setup.qc.DoAll([
setup.qc.TraumatizeRandom('fish1', 25),
setup.qc.TraumatizeRandom('fish2', 25),
setup.qc.TraumatizeRandom('guard', 25)
], undefined),
setup.qc.DoAll([
setup.qc.Blessing('fish1', 1, null, true),
setup.qc.Blessing('fish2', 1, null, true),
setup.qc.Blessing('guard', 1, null, true)
], undefined)
]),
],
],
[
'Quest_go_fishCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Many people living in the <<lore region_sea>> make their living by harvesting the bounties of the sea. Most wisely decide not to venture too far from their settlements, as the sea is known to be treacherous, filled with pirates, slavers, and even the occasional monsters. But even so, these people still make decent amount of money by capturing the many fish that live in the shallower part of the sea.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> has been hearing rumors that the deeper part of the sea hides rare and wondrous sea creatures that would fetch a nice sum of gold to exotic collectors. The creatures range from standard but beautiful-looking fish, to eleven-legged sea creature that you're not sure it even exists. Still, it might be worth it to try and follow-up on this rumor by sending a group of slavers to go fish for these. Although capturing unknown sea creature, especially in the <<lore region_sea>> is going to prove incredibly dangerous...
</p><p>
The trio of slavers you sent over to the southern set sail from your harbor, each having their own outlook of the quest.
<<set _seaman = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'bg_seaman'})>>
<<if _seaman>>
<<Rep _seaman>> looked quite happy to be going back to the sea — the former seaman had apparently missed the open ocean quite a bit.
<</if>>
<<set _agg = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'per_aggressive'})>>
<<if _agg>>
<<Yourrep _agg>> did not look forward to the boring trip, being an impatient <<urace _agg>>.
<</if>>
<<set _calm = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'per_calm'})>>
<<if _calm>>
Fishing is a calming experience, and <<rep _calm>> is quite looking forward to it.
<</if>>
<<set _water = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'magic_water'})>>
<<if _water>>
Being on the open ocean has always been a pleasant experience for the water magic specialist <<rep _water>>.
<</if>>
They gathered their (some newly-bought) fishing rods and set sail.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
With some luck, your slavers were able to reach the deep waters, and began fishing.
They set their fishing rods on the edge of the ship, and then they waited.
<<set _fru = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'per_frugal'})>>
<<if _fru>>
<<Rep _fru>> bought a relatively cheap and flimsy-looking fishing rod, and <<therace _fru>> hoped it would be enough to survive whatever fish they were about to encounter.
<</if>>
They did not need to wait long, and it turned out the deep waters were extremely rich with fish, since people are generally too afraid to venture this deep and left these fish unharvested.
Before long, mountains of fish were piling up in their ship, no doubt going to fetch a decent sum in the market.
</p>
<<if $gOutcome == 'success'>>
<p>
While your slavers netted a rather large profit from the endeavor,
they did not caught anything interesting from within the sea. Your slavers returned home slightly disappointed, hoping they would find more than just ordinary fish in the deep waters of such a dangerous ocean.
</p>
<<else>>
<p>
Your slavers netted a rather large profit from the endeavor. But more that,
among the various fish the captured, one stood out.
<<set _muscle = setup.selectUnit([$g.fish1, $g.fish2, $g.guard], {trait: 'muscle_strong'})>>
<<if _muscle>>
It was the most difficult one to caught, and <<rep _muscle>> had to exert <<their _muscle>>
<<if _muscle.isHasTrait('muscle_verystrong')>>
huge
<<else>>
considerable
<</if>>
musculature to reel the fish in.
<</if>>
<<if $gQuest.getSeed() % 11 == 0 || $gQuest.getSeed() % 11 == 3>>
Despite having the shape of an average southern fish, the fish belly glew a curious color.
Something must have been swallowed by the fish, and your slavers soon found a rare
<<if $gQuest.getSeed() % 11 == 3>>
<<rep setup.item.potion_boon>>. A travelling ship must have dropped the rare potion during their trip.
<<else>>
blessing potion, a speciality of one of the many monasteries in the southern seas.
Who knows how such a rare potion could end up in the belly of a fish, but you for sure are not complaining.
<</if>>
<<elseif $gQuest.getSeed() % 11 == 1>>
An object was clearly stuck inside one of the bigger fish' belly. Your slavers bravely took it out, and lo and behold, it was a rare saint clothing from the southern seas. How could such a valuable piece of clothes find its way inside a fish' insides?
<<elseif $gQuest.getSeed() % 11 == 2>>
Your slavers somehow managed to captured the elusive golden fish. While the fish itself tastes remarkably normal, nobles of the southern seas uses them as a delecacy, and your slavers were able to sell the rare specimen for a high sum.
<<elseif $gQuest.getSeed() % 11 == 4>>
At the end of the reel is the rare Fish of Purification. After being captured, the fish glew and floated before your slavers' eyes, and it bestowed its purification into your slavers, cleansing them of their corruption, before going back into the sea.
<<elseif $gQuest.getSeed() % 11 == 5>>
At the end of the reel is the rare Fish of Corruption. Unfortunately, this was not a nice fish, and the fish proceeded to glow ominously before exploding in a sea of corruption, corrupting your slavers.
<<elseif $gQuest.getSeed() % 11 == 6>>
At the end of the reel is not a fish, but rather a strange silver shoe. Underneath is written an address in the southern seas. Your slavers ended up returning the shoe to its owner, who was so grateful that your company's reputation soared among their people.
<<elseif $gQuest.getSeed() % 11 == 7>>
At the end of the reel is not a fish, but rather a strange silver shoe. Underneath is written an address in the southern seas. However, your slavers were able to deduce that the shoe was incredibly valuable, and sold it instead for an outrageous sum. The real owner found out about your slavers' treachery, however, and your reputation with their people suffered.
<<elseif $gQuest.getSeed() % 11 == 8>>
At the end of the reel is the rare Fish of Horror. The fish visage immediately instilled fear and trauma to your slavers, and by the time they let go of the fish, it was already too late.
<<elseif $gQuest.getSeed() % 11 == 9>>
At the end of the reel is the rare Fish of Purity. After being captured, the fish glew and floated before your slavers' eyes, and it bestowed the blessings of purity into your slavers, before going back into the sea.
<<else>>
<<if $gQuest.getSeed() % 2 == 0>>
<<set _t = $g.fish1>>
<<else>>
<<set _t = $g.fish2>>
<</if>>
At the end of the reel is the legendary Fish of Greed. Instead of being helpless like a regular fish, the fish slipped out of your slavers' reel, and floated into the sky, facing <<rep _t>> directly.
"You have done well to catch me, my son", said the fish towards the understandably flabbergasted <<rep _t>>. "For such a feat, I shall award you with the title of Master Angler. May you carry it with pride", the fish elaborated, before jumping back into the sea.
<</if>>
</p>
<</if>>
<<else>>
<p>
With some luck, your slavers were able to reach the deep waters, and began fishing.
They set their fishing rods on the edge of the ship, and then they waited.
But instead of finding regular or valuable fish they found something else entirely...
</p>
<<if $gQuest.getSeed() % 4 == 0>>
At the end of the reel is the rare Fish of Blades. The fish is covered entirely in sharp spikes, and once it was atop the ship, it started rocking around, sending out sharp damaging spikes everywhere before mercifully diving back into the sea. Your slavers were greatly injured as a result.
<<elseif $gQuest.getSeed() % 4 == 1>>
At the end of the reel is the rare Fish of Corruption. Unfortunately, this was not a nice fish, and the fish proceeded to glow ominously before exploding in a sea of corruption, corrupting your slavers.
<<elseif $gQuest.getSeed() % 4 == 2>>
At the end of the reel is the rare Fish of Horror. The fish visage immediately instilled fear and trauma to your slavers, and by the time they let go of the fish, it was already too late.
<<elseif $gQuest.getSeed() % 4 == 3>>
At the end of the reel is the rare Fish of Vice, a forbidden fish.
All your slavers were cursed with various curses by the time they realized what kind of
fish they had just caught and released it immediately back to terrorize the southern seas.
<</if>>
<</if>><<set _criteriaslave1 = new setup.UnitCriteria(
null, /* key */
'Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllTraits([setup.trait.training_none], true),
setup.qres.IsCanBeSold(),
],
{
}
)>>
<<run new setup.QuestTemplate(
'impossible_orders', /* key */
"Impossible Orders", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'order',
'rare',
],
3, /* weeks */
12, /* expiration weeks */
{ /* roles */
'handler': [ setup.qu.slavehandler, 3],
'slave1': _criteriaslave1,
'slave2': _criteriaslave1,
'slave3': _criteriaslave1,
},
{ /* actors */
},
[ /* costs */
],
'Quest_impossible_orders',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_impossible_ordersCrit',
[
setup.qc.SetCooldownQuest(null, 100),
setup.qc.SlaveOrderFlex(
'Healthy Slave', /* name */
'humansea', /* company */
4, /* expires in */
10000, /* base price */
1500, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
setup.trait.per_masochistic,
setup.trait.training_masochist_master,
],
[ /* disaster traits */
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.tough_nimble,
setup.trait.per_curious,
setup.trait.per_lunatic,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('impossible_orders_maso'),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Item(setup.item.potion_protection),
setup.qc.Item(setup.item.potion_protection)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(10000)
], undefined),
setup.qc.DoAll([
setup.qc.Item(setup.item.f_slavebed_good),
setup.qc.Item(setup.item.f_slavebed_good)
], undefined)
]),
],
[ /* unfulfilled outcomes */
setup.qc.HideAll([setup.qc.RemoveTagGlobal('impossible_orders_maso')]),
],
),
setup.qc.SlaveOrderFlex(
'Pure Slave', /* name */
'humansea', /* company */
4, /* expires in */
10000, /* base price */
1500, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.race_demon,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[ /* disaster traits */
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('impossible_orders_pure'),
setup.qres.NoTraits([setup.trait.eyes_demon, setup.trait.ears_demon, setup.trait.mouth_demon, setup.trait.dick_demon, setup.trait.tail_demon, setup.trait.legs_demon, setup.trait.arms_demon, setup.trait.wings_demon, setup.trait.body_demon], true),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Item(setup.item.potion_purity),
setup.qc.Item(setup.item.potion_purity)
], undefined),
setup.qc.DoAll([
setup.qc.Item(setup.item.f_slavebed_good),
setup.qc.Item(setup.item.f_slavebed_good)
], undefined),
setup.qc.DoAll([
setup.qc.Favor('humansea', 500)
], undefined)
]),
],
[ /* unfulfilled outcomes */
setup.qc.HideAll([setup.qc.RemoveTagGlobal('impossible_orders_pure')]),
],
),
setup.qc.SlaveOrderFlex(
'Free Slave', /* name */
'humansea', /* company */
3, /* expires in */
10000, /* base price */
1500, /* trait multi */
1, /* value multi */
[ /* crit traits */
setup.trait.per_smart,
setup.trait.per_brave,
setup.trait.per_dominant,
setup.trait.per_lunatic,
],
[ /* disaster traits */
setup.trait.per_slow,
setup.trait.per_cautious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.HasTag('impossible_orders_free'),
],
[ /* addons */
],
[ /* fulfilled outcomes */
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Item(setup.item.potion_life),
setup.qc.Item(setup.item.potion_life)
], undefined),
setup.qc.DoAll([
setup.qc.Item(setup.item.f_slavebed_good),
setup.qc.Item(setup.item.f_slavebed_good)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(5000),
setup.qc.Favor('humansea', 250)
], undefined)
]),
],
[ /* unfulfilled outcomes */
setup.qc.HideAll([setup.qc.RemoveTagGlobal('impossible_orders_free')]),
],
),
],
],
[
'Quest_impossible_ordersCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_impossible_ordersCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_impossible_ordersCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.epic],
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.SetCooldownQuest(null, 20),
],
)>><p>
Far beyond the <<lore region_sea>> lives an emperor known as Emperor Hentei. The emperor is wise and caring for his citizens, and the kingdom lives in prosperity. However, there is a loosely guarded secret about the emperor — the emperor is complete lunatic when it comes to sex, and keeps a stable of various sex slaves at his palace.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> informs you today that the emperor is apparently looking for a trio of slaves to add to his stable. Normally, the order would require strange and exotic properties on the slaves, but strangely, this order is completely ordinary. Just three normal slaves, freshly untrained, to be delivered to the palace complex.
<<if $statistics.isHasSuccess('impossible_orders')>>
This is not the first time you receive such an order, and you know why no other company is willing to take up such an "easy" order. Should you wish to reattempt fulfilling some rather impossible slave orders, you could try to send a slaver together with three slave candidates away...
<<else>>
Even stranger is that no other slaving company is willing to take up the order. This might just be your dumb luck, or there is a catch to the order after all...
<</if>>
</p><p>
After <<yourrep $g.handler>> arrived at the palace complex, the emperor Hentei himself greeted your slaver, before inspecting the three merchandise. The inspection was brief and short, and the emperor was pleased with what he saw — as far as <<rep $g.handler>> could tell anyways — and proceeded to lavish <<them $g.handler>> with a proper feast with the trio of slaves in full display for the party.
</p>
<p>
The party did not go as expected. <<Rep $g.handler>> lost all <<their $g.handler>> memory of the party — perhaps <<therace $g.handler>> simply drank too much — but at the end of the party, all that was left is <<their $g.handler>> naked self as well as two of their merchandise. One is completely corrupted, while the other is completely injured. Another is missing entirely, and nobody knew what happened.
</p>
<p>
The order was cancelled, for the emperor wanted three slaves — one pure, one healthy, and one existing, but none of the three were! In his kind gracious wisdom, the emperor allowed you a few weeks to recover and restore the slave, but looking at how much damage and corruption they sustained, the deadline seemed downright impossible.
</p>
<p>
In the end, three slave orders are sitting on your desk. One asked to fully heal a devastatingly injured slave within a month, another to fully purify a slave within a month, and another is to recapture a missing slave within a few weeks... Three completely useless and impossible orders, or are they?
</p>
<<if $gQuest.getSeed() % 6 == 0>>
<<set _cor = $g.slave1>>
<<set _pur = $g.slave2>>
<<set _fre = $g.slave3>>
<<elseif $gQuest.getSeed() % 6 == 0>>
<<set _cor = $g.slave1>>
<<set _pur = $g.slave3>>
<<set _fre = $g.slave2>>
<<elseif $gQuest.getSeed() % 6 == 0>>
<<set _cor = $g.slave2>>
<<set _pur = $g.slave1>>
<<set _fre = $g.slave3>>
<<elseif $gQuest.getSeed() % 6 == 0>>
<<set _cor = $g.slave2>>
<<set _pur = $g.slave3>>
<<set _fre = $g.slave1>>
<<elseif $gQuest.getSeed() % 6 == 0>>
<<set _cor = $g.slave3>>
<<set _pur = $g.slave1>>
<<set _fre = $g.slave2>>
<<else>>
<<set _cor = $g.slave3>>
<<set _pur = $g.slave2>>
<<set _fre = $g.slave1>>
<</if>>
<<run setup.qc.AddTag('unit', 'impossible_orders_maso').apply(setup.costUnitHelper(_cor))>>
<<run setup.qc.Injury('unit', 50).apply(setup.costUnitHelper(_cor))>>
<<run setup.qc.AddTag('unit', 'impossible_orders_pure').apply(setup.costUnitHelper(_pur))>>
<<run setup.qc.TraitsReplace('unit', [
setup.trait.eyes_demon,
setup.trait.ears_demon,
setup.trait.mouth_demon,
setup.trait.tail_demon,
setup.trait.legs_demon,
setup.trait.arms_demon,
setup.trait.wings_demon,
setup.trait.body_demon,
]).apply(setup.costUnitHelper(_pur))>>
<<run setup.qc.AddTag('unit', 'impossible_orders_free').apply(setup.costUnitHelper(_fre))>>
<<run setup.qc.MissingUnit('unit').apply(setup.costUnitHelper(_fre))>>/* PROOFREAD COMPLETE */
<<set _criteriadiver1 = new setup.UnitCriteria(
null, /* key */
'Diver', /* name */
[
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.subrace_humanvale,
setup.trait.subrace_werewolf,
setup.trait.subrace_lizardkin,
setup.trait.per_brave,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_serious,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.per_cautious,
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_playful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
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.bg_pirate,
setup.trait.bg_seaman,
setup.trait.subrace_humanvale,
setup.trait.subrace_werewolf,
setup.trait.subrace_lizardkin,
setup.trait.per_brave,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_serious,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.per_cautious,
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_playful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
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.bg_pirate,
setup.trait.bg_seaman,
setup.trait.subrace_humanvale,
setup.trait.subrace_werewolf,
setup.trait.subrace_lizardkin,
setup.trait.per_brave,
setup.trait.per_calm,
setup.trait.per_attentive,
setup.trait.per_curious,
setup.trait.per_serious,
setup.trait.per_lunatic,
setup.trait.per_honorable,
setup.trait.skill_ambidextrous,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.subrace_humandesert,
setup.trait.race_greenskin,
setup.trait.per_cautious,
setup.trait.per_aggressive,
setup.trait.per_dreamy,
setup.trait.per_stubborn,
setup.trait.per_playful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_evil,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
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',
'rare',
], /* 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_atlantisCrit',
[
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_atlantisCrit',
[
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, setup.rarity.epic],
], /* 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 remains
unknown, but most scholars agree that these civilizations have technology far
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.
Your slavers got their own enchanted water bubble too.
<<set _water = setup.selectUnit([$g.diver1, $g.diver2, $g.fighter], {trait: 'magic_water'})>>
<<if _water>>
<<Rep _water>> used <<their _water>> knowledge of water magic to double-check that the water bubble
was properly enchanted.
<</if>>
Using the bubble, your slavers slowly but surely
descended to the bottom, when they suddenly discovered that they were not alone.
Surrounding them were a group of water monsters, with tentacles ready to greet these unsuspecting victims.
</p>
<p>
<<if $gOutcome == 'crit'>>
Your slavers by virtue of their prowess managed to actually slip through
these monsters unnoticed, using the other expedition members as bait. They
<<else>>
One of these monsters approached your slavers' bubbles — and when escape
seems impossible, <<rep $g.fighter>> selflessly sacrificed <<themself $g.fighter>> to be
intimately acquintanced with the tentacled monsters.
This sacrifice offered your other
slavers a chance to slip through these monsters unnoticed, although they did
so with heavy heart.
Ultimately, your slavers
<</if>>
were the only team who managed to eventually reached the underwater city, or
what was left of it. They entered the biggest ruin in the vicinity —-
the apparent ruin of a temple dedicated to worshipping the flesh.
</p>
<<if $gOutcome == 'failure'>>
<p>
Unfortunately, the ruins seemed to already have been looted in some prior
expedition. Searching here and there only yielded minor trinkets and nothing of
value can be brought to the surface.
Defeated, your slavers ascended back to the surface and received their "bravery
reward" from the noble. Your slavers spent all of the reward drinking to both
remember and forget <<reps $g.fighter>> sacrifices. By the
time they arrived at your fort, your slaver were a wreck and all the money was gone.
</p>
<<else>>
<p>
Deep within the temple, they found great riches. But among all these
riches, they also found an ancient tablet detailing the secrets of these
people — how they could safely alter the shape of other people safely using a
technique known as "surgery".
Your slavers made sure to jolt this knowledge
down before returning to the surface, both with riches and with the new
<<if $gOutcome == 'crit'>>
knowledge, surprisingly with only minor injuries.
<<else>>
knowledge, all dedicated to <<rep $g.fighter>>.
<</if>>
</p>
<p>
The expedition investors took some of the treasures as payment, but left your
slavers with most of the loot.
<<if $gOutcome == 'crit'>>
Your slavers were careful not to pass on
the secret knowledge to them, and this knowledge now belongs to your company
and your company alone.
<<else>>
Your slavers spent a significant chunk of the loot
trying to remember and forget <<reps $g.fighter>> sacrifices,
leaving your company with only a portion of the treasure.
But you also now possess the lost knowledge of the past,
which will surely be useful in the future of your company.
<</if>>
</p>
<</if>><p>
Your slavers never returned to the fort after departing for the
expedition... Perhaps you will see them again some day, or perhaps not.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaknight1 = new setup.UnitCriteria(
null, /* key */
'Dragon Knight', /* name */
[
setup.trait.subrace_dragonkin,
setup.trait.bg_knight,
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_dominant,
setup.trait.per_honorable,
setup.trait.skill_ambidextrous,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.race_demon,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
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_roleplay_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.subrace_dragonkin,
setup.trait.magic_light,
setup.trait.magic_fire,
],
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.value_high6),
],
{
}
)>>
<<run new setup.QuestTemplate(
'king_of_dragons', /* key */
"King of Dragons", /* Title */
"darko", /* Author */
[
'sea',
'veteran',
'order',
'upgrade',
'favor',
'legendary',
], /* tags */
4, /* weeks */
16, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'knight2': _criteriaknight1,
'knight1': _criteriaknight1,
'slave': _criteriaslave, },
{ /* actors */
},
[ /* costs */
],
'Quest_king_of_dragons',
setup.qdiff.extreme75, /* difficulty */
[ /* outcomes */
[
'Quest_king_of_dragonsCrit',
[
setup.qc.Outcomes('success'),
setup.qc.MoneyUnitValue('slave', 0.5, 100000),
],
], [
'Quest_king_of_dragonsCrit',
[
setup.qc.MissingUnitForever('slave'),
setup.qc.IfThenElse(
setup.qres.HasItem(setup.item.wings_technology),
setup.qc.Favor('dragonkin', 500),
setup.qc.Item(setup.item.wings_technology),
),
setup.qc.SetCooldownQuest(null, 50),
],
], [
'Quest_king_of_dragonsCrit',
[
setup.qc.MissingUnit('trainer'),
],
], [
'Quest_king_of_dragonsCrit',
[
setup.qc.MissingUnitRecapture('knight1', 'capturedhard'), ],
], ],
[
[setup.questpool.sea, setup.rarity.legendary],
], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
], /* restrictions to generate */
)>><p>
The king of dragons — the title only one dragonkin in the entire world holds.
It is said that the king of dragons lives 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 at all times who were more than prepared
to breathe scorching fire on any unlucky interlopers.
</p>
<<if $inventory.isHasItem('wings_technology')>>
<p>
You've been there before, making a dangerous deal with the king of dragons.
He offered to buy more slaves from you, and you can follow up on this offer.
While you already have the <<rep setup.item.wings_technology>>,
this could prove to be a way to get in the dragonkin's good graces,
which is all things considered, very difficult to do.
</p>
<<else>>
<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: the <<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>
<</if>>
<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 sat upon his gilded throne, surrounded by multiple varieties of slaves who
were all too busy either servicing him or impaling themselves on the various sex
toys spread around the room.
</p>
<<if $gOutcome == 'failure'>>
<p>
The king was rather indifferent by the quality of <<rep $g.slave>>, as he
already has too many slaves. But <<reps $g.trainer>> insistence during the
negotiation raised the king's ire, and instead he decided to enslave <<yourrep
$g.trainer>> as punishment for the 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>
<<elseif $gOutcome == 'disaster'>>
<p>
The king was 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. <<Yourrep
$g.knight1>> knight1|was swiftly subdued, to be taken into his dungeons
and began training as a slave. Your other slavers were escorted outside as they tried
their best not to think too much of what fate awaits their former comrade.
</p>
<<else>>
<<if $gOutcome == 'crit'>>
<p>
The king were impressed by the quality of <<yourrep $g.slave>> and the presentation of the slave given
<<uadv $g.trainer>> by your slavers.
<<set _greg = setup.selectUnit([$g.knight1, $g.knight2, $g.trainer], {trait: 'per_gregarious'})>>
<<if _greg>>
<<Reps _greg>> eloquence certainly helped.
<</if>>
<<set _sly = setup.selectUnit([$g.knight1, $g.knight2, $g.trainer], {trait: 'per_sly'})>>
<<if _sly>>
<<Reps _sly>> silver tongue certainly helped.
<</if>>
Your slavers did not even need to negotiate that hard for the king to agree
to
<<if $inventory.isHasItem('wings_technology')>>
put out good words about your company to his fellow dragonkins in exchange for the slave
<<else>>
exchange the slave with a copy of the artifact <<rep
setup.item.wings_technology>>
<</if>>
— in fact, the king was so impressed that he
decided to pay your slavers some of the slave's worth of value in hard coins.
</p>
<<else>>
<p>
The king was rather indifferent by the quality of <<yourrep $g.slave>>, as he
already has too many slaves.
But your slavers managed to <<uadv $g.trainer>>
convinced him and presented 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
<<if $inventory.isHasItem('wings_technology')>>
putting out good words about your company to the rest of the dragonkins.
<<else>>
a copy of <<rep setup.item.wings_technology>>.
<</if>>
</p>
<</if>>
<p>
Once the audience is over, your slavers were escorted out of the castle. They
were able finally breathe a sigh of relief once they arrive back at the boat,
for the air was simultaneously both tense and arousing throughout castle the
compound.
Throughout the journey back home, they tried not to think too hard what fate
awaits <<rep $g.slave>>, but one thing for sure —- they wouldn't want to be in
<<their $g.slave>> manacles!
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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.Job(setup.job.slaver),
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: 3,
}
)>>
<<run new setup.QuestTemplate(
'mastery_of_magic', /* key */
"Mastery of Magic", /* Title */
"darko", /* Author */
[ 'sea',
'veteran',
'trait',
'prep',
'rare',
], /* tags */
8, /* weeks */
16, /* expiration weeks */
{ /* roles */
'you': [_criteriayou, 3.0], },
{ /* actors */
'sage': 'all', },
[ /* costs */
],
'Quest_mastery_of_magic',
setup.qdiff.hard51, /* difficulty */
[ /* outcomes */
[
'Quest_mastery_of_magicCrit',
[
setup.qc.Outcomes('success'),
setup.qc.ItemPool(setup.itempool.all_good), ],
], [
'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),
],
], [
'Quest_mastery_of_magicFailure',
[
],
], [
'Quest_mastery_of_magicDisaster',
[
setup.qc.TraumatizeRandom('you', 12), ],
], ],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.uncommon],
],
[ /* 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.isHasRemovableTrait(_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 across the <<lore region_sea>> who now spend most of <<their
$g.sage>> time helping others unlock their full 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_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 <<rep
_magic>>. Moved by your eagerness to learn, the sage took you as a student in
a mentorship that lasted for almost two months.
</p>
<p>
Within these two months, you learned so much about the nuances of your <<rep
_magic>> magic that you never know was always there.
You learned that
<<if _magic == setup.trait.magic_fire>>
<<lore magic_fire>> is capable than much more than simple
destruction —- With proper focus, you learned how to channel holy fire that can
drive away demons and corruptions alike like paladins of legends.
<<elseif _magic == setup.trait.magic_water>>
<<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>>
<<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>>
<<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>>
<<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>>
<<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 spent the rest of the months practicing away your magic, unlocking the
hidden depths of talent you always have for them, but you never realized.
</p>
<p>
The two months you spent with the sage flied past like an arrow, and before
you knew 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 tutelage at an end, you thanked your mentor for the two months of
guidance and finally headed back home to your family of slavers.
</p>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
It seemed that you have greatly impressed your mentor and <<they $g.sage>>
gave you an incredibly rare potion as a parting gift.
</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 <<rep
_magic>>. Moved by your eagerness to learn, the sage took you as a student in
a mentorship that lasted for almost two months.
</p>
<p>
You underwent a rigorous studying regime under the mentorship, but even
after all these hard work you did not feel as if your control over <<rep
_magic>> had improve the slightest. Finally after two months of what felt
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 <<lore region_sea>> turned out to be an incredibly foolish and dangerous
affair, as you learned the hard way. Your ship was attacked by
unspeakable creatures of the sea, which left you stranded alone in an
uninhabited island. It took you two months before you were rescued by your
slavers.
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
'quest_outcasts_of_dragons1',
"broken",
'subrace_dragonkin', /* pools */
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.Mindbreak('unit'),
],
)>>
<<run new setup.UnitGroup(
'quest_outcasts_of_dragons2',
"dragon",
'subrace_dragonkin', /* pools */
0,
[
setup.qc.BgTraitReset('unit', setup.trait.bg_unemployed),
],
)>>
<<run new setup.QuestTemplate(
'outcasts_of_dragons', /* key */
"Outcasts of Dragons", /* Title */
"darko", /* Author */
[ 'sea',
'veteran',
'scaley',
'unit',
'ire',
'legendary',
], /* tags */
10, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'tamer1': setup.qu.dragontamer,
'tamer2': setup.qu.dragontamer,
'informer': setup.qu.informer, },
{ /* actors */
'dragon': 'quest_outcasts_of_dragons2',
'broken': 'quest_outcasts_of_dragons1', },
[ /* costs */
],
'Quest_outcasts_of_dragons',
setup.qdiff.harder79, /* difficulty */
[ /* outcomes */
[
'Quest_outcasts_of_dragonsCrit',
[
setup.qc.Ire('dragonkin', 2),
setup.qc.Slave('dragon', "a|was a dragonkin exiled from a|their tribe for an unspeakable crime", false), ],
], [
'Quest_outcasts_of_dragonsSuccess',
[
setup.qc.Slave('broken', "a|was a dragonkin exiled from a|their tribe for an unspeakable crime, and 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, setup.rarity.legendary],
], /* 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 a slave and a slaver, for
they are usually adept in many fields, as well as having the rare ability to take flight.
While there are instances of dragonkins found in the main continent of
<<lore continent_main>>, they are incredibly rare.
</p>
<p>
You have heard rumors that the dragonkins had recently 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 the exiled dragonkin.
<<set _fire = setup.selectUnit([$g.tamer1, $g.tamer2], {trait: 'magic_fire'})>>
<<if _fire>>
The dragonkin's fire breath were countered by <<reps _fire>> own fire magic.
<</if>>
<<set _light = setup.selectUnit([$g.tamer1, $g.tamer2], {trait: 'magic_light'})>>
<<if _light>>
<<Rep _light>> used <<their _light>> mastery over light magic to blind the dragonkin,
giving your slavers a slight edge.
<</if>>
<<set _brave = setup.selectUnit([$g.tamer1, $g.tamer2], {trait: 'per_brave'})>>
<<if _brave>>
When an opening presented itself, <<rep _brave>> led the slavers, charging bravely
into the dragonkin.
<</if>>
<<set _agg = setup.selectUnit([$g.tamer1, $g.tamer2], {trait: 'per_aggressive'})>>
<<if _agg>>
<<Reps _agg>> natural aggression gave <<them _agg>> an edge during the intense fight.
<</if>>
After an intense fight, emerged victorious.
Your slavers were not taking any chances and bound the captive dragonkin 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 had 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 somehow?
</p><p>
<<Yourrep $g.informer>> acted on a bad information and instead led your slavers
into an ambush site. <<Rep $g.tamer1>> and <<utheirrel $g.tamer1 $g.tamer2>>
<<rep $g.tamer2>> fought for their lives,
while the ambushers attempted to subdue your slavers in an attempt to capture them to
be trained as exotic pets. In the end, your slavers managed to escape back to the ship and
returned home, but after sustaining heavy injuries.
</p><p>
<<Rep $g.informer>> managed to track the dragonkin to a remote island in the
<<lore region_sea>>. Once there, <<rep $g.tamer1>> and <<utheirrel $g.tamer1 $g.tamer>>
<<rep $g.tamer2>> fought <<uadv $g.tamer1>> against the exiled dragonkin.
But even with the sheer advantage of number, your slavers were
no match for the mighty dragonkin. They were incinerated by the
dragonkin's fire breath, and got severely injured.
<<Yourrep $g.informer>> had to basically beg to allow <<them $g.informer>>
to take <<their $g.informer>>
comrades back home and forget that all this humiliation ever happened, which
the dragonkin allowed with the exception of <<rep $g.tamer2>>, whom <<they $g.dragon>> intended
to keep as a pet.
<<urescuenow $g.tamer2>>.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'pirates_ahoy', /* key */
"Pirates Ahoy", /* Title */
"darko", /* Author */
[ 'sea', 'unit', 'money', 'ire',
], /* tags */
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'navigator': setup.qu.navigator,
'pirate2': setup.qu.pirate,
'pirate1': setup.qu.pirate, },
{ /* actors */
'victim': 'subrace_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', "a|was a seafarer aboard an unfortunate ship that was attacked by your company", false), ],
], [
'Quest_pirates_ahoySuccess',
[
setup.qc.Slave('victim', "a|was a seafarer aboard an unfortunate ship that was 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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
Pirates, Ahoy! If you ever wants to be a pirate, the <<lore region_sea>> 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 across the seas.
You can send a group of wannabe-pirates 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><<if $g.victim.isMale()>>
<<else>>
<<questimage 'pirates_ahoy_female.jpg'>>
<</if>>
<p>
Your slavers encountered a trading ship, who offered no resistance as your
slavers, led by <<rep $g.pirate1>>, <<uadv $g.pirate1>>
boarded and raided the entire ship.
They plundered the many valuables on the
ship as well as perusing the available booties before returning back to their
ship with a new slave <<rep $g.victim>>
<<set _att = setup.selectUnit([$g.pirate1, $g.pirate2, $g.navigator], {trait: 'per_attentive'})>>
<<if _att>>
that <<rep _att>> had picked out of
<<else>>
carefully chosen among
<</if>>
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
the sole passenger <<themself $g.victim>> to be trained as a new slave back at the fort.
</p><p>
Unfortunately, the <<lore region_sea>> are not for the faint-hearted pirates. Your
slavers were harried by a raging storm as soon as they departed, which
damaged most of their ship and forced them to retreat back into your fort
before even managing to venture deep into the waters.
</p><p>
Your slavers learned the hard way that it requires more than just brawn to be a good pirate.
They were assaulted by real pirates, and there was no chance that your slavers could defeat them.
Ultimately, your slavers surrendered to the pirates. The pirates proceeded to make use
of them for entertainment (being "bootified", as they put it)
before mercifully returning back to their ship after much debauchery,
but not before taking <<yourrep $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><<run new setup.UnitGroup(
"prayer_of_protection0",
"Priest",
'subrace_humansea', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_priest),
setup.qc.DecreaseTraitsRandom('unit', [setup.trait.per_evil, setup.trait.magic_dark, setup.trait.magic_dark_master], 3, true),
setup.qc.AddTraitsRandom('unit', [setup.trait.magic_light_master, setup.trait.per_submissive, setup.trait.per_honorable], 1, false, false),
setup.qc.Trait('unit', setup.trait.face_attractive),
],
)>>
<<run new setup.QuestTemplate(
'prayer_of_protection', /* key */
"Prayer of Protection", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'trait',
],
5, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'priest': [ setup.qu.priest, 1],
'devout1': [ setup.qu.devout, 1],
'devout2': [ setup.qu.devout, 1],
},
{ /* actors */
'head': 'prayer_of_protection0',
},
[ /* costs */
],
'Quest_prayer_of_protection',
setup.qdiff.hard47, /* difficulty */
[ /* outcomes */
[
'Quest_prayer_of_protectionCrit',
[
setup.qc.Blessing('priest', 2, 'blessing_protection8'),
setup.qc.Blessing('devout1', 1, 'blessing_protection8'),
setup.qc.Blessing('devout2', 1, 'blessing_protection8'),
setup.qc.Item(setup.item.potion_protection),
],
],
[
'Quest_prayer_of_protectionCrit',
[
setup.qc.Blessing('priest', 1, 'blessing_protection8'),
setup.qc.Blessing('devout1', 1, 'blessing_protection8'),
setup.qc.Blessing('devout2', 1, 'blessing_protection8'),
],
],
[
'Quest_prayer_of_protectionCrit',
[
],
],
[
'Quest_prayer_of_protectionCrit',
[
setup.qc.Injury('priest', 5),
setup.qc.Injury('devout1', 5),
setup.qc.Injury('devout2', 5),
setup.qc.MissingUnit('priest'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<include 'Opportunity_blessing_of_protection'>>
<p>
You have decided to try and patron the monastery.
</p><p>
You've sent three people for this mission.
<<Yourrep $g.priest>> will be the leader of the group, and will pose as the lead pilgrim.
<<if $g.priest.isHasTrait('per_evil')>>
<<They $g.priest>> will have to try <<their $g.priest>> hardest hiding <<their $g.priest>> evil tendencies for the mission.
<<elseif $g.priest.isHasTrait('per_honorable')>>
<<They $g.priest>> is a natural do-gooder, making it much easier for <<them $g.priest>> to perform on the role.
<</if>>
Meanwhile, <<rep $g.devout1>> and <<utheirrel $g.devout1 $g.devout2>> <<rep $g.devout2>> will pose as the devouts, also similarly looking for blessings.
</p>
<p>
Once inside, the head priest, a surprisingly young <<lady $g.head>>, greeted them and became their guide throughout the place.
Looking at the head priest's <<if $g.head.isFemale()>>
divine beauty,
<<else>>
radiant handsomeness,
<</if>>
your slavers almost had second thoughts about choosing to patron <<them $g.head>> instead, but such thoughts are completely gone by the time they began their patronage.
</p>
<p>
Obtaining the blessing of protection turned out not to be as simple as it sounded, and your slavers had to meditate long hours with the head priest. Your slavers took it with various difficulty.
<<set _agg = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_aggressive'})>>
<<if _agg>>
<<Yourrep _agg>> had it harder than the others, given how uncalm <<their _agg>> aggressive mind is.
<</if>>
<<set _calm = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_calm'})>>
<<if _calm>>
Meditation came naturally to <<rep _calm>>, and <<their _calm>> patience and calmness were almost infective to the rest of the slavers.
<</if>>
<<set _cor = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'corrupted'})>>
<<if _cor>>
<<Reps _cor>> corruption greatly interferes with the meditation, filling <<therace _cor>> with many thoughts of desecrating the place with sex.
<</if>>
<<set _hon = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_honorable'})>>
<<if _hon>>
Being an honorable <<urace _hon>>, <<rep _hon>> finds the meditation to be quite serene, a brief respite from <<their _hon>> usual job as a slaver.
<</if>>
<<set _evil = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_evil'})>>
<<if _evil>>
<<Rep _evil>> couldn't fully conceal <<their _evil>> evil thoughts during the meditation, and it distracted <<them _evil>> quite a few times.
<</if>>
<<set _sub = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_submissive'})>>
<<if _sub>>
Having to stay still unmovingly in meditation was a natural for <<rep _sub>> — a perfectly submissive pose.
<</if>>
<<set _dom = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_dominant'})>>
<<if _dom>>
Meanwhile <<rep _dom>> can't stop thinking about how well the head priest would serve as a slave, and how <<they _dom>> would dominate <<them $g.head>>.
<</if>>
The meditations continued for several weeks, until the head priest finally called it over.
</p>
<<if $gOutcome == 'failure'>>
<p>
Unfortunately, your slavers were not able to receive the blessings at the end — despite the lengthy meditation, their minds were still clouded by evil thoughts that were perfectly visible to the head priest. In the end, the head priest simply shook <<their $g.head>> head, ushering your slavers to return one day to try again.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Unknown to your slavers, the head priest had a very different idea for what <<they $g.head>> head|was planning to do with your slavers. Pretending the meditation was successful, <<they $g.head>> ushered your slavers into the innermost sanctum of the complex, where <<they $g.head>> began chanting a ritual. By the time your slavers caught into the scheme, they were already too deep into the ritual and they were powerless to do anything as their life essence was visibly absorbed and transported into the priest. It seemed that the priest were using them as offerings to bestow blessings upon <<themself $g.priest>>. In the end, <<rep $g.devout1>> and <<rep $g.devout2>> were discarded from the monastery, while <<rep $g.priest>> priest|was kept personally by the head priest for reasons unknown. <<uneedrescue $g.priest>>, before more essence is drained from the poor <<urace $g.priest>>'s body...
</p>
<<else>>
<p>
In the end, the meditation was successful, and your slavers mind were focused and ready to receive the blessings. The head priest led them to the inner sanctum, where they began the blessing ritual. Light shone above each of your slavers, and a shield-like symbol were absorbed into their bodies, bestowing a Blessing of Protection unto them. The next time they were supposed to be injured, the blessing will take their place instead — a very useful protection.
</p>
<p>
Having completed the ritual, your slavers bid the kind head priest goodbye. The thoughts of enslaving <<them $g.head>> was completely gone from their cleansed thoughts.
<<if $gOutcome == 'crit'>>
Before your slavers leave, the head priest kindly gave them a parting gift: the rare <<rep setup.item.potion_protection>>.
<</if>>
Your slavers sailed back home, where their cleansed mind will surely get filled back with sex and debauchery in no time at all.
</p>
<</if>><<run new setup.UnitGroup(
"protection_abduction0",
"Dark Priest",
'subrace_humansea', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_priest),
setup.qc.TraitReplace('unit', setup.trait.per_evil),
setup.qc.Trait('unit', setup.trait.magic_dark_master),
setup.qc.Trait('unit', setup.trait.face_attractive),
],
)>>
<<set _criteriadevout1 = new setup.UnitCriteria(
null, /* key */
'"Devout\"', /* name */
[
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1,
slaving: 1,
aid: 1,
}
)>>
<<set _criteriadevout2 = new setup.UnitCriteria(
null, /* key */
'"Devout\"', /* name */
[
setup.trait.tough_nimble,
setup.trait.per_calm,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_hypnotic,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.tough_tough,
setup.trait.per_aggressive,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_honorable,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1,
slaving: 1,
aid: 1,
}
)>>
<<run new setup.QuestTemplate(
'protection_abduction', /* key */
"Protection Abduction", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'unit',
'danger',
],
6, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'priest': [ setup.qu.priest, 1],
'devout1': [ _criteriadevout1, 1],
'devout2': [ _criteriadevout2, 1],
},
{ /* actors */
'head': 'prayer_of_protection0',
'dark': 'protection_abduction0',
},
[ /* costs */
],
'Quest_protection_abduction',
setup.qdiff.hardest49, /* difficulty */
[ /* outcomes */
[
'Quest_protection_abductionCrit',
[
setup.qc.Item(setup.item.potion_protection),
setup.qc.Outcomes("success"),
],
],
[
'Quest_protection_abductionCrit',
[
setup.qc.OneRandomSeed([
setup.qc.Slave('head', "a|was a priest bestowing the Blessing of Protection from a secluded monastery in the Southern Seas", undefined),
setup.qc.Slave('dark', "a|was a dark priest pretending to bestow Blessing of Protection unto others, but secretly used the pilgrims to fuel a|their own rituals", undefined)
]),
setup.qc.Injury('devout1', 1),
setup.qc.Injury('devout2', 1),
setup.qc.SetCooldownOpportunity('blessing_of_protection', 50),
],
],
[
'Quest_protection_abductionCrit',
[
setup.qc.MissingUnit('priest'),
setup.qc.Injury('devout1', 5),
setup.qc.Injury('devout2', 5),
],
],
[
'Quest_protection_abductionCrit',
[
setup.qc.MissingUnit('devout1'),
setup.qc.MissingUnit('devout2'),
setup.qc.Injury('priest', 5),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<include 'Opportunity_blessing_of_protection'>>
<p>
You have decided to try and kidnap one of the priests.
</p><<if $gQuest.getSeed() % 2 == 1>>
<<set $g.head = $g.dark>>
<</if>>
<p>
You've sent three people for this mission.
<<Yourrep $g.priest>> will be the leader of the group, and will pose as the lead pilgrim.
<<if $g.priest.isHasTrait('per_evil')>>
<<They $g.priest>> will have to try <<their $g.priest>> hardest hiding <<their $g.priest>> evil tendencies for the mission.
<<elseif $g.priest.isHasTrait('per_honorable')>>
<<They $g.priest>> is a natural do-gooder, making it much easier for <<them $g.priest>> to perform on the role.
<</if>>
Meanwhile, <<rep $g.devout1>> and <<utheirrel $g.devout1 $g.devout2>> <<rep $g.devout2>> will pretend to be the devouts, also similarly looking for blessings, but they will be responsible for securing the priest once they find an opening...
</p>
<p>
Once inside, the head priest, a surprisingly young <<lady $g.head>>, greeted them and became their guide throughout the place.
Looking at the head priest's
<<if $g.head.isFemale()>>
divine beauty,
<<else>>
radiant handsomeness,
<</if>>
your slavers felt they made the right decision to kidnap the priest instead of patroning them.
</p>
<p>
To obtain the Blessing of Protection, your slavers had to undergo many hours of meditation alone with the head priest. Despite the many guards around the place, your slavers judged that meditation hour is probably their best opportunity to kidnap and secure the head priest.
Still, they had to feign meditation first to not draw undue attention for the time being.
<<set _agg = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_aggressive'})>>
<<if _agg>>
<<Yourrep _agg>> had it harder than the others to conceal <<their _agg>> true intention, given how uncalm <<their _agg>> aggressive mind is.
<</if>>
<<set _calm = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_calm'})>>
<<if _calm>>
<<Reps _calm>> calm and calculative mind show no hint on what <<their _calm>> true goal was.
<</if>>
<<set _cor = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'corrupted'})>>
<<if _cor>>
<<Reps _cor>> corruption greatly interferes with the meditation, filling <<therace _cor>> with many thoughts of desecrating the priest <<themself _cor>>, and <<their _cor>> face occasionally grew lewd.
<</if>>
<<set _hon = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_honorable'})>>
<<if _hon>>
Being an honorable <<urace _hon>>, <<rep _hon>> finds the idea of kidnapping the priest quite dishonorable, but <<they _hon>> ultimately resigned <<themself _hon>> to <<their _hon>> job.
<</if>>
<<set _evil = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_evil'})>>
<<if _evil>>
<<Rep _evil>> couldn't fully conceal <<their _evil>> giddiness at getting to kidnap the priest very soon.
<</if>>
<<set _sub = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_submissive'})>>
<<if _sub>>
Having no intention to dominate the priest <<themself _sub>>, <<rep _sub>> had it easier than others to conceal <<their _sub>> intentions.
<</if>>
<<set _dom = setup.selectUnit([$g.head, $g.devout1, $g.devout2], {trait: 'per_dominant'})>>
<<if _dom>>
Meanwhile <<rep _dom>> can't stop thinking about how well the head priest would serve as a slave, and how <<they _dom>> would dominate <<them $g.head>>. <<Their _dom>> face sometimes showed a strange, odd expression.
<</if>>
</p>
<<if $gOutcome == 'failure' or $gOutcome == 'disaster'>>
<p>
Unfortunately, the priest somehow caught to your slaver's devious plans, and things went very wrong. Your slavers found themselves fighting against the monastery guards — while normally they would be no match against your slavers, these guards are blessed with the Blessing of Protection, rendering them rather immune to injuries.
Eventually,
<<if $gOutcome == 'disaster'>>
Only <<rep $g.priest>> priest|was
<<else>>
Only <<rep $g.devout1>> and <<rep $g.devout2>> were
<</if>>
able to make it back to the ship, albeit suffering injuries.
<<if $gOutcome == 'disaster'>>
<<They $g.priest>> never knew what happened to their teammates, but it's probably nothing good and you should work fast to rescue them...
<<else>>
They never knew what happened to <<rep $g.priest>>, but it's probably nothing good and you should work fast to rescue <<them $g.priest>>...
<</if>>
</p>
<<else>>
<p>
The farce continued for several weeks. Your slavers were not found out, and after a while they were designated to meditate on a different part of the island, away from the monastery. A perfect opportunity to launch their plan.
</p>
<p>
Once alone and secluded, the head priest was no match for your slavers' sheer number advantage, and before long one bound and gagged <<urace $g.head>> head|was at their mercy.
They made <<their $g.head>> way back to the small harbor, and they had to fight a small number of guards keeping the harbor safe. The guards fought surprisingly fierce, and to your slavers' dismay, they were blessed with the Blessing of Protection, rendering them impervious to injuries.
Your slavers suffered minor injuries, but they were able to retreat back to their ship and sailed away from the monastery.
</p>
<p>
Once inside the ship, they reviewed their loot.
<<if $gQuest.getSeed() % 2 == 0>>
A perfectly well-to-do priest fully bound and ready to serve.
<<else>>
But something was not right about their captive. Instead of finding a pristine and innocent priest, the priest they kidnapped turned out to be a dark priest, who had other plans for your slaver was <<they $g.head>> not ended up as your slave.
<</if>>
<<if $gOutcome == 'crit'>>
They also found <<rep setup.item.potion_protection>> inside the priest's pockets.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"betray_the_lizardkins0",
"pirate",
'subrace_humansea', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
],
)>> <<run new setup.UnitGroup(
"betray_the_lizardkins2",
"reg",
'subrace_humankingdom', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
],
)>> <<run new setup.UnitGroup(
"betray_the_lizardkins3",
"Wizard",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
setup.qc.Trait('unit', setup.trait.magic_dark),
],
)>>
<<run new setup.QuestTemplate(
'betray_the_lizardkins', /* key */
"Betray the Lizardkins", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'scaley',
'danger',
'unit',
'veteran',
'ire',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'healer': [ setup.qu.healer, 1],
'archer': [ setup.qu.archer, 1],
'defender': [ setup.qu.defender, 1],
},
{ /* actors */
'lizardkin': 'subrace_lizardkin',
'lizardkin2': 'subrace_lizardkin',
'pirate': 'betray_the_lizardkins0',
'reg': 'betray_the_lizardkins2',
'wiz': 'betray_the_lizardkins3',
},
[ /* costs */
],
'Quest_betray_the_lizardkins',
setup.qdiff.hardest56, /* difficulty */
[ /* outcomes */
[
'Quest_stand_with_the_lizardkinsCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Ire('lizardkin', 6),
setup.qc.Slave('lizardkin2', 'a|was a lizardkin that your slavers kidnapped in the middle of a pirate raid'),
setup.qc.SlaveMarker('pirate'),
setup.qc.SlaveMarker('reg'),
setup.qc.SlaveMarker('wiz'),
],
],
[
'Quest_stand_with_the_lizardkinsCrit',
[
setup.qc.Ire('lizardkin', 6),
setup.qc.Slave('lizardkin', 'a|was a lizardkin that your slavers kidnapped in the middle of a pirate raid'),
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Slave('pirate', "a|was a crew member of a fierce pirate company of the Southern Seas who chose the wrong timing to attack a lizardkin settlement whom your slavers fiercely defended", undefined),
setup.qc.Injury('defender', 6),
setup.qc.Injury('archer', 3),
setup.qc.Injury('healer', 3)
], undefined),
setup.qc.DoAll([
setup.qc.Slave('reg', "a|was a wanna-be pirate from the City of Lucgate who read too much romanticized pirate tales", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.Slave('wiz', "a|was a pirate-wizard who raided settlements in the southern seas in search for more slave crews for a|their ship", undefined),
setup.qc.Corrupt('defender', null, 2),
setup.qc.Corrupt('healer', null, 1)
], undefined)
]),
],
],
[
'Quest_stand_with_the_lizardkinsFailure',
[
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.MissingUnitRecapture('defender', 'capturedmedium'),
setup.qc.Injury('healer', 4),
setup.qc.Injury('archer', 4)
], undefined),
setup.qc.DoAll([
setup.qc.MissingUnit('archer')
], undefined),
setup.qc.DoAll([
setup.qc.MissingUnit('healer'),
setup.qc.Corrupt('healer', null, 2),
setup.qc.Corrupt('archer', null, 1),
setup.qc.Corrupt('defender', null, 1)
], undefined)
]),
],
],
[
'Quest_stand_with_the_lizardkinsFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Ire('lizardkin', 12),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
You've decided to <b>pretend</b> to stand with the sturdy lizardkin folks,
only to kidnap some of them during the no-doubt intense fight...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"stand_with_the_lizardkins0",
"pirate",
'subrace_humansea', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
],
)>> <<run new setup.UnitGroup(
"stand_with_the_lizardkins2",
"reg",
'subrace_humankingdom', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
],
)>> <<run new setup.UnitGroup(
"stand_with_the_lizardkins3",
"Wizard",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
setup.qc.Trait('unit', setup.trait.magic_dark),
],
)>>
<<run new setup.QuestTemplate(
'stand_with_the_lizardkins', /* key */
"Stand with the Lizardkins", /* Title */
"darko", /* Author */
[ /* tags */
'sea',
'scaley',
'danger',
'favor',
'veteran',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'healer': [ setup.qu.healer, 1],
'archer': [ setup.qu.archer, 1],
'defender': [ setup.qu.defender, 1],
},
{ /* actors */
'lizardkin': 'subrace_lizardkin',
'pirate': 'stand_with_the_lizardkins0',
'reg': 'stand_with_the_lizardkins2',
'wiz': 'stand_with_the_lizardkins3',
},
[ /* costs */
],
'Quest_stand_with_the_lizardkins',
setup.qdiff.hardest52, /* difficulty */
[ /* outcomes */
[
'Quest_stand_with_the_lizardkinsCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Favor('lizardkin', 150),
setup.qc.Favor('humansea', 100),
setup.qc.Favor('dragonkin', 50),
setup.qc.SlaverMarker('lizardkin'),
setup.qc.SlaveMarker('pirate'),
setup.qc.SlaveMarker('reg'),
setup.qc.SlaveMarker('wiz'),
],
],
[
'Quest_stand_with_the_lizardkinsCrit',
[
setup.qc.Favor('lizardkin', 150),
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Slave('pirate', "a|was a crew member of a fierce pirate company of the Southern Seas who chose the wrong timing to attack a lizardkin settlement which your slavers fiercely defended", undefined),
setup.qc.Injury('defender', 6),
setup.qc.Injury('archer', 3),
setup.qc.Injury('healer', 3)
], undefined),
setup.qc.DoAll([
setup.qc.Slave('reg', "a|was a wanna-be pirate from the City of Lucgate who read too much romanticized pirate tales", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.Slave('wiz', "a|was a pirate-wizard who raids settlements in the southern seas in search of more slave crews for a|their ship", undefined),
setup.qc.Corrupt('defender', null, 2),
setup.qc.Corrupt('healer', null, 1)
], undefined)
]),
],
],
[
'Quest_stand_with_the_lizardkinsFailure',
[
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.MissingUnitRecapture('defender', 'capturedmedium'),
setup.qc.Injury('healer', 4),
setup.qc.Injury('archer', 4)
], undefined),
setup.qc.DoAll([
setup.qc.MissingUnit('archer')
], undefined),
setup.qc.DoAll([
setup.qc.MissingUnit('healer'),
setup.qc.Corrupt('healer', null, 2),
setup.qc.Corrupt('archer', null, 1),
setup.qc.Corrupt('defender', null, 1)
], undefined)
]),
],
],
[
'Quest_stand_with_the_lizardkinsFailure',
[
setup.qc.Outcomes("failure"),
setup.qc.Ire('lizardkin', 12),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
You've decided to stand with the sturdy lizardkin folks and help them fight
whatever raid that is coming their way.
</p><<set _betray = ($gQuest.getTemplate().key == 'betray_the_lizardkins')>>
<p>
The lizardkins were understandably wary of your slavers' offer of
<<if _betray>>
"help",
<<else>>
help,
<</if>>
and kept their distance from your slavers, who setup their own camp someway a
distance from the settlement. After a few days, the fated war horn was sounded,
and your slavers
<<if _betray>>
rushed into the settlement, not forgetting their ultimate goal of getting
their <<uhands $g.defender>> on one of these scaly people...
<<else>>
rushed into the settlement...
<</if>>
</p>
<<if $gQuest.getSeed() % 3 == 0>>
<p>
Your slavers were greeted with the sight of a battlefield happening on the shore of the
settlements. The lizardkins fought bravely, but the pirates were seemingly
fighting on equal grounds with the fearsome scaley warriors.
<<Yourrep $g.defender>> joined into the fray to turn the favor in the
lizardkin's favor — backed with <<reps $g.healer>> masterful healing and
<<reps $g.archer>> long range support, your slavers weaved through the
battlefield,
downing pirate after pirate in quick succession, although they suffered some
injuries in the grueling process.
</p>
<<if _betray>>
<p>
Surprised by your slavers reinforcement, the pirate captain wisely ordered a
retreat, cutting <<their $g.pirate>> losses.
As the lizardkin continued to pursue the fleeing invaders, your slavers
noticed this to be the perfect opportunity to grab a fallen lizardkin
<<if $gOutcome == 'crit'>>
or two
<</if>>
aside.
<<Rep $g.archer>> stealthily scoured the battlefield, and managed to found
<<if $gOutcome == 'crit'>>
two downed lizardkins,
<<else>>
a downed lizardkin,
<</if>>
whom your slavers tied up and hide behind the bushes.
Eventually the pirate withdrew their ship, and peace returned to the settlement for the moment.
</p>
<<else>>
<p>
Surprised by your slavers reinforcement, the pirate captain wisely ordered a
retreat, cutting <<their $g.pirate>> losses as the pirates struggled to
rescue their teammates back onto the ship. Eventually the pirate withdrew
their ship, and peace returned to the settlement for the moment.
</p>
<</if>>
<p>
<<if _betray>>
Pretending nothing else happened, while surveying
<<else>>
Surveying
<</if>>
the battlefield, your slavers managed to notice one of the pirates who
remained unconscious from the fight. After receiving
the gratitude from the lizardkins,
your slavers packed the unconscious pirate to your ship, to be brought home as an extra prize.
</p>
<<elseif $gQuest.getSeed() % 3 == 1>>
<p>
Once arrived, they were greeted by a mighty ship on the shore of the
settlement, captained by what seems to be a very young <<lass $g.reg>> —
clearly a <<rep setup.trait.subrace_humankingdom>>. "Your money or your
life!," shouted the <<lass $g.reg>> dramatically, just before <<they $g.reg>>
stumbled across the edge of <<their $g.reg>> ship and down into the sea.
</p>
<p>
Being in the sea means the captain was no match against the lizardkin's swimming prowess,
and your slavers observed as some of the lizardkin warriors dived into the
sea to secure the captain. With the captain held hostage, the ship
second-in-command ordered an immediate retreat, and soon after the ship was
gone from your slavers' sight.
<<if _betray>>
Unfortunately, this meant no battle took place, and there was no opportunity for your slavers
to get their <<uhands $g.defender>> on the lizardkins...
<</if>>
</p>
<p>
Once the captain was secured, after some questioning it seemed that this
captain was not responsible for the usual threat the settlement often
received. In fact, this was <<their $g.reg>> first venture into the <<lore
region_sea>>, fueled by <<their $g.reg>> parent's money and <<their $g.reg>>
love for pirate tales.
</p>
<p>
<<Yourrep $g.defender>> made sure to put an early end to the captain's career as <<they
$g.defender>> took the captain, together with the lizardkin's gratitude, as
payment for their services.
<<if _betray>>
A gratitude that did not last long, as your slavers were careless and left some hints of what they
were planning to do on their compound, which was discovered soon later by the lizardkins...
<</if>>
</p>
<<elseif $gQuest.getSeed() % 3 == 2>>
<p>
By the time your slavers arrived, the coast had been transformed into a
corrupted battlefield. The pirate captain — a clearly powerful sorcerer —
launched dark magic upon dark magic, which the lizardkin warriors barely
managed to dodge. Using the advantage of surprise, <<rep $g.archer>> notched
a single arrow up onto the ship, catching the wizard by surprise and gravely
injuring <<them $g.archer>>. As the wizard ordered a retreat, <<rep
$g.defender>> and <<utheirrel $g.defender $g.healer>> <<uadv $g.defender>>
charged into the ship, using the pirates' own boarding planks to went inside.
Ignoring the rows of rows of slaves writhing inside the ship, <<rep
$g.defender>> headed into the top of the ship where the wizard is.
</p>
<p>
In a fierce two-to-one duel, your slavers managed to seize victory against
the injured wizard, albeit suffering a corruption here and there.
With the wizard fully secured, the lizardkins freed all the captives inside the ship,
whose mind control were broken as the wizard is rendered unconscious.
<<if _betray>>
Seeing the lizardkins busy rescuing the prisoners, your slavers seized the
opportunity to scour the battlefield for downed lizardkins, before finding
<<if $gOutcome == 'crit'>>
two of them
<<else>>
one of them
<</if>>
at the edge of the battlefield.
Your slavers swiftly bound and gagged
<<if $gOutcome == 'crit'>>
these lizardkins, and hid them
<<else>>
the lizardkin, and hid the lizardkin
<</if>>
aside
until the battle fully ended.
Once that's done, your slavers returned to the "grateful" lizardkins,
<<else>>
Your slavers earned much gratitude from the lizardkins for the timely help,
<</if>>
before heading home secretly bringing the wizard — still alive but fully bound — as an extra bonus prize.
</p>
<</if>>
<<if _betray && $gQuest.getSeed() % 3 != 1>>
<p>
Only when your slavers were already far away from the settlement with their
new slaves in tow did the lizardkin
settlement finally realized some of their missing comrades, who were
struggling in your slavers'
tight bindings... This will surely raise the ire of these lizardkins towards your company, for better
or for worse.
</p>
<</if>>
<<if !_betray && $gOutcome == 'crit'>>
<p>
Words of the good deeds done by your slavers spread far and wide, increasing
your company's reputation not just with the lizardkins, but also with other
settlements in the <<lore region_sea>>.
</p>
<</if>><<set _betray = ($gQuest.key == 'Quest_betray_the_lizardkins')>>
<p>
The lizardkins were understandably wary of your slavers' offer of
<<if _betray>>
"help",
<<else>>
help,
<</if>>
and kept their distance from your slavers, who setup their own camp someway a
distance from the settlement. After a few days, the fated war horn was
sounded, and your slavers rushed into the
<<if _betray>>
settlement with their ultimate goal of capturing one of these scaly beasts as a reward...
<<else>>
settlement...
<</if>>
</p>
<<if $gQuest.getSeed() % 3 == 0>>
<p>
Your slavers were greeted with the sight of a battlefield on the shore of the
settlements. The lizardkins fought bravely, but the pirates were seemingly
fighting on equal grounds with the fearsome warriors.
<<Yourrep $g.defender>> attempted to turn the battle in the lizardkin's favor by <<uadv $g.defender>> charging in, but <<their $g.defender>> <<uinsultnoun $g.defender>> turned out to be <<their $g.defender>> downfall.
</p>
<p>
<<Rep $g.healer>> and <<utheirrel $g.healer $g.archer>> <<rep $g.archer>>
were helpless to watch as <<rep $g.defender>> defender|was struct down, before
being brought into the ship together with several other downed lizardkins no doubt
to be sold together as slaves. The remaining slavers wisely decided to retreat and run
from the fight, nursing their injuries on the way back home to the fort.
<<urescuenow $g.defender>>, before <<they $g.defender>> defender|is sold
together with the lizardkins off to some distant
continent...
</p>
<<elseif $gQuest.getSeed() % 3 == 1>>
<p>
Once arrived, they were greeted by a mighty ship on the shore of the
settlement, captained by what seems to be a very young <<lass $g.reg>> —
clearly a <<rep setup.trait.subrace_humankingdom>>. "Your money or your
life!," shouted the <<lass $g.reg>> dramatically, before ordering <<their
$g.reg>> underlings to attack while the <<lass $g.reg>> <<themself $g.reg>>
sit on a chair on top of the ship.
</p>
<p>
From observing the battle, your slaverd noticed that the pirates were clearly
newbies and they were no match for the lizardkin's prowess. Your slavers
became complacent, which turned out to be a grave mistake as one of the
pirate wannabes snatched <<rep $g.archer>> from behind, and kidnapped
<<therace $g.archer>> unbeknownst to the rest of the team.
</p>
<p>
Only when the ship retreated that your slavers realized what a grave mistake
they had made, being complacent in the <<lore region_sea>>.
</p>
<<elseif $gQuest.getSeed() % 3 == 2>>
<p>
By the time your slavers arrived, the coast had been transformed into a
corrupted battlefield. The pirate captain — a clearly powerful sorcerer —
launched dark magic upon dark magic, which the lizardkin warriors barely
managed to dodge. Attempting to use the advantage of surprise, <<rep
$g.archer>> notched a single arrow up onto the ship, which bounced harmlessly
off the wizard's magical barrier. In retaliation, the wizard launched a dark
sphere of energy, catching <<rep $g.healer>> and hauling <<therace
$g.healer>> afloat to the wizard's ship. Your other slavers were helpless as
they were caught in a corruption spell, visibly transforming in front
of the lizardkins, before losing consciousness.
</p>
<p>
When your slavers regained consciousness, they were the only ones remaining
on the battlefield, and <<rep $g.healer>> healer|was nowhere to be seen. In
perhaps their wisest judgement throughout the quest, they decided to return
quickly to the fort, and reported <<reps $g.healer>> abduction as fast as
possible.
<<uneedrescue $g.healer>>, preferably before the wizard turns <<them $g.healer>> into yet another mindless
sex slave in <<their $g.wiz>> disposal...
</p>
<</if>>
<p>
<<if _betray>>
With the battle not turning the way your slavers wanted, there was simply no opportunity
for them to grab one of the lizardkin warriors as a slave.
<</if>>
<<if $gOutcome == 'disaster'>>
The lizardkins even blamed your company for the losses, accusing your slavers of treachery.
<</if>>
</p><<run new setup.Title(
"quest_southern_isle_pit_fights_champion_0", /* key */
"Southern Isle Pit Fights Champion", /* name */
"Winner of the Southern Isle Pit Fights", /* description */
"won the Southern Isle Pit Fighters", /* unit text */
10000, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_southern_isle_pit_fights_runner_up_1", /* key */
"Southern Isle Pit Fights Runner-Up", /* name */
"Won second place in the Southern Isle Pit Fights", /* description */
"won second place in the Southern Isle Pit Fights", /* unit text */
5000, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.Title(
"quest_southern_isle_pit_fights_contestant_2", /* key */
"Southern Isle Pit Fights Contestant", /* name */
"Participant of the Southern Isle Pit Fights", /* description */
"a|is currently participating in the Southern Isle Pit Fights", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<run new setup.UnitGroup(
"southern_isle_pit_fights_final0",
"final",
[ /* pools */
[setup.unitpool.subrace_demonkin_male, 0.25],
[setup.unitpool.subrace_demonkin_female, 0.25],
[setup.unitpool.subrace_lizardkin_male, 0.25],
[setup.unitpool.subrace_lizardkin_female, 0.25],
[setup.unitpool.subrace_dragonkin_male, 0.01],
[setup.unitpool.subrace_dragonkin_female, 0.01],
[setup.unitpool.subrace_demon_male, 0.01],
[setup.unitpool.subrace_demon_female, 0.01],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_verystrong, setup.trait.tough_tough, setup.trait.face_hideous, setup.trait.height_giant, setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.per_dominant], 2, true, false),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_dominance_advanced),
],
)>>
<<set _criteriahandler = new setup.UnitCriteria(
null, /* key */
'Gladiator Handler', /* name */
[
setup.trait.bg_mercenary,
setup.trait.bg_thug,
setup.trait.per_smart,
setup.trait.per_attentive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_creative,
],
[
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
slaving: 1.5,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Gladiator', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_mercenary,
setup.trait.bg_soldier,
setup.trait.bg_thug,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
],
[
setup.trait.bg_slave,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.tough_nimble,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
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.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.HasTitle('quest_southern_isle_pit_fights_contestant_2'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'southern_isle_pit_fights_final', /* key */
"Southern Isle Pit Fights: Final", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'gore',
'sea',
'prep',
'special',
'money',
'item',
'trait',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'handler': [ _criteriahandler, 3],
'slave': _criteriaslave,
},
{ /* actors */
'enemy': 'southern_isle_pit_fights_final0',
},
[ /* costs */
],
'Quest_southern_isle_pit_fights_final',
setup.qdiff.hell1, /* difficulty */
[ /* outcomes */
[
'Quest_southern_isle_pit_fights_finalCrit',
[
setup.qc.SetCooldownQuest('southern_isle_pit_fights_sale', 10),
setup.qc.VarRemove('pit_fight_progress'),
setup.qc.RemoveTitleGlobal('quest_southern_isle_pit_fights_contestant_2'),
setup.qc.SetCooldownQuest('southern_isle_pit_fights', 100),
setup.qc.IfThenElse(
setup.qres.VarEqual('pit_fight_result', 'win'),
setup.qc.DoAll([
setup.qc.AddTitle('slave', 'quest_southern_isle_pit_fights_champion_0'),
setup.qc.RemoveTitle('slave', 'quest_southern_isle_pit_fights_runner_up_1'),
setup.qc.AddTitle('enemy', 'quest_southern_isle_pit_fights_runner_up_1'),
setup.qc.AddTag('enemy', 'pit_fight_final'),
setup.qc.AddUnitToUnitGroup('enemy', 'pit_fight_sale0'),
setup.qc.Injury('slave', 2),
setup.qc.Money(4000),
setup.qc.EquipmentDirect('brawn_rear_master')
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.VarEqual('pit_fight_result', 'second'),
setup.qc.DoAll([
setup.qc.AddTitle('slave', 'quest_southern_isle_pit_fights_runner_up_1'),
setup.qc.RemoveTitle('slave', 'quest_southern_isle_pit_fights_champion_0'),
setup.qc.Injury('slave', 10),
setup.qc.Money(4000)
], undefined),
setup.qc.DoAll([
setup.qc.MissingUnit('slave')
], undefined))
], undefined)),
],
],
[
'Quest_southern_isle_pit_fights_finalCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_finalCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_finalCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.SlaveMarker('enemy'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('quest_southern_isle_pit_fights_contestant_2', {
job_key: 'slave',
}),
setup.qres.VarEqual('pit_fight_progress', '2'),
],
[ /* expiration outcomes */
setup.qc.VarRemove('pit_fight_progress'),
setup.qc.RemoveTitleGlobal('quest_southern_isle_pit_fights_contestant_2'),
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
],
)>><<set _u = setup.getUnit({title: 'quest_southern_isle_pit_fights_contestant_2'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
<<Yourrep _u>> has been entering the famous Southern Isle Pit Fights, and has won the recent two rounds. The invitation for the final rounds is finally here. You can try to enter the slave again with an experienced slave handler, but the final bout is sure going to be incredibly difficult to win...
</p>
<p>
<<successtext 'Important:'>> This quest is special. The outcome of this quests does not depend on the displayed success chances, but rather, it is computed directly from the participant's traits. Match traits to get the best outcome!
</p>
<p>
<<successtext 'Warning:'>> Abandoning this quest will disqualify <<rep _u>> from the current Southern Isle Pit Fights!
</p>
<</if>><<set _criterias = $gQuest.getTemplate().getUnitCriterias()>>
<<set _handler = _criterias['handler'].criteria.computeSuccessModifiers($g.handler, true)>>
<<set _slave = _criterias['slave'].criteria.computeSuccessModifiers($g.slave, true)>>
<<set _crit = _handler.crit + _slave.crit>>
<<set _dis = _handler.disaster + _slave.disaster>>
<<set _score = _crit - 4 * _dis>>
<p>
<<Yourrep $g.handler>> did <<their $g.handler>> best to prepare <<rep $g.slave>> for the upcoming, final and most important fight.
<<They $g.handler>> was already familiar by the rules right now — barefisted, and the winner is decided by whoever fucked the loser first.
But for the final bout, instead of facefucking like all the previous rounds,
it is decided by assfucking instead.
<<include 'SouthernIslePitFightDescribeSlaver'>>
</p>
<p>
The opponent entered the right — a <<urace $g.enemy>> slave that was clearly good at fighting.
<<if $g.enemy.isHasTrait('subrace_dragonkin')>>
<<set _score = _score - 3>>
A dragonkin slave is incredibly rare, as well as incredibly powerful, which did not bode well for your slave.
<<elseif $g.enemy.isHasTrait('subrace_demon')>>
<<set _score = _score - 2>>
A demon slave is very rare, as well as possessing incredibly powers, which did not bode well for your slave.
<<elseif $g.enemy.isHasTrait('muscle_verystrong')>>
Bulging muscles covered <<their $g.enemy>> entire body.
<</if>>
<<if $g.enemy.isHasTrait('height_giant')>>
<<They $g.enemy>> towers over average <<urace $g.enemy>>.
<</if>>
<<if $g.enemy.isHasTrait('tough_tough')>>
<<Their $g.enemy>> <<uskin $g.enemy>> looks very tough, capable of withstanding much punishment.
<</if>>
<<if $g.enemy.isHasTrait('face_hideous')>>
<<Their $g.enemy>> face instills fear into lesser <<men $g.enemy>>.
<</if>>
<<if $g.enemy.isHasTrait('skill_ambidextrous')>>
<<They $g.enemy>> was a natural ambidex too, according to <<rep $g.handler>>.
<</if>>
<<if $g.enemy.isHasTrait('skill_intimidating')>>
<<They $g.enemy>> looked intimidating.
<</if>>
<<if $g.enemy.isHasTrait('per_dominant')>>
<<They $g.enemy>> exuded nothing but confidence.
<</if>>
Overall, <<rep $g.enemy>> was surely going to be a tough opponent...
</p>
<p>
<<include 'SouthernIslePitFightDescribeSlave'>>
</p>
<<if _score >= 7>>
<p>
Upon the referee's signal, the two combatants approached each other warily, both knowing the other was reasonably competent. Before long they were trading expert blows. <<Yourrep $g.slave>> was getting the worst of it, so <<they $g.slave>> decided to change the nature of the fight. After three tries, <<they $g.slave>> managed to bring the enemy to the ground, suffering a broken nose as <<they $g.slave>> did. The enemy <<urace $g.enemy>> tried to break the imperfect hold but only earned <<themself $g.enemy>> an elbow to the face. <<They $g.enemy>> was furious and <<rep $g.slave>> was obliged to wrench <<their $g.enemy>> <<uarms $g.enemy>> to the point of damage before <<they $g.slave>> allows <<them $g.enemy>> to go limp.
</p>
<<set _winner = $g.slave>>
<<set _loser = $g.enemy>>
<<elseif _score >= 4>>
<p>
Upon the referee's signal, the two combatants approached each other warily, both knowing the other was reasonably competent. Before long they were trading expert blows. <<Yourrep $g.slave>> felt <<their $g.slave>> hits connecting, but unknown to <<them $g.slave>>, <<their $g.slave>> enemy decided to change the nature of the fight. After three tries, <<yourrep $g.slave>> was brought to the ground. <<They $g.slave>> tried to break the imperfect hold but only earned <<themself $g.slave>> an elbow to the face. <<They $g.slave>> was furious and the enemy was obliged to wrench <<their $g.slave>> <<uarms $g.slave>> to the point of damage before <<they $g.enemy>> allows <<them $g.slave>> to go limp.
</p>
<<set _winner = $g.enemy>>
<<set _loser = $g.slave>>
<<else>>
<p>
<<Yourrep $g.slave>> was clearly no match for the enemy, who opened the fight with a furious attack.
<<Rep $g.slave>> managed to get <<their $g.slave>> forearms up, blocking a few blows, but by doing so leaves <<their $g.slave>> abdomen open and obscures <<their $g.slave>> vision enough that <<they $g.slave>> slave|was unprepared for the following kidney strike, which brings <<them $g.slave>> gasping to one knee. The enemy let <<them $g.slave>> rise just a little before delivering a calculated hard right that sends <<them $g.slave>> to the floor for the easy win.
</p>
<<set _winner = $g.enemy>>
<<set _loser = $g.slave>>
<</if>>
<p>
<<if !_winner.isCanPhysicallyCum()>>
<<set _phallus = 'strap-on'>>
A strap-on was thrown down to the winner <<name _winner>>.
<<if _winner.isHasDick()>>
<<They _winner>> needed it, since <<their _winner>> caged cock won't be raping anything.
<</if>>
<<else>>
<<set _phallus = 'dick'>>
The winner, <<name _winner>>, took only a few moment to pump <<their _winner>> <<udick _winner>> a few times to get it to rock hardness.
<</if>>
<<They _winner>> then position <<their _winner>> <<= _phallus>> just before <<name _loser>>'s rear entrance.
</p>
<<if _winner.getMainTraining().getTags().includes('tr_dominance')>>
<p>
<<name _winner>> dominant tendencies mean that <<they _winner>> didn't have to feign willingness abuse and violate a slave. <<They _winner>> used the loser for <<their _winner>> pleasure, slapping <<them _loser>> cruelly, pinching <<them _loser>> until <<they _loser>> drew blood, and showing off for the spectators.
</p>
<<else>>
<p>
<<name _winner>> was so broken to slavery that <<they _winner>> enjoyed winning the fight and raping <<name _loser>>.
</p>
<</if>>
<<if _loser.isMasochistic()>>
<p>
<<name _loser>> got off to being beaten and molested, a true masochistic slut.
</p>
<</if>>
<<if _score >= 7>>
<<run setup.qc.VarSet('pit_fight_result', 'win', -1).apply($gQuest)>>
<p>
<<Yourrep $g.slave>> won the entire pit fights, and stepped into the podium to be awarded the champions title, as well as the <<rep setup.equipment.brawn_rear_master>>. While <<they $g.slave>> got to wear the rare equipment for now, you can always give it to one of your slavers later, if you wish.
</p>
<<elseif _score >= 4>>
<<run setup.qc.VarSet('pit_fight_result', 'second', -1).apply($gQuest)>>
<p>
Despite losing, <<rep $g.slave>> put up a good show, and the spectators greatly approved of the spectacle. <<They $g.slave>> was awarded the second-place prize money, while <<name $g.enemy>> was crowned champion and given the coveted <<rep setup.equipment.brawn_rear_master>>.
</p>
<<else>>
<<run setup.qc.VarSet('pit_fight_result', 'lose', -1).apply($gQuest)>>
<p>
Unfortunately, <<reps _loser>> show was so disappointing that the organized imposed a heavy penalty, taking away the slave to be "retrained" into a proper gladiator.
</p>
<</if>>Looking over to <<rep $g.slave>>,
<<they $g.slave>>
<<if _crits >= 7>>
seemed extremely confident, even in the face of such an opponent.
<<elseif _crits >= 4>>
looked confident, even facing such a mighty enemy.
<<elseif _crits >= 0>>
looked a little unsure seeing such a mighty enemy.
<<else>>
betrayed a look of fear against such mighty enemy.
<</if>>
<<if $g.slave.isHasAnyTraitExact(
['bg_knight', 'bg_mercenary', 'bg_soldier', 'bg_thug',
'bg_raider'])>>
<<Their $g.slave>> past gave <<them $g.slave>> some brawling experience.
<</if>>
<<if $g.slave.isHasTrait('muscle_verystrong')>>
<<Their $g.slave>> huge muscles were an intimidating sight.
<<elseif $g.slave.isHasTrait('muscle_strong')>>
<<Their $g.slave>> muscles were a powerful sight.
<</if>>
<<if $g.slave.isHasTrait('muscle_thin')>>
<<They $g.slave>> was lacking visible muscles.
<</if>>
<<if $g.slave.isHasTrait('height_giant')>>
<<Their $g.slave>> height gave <<them $g.slave>> a reach advantage with <<their $g.slave>> fists and feet.
<</if>>
<<if $g.slave.isHasTrait('height_short')>>
<<Their $g.slave>> short stature was a disadvantage in fist fights.
<</if>>
<<if $g.slave.isHasTrait('tough_tough')>>
<<Their $g.slave>> tough <<uskin $g.slave>> protected <<them $g.slave>> from weak hits.
<</if>>
<<if $g.slave.isHasTrait('tough_nimble')>>
<<Their $g.slave>> inability to take punishment would prove to be quite detrimental.
<</if>>
<<if $g.slave.isHasTrait('per_stubborn')>>
<<They $g.slave>> was stubborn enough to not give up until the very end.
<</if>>
<<if $g.slave.isHasTrait('per_curious')>>
<<They $g.slave>> was liable to give up at the first sign of defeat.
<</if>>
<<if $g.slave.isHasTrait('per_dominant')>>
<<Their $g.slave>> tendencies towards dominance will surely prove useful in such close combat.
<</if>>
<<if $g.slave.isHasTrait('per_evil')>>
<<They $g.slave>> had no qualms using dirty tricks to give <<themself $g.slave>> some advantage.
<</if>>
<<if $g.slave.isHasTrait('skill_ambidextrous')>>
<<Their $g.slave>> ambidexterity gave <<them $g.slave>> a slight edge in the combat.
<</if>>
<<if $g.slave.isHasTrait('per_submissive')>>
<<Their $g.slave>> natural submissiveness hindered <<their $g.slave>> effectiveness as a fighter.
<</if>>
<<if $g.slave.isHasTrait('per_masochistic')>>
<<Their $g.slave>> natural masochistic tendencies meant <<they $g.slave>> would reflexively put <<themself $g.slave>> in the most compromising positions...
<</if>>
<<if $g.slave.isHasTail()>>
<<Their $g.slave>> <<utail $g.slave>> remains stiff under the pressure.
<</if>>
<<if $g.slave.isHasTitle('quest_southern_isle_pit_fights_champion_0')>>
<<They $g.slave>> had already won this fight before, and the enemy is understandably more prepared to deal with <<them $g.slave>>.
<<set _score = _score - 4>>
<</if>><<if $g.handler.isHasTrait('bg_mercenary')>>
<<Their $g.handler>> mercenary past means <<they $g.handler>> had a lot of insights to give to the slave.
<</if>>
<<if $g.handler.isHasTrait('bg_thug')>>
<<Their $g.handler>> past roughing up people on the streets gives <<them $g.handler>> knowledge in <<uhand $g.handler>>-to-<<uhand $g.handler>> combat.
<</if>>
<<if $g.handler.isHasTrait('per_smart')>>
<<They $g.handler>> handler|is smart enough to give out meaningful advice to unnerve your slave.
<</if>>
<<if $g.handler.isHasTrait('per_slow')>>
<<They $g.handler>> handler|is too dumb to give reassurance to the slave.
<</if>>
<<if $g.handler.isHasTrait('per_attentive')>>
<<Their $g.handler>> attentive eyes managed to discern weaknesses in the opposition.
<</if>>
<<if $g.handler.isHasTrait('per_dreamy')>>
<<They $g.handler>> failed to pay enough attention to the opposing fighter, and gave <<rep $g.slave>> little advise on the opposition.
<</if>>
<<if $g.handler.isHasTrait('per_dominant')>>
As a dominant slaver, <<rep $g.slave>> paid more attention to everything <<rep $g.handler>> said.
<</if>>
<<if $g.handler.isHasTrait('per_submissive')>>
<<Reps $g.handler>> submissiveness unfortunately came out, making <<their $g.handler>> advise weaker.
<</if>>
<<if $g.handler.isHasTrait('per_masochistic')>>
<<They $g.handler>> could not stop <<themself $g.handler>> from staring lustfully at the opposing fighter, no doubt fantasizing being beaten up by the opposing slave.
<</if>>
<<if $g.handler.isHasTrait('per_lunatic')>>
<<Their $g.handler>> lunacy proves good for once, somehow using it to calm down your slave before the fight.
<</if>>
<<if $g.handler.isHasTrait('per_evil')>>
<<Reps $g.handler>> instilled into the slave to do whatever <<they $g.slave>> needed to win, regardless of honor.
<</if>>
<<if $g.handler.isHasTrait('per_honorable')>>
<<Reps $g.handler>> honor prevented <<them $g.handler>> from giving more underhanded advise.
<</if>>
<<if $g.handler.isHasTrait('skill_creative')>>
<<They $g.handler>> was creative enough to devise some impromptu fighting technique specialized for the arena.
<</if>><<run new setup.UnitGroup(
"southern_isle_pit_fights_qualifications0",
"Poor Gladiator",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_slave),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.OneRandom([
setup.qc.DoAll([
setup.qc.TraitReplaceExisting('unit', setup.trait.breast_huge),
setup.qc.TraitReplaceExisting('unit', setup.trait.balls_huge)
], undefined),
setup.qc.DoAll([
setup.qc.TraitsReplace('unit', [setup.trait.muscle_verythin])
], undefined),
setup.qc.DoAll([
setup.qc.TraitsReplace('unit', [setup.trait.per_masochistic])
], undefined)
]),
],
)>>
<<set _criteriahandler = new setup.UnitCriteria(
null, /* key */
'Gladiator Handler', /* name */
[
setup.trait.bg_mercenary,
setup.trait.bg_thug,
setup.trait.per_smart,
setup.trait.per_attentive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_creative,
],
[
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
slaving: 1.5,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Gladiator', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_mercenary,
setup.trait.bg_soldier,
setup.trait.bg_thug,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
],
[
setup.trait.bg_slave,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.tough_nimble,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
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.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'southern_isle_pit_fights', /* key */
"Southern Isle Pit Fights", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'gore',
'sea',
'prep',
'money',
'item',
'trait',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'handler': [ _criteriahandler, 3],
'slave': _criteriaslave,
},
{ /* actors */
'enemy': 'southern_isle_pit_fights_qualifications0',
},
[ /* costs */
],
'Quest_southern_isle_pit_fights',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_southern_isle_pit_fightsCrit',
[
setup.qc.IfThenElse(
setup.qres.VarEqual('pit_fight_result', 'win'),
setup.qc.DoAll([
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
setup.qc.AddTag('enemy', 'pit_fight_qual'),
setup.qc.AddUnitToUnitGroup('enemy', 'pit_fight_sale0'),
setup.qc.VarSet('pit_fight_progress', '1', -1),
setup.qc.Money(1000),
setup.qc.SetCooldownQuest('southern_isle_pit_fights_semi_final', 10),
setup.qc.AddTitle('slave', 'quest_southern_isle_pit_fights_contestant_2')
], undefined),
setup.qc.DoAll([
setup.qc.Injury('slave', 5),
setup.qc.Item(setup.item.f_drinktray_normal_pitfight)
], undefined)),
setup.qc.VarRemove('pit_fight_result'),
setup.qc.SetCooldownQuest(null, 100),
],
],
[
'Quest_southern_isle_pit_fightsCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fightsCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fightsCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.SlaveMarker('enemy'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarNull('pit_fight_result'),
setup.qres.NoUnitWithTitle('quest_southern_isle_pit_fights_contestant_2', {
}),
],
[ /* expiration outcomes */
setup.qc.SetCooldownQuest(null, 10),
],
)>><p>
The land beyond the <<lore region_sea>> holds many culture strange and unusual compared those found in <<lore continent_main>>. Among the many traditions hold there is the annual Southern Isle Pit Fights festival. The festival is a celebration for the bountiful service slaves have rendered towards their owners, and the pinnacle of the festival is the pit fighting competition.
</p>
<p>
Slaveowners can bring their sturdiest and scariest, but obedient slave into the fights, and they can enjoy the entertainment provided by slaves duking it out againt other slaves within the arena. The fight is non-lethal, of course, and it is decided by whichever slave raping the other first. The competition is quite fierce, and it's all thanks to the lucrative reward promised by winning the competition: an equipment found nowhere else.
</p>
<p>
You can try to enter a slave too into this competition, if you think you have a sufficiently good fighter among your broken slaves. You'd also need to send a slaver to accompany the slave, as well as giving the slave instructions before the actual fight. Who knows, with a sufficiently good combination of slave and slaver, you might just take it all.
</p>
<p>
<<successtext 'Important:'>> This quest is special. The outcome of this quests does not depend on the displayed success chances, but rather, it is computed directly from the participant's traits. Match traits to get the best outcome!
</p><<set _criterias = $gQuest.getTemplate().getUnitCriterias()>>
<<set _handler = _criterias['handler'].criteria.computeSuccessModifiers($g.handler, true)>>
<<set _slave = _criterias['slave'].criteria.computeSuccessModifiers($g.slave, true)>>
<<set _crit = _handler.crit + _slave.crit>>
<<set _dis = _handler.disaster + _slave.disaster>>
<<set _score = _crit - _dis>>
<p>
<<Yourrep $g.handler>> reviewed the rules - the combatants are wearing light gloves but otherwise completely naked, and the fight will be nonlethal. The winner is decided once they face-fuck the loser.
</p>
<p>
To your slaver surprise, the opponent is nowhere near capable of fighting. In fact, somehow <<rep $g.slave>> had been matched with
<<if $g.enemy.isHasTrait('per_masochistic')>>
a complete masochist,
<<if $g.enemy.isHasDick()>>
<<their $g.enemy>> dick already hard
<<else>>
<<their $g.enemy>> cunt already leaking
<</if>>
from the prospect of upcoming pain and <<their $g.enemy>> gaze completely unfocused for the fight.
<<elseif $g.enemy.isHasTrait('muscle_verythin')>>
the skinniest <<urace $g.enemy>> your slaver had ever seen — there would just be no way <<they $g.enemy>> could let out a meaningful punch, let alone winning the contest.
<<elseif $g.enemy.isHasTrait('balls_huge')>>
a <<urace $g.enemy>> with an extraordinarily large balls, enough to hinder <<their $g.enemy>> fighting.
<<elseif $g.enemy.isHasTrait('breast_huge')>>
a <<urace $g.enemy>> with an extraordinarily large boobs, enough to hinder <<their $g.enemy>> fighting.
<</if>>
Looking at <<their $g.enemy>> owner, it seemed that the owner enjoyed the perversity of watching their own slave lose and humiliated. Truly, a <<man $unit.player>> after yourself.
</p>
<<set _win = (_score >= -4)>>
<<if _win>>
<<run setup.qc.VarSet('pit_fight_result', 'win', -1).apply($gQuest)>>
<<if $g.enemy.isHasTrait('per_masochistic')>>
<p>
It was utterly trivial for <<yourrep $g.slave>> to defeat the masochistic enemy.
<<if $g.slave.isMasochistic()>>
Sure, <<rep $g.slave>> is also similarly masochistic-minded, but <<their $g.slave>> slave training holds.
<</if>>
By the end of the fight, the enemy was down on the floor in ecstacy from all the pain inflicted upon <<them $g.enemy>>.
</p>
<<elseif $g.enemy.isHasTrait('muscle_verythin')>>
<p>
With the enemy's complete lack of muscles, it was trivial for <<yourrep $g.slave>> to win. For every punch <<they $g.enemy>> weakly deliver, your slave was able to return the favor twice, and before long the enemy was down on the floor.
</p>
<<elseif $g.enemy.isHasTrait('balls_huge')>>
<p>
Given the apparent massive pair of balls the enemy possessed, <<rep $g.slave>> took an extremely simple shortcut to victory. The instant the fight started, she hit the enemy right in <<their $g.enemy>> huge balls, as hard as <<they $g.slave>> can. This was a sucker punch of the worst kind; the enemy's balls were so big that <<they $g.enemy>> had no real chance of defending them. <<They $g.enemy>> gasped with pain and wrapped <<their $g.enemy>> <<uarms $g.enemy>> around <<their $g.enemy>> aching balls, giving <<rep $g.slave>> a clear opening to deliver a free and easy blow to the jaw that sends the poor slave to the ground.
</p>
<<elseif $g.enemy.isHasTrait('breast_huge')>>
<p>
Given the apparent massive flesh of boobs the enemy possessed, <<rep $g.slave>> took an extremely simple shortcut to victory. The instant the fight started, she hit the enemy right in <<their $g.enemy>> huge tits, as hard as <<they $g.slave>> can. This was a sucker punch of the worst kind; the enemy's boobs were so big that <<they $g.enemy>> had no real chance of defending them. <<They $g.enemy>> gasped with pain and wrapped <<their $g.enemy>> <<uarms $g.enemy>> around <<their $g.enemy>> aching bosom, giving <<rep $g.slave>> a clear opening to deliver a free and easy blow to the jaw that sends the poor top-heavy slave to the ground. Any chance of <<them $g.enemy>> rising was extinguished by <<their $g.enemy>> breasts; it would took <<them $g.enemy>> so long to muster an attempt to get up that <<rep $g.slave>> could rain hits on <<them $g.enemy>> while <<they $g.enemy>> did.
</p>
<</if>>
<p>
<<if !$g.slave.isCanPhysicallyCum()>>
A strap-on was thrown down to your slave,
<<if $g.slave.isHasDick()>>
since <<their $g.slave>> dick was caged.
<<else>>
since <<they $g.slave>> lacked a dick.
<</if>>
<<else>>
<<Rep $g.slave>> only took a few strokes of <<their $g.slave>> <<uhand $g.slave>> to bring <<their $g.slave>> <<udick $g.slave>> to full mast.
<</if>>
<<They $g.slave>> proceeded to grab the head of the downed enemy and shove it into <<their $g.slave>> mast, face-fucking <<them $g.enemy>> and asserting <<their $g.slave>> victory.
</p>
<p>
Despite the extremely easy victory, it was still a victory, and <<yourrep $g.slave>> had advanced to the next bout of the fight. You will receive another invitation for the fight in the future, as long as you keep your slave around.
</p>
<<else>>
<<run setup.qc.VarSet('pit_fight_result', 'lose', -1).apply($gQuest)>>
<p>
Even more surprisingly, however, is that your slave is equally incapable.
Despite fighting against such a handicapped enemy, <<yourrep $g.slave>>'s
<<if $g.slave.isMasochistic()>>
masochistic tendencies
<<elseif $g.slave.isHasTrait('muscle_verythin')>>
complete lack of musculature
<<elseif $g.slave.isHasTrait('breast_huge')>>
<<ubreasts $g.slave>>
<<elseif $g.slave.isHasTrait('balls_huge')>>
<<uballs $g.slave>>
<<elseif $g.slave.isHasTrait('dick_huge')>>
<<udick $g.slave>>
<<else>>
<<uinsultnoun $g.slave>>
<</if>>
evened out the fight.
In the end, both slaves were disqualified from the fight for the disgrace they had brought into the arena.
</p>
<p>
Still, the owner of the enemy's team was suitable impressed by your degeneracy of sending such a slave into the competition, and gifted you a little something extra for your efforts.
</p>
<</if>><<run new setup.UnitGroup(
"pit_fight_sale0",
"Lost Gladiator",
[], /* pools */
1, /* reuse chance */
[ /* unit post process */
],
)>>
<<run new setup.QuestTemplate(
'southern_isle_pit_fights_sale', /* key */
"Southern Isle Pit Fights: Sale", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'gore',
'sea',
'unit',
],
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'n': [ setup.qu.negotiator, 3],
},
{ /* actors */
'slave': 'pit_fight_sale0',
},
[ /* costs */
],
'Quest_southern_isle_pit_fights_sale',
setup.qdiff.normal1, /* difficulty */
[ /* outcomes */
[
'Quest_southern_isle_pit_fights_saleCrit',
[
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
setup.qc.RemoveTagGlobal('pit_fight_final'),
setup.qc.RemoveTagGlobal('pit_fight_semifinal'),
setup.qc.RemoveTagGlobal('pit_fight_qual'),
setup.qc.VarRemove('pit_fight_result'),
setup.qc.Slave('slave', "a|was a gladiator in one of the southern isles pit fights who a|was sold after losing in a fight", true, 2),
setup.qc.SetCooldownQuest('southern_isle_pit_fights', 80),
],
],
[
'Quest_southern_isle_pit_fights_saleCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_saleCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_saleCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Not(setup.qres.VarNull('pit_fight_result')),
],
[ /* expiration outcomes */
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
setup.qc.VarRemove('pit_fight_result'),
setup.qc.SetCooldownQuest('southern_isle_pit_fights', 100),
],
)>><<set _u = setup.getAnySlaver()>>
<p>
The Southern Isles pit fight had concluded some time ago.
<<if $varstore.get('pit_fight_result') == 'win'>>
Your slave has won the entire tournament.
<<else>>
Your slave might have lost, but not before going through the qualifications.
<</if>>
And <<yourrep _u>> is telling you that one of the opponents is currently being sold as punishment for <<their $g.slave>> failure.
</p>
<p>
The slave in question is the <<urace $g.slave>> that your slave faced in the
<<if $g.slave.isHasTag('pit_fight_final')>>
final round of the competition — the hulking beast of a <<man $g.slave>> that your slave somehow managed to down. The owner is apparently rather rich, and having lost a tournament would tarnish their stock's reputation forever.
<<elseif $g.slave.isHasTag('pit_fight_semifinal')>>
<<set _bg = $g.slave.getTraitWithTag('bg')>>
semi-final — the experienced <<= _bg.getName()>>-turned-obedient-slave that your slave managed to down back then. The owner is apparently trying to cash in on <<their $g.slave>> current fame of reaching the semi-finals of the competition.
<<else>>
qualification round — the joke of a fighter that was put on show simply for <<their $g.slave>> owner's cruel delight. It seems the owner perversity knows no bounds, and is selling the slave to hammer the fact that the slave is nothing but a useless little <<urace $g.slave>>.
<</if>>
</p>
<p>
Should you wish to purchase the slave, you could send a slaver to negotiate with the owner. It should be a rather easy affair, with minimal risks, but you'll certainly have to pay for the slave you are trying to purchase.
</p><p>
<<Yourrep $g.n>> had managed to arrange for <<rep $g.slave>> to be brought over to your <<rep setup.buildingtemplate.slavepens>> for your inspection.
<<if $g.slave.isHasTag('pit_fight_final')>>
<<They $g.n>> did not meet <<their $g.n>> previous owner directly, as the owner was a rather busy person, and deemed the sale of <<their $g.n>> gladiator slave beneath <<their $g.n>> top concerns.
<<elseif $g.slave.isHasTag('pit_fight_semifinal')>>
<<They $g.n>> did meet with the slave's previous owner, who kept rubbing their hands in anticipating of money from the sales.
<<else>>
Throughout the negotiations, the previous owner kept goading the slave, no doubt hammering further obedience and humiliation into the lost gladiator.
<</if>>
</p>
<p>
The slave commands a higher than average price,
<<if $g.slave.isHasTag('pit_fight_qual')>>
even with <<their $g.slave>> non-existent fighting skills, simply
<</if>>
due to <<their $g.slave>> recent fame as a participant in the Southern Isles Pit Fights.
</p><<run new setup.UnitGroup(
"southern_isle_pit_fights_semi_final1",
"Semi-Final Gladiator",
[ /* pools */
[setup.unitpool.subrace_orc_male, 0.125],
[setup.unitpool.subrace_orc_female, 0.125],
[setup.unitpool.subrace_humandesert_male, 0.125],
[setup.unitpool.subrace_humandesert_female, 0.125],
[setup.unitpool.subrace_humansea_male, 0.125],
[setup.unitpool.subrace_humansea_female, 0.125],
[setup.unitpool.subrace_werewolf_male, 0.125],
[setup.unitpool.subrace_werewolf_female, 0.125],
],
0, /* reuse chance */
[ /* unit post process */
setup.qc.OneRandom([
setup.qc.BgTraitReset('unit', setup.trait.bg_mercenary),
setup.qc.BgTraitReset('unit', setup.trait.bg_knight),
setup.qc.BgTraitReset('unit', setup.trait.bg_soldier)
]),
setup.qc.TraitReplace('unit', setup.trait.training_obedience_advanced),
setup.qc.TraitReplace('unit', setup.trait.training_dominance_basic),
setup.qc.AddTraitsRandom('unit', [setup.trait.muscle_strong, setup.trait.height_tall, setup.trait.tough_tough], 1, true, false),
],
)>>
<<set _criteriahandler = new setup.UnitCriteria(
null, /* key */
'Gladiator Handler', /* name */
[
setup.trait.bg_mercenary,
setup.trait.bg_thug,
setup.trait.per_smart,
setup.trait.per_attentive,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
setup.trait.skill_creative,
],
[
setup.trait.per_slow,
setup.trait.per_dreamy,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
slaving: 1.5,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Gladiator', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_mercenary,
setup.trait.bg_soldier,
setup.trait.bg_thug,
setup.trait.bg_raider,
setup.trait.height_giant,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
],
[
setup.trait.bg_slave,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.tough_nimble,
setup.trait.per_curious,
setup.trait.per_submissive,
setup.trait.per_masochistic,
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.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_obedience_advanced, setup.trait.training_obedience_master], true),
setup.qres.HasTitle('quest_southern_isle_pit_fights_contestant_2'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'southern_isle_pit_fights_semi_final', /* key */
"Southern Isle Pit Fights: Semi-Final", /* Title */
{ /* Author */
name: "FCdev and darko",
url: "",
},
[ /* tags */
'gore',
'sea',
'special',
'prep',
'money',
'item',
'trait',
],
4, /* weeks */
20, /* expiration weeks */
{ /* roles */
'handler': [ _criteriahandler, 3],
'slave': _criteriaslave,
},
{ /* actors */
'enemy': 'southern_isle_pit_fights_semi_final1',
},
[ /* costs */
],
'Quest_southern_isle_pit_fights_semi_final',
setup.qdiff.harder1, /* difficulty */
[ /* outcomes */
[
'Quest_southern_isle_pit_fights_semi_finalCrit',
[
setup.qc.SetCooldownQuest('southern_isle_pit_fights', 100),
setup.qc.IfThenElse(
setup.qres.VarEqual('pit_fight_result', 'win'),
setup.qc.DoAll([
setup.qc.AddTag('enemy', 'pit_fight_semifinal'),
setup.qc.AddUnitToUnitGroup('enemy', 'pit_fight_sale0'),
setup.qc.Injury('slave', 2),
setup.qc.VarSet('pit_fight_progress', '2', -1),
setup.qc.Money(2000),
setup.qc.SetCooldownQuest('southern_isle_pit_fights_final', 10)
], undefined),
setup.qc.DoAll([
setup.qc.VarRemove('pit_fight_progress'),
setup.qc.Injury('slave', 15),
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
setup.qc.RemoveTitleGlobal('quest_southern_isle_pit_fights_contestant_2')
], undefined)),
setup.qc.VarRemove('pit_fight_result'),
],
],
[
'Quest_southern_isle_pit_fights_semi_finalCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_semi_finalCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_southern_isle_pit_fights_semi_finalCrit',
[
setup.qc.Outcomes("crit"),
setup.qc.SlaveMarker('enemy'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('quest_southern_isle_pit_fights_contestant_2', {
job_key: 'slave',
}),
setup.qres.VarEqual('pit_fight_progress', '1'),
],
[ /* expiration outcomes */
setup.qc.VarRemove('pit_fight_progress'),
setup.qc.RemoveTitleGlobal('quest_southern_isle_pit_fights_contestant_2'),
setup.qc.EmptyUnitGroup('pit_fight_sale0'),
],
)>><<set _u = setup.getUnit({title: 'quest_southern_isle_pit_fights_contestant_2'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
The second bout of the famous Southern Isle Pit Fights is here, and you received your due invitation. <<Yourrep _u>> is to again participate in the fights in the southern isles, this time hopefully against an actually competent slave instead of the joke that was the previous round.
</p>
<p>
<<successtext 'Important:'>> This quest is special. The outcome of this quests does not depend on the displayed success chances, but rather, it is computed directly from the participant's traits. Match traits to get the best outcome!
</p>
<p>
<<successtext 'Warning:'>> Abandoning this quest will disqualify <<rep _u>> from the current Southern Isle Pit Fights!
</p>
<</if>><<if $g.slave.isMale()>>
<<questimage 'southern_isle_pit_fight_semifinal_male.jpg'>>
<<elseif $g.slave.isFemale()>>
<<questimage 'southern_isle_pit_fight_semifinal_female.jpg'>>
<</if>>
<<set _criterias = $gQuest.getTemplate().getUnitCriterias()>>
<<set _handler = _criterias['handler'].criteria.computeSuccessModifiers($g.handler, true)>>
<<set _slave = _criterias['slave'].criteria.computeSuccessModifiers($g.slave, true)>>
<<set _crit = _handler.crit + _slave.crit>>
<<set _dis = _handler.disaster + _slave.disaster>>
<<set _score = _crit - 2 * _dis>>
<p>
Like before, <<yourrep $g.handler>> prepared the slave for the upcoming fight, this time knowing that the opponent would likely be actually skilled in brawling.
<<They $g.handler>> recalled the rules — the slaves will enter naked and barefisted, and the winner will be decided by whoever face-fucked the loser first.
<<include 'SouthernIslePitFightDescribeSlaver'>>
</p>
<p>
The opponent this time is a <<urace $g.enemy>>, and clearly know <<their $g.enemy>> way in a fist-fight.
From the intel <<yourrep $g.handler>> had gathered,
<<they $g.enemy>> was
<<if $g.enemy.isHasTrait('bg_soldier')>>
but a former soldier, making the fight somewhat easier.
<<set _score = _score + 1>>
<<elseif $g.enemy.isHasTrait('bg_knight')>>
a former knight who had been completely broken, making the fight harder.
<<set _score = _score - 2>>
<<elseif $g.enemy.isHasTrait('bg_mercenary')>>
a former mercenary who had been thoroughly broken into a slave.
<</if>>
<<if $g.enemy.isHasTrait('muscle_strong')>>
<<They $g.enemy>> had the muscles to show for it too,
<<elseif $g.enemy.isHasTrait('height_tall')>>
<<They $g.enemy>> was pretty tall too,
<<elseif $g.enemy.isHasTrait('per_smart')>>
<<They $g.enemy>> looked quite cunning,
<<else>>
adding to the difficulty.
<</if>>
Overall, this is surely going to be a real fight, unlike last time.
</p>
<p>
<<include 'SouthernIslePitFightDescribeSlave'>>
</p>
<<set _win = (_score >= 5)>>
<<if _win>>
<p>
<<Yourrep $g.slave>> is confident <<they $g.slave>> will win, but <<they $g.slave>> wasn't particularly sure about how to do so. <<They $g.slave>> fought cautiously, mostly hitting the enemy from a distance.
Slowly, the rain of blows began to tell, opening the enemy's lip, giving <<them $g.enemy>> a bloody nose, and bruising <<their $g.enemy>> face. Realizing <<they $g.enemy>> had to do something, <<they $g.enemy>> made a desperate counterattack, dripping blood as <<they $g.enemy>> did. As <<they $g.enemy>> did, <<they $g.enemy>> managed to get <<their $g.enemy>> face in the way of another one of <<reps $g.slave>> strike and went down hard. <<They $g.enemy>> tried to rise, but <<rep $g.slave>> decided the fight by the simple expedient of
<<if $g.slave.isHasTrait('per_honorable')>>
sitting on <<them $g.enemy>>, locking <<them $g.enemy>> in position.
<<else>>
kicking <<them $g.enemy>> in the crotch.
<</if>>
</p>
<<set _winner = $g.slave>>
<<set _loser = $g.enemy>>
<<else>>
<p>
It seemed the enemy wanted to win badly enough that <<they $g.enemy>> took an extremely unpleasant shortcut to victory. The instant the fight started, <<they $g.enemy>> furiously went for <<yourrep $g.slave>>'s eyes, <<uhands $g.enemy>> forming claws. <<Rep $g.slave>> defends <<themself $g.slave>> with <<their $g.slave>> <<uarms $g.slave>>, at which point the enemy delivered a mighty
<<if $g.slave.isHasVagina()>>
cunt punt.
<<else>>
dick kick.
<</if>>
<<Rep $g.slave>> went straight down, <<their $g.slave>> <<umouth $g.slave>> soundlessly opening and closing and tears leaking from <<their $g.slave>> closed eyes while <<their $g.slave>> <<uhands $g.slave>> desperately shield <<their $g.slave>> outraged
<<if $g.slave.isHasVagina()>>
pussy.
<<else>>
shaft.
<</if>>
The enemy followed <<them $g.slave>> down and put the unresisting slave's head in a simple lock.
</p>
<<set _winner = $g.enemy>>
<<set _loser = $g.slave>>
<</if>>
<p>
<<if !_winner.isCanPhysicallyCum()>>
<<set _phallus = 'strap-on'>>
A strap-on was thrown down to the winner <<name _winner>>.
<<if _winner.isHasDick()>>
<<They _winner>> needed it, since <<their _winner>> caged cock won't be raping anything.
<</if>>
<<else>>
<<set _phallus = 'dick'>>
The winner, <<name _winner>>, took only a few moment to pump <<their _winner>> <<udick _winner>> a few times to get it to rock hardness.
<</if>>
<<They _winner>> then position <<their _winner>> <<= _phallus>> just before <<name _loser>>'s <<umouth _loser>>.
</p>
<<if _winner.getMainTraining().getTags().includes('tr_dominance')>>
<p>
<<name _winner>> dominant tendencies mean that <<they _winner>>willingly abuse and violate the loser. <<They _winner>> used the loser's <<umouth _loser>> like a fuckhole for <<their _winner>> pleasure, cruelly deep-throating the struggling slave.
</p>
<<else>>
<p>
<<name _winner>> was already so broken to slavery that <<they _winner>> actually enjoyed facefucking the loser.
</p>
<</if>>
<<if _win>>
<<run setup.qc.VarSet('pit_fight_result', 'win', -1).apply($gQuest)>>
<p>
<<Yourrep $g.slave>> was crowned winner of the bout, and <<rep $g.handler>> was awarded some sum of money for the performance, as well as a future invitation to the final and probably most challenging of the fights. Best prepare your slave as best as you can for the upcoming bout.
</p>
<<else>>
<<run setup.qc.VarSet('pit_fight_result', 'lose', -1).apply($gQuest)>>
<p>
Unfortunately, <<rep $g.slave>> lost the fight and suffered injuries as a result. This means that <<their $g.slave>> participation in the fights are over, and <<they $g.slave>> just have to try again if you want another shot at winning the championship. Better luck next time!
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
],
[
],
[
setup.qres.You(),
],
{
arcane: 3,
}
)>>
<<set _criteriaambidextrous = new setup.UnitCriteria(
null, /* key */
'Ambidextrous', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_ambidextrous], true),
],
{
}
)>>
<<set _criteriaintimidating = new setup.UnitCriteria(
null, /* key */
'Intimidating', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_intimidating], true),
],
{
}
)>>
<<set _criteriaconnected = new setup.UnitCriteria(
null, /* key */
'Connected', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_connected], true),
],
{
}
)>>
<<set _criteriahypnotic = new setup.UnitCriteria(
null, /* key */
'Hypnotic', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_hypnotic], true),
],
{
}
)>>
<<set _criteriacreative = new setup.UnitCriteria(
null, /* key */
'Creative', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_creative], true),
],
{
}
)>>
<<set _criteriaentertain = new setup.UnitCriteria(
null, /* key */
'Entertain', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_entertain], true),
],
{
}
)>>
<<set _criteriaalchemy = new setup.UnitCriteria(
null, /* key */
'Alchemy', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_alchemy], true),
],
{
}
)>>
<<set _criteriaanimal = new setup.UnitCriteria(
null, /* key */
'Animal', /* name */
[
],
[
],
[
setup.qres.AllTraits([setup.trait.skill_animal], true),
],
{
}
)>>
<<set _criteriawizard = new setup.UnitCriteria(
null, /* key */
'Wizard', /* name */
[
],
[
],
[
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,
], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'regalixir', /* key */
"Regalixir", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'fort',
'prep',
'trait',
],
4, /* weeks */
setup.INFINITY, /* expiration weeks */
{ /* roles */
'you': [_criteriayou, 3],
'ambidextrous': _criteriaambidextrous,
'intimidating': _criteriaintimidating,
'connected': _criteriaconnected,
'hypnotic': _criteriahypnotic,
'creative': _criteriacreative,
'entertain': _criteriaentertain,
'alchemy': _criteriaalchemy,
'animal': _criteriaanimal,
'wizard': _criteriawizard,
},
{ /* actors */
},
[ /* costs */
],
'Quest_regalixir',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_regalixirCrit',
[
setup.qc.Opportunity('regalixir', {
you: "you",
}),
setup.qc.Injury('ambidextrous', 2),
setup.qc.Injury('intimidating', 3),
setup.qc.Injury('connected', 2),
setup.qc.Injury('hypnotic', 1),
setup.qc.Injury('creative', 2),
setup.qc.Injury('entertain', 3),
setup.qc.Injury('alchemy', 2),
setup.qc.Injury('animal', 1),
setup.qc.Injury('wizard', 2),
],
],
[
'Quest_regalixirCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_regalixirCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_regalixirCrit',
[
setup.qc.Outcomes("crit"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
Having spent so much of the company's hard-earned money buying the manual and
ingredients, all that's left is to follow the instructions on how to concoct
this mysterious potion.
</p>
<p>
In order to imbue a concoction with knowledge, a wide array of skilled people
must participate in its making. All of
<<rep setup.trait.skill_ambidextrous>>
<<rep setup.trait.skill_intimidating>>
<<rep setup.trait.skill_connected>>
<<rep setup.trait.skill_hypnotic>>
<<rep setup.trait.skill_creative>>
<<rep setup.trait.skill_entertain>>
<<rep setup.trait.skill_alchemy>>
<<rep setup.trait.skill_animal>>,
as well as any branch of magic must be represented. It does not matter if
they're a slaver or slave. In addition, whoever is going to drink the potion
must also be present in the ritual, and that means you and you yourself must
be present throughout...
</p>
<p>
The preparation will be extensive and difficult, but the reward is
mouth-watering: the potion is said to awaken a dormant ability in whoever
lucky enough to get their <<uhands $unit.player>> on it.
Fortunately, the ingredients and the manual won't go away anytime soon, and
there is no rush for you to complete the ritual as soon as possible. Should
you lack a particular skill, it might be wise to start recruiting slavers or
capturing slaves with the requisite skills...
</p>
<p>
<<successtext "This quest will always succeed, regardless of the displayed chances.">>
</p><p>
It... it is done. Your memory was hazy, but you remember <<uadv
$unit.player>> leading the ritual. It started innocuously, just a couple of
chant together with each of your units donating an... "essence" of their
soul.
You remembered a smoke, an explosion, and the rest was hazy.
</p>
<p>
In the aftermath, everyone save for you were injured. Lying in the middle of
the mess was a bottle of potion, whose color sparkled and changed ever so
slightly with time. Reddish, greenish, yellowish, it kept shifting under
your gaze, inviting you to drink it and unlock whatever dormant power you
have within...
</p>/* PROOFREAD COMPLETE */
<<run new setup.UnitGroup(
"the_regalixir0",
"Skilled Slave",
'all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.AddTraitsRandom('unit', [setup.trait.skill_ambidextrous, setup.trait.skill_intimidating, setup.trait.skill_connected, setup.trait.skill_hypnotic, setup.trait.skill_creative, setup.trait.skill_entertain, setup.trait.skill_alchemy, setup.trait.skill_animal], 1, false, false),
],
)>>
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.skill_alchemy,
setup.trait.per_attentive,
],
[
],
[
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,
}
)>>
<<run new setup.QuestTemplate(
'the_regalixir', /* key */
"The Regalixir", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'prep',
'trait',
'sea',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'you': [_criteriayou, 1],
'alchemist': [ setup.qu.alchemist_veteran, 1],
'navigator': [ setup.qu.navigator, 1],
},
{ /* actors */
'slave': 'the_regalixir0',
'connected': [
setup.qres.NotYou(),
setup.qres.Job(setup.job.slaver),
setup.qres.Available(),
setup.qres.AllTraits([setup.trait.skill_connected], true),
],
'alc': 'sea_all',
},
[ /* costs */
setup.qc.Money(-63750),
],
'Quest_the_regalixir',
setup.qdiff.hard47, /* difficulty */
[ /* outcomes */
[
'Quest_the_regalixirCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('slave', "", undefined),
],
],
[
'Quest_the_regalixirCrit',
[
setup.qc.QuestDirect('regalixir', null),
],
],
[
'Quest_the_regalixirFailure',
[
setup.qc.Money(63750),
setup.qc.Injury('alchemist', 2),
setup.qc.Injury('you', 2),
setup.qc.Injury('navigator', 2),
],
],
[
'Quest_the_regalixirDisaster',
[
setup.qc.Money(30000),
setup.qc.Injury('you', 2),
setup.qc.Injury('alchemist', 1),
setup.qc.Injury('navigator', 2),
setup.qc.Slave('slave', "a|was \"bought\" for an atrocious sum from pirates of the Southern Seas", undefined),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Not(setup.qres.QuestDone('regalixir')),
],
[ /* expiration outcomes */
],
)>><p>
<<Yourrep $g.connected>> connected|is a well-connected <<urace
$g.connected>>, and <<their $g.connected>> connections even reach far beyond
the <<lore region_sea>>. <<They $g.connected>> connected|have found an
extremely rare opportunity for you: a lead into the rare and mysterious
concoction dubbed the Regalixir.
According to the stories, the Regalixir would awaken whatever dormant
potential sleeping within the lucky drinker. You could certainly use such a rare
potion for your own consumption.
</p>
<p>
The Regalixir is incredibly rare, however, and it is likely that <<dangertext
"you will never be able to obtain more than one in your entire career">>.
Furthermore, you also need to gather the instructions, as well as the rare
ingredients for the potion. Fortunately, <<rep $g.connected>> connected|have
gathered information that a famous alchemist in the southern seas happens to
be in possession of both, and it might be fruitful were you to send yourself
and a group of slavers to patron the alchemist.
</p>
<p>
It won't be easy though — you'd need a good alchemist to process the
information, as well as a good navigator to navigate the treacherous waters.
But above all else, you need money, and a lot of them. The alchemist won't
part with <<their $g.alc>> knowledge and ingredients for free, and they will
cost you quite a bit of fortune...
</p>
<p>
If your company is still not yet well-established, and has no such sum, then
it might be wise to come back to this quest later...
</p><p>
Thanks to <<reps $g.navigator>> skills, you and your slavers arrived at the
alchemist's island — a quaint little island in the middle of nowhere. The
alchemist was a kindly <<woman $g.alchemist>>, who greeted your slavers and
offered some herbal teas during the talk. Hearing of your offer, and seeing
the amount of money you brought, <<they $g.alchemist>> <<uadv $g.alchemist>>
agreed to your request and shared <<their $g.alchemist>> knowledge with you
and your slavers.
<<if $unit.player.isHasTrait('skill_alchemy')>>
With your background in alchemy, you were able to understand and process all the information <<they $g.alchemist>> provides, making you feel good about yourself.
<<run setup.qc.BoonizeRandom('you', 10).apply($gQuest)>>
<<elseif $unit.player.isHasTrait('per_smart')>>
Despite having no background in alchemy, your keen intellect proved useful,
and you were able to digest most of the information <<they $g.alchemist>>
provides. It felt good.
<<run setup.qc.BoonizeRandom('you', 5).apply($gQuest)>>
<<else>>
Having no background whatsoever in alchemy, you put your trust in <<yourrep
$g.alchemist>> to jot down everything <<they $g.alchemist>> says.
<</if>>
In the end, <<rep $g.alchemist>> had a note full of the precise instructions
for making the potion.
</p>
<p>
After collecting the ingredients from the alchemist — including some things you'd never
know go into a potion — you and your slavers waved goodbye to the
portly alchemist and returned back to your fort in the ship. Time for the
next step: concocting the Regalixir itself!
</p>
<<if $gOutcome == 'crit'>>
<p>
Apparently, making the Regalixir requires you to have either slavers or
slaves possessing some special skills. You make a small detour during your
trip to capture a prospective slave, which should make it a little easier for
you to perform the ritual...
</p>
<</if>><p>
You never arrived at the alchemist's island. Your ship was attacked by rowdy
pirates of the <<lore region_sea>>, and despite ending victorious in the ensuing battle,
you and your slavers suffer injuries. You <<uadv $unit.player>> ordered a
retreat, to recuperate back at your fort before trying again.
</p>
<p>
Fortunately, this means all the money you brought along remained intact, and are put back into the treasury without a single coin lost. You imagine many coins would have been "lost" were you not personally attending to this quest...
</p><p>
You never arrive at the alchemist's island. Your ship was attacked by rowdy
pirates of the south, who emerged victorious against you. You were helpless
to do anything but watch as they discovered half of the money you stowed
along the ship, and moved them one crate at a time to their ship. Seeing the
wealth of money they had looted, the pirates "kindly" threw you a present
slave — a recent capture from one of their raiding trip, saying that it made
you even with them.
</p>/* PROOFREAD COMPLETE */
<<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_proud,
setup.trait.per_dominant,
setup.trait.skill_creative,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.bg_maid,
setup.trait.bg_whore,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_humble,
setup.trait.per_submissive,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
],
[
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.dick_large,
setup.trait.dick_huge,
setup.trait.dick_titanic,
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.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_playful,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.eq_slutty,
setup.trait.eq_veryslutty,
],
[
setup.trait.bg_boss,
setup.trait.bg_slaver,
setup.trait.dick_tiny,
setup.trait.balls_tiny,
setup.trait.breast_tiny,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.face_scary,
setup.trait.face_hideous,
setup.trait.per_serious,
setup.trait.per_chaste,
],
[
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',
'sea',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Outcomes('success'),
],
],
[
'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', 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, setup.rarity.always],
],
[ /* 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 and not simply 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 <<yourrep _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 pair of lovers 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><<if $gOutcome == 'crit'>>
<<if $g.master.isMale() && $g.slave.isMale()>>
<<questimage 'the_display_of_love_gay.jpg'>>
<<elseif $g.master.isFemale() && $g.slave.isFemale()>>
<<questimage 'the_display_of_love_lesbian.jpg'>>
<<else>>
<<questimage 'the_display_of_love_hetero.jpg'>>
<</if>>
<</if>>
<p>
The final island
<<yourrep $g.master>> and <<utheirrel $g.master $g.slave>> <<rep $g.slave>>
arrived at was different than usual, yet remain beautiful per usual. A
bustling city unlike any in <<lore continent_main>>, with people of different
culture frolicking in their daily lives. But your slavers were here on a
mission, not sightseeing, and made a beeline for the palace.
</p>
<p>
Within the palace was a designated bed, covered by shroud leaving only
silhouettes of its occupants visible from the outside. As your slavers
arrived, they weregreeted with the silhouettes of one of the Trial of Love
participants engaging in some very sensual deep throating action behind the curtains. Sitting in front
was the emperor, who funded the entire trials.
Your slavers recognized the emperor -- he is the infamous Emperor Hentei,
known widely for his wild sexual taste.
Your slavers got the
feeling the entire trials was ultimately a scam to satisfy the emperor's
voyeurism fetish, but really they coudln't argue much given the amount of
rewards the emperor had promised.
</p>
<p>
Your slavers <<uadv $g.master>> patiently waited for their turn, before donning
the outfits they were using for the display. A full-on leather gear for <<rep
$g.master>>, while <<rep $g.slave>> slave|was donning almost nothing.
Once behind the curtain, they enacted the raunchy sex they had been always fantasizing on.
</p>
<<if $gOutcome == 'failure'>>
<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 lizardkin
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 loved to spend his money...
</p>
<<else>>
<<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 could be seen writhing in a mixture of agony and
pleasure from both the pain and the stimulation from the whip.
<<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 plenty of
<<if $g.master.isHasDick()>>cum<<else>>pussyjuice<</if>> scattered around 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>> quest to sexually
dominate <<rep $g.slave>>. But there was two dominants on the bed, which
made a rather amusing scene as the lovers wrestled against each other,
trying to grasp control of the whip and the situation. They tumbled and twisted
on top of the bed, emitting hotly arousing sounds as the wrestling act was
projected into the silhouettes. But <<rep $g.master>> had the advantage of
clothing and the sex toy, and <<rep $g.slave>> ultimately 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>> quest 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 became natural. <<Rep $g.master>> punished <<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>>.
<</if>>
The lovers ended up with a rough hard sex in 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 the filthy thing up with
<<reps $g.slave>> tongue.
</p>
<<elseif $g.master.isHasTrait('per_submissive') or $g.slave.isHasTrait('per_dominant')>>
<p>
But the play did not play out 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>> 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 very well.
</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 <<reps $g.slave>> past as a slave also helped out in the process.
<</if>>
The lovers even got to enjoy it as time pass, and they completed 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 were 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 happened in the first two weeks of their stay in the
island. What they did with the remaining two weeks of their assignments remained a mystery, but
rumors said that they often reenacted the bedroom scene in the fort nowadays...
</p>
<</if>><p>
<<Rep $g.master>> and <<utheirrel $g.master $g.slave>> never made it back to
the fort. It seemed that the hosts decided that the pair of lovers made
for a great pair of slaves much better than a pair of slavers.
</p>
<<uneedrescue $g.master>>.
<<uneedrescue $g.slave>>./* PROOFREAD COMPLETE */
<<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_brave,
setup.trait.per_loyal,
setup.trait.per_chaste,
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_thin,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_cautious,
setup.trait.per_independent,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_masochistic,
setup.trait.per_evil,
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.muscle_thin,
setup.trait.muscle_verythin,
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_lavish,
setup.trait.per_kind,
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.dick_tiny,
setup.trait.breast_tiny,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_frugal,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.per_evil,
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',
'sea',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.common],
],
[ /* 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 among 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>
<<Yourrep $g.knight>> and <<utheirrel $g.knight $g.healer>> <<rep $g.healer>>
arrived at the island, and were 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 knew
they were there 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 was trial by combat, where your slavers must demonstrate their
ability to work with each other in hardship. Pairs of lovers were 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>> 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')>>
cast healing spells upon healing spells to
<<else>>
used healing potions upon healing potions (which costed you money, by the way) 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>> had returned to your fort. They looked 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 <<yourrep $g.healer>> returned from the quest. <<They $g.healer>>
tearfully begged you to save
<<utheirrel $g.healer $g.knight>> <<rep $g.knight>> — the slavers had
apparently fallen into a trap, as the "Trial of Love" turned out to be a simple scheme to
lure in people from your land to be remade as a love slave.
</p>
<p>
<<Therace $g.knight>> had apparently sacrificed <<themself $g.knight>> to let
<<rep $g.healer>> escape alone.
<<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>/* PROOFREAD COMPLETE */
<<set _criteriaknight = new setup.UnitCriteria(
null, /* key */
'Brewer Trialist', /* name */
[
setup.trait.bg_scholar,
setup.trait.bg_wiseman,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_attentive,
setup.trait.skill_alchemy,
],
[
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_dreamy,
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',
'sea',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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, setup.rarity.always],
],
[ /* 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>
<<Yourrep _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 <<lore region_sea>>, this time
to apparently test another aspect of their love.
</p>
<p>
<<if $inventory.isHasItem(setup.item.love_technology)>>
While you already have <<rep setup.item.love_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 in a random tavern.
<</if>>
Either way, you'd better prepare your slavers for another "leisurely 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>
<<Yourrep $g.knight>> and <<utheirrel $g.knight $g.healer>> <<rep $g.healer>>
yet again arrived at a non-descript island. Just like last time, the island is
a paradise — arching rocks greeted your slavers, inviting them to explore the
seemingly pristine and uninhabited island. But the lovebirds were on a
mission, and they had no intention to fail it.
</p>
<p>
The second trial explored the theme of how far one would go for their beloved
in sickness. Love stories often tell of tales where the lover would 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 tasked its competitors to concoct as
wondrous potion as they could possibly could from within the islands, as if
their beloved were 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 rare ingredients.
</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>> had read that these strange-looking fruits were 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 <<reps $g.knight>> gaze turned lustful, and advanced upon
<<their $g.knight>> lover seemingly with no restraint. Only after <<rep
$g.healer>> healer|was used beyond <<their $g.healer>> limit that the fruit's effect finally
dissipated — a potent aphrodisiac fruit. <<Rep $g.knight>> would have the time to
apologize to their lover <<rep $g.healer>> later, but for that moment,
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 had 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 completed 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">>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'raidbeyond_the_southern_seas', /* key */
"Raid: Beyond the Southern Seas", /* Title */
"darko", /* Author */
[ 'sea', 'money', 'ire',
], /* tags */
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport, },
{ /* actors */
'villager': 'subrace_humansea', },
[ /* costs */
],
'Quest_raid__beyond_the_southern_seas',
setup.qdiff.hard50, /* difficulty */
[ /* outcomes */
[
'Quest_raid__beyond_the_southern_seasCrit',
[
setup.qc.Slave('villager', "a|was a simple 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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are several remote settlements on the southern seas —- these
settlements are rarely well-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 <<lore region_sea>>, this
innocuous looking mission is sure to hide some unknown dangers...
</p><p>
Your slavers, led by <<rep $g.raider1>>, were met with little resistance as
they raided their houses and raped the villagers.
<<set _raider = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'bg_raider'})>>
<<if _raider>>
The raiding reminded <<rep _raider>> of <<their _raider>> past as a raider in the
<<uhomeland _raider>>.
<</if>>
<<set _evil = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_evil'})>>
<<if _evil>>
Seeing the devastation, <<rep _evil>> could not help but grin evilly.
<</if>>
<<set _cruel = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_cruel'})>>
<<if _cruel>>
The cruelty satisfied <<reps _cruel>> sadistic tendencies.
<</if>>
In the end, they managed to
<<uadv $g.raider1>> plundered much of the village as well as kidnapped 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 was 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
a village square, which was obviously well defended by the fierce locals.
Worse, <<rep $g.support>> support|was captured by the locals, no doubt going to be made
example for your atrocities.
<<urescuenow $g.support>>.
</p><<run new setup.UnitGroup(
"sea_escort0",
"Sea Pirate",
'sea_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_pirate),
],
)>> <<run new setup.UnitGroup(
"sea_escort1",
"Mercenary",
'sea_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_mercenary),
],
)>>
<<run new setup.QuestTemplate(
'sea_escort', /* key */
"Sea Escort", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'money',
'unknown',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'guard1': [ setup.qu.guard, 1],
'guard2': [ setup.qu.guard, 1],
'support': [ setup.qu.guardsupport, 1],
},
{ /* actors */
'pirate': 'sea_escort0',
'merc': 'sea_escort1',
},
[ /* costs */
],
'Quest_sea_escort',
setup.qdiff.hard50, /* difficulty */
[ /* outcomes */
[
'Quest_sea_escortCrit',
[
setup.qc.OneRandomSeed([
setup.qc.MoneyCustom(12000),
setup.qc.DoAll([
setup.qc.MoneyCustom(6000),
setup.qc.Favor('lizardkin', 300)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(6000),
setup.qc.Favor('humansea', 300)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(6000),
setup.qc.Slave('pirate', "a|was a pirate in the southern seas captured by your slavers and made into a slave", undefined)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(6000),
setup.qc.Slaver('merc', "a|was a mercenary working in the Southern Seas who asked to join your company for a more permanent position", undefined)
], undefined)
]),
],
],
[
'Quest_sea_escortCrit',
[
setup.qc.OneRandomSeed([
setup.qc.MoneyCustom(6000),
setup.qc.DoAll([
setup.qc.MoneyCustom(3000),
setup.qc.Favor('lizardkin', 150)
], undefined),
setup.qc.DoAll([
setup.qc.MoneyCustom(3000),
setup.qc.Favor('humansea', 150)
], undefined),
setup.qc.MoneyCustom(6000),
setup.qc.MoneyCustom(6000)
]),
],
],
[
'Quest_sea_escortFailure',
[
setup.qc.OneRandomSeed([
setup.qc.MissingUnit('guard1'),
setup.qc.MissingUnit('guard2')
]),
],
],
[
'Quest_sea_escortFailure',
[
setup.qc.MissingUnit('guard1'),
setup.qc.MissingUnit('guard2'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><<set _u = setup.getAnySlaver()>>
<p>
The <<lore region_sea>> is a very dangerous region, even for your experienced slavers. So it is not a surprise that most people who decide to go southwards would hire escorts and mercenaries to guard them along the journey. Given how treacherous the seas are and the dangers within, the promised pay for such a duty is very high. One such offer is sitting quietly at your desk right now, and you can send a group of slavers on a honest mission for once, guarding people on their journey across the sea. The reward is great, and who knows what the might encounter along the way?
</p><<if $gQuest.getSeed() % 5 == 0 || $gQuest.getSeed() % 5 == 4>>
<p>
To your complete surprise, the journey was completed without encountering any danger.
<<if $gOutcome == 'success'>>
The grateful merchants paid handsomely for your slavers' services, even though all they did was
<<else>>
The merchants that your slavers guarded made so much profit that they shared a rather generous reward for your slavers services, despite them doing nothing and mostly just
<</if>>
<<set _sleep = (
$g.guard1.isHasTrait('per_dreamy') or $g.guard1.isHasTrait('per_active') or
$g.guard2.isHasTrait('per_dreamy') or $g.guard2.isHasTrait('per_active') or
$g.support.isHasTrait('per_dreamy') or $g.support.isHasTrait('per_active')
)>>
<<if _sleep>>
snooze on the job.
<<else>>
drink on the job.
<</if>>
</p>
<<if $gQuest.getSeed() % 5 == 4 && $gOutcome == 'crit'>>
<p>
At the end of the journey, one of the other hired mercenaries approached your slavers, apparently impressed by... whatever they were doing on the ship. <<Therace $g.merc>> asked to join their employer — that is you — and <<they $g.merc>> merc|is now waiting in your <<rep setup.buildingtemplate.prospectshall>>. Given your slavers were mostly
<<if _sleep>>
slept throughout
<<else>>
drinking on
<</if>>
this job, however, you're not sure that <<their $g.merc>> impression about your company is at all accurate...
</p>
<</if>>
<<else>>
<p>
The exotic species living across the seas fetch for a wonderful price in the continent of <<lore continent_main>>, and as a result many slaver ships are abound in the seas.
Your slavers had the misfortune of encountering one such ship, but fortunately,
<<yourrep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> were quite good at their job.
When the slaver ship decided to board the merchant ship your slavers were guarding,
<<yourrep $g.guard1>> raised <<their $g.guard1>> <<uweapon $g.guard1>> and charged <<uadv $g.guard1>> into the incoming slavers. Clash of metal against metal ensued, but ultimately it was <<reps $g.guard2>> <<upraisenoun $g.guard2>> that earned your slavers a hard-won victory.
</p>
<p>
<<if $gQuest.getSeed() % 5 == 3 && $gOutcome == 'crit'>>
The invading slavers were routed back to their ship, but <<rep $g.guard1>> <<uadv $g.guard1>> snatched one of them and knocked <<them $g.pirate>> unconscious.
<<Therace $g.pirate>> would make for a fine slave indeed back at your fort, although
there is no doubt that your slavers would have already sampled the slaves' various orifices to mitigate the boredom of the journey back home.
<<elseif $gQuest.getSeed() % 5 == 1 or $gQuest.getSeed() % 5 == 2>>
With the pirates defeated, your slavers instead boarded the pirate ship to look for valuables. Inside, they found
<<if $gQuest.getSeed() % 5 == 1>>
several lizardkin captives
<<else>>
several human captives
<</if>>
being tied up and stored like a cargo.
The thoughts of enslaving all of them came into mind, but considering the journey back home together with their employers, it was rather unfeasible to take all of them back home. Your slavers decided to free them instead, and the rescued slaves were
<<if $gOutcome == 'crit'>>
very grateful, and your company's reputation soar with the
<<else>>
grateful, increasing your company's reputation with the
<</if>>
<<if $gQuest.getSeed() % 5 == 1>>
<<rep $company.lizardkin>>.
<<else>>
<<rep $company.humansea>>.
<</if>>
<<else>>
<</if>>
</p>
<</if>><p>
Unfortunately, the merchant ship was ambushed by
<<if $gQuest.getSeed() % 3 == 0>>
a kraken, who assaulted the ship out of nowhere.
<<elseif $gQuest.getSeed() % 3 == 1>>
a slaving ship, who boarded the ship in the middle of the night.
<<elseif $gQuest.getSeed() % 3 == 2>>
a pirate ship, who brazenly assaulted the ship.
<</if>>
Your slavers fought bravely against the threat, but ultimately
<<if $gOutcome == 'disaster'>>
both <<rep $g.guard1>> and <<rep $g.guard2>> were
<<elseif $gQuest.getSeed() % 2 == 0>>
<<rep $g.guard1>> was
<<else>>
<<rep $g.guard1>> was
<</if>>
<<if $gQuest.getSeed() % 3 == 0>>
grabbed by one of the many tentacles and yanked out of the ship.
<<elseif $gQuest.getSeed() % 3 == 1>>
kidnapped by the slavers who then retreated to their ship.
<<elseif $gQuest.getSeed() % 3 == 2>>
downed by the unscrupulous pirates who then took their "booty" to their ship.
<</if>>
It might still be possible to rescue your slaver<<if $gOutcome == 'disaster'>>s<</if>>, if you act quick enough. Better get your Rescuer to work, if you already have one.
</p><<run new setup.Title(
"quest_master_of_aid_0", /* key */
"Master of Aid", /* name */
"A true master of aid", /* description */
"a|have proven a|themself to be a master of aid by completing a challenge in the seas", /* unit text */
7599, /* slave value */
{ /* skill additives */
aid: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Healer', /* name */
[
setup.trait.bg_assassin,
setup.trait.bg_healer,
setup.trait.bg_slaver,
setup.trait.per_masochistic,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_lunatic,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.aid, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_aid_0')
]), 'Have not yet mastered the art of aid'),
],
{
aid: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_aid', /* key */
"Test of Aid", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'legendary',
'veteran',
'prep',
'danger',
'item',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'x': 'sea_all',
},
[ /* costs */
],
'Quest_test_of_aid',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_aidCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_aid_0'),
setup.qc.EquipmentDirect('aid_weapon_master'),
],
],
[
'Quest_test_of_aidCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_aidCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_aid, 20),
],
],
[
'Quest_test_of_aidCrit',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
setup.qc.Trait('a', setup.trait.per_submissive),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_aid_0'),
setup.qres.SkillAtLeast(setup.skill.aid, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><<set _slaver = setup.getUnit({
job: 'slaver',
skill_max: setup.skill.aid,
notyou: true,
})>>
<p>
<<Rep _slaver>> is a master healer, whose mastery is so much that <<they _slaver>> occasionally receive visits from travelers far and away seeking <<their _slaver>> talents to cure whatever ails them.
But you've only learned just how much word of <<their _slaver>> talents have spread as you read a strange letter you receive today, sent apparently from a land far beyond the <<lore region_sea>>.
</p>
<p>
As you recall, many <<rep setup.trait.subrace_humansea>> are gifted in the art of healing, and apparently when such a healer claims to have mastered their craft, they would go to a specific healing monastery to demonstrate their mastery with a demonstrative action — something that only a master of healing would know.
<<if $unit.player.getSkill(setup.skill.aid) >= 120>>
As a master healer yourself, you know exactly what this action would be, but
<<else>>
You have no clue what this action would be, and
<</if>>
you would not have interest in sending any of your slavers to such a faraway land until you read the last paragraph of the letter. A reward is promised upon a successful completion of the rite: and it is something you could not refuse. The incredibly rare <<rep setup.equipment.aid_weapon_master>>, said to enhance the healing abilities of whoever lucky enough to wield the staff.
</p>
<p>
The letter wasn't addressed directly to <<rep _slaver>>, and you could send just about anyone you feel qualified enough to be called a master healer, should you feel the potential reward outweighs the potential risks...
</p><p>
The journey to the island was long, and <<rep $g.a>> got plenty of time to contemplate.
At the end of the journey, <<they $g.a>> will be asked to demonstrate the single, distilled, most pure act that would demonstrate a mastery over healing. What could be the correct answer? Would closing multiple wounds at the same time would suffice? Would healing while blindfolded would suffice? Is it the act of healing combined with sexual pleasure — the art of healslutting?
</p>
<p>
Deep within contemplation, the journey was finished as if it was an instant, and even as <<rep $g.a>> took the steps towards the temple, <<they $g.a>> still had not receive a satisfactory answer. But the ritual had to commence, and it was commenced in a room, locked, consisting only of <<rep $g.a>> and the head priest of the temple, concealed behind a curtain.
The curtain the rose, signaling the start of the ritual, while simulatenously exposing
the priest and <<their $g.x>>
<<if $g.x.isMale()>>
surprisingly well-honed body.
<<else>>
surprisingly curvaceous body.
<</if>>
</p>
<<if $gOutcome == 'crit'>>
<p>
But something was not right about the body.
<<Reps $g.a>> mastery of healing is such that <<they $g.a>> could even see the after effects of healing — this <<man $g.x>> in front of them has been injured and healed over and over again.
And the answer to the question that has lingered in <<their $g.a>> head thus far has finally arrived — one who knows how to heal and soothe pain also knows the most terrifying and brutal way of inflicting pain — and it is something <<they $g.a>> just would have to demonstrate.
<<if $g.a.isHasTrait('per_kind')>>
<<Rep $g.a>> closed <<their $g.a>> eyes for a bid, the kind <<urace $g.a>> trying to come up with another answer, but still came to the same conclusion.
<<else>>
Presented with a sudden opportunity to inflict pain brought a grin to the sadist <<urace $g.a>>.
<</if>>
Rising from <<their $g.a>> seat, <<rep $g.a>> took a nearby and conveniently located whip, and began to work.
</p>
<p>
The priest gave no hint of fear as <<rep $g.a>> approached with a whip, and in fact,
<<rep $g.a>> could actually
<<if $g.x.isMale()>>
see a small but noticable bulge forming underneath.
<<else>>
smell a faint scent of arousal.
<</if>>
<<Their $g.a>> suspicion was immediately answered as <<they $g.a>> masterfully whipped the priest at just the right angle to administer the most pain — the priest screamed not in agony, but in pure ecstacy. The answer was a correct one, and the temple has prepared for it by selecting a particularly masochistic priest as the tested.
With that revelation, all that was needed was to complete the ritual,
and
<<if $g.a.isHasTrait('per_cruel')>>
the sadist couldn't be happier.
<<elseif $g.a.isHasTrait('per_kind')>>
the kind <<urace $g.a>> breathed a sigh of relief, knowing that <<their $g.a>> pain was actually something the priest always wanted.
<<else>>
<<therace $g.a>> got <<their $g.a>> resolve bolstered.
<</if>>
The sound of whip cracking was heard again and again from within the room.
<<if $g.a.isHasTrait('per_masochistic')>>
<<Rep $g.a>> even occasionally would "miss" and would hit <<themself $g.a>>, but given how masochistic <<they $g.a>> usually a|is, you have second doubts it was accidental.
<<run setup.qc.Injury('a', 1).apply($gQuest)>>
<<run setup.qc.BoonizeRandom('a', 5).apply($gQuest)>>
<</if>>
<<if $g.a.isHasTrait('magic_light')>>
Their whipping brought great pain, but <<reps $g.a>> mastery over light magic ensured the damage was actually minimal.
<</if>>
The head priest visibly
<<if $g.x.isMale()>>
came
<<else>>
climaxed
<</if>>
many times throughout.
</p>
<p>
A few hours later, the room was unlocked. With <<their $g.x>> last piece of consciousness, the head priest announced the ritual complete, and
<<if $g.x.isMale()>>
came
<<else>>
climaxed
<</if>>
for the last time before passing out.
<<Rep $g.a>> a|was deservedly bestowed the title of the
Master of Aid, but more importantly, was given <<their $g.a>> well deserved reward: the <<rep setup.equipment.aid_weapon_master>>.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
<<Rep $g.a>> remained completely clueless, and did nothing for the good part of the next hour. The ritual was then deemed a total failure, and in fact, it was such a total failure that the temple deemed it fit to claim <<reps $g.a>> body as compensation for their wasted time.
<<Rep $g.a>> never returned back home, and you fear that the temple had other plans for <<them $g.a>>...
Perhaps you could rescue <<them $g.a>>, should you be quick about it, but you do wonder just how changed <<they $g.a>> would be when and if you get <<them $g.a>> back...
</p>
<<else>>
<p>
<<Rep $g.a>> remained clueless, having no hint on what could be the possible answer. In desperation, <<they $g.a>> tried to unleash <<their $g.a>> massive healing onto the priest. While the priest was not wounded, <<reps $g.a>> mastery over healing was such that it could even heal the apparently numerous scars riddling <<their $g.x>> body. Still, it was not the answer, and the ritual was deemed a failure. Fortunately, the priests were encouraging, and advised <<rep $g.a>> to try again later, perhaps when <<they $g.a>> had master the art of healing just tiny bit more.
</p>
<<if $gOutcome == 'success'>>
<p>
After <<rep $g.a>> returned, as promised you receive another invitation to the temple. Once <<rep $g.a>> recovered from <<their $g.a>> understandble exhaustion, perhaps you could try again.
</p>
<</if>>
<</if>><<run new setup.Title(
"quest_master_of_combat_0", /* key */
"Master of Combat", /* name */
"A true master of combat", /* description */
"a|have proven a|themself to be a master combatant by completing a challenge in the southern seas", /* unit text */
7599, /* slave value */
{ /* skill additives */
combat: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Fighter', /* name */
[
setup.trait.bg_knight,
setup.trait.bg_mercenary,
setup.trait.skill_creative,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.eq_veryvaluable,
],
[
setup.trait.face_beautiful,
setup.trait.skill_hypnotic,
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.SkillAtLeast(setup.skill.combat, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_combat_0')
]), 'Have not yet mastered the art of combat'),
],
{
combat: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_combat', /* key */
"Test of Combat", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'prep',
'item',
'veteran',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_test_of_combat',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_combatCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_combat_0'),
setup.qc.EquipmentDirect('combat_weapon_master'),
setup.qc.ItemIfNew(setup.item.lorebook_doppelganger),
],
],
[
'Quest_test_of_combatCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_combatCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_combat, 20),
setup.qc.ItemIfNew(setup.item.lorebook_doppelganger),
],
],
[
'Quest_test_of_combatCrit',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
setup.qc.ItemIfNew(setup.item.lorebook_doppelganger),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_combat_0'),
setup.qres.SkillAtLeast(setup.skill.combat, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><p>
It is not a secret that you have a master fighter under your employ. And the word spread out fast too. Be it the lustful ladies lusting over your slaver, or the criminals looking for new hires, many have known the existence of such master within your employ.
</p>
<p>
Words have spread south too, into the <<lore region_sea>>, and you receive a letter today from one of the southern isle's hermits. A sword hermit of the sword — master of cutting blades and cutting wit — or so it was supposedly sent by. The letter is an invitation for a trial, to prove their mastery of combat and earn the title of Master of Combat.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
You are hard pressed to believe for such rumor be true, but <<yourrep _u>> convinces you that there is more to the letter. Included in the letter is a piece of old, decrepit looking metal. You thought of it as trash, but according to <<rep _u>>, it is the exceedingly rare dilithium, capable of being forged into the strongest, most durable sword. It might just be possible to get your <<uhands $unit.player>> on a rather legendary sword, should your slaver succeed.
</p>
<p>
You have your doubts about <<rep _u>>'s knowledge on the craft,
<<if _u.isHasTrait('skill_alchemy')>>
although then again, <<they _u>> is a capable alchemist, so maybe there is something more to it.
<<else>>
but <<they _u>> might just have a point. Looking back at the stone, you are reminded by the similarity between jewels and rare metal — it is always the false ones that look the most real, the most brilliant.
<</if>>
</p><p>
<<Yourrep $g.a>> traveled alone, as directed, to a lonesome island sitting quietly in the middle of the ocean, surrounded by nothing but the sparkling blue ocean.
<<They $g.a>> embarked on the pristine shore, but <<they $g.a>> did not have to wait long to confirm <<they $g.a>> did not get mislaid — the fresh sound of sword against wood — the sure signs of combat practice.
And the sound came in fast and rapidly too — a master of the craft, no doubt.
<<if $g.a.isHasTrait('per_proud')>>
But <<rep $g.a>> a|is a proud <<urace $g.a>>, and <<they $g.a>> not in the slightest intimidated by the prospect of tough opponent.
<<elseif $g.a.isHasTrait('per_humble')>>
<<Rep $g.a>> felt a little humbled to meet a fellow master of combat soon.
<<else>>
But <<rep $g.a>> a|is certainly no slouch in combat, and <<they $g.a>> rested <<their $g.a>> <<uhands $g.a>> as <<they $g.a>> proceeded deeper into the isle.
<</if>>
</p>
<p>
A lone <<man $g.a>> awaited <<them $g.a>> there, masterfully wielding a <<uweapon $g.a>>, practicing against a poor dummy. <<Their $g.a>> face wasn't visible — but it was clear that <<they $g.a>> a|is a fellow <<urace $g.a>>. Seeing <<rep $g.a>>, the hermit swung the weapon heavily, effortlessly splitting the dummy into two, ending the wicked straw man's life, before greeting your slaver, face still covered by the hood <<they $g.a>> wore.
</p>
<p>
Instead of a bloodthirsty, battle-hungry warrior, <<rep $g.a>> was met with a humble, almost meek <<urace $g.a>>, the same race with <<themself $g.a>>. <<They $g.a>> a|was offered some refreshments before finally going down to business. Apparently, the hermit had been testing warriors, seeking to master <<their $g.a>> craft and bestowing wisdom in return. <<They $g.a>> finally challenged <<yourrep $g.a>> to a proper duel, before opening <<their $g.a>> small armory and picking up <<their $g.a>> preferred weapon — a <<rep setup.equipment.combat_weapon_master>>. At first, only the tip was visible to <<rep $g.a>>, but it was already wondrous and great. The blade gleamed like a beacon in the shadowy room, emitting a shade of red, shaking from the power contained within. A weapon befitting of the master of swords, no doubt.
</p>
<p>
<<Rep $g.a>> agreed to the duel, of course, but
<<if $g.a.isHasTrait('per_frugal')>>
being the worldly slaver that <<they $g.a>> a|is,
<<else>>
remembering the entire reason for the quest,
<</if>>
<<they $g.a>> only agreed to the duel after the hermit promised to put the sword as an ante.
With the sword as a suitable reward, it was time for the duel to begin.
</p>
<p>
The two combatants circled each other for a while, before <<rep $g.a>> decided to make the first attack, or so <<they $g.a>> thought. The hermit also took the opportunity to launch an attack, and the clash of weapon upon weapon began.
Both fighters were evenly matched, <<reps $g.a>> <<uweapon $g.a>> meeting the <<rep setup.equipment.combat_weapon_master>> without giving any opening for both fighters to seize.
The two almost danced on the battlefield, and while no hit were scored cleaned yet, a glancing strike hit the hermit's hood, tearing it apart.
</p>
<p>
<<They $g.a>> had the same face. The same
<<if $g.a.isHasTrait('eyes_neko')>>
cat-like eyes, glowing even in the dark,
<<elseif $g.a.isHasTrait('eyes_dragonkin')>>
dragon-like eyes, red with anger,
<<elseif $g.a.isHasTrait('eyes_demon')>>
demonic eyes, tainted with corruption,
<<else>>
color of eyes,
<</if>>
<<if $g.a.isHasTrait('mouth_neko')>>
the same sensitive whiskers adoring <<their $g.a>> cheek,
<<elseif $g.a.isHasTrait('mouth_orc')>>
the same pair of tusks jutting from <<their $g.a>> mouth,
<<elseif $g.a.isHasTrait('mouth_werewolf')>>
the same fangs hidden under <<their $g.a>> muzzle,
<<elseif $g.a.isHasTrait('mouth_dragonkin')>>
the same draconic snout replacing <<their $g.a>> mouth,
<<elseif $g.a.isHasTrait('mouth_demon')>>
the same terrifying demonic smile,
<<else>>
the same shape of mouth,
<</if>>
and even the same shape of jawline.
It was like looking at a mirror — a perfect copy of <<themself $g.a>>
</p>
<p>
There could be only one answer — <<they $g.a>> a|was fighting a doppelganger. But there was no time to contemplate the fact, as the hermit continued <<their $g.a>> relentless assault.
<<if $g.a.isHasTrait('bg_knight')>>
<<Rep $g.a>> tried to rely on <<their $g.a>> fighting instincts long honed from <<their $g.a>> days as a knight, but the double copied that too.
<</if>>
<<if $g.a.isHasTrait('bg_mercenary')>>
<<Rep $g.a>> tried to rely on <<their $g.a>> fighting instincts long honed from <<their $g.a>> days as a mercenary, but the double copied that too.
<</if>>
<<if $g.a.isHasTrait('face_beautiful')>>
<<Reps $g.a>> gorgeous face distracted <<themself $g.a>>.
<</if>>
<<if $g.a.isHasTrait('skill_hypnotic')>>
<<Their $g.a>> own hypnotic eyes were reflected on the doppelganger's.
<</if>>
<<if $g.a.isHasTrait('magic_water')>>
<<Their $g.a>> mastery of water was copied over too, and doppelgangers' natural affinity to water meant <<they $g.a>> had the advantage.
<</if>>
<<if $g.a.isHasTrait('magic_dark')>>
<<Reps $g.a>> mastery of dark magic proved detrimental, as the doppelganger copied that too, and used the corruption to great effect.
<</if>>
</p>
<<if $gOutcome != 'disaster'>>
<p>
But fortunately, <<reps $g.a>> mastery of combat and years of experience is not something a doppelganger could just easily copy.
<<if $g.a.isHasTrait('skill_creative')>>
<<Their $g.a>> creative brain came up with surprise and flank attacks to mix up the fight.
<</if>>
<<if $g.a.isHasTrait('magic_light')>>
<<Their $g.a>> mastery over light is not so easily used by doppelgangers, who are less attuned to the domain.
<</if>>
<<if $g.a.isHasTrait('magic_fire')>>
<<Their $g.a>> mastery over fire is not so easily used by doppelgangers, who are less attuned to the domain.
<</if>>
<<if $g.a.isHasTrait('eq_veryvaluable')>>
<<Their $g.a>> expensive gears did not get copied.
<</if>>
<<They $g.a>> took whatever opening and advantage <<they $g.a>> could, for <<they $g.a>> a|was truly facing <<their $g.a>> worst enemy of all — <<themself $g.a>>.
</p>
<<if $gOutcome == 'crit'>>
<p>
The fight was long, but <<rep $g.a>> a|is a master fighter, and it showed. Even against <<themself $g.a>>, <<they $g.a>> a|was still able to open up an opening, and a single opening was all <<they $g.a>> needed to secure the blow. The hermit was downed in one strike, <<their $g.a>> <<rep setup.equipment.combat_weapon_master>> clattered harmlessly out of <<their $g.a>> <<uhands $g.a>> and into the floor. The battle was finally over.
</p>
<p>
A doppelganger does not have a true form, and <<they $g.a>> stayed within <<reps $g.a>> body. But as the old saying go, it is never wise to face your own reflection, and hence <<rep $g.a>> decided to keep <<their $g.a>> prize of winning — the <<rep setup.equipment.combat_weapon_master>> — and sail back home. But although the sword is rare and wondrous and great, it was the other treasure that was clearly visible even by the other slavers in your fort. <<Rep $g.a>> had changed — had rediscovered what it means to be a warrior after fighting fiercely with <<themself $g.a>> — and is now worthy of the title <<rep setup.title.quest_master_of_combat_0>>.
</p>
<p>
<<Rep $g.a>> never found out about the hermit's true purpose, nor the large complex of dungeons hidden beneath the small cottage...
</p>
<<else>>
<p>
The fight was long, and despite <<rep $g.a>> being a master fighter, luck was not on <<their $g.a>> side. An errant bump on the ground shook <<their $g.a>> posture for just a moment, and lesser swords<<men $g.a>> would not be able to take notice. But <<rep $g.a>> is a masterful one, and hence so is <<their $g.a>> clone, and the doppelganger seized the opportunity to strike a deciding blow. <<Rep $g.a>> slumped into the ground, defeated as <<their $g.a>> <<uweapon $g.a>> was thrown out of <<their $g.a>> <<uhands $g.a>>.
</p>
<p>
Still, it seemed to have satisfy the hermit greatly, for they applauded the efforts and the mastery shown by your slaver. <<Rep $g.a>> a|was returned to <<their $g.a>> ship and sailed back home with injuries, but despite that, <<they $g.a>> a|was smiling all the time. It seems <<they $g.a>> a|was uplifted from the invigorating fight, and it might be a good idea to try again once <<they $g.a>> recovered.
<<if $gOutcome == 'success'>>
The hermit even re-send the invitation to you, should you wish to do so.
<</if>>
</p>
<</if>>
<<else>>
<p>
The doppelganger however had too much advantage — unlike <<rep $g.a>>, <<they $g.a>> fought on a familiar terrain of <<their $g.a>> home, and <<rep $g.a>> soon find themselves on the other end of the <<rep setup.equipment.combat_weapon_master>>. Instead of showing graciousness in winning, the hermit instead knocked <<rep $g.a>> out, and hauled <<them $g.a>> into the vast dungeon complex hidden beneath <<their $g.a>> small cottage. Myriads of other prideful warriors were chained down there, being slowly but surely turned into obedient warrior slaves for the doppelganger's perverted pleasure. Your slaver finally find the hard way the real reason why the doppelganger is sending invites to master swords<<men $g.a>> across the land. From your side, however, you best get going and rescue your missing slaver as soon as possible, before <<their $g.a>> mind is fully transformed into that of an obedient warrior slut.
</p>
<</if>><<run new setup.Title(
"quest_master_of_slaving_0", /* key */
"Master of Slaving", /* name */
"A true master of slaving", /* description */
"a|have proven a|themself to be a master of slaving by completing a challenge in the seas", /* unit text */
7599, /* slave value */
{ /* skill additives */
slaving: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Slaver', /* name */
[
setup.trait.dick_huge,
setup.trait.dick_titanic,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_dominant,
setup.trait.skill_intimidating,
setup.trait.skill_hypnotic,
setup.trait.magic_earth_master,
setup.trait.magic_dark_master,
],
[
setup.trait.per_cautious,
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_lunatic,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.slaving, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_slaving_0')
]), 'Have not yet mastered the art of slaving'),
],
{
slaving: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_slaving', /* key */
"Test of Slaving", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'legendary',
'veteran',
'prep',
'danger',
'item',
'sea',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'e1': 'all',
'e2': 'all',
},
[ /* costs */
],
'Quest_test_of_slaving',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_slavingCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_slaving_0'),
setup.qc.EquipmentDirect('slaving_arms_master'),
],
],
[
'Quest_test_of_slavingCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_slavingCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_slaving, 20),
],
],
[
'Quest_test_of_slavingCrit',
[
setup.qc.MissingUnitRecapture('a', 'capturedhard'),
setup.qc.AddTraitsRandom('a', [setup.trait.per_submissive, setup.trait.per_cautious, setup.trait.per_kind], 1, false, false),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_slaving_0'),
setup.qres.SkillAtLeast(setup.skill.slaving, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><<set _slaver = setup.getUnit({
job: 'slaver',
skill_max: setup.skill.slaving,
notyou: true,
})>>
<p>
Your company has received an invitation for a unique competition. It will be held on a particular island in the south, and will feature many slavers from around the continent. The competition is titled "Slaving Deathmatch", which honestly sounded quite ridiculous to you. As to why you got invited, well, the organized apparently has heard of <<reps _slaver>> prowess in slaving, and they felt <<yourrep _slaver>> might just have what it takes to win the grand prize: a mouth-watering <<rep setup.equipment.slaving_arms_master>> that you cannot find anywhere else in the world.
</p>
<p>
You have no idea what is a slaving death match, nor whether you trust <<rep _slaver>> enough to send <<them _slaver>> on what surely will be a suicide mission, but if you really, really want that stupid glove, you might just have no choice but to attempt it. Then again, the letter did mention you could send anyone, not necessarily <<rep _slaver>>...
</p><p>
The rules for a slaving deathmatch turned out to be exceedly simple: ten slavers would come in, and only one will come out a slaver — the rest have been enslaved one way or another.
Without much fanfare, <<rep $g.a>> entered the arena — apparently deep within an ancient crater — to duke it out in an all-out-slaving match.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Evidently, however, <<rep $g.a>> a|is no slaver material. <<They $g.a>> became the first slaver to fell after another competitor exploited <<their $g.a>> <<uinsultnoun $g.a>>, which somehow ended up with the competitor holding a leash attached to a new shiny collar at <<reps $g.a>> neck. <<They $g.a>> never returned home, and last you heard, <<they $g.a>> a|is serving <<their $g.a>> new owner somewhere out there. You sigh, and prepare to rescue the <<uadjbad $g.a>> fool yet again...
</p>
<<else>>
<p>
<<Rep $g.a>> a|is a master slaver, and it was not just for show. <<They $g.a>> enslaved one by exploiting <<their $g.e1>>
<<uinsultnoun $g.e1>>,
<<if $g.a.isHasTrait('magic_earth_master')>>
another by summoning binding tentacles using <<their $g.e1>> mastery over earth magic,
<</if>>
<<if $g.a.isHasTrait('magic_dark_master')>>
one after subtly corrupting the unsuspecting new slave,
<</if>>
<<if $g.a.isHasTrait('skill_hypnotic')>>
another after instilling a couple of hypnotic triggers subconsciously,
<</if>>
<<if $g.a.isHasTrait('skill_intimidating')>>
a poor <<urace $g.e2>> who got intimidated,
<</if>>
<<if $g.a.isHasTrait('per_dominant')>>
a secretly submissive slaver who <<rep $g.a>> exploited <<uadv $g.a>>,
<</if>>
<<if $g.a.isHasTrait('muscle_verystrong')>>
an unlucky slaver, unlucky enough to be the subject of <<reps $g.a>> blunt strength,
<</if>>
and so and so until only two contestants were left standing (well, since the rest were already on all fours).
</p>
<<if $gOutcome == 'crit'>>
<p>
The last slaver was a tough nut to crack — a <<urace $g.e1>> master slaver,
and it took <<rep $g.a>> everything <<they $g.a>>.
First, <<rep $g.a>> proceeded by distracting <<them $g.e1>>.
<<if $g.a.isHasTrait('skill_hypnotic')>>
<<Rep $g.a>> made full use of <<their $g.a>> hypnotic skills to subtly influence <<therace $g.e1>>.
<</if>>
<<if $g.a.isHasTrait('skill_intimidating')>>
Using <<their $g.a>> intimidating presence, <<rep $g.a>> made sure to let <<them $g.e1>> know <<their $g.e1>> place.
<</if>>
<<if $g.a.isHasTrait('per_dominant')>>
<<Rep $g.a>> asserted full dominance over the exchange, drilling obedience into the <<urace $g.e1>>.
<</if>>
With the enemy distracted, <<rep $g.a>> seized the opportunity to tackle <<them $g.a>> down.
<<if $g.a.isHasTrait('muscle_verystrong')>>
It was no easy task, but <<reps $g.a>> bulging muscles were certainly a great boon.
<</if>>
<<if $g.a.isHasTrait('magic_dark_master')>>
<<Rep $g.a>> subtly applied dark magic to corrupt the situation in <<their $g.a>> favor.
<</if>>
<<if $g.a.isHasTrait('magic_earth_master')>>
<<Rep $g.a>> finally summoned binding tentacles from the ground, immobilizing <<therace $g.e1>>.
<</if>>
Once down, <<rep $g.a>> got to work quickly, <<their $g.a>> experienced <<uhand $g.a>> efficiently tying <<therace $g.e1>> up.
With the enemy finally immobilized, <<rep $g.a>> grabbed a silver collar, and lock it with a clank around <<therace $g.e1>>'s neck, claiming <<their $g.a>> victory.
</p>
<p>
With <<them $g.a>> as the only one still standing, the competition ended, and against all odds <<rep $g.a>> came out victorious. All the other nine former slavers are now nothing but slaves, and <<they $g.a>> will be sold by the committee to cover the cost of the competition.
<<Yourrep $g.a>> a|was awarded the well deserved title of Master of Slaving, as well as the <<rep setup.equipment.slaving_arms_master>>, to use as <<they $g.a>> see fit.
</p>
<<else>>
<p>
Unfortunately, the last match did not go anywhere. Both <<rep $g.a>> and the opponent were equally matched, and neither side were willing to relent to the other.
Realizing that words were not going to bring them anywhere, they resorted to the last resorts: violence, and both were knocked out roughly at the same time.
The competition were deemed a draw, with neither your slaver nor the last remaining participant winning.
</p>
<p>
<<Rep $g.a>> went home empty-handed, but with a good spirits from knowing that <<they $g.a>> a|was so close to a victory in such a competitive match.
<<if $gOutcome == 'success'>>
And the competition commitee recognized it too, and sent you another invitation soon after.
<</if>>
</p>
<p>
Oddly enough, the remaining eight competitors were nowhere to be seen on the boat back, but then again perhaps they were just all sleeping soundly inside their respective cabins...
</p>
<</if>>
<</if>><<set _criteriaferry = new setup.UnitCriteria(
null, /* key */
'ferry', /* name */
[
setup.trait.bg_pirate,
setup.trait.bg_seaman,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_sly,
setup.trait.per_gregarious,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_direct,
setup.trait.per_loner,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1,
knowledge: 1,
social: 1,
}
)>>
<<run new setup.QuestTemplate(
'totally_pirates', /* key */
"Totally Pirates", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'sea',
'money',
'unit',
],
3, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'pirate1': [ setup.qu.pirate, 1],
'pirate2': [ setup.qu.pirate, 1],
'ferry': [ _criteriaferry, 1],
},
{ /* actors */
'companion1': 'city_all',
'companion2': 'city_all',
'traveler': 'all',
},
[ /* costs */
setup.qc.MoneyCustom(-1000),
],
'Quest_totally_pirates',
setup.qdiff.hard48, /* difficulty */
[ /* outcomes */
[
'Quest_totally_piratesCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Slave('companion1', "a|was a traveling companion of an unfortunate traveler who tried to venture south into the seas but got nabbed by totally random pirates", undefined),
setup.qc.Slave('companion2', "a|was a traveling companion of an unfortunate traveler who tried to venture south into the seas but got nabbed by totally random pirates", undefined),
],
],
[
'Quest_totally_piratesCrit',
[
setup.qc.Slave('traveler', "a|was an unfortunate traveler who tried to venture south into the seas but got nabbed by totally random pirates", undefined),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_totally_piratesCrit',
[
setup.qc.MoneyCustom(2000),
setup.qc.Injury('pirate1', 4),
setup.qc.Injury('pirate2', 4),
],
],
[
'Quest_totally_piratesCrit',
[
setup.qc.MissingUnit('ferry'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The <<lore region_sea>> is extremely dangerous, and everyone in <<lore continent_main>> knows that. Anyone who dares travel south must accept the risk that it might be their last, and ferry services going into the south usually accept that one or two of its passengers will be unfortunately lost in the sea — be it to the pirates, the weather, or even to the various sea monsters that infest the ocean.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
<<Yourrep _u>> has pointed out to you that this could be an opportunity for your company to get some new slaves. Have one of your more charismatic slavers open up shop and run an underpriced ferry trip south, while two other slavers will board the ship mid-journey and kidnap a passenger or two. Given how rampant this occurrence is in the seas, nobody will suspect your company has anything to do with the incident. Plus, you'll still get paid honest money for the ferry service.
</p>
<p>
Of course, with anything involving <<lore region_sea>> there is bound to be an assortment of very real risks involved...
</p><p>
With a small capital to fund off the ship, <<yourrep $g.ferry>> went into the <<lore region_city>> and started to find people interested in going south using <<their $g.ferry>> cheap ferry service.
<<if $g.ferry.isHasTrait('bg_seaman')
or
$g.ferry.isHasTrait('bg_pirate')>>
<<They $g.ferry>> used to be an authentic <<man $g.ferry>>-of-the-sea, which was reflected in <<their $g.ferry>> sales pitch.
<</if>>
<<if $g.ferry.isHasTrait('face_attractive')>>
<<Their $g.ferry>>
<<if $g.ferry.isHasTrait('face_beautiful')>>
absolutely stunning
<<else>>
attractive
<</if>>
looks helped draw potential customers in.
<</if>>
<<if $g.ferry.isHasTrait('face_scary')>>
Unfortunately, <<their $g.ferry>>
<<if $g.ferry.isHasTrait('face_hideous')>>
terrifying visage
<<else>>
ugly face
<</if>>
shooed some potential customers away.
<</if>>
<<if $g.ferry.isHasTrait('per_direct')>>
<<They $g.ferry>> might have been too honest with <<their $g.ferry>> intentions, overemphasizing the danger part and warding some customers away.
<</if>>
<<if $g.ferry.isHasTrait('per_sly')>>
<<They $g.ferry>> slyly goaded customers to sign up, not really emphasizing the dangers of the journey.
<</if>>
<<if $g.ferry.isHasTrait('per_loner')>>
<<Their $g.ferry>> lack of eloquence was problematic for drawing customers in.
<</if>>
<<if $g.ferry.isHasTrait('per_gregarious')>>
<<Their $g.ferry>> eloquence won <<them $g.ferry>> even more customers.
<</if>>
In the end <<rep $g.ferry>> managed to found
<<if $gOutcome == 'success' or $gOutcome == 'crit'>>
a good chunk of customers
<<else>>
some customers
<</if>>
and set sail into the south.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, <<rep $g.ferry>> was instead met with a real rowdy pirate of the south. The ship was completely unprepared against such a danger, and the ship never returned back to <<lore continent_main>>.
<<uneedrescue $g.ferry>>, preferably before the pirates sold <<therace $g.ferry>> away to some distant land...
</p>
<<else>>
<p>
Once the ship is out in the open ocean, <<rep $g.ferry>> <<uadv $g.ferry>> steered the ship into the location where the other two slavers were lying in wait. Soon enough, the "pirate ship" came into view, and
<<rep $g.ferry>> did <<their $g.ferry>> best to act as naturally as <<they $g.ferry>> could when having <<their $g.ferry>> ship about to be boarded by pirates. Before long the "pirate" ship boarded the defenseless little ship and <<yourrep $g.pirate1>> and <<utheirrel $g.pirate1 $g.pirate2>> <<rep $g.pirate2>> jumped into the foray.
</p>
<<if $gOutcome == 'failure'>>
<p>
Fortunately, among the passengers were some seasoned fighters. With their help the pirates were routed and the ship were saved from piracy. While the rest of the passenger rejoiced and praised their hero, <<rep $g.ferry>> stared in disbelief at the result, before ushering the "pirates" back to the ship before worse befall them by the rowdy passengers.
</p>
<p>
In the end, <<rep $g.ferry>> came back home with a little profit from the endeavor, but nowhere near enough to cover the cost of healing both your "pirates" back to full health.
</p>
<<else>>
<p>
The defenseless ship was of course no match for the scary and rowdy pirates
of the south, and <<rep $g.ferry>> "made" the wise decision to surrender. The
"pirates" were thus free to select among the passengers to kidnap, before
settling on
a
<<rep $g.traveler.getTraitWithTag('bg')>><<if $gOutcome == 'crit'>>, as well as two of <<their $g.traveler>> traveling companions<</if>>.
With the captives in tow, the pirates were satisfied and "mercifully" left the rest of the ship alone.
</p>
<p>
Still, with only
<<if $gOutcome == 'crit'>>
three passengers
<<else>>
one passenger
<</if>>
lost, the trip was deemed a success by the <<lore region_sea>> standards, and <<yourrep $g.ferry>> received <<their $g.ferry>> promised pay. <<Therace $g.ferry>> also <<uadv $g.ferry>> helped <<themself $g.ferry>> with whatever belongings the poor pirate captive had before being kidnapped by the damnable "pirates".
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<set _criteriatrader1 = new setup.UnitCriteria(
null, /* key */
'Trader (Sea)', /* name */
[
setup.trait.per_sly,
setup.trait.per_frugal,
setup.trait.per_dominant,
],
[
setup.trait.per_direct,
setup.trait.per_lavish,
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_sly,
setup.trait.per_frugal,
setup.trait.per_dominant,
],
[
setup.trait.per_direct,
setup.trait.per_lavish,
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, setup.rarity.common],
], /* quest pool and rarity */
[
], /* restrictions to generate */
)>><p>
There are a great many exotic spices and fabric in the land beyond the
<<lore region_sea>>. 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 in so much money.
<<set _con = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'skill_connected'})>>
<<if _con>>
<<Rep _con>> must have pulled some strings using <<their _con>> vast network of connections.
<</if>>
<<set _fru = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_frugal'})>>
<<if _fru>>
<<Rep _fru>> must have been a natural at picking deals.
<</if>>
Even though your slavers for sure pocketed a significant fraction
of it, you still don't mind the remaining sum 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 region_city>> 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 had rotten into nothingness by the time
they arrived 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'wavebreaker', /* key */
"Wavebreaker", /* Title */
"darko", /* Author */
[ /* tags */
'order', 'sea', 'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'envoy': [ setup.qu.escort, 1],
'trainer': [ setup.qu.slavetrainer, 1],
'guard': [ setup.qu.guard, 1],
},
{ /* actors */
'master': 'a_discerning_letter0',
'slave': 'a_discerning_letter1',
},
[ /* costs */
],
'Quest_wavebreaker',
setup.qdiff.normal45, /* difficulty */
[ /* outcomes */
[
'Quest_wavebreakerCrit',
[
setup.qc.SetCooldownQuest(null, 54),
setup.qc.SlaveOrderFlex(
'Wavebreaker Order', /* name */
'independent', /* company */
52, /* expires in */
5000, /* base price */
2500, /* trait multi */
1, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
setup.trait.per_masochistic,
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom([
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.muscle_verystrong,
setup.trait.tough_tough,
setup.trait.per_chaste,
setup.trait.per_proud,
setup.trait.per_brave,
setup.trait.per_stubborn,
setup.trait.per_dominant,
setup.trait.per_calm
], 5, 0, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
),
],
],
[
'Quest_wavebreakerCrit',
[
setup.qc.Outcomes("crit"),
],
],
[
'Quest_wavebreakerFailure',
[
setup.qc.QuestDirect('wavebreaker'),
],
],
[
'Quest_wavebreakerFailure',
[
setup.qc.QuestDirect('wavebreaker'),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.sea, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.HasSlaveWithTraits([setup.trait.will_defiant]),
setup.qres.Building(setup.buildingtemplate.researchroom),
],
[ /* expiration outcomes */
],
)>><p>
As you recall, a certain master in the <<lore region_sea>> that calls
<<themself $g.master>> as the <<master $g.master>> of waves is offering to
buy your <<rep setup.trait.will_defiant>> slaves. This is a rare opportunity,
as no other slave-dealers would even bother dealing with these extremely
head-strong slaves.
</p>
<p>
You have the precise address of the <<master $g.master>> of waves, should you
wish to sell one of your slaves. It won't be difficult, but it will take some
time before your slavers can contact the
<<if $unit.player.isHasTrait('per_cruel')>>
tasteful
<<elseif $unit.player.isHasTrait('per_kind')>>
distasteful
<</if>>
<<man $g.master>>.
</p><p>
Your slavers never met with the <<master $g.master>>, and all contact were
made through <<their $g.master>> head-slave, an oddly familiar <<urace
$g.slave>>. The slave was a little unnerving, seemingly completely broken to
<<their $g.slave>> <<master $g.master>>'s will.
As your slavers exited the mansion, the <<master $g.master>>'s slave reminded
your slavers that <<their $g.slave>> <<master $g.master>> is willing to make
at most one purchase per year.
</p>
<p>
Only when your slavers exited the mansion with the slave order did they
finally realize why the slave was so familiar — <<they $g.slave>> slave|is
one of the famous seven pirates of the <<lore region_sea>>, whose wanted
poster littered the cities back in the days.
It was believed that <<they $g.slave>> went missing
sometime ago, presumably dead, but your slavers know better now.
</p><p>
Despite the obvious address of the <<master $g.master>>,
your slavers still managed to somehow get themselves lost in the vast <<lore region_sea>>.
Eventually, they returned to the dock, having exhausted their supplies for the journey.
You should try again with a better team.
</p><<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, <<reps $g.head>> attempt throughout the week did 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 <<yourrep $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 <<yourrep $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 <<yourrep $g.head>>.
But <<rep $g.trainee>> 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
]
],
[
'SurgeryMuscleGrowSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_strong),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
],
],
[
'SurgeryMuscleGrowFailure',
[],
],
[
'SurgeryMuscleGrowDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Grows the size of the slaver's muscles.
</p>
<p>
<<dangertext 'WARNING'>>: changing bodyshape is intrusive,
and will no doubt have a permanent negative impact on the slaver's body.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did 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_thin),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
]
],
[
'SurgeryMuscleShrinkSuccess',
[
setup.qc.Trait('trainee', setup.trait.muscle_thin),
setup.qc.AddTitle('trainee', 'fleshshape_muscle'),
],
],
[
'SurgeryMuscleShrinkFailure',
[],
],
[
'SurgeryMuscleShrinkDisaster',
[
setup.qc.Injury('trainee', 8),
],
],
],
[],
[],
)>><p>
Shrinks the slaver's muscles.
</p>
<p>
<<dangertext 'WARNING'>>: changing bodyshape is intrusive,
and will no doubt have a permanent negative impact on the slaver's body.
</p><p>
The surgery went off without a hitch.
</p><p>
The surgery was successful.
</p><p>
Unfortunately, <<reps $g.head>> attempt throughout the week did 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, <<reps $g.head>> attempt throughout the week did 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 <<yourrep $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 <<yourrep $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 <<yourrep $g.head>>.
But <<rep $g.trainee>> 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_anal_advanced', /* id */
'Anal Training: Advanced', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingAnalAdvancedCrit',
[
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 receive pleasure and orgasm through
anal stimulation alone.
This can be done by a skilled slaver, who would spend days rewiring
the slave's brain to connect anal penetration with pleasure.
</p><<if $g.trainee.isMale()>>
<<if $g.trainee.isHasTrait('race_demon')>>
<<questimage 'unit_training_anal_advanced_male_demon.jpg'>>
<<else>>
<<questimage 'unit_training_anal_advanced_male_orc.jpg'>>
<</if>>
<<else>>
<<questimage 'unit_training_anal_advanced_female.jpg'>>
<</if>>
<p>
Throughout the training, <<rep $g.trainee>> trainee|was kept painfully horny, and grudgingly obeyed
<<reps $g.head>> orders to keep <<their $g.trainee>> <<uhands $g.trainee>> off <<their $g.trainee>>
<<ugenital $g.trainee>>.
</p>
<p>
At the start, they couldn't fully hide <<their $g.trainee>> disappointment and
frustration. <<Rep $g.head>> kept a close watch on <<rep $g.trainee>>, and buttfucked
<<them $g.trainee>> every chance <<they $g.head>> got, teaching the slave the finer points of taking a
<<udickorstrap $g.head>> up the butt. <<Rep $g.head>> focused entirely on <<their $g.head>> own pleasure, while teaching
<<therace $g.trainee>> how to use <<their $g.trainee>>
<<if ($g.trainee.isHasTrait('anus_gape'))>>gaping<<elseif ($g.trainee.isHasTrait('anus_loose'))>>loose<<else>>tight<</if>> anal ring to extract orgasms from cocks and phalluses.
</p>
<p>
This continued for several days, and <<rep $g.head>> maintained a vigilant watch on
<<their $g.head>> tutee.
The fucking over the slave's <<if ($g.trainee.isHasTrait('anus_gape'))>>gaping<<elseif ($g.trainee.isHasTrait('anus_loose'))>>loose<<else>>tight<</if>> anus continued, while keeping <<rep $g.trainee>>
desperately aroused and desperately sodomized. Finally, after a full week of this,
<<rep $g.trainee>> finally reached a point of desperate arousal that permitted
<<them $g.trainee>> to orgasm to
<<if $g.trainee.isHasDick()>>
prostate
<<else>>
anal
<</if>>
stimulation alone.
Before <<they $g.trainee>> realized what was happening, <<therace $g.trainee>> slave is now getting aroused at the thought of anal sex alone.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It was clear that <<reps $g.trainee>> prior training must be
repeated before another attempt at this training.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_anal_basic', /* id */
'Anal Training: Basic', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingAnalBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_anal_basic),
],
],
[
'QuestUnitTrainingAnalBasicFailure',
[],
],
[
'QuestUnitTrainingAnalBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
A slave must learn how to use all their possible orifices to satisfy their masters.
In addition to the traditional options of pussies and mouth,
a slave's anus is also another orifice that should be used to give pleasure with.
This training will introduce to the slave to the art of taking it up their
butt, which will start simple using fingers, then a dildo, until they're familiar enough to
take in the actual shaft.
</p><<if $g.trainee.isMale()>>
<<questimage 'unit_training_anal_basic_male_humankingdom.jpg'>>
<<else>>
<<questimage 'unit_training_anal_basic_female.jpg'>>
<</if>>
<p>
<<Rep $g.head>> trained <<rep $g.trainee>> with a good combination of reward and punishment.
<<Rep $g.trainee>> learned to relax as <<rep $g.head>>
<<if !$g.head.isHasDick()>>pushed a strap-on into<<else>>enter<</if>> <<their $g.trainee>> ass,
and even learned how to enjoy <<themself $g.trainee>> all the way after the initial pain.
After the many times <<rep $g.head>> and <<their $g.head>> assistants climaxed while inside
the trainee, <<rep $g.trainee>> finally, in one final session,
climaxed hard to
<<if !$g.head.isHasDick()>>the phallus<<else>>the cock<</if>> invading
<<their $g.trainee>> asshole.
</p>
<<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Rep $g.trainee>> trainee|have
learned the basics of being assfucked,
while your slavers gain a lot of experience from the training.
</p>
<<else>>
<p>
At the end of the week, <<rep $g.trainee>>
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>
<</if>><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>> 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_master_earth,
'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),
]
],
[
'QuestUnitTrainingAnalMasterCrit',
[
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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_anal_master_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into an elite anal slut
has been completed.
</p>
<<else>>
<p>
It is done. <<Reps $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>
<</if>><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> 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>> head|have 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>/* PROOFREAD COMPLETE */
<<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_trainingFailure',
[
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 still relatively rare.
For one, the slave owners are usually reluctant to give up a perfectly good slave.
More importantly, the slave, having experienced what it felt under the whip, is usually averse to having to inflict their suffering on another.
</p>
<p>
With a highly skilled slaver, however,
it might 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 mind-numbing effects.
</p><p>
Over the past two weeks, your slavers <<uadv $g.convincer1>> convinced —
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>> sneaked 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 saw the light, and
agreed to become one of your slavers. <<Rep $g.trainee>> trainee|is now
waiting in the <<rep setup.buildingtemplate.prospectshall>> for you to
officially take in as a proper slaver.
</p>
<p>
The <<rep setup.item.brainwash_technology>> helped <<rep $g.trainee>> 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 <<their $g.trainee>> future secure as a slaver, <<rep $g.trainee>> gave to <<yourrep $g.head>> 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 if you really want the slave as a slaver.
</p>
<<if $gOutcome == 'crit'>>
<p>
During the training, some of your slavers were unfortunately affected by
their severe misuse of <<rep setup.item.brainwash_technology>>...
</p>
<</if>>/* PROOFREAD COMPLETE */
<<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', 150),
setup.qc.TraumatizeRandom('trainee', 150),
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', 150),
setup.qc.TraumatizeRandom('trainee', 150),
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_convinceFailure',
[
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 still relatively rare.
For one, the slave owners are usually reluctant to give up a perfectly good slave.
More importantly, the slave, having experienced what it felt under the whip, is usually averse to having to inflict their suffering on another.
</p>
<p>
With a highly skilled slaver, however,
it might just be possible to actually convince a slave to become a slaver.
It will be extremely difficult, however, and would require 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 slaving capabilities for a good while. The trauma will surely go away
in due time, however, and there are no permanent damage.
</p><p>
Over the past two weeks, using various interrogation techniques,
your slavers <<uadv $g.convincer1>> convinced
your now former slave <<rep $g.trainee>> the benefits of becoming a slaver.
After long days of convincing, <<rep $g.trainee>> finally saw the light, and
decided to accept the bribe, agreeing to become one of your slavers. <<Rep
$g.trainee>> trainee|is now waiting in the <<rep
setup.buildingtemplate.prospectshall>> for you to officially take in as a slaver.
</p>
<p>
Still, <<their $g.trainee>> experiences as a slave trainee|weigh heavily on <<them $g.trainee>>,
giving them a temporary trauma that lasts quite a while.
</p>
<<if $gOutcome == 'crit'>>
<p>
Seeing <<their $g.trainee>> 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>> had been a slave under your care for quite a long while, and <<they $g.trainee>> often can
be seen reflexively behaving like how 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>
Your money is gone too, and you could not tell which one of your slavers were responsible for it...
</p>
<<if $gOutcome == 'crit'>>
<p>
Talking with the slave deeply affected your slavers, making them question some of their
life decisions.
</p>
<</if>><<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>> 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 <<reps $g.trainee>> 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 <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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),
]
],
[
'QuestUnitTrainingDomesticBasicCrit',
[
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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_domestic_basic_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Rep $g.trainee>>,
and your slavers gain a lot of experience from the training.
</p>
<<else>>
<p>
At the end of the week, <<rep $g.trainee>> trainee|have gained
both textbook and first-hand knowledge about the
basics of domestic work.
</p>
<</if>><p>
Unfortunately, the training was unsuccesful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Either <<rep $g.head>> 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_master_wind,
'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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_domestic_master_female.jpg'>>
<</if>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into a complete package of a
maid/butler
has been completed.
</p><p>
It is done. <<Reps $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 <<reps $g.trainee>> 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>> head|have 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),
]
],
[
'QuestUnitTrainingDominanceAdvancedSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_dominance_advanced),
],
],
[
'QuestUnitTrainingDominanceAdvancedFailure',
[],
],
[
'QuestUnitTrainingDominanceAdvancedDisaster',
[
setup.qc.Injury('trainee', 1),
setup.qc.Injury('slave', 1),
],
],
],
[],
[],
)>><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>
<<successtextlite 'Please note'>>: Unlike most other slave trainings,
the dominance requires an additional slave to be used during the training.
The slave used this way will not receive the dominance training trait.
</p><<if $g.trainee.isMale()>>
<<if $g.trainee.isHasTrait('race_demon')>>
<<questimage 'unit_training_dominance_advanced_male_demon.jpg'>>
<<else>>
<<questimage 'unit_training_dominance_advanced_male.jpg'>>
<</if>>
<</if>>
<p>
The training was a complete success. <<Rep $g.trainee>> successfully showed <<their $g.trainee>> newly found
understanding on <<rep $g.slave>>.
</p><<if $g.trainee.isMale()>>
<<questimage 'unit_training_dominance_advanced_male.jpg'>>
<</if>>
<p>
It was difficult, but by the end of the week, <<rep $g.trainee>> trainee|have finally
understand what it means to be a dominant slave.
</p><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Either <<rep $g.head>> 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>> 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 easily applied.
</p>
<p>
<<successtextlite 'Please note'>>: Unlike most other slave trainings,
the dominance requires an additional slave to be used during the training.
The slave used this way will not receive the dominance training trait.
</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>> trainee|was simply not suited for this training,
and another effort must make made for <<rep $g.trainee>>.
</p><p>
Either <<rep $g.head>> 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_master_wind,
'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),
setup.qc.TraitRemove('trainee', setup.trait.per_submissive),
],
],
[
'QuestUnitTrainingDominanceMasterFailure',
[],
],
[
'QuestUnitTrainingDominanceMasterDisaster',
[
setup.qc.Injury('trainee', 2),
setup.qc.Injury('slave', 2),
setup.qc.TraitRemove('trainee', setup.trait.per_dominant),
],
],
],
[],
[],
)>><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>
Succeeding this training will remove <<rep setup.trait.per_submissive>> from the slave, if any.
</p>
<p>
Completing a master training will lock out all the other master training.
</p>
<p>
<<successtextlite 'Please note'>>: Unlike most other slave trainings,
the dominance requires an additional slave to be used during the training.
The slave used this way will not receive the dominance training trait.
</p><p>
The training was a complete success. <<Rep $g.trainee>> 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>> trainee|have finally
understand the lessons. <<Rep $g.trainee>> trainee|is now indistinguishable with your slavers with the sole
exception of being completely obedient to your commands.
</p><p>
Unfortunately, <<rep $g.head>> head|is not convinced that
<<rep $g.trainee>> trainee|have grasped all the necessary knowledge.
</p><p>
Either <<rep $g.head>> 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>> trainee|was a natural submissive, and this
will complicate further training.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_endurance_advanced', /* id */
'Endurance Training: Advanced', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingEnduranceAdvancedCrit',
[
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
be a proper furniture for your slavers to use.
They need to be able to withstand the abuse from owners who care
not about their pleasure, and must maintain comfort in the face
of utter discomfort.
After the abuse has ended, the must learn how to
recover from such treatment and made them available again to their
owner 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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_endurance_advanced_female.jpg'>>
<</if>>
<p>
<<Rep $g.trainee>> had completed <<their $g.trainee>> basic endurance training
and the slave can withstand abuse for a longer time than any other untrained slave.
To bring this into the next level,
<<rep $g.head>> began by cuffing <<reps $g.trainee>> wrists and andkles, and bending
all four limbs behind <<them $g.trainee>>,
secure them together,
and hoist <<them $g.trainee>> up to the dungeon ceiling on a rope.
<<They $g.trainee>> hang up there like a sex slave chandelier,
<<if $g.trainee.isHasDick()>>dick<<else>>breasts<</if>> swaying in a lovely way
whenever <<they $g.trainee>> struggled.
Periodically <<rep $g.head>> let <<them $g.trainee>> down to rest and stretch
<<their $g.trainee>> aching limbs, but whenever <<rep $g.head>> put the decoration back up,
<<they $g.head>> added some clips and weighs with little bells on them:
first the nose, then the nipples, and finally the
<<if $g.trainee.isHasDick()>>dickhead<<else>>pussylips<</if>>.
By the end of the first day, the training dungeons were filled by the sweet sounds of
ringing bells and agonized pleas for mercy in
<<their $g.trainee>>
<<if $g.trainee.isMale()>>masculine<<else>>feminine<</if>> voice.
But this won't do -- a proper furniture slave must not make too much sound, and the future
sessions taught this the hard way by gagging the poor slave whenever <<they $g.trainee>> trainee|was objectified.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.trainee>> turned out to be a natural at being
an objectified slave.
There were nothing more to teach by the end of the trainings, and your
slave graduated with flying colors.
</p>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> 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>
<</if>><p>
Unfortunately, the training was unsuccesful.
At the end of the week, not only <<rep $g.trainee>> 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_endurance_basic', /* id */
'Endurance Training: Basic', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingEnduranceBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_basic),
],
],
[
'QuestUnitTrainingEnduranceBasicFailure',
[],
],
[
'QuestUnitTrainingEnduranceBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
While some slave owners prefer their slaves to break from use,
some find mindbroken slaves to be distasteful. These owners
often train their slaves to be able to withstand said abuse,
often with a smile on their face.
But before any of those, the slave's basic endurance must be
increased, and what better way than a couple of runs on the track?
</p><<if $g.trainee.isMale()>>
<<questimage 'unit_training_endurance_basic_male.jpg'>>
<<else>>
<<questimage 'unit_training_endurance_basic_female.jpg'>>
<</if>>
<p>
The first step to become an endurance slut is to increase the slave's stamina, and what
better way than a couple of "motivated" run in your <<rep setup.buildingtemplate.trainingfield>>?
At <<reps $g.head>> command,
<<rep $g.trainee>> took off,
running as fast as <<their $g.trainee>> <<ulegs $g.trainee>> could carry <<them $g.trainee>>.
As <<they $g.trainee>> went,
<<if $g.trainee.isHasTrait('dick_huge')>>
<<their $g.trainee>> <<if $g.trainee.isHasTrait('dick_titanic')>>
ridiculous penis<<else>>huge dick<</if>>
flopped around painfully, hitting <<their $g.trainee>> thighs, but <<they $g.trainee>>
tried to ignore it.
<<elseif $g.trainee.isHasTrait('balls_huge')>>
<<their $g.trainee>>
<<if $g.trainee.isHasTrait('balls_titanic')>>
ridiculous ballsack
<<else>>
huge ballsack
<</if>>
got painfully pinched between <<their $g.trainee>> thighs, but <<they $g.trainee>> tried to ignore it.
<<elseif $g.trainee.isHasTrait('breast_huge')>>
<<their $g.trainee>>
<<if $g.trainee.isHasTrait('breast_titanic')>>
ridiculous mammaries
<<else>>
huge tits
<</if>>
bounced around painfully,
so <<they $g.trainee>> cradled <<their $g.trainee>> udders in <<their $g.trainee>> <<uarms $g.trainee>>,
trying to support them as much as possible.
<<else>>
<<their $g.trainee>> cute rear made a pretty picture.
<</if>>
<<Yourrep $g.head>> made <<rep $g.trainee>>
repeat the exercise until <<they $g.trainee>> trainee|was very tired,
<<if $g.trainee.isHasTrait('tough_tough')>>
which took quite some time,
<<elseif $g.trainee.isHasTrait('tough_nimble')>>
which didn't take that long,
<</if>>
hounding <<them $g.trainee>> mercilessly throughout,
before sending <<them $g.trainee>> to rest away.
The moment the slave recover, to <<their $g.trainee>> horror it was another track
session, and this continued on for a week...
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Reps $g.trainee>> training was a complete success, and the slave
has been toughened-up, capable of withstanding more abuse than before.
</p>
<<else>>
<p>
At the end of the week, <<rep $g.trainee>> trainee|have
became significantly more durable, and can withstand
a longer period of abuse without breaking.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> seemed 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>> 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_master_wind,
'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.TraitRemove('trainee', setup.trait.tough_nimble),
]
],
[
'QuestUnitTrainingEnduranceMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_endurance_master),
setup.qc.TraitRemove('trainee', setup.trait.tough_nimble),
],
],
[
'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.
A slaver skilled in <<rep setup.trait.magic_wind_master>>
is also required, to be able to imbue the slave's restraint with magic that
will punish the slave whenever they show discomfort from being used as a furniture.
</p>
<p>
Succeeding this training will remove <<rep setup.trait.tough_nimble>> from the slave, if any.
</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>> trainee|is now so absolutely durable
to any prolonged period of abuse, and can be used safely as a furniture permanently.
</p><p>
<<Reps $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>> trainee|have 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),
]
],
[
'QuestUnitTrainingHornyAdvancedCrit',
[
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><<if $g.trainee.isMale()>>
<<if $g.trainee.isHasTrait('subrace_tigerkin')>>
<<questimage 'unit_training_horny_advanced_male_tigerkin.jpg'>>
<<else>>
<<questimage 'unit_training_horny_advanced_male_demon.jpg'>>
<</if>>
<<else>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.trainee>> turned out to be a natural sex monster.
</p>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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),
]
],
[
'QuestUnitTrainingHornyBasicCrit',
[
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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_horny_basic_male_neko.jpg'>>
<<else>>
<</if>>
<<if $gQuest == 'crit'>>
<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.
</p>
<<else>>
<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>
<</if>><p>
Unfortunately, <<reps $g.trainee>> thick skull means that
<<they $g.trainee>> continue to struggle with getting aroused on
command.
</p><p>
Either <<rep $g.head>> 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_master_wind,
'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_lustful),
]
],
[
'QuestUnitTrainingHornyMasterSuccess',
[
setup.qc.Trait('trainee', setup.trait.training_horny_master),
setup.qc.TraitRemove('trainee', setup.trait.per_chaste),
],
],
[
'QuestUnitTrainingHornyMasterFailure',
[
],
],
[
'QuestUnitTrainingHornyMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_horny_master.getTraitGroup()),
setup.qc.TraitRemove('trainee', setup.trait.per_lustful),
setup.qc.TraitDecrease('trainee', setup.trait.per_lustful),
],
],
],
[],
[],
)>><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>
Succeeding this training will remove <<rep setup.trait.per_chaste>> from the slave, if any.
</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. <<Reps $g.trainee>> transformation into a permanently-<<hard $g.trainee>> slave
has been completed.
</p><p>
It is done. <<Reps $g.trainee>> transformation into a permanently-<<hard $g.trainee>> slave
has been completed.
<<if $g.trainee.isHasTrait(setup.trait.dick_tiny)>>
<<reps $g.trainee>> 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>>
<<reps $g.trainee>> 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 <<reps $g.trainee>> 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>> head|have 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),
]
],
[
'QuestUnitTrainingMasochistAdvancedCrit',
[
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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_masochist_advanced_male_demonkin.jpg'>>
<<else>>
<</if>>
<<if $gOutcome == 'crit'>>
<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>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_masochist_basic', /* id */
'Masochist Training: Basic', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingMasochistBasicCrit',
[
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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_masochist_basic_male.jpg'>>
<<else>>
<</if>>
<p>
Training a slave to be a pain slut is not an easy, gentle task, and it takes multiple training
to relink pain into pleasure.
In one of the training sessions,
<<rep $g.head>> shoved <<rep $g.trainee>> over a bench,
rubbed <<their $g.head>> <<uhand $g.head>> over
<<reps $g.trainee>> ass,
who was quivering with anticipation and fear.
<<Rep $g.trainee>> trainee|was almost beside <<themself $g.trainee>>,
shuddering at the titillation, and <<rep $g.head>> used <<their $g.head>> other <<uhand $g.head>>
to strike <<their $g.trainee>>
<<if $g.trainee.isHasDick()>>cockhead<<else>>pussylips<</if>>.
As <<rep $g.trainee>> writhed in agony, <<rep $g.head>> told <<them $g.trainee>> to get used to it
while
<<if $g.trainee.isHasDick()>>simultaneously jacking off <<their $g.trainee>> dick<<else>>
stimulating <<their $g.trainee>> clit<</if>>.
<<They $g.trainee>>'s a pain slut now, and pain sluts must get used to pain and derive pleasure from it.
<<Rep $g.trainee>> hadn't recovered from the mixture of pain and pleasure before
<<they $g.trainee>> felt the still more urgent pain of rough anal, which was overlaid by another
stimulation,
which was then overlaid by rough spanking,
gratification,
nipple pinching, orgasm, <<if $g.trainee.isHasDick()>>dick abuse<<else>>clit torture<</if>>, and the cycle
continued for an entire week.
In the end, <<their $g.trainee>> brain starts to write pain to pleasure,
and <<they $g.trainee>> trainee|have started to get off on pain, although <<their $g.trainee>> training
to be the perfect painslut is still far from over.
</p>
<<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Reps $g.trainee>> body now subconciously associates pain with pleasure,
and will involuntarily get <<hard $g.trainee>> whenever pain was inflicted on <<them $g.trainee>>.
Your slavers also gain much experience from the session.
</p>
<<else>>
<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 $g.trainee>> pain threshold and <<their $g.trainee>> dedication to pain
will still need to be worked on in future sessions.
</p>
<</if>><p>
Unfortunately, <<reps $g.trainee>> thick skull means that
rewiring their brain will need extra efforts.
</p><p>
Either <<rep $g.head>> 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_master_wind,
'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),
]
],
[
'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.
</p><p>
It was not easy, but through both <<reps $g.trainee>> 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>> 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.Mindbreak('trainee'),
]
],
[
'QuestUnitTrainingMindbreakSuccess',
[
setup.qc.Mindbreak('trainee'),
],
],
[
'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>
<<Reps $g.trainee>> 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>> 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),
]
],
[
'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 finds the training
enjoyable, if somewhat lacking in challenge.
</p><p>
It was close, but by the end of the training,
<<rep $g.trainee>> trainee|have fully grasp the new reality
that <<they $g.trainee>> trainee|is no longer a <<woman $g.trainee>>,
but a slave.
</p><p>
While <<rep $g.trainee>> trainee|have basic understanding of
servitude, <<their $g.trainee>> head seems incapable
of grasping deeper into it.
At the end of the week, <<reps $g.head>> mission was
unsuccessful.
</p><p>
<<Rep $g.trainee>> somehow snapped during the training, injuring
both <<themselves $g.trainee>> and <<rep $g.head>>.
</p>/* PROOFREAD COMPLETE */
<<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),
]
],
[
'QuestUnitTrainingObedienceBasicCrit',
[
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 must learn.
Through this lesson, they will learn that
disobeying means punishment, while obeying will let
them serve their betters in peace.
</p><<if $g.trainee.isMale()>>
<<if $gQuest.getSeed() % 2 == 0>>
<<questimage 'unit_training_obedience_basic_male.jpg'>>
<<elseif $gQuest.getSeed() % 2 == 1>>
<<questimage 'unit_training_obedience_basic_male2.jpg'>>
<</if>>
<<else>>
<<questimage 'unit_training_obedience_basic_female.jpg'>>
<</if>>
<p>
<<Rep $g.trainee>> started out a disobedient little <<urace $g.trainee>>, and <<rep $g.head>>
<<if $g.head.isHasTrait('per_cruel')>>
cruelly licked <<their $g.head>> lips in anticipation breaking the slut-to-be.
<<elseif $g.head.isHasTrait('per_kind')>>
let out a sigh, having no choice but to go against <<their $g.head>> kind nature and donned the slaver mask.
<<else>>
head|was ready to tackle the task of breaking the slave down.
<</if>>
<<rep $g.trainee>> was confined in <<their $g.trainee>> small cell
between trainings. <<Rep $g.head>> kept the trainings varied and unpredictable.
In one session, <<they $g.head>> demanded obedience.
In another session, <<they $g.head>> stroke the slave when it wasn't given.
The next, <<they $g.head>> <<uadv $g.head>> beat the initially resisting slave.
By the end of the training, <<rep $g.trainee>> trainee|have been broken out, and would
obey most orders out of fear for punishment.
While this isn't what the ideal slave should think, it's the right start,
and with further training may be improved to that of blind obedience.
</p>
<<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Rep $g.head>>
instilled some basic submissiveness into
<<reps $g.trainee>> thick skull.
</p>
<<else>>
<p>
It was difficult, but <<rep $g.trainee>> trainee|is finally starting
to obey orders at the end of the training.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> trainee|continue to defy all
the orders given to <<them $g.trainee>>. At the end of the week,
<<rep $g.head>> head|was basically defeated, but at least
no harm is done.
</p><p>
Either <<rep $g.head>> 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_obedience_master', /* id */
'Obedience Training: Master', /* Title */
'FCdev and darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head_master_wind,
'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),
]
],
[
'QuestUnitTrainingObedienceMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_obedience_master),
setup.qc.TraitRemove('trainee', setup.trait.per_dominant),
],
],
[
'QuestUnitTrainingObedienceMasterFailure',
[
],
],
[
'QuestUnitTrainingObedienceMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_obedience_master.getTraitGroup()),
setup.qc.TraitRemove('trainee', setup.trait.per_submissive),
],
],
],
[],
[],
)>><p>
This training will transform the slave from a free-willed 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, peppered with generous shocks of electricity whenever they show
any form of resistance.
This requires a slaver proficient in <<rep setup.trait.magic_wind_master>>, and
furthermore the slaver themself must be sufficiently skilled.
</p>
<p>
Succeeding this training will remove <<rep setup.trait.per_dominant>> from the slave, if any.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><p>
In one of the training sessions,
<<rep $g.head>> snapped <<their $g.head>> fingers at <<rep $g.trainee>> and point commandingly
at the floor in the dungeons.
<<They $g.head>> told <<them $g.trainee>> that a proper slave does whatever
<<their $g.trainee>> dom wants, always, and without question, or <<they $g.trainee>>
will be punished. <<Rep $g.head>> left <<rep $g.trainee>> kneeling obediently beside <<them $g.head>> for some time.
Then, without preamble, <<rep $g.head>> stood up again and
<<if (!$g.head.isHasDick())>>rode <<their $g.trainee>> face
<<else>>throatfucked <<them $g.trainee>><</if>>,
intentionally ensuring that <<they $g.trainee>> gagged and struggled.
<<Rep $g.trainee>> spent almost all <<their $g.trainee>> sexual experiences as a sub for the rest of the training,
their life reduced to an endless cycle of phallus of every kind being inserted into <<their $g.trainee>>
various orifices, with no regard whatsoever to <<their $g.trainee>> own pleasure.
Whenever <<they $g.trainee>> showed any sign of discomfort, a jolt of electricity
from <<reps $g.head>> mastery over <<rep setup.trait.magic_wind_master>> came to shock
<<their $g.trainee>> nethers.
This is what a slave must do, and it is <<their $g.trainee>> fate to become one.
Even other slaves who happen to be allowed to have sex with <<them $g.trainee>> were required to use
<<them $g.trainee>>, not make love to <<them $g.trainee>>.
</p>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into a completely submissive
slave had been completed, and is now ready to comply to any order
imaginable, and will always do it no matter how degrading or humiliating
it is, and do it with a smile on <<their $g.trainee>> face.
</p><p>
While <<rep $g.trainee>> tried <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> sheer
stubbornness or through <<reps $g.head>> lack of skill,
the training was not able to wipe out all sense of free will
from the slave.
At the end of the training,
<<rep $g.head>> head|have 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_oral_advanced', /* id */
'Oral Training: Advanced', /* Title */
'FCdev and 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),
]
],
[
'QuestUnitTrainingOralAdvancedCrit',
[
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 cocksucking skills, the next training
is to instill upon these slaves love for cum.
These slaves not only required to put up with cum, but to love it too - or at least
be able to fake enjoyment convincingly.
</p><<if $g.trainee.isMale()>>
<<questimage 'unit_training_oral_advanced_male_humansea.jpg'>>
<<else>>
<<if $g.trainee.isHasTrait('subrace_humansea')>>
<<questimage 'unit_training_oral_advanced_female_humansea.jpg'>>
<<elseif $g.trainee.isHasTrait('subrace_humandesert')>>
<<questimage 'unit_training_oral_advanced_female_humandesert.jpg'>>
<<else>>
<<questimage 'unit_training_oral_advanced_female.jpg'>>
<</if>>
<</if>>
<<if $g.trainee.isHasDick() && $gQuest.getSeed() % 2>>
<p>
Advanced cum training tactics have two components:
Cum should be linked with pleasure,
and cum should not be disgusting to <<rep $g.trainee>>, because even <<they $g.trainee>> produce it.
To drive home these lessons,
<<rep $g.head>> led <<rep $g.trainee>> to
the dungeon bench,
arranging <<their $g.trainee>>
<<ubody $g.trainee>> upside down with <<their $g.trainee>> head on a borrowed cushion placed on the bench, and
<<their $g.trainee>> back on the walls of the dungeons, and <<their $g.trainee>>
<<ulegs $g.trainee>> in the air.
In this position, <<their $g.trainee>>
<<udick $g.trainee>>
hang directly over <<their $g.trainee>> anxious face. <<Rep $g.head>> sat next to <<their $g.trainee>> vulnerable form on the bench as
<<rep $g.trainee>> looked at <<therace $g.head>> in anticipation.
</p>
<p>
<<Rep $g.head>>
<<if $g.trainee.isHasTrait('anus_gape')>>inserted a wide plug into <<their $g.trainee>> gaping anus
<<elseif $g.trainee.isHasTrait('anus_loose')>>inserted a big plug into <<their $g.trainee>> ass
<<else>>inserted a plug into <<their $g.trainee>> tight ass,
<</if>>
and set another to the base of <<their $g.trainee>> dick, and
pushed these up and down, stimulating both <<their $g.trainee>> anus and <<their $g.trainee>> <<udick $g.trainee>>.
In no time at all <<they $g.trainee>> released a
<<if $g.trainee.isInChastity()>>
squirt of ejaculate from <<their $g.trainee>> cock cage
<<else>>
torrent of thick, white semen
<</if>>,
all of which lands right on <<their $g.trainee>> outstretched tongue and pools in
<<their $g.trainee>> throat. <<Rep $g.head>> nudged <<reps $g.trainee>> chin to make <<them $g.trainee>> close <<their $g.trainee>> <<umouth $g.trainee>> and swallow.
After two weeks of such treatment,
<<they $g.trainee>> finally trainee|acquire a taste for semen.
</p>
<<else>>
<p>
<<Rep $g.head>> <<uadv $g.head>> followed the textbook approach of teaching even
dumb slave to start loving dicks down their throat: via a proper application of
positive reinforcements.
<<They $g.head>> brought the slave <<rep $g.trainee>> over into the training room,
and instructed <<their $g.head>> assistants <<rep $g.trainer1>> and <<rep $g.trainer2>>
to pleasure the slave whenever <<therace $g.trainee>> deliver a proper pleasurable blowjob,
although not to bring the slave into orgasm until <<rep $g.head>> <<themself $g.head>>
climax<<if !$g.head.isHasDick()>>,
which will be extra challenging considering <<rep $g.trainee>> will be sucking on a rubber dick.
<</if>>.
</p>
<p>
Though timid at first, as <<they $g.trainee>> proceeded to blow <<rep $g.head>>,
<<they $g.trainee>> became more and more enthusiastic as <<their $g.trainee>> own pleasure is built by
the assistants.
It wasn't long until <<they $g.trainee>> trainee|was deepthroating <<rep $g.head>> enthusiastically and begging
<<them $g.head>> to
<<if $g.head.isHasDick()>>
cum in <<their $g.trainee>> <<umouth $g.trainee>>.
<<else>>
climax from the stimulation.
<</if>>
<<Rep $g.head>> made <<them $g.trainee>> hold out a bit longer, and then <<they $g.head>> completed
the training session,
<<if $g.head.isHasDick()>>
filling <<reps $g.trainee>> <<umouth $g.trainee>> with <<their $g.head>> cum.
<<else>>
shuddering and climaxing.
<</if>>
In turn, <<rep $g.trainer1>> and <<rep $g.trainer2>>
<<if $g.trainee.isHasDick()>>
jacked the slave off,
<<else>>
pressed a dildo up the slave's pussy,
<</if>>
and the slave climaxed, virtually melting into a quivering mess on the floor.
<<if $g.trainee.isHasDick()>>
<<Reps $g.trainee>> cock oozed cum from <<their $g.trainee>> intense orgasm, and <<rep $g.head>> commanded
<<them $g.trainee>> to clean it off the floor with <<their $g.trainee>> tongue.<</if>>
</p>
<p>
After repeating this for a full week, <<rep $g.head>> succesfully linked cum and pleasure in the slave's mind.
The week was also full of practice, and <<rep $g.trainee>> trainee|was successfully able to grasp the basic
knowledge on how to take a dick down <<their $g.trainee>> throat.
<<if $gOutcome == 'crit'>>
In fact, the slave was a natural oral slut, and your slavers were able to find free time here and
there, which they used to learn new things.
<</if>>
</p>
<</if>><p>
Unfortunately, the training was unsuccesful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $g.trainee>> prior training must be
repeated before another attempt at this training.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_oral_basic', /* id */
'Oral Training: Basic', /* Title */
'FCdev and 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),
setup.qc.MoneyCustom(500),
]
],
[
'QuestUnitTrainingOralBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_oral_basic),
],
],
[
'QuestUnitTrainingOralBasicFailure',
[],
],
[
'QuestUnitTrainingOralBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Welcome to the gateway training for introducing 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 substance that comes out from it.
No matter what their prior disposition for them, they must learn to
like swallowing dicks down their throat, or at least pretend to like them convincingly.
</p><<if $g.trainee.isFemale()>>
<<if $g.trainee.isHasTrait('subrace_humansea')>>
<<questimage 'unit_training_oral_basic_female2.jpg'>>
<<else>>
<<questimage 'unit_training_oral_basic_female.jpg'>>
<</if>>
<<else>>
<<questimage 'unit_training_oral_basic_male_humanvale.jpg'>>
<</if>>
<p>
Simple problems require simple solutions - to get basic oral skills,
<<rep $g.trainee>> will get fucked in the <<umouth $g.trainee>> until <<they $g.trainee>> either
trainee|get over <<their $g.trainee>> hang-ups about oral or trainee|learn to hide them.
<<Yourrep $g.head>> dragged the slave out into the fort square, chained <<them $g.trainee>>
low so that <<their $g.trainee>> <<umouth $g.trainee>> was available, and tell
<<them $g.trainee>> that <<they $g.trainee>> will suck dicks until <<they $g.trainee>> trainee|get
through five in a row without grimacing, gagging, or resisting. <<Rep $g.head>> grabbed a chair out and settle in to watch the show, while
<<rep $g.trainer1>> and <<utheirrel $g.trainer1 $g.trainer2>> <<rep $g.trainer2>> took turn
using the slave's inexperienced <<umouth $g.trainee>>.
</p>
<p>
<<Rep $g.trainee>> tried, <<they $g.trainee>> really did.
But when word got out as to <<their $g.trainee>> current training regime,
<<their $g.trainee>> users -- mostly other slavers in your employ and the occassional visitors --
took a perverse enjoyment in being rougher than usual to evoke the exact reactions
<<reps $g.trainee>> trying to avoid.
More and more streaks were broken, no small thanks to <<rep $g.trainer1>>
who
<<if $g.trainer1.isHasTrait('per_kind')>>
had to suppress their kind urges and be more cruel to the slave than <<they $g.trainer1>> would prefer to.
<<elseif $g.trainer1.isHasTrait('per_cruel')>>
took sadistic delight in breaking the slave's streak over and over again.
<<else>>
intentionally being rough to break the slave's streak.
<</if>>
To the slave's relief, the 14th streak was finally successful.
While <<rep $g.head>> seriously head|doubt <<rep $g.trainee>> trainee|enjoy oral sex any more than
<<they $g.trainee>> did at the start of the day,
<<they $g.trainee>> certainly learned to keep <<their $g.trainee>> feelings on the matter to
<<themself $g.trainee>>, and most certainly learn a thing or two about sucking dick.
</p>
<<if $gOutcome == 'crit'>>
<p>
The enterprise drew a small crowd who tossed some coin over to your slavers, as
payment for using such a pleasant facefuck hole.
</p>
<</if>><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>> 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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'training_oral_master', /* id */
'Oral Training: Master', /* Title */
'FCdev and darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head_master_earth,
'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),
]
],
[
'QuestUnitTrainingOralMasterCrit',
[
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.
These slaves sexuality are entirely focused on cum, and they almost
could not orgasm without the salty taste of cum in their mouth.
</p>
<p>
Since a humanlike can only produce so much natural juice,
a slaver with <<rep setup.trait.magic_earth_master>> is required to lead the training,
to summon tentacles that can spout an exceedingly large amount of
salty ejaculate-like plant juice into the slave...
</p>
<p>
Completing a master training will lock out all the other master training.
</p><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_oral_master_female_humansea.jpg'>>
<</if>>
<p>
Entirely focusing a slave's sexuality on cum isn't as easy as some other manipulations,
for the simple reason that everyone only have a limited supply of the stuff.
But fortunately, <<reps $g.head>> mastery over <<rep setup.trait.magic_earth_master>>
means that <<they $g.head>> can summon phallus-shaped vines from the ground whenever all
the slave trainers have been exhausted -- these vines can be controlled to spout
cum-like plant juice into the slave's mouth.
</p>
<p>
With the assistance of the vines, <<reps $g.trainee>> <<umouth $g.trainee>> was kept filled
to the brim with the salty taste of either ejaculate or plant-juice.
To drive the point home,
<<they $g.head>> instructed <<rep $g.trainee>>
to not immediately swallow the cum, but to keep it swirling within <<their $g.trainee>> <<umouth $g.trainee>> for
a long while.
Whenever <<they $g.trainee>> meet another slave, <<they $g.trainee>> must exchange the cum stored
inside <<their $g.trainee>> <<umouth $g.trainee>> -- whenever another slave had just finished being fucked,
they must suck it out of whichever hole was just used. Most importantly,
<<rep $g.trainee>> was severely punished if <<they $g.trainee>> ever get <<wet $g.trainee>> without cum in
<<their $g.trainee>> <<umouth $g.trainee>>.
<<Rep $g.trainee>> spent the weeks giving blowjobs whenever <<they $g.trainee>> can, and making out
with other slaves to swap the cum back and forth.
Soon, <<they $g.trainee>> got aroused by the mere scent of the stuff, and would not get aroused by
any other mean. <<Their $g.trainee>> sensuality is now entirely focused on cum.
</p>
<<if $gOutcome == 'crit'>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into an elite cocksucker
has been completed.
</p>
<<else>>
<p>
It is done. <<Reps $g.trainee>> transformation into an elite dicksucker
has been completed. <<Rep $g.trainee>> now trainee|have an insatiable thirst for dicks to suck,
so much that a dildo gag is almost necessary for them to wait between their sessions.
</p>
<</if>><p>
While <<rep $g.trainee>> tried <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> 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>> head|have 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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_pet_advanced_male.jpg'>>
<<else>>
<<questimage 'unit_training_pet_advanced_female.jpg'>>
<</if>>
<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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_pet_advanced_male.jpg'>>
<<else>>
<<questimage 'unit_training_pet_advanced_female.jpg'>>
<</if>>
<p>
It was not easy, but through both <<reps $g.trainee>> 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 <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_pet_basic_male.jpg'>>
<<else>>
<<questimage 'unit_training_pet_basic_female.jpg'>>
<</if>>
<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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_pet_basic_male.jpg'>>
<<else>>
<<questimage 'unit_training_pet_basic_female.jpg'>>
<</if>>
<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>> 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_master_wind,
'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),
]
],
[
'QuestUnitTrainingPetMasterCrit',
[
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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_pet_master_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into a permanent and dedicated pet
has been completed.
</p>
<<else>>
<p>
It is done. <<Reps $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>
<</if>><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> 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>> head|have 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),
]
],
[
'QuestUnitTrainingPonyAdvancedCrit',
[
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><<if $g.trainee.isFemale()>>
<<questimage 'unit_training_pony_advanced_female_elf.jpg'>>
<<else>>
<</if>>
<<if $gOutcome == 'crit'>>
<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>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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),
]
],
[
'QuestUnitTrainingPonyBasicCrit',
[
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><<if $g.trainee.isMale()>>
<<if $g.head.isFemale()>>
<<questimage 'unit_training_pony_basic_femdom.jpg'>>
<<else>>
<</if>>
<<else>>
<<questimage 'unit_training_pony_basic_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<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>
<<else>>
<p>
At the end of the week, <<rep $g.trainee>> can now be a passable
pony for owners looking to fill their stables.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> continues to exhibit humanlike behaviors
even after this amount of training.
</p><p>
Either <<rep $g.head>> 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_master_wind,
'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. <<Reps $g.trainee>> transformation into a permanent and dedicated pony slave
has been completed.
</p><p>
It is done. <<Reps $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 <<reps $g.trainee>> 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>> head|have 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_roleplay_advanced', /* id */
'Roleplay 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 */
'QuestUnitTrainingRoleplayAdvanced', /* description */
setup.qdiff.harder39,
[
[
'QuestUnitTrainingRoleplayAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_advanced),
]
],
[
'QuestUnitTrainingRoleplayAdvancedCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_advanced),
],
],
[
'QuestUnitTrainingRoleplayAdvancedFailure',
[],
],
[
'QuestUnitTrainingRoleplayAdvancedDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_roleplay_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
Once a slave learn the power of words during sex, the next step is to
teach them how to string them coherently into a new experience for their owners.
This training will teach the slaves how to act believably, to enact
whatever fantasies their owner might have in store.
They must learn to behave believably, to put a convincing show for
their owners, for otherwise it would have the opposite effect instead.
</p><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_roleplay_advanced_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
<<Rep $g.trainee>> turned out to be natural at acting.
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>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skills to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $g.trainee>> prior training must be
repeated before another attempt at this training.
</p><<run new setup.QuestTemplate(
'training_roleplay_basic', /* id */
'Roleplay 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 */
'QuestUnitTrainingRoleplayBasic', /* description */
setup.qdiff.easy19,
[
[
'QuestUnitTrainingRoleplayBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_basic),
]
],
[
'QuestUnitTrainingRoleplayBasicCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_basic),
],
],
[
'QuestUnitTrainingRoleplayBasicFailure',
[],
],
[
'QuestUnitTrainingRoleplayBasicDisaster',
[
setup.qc.Injury('trainee', 1),
],
],
],
[],
[],
)>><p>
Slaves must understand that their bodies is not the only thing they can use
to please their owners.
Their words are valuable too, and slaves must be taught how to speak the right
words and act just right to enhance their owner's arousal.
This training will teach the slave basic speech skills, and with further training
might be able to guide them to further roleplay as anything their owner desires.
</p><<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Rep $g.trainee>> now trainee|have good understanding
of the power of the choice of words made during sex.
</p>
<<else>>
<p>
At the end of the week, <<rep $g.trainee>> can now utter the right words most of the time
during sex, although further training are required to make them believable.
</p>
<</if>><p>
Unfortunately, <<rep $g.trainee>> failed to grasp the lessons,
and all too often <<they $g.trainee>> fail to come up with the right words
for the occassion.
</p><p>
Either <<rep $g.head>> 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_roleplay_master', /* id */
'Roleplay Training: Master', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
2, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.training_head_master_wind,
'trainer1': setup.qu.training_trainer_sex,
'trainer2': setup.qu.training_trainer_sex,
},
{ /* generated actors */
'trainee': null,
},
[], /* costs */
'QuestUnitTrainingRoleplayMaster', /* description */
setup.get_TRAINING_MASTER_DIFFICULTY(),
[
[
'QuestUnitTrainingRoleplayMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_master),
setup.qc.TraitRemove('trainee', setup.trait.per_slow),
]
],
[
'QuestUnitTrainingRoleplayMasterCrit',
[
setup.qc.Trait('trainee', setup.trait.training_roleplay_master),
setup.qc.TraitRemove('trainee', setup.trait.per_slow),
],
],
[
'QuestUnitTrainingRoleplayMasterFailure',
[
],
],
[
'QuestUnitTrainingRoleplayMasterDisaster',
[
setup.qc.Trait('trainee', null, setup.trait.training_roleplay_master.getTraitGroup()),
],
],
],
[],
[],
)>><p>
The final training will erase the slave's former slave, making them a perfectly
malleable toy for their owner, able to become the personality of anything their
master wishes for.
They want an addled sex toy? They get an addled sex toy. They want a
former crime fighter who fell on hard times? They'll get that and some more.
Whatever dark desires their owner might crave, the slave will be able to provide
an acting convincing enough to satisfy their owner's desires.
</p>
<p>
Succeeding this training will remove <<rep setup.trait.per_slow>> from the slave, if any.
</p>
<p>
Completing a master training will lock out all the other master training.
</p><<if $gOutcome == 'crit'>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into an elite master edger
has been completed.
</p>
<<else>>
<p>
It is done. <<Reps $g.trainee>> transformation into an elite master edger
has been completed.
</p>
<</if>><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> 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>> head|have 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),
]
],
[
'QuestUnitTrainingSissyAdvancedCrit',
[
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><<if $g.trainee.isMale()>>
<<questimage 'unit_training_sissy_advanced_male.jpg'>>
<<else>>
<</if>>
<<if $gOutcome == 'crit'>>
<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>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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>> 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>> 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_master_wind,
'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. <<Reps $g.trainee>> transformation into an elite sissy
has been completed.
</p><p>
It is done. <<Reps $g.trainee>> transformation into an elite sissy
has been completed. <<Reps $g.trainee>> 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 <<reps $g.trainee>> 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>> head|have 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 <<reps $g.trainee>> 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 <<reps $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 <<reps $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>> 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_master_wind,
'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. <<Reps $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. <<Reps $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 <<reps $g.trainee>> 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>> head|have 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),
]
],
[
'QuestUnitTrainingVaginaAdvancedCrit',
[
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><<if $g.trainee.isFemale()>>
<<questimage 'unit_training_vagina_advanced_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<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>
<<else>>
<p>
It was not easy, but through both <<reps $g.trainee>> willingness,
as well as your slaver's dedications, <<rep $g.trainee>>
managed to acquire all the necessary skils to graduate from this
training.
</p>
<</if>><p>
Unfortunately, the training was unsuccessful, and the lessons were
lost in <<reps $g.trainee>> thick skull.
</p><p>
Unfortunately, the lessons proved too much for <<rep $g.trainee>>.
It is clear that <<reps $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),
]
],
[
'QuestUnitTrainingVaginaBasicCrit',
[
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><<if $g.trainee.isFemale()>>
<<questimage 'unit_training_vagina_basic_female_humankingdom.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
The training was a complete success. <<Rep $g.trainee>> trainee|have
learned the basics of being a fuck whore,
while your slavers gain a lot of experience from the training.
</p>
<<else>>
<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>
<</if>><p>
Unfortunately, <<rep $g.trainee>> 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>> 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_master_earth,
'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),
]
],
[
'QuestUnitTrainingVaginaMasterCrit',
[
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><<if $g.trainee.isMale()>>
<<else>>
<<questimage 'unit_training_vagina_master_female.jpg'>>
<</if>>
<<if $gOutcome == 'crit'>>
<p>
Thanks to the skill of the training team,
the training went much smoother than expected. <<Reps $g.trainee>> transformation into an elite fuckslut
has been completed.
</p>
<<else>>
<p>
It is done. <<Reps $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>
<</if>><p>
While <<rep $g.trainee>> tries <<their $g.trainee>> best to
follow the training, either through <<reps $g.trainee>> 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>> head|have 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_alternative', /* id */
'Treatment: Alternative', /* Title */
'darko', /* author */
['fort', 'trait'], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head_master,
'assistant1': setup.qu.heal_assistant,
'assistant2': setup.qu.heal_assistant,
},
{ /* generated actors */
'trainee': null,
},
[
setup.qc.LoseItem(setup.item.potion_alternative),
], /* costs */
'TreatmentAlternative', /* description */
setup.qdiff.extreme70,
[
[
'TreatmentAlternativeCrit',
[
setup.qc.Alternative('trainee'),
]
],
[
'TreatmentAlternativeCrit',
[
setup.qc.Alternative('trainee'),
setup.qc.Injury('trainee', 5),
],
],
[
'TreatmentAlternativeCrit',
[
setup.qc.Alternative('trainee'),
setup.qc.Injury('trainee', 10),
],
],
[
'TreatmentAlternativeCrit',
[
setup.qc.Alternative('trainee'),
setup.qc.Injury('trainee', 20),
],
],
],
[],
[],
)>><p>
Reset a unit's skills into the current set of skill focus.
This is the same with resetting the unit's level to level 1, then re-level
the unit to its previous level, but with the current set of skill focuses.
While this procedure always succeeds, it usually cause severe injuries to the patient.
</p><p>
The potion exposed
<<yourrep $g.trainee>> to multiple timelines, and allowed <<therace $g.trainee>>
to choose the version of <<themself $g.trainee>> that <<they $g.trainee>> liked best.
Eventually, <<they $g.trainee>> settled on one where <<they $g.trainee>> had instead
decided to focus <<their $g.trainee>> skills in
<<set _dom = setup.DOM.Card.skillFocus($g.trainee)>>
<<attach _dom>>.
</p>
<<if $gOutcome == 'crit'>>
<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>
<<elseif $gOutcome == 'success'>>
<p>
The healing procedure went about as well as expected.
<<Rep $g.trainee>> will need some time to recover from the procedure.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
<<Rep $g.head>> head|was unskilled in administering the procedure and as a result
<<rep $g.trainee>> trainee|was severely injured during the procedure.
</p>
<<else>>
<p>
<<Rep $g.head>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> trainee|was heavily injured during the procedure.
</p>
<</if>><<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_master,
'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>> head|was unskilled in administering the procedure and as a result
<<rep $g.trainee>> trainee|was severely injured during the procedure.
</p><p>
<<Rep $g.head>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> trainee|was heavily injured during the procedure.
</p><<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qres.Job(setup.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>> head|was 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>> head|was 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.qres.Job(setup.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>> head|was 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>> head|was 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_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>> head|was 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>> head|was 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 _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qres.Job(setup.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>> head|was 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>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>>
and <<rep $g.target>>
were heavily injured during the procedure.
</p>/* PROOFREAD COMPLETE */
<<set _target = new setup.UnitCriteria(
null, /* key */
'TARGET SLAVER', /* title */
[ /* critical traits */
],
[
], /* disaster traits */
[setup.qres.Job(setup.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_master, 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 does not matter anymore,
and somehow <<yourrep $g.trainee>> 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 they are expected to feel a 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>> head|was 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>> head|was 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 */
'Milk Maid Sona', /* author */
['fort', 'trait', ], /* tags */
1, /* = weeks */
1, /* = expired in */
{ /* your actors */
'head': setup.qu.heal_head_master,
'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),
],
],
[
'TreatmentMindMendCrit',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 2),
setup.qc.OneRandomSeed([
setup.qc.DoAll([
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant1', 2),
]),
setup.qc.DoAll([
setup.qc.Injury('head', 2),
setup.qc.Injury('assistant2', 2),
]),
]),
],
],
[
'TreatmentMindMendCrit',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 4),
setup.qc.Injury('head', 4),
setup.qc.Injury('assistant1', 2),
setup.qc.Injury('assistant2', 2),
],
],
[
'TreatmentMindMendCrit',
[
setup.qc.TraitRemove('trainee', setup.trait.training_mindbreak),
setup.qc.Injury('trainee', 6),
setup.qc.OneRandomSeed([
setup.qc.Injury('head', 12),
setup.qc.Injury('assistant1', 12),
setup.qc.Injury('assistant2', 12),
]),
],
],
],
[],
[],
)>><p>
The
<<if $g.trainee>>
<<if $g.trainee.isHasTrait('subrace_angel')>>
Light Roosting
<<elseif $g.trainee.isHasTrait('subrace_fairy')>>
Essence of Fairytuality
<<elseif $g.trainee.isHasTrait('subrace_dragonkin')>>
Reblazing the Red Matter
<<elseif $g.trainee.isHasTrait('subrace_tigerkin')>>
Clawing Mentality
<<elseif $g.trainee.isHasTrait('subrace_demon')>>
Melting the Mind'sberg
<<elseif $g.trainee.isHasTrait('race_elf')>>
Revivify the Green
<<elseif $g.trainee.isHasTrait('race_wolfkin')>>
Hewling of the Mind
<<elseif $g.trainee.isHasTrait('race_catkin')>>
Meowding of the Mind
<<elseif $g.trainee.isHasTrait('race_greenskin')>>
Green Serene
<<elseif $g.trainee.isHasTrait('race_lizardkin')>>
Scalied Mending
<<elseif $g.trainee.isHasTrait('race_demon')>>
A Tiefling Mind
<<else>>
Mind Mending
<</if>>
<<else>>
Mind Mending
<</if>>
treatment
restores a unit's mind function and removes <<rep setup.trait.training_mindbreak>>.
</p>
<p>
For this, the hard part is definitely on
collecting the necessary information for the treatment, training your slavers to do it,
getting a <<rep setup.item.mindmend_potion>>, as well as building a spa.
Once that done, the most important step will be to perform
the treatment itself. While it is guaranteed to work, the
slave's reaction the moment they
regain their consciousness can be violent and unpredictable. If handled
poorly, more than one person can get hurt, so your slavers better be ready in
case of an emergency in the middle of the procedure.
</p><<if $gOutcome == 'crit'>>
<p>
The three healers followed the treatment's instruction to a T, and thanks to their great abilities,
<<reps $g.trainee>> awakening was slow and peaceful, giving <<therace $g.trainee>> enough time
to take in where <<they $g.trainee>> was and what was happening. <<rep $g.head>> engaged in a
conversation with <<them $g.trainee>> to distract <<them $g.trainee>> while <<rep $g.assistant1>>
and <<rep $g.assistant2>> put shackles in <<their $g.trainee>> ankles and collar around <<their $g.trainee>>
<<uneck $g.trainee>>.
Before <<they $g.trainee>> could do anything, the three slavers had
<<them $g.trainee>> secured and chained, preventing <<therace $g.trainee>>
from running or fighting back. After all, even with a healthy mind, <<they $g.trainee>>
trainee|is still your slave.
</p>
<<elseif $gOutcome == 'success'>>
<p>
The three healers followed the treatment's instruction to a T.
<<if $g.trainee.isHasTrait('subrace_angel')>>
Unfortunately, they didn't take into consideration that the patient in this
case was a powerful <<urace $g.trainee>>, that in the middle of <<their
$g.trainee>> confusion used their powerful magic to push the slavers against
the walls of the room in an attempt to escape. This stunt only drained what
little energy <<therace $g.trainee>> had left, who then collapsed in the
floor to the relief of the slavers. They quickly secured the unconscious
slave with chains and shackles, but their pride, and their backs, were
already hurt.
<<elseif $g.trainee.isHasTrait('subrace_fairy')>>
But working with something like a <<urace $g.trainee>> wasn't common at all, so when the treatment concluded, <<rep $g.trainee>> was simply laying in the middle of the room, confused and scared. When the slavers tried to get close to <<them $g.trainee>>, <<therace $g.trainee>> quickly fled, using <<their $g.trainee>> wings to get to the top of the place. Unfortunately for <<them $g.trainee>>, there weren't any windows in the room, which only exit was a now guarded locked door. It took a while to capture the elusive <<urace $g.trainee>>, but with some rope, good aim and a lot of luck, <<rep $g.trainee>> was finally on the ground, all tied up. This hadn't gone without cost, since <<therace $g.trainee>> had found a couple of scalpels and glass recipients that he had thrown at the slavers, causing several wounds and almost cutting <<reps $g.head>> ear off.
<<elseif $g.trainee.isHasTrait('subrace_dragonkin')>>
Considering the type of patient they were treating, they took several
precautions and chained <<therace $g.trainee>> firmly. Confident with this,
the group had committed a single, but costly, mistake: the muzzle of the
slave hadn't been secured, allowing the now awake and extremely angry slave
to spit magic from it. Luckily, the position of <<their $g.trainee>> head
didn't allow <<rep $g.trainee>> to directly target someone, but all the
slavers had to duck and cover from the seemingly endless stream of magic
coming from within <<rep $g.trainee>>, until the slave finally dropped
unconscious, tired from using so much magic and <<their $g.trainee>> own
strength to break the chains that kept <<them $g.trainee>> in place. Everyone
in the room ended up a bit scorched, but luckily no one was severely
wounded... this time.
<<elseif $g.trainee.isHasTrait('subrace_tigerkin')>>
Unfortunately, they didn't take into consideration that the patient in this case was a powerful <<urace $g.trainee>>. Disoriented and confused, <<rep $g.trainee>> pushed the slavers back and tried to escape, but the door was locked. Using their naked body, <<they $g.trainee>> started lunging at it, trying to break it down. Luckily, <<rep $g.head>> knock <<them $g.trainee>> down before they could hurt themselves more and after a short struggle, the still weak slave laid on the floor, secured by chains. Sadly, this fight ended up hurting everyone involved, some more than others.
<<elseif $g.trainee.isHasTrait('subrace_demon')>>
But for reason, they seemed to forgot that the patient in this case was an extremely powerful <<urace $g.trainee>>, who, after waking up naked and confused, cursed the three slavers for disrespecting him. A strong, magical black whirlwind filled the room, lifting materials, tools and slavers alike. They quickly began to feel their bodies change, corruption seeping into their very beings, but before the transformations were completed, everything came to a halt and they fell unceremoniously to the ground. Apparently <<therace $g.trainee>>, although powerful, had a limit on how much magic <<they $g.trainee>> could use when they had just woke up from such a heavy procedure, but the sudden fall and attempt at corruption had left everyone tired and a bit sore.
<<elseif $g.trainee.isHasTrait('race_elf')>>
<<rep $g.trainee>> slowly woke up, and the image of three strangers
intensively looking at <<them $g.trainee>> naked body was enough to trigger
<<their $g.trainee>> fight-or-fly reflex, which regrettably, turned to
"fight". <<Theslaver $g.trainee>> tried to punch and kick <<their
$g.trainee>> way out of the room, but <<their $g.trainee>> body was still too
tired from the treatment and only managed to connect a couple of good hits
before the slavers subdued <<them $g.trainee>>.
<<elseif $g.trainee.isHasTrait('race_wolfkin')>>
Unfortunately, they didn't take into consideration that the patient in this
case was an unruly <<urace $g.trainee>>, who, after waking up in a weird room
surrounded by strangers, tried to bite and claw <<their $g.trainee>> way into
a fight and hopefully, out the strange place. Unprepared for an assault of
sharp fangs and deadly claws, the three slavers had to sustain a couple of
serious wounds in order to knock down a still tired <<rep $g.trainee>> and
put a big metal leash around <<their $g.trainee>> neck.
<<elseif $g.trainee.isHasTrait('race_catkin')>>
After seeing <<rep $g.trainee>> wake up, the three slavers celebrated a job
well done and sadly, let their guard down against the cunning and slippery
<<urace $g.trainee>>. Fearful and confused, especially after having <<their
$g.trainee>> questions ignored, <<rep $g.trainee>> looked for an opportunity
to run towards the door, which <<rep $g.head>> gave to <<therace $g.trainee>>
when <<they $g.head>> turned <<their $g.trainee>> back. <<rep $g.trainee>>
made it to the door before anyone could react, but found it locked. After a
chaotic game of neko-and-mouse, <<theslaver $g.trainee>> had been secured,
but everyone involved looked pretty tired after such ordeal.
<<elseif $g.trainee.isHasTrait('race_greenskin')>>
Unfortunately, they didn't take into consideration that the patient in this
case was a powerful and violent <<urace $g.trainee>>. The moment they found
themselves in such a strange place, <<rep $g.trainee>> went into a rampage,
hurling equipment and materials everywhere and hitting everyone else in the
room in the process. <<Therace $g.trainee>>'s tantrum only lasted a minute
before the exhaustion took <<them $g.trainee>> down, and the slavers slowly
made their way to <<their $g.trainee>> unconscious body, making sure
<<therace $g.trainee>> wouldn't wake up again.
<<elseif $g.trainee.isHasTrait('race_lizardkin')>>
Unfortunately, they didn't take into consideration that the patient in this
case was a sturdy <<urace $g.trainee>>. Completely confused by the strangers
examining <<their $g.trainee>> scaly naked body, <<rep $g.trainee>> quickly
got enraged and started using <<their $g.trainee>> claws, fangs and heavy
tail to fight the three unprepared slavers, who got a couple of claw marks
and blows to the chest for their problems. Even so, a coordinated attack took
down <<therace $g.trainee>> and shackles and chains quickly found their way
to its body.
<<elseif $g.trainee.isHasTrait('race_demon')>>
After seeing <<rep $g.trainee>> wake up, the three slavers immediately started to do a full checkup of the slave, unsuspecting of <<therace $g.trainee>> plans. Waking up in a table, completely naked and then being scrutinized with no shame by strangers wasn't making <<rep $g.trainee>> happy, and <<their $g.trainee>> anger quickly raised until <<they $g.trainee>> decided it was enough. Calling on the strength of <<their $g.trainee>> demon ancestors, <<rep $g.trainee>> hit <<rep $g.trainee>> in the back of the head, briefly stunning <<them $g.head>>, and then ran towards the door, which to <<their $g.trainee>> dismay was locked. The other two slavers tried to subdue <<them $g.trainee>>, but they found a tough fight against <<therace $g.trainee>>, until <<rep $g.trainee>> paid them back with the same kind of blow to the head. Everyone came out of it a bit battered, and making a mental note of not underestimating a <<urace $g.trainee>> in a fist fight.
<<else>>
<<rep $g.trainee>> slowly woke up, and the image of three strangers
intensively looking at <<them $g.trainee>> naked body was enough to trigger
<<their $g.trainee>> fight-or-fly reflex, which regrettably, turned to
"fight". <<Theslaver $g.trainee>> tried to punch and kick <<their
$g.trainee>> way out of the room, but <<their $g.trainee>> body was still too
tired from the treatment and only managed to connect a couple of good hits
before the slavers subdued <<them $g.trainee>>.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
The three healers had some problems with the treatment and took longer than
necessary. Tired by their arduous job, the three looked at each with other
with joy and pride when their patient got up by themselves, weirded out by
the scene right in front of <<them $g.trainee>>. <<rep $g.head>> started to
do a checkup of the slave's naked body to make sure everything had gone well
while <<rep $g.assistant1>> and <<rep $g.assistant2>> started asking <<them
$g.trainee>> questions to determine <<their $g.trainee>> mental state and
personality. Uncomfortable by such invasion of <<their $g.trainee>> privacy,
<<rep $g.trainee>> looked at the three slavers with wariness, until <<they
$g.trainee>> heard one of them referring to <<them $g.trainee>> with the word
“slave”. Panicking, <<therace $g.trainee>> kicked <<rep $g.assistant1>> and
<<rep $g.assistant2>> and pushed down <<rep $g.head>> before running out of
the room. It took a while and several fights with an angry naked <<urace
$g.trainee>> to subdue them, but at the end everything seemed in order, save
for the multiple wounds of several of the people involved.</p>
<<elseif $gOutcome == 'disaster'>>
<p>
The three healers had a lot of problems to treat <<rep $g.trainee>>. Between
fights and misunderstandings about the instructions of the treatment, they
managed to finally heal <<reps $g.trainee>> mind. Unfortunately, the three
slavers were too tired to do the appropriate follow-up and decided to lock
the slave in its cell to check on <<them $g.trainee>> the next day. That same
night, weird noises were heard close to <<therace $g.trainee>>'s cell and
<<if $gQuest.getSeed() % 3 == 0>>
<<set _i = $g.head>>
<<elseif $gQuest.getSeed() % 3 == 1>>
<<set _i = $g.assistant1>>
<<else>>
<<set _i = $g.assistant2>>
<</if>>
<<rep _i>> approached it to see what was happening. Apparently,
someone forgot a very important step in the treatment, which was stabilizing
the body once the mind had been mended, and now <<rep $g.trainee>> was having
a seizure. <<rep _i>> quickly began working on saving the slave's
life,
<<if $g.trainee.isHasTrait('subrace_angel')>>
but suffered multiple serious wounds in the process after <<therace $g.trainee>> lost control of <<their $g.trainee>> magic and blasted <<rep _i>> straight in the face.
<<elseif $g.trainee.isHasTrait('subrace_fairy')>>
but suffered multiple serious wounds in the process while trying to pin down <<therace $g.trainee>> and preventing <<them $g.trainee>> from flying up, which only ended with both crashing into several walls and other cages.
<<elseif $g.trainee.isHasTrait('subrace_tigerkin')>>
but suffered multiple serious wounds in the process, courtesy of <<therace $g.trainee>>'s sharp claws and fangs.
<<elseif $g.trainee.isHasTrait('subrace_dragonkin')>>
but suffered multiple serious wounds in the process, courtesy of <<therace $g.trainee>> mythical strength and magic breath, which almost burned <<them _i>> down to ashes.
<<elseif $g.trainee.isHasTrait('subrace_demon')>>
but sufferd multiple serious wounds in the process after <<therace $g.trainee>> lost control of <<their $g.trainee>> magic and almost fully corrupted the slaver, who managed to stabilize <<them $g.trainee>> before the corruption was completed.
<<elseif $g.trainee.isHasTrait('race_wolfkin')>>
but suffered multiple serious wounds in the process, courtesy of <<therace $g.trainee>>'s sharp claws and fangs.
<<elseif $g.trainee.isHasTrait('race_greenskin')>>
but suffered multiple serious wounds in the process after trying to wrestle with a powerful <<urace $g.trainee>> like <<rep $g.trainee>>.
<<elseif $g.trainee.isHasTrait('race_lizardkin')>>
but suffered multiple serious wounds in the process, courtesy of <<therace $g.trainee>>'s sharp claws, fangs and powerful tail.
<<elseif $g.trainee.isHasTrait('race_demon')>>
but suffered multiple serious wounds in the process, after underestimating <<therace $g.trainee>> strength.
<<elseif $g.trainee.isHasTrait('race_catkin')>>
but suffered multiple serious wounds in the process, trying to pin down the slippery <<urace $g.trainee>>.
<<else>>
but suffered multiple serious wounds in the process.
<</if>>
At the end of the day, both <<rep _i>> and <<rep $g.trainee>> looked
very tired and hurt, but at least this experience will serve to avoid
something like this from happening again… or so you hope.
</p>
<</if>><<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>> head|was unskilled in administering the procedure and as a result
<<rep $g.trainee>> trainee|was severely injured during the procedure.
</p><p>
<<Rep $g.head>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> trainee|was heavily injured during the procedure.
</p><<set _traits = setup.TraitHelper.getAllTraitsOfTags(['skin']).filter(a => !a.isCorruption() && !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_master,
'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>> head|was unskilled in administering the procedure and as a result
<<rep $g.trainee>> trainee|was severely injured during the procedure.
</p><p>
<<Rep $g.head>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> trainee|was 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_master, 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>> head|was unskilled in administering the procedure and as a result
<<rep $g.trainee>> trainee|was severely injured during the procedure.
</p><p>
<<Rep $g.head>> head|was completely incompetent in administering the procedure and as a result
<<rep $g.trainee>> trainee|was heavily injured during the procedure.
</p>/* PROOFREAD COMPLETE */
/* Edit for spelling, grammar, text flow, slightly more realistic wolf behaviour and stopping party location shifting from a remote village to your fortress while it was going on. Since the quest is desribed as a preemptive strike, changed contract offer to a bounty and changed proof to ears--something more specific that could be used as an accurate tally. */
<<set _mercenary = new setup.UnitCriteria(
null, /* key */
'Mercenary', /* title */
[setup.trait.magic_fire, setup.trait.magic_fire_master], /* critical traits */
[], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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.Favor('humanvale', 25),
],
],
[
'QuestBountyHuntWolfCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Favor('humanvale', 25),
],
],
[
'QuestBountyHuntWolfFailure',
[
],
],
[
'QuestBountyHuntWolfDisaster',
[
setup.qc.Injury('merc1', 1),
setup.qc.Injury('merc2', 1),
],
],
],
[[setup.questpool.vale, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> is home to many northerners.
Nobody governs the land, which means nobody is there to protect the peasants
from the many dangers of the land.
As a result, the farmers living 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 are the packs of maddened wolves who often prey on unsuspecting victims.
These distant, feral relatives of the werewolves are vicious and savage, and there has been rare
occassion where they've wiped out entire settlements.
To guard against such attacks, settlements often place bounties on wolves, hoping to entice mercenaries to keep their numbers down.
</p>
<p>
The notice of a current bounty has recently reached your desk. Given your slavers' pastime of capturing humans,
defeating animals should be an easy task,
although it never hurts to maintain at least a degree 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 feral 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 canines with ease.
<<set _fire = setup.selectUnit([$g.merc1, $g.merc2], {trait: 'magic_fire'})>>
<<if _fire>>
<<Reps _fire>> mastery over fire magic gave your slavers a particular edge too, as
the wolves are very weak to this element.
<</if>>
</p>
<p>
The slavers returned to the settlement, with a number of wolf ears as proof.
<<if $gOutcome == 'crit'>>
With both of your mercenaries staring intimidatingly at <<their $g.negotiator>> back,
<<rep $g.negotiator>> managed to negotiate an even greater pay for the well-done job.
<<else>>
The villagers celebrated your slavers victorious return with a small feast.
One of the villagers flirtatiously invited <<rep $g.merc1>>
to grab <<their $g.merc1>> private "prize",
<<if $g.merc1.isHasTrait('per_chaste')>>
but the chaste slaver rebuffed their advances.
<<else>>
and the sound of lovemaking can be heard from one of the village houses throughout the night.
<</if>>
<</if>>
</p><p>
Unfortunately, your slavers got lost trying to find and locate the settlement.
By the time they arrived, the settlement was already ransacked by wolves.
Their original job gone, the slavers slunk back to the fort with nothing to show for their efforts.
</p><p>
While your slavers are proficient at fighting humans, they had much less experience fighting animals.
Caught off guard as wolves attacked the village, <<yourrep $g.merc1>> clumsily swung their <<uweapon $g.merc1>>, which the wolves
dodged with ease.
Fortunately, the incompetant antics of your slavers distracted the wolves enough for the rest of the
villagers to hide,
but your slavers were too overcame with shame to request pay for their sloppy work.
</p>/* PROOFREAD COMPLETE */
<<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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trader': setup.qu.slavetrader,
'slaver1': setup.qu.slavetrainer,
'slaver2': setup.qu.slavetrainer,
},
{ /* actors */
'slave': 'all',
},
[ /* costs */
],
'QuestBoxForSale', /* passage description */
setup.qdiff.easy7, /* difficulty */
[ /* outcomes */
[
'QuestBoxForSaleCrit',
[
setup.qc.SlaveMarker('slave'),
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, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.marketingoffice)
], /* prerequisites to generate */
)>><p>
Slavery is a widespread reality on the lawless lands of the north.
It has many benefits -- cheap labor, cleaner streets, and even in some cases cheap entertainment.
Some morally questionable taverns in the <<lore region_vale>> like to spice up their taverns
with a living entertainment in the form of a
fuck box.
It's a cramped box, stuffed full with a slave, and have exactly two openings:
one around the mouth of the slave and another bigger one for the holes of the slave.
Curious guests can try out the box by inserting various objects into the holes,
be it carrots, cucumbers, or even their dicks if they feel particularly horny.
</p>
<p>
For such kind of designation, 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><<if $g.slave.isMale()>>
<<else>>
<<questimage 'boxforsale_female.jpg'>>
<</if>>
<p>
Among the many taverns scattered throughout the region,
your slavers chose a particularly famous tavern, the "Rusty Hoe".
To their luck, the tavern just received word that a local army will be passing through the region,
which mean a lot of patrons for the tavern.
Given how long the soldiers march, they are usually really, really horny,
and this made it very easy for
<<yourrep $g.trader>> to <<uadv $g.trader>> sell the slave box idea to the tavern owner --
"squeeze the money from their dicks," as <<therace $g.trader>> put it (quite literally in this case).
</p>
<p>
The owner happily agreed 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 much for such a slave, citing an excess of supply in the area.
Eventually, <<rep $g.trader>> managed to negotiate
a substandard deal, which all things considered is still better than nothing<</if>>.
</p>
<p>
All that's left is for you to choose which poor soul you will send.
Just don't think too hard what kind of dark, bleak, and cockfull fate awaits the slave within the box.
</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.
Better luck next time.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'caravan_guarding_vale', /* key */
'Caravan Guarding: Vale', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'guard1': setup.qu.guard,
'guard2': setup.qu.guard,
'guardsupport': setup.qu.guardsupport,
},
{ /* actors */
'leader': 'subrace_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, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The <<lore region_vale>> has a reputation for being completely unsafe and full of raiders:
raiders like your company and your fellow slaver companies.
While you are usually on the offensive,
occasionally there are lucrative opportunities to guard the caravan
against other raiders instead. After all, who's better than fending off raider attacks
than other fellow, more morally upstanding raiders?
</p><p>
<<Rep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> <<rep $g.guard2>> effectively
guarded the caravan.
Along the way, the caravan was ambushed by bandits, who easily outnumbered the caravan members.
But <<yourrep $g.guard1>> and <<rep $g.guard2>>
were experienced and ready for the attack --
they intimidated the bandits into
<<set _fire = setup.selectUnit([$g.guard1, $g.guard2], {trait: 'magic_fire'})>>
<<if _fire>>
<<Rep _fire>> occasionally flaunted <<their _fire>> fire magic too, adding to the show.
<</if>>
leaving with a proper bandit-to-bandit death stare.
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, revealing her lack of underwear and her attractively tight vagina,<<else>>pants, revealing his lack of underwear and the delicious crack of his butt,<</if>>
before promising to put in good words about your slavers' prowess to the locals.
</p><<if $g.guard1.isHasTrait('per_chaste')>>
<<set _u = $g.guard1>>
<<elseif $g.guard2.isHasTrait('per_chaste')>>
<<set _u = $g.guard2>>
<<elseif $g.guardsupport.isHasTrait('per_chaste')>>
<<set _u = $g.guardsupport>>
<<else>>
<<set _u = null>>
<</if>>
<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>> was a sight to behold:
a
<<if $g.leader.isFemale()>>
busty woman with the biggest ass they had ever seen live around the area.
Your slavers' collective sanity was saved thanks to the fat ass sensually bouncing off the carriage
each time the caravan hit a bump 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>>
<<if _u>>
<<Rep _u>> felt <<their _u>> chaste little soul dying a little inside.
<<run setup.qc.TraumatizeRandom('unit', 2).apply(setup.costUnitHelper(_u))>>
<</if>>
</p><p>
<<Rep $g.guard1>> and <<utheirrel $g.guard1 $g.guard2>> <<rep $g.guard2>>
guarded the caravan.
Along the way, however, the caravan was ambushed by bandits who easily outnumbered your team.
Both <<rep $g.guard1>> and <<rep $g.guard2>> were sleeping on duty when it happened, and
<<yourrep $g.guardsupport>> guardsupport|was the only one available to fight.
Seeing no hope of winning, <<rep $g.guardsupport>> guardsupport|was forced to reveal
<<their $g.guardsupport>> trump card: a proper raider-to-raider sweet talking.
Under <<reps $g.guardsupport>> supervision, the raiders peacefully stole the caravan's content,
leaving your slavers and the caravan leader unharmed and unmolested.
</p>
<p>
Your slavers did not get paid for that kind of work.
</p><p>
Unfortunately, the entire caravan was ambushed by a group of feral werewolves,
who tipped the caravan over into a river, causing both your slavers and the
caravan leader to be injured.
</p>/* PROOFREAD COMPLETE */
<<set _charter = new setup.UnitCriteria(
null, /* key */
'Cartographer', /* title */
[
setup.trait.per_cautious,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.per_logical,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
], /* critical traits */
[
setup.trait.per_aggressive,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.per_empath,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* disaster traits */
[setup.qres.Job(setup.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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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),
],
],
[
'QuestChartTheValeSuccess',
[
],
],
[
'QuestChartTheValeDisaster',
[
setup.qc.Injury('charter1', 2),
setup.qc.Injury('charter2', 2),
],
],
],
[[setup.questpool.vale, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><<questimage 'chart_the_vale.jpg'>>
<p>
Many parts of the vast <<lore region_vale>> is still uncharted.
To remedy this,
several wealthy denizens of the vale would occasionally offer
mouth-watering rewards for brave or foolish adventurers to venture into these
unknown territories, and report of their findings.
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>> offered to scout the mountains.
But as they started to cross the mountain, they realized that the mountains
are not as uninhabited as they had thought.
Some animalistic noises can be heard, which became clearer the further they venture
into the mountains.
</p>
<p>
Given the choice of either going further or retreat, <<rep $g.scout>> <<uadv $g.scout>>
assured the rest of the team that there was nothing to worry about.
And for once, <<yourrep $g.scout>> spoke truly.
<<They $g.scout>> expertly guided the team through the narrow passes, while
<<rep $g.charter1>> and <<rep $g.charter2>> busily took notes of the route and oddities they found
along the way.
They eventually managed to reach the other side of the mountain without encountering any incident,
much to their relief.
</p>
<p>
The team went back to report their success, and was rewarded greatly. Of course, they
took the discretion of not mentioning the strange noises they kept hearing while they
were there. After all, it was probably nothing but simple, 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>> offered to scout the mountains,
the rest of the team voted to select the safer option and just get the job
<<if $gOutcome == 'success'>>
done.
Finding the source of a river simply meant they just needed to follow the river
to the end, which turned out to be an easy task and was completed in no time.
The slavers spent the rest of the time before going back in the local tavern
trying to lift <<reps $g.scout>> downed spirit.
<<else>>
done quickly.
But the river dried up in the middle of the scouting mission -- given
<<reps $g.scout>> lack of skill,
there was no way <<they $g.scout>> scout|was going to be able to track down the water spring.
They decided to abandon the mission and return back to the fort.
<</if>>
</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>> offered to scout the mountains,
and your other slavers did not feel the need to disagree.
But as they started to cross the mountain, they realized that the mountains
were not as uninhabited as they had thought.
Some animalistic noises can be heard, becoming louder the further they venture into the mountain.
</p>
<p>
<<Rep $g.scout>> <<uadv $g.scout>>
assured the rest of the team that there were nothing to worry, which turned out to be a grave error.
Halfway through, they were ambushed by feral werewolves.
It turned out that these mountains were used by feral werewolves as breeding location during mating season,
which was happening... right about when your slavers crossed the mountains.
Overcame with their lust, these werewolves were unable to distinguish your slavers with potential
mates, and proceeded to violate your slavers.
This lasted a couple of days, according to your slavers --- but their memory was understandably vague
about this.
Eventually, your slavers were discarded outside of the mountains after they were no longer
responsive -- It will take several weeks for your slavers to recover from such ordeal.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'fuckholefair', /* key */
'Fuckhole Fair', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* 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('fuckhole_fair'),
setup.qc.Favor('humanvale', 20),
],
],
[
'QuestFuckholeFairCrit',
[
setup.qc.MoneyNormal(1.2),
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestFuckholeFairFailure',
[
setup.qc.Favor('humanvale', 10),
],
],
[
'QuestFuckholeFairFailure',
[
setup.qc.Injury('slave', 2),
],
],
],
[[setup.questpool.vale, setup.rarity.common],], /* quest pool and rarity */
[
setup.qres.Building(setup.buildingtemplate.dungeons)
], /* prerequisites to generate */
)>><p>
One of the northern settlements is holding a festival! Everyone is
welcome to bring any attraction to the festival -- the attendees
would often pay in order to make use of the available attractions.
Somehow, your company was also invited to the festivities.
</p>
<p>
You could try to bring the main attraction in your company -- slaves, of course.
The slave does not have to be properly trained -- any hole obedient or not can serve a fuckbooth after all --
but perhaps it is best to bring along a slaver or three to properly showcase the sex toy.
With the right approach and slogan, this could turn you a tidy amount of profit from the
sexually liberated farmers.
</p><p>
Your slavers built a makeshift pillory in the middle of the village square,
and secured the
<<if $g.slave.isHasTrait('training_obedience_basic')>>
obedient
<<else>>
defiant
<</if>>
slave inside the pillory.
Following the old age advice of "test it before you deploy",
the slavers spent the better part of the first a day testing out and sampling the various
holes offered by the slave.
<<set _careless = setup.selectUnit([$g.trader, $g.trainer, $g.guard], {trait: 'per_brave'})>>
<<set _cautious = setup.selectUnit([$g.trader, $g.trainer, $g.guard], {trait: 'per_cautious'})>>
<<if _cautious>>
A prudently taken precaution, no doubt thanks to your careful slaver <<rep _cautious>>.
<<elseif _careless>>
(A complete turnaround from <<reps _careless>> usually careless self that you have no doubt won't stick long in the <<urace _careless>>.)
<</if>>
From the testing they made a couple of adjustments,
including the necessity of proper lubing and a place to gather up the bodily fluids leaking
from the slave to be sold for some 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
<<yourrep $g.slave>> out.
The slave's holes
<<if $gOutcome == 'crit'>>
were almost always occupied
<<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>> became familiar with the feeling of having all types of garden 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 was so impressed with <<rep $g.slave>> after the slave took
his boot up the ass that he
offered 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 rehearse the fuckbooth a day
before the festival.
As a result, they were missing a few key components during the festival,
including the necessity of heavy dosage of lube inside <<reps $g.slave>> <<ubody $g.slave>>.
<<if $gOutcome == 'disaster'>>
With proper lubing,
the slave's holes were completely unusable after an hour in the hot day,
and your slavers had no choice but to close shop early.
<<else>>
Sex with the slave became too rough as a result, and
they did not attract many customers.
<</if>>
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'kidnap_you_not', /* key */
'Weed Removal', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'seducer': setup.qu.seducer,
'kidnap1': setup.qu.infiltrator,
'kidnap2': setup.qu.infiltrator,
},
{ /* actors */
'target': 'subrace_humanvale',
'evil': 'subrace_humanvale',
},
[ /* costs */
],
'QuestKidnapYouNot', /* passage description */
setup.qdiff.normal6, /* difficulty */
[ /* outcomes */
[
'QuestKidnapYouNotCrit',
[
setup.qc.Slave(
'target',
'a|was a villager in a northern settlement that is ordered to be removed by its unscrupulous neighbor'),
setup.qc.MoneyNormal(),
],
],
[
'QuestKidnapYouNotCrit',
[
setup.qc.Slave(
'target',
'a|was a villager in a northern settlement that is ordered to be removed by its unscrupulous neighbor'),
setup.qc.Ire('humanvale', 1),
],
],
[
'QuestKidnapYouNotCrit',
[
],
],
[
'QuestKidnapYouNotCrit',
[
setup.qc.Injury('kidnap1', 1),
setup.qc.Injury('kidnap2', 1),
setup.qc.Ire('humanvale', 3),
],
],
],
[[setup.questpool.vale, setup.rarity.common],], /* 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 a proposition
after your own heart.
<<They $g.evil>> wants your company to remove one of <<their $g.evil>> neighbors that have been a constant
problem to <<their $g.evil>> business and personal life for some time now.
It would be a nice coincidence if <<their $g.evil>> neighbor were to disappear one day,
with nothing tying the disappearance back to <<them $g.evil>>.
To a slaving company such as yours, this opportunity 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 your slavers distract the guard while the others
go in and kidnap the target in the middle of the night, before skipping town.
Executing such a plan however would depend on the skills of the slavers.
</p>
<<if $gOutcome == 'crit' || $gOutcome == 'success'>>
<p>
The plan went off without a hitch.
Nobody could resist <<reps $g.seducer>> seductive charm,
<<if $g.seducer.isHasTrait('face_attractive')>>
especially paired with <<their $g.seducer>> <<uface $g.seducer>>,
<<elseif $g.seducer.isHasTrait('dick_large')>>
especially when <<they $g.seducer>> started to point seductively into <<their $g.seducer>> considerable bulge,
<<elseif $g.seducer.isHasTrait('breast_large')>>
especially when <<they $g.seducer>> started to seductively press <<their $g.seducer>> <<ubreasts $g.seducer>> together,
<</if>>
so while <<they $g.seducer>> <<uadv $g.seducer>> worked <<their $g.seducer>> magic on the guards,
<<yourrep $g.kidnap1>> and <<utheirrel $g.kidnap1 $g.kidnap2>> <<rep $g.kidnap2>> went in via a window,
before putting a sack and a gag over the target's head.
Secured, the moaning neighbor was carried <<them $g.target>> outside and far from the village.
<<if $gOutcome == 'success'>>
Unfortunately, it turned out that <<reps $g.seducer>> grip on
the guard's attention was not as strong as <<they $g.seducer>> believed.
By the end of the day, the settlement somehow knew that it was your company who have
kidnapped <<rep $g.target>>.
Hearing this, your client dropped 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.
<<else>>
<<Rep $g.seducer>> seducer|was so convincing that at the end of the week, nobody in the town,
not even the guard had any idea who could have committed such a brazen kidnapping.
<</if>>
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Unfortunately, <<rep $g.seducer>> seducer|was unable to take the guard's
attention long enough for your other slavers to do their work. Hearing a commotion,
the guard rushed in and your slavers were left with no choice but to escape.
</p>
<<else>>
<p>
Unfortunately, <<rep $g.seducer>> seducer|was not able to take the guard's
attention at all,
and the other slavers were injured during a fight with the guard as a result.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<set _desc = 'a|was a member of the militia in the northern lands who you joined your company hearing the prospect of gold and flesh'>>
<<run new setup.QuestTemplate(
'militia_matters', /* key */
'Militia Matters', /* Title */
'darko', /* author */
['vale', 'unit'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'recruiter1': setup.qu.recruiter,
'recruiter2': setup.qu.recruiter,
'guard': setup.qu.raidersupport,
},
{ /* actors */
'militia1': 'quest_humanvale_militia',
'militia2': 'quest_humanvale_militia',
'militia3': '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, setup.rarity.common],], /* 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>>,
but 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<<women $g.militia1>> were not treated well by their commander.
You might be able to send a group of convincing slavers to make them 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>> recruiter1|was so <<uadv $g.recruiter1>> convincing that three of the militia<<women $g.militia1>>
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 militia<<women $g.militia1>> disgruntled over their wage, which made it easy to convince them to join your company.
</p><p>
Unfortunately, nobody in the militia had any interest in enslaving their fellow <<women $g.militia1>>.
At least your slavers return back with the money intact and unused, miraculously avoiding spending
them on frivolous matters.
</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 was a shame, such behavior might have actually made <<them $g.militia1>> a rather good slaver.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'sexual_healing', /* key */
'Sexual Healing', /* Title */
'darko', /* author */
['vale', 'money'], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'healer': setup.qu.healer,
'whore': setup.qu.whore,
'guard': setup.qu.guard,
},
{ /* actors */
'client': 'subrace_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, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The northerners living in the <<lore region_vale>> are simple and superstitious folks.
There are many quite ridiculous beliefs they still hold on strongly even to this day.
There is perhaps an opportunity here, to make use of these beliefs for your own evil gain...
</p>
<p>
One particularly juicy belief is concering their well-being --
Many northerners still believe that diseases are caused by the impurity contained inside their bodies.
Your slavers can thus try to offer these simple villagers a "deeply spiritual" sexual healing,
to cleanse their bodies off the impurities by exorcising them out of their orifices.
You need a slaver proficient in the sexual arts to "clean", but mostly probe and grope the villagers,
and an real healer to do the actual work.
The villagers will start to associate the groping and probing with healing, and you can definitely
make some coin out of this...
</p><p>
Your slavers found a pristine river next to a village, ready to be desecrated with cum
and all other bodily fluids.
After setting 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>>.
The "healing" then began in the earnest, and <<rep $g.whore>> began <<their $g.whore>> molestations.
<<if $g.whore.isHasTrait('per_sly')>>
<<They $g.whore>> talked dirtily into the client.
<</if>>
<<if $g.whore.isHasTrait('dick_large')>>
<<Their $g.whore>> <<udick $g.whore>> brushed against the client's back.
<</if>>
<<if $g.whore.isHasTrait('breast_large')>>
<<Their $g.whore>> <<ubreasts $g.whore>> pushed sensuously against the client's own <<ubreasts $g.client>>.
<</if>>
<<if $g.whore.isHasTrait('magic_earth_master')>>
<<They $g.whore>> channeled <<their $g.whore>> mastery over earth magic to conjure tentacles
from inside the water, who then ravaged and tested various orifices that belonged to the client.
<</if>>
As <<rep $g.whore>> continued to molest the various parts of the villager's body,
<<rep $g.healer>> perceptively noticed a tick bite on the villager's naked butt.
While <<rep $g.healer>> administered the actual cure, <<reps $g.whore>> advances became bolder and bolder,
<<their $g.whore>> <<uhands $g.whore>> moving downwards towards <<their $g.client>> nethers, all for
<<their $g.client>> own good, of course.
<<Rep $g.whore>> ultimately ordered the villager to
<<if $g.whore.isHasDick()>>
suck <<their $g.whore>> <<udick $g.whore>>
<<else>>
eat <<their $g.whore>> pussy
<</if>>
in order to complete the purifying ritual, and heal <<their $g.client>> disease,
which the villager reluctantly do so.
But at the end of the procedure, <<rep $g.healer>> did a wonderful job at healing the fever,
and word of mouth quickly spread into the village about how the groping, probing and oral action
cured the fever.
Your slavers' services became famous soon after.
</p>
<<if $gOutcome == 'crit'>>
<p>
In the coming days, it turned out that
<<yourrep $g.whore>> whore|was a natural at this job.
<<They $g.whore>> <<uadv $g.whore>> molested and explored all nooks and crannies of
the customer's body while
<<rep $g.healer>> worked <<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>> brought home back to your fort.
</p>
<<else>>
<p>
In the coming days,
your slavers made tidy profit from the sexual abuse inflicted <<uadv $g.whore>> by <<rep $g.whore>>,
After a while, they even started to secretly milk their customers,
before selling back the "snake oil" to the villagers as spiritual ointments.
All in all, the venture was a complete success, and your slavers even look forward to doing it again.
</p>
<</if>><p>
Unfortunately, the service did not attract as many customers as your slavers had hoped,
and they were only able to bring about half of the expected profit from the endeavor.
</p><p>
The river your slavers had chosen as the "sacred place" turned 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>/* PROOFREAD COMPLETE */
<<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, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
The northerners are not traders by nature -- each settlement usually only trade
between their own residents, and very rarely trade occurs between settlements.
Hence, there is a lot of opportunities for traders to make good coin, although they need
to be knowledgeable to know where and what to buy and sell.
It also takes a little bit of investment to get the money train going.
If you have a particularly savvy group of 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 managed to make a huge amount of profit, more than quadrupling
the amount of investment they put.
<<set _con = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'skill_connected'})>>
<<if _con>>
<<Reps _con>> many connections certainly helped.
<</if>>
<<set _fru = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_frugal'})>>
<<if _fru>>
<<Reps _fru>> frugality certainly saved your company some money.
<</if>>
<<set _lav = setup.selectUnit([$g.trader1, $g.trader2], {trait: 'per_lavish'})>>
<<if _lav>>
<<Rep _lav>> might not have been the best at <<their _lav>> task -- being rather
careless with money -- but the results still speak for itself.
<</if>>
</p>
<p>
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 managed to return with is a puny one fifth of the
original investment they went with.
</p><p>
Unfortunately, your slavers were robbed midway by a band of werewolves.
There were just too many enemies for <<yourrep $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>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'vale_farm_raid', /* key */
'Raid: Vale Farm', /* Title */
'darko', /* author */
['vale', 'money', 'unit', 'ire',], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport,
},
{ /* actors */
'farmer': 'quest_humanvale_farmer',
},
[ /* costs */
],
'QuestValeFarmRaid', /* passage description */
setup.qdiff.easy3, /* difficulty */
[ /* outcomes */
[
'QuestValeFarmRaidCrit',
[
setup.qc.Slave(
'farmer',
'a|was a simple farmer on the northern vale that had 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, setup.rarity.common],], /* quest pool and rarity */
[], /* prerequisites to generate */
)>><p>
Welcome to the world of raiding! All raiders must begin somewhere, and what better
place to start than to raid an innocent little farm on the <<lore region_vale>>!
Lightly guarded, promising good amount of reward, and also promising you the
earthly bounty in the form of the farmer's own <<daughter $g.farmer>>, it surely is the perfect target
for an enterprising company such as yourself.
</p><p>
Your slavers launched a very textboox raid on the farm.
<<set _intim = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'skill_intimidating'})>>
<<set _scary = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'face_scary'})>>
<<set _muscle = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'muscle_verystrong'})>>
<<set _cruel = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_cruel'})>>
<<set _agg = setup.selectUnit([$g.raider1, $g.raider2, $g.support], {trait: 'per_aggressive'})>>
<<if _intim>>
<<Rep _intim>> used <<their _intim>> intimidation skills to scare off the farmerhands, leaving the farm
empty for the moment.
<<elseif _muscle>>
<<Rep _muscle>> used <<their _muscle>> bulging muscles to scare off the farmerhands, leaving the farm
empty for the moment.
<<elseif _scary>>
<<Rep _scary>> used <<their _scary>> scary face to scare off the farmerhands, leaving the farm
empty for the moment.
<<elseif _cruel>>
<<Rep _cruel>> cruelly assaulted one of the farmhands, leaving the rest fleeing for their lives and the farm empty.
<<elseif _agg>>
<<Rep _agg>> aggressively assaulted one of the farmhands, leaving the rest fleeing for their lives and the farm empty.
<<else>>
They set fire into the fields, which alarmed the farmers.
<</if>>
With the farmers gone, there was nobody guarding their homes.
Your slavers proceeded to ransack the buildings, stealing many valuables.
<<if $gOutcome == 'crit'>>
<<rep $g.raider1>> 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 after a little
friendly gang-fuck.
<</if>>
</p><p>
Unfortunately, your company was not the only company that came up with the idea to raid
such a juicy target.
By the time your slavers arrived,
the farm had already been torched and ransacked.
Nothing of value were found.
</p><p>
Your slavers made a grave error in picking a long-standing farm in the region.
It turned out that there was a very good reason why no raiders dared to touch this particular farm --
These farmers were fierce, and armed themselves the moment they see your slavers coming.
For a group of farmers they fought like heroes of legends, and your slavers were soundly defeated.
</p>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'vale_werewolf_camp_raid', /* key */
'Raid: Werewolf Camp', /* Title */
'darko', /* author */
['furry', 'vale', 'unit', 'ire',], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'support': setup.qu.raidersupport,
},
{ /* actors */
'unit': 'subrace_humanvale',
},
[ /* costs */
],
'QuestValeWerewolfCampRaid', /* passage description */
setup.qdiff.normal13, /* difficulty */
[ /* outcomes */
[
'QuestValeWerewolfCampRaidCrit',
[
setup.qc.Slave(
'unit',
'a|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, setup.rarity.uncommon],], /* 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 humanlike species that call the vast open plains their home.
The werewolves also share territory with them,
although the werewolves tend to occupy the colder, northernmost regions 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 clan 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' fresh captures would be better under the tender care of your company.
</p><p>
Your slavers were very lucky.
The camp was nearly empty when they arrived --
it seemed that the werewolves were out there busy hunting for more captures.
<<Rep $g.raider1>> and <<utheirrel $g.raider1 $g.raider2>> <<rep $g.raider2>> <<uadv $g.raider1>>
ransacked through the entire place, taking all the valuables with them.
<<if $gOutcome == 'crit'>>
Most importantly, your slavers also found a naked and fully tied up <<urace $g.unit>> inside one of the camps,
freshly caught from the vale.
<<if $g.raider1.isHasTrait('per_lustful')>>
Uncharacteristically, <<yourrep $g.raider1>> managed to resist <<their $g.raider1>> lustful desires and
<<else>>
In a surprise twist, <<yourrep $g.raider1>> somehow
<</if>>
resisted raping the struggling slave,
giving your slavers enough time to escape the encampment before the werewolves returned.
<<else>>.
There was no slave to be found though, perhaps this camp was actually already abandoned and the werewolves
had moved to another camp?
<</if>>
</p><p>
Unfortunately, your slavers did not manage to locate the werewolf camp among the vast
snowy fields of the north. Better luck next time.
</p><p>
Your slavers found the camp empty and looking abandoned. Just when they counted their luck,
they were ambushed by werewolves who were lying in wait to ambush looters like your slavers.
While your slavers managed to escape, they sustained heavy injuries.
</p>/* PROOFREAD COMPLETE */
<<set _waylayer = new setup.UnitCriteria(
'waylayer', /* key */
'Waylayer', /* title */
[setup.trait.race_wolfkin, setup.trait.dick_large, setup.trait.breast_large, setup.trait.face_attractive,setup.trait.face_beautiful, setup.trait.per_sly, ], /* critical traits */
[setup.trait.face_scary, setup.trait.face_hideous, setup.trait.per_direct, setup.trait.per_kind, setup.trait.per_chaste, setup.trait.per_honorable], /* disaster traits */
[setup.qres.Job(setup.job.slaver)], /* requirement */
{ /* skill effects, sums to 3.0 */
social: 2,
sex: 1,
}
)>>
<<run new setup.QuestTemplate(
'werewolf_waylay', /* key */
'Werewolf Waylay', /* Title */
'darko', /* author */
['furry', 'vale', 'unit', 'ire', 'rare', ], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'waylayer': _waylayer,
'kidnap1': setup.qu.infiltrator,
'kidnap2': setup.qu.infiltrator,
},
{ /* actors */
'target': 'subrace_werewolf',
},
[ /* costs */
],
'QuestWerewolfWaylay', /* passage description */
setup.qdiff.hardest20, /* difficulty */
[ /* outcomes */
[
'QuestWerewolfWaylayCrit',
[
setup.qc.Slave(
'target',
'a|was a curious member of the werewolf tribe that gave the wrong person a|their patronage'),
setup.qc.Ire('werewolf', 2),
],
],
[
'QuestWerewolfWaylayCrit',
[
setup.qc.MoneyNormal(),
setup.qc.Ire('werewolf', 1),
],
],
[
'QuestWerewolfWaylayFailure',
[
setup.qc.Ire('werewolf', 4),
],
],
[
'QuestWerewolfWaylayDisaster',
[
setup.qc.Injury('kidnap1', 4),
setup.qc.Injury('kidnap2', 4),
setup.qc.Ire('werewolf', 7),
],
],
],
[[setup.questpool.vale, setup.rarity.epic],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
While the northerners have to be the most numerous race in the <<lore region_vale>>,
the white snowy fields are 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 for buyers.
occasionally, you would get orders or two 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 also for sure raise the ire of the tribe against your company, and best
prepare for retaliation should you go through with this idea...
</p><p>
<<if $g.waylayer.isHasTrait('race_wolfkin')>>
Since <<rep $g.waylayer>> waylayer|is a werewolf <<themself $g.waylayer>>,
the poor victim never grew suspicious of <<reps $g.waylayer>> suggestion to go out and have
some adventure together.
<<else>>
<<rep $g.waylayer>> had to work hard to earn the victim's trust, since werewolves are not
trusting by nature.
<</if>>
<<if $g.waylayer.isHasTrait('per_sly')>>
<<Reps $g.waylayer>> slyness certainly helped made the convincing easier.
<<elseif $g.waylayer.isHasTrait('face_attractive')>>
<<Reps $g.waylayer>> attractive face certainly helped made the convincing easier.
<<elseif $g.waylayer.isHasTrait('dick_large')>>
<<Rep $g.waylayer>> noticed the werewolf kept stealing glances on <<their $g.waylayer>> bulge,
which probably made the convincing easier.
<<elseif $g.waylayer.isHasTrait('breast_large')>>
<<Rep $g.waylayer>> noticed the werewolf kept stealing glances on <<their $g.waylayer>>
<<ubreasts $g.waylayer>>, which probably made the convincing easier.
<</if>>
Ultimately, <<rep $g.waylayer>> waylayer|was skillful at <<their $g.waylayer>> job, and soon
enough the victim was ready to go out on an adventure.
</p>
<p>
Little did <<they $g.target>> know that it would be an adventure of <<their $g.target>> lifetime.
As <<rep $g.waylayer>> reached into the clearing,
<<rep $g.kidnap1>> and <<rep $g.kidnap2>> were ready with the ambush.
<<if $gOutcome == 'crit'>>
When <<rep $g.waylayer>> distracted the young werewolf, <<rep $g.kidnap1>> struck from behind,
knocking the werewolf unconscious.
Securely tied up, the wolf was packaged securely and brought back home for
the surely intense training to become a proper pet.
<<else>>
When <<rep $g.waylayer>> distracted the young werewolf, <<rep $g.kidnap1>> struck from behind.
But the werewolf race is tough, and the were, while dazed, remained standing.
Using <<their $g.target>> superior familiarity with the surroundings, the werewolf made
<<their $g.target>> escape, and your slavers were unable to catch up. Still,
<<their $g.target>> belongings are yours now, and
your slavers pawned most of the werewolf's belongings before going back.
<</if>>
</p><p>
<<Rep $g.waylayer>> chose a wrong target for the quest -- <<rep $g.target>>
grew too suspicious of the situation that <<they $g.target>> left <<rep $g.waylayer>>
midway to the ambush site.
Still, the werewolf tribes eventually know of your planned treachery, and they grow
suspicious of your company.
</p><p>
<<Rep $g.waylayer>> managed to bring the target to the ambush site without a problem,
but the werewolf chosen proved too strong for your slavers to capture,
injuring them severely in the process before reporting your company's degeneracy to
<<their $g.target>> packmates.
</p>/* PROOFREAD COMPLETE */
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Target Hunt Slave', /* name */
[
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_nimble,
setup.trait.tough_tough,
setup.trait.per_dreamy,
setup.trait.per_masochistic,
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.per_cautious,
setup.trait.per_attentive,
setup.trait.skill_flight,
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer': setup.qu.slavetrainer,
'spotter': setup.qu.spotter,
'slave': _criteriaslave,
'entertainer': setup.qu.performer, },
{ /* actors */
'lord': 'subrace_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, setup.rarity.common],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.dungeons), ],
[ /* expiration outcomes */
],
)>><p>
The nobles of the Kingdom of Tor dabble in many hobbies —- some prefers the higher arts such as music and astronomy, while others revel in debauched acts such as sex and alcohol.
Some prefer a combination of both -- one of the nobles, <<lord $g.lord>> <<rep $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>> used to hunt 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>> pastime.
</p>
<p>
One of the <<lord $g.lord>>'s messengers has come to your fort to ask for your help with an upcoming hunt. They would like you to bring a completely untrained slave and release them into the hunting grounds. 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, especially for a job with very little effort. All in all it seems on the level. You could ignore it, of course, but this is practically money for nothing.
</p><p>
Without providing any explanation, <<name $g.trainer>> brought the disobedient slave <<name $g.slave>> to the outskirts of the hunting range, and released <<them $g.slave>>.
<<name $g.slave>> stared at <<name $g.trainer>>, who made a lazy shooing motion at them. At that point <<name $g.slave>> dashed off into the forest, apparently not wanting to tempt fate any further.
<<if $g.trainer.isHasTrait('per_cruel')>>
<<name $g.trainer>> smirked as <<they $g.trainer>> watched the slave run, knowing full well that the illusion of freedom here was exactly that - an illusion.
<</if>>
With the preparation complete, it was time for the <<lord $g.lord>>'s hunt to begin.
</p>
<p>
Riding in on a proud horse, the <<lord $g.lord>> galloped into the open woods, bow in hand and <<their $g.lord>> quiver full of tranquilizing arrows. Spying a slave cowering in the long bracken, <<they $g.lord>> raised their bow and sent an arrow into the muscled thigh of the slave, cutting their scream short as they slumped, unconscious to the ground.
Your slavers watched as slaves were brought down by the <<lord $g.lord>>'s masterful aim —- <<they $g.lord>> were truly a master of the hunt.
</p>
<<if $gOutcome == 'crit'>>
<p>
<<Yourrep $g.slave>> slave|was one of the those shot down by the <<lord $g.lord>>.
While normally all slaves were returned to their owners at the end of the hunt, the <<lord $g.lord>> took a particular interest in <<them $g.slave>>. Later, the gamemaster arrived at your office with a lucrative purchase offer for <<rep $g.slave>>...
</p>
<<elseif $gOutcome == 'success'>>
<p>
Noting that <<name $g.slave>> slave|was not one of the downed animals,
<<name $g.spotter>> immediately set out to locate the slave before
<<they $g.slave>> escape permanently.
It didn't take long for <<name $g.spotter>> watchful <<ueyes $g.spotter>> to spot <<name $g.slave>>.
All but running them down, <<name $g.trainer>> re-collared the slave, binding <<their $g.slave>> hands behind them and getting them ready for the walk back to your fort.
</p>
<<else>>
<p>
Noting that <<yourrep $g.slave>> slave|was not one of the downed animals, <<name $g.spotter>> immediately got to work to locate <<them $g.slave>> before <<they $g.slave>> escape permanently.
But whether due to incompetence or just bad luck, <<they $g.spotter>> spotter|was not able to locate <<name $g.slave>>. If you want to recapture <<them $g.slave>>, you'd better act fast...
</p>
<</if>><p>
Without providing any explanation, <<name $g.trainer>> brought the disobedient slave <<name $g.slave>> to the outskirts of the hunting range, and released <<them $g.slave>>.
However, <<name $g.slave>> immediately ran in the wrong direction, heading away from the hunting grounds. While <<name $g.spotter>> was able to recapture <<them $g.slave>>, they ended up missing the hunt. And the promised pay.
</p>/* PROOFREAD COMPLETE */
<<set _criteriapurifier = new setup.UnitCriteria(
null, /* key */
'Master Purifier', /* name */
[
setup.trait.bg_priest,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.trait.race_demon,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_curious,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
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.Trait(setup.trait.magic_fire_master),
],
{
aid: 1.5,
arcane: 1.5,
}
)>>
<<set _criteriacorruptor = new setup.UnitCriteria(
null, /* key */
'Master Corruptor', /* name */
[
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.corrupted,
setup.trait.corruptedfull,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
setup.trait.bg_priest,
setup.trait.per_kind,
setup.trait.per_chaste,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.magic_light,
setup.trait.magic_light_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.magic_dark_master),
],
{
arcane: 1.5,
sex: 1.5,
}
)>>
<<set _criteriaslave = new setup.UnitCriteria(
null, /* key */
'Defiant Slave', /* name */
[
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.tough_nimble,
setup.trait.face_hideous,
setup.trait.per_cautious,
setup.trait.per_dreamy,
],
[
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.bg_mist,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.face_beautiful,
setup.trait.corruptedfull,
setup.trait.corrupted,
setup.trait.per_brave,
setup.trait.per_attentive,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.HasTag('in_training_defiant_slave'),
],
{
}
)>>
<<run new setup.QuestTemplate(
'corruption_cycle_breaker', /* key */
"Corruption Cycle Breaker", /* Title */
"darko", /* Author */
[ /* tags */
'vale',
'prep',
'danger',
'trait',
],
12, /* weeks */
200, /* expiration weeks */
{ /* roles */
'purifier': [ _criteriapurifier, 1.5],
'corruptor': [ _criteriacorruptor, 1.5],
'slave': _criteriaslave,
},
{ /* actors */
},
[ /* costs */
],
'Quest_corruption_cycle_breaker',
setup.qdiff.harder54, /* difficulty */
[ /* outcomes */
[
'Quest_corruption_cycle_breakerCrit',
[
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
setup.qc.TraitRemove('slave', setup.trait.will_defiant),
setup.qc.PermanentlyCorrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('corruptor'),
setup.qc.AddHistory('slave', "a|was broken from a|their defiancy via continuous weeks of being corrupted and purified non-stop"),
],
],
[
'Quest_corruption_cycle_breakerCrit',
[
setup.qc.Outcomes('crit'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('corruptor'),
],
],
[
'Quest_corruption_cycle_breakerCrit',
[
setup.qc.Outcomes('success'),
setup.qc.PermanentlyCorrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('slave'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('corruptor'),
setup.qc.Corrupt('corruptor'),
],
],
[
'Quest_corruption_cycle_breakerCrit',
[
setup.qc.Outcomes('failure'),
setup.qc.Mindbreak('slave'),
setup.qc.Corrupt('purifier'),
setup.qc.Corrupt('corruptor'),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTagGlobal('in_training_defiant_slave'),
],
)>><<set _u = setup.getUnit({tag: 'in_training_defiant_slave'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
After long weeks of research, your slavers were able to come up with one particular way of intense slave-breaking procedure that should break even <<yourrep _u>>. An intense corruption procedure performed in a secluded valley of the north. But that alone won't be anywhere near sufficient, no, what you need to do is to have two slavers — one corrupting while the other purifying.
The slave will be subjected to an intense session of alternating between corruption and purification.
Seeing their entire body morph and shift uncontrollably, while being completely powerless to do anything about it, should no doubt shatter the mind of even the most stubborn warrior and reshape it into that of a plaything's mind.
</p>
<p>
Doing this requires two specialist slavers, however, one specializing in corruption, while the other specializing in purification.
Furthermore, such an intense alternating session between corruption and purification will take a long while,
and having undergone such massive sequence of transformation is extremely likely to cause some
<<dangertext 'permanent'>> changes to <<rep _u>>'s <<ubody _u>>.
</p>
<</if>><p>
It only took your slavers a week to find a particularly secluded valley brimming with both dark and light energies.
Once there, <<rep $g.purifier>> and <<utheirrel $g.purifier $g.corruptor>> <<rep $g.corruptor>> setup camp, while unloading all the rations and arcane equipments they brought along with them, as well as the fully bound and gagged <<rep $g.slave>>.
Your slavers made a makeshift altar from the surrounding trees, before placing the struggling slave on top of the altar,
securing <<them $g.slave>> so very tightly with multiple enchanted ropes, strong enough to not buckle under
the debauched ordeal <<theslaver $g.slave>> was going to be subjected soon.
<<if $g.slave.isHasTrait('muscle_verystrong')>>
In fact, given the enormous strength of <<therace $g.slave>>,
your slavers had to spent more money to buy expensive silk rope,
capable of withstanding all the struggles from the very muscular slave.
<<run setup.qc.Money(-3000).apply($gQuest)>>
<</if>>
</p>
<p>
Once the preparation were completed,
your slavers began the ritual.
It started... harmlessly enough, with <<rep $g.corruptor>> summoning dark energies that all flew into the unfortunate slave,
corrupting their body little by little. As expected, the slave took it all
with steely resolve, but <<they $g.slave>> never expected the sudden opposite
energy suddenly flowing inside them. As <<rep $g.purifier>> began working
<<their $g.purifier>> magic, conflicting powers of energies started to swirl
inside of <<rep $g.corruptor>>, inflicting extreme amount of pain into
<<therace $g.slave>>.
Before <<their $g.slave>> eyes, every inch of <<their $g.slave>> body morphed,
<<their $g.slave>> <<uskin $g.slave>> turning multiple shades of color,
all within a single minute.
Bat wings quickly got shed into butterfly wings, before draconic wing bursted painfully from their back, all while <<their $g.slave>> face kept on morphing, forming horrifying amalgamations of the faces of many races.
</p>
<p>
Eventually, the day ended when both <<rep $g.corruptor>> and <<utheirrel $g.corruptor $g.purifier>> <<rep $g.purifier>> had fully exhausted of their magical energies.
By the end of the first day,
the slave laid completely exhausted on the altar — still bound tightly to it.
To <<their $g.slave>> horrors, the next days all proceeded in a similar manner, with <<their $g.slave>> body getting corrupted more and more, while <<their $g.slave>> senses were completely overwhelmed by the extreme amount of pain the transformations brought.
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, your slaver masteries over their magic were not pretty bad, and during one unfortunate day, <<rep $g.corruptor>> lost control of <<their $g.corruptor>> magic.
It spiraled into <<reps $g.slave>> head,
shattering <<their $g.slave>> mind completely.
Still, being mindbroken means that the slave is no longer <<rep setup.trait.will_defiant>>, so it could be said that the training succeeded to some extent...
Meanwhile, the magical energies continued spiraling out of control, before corrupting everyone involved in the ritual including your sloppy slavers.
</p>
<<else>>
<p>
After ten long weeks of continuous torture, <<reps $g.slave>> mind finally snapped. At the end of the intense torture session, the defiance that once so filled <<their $g.slave>> eyes was almost entirely gone, as <<they $g.slave>> begged with their new corrupted eyes for the punishments to end.
Seeing the slave's malleable behavior, your slavers finally decided to end the mission,
successfully completing their goal.
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers' expertise over their respective domains of magic means that they managed to minimize the side-effects of the ritual. Both of your slavers were minimally corrupted, and the slave only had several corruptions left on them. However, having been continuously corrupted for weeks left a permanent corruption on <<their $g.slave>> body, which will likely stick with <<them $g.slave>> forever throughout <<their $g.slave>> life...
</p>
<<elseif $gOutcome == 'success'>>
<p>
Your slavers performed admirably well for such a difficult task, with only a small amount of side-effects lingering from the ritual.
Both of your slavers ended up somewhat corrupted, but these can be purified if you so desire.
Meanwhile, the slave's body is a far cry from what <<they $g.slave>> once were,
but thankfully the ritual only left one permanent corruption on <<them $g.slave>>.
While the rest of the corruptions can be purified later, this particulary permanent corruption
will likely stick with <<them $g.slave>> forever throughout the rest of <<their $g.slave>> life...
</p>
<<elseif $gOutcome == 'failure'>>
<p>
Even though the slave-breaking was successful,
it was not without cost.
As your slavers were not very proficient with their respective school of magic,
they were somewhat sloppy in the ritual, ending up with both of your slavers corrupted.
The slave <<themself $g.slave>> was corrupted on an entirely different level, becoming an unrecognizable form
compared to <<their $g.slave>> previously <<urace $g.slave>> body.
While most of these can be purified later, several of these corruptions became permanently affixed
to the slave's body...
</p>
<</if>>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'future_sight', /* key */
"Future Sight", /* Title */
"darko", /* Author */
[ 'vale', 'money', 'quest'
], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'convincer': setup.qu.convincer,
'seer1': setup.qu.arcanewater,
'seer2': setup.qu.arcanewater, },
{ /* actors */
'seer': 'subrace_humanvale', },
[ /* costs */
setup.qc.MoneyNormal(-0.25), ],
'Quest_future_sight',
setup.qdiff.easy14, /* difficulty */
[ /* outcomes */
[
'Quest_future_sightCrit',
[
setup.qc.IfThenElse(
setup.qres.Building('scouttower'),
setup.qc.QuestDelay(setup.questpool.forest, 1),
setup.qc.QuestDelay(setup.questpool.vale, 1),
),
setup.qc.IfThenElse(
setup.qres.Building('scoutoffice'),
setup.qc.QuestDelay(setup.questpool.city, 1),
setup.qc.QuestDelay(setup.questpool.vale, 1),
),
setup.qc.IfThenElse(
setup.qres.Building('scoutcarriage'),
setup.qc.QuestDelay(setup.questpool.desert, 1),
setup.qc.QuestDelay(setup.questpool.vale, 1),
),
setup.qc.QuestDelay(setup.questpool.vale, 2),
setup.qc.MoneyCrit(),
],
], [
'Quest_future_sightSuccess',
[
setup.qc.IfThenElse(
setup.qres.Building('scouttower'),
setup.qc.QuestDelay(setup.questpool.forest, 1),
setup.qc.QuestDelay(setup.questpool.vale, 1),
),
setup.qc.IfThenElse(
setup.qres.Building('scoutoffice'),
setup.qc.QuestDelay(setup.questpool.city, 1),
setup.qc.QuestDelay(setup.questpool.vale, 1),
),
setup.qc.QuestDelay(setup.questpool.vale, 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, setup.rarity.rare],
], /* quest pool and rarity */
[ /* restrictions to generate */
setup.qres.QuestUnique(),
],
)>><p>
A famous seer lives in one of the many settlements on the <<lore region_vale>>.
<<They $g.seer>> 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
<<yourrep $g.seer1>> and <<utheirrel $g.seer1 $g.seer2>> <<rep $g.seer2>> could both sense the vast magical power from
the seer, so much that it would be extremely foolish to even attempt to do so. They just
had 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 insightful divinations to your slavers,
your slavers were too busy watching <<their $g.seer>>
divine <<beauty $g.seer>> to pay attention.
<<if $g.seer.isMale()>>
The chiseled face, hint of stubble, and the rugged exterior
<<else>>
The wavy hair, hint of blush, and the clear eyes
<</if>>
were simply too much,
and there was no way your slavers could concentrate on the task.
At the end, your slavers were only able
to remember very few things from the session, still valuable, but nowhere near
as productive as it could have been.
</p><p>
Unfortunately by the time your slavers had arrived at the seer's encampment,
<<they $g.seer>> seemed to have already moved on to a new place.
Your slavers were unable to track where the seer has moved to.
</p><p>
After accepting the money, the seer divined nothing but bad omens for your slavers.
A few days later, <<rep $g.convincer>> convincer|was struck by a stray wild boar who appeared out of nowhere as your slavers were returning to the fort.
</p><<set _criteriaprincess = new setup.UnitCriteria(
null, /* key */
'"Princess\"', /* name */
[
setup.trait.bg_royal,
setup.trait.bg_noble,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_kind,
setup.trait.per_lunatic,
setup.trait.skill_entertain,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.bg_slave,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_cruel,
],
[
setup.qres.Job(setup.job.slaver),
],
{
knowledge: 1,
social: 1,
sex: 1,
}
)>>
<<set _criteriavillager = new setup.UnitCriteria(
null, /* key */
'"Villager\"', /* name */
[
setup.trait.bg_entertainer,
setup.trait.per_gregarious,
setup.trait.per_playful,
setup.trait.per_lunatic,
],
[
setup.trait.per_loner,
setup.trait.per_serious,
],
[
setup.qres.Job(setup.job.slaver),
],
{
intrigue: 1.5,
social: 1.5,
}
)>>
<<set _criteriadragon = new setup.UnitCriteria(
null, /* key */
'"Dragon\"', /* name */
[
setup.trait.height_tall,
setup.trait.height_giant,
setup.trait.per_dominant,
setup.trait.per_lunatic,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.body_dragonkin,
setup.trait.wings_dragonkin,
],
[
setup.trait.race_human,
setup.trait.height_dwarf,
setup.trait.height_short,
setup.trait.per_submissive,
setup.trait.magic_water,
setup.trait.magic_water_master,
],
[
],
{
brawn: 1.5,
arcane: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'grand_lunacy', /* key */
"Grand Lunacy", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'unit',
'unknown',
],
4, /* weeks */
setup.INFINITY, /* expiration weeks */
{ /* roles */
'princess': [ _criteriaprincess, 1.5],
'villager': [ _criteriavillager, 1.5],
'dragon': _criteriadragon,
},
{ /* actors */
'lunatic': [
],
},
[ /* costs */
],
'Quest_grand_lunacy',
setup.qdiff.easy42, /* difficulty */
[ /* outcomes */
[
'Quest_grand_lunacyCrit',
[
setup.qc.Outcomes("success"),
setup.qc.BoonizeRandom('lunatic', 50),
],
],
[
'Quest_grand_lunacyCrit',
[
setup.qc.EquipmentDirect('social_neck_other'),
setup.qc.Return('lunatic'),
],
],
[
'Quest_grand_lunacyCrit',
[
setup.qc.Outcomes("success"),
setup.qc.TraumatizeRandom('lunatic', 30),
],
],
[
'Quest_grand_lunacyDisaster',
[
setup.qc.QuestDirectSelf({
lunatic: "lunatic",
}),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
You've heard from your other slavers that your lunatic slaver <<rep $g.lunatic>>, who had run away from your for in search of "adventure", has been found. The problem is that the lunatic refuses to go back to your fort and return to work until their quest for "adventure" is satisfied. When asked for more details, <<they $g.lunatic>> murmured incoherently, something about "a village", "dragon", and a "princess".
</p>
<p>
By know, you know the lunatic quite well, and you've resigned yourself that the only way to bring <<them $g.lunatic>> back into your fort is to fulfill whatever fantasy <<they $g.lunatic>> is imagining. This means you'll need to help <<them $g.lunatic>> find <<their $g.lunatic>> "village", "dragon", and "princess", whatever it means.
While there are certainly villages around your fort, there are no dragon or princess whatsoever in the vicinity, so some of your slavers must simply make do as a substitute for them...
</p><p>
The trio of slavers you've chosen for this farce prepared as best as they could.
<<Rep $g.villager>> donned a regular worn-out village garb, and
<<rep $g.princess>>
<<if $g.princess.isMale()>>
wore a wig as well as an embarrassingly thick make-up to barely pass as a <<woman $g.princess>>.
<<if $g.princess.isHasTrait('face_attractive')>>
(At least <<their $g.princess>> pretty face helped hide the fact that there is a <<man $g.princess>> underneath.)
<<elseif $g.princess.isHasTrait('face_scary')>>
(Which was made much harder by <<their $g.princess>> masculine and intimidating face.)
<<elseif $g.princess.isHasTrait('muscle_thin')>>
(But at least <<their $g.princess>> thin stature made it easier to hide the <<man $g.princess>> underneath.)
<<elseif $g.princess.isHasTrait('muscle_strong')>>
(Which was made much harder by <<their $g.princess>> bulging manly muscles.)
<</if>>
<<else>>
<<if $g.princess.isHasTrait('bg_noble') or $g.princess.isHasTrait('bg_royal')>>
wore a delicate make-up, and the blue-blooded slaver looked completely natural playing <<their $g.princess>> role as a <<princess $g.princess>>.
<<else>>
wore a relatively thick make-up to pass as a <<princess $g.princess>>,
despite <<their $g.princess>> commoner background.
<</if>>
<</if>>
Meanwhile, <<rep $g.dragon>> tried <<their $g.dragon>> best to emulate a big, scary, hulking dragon.
<<if $g.dragon.isHasTrait('body_dragonkin')>>
<<Their $g.dragon>>
<<if $g.dragon.isHasTrait('height_tall')>>
big,
<</if>>
scaly body made it much easier, however.
<<elseif $g.dragon.isHasTrait('wings_dragonkin')>>
<<Their $g.dragon>> majestic draconic wings made the task much easier, however.
<<elseif $g.dragon.isHasTrait('race_lizardkin')>>
<<Their $g.dragon>> lizardkin heritage certainly gave <<them $g.dragon>> an edge.
<<elseif $g.dragon.isHasTrait('magic_fire')>>
<<They $g.dragon>> may not look like a dragon from the outside, but being able to use fire magic meant <<they $g.dragon>> could pretend to breathe fire from <<their $g.dragon>> <<umouth $g.dragon>>.
<<elseif $g.dragon.isHasTrait('height_tall')>>
<<They $g.dragon>> may not look like a dragon from the outside, but being tall gave <<them $g.dragon>> an edge in the role.
<<else>>
A difficult task, considering <<they $g.dragon>> dragon|was lacking in anything that could help <<them $g.dragon>> with an edge.
<</if>>
Finally, your slavers found a freshly-raided and abandoned farmstead to make use as a makeshift draconic stronghold.
All in all, a flimsy plan, but you're not going to invest in anything more for the lunatic.
</p>
<p>
With that, <<yourrep $g.villager>> departed towards the lonely tavern where <<yourrep $g.lunatic>> was busy drinking away.
<<if $g.villager.isHasTrait('per_lunatic')>>
You've chosen a fellow lunatic for the task, an apt decision.
<<set _dramatically = 'dramatically'>>
<<else>>
<<Rep $g.villager>> shook <<their $g.villager>> head, but decided to get the job over with.
<<set _dramatically = 'half-heartedly'>>
<</if>>
<<Therace $g.villager>> <<= _dramatically>> entered the tavern, before saying, "Oh woe is me, a princess has been kidnapped by a big bad dragon, and I am in need for a hero. Could there be one brave enough to rescue the princess?".
<<Rep $g.villager>> could see <<reps $g.lunatic>> <<uears $g.lunatic>> perked up at the commotion, and <<therace $g.lunatic>> turned to face your slaver, "You have come to the right place, o <<urace $g.villager>>, for you stand before a mighty <<urace $g.lunatic>>, hero of legends.". <<Rep $g.lunatic>> had apparently donned a cape from somewhere, trying to look cool. The cape was probably taken from one of the bedsheets in the upper floors, so it had the opposite effect instead.
</p>
<p>
With the "villager"'s guidance, the "hero" ventured into the farmstead-turned-dragon-lair. Therein,
<<yourrep $g.dragon>> blocked the path, standing before <<therace $g.lunatic>> and the farmstead behind.
<<if $g.dragon.isHasTrait('per_lunatic')>>
The fellow lunatic was completely in character, doing <<their $g.dragon>> best "dark, evil dragon" impression.
<</if>>
<<if $g.dragon.isHasTrait('body_dragonkin')>>
<<Therace $g.dragon>> dragon|was almost naked, showing off <<their $g.dragon>> dragon-like scales as much as possible.
<</if>>
<<if $g.dragon.isHasTrait('wings_dragonkin')>>
<<Their $g.dragon>> <<uwings $g.dragon>> were expanded intimidatingly from behind.
<</if>>
<<if $g.dragon.isHasTrait('magic_fire')>>
Using <<their $g.dragon>> fire magic, <<they $g.dragon>> breathed a little fire from inside <<their $g.dragon>> <<umouth $g.dragon>>, adding to the immersion.
<</if>>
<<if $g.dragon.isHasTrait('face_scary')>>
<<Their $g.dragon>> intimidating face add to the persona of "bad, evil dragon".
<</if>>
<<if $g.dragon.isHasTrait('face_attractive')>>
<<Their $g.dragon>> <<uface $g.dragon>> distracted from the person of "bad, evil dragon".
<</if>>
<<if $g.dragon.isHasTrait('height_tall')>>
<<Their $g.dragon>> large body made the disguise look somewhat more belieavable.
<</if>>
<<if $g.dragon.isHasTrait('height_short')>>
<<Their $g.dragon>> short stature made the disguise look somewhat less belieavable.
<</if>>
However, it was abundantly clear that <<rep $g.dragon>> dragon|is just a <<urace $g.dragon>>, not a pure evil dragon, and anyone but the stark raving mad would be able to see this.
</p>
<p>
But <<rep $g.lunatic>> is a stark raving mad, and hence the play continued. "I have come to rescue the princess from your evil clutches!", screamed <<therace $g.lunatic>> as <<they $g.lunatic>> charged in.
<<if $g.dragon.isHasTrait('per_lunatic')>>
The completely-in-character <<rep $g.dragon>> responded in kind, and the two engaged in a "fight", with wooden swords and farming rake as weapons.
<<else>>
Not wanting to get injured, <<rep $g.dragon>> wisely decided to feign defeat at the first touch of <<reps $g.lunatic>> harmless wooden sword.
<</if>>
With the "evil" vanquished, the lunatic slaver proceeded to bask in the "glory" and advanced into the "dragon lair" to receive <<their $g.lunatic>> well-deserved "gratitude" of the princess.
</p>
<p>
Your slavers, all four of them, finally came back home. The "princess", <<rep $g.princess>>, stubbornly refused to talk about whatever might have happened inside the small farm hut.
<<if $g.princess.isHasTrait('per_lunatic')>>
When pressed for more information, <<they $g.princess>> simply let out a lunatic grin. On a second thought, you probably don't want to know what two lunatics would do inside a small, secluded farmstead...
<<else>>
Judging from <<their $g.princess>> occasional blush, however, you have little doubt about what might have happened inside.
<<if $g.princess.isHasTrait('face_attractive')>>
Perhaps the "hero" was enchanted by the princess' "beauty", and they copulated.
<</if>>
<<if $g.princess.isHasTrait('face_scary')>>
Perhaps the "hero" was disgusted by the princess' "beauty", but still, a princess is a princess and they copulate.
<</if>>
<<if $g.princess.isHasTrait('muscle_thin')>>
The "princess"'s narrow waist must have attracted quite a reaction from the lunatic.
<<elseif $g.princess.isHasTrait('muscle_strong')>>
The "princess" muscularity must have made it harder to believe that <<they $g.princess>> could be a princess, but you're not sure the lunatic even cared.
<</if>>
<<if $g.princess.isHasTrait('bg_noble') or $g.princess.isHasTrait('bg_royal')>>
After all, the "princess" is as real as it could get, and actual blue blood flows within <<their $g.princess>> veins.
<<else>>
While the "princess" may just be a regular commoner, surely <<their $g.princess>> disguise was sufficient to convince your lunatic that it was not so.
<</if>>
<</if>>
</p>
<p>
The next day, <<yourrep $g.lunatic>> reported for duty as usual, all trace of lunacy gone for the moment.
Had it not for the lousy cape <<they $g.lunatic>> still wore that day, you would be hard-pressed to guess that this was the same <<man $g.lunatic>> that had gone on a rescue mission in the day past...
</p>
<p>
<<if $gOutcome == 'crit'>>
In the coming days, you also notice that <<rep $g.lunatic>> lunatic|have become much more cheerful — perhaps your little theatrics were a little too effective...
<<elseif $gOutcome == 'failure'>>
In the coming days, you also notice that <<rep $g.lunatic>> lunatic|is a little bit depressed, perhaps your little theatrics were a little bit too underwhelming...
<</if>>
</p><p>
The trio of slavers you sent yonder to woo <<rep $g.lunatic>> into an adventure of a lifetime had failed miserably. Not even a stark raving lunatic would believe the makeshift disguises they have donned. You completely understand their lack of enthusiasm of the task, but still you should try again if you want the lunatic to come back to your fort.
</p><<run new setup.UnitGroup(
"out_of_retirement0",
"Vale Bandit",
'vale_all', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
],
)>>
<<set _criteriayou = new setup.UnitCriteria(
null, /* key */
'You', /* name */
[
setup.trait.per_brave,
setup.trait.per_loyal,
setup.trait.per_honorable,
],
[
],
[
setup.qres.You(),
],
{
combat: 2,
brawn: 1,
}
)>>
<<run new setup.QuestTemplate(
'out_of_retirement', /* key */
"Out of Retirement", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'veteran',
'special',
'unknown',
],
2, /* weeks */
12, /* expiration weeks */
{ /* roles */
'you': _criteriayou,
'healer': [ setup.qu.healer, 1],
'tank': [ setup.qu.tank, 1],
},
{ /* actors */
'ex': [
setup.qres.Job(setup.job.retired),
],
'bandit': 'out_of_retirement0',
},
[ /* costs */
],
'Quest_out_of_retirement',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_out_of_retirementCrit',
[
setup.qc.Outcomes("success"),
setup.qc.OneRandomSeed([
setup.qc.Blessing('you', 1, 'blessing_life8', undefined),
setup.qc.BoonizeRandom('you', 25),
setup.qc.Favor('humanvale', 125)
]),
],
],
[
'Quest_out_of_retirementCrit',
[
setup.qc.Slave('bandit', "a|was a vale raider who kidnapped the wrong person", undefined),
setup.qc.Outcomes("failure"),
],
],
[
'Quest_out_of_retirementCrit',
[
setup.qc.SetCooldownQuest(null, 500),
],
],
[
'Quest_out_of_retirementCrit',
[
setup.qc.Injury('you', 5),
setup.qc.Injury('healer', 3),
setup.qc.Injury('tank', 5),
setup.qc.Outcomes("failure"),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.rare],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
],
[ /* expiration outcomes */
setup.qc.AllUnitSatisfyDo([setup.qres.You()],
[setup.qc.TraumatizeRandom('unit', 5)],
),
setup.qc.SetCooldownQuest(null, 500),
],
)>><<set _u = setup.getAnySlaver()>>
<p>
<<Rep $g.ex>>, who used to be a slaver, had informed you that <<they $g.ex>> was planning to visit your fort, to catch up news with you.
<<They $g.ex>> was supposed to arrive by two weeks ago, however, and there are still no signs of <<therace $g.ex>> up until today.
</p>
<p>
<<Yourrep _u>> has tracked the errant <<urace $g.ex>> into a certain bandit encampment on the <<lore region_vale>>. You could try to save your ex slaver, should you want to. Fortunately, the fortifications look weak and the bandits look incompetent, so it won't be a challenge at all. Furthermore, knowing <<rep $g.ex>>, you just know that the <<uadjgood $g.ex>> would be able to free <<themself $g.ex>> eventually, even without your help.
Still, <<they $g.ex>> ex|was a former comrade, and would you leave <<them $g.ex>> be just like that?
</p><<if $gOutcome == 'success' || $gOutcome == 'crit'>>
<p>
As expected, the inexperienced bandits were no match for yours as well as <<reps $g.healer>> and <<reps $g.tank>> prowess.
In fact, the moment the bandits saw
<<if $g.tank.isHasTrait('muscle_verystrong')>>
<<reps $g.tank>> hulking figure,
<<elseif $g.tank.isHasTrait('height_giant')>>
<<reps $g.tank>> hulking figure,
<<elseif $g.tank.isHasTrait('face_scary')>>
<<reps $g.tank>> terrifying face,
<<elseif $g.tank.isHasTrait('per_brave')>>
<<rep $g.tank>> charging bravely alone,
<<elseif $g.tank.isHasTrait('eq_veryvaluable')>>
<<reps $g.tank>> valuable gear,
<<else>>
<<rep $g.tank>>,
<</if>>
most of the bandits already flee in terror, knowing that <<they $g.tank>> brought the name of <<name $company.player>> with <<them $g.tank>>.
With the bandits routed, you found your ex-slaver in the dungeons, already almost free of <<their $g.ex>> binds, but grateful for your assistance nonetheless.
</p>
<<else>>
<p>
In some strange and unexpected twist, the bandits were far stronger than you anticipated.
<<if $gOutcome == 'disaster'>>
The three of you suffered some injuries during the fight.
<</if>>
When the battle seemingly about to turn for the worse,
<<yourrep $g.ex>> suddenly appeared, seemingly having freed <<themself $g.ex>> from <<their $g.ex>> bondage somehow.
Distracted by <<reps $g.ex>> sudden appearance, you and your slavers seized the opportunity to rout the bandit away.
</p>
<</if>>
<<if $g.ex.isRetired()>>
<p>
You escorted <<rep $g.ex>> back to your fort, and you catch up with <<therace $g.ex>> along the way.
<<They $g.ex>> ex|is working as
<<= setup.Article($g.ex.getLiving().getName())>> now,
and <<they $g.ex>> ex|spend <<their $g.ex>> days
<<= $g.ex.getLiving().repBusiness($g.ex)>>.
<<They $g.ex>> <<uadv $g.ex>> asked about the current state of affairs of your fort, how many new recruits, how much bigger the fort is, and so on, seemingly quite
<<if $g.ex.isHasTrait('per_humble')>>
humbled
<<else>>
proud
<</if>>
by your company's accomplishments.
The time was spent away with the two of you catching up with each other, and before any of you know it, you've already arrived back at your fort.
</p>
<<if $gOutcome == 'crit'>>
<p>
Once back at your fort <<rep $g.ex>> suddenly remembered something and struggled to get something out of <<their $g.ex>> pockets.
It's
<<if $gQuest.getSeed() % 3 == 0>>
Charm of Life, which could protect you from dangers.
<<elseif $gQuest.getSeed() % 3 == 1>>
Charm of Competence, which should boost your skills for a while.
<<elseif $gQuest.getSeed() % 3 == 2>>
Charm of Attraction, which could make you popular.
<</if>>
You thank <<therace $g.ex>> for the thoughtful gift, and <<they $g.ex>>
<<if $g.ex.isHasTrait('per_humble')>>
blushed a little.
<<elseif $g.ex.isHasTrait('per_proud')>>
beamed proudly at <<their $g.ex>> choice of gift.
<<else>>
gave you a thumbs up.
<</if>>
</p>
<</if>>
<p>
Before leaving, <<they $g.ex>> invited you to come over to <<their $g.ex>> <<= $g.ex.getLiving().getLocation()>> sometime. Perhaps you can consider doing so once it's your turn to retire.
</p>
<</if>><<set _criteriastudent = new setup.UnitCriteria(
null, /* key */
'Student', /* name */
[
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.breast_medium,
setup.trait.breast_large,
setup.trait.breast_huge,
setup.trait.breast_titanic,
setup.trait.vagina_tight,
setup.trait.anus_tight,
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.muscle_thin,
setup.trait.muscle_strong,
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
],
[
setup.trait.dick_tiny,
setup.trait.dick_small,
setup.trait.balls_tiny,
setup.trait.balls_small,
setup.trait.breast_tiny,
setup.trait.breast_small,
setup.trait.vagina_gape,
setup.trait.anus_gape,
setup.trait.corrupted,
setup.trait.corruptedfull,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.AllTraits([setup.trait.magic_water], true),
setup.qres.NotYou(),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaping_for_dummies', /* key */
"Flesh-Shaping for Dummies", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'trait',
'veteran',
'rare',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'negotiator1': [ setup.qu.negotiator, 1],
'negotiator2': [ setup.qu.negotiator, 1],
'student': [ _criteriastudent, 1],
},
{ /* actors */
'teacher': 'vale_all',
},
[ /* costs */
setup.qc.Money(-10000),
],
'Quest_flesh_shaping_for_dummies',
setup.qdiff.normal40, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaping_for_dummiesCrit',
[
setup.qc.Outcomes("success"),
setup.qc.Money(5000),
],
],
[
'Quest_flesh_shaping_for_dummiesCrit',
[
setup.qc.QuestDirect('flesh_shaping_for_dummies_orifices', null),
setup.qc.AddTitle('student', 'quest_flesh_shaping_dummy_0'),
setup.qc.SetCooldownQuest(null, 200),
],
],
[
'Quest_flesh_shaping_for_dummiesCrit',
[
setup.qc.Money(-5000),
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummiesDisaster',
[
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.epic],
],
[ /* restrictions */
setup.qres.Building('veteranhall'),
setup.qres.QuestUnique(),
setup.qres.NoQuest('flesh_shaping_for_dummies_bodyparts'),
setup.qres.NoQuest('flesh_shaping_for_dummies_muscles'),
setup.qres.NoQuest('flesh_shaping_for_dummies_orifices'),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NotYou(),
setup.qres.AllTraits([setup.trait.magic_water], true)
], 1),
],
[ /* expiration outcomes */
],
)>><p>
At a basic level, the domain of <<lore magic_water>> gives its bearer the ability to control and summon water. This is already incredibly useful, being able to water crops during draughts as well as helping tremendously during navigations in the rivers and the sea. However, when mastered, water magic would allow its bearers to shape flesh. After all, flesh consists mostly of water, and masters of water magic knows this for a fact.
</p>
<p>
You have a slaver gifted with <<rep setup.trait.magic_water>> under your employ for some time now. Normally, there would be no way for them to fully master the magic, but you have heard that a certain vendor in the <<lore region_vale>> is planning to sell the rare and elusive tome, the "Flesh-Shaping for Dummies". It is said that this tome would allow anyone, even the dumbest of <<urace $unit.player>>, to master water magic. Clearly a very valuable tome, and it is being sold for a mere <<money 10000>> too!
</p>
<p>
Should you wish to pursue this lead, you best send the prospective student yonder into the vale. Two negotiators should accompany them too, since the vendor is known to be a rather unscrupulous person...
</p><p>
<<Yourrep $g.negotiator1>> and <<utheirrel $g.negotiator1 $g.negotiator2>> <<rep $g.negotiator2>> negotiated
<<if $gOutcome == 'crit'>>
a very good deal
<<elseif $gOutcome == 'success'>>
a good deal
<<else>>
a bad deal
<</if>>
for the tome, which now stands innocently on your desk. Giving it a few glance, you get the feeling that you've been completely swindled, as the book is very vague on its instructions, and looks like complete scam. Just as you were wondering whether to refund the book, <<yourrep $g.student>> student|enter your office.
<<if $g.student.isHasTrait('per_studious')>>
The studious slaver looks very eager to start the study immediately.
<<elseif $g.student.isHasTrait('per_evil')>>
The ambitious slaver looks very eager to finally have the chance to master <<their $g.student>> latent magic.
<<elseif $g.student.isHasTrait('per_proud')>>
The proud slaver looks very eager to finally have the chance to master a magic <<they $g.student>> always knew as <<their $g.student>> latent talent.
<<else>>
The <<uadjgood $g.student>> looks quite eager to start learning whatever it is the book promises to teach.
<</if>>
Seeing <<their $g.student>> almost puppy-like eyes, how could you say no and refund the book?
</p>
<p>
<<They $g.student>> shall begin <<their $g.student>> studies immediately, although it will no doubt be challenging...
</p><p>
<<Yourrep $g.negotiator1>> and <<utheirrel $g.negotiator1 $g.negotiator2>> <<rep $g.negotiator2>> negotiated
a good deal
for the tome, which now stands innocently on your desk.
However, after skimming through some of the pages, you get a very strong feeling that your slavers have been duped.
The book consists of nothing but gibberish — for example, the chapter that details the use of water magic to gape orifice simply works by shoving a large water balloon into the prospect's hole for a few days. Another chapter that details muscle flesh-shaping instead details a strict workout regime followed by nutritious meal.
</p>
<p>
Sighing to yourself, there is nothing you can do but accept that you've been swindled, and move on with your day.
</p><<run new setup.Title(
"quest_flesh_shaping_dummy_0", /* key */
"Flesh-Shaping Dummy", /* name */
"Currently learning to master water magic", /* description */
"a|is currently learning to master water magic", /* unit text */
0, /* slave value */
{ /* skill additives */
},
)
>>
<<set _criteriaslave2 = new setup.UnitCriteria(
null, /* key */
'Endowed Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.dick_titanic, setup.trait.balls_titanic, setup.trait.breast_titanic], true),
],
{
}
)>>
<<set _criteriaslave1 = new setup.UnitCriteria(
null, /* key */
'Endowed Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.dick_titanic, setup.trait.balls_titanic, setup.trait.breast_titanic], true),
],
{
}
)>>
<<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Trainee', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_flesh_shaping_dummy_0'),
setup.qres.AllTraits([setup.trait.magic_water], true),
],
{
arcane: 2.0,
brawn: 1.0,
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaping_for_dummies_bodyparts', /* key */
"Flesh-Shaping for Dummies: Bodyparts", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'trait',
'prep',
'vale',
],
8, /* weeks */
1000, /* expiration weeks */
{ /* roles */
'slave2': _criteriaslave2,
'slave1': _criteriaslave1,
'slaver': [ _criteriaslaver, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_flesh_shaping_for_dummies_bodyparts',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaping_for_dummies_bodypartsCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_bodypartsCrit',
[
setup.qc.RemoveTitleGlobal('quest_flesh_shaping_dummy_0'),
setup.qc.TraitReplace('slaver', setup.trait.magic_water_master),
setup.qc.Injury('slave1', 10),
setup.qc.Injury('slave2', 10),
setup.qc.TraitReplaceExisting('slave2', setup.trait.dick_tiny),
setup.qc.TraitReplaceExisting('slave2', setup.trait.breast_tiny),
setup.qc.TraitReplaceExisting('slave2', setup.trait.balls_tiny),
setup.qc.TraitReplaceExisting('slave1', setup.trait.dick_tiny),
setup.qc.TraitReplaceExisting('slave1', setup.trait.breast_tiny),
setup.qc.TraitReplaceExisting('slave1', setup.trait.balls_tiny),
setup.qc.TraitReplaceExisting('slaver', setup.trait.dick_tiny),
setup.qc.TraitReplaceExisting('slaver', setup.trait.breast_tiny),
setup.qc.TraitReplaceExisting('slaver', setup.trait.balls_tiny),
],
],
[
'Quest_flesh_shaping_for_dummies_bodypartsCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_bodypartsCrit',
[
setup.qc.Outcomes("success"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_flesh_shaping_dummy_0'),
],
)>><<set _u = setup.getUnit({title: 'quest_flesh_shaping_dummy_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
Having completed <<their _u>> studies on muscles and orifice anatomy, the final lesson that <<yourrep _u>> must learn in order to master <<rep setup.trait.magic_water_master>> is on the topic of bodyparts. That is to say, the genitals. When fully mastered, masters of water magic is able to shape even the most sensitive bodypart in a <<urace _u>> body, able to make it more or less endowed at will.
</p>
<p>
Like before, two "volunteers" are needed in order for <<rep _u>> to fully learn this knowledge, and the requirements are as strict as ever. The two volunteers must be quite well endowed indeed, with the full knowledge that they will very likely leave the experiment with the genitals shrunk considerably. However, since <<yourrep _u>> is but a student in the art of flesh-shaping, some of the experiment will fail, and who knows what might happen to <<their _u>> own genitals... Such is the price one must pay for the powerful knowledge.
</p>
<</if>><p>
After months of constant studies, <<yourrep $g.slaver>> slaver|have finally mastered the elusive <<rep setup.trait.magic_water_master>>. But the cost paid was steep indeed.
</p>
<p>
The two volunteers of the experiment lied battered from the experiment —
<<if $g.slave1.isHasTrait('dick_small')>>
<<Reps $g.slave1>> <<udick $g.slave1>> shrunk to a tiny stump.
<<elseif $g.slave1.isHasTrait('breast_small')>>
<<Reps $g.slave1>> <<ubreasts $g.slave1>> shrunk to but a tiny, almost unnoticable bump in <<their $g.slave1>> chest.
<<else>>
<<Reps $g.slave1>> <<uballs $g.slave1>> shrunk, becoming a tiny pair of balls barely visible under <<their $g.slave1>> <<udick $g.slave1>>.
<</if>>
Similarly,
<<if $g.slave2.isHasTrait('dick_small')>>
<<reps $g.slave2>> <<udick $g.slave2>> is now but a tiny little shaft.
<<elseif $g.slave2.isHasTrait('breast_small')>>
<<reps $g.slave2>> <<ubreasts $g.slave2>> greatly decreased in size to a small, barely visible bump in <<their $g.slave2>> chest.
<<else>>
<<reps $g.slave2>> <<uballs $g.slave2>> diminished into almost marble-sized pair of balls.
<</if>>
<<if $g.slaver.isHasTrait('dick_small') or
$g.slaver.isHasTrait('balls_small') or
$g.slaver.isHasTrait('breast_small')>>
<<Yourrep $g.slaver>> slaver|was affected too.
<<if $g.slaver.isHasTrait('dick_small')>>
<<Their $g.slaver>> <<udick $g.slaver>> was accidentally shrunk during one botched ritual attempt, becoming embarrassingly small.
<<elseif $g.slaver.isHasTrait('balls_small')>>
<<Their $g.slaver>> <<uballs $g.slaver>> was accidentally shrunk during one botched ritual attempt, becoming disappointingly small.
<<else>>
<<Their $g.slaver>> <<udick $g.slaver>> was accidentally shrunk during one botched ritual attempt, becoming humiliatingly small.
<</if>>
<<else>>
<<Yourrep $g.slaver>> would have been affected too, but as it turned out, <<their $g.slaver>> assets were all already too small and nothing "bad" happened to <<therace $g.slaver>>.
<</if>>
</p>
<p>
Still, <<yourrep $g.slaver>> now possess a great mastery over <<rep setup.trait.magic_water_master>>. With a flick of <<their $g.slaver>> finger, it suddenly started raining. With a proper ritual room as well as a good amount of preparation, perhaps <<they $g.slaver>> can undo all these "damages" that have happened to the volunteer's genitals.
</p><<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Trainee', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_flesh_shaping_dummy_0'),
setup.qres.AllTraits([setup.trait.magic_water], true),
],
{
arcane: 2.0,
brawn: 1.0,
}
)>>
<<set _criteriaslave1 = new setup.UnitCriteria(
null, /* key */
'Muscle / Thin Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong], true),
],
{
}
)>>
<<set _criteriaslave2 = new setup.UnitCriteria(
null, /* key */
'Muscle / Thin Slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaping_for_dummies_muscles', /* key */
"Flesh-Shaping for Dummies: Muscles", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'trait',
'vale',
],
8, /* weeks */
1000, /* expiration weeks */
{ /* roles */
'slaver': [ _criteriaslaver, 3],
'slave1': _criteriaslave1,
'slave2': _criteriaslave2,
},
{ /* actors */
},
[ /* costs */
],
'Quest_flesh_shaping_for_dummies_muscles',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaping_for_dummies_musclesCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_musclesCrit',
[
setup.qc.Injury('slave1', 10),
setup.qc.Injury('slave2', 10),
setup.qc.QuestDirect('flesh_shaping_for_dummies_bodyparts', null),
setup.qc.DecreaseTraitsRandom('slave1', [setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong, setup.trait.muscle_verythin, setup.trait.muscle_extremelythin], 4, true),
setup.qc.DecreaseTraitsRandom('slave2', [setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong], 4, true),
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.muscle_strong, setup.trait.muscle_verystrong, setup.trait.muscle_extremelystrong], true)),
setup.qc.DoAll([
setup.qc.Trait('slaver', setup.trait.muscle_thin)
], undefined),
setup.qc.DoAll([
setup.qc.IfThenElse(
setup.qres.Actor('slaver', setup.qres.AnyTrait([setup.trait.muscle_extremelythin, setup.trait.muscle_verythin, setup.trait.muscle_thin], true)),
setup.qc.DoAll([
setup.qc.Trait('slaver', setup.trait.muscle_strong)
], undefined),
setup.qc.DoAll([
], undefined))
], undefined)),
],
],
[
'Quest_flesh_shaping_for_dummies_musclesCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_musclesCrit',
[
setup.qc.Outcomes("success"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_flesh_shaping_dummy_0'),
],
)>><<set _u = setup.getUnit({title: 'quest_flesh_shaping_dummy_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
With the initial "study" on orifices, done, the next step to advance <<yourrep _u>>'s mastery over water magic is to study muscle anatomy. A master of <<rep setup.trait.magic_water_master>> must be adept at shaping body and muscles too, be it to strengthen or to thin.
</p>
<p>
Another pair of volunteers are needed, again according to the "FleshShaping for Dummies" tome. Since the topic is on muscles, these "volunteers" must be rather unique — either possessing inhuman strength, or possessing inhumanly narrow waist. <<Yourrep _u>> will learn much by applying <<their _u>> magic over to the volunteers, likely altering the shapes of their bodies. It is very likely that the volunteers' body will get completely altered by the time the invasive procedure is complete. Since <<yourrep _u>> is a beginner, it's also very likely that <<their _u>> own magic will burst out of control, affecting <<themself _u>>, and you best get prepared that <<theslaver _u>> <<themself _u>> will also get transformed. But such is the price one must pay for knowledge...
</p>
<</if>><p>
Six weeks later, <<yourrep $g.slaver>> slaver|have finally finished <<their $g.slaver>> studies on muscles anatomy. But at what cost?
</p>
<p>
The two volunteers of the experiment were pretty much wasted —
<<if $g.slave1.isHasTrait('muscle_verystrong')>>
The once hulkingly powerful <<rep $g.slave1>> is reduced to that of a normal person now.
<<else>>
The once unnaturally thin waist of <<rep $g.slave1>> is restored to a normal, almost healthy-looking waist now.
<</if>>
Similarly,
<<if $g.slave1.isHasTrait('muscle_verystrong')>>
<<rep $g.slave1>> lost all of <<their $g.slave1>> musculature, becoming a very normal <<urace $g.slave1>> now.
<<else>>
<<reps $g.slave1>> waist is now perfectly normal, no longer the unnaturally thin form that <<they $g.slave1>> once had.
<</if>>
<<if $g.slaver.isHasTrait('muscle_strong') or
$g.slaver.isHasTrait('muscle_thin')>>
<<Yourrep $g.slaver>> slaver|was affected too,
<<if $g.slaver.isHasTrait('muscle_strong')>>
<<their $g.slaver>> musculature considerably decreased.
<<else>>
<<their $g.slaver>> waistline significantly grow.
<</if>>
<</if>>
</p>
<p>
Still, it was not all for nothing. <<Yourrep $g.slaver>> now slaver|have great understanding of shaping muscles, and is ready to undergo the last and final step of becoming a master of water magic.
It will no doubt costs you a few more slaves,
<<if $g.slaver.isHasTrait('per_cruel')>>
a fact that the cruel slaver certainly does not mind at all.
<<elseif $g.slaver.isHasTrait('per_kind')>>
which tugs a little at the kind slaver's heart.
<<else>>
but the rewards are going to be worth the efforts.
<</if>>
</p><<set _criteriaslaver = new setup.UnitCriteria(
null, /* key */
'Trainee', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_flesh_shaping_dummy_0'),
setup.qres.AllTraits([setup.trait.magic_water], true),
],
{
arcane: 2.0,
brawn: 1.0,
}
)>>
<<set _criteriaslave1 = new setup.UnitCriteria(
null, /* key */
'Tight slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.anus_tight, setup.trait.vagina_tight], true),
],
{
}
)>>
<<set _criteriaslave2 = new setup.UnitCriteria(
null, /* key */
'Tight slave', /* name */
[
],
[
],
[
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.anus_tight, setup.trait.vagina_tight], true),
],
{
}
)>>
<<run new setup.QuestTemplate(
'flesh_shaping_for_dummies_orifices', /* key */
"Flesh-Shaping for Dummies: Orifices", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'prep',
'trait',
'vale',
],
8, /* weeks */
1000, /* expiration weeks */
{ /* roles */
'slaver': [ _criteriaslaver, 3],
'slave1': _criteriaslave1,
'slave2': _criteriaslave2,
},
{ /* actors */
},
[ /* costs */
],
'Quest_flesh_shaping_for_dummies_orifices',
setup.qdiff.easiest1, /* difficulty */
[ /* outcomes */
[
'Quest_flesh_shaping_for_dummies_orificesCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_orificesCrit',
[
setup.qc.Injury('slave1', 10),
setup.qc.Injury('slave2', 10),
setup.qc.QuestDirect('flesh_shaping_for_dummies_muscles', null),
setup.qc.TraitReplaceExisting('slave1', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('slave1', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('slave2', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('slave2', setup.trait.anus_gape),
setup.qc.TraitReplaceExisting('slaver', setup.trait.vagina_gape),
setup.qc.TraitReplaceExisting('slaver', setup.trait.anus_gape),
],
],
[
'Quest_flesh_shaping_for_dummies_orificesCrit',
[
setup.qc.Outcomes("success"),
],
],
[
'Quest_flesh_shaping_for_dummies_orificesCrit',
[
setup.qc.Outcomes("success"),
],
],
],
[ /* quest pool and rarity */
],
[ /* restrictions */
],
[ /* expiration outcomes */
setup.qc.RemoveTitleGlobal('quest_flesh_shaping_dummy_0'),
],
)>><<set _u = setup.getUnit({title: 'quest_flesh_shaping_dummy_0'})>>
<<if !_u>>
<<missingunitquest>>
<<else>>
<p>
Having obtained the legendary "Flesh-Shaping for Dummies" book, <<yourrep _u>> immediately begins to work advancing their mastery over their water magic. According to the book, "practice makes perfect", and to master the magic, <<rep _u>> must practice flesh-shaping on various targets. The first step is easy, "shaping orifices" by gaping them wide. Surely this is a feat worthy of an advanced flesh-shaping magic, and surely it's not just by gaping them by force...
</p>
<p>
Either way, a pair of "volunteers" are needed. To make the learning experience as effective as possible, both must still possess virgin-tight orifices. By the end of the procedure, there is little doubt what would happen to their orifices, but you get the feeling that <<yourrep _u>> lack of mastery will also lead to other holes being gaped, not necessarily just those belonging to the volunteers...
</p>
<</if>><p>
A grueling six weeks later, after many screams were heard from the ritual room, <<yourrep $g.slaver>> slaver|have finally finished <<their $g.slaver>> studies on the subject of gaping holes with water magic.
You can't be sure if it was really via flesh-shaping magic, or whether it was simply by forcing a silly amount of water in, but whatever it was, it certainly did the job. The two slaves are now a mess, their once virgin-tight holes have been permanently gaped into cavernous gapes.
<<if !$g.slaver.isHasTrait('anus_gape')>>
That's not all, however. It turned out that <<therace $g.slaver>> had accidentally lost control of <<their $g.slaver>> magic during the ritual, and as a result <<their $g.slaver>> own anus was also affected...
<<elseif !$g.slaver.isHasTrait('vagina_gape')>>
That's not all, however. It turned out that <<therace $g.slaver>> had accidentally lost control of <<their $g.slaver>> magic during the ritual, and as a result <<their $g.slaver>> own pussy was also affected...
<</if>>
</p>
<p>
Still, it was not all for nothing.
<<Yourrep $g.slaver>> slaver|is now ready, at least according to the book, to advanced into the next step of becoming a master of water magic.
No doubt you will need to supply more slaves for the venture, however...
You just hope that the rewards are going to be worth all these efforts.
</p>/* PROOFREAD COMPLETE */
<<set _infiltrator = setup.CriteriaHelper.CritTraits(
[setup.trait.magic_water, setup.trait.magic_water_master],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_wolfkin,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'infil1': _infiltrator,
'infil2': _infiltrator,
'infil3': _infiltrator,
},
{ /* actors */
'apprentice': 'quest_humanvale_mystic',
'leader': 'quest_humanvale_mysticleader',
},
[ /* costs */
],
'QuestFleshShaperTempleKidnap', /* passage description */
setup.qdiff.hard19, /* difficulty */
[ /* outcomes */
[
'QuestFleshShaperTempleKidnapCrit',
[
setup.qc.Slave('leader', 'a|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', 'a|was an apprentice flesh shaper in one of the many water temples on the <<lore region_vale>>.'),
],
],
[
'QuestFleshShaperTempleKidnapFailure',
[
],
],
[
'QuestFleshShaperTempleKidnapDisaster',
[
setup.qc.TraitIncreaseExisting('infil1', setup.trait.dick_large)
,
setup.qc.TraitIncreaseExisting('infil1', setup.trait.balls_large)
,
setup.qc.TraitIncreaseExisting('infil1', setup.trait.breast_large)
,
setup.qc.TraitIncreaseExisting('infil2', setup.trait.dick_large)
,
setup.qc.TraitIncreaseExisting('infil2', setup.trait.balls_large)
,
setup.qc.TraitIncreaseExisting('infil2', setup.trait.breast_large)
,
setup.qc.TraitIncreaseExisting('infil3', setup.trait.dick_large)
,
setup.qc.TraitIncreaseExisting('infil3', setup.trait.balls_large)
,
setup.qc.TraitIncreaseExisting('infil3', setup.trait.breast_large)
,
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><<include 'OpportunityFleshShaperTemple'>>
<p>
You have decided to try and kidnap one of these flesh-shaping priests.
</p><p>
The temple your slavers happened upon turned out to be relatively new.
As a result, it had very little protection, and,
led by <<yourrep $g.infil1>>, your slavers had no problem at all infiltrating the temple and into the deepest sanctum.
There, they witnessed the head priest in the middle of ritualistically transforming a
slave's
<<if $g.leader.isMale()>>
dick, growing them into what is basically a third leg.
<<else>>
breasts, growing them enormous pair of pillowy surface.
<</if>>
Such work required heavy concentration, and the priest was completely oblivious to your slavers' presence.
It was an easy task for <<rep $g.infil1>> to bonk the priest's head with the blunt side of <<their $g.infil1>>
<<uweapon $g.infil1>>, rendering <<them $g.leader>> unconscious.
With the caster knocked out, the transformation ceased midway, leaving a slave with
<<if $g.leader.isMale()>>
a massively disproportionate dick-to-balls ratio.
<<else>>
an massively uneven pair of breasts.
<</if>>
Your slavers contemplated to also steal the slave, but
given the transformations on the slave,
<<set _logic = setup.selectUnit([$g.infil1, $g.infil2, $g.infil2], {trait: 'per_logical'})>>
<<if _logic>>
<<rep _logic>> logically pointed out that it would simply be impossible to move the overgrown
poor thing out of the temple, and they begrudgingly left the slave alone.
<<else>>
moving <<them $g.apprentice>> out of the temple unnoticed would be impossible and
<<rep $g.infil2>> <<uadv $g.infil2>> suggested to leave <<them $g.apprentice>> be.
<</if>>
After escaping from the temple, your slavers took <<rep $g.leader>> to <<their $g.leader>> new
home, back in the slave pits of your fort.
</p><p>
After observing the temple for several days, your slavers decided that an all-out
infiltration into the well-guarded temple would be suicide.
Instead, they decided to wait it out on a particularly juicy target
in the form of a new flesh-shaping apprentice.
It became a relatively easy task for them,
waiting until the unsuspecting apprentice ventured out alone
before ambushing the poor soul, tying <<them $g.apprentice>> up, and bringing <<them $g.apprentice>> back home.
The <<lore region_vale>> is truly a dangerous place to be in...
</p><p>
Having settled in for a while, the temple residents were unfortunately already all
too aware of the dangers of the land.
The temple was too heavily guarded,
and your slavers were not able to find any opportunity to kidnap the well-guarded priests.
</p><<if $g.apprentice.isMale()>>
<<questimage 'flesh_shaper_temple_failure_male.jpg'>>
<<else>>
<</if>>
<p>
After observing the temple for several days, your slavers decided that an all-out
infiltration into the well-guarded temple would be suicide.
Instead, they decided to wait it out on a particularly juicy target
in the form of a new flesh-shaping apprentice.
They waited until the unsuspecting apprentice ventured out alone,
before <<rep $g.infil1>> <<uadv $g.infil1>> led a surprise attack.
But the apprentice was not completely defenseless --
in desperation, <<they $g.apprentice>> channeled <<their $g.apprentice>> <<lore magic_water>>
to suddenly grow your slaver's various assets, which distracted your slavers long enough for
the cunning apprentice to escape.
</p>/* PROOFREAD COMPLETE */
<<set _raider = setup.CriteriaHelper.CritTraits(
[setup.trait.magic_water, setup.trait.magic_water_master],
setup.CriteriaHelper.DisasterTraits(
[
setup.trait.race_wolfkin,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* 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(),
],
],
[
'QuestFleshShaperTempleRaidCrit',
[
setup.qc.MoneyNormal(),
],
],
[
'QuestFleshShaperTempleRaidFailure',
[
],
],
[
'QuestFleshShaperTempleRaidDisaster',
[
setup.qc.TraitDecrease('raider1', setup.trait.dick_small),
setup.qc.TraitDecrease('raider1', setup.trait.balls_tiny),
setup.qc.TraitDecrease('raider1', setup.trait.breast_tiny),
setup.qc.TraitDecrease('raider2', setup.trait.dick_small),
setup.qc.TraitDecrease('raider2', setup.trait.balls_tiny),
setup.qc.TraitDecrease('raider2', setup.trait.breast_tiny),
setup.qc.TraitDecrease('raidersupport', setup.trait.dick_small),
setup.qc.TraitDecrease('raidersupport', setup.trait.balls_tiny),
setup.qc.TraitDecrease('raidersupport', setup.trait.breast_tiny),
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><<include 'OpportunityFleshShaperTemple'>>
<p>
You have decided to try and raid the temple.
</p><p>
The temple your slavers happened upon turned out to be relatively new.
As a result, it had very little protection, and,
led by <<yourrep $g.raider1>>, your slavers had no problem at all
raiding the temple.
One by one, the defenders of the temple were downed by <<reps $g.raider1>>
masterful swing of <<their $g.raider1>> <<uweapon $g.raider1>>,
who was fully supported by <<rep $g.raidersupport>> from behind.
<<set _water = setup.selectUnit([$g.raider1, $g.raider2, $g.raidersupport], {trait: 'magic_water'})>>
<<if _water>>
<<Reps _water>> mastery over water magic helped them ward off some of the offensive spells
cast by the defenders.
<</if>>
<<set _tough = setup.selectUnit([$g.raider1, $g.raider2, $g.raidersupport], {trait: 'tough_tough'})>>
<<if _tough>>
<<Reps _tough>> toughness helped <<therace _tough>> shrugged some of the attacks away.
<</if>>
Once all its defenders are downed, the temple was all ripe for your slavers
to raid.
</p>
<<if $gOutcome == 'crit'>>
<p>
They found many debauched rituals being performed inside, including several
offering slaves being chaned on top of the altars.
Your slavers thought about bringing them home,
but ultimatelly decided against it -- the slaves'
assets were too big --
<<if $g.raider1.isMale()>>
one even has a dick at the size of <<reps $g.raider1>> body.
<<else>>
one even has a pair of breasts larger than <<reps $g.raider1>> body.
<</if>>
This would prevent the slaves from walking on their own, and there was no way your
slavers would be able to carry these writhing mass of flesh back home.
</p>
<<else>>
<p>
Unfortunately, one of the defenders managed to escape, who will no doubt seek
reinforcements to wrest control of the temple back.
Your slavers hurriedly grabbed whatever nearby valuables from the temple and escaped before
the reinforcements arrived.
</p>
<</if>><p>
The raiding attempt were unfortunately botched. All things considered,
your slavers were lucky to escape unscathed from the failure,
especially in the presence of such powerful magic wielders.
</p><p>
Unfortunately, your slavers were unsuccessful in their raid, and were captured by the priests.
As punishment, they were subjected to some intense sexual shrinking ritual before being
able to escape their bondage and returned home.
</p>/* PROOFREAD COMPLETE */
<<set _offering = new setup.UnitCriteria(
'quest_offeringslave', /* key */
'Offering Slave', /* title */
[ /* critical traits */
setup.trait.per_sexaddict,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.training_obedience_advanced,
setup.trait.training_obedience_master,
setup.trait.eq_slutty,
],
[
setup.trait.race_elf,
setup.trait.race_wolfkin,
setup.trait.race_catkin,
setup.trait.race_greenskin,
setup.trait.race_lizardkin,
setup.trait.race_demon,
setup.trait.per_chaste,
setup.trait.per_dominant,
setup.trait.magic_water,
setup.trait.magic_water_master,
], /* disaster traits */
[
setup.qres.IsCanBeSold(),
setup.qres.Job(setup.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_wolfkin,
setup.trait.per_submissive,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
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 */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'recruiter1': _recruiter,
'recruiter2': _recruiter,
'guard': setup.qu.guard,
'offering': _offering,
},
{ /* actors */
'apprentice': 'quest_humanvale_mystic',
'leader': 'quest_humanvale_mysticleader',
},
[ /* costs */
],
'QuestFleshShaperTempleRecruit', /* passage description */
setup.qdiff.harder19, /* difficulty */
[ /* outcomes */
[
'QuestFleshShaperTempleRecruitCrit',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.Slaver('leader', 'a|was the leader of the many flesh shaper temples on the <<lore region_vale>> who was impressed by the quality of your slaves.'),
],
],
[
'QuestFleshShaperTempleRecruitCrit',
[
setup.qc.MissingUnitForever('offering'),
setup.qc.Slaver('apprentice', 'a|was an apprentice flesh shaper in one of the many water temples on the <<lore region_vale>>.'),
],
],
[
'QuestFleshShaperTempleRecruitFailure',
[
],
],
[
'QuestFleshShaperTempleRecruitDisaster',
[
setup.qc.MissingUnitForever('offering'),
],
],
],
[], /* rarity, pool */
[
], /* prerequisites to generate */
)>><<include 'OpportunityFleshShaperTemple'>>
<p>
You have decided to recruit one of the priests in exchange for a slave.
</p>
<p>
<<dangertext 'WARNING'>>: upon success, the slave you bring on this quest will
most likely be given out to the flesh-shaper cult and be gone forever.
</p><<if $gOutcome == 'crit'>>
<p>
<<Yourrep $g.recruiter1>> practiced <<their $g.recruiter1>> golden tongue,
upselling the slave so much that
the leader of the flesh-shaper temple was so
impressed by the quality of your <<titlelow $g.offering >>.
In fact, <<they $g.leader>> personally offered to join your company to deepen <<their $g.leader>>
slave breaking knowledge by working with your company.
After <<they $g.leader>> <<uadv $g.leader>> anointed the new cult leader of the temple,
<<they $g.leader>> and your slavers headed back to the fort.
</p>
<<else>>
<p>
The temple graciously accepted the slave offering, but unfortunately was low
on priests at the time. Instead, they compromised by sending one of their apprentices
into your company, to "continue <<their $g.apprentice>> training" according to the priests.
While you did not manage to recruit one of the water masters, the apprentice
is not half-bad at the craft either.
</p>
<</if>>
<p>
<<Rep $g.offering>> offering|was given to the flesh-shaping temple as a tribute,
and <<their $g.offering>> fate is to become an object of worship -- to be continuously transformed
and worshipped by the members of the cult.
</p><p>
Unfortunately, <<yourrep $g.recruiter1>> recruiter1|was not eloquent enough to convince the flesh shapers
that <<yourrep $g.offering>> offering|was a slave worthy for being the centerpiece their transformation rituals.
</p><p>
The negotiation unfortunately went sour, and the priests turned hostile.
Faced with no other choice, your slavers had to make their run from
within the inner chambers of the temple, and left <<yourrep $g.offering>> behind.
</p>/* PROOFREAD COMPLETE */
<<set _criteriafighter1 = new setup.UnitCriteria(
null, /* key */
'Anti-Were Fighter', /* name */
[
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_loner,
setup.trait.per_independent,
setup.trait.per_serious,
setup.trait.skill_animal,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.subrace_humanvale,
setup.trait.height_dwarf,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_playful,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.eq_restrained,
setup.trait.eq_blind,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
brawn: 1.5,
}
)>>
<<set _criteriafighter2 = new setup.UnitCriteria(
null, /* key */
'Anti-Were Fighter', /* name */
[
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_animal,
setup.trait.per_independent,
setup.trait.per_loner,
setup.trait.per_serious,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.eq_restrained,
setup.trait.eq_blind,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.height_dwarf,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_masochistic,
setup.trait.per_playful,
setup.trait.subrace_humanvale,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
brawn: 1.5,
}
)>>
<<set _criteriafighter3 = new setup.UnitCriteria(
null, /* key */
'Anti-Were Fighter', /* name */
[
setup.trait.magic_fire,
setup.trait.magic_fire_master,
setup.trait.skill_animal,
setup.trait.per_independent,
setup.trait.per_loner,
setup.trait.per_serious,
setup.trait.eq_valuable,
setup.trait.eq_veryvaluable,
],
[
setup.trait.eq_restrained,
setup.trait.eq_blind,
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.height_dwarf,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.per_gregarious,
setup.trait.per_loyal,
setup.trait.per_masochistic,
setup.trait.per_playful,
setup.trait.subrace_humanvale,
],
[
setup.qres.Job(setup.job.slaver),
],
{
combat: 1.5,
brawn: 1.5,
}
)>>
<<run new setup.QuestTemplate(
'fending_off_the_weres', /* key */
"Fending off the Weres", /* Title */
"darko", /* Author */
[ /* tags */
'vale',
'money',
'favor',
'maleonly',
'furry',
'ire',
],
2, /* weeks */
3, /* expiration weeks */
{ /* roles */
'fighter1': [ _criteriafighter1, 1],
'fighter2': [ _criteriafighter2, 1],
'fighter3': [ _criteriafighter3, 1],
},
{ /* actors */
'slave': 'vale_all',
},
[ /* costs */
],
'Quest_fending_off_the_weres',
setup.qdiff.harder40, /* difficulty */
[ /* outcomes */
[
'Quest_fending_off_the_weresCrit',
[
setup.qc.Slave('slave', "a|was captured and kept in one of the temporary werewolf attack outposts", undefined),
setup.qc.Favor('humanvale', 100),
setup.qc.Ire('werewolf', 2),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_fending_off_the_weresCrit',
[
setup.qc.Favor('humanvale', 100),
setup.qc.Ire('werewolf', 2),
setup.qc.MoneyCustom(2000),
],
],
[
'Quest_fending_off_the_weresFailure',
[
setup.qc.Injury('fighter1', 2),
setup.qc.Injury('fighter2', 2),
setup.qc.Injury('fighter3', 2),
setup.qc.Ire('werewolf', 2),
],
],
[
'Quest_fending_off_the_weresDisaster',
[
setup.qc.Injury('fighter1', 3),
setup.qc.Injury('fighter2', 3),
setup.qc.Injury('fighter3', 3),
setup.qc.Ire('werewolf', 2),
setup.qc.Ire('humanvale', 6),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.uncommon],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.grandhall),
],
[ /* expiration outcomes */
],
)>><p>
A werewolf outpost has been spotted near one of the smaller settlements in the <<lore region_vale>>. This could only mean one thing: they are planning an assault towards the settlement in the very near future. A frantic messenger from the settlement has arrived at your fort, begging your company for help to eliminate this imminent threat.
<<if $favor.getFavor($company.humanvale) >= 500>>
Seeing how you've allied yourself with the <<rep $company.humanvale>>, they see your company as a potential source of help. They aren't wrong, if they got the coin.
<<else>>
They must be desperate to come to your company — known for raiding many nearby settlements — for help, and this could be a lucrative offer.
<</if>>
</p>
<p>
Assaulting such an encampment head-on will be a challenging task, but you will only need a very simple team for the task. Three experienced fighters to assault the encampment, and nothing more.
</p>
<<set _u = setup.getUnit({tag: 'half_werewolf_told_backstory', job: setup.job.slaver})>>
<<if _u>>
<p>
You recalled that <<rep _u>> had personally asked to join this mission some time ago. If you want to send a team to go on this mission, you might consider sending the <<uadjgood _u>> slaver along...
</p>
<</if>><p>
After scouting through the vale for several days, <<rep $g.fighter1>> <<uadv $g.fighter1>> spotted the encampment, some distance away from the settlement.
<<if $g.fighter1.isHasTrait('per_cautious')>>
<<Rep $g.fighter1>> double checked <<their $g.fighter1>> preparation,
being cautious before doing <<their $g.fighter1>> duty of charging in alone into the
<<else>>
<<Rep $g.fighter1>> <<uadv $g.fighter1>> charged on alone into the
<</if>>
encampment, wielding <<their $g.fighter1>> <<uweapon $g.fighter1>> up high.
Seeing such a bold assault, the werewolves too grabbed their weapons and
attempted to fight your slaver. Meanwhile, <<rep $g.fighter2>> and
<<utheirrel $g.fighter2 $g.fighter3>> <<rep $g.fighter3>> waited for the
perfect opportunity, before jumping into the fray, causing panic to spread
over the encampment and ultimately causing the werewolves to flee and abandon the
encampment.
</p>
<p>
Your slavers looted the encampment for what meager valuables were stashed there, before returning to the settlement to collect their pay and the gratitude of the northern folks.
Your slavers' audacity will no doubt anger the werewolves however,
and you should be prepared for any retaliation...
</p>
<<if $gOutcome == 'crit'>>
<p>
Your slavers never told the settlement about one of their villagers who was caught and caged inside the werewolf encampment.
They took <<therace $g.slave>> prisoner home as a bonus hazard pay, to be trained properly as a sex slave.
</p>
<</if>>
<<set _u2 = setup.getUnit({title: 'quest_shapeshifter__werewolf_1', job: setup.job.slaver})>>
<<if _u2 && !_u2.isHasTitle(setup.title.quest_avenger_0)>>
<<if
!$varstore.get('half_werewolf_father_seen') &&
[$g.fighter1, $g.fighter2, $g.fighter3].includes(_u2)>>
/* met father */
<p>
During the mission, <<rep _u2>> somehow managed to pay attention to the combatants.
In fact, <<they _u2>> was able to identify one of the werewolves as the one that sired <<them _u2>> personally -- <<their _u2>> father.
You could see the anger burning in <<their _u2>> <<ueyes _u2>> as <<they _u2>> finished <<their _u2>> report to you, no doubt planning to exact <<their _u2>> revenge one way or another.
Perhaps you could scout the <<lore region_vale>> again and see if such an opportunity come to pass...
</p>
<<run setup.qc.VarSet('half_werewolf_father_seen', 1, -1).apply($gQuest)>>
<<elseif !$varstore.get('half_werewolf_father_encountered')>>
/* encountered the father but not personally */
<p>
During the fight, <<rep $g.fighter1>> saw one werewolf that somehow reminded <<them $g.fighter1>> greatly of <<their $g.fighter1>> <<ufriend $g.fighter1 _u2>> <<rep _u2>>.
<<if $g.fighter1.isYou()>>
Having seen the werewolf yourself, you
<<else>>
As <<rep $g.fighter1>> finished <<their $g.fighter1>> report to you, you
<</if>>
started to wonder whether this was just a coincidence, or if there was something more to this.
You made a mental note to ask <<yourrep _u2>> later.
</p>
<<run setup.qc.VarSet('half_werewolf_father_encountered', 1, 10).apply($gQuest)>>
<</if>>
<</if>><p>
Your team was incompetent and unsuited for the battle. The werewolves easily
overwhelmed your slavers, forcing them to retreat back injured. Fortunately,
it seemed that your slavers' bold attack alerted the weres that their prey
was aware of their presence. They ultimately decided to leave the area
without risking the assault on the prepared settlement. The werewolves were able
to identify your slavers as under your employ, however, and there is little doubt that they now view
you and <<rep $company.player>> with more disdain than before...
</p><p>
Your team was incompetent and unsuited for the battle. The werewolves easily
overwhelmed your slavers, before capturing <<rep $g.fighter1>> and
interrogated <<if $g.fighter1.isYou()>>you<<else>>the poor <<urace $g.fighter1>><</if>>.
By the time your slavers came back home injured,
you had already heard that the werewolves' attack on the settlement was
a massive success, no small thanks to the information fed by <<rep $g.fighter1>> to
the werewolves, including forces defending the village. As for you and
your company, all you get from this endeavor is much disdain from all parties
involved, thanks to your decision to send such an incompetent team for the job.
</p>/* PROOFREAD COMPLETE */
<<run new setup.Title(
"quest_avenger_0", /* key */
"Avenger", /* name */
"Had delivered swift justice on their mother\'s ravager", /* description */
"had finally made peace with a|their past by delivering justice to a|their mother\'s raper", /* unit text */
3000, /* slave value */
{ /* skill additives */
combat: 2,brawn: 4,survival: 1,},
)
>>
<<run new setup.UnitGroup(
"the_cold_dish0",
"Father of the Half-Werewolf",
'subrace_werewolfmale', /* pools */
0, /* reuse chance */
[ /* unit post process */
setup.qc.BgTraitReset('unit', setup.trait.bg_raider),
setup.qc.TraitsReplace('unit', [setup.trait.muscle_extremelystrong]),
setup.qc.TraitsReplace('unit', [setup.trait.per_lustful, setup.trait.per_dominant]),
setup.qc.AddTag('unit', 'half_werewolf_father'),
],
)>>
<<set _criteriachild = new setup.UnitCriteria(
null, /* key */
'The Half-Werewolf', /* name */
[
setup.trait.muscle_verystrong,
setup.trait.muscle_extremelystrong,
setup.trait.per_loner,
setup.trait.per_cautious,
setup.trait.per_cruel,
setup.trait.per_lunatic,
],
[
setup.trait.muscle_verythin,
setup.trait.muscle_extremelythin,
setup.trait.per_gregarious,
setup.trait.per_kind,
setup.trait.per_brave,
setup.trait.per_masochistic,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.HasTitle('quest_shapeshifter__werewolf_1'),
],
{
combat: 1,
brawn: 1,
survival: 1,
}
)>>
<<run new setup.QuestTemplate(
'the_cold_dish', /* key */
"The Cold Dish", /* Title */
"darko", /* Author */
[ /* tags */
'vale',
'unit',
],
4, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'child': [ _criteriachild, 1],
'bait': [ setup.qu.bimbo, 1],
'lurer': [ setup.qu.convincer, 1],
},
{ /* actors */
'father': 'the_cold_dish0',
},
[ /* costs */
],
'Quest_the_cold_dish',
setup.qdiff.harder44, /* difficulty */
[ /* outcomes */
[
'Quest_the_cold_dishCrit',
[
setup.qc.Outcomes('success'),
setup.qc.BoonizeRandom('child', 75),
],
],
[
'Quest_the_cold_dishCrit',
[
setup.qc.VarRemove('half_werewolf_father_seen'),
setup.qc.VarRemove('half_werewolf_father_encountered'),
setup.qc.Parent('father', 'child'),
setup.qc.AddTitle('child', 'quest_avenger_0'),
setup.qc.VarSet('half_werewolf_epilogue', '1', -1),
setup.qc.Injury('child', 1),
setup.qc.RemoveTagGlobal('half_werewolf_told_backstory'),
setup.qc.Slave(
'father',
"a|was the father of a shapeshifter slaver who sired the slaver during an unfortunate assault, and a|have been served justice by being remade into your slave",
undefined),
],
],
[
'Quest_the_cold_dishCrit',
[
setup.qc.TraumatizeRandom('child', 25),
setup.qc.Injury('child', 8),
setup.qc.TraitIncreaseExisting('bait', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('bait', setup.trait.anus_gape),
setup.qc.Injury('bait', 2),
],
],
[
'Quest_the_cold_dishCrit',
[
setup.qc.TraitIncreaseExisting('bait', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('bait', setup.trait.vagina_gape),
setup.qc.TraitIncreaseExisting('bait', setup.trait.anus_gape),
setup.qc.TraitIncreaseExisting('bait', setup.trait.vagina_gape),
setup.qc.Injury('bait', 12),
setup.qc.TraumatizeRandom('bait', 35),
setup.qc.Injury('child', 8),
setup.qc.TraumatizeRandom('child', 35),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.always],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.VarEqual('half_werewolf_father_seen', '1'),
],
[ /* expiration outcomes */
setup.qc.VarRemove('half_werewolf_father_seen'),
],
)>><<set _u = setup.getUnit({job: setup.job.slaver, title: "quest_shapeshifter__werewolf_1"})>>
<<if _u>>
<p>
As luck would have it, you have heard that the werewolf that sired <<yourrep _u>> is back settling nearby a small settlement on the <<lore region_vale>>, no doubt to quench <<their $g.father>> insatiable lust.
Hearing the news, <<rep _u>> desperately begs you to let <<them _u>> go after <<them $g.father>>, to finally put an end to it all. Looking at your slaver's puppy eyes, how could you say no? More importantly, however, is that the werewolf must have possessed quite a bit of strength to be able to raid such settlements all by <<themself $g.father>>, and no doubt would be a nice addition to your stable of slaves.
</p>
<p>
Before getting ahead of yourself though, you should best prepare for the mission. A bait is required, something attractive to lure in the werewolf. Furthermore, one of your slavers must be able to pose as innocent stranger, gossiping aloud about the target enough for the werewolf to overhear. And finally, <<rep _u>> <<themself _u>> must be ready, for <<they _u>> alone will come face-to-face with <<their _u>> giver of nightmares, and must put an end to it <<themself _u>>.
</p>
<<else>>
<p>
<<dangertext "You are missing a unit required for this quest.">> This quest is no longer able to be completed.
</p>
<</if>><p>
With <<rep $g.bait>> suitably tied up on a pole, <<yourrep $g.lurer>> <<uadv $g.lurer>> began the plan. Posing as an innocent merchant <<they $g.lurer>> walked dangerously close to the werewolf den, while chatting aloud about the
<<if $g.lurer.isFemale()>>
gorgeous definitely-virgin girl-slave being tied up alone on the plains.
<<else>>
handsome boy-slave, definitely virgin too, being tied up alone on the plains.
<</if>>
The plan enacted, <<rep $g.child>> then lied in wait for their worst nightmare to come...
</p>
<p>
After an agonizing wait, <<rep $g.child>> heard a shuffling sound and went back alert. The werewolf then came into view, a hulking werewolf inches taller than <<rep $g.child>> <<themself $g.child>>, eyeing <<rep $g.bait>> lustfully. Unable to contain <<their $g.father>> lust, <<they $g.father>> went straight for <<rep $g.bait>>, no doubt with impure intention. As <<rep $g.bait>> thearetically screamed in terror, <<rep $g.child>> leaped to the rescue, securing the first attack on the were.
</p>
<<if $gOutcome == 'crit' or $gOutcome == 'success'>>
<p>
A surprise attack was nowhere near enough to knock the hulking werewolf,
and <<rep $g.child>> must now fight all by <<themself $g.child>>, ending this once and for all.
<<if $g.child.isHasTrait('per_lunatic')>>
Laughing lunatically, <<rep $g.child>> moved with unnerving precision around <<rep $g.father>>, catching <<them $g.father>> by surprise. The battle ended in a flash, and when the dust settled all that remain were <<rep $g.child>> and an unconscious body behind <<them $g.child>>.
<<elseif $g.child.isHasTrait('per_cruel')>>
Laughing cruelly, <<reps $g.child>> bloodthirst poured out with such intensity that even caught <<them $g.father>> by surprise. Sensing an opportunity, <<rep $g.child>> raised <<their $g.child>> <<uweapon $g.child>> and delivered a decisive strike, knocking the were unconscious to the ground.
<<elseif $g.child.isHasTrait('muscle_verystrong')>>
Laughing, <<reps $g.child>> muscles turned out to be evenly matched with that of <<rep $g.father>>, turning it into an all-out brawl. Muscle against muscle, the fight was raw and intense, but the surprise attack gave <<rep $g.child>> the opening <<they $g.child>> needed before finally clutching the sweatfest out.
<<else>>
But the surprise attack gave <<rep $g.child>> the edge <<they $g.child>> needed, and after an intense battle, <<rep $g.child>> raised <<their $g.child>> <<uweapon $g.child>> victoriously with the other werewolf defeated and on the ground.
<<run setup.qc.Injury('child', 2).apply($gQuest)>>
<</if>>
</p>
<p>
Staring at the body on the ground, <<rep $g.child>> almost could not believe that <<they $g.child>> had the creature that brought <<their $g.child>> cursed existence into the world before them. And now justice could be served, for <<they $g.father>> will use what remains of <<their $g.father>> body to serve and make amend, this time as your slave.
<<if $gOutcome == 'crit'>>
As if a dark shroud has been finally lifted from <<them $g.child>>, <<yourrep $g.child>> can feel a lightness in <<their $g.child>> step now, which will likely last for a good while.
<</if>>
</p>
<p>
Basking in the aftermarth, <<rep $g.child>> almost forgot to release <<rep $g.bait>>, who struggled all the time asking to be released from <<their $g.bait>> bondage. <<They $g.child>> hurriedly apologized before undoing their bondage.
</p>
<<else>>
<p>
But it was all in naught, as the werewolf was too powerful and easily shrugged off the sudden attack. Thrown into the ground, <<rep $g.child>> child|was heavily injured in the ensuing fight, and rendered helpless to watch as <<their $g.child>> father approached the bound <<rep $g.bait>>, before penetrating <<them $g.bait>> violently before <<yourrep $g.child>>'s <<ueyes $g.child>>. As <<they $g.child>> continued to watch, <<rep $g.child>> could not help but grow a little broken inside, having to relive a reenaction of <<their $g.child>> worst memory.
</p>
<p>
By the time the werewolf was finished with the non-consensual sex, <<rep $g.bait>> bait|was left exhausted and with <<their $g.bait>> holes visibly gaped by the experience. It was not until when <<rep $g.lurer>> came back that your slavers were able to tend to their wounds, although they will need a lot of time in your fort to recover from it, and even longer to recover from the trauma they must have endured.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'the_wanderer_wanders', /* key */
"The Wanderer Wanders", /* Title */
"darko", /* Author */
[ /* tags */
'special',
'transformation',
'vale',
],
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>> wanderer|have 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 <<theslaver $g.wanderer>> 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 <<reps $g.wanderer>> worn-down trail.
They tracked <<theslaver $g.wanderer>> to a small thicket in the vale, far away from
civilization. It took them several days of tracking, but during one dawn they
finally found <<rep $g.wanderer>> alone under a pristine waterfall. But
something was wrong with the <<man $g.wanderer>>.
</p>
<p>
The <<man $g.wanderer>>'s back was... furry, to say the least. Your slavers
even spotted a pair of pointed ears sticking out from the slaver's head, as well as what
resembled a wolf tail. But there was no mistaking from the face and the trail
that this <<man $g.wanderer>> could only be <<yourrep $g.wanderer>>.
</p>
<p>
Before your slaver figured out what happened, the sun rose and a most
unbelievable occurrence happened before your slavers. <<Rep $g.wanderer>>
visibly transformed before your slavers' eyes, reverting all their furry bits
and went back into full human form.
</p>
<p>
Armed with this information, they came back to your fort and delivered their
full report to you.
You waited until <<yourrep $g.wanderer>> eventually came back to your
fort, and confronted <<theslaver $g.wanderer>> about this.
</p>
<p>
<<Reps $g.wanderer>> usually <<uadjgood $g.wanderer>> face immediately turned
sour, and then to what seemed to be despair. With no other way to wiggle
<<their $g.wanderer>> way out of this, <<they $g.wanderer>> revealed that
<<they $g.wanderer>> 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 was 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 seemed <<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 bandits along the way, and was injured during the ensuing fight.
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'human_vs_were_defense', /* key */
'Human vs Werewolf: Defensive', /* Title */
'darko', /* author */
['furry', 'vale', 'money', 'favor', 'ire',], /* 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 */
)>><<include 'OpportunityHumanVsWere'>>
<p>
You have chosen to inform the villagers and stand besides them in defense.
</p><p>
The defense was a complete success. The villagers even managed to
capture some of the werewolf attackers to train as valuable pets.
The villagers offered the first fuck of the former werewolf commander to
<<yourrep $g.guard1>>, who
<<if $g.guard1.isHasTrait('per_chaste')>>
declined, since <<they $g.guard1>> guard1|is rather chaste.
<<else>>
<<uadv $g.guard1>> obliged.
<</if>>
Afterwards, 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,
but one thing for sure -- the next time you visited the village, they will no doubt had several
guard pets in fray. Your slavers made a mental note to never anger this particular settlement on the north...
</p><p>
The battle was tough, but ultimately your slavers and villagers managed to clutch out the
victory, and the werewolves retreated.
But with so much of their village destroyed by the attack,
they were only to muster a meager reward for your slavers, who
<<uadv $g.guard1>> accepted it.
</p><p>
The werewolves overwhelmed both your slavers and the villagers.
Fortunately, your slavers managed to escape at the nick of time, abandoning the
unfortunate village but avoided getting injured.
</p><p>
The werewolves overwhelmed both your slavers and the villagers.
As a result, your slavers returned home injured from the experience.
</p>/* PROOFREAD COMPLETE */
<<set _desc = `a|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 */
['furry', 'vale', 'unit'], /* tags */
1, /* weeks */
2, /* quest expiration weeks */
{ /* roles */
'raider1': setup.qu.raider,
'raider2': setup.qu.raider,
'raidersupport': setup.qu.raidersupport,
},
{ /* actors */
'target': 'subrace_humanvale',
'target2': 'subrace_humanvale',
},
[ /* costs */
],
'QuestHumanVsWereOffense', /* passage description */
setup.qdiff.normal14, /* difficulty */
[ /* outcomes */
[
'QuestHumanVsWereOffenseCrit',
[
setup.qc.Slave('target', _desc),
setup.qc.Slave('target2', _desc),
],
],
[
'QuestHumanVsWereOffenseCrit',
[
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 */
)>><<include 'OpportunityHumanVsWere'>>
<p>
You have chosen to launch a simultaneous attack with the werewolves, and kidnap yourself
some fresh villagers.
</p><p>
Your slavers waited in tow in a nearby shrubbery, until they finally heard the
ringing sound of the village's alarm bells.
Chaos ensued as the werewolves flung themselves into the village, ransacking whatever
valuable stored in it.
<<set _calm = setup.selectUnit([$g.raider1, $g.raider2, $g.raidersupport], {trait: 'per_calm'})>>
<<if _calm>>
Despite the chaos, <<rep _calm>> remained calm, before seeing an opportunity to
<<else>>
During the chaos resulting from the werewolf assault,
<<rep $g.raider1>> managed to <<uadv $g.raider1>>
<</if>>
nab
<<if $gOutcome == 'crit'>>
two unsuspecting victims and carried
them
back to fort. They are now in the slave pits,
ready for their new lives as sexual playthings if you so choose.
<<else>>
an unsuspecting victim and carried
<<them $g.target>>
back to fort. <<They $g.target>> target|is now waiting in the slave pits,
to begin <<their $g.target>> new life as a sexual plaything.
<</if>>
</p><p>
Unfortunately, the villagers managed to repel the werewolves' attack.
As a result, your slavers did not find the opportunity to abduct any of the defenders.
But at least they never found out about your degenerate of a plan.
</p><p>
Unfortunately, your slavers got caught in the fighting and ended up injuring themselves.
Sustaining injuries, there was just no way for your slavers to be able to abduct
a villager or two.
</p>/* PROOFREAD COMPLETE */
<<set _desc = "a|was a knight of the Kingdom of Tor, who tried to rescue a|their squire but ended up joining a|them in slavery instead">>
<<set _antiknight = new setup.UnitCriteria(
null, /* key */
'Anti-Knight Fighter', /* title */
[
setup.trait.per_brave,
setup.trait.per_aggressive,
setup.trait.per_sly,
setup.trait.per_cruel,
setup.trait.per_dominant,
setup.trait.per_evil,
setup.trait.skill_ambidextrous,
setup.trait.magic_earth,
setup.trait.magic_earth_master,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
setup.trait.eq_veryvaluable,
], /* critical traits */
[
setup.trait.per_cautious,
setup.trait.per_calm,
setup.trait.per_direct,
setup.trait.per_kind,
setup.trait.per_submissive,
setup.trait.per_masochistic,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
setup.trait.magic_wind,
setup.trait.magic_wind_master,
], /* disaster traits */
[
setup.qres.Job(setup.job.slaver)
], /* requirement */
{ /* skill effects, sums to 3.0 */
combat: 2.0,
slaving: 1.0,
}
)>>
<<run new setup.Title(
'questing_knight_title', /* key */
"Questing Knight of Tor", /* name */
'A famous knight of the Kingdom of Tor who ventured north in search for a|their squire', /* name */
'a|was a famous knight of the Kingdom of Tor who made an unfortunate error in searching for a|their squire alone',
15000, /* slave value */
{
combat: 3,
aid: 3,
},
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_knight',
'knight of the kingdom',
[
[setup.unitpool.subrace_humankingdom_male, 0.7],
[setup.unitpool.subrace_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),
setup.qc.TraitReplace('unit', setup.trait.will_defiant),
setup.qc.AddTitle('unit', 'questing_knight_title'),
]
)>>
<<run new setup.QuestTemplate(
'questing_knight', /* key */
'Questing Knight', /* Title */
'darko', /* author */
['vale', 'unit', 'prep', 'ire', 'rare',], /* tags */
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fighter1': _antiknight,
'fighter2': _antiknight,
'healer': setup.qu.healer,
},
{ /* actors */
'knight': '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('royal', 5),
setup.qc.Ire('royal', 5),
],
],
[
'QuestQuestingKnightCrit',
[
setup.qc.Equipment(setup.equipmentpool.combat_good),
setup.qc.Ire('humankingdom', 1),
setup.qc.Ire('royal', 1),
setup.qc.Injury('fighter1', 1),
setup.qc.Injury('fighter2', 1),
],
],
[
'QuestQuestingKnightCrit',
[
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, setup.rarity.epic],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
setup.qres.HasUnitWithTitle('quest_knight_in_training_squire', {job_key: 'slave'}),
setup.qres.NoUnitWithTitle('questing_knight_title'),
], /* 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 famous knight that have been asking questions around in the nearby tavern
about the wherebouts of your slave.
Apparently, the knight is on a mission to rescue the squire.
Your fort location is not a well-guarded secret, so it is only a matter of time before the knight
arrives at your doorstep, but it might be possible to send a team of slaver to ambush the knight
and perhaps capture <<them $g.knight>> instead.
Of course, besting a knight is a very difficult task, 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 slave-knight, who will also be extremely challenging to break to your will.
</p><p>
The knight left a lot of trails in <<their $g.knight>> enquiries,
and your slavers had no problem at all locating the knight.
They waited until the knight is moving to another town, traveling alone.
There, in the middle of the night when the knight had encamped alone,
your slavers,
<<set _dark = setup.selectUnit([$g.fighter1, $g.fighter2, $g.healer], {trait: 'magic_dark'})>>
<<set _nimble = setup.selectUnit([$g.fighter1, $g.fighter2, $g.healer], {trait: 'tough_nimble'})>>
<<if _dark>>
covered by the shroud of darkness from <<reps _dark>> dark magic, <<uadv _dark>>
<<elseif _nimble>>
led from stealth by the nimble <<reps _nimble>>, <<uadv _nimble>>
<<else>>
spearheaded by <<yourrep $g.fighter1>>, <<uadv $g.fighter1>>
<</if>>
launched an ambush on the knight.
<<if $gOutcome == 'crit'>>
Having the advantage of surprise on their side, together with your slaver's
overall combat prowess, your slavers narrowly managed to subdue the knight before an actual fight began.
Immediately your slavers robustly tied the knight so tight the only movement
the knight could do is to breathe.
Your slavers then proceeded to loot the temporary camp, together with the still usable
part of the knight's armor,
to bring back home together with the main trophy.
<<elseif $gOutcome == 'success'>>
But apparently the knight was not as defenseless as they had thought, for <<they $g.knight>>
kept <<their $g.knight>> sword close all the time.
An intense battle ensued.
The knight fought fiercely, but ultimately was forced to retreat from the sheer combination
of number advantage and terrain advantage that your slavers had.
Still, that meant your slavers were unable to capture the knight as planned, but they were
able to thoroughly loot the camp, which apparently still contained some of the knight's valuable
armor pieces.
<<else>>
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 of legend <<they $g.knight>> knight|was, and
badly injured your slavers, who were forced to retreat.
<</if>>
</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 instead.
The knight proceeded to knock your slavers out before launching a formidable solo assault on
your fort, freeing one of your slaves.
</p>/* PROOFREAD COMPLETE */
<<set _desc = 'a|was a squire in service to a knight in the Kingdom of Tor. a|They a|was trying to prove a|themself but ultimately fell to your company instead'>>
<<set _fighter = new setup.UnitCriteria(
'quest_questing_squire_fighter', /* key */
'Fighter', /* title */
[
setup.trait.per_brave,
setup.trait.per_cruel,
setup.trait.per_evil,
setup.trait.magic_dark,
setup.trait.magic_dark_master,
], /* critical traits */
[
setup.trait.per_cautious,
setup.trait.per_kind,
setup.trait.per_honorable,
setup.trait.magic_light,
setup.trait.magic_light_master,
], /* disaster traits */
[setup.qres.Job(setup.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', 'ire',], /* tags */
1, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'fighter1': _fighter,
'fighter2': _fighter,
'raidersupport': setup.qu.raidersupport,
},
{ /* actors */
'squire': '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, setup.rarity.rare],], /* quest pool and rarity */
[
setup.qres.QuestUnique(),
], /* prerequisites to generate */
)>><p>
The Kingdom of Tor has a full order of knights serving the king and protecting their lands.
These knights often take on promising youths as squires.
Being a squire is a path to becoming a knight of the order, should they prove worthy.
</p>
<p>
occasionally, squires travel through the <<lore region_vale>>, either scouting,
tackling minor issues the knights cannot get to, or for some, spending time with their families.
You just got wind of such a squire being seen in a tavern inquiring about the roads north.
Using your superior knowledge of the roads and terain,
you might just be able to get the drop on <<them $g.squire>>,
and introduce the squire to a new life in your dungeons.
Who knows, maybe one day you'll even be able to use <<them $g.squire>> to lure
a knight into your clutches. They'd make a much more valuable and attractive, if also challenging-to-break slave.
</p><p>
Using their superior knowledge of the terrain,
your slavers cleverly dug a classic pit trap along a forest trail where the squire had said <<they $g.squire>> were heading.
The trap worked perfectly --- The squire fell head over heels into the pit, hitting their head and losing
consciousness long enough for <<name $g.fighter1>> to <<uadv $g.fighter1>> tie
<<them $g.squire>> up. It wouldn't be long before you introduce <<them $g.squire>> to
<<their $g.squire>> new life serving <<their $g.squire>> <<master $unit.player>>, not with strength of arms but by giving pleasure.
<<set _cruel = setup.selectUnit([$g.fighter1, $g.fighter2, $g.raidersupport], {trait: 'per_cruel'})>>
<<set _kind = setup.selectUnit([$g.fighter1, $g.fighter2, $g.raidersupport], {trait: 'per_kind'})>>
<<if _cruel>>
<<Rep _cruel>> taunted the hapless squire throughout the journey home, the sadistic slaver
deriving pleasure from the squirming <<urace $g.squire>>.
<<elseif _kind>>
<<Rep _kind>> tried to soothe the squire throughout the journey, reassuring <<them $g.squire>>
that the slave training was much preferable to death, and in any case, could be quite enjoyable if they follow orders. After all, <<they $g.squire>> should be used to following orders...
<</if>>
</p><p>
Your slavers, led by <<rep $g.fighter1>> managed to <<uadv $g.fighter1>>
ambush and capture the squire easily. Or so it seemed. </p>
<p>Unfortunately, it turned out that <<they $g.squire>> squire|was not only missed, but your slavers were sloppy enough to be seen. Word of your insolence quickly made it back to the Knights of Tor, and your reputation in the Kingdom has worsened as a result.
</p><p>
Despite being a mere squire, <<they $g.squire>> managed to overpower your slavers,
forcing them to return with nothing but injuries.
</p><p>
Your slaver made a bad miscalculation during the ambush, causing them to fall into
the pit trap they had themselves dug in hopes of catching the squire.
You should give them a rest. Their injuries aren't life threatening, but you're wondering if they really should be going on field missions if this sort of thing keeps happening.
</p><<run new setup.Title(
"quest_master_of_arcane_0", /* key */
"Master of Arcane", /* name */
"A true master of arcane", /* description */
"a|have proven a|themself to be a master of arcane by completing a challenge in the vales", /* unit text */
7599, /* slave value */
{ /* skill additives */
arcane: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Wizard', /* name */
[
setup.trait.face_attractive,
setup.trait.face_beautiful,
setup.trait.per_gregarious,
setup.trait.skill_hypnotic,
setup.trait.magic_fire_master,
setup.trait.magic_water_master,
setup.trait.magic_wind_master,
setup.trait.magic_earth_master,
setup.trait.magic_light_master,
setup.trait.magic_dark_master,
],
[
setup.trait.face_hideous,
setup.trait.face_scary,
setup.trait.per_loner,
setup.trait.per_submissive,
setup.trait.per_lunatic,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_arcane_0'),
setup.qres.SkillAtLeast(setup.skill.arcane, 150),
],
{
arcane: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_arcane', /* key */
"Test of Arcane", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'legendary',
'veteran',
'prep',
'danger',
'vale',
'unit',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
'wiz': 'all',
'owner': 'all',
},
[ /* costs */
],
'Quest_test_of_arcane',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_arcaneCrit',
[
setup.qc.EquipmentDirect('arcane_head_master'),
setup.qc.AddTitle('a', 'quest_master_of_arcane_0'),
setup.qc.SlaverMarker('owner'),
],
],
[
'Quest_test_of_arcaneCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_arcaneCrit',
[
setup.qc.Injury('a', 16),
],
],
[
'Quest_test_of_arcaneCrit',
[
setup.qc.MissingUnit('a'),
setup.qc.Trait('a', setup.trait.per_lustful),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.arcane, 100),
setup.qres.NoTitle('quest_master_of_arcane_0')
], 1),
],
[ /* expiration outcomes */
],
)>><<set _slaver = setup.getUnit({
job: 'slaver',
skill_max: setup.skill.arcane,
notyou: true,
})>>
<p>
<<Rep _slaver>> is very good at magic. Whether it's magical dowsing,
<<if _slaver.isHasTrait('magic_fire')>>
summoning pillars of flames,
<</if>>
<<if _slaver.isHasTrait('magic_water')>>
cooling of hot food,
<</if>>
<<if _slaver.isHasTrait('magic_wind')>>
conjuring winds in a busy market,
<</if>>
<<if _slaver.isHasTrait('magic_earth')>>
making plants grow faster for fun,
<</if>>
<<if _slaver.isHasTrait('magic_light')>>
healing the wounded and closing gapes,
<</if>>
<<if _slaver.isHasTrait('magic_dark')>>
corrupting innocents,
<</if>>
or just general fancy party tricks, <<rep _slaver>> is very good at it.
</p>
<p>
In fact, <<their _slaver>> magical prowess is spreading so much so that a visitor has come into your fort, demanding a wizardry duel of prowess with your <<urace _slaver>> slaver. The challenger has located one of the abandoned fortresses in the vales suitable for the duel, and challenges your most skillful wizard for the honor. You imagine a magical fight between two master wizards taking place inside, but your imagination is cut short as the wizard explained it as a simple magical contest of who-can-blow-the-bigger-hole in the fortress.
</p>
<p>
With your dream of a legendary magical battle shattered, you almost have the mind to flat out refuse just out of spite, but then you saw the almost inhuman
<<if $g.wiz.isFemale()>>
beauty
<<else>>
handsomeness
<</if>>
radiating from the challenger.
So captivating <<their $g.wiz>>
<<if $g.wiz.isFemale()>>
beauty
<<else>>
handsomeness
<</if>>
was that by the time you regain your wits, you have somehow accepted the <<urace $g.wiz>>'s challenge...
</p><p>
<<Yourrep $g.a>> ventured alone with only the company of the wizard into the abandoned fortress of the north.
The competition is very simple — whoever can punch the bigger hole into the fortress wins.
Sounds easy enough.
The competitor begins with <<their $g.wiz>> own perfected
<<if $gQuest.getSeed() % 4 == 0>>
fireball spell, conjuring a fireball the size of a house before hurling it into the fort, scorching a part of its walls.
<<elseif $gQuest.getSeed() % 4 == 1>>
ice spear spell, conjuring an icicle the size of a horse carriage before hurling it into the fort, crushing a part of its walls by force.
<<elseif $gQuest.getSeed() % 4 == 2>>
lightning spell, conjuring a lance of pure energy before hurling it into the fort, zapping a part of its walls by force.
<<elseif $gQuest.getSeed() % 4 == 3>>
magma sphere spell, conjuring a sphere of extremely dense earth before hurling it into the fort, crashing loudly with a part of its walls by force.
<</if>>
A suspiciously small hole resulted at the wake of the spell.
Passing over the baton, it was <<reps $g.a>> turn to demonstrate <<their $g.a>> magic.
</p>
<<if $gOutcome == 'crit'>>
<p>
However, <<rep $g.a>> knew that true mastery over magic does not equate the biggest, baddest boom. <<They $g.a>> knew that magic is far more delicate that it, and <<they $g.a>> a|was able to sense that something magical was protecting the fort, mitigating the damage.
A magical defense spell covering the huge circumference of the fort can only mean it was inhabited by an extremely powerful wizard, and hence <<rep $g.a>> switched <<their $g.a>> focus, instead attuning <<themself $g.a>> to find an unnaturally large source of magic around.
<<if $g.a.isHasTrait('magic_fire_master')>>
It is a remarkably similar process to purification — finding the source of the evil — and <<their $g.a>> mastery over the purification arts helped quite a bit.
<</if>>
<<if $g.a.isHasTrait('magic_water_master')>>
As a master flesh-shaper, <<they $g.a>> could also link the source to a blob of moving water — making the task easier.
<</if>>
<<if $g.a.isHasTrait('magic_wind_master')>>
<<Rep $g.a>>, being a master of wind magic, received hints from the flow of the winds on the possible whereabouts of the source.
<</if>>
<<if $g.a.isHasTrait('magic_earth_master')>>
<<Rep $g.a>> closed <<their $g.a>> eyes and put <<their $g.a>> <<uhand $g.a>> into the earth, asking for directions. The earth of course complies with <<their $g.a>> <<master $g.a>>.
<</if>>
</p>
<p>
Indeed, an exceedingly large magical energy is approaching, and approaching at an inhuman speed. Judging from the intensity of the magical energy, this could be no ordinary mortal, and fleeing would be futile. With the time running out, <<rep $g.a>> came out with a plan after seeing how the challenger wizard was still completely clueless to the impending danger.
<<if $g.a.isHasTrait('skill_hypnotic')>>
Pretending defeat, <<rep $g.a>> put some hypnotic suggestions into the challenger before
<<elseif $g.a.isHasTrait('face_attractive')>>
Using <<their $g.a>> pretty face, <<rep $g.a>> lowered the challenger's guard before
<<elseif $g.a.isHasTrait('per_gregarious')>>
Using a couple of honeyed words, <<rep $g.a>> lowered the challenger's guard before
<<else>>
Taking advantage of <<their $g.a>> <<upraisenoun $g.a>>, <<rep $g.a>> lowered the challenger's guard before
<</if>>
knocking <<them $g.wiz>> out with a simple
<<if $g.a.isHasTrait('magic_wind')>>
wind of sleep spell.
<<elseif $g.a.isHasTrait('magic_water')>>
cold snap spell.
<<elseif $g.a.isHasTrait('magic_fire')>>
fire twist spell.
<<elseif $g.a.isHasTrait('magic_earth')>>
pollen spell.
<</if>>
The helpless <<urace $g.wiz>> was then tied up, and the preparations was complete.
</p>
<p>
The source of the energy turned out to be a demon angry at having <<their $g.wiz>> home attacked for no reason — it seemed the fort was not as abandoned as they had hoped.
Fortunately, <<rep $g.a>> a|was ready, and <<uadv $g.a>> explained that the challenger was the culprit, and <<they $g.a>> wanted to help bring justice.
The demon was quite amused by the story, no doubt sensing the magical energies in both your slaver and the challenger, and accepted the explanation. Unfortunately, the demon took the challenger away to be trained proper as a slut, but it was not all in vain. The hat of the challenger was dropped along the way — a hat which turned out to be quite an artefact: the <<rep setup.equipment.arcane_head_master>>.
At the end of the day, <<rep $g.a>> proved who was the superior master of arcane, and rightfully earned <<their $g.a>> new title as Master of Arcane.
</p>
<<elseif $gOutcome == 'disaster'>>
<p>
Seeing how the challenger failed to punch a big hole motivated <<yourrep $g.a>>, who then prepared <<their $g.a>> biggest and baddest spell:
<<if $g.a.isHasTrait('magic_earth')>>
the worldly lance.
<<elseif $g.a.isHasTrait('magic_wind')>>
the miniature tornado.
<<elseif $g.a.isHasTrait('magic_water')>>
the ice trident.
<<elseif $g.a.isHasTrait('magic_fire')>>
the volcano strike.
<</if>>
It requires utmost concentration to prepare, and because of that, they failed to notice when
another demonkin wizard approached — a wizard so vile and malicious that the locals would simply call <<them $g.owner>> the dark lord. The fort was not so uninhabited, it turned out, and the owner was very angry at whoever dared to attack their homefort.
The challenger sensed the immense magical power of the dark lord, and wisely decided to flee, but <<rep $g.a>> was still too deep in concentration.
<<They $g.a>> never returned to your fort, perhaps the dark lord found it amusing to try and break a master wizard for <<their $g.a>> amusement...
</p>
<p>
<<uneedrescue $g.a>>, preferably before <<they $g.a>> lost <<their $g.a>> mind under the untender care of the dark lord...
</p>
<<else>>
<p>
Seeing how the challenger failed to punch a big hole motivated <<yourrep $g.a>>, who then prepared <<their $g.a>> biggest and baddest spell:
<<if $g.a.isHasTrait('magic_earth')>>
the worldly lance.
<<elseif $g.a.isHasTrait('magic_wind')>>
the miniature tornado.
<<elseif $g.a.isHasTrait('magic_water')>>
the ice trident.
<<elseif $g.a.isHasTrait('magic_fire')>>
the volcano strike.
<</if>>
It required quite a bit of concentration, but <<rep $g.a>> managed to pull it off, blasting a large hole on one of the walls. The challenger upped the intensity next by blasting another part of the wall, and so on until the fort was almost flattened into the ground.
</p>
<p>
Little did they know that the fort was not entirely uninhabited, and before they knew it they were face to face with a very powerful wizard who interrupted their competition. Sensing the immense power of the new enemy, <<yourrep $g.a>> made the right decision to flee, abandoning the challenger to <<their $g.wiz>> fate. Still, it was not a clean escape, as the wizard was also quite angry at your slaver, and <<they $g.a>> sustained some magical damage as <<they $g.a>> fled while being assaulted by various spells.
</p>
<p>
Having been able to escape from such an exceedingly powerful wizard spoke volumes of their own magical talents, motivating your slaver quite a bit.
<<if $gOutcome == 'success'>>
As luck would have it, yet another foolish challenger came challenging for an oddly similar competition, and yet another opportunity presented itself in front of you...
<<else>>
<</if>>
</p>
<</if>><<run new setup.Title(
"quest_master_of_brawn_0", /* key */
"Master of Brawn", /* name */
"A true master of brawn", /* description */
"a|have proven a|themself to be a master of brawn by completing a challenge in the vales", /* unit text */
7599, /* slave value */
{ /* skill additives */
brawn: 4,},
)
>>
<<set _criteriaa = new setup.UnitCriteria(
null, /* key */
'Master Strongman/woman', /* name */
[
setup.trait.muscle_extremelystrong,
setup.trait.tough_tough,
setup.trait.per_slow,
setup.trait.per_active,
setup.trait.per_stubborn,
setup.trait.magic_water,
setup.trait.magic_water_master,
setup.trait.body_werewolf,
setup.trait.body_neko,
],
[
setup.trait.muscle_extremelythin,
setup.trait.muscle_verythin,
setup.trait.tough_nimble,
setup.trait.per_smart,
setup.trait.per_studious,
setup.trait.per_curious,
setup.trait.magic_fire,
setup.trait.magic_fire_master,
],
[
setup.qres.Job(setup.job.slaver),
setup.qres.SkillAtLeast(setup.skill.brawn, 150),
setup.qres.Through(setup.qres.And([
setup.qres.NoTitle('quest_master_of_brawn_0')
]), 'Have not yet mastered the art of brawn'),
],
{
brawn: 3,
}
)>>
<<run new setup.QuestTemplate(
'test_of_brawn', /* key */
"Test of Brawn", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'veteran',
'prep',
'item',
'vale',
'danger',
'legendary',
],
10, /* weeks */
24, /* expiration weeks */
{ /* roles */
'a': [ _criteriaa, 3],
},
{ /* actors */
},
[ /* costs */
],
'Quest_test_of_brawn',
setup.qdiff.hardest100, /* difficulty */
[ /* outcomes */
[
'Quest_test_of_brawnCrit',
[
setup.qc.AddTitle('a', 'quest_master_of_brawn_0'),
setup.qc.EquipmentDirect('brawn_weapon_master'),
setup.qc.VarSet('quest_test_of_brawn_crit', '1', -1),
],
],
[
'Quest_test_of_brawnCrit',
[
setup.qc.Outcomes("failure"),
setup.qc.QuestDirectSelf(null),
],
],
[
'Quest_test_of_brawnCrit',
[
setup.qc.Injury('a', 10),
setup.qc.Trauma('a', setup.trait.boon_brawn, 20),
setup.qc.Blessing('a', 1, 'curse_weakness8', undefined),
],
],
[
'Quest_test_of_brawnCrit',
[
setup.qc.Blessing('a', 6, 'curse_weakness8', undefined),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.legendary],
],
[ /* restrictions */
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.QuestUnique(),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slaver),
setup.qres.NoTitle('quest_master_of_brawn_0'),
setup.qres.SkillAtLeast(setup.skill.brawn, 100)
], 1),
],
[ /* expiration outcomes */
],
)>><p>
Many tales both fable and myth are abound in the <<lore region_vale>>. Among these many tales, a particularly interesting one involves the legend about an axe so heavy and unwieldy that was wielded by giants in the past, and put to rest on a stony tomb deep within the mountsin of the vale.
It is said that the axe rests still to this very day, as nobody has the strength and capabilities to lift and retrieve the artifact.
</p>
<p>
Within your company, however, you have a particularly strong slaver, whose brawling prowess is known far and wide. If you believe the legend to be true, it might be worth a shot to try and send the slaver away on a mission to reclaim the artifact for your company. But like all wild and unclaimed artifact, it will surely also be guarded for magic, so best prepare that something might go horribly wrong during the attempt...
</p>
<<if $varstore.get('quest_test_of_brawn_crit')>>
<p>
You have already acquired the axe in the past, but apparently there are multiple copies of such axe hidden within the vales, and you might be able to get your <<uhands $unit.player>> on more of them...
</p>
<</if>><p>
<<Yourrep $g.a>> braved the cold front of the <<lore region_vale>>,
<<if $g.a.getHomeland() == setup.Text.Race.REGIONS.vale>>
a place <<they $g.a>> once called home,
<</if>>
up onto the mountains and into the valley beyond.
It was incredibly cold,
<<if $g.a.isHasTrait('magic_fire')>>
made worse by <<their $g.a>> affinity to fire,
<</if>>
<<if $g.a.isHasTrait('magic_water')>>
although <<they $g.a>> a|is used to it thanks to <<their $g.a>> affinity to water.
<<elseif $g.a.isFurryBody()>>
although <<their $g.a>> thick fur helps wards off the cold.
<<else>>
but <<they $g.a>> bore through it.
<</if>>
</p>
<p>
The long and grueling journey was not for naught, and <<rep $g.a>> managed to find the axe standing proudly on a spire of rocks.
Even covered with snow, the hilt still gleamed obsidian, while the head stood unmovingly below.
It is obviously masterfully crafted, and the only reason it remained in its resting place to this day must be because no thief is strong enough to even reach the top of the rocky spire where the axe stood still.
</p>
<<if $gOutcome == 'crit'>>
<p>
But <<yourrep $g.a>> a|is no ordinary <<urace $g.a>>.
<<if $g.a.isHasTrait('muscle_extremelystrong')>>
One look at <<therace $g.a>> and <<their $g.a>> insanely thick muscles and people would easily imagine if there is someone out there capable of lifting the axe, it would be <<rep $g.a>>.
<</if>>
<<if $g.a.isHasTrait('tough_tough')>>
<<Their $g.a>> tough body would be able to climb easily into the spire.
<</if>>
<<if $g.a.isHasTrait('per_slow')>>
<<They $g.a>> a|is big and dumb, perfect for lugging heavy stuffs like the axe.
<</if>>
<<if $g.a.isHasTrait('per_active')>>
<<They $g.a>> a|spend a lot of time maintaining <<their $g.a>> shape too, and it will be put to test here.
<</if>>
<<if $g.a.isHasTrait('per_stubborn')>>
<<They $g.a>> a|is stubborn enough to try harder than most at lifting the axe.
<</if>>
The attempt was made, and it took <<rep $g.a>> several grueling hours, but with a booming crack the axe was lifted from its resting place for the first time in centuries. The axe was incredibly heavy, and it took even <<rep $g.a>> everything <<they $g.a>> got to wield and raise it, but <<they $g.a>> still have successfully done the deed. The axe has found a new master in <<rep $g.a>>, and after recovering <<their $g.a>> strength, <<rep $g.a>> bought the legendary axe into its new home.
</p>
<<else>>
<p>
With
<<if $g.a.getSpeech() == setup.speech.friendly>>
an enthusiastic smile,
<<elseif $g.a.getSpeech() == setup.speech.bold>>
a look of confidence,
<<elseif $g.a.getSpeech() == setup.speech.cool>>
a steady gaze,
<<elseif $g.a.getSpeech() == setup.speech.witty>>
a grin,
<<elseif $g.a.getSpeech() == setup.speech.debauched>>
a devilish grin,
<</if>>
<<rep $g.a>> approached the axe by climbing up the spire.
Once in front of the axe, <<they $g.a>> attempted to unhinge it from its resting place, but <<they $g.a>> soon found out that <<their $g.a>> strength a|was not at all sufficient.
<<if $g.a.isHasTrait('muscle_verythin')>>
Perhaps it is <<their $g.a>> extremely thin waist, which makes it much harder for <<them $g.a>> to try and lift the axe.
<</if>>
<<if $g.a.isHasTrait('tough_nimble')>>
Perhaps it is <<their $g.a>> wimpy body, which lacks the endurance to struggle through the hours required to lift the axe.
<</if>>
<<if $g.a.isHasTrait('per_smart')>>
Perhaps it is <<their $g.a>> overly critical mind, who constantly overthinks the situation.
<</if>>
<<if $g.a.isHasTrait('per_studious')>>
Perhaps it is <<their $g.a>> overly studious nature, who is more interested in studying the axe than lifting it.
<</if>>
<<if $g.a.isHasTrait('per_curious')>>
Perhaps it is <<their $g.a>> overly curious nature, who keeps distracting <<them $g.a>> from lifting the axe away.
<</if>>
But after hours and hours of struggle, <<rep $g.a>> gave up.
</p>
<p>
Unfortunately for <<them $g.a>>, the spire turns out to be enchanted, cursing whoever unlucky soul foolish enough to try to lift the axe and fail.
<<if $gOutcome == 'disaster'>>
The enchantment senses the mockery of an attempt by <<rep $g.a>>, and lavished even more curses than usual to the poor <<urace $g.a>>.
<</if>>
In the end, <<rep $g.a>> went home with nothing but new curses to show for it.
<<if $gOutcome != 'disaster'>>
Still, <<they $g.a>> looked encouraged having seen the axe for <<themself $g.a>>, and a|is rather eager to give it another try.
<</if>>
</p>
<</if>>/* PROOFREAD COMPLETE */
<<run new setup.QuestTemplate(
'the_legendary_mason', /* key */
"The Legendary Mason", /* Title */
"darko", /* Author */
[ 'vale',
'veteran',
'upgrade',
'rare',
], /* tags */
4, /* weeks */
10, /* quest expiration weeks */
{ /* roles */
'builder1': setup.qu.builder,
'builder2': setup.qu.builder,
'planner': setup.qu.planner, },
{ /* actors */
'master': '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, setup.rarity.legendary],
],
[ /* restrictions to generate */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.veteranhall),
setup.qres.Cooldown(100), ],
)>><p>
You have heard that a master mason lives somewhere on the <<lore region_vale>>. The mason is 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 — so make sure they are suitable for the job!
</p>
<p>
<<successtext 'This is a very rare quest'>>. <<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 <<reps $g.builder1>> experienced <<ubody $g.builder1>>, the mason was intrigued and agreed to come over to your fort and see what magic <<they $g.builder1>> could work on.
</p>
<<set _fort = $fort.player.getBuilding(setup.buildingtemplate.xxx)>>
<<if _fort.getLevel() == _fort.getTemplate().getMaxLevel()>>
<p>
The mason was in awe of your magnificent, and
<<successtext 'fully upgraded'>> fort.
But that meant 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 inside your fort that could 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, <<reps $g.planner>> 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, <<reps $g.planner>> 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>> planner|was 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>> planner|was 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 _order_low =
setup.qc.SlaveOrderFlex(
'Slave Merchant Order - Low Quality', /* name */
'independent', /* company */
12, /* expires in */
200, /* base price */
300, /* trait multi */
0.5, /* value multi */
[ /* crit traits */
],
[ /* disaster traits */
],
[ /* restrictions */
setup.qres.Job(setup.job.slave),
],
[ /* addons */
setup.SlaveOrderAddon.TraitsRandom(setup.TraitHelper.getAllTraitsOfTags(['bg']).filter(trait => !trait.getTags().includes('unicorn') && !trait.getTags().includes('rare')), 3, 2, 0),
],
[ /* fulfilled outcomes */
],
[ /* unfulfilled outcomes */
],
)>>
<<run new setup.QuestTemplate(
'the_slave_merchant', /* key */
"The Slave Merchant", /* Title */
{ /* Author */
name: "darko",
url: "",
},
[ /* tags */
'vale',
'order',
],
2, /* weeks */
setup.QUEST_DEFAULT_EXPIRATION, /* expiration weeks */
{ /* roles */
'trainer': [ setup.qu.slavetrainer, 1],
'trader': [ setup.qu.slavetrader, 1],
'negotiator': [ setup.qu.negotiator, 1],
},
{ /* actors */
'merchant': 'vale_all',
},
[ /* costs */
],
'Quest_the_slave_merchant',
setup.qdiff.normal20, /* difficulty */
[ /* outcomes */
[
'Quest_the_slave_merchantCrit',
[
setup.qc.SetCooldownQuest(null, 12),
setup.qc.Opportunity('slave_merchant_high_level', null),
],
],
[
'Quest_the_slave_merchantCrit',
[
setup.qc.SetCooldownQuest(null, 12),
setup.qc.Opportunity('slave_merchant_low_level', null),
],
],
[
'Quest_the_slave_merchantCrit',
[
_order_low,
_order_low,
setup.qc.SetCooldownQuest(null, 6),
],
],
[
'Quest_the_slave_merchantCrit',
[
setup.qc.Ire('humanvale', 2),
setup.qc.Ire('outlaws', 1),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.vale, setup.rarity.common],
],
[ /* restrictions */
setup.qres.QuestUnique(),
setup.qres.Building(setup.buildingtemplate.marketingoffice),
setup.qres.ExistUnit([
setup.qres.Job(setup.job.slave)
], 5),
],
[ /* expiration outcomes */
],
)>><p>
Your company has accumulated quite a large stable of slaves. While having a large number of slaves is always good, you might find it somewhat difficult to find potential buyers for them, outside of the pittance you would normally get from selling them off as menial labor slaves.
</p>
<<set _u = setup.getAnySlaver()>>
<p>
As luck would have it, <<yourrep _u>> informs you that a rather reputable wholesale slave merchant is in the area. You could try to invite the merchant over to your fort, and <<they $g.merchant>> will surely be glad to purchase most of your excess slaves. The merchant is a re-seller at heart, however, and would only buy slaves for cheap to make profit of selling them later, so at best you would just get an adequate deal out of this, nothing outlandishly good.
</p><<if $g.merchant.isMale()>>
<<else>>
<<questimage 'the_slave_merchant_female.jpg'>>
<</if>>
<p>
Bring your carefully written invitation, the merchant finally arrived at your fort's gate. Per your instructions, <<yourrep $g.trainer>>, <<rep $g.trader>> and <<rep $g.negotiator>> kept the merchant company throughout <<their $g.merchant>> stay within your fort, with the singular goal of impressing the merchant enough to offer you a series of good deals.
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_gregarious'})>>
<<if _unit>>
<<Reps _unit>> eloquence won the merchant's attention.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_cruel'})>>
<<if _unit>>
<<Rep _unit>> happily showed off many of your slaves that were currently being trained with pain, showcasing just how capable your company is.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'skill_hypnotic'})>>
<<if _unit>>
<<Rep _unit>> planted some subconscious hypnotic suggestions into the merchant's head, making <<them $g.merchant>> see your company in a better light.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_lustful'})>>
<<if _unit>>
<<Rep _unit>> would ensure that the merchant knows exactly just how familiar your slavers are with their lewd work.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_loner'})>>
<<if _unit>>
<<Rep _unit>> <<if _unit.isYou()>>aren't<<else>>isn't<</if>> the most sociable <<urace _unit>>, and the discomfort is apparent to the merchant.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_submissive'})>>
<<if _unit>>
Seeing such a highly dominant slave trader kept
<<rep _unit>> submissively aroused, sometimes all too obvious for the merchant.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_frugal'})>>
<<if _unit>>
<<Rep _unit>> ensured your company would not be offered a less than stellar deal.
<</if>>
<<set _unit = setup.selectUnit([$g.trainer, $g.trader, $g.negotiator], {trait: 'per_lavish'})>>
<<if _unit>>
<<Rep _unit>> <<if _unit.isYou()>>are<<else>>is<</if>> far too generous, and you worry that you might end up with a subpar deal as a result.
<</if>>
</p>
<<if $gOutcome == 'disaster'>>
<p>
Unfortunately, your hospitality as well as your slaver's less than thuggish behavior failed to convince the merchant that your company knows what it is doing. The merchant disappeared later the night, no doubt suspecting that you were trying to enslave <<them $g.merchant>>. Whether or not that was your intention, rumors has spread around that your company was a den of scums, which you can't really deny even if you want to.
</p>
<<elseif $gOutcome == 'failure'>>
<p>
In the end, your meager hospitaly won you two very subpar offers from the merchant.
With the merchant long gone, you glared at the slavers you've assigned to the task, who no doubt must have spent way too much time drinking and lazying around instead of properly impressing the merchant...
</p>
<<else>>
<p>
Thankfully, your slavers prove competent for once and the merchant offered you a plethora of options for selling your slaves to <<them $g.merchant>>. The merchant specialize in "wholesale slave distribution", however, and hence all the deals you receive would be a little subpar compared to most deals you find anywhere else. Still, it's probably much better than selling your more valuable slaves off as simple laborers.
</p>
<<if $gOutcome == 'crit'>>
<p>
The merchant was so impressed that <<they $g.merchant>> had decided to offer your company a somewhat better deals than <<they $g.merchant>> usually offer to companies in your region.
</p>
<</if>>
<</if>><<set setup.questtemplate = {}>>
<<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.template.getTags().includes('veteran')>>
<<if !(_q.template.key in _done)>>
<<set _done[_q.template.key] = true>>
<<if _q.template.TYPE == 'quest'>>
<<run setup.questpool.veteran.registerQuest(_q.template, _q.rarity)>>
<<else>>
<<run setup.questpool.veteran.registerOpportunity(_q.template, _q.rarity)>>
<</if>>
<</if>>
<</if>>
<</for>>
<</for>><<run new setup.QuestTemplate(
'trading_mission_neko_port_city', /* key */
"Trading Mission: Neko Port City", /* Title */
{ /* Author */
name: "mynameis123",
url: "",
},
[ /* tags */
'money',
'forest',
],
1, /* weeks */
4, /* expiration weeks */
{ /* roles */
'trader1': [ setup.qu.trader, 1],
'trader2': [ setup.qu.trader, 1],
'briber': [ setup.qu.briber, 1],
},
{ /* actors */
},
[ /* costs */
setup.qc.MoneyCustom(-1000),
],
'Quest_trading_mission_neko_port_city',
setup.qdiff.normal24, /* difficulty */
[ /* outcomes */
[
'Quest_trading_mission_neko_port_cityCrit',
[
setup.qc.Favor('neko', 50),
setup.qc.MoneyCustom(3000),
],
],
[
'Quest_trading_mission_neko_port_cityCrit',
[
setup.qc.MoneyCustom(2500),
],
],
[
'Quest_trading_mission_neko_port_cityFailure',
[
setup.qc.MoneyCustom(1000),
],
],
[
'Quest_trading_mission_neko_port_cityDisaster',
[
setup.qc.MoneyCustom(-2000),
setup.qc.Ire('neko', 2),
],
],
],
[ /* quest pool and rarity */
[setup.questpool.forest, setup.rarity.common],
],
[ /* restrictions */
],
[ /* expiration outcomes */
],
)>><p>
The <<lore location_npc>> is the bustling trade-hub in the <<lore
geo_pawninsula>>,
and many traders big and small make their living trading goods into and outside from
the city.
You can also try to make a tidy amount of profit trading there by sending a group of traders.
Well, as long as your traders are able to navigate through the labyrinth of
<<rep $company.neko>>... as well as capable of resisting
wasting their hard-earned profit on the many famous brothels lining out the streets.
</p><p>
Your <<uadj $g.trader1>> traders brought a large sum of money into your table,
and you can't help but grin at the sum.
<<if $gOutcome == 'crit'>>
While they may have also nipped some of them for a "tour-de-relations" with the local
neko, it surprisingly was not wasted, and your neko contacts spoke highly about
your slavers' "performances", increasing your reputation with them.
Still, you
<<else>>
But your keen senses are telling you that there are no way your slavers were able to
pass up the opportunity to make use of the local sluts, and you would have earned
so much more coins were some of them not spent on the streets.
You
<</if>>
let out an accusotary stare for the wasted money, and
<<if $g.trader1.isHasTrait('per_chaste')>>
<<rep $g.trader1>> blushed as <<they $g.trader1>> trader1|was reminded of the
"entertainment" provided.
<<elseif $g.trader1.isHasTrait('per_sly')>>
<<rep $g.trader1>> feigned ignorance at your accusations, still pretending nothing
had happened back in the city.
<<elseif $g.trader2.isHasTrait('per_chaste')>>
<<rep $g.trader2>> blushed as <<they $g.trader2>> trader2|was reminded of the
"entertainment" provided.
<<elseif $g.trader2.isHasTrait('per_sly')>>
<<rep $g.trader2>> feigned ignorance at your accusations, still pretending nothing
had happened back in the city.
<<elseif $g.briber.isHasTrait('per_chaste')>>
<<rep $g.briber>> blushed as <<they $g.briber>> briber|was reminded of the
"entertainment" provided.
<<elseif $g.briber.isHasTrait('per_sly')>>
<<rep $g.briber>> feigned ignorance at your accusations, still pretending nothing
had happened back in the city.
<<else>>
the trio of slavers accused each other for wasting the money, earning you a sigh.
<</if>>
</p><p>
Your <<uadj $g.trader2>> traders managed to earn a decent amount of money.
Unfortunately your traders were a bit too zealous on providing charity to the
poor harlots in <<lore location_npc>>, and only came back with a fraction of
the potential earnings. At least your usual grumblings are justified this time.
</p><p>
You thought to yourself, "Where did I go wrong?".
</p>
<p>
Not only did your <<uadjbad $g.trader1>> traders failed to negotiate a deal and in the process made fools of themselves in front of the <<rep $company.neko>>. Not only did they waste ALL of your hard earned money on literal pussy whores. They had the audacity to come back with DEBT that YOU have to pay.
</p>
<p>
You took a deep breath, perhaps this weren't your <<uadjbad $g.trader2>>
slavers fault but instead your own. Perhaps if you were more respectable to
your slavers, treat them like fellow brothers-in-slaves rather than
brain-dead peons that you won't hesitate to sacrifice if it made a quick
buck, then they would actually put in the effort to do the job right. Maybe
start paying them actual decent wages.
</p>
<<if !$g.briber.isYou() && $unit.player.isDominant() && !$g.briber1.isDominant()>>
<p>
You stopped your pondering, and decided to unleash your frustration
by dominantly commanding <<rep $g.briber1>> to take off <<their $g.briber1>> pants,
before moving behind them.
Without warning, you <<ustrippantsand $unit.player>>
shove your <<udickorstrap $unit.player>> deep inside
<<reps $g.briber>> <<uanus $g.briber>>.
You let out every ounce of frustration in the form of a cathartic climax, using
your slavers as if <<they $g.briber>> briber|was a slave, while the other two
watched, horrified by your actions.
</p>
<p>
You breathed a sigh of relief, but as post-nut-clarity sets in, you realized
that's the dumbest idea you had all week.
Still, the punishment was well deserved, and you allow them to exit your office,
including the butt-hurt <<rep $g.briber>>.
</p>
<</if>><<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 $gMenuVisible = false>>
<<set _units = $unit[$gUnit_key]>>
<<set _dom = setup.DOM.Menu.proposeSex($unit[$gUnit_key])>>
<<attach _dom>><<set $gMenuVisible = false>>
<<set _units = $gInteractiveSexUnitIds.map(key => $unit[key])>>
<<set _location = null>>
<<if $gInteractiveSexLocation_key>>
<<set _location = setup.sexlocation[$gInteractiveSexLocation_key]>>
<</if>>
<<set _dom = setup.DOM.Menu.interactivesex(_units, _location)>>
<<attach _dom>>
<div>
<<message "(Interactive Sex Scene Credits and Lilith's Throne)">>
<div class='helpcard'>
Many texts here are a borrowed from the free, excellent and very fun
[[Lilith's Throne|https://github.com/Innoxia/liliths-throne-public/]] game,
made by
[[Innoxia|https://subscribestar.adult/innoxia]].
If you want more of these actions, please consider giving Lilith's Throne a try!
See <<message '(here)'>>
<<include 'InnoxiaCredits'>>
<</message>>
for more details.
</div>
<</message>>
<<if $gDebug>>
<<foclink '(debug refresh)'>>
<<focgoto>>
<</foclink>>
<</if>>
</div><<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_lavish,
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_direct,
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_frugal,
setup.trait.per_sly,
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_mist,
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' >><img class='game-banner' src="./assets/logo.png"/>
<p>
Welcome to <b>Fort of Chains</b>.
</p>
<p>
[[(Download latest version)|https://gitgud.io/darkofocdarko/fort-of-chains]] |
[[(Play on browser)|https://darkofoc.itch.io/fort-of-chains]] |
[[(Contribute)|https://gitgud.io/darkofocdarko/fort-of-chains#how-to-contribute-content]] |
[[(F.A.Q)|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/faq.md]] |
[[(Official Discord server)|https://discord.com/invite/PTD9D7mZyg]] |
[[(Official subreddit)|https://www.reddit.com/r/FortOfChains/]]
</p>
<p>
<b>Contribute!</b>
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/fort-of-chains#how-to-contribute-content]]!
There is also a
[[Patreon|'https://www.patreon.com/darkofoc']] for tipping, if you'd like to give something in
return instead, but nothing is pay-walled behind it.
</p>
<hr/>
<p>
<b>Fort of Chains</b> is an
[[open source|https://gitgud.io/darkofocdarko/fort-of-chains]] |
<b>TEXT-ONLY</b> fantasy game set in an entirely fictional world.
The game contains explicit sexual content. By proceeding, you consent that
you are of legal age, and it is legal for you to play this game in your demesne.
The game is entirely fictional, and in no way depicts any of the contributor's views.
</p>
<p>
The game would like to express its deepest gratitude to the various contributors to this project:
</p>
<<focmove "(Artist Credits - Portraits)" "PortraitCredits">>
<<focmove "(Artist Credits - Content Images)" "ContentImagesCredits">>
<<focmove "(Artist Credits - Rooms)" "RoomCredits">>
<<focmove "(Artist Credits - Tilesets)" "TilesetCredits">>
<<focmove "(Author Credits)" "AuthorCredits">>
<<focmove "(Coder Credits)" "CoderCredits">>
<<focmove "(Other Credits)" "OtherCredits">>
[[(License)|https://gitgud.io/darkofocdarko/fort-of-chains#license]]
<hr/>
<<if setup.is_itch_io() >>
<div>
<<dangertext 'WARNING'>>: You are playing on the version compiled specifically
to be played directly on the web in
[[itch.io|https://darkofoc.itch.io/fort-of-chains]].
This version has <<dangertext 'less content'>> compared to the download-able full version,
because itch.io has a strict 1000 files limit, which this game has exceeded.
Consider downloading the [[full version with source code here|https://gitgud.io/darkofocdarko/fort-of-chains/]] or
[[just the full version at the bottom of this page|https://darkofoc.itch.io/fort-of-chains]].
</div>
<hr>
<</if>>
<div>
<<focbutton "Start a New Game" "ProloguePlayerGen">><</focbutton>>
</div>
<div>
<<button 'Contribute: Content Creation Tool' 'DevToolLobby'>>
<<run setup.DebugInit.contentCreatorInit()>>
<<run $menufilter.set('unit', 'display', 'compact')>>
<</button>>
</div>
<div>
<<button "In-Game Database" "WikiLobby">>
<<run setup.DebugInit.contentCreatorInit()>>
<<run $menufilter.set('unit', 'display', 'compact')>>
<</button>>
</div>
<hr/>
<div>
<<link '(Debug Start)'>>
<<run setup.DebugInit.debugModeInit()>>
<<focsavestategoto 'PrologueDebugGen'>>
<</link>>
</div>
<br/>
<div>
<<link '(Compute debug statistics in javascript console and then debug start)'>>
<<run setup.DebugInit.debugModeInit()>>
<<run setup.DOM.Menu.debugComputeStats()>>
<<focsavestategoto 'PrologueDebugGen'>>
<</link>>
</div>This document is best viewed [[online|https://gitgud.io/darkofocdarko/fort-of-chains/-/blob/master/docs/tileset_credits.md]].
# Tileset Credits
Many room images are created using [Tiled](https://www.mapeditor.org/).
The game utilizes tilesets from the following sources:
## LPC Submissions Merged
https://opengameart.org/content/lpc-submissions-merged
License
-------
CC-BY-SA 3.0:
http://creativecommons.org/licenses/by-sa/3.0/
GNU GPL 3.0:
http://www.gnu.org/licenses/gpl-3.0.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Terrain and Outside:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) - CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- barrels
- darkishgreen water
- buckets
- bridges
- cement
- cement stairs
- chests
- cup
- light dirt
- mid dirt
- dungeon
- grass1 (leftmost)
- grass2 (Middle grass)
- hole1 (left hole near lava)
- hole2 (middle hole)
- hole3 (black whole next to transparent water)
- lava
- lavarock (black dirt)
- mountains ridge (right of the water tiles)
- white rocks
- waterfall
- water/grass
- water (transparent water beside black hole)
Daniel Eddeland CC-BY-SA-3.0 / GPL 3.0
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Plowed Ground
- Water reeds
- Sand
- Sand with water
- Tall grass
- Wheat
- Young wheet (green wheat left of tall grass)
William Thompsonj
https://opengameart.org/content/lpc-sandrock-alt-colors
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- sand (near the wheat)
- sand with water
- grey dirt left of the lava)
Matthew Krohn (Makrohn)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Cave / Mountain steps originals from Lanea Zimmerman
Matthew Nash
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- stone tile (purplish color beside the dirt path bottom right corner)
Nushio
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Ice tiles
- Snow
- snow/ice
- Snow water
Casper Nilson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- grass with flowers
- stone pattern below cement
- tree stumps
- lily pads
MISSING:
Bricks / Paths above lillypads and left of barrels
The recoloing of the rocks on the left
The bigger stump
Bottom right tiles
Outside stone head and columns
Green water
Ladders
Brown path
Sewer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Outside Objects:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Tree trunks (for evergreen and oak)
- Tree Tops (for evergreen and oak)
Daniel Eddeland
(https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Farming stuff including food / crops / sack of grains
- Logs / Anvils
- Fish / boats / pier
- Bazaar / Merchant displays
- Wooden Fences
Caeless
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Shadowless veggies (originally made by Daniel Eddeland)
William Thompsonj
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- fallen leaves
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Metal Fence
- Wheelbarrows
- tent
- Gravestones
- harbor (stone platform in water)
- long boat
Barbara Rivera / C Phillips
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Leafless tree
Skorpio
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Trash / Barrel ( Top right corner)
MISSING:
Bricks bottom left
- Mushrooms need attributions
Bricks/tiles above pier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exterior:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- house (light red brick wall on far left and purple roof below it)
- house white door frame / brown door and white windows.
- signs under gold and drak brown brick house wall
Daniel Armstrong (AKA HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- castle walls
- castle floors
- castle outside
- castle floors outside
Xenodora CC-BY-3.0 / GPL 3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- water well
Tuomo Untinen CC-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- stone bridge
- silver windows
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Asain themed shrine including red lantern
- foodog statue
- Toro
- Cherry blossom tree
- Torii
- Grey Roof
- Flag poles
- Fancy white and black entrance
- white door
- green and white walls / roof / windows
- shrub plant in white square pot
- flower box
Steampun-a-fy: Amaris / Krusimira
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- dark purple brick near purple roof
- bronze and wood house (gold and dark brick)
- dark wooden stairs
- gold and dark chimney
- grey door
- gears
- pipes
- dark wooden windows
Leo Villeveygoux
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- white bricks (limestone wall)
Skyler Robert Collady
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Grey home assets
MISSING attributions:
Graves bottom right
Water filled boat
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Interior
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- bookshelves (to the left of light brown chairs)
- cabinents above bookshelves
- counters (to the right of the kitchen table (between the white bathroom tiles) and bottom left by the rug.
- blue wallpaper
- kitchen furnace, pots and sink.
- country inside (blue bed and light brown chairs)
- red royal bed with white pillows.
- Mahogany kitchen table (near the dungeon bed with a black blanket)
- Yellow curtains
- Flower pot with tall pink flower
- Empty flower pots
- Chairs with gold seats (between the fireplaces)
- Fireplaces
- White and red mahogany stairs
- Double Rounded doors
- Flower vases
- Purple/Blue Tiles near white brick wall
- White brick wall
- White Columns
- Black candle-holder stand with candles
- Royal rug beside cabinents
- White stairs with runway / platform
- Grandfather clock
- Blue wallpaper with woodem trim
- Wood tiles
- Long painting
- Royal chairs ( gold seats)
- Rounded white windows
- Portrait painting
- small end / round tables
- Royal bed with red pillows
- white china
By Sharm but Commissioned by William Thompsonj
- campfire
- skeletons
- dungeon beds
- wood chairs and tables between the calderon and the fancy door rounded door
- calderon
- cobwebs
- dungeon prison wall and door/gate (beside fancy red and gold rugs)
- dirt by the dungeon beds
- rat
Daniel Armstrong (Aka HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- castle light Sources (torches)
- red carpets
- grey brick top of walls
Matthew Nash
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Public Toilets
- Bathroom tiles (white and black)
Tuomo Untinen
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Pots with cover (based from Sharm's pots)
- Yellow stone floor
- Short paintings
- royal chair modification
- cupboards based on Sharm's (with china)
- small footchair
- piano
MISSING attributions:
Some bottomleft tiles
Banners
Sideways table
Stacked barrels
Stacked chess
Things to left of the pots
Some of the furniture below the beds
Some of the single beds
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Interior 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- brown stairs with blue
- Fountain
- Pool
- FLoor tiles
- Everything between top row (between toilet stalls and bookcases) down to the floor tiles
Xenodora
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Steel floor
Tuomo Untinen
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Armor and sheilds
- Cheese and bread
- Ship
Janna - CC0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Beds
- Dressers / book shelves
- Wardrobe
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Red and Blue stairs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Extensions Folder:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://opengameart.org/content/lpc-adobe-building-set
https://opengameart.org/content/lpc-arabic-elements
- Adobe / Arabic - Commissioned by William Thompsonj
## [LPC] Dungeon Elements
http://opengameart.org/content/lpc-dungeon-elements
Graphic artist: Sharm
Contributor: William.Thompsonj
Licensed under: CC-BY-SA 4.0
## [LPC] Containers
https://opengameart.org/content/lpc-containers
[LPC] Containers by bluecarrot16, Lanea Zimmerman (Sharm), William Thompson, Tuomo Untinen (Reemax), Evert, Buch, Blarumyrran, n2liquid, Jetrel, Guido Bos, Hyptosis, Bonsaiheldin, NaRNeRZz, PriorBlue, Jerom, 7Soul.
Please credit all the above authors, include a link back to: https://opengameart.org/content/lpc-containers
Based on:
Liberated Pixel Cup (LPC) Base Assets (sprites & map tiles)
Lanea Zimmerman (Sharm)
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0
http://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
LPC: Modified base tiles
Lanea Zimmerman (Sharm), William Thompson
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
http://opengameart.org/content/lpc-modified-base-tiles
[LPC] House interior and decorations
Tuomo Untinen (Reemax)
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
http://opengameart.org/content/lpc-house-interior-and-decorations
Cute dungeon LPC edit
Evert, Buch, Sharm, William Thompson
CC-BY 3.0
http://opengameart.org/content/cute-dungeon-lpc-edit
A cute dungeon
Buch
CC-BY 3.0
https://opengameart.org/content/a-cute-dungeon
Treasure chests, 32x32 and 16x16
Blarumyrran
CC0
http://opengameart.org/content/treasure-chests-32x32-and-16x16
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
Mage City Arcanos
Hyptosis
CC0
https://opengameart.org/content/mage-city-arcanos
[LPC] Dungeon Elements
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-dungeon-elements
Exterior 32x32 Town tileset
n2liquid
CC-BY-SA 4.0
https://opengameart.org/content/exterior-32x32-town-tileset
Treasure chests 32x32
Bonsaiheldin
CC-BY 4.0
https://opengameart.org/content/treasure-chests-32x32
LPC: Interior Castle Tiles
Lanea Zimmerman (Sharm)
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-interior-castle-tiles
Adventure Tileset (Unfinished)
NaRNeRZz
CC0
https://opengameart.org/content/adventure-tileset-unfinished
Recolor all the items!!!
PriorBlue, Jerom, 7Soul
CC-BY-SA 3.0
https://opengameart.org/content/recolor-all-the-items
32x32 fantasy tileset
Jerom
CC-BY-SA 3.0
https://opengameart.org/content/32x32-fantasy-tileset
420-Pixel-Art-Icons-for-RPG
7soul
CC0
https://www.deviantart.com/7soul1/art/420-Pixel-Art-Icons-for-RPG-129892453
## [LPC] Foods
"[LPC] Foods" by bluecarrot16, Daniel Eddeland (daneeklu), Joshua Taylor, Richard Kettering (Jetrel), thekingphoenix, RedVoxel, and Molly "Cougarmint" Willits.
https://opengameart.org/content/lpc-food
### BASED ON:
[LPC] Farming tilesets, magic animations and UI elements
DE = Daniel Eddeland (Daneeklu)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
Fruit and Veggie Inventory
JT = Joshua Taylor
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/fruit-and-veggie-inventory
RPG item set
RK = Richard Kettering (Jetrel)
CC0
https://opengameart.org/content/rpg-item-set
Icons: Food.
TKP = thekingphoenix
CC0
http://opengameart.org/content/icons-food
Food Items 16x16
RV = RedVoxel
CC0
https://opengameart.org/content/food-items-16x16
Chicken and Pork Icon Pack
MCW = Molly "Cougarmint" Willits
CC-BY 3.0 / OGA-BY 3.0
https://opengameart.org/content/chicken-and-pork-icon-pack
LPC style farm animals
DE = Daniel Eddeland (Daneeklu)
CC-BY 3.0 / GPL 2.0
https://opengameart.org/content/lpc-style-farm-animals
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
### LIST OF ITEMS AND LICENSES
All items edited by bluecarrot16. Original authors listed, otherwise drawn from scratch by bluecarrot16.
- If you use this entire set, the license is CC-BY-SA 3.0+ or GPL v3.0+.
- All individual can be used under either of those licenses (CC-BY-SA 3.0+ or GPL 3.0+).
- Some items can also be used under other licenses, according to the table below.
- For items with a CC-BY, CC-BY-SA, OGA-BY, or GPL license, you must credit the original author(s) as well as bluecarrot16, link to the original submissions (above) and include a link back to this page <https://opengameart.org/content/lpc-food>.
- For items licensed CC0, credit and link back to this page is appreciated, but not required.
EXAMPLE 1: Watermelon
Watermelon, by Joshua Taylor, Richard Kettering (Jetrel), and bluecarrot16.
CC-BY-SA 3.0
https://opengameart.org/content/lpc-food
Based on:
https://opengameart.org/content/fruit-and-veggie-inventory
https://opengameart.org/content/rpg-item-set
EXAMPLE 2: Leeks (credit optional due to CC0 license)
Leeks by bluecarrot16
CC0
https://opengameart.org/content/lpc-food
#### PRODUCE
#### FRUITS / VEGETABLES
| Item | Other Authors | Other Licenses | | Family | Scientific |
|-----------------------------------------------------------------------------------|---------------|----------------|-----|--------------------------|------------------------------|
| Sweet potatoes | DE | | | Morning glory | Convolvulaceae |
| Russet potatoes | JT | | | Nightshade | Solanaceae |
| Gold potatoes | DE | | | Nightshade | Solanaceae |
| Purple potatoes | DE | | | Nightshade | Solanaceae |
| Cherry tomatoes | | | | Nightshade | Solanaceae |
| Tomatoes | DE | | | Nightshade | Solanaceae |
| Large tomatoes | JT | | | Nightshade | Solanaceae |
| Golden berry / cape gooseberry / Uchuva | | CC0 | V2 | Nightshade | Solanaceae |
| Naranjilla | | CC0 | V2 | Nightshade | Solanaceae |
| Eggplant | DE, JT | | | Nightshade | Solanaceae |
| Poblano pepper / chile ancho | DE | | V2 | Nightshade | Solanaceae |
| Hot pepper | DE | | | Nightshade | Solanaceae |
| Green bell pepper | JT | | | Nightshade | Solanaceae |
| Red bell pepper | JT | | | Nightshade | Solanaceae |
| Orange bell pepper | JT | | | Nightshade | Solanaceae |
| Yellow bell pepper | JT | | | Nightshade | Solanaceae |
| Mixed Chili peppers / Hot peppers / Poblano, Cayenne, Serrano, Habanero, Jalapeño | | CC0 | | Nightshade | Solanaceae |
| Jalapeño pepper | | | V2 | Nightshade | Solanaceae |
| Habanero / Scotch Bonnet pepper | | | V2 | Nightshade | Solanaceae |
| Cayenne pepper | | | V2 | Nightshade | Solanaceae |
| Madame Jeanette / Yellow pepper | | | V2 | Nightshade | Solanaceae |
| Cubanelle pepper | | | V2 | Nightshade | Solanaceae |
| Watermelon | JT, RK | | | Gourd | Cucurbitaceae |
| Honeydew melon | | CC0 | | Gourd | Cucurbitaceae |
| Cantaloupe melon | | CC0 | | Gourd | Cucurbitaceae |
| Kiwano melon / Horned melon | | CC0 | V2 | Gourd | Cucurbitaceae |
| Delicata squash | | CC0 | V2 | Gourd | Cucurbitaceae |
| Acorn squash | | CC0 | | Gourd | Cucurbitaceae |
| Pumpkin | JT | | | Gourd | Cucurbitaceae |
| Crookneck squash | JT | | | Gourd | Cucurbitaceae |
| Butternut squash | | CC0 | | Gourd | Cucurbitaceae |
| Ornamental gourds: turban squash, gooseneck, small pumpkins | | CC0 | | Gourd | Cucurbitaceae |
|-----------------------------------------------------------------------------------|---------------|----------------|-----|--------------------------|------------------------------|
| Romaine lettuce | | CC0 | | Daisy | Asteraceae |
| Iceberg lettuce | RK | CC0 | | Daisy | Asteraceae |
| Radicchio | | CC0 | V2 | Daisy | Asteraceae |
| Artichoke | DE | | | Daisy | Asteraceae |
| Tarragon | | CC0 | V2 | Daisy | Asteraceae |
| Cardoon / Burdock / Artichoke thustle | | CC0 | V2 | Daisy | Asteraceae |
| Burdock root / Cardoon root | | CC0 | V2 | Daisy | Asteraceae |
| Chamomile / camomile | | CC0 | V2 | Daisy | Asteraceae |
| Lacinato kale / Tuscan kale / Dinosaur kale | | CC0 | V2 | Crucifers | Brassicaceae |
| Kale | | CC0 | | Crucifers | Brassicaceae |
| Red cabbage / Purple cabbage | | CC0 | | Crucifers | Brassicaceae |
| Green cabbage | | CC0 | | Crucifers | Brassicaceae |
| Bok choy | | CC0 | | Crucifers | Brassicaceae |
| Brussels sprouts | | CC0 | | Crucifers | Brassicaceae |
| Cauliflower | JT | | | Crucifers | Brassicaceae |
| Broccoli | JT | | | Crucifers | Brassicaceae |
| Broccoli rabe / Broccolini | | CC0 | V2 | Crucifers | Brassicaceae |
| Kohlrabi | | CC0 | | Crucifers | Brassicaceae |
| Radishes | JT | | | Crucifers | Brassicaceae |
| Daikon Radishes | DE | | V2 | Crucifers | Brassicaceae |
| Turnips | JT | | | Crucifers | Brassicaceae |
| Rutabaga / Swede | JT | | | Crucifers | Brassicaceae |
| Arugula / Rocket / Eruca | | CC0 | V2 | Crucifers | Brassicaceae |
| Mugwort / Artemisia | | CC0 | V2 | Crucifers | Brassicaceae |
| Romanesco broccoli / Roman cauliflower | | CC0 | V2 | Crucifers | Brassicaceae |
| Cress | | CC0 | V2 | Crucifers | Brassicaceae |
| Chayote | | CC0 | V2 | Gourd | Cucurbitaceae |
| Zucchini / Green squash | DE | | | Gourd | Cucurbitaceae |
| Yellow squash / Summer squash | DE | | | Gourd | Cucurbitaceae |
| Cucumber | RK | CC0 | | Gourd | Cucurbitaceae |
| Pepino dulce | | CC0 | V2 | Gourd | Cucurbitaceae |
| Ornamental gourds: pan patty squash, small pumpkins | | CC0 | | Gourd | Cucurbitaceae |
|-----------------------------------------------------------------------------------|---------------|----------------|-----|--------------------------|------------------------------|
| Peas / Snap peas / Sugar peas | JT | | | Bean | Fabaceae |
| Green beans | | CC0 | | Bean | Fabaceae |
| Soybeans | | CC0 | V2 | Bean | Fabaceae |
| Black beans | | CC0 | V2 | Bean | Fabaceae |
| Chickpeas / Garbanzo beans | | CC0 | V2 | Bean | Fabaceae |
| Kidney beans | | CC0 | V2 | Bean | Fabaceae |
| Black-eyed peas | | CC0 | V2 | Bean | Fabaceae |
| Pinto beans | | CC0 | V2 | Bean | Fabaceae |
| Navy beans / White beans | | CC0 | V2 | Bean | Fabaceae |
| Coffee | | CC0 | | Bean | Fabaceae |
| Black lentils | | CC0 | V2 | Bean | Fabaceae |
| Green lentils | | CC0 | V2 | Bean | Fabaceae |
| Red lentils | | CC0 | V2 | Bean | Fabaceae |
| Yellow lentils | | CC0 | V2 | Bean | Fabaceae |
| Peanuts | | CC0 | V2 | Bean | Fabaceae |
| Fenugreek | | CC0 | V2 | Bean | Fabaceae |
| Licorice root | | CC0 | V2 | Bean | Fabaceae |
| Jicama / Mexican yam bean / Mexican turnip | JT | | V2 | Bean | Fabaceae |
| Lemongrass | | CC0 | V2 | Bean | Fabaceae |
| Lotus root | | CC0 | V2 | Lotus | Nelumbonaceae |
| Taro root | | CC0 | V2 | Grass | Poaceae |
| Bamboo | | CC0 | V2 | Grass | Poaceae |
| Rice | | CC0 | V2 | Grass | Poaceae |
| Oats | | CC0 | V2 | Grass | Poaceae |
| Barley | | CC0 | V2 | Grass | Poaceae |
| Rye | | CC0 | V2 | Grass | Poaceae |
| Wheat | | CC0 | V2 | Grass | Poaceae |
| Quinoa | | CC0 | V2 | Grass | Poaceae |
| Corn | DE | | | Grass | Poaceae |
| Corn | JT | | | Grass | Poaceae |
| Sugar cane | | CC0 | V2 | Grass | Poaceae |
| Amaranth | | CC0 | V2 | Amaranth | Amaranthaceae |
|-----------------------------------------------------------------------------------|---------------|----------------|-----|--------------------------|------------------------------|
| Asparagus | | CC0 | | Asparagus | Asparagaceae |
| Agave / Maguey | | CC0 | V2 | Asparagus | Asparagaceae |
| Aloe | | CC0 | V2 | | Asphodelaceae |
| Nori | | CC0 | V2 | Algae | |
| Fiddlehead | | CC0 | V2 | Fern | |
| Nopal / Prickly pear cactus | | CC0 | V2 | Cactaceae | |
| Basil | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Oregano | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Lavender | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Mint | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Sage | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Rosemary | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Thyme | | | V2 | Mint / Deadnettle / Sage | Lamiaceae |
| Pineapple | | CC0 | | | Bromeliaceae |
| Kiwi / Kiwifruit | | CC0 | | Chinese gooseberry | Actinidiaceae, Ericales |
| Yuca / Cassava | DE | | | | Euphorbiaceae, Malpighiales |
| Passionfruit | | | V2 | | Passifloraceae, Malpighiales |
| Beets | JT | | | Amaranth | Amaranthaceae |
| Spinach | | CC0 | V2 | Amaranth | Amaranthaceae |
| Chard, red | | | V2 | Amaranth | Amaranthaceae |
| Chard, yellow | | | V2 | Amaranth | Amaranthaceae |
| Sugarbeet | DE | | V2 | Amaranth | Amaranthaceae |
| Vanilla | | CC0 | V2 | Orchid | Orchidaceae |
| Saffron | | CC0 | V2 | | Iridaceae, Asparagales |
| Garlic | JT | | | Onion | Amaryllidaceae |
| Yellow onion / Sweet onion | JT | | | Onion | Amaryllidaceae |
| Red onion / Purple onion | JT | | | Onion | Amaryllidaceae |
| White onion | JT | | | Onion | Amaryllidaceae |
| Green onion | JT | | | Onion | Amaryllidaceae |
| Leeks | | CC0 | | Onion | Amaryllidaceae |
| Chives | | CC0 | V2 | Onion | Amaryllidaceae |
| Rhubarb | | CC0 | | Buckwheat | Polygonaceae |
|-----------------------------------------------------------------------------------|---------------|----------------|-----|--------------------------|------------------------------|
| Strawberry | JT | | | | Rosaceae |
| Blackberries | | CC0 | | | Rosaceae |
| Raspberries | | CC0 | | | Rosaceae |
| Blueberries | | CC0 | V2* | Heath / Heather | Ericaceae, Ericales |
| Cranberries | | CC0 | V2 | Heath / Heather | Ericaceae, Ericales |
| Elderberries | | CC0 | V2 | Moschatel | Adoxaceae |
| Mulberries | | CC0 | V2 | Fig | Moraceae |
| Gooseberry | | CC0 | V2 | Gooseberry | Grossulariaceae |
| Red grapes | | CC0 | V2 | Grape | Vitaceae |
| Black grapes | | CC0 | V2 | Grape | Vitaceae |
| Purple grapes | | CC0 | V2* | Grap | Vitaceae |
| Green grapes | | CC0 | V2* | Grape | Vitaceae |
| Ginger | | CC0 | V2 | Ginger | Zingiberaceae |
| Turmeric | | CC0 | V2 | Ginger | Zingiberaceae |
| Ginseng | | CC0 | V2 | | Araliaceae |
| Horseradish | | CC0 | V2 | Cabbage | Brassicaceae |
| Wasabi | | CC0 | V2 | Cabbage | Brassicaceae |
| Mustard | | CC0 | V2 | Cabbage | Brassicaceae |
| Sesame | | CC0 | V2 | | Pedaliaceae |
| Hops | | CC0 | | Cannabis | Cannabaceae |
| Cotton | | CC0 | V2 | Mallow | Malvaceae |
| Okra | | CC0 | V2 | Mallow | Malvaceae |
| Black tea leaves | | CC0 | V2 | Tea | Theaceae, Ericales |
| Green tea leaves | | CC0 | V2 | Tea | Theaceae, Ericales |
| Carrots | JT | | | Carrot | Apiaceae |
| Parsnips | JT | | | Carrot | Apiaceae |
| Fennel bulb | | CC0 | V2* | Carrot | Apiaceae |
| Parsley | | CC0 | V2 | Carrot | Apiaceae |
| Celery | | CC0 | V2* | Carrot | Apiaceae |
| Cilantro | | CC0 | V2 | Carrot | Apiaceae |
| Dill | | | V2 | Carrot | Apiaceae |
| Cumin | | | V2 | Carrot | Apiaceae |
#### MUSHROOMS
| Item | Other Authors | Other Licenses | |
|----------------------------------------------------------------------------|---------------|----------------|----|
| Shiitake | | CC0 | V2 |
| Common mushroom / button mushroom / crimini mushroom / champignon mushroom | | CC0 | |
| Oyster mushrooms | | CC0 | |
| Sulfur shelf mushrooms / Laetiporus / Chicken of the Woods | | CC0 | V2 |
| Maitake / Ram's head | | CC0 | V2 |
| Chanterelle mushrooms | | CC0 | V2 |
| Portobello mushrooms | | CC0 | |
| King trumpet mushrooms / King oyster mushrooms / French horn mushroom | | CC0 | |
| Black morels | | CC0 | |
| Enokitake / Enoki | | CC0 | |
#### FRUITS
| Item | Other Authors | Other Licenses | | Family | Scientific |
|------------------------------------------|---------------|----------------|-----|-------------------------|------------------------|
| Red delicious apples / red apples | JT | | | Rose | Rosaceae |
| Granny smith apples / green apples | JT | | | Rose | Rosaceae |
| Golden delicious apples / yellow apples | JT | | | Rose | Rosaceae |
| Golden delicious apples / yellow apples | JT | | | Rose | Rosaceae |
| Honeycrisp apples / variegated apples | JT | | | Rose | Rosaceae |
| Bartlett pears / Green pears | JT | | | Rose | Rosaceae |
| D'anjou pears / Yellow pears | JT | | | Rose | Rosaceae |
| Bosc pears / Brown pears | JT | | | Rose | Rosaceae |
| Cherries | JT | | | Rose | Rosaceae |
| Apricots | | | V2 | Rose | Rosaceae |
| Peaches | | CC0 | V2* | Rose | Rosaceae |
| Almond | | CC0 | | Rose | Rosaceae |
| Plums | | CC0 | | Rose | Rosaceae |
| Tangerines / Mandarin oranges / Kumquats | | CC0 | | Citrus | Rutaceae |
| Oranges | JT | | | Citrus | Rutaceae |
| Grapefruit | JT | | V2 | Citrus | Rutaceae |
| Yuzu | | CC0 | V2 | Citrus | Rutaceae |
| Lemon | JT | | V2* | Citrus | Rutaceae |
| Lime | JT | | V2* | Citrus | Rutacea |
| Pomegranate | | CC0 | | | Lythraceae, Myrtales |
| Olives | | CC0 | V2 | Olive | Oleaceae |
| Starfruit / Carambola | | CC0 | | | Oxalidaceae |
| Poppy | | CC0 | V2 | Poppy | Papaveraceae |
| Cherimoya | | | | Custard apple / Soursop | Annonaceae, Magnoliids |
| Soursop / Graviola | | CC0 | V2 | Custard apple / Soursop | Annonaceae, Magnoliids |
| Figs | | CC0 | | Fig | Moraceae |
| Jackfruit / Jack tree | | CC0 | | Fig | Moraceae |
| Breadfruit | | CC0 | | Fig | Moraceae |
| Papaya | | CC0 | | | Caricaceae |
| Dragonfruit / Pitaya / Pitahaya | | CC0 | V2 | Cactus | Cactaceae |
| Rambutan | | CC0 | V2 | Soapberry | Sapindaceae |
| Lychee | | CC0 | V2 | Soapberry | Sapindaceae |
|------------------------------------------|---------------|----------------|-----|-------------------------|------------------------|
| Banana | JT | | V2* | Banana | Musaceae |
| Poovan banana | JT | | V2 | Banana | Musaceae |
| Red banana | JT | | V2 | Banana | Musaceae |
| Plantain | | | v2 | Banana | Musaceae |
| Coconut | | CC0 | V2 | Palm | Arecaceae |
| Date | | CC0 | V2 | Palm | Arecaceae |
| Heart of Palm | | CC0 | V2 | Palm | Arecaceae |
| Acai | | CC0 | V2 | Palm | Arecaceae |
| Juniper | | CC0 | V2 | Cypress | Cupressaceae |
| Bay laurel | | CC0 | V2 | Laurel | Lauraceae |
| Cinammon | | CC0 | V2 | Laurel | Lauraceae |
| Avocado | | CC0 | V2 | Laurel | Lauraceae |
| Poppy | | CC0 | V2 | | Papaveraceae |
| Nutmeg | | CC0 | V2 | Magnolia | Magnoliids |
| Peppercorn | | CC0 | V2 | Magnolia | Magnoliids |
| Brazil nut | | CC0 | V2 | | Ericales |
| Persimmon | | CC0 | V2 | | Ericales |
| Guava | | CC0 | V2 | Myrtles | Myrtaceae |
| Clove | | CC0 | V2 | Myrtles | Myrtaceae |
| Allspice | | CC0 | V2 | Myrtles | Myrtaceae |
| Kola | | CC0 | V2 | Mallow | Malvaceae |
| Durian | | CC0 | V2 | Mallow | Malvaceae |
| Cacao | | CC0 | V2 | Mallow | Malvaceae |
| Mango | | CC0 | | Cashew / Sumac | Anacardiaceae |
| Mango | | CC0 | | Cashew / Sumac | Anacardiaceae |
| Pistachio | | CC0 | | Cashew / Sumac | Anacardiaceae |
| Sumac | | CC0 | V2 | Cashew / Sumac | Anacardiaceae |
| Cashew | | CC0 | | Cashew / Sumac | Anacardiaceae |
| Chestnut | | CC0 | V2 | Beech | Fagales, Fagaceae |
| Pecan | | CC0 | | Beech | Fagales, Juglandaceae |
| Walnut | | CC0 | | Walnut | Fagales, Juglandaceae |
| Macademia | | CC0 | | | Proteaceae |
| Tamarind | | CC0 | | Bean | Fabaceae |
#### BAKED GOODS & CEREAL PRODUCTS
#### BREAD
| Item | Other Authors | Other Licenses |
|----------------------------|---------------|----------------|
| Vienna small | RV | CC0 |
| Loaf / White bread | RK | CC0 |
| Vienna large | TKP | CC0 |
| Baguette | | CC0 |
| Pullman loaf / Rye | | CC0 |
| Coburg large | | CC0 |
| ??? | | CC0 |
| ??? | | CC0 |
| Braided | | CC0 |
| Ciabatta | | CC0 |
| Crossed | | CC0 |
| Crossed 2 | | CC0 |
| Focaccia | | CC0 |
| Braided | | CC0 |
| Breadsticks | | CC0 |
| Tortillas | | CC0 |
|----------------------------|---------------|----------------|
| English Muffin | | CC0 |
| Kaiser roll | | CC0 |
| Sesame bun / Hamburger bun | | CC0 |
| Crescent roll | | CC0 |
| Coburg roll | | CC0 |
| Muffin | | CC0 |
| Cob / Boule roll | | CC0 |
| Pretzel | | CC0 |
| Croissant | | CC0 |
| Bagel | | CC0 |
|----------------------------|---------------|----------------|
| Chocolate cake | | CC0 |
| Pie | | CC0 |
| Braided Pie | | CC0 |
| Pancakes | | CC0 |
| Waffles | | CC0 |
| Donut | | CC0 |
#### ANIMAL PRODUCTS
#### CHEESE, DAIRY, EGGS
| Item | Other Authors | Other Licenses |
|--------------------------|---------------|----------------|
| Brie | TKP | CC0 |
| Gouda | TKP | CC0 |
| White Swiss | TKP | CC0 |
| Cheddar | TKP | CC0 |
| Yellow Swiss | TKP | CC0 |
| Smoked gruyere | | CC0 |
| Muenster | | CC0 |
| Blue cheese / Gorgonzola | TKP | CC0 |
| Feta | | CC0 |
| Mozarella | | CC0 |
| Manchengo | | CC0 |
| Jack | | CC0 |
| Parmesean | | CC0 |
|--------------------------|---------------|----------------|
| White eggs | | CC0 |
| Brown eggs | | CC0 |
| Hardboiled eggs | | CC0 |
| Fried eggs | | CC0 |
| Scrambled eggs | | CC0 |
| Butter | | CC0 |
#### MEAT
| Item | Other Authors | Other Licenses |
|-------------------------|---------------|------------------------|
| Chicken | MCW | CC-BY 3 / OGA-BY 3 |
| Chicken drumstick | RK | CC0 |
| Rotisserie chicken | DE | |
| Large chicken drumstick | DE | |
| Turkey | DE | |
| Chicken breast | DE | |
| Chicken breast, medium | DE | |
| Chicken breast, small | DE | |
| Chop | RK | CC0 |
| Sausage | RK | CC0 |
| Ribeye steak | DE | |
| Ribeye steak, small | DE | |
| T-bone steak | | CC0 |
| Rib roast | | CC0 |
| Sliced rib roast | | CC0 |
| Back ribs | | CC0 |
| Ham | DE | |
| Pork chop | MCW | CC-BY 3.0 / OGA-BY 3.0 |
| Pork chop, small | | CC0 |
| Bacon | | CC0 |
| Lamb chop | | |
| Kebab | | CC0 |
| Meatballs | | CC0 |
| Pig | DE | |
#### SEAFOOD
| Item | Other Authors | Other Licenses |
|-----------|---------------|----------------|
| Mussel | | CC0 |
| Scallop | | CC0 |
| Oyster | | CC0 |
| Crab | | CC0 |
|-----------|---------------|----------------|
| Anchovy | | CC0 |
| Perch | DE | |
| Salmon | DE | |
| Trout | DE | |
| Catfish | DE | |
| Walleye | DE | |
| Carp | DE | |
| Bass | | CC0 |
| Flounder | | CC0 |
| Cod | DE | |
| Tilapia | | CC0 |
| Herring | | CC0 |
| Haddock | | CC0 |
| Calamari | | CC0 |
| Lobster | | CC0 |
|-----------|---------------|----------------|
| Grouper | DE | |
| Halibut | | CC0 |
| Tuna | DE | |
| Swordfish | | CC0 |
| Pike | DE | |
#### Future ideas
- Fruits and veggies
- Cardamom
- Wax gourd
- Muskmelon
- Water spinach
- Huckleberry
- Watercress
- Quince
- Blood orange
- Indian gooseberry https://en.wikipedia.org/wiki/Phyllanthus_emblica
- loquat https://en.wikipedia.org/wiki/Loquat
- Indian jujube https://en.wikipedia.org/wiki/Ziziphus_mauritiana
- Bean sprouts
- Napa cabbage
- Savoy cabbage
- Bamboo shoots
- Baby corn
- Herbs
+ Alfalfa
+ Absinthe wormwood
+ Anise
+ Lilac
+ Mandrake
+ Marjoram
+ Mitsuba
+ Verbena
+ Yarrow
- Flowers
+ Poppy
+ Sunflower
+ Tulip
- Breads: https://en.wikipedia.org/wiki/List_of_breads
- Pastries and Desserts
+ Cupcakes
+ Piped cake
+ Bundt cake
+ Cinammon rolls
- Meats:
- Jerkey
- Fish/seafood:
- Eel
- Shrimp/prawn
- Abalone
- Basa
- Crappie
- Crayfish
- Kingfish
- Mackerel
- Marlin
- Milkfish
- Orange roughy
- Pacific saury
- Pollock
- Sardine
- Sole
- Swai
- Sea urchin
## [LPC] Alchemy
https://opengameart.org/content/lpc-alchemy
"[LPC] Alchemy" by bluecarrot16, Lanea Zimmerman (Sharm), PriorBlue, Jerom, and Wolthera van Hövell tot Westerflier (TheraHedwig). Commissioned by MedicineStorm.
Liberated Pixel Cup (LPC) Base Assets (sprites & map tiles)
Lanea Zimmerman (Sharm)
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0
http://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
Recolor all the items!!!
PriorBlue, Jerom (items from 7Soul not used)
CC-BY-SA 3.0
https://opengameart.org/content/recolor-all-the-items
32x32 fantasy tileset
Jerom
CC-BY-SA 3.0
https://opengameart.org/content/32x32-fantasy-tileset
LPC compatible Ancient Greek Architecture
Wolthera van Hövell tot Westerflier (TheraHedwig)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-compatible-ancient-greek-architecture
## LPC Tile Atlas2
https://opengameart.org/content/lpc-tile-atlas2
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
- See the file: cc-by-sa-3.0.txt
GNU GPL 3.0:
- http://www.gnu.org/licenses/gpl-3.0.html
- See the file: gpl-3.0.txt
Note only some files from the entries are selected.
*Additional license information.
Assets from:
LPC participants:
----------------
Barbara Rivera
- tree,tombstone
Casper Nilsson
*GNU GPL 3.0 or later
email: casper.nilsson@gmail.com
Freenode: CasperN
OpenGameArt.org: C.Nilsson
- LPC C.Nilsson (2D art)
Chris Phillips
- tree
Daniel Eddeland
*GNU GPL 3.0 or later
- Tilesets of plants, props, food and environments, suitable for farming / fishing sims and other games.
- Includes wheat, grass, sand tilesets, fence tilesets and plants such as corn and tomato.
- Also includes village/marketplace objects like sacks, food, some smithing equipment, tables and stalls.
Anamaris and Krusmira (aka? Emilio J Sanchez)
- Sierra__Steampun-a-fy (with concept art)
Jonas Klinger
- Skorpio's SciFi Sprite Pack
Joshua Taylor
- Fruit and Veggie Inventory
Leo Villeveygoux
- Limestone Wall
Mark Weyer
- signpost+shadow
Matthew Nash
- Public Toilet Tileset
Skyler Robert Colladay
- FeralFantom's Entry
BASE assets:
------------
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- barrel.png
- brackish.png
- buckets.png
- bridges.png
- cabinets.png
- cement.png
- cementstair.png
- chests.png
- country.png
- cup.png
- dirt2.png
- dirt.png
- dungeon.png
- grassalt.png
- grass.png
- holek.png
- holemid.png
- hole.png
- house.png
- inside.png
- kitchen.png
- lava.png
- lavarock.png
- mountains.png
- rock.png
- shadow.png
- signs.png
- stairs.png
- treetop.png
- trunk.png
- waterfall.png
- watergrass.png
- water.png
- princess.png and princess.xcf
Stephen Challener (AKA Redshrike)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- female_walkcycle.png
- female_hurt.png
- female_slash.png
- female_spellcast.png
- male_walkcycle.png
- male_hurt.png
- male_slash.png
- male_spellcast.png
- male_pants.png
- male_hurt_pants.png
- male_fall_down_pants.png
- male_slash_pants.png
Charles Sanchez (AKA CharlesGabriel)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- bat.png
- bee.png
- big_worm.png
- eyeball.png
- ghost.png
- man_eater_flower.png
- pumpking.png
- slime.png
- small_worm.png
- snake.png
Manuel Riecke (AKA MrBeast)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- hairfemale.png and hairfemale.xcf
- hairmale.png and hairmale.xcf
- soldier.png
- soldier_altcolor.png
Daniel Armstrong (AKA HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Castle work:
- castlewalls.png
- castlefloors.png
- castle_outside.png
- castlefloors_outside.png
- castle_lightsources.png
# [LPC] Farming tilesets, magic animations, and UI elements
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
Farming tilesets, magic animations and UI elements
--------------------------
LPC submission by Daniel Eddeland
The submission contains:
*Tilesets of plants, props, food and environments, suitable for farming / fishing sims and other games. Includes wheat, grass, sand tilesets, fence tilesets and plants such as corn and tomato. Also includes village/marketplace objects like sacks, food, some smithing equipment, tables and stalls.
*Animations for magic attacks and shields: Fire Lion, Ice shield, Torrentacle (water tentacle), Snakebite and Turtle shell.
*Some UI elements of scrolls and wooden blocks.
*A sword with animation, and a 3-frame "grab" animation, in the "character" directory.
The art is dual licensed under the following licenses.
*CC-BY-SA 3.0
*GNU GPL 3.0 or later
http://creativecommons.org/licenses/by-sa/3.0/
http://www.gnu.org/licenses/gpl-3.0.html
Please attribute creator as Daniel Eddeland.
Please include a link to opengameart.org as well (preferably to the submission for this art package) if you use the art.
Some of the art in this archive are based on base assets for the LPC competition. At the time of writing
those base assets can be found at:
http://lpc.opengameart.org/static/lpc-style-guide/assets.html
## LPC Wooden Furniture
https://opengameart.org/content/lpc-wooden-furniture
"LPC Wooden Furniture" by bluecarrot16, Baŝto, Lanea Zimmerman (Sharm), William Thompson, Tuomo Untinen (Reemax), Janna/Lilius/Jannax. Please link back to https://opengameart.org/content/lpc-wooden-furniture . see CREDITS-*.txt. All information in this file must be included.
Liberated Pixel Cup (LPC) Base Assets (sprites & map tiles)
Lanea Zimmerman (Sharm)
CC-BY-SA 3.0 / GPL 3.0
http://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
LPC: Modified base tiles
Lanea Zimmerman (Sharm), William Thompson
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
http://opengameart.org/content/lpc-modified-base-tiles
[LPC] House interior and decorations
Tuomo Untinen (Reemax)
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
http://opengameart.org/content/lpc-house-interior-and-decorations
Flowers, buildings and boxes; Interior wooden tiles; some old castle stuff
CC-BY-SA 3.0 / GPL 3.0
Guido Bos
https://opengameart.org/content/flowers-buildings-and-boxes-interior-wooden-tiles-some-old-castle-stuff
[LPC] Dungeon Elements
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-dungeon-elements
LPC: Interior Castle Tiles
Lanea Zimmerman (Sharm)
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-interior-castle-tiles
Home Objects
Janna/Lilius/Jannax
CC0
https://opengameart.org/content/home-objects
[LPC] Clock Animation
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0
https://opengameart.org/content/lpc-clock-animation
## [LPC] Upholstery
"[LPC] Upholstery" by bluecarrot16, Lanea Zimmerman (Sharm). Please link back to https://opengameart.org/content/lpc-upholstery and https://opengameart.org/content/lpc-interior-castle-tiles .
## [LPC] House interior and Decorations
https://opengameart.org/content/lpc-house-interior-and-decorations
= Wooden floor(CC-BY-SA) =
* Horizontal wooden floor by Lanea Zimmerman (AKA Sharm)
* Horizontal wooden floor with hole by Lanea Zimmerman (AKA Sharm) and Tuomo Untinen
* Vertical wooden floor by Tuomo Untinen
* Vertical wooden floor with hole by Tuomo Untinen
= Wooden wall topping (CC-BY-SA) =
* Tuomo Untinen
= Pile of barrels =
* Based LPC base tiles by Lanea Zimmerman (AKA Sharm)
= Decorational stuff (CC-BY-SA) =
* Green bottle
* Wine glass and bottle
* Hanging sacks
* Wall mounted rope and ropes
* Wall mounted swords
* Wall mounted kite shield
* Wall hole
By Tuomo Untinen
* Small sack from LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
* Purple bottles and gray lantern from Hyptosis Mage city
* Green and blue bottle by Tuomo Untinen
= Wall clock (CC-BY-SA) =
* Lanea Zimmerman AKA Sharm
* Tuomo Untinen (Scaled down and animation)
= Stone floor (CC-BY-SA)=
* Tuomo Untinen
= Cobble stone floor (CC-BY-SA)=
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
= Cabinets and kitchen stuff including metal stove(CC-BY-SA) =
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Cutboard is made by Hyptosis
* Sacks based on LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
* Spears by Tuomo Untinen
* Vertical chest by Tuomo Untinen based on LPC base tiles Lanea Zimmerman (AKA Sharm)
Manuel Riecke (AKA MrBeast)
= Skull (CC-BY-SA) =
* http://opengameart.org/content/lpc-dungeon-elements
* Graphical artist Lanea Zimmerman AKA Sharm
* Contributor William Thompson
= pile sacks =
* LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
= Pile of papers(CC-BY-SA) =
* Based on caeles papers
= Armor shelves(CC-BY-SA) =
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Armors by: Adapted by Matthew Krohn from art created by Johannes Sjölund
= Table lamp =
* Tuomo Untinen
= Distiller =
* Table is from LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Distiller by Tuomo Untinen
= Fireplace =
* Tuomo Untinen
* Inspired by Lanea Zimmerman (AKA Sharm) Fireplace
## [LPC] Items and game effects
https://opengameart.org/content/lpc-items-and-game-effects
items.png
= Swords and daggers =
* By Tuomo Untinen
= Axes =
* By Tuomo Untinen
= Plate mails =
* by Johannes Sjölund AKA Wulax
= Helmet =
* by Johannes Sjölund AKA Wulax
= Bows =
* By Tuomo Untinen
= Round shields =
* by Johannes Sjölund AKA Wulax
= Gloves =
* by Johannes Sjölund AKA Wulax
= Bottles =
* by Tuomo Untinen
= Kite shields =
* By Tuomo Untinen
= Pick-Axe =
* By Tuomo Untinen
= Spiked Gloves =
* by Johannes Sjölund AKA Wulax
* Modifed by Tuomo Untinen
= Keys and pick locks =
* By Tuomo Untinen
= Leather armors =
* by Johannes Sjölund AKA Wulax
* Spikes done by Tuomo Untinen
= Maces =
* By Tuomo Untinen
= Carrot =
* By Tuomo Untinen
= Carrot =
* By Tuomo Untinen
= Money bag =
* Small sack from LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements)
= Spears =
* By Tuomo Untinen
= Salad =
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Modifications by Tuomo Untinen
= Cheese =
* By Tuomo Untinen
= Bread, roast on plate and apple =
* By Jetrel
= Chainmail =
* By Johannes Sjölund AKA Wulax
= Crossbow =
* By Gwes
= Crudge Leather armor =
* Leather armor by Johannes Sjölund AKA Wulax
* Single bauldron by Nila122
= Jackets =
* Jacket by Tuomo Untinen, pennomi, laetissima and makrohn.
* Belt by Johannes Sjölund AKA Wulax
= Scrolls and books =
* Modified by Tuomo Untinen originals by Gwes
= Cabbage =
* By Daniel Eddeland (http://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements)
= Witch Hat =
* By Tuomo Untinen
= Torch and Lantern =
* By Tuomo Untinen
= Staff =
* By Tuomo Untinen
= Amulets =
* Ruby by Gwes
* Modifications by Tuomo Untinen
= Rapier =
* By Tuomo Untinen
= Sling =
* By Tuomo Untinen
= Rope =
* By Tuomo Untinen
= Flails =
* By Tuomo Untinen
= Big hammers =
* By Tuomo Untinen
= Cooked fish =
* By Tuomo Untinen
= Exploding barrel =
* Original barrel by Lanea Zimmerman (AKA Sharm)
* Modified by Tuomo Untinen
= Splint Mail =
* Leather armor by Johannes Sjölund AKA Wulax
* Modified by Tuomo Untinen
= Cape =
* By Jaidyn Reiman
= Sawtooth blade =
* By Gwes
= Diamonds =
* By Tuomo Untinen
= Shurikens =
* By Tuomo Untinen
= Rings =
* By Tuomo Untinen
= Leather boots =
* By Tuomo Untinen
= Hairpin =
* By Tuomo Untinen
= Toolbox =
* By Tuomo Untinen
= Large shields =
* By Gwes
= Large key =
* By Gwes
= Evil magic staff =
* By Gwes
* Modified by Tuomo Untinen
= Iron boots =
* By Gwes
= Magic swords =
* Handle by Gwes
* Blade by Tuomo Untinen
= Skull key =
* By Tuomo Untinen
= Javelins and throwing axes =
* By Tuomo Untinen
= Medikit =
* By Tuomo Untinen
= Buckler =
* By Gwes
= Fishing rod =
* By Tuomo Untinen
= Raw fish =
* By Tuomo Untinen
= Troll Head =
* Base character by Stephen Challener AKA Redshrike
* Fangs by Tuomo Untinen
* Elven ears by Jaidyn Reiman
= Map =
* By Tuomo Untinen
= Rope ladder =
* By Tuomo Untinen
= Shovel =
* By Tuomo Untinen
= Zombie head on rope =
* Original Zombie by ArtisticDude, modified by Tuomo Untinen
= Master key =
* By Tuomo Untinen
= Magic Hatchet =
* By Tuomo Untinen
= Blue plant and seeds =
* By Tuomo Untinen
= Wooden shield =
* By Tuomo Untinen
= Boomerang =
* By Tuomo Untinen
= Skull shield =
* By Gwes
= Magic wand =
* By Gwes
= Swords with black handle =
* Handle by Gwes
* Blade by Tuomo Untinen
= Mystic books =
* By Gwes
= Phylantery =
* By Jetrel
= Magic sickle =
* By Tuomo Untinen
= Locket =
* By Tuomo Untinen
= Bridge repair kit =
* By Tuomo Untinen
effects.png
= Look cursor, cast cursor, attack cursor, use cursor and talk cursor =
* By Tuomo Untinen
= Speech ballons and sweat =
* By Tuomo Untinen
= Small magic effect, good magic effect, poison and flame spell effects =
* By Tuomo Untinen
= Curse fear and darkness spell effects =
* By Tuomo Untinen
* Skull by Johannes Sjölund
= Electric, teleport, freezing drowning and force fist spell effects =
* By Tuomo Untinen
= Bright light spell effect, blood stains and blade swing effects =
* By Tuomo Untinen
= Ranged attack miss effect =
* By Tuomo Untinen
= Sleeping speech bubble =
* By Tuomo Untinen
= Shopkeeper's speech bubble =
* By Tuomo Untinen
= Teddy bear speech bubble =
* By Tuomo Untinen
= Eating speech bubble =
* Original meat By Jetrel
* Adaptation by Tuomo Untinen
## LPC Modified Base Tiles
https://opengameart.org/content/lpc-modified-base-tiles
Art or LPC or whatever you named this section of credits: Lanea Zimmerman Extra Contributions or special thanks: William Thompson
## [LPC] Meals
"[LPC] Meals" by bluecarrot16, Daniel Eddeland (daneeklu), Joshua Taylor, and Richard Kettering (Jetrel), commissioned by castelonia.
https://opengameart.org/content/lpc-meals
[LPC] Farming tilesets, magic animations and UI elements
DE = Daniel Eddeland (Daneeklu)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
Fruit and Veggie Inventory
JT = Joshua Taylor
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/fruit-and-veggie-inventory
RPG item set
RK = Richard Kettering (Jetrel)
CC0
https://opengameart.org/content/rpg-item-set
Icons: Food.
TKP = thekingphoenix
CC0
http://opengameart.org/content/icons-food
## LICENSES
All items edited by bluecarrot16. Original authors listed, otherwise drawn from scratch by bluecarrot16.
- If you use this entire set, the license is CC-BY-SA 3.0+ or GPL v3.0+.
- All individual items can be used under either of those licenses (CC-BY-SA 3.0+ or GPL 3.0+).
- Some items can also be used under other licenses, according to the table below.
- For items with a CC-BY, CC-BY-SA, OGA-BY, or GPL license, you must credit the original author(s) as well as bluecarrot16, link to the original submissions (above) and include a link back to this page <https://opengameart.org/content/lpc-food>.
- For items licensed CC0, credit and link back to this page is appreciated, but not required.
## PLATES
Plates by RK, edited by bluecarrot16.
## BASES
| Item | Credits | Licenses |
|---------------|---------|----------|
| Pie | | CC0 |
| Salad (1) | | CC0 |
| Salad (2) | RK | CC0 |
| Quiche | | CC0 |
| Soup, red | | CC0 |
| Soup, yellow | | CC0 |
| Soup, green | | CC0 |
| Soup, brown | | CC0 |
| Tortilla | | CC0 |
| Barley | | CC0 |
| Rice | | CC0 |
| Noodles (1) | | CC0 |
| Noodles (2) | | CC0 |
| Hamburger bun | | CC0 |
| Kaiser bun | | CC0 |
| Sliced bread | RK | CC0 |
## ITEMS
For each item, there are multiple options; top-to-bottom, these are:
- Raw
- 1/3 of plate, top-left
- 1/3 of plate, top-right
- 1/3 of plate, bottom
- Small topping
- Large topping
- Sandwich bottom layer
- Sandwich middle layer
- Sandwich top layer
- Skewer (1)
- Skewer (3)
- Skewer, back
- Skewer, middle
- Skewer, front
| Item | Credits | License(s) |
|---------------------------|---------|------------|
| Acorn squash | | CC0 |
| Carrot | JT | |
| Parsnip | JT | |
| Potato, baked | JT/DE | |
| Potato, diced | JT/DE | |
| Potato, fingerling | JT/DE | |
| Sweet Potato, baked | JT/DE | |
| Sweet Potato, diced | JT/DE | |
| Sweet Potato, fingerling | JT/DE | |
| Purple Potato, baked | JT/DE | |
| Purple Potato, diced | JT/DE | |
| Purple Potato, fingerling | JT/DE | |
| Tomato | DE | |
| Cornmeal | JT | |
| Corncob | JT | |
| White onion | | CC0 |
| Red onion | | CC0 |
| Purple onion | | CC0 |
| Green bell pepper | JT | |
| Red bell pepper | JT | |
| Orange bell pepper | JT | |
| Yellow bell pepper | JT | |
| Purple cabbage | | CC0 |
| Brussels sprouts | | CC0 |
| Cauliflower | JT | |
| Broccoli | JT | |
| Celery | | CC0 |
| Yellow squash | DE | |
| Zucchini | DE | |
| Raddish | JT | |
| Turnip | JT | |
| Iceberg lettuce | RK | CC0 |
| Rib roast | | CC0 |
| Drumstick | RK | |
| Sausage | RK | |
| Bacon | | CC0 |
| Lamb chop | | CC0 |
| Meatball | | CC0 |
| Burger patty | | CC0 |
| Pork chop | | CC0 |
| Chicken breast | DE | |
| Ribeye steak | DE | |
## [LPC] Victorian Town Decorations
[LPC] Victorian Town Decorations by bluecarrot16, Casper Nilsson, Lanea Zimmerman (Sharm), William Thompson, mold, AntumDeluge, Curt, Daniel Eddeland (daneeklu), caeles, George Bailey, Jetrel, Yar, Guido Bos, Ivan Voirol (Silver IV), Stephen Challener (Redshrike), the Open Surge team, Arthur Carvalho, Guilherme Vieira (n2liquid), NaRNeRZz, Diarandor, Armando Montero (ArMM1998), Tuomo Untinen (Reemax), Buch.
License: CC-BY-SA 4.0
## Based on:
LPC C.Nilsson
Casper Nilsson
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-cnilsson
LPC Base Assets
Lanea Zimmerman (AKA Sharm)
CC-BY 3.0 / GPL 3.0
https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
[LPC] Signposts, graves, line cloths and scare crow
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-signposts-graves-line-cloths-and-scare-crow
LPC: Modified base tiles
Lanea Zimmerman (Sharm), William Thompson
CC-BY 3.0 / GPL 3.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-modified-base-tiles
[LPC] Misc
Lanea Zimmerman, William Thompson
https://opengameart.org/content/lpc-misc
LPC Lamp Posts Rework
Curt, Lanea Zimmerman (Sharm), William.Thompsonj, & mold, reworked by AntumDeluge
CC-BY 3.0 /GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-lamp-posts-rework
[LPC] Farming tilesets, magic animations and UI elements
Daniel Eddeland (daneeklu)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
[LPC] Adobe Building Set
Lanea Zimmerman (Sharm), William Thompson
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-adobe-building-set
[LPC] caeles' art
caeles
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-caeles-art
[LPC] Arabic Elements
Lanea Zimmerman, William Thompson
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-arabic-elements
[LPC] Water Fountain
Curt, Sharm, William.Thompsonj
CC-BY 3.0
https://opengameart.org/content/lpc-water-fountain
LPC: Interior Castle Tiles
Lanea Zimmerman
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-interior-castle-tiles
16x16 Game Assets
George Bailey
CC-BY 4.0
https://opengameart.org/content/16x16-game-assets
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
Isometric 64x64 Outside Tileset
Yar
CC-BY 3.0
https://opengameart.org/content/isometric-64x64-outside-tileset
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
Basic map 32x32 by Silver IV
Ivan Voirol (Silver IV)
CC-BY 3.0 / GPL 3.0 / GPL 2.0
https://opengameart.org/content/basic-map-32x32-by-silver-iv
32x32 (and 16x16) RPG Tiles--Forest and some Interior Tiles
Stephen Challener (Redshrike) and the Open Surge team (http://opensnc.sourceforge.net)commissioned by Gaurav Munjal
CC-BY 3.0
https://opengameart.org/content/32x32-and-16x16-rpg-tiles-forest-and-some-interior-tiles
Exterior 32x32 Town tileset
Arthur Carvalho; Copyright Guilherme Vieira (n2liquid), https://fb.com/sonettocommons
CC-BY-SA 4.0
https://opengameart.org/content/town-tileset-exterior-32x32
Tileset and Characters - Unfinished
NaRNeRZz
CC0
https://opengameart.org/content/tileset-and-characters-unfinished
Solarus Fountain
Diarandor for Children of Solarus (https://github.com/solarus-games/children-of-solarus), a game for the Solarus game engine (http://www.solarus-games.org/).
CC-BY-SA 4.0
https://opengameart.org/content/solarus-fountain
Zelda-like tilesets and sprites
Armando Montero (ArMM1998)
CC0
https://opengameart.org/content/zelda-like-tilesets-and-sprites
[LPC] Dungeon Elements
Lanea Zimmerman (Sharm), William Thompson
CC-BY 4.0 / CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-dungeon-elements
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
[LPC] Hanging signs
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-hanging-signs
Tuxemon tileset
Buch
CC-BY-SA 3.0
https://opengameart.org/content/tuxemon-tileset
## [LPC] Signpost, graves, line cloths, and scare crow
https://opengameart.org/content/lpc-signposts-graves-line-cloths-and-scare-crow
Attribution to Nemisys,Daniel Eddeland (http://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements) and Tuomo Untinen
## [LPC] Ore and Forge
https://opengameart.org/content/lpc-ore-and-forge
"[LPC] Ore and Forge" by bluecarrot16, commissioned by Pierre Vigier (pvigier). CC-BY 3.0+ / GPL 3.0+ / OGA-BY 3.0+
## Dungeon stuff: tombs and torture table
https://opengameart.org/content/dungeon-stuff-tombs-and-torture-table
Torture table and/or sargophagi made by Tuomo Untinen
## [LPC] Medieval Village Decorations
https://opengameart.org/content/lpc-medieval-village-decorations
[LPC] Hanging signs
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-hanging-signs
Liberated Pixel Cup (LPC) Base Assets
Lanea Zimmerman (Sharm)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
[LPC] City outside
Reemax (Tuomo Untinen), Xenodora, Sharm, Johann C, Johannes Sjölund
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
https://opengameart.org/content/lpc-city-outside
[LPC] Cavern and ruin tiles
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
Reemax, Sharm, Hyptosis, Johann C, HughSpectrum, Redshrike, William.Thompsonj, wulax,
https://opengameart.org/node/33913
Statues & Fountains Collection
Casper Nilsson, Daniel Cook, Rayane Félix (RayaneFLX), Wolthera van Hövell tot Westerflier (TheraHedwig), Hyptosis, mold, Zachariah Husiar (Zabin), & Clint Bellanger
CC-BY-SA 3.0
https://opengameart.org/content/statues-fountains-collection
LPC C.Nilsson
Casper Nilsson
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-cnilsson
LPC Style Well
CC-BY 3.0 / GPL 3.0
Xenodora, Sharm
https://opengameart.org/content/lpc-style-well
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
LPC Sign Post
Nemisys
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-sign-post
[LPC] Signposts, graves, line cloths and scare crow
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-signposts-graves-line-cloths-and-scare-crow
[LPC] Hanging signs
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-hanging-signs
Hyptosis
Mage City Arcanos
CC0
https://opengameart.org/content/mage-city-arcanos
[LPC] Street Lamp
Curt
CC-BY 3.0
https://opengameart.org/content/lpc-street-lamp
[LPC] Misc
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-misc
RPG Tiles: Cobble stone paths & town objects
https://opengameart.org/content/rpg-tiles-cobble-stone-paths-town-objects
Zabin, Daneeklu, Jetrel, Hyptosis, Redshrike, Bertram.
CC-BY-SA 3.0
[LPC] Farming tilesets, magic animations and UI elements
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
Daniel Eddeland (daneeklu)
CC-BY-SA 3.0 / GPL 3.0
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
RPG Indoor Tileset: Expansion 1
Redshrike
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/rpg-indoor-tileset-expansion-1
[LPC] Dungeon Elements
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-dungeon-elements
## [LPC] Bricks
https://opengameart.org/content/lpc-bricks
"[LPC] Bricks" by bluecarrot16, Guido Bos, keith karnage, Lanea Zimmerman (Sharm), Casper Nilsson, Leonard Pabin, and Buch
Flowers, buildings and boxes; Interior wooden tiles; some old castle stuff
Guido Bos
GPL v3 / CC-BY-SA 3.0
https://opengameart.org/content/flowers-buildings-and-boxes-interior-wooden-tiles-some-old-castle-stuff
Medieval town
keith karnage
CC-BY 3.0
https://opengameart.org/content/medieval-town-0
Liberated Pixel Cup (LPC) Base Assets
Lanea Zimmerman (Sharm)
CC-BY-SA 3.0 / CC-BY 3.0 / GPL 3.0
https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
LPC C.Nilsson
Casper Nilsson
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-cnilsson
Whispers of Avalon: Grassland Tileset
Leonard Pabin
CC-BY 3.0 / GPL 3.0 / GPL 2.0
https://opengameart.org/content/whispers-of-avalon-grassland-tileset
Outdoor 32x32 tileset
Buch
CC0
https://opengameart.org/content/outdoor-32x32-tileset
Exterior 32x32 Town tileset
Arthur Carvalho, copyright Guilherme Vieira (n2liquid)
CC-BY-SA 4.0
https://opengameart.org/content/town-tileset-exterior-32x32
# Abusive Prison Tileset - Layer C
https://opengameart.org/content/abusive-prison-tileset-layer-c
These graphics are licensed under CC3-SA (Share Alike), as well as CC0 this means you are free to use the pack for commercial and non-commercial projects, royalty free, without crediting Galacti-Chron. Even though giving us credit is always appreciated. You must however credit the sources that we have credited if you plan to use this in your own works. In this case it's the skeleton (part of the LPC character pack) as well as the organs as a meal (FreePik). The rest of the layer is CC0 (public domain)./* Adding trait may also entail editing:
default trait chance in unitpool.twee
*/
<<set setup.trait = {}>>
<<set setup.traitgroup = {}>>
<<include InitJobTraits>>
<<include InitGenderTraits>>
<<include InitRaceTraits>>
<<include InitSubraceTraits>>
<<include InitBgTraits>>
<<include InitPhysicalTraits>>
<<include InitPersonalityTraits>>
<<include InitSkillTraits>>
<<include InitTrainingTraits>>
<<include InitSkinTraits>>
<<include InitPerkTraits>>
<<include InitEquipmentTraits>>
<<include InitComputedTraits>>
<<include InitBlessingTraits>>
<<include InitTraumaTraits>>
<<include InitTraitTexts>><<set setup.TRAIT_TEXTS_DEFAULT = {
hobby: [
"sharpening a|their weapons",
"eating",
"drinking",
"sleeping",
"looking after a|themself",
],
}>>
/* Description : xxx{description} */
<<set setup.TRAIT_TEXTS = {
/* =======================
RACE TRAITS
======================= */
subrace_humankingdom: {
noun: 'human',
region: setup.Text.Race.REGIONS.city,
company_key: 'humankingdom',
},
subrace_humanvale: {
noun: 'northerner',
region: setup.Text.Race.REGIONS.vale,
company_key: 'humanvale',
},
subrace_humandesert: {
noun: 'desertfolk',
region: setup.Text.Race.REGIONS.desert,
company_key: 'humandesert',
},
subrace_humansea: {
noun: 'foreigner',
region: setup.Text.Race.REGIONS.sea,
company_key: 'humansea',
},
subrace_angel: {
noun: 'angel',
region: setup.Text.Race.REGIONS.heaven,
company_key: 'humankingdom',
},
subrace_elf: {
noun: 'elf',
region: setup.Text.Race.REGIONS.forest,
company_key: 'elf',
},
subrace_fairy: {
noun: 'fairy',
region: setup.Text.Race.REGIONS.forest,
company_key: 'elf',
},
subrace_neko: {
noun: 'neko',
region: setup.Text.Race.REGIONS.forest,
company_key: 'neko',
},
subrace_tigerkin: {
noun: 'tigerkin',
region: setup.Text.Race.REGIONS.forest,
company_key: 'neko',
},
subrace_werewolf: {
noun: 'werewolf',
region: setup.Text.Race.REGIONS.vale,
company_key: 'werewolf',
},
subrace_orc: {
noun: 'orc',
region: setup.Text.Race.REGIONS.desert,
company_key: 'orc',
},
subrace_lizardkin: {
noun: 'lizardkin',
region: setup.Text.Race.REGIONS.sea,
company_key: 'lizardkin',
},
subrace_dragonkin: {
noun: 'dragonkin',
region: setup.Text.Race.REGIONS.sea,
company_key: 'dragonkin',
},
subrace_demonkin: {
noun: 'demonkin',
region: setup.Text.Race.REGIONS.mist,
company_key: 'demon',
},
subrace_demon: {
noun: 'demon',
region: setup.Text.Race.REGIONS.mist,
company_key: 'demon',
},
/* =======================
BACKGROUND TRAITS
======================= */
bg_royal: {
hobby: ["reading a book on ettiquette for when a|they return to the court", "sitting in the sun with a few friends--or possibly flunkies", "trying to explain the joys of fattened goose liver to the cook",],
},
bg_boss: {
hobby: ["having a quiet conversation with some nondescript looking individuals in the corner of the courtyard", "enjoying a very expensive glass of wine. The fruits of a|their labours, no doubt",],
},
bg_mythical: {
hobby: ["sitting crossed legged on a small cushion, itself placed within a chalk circle a|they a|have drawn onto the ground", "talking to nobody. Or at least, nobody you can see"],
},
bg_mist: {
hobby: ["grinning madly", "regaling a|their friends with tales from other planes of existence",],
},
bg_knight: {
hobby: ["practicing swordsmanship", "polishing a|their armour", "drinking ale with a group of friends",],
},
bg_adventurer: {
hobby: ["reminiscing on a|their past adventures", "talking to a passing peddler",],
},
bg_metalworker: {
hobby: ["crafting slave restraints", "making nails", "tempering the edge of a shovel",],
},
bg_wildman: {
hobby: ["longing for the embrace of the wilds", "staring out over the walls towards the northern forests", "entering the courtyard with a basket of foraged mushrooms",],
},
bg_assassin: {
hobby: ["sharpening a|their deadly daggers", "throwing dice with some visiting travellers", "writing in a|their journal,"],
},
bg_engineer: {
hobby: ["working on a|their latest invention", "mixing chemicals outside after the last incident in the living quarters," ],
},
bg_scholar: {
hobby: ["organizing a|their books", "snoozing in the sunlight", "carefully illustrating what looks to be the cross section of a flower",],
},
bg_noble: {
hobby: ["reminiscing about a|their previous riches", "trying to work out how to use a needle and thread",],
},
bg_healer: {
hobby: ["teaching the others how to properly bandage a wound", "boiling bandages", "hanging up bundles of herbs to dry", ],
},
bg_mystic: {
hobby: ["recharging a|their magical powers", "examining a strange device you've never seen before", ],
},
bg_courtesan: {
hobby: ["gazing at a|their visage in the mirrors", "combing a|their hair", "playing the panflute, the music making your toes twitch",],
},
bg_mercenary: {
hobby: ["counting a|their money", "repairing a leather strap on a|their bag", "practising archery"],
},
bg_monk: {
hobby: ["meditating", "exercising meditatively, a|their motions slow and fluid as water",],
},
bg_hunter: {
hobby: ["hunting game", "skinning the carcass of a deer", "gutting a brace of rabbits", "treating rabbitskins with salt for curing",],
},
bg_informer: {
hobby: ["eavesdropping important conversations", "having quiet conversations that stop when anyone else draws near",],
},
bg_slaver: {
hobby: ["breaking some slaves", "training a slave to serve a|their betters", "drinking ale with friends",],
},
bg_artisan: {
hobby: ["making some trinkets", "whittling spoons", "using a pole lathe to turn legs for stools", "carving a small sculpture of a wolf out of wood",],
},
bg_wiseman: {
hobby: ["meditating", "sitting in the sun with a group of students", "sitting in the sun with a hot cup of something watching the world go by",],
},
bg_priest: {
hobby: ["praying", "tending to the injured", "giving an impromptu sermon to a small gathering under a nearby tree",],
},
bg_apprentice: {
hobby: ["continuing a|their study of magic", "heading to the dungeons for some relief", "trying to use magic to light a candle",],
},
bg_artist: {
hobby: ["painting", "attempting poetry", "carving a wooden dick", "carving a very large wooden dick",],
},
bg_soldier: {
hobby: ["doing weapon drills", "polishing a|their armour", "using beeswax and oil to waterproof a|their boots",],
},
bg_pirate: {
hobby: ["carousing", "heading into the dungeons to let off some steam", "playing cards", "coiling rope", "standing on the walls of the fort gazing out at the distant glimmer of the sea",],
},
bg_laborer: {
hobby: ["remortaring part of the fort's walls", "hanging a new door for a|their barracks", "maintaining the defensive ditch outside the fort's walls",],
},
bg_woodsman: {
hobby: ["chopping firewood", "splitting logs into planks", "helping in the kitchens", ],
},
bg_thug: {
hobby: ["bullying the slaves", "telling off colour jokes to a|their friends",],
},
bg_seaman: {
hobby: ["gazing towards the sea", "splicing ropes", "carving fish hooks out of bone", "off fishing"],
},
bg_nomad: {
hobby: ["gazing upon the vast open fields", "sitting at a table covered in a|their collection of maps", "showing off trinkets from far away lands",],
},
bg_thief: {
hobby: ["looking for missing items", "polishing a ring that is definitely a|theirs", "trying to build a lock a|they can't pick",],
},
bg_maid: {
hobby: ["keeping a|their room sparkling clean", "sweeping the floors", "hanging out the washing", "sitting on the grass having a picnic as a|they wait for bedsheets to dry in the sun",],
},
bg_raider: {
hobby: ["getting drunk", "throwing axes at an impromptu set of targets", "maintaining a|their gear",],
},
bg_clerk: {
hobby: ["going over the company's finances", "sorting through missives", "talking quietly to one of your contacts over a tankard of ale",],
},
bg_merchant: {
hobby: ["talking boisterously with some travellers", "packing goods for trade with a nearby settlement", "making plans to visit the city markets" ],
},
bg_farmer: {
hobby: ["tending to a|their personal garden", "digging up carrots", "tending to a bee hive", "turning a garden bed for re-planting",],
},
bg_entertainer: {
hobby: ["telling jokes", "practising juggling", "mending a rip in a pair of trousers",],
},
bg_foodworker: {
hobby: ["cooking", "slow roasting a goat on a spit", "kneading bread dough", "brewing ale",],
},
bg_whore: {
hobby: ["looking for a partner", "flirting with travellers", "eating bread and cheese in the kitchens", "combing a|their hair", "heating water for a bath",],
},
bg_unemployed: {
hobby: ["learning new skills", "drinking ale", "helping tend the kitchen garden", "scrubbing the floors", "making rushlights",],
},
bg_slave: {
hobby: ["enjoying a|their freedom", "drinking ale", "sitting in the sun",],
},
/* =======================
PHYSICAL TRAITS
======================= */
muscle_extremelythin: {
size_adjective: ['extremely skinny', 'unnaturally slim', ],
adjective: ['extremely skinny', 'unnaturally slim', ],
adjbad: ['extremely weak', "almost skeletal", "emaciated",],
description: "a|have a waist so thin a|they can almost circle a|their own waist by stretching a|their fingers",
increase: '',
decrease: 'a|their waist shrunk, and its circumference now frighteningly small',
nounbad: ['weakness', 'fragility', ],
hobby: ["rationing food",],
},
muscle_verythin: {
size_adjective: ['skinny', 'slender', 'delicate', ],
adjective: ['skinny', 'slender', ],
adjbad: ['very weak', ],
description: "a|is very thin and narrow-waisted, with the bones sometimes visible under a|their skin",
increase: 'making a|their waist no longer unnaturally thin, although still very thin compared to most',
decrease: 'a|their body is now so thin that people can even a|their bones through a|their a|skin',
noungood: ['model-thin body', ],
nounbad: ['weakness', 'fragility', ],
hobby: ["rationing food",],
},
muscle_thin: {
size_adjective: ['slim', 'slender',],
adjective: ['slim', 'narrow-waisted', ],
adjbad: ['weak', ],
description: "a|is pleasingly thin",
increase: 'a|they no longer looks unnaturally thin, but is still rather thin compared to most',
decrease: 'a|their body is now slender, with a narrow waist pleasant on the eyes',
noungood: ['slim body', ],
nounbad: ['weakness', 'fragility', ],
hobby: ["rationing food",],
},
muscle_strong: {
size_adjective: ['muscular', 'athletic', ],
adjective: ['strong', 'toned', 'athletic'],
adjgood: ['strong', 'powerful', 'athletic'],
description: "a|have a strong muscular body with rippling abs",
increase: 'a|their body now sports well-defined muscles in several places',
decrease: 'but still remaining a well muscled body',
noungood: ['strength', 'muscularity', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", "carrying building supplies", "training with weapons",],
},
muscle_verystrong: {
size_adjective: ['hugely muscular', 'muscular'],
adjective: ['muscular', 'ripped', 'brutish', ],
adjgood: ['strong', 'powerful'],
description: "a|have an extremely muscular body capable of superhuman strength feats",
increase: 'huge bulges of muscles covered a|their body now',
decrease: 'making a|their muscles look less freakish and now just huge',
noungood: ['overwhelming strength', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", "carrying building supplies", "training with weapons",],
},
muscle_extremelystrong: {
size_adjective: ['freakishly muscular', ],
adjective: ['extremely strong', 'extremely powerful', ],
adjgood: ['strong', 'powerful'],
description: "a|have a freakishly muscular body with muscles bulging from every inch of a|their body",
increase: 'a|their body becoming freakishly muscular with huge bulges of muscle covering every part of a|their body',
decrease: '',
noungood: ['extreme strength', 'six-pack', ],
noungoodmale: ['manliness', ],
hobby: ["lifting weights", "carrying building supplies", "training with weapons",],
nounbad: ['overly massive muscles', ],
},
dick_tiny: {
size_adjective: ['tiny', 'humiliatingly small', 'miniscule', 'petite', ],
adjective: ['tiny-dicked', ],
description: "a|have a humiliatingly small dick",
increase: '',
decrease: 'reducing it to a mere few centimetres long',
nounbad: ['embarrasingly small dick', ],
},
dick_small: {
size_adjective: ['small', 'below-average', 'little', ],
description: "a|have a small dick",
increase: 'although it still remain small by human standards',
decrease: 'barely adequate to satiate most whores',
},
dick_medium: {
size_adjective: ['', 'average', 'normal-sized' ],
description: "a|have an average-sized dick",
increase: 'becoming a healthy normal-sized dick',
decrease: 'becoming a healthy normal-sized dick',
},
dick_large: {
size_adjective: ['large', 'lengthy', 'big', 'sizeable', ],
adjective: ['well-endowed', ],
description: "a|have a large dick",
increase: 'becoming a large imposing dick when erect',
decrease: 'but still remaining large',
noungood: ['large dick', 'large cock', ],
},
dick_huge: {
size_adjective: ['huge', 'massive', 'oversized', ],
adjective: ['well-hung', ],
description: "a|have 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: {
size_adjective: ['titanic', 'colossal', 'monster', 'gigantic', ],
adjective: ['well-hung', ],
description: "a|have an enormously large dick",
increase: 'becoming monstrously large, guaranteed to tear apart any hole it enters',
decrease: '',
noungood: ['gigantic dick', 'gigantic_cock', ],
},
balls_tiny: {
size_adjective: ['tiny', 'humiliatingly small', 'miniscule', 'petite', ],
description: "a|have a barely visible pair of balls",
increase: '',
decrease: 'a|their balls now barely visible under a|their dick',
},
balls_small: {
size_adjective: ['small', 'below-average', 'little', ],
description: "a|have a small pair of balls",
increase: 'although it still remains small even by human standards',
decrease: 'a|their small balls now only capable of producing so much cum',
},
balls_medium: {
size_adjective: ['', 'average', ],
description: "a|have an average-sized pair of balls",
increase: 'becoming a normal-sized balls comfortably hanging under a|their dick',
decrease: 'becoming a normal-sized balls comfortably hanging under a|their dick',
},
balls_large: {
size_adjective: ['large', 'big', 'sizeable', 'weighty', ],
description: "a|have 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: {
size_adjective: ['huge', 'massive', 'heavy', 'oversized', ],
adjective: ['virile', ],
description: "a|have a huge pair of balls each the size of tennis balls",
increase: 'becoming a huge pair of balls full of cum hanging precariously under a|their dick',
decrease: 'although it still remains huge',
noungood: ['overwhelming cum production', ],
},
balls_titanic: {
size_adjective: ['titanic', 'colossal', 'monster', 'gigantic', ],
adjective: ['extremely virile', ],
description: "a|have 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: {
size_adjective: ['tiny', 'compact', 'petite', ],
description: "a|have a tiny almost mannish pair of breasts",
increase: '',
decrease: 'a|their breasts now barely visible and is almost mannish in appearance',
nounbad: ['embarrasingly small breasts', ],
},
breast_small: {
size_adjective: ['small', 'modest', 'cute', ],
description: "a|have 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: {
size_adjective: ['medium', '', ],
description: "a|have 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: {
size_adjective: ['large', 'big', 'bountiful', 'ample', ],
adjective: ['well-endowed', ],
description: "a|have a large pair of breasts",
increase: 'growing into a large pair of fluffy bosoms',
decrease: 'which fortunately still remains a large ample pair of bosoms',
noungood: ['ample bosoms', 'ample tits', ],
},
breast_huge: {
size_adjective: ['huge', 'massive', 'oversized', ],
adjective: ['big-breasted', ],
description: "a|have 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: {
size_adjective: ['titanic', 'colossal', 'monster', 'gigantic', ],
adjective: ['big-breasted', ],
description: "a|have a titanic pair of breasts capable of crushing unfortunate victims",
increase: 'the pair of breasts now menacingly threaten to crush anyone unfortunate enough to stand beneath them',
decrease: '',
noungood: ['pillowy bosoms', 'pillowy tits', ],
},
vagina_tight: {
size_adjective: ['tight', 'taut', ],
description: "a|have a very tight attractive vagina",
increase: '',
decrease: 'it tightens to an almost virgin-like condition',
},
vagina_loose: {
size_adjective: ['loose', 'well-used', 'well-stretched', ],
description: "a|have 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: {
size_adjective: ['gaping', 'cavernous', ],
description: "a|have a permanently gaping vagina",
increase: 'the hole no longer capable of closing and remains a permanent gape',
decrease: '',
nounbad: ['gaping vagina', ],
},
anus_tight: {
size_adjective: ['tight', 'taut', ],
description: "a|have a very tight attractive anus",
increase: '',
decrease: 'it tightens to an almost unmolested condition',
},
anus_loose: {
size_adjective: ['loose', 'well-used', 'well-stretched', ],
description: "a|have 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: {
size_adjective: ['gaping', 'cavernous', ],
description: "a|have a permanently loose anus",
increase: 'the hole no longer capable of closing and remains a permanent gape',
decrease: '',
nounbad: ['gaping anus', ],
},
face_hideous: {
size_adjective: ['terrifying', 'frightening', ],
adjective: ['frightening', ],
adjbad: ['hideously ugly', 'repulsively ugly', ],
description: "a|have a hideously ugly face so much that it takes a lot of effort just to communicate with them",
increase: '',
decrease: 'the face is now painful to even look at',
nounbad: ['hideous face', ],
},
face_scary: {
size_adjective: ['scary', 'intimidating', 'menacing', ],
adjective: ['scary-looking', ],
adjbad: ['ugly', 'unattractive', ],
description: "a|have an unattractive face",
increase: 'although it still remains ugly and unattractive',
decrease: 'making the face ugly and unattractive',
nounbad: ['ugly face', ],
},
face_attractive: {
size_adjective: ['attractive', 'good-looking', 'pretty', ],
adjective: ['attractive', 'good-looking', ],
adjgood: ['attractive', 'good-looking', 'pretty', ],
description: "a|have an attractive face",
increase: 'becoming a face that would attract attention from passerbies',
decrease: 'although it still retains quite a bit of attractiveness',
noungoodmale: ['handsomeness', ],
noungoodfemale: ['beauty', ],
},
face_beautiful: {
size_adjective: ['gorgeous', 'stunning', 'striking', ],
adjective: ['striking', 'gorgeous', ],
adjgood: ['gorgeous', 'striking-looking', ],
description: "a|have a gorgeous face charming anyone a|they a|grace with a|their presence",
increase: 'becoming the pinnacle of beauty by human standards',
decrease: '',
noungoodmale: ['divine handsomeness', ],
noungoodfemale: ['divine beauty', ],
},
height_dwarf: {
size_adjective: ['dwarf-short', 'petite', ],
adjective: ['petite', 'dwarf-short', ],
description: "a|is much shorter than normal and looks dwarven in appearance",
increase: '',
decrease: 'a|their height now barely half those of normal humans',
nounbad: ['lack of height', ],
},
height_short: {
size_adjective: ['short', 'stubby', ],
adjective: ['short', 'stubby', ],
description: "a|is shorter than normal",
increase: 'although a|they will still look up to most people',
decrease: 'a|their head now lies under the shoulders of most men',
},
height_tall: {
size_adjective: ['tall', 'big', ],
adjective: ['tall', 'big', ],
description: "a|is taller than most",
increase: 'a|their height now exceed most humans',
decrease: 'but a|they still a|remain tall compared to most',
},
height_giant: {
size_adjective: ['towering', 'colossal', ],
adjective: ['towering', 'colossal', ],
description: 'so very tall a|they a|tower over other people',
increase: 'now towering far beyond a|their peers',
decrease: '',
},
tough_nimble: {
size_adjective: ['nimble', 'lithe', 'agile', ],
adjbad: ['wimpy', ],
adjgood: ['nimble', 'lithe', 'agile', ],
adjective: ['nimble', 'lithe', 'agile', ],
description: 'a|is quick on a|their feet',
increase: '',
decrease: 'a|their body lither and more flexible',
noungood: ['quickness', ],
hobby: ["doing some sprints", ],
nounbad: ['lack of endurance', ],
},
tough_tough: {
size_adjective: ['tough', 'resilient', 'sturdy', ],
adjbad: ['inflexible', ],
adjgood: ['tough', 'resilient', 'sturdy', ],
adjective: ['tough', 'sturdy', ],
description: 'can a|shrug off more punishment than most',
increase: 'a|their body becomes tougher and sturdier',
decrease: '',
noungood: ['toughness', ],
hobby: ["doing some long runs", ],
nounbad: ['lack of finesse', ],
},
/* =======================
SKIN TRAITS
======================= */
corrupted: {
size_adjective: ['corrupted', ],
adjective: ['corrupted', 'demonic',],
description: "a|possess a body corrupted by demonic influences",
},
eyes_neko: {
size_adjective: ["feline"],
noun: "pair of cat-like eyes that can see in the dark",
description: "a|possess a pair of cat-like eyes that can see in the dark",
flavor: 'a|their eyes allow a|them to see in the dark.',
},
eyes_dragonkin: {
size_adjective: ['draconic', 'reptilian',],
noun: "intimidating pair of draconic eyes",
description: "a|possess an intimidating pair of draconic eyes",
},
eyes_demon: {
size_adjective: ['demonic', ],
noun: "pitch-black pair of demonic eyes",
description: "a|possess a pitch-black pair of demonic eyes",
flavor: "Non-demons that possess these eyes have difficulty seeing with them.",
},
ears_werewolf: {
size_adjective: ['furry', 'furred',],
noun: "pointy ears that jut out of their heads",
description: "a|possess a pair of pointy ears that jut out of a|their heads",
flavor: 'The bases of a|their ears are somewhat fluffy to touch.',
},
ears_neko: {
size_adjective: ["feline", "catlike",],
noun: "cat-like ears jutting out from their head",
description: "a|possess cat-like ears jutting out from a|their head",
flavor: 'a|Their ears responded on their own when scratched behind the ears.',
},
ears_elf: {
size_adjective: ['elven', ],
noun: "sharp pointy ears",
description: "a|possess a pair of sharp pointy ears",
flavor: "",
},
ears_dragonkin: {
size_adjective: ['draconic', 'reptilian'],
noun: "fin-like ears",
description: "a|possess a pair of fin-like ears",
flavor: "Overall, a|their ears have a fin-like shape.",
},
ears_demon: {
size_adjective: ['demonic', ],
noun: "distored demonic ears",
description: "a|possess a pair of distored demonic ears",
flavor: "a|They also have a pair of horns jutting from atop a|their head.",
},
mouth_werewolf: {
size_adjective: ['werewolf', ],
noun: "dog-like muzzle in place of their mouth",
description: "a|possess a dog-like muzzle in place of a|their mouth",
flavor: 'Instead of a normal human mouth, a|they a|have a muzzle instead.',
},
mouth_neko: {
size_adjective: ['striped', ],
noun: "whiskers growing from their cheeks",
description: "a|possess whiskers growing from a|their cheeks",
flavor: 'Several tiger-like whiskers grow from a|their stripey cheeks.',
},
mouth_orc: {
size_adjective: ['tusked', ],
noun: "tusks jutting out of their mouth",
description: "a|have tusks jutting out of a|their mouth",
flavor: 'Two sharp tusks jut out of a|their a|mouth.',
},
mouth_dragonkin: {
size_adjective: ['draconic', 'reptilian', ],
noun: "draconic snout in place of their mouth",
description: "a|possess a draconic snout in place of a|their mouth",
flavor: 'Instead of a normal human mouth, a|they a|have a scaly and long snout instead.',
},
mouth_demon: {
size_adjective: ['demonic', ],
noun: "demonic mouth complete with dextrous lengthy tongue",
description: "a|possess a demonic mouth complete with dextrous lengthy tongue",
flavor: "It is not visible from the outside, but inside a|their mouth is an incredibly long and dextrous tongue.",
},
body_werewolf: {
size_adjective: ['furry', 'furred', ],
noun: "body covered in fur",
description: "a|possess a body covered in fur",
flavor: "a|Their entire body is covered in thick fur, protecting a|them from the cold.",
adj_extra: ['thick', 'bulky'],
noun_extra: ['fur', 'pelt', ],
},
body_neko : {
size_adjective: ['striped', ],
noun: "body covered in black tiger-like stripes",
description: "a|possess a body covered in black tiger-like stripes",
flavor: "a|Their entire body is covered in fur decorated with black stripes, giving them a menacing tiger-like appearance.",
adj_extra: ['thick', 'bulky'],
noun_extra: ['fur', 'pelt', ],
},
body_orc: {
size_adjective: ["green-skinned"],
noun: "body whose entire body is some shade of greenish brown",
description: "a|possess a body covered in green skin",
flavor: "a|Their skin is a shade of greenish brown.",
},
body_dragonkin: {
size_adjective: ['scaly', 'reptilian',],
noun: "body covered in protective scales",
description: "a|possess a body covered in protective scales",
flavor: "a|Their entire body is covered by strong protective scales.",
adj_extra: ['protective', 'sturdy', ],
noun_extra: ['scales', ],
},
body_demon: {
size_adjective: ['demonic', ],
noun: "purple-tinted body of demonic origin",
description: "a|possess a purple-tinted body of demonic origin",
flavor: "a|Their entire body is tinted purple and emits an intoxicating smell.",
},
wings_elf: {
size_adjective: ['transluscent', ],
noun: "beautiful pair of semi-transparent butterfly wings",
description: "a|possess a beautiful pair of semi-transparent butterfly wings",
flavor: "These wings can flutter with enough force to let a|them a|take flight.",
noungood: ['gorgeous wings'],
},
wings_dragonkin: {
size_adjective: ['draconic', ],
noun: "majestic pair of draconic wings",
description: "a|possess a majestic pair of draconic wings",
flavorslave: "These majestic and powerful wings allow a|them to fly freely, that is, before a|they a|become a slave.",
flavorslaver: "These majestic and powerful wings allow a|them to take flight and soar through the sky.",
noungood: ['powerful wings'],
},
wings_demon: {
size_adjective: ['demonic', ],
noun: "bat-like pair of demonic wings",
description: "a|possess a bat-like pair of demonic wings",
flavorslave: "These majestic and powerful wings allow a|them to fly freely, that is, before a|they a|become a slave.",
flavor: "These wings enable a|them to take flight and glide through the night.",
noungood: ['wings'],
},
wings_angel: {
size_adjective: ['angelic', "feathered"],
noun: "feathery pair of angelic-looking wings",
description: "a|possess a feathery pair of angelic-looking wings",
flavorslave: "These beautiful wings allow a|them to fly freely, that is, before a|they become a slave.",
flavorslaver: "These beautiful wings allow a|them to take flight gracefully, with the wings fluttering ever so lightly behind them.",
noungood: ['divine wings'],
},
arms_werewolf: {
size_adjective: ['furry', ],
noun: "pair of arms covered in thick fur",
description: "a|possess a pair of arms covered in thick fur",
flavor: "Thick fur covers the entire length of a|their arms.",
},
arms_neko : {
size_adjective: ['striped', ],
noun: "pair of clawed arms covered in black stripes",
description: "a|possess a pair of clawed arms covered in black stripes",
flavor: "Black stripes covers the entire length of a|their arms which end in sharp claws.",
},
arms_dragonkin: {
size_adjective: ['scaly', ],
noun: "scaly pair of arms covered in protective scales",
description: "a|possess a scaly pair of arms covered in protective scales",
flavor: "a|Their entire arms are covered by protective scales.",
},
arms_demon: {
size_adjective: ['demonic', ],
noun: "demonic pair of arms jutting with spikes",
description: "a|possess a demonic pair of arms jutting with spikes",
flavor: "Spikes jut out unnaturally from various parts of a|their arms.",
},
legs_werewolf: {
size_adjective: ['furry', ],
noun: "pair of legs covered in thick fur",
description: "a|have a|their entire legs covered in thick fur",
flavor: "a|Their legs are entirely covered by thick insulating fur.",
},
legs_neko: {
size_adjective: ['striped', ],
noun: "pair of legs covered in black stripes",
description: "a|have a|their entire legs covered in black stripes",
flavor: "a|Their legs are dotted with black menacing stripes.",
},
legs_dragonkin: {
size_adjective: ['scaly', ],
noun: "pair of legs covered by protective scales",
description: "a|have protective scales that covers most of a|their legs",
flavor: "Protective scales covered the most vulnerable parts of a|their legs.",
},
legs_demon: {
size_adjective: ['demonic', ],
noun: "legs distorted beyond natural shape",
description: "a|possess legs distorted beyond natural shape",
flavor: "a|Their legs are unnaturally bent at several joints.",
},
tail_werewolf: {
size_adjective: ['werewolf', 'wolfen',],
noun: "fluffy werewolf tail that often sway around",
description: "a|possess a fluffy werewolf tail that often sway around",
flavor: "a|Their tail seems to have a mind of its own as it wags and sway all the time.",
},
tail_neko: {
size_adjective: ["feline", "cat-like",],
noun: "long slender cat-like tail",
description: "a|possess a long slender cat-like tail",
flavor: "a|Their tail helps improves a|their overall balance.",
},
tail_dragonkin: {
size_adjective: ['draconic', "reptilian",],
noun: "thick strong draconic tail",
description: "a|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: "a|Their tail is strong enough to knock over trees and boulders, making it a highly dangerous weapon.",
},
tail_demon: {
size_adjective: ['demonic', ],
noun: "long thin tail with sharp end point",
description: "a|possess a long thin tail with sharp end point",
flavor: "",
},
dick_werewolf: {
size_adjective: ['werewolf', "canine", ],
noun: "dog-like knotted dick",
description: "a|possess a dog-like knotted dick",
flavor: "The currently unswollen knot is visible at the base of a|their dick.",
},
dick_dragonkin: {
size_adjective: ['draconic', ],
noun: "slender draconic dick",
description: "a|possess a slender draconic dick",
flavor: "",
},
dick_demon: {
size_adjective: ['demonic', ],
noun: "uneven bumpy dick",
description: "a|possess an uneven bumpy dick",
flavor: "The entire length of a|their shaft is covered by bumps.",
},
/* =======================
PERSONALITY TRAITS
======================= */
per_slow: {
adjective: ['slow', 'dumb', 'dutiful'],
adjbad: ['dumb', 'slow', 'dense', 'thick',],
adjgood: ['dutiful', ],
description: 'a|is not as bright as most',
hobby: ["lying on a|their back watching the clouds,", ],
adverbs: ['carefully' ],
noungood: ['simple-mindedness', ],
nounbad: ['stupidity', ],
},
per_smart: {
adjective: ['smart', 'clever', 'insightful', 'witty'],
adjbad: ['braggard', 'impatient',],
adjgood: ['smart', 'clever', 'insightful'],
descriptionslave: 'a|is brighter than most and should be watched out',
descriptionslaver: 'a|is brighter than most',
adverbs: ['impatiently', 'cleverly', ],
noungood: ['intelligence', ],
nounbad: ['high-horsedness', 'snobby'],
hobby: ["writing a book", "writing in a|their journal", "reading a dense tome on whatever has caught a|their fancy", "writing a book, well, a|they call it interactive fiction" ],
},
per_gregarious: {
adjective: ['gregarious', 'silver-tongued', 'social', ],
adjbad: ['shameless', 'pushy',],
adjgood: ['gregarious', 'silver-tongued', ],
description: 'a|enjoy the company of others',
adverbs: ['charmingly', 'cordially', 'warmly' ],
noungood: ['eloquence', ],
nounbad: ['shamelessness', ],
hobby: ["chatting with other slavers", "telling ghost stories in broad daylight",],
care: true,
},
per_loner: {
adjective: ['loner', 'reclusive', ],
adjbad: ['antisocial', 'asocial',],
adjgood: ['self-sufficient', ],
description: 'a|prefer a|their own company',
adverbs: ['quietly', 'softly', 'awkwardly', ],
hobby: ["spending time alone in a|their own room", ],
noungood: ['self-dependence', ],
nounbad: ['aloofness', ],
care: true,
abuse: true,
},
per_chaste: {
adjective: ['chaste', 'prudish', ],
adjbad: ['prude', 'shy', ],
adjgood: ['temperate', 'modest', ],
description: 'a|is averse to the act of sex',
adverbs: ['modestly', 'shyly',],
noungood: ['temperance', ],
hobby: ["finding a|their true love", ],
nounbad: ['prudeness', ],
care: true,
abuse: true,
},
per_lustful: {
adjective: ['lustful', 'seductive', 'flirtatious', ],
adjbad: ['indecent', 'immodest', ],
adjgood: ['seductive', ],
description: 'actively a|seek sexual acts',
adverbs: ['lustfully', 'lewdly', 'sensually',
'sexily', 'passionately', 'amorously', ],
noungood: ['passion', ],
hobby: ["using some slaves for a|their amusement", ],
nounbad: ['immodesty', 'indecency', ],
abuse: true,
},
per_sexaddict: {
adjective: ['lecherous', 'perverted', 'lewd', ],
adjbad: ['lecherous', 'perverted', ],
adjgood: ['passionate', ],
description: 'a|is hopelessly addicted to sex',
adverbs: ['lasciviously', 'lustfully', 'salaciously', 'seductively', 'lecherously',],
noungood: ['fiery passion', ],
hobby: ["using some slaves for a|their amusement", ],
nounbad: ['perversion', ],
abuse: true,
},
per_lavish: {
adjective: ['generous', 'big-spending', ],
adjbad: ['naive', 'wasteful', ],
adjgood: ['generous', 'unselfish', ],
description: 'a|spend more than necessary',
adverbs: ['generously', 'openly', 'loftily',],
noungood: ['generosity', ],
nounbad: ['naivety', ],
hobby: ["splurging money on one-night stands", "looking at expensive decorations for a|their room", "heading out for a fancy meal", "going to the theatre",],
care: true,
},
per_frugal: {
adjective: ['thrifty', 'greedy', 'frugal', ],
adjbad: ['selfish', 'greedy', ],
adjgood: ['frugal', ],
description: 'a|know how to save money',
adverbs: ['carefully', 'cautiously', ],
noungood: ['frugality', ],
nounbad: ['greed', ],
hobby: ["saving some money for retirement", "taking a walk",],
abuse: true,
},
per_proud: {
adjective: ['proud', 'cocky', 'smug', 'haughty', 'arrogant', ],
adjbad: ['arrogant', 'cocky', 'conceited', 'smug', 'haughty', ],
adjgood: ['proud', 'cocksure', ],
description: 'a|think highly of themself',
adverbs: ['cockily', 'arrogantly', 'haughtily', ],
noungood: ['pride', ],
nounbad: ['arrogance', ],
hobby: ["gazing vainly into the mirror", "admiring a|their own reflection in the mirror", "cleaning a|their nails", "combing a|their hair", "shopping for the perfect fragrance", ],
abuse: true,
},
per_humble: {
adjective: ['humble', 'modest', 'self-effacing', 'quiet', ],
adjbad: ['passive', ],
adjgood: ['modest', 'respectful', 'humble', ],
description: 'a|think modestly of a|themself',
adverbs: ['modestly', 'humbly', 'respectfully', ],
noungood: ['humbleness', ],
nounbad: ['lack of self-esteem', ],
hobby: ["looking after others", "caring for the animals", "fetching water", "helping out around the fort",],
care: true,
},
per_brave: {
adjective: ['brave', 'courageous', 'intrepid', ],
adjbad: ['careless', ],
adjgood: ['brave', 'courageous', 'intrepid', ],
description: 'a|is braver than most',
adverbs: ['bravely', 'courageously', 'fearlessly', 'boldly',],
noungood: ['bravado', 'bravery', ],
nounbad: ['carelessness', ],
hobby: ["challenging others to increasinly risky dares", ],
abuse: true,
},
per_cautious: {
adjective: ['cautious', 'careful', ],
adjbad: ['cowardly', ],
adjgood: ['cautious', 'careful', 'prudent', ],
description: 'a|think before acting',
adverbs: ['carefully', 'cautiously',],
noungood: ['preparedness', ],
nounbad: ['cowardice', ],
hobby: ["planning for tomorrow", "keeping an eye on things", "checking the stores",],
care: true,
abuse: true,
},
per_kind: {
adjective: ['kind', 'warm', 'amiable', ],
adjbad: ['fragile', ],
adjgood: ['kind', 'amiable', ],
description: 'a|is kinder than most',
adverbs: ['kindly', 'amiably'],
noungood: ['kindness', ],
nounbad: ['bleeding heart', ],
hobby: ["caring for a|their fellow slavers", ],
care: true,
},
per_cruel: {
adjective: ['cruel', 'merciless', 'sadistic', ],
adjbad: ['vile', ],
adjgood: ['brutal', 'merciless', ],
adverbs: ['cruelly', 'brutally', 'harshly', 'ruthlessly', 'sadistically', ],
description: 'a|enjoy the suffering of others',
nounbad: ['cruelty', ],
noungood: ['mercilessness', ],
hobby: ["abusing slaves", ],
abuse: true,
},
per_lunatic: {
adjective: ['lunatic', 'deranged', 'crazy', ],
adjbad: ['mad', 'deranged', 'crazy', ],
adverbs: ['madly', 'incoherently',],
description: 'a|act unpredictably',
hobby: ["laughing maniacally", "staring unblinkingly at people without saying anything", "talking to Mr squigglesworth, the invisible pink rabbit no one else can see",],
noungood: ['unpredictability', ],
nounbad: ['madness', 'lunacy', ],
abuse: true,
},
per_masochistic: {
adjective: ['masochistic', ],
adjbad: ['masochistic', ],
adverbs: ['masochistically', ],
description: 'a|derive pleasure from pain',
/* masochistic intentionally appear twice because it is important for this trait */
hobby: ["exchanging positions with a slave", "looking for someone to flog",],
noungood: ['pain tolerance'],
nounbad: ['masochism', ],
abuse: true,
},
per_loyal: {
adjective: ['loyal', 'reliable', ],
adjbad: ['codependant', ],
adjgood: ['loyal', 'reliable', ],
adverbs: ['loyally', 'staunchly', 'firmly',],
description: 'a|stay with a|their friends until the very end',
noungood: ['loyalty', ],
nounbad: ['blind trust', ],
hobby: ["admiring the company's achievements", ],
},
per_independent: {
adjective: ['independent', 'selfish', ],
adjbad: ['disloyal', 'selfish', 'self-centered', ],
adverbs: ['selfishly', 'self-centeredly', 'egocentrically', 'narcistically', 'egosticially',],
description: 'a|is more selfish than most',
noungood: ['self-sufficiency', ],
nounbad: ['disloyalty', ],
hobby: ["thinking about a|their future away from your company", ],
abuse: true,
},
per_direct: {
adjective: ['honest', 'candid', 'direct', 'straight-forward', 'blunt', 'brash', ],
adjbad: ['blunt', 'artless', 'rude'],
adjgood: ['sincere', 'candid', 'direct', ],
adverbs: ['candidly', 'frankly', 'sincerely', 'bluntly', 'directly', 'rudely', ],
description: 'a|go straight to the point',
noungood: ['honesty', ],
nounbad: ['foolishness', 'artlessness', ],
hobby: ["listening to others", ],
care: true,
},
per_sly: {
adjective: ['deceitful', 'cunning', 'sly', 'crafty', 'artful', ],
adjbad: ['insincere', 'conniving', ],
adjgood: ['discreet', 'cunning', 'crafty', 'artful', ],
adverbs: ['cunningly', 'covertly', 'discreetly', 'furtively', 'politely', 'charmingly', ],
description: 'a|enjoy scheming',
noungood: ['cunningness', 'artfulness', ],
nounbad: ['deceptiveness', ],
hobby: ["scheming nefariously", ],
care: true,
},
per_stubborn: {
adjective: ['stubborn', 'obstinate', ],
adjbad: ['obstinate', ],
adjgood: ['adamant', ],
adverbs: ['stubbornly', 'doggedly', 'adamantly',],
description: 'a|is unwilling to change a|their convictions',
noungood: ['stoutness', ],
nounbad: ['stubbornness', ],
hobby: ["having a friendly competition with others", ],
abuse: true,
},
per_curious: {
adjective: ['curious', 'nosy', ],
adjbad: ['nosy', ],
adjgood: ['inquisitive', ],
adverbs: ['curiously', 'inquisitively', ],
description: 'a|is curious about most things',
noungood: ['curiosity', ],
nounbad: ['curiosity', ],
hobby: ["exploring new hobbies", ],
abuse: true,
},
per_dominant: {
adjective: ['domineering', 'dominant', 'confident', 'assertive', ],
adjbad: ['bad-mannered', ],
adjgood: ['confident', 'assertive', ],
adverbs: ['assertively', 'confidently', 'forcefully', 'boldly',],
description: 'a|prefer to dominate others',
noungood: ['confidence', ],
nounbad: ['bad manners', ],
hobby: ["instilling discipline to slaves", "leading the reconstruction efforts",],
care: true,
abuse: true,
},
per_submissive: {
adjective: ['submissive', 'meek', 'timid', ],
adjbad: ['meek', 'demure', 'obsequious', 'timid', ],
adjgood: ['good-mannered', ],
adverbs: ['meekly', 'uncomfortably', 'timidly', 'softly', 'gently', 'demurely',],
description: 'a|prefer to be dominated by others',
nounbad: ['meekness', ],
noungood: ['obedience'],
hobby: ["doing chores", "helping in the garden", "spending some quiet time looking out at the views",],
care: true,
},
per_logical: {
adjective: ['logical', 'rational', 'methodical', ],
adjbad: ['cold-hearted', 'uncaring', 'emotionless',],
adjgood: ['rational', ],
adverbs: ['clearly',],
description: 'a|employ logic over emotions',
noungood: ['rational mind', ],
nounbad: ['cold-heartedness', ],
hobby: ["calculating a|their chances in a|their next assignment", "playing chess", "playing word games with some fellow slavers",],
care: true,
abuse: true,
},
per_empath: {
adjective: ['empathetic', 'irrational', 'emotional', 'sentimental', ],
adjbad: ['irrational', ],
adjgood: ['empathetic', ],
adverbs: ['empathetically', 'dramatically',],
description: 'a|employ emotions over logic',
noungood: ['empathetic heart', ],
nounbad: ['empathetic heart', ],
hobby: ["obsessing over a|their feelings", ],
care: true,
abuse: true,
},
per_honorable: {
adjective: ['honorable', 'chivalrious', 'virtuous', ],
adjbad: ['honorbound', ],
adjgood: ['honorable', 'chivalrious', 'virtuous', ],
adverbs: ['honorably', 'ethically', 'virtuously',],
description: 'a|adhere to a strong moral code',
noungood: ['honor', ],
nounbad: ['blind adherence to honor', ],
hobby: ["questioning a|their choice of occupation", ],
care: true,
},
per_evil: {
adjective: ['evil', 'wicked', 'immoral', ],
adjbad: ['wicked', 'malicious', ],
adverbs: ['wickedly', 'maliciously'],
description: 'a|do not get burdened by moral codes',
noungood: ['debauchery', ],
nounbad: ['wickedness', ],
hobby: ["planning world domination", ],
abuse: true,
},
per_attentive: {
adjective: ['attentive', 'meticulous', 'perceptive', ],
adjgood: ['attentive', 'meticulous', 'observant', 'watchful', 'perceptive',],
adjbad: ['accusatory', ],
adverbs: ['perceptively', 'insightfully', ],
description: 'a|have a sensitive insight',
noungood: ['attention', ],
nounbad: ['mistrust', ],
hobby: ["paying attention to a|their surroundings", ],
care: true,
},
per_dreamy: {
adjective: ['dreamy', 'carefree', 'airy', ],
adjgood: ['happy', 'carefree', 'happy-go-lucky', ],
adjbad: ['airy', 'careless', 'inattentive', 'sloppy', 'obtuse', 'clumsy', ],
adverbs: ['nonchalantly', 'absently', 'negligently',],
description: 'a|have not a care in the world',
noungood: ['optimism', ],
nounbad: ['clumsiness', ],
hobby: ["daydreaming", "lying on a|their back, watching the clouds", ],
care: true,
},
per_aggressive: {
adjective: ['aggressive', 'irritable', 'decisive', ],
adjbad: ['irritable', 'impatient', ],
adjgood: ['forceful', 'decisive', 'eager', ],
adverbs: ['aggressively', 'angrily', 'irately', 'impatiently', 'eagerly',],
description: 'a|is quick both to anger and to come into action',
noungood: ['decisiveness', ],
nounbad: ['aggresiveness', ],
hobby: ["looking for others interested in bare-knuckle boxing", "running an impromptu boxing tournament", ],
abuse: true,
},
per_calm: {
adjective: ['calm', 'patient', 'stoic', ],
adjbad: ['slow-to-act', 'indecisive', ],
adjgood: ['calm', 'tranquil', 'patient', 'stoic', ],
adverbs: ['patiently', 'calmly', 'stoicly', 'coolly',],
description: 'always a|maintain composure',
noungood: ['calming presence', ],
nounbad: ['inability to make a decision', ],
hobby: ["resting", ],
care: true,
abuse: true,
},
per_playful: {
adjective: ['playful', 'naughty', ],
adjbad: ['naughty', ],
adjgood: ['joyful', 'fun', ],
adverbs: ['playfully', 'jokingly', 'impishly', 'amusingly', 'sarcastically',],
description: 'a|is fond of games and amusements',
noungood: ['joyful presence', ],
nounbad: ['naughtiness', ],
hobby: ["playing with others", ],
care: true,
abuse: true,
},
per_serious: {
adjective: ['serious', 'strict', 'grim', ],
adjbad: ['unfun', ],
adjgood: ['stern', ],
adverbs: ['seriously', 'grimly', 'sternly', 'darkly'],
description: 'always a|appear with a serious expression',
noungood: ['grim presence', ],
nounbad: ['grimness', ],
hobby: ["working", ],
care: true,
abuse: true,
},
per_studious: {
adjective: ['studious', 'diligent', ],
adjbad: ['bookish', 'nerdy', ],
adjgood: ['diligent', 'industrious', ],
adverbs: ['enthusiastically', 'studiously',],
description: 'a|love studying',
noungood: ['diligence', ],
nounbad: ['nerdiness', ],
hobby: ["studying in a|their room", ],
},
per_active: {
adjective: ['active', 'energetic', ],
adjbad: ['book-dumb', 'disquiet', ],
adjgood: ['energetic', 'full-of-life', ],
adverbs: ['energetically', 'animatedly',],
description: 'a|enjoy physical activities',
noungood: ['energy', ],
nounbad: ['dumbness', ],
hobby: ["exercising in the courtyard", "playing football with some of the other slavers", ],
care: true,
abuse: true,
},
/* =======================
SKILL TRAITS
======================= */
skill_alchemy: {
description: 'a|is skilled at mixing potions',
noungood: ['skill in mixing potions', ],
hobby: ["making strange concoctions", "trying to create a philosopher's stone", "brewing tinctures",],
},
skill_animal: {
description: 'a|know how to communicate with animals',
noungood: ['skill with animals', ],
hobby: ["connecting with surrounding wildlife", "caring for your livestock", "feeding the birds",],
},
skill_ambidextrous: {
description: 'can use both arms equally well',
noungood: ['skill using both hands', ],
hobby: ["practicing a|their dual-wielding skills", "sparring with other slavers",],
},
skill_connected: {
description: 'a|know many important people in the region',
noungood: ['wide connections', ],
hobby: ["talking with visitors", "making new freinds",],
},
skill_creative: {
description: 'a|is blessed with a creative mind',
noungood: ['creativity', ],
hobby: ["composing new songs", "writing poetry", "painting a mural inside your great hall",],
},
skill_intimidating: {
description: 'a|is feared by many',
noungood: ['intimidating presence', ],
hobby: ["working on a|their voice", "breaking slaves",],
},
skill_hypnotic: {
description: 'a|know how to subconciously influence others',
noungood: ['hypnotic gaze', ],
hobby: ["practicing hypnotism", "making slaves think they're animals"],
},
skill_entertain: {
description: 'a|is skilled in entertaining others',
noungood: ['entertaining skills', ],
hobby: ["juggling for fun", "playing the lute", "practicing tumbling",],
},
skill_flight: {
description: 'can soar through the sky',
hobby: ["soaring into the sky", "taking in the views from the roof of the keep",],
},
magic_fire: {
description: 'a|is gifted in the domain of <<lore magic_fire>>',
noun: 'fire',
noungood: ['affinity for fire', ],
hobby: ["cooking", "making charcoal", "helping in the smithy", "heating water for bathing",],
},
magic_fire_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_fire>> and purification',
noun: 'purifying flame',
noungood: ['affinity for fire', ],
hobby: ["purifying a|their drink", "making charcoal", "smelting metal",],
},
magic_water: {
description: 'a|is gifted in the domain of <<lore magic_water>>',
noun: 'water',
noungood: ['affinity for water', ],
hobby: ["taking a nice long bath", "watering the garden", "washing the slaves", "forming orbs of water in the air and watching fish swim inside of them",],
},
magic_water_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_water>> and fleshshaping',
noun: 'fleshshaping',
noungood: ['affinity for water', ],
hobby: ["altering little bits of a|their appearance", "forming orbs of water in the air and watching fish swim inside of them", "doing eeriely accurate impresonations of other slavers",],
},
magic_wind: {
description: 'a|is gifted in the domain of <<lore magic_wind>>',
noun: 'wind',
noungood: ['affinity for wind', ],
hobby: ["sight-seeing", "flying a kite",],
},
magic_wind_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_wind>> and electric magic',
noun: 'electricity',
noungood: ['affinity for wind', ],
hobby: ["summoning lightning for fun", "trying to tame lightning and harness its power",],
},
magic_earth: {
description: 'a|is gifted in the domain of <<lore magic_earth>>',
noun: 'earth',
noungood: ['affinity for earth', ],
hobby: ["gardening", "digging a new cesspit", "drawing perfectly cut building stone from the earth",],
},
magic_earth_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_earth>> and can employ a|their powers to conjure tentacles',
noun: 'tentacles',
noungood: ['affinity for earth', ],
hobby: ["practicing a|their tentacle conjuration techniques", ],
},
magic_dark: {
description: 'a|is gifted in the domain of <<lore magic_dark>>',
noun: 'darkness',
noungood: ['affinity for dark', ],
hobby: ["brooding", "making shadow puppets"],
},
magic_dark_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_dark>> and corruption',
noun: 'corruption',
noungood: ['affinity for dark', ],
hobby: ["corrupting slaves", ],
},
magic_light: {
description: 'a|is gifted in the domain of <<lore magic_light>>',
noun: 'light',
noungood: ['affinity for light', ],
hobby: ["praying", ],
},
magic_light_master: {
description: 'a|is exceptionally gifted in the domain of <<lore magic_light>> and healing',
noun: 'healing',
noungood: ['affinity for light', ],
hobby: ["healing others", "caring for patients"],
},
/* =======================
TRAUMA TRAITS
======================= */
trauma_combat: {
description: 'greatly a|fear confrontrations',
},
trauma_brawn: {
description: 'a|have little energy during daytime',
},
trauma_survival: {
description: 'a|have lost the joy of life',
},
trauma_intrigue: {
description: 'a|is always nervous',
},
trauma_slaving: {
description: 'a|is easily imposed on',
},
trauma_knowledge: {
description: 'often a|forget things',
},
trauma_social: {
description: 'always a|suspect the worst on others',
},
trauma_aid: {
description: 'a|is cursed with bad luck',
},
trauma_arcane: {
description: 'a|is unable to concentrate at all',
},
trauma_sex: {
description: 'a|have completely lost interest in sex',
},
/* =======================
BOON TRAITS
======================= */
boon_combat: {
description: 'a|is undeterred',
},
boon_brawn: {
description: 'a|is full of energy',
},
boon_survival: {
description: 'a|is full of life',
},
boon_intrigue: {
description: 'a|notice more insights than usual',
},
boon_slaving: {
description: 'a|is an imposing presence',
},
boon_knowledge: {
description: 'a|have all a|their thoughts neatly sorted out',
},
boon_social: {
description: 'a|is full of happiness',
},
boon_aid: {
description: 'a|is blessed with good fortune',
},
boon_arcane: {
description: 'a|is clear-minded on one goal',
},
boon_sex: {
description: 'a|show strong feelings towards others',
},
/* =======================
TRAINING TRAITS
======================= */
training_obedience_basic: {
description: 'a|is starting to obey most command, but still show signs of deviance',
title: 'Slave',
},
training_obedience_advanced: {
description: 'a|have understood that a|their role in life is to serve a|their betters forever',
title: 'Obedient Slave',
},
training_obedience_master: {
description: 'a|have embraced the life of slavery so deep that a|they will always seek a|their master and beg to be enslaved no matter what',
title: 'Fanatic Slave',
},
training_endurance_basic: {
description: 'a|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: 'a|have been intensely trained and can now comfortably serve as any furniture a|their master need be it a chair, table, or a footstool',
title: 'Endurance Slave',
},
training_endurance_master: {
description: 'a|is a masterful endurance slave that can withstand the heaviest of abuse and serve a|their duties for an extraordinarily long time without respite',
title: 'Masterful Endurance Slave',
},
training_domestic_basic: {
description: 'a|have undergone basic domestic training and with the right gear can pass as a maid slave',
title: 'Beginner Domestic Slave',
},
training_domestic_advanced: {
description: "a|have reasonable skills in being a good domestic slave including doing domestic work while simultaneously arousing a|their master's guests",
title: 'Domestic Slave',
},
training_domestic_master: {
description: "a|is a masterful domestic slave capable of both singlehandedly taking care of a mansion as well as entertaining all its guests with all a|their holes",
title: 'Masterful Domestic Slave',
},
training_oral_basic: {
description: 'a|have learned basic cocksucking technique enough to not accidentally choke on dicks',
title: 'Beginner Oral Slave',
},
training_oral_advanced: {
description: 'a|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: 'a|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: 'a|have basic understanding of vaginal sex enough to know how to give more pleasure to a|their partner',
title: 'Beginner Vaginal Slave',
},
training_vagina_advanced: {
description: 'a|is reasonably skilled at vaginal sex and know how to move her vaginal muscles to maximize pleasure for a|their partner',
title: 'Vaginal Slave',
},
training_vagina_master: {
description: 'a|is a masterful vaginal slave who can comfortably take even the largest dick or multiple dicks up a|their vagina and then a|beg for more',
title: 'Masterful Vaginal Slave',
},
training_anal_basic: {
description: 'a|have sufficient understanding on taking it up a|their anus without showing any symptoms of discomfort',
title: 'Beginner Anal Slave',
},
training_anal_advanced: {
description: 'a|have learned how to receive pleasure from a|their anus as well as give back as much pleasure as possible in return',
title: 'Anal Slave',
},
training_anal_master: {
description: 'a|is a masterful anal slut capable of taking the largest of dicks comfortably up a|their rear and contract a|their anal splinchters to give maximum pleasure in return',
title: 'Masterful Anal Slave',
},
training_dominance_basic: {
description: 'a|have learned the basics on how to handle the handle side of a whip',
title: 'Beginner Dominance Slave',
},
training_dominance_advanced: {
description: 'a|have expert knowledge on how to dominate other slaves when a|their master commands',
title: 'Dominance Slave',
},
training_dominance_master: {
description: 'a|is a masterful dominance slave capable of even dominating your other slavers if a|their master commands a|them to',
title: 'Masterful Dominance Slave',
},
training_masochist_basic: {
description: 'a|have basic understanding how to wire pain into pleasure',
title: 'Beginner Masochist Slave',
},
training_masochist_advanced: {
description: 'a|have completed a|their understanding of masochism and now no longer display any discomfort from receiving pain and instead a|beg for more',
title: 'Masochist Slave',
},
training_masochist_master: {
description: 'a|is a masterful masochist slave that regardless of whether or not a|they a|have the talent for it always a|seek out the largest punishment and a|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: 'a|have completely forgotten a|their previous identity of a man and will forever be a girl from now',
title: 'Sissy Slave',
},
training_sissy_master: {
description: 'a|is a masterful sissy slave whose dick is completely useless now and is never hard, and would put other girls to shame during humiliating displays',
title: 'Masterful Sissy Slave',
},
training_pet_basic: {
description: 'a|look cute with a pet gear and will follow easy commands but not much else',
title: 'Beginner Pet Slave',
},
training_pet_advanced: {
description: 'a|is comfortable at a|their role as a pet now and will never break character no matter what the circumstances are',
title: 'Pet Slave',
},
training_pet_master: {
description: 'a|is a masterful pet slave comfortable wearing a|their entire pet gear permanently as well as performing even the most difficult and degrading tricks',
title: 'Masterful Pet Slave',
},
training_pony_basic: {
description: 'a|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: 'a|is an accomplished pony slave capable of both being a beast of burden over medium distances as well as a|their duties as a sex slave',
title: 'Pony Slave',
},
training_pony_master: {
description: 'a|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: 'a|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: 'a|have undergone difficult training and can now consume piss regularly without showing any discomfort',
title: 'Toilet Slave',
},
training_toilet_master: {
description: 'a|is a masterful toilet slave capable of being installed semi-permanently in urinals and actually would beg for the opportunity to do so, given the chance',
title: 'Masterful Toilet Slave',
},
training_horny_basic: {
description: 'a|have basic understanding of how to keep a|themself aroused on command',
title: 'Beginner Nympho Slave',
},
training_horny_advanced: {
description: 'can comfortably keep a|themself aroused and hard at all times',
title: 'Nympho Slave',
},
training_horny_master: {
description: "a|is a masterful nympho slave who is always horny at all times without exception and always seek out a|their master's attention",
title: 'Masterful Nympho Slave',
},
training_roleplay_basic: {
description: 'a|know the basic of using words to arouse others',
title: 'Beginner Roleplay Slave',
},
training_roleplay_advanced: {
description: 'a|is quite skilled at roleplaying, capable of enacting improbable scenarios as something quite believable',
title: 'Roleplay Slave',
},
training_roleplay_master: {
description: 'a|is a master roleplayer, to the point where their acting is sometimes even more believable than compared to the real deal',
title: 'Masterful Roleplay Slave',
},
training_mindbreak: {
description: 'a|have a mind that has been completely broken and can no longer be anything but a huskless fuckslave',
title: 'Mindbroken Slave',
},
training_none: {
description: 'a|have undergone no training whatsoever and a|spit defiance with a|their every word',
title: 'Disobedient Slave',
},
will_defiant: {
description: 'a|possess extreme willpower, capable of enduring all the training and punishment that would normally' +
' break a slave without showing much discomfort. It would require specialized treatment if one were to break a|them',
title: 'Defiant Slave',
},
will_indomitable: {
description: 'a|is completely irresponsive to any training whatsoever. There may or may not be a way to break the slave eventually',
title: 'Indomitable 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', 'rich',],
)>>
/* 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', 'rich',],
)>>
/* 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', 'rich',],
)>>
/* SPECIAL */
<<run new setup.Trait(
'bg_mist',
'mistwalker',
"Travel frequently between this world and the next",
setup.MONEY_TRAIT_UNICORN,
{arcane: 0.12, slaving: 0.12, sex: 0.12, brawn: 0.12, aid: -0.23},
['bg', 'unicorn', 'rich',],
)>>
/* ################################## */
/* 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', 'rich',],
)>>
/* 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', 'poor',],
)>>
<<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', 'poor',],
)>>
<<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', 'poor',],
)>>
/* INTRIGUE */
<<run new setup.Trait(
'bg_thief',
'thief',
"Lightens the load without anybody noticing",
0,
{intrigue: 0.1},
['bg', 'common', 'poor',],
)>>
<<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', 'poor',],
)>>
/* 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', 'poor',],
)>>
/* ARCANE */
/* SEX */
<<run new setup.Trait(
'bg_whore',
'whore',
"Sells their body for a living",
0,
{sex: 0.1},
['bg', 'common', 'poor',],
)>>
/* #################################### */
/* 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', 'poor',],
)>>
<<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', 'poor',],
)>>/*
Curse and Blessing traits. These traits does not affect skills, but have other gameplay effects.
*/
/* =================== */
/* INJURY BLESSINGS */
/* =================== */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_weakness8',
'curse of weakness (8)',
'Multiplies injury duration (up to additional ' + (8 * setup.CURSE_INJURY_WEEKS) + ' weeks) (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness7',
'curse of weakness (7)',
'Multiplies injury duration (up to additional ' + (7 * setup.CURSE_INJURY_WEEKS) + ' weeks) (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness6',
'curse of weakness (6)',
'Multiplies injury duration (up to additional ' + (6 * setup.CURSE_INJURY_WEEKS) + ' weeks) (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness5',
'curse of weakness (5)',
'Multiplies injury duration (up to additional ' + (5 * setup.CURSE_INJURY_WEEKS) + ' weeks) (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness4',
'curse of weakness (4)',
'Multiplies injury duration (up to additional ' + (4 * setup.CURSE_INJURY_WEEKS) + ' weeks) (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness3',
'curse of weakness (3)',
'Multiplies injury duration (up to additional ' + (3 * setup.CURSE_INJURY_WEEKS) + ' weeks) (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness2',
'curse of weakness (2)',
'Multiplies injury duration (up to additional ' + (2 * setup.CURSE_INJURY_WEEKS) + ' weeks) (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_weakness', },
),
new setup.Trait(
'curse_weakness1',
'curse of weakness (1)',
'Multiplies injury duration (up to additional ' + (1 * setup.CURSE_INJURY_WEEKS) + ' weeks) (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_weakness', },
),
null,
new setup.Trait(
'blessing_protection1',
'blessing of protection (1)',
'Prevents up to ' + (1 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection2',
'blessing of protection (2)',
'Prevents up to ' + (2 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection3',
'blessing of protection (3)',
'Prevents up to ' + (3 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection4',
'blessing of protection (4)',
'Prevents up to ' + (4 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection5',
'blessing of protection (5)',
'Prevents up to ' + (5 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection6',
'blessing of protection (6)',
'Prevents up to ' + (6 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection7',
'blessing of protection (7)',
'Prevents up to ' + (7 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_protection', },
),
new setup.Trait(
'blessing_protection8',
'blessing of protection (8)',
'Prevents up to ' + (8 * setup.BLESSING_INJURY_WEEKS) + ' weeks of injuries (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_protection', background: 'blessing_max' },
),
], ['blessingcurse', 'blessingprotection'])>>
/* =================== */
/* TRAUMA BLESSINGS */
/* =================== */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_madness8',
'curse of madness (8)',
'Multiplies trauma duration (up to additional ' + (8 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness7',
'curse of madness (7)',
'Multiplies trauma duration (up to additional ' + (7 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness6',
'curse of madness (6)',
'Multiplies trauma duration (up to additional ' + (6 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness5',
'curse of madness (5)',
'Multiplies trauma duration (up to additional ' + (5 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness4',
'curse of madness (4)',
'Multiplies trauma duration (up to additional ' + (4 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness3',
'curse of madness (3)',
'Multiplies trauma duration (up to additional ' + (3 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness2',
'curse of madness (2)',
'Multiplies trauma duration (up to additional ' + (2 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_madness', },
),
new setup.Trait(
'curse_madness1',
'curse of madness (1)',
'Multiplies trauma duration (up to additional ' + (1 * setup.CURSE_TRAUMA_WEEKS) + ' weeks) (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_madness', },
),
null,
new setup.Trait(
'blessing_sanity1',
'blessing of sanity (1)',
'Prevents up to ' + (1 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity2',
'blessing of sanity (2)',
'Prevents up to ' + (2 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity3',
'blessing of sanity (3)',
'Prevents up to ' + (3 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity4',
'blessing of sanity (4)',
'Prevents up to ' + (4 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity5',
'blessing of sanity (5)',
'Prevents up to ' + (5 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity6',
'blessing of sanity (6)',
'Prevents up to ' + (6 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity7',
'blessing of sanity (7)',
'Prevents up to ' + (7 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_sanity', },
),
new setup.Trait(
'blessing_sanity8',
'blessing of sanity (8)',
'Prevents up to ' + (8 * setup.BLESSING_TRAUMA_WEEKS) + ' weeks of trauma (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_sanity', background: 'blessing_max' },
),
], ['blessingcurse', 'blessingsanity'])>>
/* ======================= */
/* CORRUPTION BLESSINGS */
/* ======================= */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_vice8',
'curse of vice (8)',
'Increase effect of corruption on unit (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice7',
'curse of vice (7)',
'Increase effect of corruption on unit (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice6',
'curse of vice (6)',
'Increase effect of corruption on unit (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice5',
'curse of vice (5)',
'Increase effect of corruption on unit (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice4',
'curse of vice (4)',
'Increase effect of corruption on unit (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice3',
'curse of vice (3)',
'Increase effect of corruption on unit (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice2',
'curse of vice (2)',
'Increase effect of corruption on unit (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_vice', },
),
new setup.Trait(
'curse_vice1',
'curse of vice (1)',
'Increase effect of corruption on unit (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_vice', },
),
null,
new setup.Trait(
'blessing_purity1',
'blessing of purity (1)',
'Prevents a corruption attempt (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity2',
'blessing of purity (2)',
'Prevents up to two corruption attempts (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity3',
'blessing of purity (3)',
'Prevents up to three corruption attempts (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity4',
'blessing of purity (4)',
'Prevents up to four corruption attempts (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity5',
'blessing of purity (5)',
'Prevents up to five corruption attempts (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity6',
'blessing of purity (6)',
'Prevents up to six corruption attempts (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity7',
'blessing of purity (7)',
'Prevents up to seven corruption attempts (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_purity', },
),
new setup.Trait(
'blessing_purity8',
'blessing of purity (8)',
'Prevents up to eight corruption attempts (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_purity', background: 'blessing_max' },
),
], ['blessingcurse', 'blessingsanity'])>>
/* ================== */
/* LIFE BLESSINGS */
/* ================== */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_demise8',
'curse of demise (8)',
'You will lose some money when the slaver is gone from your company for any reason (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise7',
'curse of demise (7)',
'You will lose some money when the slaver is gone from your company for any reason (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise6',
'curse of demise (6)',
'You will lose some money when the slaver is gone from your company for any reason (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise5',
'curse of demise (5)',
'You will lose some money when the slaver is gone from your company for any reason (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise4',
'curse of demise (4)',
'You will lose some money when the slaver is gone from your company for any reason (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise3',
'curse of demise (3)',
'You will lose some money when the slaver is gone from your company for any reason (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise2',
'curse of demise (2)',
'You will lose some money when the slaver is gone from your company for any reason (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_demise', },
),
new setup.Trait(
'curse_demise1',
'curse of demise (1)',
'You will lose some money when the slaver is gone from your company for any reason (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_demise', },
),
null,
new setup.Trait(
'blessing_life1',
'blessing of life (1)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life2',
'blessing of life (2)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life3',
'blessing of life (3)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life4',
'blessing of life (4)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life5',
'blessing of life (5)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life6',
'blessing of life (6)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life7',
'blessing of life (7)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_life', },
),
new setup.Trait(
'blessing_life8',
'blessing of life (8)',
'May prevent a slaver from going missing. Consumes multiple stacks per use. Does not always work. (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_life', background: 'blessing_max' },
),
], ['blessingcurse', 'blessinglife'])>>
/* ================== */
/* LUCK BLESSINGS */
/* ================== */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_crow8',
'curse of crow (8)',
'Reverts a critical success into a success on quests (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow7',
'curse of crow (7)',
'Reverts a critical success into a success on quests (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow6',
'curse of crow (6)',
'Reverts a critical success into a success on quests (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow5',
'curse of crow (5)',
'Reverts a critical success into a success on quests (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow4',
'curse of crow (4)',
'Reverts a critical success into a success on quests (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow3',
'curse of crow (3)',
'Reverts a critical success into a success on quests (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow2',
'curse of crow (2)',
'Reverts a critical success into a success on quests (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_crow', },
),
new setup.Trait(
'curse_crow1',
'curse of crow (1)',
'Reverts a critical success into a success on quests (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_crow', },
),
null,
new setup.Trait(
'blessing_luck1',
'blessing of luck (1)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck2',
'blessing of luck (2)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck3',
'blessing of luck (3)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck4',
'blessing of luck (4)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck5',
'blessing of luck (5)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck6',
'blessing of luck (6)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck7',
'blessing of luck (7)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_luck', },
),
new setup.Trait(
'blessing_luck8',
'blessing of luck (8)',
'Rerolls a disastrous quest result once. Can reroll into another disaster outcome, if unlucky. Harder quests will consume more stacks. (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_luck', background: 'blessing_max' },
),
], ['blessingcurse', 'blessingluck'])>>
/* ================== */
/* VIRGIN BLESSINGS */
/* ================== */
<<run new setup.TraitGroup([
new setup.Trait(
'curse_agape8',
'curse of agape (8)',
'Prevent anus and vagina from being tightened. (8 stacks, max)',
8 * setup.CURSE_VALUE,
{},
['curse', 'cursemax', 'blessingcursemax', ],
{ tier: 8, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape7',
'curse of agape (7)',
'Prevent anus and vagina from being tightened. (7 stacks)',
7 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 7, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape6',
'curse of agape (6)',
'Prevent anus and vagina from being tightened. (6 stacks)',
6 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 6, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape5',
'curse of agape (5)',
'Prevent anus and vagina from being tightened. (5 stacks)',
5 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 5, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape4',
'curse of agape (4)',
'Prevent anus and vagina from being tightened. (4 stacks)',
4 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 4, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape3',
'curse of agape (3)',
'Prevent anus and vagina from being tightened. (3 stacks)',
3 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 3, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape2',
'curse of agape (2)',
'Prevent anus and vagina from being tightened. (2 stacks)',
2 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 2, icon: 'curse_agape', },
),
new setup.Trait(
'curse_agape1',
'curse of agape (1)',
'Prevent anus and vagina from being tightened. (1 stacks)',
1 * setup.CURSE_VALUE,
{},
['curse', ],
{ tier: 1, icon: 'curse_agape', },
),
null,
new setup.Trait(
'blessing_virginity1',
'blessing of virginity (1)',
'Prevents anus and vagina from being gaped. (1 stack)',
0,
{},
['blessing', ],
{ tier: 1, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity2',
'blessing of virginity (2)',
'Prevents anus and vagina from being gaped. (2 stacks)',
0,
{},
['blessing', ],
{ tier: 2, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity3',
'blessing of virginity (3)',
'Prevents anus and vagina from being gaped. (3 stacks)',
0,
{},
['blessing', ],
{ tier: 3, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity4',
'blessing of virginity (4)',
'Prevents anus and vagina from being gaped. (4 stacks)',
0,
{},
['blessing', ],
{ tier: 4, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity5',
'blessing of virginity (5)',
'Prevents anus and vagina from being gaped. (5 stacks)',
0,
{},
['blessing', ],
{ tier: 5, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity6',
'blessing of virginity (6)',
'Prevents anus and vagina from being gaped. (6 stacks)',
0,
{},
['blessing', ],
{ tier: 6, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity7',
'blessing of virginity (7)',
'Prevents anus and vagina from being gaped. (7 stacks)',
0,
{},
['blessing', ],
{ tier: 7, icon: 'blessing_virginity', },
),
new setup.Trait(
'blessing_virginity8',
'blessing of virginity (8)',
'Prevents anus and vagina from being gaped. (8 stacks, max)',
0,
{},
['blessing', 'blessingmax', 'blessingcursemax', ],
{ tier: 8, icon: 'blessing_virginity', background: 'blessing_max' },
),
], ['blessingcurse', 'blessingvirginity'])>><<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',
'A new member of your company and has been with you for less than a year',
0,
{},
),
null,
new setup.Trait(
'join_senior',
'senior',
'Has been with your company for a long time, more than four years',
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.Trait(
'job_slaver',
'slaver',
'A slaver in your employ',
0,
{},
['job', 'computed', ],
{},
)>>
<<run new setup.Trait(
'job_slave',
'slave',
'A slave under your care',
0,
{},
['job', 'computed', ],
{},
)>>
<<run new setup.Trait(
'job_retired',
'retired',
'Has retired from being a slaver at your company',
0,
{},
['job', 'computed', ],
{},
)>>
<<run new setup.Trait(
'job_unemployed',
'unemployed',
'Not part of your company',
0,
{},
['job', 'computed', ],
{},
)>>/* ####################### */
/* SPECIAL PERKS */
/* ####################### */
<<run new setup.Perk(
'perk_doppelganger',
'special perk: doppelganger',
"Shapeshifts into the <<rep setup.title.quest_doppelganged>> unit every " + setup.PERK_QUEST_DOPPELGANGER_WEEKS + " weeks when at home.",
0,
{
social: -0.5,
intrigue: -0.5,
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_QUEST_DOPPELGANGER_WEEKS == 0;
}),
setup.qres.Actor('unit', setup.qres.Home()),
]),
setup.qc.QuestDoppelganger(),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_doppelganged',
'special perk: doppelganged',
"Heal " + setup.PERK_QUEST_DOPPELGANGER_INJURY_HEAL + " weeks of injuries every " + setup.PERK_QUEST_DOPPELGANGER_INJURY_WEEKS + " weeks.",
0,
{
sex: -0.5,
social: -0.5,
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_QUEST_DOPPELGANGER_INJURY_WEEKS == 0;
}),
setup.qc.Heal('unit', setup.PERK_QUEST_DOPPELGANGER_INJURY_HEAL),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_harbinger_of_chaos',
'special perk: harbinger of chaos',
"Grant both a blessing and a curse every 13 weeks.",
0,
{
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % 13 == 0;
}),
setup.qc.DoAll([
setup.qc.Blessing('unit', 1, null, false),
setup.qc.Blessing('unit', 1, null, true),
]),
setup.qc.DoAll([]),
),
],
},
)>>
<<set _harbinger_of_crow_skill_boost = setup.PERK_QUEST_HARBINGER_OF_CROW_SKILL_BONUS>>
<<run new setup.Perk(
'perk_harbinger_of_crow',
'special perk: harbinger of crows',
"Increase skills, but grant a curse every 13 weeks.",
0,
{
combat: _harbinger_of_crow_skill_boost,
brawn: _harbinger_of_crow_skill_boost,
survival: _harbinger_of_crow_skill_boost,
intrigue: _harbinger_of_crow_skill_boost,
slaving: _harbinger_of_crow_skill_boost,
social: _harbinger_of_crow_skill_boost,
knowledge: _harbinger_of_crow_skill_boost,
aid: _harbinger_of_crow_skill_boost,
arcane: _harbinger_of_crow_skill_boost,
sex: _harbinger_of_crow_skill_boost,
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % 13 == 0;
}),
setup.qc.DoAll([
setup.qc.Blessing('unit', 1, null, true),
]),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_unstable_bodyshifter',
'special perk: unstable bodyshifter',
"Automatically bodyshifts every " + setup.PERK_UNSTABLE_BODYSHIFTER_WEEKS + " weeks when at home.",
0,
{
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_UNSTABLE_BODYSHIFTER_WEEKS == 0;
}),
setup.qres.Actor('unit', setup.qres.Home()),
]),
setup.qc.DoAll([
setup.qc.Bodyshift('unit'),
]),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_chaotic_personality',
'special perk: chaotic personality',
"If unit is at home, reverses personality every " + setup.PERK_CHAOTIC_PERSONALITY_WEEKS + " weeks. Does not reverse lustful or chaste.",
0,
{
},
['perk', 'perkspecial',],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_CHAOTIC_PERSONALITY_WEEKS == 0;
}),
setup.qc.DoAll([
setup.qc.PerkChaoticPersonality(),
]),
setup.qc.DoAll([]),
),
],
},
)>>
/* ####################### */
/* RANDOM PERKS */
/* ####################### */
<<run new setup.Perk(
'perk_generalist',
'perk: generalist',
"Very slightly increase all skills",
0,
{
combat: setup.PERK_GENERALIST_SKILL_GAIN,
brawn: setup.PERK_GENERALIST_SKILL_GAIN,
survival: setup.PERK_GENERALIST_SKILL_GAIN,
intrigue: setup.PERK_GENERALIST_SKILL_GAIN,
slaving: setup.PERK_GENERALIST_SKILL_GAIN,
social: setup.PERK_GENERALIST_SKILL_GAIN,
knowledge: setup.PERK_GENERALIST_SKILL_GAIN,
aid: setup.PERK_GENERALIST_SKILL_GAIN,
arcane: setup.PERK_GENERALIST_SKILL_GAIN,
sex: setup.PERK_GENERALIST_SKILL_GAIN,
},
['perk', 'perkstandard', ],
{ /* icon settings */
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_uncursed',
'perk: uncursed',
"Unit cannot get cursed. Whenever unit is cursed, it gets traumatized for " + setup.PERK_UNCURSED_TRAUMA_DURATION + " weeks instead.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_reduce_trauma',
'perk: trauma-',
"Reduces trauma skills penalties by " + parseInt(setup.PERK_TRAUMA_PENALTY_REDUCTION * 100) + '%',
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_increase_boon',
'perk: boon+',
"Increases skill bonus from boons by " + parseInt(setup.PERK_BOON_BONUS_INCREASE * 100) + '%',
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_reduce_corruption',
'perk: corruption-',
"Reduces corrupted body part skill penalties by " + parseInt(setup.PERK_CORRUPTION_PENALTY_REDUCTION * 100) + '%',
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [
setup.qres.NoTrait(setup.trait.race_demon),
],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_sluttiness',
'perk: sluttiness+',
"Increase sluttiness limit by " + setup.PERK_SLUTTINESS_LIMIT_INCREASE + ". Stacks with <<rep setup.trait.per_lustful>><<rep setup.trait.per_sexaddict>>.",
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [
setup.qres.NoTrait(setup.trait.per_chaste),
],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_duty',
'perk: duty+',
"Increase duty trigger chance by " + parseInt(setup.PERK_DUTY_BONUS * 100) + '%',
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_specialist',
'perk: specialist',
"Reduce duty specialist replacement weekly cost by " + parseInt(setup.PERK_SPECIALIST_REDUCTION * 100) + '%',
0,
{},
['perk', 'perkstandard', ],
{ /* icon settings */
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_blessing',
'perk: blessing',
"Grant a random blessing every " + setup.PERK_BLESSING_WEEKS + " weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_BLESSING_WEEKS == 0;
}),
setup.qc.Blessing('unit', 1),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_corruption',
'perk: corruption',
"Grant a random corruption every " + setup.PERK_CORRUPTION_WEEKS + " weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.NoTrait(setup.trait.race_demon),
],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_CORRUPTION_WEEKS == 0;
}),
setup.qc.Corrupt('unit'),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_purification',
'perk: purification',
"Grant a random purification every " + setup.PERK_PURIFICATION_WEEKS + " weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.NoTrait(setup.trait.race_demon),
],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_PURIFICATION_WEEKS == 0;
}),
setup.qc.Purify('unit'),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_switch',
'perk: switch',
"When at home, switches from dominant to submissive and vice-versa every " + setup.PERK_SWITCH_WEEKS + " weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([setup.trait.per_dominant, setup.trait.per_submissive], true),
],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.And([
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % setup.PERK_SWITCH_WEEKS == 0;
}),
setup.qres.Actor('unit', setup.qres.Home()),
]),
setup.qc.IfThenElse(
setup.qres.Actor('unit', setup.qres.Trait(setup.trait.per_dominant)),
setup.qc.TraitReplace('unit', setup.trait.per_submissive),
setup.qc.IfThenElse(
setup.qres.Actor('unit', setup.qres.Trait(setup.trait.per_submissive)),
setup.qc.TraitReplace('unit', setup.trait.per_dominant),
setup.qc.DoAll([]),
),
),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_boon',
'perk: boon',
"Grant 5 weeks of a random boon every 10 weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % 10 == 0;
}),
setup.qc.BoonizeRandom('unit', 5),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_tail',
'perk: tail',
"Grow a random tail every 23 weeks.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.NoTraits(
setup.TraitHelper.getAllTraitsOfTags(['tail']),
),
],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Function(() => {
return State.variables.calendar.getWeek() % 23 == 0;
}),
setup.qc.AddTraitsRandom(
'unit',
setup.TraitHelper.getAllTraitsOfTags(['tail']),
1,
true,
false),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_sidejob',
'perk: sidejob',
"Grant " + setup.PERK_SIDEJOB_GOLD_PER_WEEK + "g per week whenever the unit is available at your fort.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([
'bg_scholar', 'bg_engineer', 'bg_boss', 'bg_mythical', 'bg_royal', 'bg_noble', 'bg_metalworker', 'bg_informer', 'bg_artist', 'bg_laborer', 'bg_clerk', 'bg_merchant', 'bg_foodworker', 'bg_entertainer', 'per_frugal', 'skill_alchemy', 'skill_entertain',
], true)
],
perk_end_of_week_effect: [
setup.qc.IfThenElse(
setup.qres.Actor('unit', setup.qres.Available()),
setup.qc.Money(setup.PERK_SIDEJOB_GOLD_PER_WEEK),
setup.qc.DoAll([]),
),
],
},
)>>
<<run new setup.Perk(
'perk_scavenger',
'perk: scavenger',
"Grant roughly " + setup.PERK_SCAVENGER_GOLD_PER_WEEK + "g per week of questing whenever the unit participates in a quest. The exact amount depends on the quest.",
0,
{},
['perk', 'perkstandard', ],
{
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([
'bg_thief', 'bg_nomad', 'bg_raider', 'bg_wildman', 'bg_woodsman', 'bg_adventurer', 'bg_mercenary', 'bg_hunter', 'bg_soldier', 'bg_pirate', 'per_attentive', 'skill_animal',
], true)
],
perk_end_of_week_effect: [],
},
)>>
/* ####################### */
/* NULL PERKS */
/* ####################### */
<<run new setup.Perk(
'perk_null_magic',
'perk: null magic',
"Prevents magic traits like <<rep setup.trait.magic_fire>> from counting as disaster traits in quests",
0,
{
arcane: -setup.PERK_NULL_SKILL_NERF / 2,
aid: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['magic'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['magic']),
},
)>>
<<run new setup.Perk(
'perk_null_skill',
'perk: null skill',
"Prevents non-magic skill traits like <<rep setup.trait.skill_ambidextrous>> from counting as disaster traits in quests",
0,
{
combat: -setup.PERK_NULL_SKILL_NERF / 2,
survival: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['nonmagic'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['nonmagic']),
},
)>>
<<run new setup.Perk(
'perk_null_genital',
'perk: null genital',
"Prevents dick, balls, breasts, vagina, and anus traits from counting as disaster traits in quests",
0,
{
social: -setup.PERK_NULL_SKILL_NERF / 2,
sex: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['genital'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['genital']),
},
)>>
<<run new setup.Perk(
'perk_null_corrupted',
'perk: null corrupted',
"Prevents <<rep setup.trait.corrupted>><<rep setup.trait.corruptedfull>> from counting as disaster traits in quests",
0,
{
slaving: -setup.PERK_NULL_SKILL_NERF / 2,
intrigue: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.NoTrait(setup.trait.race_demon),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['corruptedcomputed']),
},
)>>
<<run new setup.Perk(
'perk_null_skin',
'perk: null skin',
"Prevents bodypart traits like <<rep setup.trait.ears_neko>> from counting as disaster traits in quests",
0,
{
survival: -setup.PERK_NULL_SKILL_NERF / 2,
social: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['skin'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['skin']),
},
)>>
<<run new setup.Perk(
'perk_null_bg',
'perk: null background',
"Prevents background traits like <<rep setup.trait.bg_slave>> from counting as disaster traits in quests",
0,
{
knowledge: -setup.PERK_NULL_SKILL_NERF / 2,
intrigue: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['bg'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['bg']),
},
)>>
<<run new setup.Perk(
'perk_null_physical',
'perk: null physical',
"Prevents physical traits like <<rep setup.trait.muscle_strong>> from counting as disaster traits in quests",
0,
{
combat: -setup.PERK_NULL_SKILL_NERF / 2,
brawn: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait(setup.TraitHelper.getAllTraitsOfTags(['nongenital'])),
],
perk_end_of_week_effect: [],
perk_null_traits: setup.TraitHelper.getAllTraitsOfTags(['nongenital']),
},
)>>
<<run new setup.Perk(
'perk_null_lunacy',
'perk: null lunacy',
"Prevents <<rep setup.trait.per_lunatic>><<rep setup.trait.per_masochistic>> from counting as disaster traits in quests",
0,
{
arcane: -setup.PERK_NULL_SKILL_NERF / 2,
brawn: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([
setup.trait.per_lunatic,
setup.trait.per_masochistic
]),
],
perk_end_of_week_effect: [],
perk_null_traits: [
setup.trait.per_lunatic,
setup.trait.per_masochistic,
]
},
)>>
<<run new setup.Perk(
'perk_null_switch',
'perk: null switch',
"Prevents <<rep setup.trait.per_dominant>><<rep setup.trait.per_submissive>> from counting as disaster traits in quests",
0,
{
slaving: -setup.PERK_NULL_SKILL_NERF / 2,
knowledge: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([
setup.trait.per_dominant,
setup.trait.per_submissive,
]),
],
perk_end_of_week_effect: [],
perk_null_traits: [
setup.trait.per_dominant,
setup.trait.per_submissive,
]
},
)>>
<<run new setup.Perk(
'perk_null_sex',
'perk: null sex',
"Prevents <<rep setup.trait.per_chaste>><<rep setup.trait.per_lustful>><<rep setup.trait.per_sexaddict>> from counting as disaster traits in quests",
0,
{
sex: -setup.PERK_NULL_SKILL_NERF / 2,
aid: -setup.PERK_NULL_SKILL_NERF / 2,
},
['perk', 'perknull', 'perkstandard', ],
{ /* icon settings */
cross: true,
},
{
perk_choice_restrictions: [
setup.qres.AnyTrait([
setup.trait.per_chaste,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
]),
],
perk_end_of_week_effect: [],
perk_null_traits: [
setup.trait.per_chaste,
setup.trait.per_lustful,
setup.trait.per_sexaddict,
]
},
)>>
/* ####################### */
/* BASIC PERKS */
/* ####################### */
<<run new setup.Perk(
'perk_combat',
'perk: combat+',
"Slightly increase <<rep setup.skill.combat>>",
0,
{combat: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{ /* icon settings */
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_brawn',
'perk: brawn+',
"Slightly increase <<rep setup.skill.brawn>>",
0,
{brawn: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{ /* icon settings */
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_survival',
'perk: survival+',
"Slightly increase <<rep setup.skill.survival>>",
0,
{survival: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_intrigue',
'perk: intrigue+',
"Slightly increase <<rep setup.skill.intrigue>>",
0,
{intrigue: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_slaving',
'perk: slaving+',
"Slightly increase <<rep setup.skill.slaving>>",
0,
{slaving: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_social',
'perk: social+',
"Slightly increase <<rep setup.skill.social>>",
0,
{social: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_knowledge',
'perk: knowledge+',
"Slightly increase <<rep setup.skill.knowledge>>",
0,
{knowledge: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_aid',
'perk: aid+',
"Slightly increase <<rep setup.skill.aid>>",
0,
{aid: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_arcane',
'perk: arcane+',
"Slightly increase <<rep setup.skill.arcane>>",
0,
{arcane: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>>
<<run new setup.Perk(
'perk_sex',
'perk: sex+',
"Slightly increase <<rep setup.skill.sex>>",
0,
{sex: setup.PERK_BASIC_SKILL_GAIN, },
['perk', 'perkbasic', 'perkstandard', ],
{
plus: true,
},
{
perk_choice_restrictions: [],
perk_end_of_week_effect: [],
},
)>><<run new setup.TraitGroup([
new setup.Trait(
'per_slow',
'slow',
'Simple-minded and good at following orders',
setup.MONEY_TRAIT_MEDIUM,
{sex: 0.2, knowledge: -0.2},
['medium'],
{ background: 'negative' },
),
null,
new setup.Trait(
'per_smart',
'smart',
'Blessed with good intellect',
setup.MONEY_TRAIT_MEDIUM,
{sex: -0.2, knowledge: 0.2},
['medium'],
{ background: 'positive' },
),
], ['per', 'iq'])>>
<<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_aggressive',
'aggressive',
'Charges in at the first opportunity',
0,
{combat: 0.2, social: -0.2}
),
new setup.Trait(
'per_calm',
'calm',
'Never to anger',
0,
{social: 0.2, combat: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_proud',
'proud',
'Took pride in themselves',
0,
{combat: 0.2, aid: -0.2}
),
new setup.Trait(
'per_humble',
'humble',
'Never brags',
0,
{aid: 0.2, combat: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_direct',
'direct',
'Straight to the point',
0,
{brawn: 0.2, intrigue: -0.2}
),
new setup.Trait(
'per_sly',
'sly',
'Shows great cunning',
0,
{intrigue: 0.2, brawn: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_active',
'active',
'Loves physical exertions',
0,
{brawn: 0.2, knowledge: -0.2}
),
new setup.Trait(
'per_studious',
'studious',
'Loves studying',
0,
{knowledge: 0.2, brawn: -0.2}
),
], ['per', 'common',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_loner',
'loner',
'Enjoys their own company',
0,
{survival: 0.2, social: -0.2}
),
new setup.Trait(
'per_gregarious',
'gregarious',
'Seeks the company of others',
0,
{social: 0.2, survival: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_frugal',
'frugal',
'Does not spend unnecessarily',
0,
{survival: 0.2, arcane: -0.2}
),
new setup.Trait(
'per_lavish',
'lavish',
'Spends in excess',
0,
{arcane: 0.2, survival: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_independent',
'independent',
'Survival is everything',
0,
{intrigue: 0.2, social: -0.2}
),
new setup.Trait(
'per_loyal',
'loyal',
'Stays until the very end',
0,
{social: 0.2, intrigue: -0.2}
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_attentive',
'attentive',
'Pays more attention than others',
0,
{sex: -0.2, intrigue: 0.2},
),
new setup.Trait(
'per_dreamy',
'dreamy',
'Has their head in the air',
0,
{intrigue: -0.2, sex: 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_cruel',
'cruel',
'Enjoys the suffering of others',
0,
{slaving: 0.2, aid: -0.2},
),
new setup.Trait(
'per_kind',
'kind',
'Hope for the best in other people',
0,
{aid: 0.2, slaving: -0.2},
),
], ['per', 'common'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_serious',
'serious',
'Life is a difficult journey',
0,
{slaving: 0.2, sex: -0.2}
),
new setup.Trait(
'per_playful',
'playful',
'Live for entertainment',
0,
{sex: 0.2, slaving: -0.2}
),
], ['per', 'common'], 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_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, arcane: 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.2, combat: -0.3},
['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.3, survival: -0.2},
['rare'],
{ tier: 2, colors: true },
),
], ['per'], false)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_dominant',
'dominant',
'Prefers to top in a relationship',
setup.MONEY_TRAIT_MEDIUM,
{survival: 0.2, slaving: 0.2, aid: -0.2, knowledge: -0.2},
),
new setup.Trait(
'per_submissive',
'submissive',
'Prefers to bottom in a relationship',
setup.MONEY_TRAIT_MEDIUM,
{survival: -0.2, slaving: -0.2, aid: 0.2, knowledge: 0.2},
),
], ['per', 'medium'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_masochistic',
'masochistic',
'Derives pleasure from their own suffering',
setup.MONEY_TRAIT_RARE,
{brawn: 0.2, sex: 0.2, combat: -0.2, arcane: -0.2},
),
new setup.Trait(
'per_lunatic',
'lunatic',
'Behaves irrationally',
setup.MONEY_TRAIT_RARE,
{brawn: -0.2, sex: -0.2, combat: 0.2, arcane: 0.2},
),
], ['per', 'rare'], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'per_evil',
'evil',
'Does not get burdened by moral codes',
setup.MONEY_TRAIT_MEDIUM,
{arcane: 0.2, intrigue: 0.2, aid: -0.2, social: -0.2}
),
new setup.Trait(
'per_honorable',
'honorable',
'Has strong moral code and honor',
setup.MONEY_TRAIT_MEDIUM,
{arcane: -0.2, intrigue: -0.2, aid: 0.2, social: 0.2}
),
], ['per', 'medium',], true)>><<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_UNICORN,
{},
['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 pair of huge and productive 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_UNICORN,
{},
['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_UNICORN,
{},
['unicorn'],
{ tier: 6, icon: 'breast_medium', background: 'positive3' }
),
], ['breast', 'decreasable', 'physical', 'genital', 'needvagina', ])>>
<<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(
'height_dwarf',
'height: dwarf',
'Short as a dwarf, about half the height of a regular human',
0,
{intrigue: 0.2, combat: -0.2},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'height_short',
'height: short',
'Shorter than most regular humans',
0,
{intrigue: 0.1, combat: -0.1},
['medium'],
{ tier: 1, background: 'negative' },
),
null,
new setup.Trait(
'height_tall',
'height: tall',
'Taller than most regular humans',
0,
{combat: 0.1, intrigue: -0.1},
['medium'],
{ tier: 1, background: 'positive' },
),
new setup.Trait(
'height_giant',
'height: giant',
'Hulkingly tall, about double the height of a regular human',
0,
{combat: 0.2, intrigue: -0.2},
['rare'],
{ tier: 2, background: 'positive2' },
),
], ['height', 'physical', 'nongenital', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'muscle_extremelythin',
'extremely thin',
'Extremely thin, including an unnaturally narrow waist whose circumference is easily less than 20cm',
setup.MONEY_TRAIT_UNICORN,
{brawn: -0.3, sex: 0.3},
['unicorn'],
{ tier: 3, background: 'negative2' },
),
new setup.Trait(
'muscle_verythin',
'very thin',
'Very thin with a strikingly narrow waist, but cannot punch very hard',
setup.MONEY_TRAIT_RARE,
{brawn: -0.2, sex: 0.2},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'muscle_thin',
'thin',
'Pleasantly thin with narrow waist, but somewhat lacking in power',
0,
{brawn: -0.1, sex: 0.1},
['common'],
{ tier: 1, icon: 'muscle_thin', background: 'negative' }
),
null,
new setup.Trait(
'muscle_strong',
'strong',
'Fit as a buck',
0,
{brawn: 0.1, aid: -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.2, aid: -0.2},
['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.3, aid: -0.3},
['unicorn'],
{ tier: 3, background: 'positive2' },
),
], ['muscle', 'physical', 'nongenital', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'tough_nimble',
'nimble',
'Lithe and moves easily',
setup.MONEY_TRAIT_MEDIUM,
{survival: 0.2, brawn: -0.2},
[],
{ background: 'negative' },
),
null,
new setup.Trait(
'tough_tough',
'tough',
'Can take more punishment than others',
setup.MONEY_TRAIT_MEDIUM,
{brawn: 0.2, survival: -0.2},
[],
{ background: 'positive' },
),
], ['tough', 'physical', 'medium', 'nongenital', ])>>
<<run new setup.TraitGroup([
new setup.Trait(
'face_hideous',
'frightening face',
'Instilling fear on admirers',
setup.MONEY_TRAIT_RARE,
{
social: -0.3,
slaving: 0.3,
},
['rare'],
{ tier: 2, background: 'negative2' },
),
new setup.Trait(
'face_scary',
'scary face',
'Has an intimidating face',
setup.MONEY_TRAIT_MEDIUM,
{
social: -0.2,
slaving: 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,
slaving: -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,
slaving: -0.3,
},
['rare'],
{ tier: 2, background: 'positive2' },
),
], ['face', 'physical', 'nongenital', ])>>
<<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', 'corruptedcomputed'])>>
<<set setup.TRAIT_PHYSICAL_TAGS = [
'muscle', 'dick', 'balls', 'breast', 'vagina', 'anus', 'face', 'height', 'tough',
]>><<run new setup.TraitGroup([
new setup.Trait(
'race_human',
'human',
'The most abundant species in the world -- their appearance and masteries varies greatly from land to land.',
0,
{},
[],
),
new setup.Trait(
'race_wolfkin',
'wolfkin',
'Humanoid wolves and other canines. Often has thick fur which helps them insulate against the heat or the cold.',
0,
{},
[],
),
new setup.Trait(
'race_elf',
'elf',
'Almost human in appearance except for their sharply pointed ears. Many species of elves exist, ranging from the most common regular elves to underground dwelling elves.',
0,
{},
[],
),
new setup.Trait(
'race_catkin',
'catkin',
'Humanoid cats. The most populous of this race is the <<rep setup.trait.subrace_neko>>, who has bred out most of their cat heritage save for their tail, ears, and occasionally eyes.',
0,
{},
[],
),
new setup.Trait(
'race_greenskin',
'orc',
'Greenskins often found maraudings in the eastern deserts. The orc race actually comprises of a much larger family, including goblins, trolls, and ogres, but among them orcs are much, much more intelligent.',
0,
{},
[],
),
new setup.Trait(
'race_lizardkin',
'lizardkin',
'A fully scaley human-like species. Most of the member of these race are found outside of <<lore continent_main>>. It is said that these species descent directly from the dragons of old.',
0,
{},
[],
),
new setup.Trait(
'race_demon',
'demon',
'Residents of the land beyond the mist who occasionally crosses into the mortal plane. Demons and all their subraces are unaffected by the negative skill and value penalties of demonic bodyparts.',
0,
{},
[],
),
], ['race', 'computed'], true)>><<run new setup.Trait(
'skill_ambidextrous',
'ambidextrous',
'Capable of using both left and right arms equally well',
setup.MONEY_TRAIT_MEDIUM,
{combat: 0.25},
['skill', 'medium', 'nonmagic',],
)>>
<<run new setup.Trait(
'skill_intimidating',
'intimidating',
'Has an intimidating presence',
setup.MONEY_TRAIT_MEDIUM,
{brawn: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_flight',
'flight',
'Is able to soar through the sky',
0,
{survival: 0.25},
['skill', 'impossible', 'computed', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_connected',
'connected',
'Has connections to many important people',
setup.MONEY_TRAIT_MEDIUM,
{intrigue: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_hypnotic',
'hypnotic',
'Knows how to hypnotize people under the right conditions',
setup.MONEY_TRAIT_MEDIUM,
{slaving: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<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.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_entertain',
'entertainer',
'Is skilled in entertaining people with a song and a dance',
setup.MONEY_TRAIT_MEDIUM,
{social: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_alchemy',
'alchemy',
'Knows how mix herbs and make potions',
setup.MONEY_TRAIT_MEDIUM,
{aid: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<run new setup.Trait(
'skill_animal',
'animal whisperer',
'Has strong bond with animals',
setup.MONEY_TRAIT_MEDIUM,
{sex: 0.25},
['skill', 'medium', 'nonmagic', ],
)>>
<<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.16, combat: 0.02, knowledge: 0.02,},
['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.19, combat: 0.03, knowledge: 0.03, },
['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.18, brawn: 0.02},
['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.22, brawn: 0.03},
['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.16, slaving: 0.02, social: 0.02},
['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.19, slaving: 0.03, social: 0.03},
['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.16, sex: 0.02, survival: 0.02},
['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.19, sex: 0.03, survival: 0.03},
['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.18, aid: 0.02},
['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.22, aid: 0.03},
['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.18, intrigue: 0.02},
['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.22, intrigue: 0.03},
['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', 'skin_neko', 'skin_tigerkin',],
),
new setup.Trait(
'eyes_dragonkin',
'eyes (draconic)',
'Posses intimidating pair of draconic eyes.',
0,
{},
['rare', 'skin_dragonkin', 'skin_lizardkin',],
),
new setup.Trait(
'eyes_demon',
'eyes (demonic)',
'Posses pitch-black demonic eyes.',
-setup.MONEY_TRAIT_MEDIUM,
{
knowledge: -0.35,
},
['common', 'corruption', 'skin_demon',],
),
], ['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', 'skin_werewolf', ],
),
new setup.Trait(
'ears_neko',
'ears (cat)',
'Posses cat-like ears sticking out of their head',
0,
{},
['medium', 'skin_neko', 'skin_tigerkin', ],
),
new setup.Trait(
'ears_elf',
'ears (pointy)',
'Posses sharp pointy ears',
0,
{},
['medium', 'skin_elf', 'skin_orc', 'skin_fairy', ],
),
new setup.Trait(
'ears_dragonkin',
'ears (draconic)',
'Possess fin-like ears',
0,
{},
['medium', 'skin_dragonkin', 'skin_lizardkin', ],
),
new setup.Trait(
'ears_demon',
'ears (demonic)',
'Posses pointy ears and a pair of horns',
-setup.MONEY_TRAIT_MEDIUM,
{
survival: -0.35,
},
['common', 'corruption', 'horns', 'skin_demon', 'skin_demonkin', ],
),
], ['ears', 'skin', 'genderless', 'skin_demon', ], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'mouth_werewolf',
'mouth (werewolf)',
'Posses a muzzle in place of mouth',
0,
{},
['medium', 'fangs', 'skin_werewolf', ],
),
new setup.Trait(
'mouth_neko',
'mouth (neko)',
'Several sensitive whiskers grow from their cheeks',
setup.MONEY_TRAIT_RARE,
{},
['rare', 'fangs', 'skin_tigerkin', ],
),
new setup.Trait(
'mouth_orc',
'mouth (orc)',
'Sharp tusks jut out of their mouth',
0,
{},
['medium', 'skin_orce', 'skin_orc', ],
),
new setup.Trait(
'mouth_dragonkin',
'mouth (dragonkin)',
'Posses scaley muzzle filled with sharp teeth',
0,
{},
['rare', 'fangs', 'skin_dragonkin', 'skin_lizardkin', ],
),
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', 'skin_demon', ], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'body_werewolf',
'body (werewolf)',
'Posses a furry body of a werewolf',
0,
{},
['medium', 'furry', 'skin_werewolf', ],
),
new setup.Trait(
'body_neko',
'body (cat)',
'Tiger-like black stripes cover their entire body',
setup.MONEY_TRAIT_RARE,
{},
['rare', 'furry', 'skin_tigerkin', ],
),
new setup.Trait(
'body_orc',
'body (orc)',
'Posses green-colored skin of orcish origin',
0,
{},
['medium', 'skin_orc', ],
),
new setup.Trait(
'body_dragonkin',
'body (dragonkin)',
'Posses a body covered with protective scales',
0,
{},
['rare', 'skin_dragonkin', 'skin_lizardkin', ],
),
new setup.Trait(
'body_demon',
'body (demonic)',
'Posses a reddish body covered in tough skin',
-setup.MONEY_TRAIT_MEDIUM,
{
brawn: -0.35,
},
['common', 'corruption', 'skin_demon', 'skin_demonkin', ],
),
], ['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_UNICORN,
{},
['rare', 'skin_fairy', ],
),
new setup.Trait(
'wings_dragonkin',
'wings (dragonkin)',
'Posses a pair of scaley wings',
setup.MONEY_TRAIT_UNICORN,
{},
['rare', 'skin_dragonkin', ],
),
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', 'skin_demon', ],
),
new setup.Trait(
'wings_angel',
'wings (angelic)',
'Posses a pair of angel-like wings',
setup.MONEY_TRAIT_UNICORN,
{},
['rare'],
),
], ['wings', 'skin', 'genderless', 'skin_angel', ], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'arms_werewolf',
'arms (werewolf)',
'Posses a furry pair of arms with claws',
0,
{},
['medium', 'skin_werewolf', ],
),
new setup.Trait(
'arms_neko',
'arms (cat)',
'Tiger-like black stripes cover their clawed arms',
setup.MONEY_TRAIT_RARE,
{},
['rare', 'skin_tigerkin', ],
),
new setup.Trait(
'arms_dragonkin',
'arms (dragonkin)',
'Posses a scaley pair of arms ending in sharp claws',
0,
{},
['rare', 'skin_lizardkin', 'skin_dragonkin', ],
),
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', 'skin_demon', ],
),
], ['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', 'skin_werewolf', ],
),
new setup.Trait(
'legs_neko',
'legs (cat)',
'Legs covered in black stripes akin to tigers',
setup.MONEY_TRAIT_RARE,
{},
['rare', 'skin_tigerkin', ],
),
new setup.Trait(
'legs_dragonkin',
'legs (dragonkin)',
'Posses a scaley pair of legs',
0,
{},
['rare', 'skin_lizardkin', 'skin_dragonkin', ],
),
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', 'skin_demon', ],
),
], ['legs', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'tail_werewolf',
'tail (werewolf)',
'Posses a fluffy dog-like tail',
0,
{},
['medium', 'skin_werewolf', ],
),
new setup.Trait(
'tail_neko',
'tail (neko)',
'Posses a long thin cat-like tail',
0,
{},
['medium', 'skin_neko', 'skin_tigerkin', ],
),
new setup.Trait(
'tail_dragonkin',
'tail (dragonkin)',
'Posses a sturdy and strong draconic tail',
0,
{},
['rare', 'skin_lizardkin', 'skin_dragonkin', ],
),
new setup.Trait(
'tail_demon',
'tail (demonic)',
'Posses a thin elongated tail ending in sharp arrow',
-setup.MONEY_TRAIT_MEDIUM,
{
sex: -0.35,
},
['common', 'corruption', 'skin_demon', 'skin_demonkin', ],
),
], ['tail', 'skin', 'genderless',], true)>>
<<run new setup.TraitGroup([
new setup.Trait(
'dick_werewolf',
'dick (werewolf)',
'Posses a dick complete with a knot',
0,
{},
['medium', 'skin_werewolf', ],
),
new setup.Trait(
'dick_dragonkin',
'dick (dragonkin)',
'Posses an odd looking lizard-ish dick',
0,
{},
['rare', 'skin_dragonkin', 'skin_lizardkin', ],
),
new setup.Trait(
'dick_demon',
'dick (demonic)',
'Posses a dick with jagged protrusions covering the entire length',
0,
{
},
['common', 'corruption', 'skin_demon', 'skin_demonkin', ],
),
], ['dickshape', 'skin', 'needdick'], true)>>
<<set setup.TRAIT_SKIN_TAGS = [
'eyes', 'ears', 'mouth', 'body', 'wings', 'arms', 'legs', 'tail', 'dickshape',
]>><<run new setup.TraitGroup([
new setup.Trait(
'subrace_humankingdom',
'human (kingdom)',
'<<rep setup.trait.race_human>> born in the kingdom blessed with fertile lands. Many are attuned to the domain of <<lore magic_wind>>.',
0,
{},
['common', 'race_human', ],
{ colors: true },
),
new setup.Trait(
'subrace_humanvale',
'human (vale)',
'<<rep setup.trait.race_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', 'race_human', ],
{ colors: true },
),
new setup.Trait(
'subrace_humandesert',
'human (desert)',
'<<rep setup.trait.race_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', 'race_human', ],
{ colors: true },
),
new setup.Trait(
'subrace_humansea',
'human (sea)',
'<<rep setup.trait.race_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>>.',
2500,
{},
['rare', 'race_human', ],
{ colors: true },
),
new setup.Trait(
'subrace_elf',
'word elf',
'The most common <<rep setup.trait.race_elf>>, these graceful people lives in the western forest together with the <<rep setup.trait.subrace_neko>>. Attuned to the earth element, which grants them minor power to manipulate plants.',
0,
{},
['common', 'race_elf', ],
{ colors: true },
),
new setup.Trait(
'subrace_werewolf',
'werewolf',
'A race of <<rep setup.trait.race_wolfkin>> living on the northern mountains. Attuned to water and ice, which allows them to withstood the cold.',
2500,
{},
['rare', 'race_wolfkin', ],
{ colors: true },
),
new setup.Trait(
'subrace_neko',
'neko',
'These <<rep setup.trait.race_catkin>> descend from the <<lore race_tigerkin>> and live 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', 'race_catkin', ],
{ colors: true },
),
new setup.Trait(
'subrace_orc',
'orc',
'<<rep setup.trait.race_greenskin>> 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.',
500,
{},
['medium', 'race_greenskin', ],
{ colors: true },
),
new setup.Trait(
'subrace_lizardkin',
'lizardkin',
'The most common <<rep setup.trait.race_lizardkin>> that can occasionally be met across the <<lore region_sea>>. They are adept swimmers and also make excellent scouts, but hiring them is problematic as most lizardkins would prefer their own company. Unsurprisingly, these people are often attuned to <<lore magic_water>>.',
3000,
{},
['rare', 'race_lizardkin', ],
{ colors: true },
),
new setup.Trait(
'subrace_demonkin',
'demonkin',
'The most common <<rep setup.trait.race_demon>>, it is said that demonkins are the result of the numerous virgins violated by purebred demons. 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. Most demonkins are found serving their pureblooded demon masters, although there are exceptions of free and master-less demonkins. Like all other demons, demonkins are unaffected by the negative skill and value penalties of demonic bodyparts.',
7500,
{},
['rare', 'race_demon', ],
),
new setup.Trait(
'subrace_angel',
'angel',
'Residents of the celestial realm who one way or another has been reborn as a <<rep setup.trait.race_human>>. Even as a mortal, they still retai their high affinity for <<lore magic_light>>.',
30000,
{},
['unicorn', 'race_human', ],
{ colors: true },
),
new setup.Trait(
'subrace_fairy',
'fairy',
'Colloquially known as "<<rep setup.trait.race_elf>> with wings", these mystical species is said to dwell somewhere in the <<lore region_forest>>. Unlike their elven brethrens, fairies are attuned to <<lore magic_wind>>.',
15000,
{},
['unicorn', 'race_elf', ],
{ colors: true },
),
new setup.Trait(
'subrace_tigerkin',
'tigerkin',
'These <<rep setup.trait.race_catkin>> are the ancestors of the modern day <<rep setup.trait.subrace_neko>> with all their furry glory. Similar with their modern counterpart, they are often attuned to <<lore magic_earth>>.',
12500,
{},
['unicorn', 'race_catkin', ],
{ colors: true },
),
new setup.Trait(
'subrace_dragonkin',
'dragonkin',
'A mythical subrace of <<rep setup.trait.race_lizardkin>> said to dwell somewhere beyond the <<lore region_sea>>. Even compared to the lizardkins, these winged relatives of them are extremely rare. Attuned to <<lore magic_light>>, which they are often able to breathe out from their snouts.',
15000,
{},
['unicorn', 'race_lizardkin', ],
{ colors: true },
),
new setup.Trait(
'subrace_demon',
'demon',
'Strange <<rep setup.trait.race_demon>> creatures that live on the other side of the great mist, these pure-blooded demons often wield great powers. 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 unaffected by the negative skill and value penalties of demonic bodyparts.',
20000,
{},
['rare', 'race_demon', ],
),
], ['subrace'], true)>><<run new setup.TraitGroup([
new setup.Trait(
'training_obedience_basic',
'obedience: basic',
'Can obey basic commands, but still disobedient at times',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic',],
{ tier: 1 },
),
new setup.Trait(
'training_obedience_advanced',
'obedience: advanced',
'Understands 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',
'Understands fully the requirements 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 provide quite a bit of pleasure with their 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 provide quite a bit of pleasure with their 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 being a man',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_sissy_basic' }
),
new setup.Trait(
'training_sissy_master',
'sissy: master',
'Puts other, naturally born women, 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 as well as knowing how to edge others without letting them go over',
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_roleplay_basic',
'roleplay: basic',
'Has basic knowledge on how to use words to arouse others',
setup.SLAVETRAINVALUE_BASIC,
{},
['trbasic', ],
{ tier: 1 },
),
new setup.Trait(
'training_roleplay_advanced',
'roleplay: advanced',
'These slaves would make proficient actors, and they use their abilities to roleplay anything their owner desires',
setup.SLAVETRAINVALUE_ADVANCED,
{},
['tradvanced',],
{ tier: 2, icon: 'training_roleplay_basic' }
),
new setup.Trait(
'training_roleplay_master',
'roleplay: master',
'An expert at roleplaying, their act would even put the real deal to shame',
setup.SLAVETRAINVALUE_MASTER,
{},
['trmaster',],
{ tier: 3, icon: 'training_roleplay_basic' }
),
], ['training', 'trroleplay', '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',
-5000,
{},
['training', 'trmindbreak'],
{ background: 'trmaster', colors: true },
)>>
<<run new setup.Trait(
'training_none',
'no training',
'Has not been trained at all',
0,
{},
['computed', ],
{ background: 'training' },
)>>
<<run new setup.Trait(
'will_defiant',
'defiant',
'Is irresponsive to training and punishment, and requires extreme measures to break to your will. As long as a unit have this trait, they will be unable to participate in most content!',
-5000,
{},
['will', ],
{ background: 'trmaster', colors: true },
)>>
<<run new setup.Trait(
'will_indomitable',
'indomitable',
'Is unable to be trained or interacted with, due to one reason or another. This trait cannot be removed by any normal means. As long as a unit have this trait, they will be unable to participate in most content!',
-10000,
{},
['will', ],
{ background: 'trmaster', colors: true },
)>>
<<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({
key: 'slavecorrupt_all',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_all,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.ritualchamber),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_body',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_body,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_arms',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_arms,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_legs',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_legs,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.mirrorofthedamned),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_eyes',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_eyes,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_ears',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_ears,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_mouth',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_mouth,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.poolofmist),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_tail',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_tail,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_wings',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_wings,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavecorrupt_dick',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavecorrupt_dick,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.altarofdarkness),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
/* SLAVER CORRUPTION STARTS HERE */
<<run new setup.UnitAction({
key: 'slavercorrupt_all',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_all,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepritualchamber),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_body',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_body,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_arms',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_arms,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_legs',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_legs,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepmirrorofthedamned),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_eyes',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_eyes,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_ears',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_ears,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_mouth',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_mouth,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deeppoolofmist),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_tail',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_tail,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_wings',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_wings,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
],
})>>
<<run new setup.UnitAction({
key: 'slavercorrupt_dick',
tags: ['corruption', ],
quest_template: setup.questtemplate.slavercorrupt_dick,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.deepaltarofdarkness),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.Trait(setup.trait.dick_tiny),
],
})>><<run new setup.UnitAction({
key: 'fleshshape_breast_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_breast_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.breastlab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.breast_large),
setup.qres.Trait(setup.trait.breast_tiny),
],
is_multitrain: true,
result_traits: [setup.trait.breast_large],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_breast_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_breast_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.breastlab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.breast_small),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.breast_tiny],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_dick_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_dick_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.dicklab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.dick_tiny),
setup.qres.NoTrait(setup.trait.dick_large),
],
is_multitrain: true,
result_traits: [setup.trait.dick_large],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_dick_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_dick_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.dicklab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.dick_medium),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.dick_small],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_balls_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_balls_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.ballslab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.balls_tiny),
setup.qres.NoTrait(setup.trait.balls_large),
],
is_multitrain: true,
result_traits: [setup.trait.balls_large],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_balls_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_balls_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.ballslab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.balls_medium),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.balls_small],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_muscle_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_muscle_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.muscle_strong),
],
is_multitrain: true,
result_traits: [setup.trait.muscle_strong],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_muscle_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_muscle_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.biolab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(null, setup.trait.muscle_strong.getTraitGroup()),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.muscle_thin],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_anus_tighten',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_anus_tighten,
prerequisites: [],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.anuslab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.anus_loose),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.anus_tight],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_anus_loosen',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_anus_loosen,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.anuslab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.NoTrait(setup.trait.anus_gape),
],
is_multitrain: true,
result_traits: [setup.trait.anus_gape],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_vagina_tighten',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_vagina_tighten,
prerequisites: [],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.vaginalab),
setup.qres.Job(setup.job.slave),
setup.qres.AnyTrait([setup.trait.training_mindbreak, setup.trait.training_obedience_basic]),
setup.qres.Trait(setup.trait.vagina_loose),
],
is_multitrain: true,
is_decrease: true,
result_traits: [setup.trait.vagina_tight],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'fleshshape_vagina_loosen',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.fleshshape_vagina_loosen,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.vaginalab),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.vagina_loose],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>><<run new setup.UnitAction({
key: 'purify_all',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_all,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.temple),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify(),
],
})>>
<<run new setup.UnitActionRepeatSelf({
key: 'purify_all_repeat',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_all,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.temple),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify(),
],
})>>
<<run new setup.UnitAction({
key: 'purify_body',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_body,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('body'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_arms',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_arms,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('arms'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_legs',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_legs,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.prayerroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('legs'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_eyes',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_eyes,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('eyes'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_ears',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_ears,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('ears'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_mouth',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_mouth,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.blessingroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('mouth'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_tail',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_tail,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('tail'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_wings',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_wings,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('wings'),
],
})>>
<<run new setup.UnitAction({
key: 'purify_dick',
tags: ['purification', ],
quest_template: setup.questtemplate.purify_dick,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.penitenceroom),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.CanPurify('dick'),
],
})>><<include $gQuest.getTemplate().getDescriptionPassage()>>
<p>
(This quest is part of <<reps $g.trainee>>endeavor to obtain <<repall $gQuest.getTargetTraits()>>)
</p><<include $gQuest.getTemplate().getDescriptionPassage()>>
<p>
(This quest will be repeated until <<rep $g.trainee>> no longer needs it)
</p><<run new setup.UnitAction({
key: 'surgery_breast_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_breast_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgerybreast),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.breast_large),
setup.qres.Trait(setup.trait.breast_tiny),
],
is_multitrain: true,
result_traits: [setup.trait.breast_large],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_breast_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_breast_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgerybreast),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.breast_small),
],
is_multitrain: true,
result_traits: [setup.trait.breast_tiny],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_dick_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_dick_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgerydick),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.dick_tiny),
setup.qres.NoTrait(setup.trait.dick_large),
],
is_multitrain: true,
result_traits: [setup.trait.dick_large],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_dick_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_dick_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgerydick),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.dick_medium),
],
is_multitrain: true,
result_traits: [setup.trait.dick_small],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_balls_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_balls_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgeryballs),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.balls_tiny),
setup.qres.NoTrait(setup.trait.balls_large),
],
is_multitrain: true,
result_traits: [setup.trait.balls_large],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_balls_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_balls_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgeryballs),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.balls_medium),
],
is_multitrain: true,
result_traits: [setup.trait.balls_small],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_muscle_grow',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_muscle_grow,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.muscle_strong),
],
is_multitrain: true,
result_traits: [setup.trait.muscle_strong],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_muscle_shrink',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_muscle_shrink,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgery),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(null, setup.trait.muscle_strong.getTraitGroup()),
],
is_multitrain: true,
result_traits: [setup.trait.muscle_thin],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_anus_tighten',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_anus_tighten,
prerequisites: [],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.surgeryanus),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.anus_loose),
],
is_decrease: true,
is_multitrain: true,
result_traits: [setup.trait.anus_tight],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_anus_loosen',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_anus_loosen,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgeryanus),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.anus_gape),
],
is_multitrain: true,
result_traits: [setup.trait.anus_gape],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_vagina_tighten',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_vagina_tighten,
prerequisites: [],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_tight),
setup.qres.Building(setup.buildingtemplate.surgeryvagina),
setup.qres.Job(setup.job.slaver),
setup.qres.Trait(setup.trait.vagina_loose),
],
is_decrease: true,
is_multitrain: true,
result_traits: [setup.trait.vagina_tight],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'surgery_vagina_loosen',
tags: ['fleshshape', ],
quest_template: setup.questtemplate.surgery_vagina_loosen,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.surgeryvagina),
setup.qres.Job(setup.job.slaver),
setup.qres.NoTrait(setup.trait.vagina_gape),
setup.qres.Trait(setup.trait.vagina_tight),
],
is_multitrain: true,
result_traits: [setup.trait.vagina_gape],
prerequisite_traits: [],
})>><<run new setup.UnitAction({
key: 'obedience_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_obedience_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingchamber),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_obedience_basic],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'obedience_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_obedience_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingchamber),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_obedience_advanced],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'obedience_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_obedience_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.obediencetrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_obedience_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_obedience_master],
prerequisite_traits: [setup.trait.training_obedience_advanced],
})>>
<<run new setup.UnitAction({
key: 'domestic_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_domestic_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_domestic_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'domestic_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_domestic_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_domestic_advanced],
prerequisite_traits: [setup.trait.training_domestic_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'domestic_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_domestic_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.domestictrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_domestic_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_domestic_master],
prerequisite_traits: [setup.trait.training_domestic_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'endurance_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_endurance_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_endurance_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'endurance_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_endurance_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_endurance_advanced],
prerequisite_traits: [setup.trait.training_endurance_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'endurance_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_endurance_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.endurancetrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_endurance_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_endurance_master],
prerequisite_traits: [setup.trait.training_endurance_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'oral_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_oral_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_oral_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'oral_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_oral_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_oral_advanced],
prerequisite_traits: [setup.trait.training_oral_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'oral_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_oral_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.oraltrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_oral_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_oral_master],
prerequisite_traits: [setup.trait.training_oral_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'vagina_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_vagina_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_vagina_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_vagina_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'vagina_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_vagina_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_vagina_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_vagina_advanced],
prerequisite_traits: [setup.trait.training_vagina_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'vagina_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_vagina_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.vaginatrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.vagina_tight),
setup.qres.TraitExact(setup.trait.training_vagina_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_vagina_master],
prerequisite_traits: [setup.trait.training_vagina_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'anal_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_anal_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_anal_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'anal_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_anal_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingbedroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_anal_advanced],
prerequisite_traits: [setup.trait.training_anal_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'anal_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_anal_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.analtrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_anal_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_anal_master],
prerequisite_traits: [setup.trait.training_anal_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'dominance_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_dominance_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_dominance_basic],
prerequisite_traits: [setup.trait.training_obedience_advanced],
})>>
<<run new setup.UnitAction({
key: 'dominance_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_dominance_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_dominance_advanced],
prerequisite_traits: [setup.trait.training_dominance_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'dominance_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_dominance_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.dominancetrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_dominance_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_dominance_master],
prerequisite_traits: [setup.trait.training_dominance_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'masochist_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_masochist_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_masochist_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'masochist_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_masochist_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_masochist_advanced],
prerequisite_traits: [setup.trait.training_masochist_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'masochist_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_masochist_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.masochisttrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_masochist_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_masochist_master],
prerequisite_traits: [setup.trait.training_masochist_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'toilet_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_toilet_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_toilet_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'toilet_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_toilet_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_toilet_advanced],
prerequisite_traits: [setup.trait.training_toilet_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'toilet_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_toilet_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.toilettrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_toilet_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_toilet_master],
prerequisite_traits: [setup.trait.training_toilet_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'horny_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_horny_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_horny_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'horny_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_horny_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.milkerroom),
setup.qres.Job(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_horny_advanced],
prerequisite_traits: [setup.trait.training_horny_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'horny_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_horny_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.hornytrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_horny_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_horny_master],
prerequisite_traits: [setup.trait.training_horny_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'roleplay_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_roleplay_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_roleplay_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_roleplay_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'roleplay_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_roleplay_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_roleplay_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_roleplay_advanced],
prerequisite_traits: [setup.trait.training_roleplay_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'roleplay_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_roleplay_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.roleplaytrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_roleplay_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_roleplay_master],
prerequisite_traits: [setup.trait.training_roleplay_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'sissy_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_sissy_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_sissy_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'sissy_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_sissy_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.fetishtrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_sissy_advanced],
prerequisite_traits: [setup.trait.training_sissy_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'sissy_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_sissy_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.sissytrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.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),
],
is_multitrain: true,
result_traits: [setup.trait.training_sissy_master],
prerequisite_traits: [setup.trait.training_sissy_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'pet_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_pet_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_basic),
setup.qres.NoTrait(setup.trait.training_pet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_pet_basic],
prerequisite_traits: [setup.trait.training_obedience_basic],
})>>
<<run new setup.UnitAction({
key: 'pet_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_pet_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_obedience_advanced),
setup.qres.TraitExact(setup.trait.training_pet_basic),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_pet_advanced],
prerequisite_traits: [setup.trait.training_pet_basic, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'pet_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_pet_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.pettrainingroom),
setup.qres.Job(setup.job.slave),
setup.qres.TraitExact(setup.trait.training_pet_advanced),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
is_multitrain: true,
result_traits: [setup.trait.training_pet_master],
prerequisite_traits: [setup.trait.training_pet_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'pony_basic',
tags: ['training', ],
quest_template: setup.questtemplate.training_pony_basic,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.job.slave),
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),
],
is_multitrain: true,
result_traits: [setup.trait.training_pony_basic],
prerequisite_traits: [setup.trait.training_obedience_basic, setup.trait.training_endurance_basic],
})>>
<<run new setup.UnitAction({
key: 'pony_advanced',
tags: ['training', ],
quest_template: setup.questtemplate.training_pony_advanced,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.trainingfield),
setup.qres.Job(setup.job.slave),
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),
],
is_multitrain: true,
result_traits: [setup.trait.training_pony_advanced],
prerequisite_traits: [setup.trait.training_pony_basic, setup.trait.training_endurance_advanced, setup.trait.training_obedience_advanced , ],
})>>
<<run new setup.UnitAction({
key: 'pony_master',
tags: ['training', ],
quest_template: setup.questtemplate.training_pony_master,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.ponytrainingroom),
setup.qres.Job(setup.job.slave),
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),
],
is_multitrain: true,
result_traits: [setup.trait.training_pony_master],
prerequisite_traits: [setup.trait.training_pony_advanced, setup.trait.training_endurance_advanced, setup.trait.training_obedience_advanced, ],
})>>
<<run new setup.UnitAction({
key: 'mindbreak',
tags: ['training', ],
quest_template: setup.questtemplate.training_mindbreak,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.torturechamber),
setup.qres.Job(setup.job.slave),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
setup.qres.NoTrait(setup.trait.training_mindbreak),
],
result_traits: [setup.trait.training_mindbreak],
prerequisite_traits: [],
})>>
<<run new setup.UnitAction({
key: 'willbreak',
tags: ['training', ],
quest_template: setup.questtemplate.search_for_a_willbreaker,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.researchroom),
setup.qres.Job(setup.job.slave),
setup.qres.AllowDefiant(),
setup.qres.Trait(setup.trait.will_defiant),
setup.qres.Through(
setup.qres.And([
setup.qres.NoQuest('search_for_a_willbreaker'),
setup.qres.NoUnitWithTag('in_training_defiant_slave'),
]),
'You can only break one slave at a time.',
)
],
result_traits: [],
prerequisite_traits: [setup.trait.will_defiant],
})>>
<<run new setup.UnitAction({
key: 'convince',
tags: ['training', ],
quest_template: setup.questtemplate.training_convince,
prerequisites: [],
unit_requirements: [
setup.qres.Building(setup.buildingtemplate.convincingroom),
setup.qres.Job(setup.job.slave),
setup.qres.Trait(setup.trait.training_none),
],
})>>
<<run new setup.UnitAction({
key: 'brainwash',
tags: ['training', ],
quest_template: setup.questtemplate.training_brainwash,
prerequisites: [],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_slavertraining),
setup.qres.Building(setup.buildingtemplate.brainwashingroom),
setup.qres.Job(setup.job.slave),
setup.qres.NoTrait(setup.trait.training_mindbreak),
setup.qres.NoTraits(setup.TraitHelper.TRAINING_MASTER),
],
})>><<run new setup.UnitAction({
key: 'treatment_heal_basic',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_heal_basic,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.healing_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroom),
setup.qres.IsInjured(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_heal_advanced',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_heal_advanced,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.healing_potion_greater),
setup.qres.Building(setup.buildingtemplate.treatmentroom),
setup.qres.IsInjured(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_blank',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_blank,
prerequisites: [
],
unit_requirements: [
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({
key: 'treatment_resetlevel',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_resetlevel,
prerequisites: [
],
unit_requirements: [
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({
key: 'treatment_mindmend',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_mindmend,
prerequisites: [
],
unit_requirements: [
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({
key: 'treatment_memoryisolation',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatmentmemory_isolation,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_isolation),
setup.qres.Building(setup.buildingtemplate.treatmentroomisolation),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_hate',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_hate,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.hate_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomhate),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_love',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_love,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.love_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomlove),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_lovetrue',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_love_true,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.love_potion_true),
setup.qres.Building(setup.buildingtemplate.treatmentroomlovetrue),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_forget',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_forget,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.forget_potion),
setup.qres.Building(setup.buildingtemplate.treatmentroomforget),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_transformation',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_transformation,
prerequisites: [
],
unit_requirements: [
setup.qres.HasItem(setup.item.potion_transformation),
setup.qres.Building(setup.buildingtemplate.treatmentroomtransformation),
setup.qres.NoTrait(setup.trait.race_demon),
setup.qres.Available(),
],
})>>
<<run new setup.UnitAction({
key: 'treatment_alternative',
tags: ['treatment', ],
quest_template: setup.questtemplate.treatment_alternative,
prerequisites: [
],
unit_requirements: [
setup.qres.Job(setup.job.slaver),
setup.qres.HasItem(setup.item.potion_alternative),
setup.qres.Building(setup.buildingtemplate.treatmentroomalternative),
setup.qres.Available(),
],
})>><<set setup.unitgroup = {}>>
/* Location Based */
<<include InitUnitGroupAll>>
<<include InitUnitGroupVale>>
<<include InitUnitGroupForest>>
<<include InitUnitGroupCity>>
<<include InitUnitGroupDesert>>
<<include InitUnitGroupSea>>
/* Job Based */
<<include InitUnitGroupSlaves>>
<<include InitUnitGroupSlavers>>
/* Race Based and Others */
<<set _passages = Story.lookup('tags', 'unitgroup')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>>
/* Quest based */
<<include 'LoadUnitGroupOthers'>>
/* special "null" unit group */
<<run new setup.UnitGroup(
'none',
'Special: Empty unit group',
[],
0,
[]
)>>
/* set all basic unit groups as base */
<<for _ug range Object.values(setup.unitgroup)>>
<<set _ug.is_base = true>>
<</for>><<set setup.ALLUNITGROUPSMALE = [
[setup.unitpool.subrace_humankingdom_male, 1],
[setup.unitpool.subrace_humanvale_male, 0.4],
[setup.unitpool.subrace_humandesert_male, 0.2],
[setup.unitpool.subrace_humansea_male, 0.05],
[setup.unitpool.subrace_neko_male, 0.4],
[setup.unitpool.subrace_werewolf_male, 0.1],
[setup.unitpool.subrace_elf_male, 0.4],
[setup.unitpool.subrace_orc_male, 0.15],
[setup.unitpool.subrace_lizardkin_male, 0.04],
[setup.unitpool.subrace_dragonkin_male, 0.0015],
[setup.unitpool.subrace_demonkin_male, 0.03],
[setup.unitpool.subrace_demon_male, 0.0015],
[setup.unitpool.subrace_fairy_male, 0.0015],
]>>
<<set setup.ALLUNITGROUPSFEMALE = [
[setup.unitpool.subrace_humankingdom_female, 1],
[setup.unitpool.subrace_humanvale_female, 0.4],
[setup.unitpool.subrace_humandesert_female, 0.2],
[setup.unitpool.subrace_humansea_female, 0.05],
[setup.unitpool.subrace_neko_female, 0.4],
[setup.unitpool.subrace_werewolf_female, 0.1],
[setup.unitpool.subrace_elf_female, 0.4],
[setup.unitpool.subrace_orc_female, 0.15],
[setup.unitpool.subrace_lizardkin_female, 0.04],
[setup.unitpool.subrace_dragonkin_female, 0.0015],
[setup.unitpool.subrace_demonkin_female, 0.03],
[setup.unitpool.subrace_demon_female, 0.0015],
[setup.unitpool.subrace_fairy_female, 0.0015],
]>>
<<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.subrace_humankingdom_male, 30],
]>>
<<set _females = [
[setup.unitpool.subrace_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.subrace_orc_male, 15],
[setup.unitpool.subrace_humandesert_male, 15],
[setup.unitpool.subrace_demonkin_male, 1],
]>>
<<set _females = [
[setup.unitpool.subrace_orc_female, 15],
[setup.unitpool.subrace_humandesert_female, 15],
[setup.unitpool.subrace_demonkin_female, 1],
]>>
<<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.subrace_neko_male, 15],
[setup.unitpool.subrace_elf_male, 15],
[setup.unitpool.subrace_fairy_male, 0.1],
]>>
<<set _females = [
[setup.unitpool.subrace_neko_female, 15],
[setup.unitpool.subrace_elf_female, 15],
[setup.unitpool.subrace_fairy_female, 0.1],
]>>
<<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.subrace_humansea_male, 5],
[setup.unitpool.subrace_lizardkin_male, 3.5],
[setup.unitpool.subrace_dragonkin_male, 0.1],
]>>
<<set _females = [
[setup.unitpool.subrace_humansea_female, 5],
[setup.unitpool.subrace_lizardkin_female, 3.5],
[setup.unitpool.subrace_dragonkin_female, 0.1],
]>>
<<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.subrace_humanvale_male, 24],
[setup.unitpool.subrace_werewolf_male, 6],
]>>
<<set _females = [
[setup.unitpool.subrace_humanvale_female, 24],
[setup.unitpool.subrace_werewolf_female, 6],
]>>
<<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.subrace_humanvale_male, 1],
[setup.unitpool.subrace_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.subrace_humanvale_male, 1],
[setup.unitpool.subrace_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.subrace_humanvale_male, 1],
[setup.unitpool.subrace_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.subrace_humanvale_male, 1],
[setup.unitpool.subrace_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_squire',
'squire of the kingdom',
[
[setup.unitpool.subrace_humankingdom_male, 0.6],
[setup.unitpool.subrace_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.subrace_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.anus_gape),
setup.qc.Mindbreak('unit'),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_male_titanic',
'male cow of the kingdom',
[
[setup.unitpool.subrace_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.anus_gape),
setup.qc.Mindbreak('unit'),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_female',
'female cow of the kingdom',
[
[setup.unitpool.subrace_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.Mindbreak('unit'),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_cow_female_titanic',
'female cow of the kingdom',
[
[setup.unitpool.subrace_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.Mindbreak('unit'),
]
)>>
<<run new setup.UnitGroup(
'quest_humankingdom_nobledaughter',
'noble daughter of the kingdom',
[
[setup.unitpool.subrace_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.subrace_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(
'new_game_plus_slaves',
'new game plus slaves',
[
],
1,
[
]
)>><<run new setup.UnitGroup(
'subrace_angel',
'Angel: All Gender',
[
[setup.unitpool.subrace_angel_male, 1],
[setup.unitpool.subrace_angel_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_angel_male',
'Angel: Male',
[
[setup.unitpool.subrace_angel_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_angel_female',
'Angel: Female',
[
[setup.unitpool.subrace_angel_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_demon',
'Demon: All gender',
[
[setup.unitpool.subrace_demon_male, 1],
[setup.unitpool.subrace_demon_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_demon_male',
'Demon: Male',
[
[setup.unitpool.subrace_demon_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_demon_female',
'Demon: Female',
[
[setup.unitpool.subrace_demon_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_demonkin',
'Demonkin: All gender',
[
[setup.unitpool.subrace_demonkin_male, 1],
[setup.unitpool.subrace_demonkin_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_demonkin_male',
'Demonkin: Male',
[
[setup.unitpool.subrace_demonkin_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_demonkin_female',
'Demonkin: Female',
[
[setup.unitpool.subrace_demonkin_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_dragonkin',
'Dragonkin: All gender',
[
[setup.unitpool.subrace_dragonkin_male, 1],
[setup.unitpool.subrace_dragonkin_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_dragonkin_male',
'Dragonkin: Male',
[
[setup.unitpool.subrace_dragonkin_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_dragonkin_female',
'Dragonkin: Female',
[
[setup.unitpool.subrace_dragonkin_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_elf',
'Elf: All gender',
[
[setup.unitpool.subrace_elf_male, 1],
[setup.unitpool.subrace_elf_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_elf_male',
'Elf: Male',
[
[setup.unitpool.subrace_elf_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_elf_female',
'Elf: Female',
[
[setup.unitpool.subrace_elf_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_fairy',
'Fairy: All Gender',
[
[setup.unitpool.subrace_fairy_male, 1],
[setup.unitpool.subrace_fairy_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_fairy_male',
'Fairy: Male',
[
[setup.unitpool.subrace_fairy_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_fairy_female',
'Fairy: Female',
[
[setup.unitpool.subrace_fairy_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_humandesert',
'Human (Desert): All gender',
[
[setup.unitpool.subrace_humandesert_male, 1],
[setup.unitpool.subrace_humandesert_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humandesert_male',
'Human (Desert): Male',
[
[setup.unitpool.subrace_humandesert_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humandesert_female',
'Human (Desert): Female',
[
[setup.unitpool.subrace_humandesert_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_humankingdom',
'Humans (Kingdom): All gender',
[
[setup.unitpool.subrace_humankingdom_male, 1],
[setup.unitpool.subrace_humankingdom_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humankingdom_male',
'Human (Kingdom): Male',
[
[setup.unitpool.subrace_humankingdom_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humankingdom_female',
'Human (Kingdom): Female',
[
[setup.unitpool.subrace_humankingdom_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_humansea',
'Human (Sea): All gender',
[
[setup.unitpool.subrace_humansea_male, 1],
[setup.unitpool.subrace_humansea_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humansea_male',
'Human (Sea): Male',
[
[setup.unitpool.subrace_humansea_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humansea_female',
'Human (Sea): Female',
[
[setup.unitpool.subrace_humansea_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_humanvale',
'Human (Vale): All gender',
[
[setup.unitpool.subrace_humanvale_male, 1],
[setup.unitpool.subrace_humanvale_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humanvale_male',
'Human (Vale): Male',
[
[setup.unitpool.subrace_humanvale_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_humanvale_female',
'Human (Vale): Female',
[
[setup.unitpool.subrace_humanvale_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_lizardkin',
'Lizardkin: All Gender',
[
[setup.unitpool.subrace_lizardkin_male, 1],
[setup.unitpool.subrace_lizardkin_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_lizardkin_male',
'Lizardkin: Male',
[
[setup.unitpool.subrace_lizardkin_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_lizardkin_female',
'Lizardkin: Female',
[
[setup.unitpool.subrace_lizardkin_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_neko',
'Neko: All Gender',
[
[setup.unitpool.subrace_neko_male, 1],
[setup.unitpool.subrace_neko_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_neko_male',
'Neko: Male',
[
[setup.unitpool.subrace_neko_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_neko_female',
'Neko: Female',
[
[setup.unitpool.subrace_neko_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_orc',
'Orc: All Gender',
[
[setup.unitpool.subrace_orc_male, 1],
[setup.unitpool.subrace_orc_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_orc_male',
'Orc: Male',
[
[setup.unitpool.subrace_orc_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_orc_female',
'Orc: Female',
[
[setup.unitpool.subrace_orc_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_tigerkin',
'Tigerkin: All Gender',
[
[setup.unitpool.subrace_tigerkin_male, 1],
[setup.unitpool.subrace_tigerkin_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_tigerkin_male',
'Tigerkin: Male',
[
[setup.unitpool.subrace_tigerkin_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_tigerkin_female',
'Tigerkin: Female',
[
[setup.unitpool.subrace_tigerkin_female, 1],
],
0,
[
]
)>><<run new setup.UnitGroup(
'subrace_werewolf',
'Werewolf: All Gender',
[
[setup.unitpool.subrace_werewolf_male, 1],
[setup.unitpool.subrace_werewolf_female, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_werewolfmale',
'Werewolf: Male',
[
[setup.unitpool.subrace_werewolf_male, 1],
],
0,
[
]
)>>
<<run new setup.UnitGroup(
'subrace_werewolf_female',
'Werewolf: Female',
[
[setup.unitpool.subrace_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,
[
]
)>>
/* NO LONGER USED */
/* DEPRECATED: Please remove with next backwards incompatible change */
<<run new setup.UnitGroup(
'escapedslaves',
'Special: Escaped Slaves',
[
],
1.0,
[
]
)>><<set _angel = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_angel: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_soldier: setup.POOL_BG_COMMON_1,
bg_entertainer: setup.POOL_BG_COMMON_1,
bg_hunter: setup.POOL_BG_COMMON_1,
bg_artist: setup.POOL_BG_COMMON_1,
bg_priest: setup.POOL_BG_COMMON_1,
bg_healer: setup.POOL_BG_COMMON_1,
bg_wiseman: setup.POOL_BG_UNCOMMON_2,
bg_mystic: setup.POOL_BG_UNCOMMON_2,
bg_knight: setup.POOL_BG_UNCOMMON_2,
bg_scholar: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_royal: setup.POOL_BG_MYTHIC_6,
bg_mythical: setup.POOL_BG_MYTHIC_6,
bg_mercenary: setup.POOL_BG_FINAL_8,
bg_monk: setup.POOL_BG_FINAL_8,
bg_woodsman: setup.POOL_BG_FINAL_8,
bg_adventurer: setup.POOL_BG_FINAL_8,
bg_assassin: setup.POOL_BG_FINAL_8,
bg_metalworker: setup.POOL_BG_FINAL_8,
bg_wildman: setup.POOL_BG_FINAL_8,
bg_apprentice: setup.POOL_BG_FINAL_8,
bg_artisan: setup.POOL_BG_FINAL_8,
bg_nomad: setup.POOL_BG_FINAL_8,
bg_merchant: setup.POOL_BG_FINAL_8,
bg_thug: setup.POOL_BG_FINAL_8,
bg_farmer: setup.POOL_BG_FINAL_8,
bg_foodworker: setup.POOL_BG_FINAL_8,
bg_laborer: setup.POOL_BG_FINAL_8,
bg_maid: setup.POOL_BG_FINAL_8,
bg_whore: setup.POOL_BG_FINAL_8,
bg_unemployed: setup.POOL_BG_FINAL_8,
bg_slave: setup.POOL_BG_FINAL_8,
bg_courtesan: setup.POOL_BG_FINAL_8,
bg_informer: setup.POOL_BG_FINAL_8,
bg_slaver: setup.POOL_BG_FINAL_8,
bg_clerk: setup.POOL_BG_FINAL_8,
bg_seaman: setup.POOL_BG_FINAL_8,
bg_thief: setup.POOL_BG_FINAL_8,
bg_engineer: setup.POOL_BG_FINAL_8,
bg_pirate: setup.POOL_BG_FINAL_8,
bg_raider: setup.POOL_BG_FINAL_8,
bg_mist: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_honorable: setup.POOL_PER_COMMON_1,
per_kind: setup.POOL_PER_UNCOMMON_2,
per_chaste: setup.POOL_PER_UNCOMMON_2,
per_brave: setup.POOL_PER_RARE_3,
per_loyal: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
magic_light: 0.2,
magic_light_master: 0.02,
/* =========== */
/* PHYSICAL */
/* =========== */
face_attractive: 0.2,
face_beautiful: 0.2,
/* =========== */
/* SKIN */
/* =========== */
wings_angel: 1.0,
},
{ /* trait dispreferences */
magic_dark: 20,
magic_dark_master: 20,
per_lustful: 10,
per_sexaddict: 10,
per_evil: 10,
per_cruel: 10,
},
)>>
<<run new setup.UnitPool(
'subrace_angel_male',
'Angel Male',
_angel.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>>
<<run new setup.UnitPool(
'subrace_angel_female',
'Angel Female',
_angel.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>><<set _demon = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_demon: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_mystic: setup.POOL_BG_COMMON_1,
bg_slaver: setup.POOL_BG_COMMON_1,
bg_raider: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_mist: setup.POOL_BG_UNCOMMON_2,
bg_assassin: setup.POOL_BG_UNCOMMON_2,
bg_mercenary: setup.POOL_BG_UNCOMMON_2,
bg_adventurer: setup.POOL_BG_RARE_3,
bg_entertainer: setup.POOL_BG_RARE_3,
bg_knight: setup.POOL_BG_EPIC_4,
bg_metalworker: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_EPIC_4,
bg_apprentice: setup.POOL_BG_EPIC_4,
bg_informer: setup.POOL_BG_EPIC_4,
bg_hunter: setup.POOL_BG_EPIC_4,
bg_monk: setup.POOL_BG_EPIC_4,
bg_pirate: setup.POOL_BG_EPIC_4,
bg_boss: setup.POOL_BG_MYTHIC_6,
bg_mythical: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_MYTHIC_6,
bg_courtesan: setup.POOL_BG_MYTHIC_6,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_healer: setup.POOL_BG_MYTHIC_6,
bg_artisan: setup.POOL_BG_MYTHIC_6,
bg_priest: setup.POOL_BG_MYTHIC_6,
bg_seaman: setup.POOL_BG_MYTHIC_6,
bg_thief: setup.POOL_BG_MYTHIC_6,
bg_scholar: setup.POOL_BG_ULTRA_7,
bg_artist: setup.POOL_BG_ULTRA_7,
bg_wiseman: setup.POOL_BG_ULTRA_7,
bg_clerk: setup.POOL_BG_ULTRA_7,
bg_farmer: setup.POOL_BG_ULTRA_7,
bg_foodworker: setup.POOL_BG_ULTRA_7,
bg_laborer: setup.POOL_BG_ULTRA_7,
bg_maid: setup.POOL_BG_ULTRA_7,
bg_merchant: setup.POOL_BG_ULTRA_7,
bg_nomad: setup.POOL_BG_ULTRA_7,
bg_woodsman: setup.POOL_BG_ULTRA_7,
bg_whore: setup.POOL_BG_ULTRA_7,
bg_slave: setup.POOL_BG_ULTRA_7,
bg_unemployed: setup.POOL_BG_ULTRA_7,
bg_wildman: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_lustful: setup.POOL_PER_UNCOMMON_2,
per_sexaddict: setup.POOL_PER_UNCOMMON_2,
per_cruel: setup.POOL_PER_UNCOMMON_2,
per_evil: setup.POOL_PER_UNCOMMON_2,
per_independent: setup.POOL_PER_UNCOMMON_2,
per_lunatic: setup.POOL_PER_RARE_3,
per_dominant: setup.POOL_PER_RARE_3,
per_submissive: setup.POOL_PER_RARE_3,
per_masochistic: setup.POOL_PER_EPIC_4,
/* =========== */
/* MAGIC */
/* =========== */
magic_water: 0.015,
magic_water_master: 0.0015,
magic_fire: 0.015,
magic_fire_master: 0.0015,
magic_wind: 0.015,
magic_wind_master: 0.0015,
magic_earth: 0.015,
magic_earth_master: 0.0015,
magic_dark: 0.2,
magic_dark_master: 0.02,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.2,
muscle_verystrong: 0.1,
muscle_extremelystrong: 0.01,
height_tall: 0.3,
height_giant: 0.05,
dick_large: 0.1,
dick_huge: 0.5,
dick_titanic: 0.1,
balls_large: 0.1,
balls_huge: 0.5,
balls_titanic: 0.1,
breast_large: 0.1,
breast_huge: 0.5,
breast_titanic: 0.1,
/* =========== */
/* SKIN */
/* =========== */
eyes_demon: 0.97,
ears_demon: 0.97,
mouth_demon: 0.97,
body_demon: 0.97,
wings_demon: 0.97,
arms_demon: 0.97,
legs_demon: 0.97,
tail_demon: 0.97,
dick_demon: 0.97,
},
{ /* trait dispreferences */
magic_light: 20,
magic_light_master: 20,
per_honorable: 20,
},
)>>
<<run new setup.UnitPool(
'subrace_demon_male',
'Demon Male',
_demon.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_demon_female',
'Demon Female',
_demon.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _demonkin = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_demonkin: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_adventurer: setup.POOL_BG_COMMON_1,
bg_informer: setup.POOL_BG_COMMON_1,
bg_mercenary: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_thief: setup.POOL_BG_COMMON_1,
bg_entertainer: setup.POOL_BG_COMMON_1,
bg_raider: setup.POOL_BG_COMMON_1,
bg_monk: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_thug: setup.POOL_BG_UNCOMMON_2,
bg_pirate: setup.POOL_BG_UNCOMMON_2,
bg_courtesan: setup.POOL_BG_RARE_3,
bg_mystic: setup.POOL_BG_RARE_3,
bg_assassin: setup.POOL_BG_RARE_3,
bg_hunter: setup.POOL_BG_RARE_3,
bg_seaman: setup.POOL_BG_RARE_3,
bg_clerk: setup.POOL_BG_RARE_3,
bg_farmer: setup.POOL_BG_RARE_3,
bg_foodworker: setup.POOL_BG_RARE_3,
bg_laborer: setup.POOL_BG_RARE_3,
bg_maid: setup.POOL_BG_RARE_3,
bg_merchant: setup.POOL_BG_RARE_3,
bg_nomad: setup.POOL_BG_RARE_3,
bg_woodsman: setup.POOL_BG_RARE_3,
bg_whore: setup.POOL_BG_RARE_3,
bg_slave: setup.POOL_BG_RARE_3,
bg_unemployed: setup.POOL_BG_RARE_3,
bg_mist: setup.POOL_BG_EPIC_4,
bg_knight: setup.POOL_BG_EPIC_4,
bg_metalworker: setup.POOL_BG_EPIC_4,
bg_engineer: setup.POOL_BG_EPIC_4,
bg_scholar: setup.POOL_BG_EPIC_4,
bg_apprentice: setup.POOL_BG_EPIC_4,
bg_artisan: setup.POOL_BG_EPIC_4,
bg_artist: setup.POOL_BG_EPIC_4,
bg_wiseman: setup.POOL_BG_EPIC_4,
bg_healer: setup.POOL_BG_LEGENDARY_5,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_priest: setup.POOL_BG_LEGENDARY_5,
bg_boss: setup.POOL_BG_MYTHIC_6,
bg_mythical: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_MYTHIC_6,
bg_wildman: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_cautious: setup.POOL_PER_UNCOMMON_2,
per_sly: setup.POOL_PER_UNCOMMON_2,
per_frugal: setup.POOL_PER_UNCOMMON_2,
per_cruel: setup.POOL_PER_RARE_3,
per_evil: setup.POOL_PER_RARE_3,
per_lunatic: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_hypnotic: 0.15,
magic_dark: 0.15,
magic_dark_master: 0.015,
/* =========== */
/* PHYSICAL */
/* =========== */
/* =========== */
/* SKIN */
/* =========== */
ears_demon: 1.0,
body_demon: 1.0,
tail_demon: 1.0,
dick_demon: 0.3,
},
{ /* trait dispreferences */
magic_light: 20,
magic_light_master: 20,
per_honorable: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_demonkin_male',
'Demonkin Male',
_demonkin.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_demonkin_female',
'Demonkin Female',
_demonkin.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _dragonkin = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_dragonkin: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_adventurer: setup.POOL_BG_COMMON_1,
bg_mystic: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_metalworker: setup.POOL_BG_UNCOMMON_2,
bg_hunter: setup.POOL_BG_UNCOMMON_2,
bg_priest: setup.POOL_BG_UNCOMMON_2,
bg_apprentice: setup.POOL_BG_RARE_3,
bg_knight: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_EPIC_4,
bg_mercenary: setup.POOL_BG_EPIC_4,
bg_monk: setup.POOL_BG_EPIC_4,
bg_entertainer: setup.POOL_BG_EPIC_4,
bg_thief: setup.POOL_BG_EPIC_4,
bg_assassin: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_LEGENDARY_5,
bg_healer: setup.POOL_BG_LEGENDARY_5,
bg_scholar: setup.POOL_BG_LEGENDARY_5,
bg_artisan: setup.POOL_BG_LEGENDARY_5,
bg_informer: setup.POOL_BG_LEGENDARY_5,
bg_slaver: setup.POOL_BG_LEGENDARY_5,
bg_wiseman: setup.POOL_BG_LEGENDARY_5,
bg_farmer: setup.POOL_BG_LEGENDARY_5,
bg_foodworker: setup.POOL_BG_LEGENDARY_5,
bg_laborer: setup.POOL_BG_LEGENDARY_5,
bg_merchant: setup.POOL_BG_LEGENDARY_5,
bg_nomad: setup.POOL_BG_LEGENDARY_5,
bg_seaman: setup.POOL_BG_LEGENDARY_5,
bg_woodsman: setup.POOL_BG_LEGENDARY_5,
bg_mythical: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_MYTHIC_6,
bg_artist: setup.POOL_BG_MYTHIC_6,
bg_clerk: setup.POOL_BG_MYTHIC_6,
bg_thug: setup.POOL_BG_MYTHIC_6,
bg_pirate: setup.POOL_BG_ULTRA_7,
bg_raider: setup.POOL_BG_ULTRA_7,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mist: setup.POOL_BG_FINAL_8,
bg_courtesan: setup.POOL_BG_FINAL_8,
bg_wildman: setup.POOL_BG_FINAL_8,
bg_maid: setup.POOL_BG_FINAL_8,
bg_whore: setup.POOL_BG_FINAL_8,
bg_slave: setup.POOL_BG_FINAL_8,
bg_unemployed: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_brave: setup.POOL_PER_UNCOMMON_2,
per_honorable: setup.POOL_PER_UNCOMMON_2,
per_proud: setup.POOL_PER_UNCOMMON_2,
per_chaste: setup.POOL_PER_RARE_3,
per_serious: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_alchemy: 0.015,
skill_animal: 0.015,
skill_ambidextrous: 0.015,
skill_connected: 0.015,
skill_creative: 0.015,
skill_intimidating: 0.015,
skill_hypnotic: 0.015,
skill_entertain: 0.015,
magic_light: 0.1,
magic_light_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.2,
muscle_verystrong: 0.1,
muscle_extremelystrong: 0.01,
height_tall: 0.5,
height_giant: 0.1,
tough_tough: 0.1,
dick_large: 0.5,
dick_huge: 0.3,
dick_titanic: 0.05,
balls_large: 0.5,
balls_huge: 0.3,
balls_titanic: 0.05,
breast_large: 0.5,
breast_huge: 0.3,
breast_titanic: 0.05,
/* =========== */
/* SKIN */
/* =========== */
eyes_dragonkin: 0.5,
ears_dragonkin: 1.0,
mouth_dragonkin: 1.0,
body_dragonkin: 1.0,
wings_dragonkin: 1.0,
arms_dragonkin: 1.0,
legs_dragonkin: 1.0,
tail_dragonkin: 1.0,
dick_dragonkin: 0.9,
},
{ /* trait dispreferences */
per_lustful: 5,
per_sexaddict: 5,
magic_dark: 5,
magic_dark_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_dragonkin_male',
'Dragonkin Male',
_dragonkin.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>>
<<run new setup.UnitPool(
'subrace_dragonkin_female',
'Dragonkin Female',
_dragonkin.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>><<set _elf = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_elf: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_apprentice: setup.POOL_BG_COMMON_1,
bg_hunter: setup.POOL_BG_COMMON_1,
bg_clerk: setup.POOL_BG_COMMON_1,
bg_farmer: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_merchant: setup.POOL_BG_COMMON_1,
bg_woodsman: setup.POOL_BG_COMMON_1,
bg_unemployed: setup.POOL_BG_COMMON_1,
bg_artisan: setup.POOL_BG_UNCOMMON_2,
bg_priest: setup.POOL_BG_UNCOMMON_2,
bg_soldier: setup.POOL_BG_UNCOMMON_2,
bg_thief: setup.POOL_BG_UNCOMMON_2,
bg_slave: setup.POOL_BG_UNCOMMON_2,
bg_scholar: setup.POOL_BG_RARE_3,
bg_artist: setup.POOL_BG_RARE_3,
bg_wiseman: setup.POOL_BG_RARE_3,
bg_entertainer: setup.POOL_BG_RARE_3,
bg_maid: setup.POOL_BG_RARE_3,
bg_whore: setup.POOL_BG_RARE_3,
bg_adventurer: setup.POOL_BG_EPIC_4,
bg_courtesan: setup.POOL_BG_EPIC_4,
bg_engineer: setup.POOL_BG_EPIC_4,
bg_healer: setup.POOL_BG_EPIC_4,
bg_mystic: setup.POOL_BG_EPIC_4,
bg_mercenary: setup.POOL_BG_EPIC_4,
bg_slaver: setup.POOL_BG_EPIC_4,
bg_pirate: setup.POOL_BG_EPIC_4,
bg_raider: setup.POOL_BG_EPIC_4,
bg_thug: setup.POOL_BG_EPIC_4,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_informer: setup.POOL_BG_LEGENDARY_5,
bg_monk: setup.POOL_BG_LEGENDARY_5,
bg_assassin: setup.POOL_BG_MYTHIC_6,
bg_metalworker: setup.POOL_BG_MYTHIC_6,
bg_wildman: setup.POOL_BG_MYTHIC_6,
bg_nomad: setup.POOL_BG_MYTHIC_6,
bg_mythical: setup.POOL_BG_ULTRA_7,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_mist: setup.POOL_BG_FINAL_8,
bg_seaman: setup.POOL_BG_FINAL_8,
bg_boss: 0.00001,
/* =========== */
/* PERSONALITY */
/* =========== */
per_logical: setup.POOL_PER_UNCOMMON_2,
per_studious: setup.POOL_PER_UNCOMMON_2,
per_smart: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_alchemy: 0.1,
magic_earth: 0.1,
magic_earth_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_thin: 0.1,
muscle_verythin: 0.03,
muscle_extremelythin: 0.002,
face_attractive: 0.1,
face_beautiful: 0.03,
tough_nimble: 0.1,
/* =========== */
/* SKIN */
/* =========== */
ears_elf: 1.0,
wings_elf: 0.001,
},
{ /* trait dispreferences */
magic_wind: 5,
magic_wind_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_elf_male',
'Elf Male',
_elf.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_elf_female',
'Elf Female',
_elf.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _fairy = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_fairy: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_apprentice: setup.POOL_BG_COMMON_1,
bg_hunter: setup.POOL_BG_COMMON_1,
bg_farmer: setup.POOL_BG_COMMON_1,
bg_woodsman: setup.POOL_BG_COMMON_1,
bg_wildman: setup.POOL_BG_UNCOMMON_2,
bg_mystic: setup.POOL_BG_RARE_3,
bg_mythical: setup.POOL_BG_EPIC_4,
bg_clerk: setup.POOL_BG_FINAL_8,
bg_foodworker: setup.POOL_BG_FINAL_8,
bg_laborer: setup.POOL_BG_FINAL_8,
bg_merchant: setup.POOL_BG_FINAL_8,
bg_unemployed: setup.POOL_BG_FINAL_8,
bg_artisan: setup.POOL_BG_FINAL_8,
bg_priest: setup.POOL_BG_FINAL_8,
bg_soldier: setup.POOL_BG_FINAL_8,
bg_thief: setup.POOL_BG_FINAL_8,
bg_slave: setup.POOL_BG_FINAL_8,
bg_scholar: setup.POOL_BG_FINAL_8,
bg_artist: setup.POOL_BG_FINAL_8,
bg_wiseman: setup.POOL_BG_FINAL_8,
bg_entertainer: setup.POOL_BG_FINAL_8,
bg_maid: setup.POOL_BG_FINAL_8,
bg_whore: setup.POOL_BG_FINAL_8,
bg_adventurer: setup.POOL_BG_FINAL_8,
bg_courtesan: setup.POOL_BG_FINAL_8,
bg_engineer: setup.POOL_BG_FINAL_8,
bg_healer: setup.POOL_BG_FINAL_8,
bg_mercenary: setup.POOL_BG_FINAL_8,
bg_slaver: setup.POOL_BG_FINAL_8,
bg_pirate: setup.POOL_BG_FINAL_8,
bg_raider: setup.POOL_BG_FINAL_8,
bg_thug: setup.POOL_BG_FINAL_8,
bg_knight: setup.POOL_BG_FINAL_8,
bg_noble: setup.POOL_BG_FINAL_8,
bg_informer: setup.POOL_BG_FINAL_8,
bg_monk: setup.POOL_BG_FINAL_8,
bg_assassin: setup.POOL_BG_FINAL_8,
bg_metalworker: setup.POOL_BG_FINAL_8,
bg_nomad: setup.POOL_BG_FINAL_8,
bg_royal: setup.POOL_BG_FINAL_8,
bg_mist: setup.POOL_BG_FINAL_8,
bg_seaman: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_playful: setup.POOL_PER_UNCOMMON_2,
per_dreamy: setup.POOL_PER_UNCOMMON_2,
per_lunatic: setup.POOL_PER_EPIC_4,
/* =========== */
/* MAGIC */
/* =========== */
magic_wind: 0.1,
magic_wind_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_thin: 0.1,
muscle_verythin: 0.03,
muscle_extremelythin: 0.002,
face_attractive: 0.1,
face_beautiful: 0.03,
height_short: 0.1,
/* =========== */
/* SKIN */
/* =========== */
ears_elf: 1.0,
wings_elf: 1.0,
},
{ /* trait dispreferences */
},
)>>
<<run new setup.UnitPool(
'subrace_fairy_male',
'Fairy Male',
_fairy.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>>
<<run new setup.UnitPool(
'subrace_fairy_female',
'Fairy Female',
_fairy.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>><<set _humandesert = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_humandesert: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_merchant: setup.POOL_BG_COMMON_1,
bg_nomad: setup.POOL_BG_COMMON_1,
bg_raider: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_thief: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_whore: setup.POOL_BG_COMMON_1,
bg_unemployed: setup.POOL_BG_COMMON_1,
bg_slave: setup.POOL_BG_COMMON_1,
bg_artisan: setup.POOL_BG_UNCOMMON_2,
bg_informer: setup.POOL_BG_UNCOMMON_2,
bg_mercenary: setup.POOL_BG_UNCOMMON_2,
bg_monk: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_pirate: setup.POOL_BG_UNCOMMON_2,
bg_entertainer: setup.POOL_BG_UNCOMMON_2,
bg_artist: setup.POOL_BG_RARE_3,
bg_hunter: setup.POOL_BG_EPIC_4,
bg_priest: setup.POOL_BG_EPIC_4,
bg_assassin: setup.POOL_BG_EPIC_4,
bg_healer: setup.POOL_BG_EPIC_4,
bg_metalworker: setup.POOL_BG_EPIC_4,
bg_wildman: setup.POOL_BG_EPIC_4,
bg_apprentice: setup.POOL_BG_EPIC_4,
bg_wiseman: setup.POOL_BG_EPIC_4,
bg_clerk: setup.POOL_BG_EPIC_4,
bg_farmer: setup.POOL_BG_EPIC_4,
bg_seaman: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_scholar: setup.POOL_BG_LEGENDARY_5,
bg_mist: setup.POOL_BG_MYTHIC_6,
bg_adventurer: setup.POOL_BG_MYTHIC_6,
bg_courtesan: setup.POOL_BG_MYTHIC_6,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_knight: setup.POOL_BG_MYTHIC_6,
bg_mystic: setup.POOL_BG_MYTHIC_6,
bg_maid: setup.POOL_BG_MYTHIC_6,
bg_woodsman: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_attentive: setup.POOL_PER_UNCOMMON_2,
per_serious: setup.POOL_PER_UNCOMMON_2,
per_stubborn: setup.POOL_PER_UNCOMMON_2,
per_evil: setup.POOL_PER_LEGENDARY_5,
/* =========== */
/* MAGIC */
/* =========== */
skill_creative: 0.1,
magic_fire: 0.05,
magic_fire_master: 0.005,
/* =========== */
/* PHYSICAL */
/* =========== */
face_attractive: 0.05,
face_beautiful: 0.01,
tough_tough: 0.2,
/* =========== */
/* SKIN */
/* =========== */
},
{ /* trait dispreferences */
magic_water: 5.0,
magic_water_master: 5.0,
},
)>>
<<run new setup.UnitPool(
'subrace_humandesert_male',
'Human (Desert) Male',
_humandesert.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_humandesert_female',
'Human (Desert) Female',
_humandesert.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _humankingdom = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_humankingdom: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_clerk: setup.POOL_BG_COMMON_1,
bg_farmer: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_maid: setup.POOL_BG_COMMON_1,
bg_merchant: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_thief: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_unemployed: setup.POOL_BG_COMMON_1,
bg_artisan: setup.POOL_BG_UNCOMMON_2,
bg_mercenary: setup.POOL_BG_UNCOMMON_2,
bg_entertainer: setup.POOL_BG_UNCOMMON_2,
bg_pirate: setup.POOL_BG_UNCOMMON_2,
bg_raider: setup.POOL_BG_UNCOMMON_2,
bg_seaman: setup.POOL_BG_UNCOMMON_2,
bg_whore: setup.POOL_BG_UNCOMMON_2,
bg_slave: setup.POOL_BG_UNCOMMON_2,
bg_apprentice: setup.POOL_BG_RARE_3,
bg_informer: setup.POOL_BG_RARE_3,
bg_slaver: setup.POOL_BG_RARE_3,
bg_woodsman: setup.POOL_BG_RARE_3,
bg_courtesan: setup.POOL_BG_EPIC_4,
bg_healer: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_EPIC_4,
bg_scholar: setup.POOL_BG_EPIC_4,
bg_artist: setup.POOL_BG_EPIC_4,
bg_hunter: setup.POOL_BG_EPIC_4,
bg_priest: setup.POOL_BG_EPIC_4,
bg_monk: setup.POOL_BG_EPIC_4,
bg_wiseman: setup.POOL_BG_EPIC_4,
bg_assassin: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_LEGENDARY_5,
bg_wildman: setup.POOL_BG_LEGENDARY_5,
bg_nomad: setup.POOL_BG_LEGENDARY_5,
bg_boss: setup.POOL_BG_MYTHIC_6,
bg_adventurer: setup.POOL_BG_MYTHIC_6,
bg_knight: setup.POOL_BG_MYTHIC_6,
bg_metalworker: setup.POOL_BG_MYTHIC_6,
bg_mystic: setup.POOL_BG_MYTHIC_6,
bg_mist: setup.POOL_BG_ULTRA_7,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
/* =========== */
/* MAGIC */
/* =========== */
skill_connected: 0.1,
magic_wind: 0.03,
magic_wind_master: 0.003,
/* =========== */
/* PHYSICAL */
/* =========== */
/* =========== */
/* SKIN */
/* =========== */
wings_angel: 0.000001,
},
{ /* trait dispreferences */
magic_earth: 5,
magic_earth_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_humankingdom_male',
'Human (Kingdom) Male',
_humankingdom.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_humankingdom_female',
'Human (Kingdom) Female',
_humankingdom.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _humansea = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_humansea: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_artisan: setup.POOL_BG_COMMON_1,
bg_farmer: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_merchant: setup.POOL_BG_COMMON_1,
bg_pirate: setup.POOL_BG_COMMON_1,
bg_thief: setup.POOL_BG_COMMON_1,
bg_seaman: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_whore: setup.POOL_BG_COMMON_1,
bg_assassin: setup.POOL_BG_UNCOMMON_2,
bg_apprentice: setup.POOL_BG_UNCOMMON_2,
bg_informer: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_maid: setup.POOL_BG_UNCOMMON_2,
bg_slave: setup.POOL_BG_UNCOMMON_2,
bg_unemployed: setup.POOL_BG_UNCOMMON_2,
bg_courtesan: setup.POOL_BG_RARE_3,
bg_healer: setup.POOL_BG_RARE_3,
bg_artist: setup.POOL_BG_RARE_3,
bg_mercenary: setup.POOL_BG_RARE_3,
bg_monk: setup.POOL_BG_RARE_3,
bg_clerk: setup.POOL_BG_RARE_3,
bg_entertainer: setup.POOL_BG_RARE_3,
bg_adventurer: setup.POOL_BG_EPIC_4,
bg_engineer: setup.POOL_BG_EPIC_4,
bg_mystic: setup.POOL_BG_EPIC_4,
bg_noble: setup.POOL_BG_EPIC_4,
bg_scholar: setup.POOL_BG_EPIC_4,
bg_hunter: setup.POOL_BG_EPIC_4,
bg_priest: setup.POOL_BG_EPIC_4,
bg_wiseman: setup.POOL_BG_EPIC_4,
bg_raider: setup.POOL_BG_EPIC_4,
bg_thug: setup.POOL_BG_EPIC_4,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_metalworker: setup.POOL_BG_LEGENDARY_5,
bg_mist: setup.POOL_BG_MYTHIC_6,
bg_wildman: setup.POOL_BG_MYTHIC_6,
bg_nomad: setup.POOL_BG_MYTHIC_6,
bg_woodsman: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_honorable: setup.POOL_PER_EPIC_4,
per_evil: setup.POOL_PER_EPIC_4,
per_lunatic: setup.POOL_PER_EPIC_4,
per_sexaddict: setup.POOL_PER_EPIC_4,
per_masochistic: setup.POOL_PER_LEGENDARY_5,
per_dominant: setup.POOL_PER_EPIC_4,
per_submissive: setup.POOL_PER_EPIC_4,
/* =========== */
/* MAGIC */
/* =========== */
skill_hypnotic: 0.1,
magic_light: 0.05,
magic_light_master: 0.005,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_verystrong: 0.01,
muscle_verythin: 0.01,
muscle_extremelystrong: 0.001,
muscle_extremelythin: 0.001,
face_beautiful: 0.01,
face_hideous: 0.01,
height_dwarf: 0.01,
height_giant: 0.01,
dick_huge: 0.01,
dick_tiny: 0.01,
dick_titanic: 0.001,
balls_huge: 0.01,
balls_tiny: 0.01,
balls_titanic: 0.001,
breast_tiny: 0.01,
breast_huge: 0.01,
breast_titanic: 0.001,
/* =========== */
/* SKIN */
/* =========== */
},
{ /* trait dispreferences */
magic_dark: 5,
magic_dark_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_humansea_male',
'Human (Sea) Male',
_humansea.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_humansea_female',
'Human (Sea) Female',
_humansea.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _humanvale = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_humanvale: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_farmer: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_slave: setup.POOL_BG_COMMON_1,
bg_unemployed: setup.POOL_BG_COMMON_1,
bg_mercenary: setup.POOL_BG_UNCOMMON_2,
bg_monk: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_raider: setup.POOL_BG_UNCOMMON_2,
bg_artisan: setup.POOL_BG_RARE_3,
bg_priest: setup.POOL_BG_RARE_3,
bg_wiseman: setup.POOL_BG_RARE_3,
bg_adventurer: setup.POOL_BG_EPIC_4,
bg_healer: setup.POOL_BG_EPIC_4,
bg_wildman: setup.POOL_BG_EPIC_4,
bg_apprentice: setup.POOL_BG_EPIC_4,
bg_informer: setup.POOL_BG_EPIC_4,
bg_entertainer: setup.POOL_BG_EPIC_4,
bg_hunter: setup.POOL_BG_EPIC_4,
bg_merchant: setup.POOL_BG_EPIC_4,
bg_maid: setup.POOL_BG_EPIC_4,
bg_nomad: setup.POOL_BG_EPIC_4,
bg_pirate: setup.POOL_BG_EPIC_4,
bg_thief: setup.POOL_BG_EPIC_4,
bg_whore: setup.POOL_BG_EPIC_4,
bg_woodsman: setup.POOL_BG_EPIC_4,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_metalworker: setup.POOL_BG_LEGENDARY_5,
bg_mystic: setup.POOL_BG_LEGENDARY_5,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_scholar: setup.POOL_BG_LEGENDARY_5,
bg_assassin: setup.POOL_BG_MYTHIC_6,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_artist: setup.POOL_BG_MYTHIC_6,
bg_clerk: setup.POOL_BG_MYTHIC_6,
bg_seaman: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_courtesan: setup.POOL_BG_ULTRA_7,
bg_mist: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_direct: setup.POOL_PER_RARE_3,
per_brave: setup.POOL_PER_RARE_3,
per_loyal: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_ambidextrous: 0.1,
magic_water: 0.05,
magic_water_master: 0.005,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.1,
muscle_verystrong: 0.02,
/* =========== */
/* SKIN */
/* =========== */
},
{ /* trait dispreferences */
magic_fire: 5,
magic_fire_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_humanvale_male',
'Human (Vale) Male',
_humanvale.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_humanvale_female',
'Human (Vale) Female',
_humanvale.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _lizardkin = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_lizardkin: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_seaman: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_pirate: setup.POOL_BG_COMMON_1,
bg_adventurer: setup.POOL_BG_UNCOMMON_2,
bg_mystic: setup.POOL_BG_UNCOMMON_2,
bg_hunter: setup.POOL_BG_UNCOMMON_2,
bg_mercenary: setup.POOL_BG_UNCOMMON_2,
bg_monk: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_woodsman: setup.POOL_BG_UNCOMMON_2,
bg_entertainer: setup.POOL_BG_UNCOMMON_2,
bg_thug: setup.POOL_BG_UNCOMMON_2,
bg_raider: setup.POOL_BG_UNCOMMON_2,
bg_laborer: setup.POOL_BG_UNCOMMON_2,
bg_thief: setup.POOL_BG_UNCOMMON_2,
bg_knight: setup.POOL_BG_RARE_3,
bg_metalworker: setup.POOL_BG_RARE_3,
bg_noble: setup.POOL_BG_RARE_3,
bg_assassin: setup.POOL_BG_RARE_3,
bg_wildman: setup.POOL_BG_RARE_3,
bg_scholar: setup.POOL_BG_RARE_3,
bg_apprentice: setup.POOL_BG_RARE_3,
bg_priest: setup.POOL_BG_RARE_3,
bg_artisan: setup.POOL_BG_RARE_3,
bg_informer: setup.POOL_BG_RARE_3,
bg_healer: setup.POOL_BG_EPIC_4,
bg_foodworker: setup.POOL_BG_EPIC_4,
bg_slave: setup.POOL_BG_EPIC_4,
bg_unemployed: setup.POOL_BG_EPIC_4,
bg_royal: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_LEGENDARY_5,
bg_courtesan: setup.POOL_BG_LEGENDARY_5,
bg_wiseman: setup.POOL_BG_LEGENDARY_5,
bg_artist: setup.POOL_BG_LEGENDARY_5,
bg_farmer: setup.POOL_BG_LEGENDARY_5,
bg_merchant: setup.POOL_BG_LEGENDARY_5,
bg_nomad: setup.POOL_BG_LEGENDARY_5,
bg_clerk: setup.POOL_BG_LEGENDARY_5,
bg_maid: setup.POOL_BG_LEGENDARY_5,
bg_whore: setup.POOL_BG_LEGENDARY_5,
bg_mythical: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mist: setup.POOL_BG_FINAL_8,
/* =========== */
/* PERSONALITY */
/* =========== */
per_loner: setup.POOL_PER_UNCOMMON_2,
per_proud: setup.POOL_PER_UNCOMMON_2,
per_brave: setup.POOL_PER_UNCOMMON_2,
per_dominant: setup.POOL_PER_RARE_3,
per_aggressive: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_intimidating: 0.2,
magic_water: 0.1,
magic_water_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.2,
muscle_verystrong: 0.1,
muscle_extremelystrong: 0.01,
height_tall: 0.5,
height_giant: 0.1,
tough_tough: 0.1,
dick_large: 0.3,
dick_huge: 0.15,
dick_titanic: 0.02,
balls_large: 0.3,
balls_huge: 0.15,
balls_titanic: 0.02,
breast_large: 0.3,
breast_huge: 0.15,
breast_titanic: 0.02,
/* =========== */
/* SKIN */
/* =========== */
eyes_dragonkin: 0.5,
ears_dragonkin: 1.0,
mouth_dragonkin: 1.0,
body_dragonkin: 1.0,
arms_dragonkin: 1.0,
legs_dragonkin: 1.0,
tail_dragonkin: 1.0,
dick_dragonkin: 0.9,
},
{ /* trait dispreferences */
},
)>>
<<run new setup.UnitPool(
'subrace_lizardkin_male',
'Lizardkin Male',
_lizardkin.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_lizardkin_female',
'Lizardkin Female',
_lizardkin.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _neko = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_neko: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_hunter: setup.POOL_BG_COMMON_1,
bg_entertainer: setup.POOL_BG_COMMON_1,
bg_farmer: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_thief: setup.POOL_BG_COMMON_1,
bg_whore: setup.POOL_BG_COMMON_1,
bg_woodsman: setup.POOL_BG_COMMON_1,
bg_unemployed: setup.POOL_BG_COMMON_1,
bg_slave: setup.POOL_BG_COMMON_1,
bg_informer: setup.POOL_BG_UNCOMMON_2,
bg_artisan: setup.POOL_BG_RARE_3,
bg_maid: setup.POOL_BG_RARE_3,
bg_assassin: setup.POOL_BG_EPIC_4,
bg_wildman: setup.POOL_BG_EPIC_4,
bg_apprentice: setup.POOL_BG_EPIC_4,
bg_artist: setup.POOL_BG_EPIC_4,
bg_clerk: setup.POOL_BG_EPIC_4,
bg_mercenary: setup.POOL_BG_EPIC_4,
bg_monk: setup.POOL_BG_EPIC_4,
bg_nomad: setup.POOL_BG_EPIC_4,
bg_merchant: setup.POOL_BG_EPIC_4,
bg_soldier: setup.POOL_BG_EPIC_4,
bg_thug: setup.POOL_BG_EPIC_4,
bg_adventurer: setup.POOL_BG_LEGENDARY_5,
bg_courtesan: setup.POOL_BG_LEGENDARY_5,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_scholar: setup.POOL_BG_LEGENDARY_5,
bg_priest: setup.POOL_BG_LEGENDARY_5,
bg_slaver: setup.POOL_BG_LEGENDARY_5,
bg_seaman: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_healer: setup.POOL_BG_MYTHIC_6,
bg_metalworker: setup.POOL_BG_MYTHIC_6,
bg_mystic: setup.POOL_BG_MYTHIC_6,
bg_wiseman: setup.POOL_BG_MYTHIC_6,
bg_pirate: setup.POOL_BG_MYTHIC_6,
bg_raider: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_mist: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_lustful: setup.POOL_PER_RARE_3,
per_playful: setup.POOL_PER_RARE_3,
per_active: setup.POOL_PER_RARE_3,
per_dreamy: setup.POOL_PER_RARE_3,
per_dominant: setup.POOL_PER_EPIC_4,
per_submissive: setup.POOL_PER_EPIC_4,
per_sexaddict: setup.POOL_PER_EPIC_4,
/* =========== */
/* MAGIC */
/* =========== */
skill_entertain: 0.1,
magic_earth: 0.05,
magic_earth_master: 0.005,
/* =========== */
/* PHYSICAL */
/* =========== */
dick_tiny: 0.01,
dick_huge: 0.01,
dick_titanic: 0.001,
balls_tiny: 0.01,
balls_huge: 0.01,
balls_titanic: 0.001,
breast_tiny: 0.01,
breast_huge: 0.01,
breast_titanic: 0.001,
/* =========== */
/* SKIN */
/* =========== */
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,
},
{ /* trait dispreferences */
magic_wind: 5.0,
magic_wind_master: 5.0,
},
)>>
<<run new setup.UnitPool(
'subrace_neko_male',
'Neko Male',
_neko.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_neko_female',
'Neko Female',
_neko.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _orc = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_orc: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_mercenary: setup.POOL_BG_COMMON_1,
bg_slaver: setup.POOL_BG_COMMON_1,
bg_foodworker: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_nomad: setup.POOL_BG_COMMON_1,
bg_pirate: setup.POOL_BG_COMMON_1,
bg_raider: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_hunter: setup.POOL_BG_UNCOMMON_2,
bg_thief: setup.POOL_BG_UNCOMMON_2,
bg_unemployed: setup.POOL_BG_UNCOMMON_2,
bg_metalworker: setup.POOL_BG_RARE_3,
bg_merchant: setup.POOL_BG_RARE_3,
bg_whore: setup.POOL_BG_RARE_3,
bg_wildman: setup.POOL_BG_EPIC_4,
bg_entertainer: setup.POOL_BG_EPIC_4,
bg_farmer: setup.POOL_BG_EPIC_4,
bg_seaman: setup.POOL_BG_EPIC_4,
bg_slave: setup.POOL_BG_EPIC_4,
bg_adventurer: setup.POOL_BG_LEGENDARY_5,
bg_mystic: setup.POOL_BG_LEGENDARY_5,
bg_artisan: setup.POOL_BG_LEGENDARY_5,
bg_monk: setup.POOL_BG_LEGENDARY_5,
bg_mist: setup.POOL_BG_MYTHIC_6,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_healer: setup.POOL_BG_MYTHIC_6,
bg_scholar: setup.POOL_BG_MYTHIC_6,
bg_apprentice: setup.POOL_BG_MYTHIC_6,
bg_informer: setup.POOL_BG_MYTHIC_6,
bg_wiseman: setup.POOL_BG_MYTHIC_6,
bg_clerk: setup.POOL_BG_MYTHIC_6,
bg_maid: setup.POOL_BG_MYTHIC_6,
bg_woodsman: setup.POOL_BG_MYTHIC_6,
bg_assassin: setup.POOL_BG_ULTRA_7,
bg_knight: setup.POOL_BG_ULTRA_7,
bg_noble: setup.POOL_BG_ULTRA_7,
bg_priest: setup.POOL_BG_ULTRA_7,
bg_boss: setup.POOL_BG_FINAL_8,
bg_royal: setup.POOL_BG_FINAL_8,
bg_courtesan: setup.POOL_BG_FINAL_8,
bg_artist: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_slow: setup.POOL_PER_UNCOMMON_2,
per_active: setup.POOL_PER_RARE_3,
per_aggressive: setup.POOL_PER_RARE_3,
per_dominant: setup.POOL_PER_RARE_3,
per_masochistic: setup.POOL_PER_LEGENDARY_5,
/* =========== */
/* MAGIC */
/* =========== */
skill_intimidating: 0.1,
magic_fire: 0.1,
magic_fire_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.1,
muscle_verystrong: 0.03,
muscle_extremelystrong: 0.001,
height_tall: 0.2,
height_giant: 0.01,
face_scary: 0.1,
face_hideous: 0.03,
dick_large: 0.3,
dick_huge: 0.1,
dick_titanic: 0.005,
balls_large: 0.3,
balls_huge: 0.1,
balls_titanic: 0.005,
breast_large: 0.3,
breast_huge: 0.1,
breast_titanic: 0.005,
/* =========== */
/* SKIN */
/* =========== */
mouth_orc: 0.95,
body_orc: 0.95,
ears_elf: 0.9,
},
{ /* trait dispreferences */
magic_water: 5,
magic_water_master: 5,
},
)>>
<<run new setup.UnitPool(
'subrace_orc_male',
'Orc Male',
_orc.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_orc_female',
'Orc Female',
_orc.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set _tigerkin = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_tigerkin: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_mercenary: setup.POOL_BG_COMMON_1,
bg_monk: setup.POOL_BG_COMMON_1,
bg_hunter: setup.POOL_BG_COMMON_1,
bg_woodsman: setup.POOL_BG_COMMON_1,
bg_soldier: setup.POOL_BG_COMMON_1,
bg_adventurer: setup.POOL_BG_RARE_3,
bg_assassin: setup.POOL_BG_RARE_3,
bg_metalworker: setup.POOL_BG_RARE_3,
bg_mystic: setup.POOL_BG_RARE_3,
bg_wildman: setup.POOL_BG_RARE_3,
bg_apprentice: setup.POOL_BG_RARE_3,
bg_artisan: setup.POOL_BG_RARE_3,
bg_artist: setup.POOL_BG_RARE_3,
bg_nomad: setup.POOL_BG_RARE_3,
bg_merchant: setup.POOL_BG_RARE_3,
bg_thug: setup.POOL_BG_RARE_3,
bg_entertainer: setup.POOL_BG_RARE_3,
bg_farmer: setup.POOL_BG_RARE_3,
bg_foodworker: setup.POOL_BG_RARE_3,
bg_laborer: setup.POOL_BG_RARE_3,
bg_maid: setup.POOL_BG_RARE_3,
bg_whore: setup.POOL_BG_RARE_3,
bg_unemployed: setup.POOL_BG_LEGENDARY_5,
bg_slave: setup.POOL_BG_LEGENDARY_5,
bg_courtesan: setup.POOL_BG_LEGENDARY_5,
bg_informer: setup.POOL_BG_LEGENDARY_5,
bg_noble: setup.POOL_BG_LEGENDARY_5,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_scholar: setup.POOL_BG_LEGENDARY_5,
bg_priest: setup.POOL_BG_LEGENDARY_5,
bg_slaver: setup.POOL_BG_LEGENDARY_5,
bg_clerk: setup.POOL_BG_LEGENDARY_5,
bg_seaman: setup.POOL_BG_LEGENDARY_5,
bg_thief: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_healer: setup.POOL_BG_MYTHIC_6,
bg_wiseman: setup.POOL_BG_MYTHIC_6,
bg_pirate: setup.POOL_BG_MYTHIC_6,
bg_raider: setup.POOL_BG_MYTHIC_6,
bg_royal: setup.POOL_BG_ULTRA_7,
bg_mist: setup.POOL_BG_FINAL_8,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_dominant: setup.POOL_PER_UNCOMMON_2,
per_proud: setup.POOL_PER_UNCOMMON_2,
per_active: setup.POOL_PER_RARE_3,
per_playful: setup.POOL_PER_RARE_3,
per_lustful: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_ambidextrous: 0.2,
magic_earth: 0.1,
magic_earth_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.1,
muscle_verystrong: 0.05,
muscle_extremelystrong: 0.01,
dick_huge: 0.1,
dick_titanic: 0.01,
balls_huge: 0.1,
balls_titanic: 0.01,
breast_huge: 0.1,
breast_titanic: 0.01,
tough_nimble: 0.2,
/* =========== */
/* SKIN */
/* =========== */
eyes_neko: 0.9,
ears_neko: 1.0,
tail_neko: 1.0,
arms_neko: 1.0,
body_neko: 1.0,
legs_neko: 1.0,
mouth_neko: 1.0,
},
{ /* trait dispreferences */
magic_wind: 5.0,
magic_wind_master: 5.0,
},
)>>
<<run new setup.UnitPool(
'subrace_tigerkin_male',
'Tigerkin Male',
_tigerkin.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>>
<<run new setup.UnitPool(
'subrace_tigerkin_female',
'Tigerkin Female',
_tigerkin.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
[ /* post process */
],
)>><<set _werewolf = new setup.UnitPoolTraitAlloc(
{ /* trait preferences */
/* =========== */
/* RACE */
/* =========== */
subrace_werewolf: 1,
/* =========== */
/* BACKGROUNDS */
/* =========== */
bg_hunter: setup.POOL_BG_COMMON_1,
bg_laborer: setup.POOL_BG_COMMON_1,
bg_woodsman: setup.POOL_BG_COMMON_1,
bg_raider: setup.POOL_BG_COMMON_1,
bg_thug: setup.POOL_BG_COMMON_1,
bg_wildman: setup.POOL_BG_UNCOMMON_2,
bg_slaver: setup.POOL_BG_UNCOMMON_2,
bg_foodworker: setup.POOL_BG_UNCOMMON_2,
bg_nomad: setup.POOL_BG_UNCOMMON_2,
bg_pirate: setup.POOL_BG_UNCOMMON_2,
bg_thief: setup.POOL_BG_UNCOMMON_2,
bg_mercenary: setup.POOL_BG_RARE_3,
bg_soldier: setup.POOL_BG_RARE_3,
bg_unemployed: setup.POOL_BG_RARE_3,
bg_adventurer: setup.POOL_BG_EPIC_4,
bg_metalworker: setup.POOL_BG_EPIC_4,
bg_monk: setup.POOL_BG_EPIC_4,
bg_priest: setup.POOL_BG_EPIC_4,
bg_farmer: setup.POOL_BG_EPIC_4,
bg_assassin: setup.POOL_BG_LEGENDARY_5,
bg_knight: setup.POOL_BG_LEGENDARY_5,
bg_artisan: setup.POOL_BG_LEGENDARY_5,
bg_slave: setup.POOL_BG_LEGENDARY_5,
bg_engineer: setup.POOL_BG_MYTHIC_6,
bg_healer: setup.POOL_BG_MYTHIC_6,
bg_mystic: setup.POOL_BG_MYTHIC_6,
bg_scholar: setup.POOL_BG_MYTHIC_6,
bg_apprentice: setup.POOL_BG_MYTHIC_6,
bg_artist: setup.POOL_BG_MYTHIC_6,
bg_informer: setup.POOL_BG_MYTHIC_6,
bg_wiseman: setup.POOL_BG_MYTHIC_6,
bg_clerk: setup.POOL_BG_MYTHIC_6,
bg_entertainer: setup.POOL_BG_MYTHIC_6,
bg_maid: setup.POOL_BG_MYTHIC_6,
bg_merchant: setup.POOL_BG_MYTHIC_6,
bg_seaman: setup.POOL_BG_MYTHIC_6,
bg_noble: setup.POOL_BG_ULTRA_7,
bg_boss: setup.POOL_BG_FINAL_8,
bg_mist: setup.POOL_BG_FINAL_8,
bg_royal: setup.POOL_BG_FINAL_8,
bg_courtesan: setup.POOL_BG_FINAL_8,
bg_whore: setup.POOL_BG_FINAL_8,
bg_mythical: 0,
/* =========== */
/* PERSONALITY */
/* =========== */
per_calm: setup.POOL_PER_RARE_3,
per_dominant: setup.POOL_PER_RARE_3,
per_loner: setup.POOL_PER_RARE_3,
per_independent: setup.POOL_PER_RARE_3,
/* =========== */
/* MAGIC */
/* =========== */
skill_animal: 0.1,
magic_water: 0.1,
magic_water_master: 0.01,
/* =========== */
/* PHYSICAL */
/* =========== */
muscle_strong: 0.2,
muscle_verystrong: 0.05,
muscle_extremelystrong: 0.001,
dick_large: 0.2,
dick_huge: 0.05,
dick_titanic: 0.001,
balls_large: 0.2,
balls_huge: 0.05,
balls_titanic: 0.001,
breast_tiny: 0.1,
breast_small: 0.1,
breast_medium: 0.1,
/* =========== */
/* SKIN */
/* =========== */
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,
},
{ /* trait dispreferences */
magic_fire: 5.0,
magic_fire_master: 5.0,
},
)>>
<<run new setup.UnitPool(
'subrace_werewolf_male',
'Werewolf Male',
_werewolf.computePreferences(setup.trait.gender_male),
setup.DEFAULT_INITIAL_SKILLS,
)>>
<<run new setup.UnitPool(
'subrace_werewolf_female',
'Werewolf Female',
_werewolf.computePreferences(setup.trait.gender_female),
setup.DEFAULT_INITIAL_SKILLS,
)>><<set setup.unitpool = {}>>
<<set _passages = Story.lookup('tags', 'unitpool')>>
<<for _ipassage, _passage range _passages>>
<<include _passage.title>>
<</for>><<focwidget 'activitycard'>>
<<set _dom = setup.DOM.Card.activity($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'activitycardkey'>>
<<activitycard $activityinstance[$args[0]] $args[1]>>
<</focwidget>><!-- 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 _dom = setup.DOM.Card.banter($args[0])>>
<<attach _dom>>
<</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'>>
<<set _dom = setup.DOM.Card.bedchamber($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'bedchambercardkey'>>
<<bedchambercard $bedchamber[$args[0]] $args[1]>>
<</focwidget>><<focwidget "buildingcard">>
<<set _dom = setup.DOM.Card.buildinginstance($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "buildingcardcompact">>
<<set _dom = setup.DOM.Card.buildinginstancecompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "buildingcardkey">>
<<buildingcard $buildinginstance[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget "buildingtemplatecard">>
<<set _dom = setup.DOM.Card.buildingtemplate($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "buildingtemplatecardcompact">>
<<set _dom = setup.DOM.Card.buildingtemplatecompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "buildingtemplatecardkey">>
<<buildingtemplatecard setup.buildingtemplate[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'companycard'>>
<<set _dom = setup.DOM.Card.company($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'companycardcompact'>>
<<set _dom = setup.DOM.Card.companycompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'companycardkey'>>
<<companycard $company[$args[0]] $args[1]>>
<</focwidget>><<focwidget contactcard>>
<<set _dom = setup.DOM.Card.contact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget contactcardcompact>>
<<set _dom = setup.DOM.Card.contactcompact($args[0], $args[1])>>
<<attach _dom>>
<</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 "requirementcard">>
<<set _dom = setup.DOM.Card.restriction($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>><<focwidget "criteriacard">>
<<set _dom = setup.DOM.Card.criteria($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>><<focwidget 'dutycard'>>
<<set _dom = setup.DOM.Card.duty($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'dutycardcompact'>>
<<set _dom = setup.DOM.Card.dutycompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'dutycardkey'>>
<<dutycard $duty[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'equipmentcard'>>
<<set _dom = setup.DOM.Card.equipment($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'equipmentcardcompact'>>
<<set _dom = setup.DOM.Card.equipmentcompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'equipmentcardkey'>>
<<equipmentcard setup.equipment[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget 'equipmentsetcard'>>
<<set _dom = setup.DOM.Card.equipmentset($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'equipmentsetcardcompact'>>
<<set _dom = setup.DOM.Card.equipmentsetcompact($args[0], $args[1])>>
<<attach _dom>>
<</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">>
<<set _dom = setup.FilterHelper.loadItemsFast($args[1], $args[2], $args.payload)>>
<<attach _dom>>
<</filterable>>
<<if _widgetshown != $args[1].length>>
<<set _class = 'lightgraytext filterwidgethidden' + $args[0]>>
<div @class='_class'>
</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/>
When a unit and their best friend / rival are both slavers,
then they will gain 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.
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 'tooltipunitstatus'>>
<<set _dom = setup.DOM.Card.tooltipunitstatus($unit[$args[0]])>>
<<attach _dom>>
<</focwidget>><<focwidget 'loadimage'>>
<<set _dom = setup.DOM.Util.Image.load({image_name: $args[0].getImage()})>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'loadimagecredits'>>
<<set _dom = setup.DOM.Util.Image.credits($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'questimage'>>
<<set _dom = setup.DOM.Util.Image.contentimage($args[0])>>
<<attach _dom>>
<</focwidget>><<focwidget 'injurycard'>>
<<set _dom = setup.DOM.Card.injury($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'injurycardkey'>>
<<injurycard $unit[$args[0]]>>
<</focwidget>><<set _dom = setup.renderDescription($gInteractionInstance, $gInteractionInstance.getInteraction().getPassage())>>
<<attach _dom>>
<<run $gInteractionInstance.applyRewards()>>
<br/>
<<questauthorcard $gInteractionInstance.getInteraction()>>
<<set $gPassage = $gInteractionReturnPassage>>
<<set $gMenuVisible = false>>
<div>
<<focmove 'Continue' $gInteractionReturnPassage>>
</div>
<<run setup.DOM.Nav.topLeftNavigation(
setup.DOM.Nav.link(
'Continue [space]',
() => {},
$gInteractionReturnPassage,
)
)>><<focwidget "itemcardcompact">>
<<set _dom = setup.DOM.Card.itemcompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "itemcard">>
<<set _dom = setup.DOM.Card.item($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "itemcardkey">>
<<itemcard setup.item[$args[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 "lorecardcompact">>
<<set _dom = setup.DOM.Card.lorecompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "lorecard">>
<<set _dom = setup.DOM.Card.lore($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'lorecardkey'>>
<<lorecard setup.lore[$args[0]] $args[1]>>
<</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 "notificationscard">>
<<set _dom = setup.DOM.Card.notifications($args[0])>>
<<attach _dom>>
<</focwidget>><<focwidget "opportunitycard">>
<<set _dom = setup.DOM.Card.opportunity($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "opportunitycardkey">>
<<opportunitycard $opportunityinstance[$args[0]] $args[1]>>
<</focwidget>><<focwidget "partycard">>
<<set _dom = setup.DOM.Card.party($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "partycardcompact">>
<<set _dom = setup.DOM.Card.partycompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "partycardkey">>
<<partycard $party[$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().name>>
<<questauthorcardtext _template.getAuthor()>>
<</if>>
<</focwidget>><<focwidget "questvarload">>
<<run setup.DOM.Helper.loadQuestVars($args[0])>>
<</focwidget>><<focwidget "roominstancecard">>
<<set _dom = setup.DOM.Card.roominstance($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "roominstancecardkey">>
<<roominstancecard $roominstance[$args[0]] $args[1]>>
<</focwidget>>
<<focwidget "roomtemplatecard">>
<<set _dom = setup.DOM.Card.roomtemplate($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "roomtemplatecardkey">>
<<roomtemplatecard setup.roomtemplate[$args[0]] $args[1]>>
<</focwidget>><<focwidget "sexactioncard">>
<<set _dom = setup.DOM.Card.sexaction($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "sexactioncardcompact">>
<<set _dom = setup.DOM.Card.sexactioncompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>><<focwidget 'tooltipskill'>>
<<set _skill = setup.skill[$args[0]]>>
<<set _dom = setup.DOM.Card.skill(_skill)>>
<<attach _dom>>
<</focwidget>><<focwidget 'slaveordercard'>>
<<set _dom = setup.DOM.Card.slaveorder($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'slaveordercardcompact'>>
<<set _dom = setup.DOM.Card.slaveordercompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'slaveordercardkey'>>
<<slaveordercard $slaveorder[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'tagcard'>>
<span class='tagcard'><<= $args[0]>></span>
<</focwidget>><<focwidget "teamcard">>
<<set _dom = setup.DOM.Card.team($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "teamcardcompact">>
<<set _dom = setup.DOM.Card.teamcompact($args[0], $args[1])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "teamcardkey">>
<<teamcard $team[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'titlecard'>>
<<set _dom = setup.DOM.Card.title($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'titlecardkey'>>
<<titlecard setup.title[$args[0]] $args[1]>>
<</focwidget>><<focwidget 'tooltiptrait'>>
<<set _trait = setup.trait[$args[0]]>>
<<set _dom = setup.DOM.Card.trait(_trait)>>
<<attach _dom>>
<</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 'unitactioncard'>>
<<set _dom = setup.DOM.Card.unitaction($args[0], $args[1], $args[2])>>
<<attach _dom>>
<</focwidget>>
<<focwidget 'unitactioncardcompact'>>
<<set _dom = setup.DOM.Card.unitactioncompact($args[0], $args[1], $args[2])>>
<<attach _dom>>
<</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]>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'unitaction',
filter_objects: _tofilter,
display_callback: unitaction => {
if ($menufilter.get('unitaction', 'display') == 'compact') {
return setup.DOM.Card.unitactioncompact(unitaction, $args[1]);
} else {
return setup.DOM.Card.unitaction(unitaction, $args[1]);
}
},
})>>
<<attach _dom>>
<</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 _dom = setup.DOM.Menu.unitdescription($args[0])>>
<<attach _dom>>
<</focwidget>>/* Not moved to DOM, because only used in content creator tooltips */
<<focwidget "unitpoolcard">>
<<set _unitpool = $args[0]>>
<<capture _unitpool>>
<div class='companycard'>
<<nameof _unitpool>>
<<set _stats = _unitpool.computeStatistics()>>
<span class='toprightspan'>
<div>Unit value: <<money _stats.min>> - <<money _stats.max>> (avg <<money _stats.mean>>)</div>
</span>
<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>>
/* Not moved to DOM, because only used in content creator tooltips */
<<focwidget "unitpoolcardkey">>
<<unitpoolcard setup.unitpool[$args[0]]>>
<</focwidget>>
/* Not moved to DOM, because only used in content creator tooltips */
<<focwidget "unitgroupcard">>
<<set _unitgroup = $args[0]>>
<<capture _unitgroup>>
<div class='marketobjectcard'>
<<nameof _unitgroup>>
<<set _stats = _unitgroup.computeStatistics()>>
<span class='toprightspan'>
<div>Unit value: <<money _stats.min>> - <<money _stats.max>> (avg <<money _stats.mean>>)</div>
<div>Reuse chance: <<= _unitgroup.reuse_chance>></div>
</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>>
/* Not moved to DOM, because only used in content creator tooltips */
<<focwidget "unitgroupcardkey">>
<<unitgroupcard setup.unitgroup[$args[0]]>>
<</focwidget>><<focwidget 'tooltipunit'>>
<<set _unit = $unit[$args[0]]>>
<<if _unit>>
<<unitcard _unit>>
<<else>>
Invalid unit
<</if>>
<</focwidget>><<focwidget "includereplace">>
<<set _dom = setup.DOM.Util.include_replace($args[0])>>
<<attach _dom>>
<</focwidget>>
<<focwidget "unitcardkey">>
<<unitcard $unit[$args[0]] $args[1]>>
<</focwidget>><div>
<<focmove 'List of Quests' 'WikiQuest'>>
</div>
<div>
<<focmove 'List of Opportunities' 'WikiOpportunity'>>
</div>
<div>
<<focmove 'List of Events' 'WikiEvent'>>
</div>
<div>
<<focmove 'List of Interactions' 'WikiInteraction'>>
</div>
<div>
<<focmove 'List of Activities' 'WikiActivityTemplate'>>
</div>
<div>
<<focmove 'List of Traits' 'WikiTrait'>>
</div>
<div>
<<focmove 'List of Items and Furniture' 'WikiItem'>>
</div>
<div>
<<focmove 'List of Equipments' 'WikiEquipment'>>
</div>
<div>
<<focmove 'List of Buildings' 'WikiBuilding'>>
</div>
<div>
<<focmove 'List of Rooms' 'WikiRoom'>>
</div>
<div>
<<focmove 'List of Sex Actions' 'WikiSexAction'>>
</div>
<div>
<<focmove 'List of Companies' 'WikiCompany'>>
</div>
<div>
<<focmove 'List of Lore' 'WikiLore'>>
</div>
<div>
<<focmove 'List of Duties' 'WikiDuty'>>
</div>
<div>
<<focmove 'List of Living' 'WikiLiving'>>
</div>
<div>
<<focmove 'List of Titles' 'WikiTitle'>>
</div><<run _dom = setup.DOM.Util.filterAll({
menu: 'activitytemplate',
filter_objects: Object.values(setup.activitytemplate),
display_callback: template => {
return setup.DOM.Card.activitytemplate(template);
},
})>>
<<attach _dom>><<set _forfilter = Object.values(setup.buildingtemplate)>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'buildingtemplate',
filter_objects: _forfilter,
display_callback: buildingtemplate => {
if ($menufilter.get('buildingtemplate', 'display') == 'compact') {
return setup.DOM.Card.buildingtemplatecompact(buildingtemplate, true);
} else {
return setup.DOM.Card.buildingtemplate(buildingtemplate, true);
}
},
})>>
<<attach _dom>>
</div><<set _companies = Object.values($company)>>
<<filterall 'company' _companies>>
<<if $menufilter.get('company', 'display') == 'compact'>>
<<companycardcompact _displayobj 1>>
<<else>>
<<companycard _displayobj 1>>
<</if>>
<</filterall>><<set _forfilter = Object.values(setup.dutytemplate)>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'dutytemplate',
filter_objects: _forfilter,
display_callback: duty_template => {
return setup.DutyTemplate.getTypeRep(duty_template.getType()) + duty_template.getName() + " (key: '" + duty_template.key + "')";
},
})>>
<<attach _dom>>
</div><<set _display = Object.values(setup.equipment)>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'equipment',
filter_objects: _display,
display_objects: _display,
display_callback: equipment_obj => {
if ($menufilter.get('equipment', 'display') == 'compact') {
return setup.DOM.Card.equipmentcompact(equipment_obj, true);
} else {
return setup.DOM.Card.equipment(equipment_obj, true);
}
},
})>>
<<attach _dom>><<run _dom = setup.DOM.Util.filterAll({
menu: 'event',
filter_objects: Object.values(setup.event),
display_callback: event => {
return setup.DOM.Card.event(event);
},
})>>
<<attach _dom>><<run _dom = setup.DOM.Util.filterAll({
menu: 'interaction',
filter_objects: Object.values(setup.interaction),
display_callback: interaction => {
return setup.DOM.Card.interaction(interaction);
},
})>>
<<attach _dom>><<set _display = Object.values(setup.item).map(item => {return {item: item, quantity: 1}})>>
<<set _forfilter = _display.map(a => a.item)>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'item',
filter_objects: _forfilter,
display_objects: _display,
display_callback: item_obj => {
if ($menufilter.get('item', 'display') == 'compact') {
return setup.DOM.Card.itemcompact(item_obj.item, true);
} else {
return setup.DOM.Card.item(item_obj.item, true);
}
},
})>>
<<attach _dom>><<set _forfilter = Object.values(setup.living)>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'living',
filter_objects: _forfilter,
display_callback: living => {
return setup.DOM.Card.living(living);
},
})>>
<<attach _dom>>
</div><<set _forfilter = Object.values(setup.lore)>>
<<filterall 'lore' _forfilter>>
<<if $menufilter.get('lore', 'display') == 'compact'>>
<<lorecardcompact _displayobj 1>>
<<else>>
<<lorecard _displayobj 1>>
<</if>>
<</filterall>><<run _dom = setup.DOM.Util.filterAll({
menu: 'opportunitytemplate',
filter_objects: Object.values(setup.opportunitytemplate),
display_callback: opportunity_template => {
return setup.DOM.Card.opportunitytemplate(opportunity_template);
},
})>>
<<attach _dom>><<run _dom = setup.DOM.Util.filterAll({
menu: 'questtemplate',
filter_objects: Object.values(setup.questtemplate),
display_callback: quest_template => {
return setup.DOM.Card.questtemplate(quest_template);
},
})>>
<<attach _dom>><<set _forfilter = Object.values(setup.roomtemplate)>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'roomtemplate',
filter_objects: _forfilter,
display_callback: roomtemplate => {
if ($menufilter.get('roomtemplate', 'display') == 'compact') {
return setup.DOM.Card.roomtemplatecompact(roomtemplate, true);
} else {
return setup.DOM.Card.roomtemplate(roomtemplate, true);
}
},
})>>
<<attach _dom>>
</div><<set _forfilter = setup.sexaction.filter(action => action.desc())>>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'sexaction',
filter_objects: _forfilter,
display_callback: sexaction => {
if ($menufilter.get('sexaction', 'display') == 'compact') {
return setup.DOM.Card.sexactioncompact(sexaction, true);
} else {
return setup.DOM.Card.sexaction(sexaction, true);
}
},
})>>
<<attach _dom>><<set _forfilter = Object.values(setup.title)>>
<div>
<<run _dom = setup.DOM.Util.filterAll({
menu: 'title',
filter_objects: _forfilter,
display_callback: title => {
return title.rep()
},
})>>
<<attach _dom>>
</div><<set _forfilter = Object.values(setup.trait)>>
<<set _dom = setup.DOM.Util.filterAll({
menu: 'trait',
filter_objects: _forfilter,
style_override: "display: grid; grid-template-columns: repeat(auto-fill, minmax(34px, 1fr))",
display_callback: (trait) => {
return trait.rep();
},
})>>
<<attach _dom>>