Updates 07.11

This commit is contained in:
Frisk 2024-11-07 17:03:20 +01:00
parent b53c6adab3
commit 08b28a8dab
11 changed files with 423 additions and 116 deletions

View file

@ -1,5 +1,7 @@
extends Character extends Character
# Incredibly subby and kinky creature, mostly aligns with mod's author preferences.'
func _init(): func _init():
id = "azazel" id = "azazel"
npcHasMenstrualCycle = true npcHasMenstrualCycle = true
@ -23,22 +25,22 @@ func _init():
} }
npcDefaultFetishInterest = FetishInterest.Neutral npcDefaultFetishInterest = FetishInterest.Neutral
npcFetishes = { npcFetishes = {
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes, Fetish.AnalSexReceiving : FetishInterest.Loves,
Fetish.AnalSexGiving : FetishInterest.Hates, Fetish.AnalSexGiving : FetishInterest.Hates,
Fetish.VaginalSexGiving : FetishInterest.Hates, Fetish.VaginalSexGiving : FetishInterest.Hates,
Fetish.VaginalSexReceiving : FetishInterest.Loves, Fetish.VaginalSexReceiving : FetishInterest.Loves,
Fetish.OralSexReceiving : FetishInterest.Likes, Fetish.OralSexReceiving : FetishInterest.Likes,
Fetish.OralSexGiving : FetishInterest.Likes,
Fetish.Sadism : FetishInterest.ReallyDislikes, Fetish.Sadism : FetishInterest.ReallyDislikes,
Fetish.Masochism : FetishInterest.Hates, Fetish.Masochism : FetishInterest.Likes,
Fetish.UnconsciousSex : FetishInterest.Loves, Fetish.UnconsciousSex : FetishInterest.Hates,
Fetish.BeingBred : FetishInterest.Dislikes, Fetish.Breeding : FetishInterest.Hates,
Fetish.Bondage : FetishInterest.Likes, Fetish.BeingBred : FetishInterest.Loves,
Fetish.Bondage : FetishInterest.Loves,
Fetish.Rigging : FetishInterest.Likes, Fetish.Rigging : FetishInterest.Likes,
Fetish.Condoms : FetishInterest.Dislikes, Fetish.Condoms : FetishInterest.Dislikes,
Fetish.DrugUse : FetishInterest.Likes, Fetish.DrugUse : FetishInterest.Likes,
Fetish.Exhibitionism : FetishInterest.Loves, Fetish.Exhibitionism : FetishInterest.Loves,
Fetish.Tribadism : FetishInterest.SlightlyDislikes, Fetish.Tribadism : FetishInterest.Dislikes,
Fetish.StraponSexVaginal : FetishInterest.Dislikes, Fetish.StraponSexVaginal : FetishInterest.Dislikes,
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes, Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes,
Fetish.Choking : FetishInterest.SlightlyDislikes, Fetish.Choking : FetishInterest.SlightlyDislikes,
@ -46,33 +48,33 @@ func _init():
} }
npcLustInterests = { npcLustInterests = {
InterestTopic.TallyMarks: Interest.ReallyLikes, InterestTopic.TallyMarks: Interest.ReallyLikes,
InterestTopic.Bodywritings: Interest.KindaLikes, InterestTopic.Bodywritings: Interest.ReallyLikes,
InterestTopic.Gags: Interest.Loves, InterestTopic.Gags: Interest.Neutral,
InterestTopic.Blindfolds: Interest.Loves, InterestTopic.Blindfolds: Interest.KindaLikes,
InterestTopic.BDSMRestraints: Interest.Loves, InterestTopic.BDSMRestraints: Interest.Loves,
InterestTopic.ButtPlugs: Interest.Dislikes, InterestTopic.ButtPlugs: Interest.Neutral,
InterestTopic.VaginalPlugs: Interest.Dislikes, InterestTopic.VaginalPlugs: Interest.Neutral,
InterestTopic.FeminineBody: Interest.KindaLikes, InterestTopic.FeminineBody: Interest.KindaLikes,
InterestTopic.AndroBody: Interest.Likes, InterestTopic.AndroBody: Interest.Loves,
InterestTopic.MasculineBody: Interest.ReallyLikes, InterestTopic.MasculineBody: Interest.ReallyLikes,
InterestTopic.ThickBody: Interest.Dislikes, InterestTopic.ThickBody: Interest.Dislikes,
InterestTopic.SlimBody: Interest.Likes, InterestTopic.SlimBody: Interest.Loves,
InterestTopic.BigBreasts: Interest.Hates, InterestTopic.BigBreasts: Interest.Hates,
InterestTopic.StuffedPussy: Interest.Likes, InterestTopic.StuffedPussy: Interest.Likes,
InterestTopic.StuffedPussyOrAss: Interest.KindaLikes, InterestTopic.StuffedPussyOrAss: Interest.KindaLikes,
InterestTopic.Pregnant: Interest.ReallyLikes, InterestTopic.Pregnant: Interest.Loves,
InterestTopic.StuffedThroat: Interest.ReallyLikes, InterestTopic.StuffedThroat: Interest.ReallyLikes,
InterestTopic.CoveredInCum: Interest.ReallyLikes, InterestTopic.CoveredInCum: Interest.ReallyLikes,
InterestTopic.CoveredInLotsOfCum: Interest.Likes, InterestTopic.CoveredInLotsOfCum: Interest.Loves,
InterestTopic.FullyNaked: Interest.Loves, InterestTopic.FullyNaked: Interest.Loves,
InterestTopic.ExposedPussy: Interest.ReallyLikes, InterestTopic.ExposedPussy: Interest.Dislikes,
InterestTopic.ExposedAnus: Interest.ReallyLikes, InterestTopic.ExposedAnus: Interest.ReallyLikes,
InterestTopic.ExposedBreasts: Interest.ReallyLikes, InterestTopic.ExposedBreasts: Interest.Hates,
InterestTopic.ExposedCock: Interest.ReallyLikes, InterestTopic.ExposedCock: Interest.ReallyLikes,
InterestTopic.ExposedPanties: Interest.Hates, InterestTopic.ExposedPanties: Interest.Neutral,
InterestTopic.ExposedBra: Interest.Hates, InterestTopic.ExposedBra: Interest.Neutral,
InterestTopic.LooseAnus: Interest.SlightlyDislikes, InterestTopic.LooseAnus: Interest.Neutral,
InterestTopic.LoosePussy: Interest.SlightlyDislikes, InterestTopic.LoosePussy: Interest.Neutral,
InterestTopic.TightAnus: Interest.Likes, InterestTopic.TightAnus: Interest.Likes,
InterestTopic.TightPussy: Interest.Likes, InterestTopic.TightPussy: Interest.Likes,
InterestTopic.BigCock: Interest.Hates, InterestTopic.BigCock: Interest.Hates,

View file

@ -1,19 +1,22 @@
extends Character extends Character
# Hiisi is a relatively dominating character out of all three pets. He still has some HighSec energy in them
func _init(): func _init():
id = "hiisi" id = "hiisi"
npcHasMenstrualCycle = false npcHasMenstrualCycle = false
npcCharacterType = CharacterType.Inmate npcCharacterType = CharacterType.Inmate
pickedSkin="SoftSpikySkin" # TODO Check options pickedSkin="ArconSkin"
pickedSkinRColor=Color("ffca3030") pickedSkinRColor=Color("ffc8c2c2")
pickedSkinGColor=Color("ff720505") pickedSkinGColor=Color("ff423c51")
pickedSkinBColor=Color("ff000000") pickedSkinBColor=Color("ff767676")
npcSkinData={ npcSkinData={
"hair": {"r": Color("ffb05745"),"g": Color("ffb05745"),"b": Color("ff2288ab"),}, "hair": {"r": Color("ffb05745"),"g": Color("ffb05745"),"b": Color("ff2288ab"),},
"penis": {"r": Color("ff4e2626"),"g": Color("ff9d2121"),"b": Color("ff991a1a"),},
} }
npcPersonality = { npcPersonality = {
PersonalityStat.Brat: -0.9, PersonalityStat.Brat: 0.1,
PersonalityStat.Mean: 0.4, PersonalityStat.Mean: 0.4,
PersonalityStat.Subby: 1.0, PersonalityStat.Subby: 1.0,
PersonalityStat.Impatient: 0.9, PersonalityStat.Impatient: 0.9,
@ -23,25 +26,24 @@ func _init():
npcDefaultFetishInterest = FetishInterest.Neutral npcDefaultFetishInterest = FetishInterest.Neutral
npcFetishes = { npcFetishes = {
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes, Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
Fetish.AnalSexGiving : FetishInterest.Hates, Fetish.AnalSexGiving : FetishInterest.Likes,
Fetish.VaginalSexGiving : FetishInterest.Hates, Fetish.VaginalSexGiving : FetishInterest.Likes,
Fetish.VaginalSexReceiving : FetishInterest.Loves,
Fetish.OralSexReceiving : FetishInterest.Likes, Fetish.OralSexReceiving : FetishInterest.Likes,
Fetish.OralSexGiving : FetishInterest.Likes, Fetish.OralSexGiving : FetishInterest.SlightlyDislikes,
Fetish.Sadism : FetishInterest.ReallyDislikes, Fetish.Sadism : FetishInterest.Likes,
Fetish.Masochism : FetishInterest.Hates, Fetish.Masochism : FetishInterest.Hates,
Fetish.UnconsciousSex : FetishInterest.Loves, Fetish.UnconsciousSex : FetishInterest.Likes,
Fetish.BeingBred : FetishInterest.Dislikes,
Fetish.Bondage : FetishInterest.Likes, Fetish.Bondage : FetishInterest.Likes,
Fetish.Rigging : FetishInterest.Likes, Fetish.Rigging : FetishInterest.Likes,
Fetish.Condoms : FetishInterest.Dislikes, Fetish.Breeding : FetishInterest.Dislikes,
Fetish.DrugUse : FetishInterest.Likes, Fetish.Condoms : FetishInterest.Likes,
Fetish.Exhibitionism : FetishInterest.Loves, Fetish.DrugUse : FetishInterest.SlightlyDislikes,
Fetish.Tribadism : FetishInterest.SlightlyDislikes, Fetish.Tribadism : FetishInterest.Dislikes,
Fetish.StraponSexVaginal : FetishInterest.Dislikes, Fetish.StraponSexVaginal : FetishInterest.Dislikes,
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes, Fetish.StraponSexAnal : FetishInterest.Dislikes,
Fetish.Choking : FetishInterest.SlightlyDislikes, Fetish.Choking : FetishInterest.Likes,
Fetish.HypnosisSubject : FetishInterest.Loves, Fetish.HypnosisSubject : FetishInterest.Hates,
Fetish.HypnosisHypnotist : FetishInterest.Loves
} }
npcLustInterests = { npcLustInterests = {
InterestTopic.TallyMarks: Interest.ReallyLikes, InterestTopic.TallyMarks: Interest.ReallyLikes,
@ -51,27 +53,20 @@ func _init():
InterestTopic.BDSMRestraints: Interest.Loves, InterestTopic.BDSMRestraints: Interest.Loves,
InterestTopic.ButtPlugs: Interest.Dislikes, InterestTopic.ButtPlugs: Interest.Dislikes,
InterestTopic.VaginalPlugs: Interest.Dislikes, InterestTopic.VaginalPlugs: Interest.Dislikes,
InterestTopic.FeminineBody: Interest.KindaLikes, InterestTopic.FeminineBody: Interest.Likes,
InterestTopic.AndroBody: Interest.Likes, InterestTopic.AndroBody: Interest.Likes,
InterestTopic.MasculineBody: Interest.ReallyLikes,
InterestTopic.ThickBody: Interest.Dislikes,
InterestTopic.SlimBody: Interest.Likes,
InterestTopic.BigBreasts: Interest.Hates,
InterestTopic.StuffedPussy: Interest.Likes, InterestTopic.StuffedPussy: Interest.Likes,
InterestTopic.StuffedPussyOrAss: Interest.KindaLikes, InterestTopic.StuffedPussyOrAss: Interest.KindaLikes,
InterestTopic.Pregnant: Interest.ReallyLikes, InterestTopic.StuffedThroat: Interest.Likes,
InterestTopic.StuffedThroat: Interest.ReallyLikes, InterestTopic.CoveredInCum: Interest.Dislikes,
InterestTopic.CoveredInCum: Interest.ReallyLikes, InterestTopic.CoveredInLotsOfCum: Interest.Dislikes,
InterestTopic.CoveredInLotsOfCum: Interest.Likes, InterestTopic.FullyNaked: Interest.Likes,
InterestTopic.FullyNaked: Interest.Loves,
InterestTopic.ExposedPussy: Interest.ReallyLikes, InterestTopic.ExposedPussy: Interest.ReallyLikes,
InterestTopic.ExposedAnus: Interest.ReallyLikes, InterestTopic.ExposedAnus: Interest.ReallyLikes,
InterestTopic.ExposedBreasts: Interest.ReallyLikes, InterestTopic.ExposedBreasts: Interest.Likes,
InterestTopic.ExposedCock: Interest.ReallyLikes, InterestTopic.ExposedCock: Interest.KindaLikes,
InterestTopic.ExposedPanties: Interest.Hates, InterestTopic.ExposedPanties: Interest.Likes,
InterestTopic.ExposedBra: Interest.Hates, InterestTopic.ExposedBra: Interest.Likes,
InterestTopic.LooseAnus: Interest.SlightlyDislikes,
InterestTopic.LoosePussy: Interest.SlightlyDislikes,
InterestTopic.TightAnus: Interest.Likes, InterestTopic.TightAnus: Interest.Likes,
InterestTopic.TightPussy: Interest.Likes, InterestTopic.TightPussy: Interest.Likes,
InterestTopic.BigCock: Interest.Hates, InterestTopic.BigCock: Interest.Hates,

View file

@ -11,7 +11,7 @@ func getProgress():
var quest_await = GM.main.getModuleFlag("IssixModule", "Quest_Wait_Another_Day", false) var quest_await = GM.main.getModuleFlag("IssixModule", "Quest_Wait_Another_Day", false)
var quest_rejection = GM.main.getModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 0) var quest_rejection = GM.main.getModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 0)
var result = [] var result = []
if quest_rejection == 1: if quest_rejection == 1 or quest_rejection == 4:
return ["You rejected Issix's offer to become his pet."] return ["You rejected Issix's offer to become his pet."]
result.append("Issix 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...") result.append("Issix 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): if(quest_status > 1):
@ -30,7 +30,7 @@ func getProgress():
result.append("You started the questionnaire, however your answering session was abruptly interrupted by medical emergency of Lamia. Issix asked you to come other day.") result.append("You started the questionnaire, however your answering session was abruptly interrupted by medical emergency of Lamia. Issix asked you to come other day.")
if(quest_status == 5 and !quest_await): 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. Issix asked you to come other day, at least a day has passed so you should check up with them.") result.append("You started the questionnaire, however your answering session was abruptly interrupted by medical emergency of Lamia. Issix asked you to come other day, at least a day has passed so you should check up with them.")
if(quest_rejection == 2): if(quest_rejection > 1):
result.append("Issix rejected the idea of you being his pet after you failed his test.") result.append("Issix rejected the idea of you being his pet after you failed his test.")
return result return result
@ -50,4 +50,6 @@ func isMainQuest():
# 2 - arrived at closet # 2 - arrived at closet
# 3 - looted the gumball # 3 - looted the gumball
# 4 - gave the gumball to Issix # 4 - gave the gumball to Issix
# 5 - # 5 - answered first part of questionnaire
# 6 - answered second part of questionnaire, waits for the walk
# 7 - got accepted as a pet

View file

@ -514,6 +514,21 @@ func _react(_action: String, _args):
setState(_action) setState(_action)
func saveData():
var data = .saveData()
data["answer"] = answer
data["strikes"] = strikes
return data
func loadData(data):
.loadData(data)
answer = SAVE.loadVar(data, "answer", null)
strikes = SAVE.loadVar(data, "strikes", 0)
func getDevCommentary(): 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 Issix 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 Issix 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. Also, the abrupt break was added as I were writing the quiestionnaire, completely on impulse. I've felt like we needed some dramatic break or this would feel too boring, and it would allow me to add some relevant foreshadowing and story bits for later. Didn't want the quest to be this quick. It should be spread across multiple days, sorry for artificial filler ><" 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 Issix 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 Issix 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. Also, the abrupt break was added as I were writing the quiestionnaire, completely on impulse. I've felt like we needed some dramatic break or this would feel too boring, and it would allow me to add some relevant foreshadowing and story bits for later. Didn't want the quest to be this quick. It should be spread across multiple days, sorry for artificial filler ><"

View file

@ -14,6 +14,7 @@ func _reactInit():
func _run(): func _run():
if(state == ""): if(state == ""):
setLocationName("Issix's Corner")
if GM.main.getModuleFlag("IssixModule", "Quest_Status") < 6: if GM.main.getModuleFlag("IssixModule", "Quest_Status") < 6:
playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="sit"}) playAnimation(StageScene.Duo, "stand", {npc="issix", npcAction="sit"})
else: else:

View file

@ -5,12 +5,15 @@ func _init():
npcHasMenstrualCycle = false npcHasMenstrualCycle = false
npcCharacterType = CharacterType.Inmate npcCharacterType = CharacterType.Inmate
pickedSkin="SoftSpikySkin" # TODO Check options pickedSkin="DappledSkin"
pickedSkinRColor=Color("ffca3030") pickedSkinRColor=Color("ffca6702")
pickedSkinGColor=Color("ff720505") pickedSkinGColor=Color("ffbb3e03")
pickedSkinBColor=Color("ff000000") pickedSkinBColor=Color("ff9b2226")
npcSkinData={ npcSkinData={
"hair": {"r": Color("ffb05745"),"g": Color("ffb05745"),"b": Color("ff2288ab"),}, "hair": {"r": Color("ff274fb9"),"g": Color("ff243770"),"b": Color("ff3022ab"),},
"horns": {"r": Color("ff000000"),"g": Color("ff000000"),},
"penis": {"r": Color("ff2b2a2a"),"g": Color("ff373232"),"b": Color("ff8b0000"),},
"tail": {"skin": "WildSkin",},
} }
npcPersonality = { npcPersonality = {
PersonalityStat.Brat: -0.9, PersonalityStat.Brat: -0.9,
@ -25,44 +28,44 @@ func _init():
Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes, Fetish.AnalSexReceiving : FetishInterest.ReallyDislikes,
Fetish.AnalSexGiving : FetishInterest.Hates, Fetish.AnalSexGiving : FetishInterest.Hates,
Fetish.VaginalSexGiving : FetishInterest.Hates, Fetish.VaginalSexGiving : FetishInterest.Hates,
Fetish.VaginalSexReceiving : FetishInterest.Loves, Fetish.OralSexReceiving : FetishInterest.Dislikes,
Fetish.OralSexReceiving : FetishInterest.Likes, Fetish.OralSexGiving : FetishInterest.Dislikes,
Fetish.OralSexGiving : FetishInterest.Likes, Fetish.Sadism : FetishInterest.Hates,
Fetish.Sadism : FetishInterest.ReallyDislikes,
Fetish.Masochism : FetishInterest.Hates, Fetish.Masochism : FetishInterest.Hates,
Fetish.UnconsciousSex : FetishInterest.Loves, Fetish.UnconsciousSex : FetishInterest.Hates,
Fetish.BeingBred : FetishInterest.Dislikes, Fetish.Breeding : FetishInterest.Hates,
Fetish.Bondage : FetishInterest.Likes, Fetish.Bondage : FetishInterest.Dislikes,
Fetish.Rigging : FetishInterest.Likes, Fetish.Rigging : FetishInterest.Dislikes,
Fetish.Condoms : FetishInterest.Dislikes, Fetish.Condoms : FetishInterest.Dislikes,
Fetish.DrugUse : FetishInterest.Likes, Fetish.DrugUse : FetishInterest.Dislikes,
Fetish.Exhibitionism : FetishInterest.Loves, Fetish.Exhibitionism : FetishInterest.Dislikes,
Fetish.Tribadism : FetishInterest.SlightlyDislikes, Fetish.Tribadism : FetishInterest.SlightlyDislikes,
Fetish.StraponSexVaginal : FetishInterest.Dislikes, Fetish.StraponSexVaginal : FetishInterest.Dislikes,
Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes, Fetish.StraponSexAnal : FetishInterest.SlightlyDislikes,
Fetish.Choking : FetishInterest.SlightlyDislikes, Fetish.Choking : FetishInterest.SlightlyDislikes,
Fetish.HypnosisSubject : FetishInterest.Loves, Fetish.HypnosisSubject : FetishInterest.Hates,
Fetish.HypnosisHypnotist : FetishInterest.Hates,
} }
npcLustInterests = { npcLustInterests = {
InterestTopic.TallyMarks: Interest.ReallyLikes, InterestTopic.TallyMarks: Interest.Dislikes,
InterestTopic.Bodywritings: Interest.KindaLikes, InterestTopic.Bodywritings: Interest.Dislikes,
InterestTopic.Gags: Interest.Loves, InterestTopic.Gags: Interest.Dislikes,
InterestTopic.Blindfolds: Interest.Loves, InterestTopic.Blindfolds: Interest.Dislikes,
InterestTopic.BDSMRestraints: Interest.Loves, InterestTopic.BDSMRestraints: Interest.Dislikes,
InterestTopic.ButtPlugs: Interest.Dislikes, InterestTopic.ButtPlugs: Interest.Dislikes,
InterestTopic.VaginalPlugs: Interest.Dislikes, InterestTopic.VaginalPlugs: Interest.Dislikes,
InterestTopic.FeminineBody: Interest.KindaLikes, InterestTopic.FeminineBody: Interest.KindaLikes,
InterestTopic.AndroBody: Interest.Likes, InterestTopic.AndroBody: Interest.Likes,
InterestTopic.MasculineBody: Interest.ReallyLikes, InterestTopic.MasculineBody: Interest.ReallyLikes,
InterestTopic.ThickBody: Interest.Dislikes, InterestTopic.ThickBody: Interest.Dislikes,
InterestTopic.SlimBody: Interest.Likes, InterestTopic.SlimBody: Interest.Dislikes,
InterestTopic.BigBreasts: Interest.Hates, InterestTopic.BigBreasts: Interest.Hates,
InterestTopic.StuffedPussy: Interest.Likes, InterestTopic.StuffedPussy: Interest.Dislikes,
InterestTopic.StuffedPussyOrAss: Interest.KindaLikes, InterestTopic.StuffedPussyOrAss: Interest.Dislikes,
InterestTopic.Pregnant: Interest.ReallyLikes, InterestTopic.Pregnant: Interest.Dislikes,
InterestTopic.StuffedThroat: Interest.ReallyLikes, InterestTopic.StuffedThroat: Interest.Dislikes,
InterestTopic.CoveredInCum: Interest.ReallyLikes, InterestTopic.CoveredInCum: Interest.Dislikes,
InterestTopic.CoveredInLotsOfCum: Interest.Likes, InterestTopic.CoveredInLotsOfCum: Interest.Dislikes,
InterestTopic.FullyNaked: Interest.Loves, InterestTopic.FullyNaked: Interest.Loves,
InterestTopic.ExposedPussy: Interest.ReallyLikes, InterestTopic.ExposedPussy: Interest.ReallyLikes,
InterestTopic.ExposedAnus: Interest.ReallyLikes, InterestTopic.ExposedAnus: Interest.ReallyLikes,
@ -70,10 +73,10 @@ func _init():
InterestTopic.ExposedCock: Interest.ReallyLikes, InterestTopic.ExposedCock: Interest.ReallyLikes,
InterestTopic.ExposedPanties: Interest.Hates, InterestTopic.ExposedPanties: Interest.Hates,
InterestTopic.ExposedBra: Interest.Hates, InterestTopic.ExposedBra: Interest.Hates,
InterestTopic.LooseAnus: Interest.SlightlyDislikes, InterestTopic.LooseAnus: Interest.Dislikes,
InterestTopic.LoosePussy: Interest.SlightlyDislikes, InterestTopic.LoosePussy: Interest.Dislikes,
InterestTopic.TightAnus: Interest.Likes, InterestTopic.TightAnus: Interest.Dislikes,
InterestTopic.TightPussy: Interest.Likes, InterestTopic.TightPussy: Interest.Dislikes,
InterestTopic.BigCock: Interest.Hates, InterestTopic.BigCock: Interest.Hates,
} }
@ -90,7 +93,7 @@ func getGender():
return Gender.Male return Gender.Male
func getSmallDescription() -> String: func getSmallDescription() -> String:
return "Wears an orange uniform with number P-655. He is the embodiment of ”meek”." return "Wears an orange uniform with number P-1211."
func getSpecies(): func getSpecies():
return [Species.Canine] # if in the future foxes are introduced, the character is canonically a fox return [Species.Canine] # if in the future foxes are introduced, the character is canonically a fox

View file

@ -32,7 +32,8 @@ func getFlags():
"Azazel_Sky_Response": flag(FlagType.Bool), "Azazel_Sky_Response": flag(FlagType.Bool),
"Received_Portrait_From_Lamia": flag(FlagType.Bool), "Received_Portrait_From_Lamia": flag(FlagType.Bool),
"Placed_Portrait_In_Cell": flag(FlagType.Bool), "Placed_Portrait_In_Cell": flag(FlagType.Bool),
"Hissi_RPS_data": flag(FlagType.Dict) "Hissi_RPS_data": flag(FlagType.Dict),
"Shared_Marshmallows": flag(FlagType.Bool)
} }

View file

@ -5,6 +5,7 @@ func _init():
func _run(): func _run():
if(state == ""): if(state == ""):
setLocationName("Issix's Corner")
saynn("You take a look at sheet of paper laying on the floor. It must have been dropped by Issix when he stormed out of here with his pets.") saynn("You take a look at sheet of paper laying on the floor. It must have been dropped by Issix 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'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("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.")

View file

@ -1,7 +1,8 @@
extends SceneBase extends SceneBase
var answer = null var answer = null
var rock_paper_scissors = {1: 3, 2: 1, 3: 2} # 1 = rock, 2 = paper, 3 = scissors var strapon_selected = null
var rock_paper_scissors = {1: 3, 2: 1, 3: 2}
var rock_paper_scissors_translation = {1: "Rock", 2: "Paper", 3: "Scissors"} var rock_paper_scissors_translation = {1: "Rock", 2: "Paper", 3: "Scissors"}
func _init(): func _init():
@ -110,7 +111,7 @@ func _run():
addButton("Stars", "Ask Azazel what does he see in the sky", "azazelsky") addButton("Stars", "Ask Azazel what does he see in the sky", "azazelsky")
else: else:
addDisabledButton("Stars", "You've already asked Azazel about the stars") addDisabledButton("Stars", "You've already asked Azazel about the stars")
if getModuleFlag("IssixModule", "Lamia_Is_Hungry", false): if getModuleFlag("IssixModule", "Lamia_Is_Hungry", true):
addButton("Lamia", "Tell Azazel Lamia is hungry, maybe he'll be able to help", "azazelfood") addButton("Lamia", "Tell Azazel Lamia is hungry, maybe he'll be able to help", "azazelfood")
addButton("Back", "End the conversation", "walkies4") addButton("Back", "End the conversation", "walkies4")
@ -188,7 +189,8 @@ func _run():
match getModuleFlag("IssixModule", "Hissi_RPS_data")["chosen_reward"]: match getModuleFlag("IssixModule", "Hissi_RPS_data")["chosen_reward"]:
1: 1:
saynn("[say=pc]How about good time as a reward? Right after the game?[/say]") saynn("[say=pc]How about good time as a reward? Right after the game?[/say]")
saynn("[say=hiisi]I'm not sure...[/say]") saynn("[say=hiisi]I'm not sure... You are not Master's pet yet...[/say]")
saynn("[say=pc]That's true, and nonetheless Master Issix decided to take me for a walk here, I don't think he would mind.[/say]")
saynn("He thinks for good 20 seconds about your proposition.") saynn("He thinks for good 20 seconds about your proposition.")
saynn("[say=hiisi]Alright, you're on.[/say]") saynn("[say=hiisi]Alright, you're on.[/say]")
2: 2:
@ -222,7 +224,7 @@ func _run():
saynn("Current standings: \n{pc.name}: {winpc}\nHissi: {winh}".format(rpc_data)) saynn("Current standings: \n{pc.name}: {winpc}\nHissi: {winh}".format(rpc_data))
if rpc_data["winpc"] > 2: if rpc_data["winpc"] > 2:
addButton("Celebrate", "You've won, wooho", "hissirpspcwin") addButton("Celebrate", "You've won, wooho", "hiisirpspcwin")
elif rpc_data["winh"] > 2: elif rpc_data["winh"] > 2:
addButton("Lost", "You've lost the game fair and square", "hissirpshiisiwin") addButton("Lost", "You've lost the game fair and square", "hissirpshiisiwin")
else: else:
@ -230,17 +232,119 @@ func _run():
addButton("Paper", "Use paper in this round", "hiisirps", [2]) addButton("Paper", "Use paper in this round", "hiisirps", [2])
addButton("Scissors", "Use scissors in this round", "hiisirps", [3]) addButton("Scissors", "Use scissors in this round", "hiisirps", [3])
if state == "hissirpspcwin": if state == "hiisirpspcwin":
saynn("[say=pc]Haha, I did it. Nice game, thanks for playing Hissi.[/say]") saynn("[say=pc]Haha, I did it. Nice game, thanks for playing Hissi.[/say]")
saynn("You've noticed that his mood has brightened, and he isn't so gloomy anymore.") saynn("You've noticed that his mood has brightened, and he isn't so gloomy anymore.")
saynn("[say=hiisi]Yeah, thank you for that, was actually pretty nice, glad we could have this one.\nYou know... You are pretty cool {pc.name}.[/say]") saynn("[say=hiisi]Yeah, thank you for that, was actually pretty nice, glad we could have this one.\nYou know... You are pretty cool {pc.name}.[/say]")
saynn("He looks down, but with slight grin on his face.") saynn("He looks down, but with slight grin on his face.")
saynn("[say=pc]Awwwww. Thank you Hiisi! You are pretty cool yourself too, you know![/say]") saynn("[say=pc]Awwwww. Thank you Hiisi! You are pretty cool yourself too, you know![/say]")
# TODO saynn("[say=hiisi]Yeah... As to your reward...[/say]")
match getModuleFlag("IssixModule", "Hissi_RPS_data")["chosen_reward"]:
1:
saynn("[say=hiisi]We can do that in here... If you want. But, would you like to be in charge or should I?[/say]")
addButton("Dom Hiisi", "Say you'd like to dominate Hiisi", "hiisisubsex")
addButton("Sub Hiisi", "Say you'd like Hiisi to take charge", "hiisidomsex") # TODO
2:
saynn("[say=hiisi]Let's do it![/say]")
saynn("He exlaims, excited")
addButton("Hug", "Hug the doggo", "hiisihug")
3:
saynn("[say=hiisi]Please ask me once when we are back in our corner, I should have one energy drink by then[/say]")
addButton("Back", "Say that sure, you're going to ask him about it then", "hiisi")
if state == "hiisihug":
playAnimation(StageScene.Hug, "hug", {pc="pc", npc="hiisi", bodyState={naked=true, hard=false}, npcBodyState={naked=true, hard=false}})
saynn("You come really close to Hiisi, stretching your arms and embracing the puppy")
saynn("[say=pc]It's all fine, okey? You are a good boy.[/say]")
saynn("He embraces you back, applying some strength into a hug. This hug feels really intimate for some reason, you can feel Hiisi's breath, you can feel his heartbeat with how close he is. You stay like this for a while.")
saynn("[say=hiisi]Thank you, I needed that.[/say]")
addButton("Back", "This path is not yet finished, sorry!", "hiisi")
if state == "hiisisubsex":
saynn("You reach with your paws to pull Hiisi up close, he puts up no resistance as you embrace him in a tight hug, your paws exploring his back going lower and lower until reaching his butt and squeezing his butt cheeks. He yelps.")
saynn("[say=pc]Is the puppy ready for some action? I'll try to be gentle.[/say]")
saynn("[say=hiisi]Let's just get it over with already.[/say]")
saynn("[say=pc]Good. Let's start.[/say]")
if GM.pc.hasReachablePenis():
addButton("Anal", "Use your tool in doggy ass", "hiisisubanal")
addButton("Oral", "Make the doggo suck your tool", "hiisisuboral") # TODO
elif (GM.pc.isWearingStrapon() or GM.pc.hasStrapons() and GM.pc.canWearStrapon()):
var strapons: ItemBase = GM.pc.getStrapons()
for strapon in strapons:
addButton("Anal", "Use a "+strapon.getCasualName()+" on doggy ass", "hiisisubanal", [strapon.id])
#addButton("Oral", "Make the doggo suck your "+strapon.getCasualName(), "hiisisuboral", [strapon])
#if GM.pc.hasReachableVagina():
# addButton("Vaginal", "Make the dog fuck your pussy", "hiisisubvaginal") # TODO low priority
if state == "hiisisubanal":
playAnimation(StageScene.SexAllFours, "tease", {pc="pc", npc="hiisi", bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=false}})
# You may believe me or not, but after 7 years of reading furry smut I can't write smut myself. The following is probably my first attempt at writing any kind of sexual scene all by myself, please be gentle with the criticism <3
saynn("[say=pc]What a good subby dog you are! How about you turn around so I can prepare you?[/say]")
saynn("You let go of Hiisi, he turns around on his knees and puts his front paws on the ground, nicely staying on his fours for you. Presenting you with his back full of light gray fur and on lower part of it a brand ”PROPERTY OF ISSIX”. A reminder of what's to come if you decide to dedicate yourself to Master Issix. You run your fingers through the fur on his back gently touching the brand itself, its texture pretty smooth.")
saynn("[say=hiisi]Are you waiting for something? Don't want to hurry you up, just unsure if you want something of me.[/say]")
saynn("[say=pc]You are good, the color of your fur is just so good.[/say]")
if GM.pc.getInventory().hasItemID("lube"):
GM.pc.getInventory().removeXOfOrDestroy("lube", 1)
saynn("You apply some lube onto canine's pucker hole")
saynn("[say=hiisi]Ahhhh, cold![/say]")
saynn("[say=pc]Only for a moment, we are going to make it hot really soon. Hang on tight there Hiisi.[/say]")
saynn("You don't waste your chance to stimulate the dog with your fingers. First putting just one to test out the waters. Hiisi's hole isn't tight nor loose, though one finger already makes the dog lose his composure. He starts panting a little. You insert second finger intensifying the sounds coming from the other end. You massage his ring to relax it a little bit.")
saynn("[say=pc]You okey there?[/say]")
saynn("He respond just with huffs. It really didn't take a lot to stimulate the gray furred canine. You take out your fingers and see glistening hole.")
if strapon_selected != null:
saynn("You fit in place your {pc.penisOrStrapon}, and tease Hiisi with the tip.")
else:
saynn("You tease doggo pucker with the tip of your {pc.penis}.")
saynn("[say=pc]Does the dog want a bone now, or should I keep teasing?[/say]")
saynn("[say=hiisi]Nooo. Please put it in me.[/say]")
addButton("Continue", "Put the bone inside the dog ass", "hiisisubanal2")
if state == "hiisisubanal2":
playAnimation(StageScene.SexAllFours, "sex", {pc="pc", npc="hiisi", bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
saynn("[say=pc]Heere we go, ahh.[/say]")
saynn("[say=hiisi]Mmmphhh.[/say]")
saynn("Hiisi lets another yelp as you push your {pc.strapon} into Hiisi's backdoor. "+("Your stapon" if strapon_selected else "Your penis")+" slid with little issues, but the slickness of the hole increased as you continued to ram Hiisi's backside. It was clear that Hiisi didn't want to make too much noise, which has made his pleasure moans even more cute.")
saynn("[say=pc]How are you doing cutie? Should I go faster? Slower?[/say]")
saynn("[say=hiisi]Mhhhmm. You are fine.[/say]")
saynn("Barely comprehensible speech of canine could be hears coming from his muzzle on the other side, pleasure melting away ability to speak well. You slightly quicken the pace being close to orgasm.")
addButton("Creampie?", "Does the canine want you to pull out?", "hiisisubanal3")
if state == "hiisisubanal3":
playAnimation(StageScene.SexAllFours, "fastflop", {pc="pc", npc="hiisi", bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
saynn("[say=pc]Umm, Hiisi, do you want me to cum inside or pull out?[/say]")
saynn("[say=hiisi]HMmmaaahhhhh.[/say]")
saynn("Seemingly unable to properly respond you decide to pull out before you reach orgasm, feeling like it's what Hiisi would want. You only now notice Hiisi's hard cock beneath as if there wasn't enough of evidence canine was enjoying the treatment.") # No you stupid bitch of a writer, why would a reader want that??????
saynn("Hiisi's front arms eventually give up and only his butt is sticking out in the air as you ram "+("your stapon" if strapon_selected else "your penis")+" in his pleasure tunnel, eventually feeling that soon your pleasure will achieve its final destination.")
addButton("Pull out", "Pull out of the puppy", "hiisisubanal4")
if state == "hiisisubanal4":
playAnimation(StageScene.SexAllFours, "teaseflop", {pc="pc", npc="hiisi", pcCum=true, npcCum=true, bodyState={naked=true, hard=true}, npcBodyState={naked=true, hard=true}})
saynn("Eventually you feel like you are really close to orgasm and pull out of Hiisi's hole, painting it white just half a second after your tip leaves. Similarly, Hiisi leaves plenty of his own jizz on the blanket below. You both moan in ecstasy drawing looks from pets around and Master Issix. Those aren;t looks of judgement, but rather just curiosity.")
saynn("[say=hiisi]T-thanks. Was okey.[/say]")
saynn("Very restrained words of thanks from Hiisi. But you still take them.")
saynn("[say=pc]Same. Was fun![/say]")
saynn("After a little required cleanup, Hiisi trying to clean up cumstains both from the blanket as well as excessive cum from his ass, you can consider your session truthfully over.")
addButton("Finish", "Your little session with Hiisi is over now, time to go back to other stuff", "hiisi")
if state == "hiisidomsex":
addButton("Back", "This path is not yet finished, sorry!", "hiisi") # TODO
#getCharacter("hiisi").prepareForSexAsDom()
#runScene("GenericSexScene", ["hiisi", "pc"], "subbysex")
if state == "hissirpshiisiwin": if state == "hissirpshiisiwin":
saynn("T") saynn("[say=hiisi]Awesome! I didn't expect to win, that was fun.[/say]")
# TODO saynn("He seems somewhat relieved he has won. With a smile on his face he says")
saynn("[say=hiisi]So, regarding my reward. Could you perhaps get one of the Hypnovisors and come to the corner tomorrow? I'd like to test something.[/say]")
saynn("[say=pc]Uhhh, hypnovisors?[/say]")
saynn("[say=hiisi]Yeah, I've seen them around. They seem to be extremaly rare in here, but at least one inmate I saw had one. I'm just curious...[/say]")
saynn("[say=pc]I mean, sure, but are you sure about it? They can make you very vulnerable for a few hours.[/say]")
saynn("[say=hiisi]Well.. I was hoping to mess around with them for a second and use them on you actually...[/say]")
saynn("[say=pc]On me? I'm really not sure about that.[/say]")
saynn("[say=hiisi]Pleaase! I'm just curious, I won't do anything dangerous, and hypnosis doesn't make you go against your will anyways, you can always stop yourself.[/say]")
saynn("It's true that hypnovisors don't really force things onto their wearer, just significantly affect their submissiveness, but would it be a good idea to let Hiisi mess with Hypnovisors and put them on you?")
saynn("[say=pc]Fine, you did win after all. But promise me you won't try to mess with my brain.[/say]")
saynn("[say=hiisi]Of course! I won't.[/say]")
addButton("Back", "You agreed to Hiisi's Hypnovisor session, the conversation ended here", "hiisi")
if state == "lamia": if state == "lamia":
playAnimation(StageScene.Duo, "kneel", {npc="lamia", npcAction="kneel"}) # TODO We need laying down! playAnimation(StageScene.Duo, "kneel", {npc="lamia", npcAction="kneel"}) # TODO We need laying down!
@ -249,7 +353,7 @@ func _run():
addButton("Drawings", "Look at the drawings", "lamiadrawings") addButton("Drawings", "Look at the drawings", "lamiadrawings")
else: else:
addDisabledButton("Drawings", "You've already asked about the drawings") addDisabledButton("Drawings", "You've already asked about the drawings")
addButton("Try drawing", "Try drawing something", "lamia") addButton("", "", "lamia") # TODO 2nd option walkies for Lamia is needed
addButton("Back", "End the conversation", "walkies4") addButton("Back", "End the conversation", "walkies4")
if state == "lamiadrawings": if state == "lamiadrawings":
@ -274,7 +378,7 @@ func _run():
if state == "nofood": if state == "nofood":
setModuleFlag("IssixModule", "Lamia_Is_Hungry", true) setModuleFlag("IssixModule", "Lamia_Is_Hungry", true)
saynn("[say=pc]Aww, hungry? Unfortnetely I have brought no snacks with myself. Sorry![/say]") saynn("[say=pc]Aww, hungry? Unfortunately I have brought no snacks with myself. Sorry![/say]")
saynn("Lamia is visibly saddened after hearing that, however they quickly return to drawing, occupying their mind.") saynn("Lamia is visibly saddened after hearing that, however they quickly return to drawing, occupying their mind.")
addButton("Back", "End the conversation", "lamia") addButton("Back", "End the conversation", "lamia")
@ -295,7 +399,6 @@ func _run():
saynn("You look at them, being very focused, they look at you too, from time to time. After 15 minutes they are done. They take their artwork and show it to you, being incredibly proud of themselves, closing their eyes.\nYou are astounded. On the paper your very "+GM.pc.getBodypart(BodypartSlot.Head).getName().split("head")[0] +" face. It's a portrait of you from side view, what's special about this portrait however, is that inside of your mouth you have a cookie. Basket muzzle didn't make the cut, probably because it would ruin the portrait. While the portrait looks incredibly silly, the happiness of artist holding it could potentially kill if it was able to.") saynn("You look at them, being very focused, they look at you too, from time to time. After 15 minutes they are done. They take their artwork and show it to you, being incredibly proud of themselves, closing their eyes.\nYou are astounded. On the paper your very "+GM.pc.getBodypart(BodypartSlot.Head).getName().split("head")[0] +" face. It's a portrait of you from side view, what's special about this portrait however, is that inside of your mouth you have a cookie. Basket muzzle didn't make the cut, probably because it would ruin the portrait. While the portrait looks incredibly silly, the happiness of artist holding it could potentially kill if it was able to.")
addButton("Hug", "Thank and hug Lamia as thanks", "hugandthank") addButton("Hug", "Thank and hug Lamia as thanks", "hugandthank")
addButton("Headpat", "Give the artist fox a headpat", "headpat") addButton("Headpat", "Give the artist fox a headpat", "headpat")
# TODO Make it so the player can put it on the wall in their cell
if state == "hugandthank": if state == "hugandthank":
saynn("Stunned, your heart melted, the first thing that comes to your mind is to hug the fox. You do that completely on impulse with no hesitation. Fox at first taken aback by that gesture (embarassed, blushing hard), eventually embraces the hug and reciprocates. Still hugging you say") saynn("Stunned, your heart melted, the first thing that comes to your mind is to hug the fox. You do that completely on impulse with no hesitation. Fox at first taken aback by that gesture (embarassed, blushing hard), eventually embraces the hug and reciprocates. Still hugging you say")
@ -304,6 +407,7 @@ func _run():
addButton("Back", "End the conversation", "lamia") addButton("Back", "End the conversation", "lamia")
if state == "headpat": if state == "headpat":
playAnimation(StageScene.Grope, "pat", {pc="pc", npc="lamia", bodyState={naked=true, hard=false}, npcBodyState={naked=true, hard=false}})
saynn("Stunned, your heart melted, the first thing that comes to your mind is to give the fox a headpat. You put your paw on their head and gently pat them. Their ears flatten and their face seems very pleased by your patting.") saynn("Stunned, your heart melted, the first thing that comes to your mind is to give the fox a headpat. You put your paw on their head and gently pat them. Their ears flatten and their face seems very pleased by your patting.")
saynn("[say=pc]Thank you Lamia, I like it very much.[/say]") saynn("[say=pc]Thank you Lamia, I like it very much.[/say]")
saynn("They smile and nod to you excitedly.") saynn("They smile and nod to you excitedly.")
@ -311,9 +415,124 @@ func _run():
if state == "else": if state == "else":
saynn("You are thinking of doing something else. With plenty of space you could do plenty of activities, even if alone, considering all of the others don't seem to be keen on doing anything.") saynn("You are thinking of doing something else. With plenty of space you could do plenty of activities, even if alone, considering all of the others don't seem to be keen on doing anything.")
addButton("Walk", "Go for a walk near your group", "elsewalk") if getModuleFlag("IssixModule", "Shared_Marshmallows") == null:
addButton("") addButton("Walk", "Go for a walk near your group", "elsewalk")
else:
addDisabledButton("Walk", "You've already taken a walk")
addButton("Wait", "Spend time until Master calls it the end of the little picnic (you won't be able to come back to other activities)", "elsewait")
if state == "elsewalk":
playAnimation(StageScene.Solo, "stand", {pc="pc", bodyState={naked=false, hard=false}})
processTime(10*60)
saynn("You slowly are walking alongside the lake. Eventually you arrive at short waterfall. You can come so close to it, that you can feel the droplets of water hitting your fur, the air more humid and the sounds louder but yet still gentle. You look at the opposite side, greenhouses high above you. It's surprising how little attention this place gets with so many inmates in the prison.") # TODO Fur? Skin?
saynn("As you focus on the waterfall you suddenly get spooked by the sounds behind you, you turn around and just see another inmate jogging. Talk about lack of inmates... They reach the wall, touch it and go back the way they came from. What catches your attention however is a pack of... Something dropping on the ground as the inmate turned around and started running away. Curious, you approached the lost item and found it's a very small bag of... Marshmallows of some sorts? If that's so, that would be considered a treat in the prison, sweets such as that are pretty expensive rarity. You look back at the inmate, however at this point they are beyond the point where shouting at them makes sense, that's one athletic jogger. You grab the bag and decide what to do with it.")
addButton("Share", "Come back to your group and share with everyone", "sharemarshmallows")
addButton("Eat", "There aren't a lot of them in the bag, enough to share with the group but then, you could just eat them yourself?", "eatmarshmallows")
if state == "sharemarshmallows":
setModuleFlag("IssixModule", "Shared_Marshmallows", true)
playAnimation(StageScene.Duo, "crawl", {pc="pc", npc="issix", bodyState={naked=false, hard=false}, npcBodyState={naked=true, hard=false}})
saynn("You come back to your group walking rather fast, being excited about sharing something you've found with everyone else.")
saynn("[say=pc]Hey, I've found this little bag, they seem like marshmallows? There aren't a lot of them, do you want some?[/say]")
saynn("This catches the attention of Issix, who gives you a signal to approach him. You get on your knees and come to him with the bag in your maw.")
saynn("[say=issix]A bag of „marshmallows” huh? Where did you get it from? Give it to me.[/say]")
saynn("You explain it fell of the pocket of one of the joggin inmates. He opens the bag and takes a sniff.")
saynn("[say=issix]Hmm. That's not an ordinary bag of marshmallows, I've seen things such as those before in this prison. They are a little „extra” you'd say. Pretty sure I know who your jogging inmate was.[/say]")
saynn("He laugs, taking one of the „marshmallows” out of the bag before putting it into his mouth.")
saynn("[say=issix]Yeah, it's a fun one. Feel free to share them with other pets, they aren't bad, just a little packed, who knows, maybe it will brighten the mood.[/say]")
saynn("He gives you back the opened bag, before turning around and continuing his feet wetting activity. You come back to the blanket.")
saynn("[say=pc]Master Issix said those are fine, they aren't regular marshmallows as they seem to be with something in them, but they are fine. Who wants one?[/say]")
saynn("[say=azazel]I'll take one![/say]")
saynn("[say=hiisi]So will I.[/say]")
saynn("Lamia taking a break from drawing nods their head in approval. You hand everyone their marshmallows, Azazel gets 2, Hiisi 1, Lamia 2 and you are left with the last one. You all eat them together discussing its sweet but a bit strange taste that leaves a weird aftertaste, which you all try to get rid of with water bottle from Master's bag, unsuccessfully.")
addButton("Back", "Feast is over", "else")
if state == "eatmarshmallows":
setModuleFlag("IssixModule", "Shared_Marshmallows", false)
saynn("Your eyes wander. You are a bit away from your group and they are all occupied. Besides, that's stranger food, you don't know if it's safe to eat, and you wouldn't want to poison Master and his pets! You open the pack and pick the marshmallows and eat them one by one, they are incredibly sweet, though they leave a very strange aftertaste in your mouth. Odd. After consuming them all you throw away the packaging a decide to come back, finding yourself back in your little picnic like group, feeling a bit doozy.")
addButton("Back", "You ate the marshmallows and came back from your little walk", "else")
if state == "elsewait":
saynn("During an hour or so Master came back to the blanket and spent the time with you and his other pets. He talked about various things he saw in his life as well as deals he has struck in the time he spent in the prison. Azazel, Hiisi and Lamia all put on their inmate uniforms. Eventually he started packing - blanket, paper sheets, toys and other things, came to each one of us, clipped the leash to our collars and looked around.")
saynn("[say=issix]Everyone got all of their stuff? Good good. Let's head back to our corner, we'll talk there {pc.name}.[/say]")
saynn("With that, you've all started walking towards the corner.")
processTime(30*60)
addButton("Leave", "Let's head back", "walkies4")
if state == "walkies4":
aimCamera("hall_ne_corner")
setLocationName("Issix's Corner")
if GM.main.isVeryLate():
saynn("You arrive in Issix's corner. Since it's pretty late Issix talks with his other pets and promptly lets them go to their cells, he asks you to stay. He sits on his chair and starts talking.")
else:
saynn("You arrive in Issix's corner. Other pets situate themselves on their own blankets on the floor. Issix is unpacking stuff from the bag, you stay there kneeling next to him, observing his every move. He makes some conversations with his other pets. Eventually he finishes, sits down and faces you.")
saynn("[say=issix]So, how was the walk? Have you enjoyed it?[/say]")
addButton("I did", "Say that you enjoyed the walk", "walkenjoyed")
addButton("Nope", "Say that you didn't enjoy the walk", "walkbad")
if state == "walkenjoyed":
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand", bodyState={leashedBy="issix"}})
var lamia_task = getModuleFlag("IssixModule", "Lamia_Is_Hungry")
var azazel_talk = getModuleFlag("IssixModule", "Azazel_Sky_Response")
var hiisi_game = getModuleFlag("IssixModule", "Hissi_RPS_data")
var walk_result = getModuleFlag("IssixModule", "Shared_Marshmallows")
var walk_score = pet_handle_flag_response(lamia_task) + pet_handle_flag_response(azazel_talk != null) + pet_handle_flag_response(hiisi_game != null) + pet_handle_flag_response(walk_result)
saynn("[say=pc]Yeah, it was fun to „camp” on the pasture, how often do you go there?[/say]")
saynn("[say=issix]Every 9 days or so, whenever I feel like I need some time out. Being in here all the time, among this noise requires breaks to hang out with just my pets or at least get away from all this hustle. Today it was... More passive, mostly due to myself needing some time for myself. That's not usually how our walks there go, but it happens.[/say]")
saynn("You nod your head in understanding")
saynn("[say=issix]Anyways, you are probably wondering if you passed the last trial. I was mainly testing how well you'd do with my other pets, I've talked with them briefly after the walk.[/say]")
if lamia_task == false:
saynn("[say=issix]Lamia was all happy and enjoyed your company. Said that you helped with their hunger issue. I still don't understand why they don't just take food from my bag on during the walks but they are stubborn about it.[/say]")
else:
saynn("[say=issix]When I took out food from my bag Lamia practically begged me for food, they know full well where the food is during our walks and yet they haven't taken it out by themselves. I wouldn't want to put you on spotlight for not tending and inquiring about how they feel, but I had hoped you'd at least help them out somehow.[/say]")
if azazel_talk == true or azazel_talk == false:
saynn("[say=issix]Azazel was really happy to have a conversation partner. Hiisi was too focused on me for the walk and Lamia was doing his own thing. I'm really happy that you kept them company on the pasture. They can have their own philosophical ramblings from time to time, guess they got it after me.[/say]")
saynn("He laugs")
saynn("[say=issix]But seriously, that's really nice of you to engage them in one of those.[/say]")
else:
saynn("[say=issix]Azazel mentioned that you didn't exactly talk with them much during the walk. That's a little disappointing but they themselves weren't really outgoing that day so I understand. However please tend to the needs of my other pets next time.[/say]")
if hiisi_game != null:
saynn("[say=issix]It's quite an amazing feat, but I've also heard you engaged Hiisi in a game! That's phenomenal! I know lately he is very focused on me, he is concerned about my wellbeing, what a cute pet. No matter how many times I tell him to stop worrying he never does. Such is that puppy.[/say]")
if hiisi_game["winpc"] == 3 and hiisi_game["chosen_reward"] == 1:
saynn("[say=issix]Normally if someone was trying to mate with my pet without my permission I'd make an example of them for entire prison. However for today you were temporally my pet on probation. So it was pretty cute seeing Hiisi engaging in some fun with you for a change. He usually isn't this forward. Good job out there.[/say]")
saynn("You blush")
else:
saynn("[say=issix]Hiisi was very down for the entire walk, I did not expect you to not even attempt to brighten his mood. I believe you should have thought of that, you had plenty of time. What a shame.[/say]")
if walk_result == true:
saynn("[say=issix]I'm also really happy you decided to share the „marshmallows” with us all. It's been a while since I last ate one of those, so that helped me plenty considering I myself were a bit downed today, and other pets seemed to like them as well.[/say]")
if walk_score < 2:
setModuleFlag("IssixModule", "Quest_Rejected_By_Issix", 3)
saynn("[say=issix]Ultimately, I'm afraid you've failed the last trial. While I can't really call the relationship my pets have with me and themselves „family”, since they are my property, we aren't equal and they are listening to me without any question, they do have to take care of each other. If my new pet doesn't have any care in the world about my other pets, I don't think it would be a good fit. I can train many things, but empathy is one of those things I'm not willing to spend time on.[/say]")
saynn("He says that with sadness in his voice. It's clear he doesn't like the decision he has made by is sticking to his convictions.")
addButton("Apologize", "Apologize and ask for forgiveness", "issixapologize")
addButton("Accept", "Accept the decision", "issixacceptdefeat")
return
elif walk_score < 4:
saynn("[say=issix]I'm glad that you've spend the time with my other pets, that's exactly waht I wanted to see and I'm relieved you knew what to do. I'm proud to announce that you've passed my last trial and you have my permission to become my pet, though the details of how this will work we'll have to figure out tomorrow. It's late already and I'd like to attend to other matters. Think about it for one more night, after you agree to become my pet there is no going back. See you tomorrow, pet.[/say]")
else:
saynn("[say=issix]I have to say, you've exceeded my expectations. You've been a large part of today activities and you engaged everyone. You cared about problems of every pet and addressed them in one way or another. That's exactly what I wanted to see and more, I'm relieved you knew what to do. I'm proud to announce that you've passed my last trial and you have my permission to become my pet, though the details of how this will work we'll have to figure out tomorrow. It's late already and I'd like to attend to other matters. Think about it for one more night, after you agree to become my pet there is no going back. See you tomorrow, pet.[/say]")
GM.main.setModuleFlag("IssixModule", "Quest_Wait_Another_Day", true) # TODO Mention the basket muzzle and what to do with it
setModuleFlag("IssixModule", "Quest_Status", 7)
addButton("Agree", "Thank Issix and agree to come tomorrow", "endthescene")
if state == "issixapologize":
saynn("[say=pc]I apologize, I didn't know, I were stressed on my first walk and I didn't know what to do. I spent it in silence because that's a new situation for me. Please give me another chance Master Issix![/say]")
saynn("[say=issix]I'm sorry {pc.name} but that's not good enough. My decision was hard to make but final. Spend more time and look at creatures around you, even in such grim place as this one, there are many that need it.[/say]")
addButton("Leave", "You've been rejected, nothing more to do here", "endthescene")
if state == "issixacceptdefeat":
saynn("[say=pc]I understand, thank you for giving me an opportunity to prove myself, and I'm sorry for not doing enough.[/say]")
saynn("[say=issix]It's a lesson for the future. I'm glad you took my rejection just fine. Try to focus on needs of others, even in such grim place as this one there are creatures hurting, you always have the power to help them in your own way, don't waste it.[/say]")
addButton("Leave", "You've been rejected, nothing more to do here", "endthescene")
func pet_handle_flag_response(response): # true + true doesn't exist in GDScript :(
if response == null or response == false:
return 0
if response == true:
return 1
return 1
## Function to determine a winner of given Rock Paper Scissors game ## Function to determine a winner of given Rock Paper Scissors game
## Takes Player answer that is an int from 1 to 3 (1: Rock, 2: Paper, 3: Scissors) ## Takes Player answer that is an int from 1 to 3 (1: Rock, 2: Paper, 3: Scissors)
@ -326,10 +545,26 @@ func rps_win_conditions(pc_answer: int, h_answer: int):
return 1 return 1
return 2 # npc wins return 2 # npc wins
func _react(_action: String, _args): func _react(_action: String, _args):
if _args: if _args:
answer = _args[0] answer = _args[0]
if _action == "hiisisubanal":
strapon_selected = answer
GM.pc.getInventory().forceEquipStoreOtherUnlessRestraint(strapon_selected)
GM.pc.addLust(30)
if _action == "hiisisubanal2":
GM.pc.addLust(30)
if _action == "hiisisubanal3":
GM.pc.addLust(30)
if _action == "hiisisubanal4":
GM.pc.orgasmFrom("rahi")
GM.main.getCharacter("hiisi").cummedOnBy("pc")
if _action == "azazelskyresponse": if _action == "azazelskyresponse":
setModuleFlag("IssixModule", "Azazel_Sky_Response", answer) setModuleFlag("IssixModule", "Azazel_Sky_Response", answer)
@ -364,6 +599,23 @@ func _react(_action: String, _args):
"{pc.name} stay in between Lamia and Hiisi, you fit there perfectly" "{pc.name} stay in between Lamia and Hiisi, you fit there perfectly"
], "yard_waterfall", "crawl"]) ], "yard_waterfall", "crawl"])
if _action == "walkies4": # Heading back
playAnimation(StageScene.Duo, "kneel", {npc="issix", npcAction="stand", bodyState={leashedBy="issix"}})
runScene("ParadedOnALeashScene", ["issix", GM.pc.getLocation(), "hall_ne_corner", [
"Lamia, I understand you are tired but please try to keep up",
"Azazel, can you focus? You are stepping on me",
"Hiisi, head up"
], "hall_ne_corner", "crawl"])
if _action == "eatmarshmallows":
GM.pc.addIntoxication(0.5)
if _action == "sharemarshmallows":
GM.main.getCharacter("azazel").addIntoxication(0.2)
GM.main.getCharacter("hiisi").addIntoxication(0.1)
GM.main.getCharacter("lamia").addIntoxication(0.2)
GM.pc.addIntoxication(0.1)
if _action == "giveapple": if _action == "giveapple":
GM.pc.getInventory().removeXOfOrDestroy("appleitem", 1) GM.pc.getInventory().removeXOfOrDestroy("appleitem", 1)

View file

@ -6,6 +6,7 @@ func _init():
func _run(): func _run():
if(state == ""): if(state == ""):
setLocationName("Issix's Corner")
saynn("In front of you - three slaves belonging to Issix.") saynn("In front of you - three slaves belonging to Issix.")
addCharacter("azazel") addCharacter("azazel")
addCharacter("lamia") addCharacter("lamia")
@ -33,12 +34,39 @@ func _run():
pass # TODO pass # TODO
addButton("Back", "Take a step back", "") addButton("Back", "Take a step back", "")
if state == "hiisimain":
if getModuleFlag("IssixModule", "PC_Enslavement_Status", 0) == 0:
saynn("You approach Lamia")
else:
addButton("Talk", "Talk to Lamia", "hiisitalk")
addButton("Appearance", "Look at Lamia", "hiisiappearance")
if state == "hiisitalk":
var HiisiRPS = getModuleFlag("IssixModule", "Hissi_RPS_data")
if HiisiRPS != null:
if HiisiRPS["chosen_reward"] == 3 and HiisiRPS["reward_acquired"] == false:
addButton("Drink", "Ask Hiisi about energy drink that you've won through the game of Rock Paper Scissors", "hiisienergy")
# TODO
if state == "hiisienergy":
var HiisiRPS = getModuleFlag("IssixModule", "Hissi_RPS_data")
HiisiRPS["reward_acquired"] = true
setModuleFlag("IssixModule", "Hissi_RPS_data", HiisiRPS)
saynn("[say=hiisi]Sure, I got it, here you go.[/say]")
saynn("He passes energy drink can to you. Thanks for brightening my mood that day.")
saynn("You received 1 Energy Drink.")
addButton("Back", "Take a step back", "hiisitalk")
if(state == "lamiamain"): if(state == "lamiamain"):
if getModuleFlag("IssixModule", "PC_Enslavement_Status", 0) == 0: if getModuleFlag("IssixModule", "PC_Enslavement_Status", 0) == 0:
saynn("You approach Lamia") saynn("You approach Lamia")
addButton("Try drawing", "You can try and draw something with lamia", "lamiadraw") # TODO
else: else:
pass # TODO pass # TODO
addButton("Talk", "Talk to Lamia", "lamiatalk")
addButton("Appearance", "Look at Lamia", "lamiaappearance")
saynn("") saynn("")
if(state == "catnip"): if(state == "catnip"):
@ -87,7 +115,7 @@ func _run():
else: else:
saynn("When approaching there is one distinct smell coming from Azazel - his own pheromones advertising his fertility to everyone around.") saynn("When approaching there is one distinct smell coming from Azazel - his own pheromones advertising his fertility to everyone around.")
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 a womb tattoo seemingly glowing a bit in shade of red.") 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 a womb tattoo seemingly glowing a bit in shade of red.")
saynn("On his back words ”ISSIX'S PROPERTY” branded onto the skin - a mark of his master.") saynn("On his lower back words ”PROPERTY OF ISSIX” branded onto the skin - a mark of his master.")
addButton("Back", "Do something else", "azazelmain") addButton("Back", "Do something else", "azazelmain")
if state == "azazelprison": if state == "azazelprison":
@ -105,12 +133,18 @@ func _run():
saynn("[say=azazel]So... Yeah... That's how I ended up here. Not a happy story, but I doubt anyone's is. Ironically, I think I'm better here, and I can still engage in sex without any stupid license.[/say]") saynn("[say=azazel]So... Yeah... That's how I ended up here. Not a happy story, but I doubt anyone's is. Ironically, I think I'm better here, and I can still engage in sex without any stupid license.[/say]")
addButton("Back", "Do something else", "azazelmain") addButton("Back", "Do something else", "azazelmain")
if state == "lamiatalk":
addButton("Try drawing", "You can try and draw something with lamia", "lamiadraw") # TODO
func _react(_action: String, _args): func _react(_action: String, _args):
if(_action == "catnip"): if(_action == "catnip"):
GM.pc.getInventory().removeXOfOrDestroy("CatnipPlant", 1) GM.pc.getInventory().removeXOfOrDestroy("CatnipPlant", 1)
GM.main.getCharacter("azazel").addLust(10) GM.main.getCharacter("azazel").addLust(10)
GM.main.increaseModuleFlag("IssixModule", "Azazel_Affection_given") GM.main.increaseModuleFlag("IssixModule", "Azazel_Affection_given")
if _action == "hiisienergy":
GM.pc.getInventory().addItem(GlobalRegistry.createItem("EnergyDrink"))
if(_action == "endthescene"): if(_action == "endthescene"):
endScene() endScene()
return return

View file

@ -1,24 +1,24 @@
[![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com) [![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com)
# Pierre # Issix
A mod for Broken Dreams Correctional Center. Introduces Pierre (name will be changed later on for compatibility reasons) and his harem of sl- pets. A mod for Broken Dreams Correctional Center. Introduces Issix and his harem of s[l](https://kenashcorp.bandcamp.com/track/im-your-slave)- pets.
# Existing content (assuming I don't get lazy before 1.0) # Existing content (assuming I don't get lazy before 1.0)
- Pierre - a dragon-demon hybrid, he owns 3 pets, all of them have some story that you can uncover (and which may be expanded in the future) - Issix - a dragon-demon hybrid, he owns 3 pets, all of them have some story that you can uncover (and which may be expanded in the future)
- Azazel - a feline breeding bitch - Azazel - a feline breeding bitch
- Hiisi - a canine pup - Hiisi - a canine pup
- Lamia - a troubled fox - Lamia - a troubled fox
- One quest that leads to your enslavement by Pierre (currently only implemented voluntary enslavement as a pet, this is a sweet type of enslavement), there are a bunch of fun elements in it, like figuring out an ASCII map or filling a questionnaire with a possible little twist - One quest that leads to your enslavement by Issix (currently only implemented voluntary enslavement as a pet, this is a sweet type of enslavement), there are a bunch of fun elements in it, like figuring out an ASCII map or filling a questionnaire with a possible little twist
- Each pet has their own mechanic that increases their trust/affection towards the player - Each pet has their own mechanic that increases their trust/affection towards the player
- Finally, voluntary enslavement, if you eventually get enslaved it may make your game a bit more difficult - Finally, voluntary enslavement, if you eventually get enslaved it may make your game a bit more difficult
- Skill tree? (currently no idea how this is going to be implemented) - Some branches of choices and situations. Mod offers some unique branches in few places that can change from play-through to play-through.
# Goals # Goals
## Mod's audience ## 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**. 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 ## 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. In this mod I'm trying my best to still feel like player is enslaved while at the same time let them continue playing the game. This is not an easy task to do, but probably better than eternity of being stuck in one time playing card game with another pet. 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. In this mod I'm trying my best to still feel like player is enslaved while at the same time let them continue playing the game with full functionality. This is not an easy task to do, but probably better than eternity of being stuck in one time playing card game with another pet.
## Planned content ## Planned content
Mod is driven by BDCC players [giving](https://github.com/Friskygote/Issix-mod/discussions) mod's author headpats and calling him a good boy, without those author might run out of motivation ;) Mod is driven by BDCC players [giving](https://github.com/Friskygote/Issix-mod/discussions) mod's author headpats and calling him a good boy, without those author might run out of motivation ;)
@ -45,6 +45,7 @@ So many reasons.
- I wanted to see if content I write can still have effect on myself (I doubt lol). - 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 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) - 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)
- I wanted to make a statement. I'm writing this mod in times where certain awful people gain power over incredibly powerful state in the world, their policies represent oppression against LGBT+ creatures. So in part, this mod is part of my advocacy for sex-positivity as well as acceptance of LGBT+ creatures, and therefore a political statement.
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. 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.