Issix-mod/Modules/IssixModule/Module.gd
Frisk 2e86208e04 Rewrote calculation for walk delays
Fixes to class extensions to make the code work as a mod
Fixed Issix breeding schedule
Fixed crash when player without Pet skill
Improved donation scene so only new tasks get applied
Fixed donation counting
Started working on Pasture Walk scene
Added Trash can functionality to remove empty condoms
Added dialogue for Issix to remove PC's keyholder Slut locks locked by Issix
Fixes to Azazel's fertility training
2025-02-21 02:02:28 +01:00

415 lines
20 KiB
GDScript

extends Module
class_name IssixModule
# If a var matches with your config ID, the config option will be sycronized with the config value
var characterCoverage = "fur"
const Globals = preload("res://Modules/IssixModule/Globals.gd")
func onFoxLibModInit(foxModuleAPI):
foxModuleAPI.addListOption("characterCoverage", "Character's coverage", [["fur", "Fur"], ["skin", "Skin"], ["scales", "Scales"]], "Pick how to refer to what kind of coverage your character has", "fur")
func getFlags():
return {
"Issix_Introduced": flag(FlagType.Bool),
"Pets_Introduced": flag(FlagType.Bool),
"Score_Explored": flag(FlagType.Number),
"Quest_Status": flag(FlagType.Number),
"Quest_Rejected_By_Issix": flag(FlagType.Number),
"Azazel_Catnip_noticed": flag(FlagType.Bool),
"Azazel_Catnip_taken_today": flag(FlagType.Bool),
"Azazel_Affection_given": flag(FlagType.Number),
"Lamia_Times_Helped": flag(FlagType.Number),
"Hiisi_Affection": flag(FlagType.Number),
"Hiisi_Put_Sabotaged_Headvisors": flag(FlagType.Bool),
"Helped_Lamia_With_Drawings_Today": flag(FlagType.Bool),
"Quest_Bonked": flag(FlagType.Bool),
"Quest_Wait_Another_Day": flag(FlagType.Bool),
"Activated_Cabinets": flag(FlagType.Dict),
"Medical_Peeked": flag(FlagType.Bool),
"QuestionnaireQ1": flag(FlagType.Bool), # Creatures possess a soul
"QuestionnaireQ2": flag(FlagType.Bool),
"QuestionnaireQ3": flag(FlagType.Text),
"QuestionnaireQ4": flag(FlagType.Bool),
"QuestionnaireQ5": flag(FlagType.Text),
"QuestionnaireQ6": flag(FlagType.Bool),
"QuestionnaireQ7": flag(FlagType.Bool),
"QuestionnaireQ8": flag(FlagType.Text),
"QuestionnaireQ9": flag(FlagType.Bool),
"QuestionnaireQ10": flag(FlagType.Number),
"QuestionnaireQ11": flag(FlagType.Bool),
"Lamia_Is_Hungry": flag(FlagType.Bool),
"Azazel_Sky_Response": flag(FlagType.Bool),
"Azazel_Catnip_given_today": flag(FlagType.Number),
"Received_Portrait_From_Lamia": flag(FlagType.Bool),
"Placed_Portrait_In_Cell": flag(FlagType.Bool),
"Hissi_RPS_data": flag(FlagType.Dict),
"Hiisi_Name_Helped": flag(FlagType.Bool),
"Shared_Marshmallows": flag(FlagType.Bool),
"Saw_Azazel_Naked": flag(FlagType.Bool),
"Lamia_Chosen_Drawing": flag(FlagType.Text),
"PC_Saw_Artwork_At_Lamias": flag(FlagType.Bool),
"Hiisi_Crossword_Used": flag(FlagType.Number),
"Hiisi_Helped_Today": flag(FlagType.Bool),
"Azazel_Corruption_Scene": flag(FlagType.Number),
"Azazel_Had_Corruption_Scene_Today": flag(FlagType.Bool),
"Azazel_Agreed_Kiss": flag(FlagType.Bool),
"Azazel_Corruption_Musk_Happened": flag(FlagType.Bool),
"Azazel_Player_Donated_Gasmask": flag(FlagType.Bool),
"Azazel_In_Dream": flag(FlagType.Bool),
"Azazel_Corr_Dream_State": flag(FlagType.Dict),
"Azazel_Corr_BDSM_Gear": flag(FlagType.Bool),
"Hiisi_Encounter_scene": flag(FlagType.Number),
"Hiisi_Had_Encounter_Scene_Today": flag(FlagType.Bool),
"Issix_Donation_Meter": flag(FlagType.Number),
"Issix_Used_Donations": flag(FlagType.Number),
"Got_Luck_Token_Before": flag(FlagType.Bool),
"Announcer_PC_Naive": flag(FlagType.Bool),
# Slavery related
"PC_Enslavement_Role": flag(FlagType.Number),
"PC_Enslavement_Noncon": flag(FlagType.Bool),
"PC_Training_Level": flag(FlagType.Number),
"Issix_Mood": flag(FlagType.Number),
"Todays_Bred_Slave": flag(FlagType.Text),
"Progression_Day_Next": flag(FlagType.Number),
"Last_Day_Visited_Master": flag(FlagType.Number),
"Misc_Slavery_Info": flag(FlagType.Dict),
"Taught_To_Use_Bowl": 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
"Last_Walk": flag(FlagType.Number),
"Eaten_Today": flag(FlagType.Bool),
"Comic_Books": flag(FlagType.Number),
"Comic_Book_Unlocked": flag(FlagType.Bool),
"Strikes_For_Disobedience": flag(FlagType.Number),
"Unwelcome_At_Corner": flag(FlagType.Bool),
"Had_Sex_With_Issix": flag(FlagType.Bool),
"Litter_Guessing_Game": flag(FlagType.Dict),
"Have_Received_Headpats_Lamia": flag(FlagType.Bool),
"Received_Headpats_From_Lamia": flag(FlagType.Number),
"Total_Fluids_Milked": flag(FlagType.Dict),
"Has_Been_Milked_Today": flag(FlagType.Bool),
"Submission": flag(FlagType.Number),
"Trained_With_Hiisi_Combat": flag(FlagType.Bool),
"PC_Pet_Didnt_Fullfill_Daily": flag(FlagType.Bool),
"PC_Pet_Didnt_Mate": flag(FlagType.Bool),
"PC_Bad_Sex": flag(FlagType.Number),
"Hiisi_Protects_PC": flag(FlagType.Bool),
"Azazel_Fertility_Training_Today": flag(FlagType.Bool),
"Had_Previously_Trained_Fertility_LVL1": flag(FlagType.Bool),
"Trained_Pet_Today": flag(FlagType.Bool),
"PC_Should_Be_Punished": flag(FlagType.Number),
"PC_Should_Be_Rewarded": flag(FlagType.Number),
"Did_Task_Today": flag(FlagType.Bool),
"Drone_Task_Timeout": flag(FlagType.Number), # 0 = everything is fine, -1 = drone lost, 0> day at which when the task can resume,
"Drone_Flight_Unlocked": flag(FlagType.Bool), # null = locked, false = unlocked, true = flew in the past
"Learned_Commands": flag(FlagType.Bool)
}
func _init():
id = "IssixModule"
author = "Frisk"
events = [
"res://Modules/IssixModule/Events/EngRoomClosetEvent.gd",
"res://Modules/IssixModule/Events/EventTileOnEnter.gd",
"res://Modules/IssixModule/Events/GreenhouseCatnipEvent.gd",
"res://Modules/IssixModule/Events/IssixQuestionnaireEvent.gd",
"res://Modules/IssixModule/Events/MedicalPeekEvent.gd",
"res://Modules/IssixModule/Events/PetWalkExamEvent.gd",
"res://Modules/IssixModule/Events/PlayerCellModifierEvent.gd",
"res://Modules/IssixModule/Events/CornerPriorityEvent.gd",
"res://Modules/IssixModule/Events/SlaveryIntroEvent.gd",
"res://Modules/IssixModule/Events/IssixRegularSearch.gd",
"res://Modules/IssixModule/Events/LamiaCellEvent.gd",
"res://Modules/IssixModule/Events/TalkNovaEvent.gd",
"res://Modules/IssixModule/Events/PetWanderEvent.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/StopsEvent.gd",
"res://Modules/IssixModule/Events/AnnouncerLuckTokenEvent.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/DemonPetsEvent.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/LongCorridorEvent.gd",
"res://Modules/IssixModule/Events/SlaveryScreenOpen.gd"
]
scenes = [
"res://Modules/IssixModule/Scenes/EngRoomScene.gd",
"res://Modules/IssixModule/Scenes/GreenhouseCatnipStealScene.gd",
"res://Modules/IssixModule/Scenes/IssixQuestionnaireScene.gd",
"res://Modules/IssixModule/Scenes/IssixTalkMain.gd",
"res://Modules/IssixModule/Scenes/MedicalPeekScene.gd",
"res://Modules/IssixModule/Scenes/NoPetsTalkMain.gd",
"res://Modules/IssixModule/Scenes/PetsTalkMain.gd",
"res://Modules/IssixModule/Scenes/PetWalkExamScene.gd",
"res://Modules/IssixModule/Scenes/PlayerCellModifierScene.gd",
"res://Modules/IssixModule/Scenes/Overwrites/EatInCanteenScene.gd",
"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/SlaveryIntroScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixBringsComicbooks.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd",
"res://Modules/IssixModule/Scenes/IssixNovaTalkScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene2.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene3.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelCorruptionScene4.gd",
"res://Modules/IssixModule/Scenes/HiisiScenes/HiisiWanderScene.gd",
"res://Modules/IssixModule/Scenes/HiisiScenes/HiisiWanderScene2.gd",
"res://Modules/IssixModule/Scenes/HiisiScenes/HiisiWanderScene3.gd",
"res://Modules/IssixModule/Scenes/IssixDonationScene.gd",
"res://Modules/IssixModule/Scenes/AnnouncerLuckTokensDialogue.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/DemonAzazelTalkScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/DemonHiisiTalkScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/DemonLamiaTalkScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/FountainScene.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/FinalIssixDrugScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/RescueFromFightScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/GenericTrainSessionScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/WalkiesTrainingScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/PunRew/IssixPawJobScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingCommandsScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingCommandsContScene.gd",
"res://Modules/IssixModule/Scenes/Tasks/DroneFinder.gd",
"res://Modules/IssixModule/Scenes/Tasks/HiisiLaundry.gd"
]
characters = [
"res://Modules/IssixModule/Characters/AzazelCharacter.gd",
"res://Modules/IssixModule/Characters/HiisiCharacter.gd",
"res://Modules/IssixModule/Characters/IssixCharacter.gd",
"res://Modules/IssixModule/Characters/LamiaCharacter.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/AzazelDemonCharacter.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/HiisiDemonCharacter.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/LamiaDemonCharacter.gd"
]
gameExtenders = [
"res://Modules/IssixModule/GameExtender/processTimeCatcher.gd"
]
worldEdits = [
"res://Modules/IssixModule/IssixWorldEdit.gd",
"res://Modules/IssixModule/Scenes/AzazelCorruption/HackMainScene.gd",
]
items = [
"res://Modules/IssixModule/Items/BellCollar.gd",
"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/LuckToken.gd"
]
quests = [
"res://Modules/IssixModule/IssixPetQuest.gd"
]
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",
"res://Modules/IssixModule/Skills/Perks/Relocated.gd",
]
statusEffects = [
"res://Modules/IssixModule/StatusEffects/BrandingPain.gd",
"res://Modules/IssixModule/StatusEffects/CatnipOverdose.gd"
]
speechModifiers = [
"res://Modules/IssixModule/SpeechModifiers/CatnipSpeech.gd",
"res://Modules/IssixModule/SpeechModifiers/LamiaMute.gd",
"res://Modules/IssixModule/SpeechModifiers/PetTalk.gd",
"res://Modules/IssixModule/SpeechModifiers/AzazelDemon.gd",
]
GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/")
GlobalRegistry.registerSkinsFolder("res://Modules/IssixModule/Skins/")
GlobalRegistry.registerMapFloorFolder("res://Modules/IssixModule/Floors/")
GlobalRegistry.registerAttackFolder("res://Modules/IssixModule/Attacks/", true)
func postInit():
# Overwrite scenes for dealing with bullies, they need to be initiated in here due to module initialization order overwriting our modules
GlobalRegistry.registerScene("res://Modules/IssixModule/Scenes/Overwrites/BullyGangScene.gd", "Rahi") # Still consider it mostly Rahi's creation'
GlobalRegistry.registerEvent("res://Modules/IssixModule/Events/Overwrites/BullyGangEvent.gd")
# var console_commands = load("res://Modules/IssixModule/Internal/ConsoleCommands.gd")
# if(!console_commands):
# Log.printerr("ERROR: couldn't load console_commands from path ")
# return
# var commands = console_commands.new()
# commands.init()
GlobalRegistry.registerPawnType("res://Modules/IssixModule/Internal/Guard.gd")
#GM.ES.registerEventTrigger("OpeningSlaveryScreen", EventTriggerLocation.new()) # TODO Find a way to do that
# https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd, credits to harrygiel, Mariusz Chwalba and Vladimir Panteleev
func installScriptExtension(childScriptPath:String):
var childScript = ResourceLoader.load(childScriptPath)
# Force Godot to compile the script now.
# We need to do this here to ensure that the inheritance chain is
# properly set up, and multiple mods can chain-extend the same
# class multiple times.
# This is also needed to make Godot instantiate the extended class
# when creating singletons.
# The actual instance is thrown away.
childScript.new()
var parentScript = childScript.get_base_script()
var parentScriptPath = parentScript.resource_path
print("ModLoader: Installing script extension: %s <- %s" % [parentScriptPath, childScriptPath])
childScript.take_over_path(parentScriptPath)
static func handleUpdates():
if (GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) >= 1): # if enslaved
if GM.main.getModuleFlag("IssixModule", "Hiisi_Protects_PC") == null: # Hiisi protecting the player by default if enslaved
GM.main.setModuleFlag("IssixModule", "Hiisi_Protects_PC", true)
static func addSceneToWatched(scene: String):
var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
scenes["scenes_seen"].append(scene)
GM.main.setModuleFlag("IssixModule", "Misc_Slavery_Info", scenes.duplicate(true))
static func addIssixMood(mood: int):
GM.main.setModuleFlag("IssixModule", "Issix_Mood", clamp(GM.main.getModuleFlag("IssixModule", "Issix_Mood", 50)+mood, 0, 100))
static func getPlayerRole():
return "pet" if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1) == 1 else "prostitute"
static func playerToFuck():
return GM.main.getModuleFlag("IssixModule", "Todays_Bred_Slave", "") == "pc" # every uneven day
static func getPlayerPetName():
if Species.Canine in GM.pc.getSpecies():
return "puppy"
elif Species.Feline in GM.pc.getSpecies():
return "kitty"
elif Species.Equine in GM.pc.getSpecies():
return "pony"
else:
return "pet"
static func hackProcessingCharacters():
for charID in GM.main.getCharacters():
var character = GlobalRegistry.getCharacter(charID)
#character.checkOldWayOfUpdating(currentDay, timeOfDay)
if(character.shouldBeUpdated()):
GM.main.startUpdatingCharacter(charID)
for charID in GM.main.dynamicCharacters:
var character = GlobalRegistry.getCharacter(charID)
#character.checkOldWayOfUpdating(currentDay, timeOfDay)
if(character.shouldBeUpdated()):
GM.main.startUpdatingCharacter(charID)
func breedSlaveIfNpc():
## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event?
# if (int(GM.main.getDays()) % 2 == 0): # Breed only every second day?
# 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
current_slave = GM.main.getCharacter(current_slave)
GlobalRegistry.getCharacter("issix").prepareForSexAsDom()
if current_slave.hasVagina(): # azazel
current_slave.cummedInVaginaBy("issix", FluidSource.Penis, 1.8)
print("Azazel cummed in")
if RNG.chance(40):
current_slave.cummedInAnusBy("issix", FluidSource.Penis, 1.2)
if RNG.chance(5):
current_slave.cummedInMouthBy("issix")
else: # hiisi
print("Hiisi cummed in")
current_slave.cummedInAnusBy("issix")
func calculateDailyScore() -> int:
## For calculating player's daily activities at the end of the day
var score = 0
if playerToFuck(): # TODO Need to check when this hook is run because likely wrong day
if GM.main.getModuleFlag("IssixModule", "Had_Sex_With_Issix", false) == false:
score -= 5
GM.main.setModuleFlag("IssixModule", "PC_Pet_Didnt_Mate", true)
else:
score += 5
if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 1:
var time_forced = GM.main.getModuleFlag("IssixModule", "Is_Player_Forced_Today", 0)
var time_served = GM.main.getModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)
if time_forced > 0:
if time_served >= time_forced:
score += 1
else:
score -= 7
GM.main.setModuleFlag("IssixModule", "PC_Pet_Didnt_Fullfill_Daily", true)
else:
if time_served >= 60*60:
score += 1
else:
score -= 5
GM.main.setModuleFlag("IssixModule", "PC_Pet_Didnt_Fullfill_Daily", true)
return score
func tickDay():
addIssixMood(RNG.randi_range(-7, 7))
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)
addIssixMood(calculateDailyScore())
if int(GM.main.getDays()) % 7 == 0:
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 Globals.untilNextWalk() < 0:
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
if GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) > 0: # Slavery module
tickDay()
if GM.main.getModuleFlag("IssixModule", "Have_Received_Headpats_Lamia") != null:
GM.main.setModuleFlag("IssixModule", "Have_Received_Headpats_Lamia", false)
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", "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", "Azazel_Catnip_given_today", 0)
breedSlaveIfNpc()
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", "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)
if GM.main.getModuleFlag("IssixModule", "Azazel_Fertility_Training_Today") != null:
GM.main.setModuleFlag("IssixModule", "Azazel_Fertility_Training_Today", false)
GM.main.setModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", false)
GM.main.setModuleFlag("IssixModule", "Hiisi_Helped_Today", false)
GM.main.setModuleFlag("IssixModule", "Hiisi_Had_Encounter_Scene_Today", false)
GM.main.setModuleFlag("IssixModule", "Trained_Pet_Today", false)
if GM.main.getModuleFlag("IssixModule", "Did_Task_Today") != null:
GM.main.setModuleFlag("IssixModule", "Did_Task_Today", false)
# Reward player if master happy
if GM.main.getModuleFlag("IssixModule", "Issix_Mood", 50) > 80:
if RNG.chance(35):
GM.main.setModuleFlag("IssixModule", "PC_Should_Be_Rewarded", 10)
if GM.main.getDays() >= GM.main.getModuleFlag("IssixModule", "Drone_Task_Timeout", 0):
GM.main.setModuleFlag("IssixModule", "Drone_Task_Timeout", 0)