From f90ddb81f19b5bc45b29dd0d5b562609b96f3925 Mon Sep 17 00:00:00 2001 From: Frisk <7283122+Friskygote@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:16:45 +0100 Subject: [PATCH] 24.12 update --- .../IssixModule/Characters/AzazelCharacter.gd | 12 +- .../IssixModule/Characters/HiisiCharacter.gd | 5 +- .../IssixModule/Characters/IssixCharacter.gd | 15 ++ .../IssixModule/Events/CornerPriorityEvent.gd | 9 +- Modules/IssixModule/Module.gd | 26 ++- Modules/IssixModule/Scenes/ClosetComputer.gd | 27 ++- Modules/IssixModule/Scenes/IssixTalkMain.gd | 1 + .../SlaveryFirst/SlaveryIntroContScene.gd | 1 + .../SlaveryFirst/SlaveryTrainingBowlScene.gd | 1 + .../Scenes/SlaveryInfoScreenScene.gd | 200 +++++++++++++++++- Modules/IssixModule/Skills/Images/bowl.png | Bin 0 -> 3049 bytes .../IssixModule/Skills/Images/bowl.png.import | 35 +++ .../IssixModule/Skills/Perks/BowlTraining.gd | 26 +++ .../Skills/Perks/FollowCommands.gd | 26 +++ .../IssixModule/Skills/Perks/PavlovsDog.gd | 26 +++ Modules/IssixModule/Skills/Perks/PetName.gd | 26 +++ Modules/IssixModule/Skills/Perks/PetSpeech.gd | 24 +++ Modules/IssixModule/Skills/Perks/PetWalk.gd | 23 ++ Modules/IssixModule/Skills/Pet.gd | 20 ++ .../StatusEffects/catnipoverdose.png | Bin 0 -> 4234 bytes .../StatusEffects/catnipoverdose.png.import | 35 +++ 21 files changed, 514 insertions(+), 24 deletions(-) create mode 100644 Modules/IssixModule/Skills/Images/bowl.png create mode 100644 Modules/IssixModule/Skills/Images/bowl.png.import create mode 100644 Modules/IssixModule/Skills/Perks/BowlTraining.gd create mode 100644 Modules/IssixModule/Skills/Perks/FollowCommands.gd create mode 100644 Modules/IssixModule/Skills/Perks/PavlovsDog.gd create mode 100644 Modules/IssixModule/Skills/Perks/PetName.gd create mode 100644 Modules/IssixModule/Skills/Perks/PetSpeech.gd create mode 100644 Modules/IssixModule/Skills/Perks/PetWalk.gd create mode 100644 Modules/IssixModule/Skills/Pet.gd create mode 100644 Modules/IssixModule/StatusEffects/catnipoverdose.png create mode 100644 Modules/IssixModule/StatusEffects/catnipoverdose.png.import diff --git a/Modules/IssixModule/Characters/AzazelCharacter.gd b/Modules/IssixModule/Characters/AzazelCharacter.gd index 6af12fc..e70eddd 100644 --- a/Modules/IssixModule/Characters/AzazelCharacter.gd +++ b/Modules/IssixModule/Characters/AzazelCharacter.gd @@ -131,6 +131,16 @@ func createBodyparts(): skillsHolder.addPerk(Perk.FertilityBetterOvulationV3) skillsHolder.addPerk(Perk.FertilityDesireToBreed) skillsHolder.addPerk(Perk.FertilitySubmissiveAndBreedable) + skillsHolder.addPerk(Perk.NakedDodging) + skillsHolder.addPerk(Perk.NakedDodgingV2) + skillsHolder.addPerk(Perk.NakedDodgingV3) + skillsHolder.addPerk(Perk.NakedExtraStamina) + skillsHolder.addPerk(Perk.NakedExtraStaminaV2) + skillsHolder.addPerk(Perk.NakedMagicHips) + skillsHolder.addPerk(Perk.NakedNoShame) + skillsHolder.addPerk(Perk.NakedStunningLips) + skillsHolder.addPerk(Perk.MilkSquirt) + skillsHolder.addPerk(Perk.MilkFasterProduction) func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array): .onGivingBirth(_impregnatedEggCells, _newkids) @@ -139,4 +149,4 @@ func getBirthWaitTime(): return 60*60*24*3 func getDefaultEquipment(): - return ["inmatecollar", "inmateuniformSexDeviant"] + return ["inmatecollar", "inmateuniformSexDeviant", "plainPanties"] diff --git a/Modules/IssixModule/Characters/HiisiCharacter.gd b/Modules/IssixModule/Characters/HiisiCharacter.gd index af2917b..69100ff 100644 --- a/Modules/IssixModule/Characters/HiisiCharacter.gd +++ b/Modules/IssixModule/Characters/HiisiCharacter.gd @@ -118,7 +118,10 @@ func createBodyparts(): tail.tailScale = 1 giveBodypartUnlessSame(tail) giveBodypartUnlessSame(GlobalRegistry.createBodypart("digilegs")) - + skillsHolder.addPerk(Perk.CombatBetterGetUp) + skillsHolder.addPerk(Perk.CombatDoubleDown) + skillsHolder.addPerk(Perk.CombatShove) + skillsHolder.addPerk(Perk.HypnosisFastAsleep) func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array): .onGivingBirth(_impregnatedEggCells, _newkids) diff --git a/Modules/IssixModule/Characters/IssixCharacter.gd b/Modules/IssixModule/Characters/IssixCharacter.gd index 4e0780b..ba705c6 100644 --- a/Modules/IssixModule/Characters/IssixCharacter.gd +++ b/Modules/IssixModule/Characters/IssixCharacter.gd @@ -92,6 +92,7 @@ func _init(): InterestTopic.TightPussy: Interest.Likes, InterestTopic.BigCock: Interest.Hates, } + func interestVerbalReaction(interest): if(interest == InterestTopic.Pregnant): @@ -148,6 +149,20 @@ func createBodyparts(): tail.tailScale = 1 giveBodypartUnlessSame(tail) giveBodypartUnlessSame(GlobalRegistry.createBodypart("hoofs")) + skillsHolder.addPerk(Perk.BreedCumVolume) + skillsHolder.addPerk(Perk.BreedCumVolumeV2) + skillsHolder.addPerk(Perk.BreedCumProduction) + skillsHolder.addPerk(Perk.BreedCumProductionV2) + skillsHolder.addPerk(Perk.BreedCumProductionV3) + skillsHolder.addPerk(Perk.BreedStud) + skillsHolder.addPerk(Perk.BreedRapidConception) + skillsHolder.addPerk(Perk.BreedCockSlap) + skillsHolder.addPerk(Perk.BreedBreedersBliss) + skillsHolder.addPerk(Perk.CombatBetterGetUp) + skillsHolder.addPerk(Perk.CombatDoubleDown) + skillsHolder.addPerk(Perk.CombatFullStaminaBonus) + skillsHolder.addPerk(Perk.CombatScratching) + skillsHolder.addPerk(Perk.CombatShove) func onGivingBirth(_impregnatedEggCells: Array, _newkids: Array): diff --git a/Modules/IssixModule/Events/CornerPriorityEvent.gd b/Modules/IssixModule/Events/CornerPriorityEvent.gd index f0da399..ebaf343 100644 --- a/Modules/IssixModule/Events/CornerPriorityEvent.gd +++ b/Modules/IssixModule/Events/CornerPriorityEvent.gd @@ -15,8 +15,13 @@ class CustomSorter: func checkRequirements(requirements: Dictionary): for key in requirements.keys(): if requirements[key] is int or requirements[key] is float: - if getModuleFlag("IssixModule", key, 0) < requirements[key]: - return false + if key.begins_with("-"): # If we want to eliminate cases where the requirement value is LOWER than player's score + key = key.trim_prefix("-") + if getModuleFlag("IssixModule", key, 0) >= requirements[key]: + return false + else: # If we want to eliminate cases where the requirement value is HIGHER than player's score + if getModuleFlag("IssixModule", key, 0) < requirements[key]: + return false elif requirements[key] is String: if getModuleFlag("IssixModule", key, 0) != requirements[key]: return false diff --git a/Modules/IssixModule/Module.gd b/Modules/IssixModule/Module.gd index 2ad5861..5ae5be0 100644 --- a/Modules/IssixModule/Module.gd +++ b/Modules/IssixModule/Module.gd @@ -72,7 +72,8 @@ func getFlags(): "Received_Headpats_From_Lamia": flag(FlagType.Number), "Total_Fluids_Milked": flag(FlagType.Dict), "Has_Been_Milked_Today": flag(FlagType.Bool), - "Submission": flag(FlagType.Number) + "Submission": flag(FlagType.Number), + "Trained_With_Hiisi_Combat": flag(FlagType.Bool) #"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :( } @@ -140,7 +141,18 @@ func _init(): computers = [ "res://Modules/IssixModule/Scenes/ClosetComputer.gd" ] - + skills = [ + "res://Modules/IssixModule/Skills/Pet.gd" + ] + perks = [ + "res://Modules/IssixModule/Skills/Perks/BowlTraining.gd", + "res://Modules/IssixModule/Skills/Perks/FollowCommands.gd", + "res://Modules/IssixModule/Skills/Perks/PavlovsDog.gd", + "res://Modules/IssixModule/Skills/Perks/PetName.gd", + "res://Modules/IssixModule/Skills/Perks/PetSpeech.gd", + "res://Modules/IssixModule/Skills/Perks/PetWalk.gd" + ] + GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/") GlobalRegistry.registerSkinsFolder("res://Modules/IssixModule/Skins/") GlobalRegistry.registerStatusEffectFolder("res://Modules/IssixModule/StatusEffects/") @@ -169,7 +181,7 @@ static func getPlayerRole(): return "pet" if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1) == 1 else "prostitute" static func playerToFuck(): - return (int(GM.main.getDays()) % 2 == 1) and GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "") == "pc" # every uneven day + return (int(GM.main.getDays()-1) % 2 == 1) and GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "") == "pc" # every uneven day static func getPlayerPetName(): if Species.Canine in GM.pc.getSpecies(): @@ -230,7 +242,7 @@ func calculateDailyScore() -> int: func tickDay(): addIssixMood(RNG.randi_range(-7, 7)) - if GM.pc.getLocation() != "medical_paddedcell_player": + if GM.pc.getLocation() == "medical_paddedcell_player": pass # TODO Bust out scene elif (GM.main.getDays() - GM.main.getModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()) > 1): addIssixMood(-10) @@ -239,8 +251,8 @@ func tickDay(): GM.main.increaseModuleFlag("IssixModule", "Comic_Books", RNG.randi_range(5, 8)) if int(GM.main.getDays()) % 30 == 0 and GM.main.getModuleFlag("IssixModule", "Strikes_For_Disobedience", 0) > 0: # every 30 days remove one strike GM.main.increaseModuleFlag("IssixModule", "Strikes_For_Disobedience", -1) - if GM.main.getDays()-GM.main.getModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()) == APPROX_WALK_DELAY: - GM.main.setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()) + if GM.main.getDays()-1-GM.main.getModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()) == APPROX_WALK_DELAY: + GM.main.setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays()-1) 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 @@ -261,3 +273,5 @@ func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay GM.main.setModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0) GM.main.setModuleFlag("IssixModule", "Eaten_Today", false) GM.main.setModuleFlag("IssixModule", "Has_Been_Milked_Today", true) + if GM.main.getModuleFlag("IssixModule", "Trained_With_Hiisi_Combat") != null: + GM.main.setModuleFlag("IssixModule", "Trained_With_Hiisi_Combat", false) diff --git a/Modules/IssixModule/Scenes/ClosetComputer.gd b/Modules/IssixModule/Scenes/ClosetComputer.gd index 64b9881..c21f6ea 100644 --- a/Modules/IssixModule/Scenes/ClosetComputer.gd +++ b/Modules/IssixModule/Scenes/ClosetComputer.gd @@ -2,9 +2,9 @@ extends ComputerBase var connectedTo = "" var loggedAsAdmin = false -var records = {"533": "ID: 533\nfirstname: Issix\nlastname: [corrupt]Solomon[/corrupt]\n\nnotes: Issix, or rather [b]Gaap[/b] as his real real name goes, is a special case in BDCC, staff is NOT to take any punitive action in regards to this individual without first consulting with the director. He has not been convicted of any illegal activities, but rather has been introduced to prison based on order o[corrupt]f general Sonno[/corrupt]fer. \nOfficially - he is an inmate, unofficially he is is untouchable. Let him do whatever the fuck he wants, unless you don't value your own life. Incarcerated in [corrupt]4292 32 11[/corrupt].",\ -"655": "ID: 655\nfirstname: Azazel\nlastname: Dreemurr\nPast inhabitant of planet [b]Pueri Meritorii[/b], sentenced for sex work with untreated STD. Original sentence was 10 years, it has been extended to indefinite due to circumstances in the prison.\nNOTE: THIS INMATE IS OWNED BY INMATE 533, PLEASE REFER TO MENTIONED INMATE ABOUT ALL MATTERS PERTAINING TO THIS INMATE",\ -""} +var records = {"533": "ID: 533\nfirstname: Issix\nlastname: [corrupt]Solomon[/corrupt]\nitype: 1\n\nnotes: Issix, or rather [b]Gaap[/b] as his real real name goes, is a special case in BDCC, staff is NOT to take any punitive action in regards to this individual without first consulting with the director. He has not been convicted of any illegal activities, but rather has been introduced to prison based on order o[corrupt]f general Sonno[/corrupt]fer. \nOfficially - he is an inmate, unofficially he is is untouchable. Let him do whatever the fuck he wants, unless you don't value your own life. Incarcerated in [corrupt]4292 32 11[/corrupt].",\ +"655": "ID: 655\nfirstname: Azazel\nlastname: Dreemurr\nitype: 3\nPast inhabitant of planet [b]Pueri Meritorii[/b], sentenced for sex work with untreated STD. Original sentence was 10 years, it has been extended to indefinite due to circumstances in the prison.\nNOTE: THIS INMATE IS OWNED BY INMATE 533, PLEASE REFER TO MENTIONED INMATE ABOUT ALL MATTERS PERTAINING TO THIS INMATE",\ +"": ""} func _init(): id = "ClosetComputer" @@ -15,7 +15,7 @@ func reactToCommand(_command:String, _args:Array, _commandStringRaw:String): if _args.size() == 3: if _args[0].to_upper() == "SELECT": if _args[1].to_lower() == "inmates": - var record = records.get(_args[2]) + var record = records.get(_args[2]) if _args[2] != GM.pc.getInmateNumber() else preparePCRecord() if record == null: return "No record with primary key of `"+_args[1]+"` has been found!" return printRecord(record) @@ -24,7 +24,11 @@ func reactToCommand(_command:String, _args:Array, _commandStringRaw:String): else: return "`sqleasy` supports only read operations using SELECT." else: - return "sqleasy makes SQL easy for you! Instead of knowing all this useless syntax, you only need to know the table name, ID from the primary key and SELECT!\n\nSyntax: SELECT \n\nIt will show you all columns corresponding to a record with given ID!\n©Lain (YOU ARE USING UNLICENSED COPY, PLEASE ACTIVATE YOUR VERSION WITH LICENSE!)" + return "sqleasy makes SQL easy for you! Instead of knowing all this useless syntax, you only need to know the table name, ID from the primary key and SELECT!\n\nSyntax: SELECT
show record\nquit close the database\n\nIt will show you all columns corresponding to a record with given ID!\n©Lain (YOU ARE USING UNLICENSED COPY, PLEASE ACTIVATE YOUR VERSION WITH LICENSE!)" + + if _command in ["quit", "disconnect", "q", "exit"]: + connectedTo = "127.0.223" + return "Closing database... Success" if(connectedTo == "127.0.223"): # TODO Finish computer UwU @@ -94,7 +98,7 @@ func reactToCommand(_command:String, _args:Array, _commandStringRaw:String): var fileIndex = _args[0] if(fileIndex in ["1", "inmates.db"]): if loggedAsAdmin: - return "�v�KtablefilesfilesCREATE TABLE inmates (\nid INTEGER NOT NULL, \nfirst_name TEXT, \nlast_name TEXT, \nnotes TEXT, \nPRIMARY KEY (id)\n#��������������������������{uoic]WQKE?93-'! smga[UOIC=71+% [corrupt]garbaaaageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee[/corrupt]\n" + return "�v�KtablefilesfilesCREATE TABLE inmates (\nid INTEGER NOT NULL, \nfirst_name TEXT, \nlast_name TEXT, \nitype INTEGER, \nnotes TEXT, \nPRIMARY KEY (id)\n#��������������������������{uoic]WQKE?93-'! smga[UOIC=71+% [corrupt]garbaaaageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee[/corrupt]\n" else: return "cat: inmates.db: Permission denied" else: @@ -175,8 +179,15 @@ func reactToCommand(_command:String, _args:Array, _commandStringRaw:String): return "Error, unknown command. Use 'help' to list all available commands" -def printRecord(record:String) -> String: - return "" +func preparePCRecord() -> String: + var player_crimes = {Flag.Crime_Type.Innocent: "pleaded innocent, got sentenced with no evidence (typical for our courts)", Flag.Crime_Type.Theft: "sentenced for theft of property", Flag.Crime_Type.Murder: "sentenced for murder", Flag.Crime_Type.Prostitution: "sentenced for providing sexual services without a license"} + var output = "ID: "+GM.pc.getInmateNumber()+"\nfirstname: "+GM.pc.getName()+"\nlastname: [corrupt]noidea[/corrupt]\nitype: "+str(InmateType.getAll().find(GM.pc.inmateType)+1) + output += "\n\nnotes: [corrupt]Past inhabitant of planet -------------- [/corrupt], sentenced for "+player_crimes.get(GM.main.getFlag("Player_Crime_Type"))+". Indefinite sentence." + output += "\n" # note escapades with tavi + return output + +func printRecord(record:String) -> String: + return record func saveData(): var data = .saveData() diff --git a/Modules/IssixModule/Scenes/IssixTalkMain.gd b/Modules/IssixModule/Scenes/IssixTalkMain.gd index d4dd406..c176698 100644 --- a/Modules/IssixModule/Scenes/IssixTalkMain.gd +++ b/Modules/IssixModule/Scenes/IssixTalkMain.gd @@ -195,6 +195,7 @@ func _run(): if(state == "join"): var score = calculateHaremScore() + #var pets = [getModuleFlag("IssixModule", "Azazel_Affection_given", 0), getModuleFlag("IssixModule", "Lamia_Times_Helped", 0), getModuleFlag("IssixModule", "Hiisi_Affection", 0)] var score_explored = GM.main.getModuleFlag("IssixModule", "Score_Explored") saynn("[say=pc]"+RNG.pick(["What would you say about me becoming one of your pets?", "Do you think I would fit in with your harem?", "I'd like to become one of your pets, is this possible?"])+"[/say]") if(GM.pc.getPersonality().getStat(PersonalityStat.Subby) < 0): diff --git a/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd b/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd index 110c592..76eb7e9 100644 --- a/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd +++ b/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryIntroContScene.gd @@ -68,6 +68,7 @@ func _react(_action: String, _args): setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+5) else: setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+2) + GM.pc.getSkillsHolder().addPerk("PetWalkies") if _action == "walkies2": processTime(4*60) diff --git a/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd b/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd index 95c5576..19f62cd 100644 --- a/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd +++ b/Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingBowlScene.gd @@ -74,6 +74,7 @@ func _react(_action: String, _args): if(_action == "endthescene"): increaseModuleFlag("IssixModule", "PC_Training_Level") increaseModuleFlag("IssixModule", "Progression_Points") + GM.pc.getSkillsHolder().addPerk("BowlTraining") var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []}) scenes["scenes_seen"].append(sceneID) GM.main.setModuleFlag("IssixModule", "Misc_Slavery_Info", scenes.duplicate(true)) diff --git a/Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd b/Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd index 9a5b3f6..0a5bcc2 100644 --- a/Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd +++ b/Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd @@ -68,7 +68,7 @@ func _run(): if state == "issixpetmenu": addCharacter("issix") - saynn("[say=issix]"+getMoodMessage()+"[/say]") + saynn("[say=issix]"+getSituationalMessage() + " " + getMoodMessage()+"[/say]") saynn("Is there anything you want to do with Master?") if GM.pc.hasBreastsFullOfMilk(): saynn("[say=issix]{pc.Name}, wouldn't you want to unburden your heavy chest a little?[/say]") @@ -135,6 +135,9 @@ func _run(): else: # TODO I'll wait with this path for TF changes to land in main, perhaps player could become a female cow for Master? addDisabledButton("Cow cow!", "Become a cow for your Master (transformation, WIP (likely very distant future if ever))") + if milk_result[2] > 0: + saynn("[say=issix]You know, since your milk already brings me some profit I don't mind giving you a small share, perhaps my pet would want to get something for himself huh? Do you? Aww. Of course you do. Have this.[/say]") + addButton("Continue", "Come back to your senses", "issixpetmenu") if state == "haremeat": @@ -273,18 +276,127 @@ func _run(): var _ok = textBox.connect("text_entered", self, "onTextBoxEnterPressed") addButton("Confirm", "Guess this number", "littercountresult") - if state == "hiisipetmenu": playAnimation(StageScene.Duo, "kneel", {pc="hiisi", npcAction="kneel", npc="pc", bodyState={naked=false, hard=false}}) addCharacter("hiisi") - if GM.pc.getSkillLevel(Skill.Combat) < 16: - addDisabledButton("Learn", "Learn something from Hiisi (WIP)") # , "hiisilearncombat" + if GM.pc.getSkillLevel(Skill.Combat) < 16: # Just thought about it, it just may be the only way to skill this up in pacifist way to do skill checks on combat, that's awesome + if getModuleFlag("IssixModule", "Trained_With_Hiisi_Combat", false) != true: + addButtonWithChecks("Learn", "Learn something from Hiisi (requires Energy Drink)", "hiisilearncombat", [], [[ButtonChecks.HasItemID, "EnergyDrink"], [ButtonChecks.HasStamina]]) + else: + addDisabledButton("Learn", "You've trained with Hiisi today already, both you and he need a break") else: addDisabledButton("Learn", "There isn't anything more you can learn from Hiisi about combat") addDisabledButton("Sex", "Ask for sex with Hiisi (WIP)") # , "hiisisexrequest" addButton("Back", "Go back", "") + + if state == "hiisilearncombatfirst": + playAnimation(StageScene.Yoga, "warrior", {pc="hiisi", bodyState={naked=true}}) + saynn("Figuring Hiisi might need an encouragement to teach you something, you prepare an energy drink to further convince the canine to teach you combat.") + saynn("[say=pc]Hey Hissi, I were wondering, you seem to know how to fight, any chance you could perhaps teach me something?[/say]") + saynn("Hiisi looks at you, surprised a little.") + saynn("[say=hiisi]Teach? Combat... I'm not so sure, I don't think I'm a good teacher material.[/say]") + saynn("[say=pc]I think you'd do great Hiisi.[/say]") + saynn("[say=hiisi]I don't think it's a great idea.[/say]") + saynn("[say=pc]Can I convince you with this then?[/say]") + saynn("You show an energy drink to Hiisi.") + saynn("[say=hiisi]Oh. Hmm... Alright, I can teach you, but I expect the same for every lesson, alright?[/say]") + saynn("[say=pc]Deal.[/say]") + saynn("[say=hiisi]Cool.[/say]") + if GM.pc.hasEffect(StatusEffect.Yoga) or GM.pc.hasEffect(StatusEffect.WorkOutLight) or GM.pc.hasEffect(StatusEffect.WorkOut): + saynn("Canine begins stretching, he also loses his clothes, makes sense. You do some light stretching but you recently stretched a fair bit so you are ahead in this regard") + else: + saynn("Canine begins stretching, he also loses his clothes, makes sense. He gesticulates you should start exercising as well, which you promptly start doing. You do some pull-ups, squats, planks... Eventually you feel pretty good about your form for today's training.") + saynn("[say=hiisi]Oh, forgot to ask, how advanced are you in combat?[/say]") + var combat_level = GM.pc.getSkillLevel(Skill.Combat) + if combat_level < 3: + saynn("[say=pc]Absolute novice, I didn't have much combat experience.[/say]") + saynn("[say=hiisi]I see... I guess we will start with basics then and go from there.[/say]") + elif combat_level < 7: + saynn("[say=pc]I have some experience. Fought here and there.[/say]") + saynn("[say=hiisi]Hmm... Your posture seems right so I assume you already know the basics, we will focus on other things then[/say]") + elif combat_level < 12: + saynn("[say=pc]I think I'm pretty good actually, thought I'm sure there is still plenty I can learn from you.[/say]") + saynn("[say=hiisi]Judging from your posture alone, it does seem like you know your shit. Can you show how you punch?[/say]") + saynn("You do attempt punch and freeze your arm.") + saynn("[say=hiisi]Yeah, that's good. There are small details you'll have to perfect but that's about it.[/say]") + else: + saynn("[say=pc]I fight regularly, so I have plenty of experience, I'm really looking for someone I can spar with and you seem pretty capable yourself.[/say]") + saynn("[say=hiisi]I didn't really agree to be a sparring partner, but I'm sure there is still something to perfect with your form so lets proceed.[/say]") + addButton("Training", "Start training under watchful eye of Hiisi", "hiisilearncombattraining") + + if state == "hiisilearncombatrepeat": + saynn("[say=pc]Student {pc.name} arrived for training![/say]") + saynn("You smile at Hiisi while doing a salute. Hiisi attempts to hide his blush.") + saynn("[say=hiisi]You don't have to do thaaaat. Anyways, do you have the goods?[/say]") + saynn("You pass the energy drink to Hiisi, he catches it and puts near his blanket.") + saynn("[say=pc]Don't overdose on those![/say]") + saynn("[say=hiisi]Yeah, sure, sure. Let's start.[/say]") + addButton("Training", "Start training under watchful eye of Hiisi", "hiisilearncombattraining") + + if state == "hiisilearncombattraining1": + playAnimation(StageScene.Solo, "stand", {pc="hiisi", bodyState={naked=true}}) + saynn("[say=hiisi]Since you are still a baby as far as combat goes, first you need to understand the basics of posture.[/say]") + + saynn("He stands with his two legs having a sizable gap in-between, marginally bended knees, his back straight and paws curled into fists in front of him. You attempt to replicate his posture.") + + saynn("[say=hiisi]Extend your arm here a little, yes, like that. More space in between your legs, you don't want someone to just push you and lose your balance, that leg is there to keep you steady. Face the opponent, like this, yes. Good. Keep your back straight, can be a little curved if that's better for you, every species have a little different balance but basis for stance is the same for each and every of them.[/say]") + saynn("He gives you tips on posture here and there, you start to understand more and more about combat. After 25 minutes of training you feel like you can't take much more of advice for today, it's been a productive session.") + saynn("[say=pc]Thank you Hiisi, I think I learned a bunch from you.[/say]") + saynn("[say=hiisi]No problem, and remember about energy drink![/say]") + saynn("[say=pc]Yeah, yeah, sure.[/say]") + addButton("End", "End training for today", "hiisipetmenu") + + if state == "hiisilearncombattraining2": + playAnimation(StageScene.Solo, "punch", {pc="hiisi", bodyState={naked=true}}) + saynn("[say=hiisi]You know a little about training already, how about we add a few things to that knowledge?[/say]") + + saynn("He stands with his two legs having a sizable gap in-between, marginally bended knees, his back straight and paws curled into fists in front of him. He punches the air a few times with fists of his right paw, you observe the quick moves. He switches to punching with left fist a few times.") + + saynn("[say=hiisi]What matters is you and your opponent. Observation is very important part of fight, you react to what your opponent does. It must be like a reflex for you. Those who don't have reflexes can't predict how their opponent is going to behave, that's why it needs training, best in real sparring.[/say]") + saynn("You replicate the punches he thrown, sort of, at the very least you try your best. Hiisi corrects you fairly often, pointing out your countless mistakes, making reflexes a thing can be hard when you still have to think about your posture. 25 minutes pass and you decide that's enough of punching air for today.") + saynn("[say=pc]That was enlightening, thanks Hiisi![/say]") + saynn("[say=hiisi]Sure, see you later![/say]") + saynn("[say=pc]Yup.[/say]") + addButton("End", "End training for today", "hiisipetmenu") + + if state == "hiisilearncombattraining3": + playAnimation(StageScene.Solo, "kick", {pc="hiisi", bodyState={naked=true}}) + saynn("[say=hiisi]Combat is surely not something new to you anymore. But lets take it to the next level.[/say]") + + saynn("He stands with his two legs having a sizable gap in-between, marginally bended knees, his back straight and paws curled into fists in front of him. He throws punches but he also involves his legs in the mixture. It occurs to you that it's a bit funny seeing him fight with invisible opponent.") + + saynn("[say=hiisi]To fight, you must involve your entire body, not just arms, not just legs but entire body.[/say]") + if GM.pc.hasHorns(): + saynn("[say=pc]Can I utilize horns?[/say]") + saynn("He looks at you bewildered, before his face is replaced with heavy thinking.") + saynn("[say=hiisi]That's... Yeah, that's something you can definitely do. It's good that you are thinking about your ENTIRE body. Horns are sturdy and can do plenty damage if used in appropriate moment.[/say]") + + saynn("He continues to give you guidance as he shows a few moves he knows. He teaches you how to react to different body cues coming from your opponent. Punching air gets tiring pretty quick and you decide to rest for today.") + saynn("[say=pc]I feel like I'm getting better at this, thank you Hiisi![/say]") + saynn("[say=hiisi]Of course, I feel like I might actually not be too bad as a teacher.[/say]") + saynn("[say=pc]You are great! Seriously, I learn so much from you.[/say]") + saynn("Canine blushes and waves you off") + addButton("End", "End training for today", "hiisipetmenu") + + if state == "hiisilearncombattraining4": + playAnimation(StageScene.Solo, "dodge", {pc="hiisi", bodyState={naked=true}}) + saynn("[say=hiisi]There is little more I can teach you, but I can try. Master is a lot more skilled in combat than I'm, maybe he could help?[/say]") + + saynn("He stands with his two legs having a sizable gap in-between, marginally bended knees, his back straight and paws curled into fists in front of him. He throws punches but he also involves his legs in the mixture. You can feel tense energy in the air, he gives it all and his technique is pretty refined, you can feel he doesn't do anything „simple” and doesn't try to make it easy to digest for you, this is high level.") + + saynn("[say=hiisi]All of the techniques you already learned must be perfected to work together, body posture, reflexes, proper technique on punches and kicks. You observe your opponent and choose the best course of action, rely on intuition, it's faster than reason.[/say]") + + saynn("You repeat the process over and over, you stand alongside Hiisi and try to synchronize your body with his, you imagine your opponent in front of you and try to beat them. Hiisi laughs.") + saynn("[say=hiisi]That's pretty good, good. I'm pretty proud of you, combat is no stranger to you anymore.[/say]") + saynn("[say=pc]Yeah! I feel plenty powerful, like... I could take down so many bullies![/say]") + saynn("[say=hiisi]*chuckle* Don't get ahead of yourself. You need not to underestimate the opponent, the one who does - loses. Treat each and every opponent as someone who knows their shit so they don't knock you down when you fall to your pride. You are not Master.[/say]") + saynn("[say=pc]What do you mean by that? I mean, Master sure looks well-built and I'm sure he can defend himself, but is he this good?[/say]") + saynn("[say=hiisi]I truthfully believe that if he wanted he could take down all guards with his bare fists. He is Master not only in name but in combat as well.[/say]") + saynn("It makes you wonder just how good your Master must be to hear such praise from someone like Hiisi about him,") + addButton("End", "End training for today", "hiisipetmenu") + if state == "lamiapetmenu": playAnimation(StageScene.Duo, "kneel", {pc="lamia", npcAction="kneel", npc="pc", bodyState={naked=false, hard=false}}) addCharacter("lamia") @@ -293,8 +405,17 @@ func _run(): addButton("Pets", "Ask for pets", "lamiapetrequest") else: addDisabledButton("Pets", "You've asked for headpats today already!") + if GM.pc.getInventory().hasRemovableRestraintsNoLockedSmartlocks(): + addButton("Get help", "Get Lamia's help with bondage gear that is on you", "lamiahelpbondage") + else: + addDisabledButton("Get help", "You are currently not bound by anything that Lamia could help you with") addButton("Back", "Go back", "") + if state == "lamiahelpbondage": + saynn("[say=pc]Hey, Lamia, uhhh, could you help getting me out of those?[/say]") + saynn("Lamia gives you a look and nods, they come up to you and start helping you out of your various bondage gear you have on yourself.\nFinally you are no longer burdened by all that bondage gear on your body. Lamia smiles at you and gives you a pat before returning to their usual activity.") + addButton("Back", "Continue", "lamiapetmenu") + if state == "lamiapetrequestfirst": saynn("A fox breed is consumed by snacking on food in their pet bowl.") if GM.pc.getPersonality().getStat(PersonalityStat.Coward) > 0.3: @@ -382,6 +503,30 @@ func getTimeSpentReadable(): return "[color=red]0 minutes[/color]" return "[color="+("green" if isTimeOkey() else "red")+"]"+ Util.getTimeStringHumanReadable(getTimeSpent()) + "[/color]" +func getSituationalMessage(): + var responses = [] + if GM.pc.isWearingHypnovisor(): + responses.append("Making sure you stay obedient for your Master with that thing? That's cute. I like it.") + if GM.pc.isHeavilyPregnant(): + responses.append("Almost ready for kits? Wonder how many of them are mine.") + if GM.pc.isCoveredInPiss(): + responses.append("Love to see you smelling of urine.") + if GM.pc.isInHeat(): + responses.append("I can smell your love juices from here, is my pet in heat? Aww. You need a good fuck don't you?") + if GM.pc.isWearingPortalPanties() and GM.pc.isFullyNaked(): + responses.append("Personally not a fan of those new technologies, what's fun about fucking someone when you can't feel them wriggle in your arms?") + if GM.pc.isMuzzled(): + responses.append("All bark no bite haha. I love when my pets come to me with equipment befitting their role in life.") + if GM.pc.hasBoundLegs() and GM.pc.hasBlockedHands() and GM.pc.hasBoundArms() and GM.pc.isBlindfolded() and GM.pc.isOralBlocked() and GM.pc.getInventory().hasItemIDEquipped("ropeharness"): + responses.append("*whistles* You look like a rope bunny to me, in this place it screams „I consent to everything”, quite dangerous if you ask me, but fuck, if you like it maybe you don't mind being a rape bait for everyone in this facility.") + if GM.pc.hasBoundLegs(): + responses.append("Do you enjoy struggling with walking so much? I hope you do.") + if GM.pc.hasBlockedHands(): + responses.append("Fuck yes. It gotta be one of my favorite things when my pet's paws are reduced to absolutely useless mittens. I think this look befits you, in fact, I think you should wear them permanently.") + if GM.pc.getInventory().hasItemIDEquipped("GasMask"): + responses.append("Where the hell have you found that thing? A fucking gas mask? Damn. Did not expect that.") + return "" + func getMoodMessage(): var issix_mood = getModuleFlag("IssixModule", "Issix_Mood", 50) if issix_mood < 10: @@ -416,7 +561,6 @@ func getMood(): else: return "[color=green]excellent[/color]" - static func playerToFuck(): return (int(GM.main.getDays()) % 2 == 1) and GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "") == "pc" @@ -477,10 +621,15 @@ func _react(_action: String, _args): if _action == "issixmilkingresult": var this_milking = GM.pc.milk() + var credits = 0 var total_milk_obtained = getModuleFlag("IssixModule", "Total_Fluids_Milked", {"Milk": 0.0}) # Currently only fluid implemented in base game total_milk_obtained["Milk"] = total_milk_obtained["Milk"] + this_milking setModuleFlag("IssixModule", "Total_Fluids_Milked", total_milk_obtained) - milk_result = [this_milking, total_milk_obtained["Milk"]] + if this_milking > 500 and total_milk_obtained["Milk"] > 3000: + credits = clamp(int(floor(sqrt(this_milking / 100.0) / 1.3)) - 15, 0.0, 300.0) + if credits > 0: + addMessage("Your Master passes to you "+str(credits)+" credits.") + milk_result = [this_milking, total_milk_obtained["Milk"], credits] setModuleFlag("IssixModule", "Has_Been_Milked_Today", true) if _action == "littercountresult": @@ -498,6 +647,34 @@ func _react(_action: String, _args): if not reply_litter > 100: registerOffspringGuess() + if _action == "hiisilearncombat": + if GM.main.getModuleFlag("IssixModule", "Trained_With_Hiisi_Combat") == null: + _action = "hiisilearncombatfirst" + else: + _action = "hiisilearncombatrepeat" + GM.pc.getInventory().removeXOfOrDestroy("EnergyDrink", 1) + addMessage("You've given away 1 energy drink.") + + if _action == "hiisilearncombattraining": + processTime(25*60) + var skill = GM.pc.getSkillsHolder().getSkill(Skill.Combat) + var exp_calc = 25 + if skill != null: + exp_calc = int(skill.getRequiredExperience(skill.getLevel()+1)/4) + GM.pc.addSkillExperience(Skill.Combat, exp_calc) # Needs <4 trainings per level, to not be too OP + addMessage("You've gained "+str(exp_calc)+"XP in Combat thanks to training with Hiisi.") + GM.main.setModuleFlag("IssixModule", "Trained_With_Hiisi_Combat", true) + GM.pc.addStamina(-80) + var combat_level = GM.pc.getSkillLevel(Skill.Combat) + if combat_level < 3: + _action = "hiisilearncombattraining1" + elif combat_level < 7: + _action = "hiisilearncombattraining2" + elif combat_level < 12: + _action = "hiisilearncombattraining3" + else: + _action = "hiisilearncombattraining4" + if _action == "azazelguesslitterstare": GM.pc.addEffect(StatusEffect.Suggestible, [20]) GM.pc.addLust(100) @@ -525,6 +702,17 @@ func _react(_action: String, _args): _: _action = "azazelguesslitterfun" + if _action == "lamiahelpbondage": + var bondage = GM.pc.getInventory().getEquppedRemovableRestraintsNoLockedSmartlocks() + processTime(bondage.size()*60) + for item in bondage: + if RNG.chance(99): + GM.pc.getInventory().unequipItem(item) + addMessage(item.getVisibleName()+ " has been taken off you and added back to your inventory") + else: + GM.pc.getInventory().removeEquippedItem(item) + addMessage(item.getVisibleName()+ " has been taken off but has been damaged beyond repair, Lamia discards the item into the trash bin") + if _action == "passtime": processTime(15*60) _action = "" diff --git a/Modules/IssixModule/Skills/Images/bowl.png b/Modules/IssixModule/Skills/Images/bowl.png new file mode 100644 index 0000000000000000000000000000000000000000..57b006e581a0aa5b756751a014d7fedb80bbaeda GIT binary patch literal 3049 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 literal 0 HcmV?d00001 diff --git a/Modules/IssixModule/StatusEffects/catnipoverdose.png.import b/Modules/IssixModule/StatusEffects/catnipoverdose.png.import new file mode 100644 index 0000000..47d84f2 --- /dev/null +++ b/Modules/IssixModule/StatusEffects/catnipoverdose.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/catnipoverdose.png-eda69f9f042ff6dec39ecd15f09e9f3a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Modules/IssixModule/StatusEffects/catnipoverdose.png" +dest_files=[ "res://.import/catnipoverdose.png-eda69f9f042ff6dec39ecd15f09e9f3a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=0 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0