23.12 update, happy sinmas
This commit is contained in:
parent
3dcddb08af
commit
5538dc1b19
|
@ -43,7 +43,7 @@ func getFlags():
|
||||||
"Saw_Azazel_Naked": flag(FlagType.Bool),
|
"Saw_Azazel_Naked": flag(FlagType.Bool),
|
||||||
"Lamia_Chosen_Drawing": flag(FlagType.Text),
|
"Lamia_Chosen_Drawing": flag(FlagType.Text),
|
||||||
"PC_Saw_Artwork_At_Lamias": flag(FlagType.Bool),
|
"PC_Saw_Artwork_At_Lamias": flag(FlagType.Bool),
|
||||||
"Hiisi_Crossword_IDs_Used": flag(FlagType.Dict),
|
"Hiisi_Crossword_Used": flag(FlagType.Number),
|
||||||
"Hiisi_Helped_Today": flag(FlagType.Bool),
|
"Hiisi_Helped_Today": flag(FlagType.Bool),
|
||||||
|
|
||||||
# Slavery related
|
# Slavery related
|
||||||
|
@ -69,7 +69,10 @@ func getFlags():
|
||||||
"Had_Sex_With_Issix": flag(FlagType.Bool),
|
"Had_Sex_With_Issix": flag(FlagType.Bool),
|
||||||
"Litter_Guessing_Game": flag(FlagType.Dict),
|
"Litter_Guessing_Game": flag(FlagType.Dict),
|
||||||
"Have_Received_Headpats_Lamia": flag(FlagType.Bool),
|
"Have_Received_Headpats_Lamia": flag(FlagType.Bool),
|
||||||
"Received_Headpats_From_Lamia": flag(FlagType.Number)
|
"Received_Headpats_From_Lamia": flag(FlagType.Number),
|
||||||
|
"Total_Fluids_Milked": flag(FlagType.Dict),
|
||||||
|
"Has_Been_Milked_Today": flag(FlagType.Bool),
|
||||||
|
"Submission": flag(FlagType.Number)
|
||||||
#"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :(
|
#"Gym_Bullies_Left_Alone": flag(FlagType.Bool) Currently cannot change the behavior of this :(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +93,6 @@ func _init():
|
||||||
"res://Modules/IssixModule/Events/SlaveryIntroEvent.gd",
|
"res://Modules/IssixModule/Events/SlaveryIntroEvent.gd",
|
||||||
"res://Modules/IssixModule/Events/IssixRegularSearch.gd",
|
"res://Modules/IssixModule/Events/IssixRegularSearch.gd",
|
||||||
"res://Modules/IssixModule/Events/LamiaCellEvent.gd"
|
"res://Modules/IssixModule/Events/LamiaCellEvent.gd"
|
||||||
#"res://Modules/IssixModule/Events/Overwrites/BullyGangEvent.gd" Cannot overwrite module that loads after
|
|
||||||
]
|
]
|
||||||
|
|
||||||
scenes = [
|
scenes = [
|
||||||
|
@ -111,7 +113,6 @@ func _init():
|
||||||
"res://Modules/IssixModule/Scenes/SlaveryIntroScene.gd",
|
"res://Modules/IssixModule/Scenes/SlaveryIntroScene.gd",
|
||||||
"res://Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd",
|
"res://Modules/IssixModule/Scenes/SlaveryInfoScreenScene.gd",
|
||||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixBringsComicbooks.gd",
|
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixBringsComicbooks.gd",
|
||||||
#"res://Modules/IssixModule/Scenes/Overwrites/BullyGangScene.gd"
|
|
||||||
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd"
|
"res://Modules/IssixModule/Scenes/SlaveryFirst/IssixFindsAvoidingPlayer.gd"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -136,6 +137,10 @@ func _init():
|
||||||
"res://Modules/IssixModule/IssixPetQuest.gd"
|
"res://Modules/IssixModule/IssixPetQuest.gd"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
computers = [
|
||||||
|
"res://Modules/IssixModule/Scenes/ClosetComputer.gd"
|
||||||
|
]
|
||||||
|
|
||||||
GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/")
|
GlobalRegistry.registerLustTopicFolder("res://Modules/IssixModule/InterestTopics/")
|
||||||
GlobalRegistry.registerSkinsFolder("res://Modules/IssixModule/Skins/")
|
GlobalRegistry.registerSkinsFolder("res://Modules/IssixModule/Skins/")
|
||||||
GlobalRegistry.registerStatusEffectFolder("res://Modules/IssixModule/StatusEffects/")
|
GlobalRegistry.registerStatusEffectFolder("res://Modules/IssixModule/StatusEffects/")
|
||||||
|
@ -144,10 +149,9 @@ func _init():
|
||||||
GlobalRegistry.registerSpeechModifiersFolder("res://Modules/IssixModule/SpeechModifiers/")
|
GlobalRegistry.registerSpeechModifiersFolder("res://Modules/IssixModule/SpeechModifiers/")
|
||||||
GlobalRegistry.registerAttackFolder("res://Modules/IssixModule/Attacks/", true)
|
GlobalRegistry.registerAttackFolder("res://Modules/IssixModule/Attacks/", true)
|
||||||
|
|
||||||
# External
|
func postInit():
|
||||||
# "res://Scenes/ParadedOnALeashScene.gd"
|
GlobalRegistry.registerScene("res://Modules/IssixModule/Scenes/Overwrites/BullyGangScene.gd", "Rahi") # Still consider it mostly Rahi's creation'
|
||||||
# "res://Game/World/Floors/Closet.gd"
|
GlobalRegistry.registerEvent("res://Modules/IssixModule/Events/Overwrites/BullyGangEvent.gd")
|
||||||
# "res://Game/World/Floors/Closet.tscn"
|
|
||||||
|
|
||||||
static func addSceneToWatched(scene: String):
|
static func addSceneToWatched(scene: String):
|
||||||
var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
|
var scenes = GM.main.getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})
|
||||||
|
@ -255,3 +259,4 @@ func resetFlagsOnNewDay(): # I apologize for abusing this hook, but startNewDay
|
||||||
GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false)
|
GM.main.setModuleFlag("IssixModule", "Helped_Lamia_With_Drawings_Today", false)
|
||||||
GM.main.setModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)
|
GM.main.setModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 0)
|
||||||
GM.main.setModuleFlag("IssixModule", "Eaten_Today", false)
|
GM.main.setModuleFlag("IssixModule", "Eaten_Today", false)
|
||||||
|
GM.main.setModuleFlag("IssixModule", "Has_Been_Milked_Today", true)
|
||||||
|
|
169
Modules/IssixModule/Scenes/ClosetComputer.gd
Normal file
169
Modules/IssixModule/Scenes/ClosetComputer.gd
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
extends ComputerBase
|
||||||
|
|
||||||
|
var connectedTo = ""
|
||||||
|
var loggedAsAdmin = false
|
||||||
|
|
||||||
|
func _init():
|
||||||
|
id = "ClosetComputer"
|
||||||
|
|
||||||
|
func reactToCommand(_command:String, _args:Array, _commandStringRaw:String):
|
||||||
|
if (connectedTo == "inmates.db"):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if(connectedTo == "127.0.223"): # TODO Finish computer UwU
|
||||||
|
if(_command == "help"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var tolearn = _args[0]
|
||||||
|
|
||||||
|
if(tolearn == "disconnect"):
|
||||||
|
return "Closes the connection"
|
||||||
|
elif(tolearn == "login"):
|
||||||
|
return "Allows you to login as an admin. Syntax: login <password>"
|
||||||
|
elif(tolearn == "ls"):
|
||||||
|
return "This command outputs the contents of your harddrive"
|
||||||
|
elif(tolearn == "cat"):
|
||||||
|
return "This command outputs file's contents into the console.\nSyntax 'cat <FILE INDEX>' where file index is a [b]number[/b] that can be obtained by using the ls command"
|
||||||
|
elif(tolearn == "sqlopen"):
|
||||||
|
return "This command opens a database file for simple operations\nSyntax 'sqlopen <FILE INDEX>' where file index is a [b]number[/b] that can be obtained by using the ls command"
|
||||||
|
return "No help found for that command"
|
||||||
|
learnCommand("disconnect")
|
||||||
|
learnCommand("login")
|
||||||
|
learnCommand("ls")
|
||||||
|
learnCommand("cat")
|
||||||
|
learnCommand("sqlopen")
|
||||||
|
return "Available commands:\ndisconnect\nlogin\nls\ncat\nsqlopen"
|
||||||
|
|
||||||
|
if(_command == "disconnect"):
|
||||||
|
if(_args.size() == 0):
|
||||||
|
connectedTo = ""
|
||||||
|
loggedAsAdmin = false
|
||||||
|
return "Disconnecting... Success"
|
||||||
|
else:
|
||||||
|
return "'disconnect' command expects 0 arguments"
|
||||||
|
|
||||||
|
if(_command == "sqlopen"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var fileIndex = _args[0]
|
||||||
|
if(fileIndex in ["1", "inmates.db"]):
|
||||||
|
connectedTo = "inmates.db"
|
||||||
|
return "Opening inmates.db... Opened successfully."
|
||||||
|
else:
|
||||||
|
return "Error. File with such index wasn't found"
|
||||||
|
else:
|
||||||
|
return "'sqlopen' command expects 1 argument"
|
||||||
|
|
||||||
|
if(_command == "login"):
|
||||||
|
if(loggedAsAdmin):
|
||||||
|
return "Already logged in"
|
||||||
|
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var modeStr = _args[0]
|
||||||
|
if(modeStr == "OWNERSHIP"):
|
||||||
|
loggedAsAdmin = true
|
||||||
|
return "Logged in as admin successfully. Welcome, administrator."
|
||||||
|
return "Error, wrong password"
|
||||||
|
|
||||||
|
if(_command == "ls"):
|
||||||
|
if(_args.size() == 0):
|
||||||
|
return "Found 1 file:\n1 - inmates.db"
|
||||||
|
else:
|
||||||
|
return "This command expects 0 arguments"
|
||||||
|
|
||||||
|
if(_command == "cat"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var fileIndex = _args[0]
|
||||||
|
if(fileIndex in ["1", "inmates.db"]):
|
||||||
|
if loggedAsAdmin:
|
||||||
|
return "<EFBFBD>v<EFBFBD>KtablefilesfilesCREATE TABLE inmates (\nid INTEGER NOT NULL, \nfirst_name TEXT, \nlast_name TEXT, \ndescription TEXT, \nPRIMARY KEY (id)\n#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{uoic]WQKE?93-'! smga[UOIC=71+% [corrupt]garbaaaageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee[/corrupt]\n"
|
||||||
|
else:
|
||||||
|
return "cat: inmates.db: Permission denied"
|
||||||
|
else:
|
||||||
|
return "Error. File with such index wasn't found"
|
||||||
|
else:
|
||||||
|
return "'cat' expects 1 argument"
|
||||||
|
|
||||||
|
return "Error, server doesn't support this command"
|
||||||
|
|
||||||
|
if(connectedTo == ""):
|
||||||
|
if(_command == "connect"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var server = _args[0]
|
||||||
|
if(server in ["127.0.223"]):
|
||||||
|
connectedTo = server
|
||||||
|
if(server == "127.0.223"):
|
||||||
|
var last_login = GM.main.getModuleFlag("IssixModule", "Last_Login_Server", GM.main.getDays()-2)
|
||||||
|
GM.main.setModuleFlag("IssixModule", "Last_Login_Server", GM.main.getDays())
|
||||||
|
return "Connecting to "+server+"... Connected!\nLast login: "+str(GM.main.getDays()-last_login)+" days ago."
|
||||||
|
else:
|
||||||
|
return "Connecting to "+server+"... Connection failed!"
|
||||||
|
else:
|
||||||
|
return "'connect' expects 1 argument"
|
||||||
|
|
||||||
|
if(_command == "ls"):
|
||||||
|
if(_args.size() == 0):
|
||||||
|
return "Found 2 files:\n1 - inmates.txt\n2 - forum.html"
|
||||||
|
elif(_args.size() == 1):
|
||||||
|
if (_args[0] in ["-a", "--all"]):
|
||||||
|
return "Found 2 files:\n1 - inmates.txt\n2 - forum.html\n3 - .dash_history"
|
||||||
|
else:
|
||||||
|
return "Unknown flag "+_args[0]
|
||||||
|
else:
|
||||||
|
return "This command expects 0 to 1 arguments"
|
||||||
|
if(_command == "cat"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var fileIndex = _args[0]
|
||||||
|
if(fileIndex in ["1", "inmates.txt"]):
|
||||||
|
return "Please for the love of intergalactic squid - when you log into the database server (the one at 127.0.223) with goddamn inmate data, log out of it when you are done!!! AlphaOS has limited amount of sessions per server because apparently they invented the computers just now and are figuring trivial issues like that only now. Fuck."
|
||||||
|
elif(fileIndex in ["2", "forum.html"]):
|
||||||
|
return "...**[corrupt]corrupted data[/corrupt]**...\n\n<message>Anyone knows what's the status of black goo we've ordered?</message>\n<message>Black goo? What black goo?</message>\n<message>can it be used as lube?</message>\n<message>fuck, I hope so, the one from vendomat is way too watery</message>\n<message>No, it cannot be used as a lube you horny bitches, it's for engineering purposes, we need it to minimize friction in metallic joints of mechanic arms</message>\n<message>so what you are saying is that it's lube</message>\n<message>I hate you guys</message>\n<message>The vessel that supposed to have black goo didn't have it, we re-ordered it</message>\n<message>Finally an answer! Thank you!</message>\n<message>Sure thing, by the way, we ordered double the amount due to request from the guards</message>\n<message>Why do guards need black go- Oh for fuck's sake</message>\n\n...**[corrupt]more corrupted data[/corrupt]**..."
|
||||||
|
else:
|
||||||
|
return "Error. File with such index wasn't found"
|
||||||
|
else:
|
||||||
|
return "'cat' expects 1 argument"
|
||||||
|
if(_command == "quit"):
|
||||||
|
markFinishedFail()
|
||||||
|
return "Shutting down.."
|
||||||
|
|
||||||
|
if(_command == "help"):
|
||||||
|
if(_args.size() == 1):
|
||||||
|
var tolearn = _args[0]
|
||||||
|
if(tolearn == "help"):
|
||||||
|
return "This command outputs all other commands and can also provide help for certain command by typing 'help <COMMAND>'"
|
||||||
|
elif(tolearn == "ls"):
|
||||||
|
return "This command outputs the contents of your harddrive"
|
||||||
|
elif(tolearn == "cat"):
|
||||||
|
return "This command outputs file's contents into the console.\nSyntax 'cat <FILE INDEX>' where file index is a [b]number[/b] that can be obtained by using the ls command"
|
||||||
|
elif(tolearn == "connect"):
|
||||||
|
return "This command lets you connect to the remote server by using its ip.\nSyntax 'connect <IP>'. An example of an ip is 127.0.1"
|
||||||
|
elif(tolearn == "quit"):
|
||||||
|
return "Shutdown the console"
|
||||||
|
else:
|
||||||
|
return "Couldn't find command '"+str(tolearn)+"'. To see all the available commands type 'help'"
|
||||||
|
|
||||||
|
elif(_args.size() == 0):
|
||||||
|
learnCommand("help")
|
||||||
|
learnCommand("ls")
|
||||||
|
learnCommand("cat")
|
||||||
|
learnCommand("connect")
|
||||||
|
learnCommand("quit")
|
||||||
|
return "Available commands are: ls, cat, connect, help, quit.\nTo learn more about a command type 'help <COMMAND>'"
|
||||||
|
else:
|
||||||
|
learnCommand("help")
|
||||||
|
return "'help' expects 0 or 1 arguments"
|
||||||
|
|
||||||
|
learnCommand("help")
|
||||||
|
return "Error, unknown command. Use 'help' to list all available commands"
|
||||||
|
|
||||||
|
func saveData():
|
||||||
|
var data = .saveData()
|
||||||
|
|
||||||
|
data["connectedTo"] = connectedTo
|
||||||
|
data["loggedAsAdmin"] = loggedAsAdmin
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
func loadData(data):
|
||||||
|
.loadData(data)
|
||||||
|
|
||||||
|
connectedTo = SAVE.loadVar(data, "connectedTo", "")
|
||||||
|
loggedAsAdmin = SAVE.loadVar(data, "loggedAsAdmin", false)
|
|
@ -78,6 +78,7 @@ func _run():
|
||||||
if state=="lookaround":
|
if state=="lookaround":
|
||||||
saynn(GM.world.getRoomByID("eng_closet").getDescription())
|
saynn(GM.world.getRoomByID("eng_closet").getDescription())
|
||||||
addButton("Cabinets", "Try to search cabinets", "cabinets")
|
addButton("Cabinets", "Try to search cabinets", "cabinets")
|
||||||
|
addButton("Computer", "There is a computer in the corner, you could try and interact with it", "computer")
|
||||||
addButton("Leave", "Try to leave the room", "leave")
|
addButton("Leave", "Try to leave the room", "leave")
|
||||||
|
|
||||||
if state=="cabinets":
|
if state=="cabinets":
|
||||||
|
@ -193,12 +194,14 @@ func _react(_action: String, _args):
|
||||||
return
|
return
|
||||||
|
|
||||||
if(_action == "cabinetloot"):
|
if(_action == "cabinetloot"):
|
||||||
|
processTime(60)
|
||||||
current_loot = generateLoot(_args[0])
|
current_loot = generateLoot(_args[0])
|
||||||
current_cabinet = _args[0]
|
current_cabinet = _args[0]
|
||||||
if typeof(current_loot) == TYPE_INT:
|
if typeof(current_loot) == TYPE_INT:
|
||||||
_action = "cabinetevent"+str(current_loot)
|
_action = "cabinetevent"+str(current_loot)
|
||||||
|
|
||||||
if _action == "cabinets":
|
if _action == "cabinets":
|
||||||
|
processTime(30)
|
||||||
var activated_cabinets = getModuleFlag("IssixModule", "Activated_Cabinets", {})
|
var activated_cabinets = getModuleFlag("IssixModule", "Activated_Cabinets", {})
|
||||||
if activated_cabinets.size() > 9:
|
if activated_cabinets.size() > 9:
|
||||||
if RNG.chance(50):
|
if RNG.chance(50):
|
||||||
|
@ -213,6 +216,9 @@ func _react(_action: String, _args):
|
||||||
runScene("StrugglingScene")
|
runScene("StrugglingScene")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if _action == "computer":
|
||||||
|
runScene("ComputerSimScene", ["ClosetComputer"], "computerexplore")
|
||||||
|
|
||||||
setState(_action)
|
setState(_action)
|
||||||
|
|
||||||
func saveData():
|
func saveData():
|
||||||
|
@ -235,3 +241,15 @@ func _react_scene_end(_tag, _result):
|
||||||
endScene()
|
endScene()
|
||||||
else:
|
else:
|
||||||
setState("cabinets")
|
setState("cabinets")
|
||||||
|
|
||||||
|
if(_tag == "computerexplore"):
|
||||||
|
if(_result is Array):
|
||||||
|
if(_result[0] == true):
|
||||||
|
processTime(3*60)
|
||||||
|
# addMessage("You got 50 credits! But there is something else too..")
|
||||||
|
# addItemToSavedItems(GlobalRegistry.createItem("HorsecockDildo"))
|
||||||
|
# GM.pc.addCredits(50)
|
||||||
|
# addExperienceToPlayer(100)
|
||||||
|
setState("lookaround")
|
||||||
|
return
|
||||||
|
endScene()
|
||||||
|
|
|
@ -69,12 +69,12 @@ func _run():
|
||||||
if state == "issixthreat":
|
if state == "issixthreat":
|
||||||
saynn("[say=pc]I'm under Master Issix's care, please don't hurt me.[/say]")
|
saynn("[say=pc]I'm under Master Issix's care, please don't hurt me.[/say]")
|
||||||
if GM.pc.getFluids().hasFluidTypeWithCharID("Piss", "issix"):
|
if GM.pc.getFluids().hasFluidTypeWithCharID("Piss", "issix"):
|
||||||
saynn("[say=gymbully]Are you? That would explain why you are reeking of him. Are you a good little "+IssixModule.getPlayerPetName()+" for your Master Esshiks? Ohhh, how cute. Why aren't you on a leash then huh, fuck pet?[/say]")
|
saynn("[say=gymbully]Are you? That would explain why you are reeking of him. Are you a good little "+getPlayerPetName()+" for your Master Esshiks? Ohhh, how cute. Why aren't you on a leash then huh, fuck pet?[/say]")
|
||||||
else:
|
else:
|
||||||
saynn("[say=gymbully]Are you? That would explain why you look like a breeding bitch. Are you a good little "+IssixModule.getPlayerPetName()+" for your Master Esshiks? Ohhh, how cute. Why aren't you on a leash then huh, fuck pet?[/say]")
|
saynn("[say=gymbully]Are you? That would explain why you look like a breeding bitch. Are you a good little "+getPlayerPetName()+" for your Master Esshiks? Ohhh, how cute. Why aren't you on a leash then huh, fuck pet?[/say]")
|
||||||
saynn("Sounds of laughter fills the place, all three of inmates having fun at your expense.")
|
saynn("Sounds of laughter fills the place, all three of inmates having fun at your expense.")
|
||||||
saynn("[say=gymbully]Do you think your Master would mind if we borrowed you for a few minutes and had fun with you?[/say]")
|
saynn("[say=gymbully]Do you think your Master would mind if we borrowed you for a few minutes and had fun with you?[/say]")
|
||||||
saynn("The main bully looks at the other two for a seond, all of them are rather satisfied with themselves.")
|
saynn("The main bully looks at the other two for a second, all of them are rather satisfied with themselves.")
|
||||||
saynn("[say=gymbully]Whatever. You just look like one of his bitches, and I don't plan to mess around with the big man himself again, 5 credits ain't worth it. See ya later, slave.[/say]")
|
saynn("[say=gymbully]Whatever. You just look like one of his bitches, and I don't plan to mess around with the big man himself again, 5 credits ain't worth it. See ya later, slave.[/say]")
|
||||||
addButton("Continue", "That... Worked better than expected", "endthescene")
|
addButton("Continue", "That... Worked better than expected", "endthescene")
|
||||||
|
|
||||||
|
@ -142,6 +142,16 @@ func _react(_action: String, _args):
|
||||||
|
|
||||||
setState(_action)
|
setState(_action)
|
||||||
|
|
||||||
|
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 saveData():
|
func saveData():
|
||||||
var data = .saveData()
|
var data = .saveData()
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,8 @@ var odd_lamia_art = [
|
||||||
"at first what seems like a tube of some sorts, though later you notice that this tube ends with a hole on one end, around the „hole” a bunch of yellowish protrusions extending from the fleshy tube"
|
"at first what seems like a tube of some sorts, though later you notice that this tube ends with a hole on one end, around the „hole” a bunch of yellowish protrusions extending from the fleshy tube"
|
||||||
]
|
]
|
||||||
|
|
||||||
var crossword_puzzles = [["Sex in 11 letters", "intercourse"], ["Subfamily of goats and sheep", "caprinae"], []]
|
var crossword_puzzles = [["Sex in 11 letters", "Intercourse"], ["Subfamily of goats and sheep", "Caprinae"], ["Lacking the authority or capacity to act", "Powerless"], ["Male heir to the throne", "Prince"], ["Fantasy art of bringing creatures from death to living", "Necromancy"]]
|
||||||
|
# OWNERSHIP
|
||||||
func _init():
|
func _init():
|
||||||
sceneID = "PetsTalkScene"
|
sceneID = "PetsTalkScene"
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ func _run():
|
||||||
addButton("Give Catnip", "Give Azazel the catnip", "catnip")
|
addButton("Give Catnip", "Give Azazel the catnip", "catnip")
|
||||||
else:
|
else:
|
||||||
if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
|
if getModuleFlag("IssixModule", "PC_Enslavement_Role", 0) == 0:
|
||||||
saynn("You approach Azazel, he recognizes sudden attention given to him, he goes on his fours doing some kitty back streching before kneeling towards you expectantly. You notice he took a quick peek at his master beforehand.")
|
saynn("You approach Azazel, he recognizes sudden attention given to him, he goes on his fours doing some kitty back stretching before kneeling towards you expectantly. You notice he took a quick peek at his master beforehand.")
|
||||||
else:
|
else:
|
||||||
pass # TODO
|
pass # TODO
|
||||||
addButton("Back", "Take a step back", "")
|
addButton("Back", "Take a step back", "")
|
||||||
|
@ -154,22 +154,20 @@ func _run():
|
||||||
|
|
||||||
if state == "hiisihelp":
|
if state == "hiisihelp":
|
||||||
saynn("[say=pc]Hey Hiisi, anything you'd like help with? I'd be happy to do something for you![/say]")
|
saynn("[say=pc]Hey Hiisi, anything you'd like help with? I'd be happy to do something for you![/say]")
|
||||||
if hiisi_help_type == 1:
|
match hiisi_help_type[0]:
|
||||||
|
1:
|
||||||
saynn("[say=hiisi]Actually, yeah, I'd have something for you, this little padlock recently got stuck and I've been trying to open it without much luck, perhaps you'd be able to do something about it?[/say]")
|
saynn("[say=hiisi]Actually, yeah, I'd have something for you, this little padlock recently got stuck and I've been trying to open it without much luck, perhaps you'd be able to do something about it?[/say]")
|
||||||
saynn("You look at the padlock, it connects two pieces of chain together, and even though its in unlocked position, the metal shackle is stuck inside the body. For a moment you try sheer brute force, though you imagine Hiisi already tried it considering his musculature. Your next strategy involves jigging the shackle in all direction, after a while the strategy proves successful and you manage to open the padlock.")
|
saynn("You look at the padlock, it connects two pieces of chain together, and even though its in unlocked position, the metal shackle is stuck inside the body. For a moment you try sheer brute force, though you imagine Hiisi already tried it considering his musculature. Your next strategy involves jigging the shackle in all direction, after a while the strategy proves successful and you manage to open the padlock.")
|
||||||
saynn("[say=pc]Here you go, needed some jiggling.[/say]")
|
saynn("[say=pc]Here you go, needed some jiggling.[/say]")
|
||||||
saynn("[say=hiisi]Wow, I'm surprised you did it, I've been trying to open it for past hour and couldn't do it. Thanks {pc.name}![/say]")
|
saynn("[say=hiisi]Wow, I'm surprised you did it, I've been trying to open it for past hour and couldn't do it. Thanks {pc.name}![/say]")
|
||||||
addButton("Back", "You've helped the canine today, padlock open with two chains escaping their shackles", "hiisitalk")
|
addButton("Back", "You've helped the canine today, padlock open with two chains escaping their shackles", "hiisitalk")
|
||||||
elif hiisi_help_type == 2:
|
2:
|
||||||
saynn("[say=hiisi]Oh, sorry, not today. I don't think I have anything for you to help me with.[/say]")
|
saynn("[say=hiisi]Oh, sorry, not today. I don't think I have anything for you to help me with.[/say]")
|
||||||
saynn("[say=pc]Oh, I see. In that case... Could I give you a hug?[/say]")
|
saynn("[say=pc]Oh, I see. In that case... Could I give you a hug?[/say]")
|
||||||
saynn("Hiisi gives you a reluctant nod with a little bit embarrassed face expression. You embrace Hiisi in a hug, his tail moves behind swiftly as you do.")
|
saynn("Hiisi gives you a reluctant nod with a little bit embarrassed face expression. You embrace Hiisi in a hug, his tail moves behind swiftly as you do.")
|
||||||
saynn("[say=hiisi]Thank you, that's very nice of you.[/say]")
|
saynn("[say=hiisi]Thank you, that's very nice of you.[/say]")
|
||||||
addButton("Back", "You've helped the canine today, in one of many ways", "hiisitalk")
|
addButton("Back", "You've helped the canine today, in one of many ways", "hiisitalk")
|
||||||
elif hiisi_help_type == 3:
|
3:
|
||||||
saynn("[say=hiisi]Hmm. Actually, yeah, if you are willing to... I've been trying to solve a bunch of riddles lately and stumbled upon question that I'm not exactly sure how to answer, perhaps you could know. It reads as follows: "+ hiisi_help_type[1][0]+". Any idea what could it be?[/say]")
|
|
||||||
addButton(hiisi_help_type[1][1], "Answer this", "hiisihelpresponse")
|
|
||||||
elif hiisi_help_type == 4:
|
|
||||||
saynn("[say=hiisi]Yeah, I do need help with something. Give me a second...[/say]")
|
saynn("[say=hiisi]Yeah, I do need help with something. Give me a second...[/say]")
|
||||||
saynn("He fetches a plastic cylinder from the nearby bag along with a lid that has a small metallic looking pipe coming out of it.")
|
saynn("He fetches a plastic cylinder from the nearby bag along with a lid that has a small metallic looking pipe coming out of it.")
|
||||||
saynn("[say=hiisi]Can you please hold this one like that? It's difficult to pit it together without second person.[/say]")
|
saynn("[say=hiisi]Can you please hold this one like that? It's difficult to pit it together without second person.[/say]")
|
||||||
|
@ -181,7 +179,25 @@ func _run():
|
||||||
saynn("[say=hiisi]Some kind of a dispenser, I don't know. found the parts somewhere, could be useful.[/say]")
|
saynn("[say=hiisi]Some kind of a dispenser, I don't know. found the parts somewhere, could be useful.[/say]")
|
||||||
saynn("He puts the assembled dispenser back into the bag and thanks you for your help.")
|
saynn("He puts the assembled dispenser back into the bag and thanks you for your help.")
|
||||||
addButton("Back", "You've helped the canine today, by helping them assemble a dispenser of some sorts", "hiisitalk")
|
addButton("Back", "You've helped the canine today, by helping them assemble a dispenser of some sorts", "hiisitalk")
|
||||||
|
4:
|
||||||
|
saynn("[say=hiisi]Hmm. Actually, yeah, if you are willing to... I've been trying to solve a bunch of riddles lately and stumbled upon question that I'm not exactly sure how to answer, perhaps you could know. It goes as follows: "+ hiisi_help_type[1][0]+". Any idea what could it be?[/say]")
|
||||||
|
addButton(hiisi_help_type[1][1], "Answer this", "hiisihelpresponse")
|
||||||
|
|
||||||
|
if state == "hiisihelpresponse":
|
||||||
|
saynn("[say=pc]What about "+hiisi_help_type[1][1]+"?[/say]")
|
||||||
|
saynn("Dog thinks for a little bit.")
|
||||||
|
saynn("[say=hiisi]I think that would work, thanks {pc.name}![/say]")
|
||||||
|
if hiisi_help_type[1][1] == "Necromancy":
|
||||||
|
saynn("[say=hiisi]Actually, I think that was the last one, so nice! Thank you![/say]")
|
||||||
|
saynn("[say=pc]Oh, that's wonderful! So, no more riddles for me?[/say]")
|
||||||
|
saynn("[say=hiisi]Yeah, I think we are done with those.[/say]")
|
||||||
|
saynn("[say=pc]Cool.[/say]")
|
||||||
|
saynn("As you look away from Hiisi and think what to do next, you hear a quiet murmur coming from Hiisi.")
|
||||||
|
saynn("[say=hiisi]N. E. C. R. O. M. A. N. C. Y... Hmm. It's [color=red][b]OWNERSHIP[/b][/color], why was this highlighted here?[/say]")
|
||||||
|
else:
|
||||||
|
saynn("[say=pc]Of course, glad I could help![/say]")
|
||||||
|
|
||||||
|
addButton("Back", "You've helped the canine today by solving a riddle", "hiisitalk")
|
||||||
|
|
||||||
if state == "hiisiappearance":
|
if state == "hiisiappearance":
|
||||||
saynn("You approach a kneeling Hiisi, in many ways his fur coloring reminds you of huskies but... Backwards? The black coloring visible on his face and bottom of his canine tail, the tail so bushy and monochromatic that it reminds you of a skunk. The inside of his ears dark gray as well, along with the tip, with the pleasant light gray outline.\nWholly brighter palette on the back and his legs.")
|
saynn("You approach a kneeling Hiisi, in many ways his fur coloring reminds you of huskies but... Backwards? The black coloring visible on his face and bottom of his canine tail, the tail so bushy and monochromatic that it reminds you of a skunk. The inside of his ears dark gray as well, along with the tip, with the pleasant light gray outline.\nWholly brighter palette on the back and his legs.")
|
||||||
|
@ -742,11 +758,22 @@ func _react(_action: String, _args):
|
||||||
processTime(5*60)
|
processTime(5*60)
|
||||||
|
|
||||||
if _action == "hiisihelp":
|
if _action == "hiisihelp":
|
||||||
|
processTime(2*60)
|
||||||
increaseModuleFlag("IssixModule", "Hiisi_Affection", 1)
|
increaseModuleFlag("IssixModule", "Hiisi_Affection", 1)
|
||||||
setModuleFlag("IssixModule", "Hiisi_Helped_Today", true)
|
setModuleFlag("IssixModule", "Hiisi_Helped_Today", true)
|
||||||
hiisi_help_type = [RNG.randi_range(1,4)]
|
hiisi_help_type = [RNG.randi_range(1,4)]
|
||||||
if hiisi_help_type[0] == 3:
|
if hiisi_help_type[0] == 4:
|
||||||
hiisi_help_type.append()
|
var solved = getModuleFlag("IssixModule", "Hiisi_Crossword_Used", 0)
|
||||||
|
if solved == -1:
|
||||||
|
hiisi_help_type = [RNG.randi_range(1,3)]
|
||||||
|
hiisi_help_type.append(crossword_puzzles[solved])
|
||||||
|
if solved == 5:
|
||||||
|
setModuleFlag("IssixModule", "Hiisi_Crossword_Used", -1) # Mainly for future compatibility
|
||||||
|
else:
|
||||||
|
increaseModuleFlag("IssixModule", "Hiisi_Crossword_Used")
|
||||||
|
|
||||||
|
if _action == "hiisihelpresponse":
|
||||||
|
pass
|
||||||
|
|
||||||
if _action == "hiisisilence":
|
if _action == "hiisisilence":
|
||||||
setModuleFlag("IssixModule", "Hiisi_Name_Helped", true)
|
setModuleFlag("IssixModule", "Hiisi_Name_Helped", true)
|
||||||
|
@ -795,6 +822,7 @@ func _react(_action: String, _args):
|
||||||
increaseModuleFlag("IssixModule", "Lamia_Times_Helped", -1)
|
increaseModuleFlag("IssixModule", "Lamia_Times_Helped", -1)
|
||||||
|
|
||||||
if _action == "artminigame":
|
if _action == "artminigame":
|
||||||
|
processTime(1*60)
|
||||||
# 1 - humanoids and items, 2 - feral animals and flora, 3 - backgrounds, 4 - others/electronic devices
|
# 1 - humanoids and items, 2 - feral animals and flora, 3 - backgrounds, 4 - others/electronic devices
|
||||||
var art_rand = RNG.pickWeighted([[1], [2], [3], [4], [1, 2], [1, 3], [2, 3], [1, 2, 3]], [15, 15, 15, 5, 10, 10, 5, 4])
|
var art_rand = RNG.pickWeighted([[1], [2], [3], [4], [1, 2], [1, 3], [2, 3], [1, 2, 3]], [15, 15, 15, 5, 10, 10, 5, 4])
|
||||||
artwork = [art_rand.duplicate(), generate_artwork_desc(art_rand), RNG.randi_range(1,151) == 50] # Here Frisk learned about how Godot variables lifespan ends with the end of _react leaving a very empty array after this function ends. Gave me quite a lot of confusion, but was fun to debug I suppose, Python would track the reference to a variable, Godot doesn't, sad.
|
artwork = [art_rand.duplicate(), generate_artwork_desc(art_rand), RNG.randi_range(1,151) == 50] # Here Frisk learned about how Godot variables lifespan ends with the end of _react leaving a very empty array after this function ends. Gave me quite a lot of confusion, but was fun to debug I suppose, Python would track the reference to a variable, Godot doesn't, sad.
|
||||||
|
|
|
@ -6,7 +6,7 @@ var reply_litter = null
|
||||||
var azazel_teased_motherhood = false
|
var azazel_teased_motherhood = false
|
||||||
var azazel = null
|
var azazel = null
|
||||||
var AVERAGE_WALK_DELAY = 9
|
var AVERAGE_WALK_DELAY = 9
|
||||||
|
var milk_result = []
|
||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
sceneID = "SlaveryInfoScreen"
|
sceneID = "SlaveryInfoScreen"
|
||||||
|
@ -32,6 +32,9 @@ func _run():
|
||||||
match GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1):
|
match GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1):
|
||||||
1.0:
|
1.0:
|
||||||
saynn("Amount of time spent in Master's harem today: "+str(getTimeSpentReadable()))
|
saynn("Amount of time spent in Master's harem today: "+str(getTimeSpentReadable()))
|
||||||
|
var forced = GM.main.getModuleFlag("IssixModule", "Is_Player_Forced_Today", 0)
|
||||||
|
if forced > 0:
|
||||||
|
saynn("You are expected to spend "+Util.getTimeStringHumanReadable(forced)+" in the harem today.")
|
||||||
2.0:
|
2.0:
|
||||||
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)))
|
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)))
|
||||||
_:
|
_:
|
||||||
|
@ -67,6 +70,9 @@ func _run():
|
||||||
addCharacter("issix")
|
addCharacter("issix")
|
||||||
saynn("[say=issix]"+getMoodMessage()+"[/say]")
|
saynn("[say=issix]"+getMoodMessage()+"[/say]")
|
||||||
saynn("Is there anything you want to do with Master?")
|
saynn("Is there anything you want to do with Master?")
|
||||||
|
if GM.pc.hasBreastsFullOfMilk():
|
||||||
|
saynn("[say=issix]{pc.Name}, wouldn't you want to unburden your heavy chest a little?[/say]")
|
||||||
|
addButton("Milking", "Ask Issix about milking", "issixmilkingq")
|
||||||
if getModuleFlag("IssixModule", "Had_Sex_With_Issix", false) == false:
|
if getModuleFlag("IssixModule", "Had_Sex_With_Issix", false) == false:
|
||||||
addButton("Sex", "Ask for sex with Master", "issixsexrequest")
|
addButton("Sex", "Ask for sex with Master", "issixsexrequest")
|
||||||
else:
|
else:
|
||||||
|
@ -76,6 +82,61 @@ func _run():
|
||||||
addDisabledButton("Options", "Ask your Master to change how he treats you (WIP)") #, "issixoptions" Pet etiquette, make player communicate via animalistic sounds, unlocks optional training
|
addDisabledButton("Options", "Ask your Master to change how he treats you (WIP)") #, "issixoptions" Pet etiquette, make player communicate via animalistic sounds, unlocks optional training
|
||||||
addButton("Back", "Go back", "")
|
addButton("Back", "Go back", "")
|
||||||
|
|
||||||
|
if state == "issixmilkingfirst":
|
||||||
|
saynn("[say=pc]Master, you mentioned something about unburdening my chest?[/say]")
|
||||||
|
saynn("[say=issix]Yes, pet. I can see your nipples leaking, you must be full. If you want, I could help you out. What do you say about it, do you want to be a little cow for me today? I can even give you something extra if you are a good little pet for me and give me your milk.[/say]")
|
||||||
|
addButton("Moo", "Moo at your Master", "issixmilking")
|
||||||
|
addButton("Not today", "You do not feel like getting milked right now", "issixpetmenu")
|
||||||
|
|
||||||
|
if state == "issixmilkingrepeat":
|
||||||
|
saynn("[say=pc]Master, I'd like you to milk me today.[/say]")
|
||||||
|
saynn("Master smiles at you and gestures you to come closer")
|
||||||
|
saynn("[say=issix]Of course my little cow, come here, let me take care of you.[/say]")
|
||||||
|
addButton("Moo", "Get milked by your Master", "issixmilking")
|
||||||
|
|
||||||
|
if state == "issixmilking":
|
||||||
|
playAnimation(StageScene.Duo, "sit", {npc="issix", bodyState={exposedChest=true, leashedBy="issix"}, npcAction="sit"})
|
||||||
|
saynn("[say=pc]Mooo.[/say]")
|
||||||
|
saynn("Your Master stands and sits you down on his chair.")
|
||||||
|
if !GM.pc.isFullyNaked():
|
||||||
|
saynn("[say=issix]First we will need to make you lose your clothes, don't you think? Little cows don't need any of that silly fabrics.[/say]")
|
||||||
|
saynn("Your Master eagerly removes the clothing covering your round orbs containing plenty of fluid your body meant for your children.")
|
||||||
|
|
||||||
|
saynn("Issix looks at your {pc.breasts} and starts massaging them with his paws, some {pc.milk} trickles out on his arm, he licks it.")
|
||||||
|
|
||||||
|
if GM.pc.hasBigBreasts():
|
||||||
|
saynn("[say=issix]You have such big {pc.milk} producers, can't wait to see just how much I can get out of them.[/say]")
|
||||||
|
else:
|
||||||
|
saynn("[say=issix]Modest size, but always cute to milk. If I were here for profit only I probably would skip the milking, but my precious pet cow deserves more than that, don't you?[/say]")
|
||||||
|
saynn("You respond with a little embarrassed moo.")
|
||||||
|
var term_for_breasts = ("udders" if GM.pc.hasBigBreasts() else "perky breasts")
|
||||||
|
saynn("Master grabs a bucket from under his chair, kneels with one of his legs and puts the bucket on your legs. He holds the bucket with his elbow while each of his paws lands on your {pc.breasts}.")
|
||||||
|
saynn("[say=issix]Hmm, perhaps that's not the best position for me, and I also think to complete your look we need one more thing.[/say]")
|
||||||
|
|
||||||
|
saynn("Your Master stands before producing another folded chair from a stash of stuff behind you. He also picks up a leash from his bag and attaches its clasp to your collar.")
|
||||||
|
|
||||||
|
saynn("[say=issix]That's better look for you, animals should be leashed. Now, my sweet little cow, relax and let me take care of you, okey?[/say]")
|
||||||
|
saynn("You nod to your Master, excited. He starts to tug on your "+term_for_breasts+" as you feel {pc.milk} escape your body into the bucket below, this feeling accompanied by a range of other pleasurable feelings.")
|
||||||
|
|
||||||
|
saynn("You look at your Master's face as he continues to gather your sweet {pc.milk}, though your look is blank - empty, just as your mind at that moment. You feel pleasure escaping from your "+term_for_breasts+" into every part of your body. Rhythmic squeezes currently fueling your existence. You live in a moment, letting your Master drain you, milk you like a feral animal. Your dumb stare is accompanied by open mouth with string of saliva dropping from your lips onto your body, if someone were to ask you a question, it likely wouldn't even register in your mind. Perhaps your Master milks you not only of {pc.milk} but also your mind? You wouldn't mind that though, would you?")
|
||||||
|
saynn("[say=issix]What a happy little cow you are! Don't worry, seems like we are nearing the end.[/say]")
|
||||||
|
saynn("You smile dumbly at your Master, not understanding his words. Cows don't think complex thoughts, they are to support their calves, or - like in your case - let their Master relieve them of burden. At some point you no longer register the waves of pleasure from your chest, and you hear snaps near your right ear. The blur in your eyes starts to sharpen out and you see happy face of your Master staring back at you, a bucket no longer on your legs.")
|
||||||
|
saynn("[say=issix]You there? Hello? Theeere you are. Enjoyed being a little cow?[/say]")
|
||||||
|
saynn("He scratches you behind your ears.")
|
||||||
|
saynn("[say=issix]Lets see...[/say]")
|
||||||
|
addButton("Continue", "Production review", "issixmilkingresult")
|
||||||
|
|
||||||
|
if state == "issixmilkingresult":
|
||||||
|
saynn("[say=issix]Today you've produced " +str(round(milk_result[0])) +" ml for me today. It makes it "+str(round(milk_result[1]))+" ml in total.[/say]")
|
||||||
|
|
||||||
|
if GM.pc.getSkillLevel(Skill.Milking) < 20 or milk_result[1] < 50000 or milk_result[0] < 600:
|
||||||
|
saynn("[say=issix]Perhaps you'd want to stay like you were when milking huh? Maybe some day, if you choose to be my little cow instead of "+getPlayerPetName()+" we could think about it okey? But you need to be a goood healthy cow producing lots and lots of milk for your Master alright? "+("You even look the part already! *gently pokes your horns*" if GM.pc.hasHorns() else "")+" Gooood cow.[/say]")
|
||||||
|
saynn("He pets your head")
|
||||||
|
|
||||||
|
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))")
|
||||||
|
addButton("Continue", "Come back to your senses", "issixpetmenu")
|
||||||
|
|
||||||
if state == "haremeat":
|
if state == "haremeat":
|
||||||
saynn("You approach your bowl on the edge of your blanket, full of the gelatinous mass your Master fills it with and start munching its contents like a real pet would, without using tools or paws.")
|
saynn("You approach your bowl on the edge of your blanket, full of the gelatinous mass your Master fills it with and start munching its contents like a real pet would, without using tools or paws.")
|
||||||
if GM.pc.getMaxStamina()*0.8 > GM.pc.getStamina():
|
if GM.pc.getMaxStamina()*0.8 > GM.pc.getStamina():
|
||||||
|
@ -405,6 +466,23 @@ func _react(_action: String, _args):
|
||||||
_action = "lamiapetrequestanother"
|
_action = "lamiapetrequestanother"
|
||||||
GM.main.setModuleFlag("IssixModule", "Have_Received_Headpats_Lamia", true)
|
GM.main.setModuleFlag("IssixModule", "Have_Received_Headpats_Lamia", true)
|
||||||
|
|
||||||
|
if _action == "issixmilkingq":
|
||||||
|
if GM.main.getModuleFlag("IssixModule", "Total_Fluids_Milked", 0) == 0:
|
||||||
|
_action = "issixmilkingfirst"
|
||||||
|
else:
|
||||||
|
_action = "issixmilkingrepeat"
|
||||||
|
|
||||||
|
if _action == "issixmilking":
|
||||||
|
processTime(10*60)
|
||||||
|
|
||||||
|
if _action == "issixmilkingresult":
|
||||||
|
var this_milking = GM.pc.milk()
|
||||||
|
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"]]
|
||||||
|
setModuleFlag("IssixModule", "Has_Been_Milked_Today", true)
|
||||||
|
|
||||||
if _action == "littercountresult":
|
if _action == "littercountresult":
|
||||||
if(getTextboxData("litter_count") == ""):
|
if(getTextboxData("litter_count") == ""):
|
||||||
return
|
return
|
||||||
|
@ -478,6 +556,7 @@ func _react_scene_end(_tag, _result):
|
||||||
func saveData():
|
func saveData():
|
||||||
var data = .saveData()
|
var data = .saveData()
|
||||||
|
|
||||||
|
data["milk_result"] = milk_result
|
||||||
data["replyLitter"] = reply_litter
|
data["replyLitter"] = reply_litter
|
||||||
data["petTimeStart"] = pet_time_start
|
data["petTimeStart"] = pet_time_start
|
||||||
data["azazelTease"] = azazel_teased_motherhood
|
data["azazelTease"] = azazel_teased_motherhood
|
||||||
|
@ -490,3 +569,4 @@ func loadData(data):
|
||||||
pet_time_start = SAVE.loadVar(data, "petTimeStart", null)
|
pet_time_start = SAVE.loadVar(data, "petTimeStart", null)
|
||||||
azazel_teased_motherhood = SAVE.loadVar(data, "azazelTease", false)
|
azazel_teased_motherhood = SAVE.loadVar(data, "azazelTease", false)
|
||||||
reply_litter = SAVE.loadVar(data, "reply_litter", 0)
|
reply_litter = SAVE.loadVar(data, "reply_litter", 0)
|
||||||
|
milk_result = SAVE.loadVar(data, "milk_result", [])
|
||||||
|
|
|
@ -23,6 +23,8 @@ In tags: M/player, M/M (implied), petplay, slave, watersports, parasite
|
||||||
## Mod's audience
|
## Mod's audience
|
||||||
Mod is directed pretty much exclusively at players who are submissive. In game there are already a bunch of ways the player can effectively submit to other creatures - recentlishly added hypnokink is a great example of that, Tavi's questline also has a route/revolves around player submitting to Tavi as their pet. Those things are wonderful and I love them, but in-game slave system is definitely directed at dominant players. This mod tries to address that by adding a character that can enslave **the player**. It features degradation, pet-play content, watersports (for those who switch it on), branding. In addition - worth noting that the entire harem of pets is male.
|
Mod is directed pretty much exclusively at players who are submissive. In game there are already a bunch of ways the player can effectively submit to other creatures - recentlishly added hypnokink is a great example of that, Tavi's questline also has a route/revolves around player submitting to Tavi as their pet. Those things are wonderful and I love them, but in-game slave system is definitely directed at dominant players. This mod tries to address that by adding a character that can enslave **the player**. It features degradation, pet-play content, watersports (for those who switch it on), branding. In addition - worth noting that the entire harem of pets is male.
|
||||||
|
|
||||||
|
What you **shouldn't expect** from the mod at the moment is for it to be heavy on non-con or roughness. While the "non-con" is one of the ideas I have, it is planned to be implemented at later time if I have enough motivation.
|
||||||
|
|
||||||
## Slavery
|
## Slavery
|
||||||
I think there is a reason why there are dozens of harem-management games where player becomes harem's owner and manages slave instead of being one. I think in large part there isn't much of a way to make the player be a slave and keep the gameplay entertaining. If becoming a slave means less choice - the game may become boring. In this mod I'm trying my best to still feel like player is enslaved while at the same time let them continue playing the game with full functionality. This is not an easy task to do, but probably better than eternity of being stuck in one time playing card game with another pet.
|
I think there is a reason why there are dozens of harem-management games where player becomes harem's owner and manages slave instead of being one. I think in large part there isn't much of a way to make the player be a slave and keep the gameplay entertaining. If becoming a slave means less choice - the game may become boring. In this mod I'm trying my best to still feel like player is enslaved while at the same time let them continue playing the game with full functionality. This is not an easy task to do, but probably better than eternity of being stuck in one time playing card game with another pet.
|
||||||
|
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
extends "res://Scenes/SceneBase.gd"
|
|
||||||
|
|
||||||
var startLocation = ""
|
|
||||||
var endLocation = ""
|
|
||||||
var path = []
|
|
||||||
var whoLeashingID = ""
|
|
||||||
var randomChat = []
|
|
||||||
var teleportwhenskipped = true
|
|
||||||
var pose = "walk"
|
|
||||||
|
|
||||||
func _initScene(_args = []):
|
|
||||||
whoLeashingID = _args[0]
|
|
||||||
startLocation = _args[1]
|
|
||||||
endLocation = _args[2]
|
|
||||||
if(_args.size() > 3):
|
|
||||||
randomChat = _args[3]
|
|
||||||
if (_args.size() > 4):
|
|
||||||
teleportwhenskipped = _args[4]
|
|
||||||
if (_args.size() > 5):
|
|
||||||
pose = _args[5]
|
|
||||||
|
|
||||||
path = GM.world.calculatePath(startLocation, endLocation)
|
|
||||||
if(path.size() <= 0):
|
|
||||||
endScene()
|
|
||||||
|
|
||||||
func _init():
|
|
||||||
sceneID = "ParadedOnALeashScene"
|
|
||||||
|
|
||||||
func _run():
|
|
||||||
if(state == ""):
|
|
||||||
addCharacter(whoLeashingID)
|
|
||||||
|
|
||||||
if(state == "" || state == "leashed"):
|
|
||||||
if(state == "leashed"):
|
|
||||||
playAnimation(StageScene.Duo, pose, {npc=whoLeashingID, npcAction="walk", flipNPC=true, bodyState={leashedBy=whoLeashingID}})
|
|
||||||
if(path.size() > 0):
|
|
||||||
aimCameraAndSetLocName(path[0])
|
|
||||||
|
|
||||||
var _roomInfo = GM.world.getRoomByID(path[0])
|
|
||||||
|
|
||||||
if(_roomInfo == null):
|
|
||||||
saynn("You're being walked on a leash by {leasher.name}")
|
|
||||||
else:
|
|
||||||
saynn("You're being walked on a leash by {leasher.name}")
|
|
||||||
|
|
||||||
if(GM.pc.isBlindfolded() && !GM.pc.canHandleBlindness()):
|
|
||||||
saynn(_roomInfo.getBlindDescription())
|
|
||||||
else:
|
|
||||||
saynn(_roomInfo.getDescription())
|
|
||||||
|
|
||||||
if(randomChat.size() > 0 && RNG.chance(min(30, randomChat.size() * 10))):
|
|
||||||
saynn("[say=leasher]"+RNG.pick(randomChat)+"[/say]")
|
|
||||||
|
|
||||||
if (teleportwhenskipped):
|
|
||||||
addButton("Skip", "Skip the walk", "skipwalk")
|
|
||||||
else:
|
|
||||||
addButton("Skip", "Skip the walk", "endthescene")
|
|
||||||
addButtonAt(6, "Follow", "Follow the leash", "follow")
|
|
||||||
addDisabledButtonAt(10, "Leashed", "Can't escape from the leash")
|
|
||||||
addDisabledButtonAt(11, "Leashed", "Can't escape from the leash")
|
|
||||||
addDisabledButtonAt(12, "Leashed", "Can't escape from the leash")
|
|
||||||
if (state == "skipwalk"):
|
|
||||||
aimCamera(endLocation)
|
|
||||||
GM.pc.setLocation(endLocation)
|
|
||||||
|
|
||||||
endScene()
|
|
||||||
|
|
||||||
func _react(_action: String, _args):
|
|
||||||
if(_action == "endthescene"):
|
|
||||||
endScene()
|
|
||||||
return
|
|
||||||
|
|
||||||
if(_action == "follow"):
|
|
||||||
if(path.size() == 0):
|
|
||||||
endScene()
|
|
||||||
return
|
|
||||||
|
|
||||||
var nextLoc = path[0]
|
|
||||||
path.remove(0)
|
|
||||||
|
|
||||||
if(!GM.world.hasRoomID(nextLoc)):
|
|
||||||
endScene()
|
|
||||||
return
|
|
||||||
|
|
||||||
GM.pc.setLocation(nextLoc)
|
|
||||||
if(path.size() == 0):
|
|
||||||
endScene()
|
|
||||||
return
|
|
||||||
setState("leashed")
|
|
||||||
return
|
|
||||||
|
|
||||||
setState(_action)
|
|
||||||
|
|
||||||
func saveData():
|
|
||||||
var data = .saveData()
|
|
||||||
|
|
||||||
data["startLocation"] = startLocation
|
|
||||||
data["endLocation"] = endLocation
|
|
||||||
data["path"] = path
|
|
||||||
data["whoLeashingID"] = whoLeashingID
|
|
||||||
data["randomChat"] = randomChat
|
|
||||||
data["teleportwhenskipped"] = teleportwhenskipped
|
|
||||||
data["pose"] = pose
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
func loadData(data):
|
|
||||||
.loadData(data)
|
|
||||||
|
|
||||||
startLocation = SAVE.loadVar(data, "startLocation", "")
|
|
||||||
endLocation = SAVE.loadVar(data, "endLocation", "")
|
|
||||||
path = SAVE.loadVar(data, "path", [])
|
|
||||||
whoLeashingID = SAVE.loadVar(data, "whoLeashingID", "")
|
|
||||||
randomChat = SAVE.loadVar(data, "randomChat", [])
|
|
||||||
teleportwhenskipped = SAVE.loadVar(data, "teleportwhenskipped", true)
|
|
||||||
pose = SAVE.loadVar(data, "pose", "walk")
|
|
||||||
|
|
||||||
func resolveCustomCharacterName(_charID):
|
|
||||||
if(_charID == "leasher" && whoLeashingID != ""):
|
|
||||||
return whoLeashingID
|
|
||||||
|
|
||||||
return null
|
|
Loading…
Reference in a new issue