diff --git a/Characters/IssixCharacter.gd b/Characters/IssixCharacter.gd index 7a8a658..b242c0f 100644 --- a/Characters/IssixCharacter.gd +++ b/Characters/IssixCharacter.gd @@ -41,6 +41,7 @@ func _init(): Fetish.Masochism : FetishInterest.Hates, Fetish.UnconsciousSex : FetishInterest.Loves, Fetish.BeingBred : FetishInterest.Dislikes, + Fetish.Breeding : FetishInterest.Loves, Fetish.Bondage : FetishInterest.Likes, Fetish.Rigging : FetishInterest.Likes, Fetish.Condoms : FetishInterest.Dislikes, diff --git a/Events/EventTileOnEnter.gd b/Events/EventTileOnEnter.gd index d02da2d..02475c5 100644 --- a/Events/EventTileOnEnter.gd +++ b/Events/EventTileOnEnter.gd @@ -30,11 +30,16 @@ func run(_triggerID, _args): addButton("Paper", "A piece of paper lies left in a hurry", "paper") return - var player_enslaved = getModuleFlag("IssixModule", "PC_Enslavement_Role") - if player_enslaved != null and player_enslaved > 0: + var player_enslaved = getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) + if player_enslaved > 0: saynn("You see your Master sitting on his chair in the corner, around him there is Azazel, Hiisi and Lamia.") addButton("Master", "Talk to Master Issix", "talk") addButton("Pets", "Look at Master's pets", "pets") + match player_enslaved: + 1: + addButton("Pet tasks", "Get a read on today's pet tasks", "slavery") + 2: + addButton("Prostitution", "Open prostitution info", "slavery") else: saynn("You see Issix sitting on a chair in a corner, around him there are three leashed slaves.") addButton("Issix", "Talk to Issix", "talk") @@ -55,6 +60,8 @@ func onButton(_method, _args): runScene("PetsTalkScene") if(_method == "paper"): runScene("NoPetsTalkScene") + if _method == "slavery": + runScene("SlaveryInfoScreen") func eventCheck(_checkID, _args = []): if(getModuleFlag("IssixModule", "Quest_Status") == 5 and getModuleFlag("IssixModule", "Quest_Wait_Another_Day") == true): diff --git a/Events/IssixRegularSearch.gd b/Events/IssixRegularSearch.gd new file mode 100644 index 0000000..dfc1c71 --- /dev/null +++ b/Events/IssixRegularSearch.gd @@ -0,0 +1,19 @@ +extends EventBase + +func _init(): + id = "IssixEvent" + +func registerTriggers(es): + es.addTrigger(self, Trigger.EnteringRoom, "hall_mainentrance") + +func react(_triggerID, _args): + if(doEventCheck("IssixBusy") != null) or GM.main.isVeryLate(): + return false + + var visited = GM.main.getModuleFlag("IssixModule", "Last_Day_Visited_Master") + if visited != null and GM.main.getDays() > visited + 2: # 3 days without visiting master + runScene("IssixFoundPlayer") + + +func getPriority(): + return 10 diff --git a/Module.gd b/Module.gd index ac54b80..83de78f 100644 --- a/Module.gd +++ b/Module.gd @@ -49,7 +49,9 @@ func getFlags(): "Misc_Slavery_Info": flag(FlagType.Dict), "Progression_Points": flag(FlagType.Number), "Taught_To_Use_Bowl": flag(FlagType.Bool), - "Issix_Branded_PC": flag(FlagType.Bool) + "Issix_Branded_PC": flag(FlagType.Bool), + "Pet_Time_Interaction_Today": flag(FlagType.Number), + "Is_Player_Forced_Today": flag(FlagType.Number) # If player is forced to stay in harem this will have amount of seconds player needs to spend in the harem today } @@ -83,7 +85,9 @@ func _init(): "res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd", "res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd", "res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryBrandingScene.gd", - "res://Modules/IssixModule/Scenes/CaughtInTheCloset.gd" + "res://Modules/IssixModule/Scenes/CaughtInTheCloset.gd", + "res://Modules/IssixModule/Scenes/SlaveryIntroScene.gd", + "res://Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd" ] characters = [ @@ -127,11 +131,28 @@ static func addIssixMood(mood: int): static func getPlayerRole(): return "pet" if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1) == 1 else "prostitute" +func breedSlaveIfNpc(): + ## 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 current_slave == "pc" or (GM.main.getDays() % 3 != 0): + return # This will be handled by separate event + current_slave = GM.main.getCharacter(current_slave) + if RNG.chance(5): + current_slave.cummedInMouthBy("issix") + if current_slave.hasVagina(): # azazel + current_slave.cummedInVaginaBy("issix") + if RNG.chance(40): + current_slave.cummedInAnusBy("issix") + else: # hiisi + current_slave.cummedInAnusBy("issix") + func resetFlagsOnNewDay(): GM.main.setModuleFlag("IssixModule", "Azazel_Catnip_taken_today", false) GM.main.setModuleFlag("IssixModule", "Activated_Cabinets", {}) GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", false) + GM.main.setModuleFlag("IssixModule", "Is_Player_Forced_Today", 0) GM.main.setModuleFlag("IssixModule", "Todays_Bred_Slave", RNG.pick(['azazel', 'pc', 'hiisi'])) if GM.main.getModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today") != null: GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false) addIssixMood(RNG.randi_range(-7, 7)) + GM.main.setModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0) diff --git a/Scenes/PetWalkExamScene.gd b/Scenes/PetWalkExamScene.gd index f7f490b..8b048fa 100644 --- a/Scenes/PetWalkExamScene.gd +++ b/Scenes/PetWalkExamScene.gd @@ -434,7 +434,7 @@ func _run(): saynn("To not be short of silliness that apparently is contagious, you arch back your head to look at Lamia's face. This move has been helped by the fact you already stretched yourself pretty well in previous exercises, but even with that, your arch has its limit and you don't see the full face of Lamia, just from their nose up, and of course the face appears upside down.") saynn("[say=pc]I see a fox, I see a fox.[/say]") - saynn("Not seeing their full face expression, what you can see is a good indicator of very amused and happy face of orange fox breed. They give you a polite kiss on your nose just before you finish fooling around with your stretchy pose that started to get difficult to maintain.") + saynn("Not seeing their full face expression, what you can see is a good indicator of very amused and happy face of orange fox breed. They give you a polite kiss on your muzzle basket just before you finish fooling around with your stretchy pose that started to get difficult to maintain. You wish the muzzle basket didn't stop your nose from getting kissed but at the very least it's just temporary.") saynn("You fool around for a little longer, Lamia keeps you in embrace as you reciprocate those feelings by massaging their legs with your own paws. At some point you both grow tired of this position and go back to doing other things.") addButton("Back", "All great times and at some point, time to go back", "walkies4") diff --git a/Scenes/PetsTalkMain.gd b/Scenes/PetsTalkMain.gd index f9f160d..abf2a4a 100644 --- a/Scenes/PetsTalkMain.gd +++ b/Scenes/PetsTalkMain.gd @@ -125,6 +125,8 @@ func _run(): if HiisiRPS != null: if HiisiRPS["chosen_reward"] == 3 and HiisiRPS["reward_acquired"] == false: addButton("Drink", "Ask Hiisi about energy drink that you've won through the game of Rock Paper Scissors", "hiisienergy") + if HiisiRPS["winh"] > 2 and HiisiRPS["reward_acquired"] == false: + addButtonWithChecks("Hypnovisor", "Ask Hiisi to fulfill his request with hypnovisors", "hiisihypnovisors", [], [[ButtonChecks.HasItemID, "HypnovisorMk0"]]) if not getModuleFlag("IssixModule", "Hiisi_Name_Helped", false): addDisabledButton("Name", "You already asked Hiisi about his name") else: @@ -179,6 +181,18 @@ func _run(): saynn("You received 1 Energy Drink.") addButton("Back", "Take a step back", "hiisitalk") + if state == "hiisihypnovisors": + saynn("[say=pc]Umm, I have those, you wanted me to wear those the other day, right?[/say]") + + saynn("hHiisi gives you a grin") + saynn("[say=hiisi]Yeah, I did. Can you pass them to me for a moment?[/say]") + saynn("[say=pc]Sure?[/say]") + saynn("You hand the Hypnovisor to Hiisi, he pulls out a small box out of nowhere and swipes it near the hypnovisors, he skillfully baps and presses a few places on the hypnovisors and turns them on for a second as if to confirm something. Satisfied he turns them off and passes back to you.") + saynn("[say=hiisi]Done! Now just put them on and let me watch![/say]") + addButton("Refuse", "Say that you feel uncomfortable putting the hypnovisors on with those changes", "hiisihypnono") + addButton("Put on", "Put the hypnovisors on yourself and turn them on", "hiisihypnoyes") + + if(state == "lamiamain"): clearCharacter() addCharacter("lamia") @@ -420,6 +434,16 @@ func _run(): saynn("There are two slightly curved horns protruding from their head with black base and red endings.") addButton("Back", "Stop looking at fox-breed", "lamiamain") + if state == "lamiaexplicit": + saynn("[say=pc]I've noticed you haven't drawn any explicit scenes when I were helping you sort your artwork, you don't like drawing those? This prison seems like grounds ripe for this sort of scenes, if you needed inspiration.[/say]") + saynn("Lamia shrugs, he starts drawing. At first a koala eating a bamboo shows up, a happy face drawn above it. Then he draws canine member and canine pussy with a stick figure doing shrug with their arms. What strikes you as odd is that even though Lamia doesn't seem to draw explicit scenes, their genitalia art is drawn with plenty of detail and effort.") + saynn("[say=pc]Wow, that's pretty good, but I guess you kinda don't care much for those? Sex and all just doesn't do it for you, huh?[/say]") + saynn("They nod in agreement.") + saynn("[say=pc]I con respect that. You are a great artist, and you should draw whatever the fuck you want, that's the way to go.[/say]") + saynn("You give them headpats.") + addButton("Back", "Finish this conversation", "lamiamain") + + func generate_artwork_desc(descriptors: Array): if descriptors.size() > 1 and RNG.randi_range(1, 6) < 3: match descriptors: diff --git a/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd b/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd new file mode 100644 index 0000000..e69de29 diff --git a/Scenes/SlaveryInfoScreenScene.gd b/Scenes/SlaveryInfoScreenScene.gd index b240b4d..007f523 100644 --- a/Scenes/SlaveryInfoScreenScene.gd +++ b/Scenes/SlaveryInfoScreenScene.gd @@ -1,11 +1,15 @@ extends SceneBase +var pet_time_start = null + func _init(): sceneID = "SlaveryInfoScreen" func _run(): if(state == ""): playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"}) + if pet_time_start == null: + pet_time_start = GM.main.getTime() saynn("Your slave role: "+IssixModule.getPlayerRole()) saynn("Your training: "+trainingCheck()) saynn("Master's mood: "+getMood()) @@ -17,22 +21,43 @@ func _run(): saynn("To pay Master for sluttying around yesterday: " + str(GM.main.getModuleFlag("IssixModule", "Prostituation_fee_yesterday", 0) + GM.main.getModuleFlag("IssixModule", "Prostituation_flat_fee", 0))) _: pass + setModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()) addButton("Master", "Talk with your master about something", "issixpetmenu") addButton("Azazel", "Actions in relation to Azazel", "azazelpetmenu") addButton("Hiisi", "Actions in relation to Hiisi", "hiisipetmenu") addButton("Lamia", "Actions in relation to Lamia", "lamiapetmenu") + if not (GM.main.getModuleFlag("IssixModule", "Is_Player_Forced_Today", 0) > (getModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)+(GM.main.getTime()-pet_time_start))) or GM.main.isVeryLate(): + addButton("Leave", "Leave", "endthescene") if state == "issixpetmenu": - - + saynn("[say=issix]"+getMoodMessage()+"[/say]") + saynn("Is there anything you want to do with Master?") + addButton("Sex", "Ask for sex with Master", "issixsexrequest") func getTimeSpent(): - return "" + return Util.getTimeStringHumanReadable(getModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)+(GM.main.getTime()-pet_time_start)) + +func getMoodMessage(): + var issix_mood = getModuleFlag("IssixModule", "Issix_Mood", 50) + if issix_mood < 10: + return RNG.pick(["What are you looking at, slut?", "You won't find help in here, worm.", "Just fucking get off me!"]) + elif issix_mood < 25: + return RNG.pick(["Go away, not in the mood,", "Look for happiness somewhere else, you won't find it talking to me.", "I don't have time for you."]) + elif issix_mood < 40: + return RNG.pick(["Eh, shitty day today, eh?", "Everyone seems so uptight and angry lately, jeez.", "Glass is half empty today."]) + elif issix_mood < 60: + return RNG.pick(["Believe me, being bored in this prison sometimes is a blessing.", "How long did it take for you to get used to all this commotion in here?", "Being a guard in this prison ought to be the most boring thing to do ever."]) + elif issix_mood < 75: + return RNG.pick(["*whistles* What's up?", "Should have seen the look of the new guard when I swiped their baton haha.", "Dum dee dum...", "Nice day today, huh?"]) + elif issix_mood < 90: + return RNG.pick(["Eat, fuck, sleep repeat haha.", "Don't you just love life? So full of wonders.", "Glass is half full today."]) + 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."]) func getMood(): var issix_mood = getModuleFlag("IssixModule", "Issix_Mood", 50) if issix_mood < 10: - return "really bad" + return "[color=red]really bad[/color]" elif issix_mood < 25: return "bad" elif issix_mood < 40: @@ -44,7 +69,7 @@ func getMood(): elif issix_mood < 90: return "really good" else: - return "excellent" + return "[color=green]excellent[/color]" func getDays(): var days_enslaved = getModuleFlag("IssixModule", "PC_Training_Level", {})["day_enslaved"] @@ -67,7 +92,22 @@ func _react(_action: String, _args): if(_action == "endthescene"): # increaseModuleFlag("IssixModule", "PC_Training_Level") + increaseModuleFlag("IssixModule", "Pet_Time_Interaction_Today", GM.main.getTime()-pet_time_start) + pet_time_start = null endScene() return setState(_action) + + +func saveData(): + var data = .saveData() + + data["petTimeStart"] = pet_time_start + + return data + +func loadData(data): + .loadData(data) + + pet_time_start = SAVE.loadVar(data, "petTimeStart", null) diff --git a/Scenes/SlaveryIntroScene.gd b/Scenes/SlaveryIntroScene.gd index bae69ae..1b580dd 100644 --- a/Scenes/SlaveryIntroScene.gd +++ b/Scenes/SlaveryIntroScene.gd @@ -18,7 +18,7 @@ func _run(): saynn("[say=pc]Will I have time for myself? Other pets are leashed here all the time.[/say]") saynn("[say=issix]They do so of their own volition. They don't believe there is a better place to be than at my side, I give them place and they worship me as their master deserves. But if you so desire, you do not have to be at my side all the time. However I'll still have expectations of you, you will be my tool to mold and I expect you to be at my disposal at all times.[/say]") if GM.pc.getGender() == Gender.Female: - saynn("[say=issix]Also, as you have seen, all of my pets are masculine identifying as male pets. I've never had a female before. I don't say that to make you scared or anything, I'm fairly certain in my ability to train and care for pets of all gender expressions, but I figured you should take that into consideration before you make a decision. My little... Harem in here is very male dominated.[/say]") + saynn("[say=issix]Also, as you have seen, all of my pets are mostly masculine pets, with them all identifying as male. I've never had a female before. I don't say that to make you scared or anything, I'm fairly certain in my ability to train and care for pets of all gender expressions, but I figured you should take that into consideration before you make a decision. My little... Harem in here is very male dominated.[/say]") addButton("Slave", "Tell Issix you are ready to become his slave (WARNING: this will make the game generally harder and may involve a tedious daily tasks, but is the only way to continue PC slavery option)", "acceptslavery") addButton("Need time", "Tell Issix you need to think more about this decision", "maybelater") addButton("Reject", "Tell Issix you will not become his slave", "rejection") @@ -258,21 +258,21 @@ func _react(_action: String, _args): if _action == "normalroute4": if GM.pc.hasVagina(): - GM.pc.cummedInVaginaBy("issix", FluidSource.Penis, 150.0) + GM.pc.cummedInVaginaBy("issix", FluidSource.Penis, 1.1) var item = GlobalRegistry.createItem("vaginalplug") GM.pc.getInventory().forceEquipByStoreOtherUnlessRestraint(item, "issix") else: - GM.pc.cummedInAnusBy("issix", FluidSource.Penis, 150.0) + GM.pc.cummedInAnusBy("issix", FluidSource.Penis, 1.1) var item = GlobalRegistry.createItem("buttplug") GM.pc.getInventory().forceEquipByStoreOtherUnlessRestraint(item, "issix") if _action == "pissnormalmouth": GM.pc.cummedInMouthBy("issix", FluidSource.Pissing, 0.7) - GM.pc.cummedOnBy("issix", FluidSource.Pissing, 1.0) + GM.pc.cummedOnBy("issix", FluidSource.Pissing, 1.5) #GM.pc.coverBodyWithFluid() if _action == "pissnormal": - GM.pc.cummedOnBy("issix", FluidSource.Pissing, 1.0) + GM.pc.cummedOnBy("issix", FluidSource.Pissing, 1.5) if(_action == "endthescene"): endScene()