2024-12-18 17:32:36 +00:00
extends Module
class_name IssixModule
const APPROX_WALK_DELAY = 9
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 ) ,
2024-12-19 23:37:21 +00:00
" Azazel_Catnip_given_today " : flag ( FlagType . Number ) ,
2024-12-18 17:32:36 +00:00
" 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 ) ,
2024-12-19 23:37:21 +00:00
" Saw_Azazel_Naked " : flag ( FlagType . Bool ) ,
2024-12-20 18:32:08 +00:00
" Lamia_Chosen_Drawing " : flag ( FlagType . Text ) ,
" PC_Saw_Artwork_At_Lamias " : flag ( FlagType . Bool ) ,
2024-12-23 19:19:18 +00:00
" Hiisi_Crossword_Used " : flag ( FlagType . Number ) ,
2024-12-22 18:41:56 +00:00
" Hiisi_Helped_Today " : flag ( FlagType . Bool ) ,
2024-12-25 15:06:51 +00:00
" Azazel_Corruption_Scene " : flag ( FlagType . Number ) ,
2024-12-26 23:49:16 +00:00
" Azazel_Had_Corruption_Scene_Today " : flag ( FlagType . Bool ) ,
" Azazel_Agreed_Kiss " : flag ( FlagType . Bool ) ,
2024-12-18 17:32:36 +00:00
# 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 ) ,
" Progression_Points " : flag ( FlagType . Number ) ,
" 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 ) ,
2024-12-23 19:19:18 +00:00
" Received_Headpats_From_Lamia " : flag ( FlagType . Number ) ,
" Total_Fluids_Milked " : flag ( FlagType . Dict ) ,
" Has_Been_Milked_Today " : flag ( FlagType . Bool ) ,
2024-12-24 22:16:45 +00:00
" Submission " : flag ( FlagType . Number ) ,
2024-12-25 15:06:51 +00:00
" Trained_With_Hiisi_Combat " : flag ( FlagType . Bool ) ,
" PC_Pet_Didnt_Fullfill_Daily " : flag ( FlagType . Bool ) ,
" PC_Pet_Didnt_Mate " : flag ( FlagType . Bool ) ,
2024-12-18 17:32:36 +00:00
#"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :(
}
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 " ,
2024-12-20 18:32:08 +00:00
" res://Modules/IssixModule/Events/IssixRegularSearch.gd " ,
2024-12-25 15:06:51 +00:00
" res://Modules/IssixModule/Events/LamiaCellEvent.gd " ,
2024-12-26 23:49:16 +00:00
" res://Modules/IssixModule/Events/TalkNovaEvent.gd " ,
" res://Modules/IssixModule/Events/AzazelsCorruptionEvent.gd " ,
2024-12-18 17:32:36 +00:00
]
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 " ,
2024-12-25 15:06:51 +00:00
" res://Modules/IssixModule/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd " ,
2024-12-26 23:49:16 +00:00
" 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 " ,
2024-12-18 17:32:36 +00:00
]
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 "
]
worldEdits = [
" res://Modules/IssixModule/IssixWorldEdit.gd "
]
items = [
2024-12-26 23:49:16 +00:00
" res://Modules/IssixModule/Items/BellCollar.gd " ,
2024-12-18 17:32:36 +00:00
" 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 = [
" res://Modules/IssixModule/IssixPetQuest.gd "
]
2024-12-23 19:19:18 +00:00
computers = [
" res://Modules/IssixModule/Scenes/ClosetComputer.gd "
]
2024-12-24 22:16:45 +00:00
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 " ,
2024-12-26 23:49:16 +00:00
" res://Modules/IssixModule/Skills/Perks/PetWalk.gd " ,
" res://Modules/IssixModule/Skills/Perks/Relocated.gd " ,
2024-12-24 22:16:45 +00:00
]
2024-12-25 15:06:51 +00:00
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 "
]
2024-12-18 17:32:36 +00:00
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 )
2024-12-23 19:19:18 +00:00
func postInit ( ) :
2024-12-24 00:52:08 +00:00
# Overwrite scenes for dealing with bullies, they need to be initiated in here due to module initialization order overwriting our modules
2024-12-23 19:19:18 +00:00
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 " )
2024-12-25 15:06:51 +00:00
#GM.ES.registerEventTrigger("OpeningSlaveryScreen", EventTriggerLocation.new()) # TODO Find a way to do that
2024-12-18 17:32:36 +00:00
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 getWalkDelay ( ) :
return APPROX_WALK_DELAY
static func getPlayerRole ( ) :
return " pet " if GM . main . getModuleFlag ( " IssixModule " , " PC_Enslavement_Role " , 1 ) == 1 else " prostitute "
static func playerToFuck ( ) :
2024-12-24 22:16:45 +00:00
return ( int ( GM . main . getDays ( ) - 1 ) % 2 == 1 ) and GM . main . getModuleFlag ( " IssixModule " , " Todays_Bred_Slave " , " " ) == " pc " # every uneven day
2024-12-18 17:32:36 +00:00
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 "
func breedSlaveIfNpc ( ) :
## Function to process breeding by Master on randomly selected TODO maybe do that during the day as an event?
2024-12-22 18:41:56 +00:00
if ( int ( GM . main . getDays ( ) ) % 2 == 0 ) : # Breed only every second day?
2024-12-18 17:32:36 +00:00
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 RNG . chance ( 5 ) :
current_slave . cummedInMouthBy ( " issix " )
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 )
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
2024-12-22 18:41:56 +00:00
if playerToFuck ( ) : # TODO Need to check when this hook is run because likely wrong day
2024-12-18 17:32:36 +00:00
if GM . main . getModuleFlag ( " IssixModule " , " Had_Sex_With_Issix " , false ) == false :
score -= 5
2024-12-25 15:06:51 +00:00
GM . main . setModuleFlag ( " IssixModule " , " PC_Pet_Didnt_Mate " , true )
2024-12-18 17:32:36 +00:00
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
2024-12-25 15:06:51 +00:00
GM . main . setModuleFlag ( " IssixModule " , " PC_Pet_Didnt_Fullfill_Daily " , true )
2024-12-18 17:32:36 +00:00
else :
if time_served > = 60 * 60 :
score += 1
else :
score -= 5
2024-12-25 15:06:51 +00:00
GM . main . setModuleFlag ( " IssixModule " , " PC_Pet_Didnt_Fullfill_Daily " , true )
2024-12-18 17:32:36 +00:00
return score
func tickDay ( ) :
addIssixMood ( RNG . randi_range ( - 7 , 7 ) )
2024-12-24 22:16:45 +00:00
if GM . pc . getLocation ( ) == " medical_paddedcell_player " :
2024-12-18 17:32:36 +00:00
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 )
2024-12-24 22:16:45 +00:00
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 )
2024-12-18 17:32:36 +00:00
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 )
2024-12-19 23:37:21 +00:00
GM . main . setModuleFlag ( " IssixModule " , " Azazel_Catnip_given_today " , 0 )
2024-12-18 17:32:36 +00:00
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 )
2024-12-23 19:19:18 +00:00
GM . main . setModuleFlag ( " IssixModule " , " Has_Been_Milked_Today " , true )
2024-12-24 22:16:45 +00:00
if GM . main . getModuleFlag ( " IssixModule " , " Trained_With_Hiisi_Combat " ) != null :
GM . main . setModuleFlag ( " IssixModule " , " Trained_With_Hiisi_Combat " , false )
2024-12-26 23:49:16 +00:00
GM . main . setModuleFlag ( " IssixModule " , " Azazel_Had_Corruption_Scene_Today " , false )
2024-12-27 14:07:57 +00:00
GM . main . setModuleFlag ( " IssixModule " , " Hiisi_Helped_Today " , false )