Update 31.10
This commit is contained in:
parent
dbf3e3d018
commit
582daffac5
|
@ -178,7 +178,6 @@ func markCabinetAsActivated(cabinetNumber:int):
|
|||
GM.main.setModuleFlag("PierreModule", "Activated_Cabinets", activated_cabinets)
|
||||
|
||||
func _react(_action: String, _args):
|
||||
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
|
|
@ -5,6 +5,7 @@ func _init():
|
|||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "hall_ne_corner")
|
||||
es.addEventCheck(self, "PierreBusy")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
#if(doEventCheck("PierreBusy") != null):
|
||||
|
@ -23,6 +24,12 @@ func run(_triggerID, _args):
|
|||
|
||||
GM.main.applyWorldEdit("PierreWorldEdit")
|
||||
|
||||
if(checkCharacterBusy("PierreBusy", "Pierre is not here", "Pierre")):
|
||||
saynn("This corner is not occupied by anyone at the momentm, just three empty blankets with a chair.")
|
||||
if getModuleFlag("PierreModule", "Quest_Status") == 5:
|
||||
addButton("Paper", "A piece of paper lies left in a hurry", "paper")
|
||||
return
|
||||
|
||||
saynn("You see Pierre sitting on a chair in a corner, around him there are three leashed slaves.")
|
||||
addButton("Pierre", "Talk to Pierre", "talk")
|
||||
if(!getModuleFlag("PierreModule", "Pets_Introduced")):
|
||||
|
@ -53,3 +60,9 @@ func onButton(_method, _args):
|
|||
runScene("PierreTalkScene")
|
||||
if(_method == "pets"):
|
||||
runScene("PetsTalkScene")
|
||||
if(_method == "paper"):
|
||||
runScene("NoPetsTalkScene")
|
||||
|
||||
func eventCheck(_checkID, _args = []):
|
||||
if(getModuleFlag("PierreModule", "Quest_Status") == 5 and getModuleFlag("PierreModule", "Quest_Wait_Another_Day") == true):
|
||||
return {busy=true}
|
||||
|
|
19
MedicalPeekEvent.gd
Normal file
19
MedicalPeekEvent.gd
Normal file
|
@ -0,0 +1,19 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "MedicalLamiaPeekEvent"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.EnteringRoom, "med_near_wards")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(getModuleFlag("PierreModule", "Quest_Status") == 5 and getModuleFlag("PierreModule", "Quest_Wait_Another_Day") == true):
|
||||
addButton("Investigate", "Eavesdrop on large commotion in the hospital room next to you", "main")
|
||||
|
||||
func getPriority():
|
||||
return 0
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
runScene("MedicalLamiaPeekScene")
|
||||
|
17
MedicalPeekScene.gd
Normal file
17
MedicalPeekScene.gd
Normal file
|
@ -0,0 +1,17 @@
|
|||
extends SceneBase
|
||||
|
||||
func _init():
|
||||
sceneID = "MedicalLamiaPeekScene"
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
saynn("You can definietely hear something happening there...")
|
||||
addButton("Leave", "Leave", "endthescene")
|
||||
# How to lock player out of entering the hospital room?
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
||||
setState(_action)
|
17
Module.gd
17
Module.gd
|
@ -13,7 +13,12 @@ func getFlags():
|
|||
"PC_Enslavement_Status": flag(FlagType.Number),
|
||||
"Azazel_Catnips_given": flag(FlagType.Number),
|
||||
"Quest_Bonked": flag(FlagType.Bool),
|
||||
"Activated_Cabinets": flag(FlagType.Dict)
|
||||
"Quest_Wait_Another_Day": flag(FlagType.Bool),
|
||||
"Activated_Cabinets": flag(FlagType.Dict),
|
||||
"QuestionnaireQ1": flag(FlagType.Bool),
|
||||
"QuestionnaireQ2": flag(FlagType.Bool),
|
||||
"QuestionnaireQ3": flag(FlagType.Text),
|
||||
"QuestionnaireQ4": flag(FlagType.Text),
|
||||
}
|
||||
|
||||
|
||||
|
@ -24,14 +29,17 @@ func _init():
|
|||
events = [
|
||||
"res://Modules/PierreModule/EventTileOnEnter.gd",
|
||||
"res://Modules/PierreModule/GreenhouseCatnip.gd",
|
||||
"res://Modules/PierreModule/EngRoomClosetEvent.gd"
|
||||
"res://Modules/PierreModule/EngRoomClosetEvent.gd",
|
||||
"res://Modules/PierreModule/PierreQuestionnaireEvent.gd"
|
||||
]
|
||||
|
||||
scenes = [
|
||||
"res://Modules/PierreModule/PierreTalkMain.gd",
|
||||
"res://Modules/PierreModule/GreenhouseCatnipStealScene.gd",
|
||||
"res://Modules/PierreModule/PetsTalkMain.gd",
|
||||
"res://Modules/PierreModule/EngRoomScene.gd"
|
||||
"res://Modules/PierreModule/EngRoomScene.gd",
|
||||
"res://Modules/PierreModule/PierreQuestionnaireScene.gd",
|
||||
"res://Modules/PierreModule/NoPetsTalkMain.gd"
|
||||
]
|
||||
|
||||
characters = [
|
||||
|
@ -48,7 +56,7 @@ func _init():
|
|||
items = [
|
||||
"res://Modules/PierreModule/CatnipItem.gd",
|
||||
"res://Modules/PierreModule/MapItem.gd",
|
||||
"res://Modules/PierreModule/CookieItem.gd"
|
||||
"res://Modules/PierreModule/CookieItem.gd" # I just felt like this game needs more variety in items, even if by themselves they don't do much
|
||||
]
|
||||
|
||||
quests = [
|
||||
|
@ -58,3 +66,4 @@ func _init():
|
|||
func resetFlagsOnNewDay():
|
||||
GM.main.setModuleFlag("PierreModule", "Azazel_Catnip_taken_today", false)
|
||||
GM.main.setModuleFlag("PierreModule", "Activated_Cabinets", {})
|
||||
GM.main.setModuleFlag("PierreModule", "Quest_Wait_Another_Day", false)
|
||||
|
|
19
NoPetsTalkMain.gd
Normal file
19
NoPetsTalkMain.gd
Normal file
|
@ -0,0 +1,19 @@
|
|||
extends SceneBase
|
||||
|
||||
func _init():
|
||||
sceneID = "NoPetsTalkScene"
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
saynn("You take a look at sheet of paper laying on the floor. It must have been dropped by Pierre when he stormed out of here with his pets.")
|
||||
saynn("It's insanely difficult to tell what exactly is drawn on the sheet of paper. The lines are very shaky and by themselves they hardly make anything recognizable.")
|
||||
saynn("It kind of reminds you of a snake, though it has no head and rather is like a tube with spiky tail. The other end of that tube seems to have been filled with color.")
|
||||
saynn("There isn't much more you can gather from this little piece of paper.")
|
||||
addButton("Leave", "Leave the paper as it is", "endthescene")
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
||||
setState(_action)
|
|
@ -12,6 +12,9 @@ func _run():
|
|||
addButton("Lamia", "Approach Lamia", "lamiamain")
|
||||
addButton("Leave", "Be on your way", "endthescene")
|
||||
|
||||
if(state == "paper"):
|
||||
saynn("deez balls")
|
||||
|
||||
if(state == "azazelmain"):
|
||||
playAnimation(StageScene.Duo, "stand", {npc="azazel", npcAction="sit"}) # TODO There is better sitting pose, like in gym, but need to find where poses are stored
|
||||
if GM.main.getModuleFlag("PierreModule", "PC_Enslavement_Status") == 0:
|
||||
|
@ -22,11 +25,18 @@ func _run():
|
|||
addButton("Appearance", "Look at Azazel", "azazelappearance")
|
||||
if(GM.pc.getInventory().hasItemID("CatnipPlant")):
|
||||
saynn("Before you even have the time to approach Azazel, you see his head hovering over his body, his little nose working very hard to track down the source of the curious smell. He looks around with interest, until he sees you approaching.\nHe observes you with interest as you come close.")
|
||||
saynn("[say=azazel]Meow! You really smell of a cat nip, do you have catnip? Do you??")
|
||||
saynn("[say=azazel]Meow! You really smell of a cat nip, do you have catnip? Do you??[/say]")
|
||||
saynn("{azazel.name} becomes really excited, as exemplified by his tail stretching high as if it was a broom stick. His body constantly sways.")
|
||||
addButton("Give Catnip", "Give Azazel the catnip", "catnip")
|
||||
addButton("Back", "Take a step back", "")
|
||||
|
||||
if(state == "lamiamain"):
|
||||
if GM.main.getModuleFlag("PierreModule", "PC_Enslavement_Status") == 0:
|
||||
saynn("You approach Lamia")
|
||||
else:
|
||||
pass # TODO
|
||||
saynn("")
|
||||
|
||||
if(state == "catnip"):
|
||||
saynn("You take the catnip and slowly reach your paw with the plant to the feline. Halfway there feline snatches the catnip from you paw and throws it in the air. His paws go above and he plays airborne valley...catnip with it? Eventually he misses with his paw and catnip falls on his muzzle, he freezes for a moment as if paralyzed, the pupils in his eyes become large.")
|
||||
saynn("[say=pc]Umm, Azazel, are you okey?[/say]")
|
||||
|
@ -42,6 +52,13 @@ func _run():
|
|||
|
||||
if(state == "azazeltalk"):
|
||||
GM.main.setModuleFlag("PierreModule", "Azazel_Catnip_talked", true)
|
||||
addButton("Prison", "How did he end up in prison?", "azazelprison")
|
||||
addButton("Pierre", "What he thinks of his master?", "azazelmaster")
|
||||
addButton("Breeder", "What he thinks of his position as a breeding bitch?", "azazelbreeding")
|
||||
addButton("Fetishes", "He mentioned his fetishes, perhaps he could elaborate?", "azazelfetishes")
|
||||
addButton("Hobby", "Does he do anything other than sex???", "azazelhobby")
|
||||
addButton("Pussy", "Azazel has a pussy and yet he is rather masculine", "azazelintersex")
|
||||
addButton("Hero", "")
|
||||
if(GM.pc.getInventory().hasItemID("CatnipPlant")):
|
||||
pass
|
||||
else:
|
||||
|
@ -49,7 +66,7 @@ func _run():
|
|||
addButton("Back", "Do something else", "azazelmain")
|
||||
|
||||
if(state == "azazelappearance"):
|
||||
saynn("You take a closer look at {azazel.name}. He is a very thin and fairly short feline, judging from him sitting he is around " + Util.cmToString(150) + " tall, with no visible muscles, likely not very strong. Overall his body is still mostly masculine, though here and there there are feminine features like his face or shoulders.\nHis fur is in majority dark grey, though his belly and face are of ligher shade of gray. A small set of horns protrudes from his head. Connecting his backside is a medium sized feline tail.\n\nOne significant detail is that he does not possess a penis, in its place there is a {azazel.pussyStretch} vagina.")
|
||||
saynn("You take a closer look at {azazel.name}. He is a very thin and fairly short feline, judging from him sitting he is around " + Util.cmToString(150) + " tall, with no visible muscles, likely not very strong. Overall his body is still mostly masculine, though here and there there are feminine features like his face or shoulders.\nHis fur is in majority dark grey, though his belly and face are of ligher shade of gray. A small set of horns protrudes from his head. On his backside there is a medium sized feline tail.\n\nOne significant detail is that he does not possess a penis, in its place there is a {azazel.pussyStretch} vagina, above which you can see words ”PIERRE'S PROPERTY” branded onto the skin.")
|
||||
addButton("Back", "Do something else", "azazelmain")
|
||||
|
||||
func _react(_action: String, _args):
|
||||
|
|
25
PierreQuestionnaireEvent.gd
Normal file
25
PierreQuestionnaireEvent.gd
Normal file
|
@ -0,0 +1,25 @@
|
|||
extends EventBase
|
||||
|
||||
func _init():
|
||||
id = "Ch1PierreQuestQuestionnaire"
|
||||
|
||||
func registerTriggers(es):
|
||||
es.addTrigger(self, Trigger.TalkingToNPC, "pierre")
|
||||
|
||||
func run(_triggerID, _args):
|
||||
if(GM.main.getModuleFlag("PierreModule", "Quest_Status") == 4):
|
||||
if GM.main.getModuleFlag("PierreModule", "Quest_Wait_Another_Day") == false:
|
||||
addButton("Next task", "Ask Pierre about next task", "main")
|
||||
else:
|
||||
addDisabledButton("Next task", "You need to wait until tomorrow")
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func onButton(_method, _args):
|
||||
if(_method == "main"):
|
||||
GM.main.endCurrentScene()
|
||||
runScene("PierreQuestionnaire")
|
||||
|
||||
func getPriority():
|
||||
return 20
|
129
PierreQuestionnaireScene.gd
Normal file
129
PierreQuestionnaireScene.gd
Normal file
|
@ -0,0 +1,129 @@
|
|||
extends SceneBase
|
||||
|
||||
func _init():
|
||||
sceneID = "PierreQuestionnaire"
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
playAnimation(StageScene.Duo, "sit", {npc="pierre", npcAction="sit"})
|
||||
saynn("[say=pierre]Alrighty, pet in training. It's the first time I do this, but I'm going to give you a bunch of questions and I expect you to answer them truthfully. Don't dwell too long on them, trust your instinct.\nBlah blah blah, there are no wrong answers something something. You get the drill right? You must have filled a similar one in the past. Tablet will only present you with questions, you answer to me.[/say]")
|
||||
saynn("[say=pierre]Also, this will take a bit, here, have a seat.[/say]")
|
||||
saynn("He pulls a folding chair from behind his and unfolds it in front of himself, you sit and he passes a tablet to you. On it a giant button titled ”Start”.")
|
||||
addButton("Start", "Start the questionnaire", "q1")
|
||||
addButton("Later", "Maybe do this later, it looks like it is gonna take a while...", "endthescene")
|
||||
|
||||
if(state == "q1"):
|
||||
saynn("You hit giant Start button. Screen flashes for split of a second. You feel intense gaze of Pierre studying your face as you read the first question.")
|
||||
saynn("„Do you believe creatures possess a soul?”")
|
||||
saynn("This question lingers in for you a second, but your ultimate answer is...")
|
||||
addButton("Yes", "Yes, you do believe souls exist", "q1yes", [true])
|
||||
addButton("No", "You don't believe in existance of souls", "q1no", [false])
|
||||
|
||||
if(state == "q1yes"):
|
||||
saynn("[say=pc]I do believe creatures possess a soul, yeah.[/say]")
|
||||
saynn("You look at Pierre to see his reaction.")
|
||||
saynn("[say=pierre]Interesting, what do you think happens with it after a creature dies?[/say]")
|
||||
addButton("Disappears", "The soul disappears when the body dies", "q2")
|
||||
addButton("Moves", "The soul goes to heaven/hell/purgatory/other kind of place", "q2")
|
||||
addButton("Reincarnates", "The soul reincarnates as different creature", "q2")
|
||||
|
||||
if(state == "q1no"):
|
||||
saynn("[say=pc]I don't believe that souls exist honestly, when we die - we die, there is no reason to be sentimental and add on some kind of feel good concept onto the death.[/say]")
|
||||
saynn("[say=pierre]Bold. Death is scary to many, but is soul really just a concept giving us closure to idea of living? Hmm. Anyways, lets move on.[/say]")
|
||||
addButton("Next question", "Moving on", "q2")
|
||||
|
||||
if(state == "q2"):
|
||||
saynn("Looking back at tablet's screen, next question pops up.")
|
||||
saynn("„Do you consider yourself loyal?”")
|
||||
saynn("Not an unexpected question for this quiz.")
|
||||
addButton("Yes", "I do consider myself loyal", "q2yes", [true])
|
||||
addButton("No", "I don't consider myself loyal", "q2no", [false])
|
||||
|
||||
if(state == "q2yes"):
|
||||
var protectedTavi = getModuleFlag("TaviModule", "Ch3ProtectedTavi")
|
||||
var onlyTaviPunished = getModuleFlag("TaviModule", "Ch5OnlyTaviPunished")
|
||||
if(protectedTavi == null and onlyTaviPunished == true):
|
||||
saynn("Pierre chuckes as you said yes")
|
||||
saynn("[say=pierre]I see. I see.[/say]")
|
||||
elif(protectedTavi == true and onlyTaviPunished == false):
|
||||
saynn("Pierre gives you a warm smile as you said that. One that makes you feel particularly good about this answer.")
|
||||
saynn("[say=pierre]I see. Loyal pets are a rarity.[/say]")
|
||||
elif(protectedTavi == null and onlyTaviPunished == false):
|
||||
saynn("Pierre gives you a smile as you said that.")
|
||||
saynn("[say=pierre]Good to know.[/say]")
|
||||
else:
|
||||
saynn("Pierre gives you a smile as you said that.")
|
||||
saynn("[say=pierre]I like loyal pets.[/say]")
|
||||
saynn("[say=pierre]Anyways, lets proceed with the next one.[/say]")
|
||||
addButton("Next question", "Moving on", "q3")
|
||||
|
||||
if(state == "q2no"):
|
||||
var protectedTavi = getModuleFlag("TaviModule", "Ch3ProtectedTavi")
|
||||
var onlyTaviPunished = getModuleFlag("TaviModule", "Ch5OnlyTaviPunished")
|
||||
if(protectedTavi == null and onlyTaviPunished == true):
|
||||
saynn("You look at Pierre, he doesn't seem to be surprised by your answer, his face is still.")
|
||||
saynn("[say=pierre]Alright.[/say]")
|
||||
elif(protectedTavi == true and onlyTaviPunished == false):
|
||||
saynn("Pierre gives you a smile as you said that, he seems surprised.")
|
||||
saynn("[say=pierre]Hmm, that's interesting. I wonder, are you being humble or... Anyways, let's move on.[/say]")
|
||||
elif(protectedTavi == null and onlyTaviPunished == false):
|
||||
saynn("Pierre looks at you with curiosity.")
|
||||
saynn("[say=pierre]Funny.[/say]")
|
||||
else:
|
||||
saynn("Pierre considers you for a moment.")
|
||||
saynn("[say=pierre]Okey then, I suppose we can move on.[/say]")
|
||||
addButton("Next!", "Another one", "q3")
|
||||
|
||||
if(state == "q3"):
|
||||
saynn("You look back at your tablet. You stare it for good 10 seconds, but no new question comes up. You start wondering if something is wrong or...")
|
||||
saynn("[say=pierre]Give me that for a second.[/say]")
|
||||
saynn("He takes the tablet from your paws and holds it. He then shakes it in all directions as if it was a snow globe toy, hitting it a few times on the floor for a good measure. After a solid minute of this treatment the tablet flashes with colors for a second and displays the next question.")
|
||||
saynn("[say=pierre]Here you go. Technology is sometimes stubborn, you'd think that violence is never an option, but for electronics? Those things fear you. Givving them a good whack sometimes helps them come to their senses.[/say]")
|
||||
saynn("He laughs, while passing the tablet back to you. Next questions says...")
|
||||
saynn("„What body part of yours do you consider most desirable?”")
|
||||
saynn("[say=pierre]By that I mean, which one of them you find the most essential to your identity... I guess...[/say]")
|
||||
var body_parts = GM.pc.getBodyparts()
|
||||
for bp in body_parts:
|
||||
var body_part = body_parts[bp]
|
||||
if body_parts[bp] == null or bp in [BodypartSlot.Body, BodypartSlot.Hair]:
|
||||
continue
|
||||
addButton(body_part.getName().capitalize(), "Your "+body_part.getName()+" feels like the most appropriate answer here", "q3answer", [body_part.id])
|
||||
|
||||
if(state == "q3answer"):
|
||||
GM.main.setModuleFlag("PierreModule", "Quest_Status", 5)
|
||||
GM.main.setModuleFlag("PierreModule", "Quest_Wait_Another_Day", true)
|
||||
saynn("[say=pierre]Fascinating![/say]")
|
||||
saynn("He notes, presumably your answer, then he looks at the time.")
|
||||
saynn("[say=pierre]Wow, we are so quick with those![/say]")
|
||||
saynn("[say=pierre]Perhaps you'd like some wat-[/say]")
|
||||
saynn("[say=azazel]Master, master![/say]")
|
||||
saynn("You can hear sense of urgency in Azazel's voice.")
|
||||
saynn("[say=pierre]Yes, pet? What happened?[/say]")
|
||||
saynn("[say=azazel]Lamia, they... I think they...[/say]")
|
||||
saynn("Everyone immediately starts looking at Lamia. The fox is curled up, their head hidden under all of their fluff, they are visibly shaking.\nPierre jumps out of the chair, it falling on its back and making a lot of noise. He kneels next to Lamia and puts his paw gently under their head to see their face. Lamia is in tears, it's difficult to look at him at this state.")
|
||||
saynn("[say=pierre]Lamia, please, show.[/say]")
|
||||
saynn("He grabs a pen and hands it to Lamia. Lamia with great struggle takes the pen and scribbles something on piece of paper, you can't see it, it's behind Pierre's body. Pierre looks at the piece of paper and as he realizes what Lamia drew he shouts")
|
||||
saynn("[say=pierre]Pets, with me. To medical, now.[/say]")
|
||||
saynn("He grabs Lamia on his muscular hands and holds them in front. Fox is still curled up. It looks as if he is holding a large furry donut, but without a hole.")
|
||||
saynn("[say=pierre]"+GM.pc.getName() + ", we will finish the questionnaire later. Azazel, Hiisi, with me.[/say]")
|
||||
saynn("You haven't heard his tone being so serious... Ever. Two pets followed their master, still leashed, him holding the other ends in his paw while almost running towards the elevator.\nIt's interesting how he always takes all of his pets with him wherever he goes. This situation looked really urgent, makes you wonder what had happened. but you guess there is no point in standing here.")
|
||||
addButton("Leave", "That would be it for today, you guess", "endthescene")
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if(_action == "endthescene"):
|
||||
endScene()
|
||||
return
|
||||
|
||||
if(_args):
|
||||
if(_action.begins_with("q1") ):
|
||||
setModuleFlag("PierreModule", "QuestionnaireQ1", _args[0])
|
||||
elif(_action.begins_with("q2")):
|
||||
setModuleFlag("PierreModule", "QuestionnaireQ2", _args[0])
|
||||
elif(_action.begins_with("q3")):
|
||||
setModuleFlag("PierreModule", "QuestionnaireQ3", _args[0])
|
||||
|
||||
setState(_action)
|
||||
|
||||
|
||||
func getDevCommentary():
|
||||
return "Writing questionnaire took me a while. I knew I wanted to write wuestionnaire and I wanted it to be meaningful in a way. At first the idea was that a player will choose some options and then Pierre will use them to apply punishments and rewards according to those responses. However evantually I felt like this may not be the best usage of questionnaire. One thing that to me is missing in the game is the lack of impact of choices made in other character arcs on the rest of the prison, I really wanted to do something about it, so I decided to possibly involve choices made in Tavi's questline as well as Rahi's to judge player for slavery fitness. There is also the fact that I enjoy ethics, so I slapped some ethics questions as well, this allows me to show that Pierre is not a two-dimensional character and works according to some rules he subscribes to as well. The end result is a weird mix of stuff. Don't know how I ultimately feel about all of this, but I think the idea of questionnaire is a solid one in here."
|
|
@ -6,6 +6,11 @@ var random_pierre_activities_talk = [
|
|||
|
||||
func _init():
|
||||
sceneID = "PierreTalkScene"
|
||||
|
||||
func _reactInit():
|
||||
if(GM.ES.triggerReact(Trigger.TalkingToNPC, ["pierre"])):
|
||||
endScene()
|
||||
return
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
|
@ -46,6 +51,7 @@ func _run():
|
|||
if GM.main.getModuleFlag("PierreModule", "Quest_Status") == 3:
|
||||
addButton("Gumball", "Bring back the gumball to Pierre", "quest1turn")
|
||||
addButton("Leave", "Be on your way", "endthescene")
|
||||
GM.ES.triggerRun(Trigger.TalkingToNPC, ["pierre"])
|
||||
|
||||
if(state == "name"):
|
||||
addCharacter("pierre")
|
||||
|
@ -87,9 +93,12 @@ func _run():
|
|||
saynn("[say=pierre]Right, of course you don't, hah. But look at him now, pristine puppy boy! He love his belly rubs and stays out of the trouble! ... Well, mostly. Anyways, despite his troubled past, he agreed to join me and became my pup! Hiisi cmon, welcome our guest, give {pc.him} a sniff!")
|
||||
saynn("[say=hiisi]" + GM.pc.getName() + " isn't it? Umm... Hi.[/say]")
|
||||
saynn("{hiisi.name} licks your leg, leaving a bit of saliva on your fur.") # TODO Fur/skin
|
||||
saynn("[say=pierre]I apologize for my pets, they aren't used to longer conversations with strangers. They've been through a lot and... *sigh* Anyways, Lamia! Lamia is a fox breed, [/say]")
|
||||
saynn("[say=pierre]I apologize for my pets, they aren't used to longer conversations with strangers. They've been through a lot and... *sigh* Anyways, Lamia! Lamia is a fox breed, he doesn't speak. He communicates with drawings. He isn't great at them, by any means, but to me it makes him very special. He doesn't mind being mute.[/say]")
|
||||
addButton("Leave", "Be on your way", "endthescene")
|
||||
addButton("Pets", "Ask more about pets", "hiisipet")
|
||||
|
||||
if(state == "lamia"):
|
||||
saynn("You take a step towards Lamia to give him a pawshake. He sits on a blanket, next to him a stack of empty paper sheets, and a smaller pile of ")
|
||||
|
||||
if(state == "pierredetails"):
|
||||
saynn("You ask Pierre about himself. He looks at you with intensity, studying your face.")
|
||||
|
@ -217,6 +226,7 @@ func _run():
|
|||
|
||||
if(state == "quest1turn"):
|
||||
GM.main.setModuleFlag("PierreModule", "Quest_Status", 4)
|
||||
GM.main.setModuleFlag("PierreModule", "Quest_Wait_Another_Day", true)
|
||||
saynn("[say=pc]Is... This what you wanted?[/say]")
|
||||
saynn("You said with uncertainty in your voice, presenting Pierre with a packet of gumball.\nPierre looks at you elated, he claps his paws.")
|
||||
saynn("[say=pierre]Yes, YES. This is exactly what I needed, pet.[/say]")
|
||||
|
@ -230,13 +240,19 @@ func _run():
|
|||
saynn("[say=pierre]I assume no more, akhem, ”wall incidents”?[/say]")
|
||||
saynn("He grins")
|
||||
saynn("[say=pierre]And with just that you've passed my first test. Congratulations! I knew you could do it.[/say]")
|
||||
# TODO
|
||||
saynn("[say=pierre]That would be it for today. For your next time I'll have to prepare a little. I should have something for you tomorrow, so please come then.[/say]")
|
||||
addButton("Alright", "Leave", "endthescene")
|
||||
# Which body part you hold dearest?
|
||||
# 2 questions based on stories from Tavi, and Rahi, using their flags to phrase the questions
|
||||
# Trolley problem?
|
||||
# Favorite species
|
||||
#
|
||||
|
||||
func calculateHaremScore():
|
||||
var score = 0
|
||||
score += GM.pc.getPersonality().getStat("Subby")*10 # -10 - 10
|
||||
score += GM.pc.getReputation().getRepLevel(RepStat.Whore)*10 # 0 - 90
|
||||
return int(score)
|
||||
return int(score) # -10 - 100
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if(_action == "endthescene"):
|
||||
|
|
|
@ -8,6 +8,7 @@ func getVisibleName():
|
|||
|
||||
func getProgress():
|
||||
var quest_status = GM.main.getModuleFlag("PierreModule", "Quest_Status")
|
||||
var quest_await = GM.main.getModuleFlag("PierreModule", "Quest_Wait_Another_Day", false)
|
||||
var result = []
|
||||
|
||||
result.append("Pierre gave you a map and a task - to get him whatever is in a place marked on the map, and look for number 84. Apparently this trust exercise requires you to wear a blindfold, wonder why...")
|
||||
|
@ -15,8 +16,18 @@ func getProgress():
|
|||
result.append("You've found the hidden closet. Now just to find what Pierre asked of you...")
|
||||
if(quest_status > 2):
|
||||
result.append("You've got a pack of gum. Return it to Pierre.")
|
||||
if(quest_status > 3):
|
||||
result.append("You've delivered a pack of gum to Pierre. ")
|
||||
if(quest_status > 4):
|
||||
result.append("You've delivered a pack of gum to Pierre. His next request was of you to complete a ”test” of some sorts.")
|
||||
if(quest_status == 3 and quest_await):
|
||||
result.append("You've delivered a pack of gum to Pierre. He has asked you to wait until tomorrow when he will have next task for you")
|
||||
if(quest_status == 3 and !quest_await):
|
||||
result.append("You've delivered a pack of gum to Pierre. He should have a new task for you today.")
|
||||
if(quest_status > 5):
|
||||
pass
|
||||
if(quest_status == 5 and quest_await):
|
||||
result.append("You started the questionnaire, however your answering session was abruptly interrupted by medical emergency of Lamia. Pierre asked you to come other day.")
|
||||
if(quest_status == 5 and !quest_await):
|
||||
result.append("You started the questionnaire, however your answering session was abruptly interrupted by medical emergency of Lamia. Pierre asked you to come other day, at least a day has passed so you should check up with them.")
|
||||
return result
|
||||
|
||||
func isVisible():
|
||||
|
@ -35,3 +46,4 @@ func isMainQuest():
|
|||
# 2 - arrived at closet
|
||||
# 3 - looted the gumball
|
||||
# 4 - gave the gumball to Pierre
|
||||
# 5 -
|
||||
|
|
25
README.md
25
README.md
|
@ -1,8 +1,27 @@
|
|||
# Pierre
|
||||
A mod for Broken Dreams Correctional Center directed at submissive players who yearn for some more dominant NPCs. Introduces Pierre and his harem of sl- pets.
|
||||
A mod for Broken Dreams Correctional Center. Introduces Pierre (name will be changed later on for compatibility reasons) and his harem of sl- pets.
|
||||
|
||||
# Why?
|
||||
So many reasons. I wanted to try myself at modding. I wanted to make some content for subby players like myself. I wanted to see if content I write can still have effect on myself (I doubt lol).
|
||||
So many reasons.
|
||||
- I wanted to try myself at modding.
|
||||
- I wanted to make some content for subby players like myself.
|
||||
- I wanted to see if content I write can still have effect on myself (I doubt lol).
|
||||
- I wanted to express my own sexuality in a way.
|
||||
- I want the mod to be a little statement and action behind my words of supporting sex-positivity by contributing something sexual and being public about it (like on my website, also, this is not to say that the mod is for myself, even though in part it is)
|
||||
|
||||
Majority of this mod's content has been written without too much thought put into it, on fly and on sheer impulse. I'm certainly far from award winning story writer, but I tried my best, only you can judge how good of a job I've done.
|
||||
|
||||
# Goals
|
||||
The goal is to create a mod with as little of overwriting the core modules to preserve compabibility.
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
|
||||
## Base game
|
||||
The goal is to create a mod with as little of overwriting the core modules to preserve compatibility and not have a dance every time base game gets an update. This means that we'll try to use as many of mechanics that already exist in the game.
|
||||
|
||||
# Contributing
|
||||
Anyone is encouraged to contribute! If you think you have a good idea the issue tracker is there, I welcome pull requests and I hope together we can polish them to become part of the mod if there are any concerns.
|
||||
|
||||
I also license the mod on the same license base game is licensed on, it's a nod both to game's developer who I insanely respect for creating such a big, organized, **open-source**, kinky project
|
||||
|
|
Loading…
Reference in a new issue