Started working on generic training
Started working on Azazel's fertility training Added Azazel's corruption dialogues Added Demon Azazel's speech modifier
This commit is contained in:
parent
18261c35d8
commit
dfd6a9ec54
|
@ -85,3 +85,7 @@ static func modifyDictStates(flagName: String, stateKey: String, stateValue):
|
|||
var states = GM.main.getModuleFlag("IssixModule", flagName, {})
|
||||
states[stateKey] = stateValue
|
||||
GM.main.setModuleFlag("IssixModule", flagName, states.duplicate(true))
|
||||
|
||||
# Add Issix's mood'
|
||||
static func addIssixMood(mood: int):
|
||||
GM.main.setModuleFlag("IssixModule", "Issix_Mood", clamp(GM.main.getModuleFlag("IssixModule", "Issix_Mood", 50)+mood, 0, 100))
|
||||
|
|
|
@ -160,7 +160,8 @@ func _init():
|
|||
"res://Modules/IssixModule/Scenes/AzazelCorruption/DemonLamiaTalkScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/AzazelCorruption/FountainScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/AzazelCorruption/FinalIssixDrugScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/RescueFromFightScene.gd"
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/RescueFromFightScene.gd",
|
||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/GenericTrainSessionScene.gd", "res://Modules/IssixModule/Scenes/SlaveryFirst/WalkiesTrainingScene.gd"
|
||||
]
|
||||
|
||||
characters = [
|
||||
|
@ -217,6 +218,7 @@ func _init():
|
|||
"res://Modules/IssixModule/SpeechModifiers/CatnipSpeech.gd",
|
||||
"res://Modules/IssixModule/SpeechModifiers/LamiaMute.gd",
|
||||
"res://Modules/IssixModule/SpeechModifiers/PetTalk.gd",
|
||||
"res://Modules/IssixModule/SpeechModifiers/AzazelDemon.gd",
|
||||
]
|
||||
|
||||
GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/")
|
||||
|
|
|
@ -28,7 +28,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("He baps you on the nose while giving you a cheerful laugh.")
|
||||
saynn("[say=pc]Mysterious, aren't we?[/say]")
|
||||
saynn("[say=azazel]It's gonna be fun, I promise.[/say]")
|
||||
addButton("Go", "Go with the feline to their cell (heavy drug use, pet play, domination, body modification)", "tocell")
|
||||
addButton("Go", "Go with the feline to their cell (drug use, pet play, domination)", "tocell")
|
||||
addButton("Don't go", "Refuse feline", "dontgo")
|
||||
|
||||
if state == "dontgo":
|
||||
|
@ -36,7 +36,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("[say=azazel]But- But I already prepared and...[/say]")
|
||||
saynn("[say=pc]Sorry.[/say]")
|
||||
saynn("Azazel pleads with you")
|
||||
saynn("[say=azazel]All I wanted is to make you feel good, and show you fun side of being a pet. I wish you could have given me a chance, did I do something wrong? I.. Don't understand. Pleeeasseeee.[/say]")
|
||||
saynn("[say=azazel]All I wanted is to make you [pulse color=#ac1eff height=0.9 freq=0.6]feel good[/pulse], and show you fun side of [pulse color=#ac1eff height=0.9 freq=0.6]being a pet[/pulse]. I wish you could have given me a chance, did I do something wrong? I.. Don't understand. Pleeeasseeee.[/say]")
|
||||
addButton("Go", "Agree to go with the feline to their cell (heavy drug use, pet play, domination)", "tocell")
|
||||
addButton("Don't go", "Refuse feline again (this marks the end of Azazel's individual scenes)", "endthescene")
|
||||
|
||||
|
@ -45,9 +45,9 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("[say=azazel]Yay![/say]")
|
||||
saynn("Azazel is super excited, he jumps on you and instinctively you wrap your paws around him locking his small body in embrace where his head is on your own head level. He gives you a small kiss this way and jumps off you.")
|
||||
saynn("[say=azazel]But first![/say]")
|
||||
saynn("He pretends to pull something out of his... Underwear. He reaches with his paw around your neck and makes a clicking sound, is he pretending he just clipped a leash onto your collar?")
|
||||
saynn("He pretends to pull something out of his... Underwear. He reaches with his paw around your neck and makes a clicking sound, is he pretending he just clipped a [pulse color=#ac1eff height=0.9 freq=0.6]leash[/pulse] onto your collar?")
|
||||
saynn("[say=azazel]Now we can go![/say]")
|
||||
saynn("His paw is made into a fist, as if he was clutching the other end of the leash as he slowly starts walking towards the cell blocks while looking at you ocassionally. You decide to play along and pretend his leash tugs on your neck making sudden gesture of getting dragged behind smaller feline. When Azazel sees it he laughs and continues.")
|
||||
saynn("His paw is made into a fist, as if he was clutching the other end of the leash as he slowly starts walking towards the cell blocks while looking at you ocassionally. You decide to play along and pretend his leash tugs on your neck making sudden gesture of getting dragged behind smaller feline. When Azazel sees it he laughs and continues walking.")
|
||||
addButton("Walk", "Walk towards the cell", "walktocell")
|
||||
|
||||
if state == "walktocell":
|
||||
|
@ -58,10 +58,10 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("[say=azazel]Lay in bed for me, will you? Pretty face up, I want to see it.[/say]")
|
||||
saynn("[say=pc]Will you have to leave soon today as well?[/say]")
|
||||
saynn("Mischievous grin shows up on the face of feline, his tail standing high.")
|
||||
saynn("[say=azazel]Somewhat, somewhat not. Hehe, I'm sure you'll have enough of me by the end.[/say]")
|
||||
saynn("[say=azazel]Somewhat, somewhat not. Hehe, I'm sure you'll [pulse color=#ac1eff height=0.9 freq=0.6]have enough of me[/pulse] by the end.[/say]")
|
||||
saynn("You wonder what kind of mysterious plans does Azazel have in mind with being so cryptic about kind of fun he wants you to participate in. You only have assumption that it will be horny considering his past repertoire.")
|
||||
if !Globals.isPlayerSuperNaked():
|
||||
saynn("[say=azazel]For what I want to do with you today you'd feel best naked... Let me take care of this little problem.[/say]")
|
||||
saynn("[say=azazel]For what I want to do with you today you'd feel best [pulse color=#ac1eff height=0.9 freq=0.6]naked[/pulse]... Let me take care of this little problem.[/say]")
|
||||
addButton("Get undressed", "Let Azazel undress you", "undress")
|
||||
else:
|
||||
saynn("[say=azazel]Hehe, I don't even need to undress you! One thing less to do, lets get into mood then.[/say]")
|
||||
|
@ -77,17 +77,17 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
# Body description section
|
||||
saynn("Azazel looks at you from above, you laying on his bed comfortably naked.")
|
||||
if (GM.pc.isCoveredInCum() or GM.pc.isCoveredInGirlCum()) and GM.pc.isCoveredInPiss():
|
||||
saynn("[say=azazel]Haha, you are covered in all kinds of stuff. When did you last shower? Not that this bothers me, in fact, I prefer it when your "+Globals.getSkinWord()+" is sticky and smelly, I can be much dirtier than that![/say]")
|
||||
saynn("[say=azazel]Haha, you are covered in all kinds of stuff. When did you last shower? Not that this bothers me, in fact, I prefer it when your [pulse color=#ac1eff height=0.9 freq=0.6]"+Globals.getSkinWord()+" is sticky and smelly[/pulse], I can be [pulse color=#ac1eff height=0.9 freq=0.6]much dirtier[/pulse] than that![/say]")
|
||||
saynn("[say=pc]Is that a challenge?[/say]")
|
||||
saynn("He smirks")
|
||||
saynn("[say=azazel]Who's to tell?[/say]")
|
||||
saynn("He says as he licks some of the fluids from your belly.")
|
||||
elif GM.pc.isCoveredInCum() or GM.pc.isCoveredInGirlCum():
|
||||
saynn("[say=azazel]Man man, your "+Globals.getSkinWord()+" is dripping with cum. That's hot![/say]")
|
||||
saynn("[say=azazel]Man man, [pulse color=#ac1eff height=0.9 freq=0.6]your "+Globals.getSkinWord()+" is dripping with cum[/pulse]. That's hot![/say]")
|
||||
elif GM.pc.isCoveredInPiss():
|
||||
saynn("[say=azazel]You smell like a wet dog that slept in an urinal, you know that? And that's exactly what I like! Just another reason why I think you'd fit so well in our little corner as another pet, we get our Master's mark daily.[/say]")
|
||||
saynn("[say=azazel]You smell like a wet dog that slept in an urinal, you know that? And that's exactly what I like! Just another reason why I think [pulse color=#ac1eff height=0.9 freq=0.6]you'd fit so well in our little corner as another pet, we get our Master's mark daily[/pulse].[/say]")
|
||||
else:
|
||||
saynn("[say=azazel]You are so clean, you know? Nothing wrong with that, though I do like when people I fuck with are covered with various fluids. I don't know, I think I just like mess and smell of it all.[/say]")
|
||||
saynn("[say=azazel]You are so clean, you know? Nothing wrong with that, though I do like when people I fuck with are [pulse color=#ac1eff height=0.9 freq=0.6]covered with various fluids[/pulse]. I don't know, I think I just like mess and smell of it all.[/say]")
|
||||
|
||||
if GM.pc.getThickness() >= 75: # Thick
|
||||
saynn("[say=azazel]"+GlobalRegistry.getCharacter("azazel").interestVerbalReaction(InterestTopic.ThickBody)+"[/say]")
|
||||
|
@ -140,7 +140,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
else:
|
||||
saynn("[say=azazel]Fun. Let me just get comfortable on top of you.[/say]")
|
||||
if GM.pc.hasReachableVagina() and GM.pc.hasReachablePenis():
|
||||
saynn("[say=azazel]Since you are such a versatile good {pc.boy} I'll give you a choice, would you want me to play with your {pc.penisSize} {pc.penis} or perhaps you'd want me to help keep your {pc.vagina} moisturized?[/say]")
|
||||
saynn("[say=azazel]Since you are such a versatile [pulse color=#ac1eff height=0.9 freq=0.6]good {pc.boy}[/pulse] I'll give you a choice, would you want me to play with your {pc.penisSize} {pc.penis} or perhaps you'd want me to help keep your {pc.vagina} moisturized?[/say]")
|
||||
addButton("Penis", "Let Azazel have fun with your penis", "foreplaypenis")
|
||||
addButton("Vagina", "Let Azazel have fun with your vagina", "foreplayvagina")
|
||||
elif GM.pc.hasReachablePenis():
|
||||
|
@ -202,13 +202,13 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("[say=pc]Do I have a choice?[/say]")
|
||||
saynn("[say=azazel]Nope! But please hold that for me for a second.[/say]")
|
||||
saynn("Smiling, he brings his two paw fingers near your mouth and opens it, then pushes the dildo right inside. Despite Azazel preferring things messy, it feels like this specific dildo has been cleaned as you don't feel anything taste wise. The dildo feels of a rather good quality, made of soft material that is pleasant to touch with your tongue. He holds the dildo inside of your mouth for a solid minute, making you unable to say anything other than some lustful moans.")
|
||||
saynn("[say=azazel]It's better warm, and this way it comes with lubrication already! Make sure to leave as much of your spit on it as possible. Aww, aren't you a useful pet?[/say]")
|
||||
saynn("After a minute he pulls the dildo out, almost immediately pushing the dildo back, this time however right into his own sensitive folds, you see how kitty's face expression changes really fast as he pushes the fuck stick deeper. He masturbates with it for a while, showing you intricate details of his pussy in between thrusts. Above his love tunnel a "+("a vividly glowing red womb tatoo displayed for you to see" if GlobalRegistry.getCharacter("azazel").isPregnant() else "dark red womb tattoo proudly displayed for you to see")+".")
|
||||
saynn("[say=azazel]It's better warm, and this way it comes with lubrication already! Make sure to leave as much of your spit on it as possible. Aww, aren't you a [pulse color=#ac1eff height=0.9 freq=0.6]useful pet[/pulse]?[/say]")
|
||||
saynn("After a minute he pulls the dildo out, almost immediately pushing the dildo back, this time however right into his own sensitive folds, you see how kitty's face expression changes really fast as he pushes the fuck stick deeper. He masturbates with it for a while, showing you intricate details of his pussy in between thrusts. Above his love tunnel a "+("a vividly glowing red womb tattoo displayed for you to see" if GlobalRegistry.getCharacter("azazel").isPregnant() else "dark red womb tattoo proudly displayed for you to see")+".")
|
||||
|
||||
saynn("[say=azazel]Ahhhh, I hope you enjoy the view. Haaaaaah. It's... Quite a fun experience for me especially. Ahhhh. I'm... I'm gonna cum. Mmmmmmm.[/say]")
|
||||
|
||||
saynn("Shortly after saying that, he did. Covering your body with ample amount of his {azazel.girlcum}.")
|
||||
saynn("[say=azazel]Huff. Good pet, I hope you enjoyed the show.[/say]")
|
||||
saynn("[say=azazel]Huff. [pulse color=#ac1eff height=0.9 freq=0.6]Good pet[/pulse], I hope you enjoyed the show.[/say]")
|
||||
saynn("[say=pc]Yeah... But I wish I could have gotten a chunk of the pie as well..[/say]")
|
||||
saynn("[say=azazel]Nothing to worry about, I got you covered. Let's get to the main dish.[/say]")
|
||||
saynn("His mischevious grin widens, he has something prepared.")
|
||||
|
@ -224,7 +224,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("[say=azazel]Hehe. So, you may remember I've been on the lookout for this thing for ages. Recently came into possession of one. REALLY COOL ISN'T IT?![/say]")
|
||||
saynn("He feels so excited, to the point of screaming out the last sentence.")
|
||||
saynn("[say=pc]I guess?[/say]")
|
||||
saynn("[say=azazel]Hehe, you don't get it, [b]yet[/b]. You know, gas mask can be used in the right way, to filter out the air. Could be useful for that really cool gas some of the guards have that make you go all needy and horny. But I don't want to keep the gases [i]out[/i]. I want to keep them [i]in[/i].[/say]")
|
||||
saynn("[say=azazel]Hehe, you don't get it, [b]yet[/b]. You know, gas mask can be used in the right way, to filter out the air. Could be useful for that really cool gas some of the guards have that make you go all [pulse color=#ac1eff height=0.9 freq=0.6]needy and horny[/pulse]. But I don't want to keep the gases [i]out[/i]. I want to keep them [i]in[/i].[/say]")
|
||||
saynn("You begin to be a little worried at what Azazel might be implying here. Is he into some hardcore stuff? Maybe breath play?")
|
||||
saynn("[say=azazel]I got you all worked up, didn't I? You poor thing. But I want to help you out, you just have to let me. You see, I got my paws on something really cool, and by that I mean I begged my Master to let me have it, he knows I love this kind of stuff. It's a [color=red]red[/color] beauty.[/say]")
|
||||
if getModuleFlag("TaviModule", "ch2PCStoleDrugs", false):
|
||||
|
@ -232,7 +232,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
else:
|
||||
saynn("He shows you a vial of something red, it swirls inside the vial. You are unsure what this might be.")
|
||||
|
||||
saynn("[say=azazel]With anything this untested and unknown, I like to experiment by myself. So not to worry my Master, I've sniffed just minuscule amount of this, and it was powerful even at micro doses. It gives you a „hit”. It's really good. [/say]")
|
||||
saynn("[say=azazel]With anything this untested and unknown, I like to experiment by myself. So not to worry my Master, I've sniffed just minuscule amount of this, and it was powerful even at micro doses. It gives you a [pulse color=#ac1eff height=0.9 freq=0.6]„hit”[/pulse]. It's really good. [/say]")
|
||||
if getModuleFlag("TaviModule", "ch2DrugsAgreedToTest", false):
|
||||
saynn("[say=pc]I know, I stole some of it from medical some other day and when asked to try it knocked me out good.[/say]")
|
||||
saynn("[say=azazel]Oh? Wow, you have experience, I didn't expect. How was it?[/say]")
|
||||
|
@ -245,10 +245,10 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
saynn("He shows you a round object with one side being flat along with some small holes and the other make a funnel shape.")
|
||||
saynn("[say=azazel]This thing attaches to the gasmask. It's supposed to filter the air and it will do just that but... I'll change the filter a bit.[/say]")
|
||||
saynn("He opens the part, it's empty inside. He picks up a jockstrap and the vial, opens the vial while stopping to breathe, sticks it to the cloth and turns it upside down so the cloth soaks a little with the liquid, while quickly stopping the process and closing the vial, he puts the soaked jockstrap into the filtering part of the gas masks and closes it tight, all on one breath being very careful not to breathe any fumes in, even trying to spread the air around a little so a large amount of fumes doesn't linger in a single place.")
|
||||
saynn("[say=azazel]Yay! Our toy is now armed. Jockstrap is Master's, I yoinked it before Hiisi went out with the laundry, it smells really good.[/say]")
|
||||
saynn("[say=azazel]Yay! [pulse color=#ac1eff height=0.9 freq=0.6]Our toy[/pulse] is now armed. [pulse color=#ac1eff height=0.9 freq=0.6]Jockstrap is Master's[/pulse], I yoinked it before Hiisi went out with the laundry, it [pulse color=#ac1eff height=0.9 freq=0.6]smells really good[/pulse].[/say]")
|
||||
|
||||
saynn("Azazel is incredibly happy while holding the gas mask. He presents it to you.")
|
||||
saynn("[say=azazel]Now, I don't want anything bad to happen to you, I'll be here, watching you okey? I'll put it on your pretty face, watch you and I'll take it off right after. I'll try not to huff it myself just so I can watch over you, won't be easy considering how good it will be, think I'll keep it for later, maybe at night... Or maybe you could watch over me hehe. Anyways, are you ready?[/say]")
|
||||
saynn("[say=azazel]Now, I don't want anything bad to happen to you, I'll be here, watching you okey? I'll put it on your pretty face, watch you and I'll take it off right after. I'll try not to [pulse color=#ac1eff height=0.9 freq=0.6]huff it[/pulse] myself just so I can watch over you, won't be easy considering how good it will be, think I'll keep it for later, maybe at night... Or maybe you could watch over me hehe. Anyways, are you ready?[/say]")
|
||||
addButton("Yes!", "Beg Azazel to put on the gas mask on you and give you release", "eagermask")
|
||||
addDisabledButton("Reconsider", "Ask Azazel not to put on the mask, at this point you are too far gone, Azazel got you good with his denial")
|
||||
|
||||
|
@ -257,15 +257,15 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
|
||||
saynn("[say=azazel]Hihi, here it is then![/say]")
|
||||
saynn("Azazel comes onto you again, his elbows on sides next to your neck and he covers your face with the gas mask, his paws fiddle with the device securing it with a strap behind your face.")
|
||||
saynn("[say=azazel]Does it feel tight? Is it sealed around your face?[/say]")
|
||||
saynn("[say=azazel]Does it feel tight? Is it [pulse color=#ac1eff height=0.9 freq=0.6]sealed around your face[/pulse]?[/say]")
|
||||
if getModuleFlag("IssixModule", "Azazel_Corr_BDSM_Gear", false):
|
||||
saynn("You nod, as much as your restraints you have on you allow you to.")
|
||||
else:
|
||||
saynn("You nod.")
|
||||
|
||||
saynn("[say=azazel]Goood. Now take some very deep breaths for me "+Globals.getPlayerPetName()+"! Deeeep breeaaaatthhhssss.[/say]")
|
||||
saynn("[say=azazel]Goood. Now take some [pulse color=#ac1eff height=0.9 freq=0.6]very deep breaths for me[/pulse] "+Globals.getPlayerPetName()+"! Deeeep breeaaaatthhhssss.[/say]")
|
||||
|
||||
saynn("As you take breaths you smell musty, warm, AROUSING smell, the time slows down.")
|
||||
saynn("As you take breaths you smell [pulse color=#ac1eff height=0.9 freq=0.6]musty, warm, AROUSING smell[/pulse], the time slows down.")
|
||||
if getModuleFlag("TaviModule", "ch2DrugsAgreedToTest", false):
|
||||
saynn("It's different to when you last tried it.")
|
||||
|
||||
|
@ -285,7 +285,7 @@ func _run(): # TODO Those corruption scenes don't really work when player is bl
|
|||
if GM.main.originalPC.isHeavilyPregnant():
|
||||
saynn("You have a strange feeling like you are missing something important, your body doesn't feel so bloated anymore.")
|
||||
saynn("You open your eyes, confused. You don't remember much, everything is... Fuzzy, you don't really remember what you were doing before you woke up. Your eyes see whiteness surrounding you bright light at the ceiling, and you are laying on your back, underneath you a hard cold floor.")
|
||||
saynn("You smell waft of something powerful from somewhere, the air feels stale, musty, it's a mix of pheromones, wet carpet, a tinge of sulfur.")
|
||||
saynn("You smell waft of something powerful from somewhere, the air feels stale, musty, it's a mix of [pulse color=#ac1eff height=0.9 freq=0.6]pheromones[/pulse], wet carpet, a tinge of sulfur.")
|
||||
saynn("[say=pc]What the fuck? Where-[/say]")
|
||||
saynn("You feel weak, tired, out of energy, but laying in here, won't give you answers.")
|
||||
addButton("Stand up", "Stand up", "endthescene")
|
||||
|
|
|
@ -18,7 +18,7 @@ func _run():
|
|||
addDisabledButton("Check", "Seriously, stop.")
|
||||
addButton("Leave", "Leave the fountain alone", "endthescene")
|
||||
|
||||
if state == "checkthepillar":
|
||||
if state == "checkthepillar": # TODO Make sure the font is properly working before the release
|
||||
saynn("You decide to come closer to the pillar. It's ordained by numerous symbols, none of which you understand.")
|
||||
sayn("[color=#ac1eff]ᚺᛖᚱ ᛚᛁᛈᛋ ᛒᛖᚷᚨᚾ ᛏᛟ ᛋᚲᛟᚱᚲᚺ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛏᚺᚨᛏ ᛃᚢᛁᚲᛖ ᚹᚨᛋ ᚹᛟᚱᛗᚹᛟᛟᛞ ᛏᛟ ᚺᛖᚱ ᛏᛟᚾᚷᚢᛖ,[/color]")
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
extends SceneBase
|
||||
|
||||
var levels = {1: ["Walkies", "Learn how to walk like a proper pet", "walkies_training"],
|
||||
2: ["Bowl", "Learn how to eat like a proper pet", "bowl_training"],
|
||||
3: ["Commands", "Learn how to listen to your Master's commands", "command_training"],
|
||||
4: ["Speech", "Learn how to speak like a pet", "speech_training"],
|
||||
5: ["Name", "Learn your new name", "name_training"]}
|
||||
|
||||
var hasBorrowedMuzzle = false # TODO Add save
|
||||
var hasBorrowedMittens = false
|
||||
var goodPoints = 0
|
||||
const Globals = preload("res://Modules/IssixModule/Globals.gd")
|
||||
|
||||
func _init():
|
||||
sceneID = "IssixGenericTrainSession"
|
||||
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
|
||||
saynn("[say=issix]My dear pet would like to train a little? That's good. Good pets want to be the best pets for their owners.[/say]")
|
||||
saynn("[say=issix]Hmm, what was the last thing I trained you?[/say]")
|
||||
createButtons()
|
||||
|
||||
if state == "walkies_training":
|
||||
playAnimation(StageScene.Duo, "stand", {pc="issix", npc="pc", npcBodyState={naked=true, leashedBy="issix"}, npcAction="kneel"})
|
||||
saynn("[say=issix]Right, walkies! Of course. Humanoids walk on two legs while pets - on four. That's the way of the nature.[/say]")
|
||||
saynn("He pulls a leash out of his bag and crouches in front of you to attach it to your collar, which ends up making clasp sound.")
|
||||
saynn("[say=issix]Here we go. Nice and secured now.[/say]")
|
||||
if GM.pc.isBlindfolded():
|
||||
saynn("[say=issix]Are you sure you want to do this blindfolded? More power to you, I guess.[/say]")
|
||||
addButton("Blindfold", "Take off your blindfold", "blindfold_takeoff")
|
||||
else:
|
||||
addButtonWithChecks("Blindfold", "Put on a blindfold", "blindfold_takeon", [], [[ButtonChecks.HasItemID, "blindfold"]])
|
||||
|
||||
if !GM.pc.getInventory().hasSlotEquipped(InventorySlot.Mouth):
|
||||
saynn("[say=issix]Now, I don't mind if you say no, but you'd look cuter if you said yes. Do you want me to muzzle you?[/say]")
|
||||
saynn("Your Master shows you a Basket Muzzle that he'd like you to wear.")
|
||||
addButton("Muzzle", "Say you want your muzzle on", "muzzle_attach")
|
||||
elif GM.pc.isMuzzled() and !hasBorrowedMuzzle:
|
||||
saynn("[say=issix]You come with your own Basket Muzzle? Dedicated.[/say]")
|
||||
addButton("Muzzle", "Say you want your muzzle off", "muzzle_detach")
|
||||
elif GM.pc.isMuzzled():
|
||||
saynn("[say=issix]Now your pretty face looks good behind that metal grid.[/say]")
|
||||
addButton("Muzzle", "Say you want your muzzle off", "muzzle_detach")
|
||||
else:
|
||||
saynn("[say=issix]Hmm, I'd rather you have a Basket Muzzle on you but that's fine as well. [/say]")
|
||||
|
||||
if GM.pc.hasBlockedHands() and !hasBorrowedMittens:
|
||||
saynn("[say=issix]As to your paw- oh. You already have your own mittens? That takes care of one thing. I do like it when my pets have proper wear for their walkies.[/say]")
|
||||
addButton("Mittens", "Remove mittens", "mittens_remove")
|
||||
elif GM.pc.hasBlockedHands():
|
||||
saynn("[say=issix]Yes, this is exactly what I meant, your {pc.feet} made useless.[/say]")
|
||||
addButton("Mittens", "Remove mittens", "mittens_remove")
|
||||
else:
|
||||
saynn("[say=issix]I think you'd look cuter and more helpless with bondage mittens, what do you think?[/say]")
|
||||
addButton("Mittens", "Get mittens", "mittens_add")
|
||||
|
||||
addButton("Ready", "Say you are ready to go", "walkies_ready")
|
||||
|
||||
if state == "walkies_ready":
|
||||
# Walkies will be to one of few generated locations, and can have a random person met on the way (or none), the restraints on the player can change the meeting scenes
|
||||
playAnimation(StageScene.PuppyDuo if shouldBeInHeavyBondage() else StageScene.Duo, "kneel", {pc="pc", npc="issix", bodyState={naked=true, leashedBy="issix"}, flipNPC=true})
|
||||
if shouldBeInHeavyBondage():
|
||||
saynn("[say=issix]Actually, lets get you into even more proper look, I think you are ready.[/say]")
|
||||
saynn("Issix pulls out a larger heavy gear, it consists of four large black pads which have metal plates on one end and holes on another. They are kept tight with a belt.")
|
||||
saynn("Issix guides you through process of putting all of those on.")
|
||||
saynn("[say=issix]Perfect! Now you look just the part. Don't worry if you struggle at first. It's normal.[/say]")
|
||||
|
||||
saynn("[say=issix]Now, just few ground rules "+Globals.getPlayerPetName()+", you walk behind me like a good pet does, keep focus on my walk, do not try to run somewhere, do not bite anyone"+(", not that you could." if GM.pc.isMuzzled() else ".")+" The way you behave reflects on your Master, so if you choose to be bratty I'll make sure this happens only once. Are we clear? Nod your head if you agreee.[/say]")
|
||||
saynn("You don't want to disobey your Master, you nod.")
|
||||
|
||||
addButton("Ready", "You are ready (once again)", "walkies_ready_final")
|
||||
|
||||
if state == "end_walkies":
|
||||
playAnimation(StageScene.PuppyDuo if shouldBeInHeavyBondage() else StageScene.Duo, "kneel", {pc="pc", npc="issix", npcAction="kneel", bodyState={naked=true, leashedBy="issix"}})
|
||||
|
||||
if goodPoints < 0:
|
||||
saynn("[say=issix]Your behavior on today's training session was awful. You are not getting any reward. Next time work harder![/say]")
|
||||
elif goodPoints == 0:
|
||||
saynn("[say=issix]Your behavior on today's training session was unsatisfying. You really should put more work into what makes a pet a pet next time.[/say]")
|
||||
else:
|
||||
saynn("[say=issix]Your behavior on today's training session was satisfactory. I'm glad you are learning more.[/say]")
|
||||
saynn("As a reward, you get headpats.")
|
||||
addButton("Back", "End today's training session", "endthescene")
|
||||
|
||||
|
||||
func shouldBeInHeavyBondage(): # TODO Skill rebalance
|
||||
return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 2 or GM.pc.getSkillsHolder().getSkill("Pet").getExperience() > 80
|
||||
|
||||
func createButtons():
|
||||
var trainingLevel = int(getModuleFlag("IssixModule", "PC_Training_Level", 0))
|
||||
for x in range(1, 5):
|
||||
if x <= trainingLevel:
|
||||
var buttonData = levels[x]
|
||||
addButton(buttonData[0], buttonData[1], buttonData[2])
|
||||
elif x > trainingLevel:
|
||||
var buttonData = levels[x]
|
||||
addDisabledButton(buttonData[0], buttonData[1]+" (you haven't unlocked this training yet)")
|
||||
break
|
||||
|
||||
func destroyBorrowedEquipment():
|
||||
if hasBorrowedMittens and GM.pc.hasBlockedHands():
|
||||
GM.pc.getInventory().removeItemFromSlot(InventorySlot.Hands)
|
||||
if hasBorrowedMuzzle and GM.pc.isMuzzled():
|
||||
GM.pc.getInventory().removeItemFromSlot(InventorySlot.Mouth)
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if _action == "blindfold_takeoff":
|
||||
if GM.pc.getInventory().getEquippedItem(InventorySlot.Eyes).isRestraint() and GM.pc.getInventory().getEquippedItem(InventorySlot.Eyes).getRestraintData().canBeEasilyRemovedByDom():
|
||||
GM.pc.getInventory().unequipSlot(InventorySlot.Eyes)
|
||||
addMessage("You've struggled out of the blindfold")
|
||||
else:
|
||||
addMessage("You've tried to struggle out of the blindfold but failed")
|
||||
|
||||
if _action == "blindfold_takeon":
|
||||
GM.pc.getInventory().forceEquipByStoreOtherUnlessRestraint(GM.pc.getInventory().getFirstOf("blindfold"), "issix")
|
||||
|
||||
if _action == "muzzle_attach":
|
||||
GM.pc.getInventory().forceEquipByStoreOther(GlobalRegistry.createItem("basketmuzzle"), "issix")
|
||||
hasBorrowedMuzzle = true
|
||||
|
||||
if _action == "muzzle_detach":
|
||||
if GM.pc.getInventory().getEquippedItem(InventorySlot.Mouth).isRestraint() and GM.pc.getInventory().getEquippedItem(InventorySlot.Mouth).getRestraintData().canBeEasilyRemovedByDom():
|
||||
if hasBorrowedMuzzle:
|
||||
GM.pc.getInventory().removeItemFromSlot(InventorySlot.Mouth)
|
||||
hasBorrowedMuzzle = false
|
||||
else:
|
||||
GM.pc.getInventory().unequipSlot(InventorySlot.Mouth)
|
||||
addMessage("You've struggled out of the muzzle")
|
||||
else:
|
||||
addMessage("You've tried to struggle out of the muzzle but failed")
|
||||
|
||||
if _action == "mittens_add":
|
||||
GM.pc.getInventory().forceEquipByStoreOther(GlobalRegistry.createItem("bondagemittens"), "issix")
|
||||
hasBorrowedMittens = true
|
||||
|
||||
if _action == "mittens_remove":
|
||||
if GM.pc.getInventory().getEquippedItem(InventorySlot.Hands).isRestraint() and GM.pc.getInventory().getEquippedItem(InventorySlot.Hands).getRestraintData().canBeEasilyRemovedByDom():
|
||||
if hasBorrowedMittens:
|
||||
GM.pc.getInventory().removeItemFromSlot(InventorySlot.Hands)
|
||||
hasBorrowedMittens = false
|
||||
else:
|
||||
GM.pc.getInventory().unequipSlot(InventorySlot.Hands)
|
||||
addMessage("You've struggled out of the Bondage Mittens")
|
||||
else:
|
||||
addMessage("You've tried to struggle out of the Bondage Mittens but failed")
|
||||
|
||||
if _action in ["blindfold_takeoff", "blindfold_takeon", "muzzle_attach", "muzzle_detach", "mittens_remove", "mittens_add"]:
|
||||
_action = "walkies_training"
|
||||
|
||||
if _action == "walkies_ready_final":
|
||||
runScene("WalkiesTrainingWithIssix", [], "walkies_end")
|
||||
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
||||
setState(_action)
|
||||
|
||||
func _react_scene_end(_tag, _result):
|
||||
if(_tag == "walkies_end"):
|
||||
destroyBorrowedEquipment()
|
||||
if _result:
|
||||
goodPoints = _result[0]
|
||||
if goodPoints > 2:
|
||||
Globals.addIssixMood(2)
|
||||
GM.pc.addSkillExperience("Pet", 5+int(max(goodPoints, 0)/2.0))
|
||||
addMessage("You've gained "+str(5+int(max(goodPoints, 0)/2.0))+ " experience points.")
|
||||
setState("end_walkies")
|
||||
else:
|
||||
GM.pc.addSkillExperience("Pet", 5)
|
||||
addMessage("You've gained 5 experience points. Also, something went wrong with programming :(")
|
||||
setState("end_walkies")
|
||||
|
|
@ -131,7 +131,7 @@ func _run():
|
|||
addButton("Leave", "Leave the fight scene", "endthescene")
|
||||
|
||||
if state == "infirmary":
|
||||
playAnimation(StageScene.Duo, "stand", {npc="eliza", npcAction="stand", bodyState={naked=true}})
|
||||
playAnimation(StageScene.Duo, "stand", {npc="eliza", npcAction="stand"})
|
||||
aimCameraAndSetLocName("med_lobbymain")
|
||||
addCharacter("eliza")
|
||||
|
||||
|
@ -152,12 +152,40 @@ func _run():
|
|||
|
||||
if state == "cryopodtreatment":
|
||||
playAnimation(StageScene.Cryopod, "idle", {bodyState={naked=true}})
|
||||
aimCameraAndSetLocName("med_researchlab")
|
||||
if getModuleFlag("MedicalModule", "Medical_FirstTimeHealedHappened"):
|
||||
saynn("You step after Eliza until you arrive at the lab, Eliza unclasps your leash and begins to tap on machines keyboard, preparing it for your session.")
|
||||
else: #TODO Expand?
|
||||
saynn("You eventually arrive in large sterile room with large amount of expensive equipment around. {eliza.She} unclasps your leash and begins to tap on machines keyboard, preparing it for your session.")
|
||||
addButton()
|
||||
saynn("You eventually arrive in large sterile room with large amount of expensive equipment around. {eliza.She} unclasps your leash and begins to tap on machines keyboard, preparing it for your session. You watch with amazement the huge machinery and advanced medical technology for healing, a large glass tube just existing there in size that you could definitely fit in.")
|
||||
|
||||
if !GM.pc.isFullyNaked():
|
||||
saynn("[say=eliza]Please strip down, you do not need clothes.[/say]")
|
||||
saynn("You strip down your clothes, the wound now all visible, it stings a bit and you bleed in non insignificant amounts.")
|
||||
|
||||
saynn("[say=eliza]Okey, it's ready, please step into the cryopod, put on the mask. I'll take care of the rest.[/say]")
|
||||
|
||||
saynn("You follow Eliza's instructions and soon you are surrounded by thick glass as the glass enclosure finally closes trapping you inside. The air you breathe through the mask feels clean, it lack that sterile smell that you've been sniffing just few seconds ago. You can hear muffled Elyze talking to you.")
|
||||
if getModuleFlag("MedicalModule", "Medical_FirstTimeHealedHappened"):
|
||||
saynn("[say=eliza]You know the drill by now. I'll be back when the cycle finishes.[/say]")
|
||||
else:
|
||||
saynn("[say=eliza]Okey, now just rest, don't worry about the liquid, keep the mask on and let the body recover, I'll be back when the cycle finishes.[/say]")
|
||||
|
||||
saynn("The pod fills to the brim with strange liqud until you are fully submerged and floating. Soon enough, your consciousness fades and you stop tracking what's happening.")
|
||||
|
||||
addButton("Continue", "", "cryopodend")
|
||||
|
||||
if state == "cryopodend":
|
||||
playAnimation(StageScene.Duo, "stand", {npc="eliza", npcAction="stand"})
|
||||
aimCameraAndSetLocName("med_nearlab")
|
||||
GM.pc.setLocation("med_nearlab")
|
||||
saynn("Eventually you become aware of the world around you again as the liquid that you were just submerged in drained away. You stood on your legs again, feeling your heavy body again, taking off the mask as the liquid was below your waist now. You can barely hear Eliza through your ears - still full of the liquid.")
|
||||
saynn("[say=eliza]That would be 2 hours, the cycle is complete and the wound you had is looking fine. One last check and you are free to go.[/say]")
|
||||
saynn("After short draining and drying session the glass enclosure opens and you walk out. Eliza walks to you with some kind of scanner that is pointed at the place where you were wounded.")
|
||||
saynn("[say=eliza]Seems everything is okey, the healing process removed the nasty cut, this means you are free to go now. Don't get into trouble again.[/say]")
|
||||
saynn("[say=pc]Thank you, Doctor.[/say]")
|
||||
saynn("[say=eliza]You’re welcome~.[/say]")
|
||||
saynn("You are led to the corridor and let go.")
|
||||
addButton("Leave", "Leave", "endthescene")
|
||||
|
||||
|
||||
func boyfriend():
|
||||
|
@ -232,7 +260,11 @@ func _react_scene_end(_tag, _result):
|
|||
|
||||
func _react(_action: String, _args):
|
||||
if _action == "cryopodtreatment":
|
||||
processTime(8*60)
|
||||
|
||||
if _action == "cryopodend":
|
||||
processTime(120*60)
|
||||
GM.pc.afterCryopodTreatment()
|
||||
|
||||
if _action == "infirmary":
|
||||
GM.pc.setLocation("med_lobbymain")
|
||||
|
|
278
Modules/IssixModule/Scenes/SlaveryFirst/WalkiesTrainingScene.gd
Normal file
278
Modules/IssixModule/Scenes/SlaveryFirst/WalkiesTrainingScene.gd
Normal file
|
@ -0,0 +1,278 @@
|
|||
# Based on BDCC/Scenes/ParadedOnALeashScene.gd
|
||||
|
||||
extends "res://Scenes/SceneBase.gd"
|
||||
|
||||
const Globals = preload("res://Modules/IssixModule/Globals.gd")
|
||||
|
||||
var corner = "hall_ne_corner"
|
||||
var destination = ""
|
||||
var destinations = {"yard_vaulthere": "End of Yard"} # , "mining_shafts_entering": "Mining Shaft", "med_lobbymain": "Medical Lobby"
|
||||
var custom_scenes = {"yard_vaulthere": {6: "nova_horny"}, "mining_shafts_entering": {}, "med_lobbymain": {}}
|
||||
var path = []
|
||||
var pawns_interactions = []
|
||||
var teleportwhenskipped = true
|
||||
var stageScene = StageScene.Duo
|
||||
var goodPoints = 0
|
||||
var waited = 0
|
||||
var sat_down = false
|
||||
|
||||
func _initScene(_args = []):
|
||||
stageScene = StageScene.PuppyDuo if shouldBeInHeavyBondage() else StageScene.Duo
|
||||
rollDestination()
|
||||
goodPoints = 0
|
||||
waited = 0
|
||||
sat_down = false
|
||||
|
||||
func _init():
|
||||
sceneID = "WalkiesTrainingWithIssix"
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
addCharacter("issix")
|
||||
saynn("[say=issix]Hmm, I feel like going to "+destinations[destination]+" today, let's go.[/say]")
|
||||
saynn("He looks at Hiisi and tells him he will be out for a while.")
|
||||
|
||||
if state == "nova_horny":
|
||||
if pawns_interactions.size() < 2:
|
||||
setState("follow")
|
||||
else:
|
||||
playAnimation(StageScene.SexTrain, "inside", {pc=pawns_interactions[0], npc="nova", npc2=pawns_interactions[1], bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
|
||||
if GM.pc.isBlindfolded() and !GM.pc.canHandleBlindness():
|
||||
saynn("You are crawling on your fours while walking towards "+destinations[destination]+" while as you continue, both you and your Master become aware and curious about source of some intense sounds. You close in to the sounds, walking forward there is a little bit of free space on the left, you recognize the sounds as... Intense love making. The leash that usually slightly tugs on you becomes much more loose, signifying your Master has stopped, you take a break as well.")
|
||||
else:
|
||||
saynn("You are crawling on your fours while walking towards "+destinations[destination]+" while as you continue, both you and your Master become aware and curious about source of some intense sounds. You close in to the sounds, walking forward there is a little bit of free space on the left, or rather was - if it wasn't occupied by three creatures very occupied by... Intense love making. Your Master stops in the tracks to take a longer look.")
|
||||
|
||||
saynn("[say=nova]Ahhh, fuck yes![/say]")
|
||||
saynn("[say=pawn1]Good fuck.[/say]")
|
||||
saynn("[say=pawn2]Arrgghhh.[/say]")
|
||||
|
||||
saynn("") # TODO
|
||||
addButton("Continue", "Continue walking", "follow")
|
||||
|
||||
|
||||
if(state == "" || state == "leashed"):
|
||||
if(state == "leashed"):
|
||||
playAnimation(stageScene, "crawl", {npc="issix", npcAction="walk", flipNPC=true, bodyState={leashedBy="issix"}})
|
||||
if(path.size() > 0):
|
||||
aimCameraAndSetLocName(path[0])
|
||||
|
||||
var _roomInfo = GM.world.getRoomByID(path[0])
|
||||
|
||||
if(_roomInfo == null):
|
||||
saynn("You're being walked on a leash by Issix")
|
||||
else:
|
||||
saynn("You're being walked on a leash by Issix")
|
||||
|
||||
if(GM.pc.isBlindfolded() && !GM.pc.canHandleBlindness()):
|
||||
saynn(_roomInfo.getBlindDescription())
|
||||
else:
|
||||
saynn(_roomInfo.getDescription())
|
||||
|
||||
|
||||
addButton("Skip", "Skip the walk (skips all of the potential random small scenes as well!)", "skipwalk")
|
||||
addButtonAt(6, "Follow", "Follow the leash", "follow")
|
||||
if RNG.chance(2):
|
||||
addButtonAt(7, "Check", "You've noticed something nearby, you could investigate but your Master wouldn't like it", "distraction")
|
||||
addDisabledButtonAt(10, "Leashed", "Can't escape from the leash")
|
||||
addDisabledButtonAt(11, "Leashed", "Can't escape from the leash")
|
||||
addDisabledButtonAt(12, "Leashed", "Can't escape from the leash")
|
||||
|
||||
if (state == "skipwalk"):
|
||||
aimCamera(destination)
|
||||
GM.pc.setLocation(destination)
|
||||
|
||||
endScene()
|
||||
|
||||
if state == "yard_vaulthere":
|
||||
if GM.pc.isBlindfolded():
|
||||
saynn("You can feel a bit more moisty and cold air as you step further. The surface of the path also changes - you recognize that you are likely near your destination. Your Master changes the direction of the walk.")
|
||||
saynn("[say=issix]It's a bench in here. Let me take a seat.[/say]")
|
||||
saynn("You assume he sits on nearby bench.")
|
||||
|
||||
else:
|
||||
saynn("It is here, at the End of Yard, where your Master wanted to take you. Not far from here is pasture, but this place is closer to the greenhouses above. There are a couple of unused courtyards and benches. Your Master leads you to one of them before he sits on it.")
|
||||
|
||||
saynn("[say=issix]Sit, {pc.name}, but not on the bench. Benches are not for pets.[/say]")
|
||||
if !sat_down:
|
||||
addButton("Sit", "Try to sit next to your Master (bratty)", "sit_yard")
|
||||
else:
|
||||
addDisabledButton("Sit", "You can't do that again")
|
||||
addButton("Wait", "Wait next to the bench", "wait_yard")
|
||||
|
||||
if state == "sit_yard":
|
||||
if shouldBeInHeavyBondage() or GM.pc.hasBlockedHands():
|
||||
saynn("You attempt to sit next to your Master, on the bench - like a person would, quickly realizing that doing so is quite difficult in your predicament. Seeing your attempts you get scolded by your Master and smacked lightly on your side.")
|
||||
saynn("[say=issix]Bad "+Globals.getPlayerPetName()+"! Told you not to do that.[/say]")
|
||||
else:
|
||||
saynn("You stand up and sit next to your Master, on the bench - like a person would. Your Master is not amused.")
|
||||
saynn("[say=issix]Bad "+Globals.getPlayerPetName()+"! Told you not to do that.[/say]")
|
||||
saynn("You got smacked on your side hard enough to be back on your fours on the ground. You've been a bad pet.")
|
||||
addButton("Continue", "Continue", "yard_vaulthere")
|
||||
|
||||
if state == "wait_yard":
|
||||
saynn("You patiently await near your Master. Leash swinging with slightest movements of your Master's paw and your neck. You use the time to observe the environment. Inmates, guards, environment. It's not difficult for you to see that the railing connecting the greenhouses in here isn't too high and you can jump off it if you'd want. Though getting onto them from here would be a harder task.")
|
||||
if waited > 4:
|
||||
saynn("Your Master moves, it's your signal you should be coming back.")
|
||||
addDisabledButton("Wait", "Master is moving, it's time to go")
|
||||
addButton("Crawl", "Crawl behind your Master back", "return")
|
||||
else:
|
||||
addButton("Wait", "Wait next to the bench", "wait_yard")
|
||||
|
||||
if state == "distraction1":
|
||||
saynn("Two inmates nearby are fighting with each other. as they fight, from a pocket of one of them a physical work credit dropped, they didn't notice it. It's lose enough for you to be able to swipe it, you risk getting notice by your Master but... It feels worth it.")
|
||||
if GM.pc.hasBlockedHands():
|
||||
if RNG.chance(clamp(GM.pc.getStat(Stat.Agility), 0, 50)):
|
||||
saynn("Despite the fact that your paws were rendered truthfully useless by the bondage mittens, your skill had helped you to pocket the work credit for yourself. You are quite proud of yourself. Your Master? Not so much. You got noticed as you were doing that and your Master is unimpressed. Aw.")
|
||||
else:
|
||||
saynn("With your paws rendered useless, you struggle to get the work credits for yourself. Unfortunately your efforts end at nothing ad the work credit just gets pushed by your rubber mitts. To add to that, your efforts were noticed by your Master and he is unimpressed. Aw.")
|
||||
else:
|
||||
if RNG.chance(95):
|
||||
saynn("You snag and secure the work credit without any issue. Score for {pc.Name}!")
|
||||
else:
|
||||
saynn("You attempt to snag the work credit but you didn't notice another inmate coming from behind, his leg hits your arm in a fairly painful accident. You don't manage to snag the work token and you have to deal with very unimpressed Master.")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
||||
if _action == "sit_yard":
|
||||
GM.pc.addPain(5)
|
||||
goodPoints -= 1
|
||||
sat_down = true
|
||||
|
||||
if _action == "return":
|
||||
GM.pc.setLocation(corner)
|
||||
aimCamera(corner)
|
||||
endScene([goodPoints])
|
||||
return
|
||||
|
||||
if _action == "wait_yard":
|
||||
processTime(5*60)
|
||||
waited += 1
|
||||
|
||||
if(_action == "follow"):
|
||||
if(path.size() == 0):
|
||||
setState(destination)
|
||||
return
|
||||
|
||||
var nextLoc = path.pop_front()
|
||||
|
||||
if(!GM.world.hasRoomID(nextLoc)):
|
||||
endScene()
|
||||
return
|
||||
|
||||
GM.pc.setLocation(nextLoc)
|
||||
if(path.size() == 0):
|
||||
setState(destination)
|
||||
return
|
||||
if path.size() in custom_scenes[destination] and RNG.chance(20):
|
||||
_action = custom_scenes[destination][path.size()]
|
||||
else:
|
||||
setState("leashed")
|
||||
return
|
||||
|
||||
if _action == "nova_horny":
|
||||
pawns_interactions = pick_unique_one(findPawns([[["isInmate"], []], [["isInmate"], ["hasPenis"]]]))
|
||||
if null in pawns_interactions:
|
||||
setState("leashed")
|
||||
return
|
||||
|
||||
setState(_action)
|
||||
|
||||
# Verify requirements for pawns TODO TEST
|
||||
func verifyRequirements(pawn: CharacterPawn, requirements: Array) -> bool:
|
||||
for method in requirements[0]:
|
||||
pawn.has_method(method)
|
||||
if !pawn.call(method):
|
||||
return false
|
||||
var base_character = pawn.getCharacter()
|
||||
for method in requirements[1]:
|
||||
base_character.has_method(method)
|
||||
if !base_character.call(method):
|
||||
return false
|
||||
return true
|
||||
|
||||
# Find pawns that succeed requirements in list of lists
|
||||
func findPawns(requirements) -> Array:
|
||||
var all_pawns = GM.main.IS.getPawns()
|
||||
var results = []
|
||||
for pawn_requirement in requirements:
|
||||
var meet_criteria = []
|
||||
for pawn in all_pawns:
|
||||
if !verifyRequirements(all_pawns[pawn], pawn_requirement):
|
||||
continue
|
||||
meet_criteria.append(pawn)
|
||||
results.append(meet_criteria)
|
||||
return results
|
||||
|
||||
func check_if_string(element):
|
||||
return element is String
|
||||
|
||||
# Pick a unique random item for each of arrays
|
||||
func pick_unique_one(input_array: Array) -> Array:
|
||||
var sizes_of_arrays = [] # We will need to compare sized of arrays to first process smallest arrays
|
||||
var processed_array = input_array.duplicate(true)
|
||||
for array in input_array:
|
||||
sizes_of_arrays.append(array.size())
|
||||
|
||||
for _item in range(input_array.size()):
|
||||
var smallest_array = sizes_of_arrays.min()
|
||||
var index = sizes_of_arrays.find(smallest_array)
|
||||
for _i in range(smallest_array):
|
||||
var pick = input_array.pick_random()
|
||||
if pick in processed_array:
|
||||
continue
|
||||
processed_array[index] = pick
|
||||
break
|
||||
if processed_array[index] is Array:
|
||||
processed_array[index] = null
|
||||
sizes_of_arrays[index] = 999999
|
||||
return processed_array
|
||||
|
||||
func shouldBeInHeavyBondage(): # TODO Skill rebalance
|
||||
return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 2 or GM.pc.getSkillsHolder().getSkill("Pet").getExperience() > 80
|
||||
|
||||
func rollDestination():
|
||||
destination = RNG.pick(destinations.keys())
|
||||
|
||||
path = GM.world.calculatePath(corner, destination)
|
||||
if(path.size() <= 0):
|
||||
endScene()
|
||||
|
||||
func resolveCustomCharacterName(_charID):
|
||||
if _charID.begins_with("pawn"):
|
||||
return pawns_interactions[int(_charID[-1])-1]
|
||||
|
||||
return null
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
|
||||
data["endLocation"] = destination
|
||||
data["path"] = path
|
||||
data["teleportwhenskipped"] = teleportwhenskipped
|
||||
data["goodPoints"] = goodPoints
|
||||
data["pawnsInteractions"] = pawns_interactions
|
||||
data["waited"] = waited
|
||||
data["sat"] = sat_down
|
||||
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
destination = SAVE.loadVar(data, "endLocation", "")
|
||||
path = SAVE.loadVar(data, "path", [])
|
||||
teleportwhenskipped = SAVE.loadVar(data, "teleportwhenskipped", true)
|
||||
goodPoints = SAVE.loadVar(data, "goodPoints", 0)
|
||||
pawns_interactions = SAVE.loadVar(data, "pawnsInteractions", [])
|
||||
waited = SAVE.loadVar(data, "waited", 0)
|
||||
sat_down = SAVE.loadVar(data, "sat_down", false)
|
||||
|
||||
return null
|
|
@ -157,10 +157,12 @@ func _run():
|
|||
else:
|
||||
addDisabledButton("Learn", "You are already a master of Azazel's craft of sexual servitude")
|
||||
if GlobalRegistry.getCharacter("azazel").isPregnant() or GM.pc.isVisiblyPregnant():
|
||||
if GM.pc.getSkillLevel(Skill.Fertility) < 10 and GM.pc.hasAnyWomb():
|
||||
addDisabledButton("Learn fertility", "Learn about being harem's breeder (WIP)") # , "azazellearnfertility"
|
||||
if getModuleFlag("IssixModule", "Azazel_Fertility_Training_Today") == true:
|
||||
addDisabledButton("Learn fertility", "You've trained fertility with Azazel today already")
|
||||
elif GM.pc.getSkillLevel(Skill.Fertility) < 10 and GM.pc.hasAnyWomb():
|
||||
addButton("Learn fertility", "Learn about being harem's breeder", "azazellearnfertility")
|
||||
else:
|
||||
addDisabledButton("Learn", "You already know everything about bearing children")
|
||||
addDisabledButton("Learn", "You already know everything about bearing children or you don't have a womb")
|
||||
if GlobalRegistry.getCharacter("azazel").isHeavilyPregnant() and canPromptLitterDialogue():
|
||||
addButton("Guess litter", "Ask Azazel about his pregnancy", "azazelguesslitter")
|
||||
addDisabledButton("Sex", "Ask for sex with Azazel (WIP)") # , "azazelsexrequest"
|
||||
|
@ -318,6 +320,116 @@ func _run():
|
|||
saynn("[say=pc]Thank you Hiisi![/say]")
|
||||
addButton("Finish", "End this conversation", "hiisipetmenu")
|
||||
|
||||
if state == "azazelfertilityfirst":
|
||||
playAnimation(StageScene.Duo, "kneel", {pc="azazel"})
|
||||
saynn("[say=pc]Heyy Azazel... Umm.[/say]")
|
||||
saynn("Azazel smiles at you.")
|
||||
saynn("[say=pc]I know you are harem's broodmother and I figured you'd have a lot of experience with, you know, having children?[/say]")
|
||||
saynn("[say=azazel]Haha. Well, you know I only can ever have them for a little bit when they are in me, but then they take them away. But yes, I guess you could say I have some experience with that, why do you ask?[/say]")
|
||||
saynn("[say=pc]Could you perhaps teach me something about that?[/say]")
|
||||
saynn("He flashes you with mischievous smile.")
|
||||
saynn("[say=azazel]But of course I can, cutie! I can make a great mother out of you, you'll see. Buuuuut. I'll want something in exchange.[/say]")
|
||||
saynn("[say=pc]Oh? What would it be?[/say]")
|
||||
if GM.pc.getSkillLevel(Skill.Fertility) < 6:
|
||||
saynn("[say=azazel]Well, at first a bottle of Lube will do. But perhaps in the future I'll want a bit more, you know. I'm a fairly needy kitty.[/say]")
|
||||
saynn("He purrs.")
|
||||
if GM.pc.getSkillLevel(Skill.Fertility) > 5:
|
||||
saynn("[say=azazel]Hehe, I'd like the ability to impregnate you.[/say]")
|
||||
saynn("You are kind of stunned, ability to impregnate you? Azazel doesn't even have the-")
|
||||
if GM.pc.hasVagina():
|
||||
saynn("[say=azazel]You'll bring me a strapon with cum and I'll use it to ram it into your {pc.vagina}. If I can't, there will be no lesson for you. I want to see you have a big belly full of cubs hihi.[/say]")
|
||||
elif GM.pc.hasWombIn(BodypartSlot.Anus):
|
||||
saynn("[say=azazel]You'll bring me a strapon with cum and I'll use it to ram it between your sweet cheeks until it leaks with all of the content of it. If I can't - for whatever reason, there will be no lesson for you. I want to see you have a big belly full of cubs hihi.[/say]")
|
||||
else:
|
||||
saynn("-- THIS SHOULDN'T HAPPEN! UNLESS YOU HAVE WOMB SOMEWHERE IN STRANGE PLACE, IN WHICH CASE - GOOD FOR YOU BUT I HAVEN'T ADDED SUPPORT FOR THAT, LET ME KNOW --")
|
||||
if !GM.pc.hasPenis() or GM.pc.hasPerk(Perk.StartMaleInfertility):
|
||||
saynn("[say=pc]That's... Kinda hot but... Where will I get cum from?[/say]")
|
||||
saynn("[say=azazel]Cmon cutie, you can figure it out, it can be anyone, best if it's Master's cum![/say]")
|
||||
|
||||
saynn("[say=pc]So, you want to impregnate me every lesson?[/say]")
|
||||
saynn("[say=azazel]Indeed! The best way to teach you is with you having your belly full of cubs, isn't it?[/say]")
|
||||
saynn("[say=pc]I guess...[/say]")
|
||||
saynn("[say=azazel]Also, one of us should be pregnant, I can't work my teacher magic without some inspiration.[/say]")
|
||||
saynn("[say=pc]That's... Certainly a requirement.[/say]")
|
||||
saynn("[say=azazel]Easier thank you may think![/say]")
|
||||
addButton("Agree", "Agree to kitten's proposal", "azazelfertilityagree")
|
||||
addButton("Maybe later", "Say you have to think about it some more", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilityagree":
|
||||
saynn("[say=pc]Sure, we can do it.[/say]")
|
||||
saynn("[say=azazel]Yaaaay! Thank you, I hope to teach you all I know! I have tons of experience.[/say]")
|
||||
saynn("[say=azazel]Should we have first lesson?[/say]")
|
||||
if GM.pc.getSkillLevel(Skill.Fertility) < 6:
|
||||
if GM.pc.getInventory().hasItemID("lube"):
|
||||
addButton("Sure", "Say yes", "azazelfertilityfirstlube")
|
||||
else:
|
||||
addDisabledButton("No Lube", "Can't do that without lube")
|
||||
else:
|
||||
if checkIfPCHasLoadedStrapons():
|
||||
addButton("Sure", "Say yes", "azazelfertilitysecondsex")
|
||||
else:
|
||||
addDisabledButton("No Strapons", "You don't have loaded strapons")
|
||||
addButton("Later", "You have to go!", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilityrepeatlube":
|
||||
saynn("[say=pc]Heey, can we do fertility training right now?[/say]")
|
||||
saynn("[say=azazel]Sure! I'm up for it. Have you brought the slick juice?[/say]")
|
||||
if GM.pc.getInventory().hasItemID("lube"):
|
||||
saynn("[say=pc]Yup, have it here, catch.[/say]")
|
||||
saynn("You throw the bottle of lube at Azazel, he catches it.")
|
||||
saynn("[say=azazel]Thaaaanks, that will come in handy later hehe. Now, where were we last time...[/say]")
|
||||
addMessage("You've gave Azazel one bottle of lube")
|
||||
addButton("Continue", "Continue", "azazelfertilityfirst")
|
||||
else:
|
||||
saynn("[say=pc]Uhhh, frick, I forgot.[/say]")
|
||||
saynn("[say=azazel]Well, I'll wait. As much as I want to breed you, I need lube for stuff![/say]")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilityrepeatsex":
|
||||
saynn("[say=pc]Heey, can we do fertility training right now?[/say]")
|
||||
saynn("[say=azazel]Well, that depends in your strapon is loaded and your womb ready to receive a happy load hihi.[/say]")
|
||||
saynn("He eyes you with lust.")
|
||||
saynn("[say=azazel]First, show me your toys! I wanna see them.[/say]")
|
||||
if checkIfPCHasLoadedStrapons():
|
||||
saynn("You show Azazel the strapons you have.")
|
||||
saynn("[say=azazel]Yay! They look fine![/say]")
|
||||
saynn("He places his paw on your stomach and looks you in the eyes.")
|
||||
if GM.pc.hasPerk(Perk.StartInfertile):
|
||||
saynn("[say=azazel]Waaait a minute! You can't have children! You are infertile![/say]")
|
||||
saynn("Azazel says in accusatory tone. You actually get embarassed a little.")
|
||||
saynn("[say=pc]Y-yeah...[/say]")
|
||||
saynn("[say=azazel]I'm only willing to teach creatures that actually can bear children, otherwise it makes no sense![/say]")
|
||||
saynn("He crosses his arms and puts on a pouty face.")
|
||||
saynn("[say=pc]Alright, sorry then...[/say]")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
return
|
||||
if GM.pc.hasReachableVagina() or (GM.pc.hasWombIn(BodypartSlot.Anus) and GM.pc.hasReachableAnus()):
|
||||
saynn("[say=azazel]Good {pc.boy}. Now, which one should we use?[/say]")
|
||||
for strapon in checkPCStrapon():
|
||||
addButton(strapon.getVisibleName(), "Let Azazel borrow "+strapon.getVisibleName(), "azazelfertilitybreeding", [strapon])
|
||||
else:
|
||||
saynn("[say=azazel]Maaaan, don't tell me you have your holes blocked? How am I supposed to breed you if I can't even put baby batter into your waiting womb? Cmooon.[/say]")
|
||||
saynn("[say=azazel]Free up your breeding hole and come back, I want to breed you![/say]")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
else:
|
||||
if GM.pc.hasStrapons():
|
||||
saynn("[say=pc]Here you go![/say]")
|
||||
saynn("You show the feline strapons you've got, he checks them out.")
|
||||
saynn("[say=azazel]None of them are loaded with enough of cum. I want to breed you.[/say]")
|
||||
saynn("He annoyed.")
|
||||
saynn("[say=azazel]Come back when you have loaded strapons! I won't teach you until them meh![/say]")
|
||||
addMessage("You must come with at least one strapon loaded with 200ml of cum.")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
else:
|
||||
saynn("[say=pc]Oh, sorry, I forgot strapons, give me a minute.[/say]")
|
||||
saynn("[say=azazel]Cmooonnn, come back soon! I wanna fuuuck![/say]")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilityfirst":
|
||||
|
||||
|
||||
if state == "azazelfertilitysecond":
|
||||
|
||||
|
||||
if state == "hiisilearncombatfirst":
|
||||
playAnimation(StageScene.Yoga, "warrior", {pc="hiisi", bodyState={naked=true}})
|
||||
|
@ -575,6 +687,20 @@ func getMoodMessage():
|
|||
else:
|
||||
return RNG.pick(["How are you today, pet? Maybe I should walk y'all hungry beasts huh?", "Maaan, do you ever just stop and take it aaallllll in for a second? It's soo good."])
|
||||
|
||||
# Return all Strapons that have 200ml of Cum or more
|
||||
func checkPCStrapon():
|
||||
var available_strapons := []
|
||||
for strapon in GM.pc.getStrapons():
|
||||
var fluids = strapon.getFluids()
|
||||
var fluids_type = fluids.getFluidAmountByType()
|
||||
if fluids_type.has("Cum"):
|
||||
if fluids_type["Cum"] >= 200:
|
||||
available_strapons.append(strapon)
|
||||
return available_strapons
|
||||
|
||||
func checkIfPCHasLoadedStrapons():
|
||||
return checkPCStrapon().size() > 0
|
||||
|
||||
func getMood():
|
||||
var issix_mood = getModuleFlag("IssixModule", "Issix_Mood", 50)
|
||||
if issix_mood < 10:
|
||||
|
@ -612,9 +738,6 @@ func trainingCheck():
|
|||
else:
|
||||
return "very good"
|
||||
|
||||
static func addIssixMood(mood: int):
|
||||
GM.main.setModuleFlag("IssixModule", "Issix_Mood", clamp(GM.main.getModuleFlag("IssixModule", "Issix_Mood", 50)+mood, 0, 100))
|
||||
|
||||
func registerOffspringGuess():
|
||||
var past_guesses: Dictionary = getModuleFlag("IssixModule", "Litter_Guessing_Game", {"guesses_off": [], "last_guess": GM.CS.getChildrenAmountOf("azazel")})
|
||||
past_guesses["guesses_off"].append(reply_litter-GlobalRegistry.getCharacter("azazel").getPregnancyLitterSize())
|
||||
|
@ -636,6 +759,17 @@ func _react(_action: String, _args):
|
|||
if _action == "hiisiprotect":
|
||||
setModuleFlag("IssixModule", "Hiisi_Protects_PC", true)
|
||||
|
||||
if _action == "azazellearnfertility":
|
||||
if getModuleFlag("IssixModule", "Azazel_Fertility_Training_Today") == null:
|
||||
_action = "azazelfertilityfirst"
|
||||
elif GM.pc.getSkillLevel(Skill.Fertility) < 6:
|
||||
_action = "azazelfertilityrepeatlube"
|
||||
else:
|
||||
_action = "azazelfertilityrepeatsex"
|
||||
|
||||
if _action == "azazelfertilityfirst":
|
||||
GM.pc.getInventory().removeFirstOf("lube")
|
||||
|
||||
if _action == "lamiapetrequest":
|
||||
GM.pc.addPain(-10)
|
||||
GM.pc.addStamina(5)
|
||||
|
@ -774,12 +908,12 @@ func _react_scene_end(_tag, _result):
|
|||
var issix_sex_result = _result[0].get("doms", {}).get("issix", {})
|
||||
var pc_sex_result = _result[0].get("subs", {}).get("pc", {})
|
||||
if pc_sex_result.get("isUnconscious"):
|
||||
addIssixMood(5)
|
||||
Globals.addIssixMood(5)
|
||||
elif issix_sex_result.get("satisfaction") < 0.8:
|
||||
increaseModuleFlag("IssixModule", "PC_Bad_Sex")
|
||||
setState("after_sex_issix_unhappy")
|
||||
else:
|
||||
addIssixMood(5)
|
||||
Globals.addIssixMood(5)
|
||||
setState("after_sex_issix")
|
||||
|
||||
|
||||
|
|
11
Modules/IssixModule/SpeechModifiers/AzazelDemon.gd
Normal file
11
Modules/IssixModule/SpeechModifiers/AzazelDemon.gd
Normal file
|
@ -0,0 +1,11 @@
|
|||
extends SpeechModifierBase
|
||||
|
||||
func _init():
|
||||
id = "AzazelDemon"
|
||||
priority = 1001
|
||||
|
||||
func appliesTo(_speaker: BaseCharacter) -> bool:
|
||||
return _speaker.getID() == "lamia"
|
||||
|
||||
func modify(_text: String, _speaker: BaseCharacter) -> String:
|
||||
return "[pulse color=#ac1eff height=0.9 freq=0.6]"+_text+"[/pulse]"
|
|
@ -4,7 +4,7 @@
|
|||
A mod for Broken Dreams Correctional Center. Introduces Issix and his harem of s[l](https://kenashcorp.bandcamp.com/track/im-your-slave)- pets.
|
||||
|
||||
## Disclaimer
|
||||
The mod and contents in it is - surprise surprise - a work of fiction. Author does not support, condone, advocate for, endorse, stand up for non-consensual activities, relationships or violence.
|
||||
The mod and contents in it is - surprise surprise - a work of fiction. Author does not support, condone, advocate for, endorse, stand up for non-consensual activities, relationships or violence. Just like the base game this mod has been created for - the mod contains content of sexual nature and is **not intended for underage people**. If you are a minor, please leave.
|
||||
|
||||
# Existing content
|
||||
**This mod currently makes assumptions about a player - mainly that they are playing an anthropomorphic animal character, if this makes you uncomfortable, you are discouraged from playing it. It might be alleviated in the future**
|
||||
|
|
Loading…
Reference in a new issue