30.10 update, progress on quest

This commit is contained in:
Frisk 2024-10-30 22:25:47 +01:00
parent d2a3a1e6ac
commit eae0e2ca1b
15 changed files with 458 additions and 19 deletions

View file

@ -99,11 +99,12 @@ func getThickness() -> int:
return 0
func getFemininity() -> int:
return 50
return 67
func createBodyparts():
giveBodypartUnlessSame(GlobalRegistry.createBodypart("felinehead"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("combedbackhair"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("dragonhorns"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("felineears"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthrobody"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anthroarms"))
@ -112,7 +113,6 @@ func createBodyparts():
giveBodypartUnlessSame(breasts)
giveBodypartUnlessSame(GlobalRegistry.createBodypart("vagina"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anuswomb"))
giveBodypartUnlessSame(GlobalRegistry.createBodypart("anuswomb"))
var tail = GlobalRegistry.createBodypart("felinetail")
tail.tailScale = 1
giveBodypartUnlessSame(tail)

55
CookieItem.gd Normal file
View file

@ -0,0 +1,55 @@
extends ItemBase
func _init():
id = "Cookie"
func getVisibleName():
return "Cookie"
func getDescription():
return "A regular cookie, has brown chocolate chips on it."
func canUseInCombat():
return true
func useInCombat(_attacker:Character, _receiver):
_attacker.addStamina(15)
removeXOrDestroy(1)
return _attacker.getName() + " ate a cookie. They feel a little bit more full."
func getPossibleActions(): # We really shouldn't assume the item is being used by a player character, but sadly game does not give us context for the item user :(
return [
{
"name": "Eat one!",
"scene": "UseItemLikeInCombatScene",
"description": "Eat the cookie",
},
]
func getPrice():
return 0
func canSell():
return true
func canCombine():
return true
func tryCombine(_otherItem):
return .tryCombine(_otherItem)
func getTags():
return []
func getItemCategory():
return ItemCategory.Generic
func saveData():
var data = .saveData()
return data
func loadData(data):
.loadData(data)
func getInventoryImage():
return "res://Modules/PierreModule/Items/cookie.png"

20
EngRoomClosetEvent.gd Normal file
View file

@ -0,0 +1,20 @@
extends EventBase
func _init():
id = "EngRoomClosetEvent"
func registerTriggers(es):
es.addTrigger(self, Trigger.EnteringRoom, "eng_corridor6")
func run(_triggerID, _args):
if(3 > getModuleFlag("PierreModule", "Quest_Status") and getModuleFlag("PierreModule", "Quest_Status") > 0): # In the future potentially make it possible to be a daily event thing
if(GM.pc.isBlindfolded()):
addButton("Pierre's Task", "Is it time?", "wall")
func getPriority():
return 0
func onButton(_method, _args):
if(_method == "wall"):
runScene("EngRoomScene")

149
EngRoomScene.gd Normal file
View file

@ -0,0 +1,149 @@
extends SceneBase
var cabinets = {2: {"name": "2"}, 9: {"name": "9"}, 14: {"name": "14"}, 20: {"name": "20"}, 28: {"name": "28"}, 42: {"name": "|/\\"}, 51: {"name": "51"}, 69: {"name": "69"}, 84: {"name": "84"}, 87: {"name": "87"}, 90: {"name": "90"}}
var empty_loots = [
"This shelf is filled to the brim with various metallic nuts and bolts. However it has nothing of interest to you",
"After putting your paw deep within the shelve you start feeling very unpleasant coldness coming from the tips of your fingers. Oof! You immediately pull out your paw.",
"The entire filling cabinet starts vibrating after opening this shelve. It does not bode well, you immediately close this shelve. The vibration stops. That was odd."
]# TODO Write more of those
var cabinet_random = RandomNumberGenerator.new()
var current_loot = null # TODO will not survive save/load
var current_cabinet = null
func _init():
sceneID = "EngRoomScene"
func _run():
if(state == ""):
saynn("You hesitate, last time you walked this hallway you are sure that in this part the only thing you'll meet, if you continue walking, is a wall. This entire thing sounds dumb, and yet... It's a trust excercie, no? Realistically the worst thing that will happen is that you'll eventually hit a wall, doesn't sound like something you can't take.")
addButton("Wall time", "Trust Pierre and walk towards the wall", "trust")
addButton("Nope", "You are not trusting Pierre, this is stupid", "endthescene")
if(state == "trust"):
aimCameraAndSetLocName("eng_closet")
GM.pc.setLocation("eng_closet")
GM.main.setModuleFlag("PierreModule", "Quest_Status", 2)
saynn("You decide to trust Pierre. You turn 90 degrees, take a deep breath and walk forward. Last time you went this corridor while not blind there was a wall here, an maybe this time...")
saynn("You hear a beep before you, a few screeching sounds. Holy shit, perhaps Pierre was onto something here? You continue walking, the atmosphere changes, the echo of your steps disappeared, the air is more dry and you start to feel claustrophobic. You cautiously drag your foot forward until it hits something seemingly metal. Have you reached your destination?")
processTime(2*60)
var item: ItemBase = GM.pc.getInventory().getEquippedItem(InventorySlot.Eyes)
if(item != null):
var restraint = item.getRestraintData()
if(restraint != null):
if (restraint.canStruggleFinal() and GM.pc.getStamina() > 0) or GM.pc.getInventory().hasItem("restraintkey"):
addButton("Struggle", "It would be useful to see what is going on around", "strugglemenu")
else:
addDisabledButton("Struggle", "Your "+item.getVisibleName() + " is stuck on your eyes")
else:
addButton("Look around", "Look around", "lookaround")
else:
addButton("Look around", "Look around", "lookaround")
addButton("Leave", "Try to leave the room", "leave")
if state=="leave":
if(GM.pc.isBlindfolded()):
if(GM.pc.hasBlockedHands()):
saynn("You attempt to retrace your setps back where you came from, however it seems like whatever you went through has closed. It's hard to judge how can you even open the doors. After a while of trying, you blast the doors with a serios of forceful pushes, it does not budge.")
processTime(7*60)
else:
saynn("You attempt to retrace your setps back where you came from, however it seems like whatever you went through has closed. Thankfully, it seems like from this end there is a very analog door handle that pulling seems to lead back to the hallway. Or at least you judge that from the sounds.")
processTime(4*60)
else:
processTime(2*60)
saynn("Thankfully, the doors have a regular old-school door handle. You pull it and they swing open.")
saynn("On the other side - curiously, completely flat wall texture. You close the doors and observe how this fit of engineering doors leading to ancient technology closet fits the wall so perfectly that it leaves no evidence of ever existing, not even a tiny crevice can be seen. Above the doors is a camera, maybe it opens the doors?")
aimCameraAndSetLocName("eng_corridor6")
GM.pc.setLocation("eng_corridor6")
addButton("Pierre", "Guess it's time to go back to Pierre", "endthescene")
if state=="lookaround":
saynn(GM.world.getRoomByID("eng_closet").getDescription())
addButton("Cabinets", "Try to search cabinets", "cabinets")
addButton("Leave", "Try to leave the room", "leave")
if state=="cabinets":
saynn("Within so many filling cabinets there are over 12 shelves. You could open some of them and see what's in them, however only one of them is really interesting to you.") # TODO placeholder
addButton("Back", "Look around again", "lookaround")
var activated_cabinets = getModuleFlag("PierreModule", "Activated_Cabinets", {})
for item in cabinets:
if item in activated_cabinets:
addDisabledButton("Cabinet "+cabinets[item]["name"], "You've already looted this cabinet")
else:
addButton("Cabinet " + cabinets[item]["name"], "Check the cabinet with number "+cabinets[item]["name"], "cabinetloot", [item])
if state=="cabinetloot":
saynn("You chose to open cabinet number "+str(current_cabinet)+"...")
if(typeof(current_loot) == 2 or typeof(current_loot) == 0): # event
pass
elif(typeof(current_loot) == 4): #nothing
saynn(current_loot)
else:
saynn("Inside you've found "+str(current_loot.getAmount())+" of "+ current_loot.getVisibleName() +".")
addButton("Take items", "Take the items", "acceptloot")
addButton("Cabinets", "Look at cabinets without picking up anything", "cabinets")
if state=="cabinet84":
saynn("It is the cabinet mentioned by Pierre. You reach your paw inside and there is a single item inside - a pack of gumball. You grab and take it.")
GM.main.setModuleFlag("PierreModule", "Quest_Status", 3)
addButton("Back", "Look at cabinets", "cabinets")
func randomItemFromSeed(array):
return array[cabinet_random.randi() % array.size()]
func randomNumberFromSeed(numStart, numEnd):
cabinet_random.randi_range(numStart, numEnd)
func generateLoot(cabinet_number: int):
cabinet_random.seed = GM.main.getDays() + cabinet_number * 1000
var rand_num = cabinet_random.randf() * 100
if (rand_num < 16): # item
var item_type = randomItemFromSeed(["PlantEgg", "Cookie", "lube", "PlasticBottle", "restraintkey", "WorkCredit", "UsedCondom"])
var newItem = GlobalRegistry.createItem(item_type)
if item_type == "PlantEgg":
newItem.whoGaveBirth = "thisnamedoesntexistbecauseplayercantpossiblyknowwhoseggsthoseare"
newItem.setAmount(randomNumberFromSeed(2, 3))
elif item_type == "cookie":
newItem.setAmount(randomNumberFromSeed(2, 3))
elif item_type == "Credit":
newItem.setAmount(randomNumberFromSeed(3, 5))
elif item_type == "UsedCondom":
newItem.markLastUser("unknown person")
newItem.generateFluids()
var fluids = newItem.getFluids()
var allowedFluids = ["CumLube", "BlackGoo"]
if OPTIONS.isContentEnabled(ContentType.Watersports):
allowedFluids.append("Piss")
fluids.addFluid(randomItemFromSeed(allowedFluids), randomNumberFromSeed(2, 5)*100.0)
return newItem
elif (rand_num < 21): # TODO event
saynn(randomItemFromSeed(empty_loots))
var activated_cabinets = getModuleFlag("PierreModule", "Activated_Cabinets", {})
activated_cabinets[cabinet_number] = true
GM.main.setModuleFlag("PierreModule", "Activated_Cabinets", activated_cabinets)
return 1
else:
return randomItemFromSeed(empty_loots)
func _react(_action: String, _args):
if(_action == "endthescene"):
endScene()
return
if(_action == "cabinetloot"):
current_loot = generateLoot(_args[0])
current_cabinet = _args[0]
if(_action == "acceptloot"):
var activated_cabinets = getModuleFlag("PierreModule", "Activated_Cabinets", {})
activated_cabinets[current_cabinet] = true
GM.main.setModuleFlag("PierreModule", "Activated_Cabinets", activated_cabinets)
GM.pc.getInventory().addItem(current_loot)
_action = "cabinets"
if(_action == "strugglemenu"):
runScene("StrugglingScene")
return
setState(_action)

View file

@ -13,7 +13,7 @@ func _run():
saynn("What do you wanna do?")
addButton("Steal catnip plant", "Sneak in, grab one and get out", "catnip")
addButton("Take catnip", "Sneak in, grab one and get out", "catnip")
addButton("Don't steal", "Too dangerous", "endthescene")
if(state == "catnip"):
@ -37,6 +37,7 @@ func _react(_action: String, _args):
return
addMessage("Seems like you got away safely")
addButton("Leave", "Leve the crime scene", "endthescene")
return
if(_action == "endthescene"):
@ -44,3 +45,5 @@ func _react(_action: String, _args):
return
setState(_action)
# The amount of times I wrote "catnap" instead of "catnip" is insane. Thanks that one horror game franchise.

BIN
Items/cookie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

35
Items/cookie.png.import Normal file
View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/cookie.png-336e1b6e247a83a565bb339a213d5e2c.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Modules/PierreModule/Items/cookie.png"
dest_files=[ "res://.import/cookie.png-336e1b6e247a83a565bb339a213d5e2c.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=0
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

BIN
Items/pierresmap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/pierresmap.png-ef1df5d224991e6ad95b53794453fbc6.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Modules/PierreModule/Items/pierresmap.png"
dest_files=[ "res://.import/pierresmap.png-ef1df5d224991e6ad95b53794453fbc6.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=0
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

62
MapItem.gd Normal file
View file

@ -0,0 +1,62 @@
extends ItemBase
func _init():
id = "PierresMap"
func getVisibleName():
return "Pierre's Map"
func getDescription():
return "A map showing directinons"
func canUseInCombat():
return false
func useInCombat(_attacker:Character, _receiver):
return "Map shows the following:\n\n[font=res://Fonts/smallconsolefont.tres]"+Util.readFile("res://Modules/PierreModule/Misc/asciimapsmall.txt")+"[/font]"
func getPossibleActions():
if(true): # We really shouldn't assume the item is being used by a player character, but sadly game does not give us context for the item user :(
return [
{
"name": "Look",
"scene": "UseItemLikeInCombatScene",
"description": "Look at the map",
},
]
else:
return [
{
"name": "Discard",
"scene": "UseItemLikeInCombatScene",
"description": "Discard this map, it won't be useful to you anymore.",
},
]
func getPrice():
return 0
func canSell():
return false
func canCombine():
return false
func tryCombine(_otherItem):
return .tryCombine(_otherItem)
func getTags():
return []
func getItemCategory():
return ItemCategory.Generic
func saveData():
var data = .saveData()
return data
func loadData(data):
.loadData(data)
func getInventoryImage():
return "res://Modules/PierreModule/Items/pierresmap.png"

19
Misc/asciimapsmall.txt Normal file
View file

@ -0,0 +1,19 @@
██????██
██????██
██████████████████^^^^██████████████████████████████
██████ ████████ ████████████████████MMMM██████
██████ ████████ ████████████████████MMMM██████
██ | ██
██ | ██
██████████ ████████████ | ████████EEEE██████
██████████ ████████████ | ████████EEEE█████
██ ████████████████████████████████████
██ ███████████
██████████ XXX ██ ██
██████████ XXX ██ ██ ████ 69
██████ ██ ██ ██████████ ██
██████ ██ ██ ██ ██ ██
██████████VVVV██ ██ ██ ██
██ ██████████ ██
██ ██ ████
██

View file

@ -9,7 +9,10 @@ func getFlags():
"Quest_Status": flag(FlagType.Number),
"Azazel_Catnip_talked": flag(FlagType.Bool),
"Azazel_Catnip_found": flag(FlagType.Bool),
"Azazel_Catnip_taken_today": flag(FlagType.Bool)
"Azazel_Catnip_taken_today": flag(FlagType.Bool),
"PC_Enslavement_Status": flag(FlagType.Number),
"Azazel_Catnips_given": flag(FlagType.Number),
"Activated_Cabinets": flag(FlagType.Dict)
}
@ -19,13 +22,15 @@ func _init():
events = [
"res://Modules/PierreModule/EventTileOnEnter.gd",
"res://Modules/PierreModule/GreenhouseCatnip.gd"
"res://Modules/PierreModule/GreenhouseCatnip.gd",
"res://Modules/PierreModule/EngRoomClosetEvent.gd"
]
scenes = [
"res://Modules/PierreModule/PierreTalkMain.gd",
"res://Modules/PierreModule/GreenhouseCatnipStealScene.gd",
"res://Modules/PierreModule/PetsTalkMain.gd"
"res://Modules/PierreModule/PetsTalkMain.gd",
"res://Modules/PierreModule/EngRoomScene.gd"
]
characters = [
@ -40,7 +45,9 @@ func _init():
]
items = [
"res://Modules/PierreModule/CatnipItem.gd"
"res://Modules/PierreModule/CatnipItem.gd",
"res://Modules/PierreModule/MapItem.gd",
"res://Modules/PierreModule/CookieItem.gd"
]
quests = [
@ -49,3 +56,4 @@ func _init():
func resetFlagsOnNewDay():
GM.main.setModuleFlag("PierreModule", "Azazel_Catnip_taken_today", false)
GM.main.setModuleFlag("PierreModule", "Activated_Cabinets", {})

View file

@ -13,28 +13,50 @@ func _run():
addButton("Leave", "Be on your way", "endthescene")
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:
saynn("You approach Azazel, he recognizes sudden attention given to him, raises on his fours and streches his back before sitting towards you expectandly. You notice he took a quick peek at his master beforehand.")
else:
pass # TODO
addButton("Talk", "Talk to Azazel", "azazeltalk")
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. ")
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("{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 == "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]")
sayn("He turns his face towards you again, enlarged pupils still in his eyes, surprised face expression staring at you.")
saynn("After a moment his pupils go back to normal, and his face expression turns content.")
saynn("[say=azazel]Meow! I mean... Yes, sorry, I got... A bit carried away.[/say]")
saynn("He becomes a little embarassed. Looks down at the catnip plant on his blanket. Picks it up with his paw and consumes it.")
saynn("[say=azazel]Twank yuu {pc.name}. It was really nice![/say]")
processTime(10 * 5)
addButton("Back", "End catnip therapy session", "azazelmain")
#setState("azazelmain")
setState("azazelmain")
if(state == "azazeltalk"):
GM.main.setModuleFlag("PierreModule", "Azazel_Catnip_talked", true)
if(GM.pc.getInventory().hasItemID("CatnipPlant")):
pass
else:
pass
addButton("Back", "Do something else", "azazelmain")
if(state == "azazelappearance"):
pass
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.")
addButton("Back", "Do something else", "azazelmain")
func _react(_action: String, _args):
if(_action == "catnip"):
GM.pc.getInventory().removeXOfOrDestroy("CatnipPlant", 1)
GM.main.getCharacter("azazel").addLust(10)
GM.main.increaseModuleFlag("PierreModule", "Azazel_Catnips_given")
if(_action == "endthescene"):
endScene()

View file

@ -96,7 +96,7 @@ func _run():
addButton("Back", "If he says so", "name")
if(state == "pets2"):
playAnimation(StageScene.Duo, "stand", {npc="pierre", npcAction="sit"})
pass
if(state == "join"):
@ -107,6 +107,7 @@ func _run():
elif(score > 89 and GM.main.getModuleFlag("PierreModule", "Quest_Status") > 1):
pass
elif(score > 75 and score_explored < 9999):
playAnimation(StageScene.Duo, "stand", {npc="pierre", npcAction="stand"})
saynn("You mention the intention to join his harem of pets, lust in your eyes. He looks at you and starts grinning.")
saynn("[say=pierre]Mmmmmm. You are almost done morsel. Not mine yet, but so close... I really like you. I really really like you. I think you have all of the qualities I'm looking for in a pet but...[/say]")
saynn("He looks away, and looks... Concerned? No. In deep thought rather.")
@ -127,6 +128,7 @@ func _run():
else:
addDisabledButton("Stray kitten", "Your mind doesn't allow you to make this choice")
elif(score > 45 and score_explored < 76):
playAnimation(StageScene.Duo, "stand", {npc="pierre", npcAction="stand"})
saynn("[say=pierre]Heh, interesting ask. It's still a no, though I have to admit, I do see some potential in here.[/say]")
if (GM.pc.isBlindfolded()):
saynn("Pierre stands up, takes a step towards you, grabs your blindfold, pulls it higher, grabs you by your chin to look you straight in your eyes.")
@ -150,7 +152,9 @@ func _run():
else:
saynn("[say=pierre]Look, you are lovely and all that, but I don't think you have what it takes to join my other pets. I require absolute obedience and sexual experience. Once you submit to me there is no going back, you become MY treasured pet forever. Those three? They know their place, they are ready to be mated whenever I feel like doing so. They obey my every single command. I just don't see that in you, sorry.[/say]")
addButton("Back", "Maybe another time then...", "pets2")
if(state == "quest"):
playAnimation(StageScene.Duo, "stand", {npc="pierre", npcAction="sit"})
if (GM.main.getModuleFlag("PierreModule", "Quest_Status") == -1):
saynn("[say=pierre]I see... Disappointing, but it's your choice and I respect that.[/say]")
saynn("He looks at you some more, he takes away his paw from your chin, turns around and sits on his chair. A serious and... Disappointed look on his face.")
@ -163,10 +167,27 @@ func _run():
sayn("He takes your tongue in between his paw fingers gently, pulls it out a little. He opens his mouth and he spits. Spit lands right on your tongue, with incredible precision right in the middle. He does it again, using the fact your mouth is still open. It lands deeper inside your mount. He pulls his paw fingers from your tongue and uses his two fingers to pressure your chin from below, giving you a signal to close your mouth.")
sayn("You comply. There is nothing other than his eyes staring deep at you, his will is your will. His spit doesn't feel particularly different from yours, perhaps you can pick up some flavor or two, but it's more dignified flavor than one of cum that you are so used to. You keep the spit inside your mouth for a bit, tasting it, feeling it, connecting with its owner. And you swallow it, with a visible gulp.")
saynn("Pierre smiles. He ruffles your " + ("hair" if GM.pc.hasHair() else "ears") + " with his paws.")
saynn("[say=pierre]Good pet.\nNow, to be MY pet you'll have to prove yourself further. Besides the fact I want my pets to be all famous in this little heaven of ours, I want to make sure they follow my orders and don't leave my side. For you my dear, I have a little task, nothing you can't do, I'm sure, but it will be the proof I need you can become MY pet.[/say]")
saynn("[say=pierre]Good pet.\nNow, to be MY pet you'll have to prove yourself further. Besides the fact I want my pets to be all famous in this little heaven of ours, I want to make sure they follow my orders. For you my dear, I have a few little tasks, nothing you can't do, I'm sure, but it will be the proof I need you can become MY pet.[/say]")
saynn("He turns around and moves towards his chair, where he sits.")
saynn("[say=pierre][/say]")
saynn("[say=pierre]Your first task will require... Trust. In me. Tell me, do you trust me?[/say]")
addButton("Yes", "Say you trust Pierre", "questresponseyes")
addButton("No", "Say you don't trust Pierre", "questresponseno")
if(state in ["questresponseyes", "questresponseno"]):
GM.main.setModuleFlag("PierreModule", "Quest_Status", 1)
if(state=="questresponseyes"):
saynn("Pierre grins after hearing the answer.")
sayn("[say=pierre]Excellent. Now, what I want to do is verify your trust, and gain some of my own trust in you. You must be acutely aware how words, especially in this place"+ (" and especially coming from a red like yourself" if GM.pc.getInmateType() == InmateType.HighSec else "") + " can be deceptive.[/say]")
if(state=="questresponseno"):
saynn("Pierre looks at you, studying you.")
saynn("[say=pierre]Curious. Not the answer I anticipated. It's fine, we can work on that.[/say]")
saynn("[say=pierre]For your first task, you'll need something I'm sure you are now well acquainted with - a blindfold. After all, what is the better tool to test someone's trust than tell them to do something stupid blind?[/say]")
saynn("He chuckles")
saynn("[say=pierre]You will have to use your little head a bit too before you put one. I'll give you a map, I've drawn it myself, but it has to do. I won't spoil your fun and tell you what it shows, I'm sure you are clever enough to figure it out by yourself, after all, this prison isn't thaaat big, right?[/say]")
saynn("He winks at you, and lets out a chuckle.")
saynn("[say=pierre]Go there, blind yourself, go through a wall and bring me the goods. The number you'll need is 84. And morsel, don't hang in there for too long, trust me on that. Don't worry, I'll know if you succeed or not, don't try to cheat. Remember, trust is the key.[/say]")
addButton("Leave", "Take your leave", "endthescene")
func calculateHaremScore():
var score = 0

View file

@ -10,9 +10,11 @@ func getProgress():
var quest_status = GM.main.getModuleFlag("PierreModule", "Quest_Status")
var result = []
result.append("Pierre gave you a task")
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...")
if(quest_status > 1):
pass
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 gumball. Return it to Pierre.")
return result
@ -24,3 +26,11 @@ func isCompleted():
func isMainQuest():
return false
# quest_status - state (number)
# 0 - no quest/haven't started
# -1 - refused Pierres quest
# 1 - accepted Pierres quest
# 2 - arrived at closet
# 3 - looted the gumball
# 4 - gave the gumball to Pierre