Added two attacks (WIP)
Updates to scenes Added new scene Improvements in other scenes
This commit is contained in:
parent
dfd6a9ec54
commit
0ffeaf9beb
47
Modules/IssixModule/Attacks/CommandRoll.gd
Normal file
47
Modules/IssixModule/Attacks/CommandRoll.gd
Normal file
|
@ -0,0 +1,47 @@
|
|||
extends Attack
|
||||
# TODO Teach some population of pawns this attack
|
||||
func _init():
|
||||
id = "PetCommandRoll"
|
||||
category = Category.Special
|
||||
aiCategory = AICategory.Offensive
|
||||
|
||||
func getVisibleName(_context = {}):
|
||||
return "Command: Roll"
|
||||
|
||||
func getVisibleDesc(_context = {}):
|
||||
return "Use implanted pet directive to make you roll over.."
|
||||
|
||||
func _doAttack(_attacker, _receiver, _context = {}):
|
||||
var texts = [
|
||||
"{attacker.name} orders {receiver.name} to roll over like a good puppy {receiver.he} is.",
|
||||
"{attacker.name} points at the floor with {attacker.his} finger and commands {receiver.name} to roll over"
|
||||
]
|
||||
var text = RNG.pick(texts)
|
||||
|
||||
if(_receiver.addEffect(StatusEffect.Stunned, [2])):
|
||||
text += "\n[b]{receiver.name} obeys the command without question.[/b]"
|
||||
_receiver.addEffect(StatusEffect.Weakness, [1])
|
||||
return {
|
||||
text = text,
|
||||
}
|
||||
|
||||
func _canUse(_attacker, _receiver, _context = {}):
|
||||
if(_attacker.isGagged()):
|
||||
return false
|
||||
|
||||
if(_receiver.hasPerk("Commands") && !_receiver.statusEffects.has(StatusEffect.Stunned)):
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func getAnticipationText(_attacker, _receiver):
|
||||
return "{attacker.name} opens {attacker.his} mouth while pointing at floor."
|
||||
|
||||
func getAttackSoloAnimation():
|
||||
return "throw"
|
||||
|
||||
func getRequirements():
|
||||
return [AttackRequirement.FreeHands, AttackRequirement.CanTalk]
|
||||
|
||||
func getRecieverArmorScaling(_attacker, _receiver, _damageType) -> float:
|
||||
return 0.0
|
47
Modules/IssixModule/Attacks/CommandSit.gd
Normal file
47
Modules/IssixModule/Attacks/CommandSit.gd
Normal file
|
@ -0,0 +1,47 @@
|
|||
extends Attack
|
||||
# TODO Teach some population of pawns this attack
|
||||
func _init():
|
||||
id = "PetCommandSit"
|
||||
category = Category.Special
|
||||
aiCategory = AICategory.Offensive
|
||||
|
||||
func getVisibleName(_context = {}):
|
||||
return "Command: Sit"
|
||||
|
||||
func getVisibleDesc(_context = {}):
|
||||
return "Use implanted pet directive to make you sit.."
|
||||
|
||||
func _doAttack(_attacker, _receiver, _context = {}):
|
||||
var texts = [
|
||||
"{attacker.name} orders {receiver.name} to sit like a good puppy {receiver.he} is.",
|
||||
"{attacker.name} points at the floor with {attacker.his} finger and commands {receiver.name} to sit"
|
||||
]
|
||||
var text = RNG.pick(texts)
|
||||
|
||||
if(_receiver.addEffect(StatusEffect.Stunned, [1])):
|
||||
text += "\n[b]{receiver.name} obeys the command without question.[/b]"
|
||||
|
||||
return {
|
||||
text = text,
|
||||
}
|
||||
|
||||
func _canUse(_attacker, _receiver, _context = {}):
|
||||
if(_attacker.isGagged()):
|
||||
return false
|
||||
|
||||
if(_receiver.hasPerk("Commands") && !_receiver.statusEffects.has(StatusEffect.Stunned)):
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func getAnticipationText(_attacker, _receiver):
|
||||
return "{attacker.name} opens {attacker.his} mouth while pointing at floor."
|
||||
|
||||
func getAttackSoloAnimation():
|
||||
return "throw"
|
||||
|
||||
func getRequirements():
|
||||
return [AttackRequirement.FreeHands, AttackRequirement.CanTalk]
|
||||
|
||||
func getRecieverArmorScaling(_attacker, _receiver, _damageType) -> float:
|
||||
return 0.0
|
|
@ -23,7 +23,7 @@ func react(_triggerID, _args):
|
|||
|
||||
func activateHiisiScenes() -> bool:
|
||||
var scene_index = GM.main.getModuleFlag("IssixModule", "Hiisi_Encounter_scene", 1)
|
||||
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Hiisi_Affection", -1) < scene_index*2 or scene_index > 3:
|
||||
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Hiisi_Affection", -1) < scene_index*3 or scene_index > 3:
|
||||
return false
|
||||
if scene_index != 3 and GM.pc.getLocation() == "hall_ne_corner": # This scene only shows on that tile
|
||||
return false
|
||||
|
@ -46,7 +46,7 @@ func activateHiisiScenes() -> bool:
|
|||
func activateAzazelScenes() -> bool:
|
||||
if GM.main.getModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", false) == false and RNG.chance(2.0):
|
||||
var scene_index = GM.main.getModuleFlag("IssixModule", "Azazel_Corruption_Scene", 1)
|
||||
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Azazel_Affection_given", -1) < scene_index*2 or scene_index > 3: # Player disabled corruption scenes, their affection score is too low or we ran out of them
|
||||
if scene_index == -1 or GM.main.getModuleFlag("IssixModule", "Azazel_Affection_given", -1) < scene_index*3 or scene_index > 4: # Player disabled corruption scenes, their affection score is too low or we ran out of them
|
||||
return false
|
||||
GM.main.setModuleFlag("IssixModule", "Azazel_Had_Corruption_Scene_Today", true)
|
||||
runScene("AzazelCorruption"+str(scene_index))
|
||||
|
|
|
@ -304,7 +304,7 @@ func _react(_action: String, _args):
|
|||
GM.pc.setName(GM.main.originalPC.getName())
|
||||
GM.pc.setGender(GM.main.originalPC.getGender())
|
||||
GM.pc.setSpecies(GM.main.originalPC.getSpecies())
|
||||
GM.pc.resetBodypartsToDefault()
|
||||
GM.pc.resetSlots()
|
||||
for bodypart in GM.main.originalPC.bodyparts:
|
||||
if GM.main.originalPC.bodyparts[bodypart] == null:
|
||||
continue
|
||||
|
|
|
@ -20,20 +20,20 @@ func _run():
|
|||
|
||||
if state == "checkthepillar": # TODO Make sure the font is properly working before the release
|
||||
saynn("You decide to come closer to the pillar. It's ordained by numerous symbols, none of which you understand.")
|
||||
sayn("[color=#ac1eff]ᚺᛖᚱ ᛚᛁᛈᛋ ᛒᛖᚷᚨᚾ ᛏᛟ ᛋᚲᛟᚱᚲᚺ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛏᚺᚨᛏ ᛃᚢᛁᚲᛖ ᚹᚨᛋ ᚹᛟᚱᛗᚹᛟᛟᛞ ᛏᛟ ᚺᛖᚱ ᛏᛟᚾᚷᚢᛖ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛋᚺᛖ ᛚᛟᚨᛏᚺ’ᛞ ᛏᚺᛖ ᚠᛖᚨᛋᛏ:[/color]")
|
||||
sayn("[color=#ac1eff]ᚹᚱᛁᛏᚺᛁᚾᚷ ᚨᛋ ᛟᚾᛖ ᛈᛟᛋᛋᛖᛋᛋ’ᛞ ᛋᚺᛖ ᛚᛖᚨᛈ’ᛞ ᚨᚾᛞ ᛋᚢᚾᚷ,[/color]")
|
||||
sayn("[color=#ac1eff]ᚱᛖᚾᛏ ᚨᛚᛚ ᚺᛖᚱ ᚱᛟᛒᛖ, ᚨᚾᛞ ᚹᚱᚢᚾᚷ[/color]")
|
||||
sayn("[color=#ac1eff]ᚺᛖᚱ ᚺᚨᚾᛞᛋ ᛁᚾ ᛚᚨᛗᛖᚾᛏᚨᛒᛚᛖ ᚺᚨᛋᛏᛖ,[/color]")
|
||||
sayn("[color=#ac1eff]ᚨᚾᛞ ᛒᛖᚨᛏ ᚺᛖᚱ ᛒᚱᛖᚨᛋᛏ.[/color]")
|
||||
sayn("[color=#ac1eff]ᚺᛖᚱ ᛚᛟᚲᚴᛋ ᛋᛏᚱᛖᚨᛗ’ᛞ ᛚᛁᚴᛖ ᛏᚺᛖ ᛏᛟᚱᚲᚺ[/color]")
|
||||
sayn("[color=#ac1eff]ᛒᛟᚱᚾᛖ ᛒᚤ ᚨ ᚱᚨᚲᛖᚱ ᚨᛏ ᚠᚢᛚᛚ ᛋᛈᛖᛖᛞ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛟᚱ ᛚᛁᚴᛖ ᛏᚺᛖ ᛗᚨᚾᛖ ᛟᚠ ᚺᛟᚱᛋᛖᛋ ᛁᚾ ᛏᚺᛖᛁᚱ ᚠᛚᛁᚷᚺᛏ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛟᚱ ᛚᛁᚴᛖ ᚨᚾ ᛖᚨᚷᛚᛖ ᚹᚺᛖᚾ ᛋᚺᛖ ᛋᛏᛖᛗᛋ ᛏᚺᛖ ᛚᛁᚷᚺᛏ[/color]")
|
||||
sayn("[color=#ac1eff]ᛋᛏᚱᚨᛁᚷᚺᛏ ᛏᛟᚹᚨᚱᛞ ᛏᚺᛖ ᛋᚢᚾ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛟᚱ ᛚᛁᚴᛖ ᚨ ᚲᚨᚷᛖᛞ ᛏᚺᛁᚾᚷ ᚠᚱᛖᛖᛞ,[/color]")
|
||||
sayn("[color=#ac1eff]ᛟᚱ ᛚᛁᚴᛖ ᚨ ᚠᛚᚤᛁᚾᚷ ᚠᛚᚨᚷ ᚹᚺᛖᚾ ᚨᚱᛗᛁᛖᛋ ᚱᚢᚾ.[/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚺᛖᚱ ᛚᛁᛈᛋ ᛒᛖᚷᚨᚾ ᛏᛟ ᛋᚲᛟᚱᚲᚺ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛏᚺᚨᛏ ᛃᚢᛁᚲᛖ ᚹᚨᛋ ᚹᛟᚱᛗᚹᛟᛟᛞ ᛏᛟ ᚺᛖᚱ ᛏᛟᚾᚷᚢᛖ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛋᚺᛖ ᛚᛟᚨᛏᚺ’ᛞ ᛏᚺᛖ ᚠᛖᚨᛋᛏ:[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚹᚱᛁᛏᚺᛁᚾᚷ ᚨᛋ ᛟᚾᛖ ᛈᛟᛋᛋᛖᛋᛋ’ᛞ ᛋᚺᛖ ᛚᛖᚨᛈ’ᛞ ᚨᚾᛞ ᛋᚢᚾᚷ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚱᛖᚾᛏ ᚨᛚᛚ ᚺᛖᚱ ᚱᛟᛒᛖ, ᚨᚾᛞ ᚹᚱᚢᚾᚷ[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚺᛖᚱ ᚺᚨᚾᛞᛋ ᛁᚾ ᛚᚨᛗᛖᚾᛏᚨᛒᛚᛖ ᚺᚨᛋᛏᛖ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚨᚾᛞ ᛒᛖᚨᛏ ᚺᛖᚱ ᛒᚱᛖᚨᛋᛏ.[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᚺᛖᚱ ᛚᛟᚲᚴᛋ ᛋᛏᚱᛖᚨᛗ’ᛞ ᛚᛁᚴᛖ ᛏᚺᛖ ᛏᛟᚱᚲᚺ[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛒᛟᚱᚾᛖ ᛒᚤ ᚨ ᚱᚨᚲᛖᚱ ᚨᛏ ᚠᚢᛚᛚ ᛋᛈᛖᛖᛞ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛟᚱ ᛚᛁᚴᛖ ᛏᚺᛖ ᛗᚨᚾᛖ ᛟᚠ ᚺᛟᚱᛋᛖᛋ ᛁᚾ ᛏᚺᛖᛁᚱ ᚠᛚᛁᚷᚺᛏ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛟᚱ ᛚᛁᚴᛖ ᚨᚾ ᛖᚨᚷᛚᛖ ᚹᚺᛖᚾ ᛋᚺᛖ ᛋᛏᛖᛗᛋ ᛏᚺᛖ ᛚᛁᚷᚺᛏ[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛋᛏᚱᚨᛁᚷᚺᛏ ᛏᛟᚹᚨᚱᛞ ᛏᚺᛖ ᛋᚢᚾ,[/runic][/color]")
|
||||
sayn("[color=#ac1eff][runic]ᛟᚱ ᛚᛁᚴᛖ ᚨ ᚲᚨᚷᛖᛞ ᛏᚺᛁᚾᚷ ᚠᚱᛖᛖᛞ,[/runic][/color]")
|
||||
saynn("[color=#ac1eff][runic]ᛟᚱ ᛚᛁᚴᛖ ᚨ ᚠᛚᚤᛁᚾᚷ ᚠᛚᚨᚷ ᚹᚺᛖᚾ ᚨᚱᛗᛁᛖᛋ ᚱᚢᚾ.[/runic][/color]")
|
||||
saynn("[say=pc]What the fuck.[/say]")
|
||||
saynn("Deciding that staying in here under the assault of "+("piss" if OPTIONS.isContentEnabled(ContentType.Watersports) else "water")+" from above isn't the best idea, you come back.")
|
||||
addButton("Leave", "Leave", "")
|
||||
|
|
|
@ -908,6 +908,8 @@ func _react(_action: String, _args):
|
|||
if _action == "hiisihelp":
|
||||
processTime(2*60)
|
||||
increaseModuleFlag("IssixModule", "Hiisi_Affection", 1)
|
||||
if GM.main.getModuleFlag("IssixModule", "Hiisi_Affection", 0) in [3, 6, 9]:
|
||||
addMessage("New random wander scene for Hiisi has been unlocked")
|
||||
setModuleFlag("IssixModule", "Hiisi_Helped_Today", true)
|
||||
hiisi_help_type = [RNG.randi_range(1,4)]
|
||||
if hiisi_help_type[0] == 4:
|
||||
|
@ -986,6 +988,8 @@ func _react(_action: String, _args):
|
|||
GM.pc.getInventory().removeXOfOrDestroy("CatnipPlant", 1)
|
||||
GM.main.getCharacter("azazel").addLust(10)
|
||||
GM.main.increaseModuleFlag("IssixModule", "Azazel_Affection_given")
|
||||
if GM.main.getModuleFlag("IssixModule", "Azazel_Affection_given", 0) in [3, 6, 9, 12]:
|
||||
addMessage("New random wander scene for Azazel has been unlocked")
|
||||
GM.main.increaseModuleFlag("IssixModule", "Azazel_Catnip_given_today")
|
||||
if GM.main.getModuleFlag("IssixModule", "Azazel_Catnip_given_today", 0) > 5:
|
||||
GlobalRegistry.getCharacter("azazel").addEffect("CatnipOverdose")
|
||||
|
|
15
Modules/IssixModule/Scenes/RequirementsBasedScene.gd
Normal file
15
Modules/IssixModule/Scenes/RequirementsBasedScene.gd
Normal file
|
@ -0,0 +1,15 @@
|
|||
extends SceneBase
|
||||
class_name RequirementsBasedScene
|
||||
|
||||
const Globals = preload("res://Modules/IssixModule/Globals.gd")
|
||||
var id:String = "error"
|
||||
|
||||
|
||||
func checkIfFullfillsRequirements() -> bool:
|
||||
return true
|
||||
|
||||
func defaultCategory() -> String:
|
||||
return "REWARD"
|
||||
|
||||
func oneTimeOnly(checkID: String):
|
||||
return Globals.checkIfAchieved(checkID, id)
|
|
@ -6,7 +6,7 @@ var levels = {1: ["Walkies", "Learn how to walk like a proper pet", "walkies_tra
|
|||
4: ["Speech", "Learn how to speak like a pet", "speech_training"],
|
||||
5: ["Name", "Learn your new name", "name_training"]}
|
||||
|
||||
var hasBorrowedMuzzle = false # TODO Add save
|
||||
var hasBorrowedMuzzle = false
|
||||
var hasBorrowedMittens = false
|
||||
var goodPoints = 0
|
||||
const Globals = preload("res://Modules/IssixModule/Globals.gd")
|
||||
|
@ -160,6 +160,8 @@ func _react(_action: String, _args):
|
|||
|
||||
func _react_scene_end(_tag, _result):
|
||||
if(_tag == "walkies_end"):
|
||||
goodPoints += 2 if GM.pc.isMuzzled() else 0
|
||||
goodPoints += 2 if GM.pc.hasBlockedHands() else 0
|
||||
destroyBorrowedEquipment()
|
||||
if _result:
|
||||
goodPoints = _result[0]
|
||||
|
@ -173,3 +175,18 @@ func _react_scene_end(_tag, _result):
|
|||
addMessage("You've gained 5 experience points. Also, something went wrong with programming :(")
|
||||
setState("end_walkies")
|
||||
|
||||
func saveData():
|
||||
var data = .saveData()
|
||||
|
||||
data["hasBorrowedMuzzle"] = hasBorrowedMuzzle
|
||||
data["hasBorrowedMittens"] = hasBorrowedMittens
|
||||
data["goodPoints"] = goodPoints
|
||||
|
||||
return data
|
||||
|
||||
func loadData(data):
|
||||
.loadData(data)
|
||||
|
||||
hasBorrowedMuzzle = SAVE.loadVar(data, "hasBorrowedMuzzle", false)
|
||||
hasBorrowedMittens = SAVE.loadVar(data, "hasBorrowedMittens", false)
|
||||
goodPoints = SAVE.loadVar(data, "goodPoints", 0)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
extends SceneBase
|
||||
|
||||
var reaction = false
|
||||
const Globals = preload("res://Modules/IssixModule/Globals.gd")
|
||||
|
||||
func _init():
|
||||
sceneID = "IssixFoundPlayer"
|
||||
|
@ -9,7 +10,7 @@ func _run():
|
|||
if(state == ""):
|
||||
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="stand"})
|
||||
|
||||
saynn("[say=issix]Hey there pet! Now, care to explain why haven't you visited for past XX days?[/say]")
|
||||
saynn("[say=issix]Hey there pet! Now, care to explain why haven't you visited for past "+str(GM.main.getDays()-GM.main.setModuleFlag("IssixModule", "Last_Day_Visited_Master", GM.main.getDays()))+" days?[/say]")
|
||||
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")
|
||||
|
@ -42,7 +43,7 @@ func _run():
|
|||
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 "+GlobalRegistry.getModule("IssixModule").getPlayerPetName()+" and come with me.[/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 "+Globals.getPlayerPetName()+" and come with me.[/say]")
|
||||
addButton("Continue", "Follow Issix to the corner", "walkcorner")
|
||||
|
||||
if state == "leave":
|
||||
|
@ -73,10 +74,14 @@ func _run():
|
|||
addButton("Fight", "Issix is ready to fight you", "startfight")
|
||||
addButton("Surrender", "Don't even attempt to fight", "surrenderfight")
|
||||
2, 2.0:
|
||||
addMessage("This is still under construction, sowwy :( ~ Frisk") # TODO Finish end of Issix's story on disobedience
|
||||
saynn("Master Issix sits in silence, just staring into you for a while.")
|
||||
saynn("[say=issix]I really don't know what to say. No, really. I have no idea what words can I use in here. The demons of this world ran out of juice. Like, what the fuck does this even mean? What am I doing here?[/say]")
|
||||
addButton("Back", "Maybe chaining mod's creator in the dungeon with a computer will make this go faster.", "endthescene")
|
||||
saynn("[say=issix]I came to the conclusion I let you run on too loose of a leash. You disobeyed me multiple times now, I do not have any need for disobedient pet. Perhaps it's a failure of my own, perhaps you are just useless even as someone's pet. This ends today.[/say]")
|
||||
saynn("[say=issix]I'll give you two options, last fucking options.[/say]")
|
||||
saynn("He breathes in the air and looks at you with intensity.")
|
||||
saynn("[say=issix]I can release you - you could stop being my pet - if that's what you fucking want. Or you can submit to me in full - I can strip you of the very ability to disobey me. You'll be my walking puppet on the strings, something even lesser than a pet if you ask me, but we'll pretend like you are one.[/say]")
|
||||
saynn("[say=issix]So what is it? Which option do you choose?[/say]")
|
||||
|
||||
addButton("Leave harem", "Stop being Issix's pet", "leaveharem")
|
||||
addButton("Submit", "Submit to Issix in full", "submitinfull")
|
||||
|
||||
if state == "understand":
|
||||
saynn("[say=pc]I understand, Master.[/say]")
|
||||
|
@ -133,7 +138,7 @@ func _run():
|
|||
saynn("Feeling in pain, you don't have anything else to answer other than.")
|
||||
saynn("[say=pc]I'm sorry, Master, I won't do this again.[/say]")
|
||||
saynn("[say=issix]Do you really mean it? Or is that another lie? Look at me, LOOK![/say]")
|
||||
saynn("He grabs you by your neck, tilts your face to meet his gaze, his face angry, furious even, staring deep into you, just like when he was judging you when you wished to become his "+ GlobalRegistry.getModule("IssixModule").getPlayerPetName() + ".")
|
||||
saynn("He grabs you by your neck, tilts your face to meet his gaze, his face angry, furious even, staring deep into you, just like when he was judging you when you wished to become his "+ Globals.getPlayerPetName() + ".")
|
||||
saynn("[say=issix]Don't make me assert control over you again.[/say]")
|
||||
saynn("He releases your body from heavy grip.")
|
||||
saynn("[say=issix]I think you suffered enough of humiliation for today. Do whatever you want, but I expect you tomorrow in the corner, as usual.[/say]")
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
extends RequirementsBasedScene
|
||||
|
||||
var preference = 0
|
||||
|
||||
func _init():
|
||||
sceneID = "PunRewPawjob"
|
||||
|
||||
func _run():
|
||||
if(state == ""):
|
||||
saynn("[say=issix]I think my pet deserves a nice reward for {pc.his} good behavior. Though, I have trouble thinking of a good reward, Hiisi, do you have any ideas?[/say]")
|
||||
saynn("[say=hiisi]... I don't know, perhaps a headpat?[/say]")
|
||||
saynn("[say=issix]No, I think something better is in order. How about a pawjob {pc.name}? What do you think? Would you like to have some nice stimulation?[/say]")
|
||||
addButton("Yes!", "Be excited about it", "yespawjob")
|
||||
addButton("Meh", "Reject the proposed activity", "nopawjob")
|
||||
|
||||
if state == "yespawjob":
|
||||
saynn("[say=pc]I like the idea Master.[/say]")
|
||||
saynn("[say=issix]Splendid.[/say]")
|
||||
var slotCoverage = Globals.getBodyCoveringItem(GM.pc, BodypartSlot.Vagina) # Even if player doesn't have Vagina it should work with base game clothing
|
||||
if slotCoverage != null:
|
||||
saynn("[say=issix]But you'll first need to lose "+slotCoverage.getVisibleName()+" before we begin, I much prefer more direct contact.[/say]")
|
||||
saynn("[say=pc]Oh, of course Master![/say]")
|
||||
saynn("[say=issix]And please, lay on the ground.[/say]")
|
||||
addButton("Undress", "Undress your bottoms", "undress")
|
||||
else:
|
||||
saynn("[say=issix]I see we don't need to do any undressing, good good. Lay on the ground then.[/say]")
|
||||
addButton("Continue", "Lay on the ground", "onground")
|
||||
|
||||
if state in ["onground", "undress"]:
|
||||
playAnimation(StageScene.SexFeetPlay, "head", {pc="issix", npc="pc"})
|
||||
|
||||
if state == "undress":
|
||||
saynn("You get undressed by Issix, after which you lie on your back on top of your blanket with top of your body facing away from Master giving him all of the easy access to your crotch.")
|
||||
saynn("[say=issix]This is better.[/say]")
|
||||
else:
|
||||
saynn("You lie on your back on top of your blanket with top of your body facing away from Master giving him all of the easy access to your crotch.")
|
||||
|
||||
saynn("However first thing your Master does after standing up from the chair is approach your top of the body first.")
|
||||
saynn("[say=issix]Look me in the eyes.[/say]")
|
||||
saynn("You already looked at your Master's face as he came closer but now you focus on your Master's eyes even more, he looks at you with intent, as he pulls his {issix.toe} over your face and orders you.")
|
||||
saynn("[say=issix][b]Lick[/b].[/say]")
|
||||
saynn("You obey your Master. The tongue meets rough texture of {issix.his} {issix.toe}, you can't deny that the texture, smell and taste that you can feel on your tongue are slightly off putting, but it's not as bad as you initially imagined it to be. As you get used to all of it your licking becomes more intense.")
|
||||
saynn("[say=issix]Get more spit on it, pet. You will thank yourself later.[/say]")
|
||||
saynn("You do as commanded and cover the sole of Master's leg in more spit. There is only so much as the solid texture can take, which is apparent when your spit drips back onto your face covering it more and more. A minute later Master is satisfied.")
|
||||
saynn("[say=issix]Good hoof slut.[/say]")
|
||||
if GM.pc.hasReachablePenis() and GM.pc.hasReachableVagina():
|
||||
addButton("Penis", "He moves back and puts his sole onto your penis", "soletreatment", [1])
|
||||
addButton("Vagina", "He moves back and puts his sole onto your vagina", "soletreatment", [2])
|
||||
else:
|
||||
addButton("Continue", "He moves back and puts his sole onto your privates", "soletreatment")
|
||||
|
||||
if state == "soletreatment":
|
||||
match preference:
|
||||
1:
|
||||
saynn("{issix.His} hoof moves over your crotch until it touches your {pc.penis} applying gentle pressure as you become accustomed with the feeling.")
|
||||
saynn("[say=pc]Ahhh![/say]")
|
||||
saynn("[say=issix]Shush, do not speak.[/say]")
|
||||
saynn("All that lubricating spit you provided becomes very useful now as the sole of {issix.his} hoof massages your increasingly erect penis. This goes on for good few minutes, every now and then you grunt slightly, showing your Master appreciation for {issix.his} care.")
|
||||
saynn("[say=issix]If you only saw yourself - a hoof slut squirming under my sole so happy {pc.his} {pc.penisSize} {pc.penis} receives attention from {pc.his} Master. Ah, whatever, I think you are too far gone.[/say]")
|
||||
saynn("Master increases pressure and speed of his massage, regardless of rough texture of his sole it's still pleasant enough for you to ")
|
||||
|
||||
|
||||
|
||||
func oneTimeOnly(_checkID: String):
|
||||
return true
|
||||
|
||||
func _react(_action: String, _args):
|
||||
if _action == "soletreatment": # 1 = penis, 2 = vagina, 3 = nullo
|
||||
if _args.size() > 0:
|
||||
preference = _args[0]
|
||||
else:
|
||||
if GM.pc.hasReachableVagina():
|
||||
preference = 2
|
||||
elif GM.pc.hasReachablePenis():
|
||||
preference = 1
|
||||
else:
|
||||
preference = 3
|
||||
|
||||
GM.pc.addLust(40)
|
||||
|
||||
if _action == "undress":
|
||||
var item = Globals.getBodyCoveringItem(GM.pc, BodypartSlot.Vagina)
|
||||
GM.pc.getInventory().unequipItem(item)
|
||||
|
||||
setState(_action)
|
|
@ -1,4 +1,5 @@
|
|||
# Based on BDCC/Scenes/ParadedOnALeashScene.gd
|
||||
# I made it a total mess
|
||||
|
||||
extends "res://Scenes/SceneBase.gd"
|
||||
|
||||
|
@ -15,6 +16,7 @@ var stageScene = StageScene.Duo
|
|||
var goodPoints = 0
|
||||
var waited = 0
|
||||
var sat_down = false
|
||||
var pace = 0
|
||||
|
||||
func _initScene(_args = []):
|
||||
stageScene = StageScene.PuppyDuo if shouldBeInHeavyBondage() else StageScene.Duo
|
||||
|
@ -33,6 +35,9 @@ func _run():
|
|||
saynn("He looks at Hiisi and tells him he will be out for a while.")
|
||||
|
||||
if state == "nova_horny":
|
||||
addCharacter("nova")
|
||||
addCharacter(pawns_interactions[0])
|
||||
addCharacter(pawns_interactions[1])
|
||||
if pawns_interactions.size() < 2:
|
||||
setState("follow")
|
||||
else:
|
||||
|
@ -46,11 +51,60 @@ func _run():
|
|||
saynn("[say=pawn1]Good fuck.[/say]")
|
||||
saynn("[say=pawn2]Arrgghhh.[/say]")
|
||||
|
||||
saynn("") # TODO
|
||||
saynn("[say=issix]Always knew Nova was a horny slut, but rarely I see them going at it with other inmates, they are usually more... Seclusive. Anyways, we should continue. Let's go.[/say]")
|
||||
|
||||
addButton("Continue", "Continue walking", "follow")
|
||||
|
||||
if state == "irritatingguard":
|
||||
addCharacter(pawns_interactions[0])
|
||||
if GM.pc.hasTail():
|
||||
saynn("You continue walking happily behind your Master, however for the second time a guard behind you is steps on your tail. It's fairly painful each time they do this. You could try to do something about it...")
|
||||
else:
|
||||
saynn("You continue walking happily behind your Master, however for the second time a guard behind you is steps on your {pc.toes}. It's fairly painful each time they do this. You could try to do something about this...")
|
||||
addButtonWithChecks("Bite", "Bite the guard", "biteguard", [], [[ButtonChecks.NotOralBlocked]])
|
||||
addButton("Tug leash", "You could tug on leash to get Master's attention...", "tugmaster")
|
||||
addButton("Ignore", "Ignore the guard", "follow")
|
||||
|
||||
if state == "biteguard":
|
||||
addCharacter(pawns_interactions[0])
|
||||
saynn("You decide to bite the guard, they are clearly doing it on purpose considering their wide grin and how they look at you.")
|
||||
saynn("[say=pc]*chomp*[/say]")
|
||||
saynn("[say=pawn1]YOU MOTHERFUCKER![/say]")
|
||||
saynn("Your Master looks behind to see the commotion, {pawn1.name} is looking pissed off, it turns out that even with guard uniform their legs are still quite open to bite attacks... {pawn1.He} jumps on {pawn1.his} one leg while the other one (the one you bit) is in their paws.")
|
||||
saynn("[say=pawn1]Your pet BIT ME![/say]")
|
||||
saynn("Master stares at you as if he demanded an explanation.")
|
||||
if GM.pc.hasTail():
|
||||
saynn("You curl your tail with its tip close to your mouth and whine.")
|
||||
else:
|
||||
saynn("You whine while trying to point your Master at your hinder {pc.toes}.")
|
||||
|
||||
saynn("Your Master's look relaxes and he looks back at the guard.")
|
||||
|
||||
saynn("[say=issix]Trust me, you are lucky it was {pc.him} who bit you.[/say]")
|
||||
saynn("As if nothing else your Master looks forwards and without any further explanation continues walking, you behind him. The guard is still recoiling in pain from your bite as they stare angrily at you both, justice served?")
|
||||
addButton("Follow", "Continue walking", "follow")
|
||||
|
||||
if state == "tugmaster":
|
||||
addCharacter(pawns_interactions[0])
|
||||
saynn("You tug on your Master's leash in a pattern, he recognizes that you need his attention stops and looks at you, the guard from behind you continues walking, passing you on your left.")
|
||||
if GM.pc.hasTail():
|
||||
saynn("You show your Master your tail and try to point at the guard who was just behind you. Your Master looks confused for a moment though he quickly realizes what you are trying to signify.")
|
||||
else:
|
||||
saynn("You show your Master your {pc.toes} and try to point at the guard who was just behind you. Your Master looks confused for a moment though he quickly realizes what you are trying to signify.")
|
||||
saynn("[say=issix]Let's get them.[/say]")
|
||||
|
||||
saynn("Master looks forward, both of you speed up the walk until you catch up to {pawn1.name}.")
|
||||
saynn("[say=issix]Excuse me, were you the one who assulted my pet?[/say]")
|
||||
saynn("[say=pawn1]Assaulted? The fuck you are talking about inmate?[/say]")
|
||||
saynn("Issix closes in to them and moves his head to guard's ear, whispering something to {pawn1.him}. {pawn1.His} face expression changes immediately as he apologizes both to your Master as well as you while fleeing the place in embarrassment.")
|
||||
saynn("[say=issix]Thank you for the mention. They should treat you with respect you deserve from now on.[/say]")
|
||||
saynn("You wonder what Issix whispered to that guard to get that kind of effect. It must have been something really personal considering their reaction. Either way, the situation seems to be handled now.")
|
||||
addButton("Follow", "Continue walking", "follow")
|
||||
|
||||
|
||||
if(state == "" || state == "leashed"):
|
||||
clearCharacter()
|
||||
addCharacter("issix")
|
||||
if(state == "leashed"):
|
||||
playAnimation(stageScene, "crawl", {npc="issix", npcAction="walk", flipNPC=true, bodyState={leashedBy="issix"}})
|
||||
if(path.size() > 0):
|
||||
|
@ -62,6 +116,11 @@ func _run():
|
|||
saynn("You're being walked on a leash by Issix")
|
||||
else:
|
||||
saynn("You're being walked on a leash by Issix")
|
||||
|
||||
if pace < 0:
|
||||
saynn("[color=#ff5500]Your Master slows down and you can feel the leash getting looser, if you keep walking you will walk into your Master![/color]")
|
||||
elif pace > 0:
|
||||
saynn("[color=#ff5500]Your Master speeds up and you can feel the leash pulling you forward, if you don't keep up the pace you will slow down your Master![/color]")
|
||||
|
||||
if(GM.pc.isBlindfolded() && !GM.pc.canHandleBlindness()):
|
||||
saynn(_roomInfo.getBlindDescription())
|
||||
|
@ -70,19 +129,15 @@ func _run():
|
|||
|
||||
|
||||
addButton("Skip", "Skip the walk (skips all of the potential random small scenes as well!)", "skipwalk")
|
||||
addButtonAt(6, "Follow", "Follow the leash", "follow")
|
||||
addButtonAt(6, "Follow", "Follow the leash at regular speed", "follow")
|
||||
addButtonAt(7, "Faster", "Follow the leash a little bit faster", "followfast")
|
||||
addButtonAt(8, "Slower", "Follow the leash a little bit slower", "followslow")
|
||||
if RNG.chance(2):
|
||||
addButtonAt(7, "Check", "You've noticed something nearby, you could investigate but your Master wouldn't like it", "distraction")
|
||||
addButtonAt(9, "Check", "You've noticed something nearby, you could investigate but your Master wouldn't like it", "distraction")
|
||||
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(destination)
|
||||
GM.pc.setLocation(destination)
|
||||
|
||||
endScene()
|
||||
|
||||
if state == "yard_vaulthere":
|
||||
if GM.pc.isBlindfolded():
|
||||
saynn("You can feel a bit more moisty and cold air as you step further. The surface of the path also changes - you recognize that you are likely near your destination. Your Master changes the direction of the walk.")
|
||||
|
@ -123,17 +178,44 @@ func _run():
|
|||
if GM.pc.hasBlockedHands():
|
||||
if RNG.chance(clamp(GM.pc.getStat(Stat.Agility), 0, 50)):
|
||||
saynn("Despite the fact that your paws were rendered truthfully useless by the bondage mittens, your skill had helped you to pocket the work credit for yourself. You are quite proud of yourself. Your Master? Not so much. You got noticed as you were doing that and your Master is unimpressed. Aw.")
|
||||
distractionSuccess()
|
||||
distractionFailure()
|
||||
else:
|
||||
saynn("With your paws rendered useless, you struggle to get the work credits for yourself. Unfortunately your efforts end at nothing ad the work credit just gets pushed by your rubber mitts. To add to that, your efforts were noticed by your Master and he is unimpressed. Aw.")
|
||||
distractionFailure()
|
||||
else:
|
||||
if RNG.chance(95):
|
||||
saynn("You snag and secure the work credit without any issue. Score for {pc.Name}!")
|
||||
distractionSuccess()
|
||||
else:
|
||||
saynn("You attempt to snag the work credit but you didn't notice another inmate coming from behind, his leg hits your arm in a fairly painful accident. You don't manage to snag the work token and you have to deal with very unimpressed Master.")
|
||||
distractionFailure()
|
||||
addButton("Continue", "Continue", "follow")
|
||||
|
||||
func distractionSuccess():
|
||||
GM.pc.addCredits(2)
|
||||
addMessage("You obtained 2 work credits")
|
||||
|
||||
func distractionFailure():
|
||||
goodPoints -= 1
|
||||
|
||||
|
||||
func checkSpeed(state):
|
||||
if state == "followfast":
|
||||
pace -= 1
|
||||
if state == "followslow":
|
||||
pace += 1
|
||||
if state != "follow":
|
||||
if pace == 0:
|
||||
goodPoints += 1
|
||||
addMessage("Your pace started matching your Master's.")
|
||||
if pace < 0:
|
||||
addMessage("You have bumped into your Master and earned an earful about watching your pace!")
|
||||
goodPoints -= 1
|
||||
pace = 0
|
||||
elif pace > 0:
|
||||
addMessage("Master's pace caught up with you until you were dragged on your leash, Master orders you to keep up.")
|
||||
goodPoints -= 1
|
||||
pace = 0
|
||||
|
||||
|
||||
func _react(_action: String, _args):
|
||||
|
@ -146,6 +228,12 @@ func _react(_action: String, _args):
|
|||
goodPoints -= 1
|
||||
sat_down = true
|
||||
|
||||
if _action == "disctraction": # TODO: Add more distractions
|
||||
_action = "distraction1"
|
||||
|
||||
if _action == "tugmaster":
|
||||
goodPoints += 1
|
||||
|
||||
if _action == "return":
|
||||
GM.pc.setLocation(corner)
|
||||
aimCamera(corner)
|
||||
|
@ -156,7 +244,7 @@ func _react(_action: String, _args):
|
|||
processTime(5*60)
|
||||
waited += 1
|
||||
|
||||
if(_action == "follow"):
|
||||
if(_action in ["follow", "followfast", "followslow"]):
|
||||
if(path.size() == 0):
|
||||
setState(destination)
|
||||
return
|
||||
|
@ -173,7 +261,13 @@ func _react(_action: String, _args):
|
|||
return
|
||||
if path.size() in custom_scenes[destination] and RNG.chance(20):
|
||||
_action = custom_scenes[destination][path.size()]
|
||||
pace = 0
|
||||
elif RNG.chance(1):
|
||||
_action = "irritatingguard"
|
||||
else:
|
||||
checkSpeed(_action)
|
||||
if RNG.chance(20):
|
||||
pace += RNG.pick([-1, 1])
|
||||
setState("leashed")
|
||||
return
|
||||
|
||||
|
@ -182,6 +276,18 @@ func _react(_action: String, _args):
|
|||
if null in pawns_interactions:
|
||||
setState("leashed")
|
||||
return
|
||||
|
||||
if _action == "irritatingguard":
|
||||
pawns_interactions = pick_unique_one(findPawns([[["isGuard"], []]]))
|
||||
if null in pawns_interactions:
|
||||
setState("leashed")
|
||||
return
|
||||
GM.pc.addPain(10)
|
||||
|
||||
if _action == "skipwalk":
|
||||
aimCamera(destination)
|
||||
GM.pc.setLocation(destination)
|
||||
_action = destination
|
||||
|
||||
setState(_action)
|
||||
|
||||
|
@ -261,6 +367,7 @@ func saveData():
|
|||
data["pawnsInteractions"] = pawns_interactions
|
||||
data["waited"] = waited
|
||||
data["sat"] = sat_down
|
||||
data["pace"] = pace
|
||||
|
||||
return data
|
||||
|
||||
|
@ -274,5 +381,6 @@ func loadData(data):
|
|||
pawns_interactions = SAVE.loadVar(data, "pawnsInteractions", [])
|
||||
waited = SAVE.loadVar(data, "waited", 0)
|
||||
sat_down = SAVE.loadVar(data, "sat_down", false)
|
||||
pace = SAVE.loadVar(data, "pace", 0)
|
||||
|
||||
return null
|
||||
|
|
|
@ -79,6 +79,10 @@ func _run():
|
|||
else:
|
||||
addDisabledButton("Sex", "You've already had sex with Issix today")
|
||||
addButton("Walk", "Ask when he plans the next walk to the pasture", "issixwalkquestion")
|
||||
if getModuleFlag("IssixModule", "Trained_Pet_Today", false) == false:
|
||||
addButton("Training", "Ask Master if he could train you to be a better pet", "issixpettraining")
|
||||
else:
|
||||
addDisabledButton("Training", "You can only train once per day")
|
||||
addDisabledButton("Tasks", "Ask for extra tasks (WIP)") # , "issixtaskquestion"
|
||||
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", "")
|
||||
|
@ -152,10 +156,10 @@ func _run():
|
|||
if state == "azazelpetmenu":
|
||||
addCharacter("azazel")
|
||||
playAnimation(StageScene.Duo, "kneel", {pc="azazel", npcAction="kneel", npc="pc", bodyState={naked=false, hard=false}})
|
||||
if GM.pc.getSkillLevel(Skill.SexSlave) < 15:
|
||||
addDisabledButton("Learn sex", "Learn about sexual slavery from Azazel (WIP)") # , "azazellearnslavery"
|
||||
else:
|
||||
addDisabledButton("Learn", "You are already a master of Azazel's craft of sexual servitude")
|
||||
# if GM.pc.getSkillLevel(Skill.SexSlave) < 15:
|
||||
# addDisabledButton("Learn sex", "Learn about sexual slavery from Azazel (WIP)") # , "azazellearnslavery"
|
||||
# else:
|
||||
# addDisabledButton("Learn", "You are already a master of Azazel's craft of sexual servitude")
|
||||
if GlobalRegistry.getCharacter("azazel").isPregnant() or GM.pc.isVisiblyPregnant():
|
||||
if getModuleFlag("IssixModule", "Azazel_Fertility_Training_Today") == true:
|
||||
addDisabledButton("Learn fertility", "You've trained fertility with Azazel today already")
|
||||
|
@ -425,11 +429,92 @@ func _run():
|
|||
saynn("[say=azazel]Cmooonnn, come back soon! I wanna fuuuck![/say]")
|
||||
addButton("Leave", "", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilityfirst":
|
||||
if state == "azazelfertilitybreeding":
|
||||
if GM.main.getDays() % 2 == 0:
|
||||
playAnimation(StageScene.SexLotus, "fast", {pc="pc", npc="azazel", npcCum=true, bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
|
||||
else:
|
||||
playAnimation(StageScene.SexAllFours, "fast", {pc="azazel", npc="pc", pcCum=true, bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
|
||||
if !GM.pc.isFullyNaked():
|
||||
saynn("Azazel eagerly puts on the strapon and prepares you for fucking, taking off all of his own and your clothes, he runs his paw over your "+Globals.getSkinWord()+" sensually.")
|
||||
else:
|
||||
saynn("Azazel eagerly puts on the strapon and prepares for fucking, taking off all of his clothes, he runs his paw over your "+Globals.getSkinWord()+" sensually.")
|
||||
if GM.pc.hasReachableVagina():
|
||||
saynn("He moves his paw fingers towards your {pc.pussyStretch} {pc.pussy} lips. With his other paw he applies lube.")
|
||||
else:
|
||||
saynn("He moves his paw fingers towards your {pc.analStretch} pucker. With his other paw he applies lube.")
|
||||
|
||||
saynn("He hums a song when doing all of this while at the same time he prepares a strapon wrapping its tape around his body keeping it securely attached.")
|
||||
saynn("[say=azazel]Oki, I'm going in, operation fertilize {pc.name} is a go, nyaaa![/say]")
|
||||
if GM.main.getDays() % 2 == 0:
|
||||
saynn("Sitting feline takes your paws and leads you onto his legs until you are positioned directly above his {azazel.penisOrStrapon}. You lower onto his strapon very gently at first, however this doesn't take long as he motions you to speed up pretty fast. Soon you are bobbing on his dick like animal in heat. It doesn't seem like he is looking for a long fuck but rather he has only one goal in his mind.")
|
||||
else:
|
||||
saynn("Feline puts on {azazel.penisOrStrapon} and leads you to face away from him while on your fours, you oblige. It's pretty animalistic to fuck on fours, only bringing your lust further up. Not long after you feel the tip of his strapon touch you until it goes all in. Azazel quickens his pace really fast, ramming into you like an animal in heat. It doesn't seem like he is looking for a long fuck but rather he has only one goal in his mind.")
|
||||
|
||||
saynn("Your love making does attract attention of your Master, but you don't notice that, as you have more important task to fulfill in a moment and he prefers to just watch you two have fun.")
|
||||
addButton("Cum!", "Cum!", "azazelfertilitybreedingfinish")
|
||||
|
||||
if state == "azazelfertilityswitchstates":
|
||||
saynn("[say=pc]Please teach me more about fertility.[/say]")
|
||||
saynn("[say=azazel]Sure! Though... This time lube won't do.[/say]")
|
||||
saynn("[say=pc]What do you mean?[/say]")
|
||||
saynn("[say=azazel]You know plenty already, this time I'd want something different... I'd like the ability to impregnate you.[/say]")
|
||||
saynn("You are kind of stunned, ability to impregnate you? Azazel doesn't even have the-")
|
||||
if GM.pc.hasVagina():
|
||||
saynn("[say=azazel]You'll bring me a strapon with cum and I'll use it to ram it into your {pc.vagina}. If I can't, there will be no lesson for you. I want to see you have a big belly full of cubs hihi.[/say]")
|
||||
elif GM.pc.hasWombIn(BodypartSlot.Anus):
|
||||
saynn("[say=azazel]You'll bring me a strapon with cum and I'll use it to ram it between your sweet cheeks until it leaks with all of the content of it. If I can't - for whatever reason, there will be no lesson for you. I want to see you have a big belly full of cubs hihi.[/say]")
|
||||
else:
|
||||
saynn("-- THIS SHOULDN'T HAPPEN! UNLESS YOU HAVE WOMB SOMEWHERE IN STRANGE PLACE, IN WHICH CASE - GOOD FOR YOU BUT I HAVEN'T ADDED SUPPORT FOR THAT, LET ME KNOW --")
|
||||
if !GM.pc.hasPenis() or GM.pc.hasPerk(Perk.StartMaleInfertility):
|
||||
saynn("[say=pc]That's... Kinda hot but... Where will I get cum from?[/say]")
|
||||
saynn("[say=azazel]Cmon cutie, you can figure it out, it can be anyone, best if it's Master's cum![/say]")
|
||||
|
||||
saynn("[say=pc]So, you want to impregnate me every lesson?[/say]")
|
||||
saynn("[say=azazel]Indeed! The best way to teach you is with you having your belly full of cubs, isn't it?[/say]")
|
||||
saynn("[say=pc]I guess...[/say]")
|
||||
saynn("[say=azazel]Also, one of us should be pregnant, I can't work my teacher magic without some inspiration.[/say]")
|
||||
saynn("[say=pc]That's... Certainly a requirement.[/say]")
|
||||
saynn("[say=azazel]Easier thank you may think![/say]")
|
||||
addButton("Go for it", "Sure, why not, if it helps you train", "azazelfertilityagreeswitched")
|
||||
addButton("Maybe later", "Say you have to think about it some more", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilitybreedingfinish":
|
||||
if GM.main.getDays() % 2 == 0:
|
||||
playAnimation(StageScene.SexLotus, "tease", {pc="pc", npc="azazel", npcCum=true, pcCum=true, bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
|
||||
else:
|
||||
playAnimation(StageScene.SexAllFours, "teaseflop", {pc="azazel", npc="pc", pcCum=true, npcCum=true, bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
|
||||
|
||||
saynn("Eventually the moment comes, and both Azazel as well as you come to a climax. You can feel your fertile body squeezing the {azazel.strapon} for its contents until it ends up deep inside of you, perhaps leading to pregnancy. This idea only arose you even further as you were making love to Azazel.")
|
||||
saynn("[say=azazel]Nyaaaaa. That was cool, did you enjoy your breeding? Mroowww.[/say]")
|
||||
saynn("[say=pc]I did, thank you Azazel![/say]")
|
||||
if GM.pc.hasReachableVagina():
|
||||
saynn("He pulls out the strapon out of your {pc.vagina}, it's still dripping bit of cum as he takes it out, but most ended up deep inside of you.")
|
||||
else:
|
||||
saynn("He pulls out the strapon out of your {pc.analStretch} ass, it's still dripping bit of cum as he takes it out, but most ended up deep inside of you.")
|
||||
|
||||
saynn("[say=azazel]Hehe, I hope you keep all that spudge inside of you and it makes you a wonderful mother, speaking of which, it's time for training, let me just...[/say]")
|
||||
|
||||
saynn("He takes off strapon and gives it back to you.")
|
||||
|
||||
saynn("[say=azazel]Thankiiii! Was fun.[/say]")
|
||||
saynn("You recover and you both decide to continue to the lesson.")
|
||||
addButton("Continue", "Continue to the lesson", "azazelfertilitysecond")
|
||||
|
||||
if state == "azazelfertilityfirst":
|
||||
saynn("[say=azazel]Alright, when you are pregnant there are three trimesters, each takes around three months. First sperm fertilizes the egg, then that egg travels through a fun tube to the uterus where it attaches and begins to form the embryo...[/say]")
|
||||
saynn("Azazel continues boring you with all of the details on pregnancy for what feels a looong time. You are surprised he knows so much, even though maybe you shouldn't he did bring likely countless children onto the world.")
|
||||
saynn("[say=azazel]... and sometimes - until around middle of your second trimester when you wake up, you might feel sick and dizzy, in my experience it happens around 1 in 3 mornings. It's totally normal! You are not dying or anything, it's just pregnancy stuff.[/say]")
|
||||
saynn("[say=azazel]Anyways, I hope you got all of that, it would be it for today. Come back some other day eh? There is still so much I have to tell you![/say]")
|
||||
saynn("And just like that you've learned a lot about pregnancy and what it means.")
|
||||
addButton("End lesson", "Lesson ended, you can go now", "azazelpetmenu")
|
||||
|
||||
if state == "azazelfertilitysecond":
|
||||
saynn("[say=azazel]To be a good breeding bitch for our Master you'll have to make sure you stay healthy and take every opportunity to stay as fertile as possible. Keep in mind your ovulation calendar, when you go into heat it's the best time to start breedin', I like to keep all that cum in, you can help yourself with a plug - they are good for all kinds of holes hehe.[/say]")
|
||||
saynn("[say=azazel]Don't get stressed, eat healthy... Well, not much you can do about that with prison food but still. Try to use lubricants that won't kill sperm before it reaches your eggs, avoid stress - best if you stay in the harem for that honestly. Prison can be stressful place but we are safe under Master's watch! When you get round belly make sure to keep it safe, you can still have sex just...[/say]")
|
||||
saynn("He continues his long string of advice which you listen to. Eventually it ends.")
|
||||
saynn("[say=azazel]Phew, I think that's all for today. Let me know if you need anything more![/say]")
|
||||
|
||||
addButton("End lesson", "Lesson ended, you can go now", "azazelpetmenu")
|
||||
|
||||
if state == "hiisilearncombatfirst":
|
||||
playAnimation(StageScene.Yoga, "warrior", {pc="hiisi", bodyState={naked=true}})
|
||||
|
@ -621,7 +706,6 @@ func _run():
|
|||
addMessage("You've been assigned punishment by your Master.") # TODO
|
||||
addButton("Back", "Go back", "")
|
||||
|
||||
|
||||
if state == "readabook":
|
||||
saynn("You read one of the comic books, 20 minutes pass.") # TODO Expand on this
|
||||
addButton("Back", "Go back", "")
|
||||
|
@ -759,16 +843,59 @@ func _react(_action: String, _args):
|
|||
if _action == "hiisiprotect":
|
||||
setModuleFlag("IssixModule", "Hiisi_Protects_PC", true)
|
||||
|
||||
if _action == "azazelfertilitybreeding":
|
||||
var strapon = _args[0]
|
||||
getCharacter("azazel").getInventory().forceEquipStoreOtherUnlessRestraint(strapon)
|
||||
GM.pc.addEffect(StatusEffect.LubedUp, [30*60])
|
||||
GM.pc.addLust(50)
|
||||
|
||||
if _action == "azazelfertilitybreedingfinish":
|
||||
if GM.pc.hasReachableVagina():
|
||||
GM.pc.cummedInVaginaBy("azazel", FluidSource.Strapon, RNG.randf_range(0.8, 1.0))
|
||||
elif GM.pc.hasReachableAnus():
|
||||
GM.pc.cummedInAnusBy("azazel", FluidSource.Strapon, RNG.randf_range(0.8, 1.0))
|
||||
GM.pc.cummedOnBy("pc", FluidSource.Penis if GM.pc.hasPenis() else FluidSource.Vagina)
|
||||
GlobalRegistry.getCharacter("azazel").cummedOnBy("pc", FluidSource.Penis if GM.pc.hasPenis() else FluidSource.Vagina)
|
||||
GM.pc.addLust(-90)
|
||||
GM.pc.addStamina(-10)
|
||||
|
||||
if _action == "azazelfertilitysecond":
|
||||
GM.pc.getInventory().addItem(getCharacter("azazel").getInventory().getEquippedItem(InventorySlot.Strapon))
|
||||
|
||||
if _action == "azazelfertilityagreeswitched":
|
||||
setModuleFlag("IssixModule", "Had_Previously_Trained_Fertility_LVL1", false)
|
||||
_action = "azazelfertilityrepeatsex"
|
||||
|
||||
if _action == "azazellearnfertility":
|
||||
if getModuleFlag("IssixModule", "Azazel_Fertility_Training_Today") == null:
|
||||
_action = "azazelfertilityfirst"
|
||||
elif GM.pc.getSkillLevel(Skill.Fertility) < 6:
|
||||
_action = "azazelfertilityrepeatlube"
|
||||
else:
|
||||
_action = "azazelfertilityrepeatsex"
|
||||
if getModuleFlag("IssixModule", "Had_Previously_Trained_Fertility_LVL1") == true:
|
||||
_action = "azazelfertilityswitchstates"
|
||||
else:
|
||||
_action = "azazelfertilityrepeatsex"
|
||||
|
||||
if _action == "azazelfertilityfirst":
|
||||
GM.pc.getInventory().removeFirstOf("lube")
|
||||
setModuleFlag("IssixModule", "Had_Previously_Trained_Fertility_LVL1", true)
|
||||
|
||||
if _action in ["azazelfertilityfirst", "azazelfertilitysecond"]:
|
||||
processTime(25*60)
|
||||
var skill = GM.pc.getSkillsHolder().getSkill(Skill.Fertility)
|
||||
var exp_calc = 25
|
||||
if skill != null:
|
||||
exp_calc = int(skill.getRequiredExperience(skill.getLevel()+1)/4)
|
||||
GM.pc.addSkillExperience(Skill.Fertility, exp_calc) # Needs <4 trainings per level, to not be too OP
|
||||
addMessage("You've gained "+str(exp_calc)+"XP in Fertility thanks to training with Azazel.")
|
||||
GM.main.setModuleFlag("IssixModule", "Azazel_Fertility_Training_Today", true)
|
||||
GM.pc.addStamina(-25)
|
||||
|
||||
if _action == "issixpettraining":
|
||||
runScene("IssixGenericTrainSession")
|
||||
_action = "issixpetmenu"
|
||||
setModuleFlag("IssixModule", "Trained_Pet_Today", true)
|
||||
|
||||
if _action == "lamiapetrequest":
|
||||
GM.pc.addPain(-10)
|
||||
|
|
Loading…
Reference in a new issue