15.12 updates

This commit is contained in:
Frisk 2024-12-16 01:27:01 +01:00
parent e1dbe39ccd
commit 11ec77f305
11 changed files with 298 additions and 43 deletions

View file

@ -126,13 +126,17 @@ func createBodyparts():
giveBodypartUnlessSame(tail) giveBodypartUnlessSame(tail)
giveBodypartUnlessSame(GlobalRegistry.createBodypart("plantilegs")) giveBodypartUnlessSame(GlobalRegistry.createBodypart("plantilegs"))
skillsHolder.addPerk(Perk.FertilityBroodmother) skillsHolder.addPerk(Perk.FertilityBroodmother)
skillsHolder.addPerk(Perk.FertilityBetterOvulation)
skillsHolder.addPerk(Perk.FertilityBetterOvulationV2)
skillsHolder.addPerk(Perk.FertilityBetterOvulationV3)
skillsHolder.addPerk(Perk.FertilityDesireToBreed)
skillsHolder.addPerk(Perk.FertilitySubmissiveAndBreedable)
func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array): func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array):
.onGivingBirth(_impregnatedEggCells, _newkids) .onGivingBirth(_impregnatedEggCells, _newkids)
func getBirthWaitTime(): func getBirthWaitTime():
return 60*60*24*2 return 60*60*24*3
func getDefaultEquipment(): func getDefaultEquipment():
return ["inmatecollar", "inmateuniformSexDeviant"] return ["inmatecollar", "inmateuniformSexDeviant"]

View file

@ -42,7 +42,7 @@ func _init():
Fetish.VaginalSexGiving : FetishInterest.Hates, Fetish.VaginalSexGiving : FetishInterest.Hates,
Fetish.VaginalSexReceiving : FetishInterest.Loves, Fetish.VaginalSexReceiving : FetishInterest.Loves,
Fetish.OralSexReceiving : FetishInterest.Likes, Fetish.OralSexReceiving : FetishInterest.Likes,
Fetish.OralSexGiving : FetishInterest.Likes, Fetish.OralSexGiving : FetishInterest.Neutral,
Fetish.Sadism : FetishInterest.ReallyDislikes, Fetish.Sadism : FetishInterest.ReallyDislikes,
Fetish.Masochism : FetishInterest.Hates, Fetish.Masochism : FetishInterest.Hates,
Fetish.UnconsciousSex : FetishInterest.Loves, Fetish.UnconsciousSex : FetishInterest.Loves,
@ -98,6 +98,16 @@ func interestVerbalReaction(interest):
return "You are much better fit as a common breeder" return "You are much better fit as a common breeder"
if(interest == InterestTopic.Blindfolds): if(interest == InterestTopic.Blindfolds):
return "Overconfident much?" return "Overconfident much?"
if(interest == InterestTopic.BigCock):
return "Pretty big equipment you got there, have you tried using it?"
if(interest == InterestTopic.SmallCock):
return "Aww, so small. Don't worry, I think it's pretty cute, and as far as reproduction goes, it's pretty telling what your role in it is."
if(interest == InterestTopic.HasVaginaAndCock):
return "Oh wow, your biology blessed you with two? How versatile! Which one you prefer more? Breeder or a stud?"
if(interest == InterestTopic.Bodywritings):
return "I like it when sluts have advertisement all over themselves. Really encourages me to grab that marker."
if(interest == InterestTopic.LactatingBreasts):
return "You produce? Do you think I can have some of that milk for myself?"
func _getName(): func _getName():
return "Issix" return "Issix"

View file

@ -60,7 +60,9 @@ func getFlags():
"Comic_Books": flag(FlagType.Number), "Comic_Books": flag(FlagType.Number),
"Comic_Book_Unlocked": flag(FlagType.Bool), "Comic_Book_Unlocked": flag(FlagType.Bool),
"Strikes_For_Disobedience": flag(FlagType.Number), "Strikes_For_Disobedience": flag(FlagType.Number),
"Unwelcome_At_Corner": flag(FlagType.Bool) "Unwelcome_At_Corner": flag(FlagType.Bool),
"Had_Sex_With_Issix": flag(FlagType.Bool),
"Litter_Guessing_Game": flag(FlagType.Dict)
#"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :( #"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :(
} }
@ -117,7 +119,9 @@ func _init():
] ]
items = [ items = [
"res://Modules/IssixModule/Items/CatnipItem.gd", "res://Modules/IssixModule/Items/ClosetMap.gd", "res://Modules/IssixModule/Items/CookieItem.gd" # I just felt like this game needs more variety in items, even if by themselves they don't do much "res://Modules/IssixModule/Items/CatnipItem.gd",
"res://Modules/IssixModule/Items/ClosetMap.gd",
"res://Modules/IssixModule/Items/CookieItem.gd" # I just felt like this game needs more variety in items, even if by themselves they don't do much
] ]
quests = [ quests = [
@ -163,24 +167,33 @@ static func getPlayerPetName():
func breedSlaveIfNpc(): func breedSlaveIfNpc():
## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event? ## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event?
var current_slave = GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave") if not (int(GM.main.getDays()) % 2 != 0): # Breed only every second day?
if current_slave == "pc" or (GM.main.getDays() % 3 != 0): GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", "thischardoesntexist")
return
var available_slaves = ['azazel', 'pc', 'hiisi']
available_slaves.erase(GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "pc")) # Don't repeat same slave every day'
var current_slave = RNG.pick(available_slaves)
GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", current_slave)
if current_slave == "pc":
return # This will be handled by separate event return # This will be handled by separate event
current_slave = GM.main.getCharacter(current_slave) current_slave = GM.main.getCharacter(current_slave)
GlobalRegistry.getCharacter("issix").prepareForSexAsDom()
if RNG.chance(5): if RNG.chance(5):
current_slave.cummedInMouthBy("issix") current_slave.cummedInMouthBy("issix")
if current_slave.hasVagina(): # azazel if current_slave.hasVagina(): # azazel
current_slave.cummedInVaginaBy("issix") current_slave.cummedInVaginaBy("issix", FluidSource.Penis, 1.8)
print("Azazel cummed in")
if RNG.chance(40): if RNG.chance(40):
current_slave.cummedInAnusBy("issix") current_slave.cummedInAnusBy("issix", FluidSource.Penis, 1.2)
else: # hiisi else: # hiisi
print("Hiisi cummed in")
current_slave.cummedInAnusBy("issix") current_slave.cummedInAnusBy("issix")
func tickDay(): func tickDay():
addIssixMood(RNG.randi_range(-7, 7)) addIssixMood(RNG.randi_range(-7, 7))
if GM.main.getDays() - GM.getModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()) > 1: # TODO detect player in soft-lock (medical/etc) if GM.main.getDays() - GM.main.getModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()) > 1: # TODO detect player in soft-lock (medical/etc)
addIssixMood(-10) addIssixMood(-10)
if GM.main.getDays() % 7 == 0: if int(GM.main.getDays()) % 7 == 0:
GM.main.increaseModuleFlag("IssixModule", "Comic_Books", RNG.randi_range(5, 8)) GM.main.increaseModuleFlag("IssixModule", "Comic_Books", RNG.randi_range(5, 8))
func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay does not have ANY other hooks I can use and SleepInCell as a trigger is not covering all cases of days passing by func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay does not have ANY other hooks I can use and SleepInCell as a trigger is not covering all cases of days passing by
@ -188,8 +201,8 @@ func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay
GM.main.setModuleFlag("IssixModule", "Activated_Cabinets", {}) GM.main.setModuleFlag("IssixModule", "Activated_Cabinets", {})
GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", false) GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", false)
GM.main.setModuleFlag("IssixModule", "Unwelcome_At_Corner", false) GM.main.setModuleFlag("IssixModule", "Unwelcome_At_Corner", false)
GM.main.setModuleFlag("IssixModule", "Had_Sex_With_Issix", false)
GM.main.setModuleFlag("IssixModule", "Is_Player_Forced_Today", 0) GM.main.setModuleFlag("IssixModule", "Is_Player_Forced_Today", 0)
GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", RNG.pick(['azazel', 'pc', 'hiisi']))
breedSlaveIfNpc() breedSlaveIfNpc()
if GM.main.getModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today") != null: if GM.main.getModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today") != null:
GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false) GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false)

View file

@ -5,7 +5,6 @@ extends SceneBase
var npcID = "" var npcID = ""
var sawBefore = false var sawBefore = false
var npcVariation = "" var npcVariation = ""
var foundIllegalItems = false
func _init(): func _init():
sceneID = "ClosetCaughtOfflimitsScene" sceneID = "ClosetCaughtOfflimitsScene"
@ -218,7 +217,6 @@ func saveData():
data["npcID"] = npcID data["npcID"] = npcID
data["sawBefore"] = sawBefore data["sawBefore"] = sawBefore
data["npcVariation"] = npcVariation data["npcVariation"] = npcVariation
data["foundIllegalItems"] = foundIllegalItems
return data return data
@ -228,4 +226,3 @@ func loadData(data):
npcID = SAVE.loadVar(data, "npcID", "") npcID = SAVE.loadVar(data, "npcID", "")
sawBefore = SAVE.loadVar(data, "sawBefore", false) sawBefore = SAVE.loadVar(data, "sawBefore", false)
npcVariation = SAVE.loadVar(data, "npcVariation", "") npcVariation = SAVE.loadVar(data, "npcVariation", "")
foundIllegalItems = SAVE.loadVar(data, "foundIllegalItems", false)

View file

@ -189,9 +189,6 @@ func _react(_action: String, _args):
return return
if(_action == "cabinetloot"): if(_action == "cabinetloot"):
if getModuleFlag("IssixModule", "Activated_Cabinets", {}).size() > 10:
# TODO Do a force encounter with an engineer
pass
current_loot = generateLoot(_args[0]) current_loot = generateLoot(_args[0])
current_cabinet = _args[0] current_cabinet = _args[0]
if typeof(current_loot) == TYPE_INT: if typeof(current_loot) == TYPE_INT:

View file

@ -1,6 +1,7 @@
extends SceneBase extends SceneBase
var artwork = null var artwork = null
var pc_pose = null
var arts_reviewed = 0 var arts_reviewed = 0
var arts_correct = 0 var arts_correct = 0
@ -75,10 +76,13 @@ var odd_lamia_art = [
func _init(): func _init():
sceneID = "PetsTalkScene" sceneID = "PetsTalkScene"
func _initScene(_args = []):
pc_pose = "stand" if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0 else "kneel"
func _run(): func _run():
if(state == ""): if(state == ""):
playAnimation(StageScene.Solo, "stand", {pc="pc", bodyState={naked=false, hard=false}, npcBodyState={naked=false, hard=false}}) playAnimation(StageScene.Solo, pc_pose, {pc="pc", bodyState={naked=false, hard=false}, npcBodyState={naked=false, hard=false}})
setLocationName("Issix's Corner") setLocationName("Issix's Corner")
saynn("In front of you - three slaves belonging to Issix.") saynn("In front of you - three slaves belonging to Issix.")
addCharacter("azazel") addCharacter("azazel")
@ -90,7 +94,7 @@ func _run():
addButton("Leave", "Be on your way", "endthescene") addButton("Leave", "Be on your way", "endthescene")
if(state == "azazelmain"): if(state == "azazelmain"):
playAnimation(StageScene.Duo, "kneel", {pc="azazel", npc="pc", bodyState={naked=false, hard=false}}) playAnimation(StageScene.Duo, "kneel", {pc="azazel", npcAction=pc_pose, npc="pc", bodyState={naked=false, hard=false}})
clearCharacter() clearCharacter()
addCharacter("azazel") addCharacter("azazel")
addButton("Talk", "Talk to Azazel", "azazeltalk") addButton("Talk", "Talk to Azazel", "azazeltalk")
@ -102,7 +106,7 @@ func _run():
addButton("Give Catnip", "Give Azazel the catnip", "catnip") addButton("Give Catnip", "Give Azazel the catnip", "catnip")
else: else:
if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0: if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
saynn("You approach Azazel, he recognizes sudden attention given to him, he goes on his fours doing some kitty back streching before kneeling towards you expectandly. You notice he took a quick peek at his master beforehand.") saynn("You approach Azazel, he recognizes sudden attention given to him, he goes on his fours doing some kitty back streching before kneeling towards you expectantly. You notice he took a quick peek at his master beforehand.")
else: else:
pass # TODO pass # TODO
addButton("Back", "Take a step back", "") addButton("Back", "Take a step back", "")
@ -110,7 +114,7 @@ func _run():
if state == "hiisimain": if state == "hiisimain":
clearCharacter() clearCharacter()
addCharacter("hiisi") addCharacter("hiisi")
playAnimation(StageScene.Duo, "kneel", {pc="hiisi", npc="pc", bodyState={naked=false, hard=false}, npcBodyState={naked=false, hard=false}}) playAnimation(StageScene.Duo, "kneel", {pc="hiisi", npc="pc", npcAction=pc_pose, bodyState={naked=false, hard=false}, npcBodyState={naked=false, hard=false}})
if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0: if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
saynn("You approach Hiisi, he acknowledges your presence but other than that doesn't give you much attention, continuing to lay on his front looking at his master with his muzzle being supported by own arms.") saynn("You approach Hiisi, he acknowledges your presence but other than that doesn't give you much attention, continuing to lay on his front looking at his master with his muzzle being supported by own arms.")
addButton("Talk", "Talk to Hiisi", "hiisitalk") addButton("Talk", "Talk to Hiisi", "hiisitalk")
@ -134,6 +138,15 @@ func _run():
addButton("Name", "Ask Hiisi about his name", "hiisiname") addButton("Name", "Ask Hiisi about his name", "hiisiname")
addButton("Back", "Do something else", "hiisimain") addButton("Back", "Do something else", "hiisimain")
if state == "hiisiappearance":
saynn("You approach a kneeling Hiisi, in many ways his fur coloring reminds you of huskies but... Backwards? The black coloring visible on his face and bottom of his canine tail, the tail so bushy and monochromatic that it reminds you of a skunk. The inside of his ears dark gray as well, along with the tip, with the pleasant light gray outline.\nWholly brighter palette on the back and his legs.")
saynn("His hair, with exception of one blue colored stripe at the front is ginger, or some close color - a little bit simple, short maybe a bit messy.")
saynn("He is a pretty masculine individual, in comparison to other pets, his muscles are rather well defined, only exacerbated by the fact that his body structure is closer to being slim rather than regular or even chubby.")
saynn("His face holds a rather busy look, he is focused on a task which is... Observation of his Master as well as other pets.")
saynn("You can definitely tell that in his pants lies a penis, not because it's big or anything, but simply because a bulge is visible in his sitting posture.")
addButton("Back", "You've stared at the canine long enough", "hiisitalk")
if state == "hiisiname": if state == "hiisiname":
saynn("[say=pc]Hey Hiisi, can you tell me something more about your name? It feels kind of odd.[/say]") saynn("[say=pc]Hey Hiisi, can you tell me something more about your name? It feels kind of odd.[/say]")
saynn("Hiisi looks down") saynn("Hiisi looks down")
@ -243,7 +256,7 @@ func _run():
if(state == "lamiamain"): if(state == "lamiamain"):
clearCharacter() clearCharacter()
addCharacter("lamia") addCharacter("lamia")
playAnimation(StageScene.Duo, "kneel", {pc="lamia", npc="pc", bodyState={naked=false, hard=false}}) playAnimation(StageScene.Duo, "kneel", {pc="lamia", npc="pc", npcAction=pc_pose, bodyState={naked=false, hard=false}})
if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0: if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
saynn("You approach Lamia") saynn("You approach Lamia")
var lamia_mood = getModuleFlag("IssixModule", "Lamia_Times_Helped", 0) var lamia_mood = getModuleFlag("IssixModule", "Lamia_Times_Helped", 0)
@ -556,13 +569,16 @@ func _react(_action: String, _args):
if _action == "hiisireassure": if _action == "hiisireassure":
increaseModuleFlag("IssixModule", "Hiisi_Affection", 5) increaseModuleFlag("IssixModule", "Hiisi_Affection", 5)
setModuleFlag("IssixModule", "Hiisi_Name_Helped", true) setModuleFlag("IssixModule", "Hiisi_Name_Helped", true)
processTime(10*60)
if _action == "hiisiadvice": if _action == "hiisiadvice":
increaseModuleFlag("IssixModule", "Hiisi_Affection", -5) increaseModuleFlag("IssixModule", "Hiisi_Affection", -5)
setModuleFlag("IssixModule", "Hiisi_Name_Helped", true) setModuleFlag("IssixModule", "Hiisi_Name_Helped", true)
processTime(5*60)
if _action == "hiisisilence": if _action == "hiisisilence":
setModuleFlag("IssixModule", "Hiisi_Name_Helped", true) setModuleFlag("IssixModule", "Hiisi_Name_Helped", true)
processTime(8*60)
if _action == "hiisihypnono": if _action == "hiisihypnono":
markHiisiRewardAsAquired() markHiisiRewardAsAquired()

View file

@ -1,15 +1,11 @@
extends SceneBase extends SceneBase
var attitude = null
var timedifference = 0
func _init(): func _init():
sceneID = "IssixBringsComicbooks" sceneID = "IssixBringsComicbooks"
func _run(): func _run():
if(state == ""): if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"}) playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
IssixModule.addSceneToWatched(sceneID)
saynn("When you approach the corner today you can see all of pets engaged in intense reading of something, each one of them holding a small booklet with colorful characters on the covers.") saynn("When you approach the corner today you can see all of pets engaged in intense reading of something, each one of them holding a small booklet with colorful characters on the covers.")
saynn("[say=pc]What's up? What are you reading there?[/say]") saynn("[say=pc]What's up? What are you reading there?[/say]")
saynn("[say=azazel]Comic books. we have a few super hero, some horror and some drama ones.[/say]") saynn("[say=azazel]Comic books. we have a few super hero, some horror and some drama ones.[/say]")
@ -73,7 +69,9 @@ func _react(_action: String, _args):
setModuleFlag("IssixModule", "Comic_Book_Unlocked", true) setModuleFlag("IssixModule", "Comic_Book_Unlocked", true)
if(_action == "endthescene"): if(_action == "endthescene"):
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+4) IssixModule.addSceneToWatched(sceneID)
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+3)
increaseModuleFlag("IssixModule", "Progression_Points", 1)
endScene() endScene()
return return

View file

@ -208,6 +208,7 @@ func _react(_action: String, _args):
processTime(2*60) processTime(2*60)
if _action == "afterbrandingwakeup": if _action == "afterbrandingwakeup":
GM.pc.setLocation("hall_ne_corner")
timedifference = GM.main.getTimeCap() - GM.main.timeOfDay timedifference = GM.main.getTimeCap() - GM.main.timeOfDay
processTime(timedifference) processTime(timedifference)
increaseModuleFlag("IssixModule", "Progression_Points") increaseModuleFlag("IssixModule", "Progression_Points")

View file

@ -11,12 +11,12 @@ func _run():
if(OPTIONS.isContentEnabled(ContentType.Watersports)): if(OPTIONS.isContentEnabled(ContentType.Watersports)):
increaseModuleFlag("IssixModule", "Progression_Points") increaseModuleFlag("IssixModule", "Progression_Points")
if GM.pc.getFluids().hasFluidTypeWithCharID("Piss", "issix"): if GM.pc.getFluids().hasFluidTypeWithCharID("Piss", "issix"):
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+1) setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+2)
saynn("[say=issix]My my. My piss slut came back and {pc.he} is still smelling like myself. Good job.[/say]") saynn("[say=issix]My my. My piss slut came back and {pc.he} is still smelling like myself. Good job.[/say]")
saynn("He leans down and pets your head. You yip in appreciation.") # TODO Yip/meow/bark saynn("He leans down and pets your head. You yip in appreciation.") # TODO Yip/meow/bark
saynn("[say=issix]Since you are such a good pet, today I'd like to train you a little. Are you ready?[/say]") saynn("[say=issix]Since you are such a good pet, today I'd like to train you a little. Are you ready?[/say]")
else: else:
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+4) setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+5)
saynn("[say=issix]You don't smell like me, what happened? Someone woke you up with a water bucket on your head? That's not great. It was your first order as my pet and you blew it. I'm incredibly disappointed.[/say]") saynn("[say=issix]You don't smell like me, what happened? Someone woke you up with a water bucket on your head? That's not great. It was your first order as my pet and you blew it. I'm incredibly disappointed.[/say]")
saynn("A look of disappointment is on Masters's face. He expected you to still have his mark from yesterday.") saynn("A look of disappointment is on Masters's face. He expected you to still have his mark from yesterday.")
saynn("[say=issix]I'm not going to punish you, but I'm also not going to reward you either.[/say]") saynn("[say=issix]I'm not going to punish you, but I'm also not going to reward you either.[/say]")
@ -25,7 +25,7 @@ func _run():
saynn("You obediently lie on your back, unsure what to expect. Master takes your blanket and without further comment starts relieving himself above you. His hot piss hitting your belly. He doesn't drench you in piss like the last time. Rather just leaving enough for anyone nearby to smell him on you.") saynn("You obediently lie on your back, unsure what to expect. Master takes your blanket and without further comment starts relieving himself above you. His hot piss hitting your belly. He doesn't drench you in piss like the last time. Rather just leaving enough for anyone nearby to smell him on you.")
saynn("[say=issix]I expect you to stay here one hour, I'm not going to give you a reward.[/say]") saynn("[say=issix]I expect you to stay here one hour, I'm not going to give you a reward.[/say]")
else: else:
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+2) setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+3)
saynn("[say=issix]I'm glad to see you. Are you ready for your first day of training?[/say]") saynn("[say=issix]I'm glad to see you. Are you ready for your first day of training?[/say]")
addButton("Yes", "You are ready for the training", "training1") addButton("Yes", "You are ready for the training", "training1")

View file

@ -6,8 +6,6 @@ func _init():
func _run(): func _run():
if(state == ""): if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"}) playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
IssixModule.addSceneToWatched(sceneID)
setModuleFlag("IssixModule", "Taught_To_Use_Bowl", true)
saynn("[say=issix]Are you hungry perhaps today, pet?[/say]") saynn("[say=issix]Are you hungry perhaps today, pet?[/say]")
saynn("He looks at you with his smile you know so well at this point.") saynn("He looks at you with his smile you know so well at this point.")
# warning-ignore:integer_division # warning-ignore:integer_division
@ -76,6 +74,8 @@ func _react(_action: String, _args):
if(_action == "endthescene"): if(_action == "endthescene"):
increaseModuleFlag("IssixModule", "PC_Training_Level") increaseModuleFlag("IssixModule", "PC_Training_Level")
increaseModuleFlag("IssixModule", "Progression_Points") increaseModuleFlag("IssixModule", "Progression_Points")
IssixModule.addSceneToWatched(sceneID)
setModuleFlag("IssixModule", "Taught_To_Use_Bowl", true)
endScene() endScene()
return return

View file

@ -1,12 +1,23 @@
extends SceneBase extends SceneBase
var rng_per_day = null
var pet_time_start = null var pet_time_start = null
var reply_litter = null
var azazel_teased_motherhood = false
var azazel = null
func _init(): func _init():
sceneID = "SlaveryInfoScreen" sceneID = "SlaveryInfoScreen"
func _initScene(_args = []):
rng_per_day = RandomNumberGenerator.new()
rng_per_day.seed = GM.main.getDays()
azazel = GlobalRegistry.getCharacter("azazel")
reply_litter = 0
func _run(): func _run():
if(state == ""): if(state == ""):
clearCharacter()
var last_walk = getModuleFlag("IssixModule", "Last_Walk", 0) var last_walk = getModuleFlag("IssixModule", "Last_Walk", 0)
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"}) playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
if pet_time_start == null: if pet_time_start == null:
@ -49,12 +60,16 @@ func _run():
addButton("Leave", "Leave", "endthescene") addButton("Leave", "Leave", "endthescene")
if state == "issixpetmenu": if state == "issixpetmenu":
addCharacter("issix")
saynn("[say=issix]"+getMoodMessage()+"[/say]") saynn("[say=issix]"+getMoodMessage()+"[/say]")
saynn("Is there anything you want to do with Master?") saynn("Is there anything you want to do with Master?")
if getModuleFlag("IssixModule", "Had_Sex_With_Issix", false) == false:
addButton("Sex", "Ask for sex with Master", "issixsexrequest") addButton("Sex", "Ask for sex with Master", "issixsexrequest")
else:
addDisabledButton("Sex", "You've already had sex with Issix today")
addButton("Walk", "Ask when he plans the next walk to the pasture", "issixwalkquestion") addButton("Walk", "Ask when he plans the next walk to the pasture", "issixwalkquestion")
addButton("Tasks", "Ask for extra tasks", "issixtaskquestion") addDisabledButton("Tasks", "Ask for extra tasks (WIP)") # , "issixtaskquestion"
addButton("Options", "Ask your Master to change how he treats you", "issixoptions") # Pet etiquette, make player communicate via animalistic sounds, unlocks optional training addDisabledButton("Options", "Ask your Master to change how he treats you (WIP)") #, "issixoptions" Pet etiquette, make player communicate via animalistic sounds, unlocks optional training
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
if state == "haremeat": if state == "haremeat":
@ -66,31 +81,147 @@ func _run():
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
if state == "azazelpetmenu": if state == "azazelpetmenu":
addCharacter("azazel")
playAnimation(StageScene.Duo, "kneel", {pc="azazel", npcAction="kneel", npc="pc", bodyState={naked=false, hard=false}})
if GM.pc.getSkillLevel(Skill.SexSlave) < 15: if GM.pc.getSkillLevel(Skill.SexSlave) < 15:
addButton("Learn sex", "Learn about sexual slavery from Azazel", "azazellearnslavery") addDisabledButton("Learn sex", "Learn about sexual slavery from Azazel (WIP)") # , "azazellearnslavery"
else: else:
addDisabledButton("Learn", "You are already a master of Azazel's craft of sexual servitude") addDisabledButton("Learn", "You are already a master of Azazel's craft of sexual servitude")
if GlobalRegistry.getCharacter("azazel").isPregnant() or GM.pc.isVisiblyPregnant(): if GlobalRegistry.getCharacter("azazel").isPregnant() or GM.pc.isVisiblyPregnant():
if GM.pc.getSkillLevel(Skill.Fertility) < 10: if GM.pc.getSkillLevel(Skill.Fertility) < 10:
addButton("Learn fert.", "Learn about being harem's breeder", "azazellearnfertility") addDisabledButton("Learn fertility", "Learn about being harem's breeder (WIP)") # , "azazellearnfertility"
else: else:
addDisabledButton("Learn", "You already know everything about bearing children") addDisabledButton("Learn", "You already know everything about bearing children")
if GlobalRegistry.getCharacter("azazel").isHeavilyPregnant(): if GlobalRegistry.getCharacter("azazel").isHeavilyPregnant() and canPromptLitterDialogue():
addButton("Guess litter", "Ask Azazel about his pregnancy", "azazelguesslitter") addButton("Guess litter", "Ask Azazel about his pregnancy", "azazelguesslitter")
addButton("Sex", "Ask for sex with Azazel", "azazelsexrequest") addDisabledButton("Sex", "Ask for sex with Azazel") # , "azazelsexrequest"
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
if state == "azazelguesslitterfirst":
saynn("[say=azazel]I see you looking.[/say]")
saynn("Azazel gives you a mischievous grin.")
saynn("[say=azazel]Let's play a game, I'll let you guess how much litter I have in my belly, the more off you are the worse for you, but if you are close enough I may have something for you, are you in?[/say]")
saynn("[say=pc]You are being pretty vague with what you mean my prediction will mean for me, why not just say?[/say]")
saynn("[say=azazel]It's part of the game, the less you know more fun it will be.[/say]")
addButton("Sure", "Accept Azazel's proposal", "azazelguesslitteraccept")
addButton("Reject", "You don't want to play if you don't know what's at stake", "azazelguesslitterreject")
if azazel_teased_motherhood == false:
addButton("Stare", "Continue staring at Azazel's pregnant belly, it looks so nice...", "azazelguesslitterstare")
if state == "azazelguesslitteraccept":
playAnimation(StageScene.Duo, "kneel", {pc="azazel", npcAction="kneel", npc="pc", bodyState={naked=true, hard=false}})
saynn("[say=pc]Okey, I'll bite, lets do this.[/say]")
saynn("[say=azazel]Wooho! Here we go, I'll make it a bit easier for you.[/say]")
saynn("He chuckles as he takes off his clothes.")
saynn("[say=azazel]So, what do you think? What's the magic number {pc.name}? What do you think?[/say]")
say("Enter the prediction in number form (ex. 32)")
var textBox:LineEdit = addTextbox("litter_count")
var _ok = textBox.connect("text_entered", self, "onTextBoxEnterPressed")
addButton("Confirm", "Guess this number", "littercountresult")
if state == "azazelguesslitterstare":
saynn("Instead of responding to Azazel you continue to look at his large belly filled with his litter. It feels so... Mesmerizing, as if calling to you. As if in trance, your head bears closer and closer to Azazel's belly until your forehead starts touching it. A slight purring noise comes from Azazel.")
saynn("[say=azazel]Your interest in my litter is surprising but appreciated.[/say]")
saynn("You change position of your head to have your right ear touch the fabric of Azazel's clothes that cover his pregnant bloated belly. You can hear.. Something inside, until you feel a small bump above your ear - litter is moving!")
if GM.CS.getChildrenAmountOfOnlyMother("pc") > 0:
saynn("[say=azazel]I know you are aware how good it is to bear children, you did have a litter of your own in the past did you? Mmm. Yes. You know the wonders of being a mother. "+("Oh don't give me that look, a male can be a great mother for their children as well! Just look at me. " if GM.pc.getGender() == Gender.Male else "")+"It's a great gift to be able to bear children for your Master. To bring him the joy of putting some of self into you, to leave a mark in this galaxy. Mmmm.[/say]")
saynn("Azazel's purring becomes stronger.")
elif GM.pc.isVisiblyPregnant():
saynn("[say=pc]I bet your litter is just as enthusiastic as mine. Mrrrau.[/say]")
saynn("His paw carreses your tummy full of your own litter.")
saynn("[say=azazel]Isn't it a great joy to be a mother? "+("Oh don't give me that look, a male can be a great mother for their children as well! Just look at me. " if GM.pc.getGender() == Gender.Male else "")+"Mmmm. You are a great mother as well, cutie.[/say]")
else:
saynn("[say=azazel]Aren't you curious yourself, what it means to bear litter? Wouldn't you want to leave a mark in this wretched galaxy? To have more of little {pc.name}'s running around? Becoming adventurers, slaves, masters... Hah. Don't get me wrong, personally I don't think I care about my own legacy, but our Master does, I think. I enjoy being his little breeding kitten, maybe you'd like being his breeding "+IssixModule.getPlayerPetName()+" too? Think about it.[/say]")
saynn("He gives you a smile.")
saynn("After he says that you leave the trance you were in, that was odd...")
saynn("[say=azazel]So what do you say? Are you in?[/say]")
addButton("Yup", "Accept Azazel's proposal to play the game", "azazelguesslitteraccept")
addButton("Reject", "You don't want to play if you don't know what's at stake", "azazelguesslitterreject")
if state == "littercountresult":
if reply_litter == 0:
saynn("[say=pc]Zero.[/say]")
saynn("Azazel stares at you with confusion")
saynn("[say=azazel]Huh? But...[/say]")
saynn("He stares at his giant belly caressing it in his paws, he fixes his gaze again on you")
saynn("[say=azazel]You see this, right? You know what I can bear children, right? Cmon, take it seriously![/say]")
elif reply_litter > 100:
saynn("[say=pc]"+str(reply_litter)+"[/say]")
saynn("He bursts out laughing")
saynn("[say=azazel]I might be a fine breeder but I think with this amount my belly (and I) would have a very difficult time haha. No no, I can assure you I don't have THIS many! Cmon, give a more realistic guess.[/say]")
else:
saynn("[say=pc]"+str(reply_litter)+"[/say]")
var diff = abs(reply_litter-azazel.getPregnancyLitterSize())
if diff > 5:
saynn("[say=azazel]"+str(reply_litter)+"? Interesting.[/say]")
if diff > 50:
saynn("[say=azazel]You are very far off, from what the doctor said I have "+str(azazel.getPregnancyLitterSize())+" cubs in my belly, impressive, isn't it?[/say]")
elif diff > 20:
saynn("[say=azazel]I mean, that's not too far but it's not very close either, at the moment I have "+str(azazel.getPregnancyLitterSize())+" cubs in my belly, but thank you for entertaining me with your guess![/say]")
elif diff > 10:
saynn("[say=azazel]Not terribly bad, in fact, I have "+str(azazel.getPregnancyLitterSize())+" cubs in my belly right now if to believe my doctor.[/say]")
elif diff > 5:
saynn("[say=azazel]Wow! Not too bad, you were pretty close, I have "+str(azazel.getPregnancyLitterSize())+" cubs in my belly, this batch is crazy![/say]")
elif diff > 1:
saynn("[say=azazel]You are great at that! In fact, I have "+str(azazel.getPregnancyLitterSize())+" cubs in me right now, that's super close to your number! Good job![/say]")
elif diff == 1:
saynn("[say=azazel]Hah! Classic off-by-one error! You were so close! Damn, {pc.name}, you are great at this game! I do have "+str(azazel.getPregnancyLitterSize())+" cubs in me right now, hah, maybe next time you'll get it 100% correct![/say]")
elif diff == 0:
saynn("Azazel looks at you shocked")
saynn("[say=azazel]You... You got it! Exact number of cubs in me right now. Holy shit, great job! Wouldn't you make a great mother with those skills haha. Wow, still can't believe you got it exactly right. Bet you could even solve those „how many balls are there in this jar” without counting them beforehand, awesome.[/say]")
saynn("[say=azazel]Thank you for playing, there is no reward this time for you, but if you entertain me with guesses in the future I might eventually have something for your smart ass.[/say]")
saynn("He chuckles and gives you a warm smile.")
addButton("Back", "You've played the game, that would be it for here", "azazelpetmenu")
return
var textBox:LineEdit = addTextbox("litter_count")
var _ok = textBox.connect("text_entered", self, "onTextBoxEnterPressed")
addButton("Guess", "Guess the number inserted", "littercountresult")
if state == "azazelguesslitterreject":
saynn("[say=pc]Sorry, but I don't think I want to play it at the moment, especially without knowing what is there to gain or lose.[/say]")
saynn("[say=azazel]Aw, too bad, feel free to come back and guess my litter later then. I'm not going anywhere in this state haha.[/say]")
addButton("Back", "Go back", "azazelpetmenu")
if state == "azazelguesslitterrepeat":
saynn("[say=azazel]Hah, coming back to play my little „how many Master cubs I have in my belly” game I hope?[/say]")
saynn("[say=pc]Yeah...[/say]")
saynn("[say=azazel]Excellent, you know the deal. Shoot a number, I tell you how much you are off by.[/say]")
saynn("[say=pc]Will I finally get something out of it?[/say]")
saynn("[say=azazel]Hmmm. Perhaps not yet, but perhaps soon...[/say]")
saynn("You sigh.")
addButton("Guess", "Guess the number", "azazelguesslitterguess")
addButton("Later", "Maybe other time, leave", "azazelpetmenu")
if state == "azazelguesslitterguess":
playAnimation(StageScene.Duo, "kneel", {pc="azazel", npcAction="kneel", npc="pc", bodyState={naked=true, hard=false}})
saynn("Azazel takes off his clothes.")
saynn("[say=pc]Hmm.[/say]")
saynn("[say=azazel]You can do it, I believe in you.[/say]")
saynn("He caresses his belly with a paw letting you see just how bloated he is")
say("Enter the prediction in number")
var textBox:LineEdit = addTextbox("litter_count")
var _ok = textBox.connect("text_entered", self, "onTextBoxEnterPressed")
addButton("Confirm", "Guess this number", "littercountresult")
if state == "hiisipetmenu": if state == "hiisipetmenu":
addCharacter("hiisi")
if GM.pc.getSkillLevel(Skill.Combat) < 16: if GM.pc.getSkillLevel(Skill.Combat) < 16:
addButton("Learn", "Learn something from Hiisi", "hiisilearncombat") addDisabledButton("Learn", "Learn something from Hiisi (WIP)") # , "hiisilearncombat"
else: else:
addDisabledButton("Learn", "There isn't anything more you can learn from Hiisi about combat") addDisabledButton("Learn", "There isn't anything more you can learn from Hiisi about combat")
addButton("Sex", "Ask for sex with Hiisi", "hiisisexrequest") addDisabledButton("Sex", "Ask for sex with Hiisi (WIP)") # , "hiisisexrequest"
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
if state == "lamiapetmenu": if state == "lamiapetmenu":
addButton("Read", "Read comic books", "") addCharacter("lamia")
#addButton("Read", "Read comic books (WIP)", "")
addButton("Pets", "Ask for pets", "lamiapetrequest") addButton("Pets", "Ask for pets", "lamiapetrequest")
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
@ -102,6 +233,30 @@ func _run():
saynn("[say=issix]Hmm, soonish, probably in around "+ str(IssixModule.getWalkDelay()-(GM.main.getDays()-last_walk)) + " days. Are you excited for the next walk?[/say]") saynn("[say=issix]Hmm, soonish, probably in around "+ str(IssixModule.getWalkDelay()-(GM.main.getDays()-last_walk)) + " days. Are you excited for the next walk?[/say]")
addButton("Back", "Go back", "issixpetmenu") addButton("Back", "Go back", "issixpetmenu")
if state == "issixsexrequest":
if GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "hiisi") == "pc":
saynn("[say=pc]I'm ready, Master.[/say]")
saynn("[say=issix]Good. let's do it.[/say]")
addButton("Start", "Start sex", "startsexissix")
return
saynn("[say=pc]Umm, Master? Could we have sex today?[/say]")
if float(GM.pc.getLust()) / GM.pc.lustThreshold() > 0.7:
saynn("[say=issix]Aww, my "+IssixModule.getPlayerPetName() +" is pent up? How cute.[/say]")
else:
saynn("[say=issix]Sex? Hmmm...[/say]")
if getModuleFlag("IssixModule", "Issix_Mood", 50) > 70 and rng_per_day.randi_range(1,2) == 2:
saynn("[say=issix]Sure, we can fuck, come here.[/say]")
addButton("Start", "Start sex", "startsexissix")
else:
saynn("[say=issix]Sorry, I'm not in the mood for breeding. Ask me some other time.[/say]")
addButton("Back", "Go back", "issixpetmenu")
if state == "after_sex_issix":
saynn("[say=issix]You did good today, pet. Thank you.[/say]")
addButton("Back", "Go back", "")
if state == "readabook": if state == "readabook":
addButton("Back", "Go back", "") addButton("Back", "Go back", "")
@ -175,7 +330,46 @@ func trainingCheck():
else: else:
return "very good" return "very good"
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-azazel.getPregnancyLitterSize())
past_guesses["last_guess"] = GM.CS.getChildrenAmountOf("azazel")
setModuleFlag("IssixModule", "Litter_Guessing_Game", past_guesses.duplicate(true))
func canPromptLitterDialogue():
return getModuleFlag("IssixModule", "Litter_Guessing_Game", {"guesses_off": [], "last_guess": -1})["last_guess"] != GM.CS.getChildrenAmountOf("azazel")
func _react(_action: String, _args): func _react(_action: String, _args):
if _action == "startsexissix":
getCharacter("issix").prepareForSexAsDom()
GlobalRegistry.getCharacter("issix").addPain(-50)
runScene("GenericSexScene", ["issix", "pc"], "subbysexissix")
if _action == "littercountresult":
if(getTextboxData("litter_count") == ""):
return
if not getTextboxData("litter_count").is_valid_integer():
addMessage("Insert a valid number!")
return
reply_litter = int(getTextboxData("litter_count"))
if reply_litter < 0:
addMessage("Insert a valid POSITIVE number!")
return
if not reply_litter > 100:
registerOffspringGuess()
if _action == "azazelguesslitterstare":
GM.pc.addEffect(StatusEffect.Suggestible, [20])
GM.pc.addLust(100)
azazel_teased_motherhood = true
if _action == "after_sex_issix":
setModuleFlag("IssixModule", "Had_Sex_With_Issix", true)
processTime(20*60)
IssixModule.addIssixMood(5)
if _action == "readabook": if _action == "readabook":
processTime(20*60) processTime(20*60)
increaseModuleFlag("IssixModule", "Comic_Books", -1) increaseModuleFlag("IssixModule", "Comic_Books", -1)
@ -186,6 +380,18 @@ func _react(_action: String, _args):
GM.pc.addPain(-10) GM.pc.addPain(-10)
setModuleFlag("IssixModule", "Eaten_Today", true) setModuleFlag("IssixModule", "Eaten_Today", true)
if _action == "azazelguesslitter":
var guesses = getModuleFlag("IssixModule", "Litter_Guessing_Game", {"guesses_off": []})
match guesses["guesses_off"].size():
0:
_action = "azazelguesslitterfirst"
1,2,3:
_action = "azazelguesslitterrepeat"
4:
_action = "azazelguesslitterlast"
_:
_action = "azazelguesslitterfun"
if _action == "passtime": if _action == "passtime":
processTime(15*60) processTime(15*60)
_action = "" _action = ""
@ -199,11 +405,22 @@ func _react(_action: String, _args):
setState(_action) setState(_action)
func onTextBoxEnterPressed(_new_text:String):
GM.main.pickOption("littercountresult", [])
func _react_scene_end(_tag, _result):
if _tag == "subbysexissix":
setState("after_sex_issix")
func saveData(): func saveData():
var data = .saveData() var data = .saveData()
data["replyLitter"] = reply_litter
data["petTimeStart"] = pet_time_start data["petTimeStart"] = pet_time_start
data["azazelTease"] = azazel_teased_motherhood
return data return data
@ -211,3 +428,5 @@ func loadData(data):
.loadData(data) .loadData(data)
pet_time_start = SAVE.loadVar(data, "petTimeStart", null) pet_time_start = SAVE.loadVar(data, "petTimeStart", null)
azazel_teased_motherhood = SAVE.loadVar(data, "azazelTease", false)
reply_litter = SAVE.loadVar(data, "reply_litter", 0)