Fully added #6

This commit is contained in:
Frisk 2025-02-18 17:42:09 +01:00
parent 55117a32a5
commit 443cb48d87
10 changed files with 177 additions and 19 deletions

View file

@ -4,7 +4,7 @@ func _init():
id = "IssixSpecialEvent"
var registered_special_scenes = [['IssixSlaveryIntroCont', 0, {}], ['IssixSlaveryBranding', 0, {}], ['IssixBringsComicbooks', 1, {"Comic_Books": 1}], ['IssixSlaveryBowlTraing', 3, {}], ['IssixSlaveryCommandTraining', 5, {}]]
var registered_special_scenes = [['IssixSlaveryIntroCont', 0, {}], ['IssixSlaveryBranding', 0, {}], ['IssixBringsComicbooks', 1, {"Comic_Books": 1}]]
class CustomSorter:
static func sort_by_progressionpoints(a, b):

View file

@ -104,7 +104,8 @@ func getFlags():
"PC_Should_Be_Rewarded": flag(FlagType.Number),
"Did_Task_Today": flag(FlagType.Bool),
"Drone_Task_Timeout": flag(FlagType.Number), # 0 = everything is fine, -1 = drone lost, 0> day at which when the task can resume,
"Drone_Flight_Unlocked": flag(FlagType.Bool) # null = locked, false = unlocked, true = flew in the past
"Drone_Flight_Unlocked": flag(FlagType.Bool), # null = locked, false = unlocked, true = flew in the past
"Learned_Commands": flag(FlagType.Bool)
}
@ -171,6 +172,8 @@ func _init():
"res://Modules/IssixModule/Scenes/SlaveryFirst/GenericTrainSessionScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/WalkiesTrainingScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/PunRew/IssixPawJobScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingCommandsScene.gd",
"res://Modules/IssixModule/Scenes/SlaveryFirst/SlaveryTrainingCommandsContScene.gd",
"res://Modules/IssixModule/Scenes/Tasks/DroneFinder.gd",
"res://Modules/IssixModule/Scenes/Tasks/HiisiLaundry.gd"
]

View file

@ -1,10 +1,10 @@
extends SceneBase
var levels = {1: ["Walkies", "Learn how to walk like a proper pet", "walkies_training"],
2: ["Bowl", "Learn how to eat like a proper pet", "bowl_training"],
3: ["Commands", "Learn how to listen to your Master's commands", "command_training"],
4: ["Speech", "Learn how to speak like a pet", "speech_training"],
5: ["Name", "Learn your new name", "name_training"]}
var levels = {1: ["Walkies", "Learn how to walk like a proper pet", "walkies_training"], # level, button name, button description, state, flag ID required
3: ["Bowl", "Learn how to eat like a proper pet", "bowl_training", "Taught_To_Use_Bowl"],
5: ["Commands", "Learn how to listen to your Master's commands", "command_training", "Learned_Commands"],
7: ["Speech", "Learn how to speak like a pet", "speech_training"],
10: ["Name", "Learn your new name", "name_training"]}
var hasBorrowedMuzzle = false
var hasBorrowedMittens = false
@ -21,6 +21,7 @@ func _run():
saynn("[say=issix]My dear pet would like to train a little? That's good. Good pets want to be the best pets for their owners.[/say]")
saynn("[say=issix]Hmm, what was the last thing I trained you?[/say]")
createButtons()
addButtonAt(14, "Back", "Do not train today", "endthescene")
if state == "walkies_training":
playAnimation(StageScene.Duo, "stand", {pc="issix", npc="pc", npcBodyState={naked=true, leashedBy="issix"}, npcAction="kneel"})
@ -89,15 +90,28 @@ func shouldBeInHeavyBondage():
return GM.pc.getSkillsHolder().getSkill("Pet").getLevel() > 3
func createButtons():
var trainingLevel = int(getModuleFlag("IssixModule", "PC_Training_Level", 0))
for x in range(1, 5):
var trainingLevel = GM.pc.getSkillLevel("Pet")
var available_special_training = []
for x in levels.keys():
if x <= trainingLevel:
var buttonData = levels[x]
if buttonData.size() == 4 and getModuleFlag("IssixModule", buttonData[3]) != true:
available_special_training.append(buttonData[0])
addDisabledButton(buttonData[0], buttonData[1]+" (you haven't unlocked this training)")
else:
if buttonData[2] == "bowl_training":
pass # skip bowl training? Not much we can do for repeatable scene here
elif buttonData[2] == "command_training":
addDisabledButton(buttonData[0], "WIP")
else:
addButton(buttonData[0], buttonData[1], buttonData[2])
elif x > trainingLevel:
var buttonData = levels[x]
addDisabledButton(buttonData[0], buttonData[1]+" (you haven't unlocked this training yet)")
break
for y in range(available_special_training.size()):
var training_name = available_special_training[y]
addButtonAt(5+y, training_name, "Receive a special training in "+training_name.to_lower(), "special_"+training_name.to_lower())
func destroyBorrowedEquipment():
if hasBorrowedMittens and GM.pc.hasBlockedHands():
@ -113,6 +127,15 @@ func _react(_action: String, _args):
else:
addMessage("You've tried to struggle out of the blindfold but failed")
if _action == "special_bowl":
runScene("IssixSlaveryBowlTraing", [], "special_bowl_training_complete")
if _action == "special_commands":
if getModuleFlag("IssixModule", "Learned_Commands") == null:
runScene("IssixSlaveryCommandTraining", [], "special_commands_training_complete")
else:
runScene("IssixSlaveryCommandContTraining", [], "special_commands_training_complete")
if _action == "blindfold_takeon":
GM.pc.getInventory().forceEquipByStoreOtherUnlessRestraint(GM.pc.getInventory().getFirstOf("blindfold"), "issix")
@ -164,6 +187,7 @@ func _react_scene_end(_tag, _result):
goodPoints += 2 if GM.pc.isMuzzled() else 0
goodPoints += 2 if GM.pc.hasBlockedHands() else 0
destroyBorrowedEquipment()
setModuleFlag("IssixModule", "Trained_Pet_Today", true)
if _result:
goodPoints = _result[0]
if goodPoints > 2:
@ -176,6 +200,16 @@ func _react_scene_end(_tag, _result):
addMessage("You've gained 5 experience points. Also, something went wrong with programming :(")
setState("end_walkies")
if _tag == "special_commands_training_complete":
setModuleFlag("IssixModule", "Trained_Pet_Today", true)
endScene(["force_close"])
return
if _tag == "special_bowl_training_complete":
setModuleFlag("IssixModule", "Trained_Pet_Today", true)
endScene()
return
func saveData():
var data = .saveData()

View file

@ -0,0 +1,114 @@
extends SceneBase
const Globals = preload("res://Modules/IssixModule/Globals.gd")
func _init():
sceneID = "IssixSlaveryCommandContTraining"
func _run():
if(state == ""):
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand"})
# CON
saynn("[say=pc]Good day Master, I'd like to continue training commands...[/say]")
saynn("[say=issix]Ah, of course. How are you feeling after last time?[/say]")
saynn("[say=pc]I'm good! Thank you for your care Master.[/say]")
saynn("[say=issix]Heh. Of course my pet.[/say]")
saynn("You get headpats from your kind Master and start blushing as a reaction.")
saynn("[say=issix]Alright, come.[/say]")
addButton("Walk", "Walk to Master's cell", "follow_to_cell")
# NONCON TODO
if state == "follow_to_cell":
aimCamera("cellblock_red_nearcell")
saynn("You follow your Master to his own cell.")
saynn("You are once again back at the crampy cell of your Master. It's still as cramped as it was the last time.")
saynn("[say=issix][b]Sit[/b].[/say]")
saynn("You obey the command without a hitch while Master fetches familiar box from the top of the stash.")
saynn("[say=issix]You remember all of those, don't you? Wonderful.[/say]")
saynn("He puts the ear pieces into your ears, followed by the cap on your head.")
saynn("[say=issix][b]Present yourself[/b].[/say]")
saynn("And so you do, standing on your fours, changing position so you look towards cell's entrance while the familiar feeling grows in your backside as Master effortlessly slides the „butt plug” in.")
saynn("[say=issix]Splendid, now last piece.[/say]")
saynn("You once again meet the gaze of your Master, a honest and kind look coming from his eyes as he puts on the visors on your head, covering your eyes. He takes a step back to look at you with all of the equipment on.")
saynn("[say=issix]Now, [b]give me a bark[/b].[/say]")
if "canine" in GM.pc.getSpecies():
saynn("[say=pc]Arf![/say]")
else:
saynn("[say=pc]Waaf?[/say]")
saynn("[say=issix]Good pup.[/say]")
saynn("He begins to fiddle with the central device as you observe him. Finally he says again.")
saynn("[say=issix][b]Give a paw[/b].[/say]")
saynn("*click*")
saynn("You put your paw on your Master's paw, this time you once again feel pleasure spreading through your body as you hear a click in your ears. Your Master grins and begins another lesson.")
addButton("Training", "Continue training with Master", "train_commands_last")
if state == "train_commands_last":
saynn("You've completely lost any touch with time. The only thing that mattered for you is fulfilling every single command, and feeling the pleasure that comes with each successful fulfillment of the command. You don't miss a beat, your actions become almost robotic with their accuracy and speed. Failure is not an option, not that the commands your Master gives you are difficult.")
saynn("[say=issix][b]Sit[/b][/say]")
saynn("*click*")
saynn("[say=issix][b]Roll[/b][/say]")
saynn("*click*")
saynn("[say=issix][b]Give paw[/b][/say]")
saynn("*click*")
saynn("[say=issix][b]Present[/b][/say]")
saynn("*click*")
saynn("As the time went, you were able to tell next command by simple observing Master's face as he spoke. This time, you didn't even notice that the pleasure from device inserted into your ass gave you smaller and smaller doses of pleasure as they felt like the regular doses of pleasure to you.")
saynn("[say=issix][b]Sit[/b][/say]")
saynn("*click*")
saynn("[say=issix][b]Roll[/b][/say]")
saynn("*click*")
saynn("Your Master grins.")
saynn("[say=issix]We are done here. You can [b]stand[/b].[/say]")
saynn("*click*")
saynn("You look with confusion at your Master after standing up.")
saynn("[say=issix]Your conditioning is now done. Last 10 commands you didn't even seem to notice that all of the devices except the ear pieces were disabled.[/say]")
saynn("He begins to unstrap your visor, device on your head as well as takes out the pieces from your ears.")
saynn("[say=pc]Does it mean that... My training is now complete?[/say]")
saynn("[say=issix]Yes it is, cute pet.[/say]")
saynn("He kisses your forehead while he goes around you and pulls out the plug out of your ass.")
saynn("[say=pc]I... I don't feel much different?[/say]")
saynn("[say=issix]Sit.[/say]")
saynn("*click*")
saynn("You don't notice when, but by the time you realize you are already sitting.")
saynn("[say=issix]Like I said, the training is complete.[/say]")
saynn("The real consequences of such conditioning hit you only just now, and despite them you feel incredibly thankful to your Master for training you and making you a better pet.")
saynn("[say=pc]Thank you, Master![/say]")
saynn("[say=issix]But of course.[/say]")
addButton("End training", "Your training has ended", "finish")
if state == "finish":
saynn("As you leave Master's cell you feel strange sense of belonging and want to do even more , become an even better pet for your Master. You can't wait in anticipation for when he'll use the commands on you again.")
addButton("End", "Leave", "endthescene")
func _react(_action: String, _args):
processTime(2*60)
if _action == "finish":
addMessage("You've gained 200 experience points at being a good pet for your Master")
addMessage("You've gained a new perk „Commands”.")
if _action == "follow_to_cell":
GM.pc.setLocation("cellblock_red_nearcell")
GM.pc.addLust(30)
if _action == "train_commands_last":
increaseModuleFlag("IssixModule", "PC_Training_Level")
Globals.addIssixMood(10)
GM.pc.addSkillExperience("Pet", 200)
GM.pc.getSkillsHolder().addPerk("Commands")
setModuleFlag("IssixModule", "Learned_Commands", true)
if(_action == "endthescene"):
endScene()
return
setState(_action)

View file

@ -43,6 +43,7 @@ func _run():
addButton("Follow", "Follow your Master", "follow_to_cell")
if state == "follow_to_cell":
aimCamera("cellblock_red_nearcell")
saynn("You follow your Master to his own cell. One the way a rude guard bumped pretty hard into you while going in direction opposite to yours, Your master noticed because you lost your balance making the leash pull Master's paw backwards. After making sure everything is okey, Your Master continued walking and you behind him, led on a leash.")
saynn("You are back at the crampy cell of your Master. Little space there is doesn't afford you much comfort, you are just standing almost in the entrance, in the inner part of the cell.")
@ -141,8 +142,12 @@ func _run():
saynn("[say=issix]Perfect. Let me just retrieve devices.[/say]")
saynn("Issix's retrieval of his training tools doesn't take long, you are squirming on the floor so he takes advantage of your numbed state. Taking off the „butt plug” gave you the last jolt of pleasure.")
saynn("[say=pc]Ahhhhhhh![/say]")
saynn("[say=issix]Oh dear pet, what to do with you now, what to do... Can you move on your own.[/say]")
saynn("[say=pc]Y-yes, I t-think.[/say]")
saynn("With difficulty you are able to stand up and leave Issix's cell.")
addButton("Leave", "Leave the cell", "endthescene")
func _react(_action: String, _args):
@ -160,19 +165,15 @@ func _react(_action: String, _args):
else:
GM.pc.addLust(100)
if _action == "follow_to_cell":
GM.pc.setLocation("cellblock_red_nearcell")
if _action == "stand_up":
GM.pc.addLust(30)
if _action == "training":
GM.pc.addLust(10)
if _action == "finish":
increaseModuleFlag("IssixModule", "PC_Training_Level")
GM.pc.addSkillExperience("Pet", 200)
GM.pc.getSkillsHolder().addPerk("Commands")
setModuleFlag("IssixModule", "Taught_To_Be_Commanded", true)
if(_action == "endthescene"):
endScene()
return

View file

@ -918,7 +918,6 @@ func _react(_action: String, _args):
if _action == "issixpettraining":
runScene("IssixGenericTrainSession")
_action = "issixpetmenu"
setModuleFlag("IssixModule", "Trained_Pet_Today", true)
if _action == "lamiapetrequest":
GM.pc.addPain(-10)
@ -1076,6 +1075,10 @@ func _react_scene_end(_tag, _result):
allow_pawns = false
setState("issixpetmenu")
if _result is Array:
if _result.has("force_close"):
GM.main.pickOption("endthescene", [])
func saveData():
var data = .saveData()

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -10,6 +10,9 @@ func getVisibleName():
func getVisibleDescription():
return "You learned basic commands that others can give you"
func getMoreDescription():
return "Master Issix taught you various commands such as Sit, Roll, Give a paw, Stand. Guards and Master Issix can command you with Roll and Sit commands to skip turns."
func getSkillTier():
return 1