08.12 updates

This commit is contained in:
Frisk 2024-12-09 01:01:12 +01:00
parent 7271b46632
commit 46a60968bf
11 changed files with 164 additions and 32 deletions

View file

@ -4,21 +4,35 @@ func _init():
id = "IssixSpecialEvent"
var registered_special_scenes = [['IssixSlaveryIntroCont', 1], ['IssixSlaveryBowlTraing', 2], ['IssixSlaveryBranding', 3]]
var registered_special_scenes = [['IssixSlaveryIntroCont', 1, {}], ['IssixBringsComicbooks', 2, {"Comic_Books": 1}], ['IssixSlaveryBowlTraing', 2, {}], ['IssixSlaveryBranding', 3, {}]]
func sort_by_progressionpoints(a, b):
class CustomSorter:
static func sort_by_progressionpoints(a, b):
if a[1] < b[1]:
return true
return false
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
elif requirements[key] is String:
if getModuleFlag("IssixModule", key, 0) != requirements[key]:
return false
return true
func shouldBeShownForcedEvent():
var scenes_seen = getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})["scenes_seen"]
var current_progression_points = GM.main.getModuleFlag("IssixModule", "Progression_Points", 1)
if GM.main.getDays() == GM.main.getModuleFlag("IssixModule", "Progression_Day_Next", 0):
registered_special_scenes.sort_custom("sort_by_progressionpoints")
registered_special_scenes.sort_custom(CustomSorter, "sort_by_progressionpoints")
for scene in registered_special_scenes:
Console.printLine("secene")
if scene[1] > current_progression_points:
return null
if GM.main.getSceneByUniqueID(scene[0]).requirements_met():
if scenes_seen.find(scene[0]) == -1 and checkRequirements(scene[2]):
Console.printLine("requirements met")
return scene[0]
return null

View file

@ -36,10 +36,12 @@ func run(_triggerID, _args):
addButton("Master", "Talk to Master Issix", "talk")
addButton("Pets", "Look at Master's pets", "pets")
match player_enslaved:
1:
1.0: # WHY ARE NUMBER FLAGS FLOATS ASDJASODHASUDHASIDHBASHDASHDOASDJASD kill me
addButton("Pet tasks", "Get a read on today's pet tasks", "slavery")
2:
2.0:
addButton("Prostitution", "Open prostitution info", "slavery")
_:
saynn(player_enslaved)
else:
saynn("You see Issix sitting on a chair in a corner, around him there are three leashed slaves.")
addButton("Issix", "Talk to Issix", "talk")

View file

@ -17,6 +17,8 @@ The mod and contents in it is - surprise surprise - a work of fiction. Author do
- Some branches of choices and situations.
- Hopefully at least around an hour of additional gameplay? Haven't tested yet
In tags: M/player, M/M (implied), petplay, slave, watersports, parasite
# Goals
## 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.

View file

@ -66,6 +66,8 @@ func _run():
0:
if GM.main.getModuleFlag("IssixModule", "Quest_Status", 0) == 0:
addButton("Become his", "Ask if he'd like to make you his own pet", "join")
elif GM.main.getModuleFlag("IssixModule", "Quest_Status", 0) > 10:
pass
else:
addDisabledButton("Become his", "You are currently trying to become his")
1, 3, 4:

View file

@ -0,0 +1,80 @@
extends SceneBase
var attitude = null
var timedifference = 0
func _init():
sceneID = "IssixBringsComicbooks"
func _run():
if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
IssixModule.addSceneToWatched(sceneID)
saynn("When you approach the corner today you can see all of pets engaged in intense reading of something, each one of them holding a small booklet with colorful characters on the covers.")
saynn("[say=pc]What's up? What are you reading there?[/say]")
saynn("[say=azazel]Comic books. we have a few super hero, some horror and some drama ones.[/say]")
saynn("[say=pc]Huh, they look very oldschool, aren't most digital now?[/say]")
saynn("[say=azazel]They are, those are veeery old, even so, they still provide some entertainment value. Do you want to see?[/say]")
saynn("[say=pc]Of course![/say]")
saynn("Azazel grabs one book laying around in his paw and extends it towards you. You take it and look at it, the cover shows an upside down dark anthopomorphic bat with closed eyes and long fangs, the title on the cover is „Bloody Hell” in the kind of font that you'd expect from a book of this genre, rather horror looking like.")
addButton("Open", "Start reading the book", "bookreading")
if state == "bookreading":
saynn("You start to read the provided book, page by page the story describes events that took place in a small village of name Baranowo, where the villagers were one-by-one disappearing every specific night of the year. So far, 4 villagers have disappeared in mysterious circumstances, which prompted the village elder to gather enough of coins to hire a detective from the city to solve the case. Comic first shows the perspective of a detective from nearby city hired to investigate the disappearances, who arrived just before the fatal night, he listens to the villagers explaining the situation in great detail. Readers quickly learn of detective's methods and get glimpses of his previous cases which paint him as a really good detective. The fateful night detective is hard at work being village's faithful eye, looking out for cause or perpetrator of disappearances, ultimately however, he fails. Next morning a female villager named Eliza is found to be missing. Detective immediately begins to investigate, finding clues in Eliza's home. The book ends with him finding a vital clues - a few drops of dizzying liquid in the rug as well as a little bit of fur, that couldn't have been shed by the Eliza.")
saynn("You close the comic.")
addButton("Part 2", "Ask Azazel if there is a second part to this book", "secondpart")
addButton("Meh", "Not interested in another book, you ask Azazel if there is a different one", "differentbook")
addButton("Nope", "Comic books don't interest you much, you will not entertain reading another", "endthescene")
# His thorough investigation of disappearance of yet another villager during the night leads him to a a little bit distant cave, where he discovers all of the villagers alive and well, thralls to the anthropomorphic bat they worship. The end of the book
if state == "secondpart":
saynn("[say=pc]Hey, Azazel, does this one have a second part?[/say]")
saynn("[say=azazel]Hah, interested? „Bloody Hell” hmm, I don't remember reading this one before, and I don't believe I've seen another part in today's pile. It often happens that the other parts come in other drops of those. So perhaps wait for the future drop. Master brings us those fairly regularly every 7 days or so, if your are lucky it may have next part of that series.[/say]")
addButton("Back", "Wait for the second part", "endthescene")
if (GM.pc.getPersonality().getStat(PersonalityStat.Impatient) > 0.3):
saynn("[say=pc]I want it now thoouughh, I cannot wait to see how the story develops![/say]")
saynn("[say=azazel]I feel you {pc.name}, I feel you. Can't do much about that though, sorry. You might ask Master about it but there is little chance he can help you either.[/say]")
saynn("[say=pc]There must be a way![/say]")
saynn("[say=azazel]You are all over that one I see haha. Cool to see you enjoy them.[/say]")
saynn("[say=pc]It's really good, and it ended on a cliff hanger (kind of, maybe).[/say]")
saynn("[say=azazel]I feel like most of those do, it was a detective story wasn't it? Yeah, they tend to do that.[/say]")
addButton("Issix", "Ask issix about the second part", "issixask")
else:
saynn("[say=pc]I see, guess I'll wait then. Thanks, Azazel.[/say]")
saynn("[say=azazel]Of course, no problem cutie.[/say]")
if state == "differentbook":
saynn("[say=pc]Are there any other books I could read?[/say]")
saynn("[say=azazel]Yeah, of course, there are still "+ str(getModuleFlag("IssixModule", "Comic_Books", 0))+" other books. Feel free to check them out whenever.[/say]")
saynn("[say=pc]Thanks Az[/say]")
saynn("You headpat the feline, they purr in appreciation.")
addButton("Back", "Nothing to do but wait", "endthescene")
if state == "issixask":
saynn("[say=pc]Master, Master, do you know anything about this series?[/say]")
saynn("You show him the cover of „Bloody Hell”. He takes it, studies it and thinks for a second.")
saynn("[say=issix]No, I'm afraid not, what about it, pet?[/say]")
saynn("[say=pc]I've read the first book and wondered if you know anything about the second part, or if you've seen it, or have it or or...[/say]")
saynn("[say=issix]Calm down, pet. I understand. Sadly, I have to disappoint you, I don't know anything of this series, nor I remember seeing other parts. Perhaps in the future I'll find one. You'll have to be a bit more patient, okey?[/say]")
saynn("[say=pc]Awww, okey Master, thank you.[/say]")
saynn("Master kisses you on your forehead as you accept the fact you'll have to wait to see if there are more parts of the series you can check out.")
addButton("Back", "Nothing to do but wait", "endthescene")
func _react(_action: String, _args):
if _action == "issixask":
processTime(2*60)
if _action == "bookreading":
increaseModuleFlag("IssixModule", "Pet_Time_Interaction_Today", 30*60)
processTime(30*60)
increaseModuleFlag("IssixModule", "Comic_Books", -1)
setModuleFlag("IssixModule", "Comic_Book_Unlocked", true)
if(_action == "endthescene"):
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+4)
endScene()
return
setState(_action)

View file

@ -12,12 +12,38 @@ func _run():
saynn("Issix almost running stops you with haste before the guard checkpoint. His face is a mix of concern and anger.")
addButton("Excuse", "Think of an excuse to escape this awkward situation", "excuse")
addButton("Honest", "Tell your Master that you just haven't had the time", "honest")
if (GM.pc.getPersonality().getStat(PersonalityStat.Coward) < -0.5):
addButton("Not a pet", "Tell your Master that you no longer wish to be his pet", "rejection")
else:
addDisabledButton("Not a pet", "You are too much of a coward to tell your Master this")
addButton("Walk away", "Just keep walking", "leave")
if state == "excuse":
saynn("[say=pc]I'm sorry, I were working on something really hard lately and...[/say]")
saynn("[say=issix]Enough. I'm not interested in hearing any of this.[/say]")
saynn("He comes to you and attaches the leash to your collar.")
saynn("[say=issix]Disappearing like that and giving me such a bad excuse? That's disappointing, extremely disappointing. You are coming with me.[/say]")
addButton("Continue", "Follow Issix to the corner", "walkcorner")
if state == "honest":
saynn("[say=pc]I'm very sorry Master. I didn't feel like coming lately. I've been taking time to do some-[/say]")
saynn("[say=issix]Enough.[/say]")
saynn("He comes to you and attaches the leash to your collar.")
saynn("[say=issix]This is not what I expect of my pets, I were worried about you, you know? You know exactly what are my expectations towards you - you come to the corner, day after day, you spend some time with us and then you have the rest of entire day to spare. This isn't a lot to ask. Really.[/say]")
saynn("His look of disappointment is pretty hard to bear on you. He leads you towards the corner.")
addButton("Continue", "Follow Issix to the corner", "walkcorner")
if state == "rejection":
saynn("[say=pc]I don't want to be your pet anymore.[/say]")
saynn("Your Master stands stunned by your proclamation.")
saynn("[say=issix]What did you just say?[/say]")
saynn("[say=pc]I no longer want to be your pet.[/say]")
saynn("[say=issix]I don't think you understand your position, pet. You are not in a position to decide on that anymore, you've made your decision a while ago, you don't just get to change it because your feel like it, such decision belongs to your Master. Now, be a good "+IssixModule.getPlayerPetName()+" and come with me.[/say]")
addButton("Continue", "Follow Issix to the corner", "walkcorner")
if state == "leave":
saynn("You decide to ignore the dragon-demon completely and continue walking, to be stopped not even a step later by Your Master's hand grabbing you by the collar.")
saynn("[say=issix]What the fuck do you think you are doing? I asked you a question.[/say]")

View file

@ -6,9 +6,6 @@ var timedifference = 0
func _init():
sceneID = "IssixSlaveryBranding"
func requirements_met():
return getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})["scenes_seen"].find("IssixSlaveryBranding") == -1
func _run():
if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})

View file

@ -3,9 +3,6 @@ extends SceneBase
func _init():
sceneID = "IssixSlaveryIntroCont"
func requirements_met():
return getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})["scenes_seen"].find("IssixSlaveryIntroCont") == -1
func _run():
if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
@ -29,6 +26,7 @@ func _run():
saynn("You obediently lie on your back, unsure what to expect. Master takes your blanket and without further comment starts relieving himself above you. His hot piss hitting your belly. He doesn't drench you in piss like the last time. Rather just leaving enough for anyone nearby to smell him on you.")
saynn("[say=issix]I expect you to stay here one hour, I'm not going to give you a reward.[/say]")
else:
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+2)
saynn("[say=issix]I'm glad to see you. Are you ready for your first day of training?[/say]")
addButton("Yes", "You are ready for the training", "training1")
@ -63,13 +61,18 @@ func _run():
func _react(_action: String, _args):
if _action == "training1":
if(OPTIONS.isContentEnabled(ContentType.Watersports)) and GM.pc.getFluids().hasFluidTypeWithCharID("Piss", "issix") == false:
GM.pc.cummedOnBy("issix", FluidSource.Pissing, 0.4)
if _action == "walkies2":
processTime(4*60)
runScene("ParadedOnALeashScene", ["issix", GM.pc.getLocation(), "gym_entrance", [
"Good job, keep it up",
"Eyes on me, pet",
"Watch the pace, pet",
], "hall_ne_corner", "crawl"])
# runScene("ParadedOnALeashScene", ["issix", GM.pc.getLocation(), "gym_entrance", [
# "Good job, keep it up",
# "Eyes on me, pet",
# "Watch the pace, pet",
# ], "hall_ne_corner", "crawl"])
if(_action == "walkies1"):
processTime(4*60)
@ -81,7 +84,6 @@ func _react(_action: String, _args):
if(_action == "endthescene"):
increaseModuleFlag("IssixModule", "PC_Training_Level")
setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays())
endScene()
return

View file

@ -3,9 +3,6 @@ extends SceneBase
func _init():
sceneID = "IssixSlaveryBowlTraing"
func requirements_met():
return getModuleFlag("IssixModule", "Misc_Slavery_Info", {"scenes_seen": []})["scenes_seen"].find("IssixSlaveryBowlTraing") == -1
func _run():
if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})

View file

@ -11,15 +11,15 @@ func _run():
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
if pet_time_start == null:
pet_time_start = GM.main.getTime()
saynn("WARNING: A lot of the content in here is a placeholder. It will change, it will break, it will cause calamities. Treat it as a sneek peek into the (potential) future.")
addMessage("WARNING: A lot of the content in here is a placeholder. It will change, it will break, it will cause calamities. Treat it as a sneek peek into the (potential) future.")
saynn("Your slave role: "+IssixModule.getPlayerRole())
saynn("Your training: "+trainingCheck())
saynn("Master's mood: "+getMood())
saynn("Issix's slave for "+str(getDays())+" days")
match GM.main.getModuleFlag("IssixModule", "PC_Enslavement_Role", 1):
1:
1.0:
saynn("Amount of time spent in Master's harem today: "+str(getTimeSpentReadable()))
2:
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)))
_:
pass
@ -42,9 +42,11 @@ func _run():
addDisabledButton("Walk", "Walks are unimplemented at the moment, possibly in future releases!")
else:
addDisabledButton("Walk", "Too late for a walk")
addButton("Pass", "Pass the time (placeholder button for now, supposed to be actions with pets/master later)", "passtime")
if getModuleFlag("IssixModule", "Comic_Book_Unlocked", false) == true and getModuleFlag("IssixModule", "Comic_Books", 0) > 0:
addButton("Comic", "Read one of "+ str(getModuleFlag("IssixModule", "Comic_Books", 0)) +" comic books", "readabook")
if not (GM.main.getModuleFlag("IssixModule", "Is_Player_Forced_Today", 0) > (getTimeSpent())) or GM.main.isVeryLate():
addButton("Leave", "Leave", "endthescene")
addButton("Pass", "Pass the time (placeholder button for now, supposed to be actions with pets/master later)", "passtime")
if state == "issixpetmenu":
saynn("[say=issix]"+getMoodMessage()+"[/say]")
@ -88,7 +90,7 @@ func _run():
addButton("Back", "Go back", "")
if state == "lamiapetmenu":
addButton("Placeholder", "Placeholder for activities", "")
addButton("Read", "Read comic books", "")
addButton("Pets", "Ask for pets", "lamiapetrequest")
addButton("Back", "Go back", "")
@ -97,9 +99,12 @@ func _run():
if last_walk + 5 > GM.main.getDays():
saynn("[say=issix]We've just been on a walk pretty recently, so you'll have to be a little bit more patient my pet.[/say]")
else:
saynn("[say=issix]Hmm, soonish, probably in around {0} days. Are you excited for the next walk?[/say]".format(IssixModule.getWalkDelay()-(GM.main.getDays()-last_walk)))
saynn("[say=issix]Hmm, soonish, probably in around "+ str(IssixModule.getWalkDelay()-(GM.main.getDays()-last_walk)) + " days. Are you excited for the next walk?[/say]")
addButton("Back", "Go back", "issixpetmenu")
if state == "readabook":
addButton("Back", "Go back", "")
func getTimeSpent():
@ -171,6 +176,10 @@ func trainingCheck():
return "very good"
func _react(_action: String, _args):
if _action == "readabook":
processTime(20*60)
increaseModuleFlag("IssixModule", "Comic_Books", -1)
if _action == "haremeat":
processTime(10*60)
GM.pc.addStamina(60)

View file

@ -249,6 +249,7 @@ func _react(_action: String, _args):
setModuleFlag("IssixModule", "Progression_Points", 1)
setModuleFlag("IssixModule", "Progression_Day_Next", GM.main.getDays()+1)
setModuleFlag("IssixModule", "Issix_Mood", 50)
setModuleFlag("IssixModule", "Last_Walk", GM.main.getDays())
if _action == "normalroute2":
var itemRef = GlobalRegistry.getItemRef("HeatPill")